Hummingbird Page Speed Optimization - Version 1.6.1

Version Description

( 2017-09-13 ) = - New: Add font types to browser and cache rules - New: Automatic detection of HTTP/2 and disable of combine function in minification - Enhance: Add a button to the cache page for saving settings (instead of ajax) - Enhance: Add a scrollbar to expiry settings dropdown - Enhance: Better sync between Hummingbird and the Hub - Enhance: Improve error and zone handling for Cloudflare - Enhance: Links to support articles will now open in a new window - Enhance: Gravatar caching will respect the classes of original HTML elements - Enhance: Accessibility on hidden form elements - Enhance: Gzip module page layout - Enhance: Add Gravatar support when using get_avatar_url() - Fix: Uninstall will clean out all the database rows, created by the plugin - Fix: Layout issues on caching page - Fix: Notice styles - Fix: Do not cache Gravatars in admin - Fix: Update translation strings - Fix: Minification link visible in admin bar for non-admins in multisite - Fix: Incorrect date on dashboard and Uptime module when site is down

Download this release

Release Info

Developer vanyukov
Plugin Icon 128x128 Hummingbird Page Speed Optimization
Version 1.6.1
Comparing to
See all releases

Code changes from version 1.6.0 to 1.6.1

_src/admin/js/admin-caching.js CHANGED
@@ -9,14 +9,10 @@ import Fetcher from './utils/fetcher';
9
  selectedServer: '',
10
  $serverSelector: null,
11
  $serverInstructions: [],
12
- $expirySelectors: [],
13
  $snippets: [],
14
 
15
  init: function () {
16
  let self = this,
17
- cachingMetabox = $('#wphb-box-caching-settings'),
18
- cachingContent = cachingMetabox.find('.settings-form'),
19
- cachingContentSpinner = cachingContent.find('.spinner'),
20
  cloudflareLink = $('#wphb-box-caching-settings #connect-cloudflare-link');
21
 
22
  new Clipboard('.wphb-code-snippet .button');
@@ -28,6 +24,7 @@ import Fetcher from './utils/fetcher';
28
  e.preventDefault();
29
  $('#wphb-server-type').val('cloudflare').trigger('wpmu:change');
30
  self.hideCurrentInstructions();
 
31
  self.showServerInstructions('cloudflare');
32
  self.selectedServer = 'cloudflare';
33
  $('html, body').animate({ scrollTop: $('#cloudflare-steps').offset().top }, 'slow');
@@ -35,7 +32,6 @@ import Fetcher from './utils/fetcher';
35
 
36
  this.$serverSelector = $( '#wphb-server-type' );
37
  this.selectedServer = this.$serverSelector.val();
38
- //this.$spinner = $('#wphb-box-caching-enable .spinner');
39
 
40
  self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();
41
  self.$snippets.LiteSpeed = $('#wphb-code-snippet-litespeed').find('pre').first();
@@ -46,33 +42,6 @@ import Fetcher from './utils/fetcher';
46
  self.$serverInstructions[ $(this).data('server') ] = $(this);
47
  });
48
 
49
- let expirySelectors = $( '.wphb-expiry-select' );
50
-
51
- expirySelectors.each( function() {
52
- const type = $(this).data('type');
53
- if ( type ) {
54
- $(this).change( function() {
55
- //self.$spinner.css( 'visibility', 'visible' );
56
- cachingContent.find('.wphb-content').hide();
57
- cachingContentSpinner.fadeIn();
58
- $('.wphb-notice').hide();
59
-
60
- // Expiration selector has changed
61
- ( function( element ) {
62
- const value = $( element ).val();
63
- // Change the plugin settings
64
- Fetcher.caching.setExpiration( type, value )
65
- .then( () => {
66
- // And reload the code snippet
67
- self.reloadSnippets();
68
- });
69
- return false;
70
- })( this );
71
- });
72
- }
73
-
74
- });
75
-
76
  this.showServerInstructions( this.selectedServer );
77
 
78
  this.$serverSelector.change( function() {
@@ -81,15 +50,31 @@ import Fetcher from './utils/fetcher';
81
  self.showServerInstructions( value );
82
  self.setServer(value);
83
  self.selectedServer = value;
 
 
 
84
  });
85
 
86
- $("input[name='expiry-set-type']").on( 'click', function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  if ( 'expiry-all-types' === $(this).attr('id') ) {
88
- $('.settings-form').find( "[data='expiry-single-type']" ).hide();
89
- $('.settings-form').find( "[data='expiry-all-types']" ).show();
90
  } else if ( 'expiry-single-type' === $(this).attr('id') ) {
91
- $('.settings-form').find( "[data='expiry-all-types']" ).hide();
92
- $('.settings-form').find( "[data='expiry-single-type']" ).show();
93
  }
94
  });
95
 
@@ -100,6 +85,14 @@ import Fetcher from './utils/fetcher';
100
  Fetcher.caching.setServer( value );
101
  },
102
 
 
 
 
 
 
 
 
 
103
  hideCurrentInstructions: function() {
104
  let selected = this.selectedServer;
105
  if ( this.$serverInstructions[ selected ] ) {
@@ -152,7 +145,6 @@ import Fetcher from './utils/fetcher';
152
  $( '#wphb-notice-code-snippet-updated' ).show();
153
  location.href = self.strings.recheckURL + '&caching-updated=true';
154
  }
155
- //self.$spinner.css( 'visibility', 'hidden' );
156
  });
157
  }
158
  }
9
  selectedServer: '',
10
  $serverSelector: null,
11
  $serverInstructions: [],
 
12
  $snippets: [],
13
 
14
  init: function () {
15
  let self = this,
 
 
 
16
  cloudflareLink = $('#wphb-box-caching-settings #connect-cloudflare-link');
17
 
18
  new Clipboard('.wphb-code-snippet .button');
24
  e.preventDefault();
25
  $('#wphb-server-type').val('cloudflare').trigger('wpmu:change');
26
  self.hideCurrentInstructions();
27
+ self.setServer('cloudflare');
28
  self.showServerInstructions('cloudflare');
29
  self.selectedServer = 'cloudflare';
30
  $('html, body').animate({ scrollTop: $('#cloudflare-steps').offset().top }, 'slow');
32
 
33
  this.$serverSelector = $( '#wphb-server-type' );
34
  this.selectedServer = this.$serverSelector.val();
 
35
 
36
  self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();
37
  self.$snippets.LiteSpeed = $('#wphb-code-snippet-litespeed').find('pre').first();
42
  self.$serverInstructions[ $(this).data('server') ] = $(this);
43
  });
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  this.showServerInstructions( this.selectedServer );
46
 
47
  this.$serverSelector.change( function() {
50
  self.showServerInstructions( value );
51
  self.setServer(value);
52
  self.selectedServer = value;
53
+ // Update tab size on select change.
54
+ self.updateTabSize();
55
+ $('.hb-server-type').val( value );
56
  });
57
 
58
+ let expiryInput = $("input[name='expiry-set-type']");
59
+ let expirySettingsForm = $('.settings-form');
60
+ expiryInput.each( function () {
61
+ if ( this.checked ) {
62
+ if ( 'expiry-all-types' === $(this).attr('id') ) {
63
+ expirySettingsForm.find( "[data='expiry-single-type']" ).hide();
64
+ expirySettingsForm.find( "[data='expiry-all-types']" ).show();
65
+ } else if ( 'expiry-single-type' === $(this).attr('id') ) {
66
+ expirySettingsForm.find( "[data='expiry-all-types']" ).hide();
67
+ expirySettingsForm.find( "[data='expiry-single-type']" ).show();
68
+ }
69
+ }
70
+ });
71
+ expiryInput.on( 'click', function () {
72
  if ( 'expiry-all-types' === $(this).attr('id') ) {
73
+ expirySettingsForm.find( "[data='expiry-single-type']" ).hide();
74
+ expirySettingsForm.find( "[data='expiry-all-types']" ).show();
75
  } else if ( 'expiry-single-type' === $(this).attr('id') ) {
76
+ expirySettingsForm.find( "[data='expiry-all-types']" ).hide();
77
+ expirySettingsForm.find( "[data='expiry-single-type']" ).show();
78
  }
79
  });
80
 
85
  Fetcher.caching.setServer( value );
86
  },
87
 
88
+ updateTabSize: function() {
89
+ let jq = $( '#wphb-server-instructions-' + this.selectedServer.toLowerCase() ).find( '.tabs' ),
90
+ current = jq.find('.tab > input:checked').parent(),
91
+ content = current.find('.content');
92
+
93
+ jq.height( content.outerHeight() + current.outerHeight() - 6 );
94
+ },
95
+
96
  hideCurrentInstructions: function() {
97
  let selected = this.selectedServer;
98
  if ( this.$serverInstructions[ selected ] ) {
145
  $( '#wphb-notice-code-snippet-updated' ).show();
146
  location.href = self.strings.recheckURL + '&caching-updated=true';
147
  }
 
148
  });
149
  }
150
  }
_src/admin/js/admin-dashboard.js CHANGED
@@ -80,7 +80,7 @@ import Fetcher from './utils/fetcher';
80
  window.WDP.showOverlay("#run-performance-test-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
81
 
82
  // Run performance test
83
- const module = WPHB_Admin.getModule('performance');
84
  module.performanceTest( this.strings.finishedTestURLsLink );
85
  }
86
  };
80
  window.WDP.showOverlay("#run-performance-test-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
81
 
82
  // Run performance test
83
+ const module = window.WPHB_Admin.getModule('performance');
84
  module.performanceTest( this.strings.finishedTestURLsLink );
85
  }
86
  };
_src/admin/js/admin-main.js CHANGED
@@ -1,3 +1,5 @@
 
 
1
  ( function( $ ) {
2
  'use strict';
3
 
@@ -6,6 +8,7 @@
6
  // Common functionality to all screens
7
  init: function() {
8
 
 
9
  $('body').on('change', '.mobile-nav', function () {
10
  let url = $(this).val();
11
  if (url.length > 0) {
@@ -13,6 +16,12 @@
13
  }
14
  });
15
 
 
 
 
 
 
 
16
  function updatePerformanceGraph($wrap){
17
  let $item = $wrap.find('.wphb-score-result-label'),
18
  val = parseInt($item.text(), 10) || 100,
1
+ import Fetcher from './utils/fetcher';
2
+
3
  ( function( $ ) {
4
  'use strict';
5
 
8
  // Common functionality to all screens
9
  init: function() {
10
 
11
+ // Mobile navigation links.
12
  $('body').on('change', '.mobile-nav', function () {
13
  let url = $(this).val();
14
  if (url.length > 0) {
16
  }
17
  });
18
 
19
+ // Dismiss notice via an ajax call.
20
+ $('#wphb-dismissable').on('click', '.close', function() {
21
+ const notice_id = $(this).parent().attr('data-id');
22
+ Fetcher.notice.dismiss( notice_id );
23
+ });
24
+
25
  function updatePerformanceGraph($wrap){
26
  let $item = $wrap.find('.wphb-score-result-label'),
27
  val = parseInt($item.text(), 10) || 100,
_src/admin/js/utils/fetcher.js CHANGED
@@ -20,21 +20,23 @@ function Fetcher() {
20
  }
21
 
22
  const methods = {
23
- /**
24
- * Caching module actions.
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  */
26
  caching: {
27
- /**
28
- * Set expiration for browser caching.
29
- *
30
- * @param type File type.
31
- * @param value Expiry value.
32
- */
33
- setExpiration: ( type, value ) => {
34
- const action = actionPrefix + 'caching_set_expiration';
35
- return request( action, { type, value }, 'POST' );
36
- },
37
-
38
  /**
39
  * Set server type.
40
  *
@@ -64,7 +66,7 @@ function Fetcher() {
64
  */
65
  cloudflare: {
66
  /**
67
- * Connect to CloudFlare.
68
  *
69
  * @param step
70
  * @param formData
@@ -79,7 +81,7 @@ function Fetcher() {
79
  },
80
 
81
  /**
82
- * Set expiry for CloudFlare cache.
83
  *
84
  * @param value Expiry value.
85
  */
@@ -89,7 +91,7 @@ function Fetcher() {
89
  },
90
 
91
  /**
92
- * Purge CloudFlare cache.
93
  */
94
  purgeCache: () => {
95
  const action = actionPrefix + 'cloudflare_purge_cache';
20
  }
21
 
22
  const methods = {
23
+ /**
24
+ * Notices actions.
25
+ */
26
+ notice: {
27
+ /**
28
+ * Dismiss notice
29
+ * @param id Notice id.
30
+ */
31
+ dismiss: ( id ) => {
32
+ const action = actionPrefix + 'notice_dismiss';
33
+ return request( action, { id }, 'POST' );
34
+ }
35
+ },
36
+ /**
37
+ * Caching module actions.
38
  */
39
  caching: {
 
 
 
 
 
 
 
 
 
 
 
40
  /**
41
  * Set server type.
42
  *
66
  */
67
  cloudflare: {
68
  /**
69
+ * Connect to Cloudflare.
70
  *
71
  * @param step
72
  * @param formData
81
  },
82
 
83
  /**
84
+ * Set expiry for Cloudflare cache.
85
  *
86
  * @param value Expiry value.
87
  */
91
  },
92
 
93
  /**
94
+ * Purge Cloudflare cache.
95
  */
96
  purgeCache: () => {
97
  const action = actionPrefix + 'cloudflare_purge_cache';
admin/abstract-class-admin-page.php CHANGED
@@ -77,12 +77,18 @@ abstract class WP_Hummingbird_Admin_Page {
77
 
78
  /**
79
  * Load an admin view
 
 
 
 
 
 
80
  */
81
  public function view( $name, $args = array(), $echo = true ) {
82
  $file = wphb_plugin_dir() . "admin/views/$name.php";
83
  $content = '';
84
 
85
- if ( is_file ( $file ) ) {
86
 
87
  ob_start();
88
 
@@ -101,16 +107,16 @@ abstract class WP_Hummingbird_Admin_Page {
101
  $content = ob_get_clean();
102
  }
103
 
104
- if ( ! $echo )
105
  return $content;
 
106
 
107
  echo $content;
108
-
109
  }
110
 
111
  protected function view_exists( $name ) {
112
  $file = wphb_plugin_dir() . "admin/views/$name.php";
113
- return is_file ( $file );
114
  }
115
 
116
  /**
@@ -118,8 +124,8 @@ abstract class WP_Hummingbird_Admin_Page {
118
  */
119
  public function add_screen_hooks() {
120
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
121
- add_action( 'admin_notices', array( $this, 'notices' ) );
122
- add_action( 'network_admin_notices', array( $this, 'notices' ) );
123
  }
124
 
125
  public function notices() {}
@@ -140,7 +146,6 @@ abstract class WP_Hummingbird_Admin_Page {
140
 
141
  // Scripts
142
  wphb_enqueue_admin_scripts( WPHB_VERSION );
143
-
144
  }
145
 
146
  /**
@@ -159,24 +164,35 @@ abstract class WP_Hummingbird_Admin_Page {
159
  */
160
  public function add_meta_box( $id, $title, $callback = '', $callback_header = '', $callback_footer = '', $context = 'main', $args = array() ) {
161
  $default_args = array(
162
- 'box_class' => 'dev-box',
163
- 'box_header_class' => 'box-title',
164
- 'box_content_class' => 'box-content',
165
- 'box_footer_class' => 'box-footer'
166
  );
167
 
168
  $args = wp_parse_args( $args, $default_args );
169
 
170
- if ( ! isset( $this->meta_boxes[ $this->slug ] ) )
171
  $this->meta_boxes[ $this->slug ] = array();
 
172
 
173
- if ( ! isset( $this->meta_boxes[ $this->slug ][ $context ] ) )
174
  $this->meta_boxes[ $this->slug ][ $context ] = array();
 
175
 
176
- if ( !isset($this->meta_boxes[ $this->slug ][ $context ] ) )
177
  $this->meta_boxes[ $this->slug ][ $context ] = array();
 
 
 
 
 
 
 
 
 
 
178
 
179
- $meta_box = array('id' => $id, 'title' => $title, 'callback' => $callback, 'callback_header' => $callback_header, 'callback_footer' => $callback_footer, 'args' => $args );
180
  /**
181
  * Allow to filter a WP Hummingbird Metabox
182
  *
@@ -197,16 +213,23 @@ abstract class WP_Hummingbird_Admin_Page {
197
  * @param string $context
198
  */
199
  protected function do_meta_boxes( $context = 'main' ) {
200
- if ( empty( $this->meta_boxes[ $this->slug ][ $context ] ) )
201
  return;
 
202
 
203
  do_action_ref_array( 'wphb_admin_do_meta_boxes_' . $this->slug, array( &$this ) );
204
 
205
  foreach ( $this->meta_boxes[ $this->slug ][ $context ] as $id => $box ) {
206
- $args = array( 'title' => $box['title'], 'id' => $id, 'callback' => $box['callback'], 'callback_header' => $box['callback_header'], 'callback_footer' => $box['callback_footer'], 'args' => $box['args'] );
 
 
 
 
 
 
 
207
  $this->view( 'meta-box', $args );
208
  }
209
-
210
  }
211
 
212
  /**
@@ -222,7 +245,6 @@ abstract class WP_Hummingbird_Admin_Page {
222
  *
223
  */
224
  protected function render_header() {
225
-
226
  ?>
227
  <section id="header">
228
  <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
@@ -236,10 +258,8 @@ abstract class WP_Hummingbird_Admin_Page {
236
  */
237
  public function render() {
238
  ?>
239
-
240
  <div id="container" class="wrap wrap-wp-hummingbird wrap-wp-hummingbird-page <?php echo 'wrap-' . $this->slug; ?>">
241
-
242
- <?php
243
  if ( isset( $_GET['updated'] ) ) :
244
  $this->show_notice( 'updated', __( 'Settings Updated', 'wphb' ), 'success' );
245
  endif;
@@ -247,7 +267,7 @@ abstract class WP_Hummingbird_Admin_Page {
247
  $this->render_header();
248
 
249
  $this->render_inner_content();
250
- ?>
251
  <div class="footer-love">
252
  <?php printf( __( 'Made with %s by WPMU DEV', 'wphb' ), '<span class="dashicons-heart dashicons"></span>' ); ?>
253
  </div>
@@ -255,7 +275,7 @@ abstract class WP_Hummingbird_Admin_Page {
255
 
256
  <script>
257
  jQuery(document).ready( function() {
258
- WPHB_Admin.getModule( 'notices' );
259
  });
260
 
261
  // Avoid moving dashboard notice under h2
@@ -275,28 +295,31 @@ abstract class WP_Hummingbird_Admin_Page {
275
  /**
276
  * Show an admin notice
277
  *
278
- * @param string $id Unique identificator for the notice
279
- * @param string $message The notice text
280
- * @param string $class Class for the notice wrapper
281
- * @param bool|false $dismissable if is dissmisable or not
282
  */
283
- public function show_notice( $id, $message, $class = 'error', $dismissable = false ) {
284
  // Is already dismissed ?
285
- if ( $dismissable && get_user_meta( get_current_user_id(), 'wphb-notice-' . $id ) )
286
  return;
 
287
 
288
- if ( ! current_user_can( wphb_get_admin_capability() ) )
289
  return;
 
290
 
291
- if ( in_array( $id, self::$displayed_notices ) )
292
  return;
 
293
 
294
  $nonce = '';
295
  if ( $dismissable ) {
296
  $nonce = wp_create_nonce( 'wphb-dismiss' );
297
  }
298
 
299
- $args = compact( 'message', 'id', 'class', 'dismissable', 'nonce' );
300
  $this->view( 'notice', $args );
301
 
302
  self::$displayed_notices[] = $id;
@@ -311,9 +334,9 @@ abstract class WP_Hummingbird_Admin_Page {
311
  if ( is_multisite() && is_network_admin() ) {
312
  global $_parent_pages;
313
 
314
- if ( isset( $_parent_pages[$this->slug] ) ) {
315
- $parent_slug = $_parent_pages[$this->slug];
316
- if ( $parent_slug && ! isset( $_parent_pages[$parent_slug] ) ) {
317
  $url = network_admin_url( add_query_arg( 'page', $this->slug, $parent_slug ) );
318
  } else {
319
  $url = network_admin_url( 'admin.php?page=' . $this->slug );
@@ -322,11 +345,10 @@ abstract class WP_Hummingbird_Admin_Page {
322
  $url = '';
323
  }
324
 
325
- $url = esc_url($url);
326
 
327
  return $url;
328
- }
329
- else {
330
  return menu_page_url( $this->slug, false );
331
  }
332
  }
@@ -363,7 +385,9 @@ abstract class WP_Hummingbird_Admin_Page {
363
  * Display tabs navigation
364
  */
365
  public function show_tabs() {
366
- $this->view( 'tabs', array( 'tabs' => $this->get_tabs() ) );
 
 
367
  }
368
 
369
  /**
@@ -381,8 +405,7 @@ abstract class WP_Hummingbird_Admin_Page {
381
 
382
  if ( is_multisite() && is_network_admin() ) {
383
  return network_admin_url( 'admin.php?page=' . $this->slug . '&view=' . $tab );
384
- }
385
- else {
386
  return admin_url( 'admin.php?page=' . $this->slug . '&view=' . $tab );
387
  }
388
  }
@@ -402,4 +425,4 @@ abstract class WP_Hummingbird_Admin_Page {
402
 
403
  return $tabs[ $tab ];
404
  }
405
- }
77
 
78
  /**
79
  * Load an admin view
80
+ *
81
+ * @param $name
82
+ * @param array $args
83
+ * @param bool $echo
84
+ *
85
+ * @return string
86
  */
87
  public function view( $name, $args = array(), $echo = true ) {
88
  $file = wphb_plugin_dir() . "admin/views/$name.php";
89
  $content = '';
90
 
91
+ if ( is_file( $file ) ) {
92
 
93
  ob_start();
94
 
107
  $content = ob_get_clean();
108
  }
109
 
110
+ if ( ! $echo ) {
111
  return $content;
112
+ }
113
 
114
  echo $content;
 
115
  }
116
 
117
  protected function view_exists( $name ) {
118
  $file = wphb_plugin_dir() . "admin/views/$name.php";
119
+ return is_file( $file );
120
  }
121
 
122
  /**
124
  */
125
  public function add_screen_hooks() {
126
  add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
127
+ add_action( 'admin_notices', array( $this, 'notices' ) );
128
+ add_action( 'network_admin_notices', array( $this, 'notices' ) );
129
  }
130
 
131
  public function notices() {}
146
 
147
  // Scripts
148
  wphb_enqueue_admin_scripts( WPHB_VERSION );
 
149
  }
150
 
151
  /**
164
  */
165
  public function add_meta_box( $id, $title, $callback = '', $callback_header = '', $callback_footer = '', $context = 'main', $args = array() ) {
166
  $default_args = array(
167
+ 'box_class' => 'dev-box',
168
+ 'box_header_class' => 'box-title',
169
+ 'box_content_class' => 'box-content',
170
+ 'box_footer_class' => 'box-footer',
171
  );
172
 
173
  $args = wp_parse_args( $args, $default_args );
174
 
175
+ if ( ! isset( $this->meta_boxes[ $this->slug ] ) ) {
176
  $this->meta_boxes[ $this->slug ] = array();
177
+ }
178
 
179
+ if ( ! isset( $this->meta_boxes[ $this->slug ][ $context ] ) ) {
180
  $this->meta_boxes[ $this->slug ][ $context ] = array();
181
+ }
182
 
183
+ if ( ! isset( $this->meta_boxes[ $this->slug ][ $context ] ) ) {
184
  $this->meta_boxes[ $this->slug ][ $context ] = array();
185
+ }
186
+
187
+ $meta_box = array(
188
+ 'id' => $id,
189
+ 'title' => $title,
190
+ 'callback' => $callback,
191
+ 'callback_header' => $callback_header,
192
+ 'callback_footer' => $callback_footer,
193
+ 'args' => $args,
194
+ );
195
 
 
196
  /**
197
  * Allow to filter a WP Hummingbird Metabox
198
  *
213
  * @param string $context
214
  */
215
  protected function do_meta_boxes( $context = 'main' ) {
216
+ if ( empty( $this->meta_boxes[ $this->slug ][ $context ] ) ) {
217
  return;
218
+ }
219
 
220
  do_action_ref_array( 'wphb_admin_do_meta_boxes_' . $this->slug, array( &$this ) );
221
 
222
  foreach ( $this->meta_boxes[ $this->slug ][ $context ] as $id => $box ) {
223
+ $args = array(
224
+ 'title' => $box['title'],
225
+ 'id' => $id,
226
+ 'callback' => $box['callback'],
227
+ 'callback_header' => $box['callback_header'],
228
+ 'callback_footer' => $box['callback_footer'],
229
+ 'args' => $box['args'],
230
+ );
231
  $this->view( 'meta-box', $args );
232
  }
 
233
  }
234
 
235
  /**
245
  *
246
  */
247
  protected function render_header() {
 
248
  ?>
249
  <section id="header">
250
  <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
258
  */
259
  public function render() {
260
  ?>
 
261
  <div id="container" class="wrap wrap-wp-hummingbird wrap-wp-hummingbird-page <?php echo 'wrap-' . $this->slug; ?>">
262
+ <?php
 
263
  if ( isset( $_GET['updated'] ) ) :
264
  $this->show_notice( 'updated', __( 'Settings Updated', 'wphb' ), 'success' );
265
  endif;
267
  $this->render_header();
268
 
269
  $this->render_inner_content();
270
+ ?>
271
  <div class="footer-love">
272
  <?php printf( __( 'Made with %s by WPMU DEV', 'wphb' ), '<span class="dashicons-heart dashicons"></span>' ); ?>
273
  </div>
275
 
276
  <script>
277
  jQuery(document).ready( function() {
278
+ window.WPHB_Admin.getModule( 'notices' );
279
  });
280
 
281
  // Avoid moving dashboard notice under h2
295
  /**
296
  * Show an admin notice
297
  *
298
+ * @param string $id Unique identifier for the notice.
299
+ * @param string $message The notice text.
300
+ * @param string $class Class for the notice wrapper.
301
+ * @param bool $dismissable If is dissmisable or not
302
  */
303
+ public function show_notice( $id, $message, $class = 'error', $auto_hide = false, $dismissable = false ) {
304
  // Is already dismissed ?
305
+ if ( $dismissable && 'true' === get_option( 'wphb-notice-' . $id . '-dismissed' ) ) {
306
  return;
307
+ }
308
 
309
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
310
  return;
311
+ }
312
 
313
+ if ( in_array( $id, self::$displayed_notices ) ) {
314
  return;
315
+ }
316
 
317
  $nonce = '';
318
  if ( $dismissable ) {
319
  $nonce = wp_create_nonce( 'wphb-dismiss' );
320
  }
321
 
322
+ $args = compact( 'message', 'id', 'class', 'auto_hide', 'dismissable', 'nonce' );
323
  $this->view( 'notice', $args );
324
 
325
  self::$displayed_notices[] = $id;
334
  if ( is_multisite() && is_network_admin() ) {
335
  global $_parent_pages;
336
 
337
+ if ( isset( $_parent_pages[ $this->slug ] ) ) {
338
+ $parent_slug = $_parent_pages[ $this->slug ];
339
+ if ( $parent_slug && ! isset( $_parent_pages[ $parent_slug ] ) ) {
340
  $url = network_admin_url( add_query_arg( 'page', $this->slug, $parent_slug ) );
341
  } else {
342
  $url = network_admin_url( 'admin.php?page=' . $this->slug );
345
  $url = '';
346
  }
347
 
348
+ $url = esc_url( $url );
349
 
350
  return $url;
351
+ } else {
 
352
  return menu_page_url( $this->slug, false );
353
  }
354
  }
385
  * Display tabs navigation
386
  */
387
  public function show_tabs() {
388
+ $this->view( 'tabs', array(
389
+ 'tabs' => $this->get_tabs(),
390
+ ) );
391
  }
392
 
393
  /**
405
 
406
  if ( is_multisite() && is_network_admin() ) {
407
  return network_admin_url( 'admin.php?page=' . $this->slug . '&view=' . $tab );
408
+ } else {
 
409
  return admin_url( 'admin.php?page=' . $this->slug . '&view=' . $tab );
410
  }
411
  }
425
 
426
  return $tabs[ $tab ];
427
  }
428
+ }
admin/assets/css/admin.css CHANGED
@@ -456,7 +456,7 @@ button.notice-dismiss {
456
  .wpmud .dev-list > li .list-label {
457
  font-size: 13px;
458
  font-weight: 500;
459
- line-height: 30px;
460
  padding: 15px 10px 15px 0
461
  }
462
  .wpmud .dev-list > li .list-data {
@@ -1105,6 +1105,9 @@ button.notice-dismiss {
1105
  .wpmud .wphb-notice:not(.notice) p:last-of-type {
1106
  margin: 0;
1107
  }
 
 
 
1108
  .wpmud .wphb-notice p a {
1109
  font-weight: 500;
1110
  }
@@ -1161,7 +1164,8 @@ button.notice-dismiss {
1161
  .wpmud .wphb-notice-success p:first-child:before,
1162
  .wpmud .wphb-notice-error p:first-child:before,
1163
  .wpmud .wphb-notice-warning p:first-child:before,
1164
- .wpmud .wphb-notice-blue p:first-child:before {
 
1165
  font-family: 'hummingbird', sans-serif;
1166
  font-size: 20px;
1167
  vertical-align: middle;
@@ -1186,7 +1190,8 @@ button.notice-dismiss {
1186
  background-color: #FFF5D5;
1187
  color: #333333;
1188
  }
1189
- .wpmud .wphb-notice-blue {
 
1190
  background-color: #E1F6FF;
1191
  margin-top: 30px;
1192
  }
@@ -1216,6 +1221,10 @@ button.notice-dismiss {
1216
  content: '\e903';
1217
  color: #17A8E3;
1218
  }
 
 
 
 
1219
  .wpmud .dev-overlay .wphb-notice-warning p {
1220
  font-size: 14px;
1221
  line-height: 22px;
@@ -2144,6 +2153,7 @@ button.notice-dismiss {
2144
  }
2145
  .wpmud div.wphb-block-entry {
2146
  width: 100%;
 
2147
  }
2148
  .wpmud .wphb-block-entry-third span.not-present {
2149
  font-size: 55px;
@@ -2565,6 +2575,7 @@ only screen and ( min-resolution: 2dppx) {
2565
  .wpmud .wrap-wphb-performance .scan-settings .buttons {
2566
  margin-top: 30px;
2567
  }
 
2568
  .wpmud .wrap-wphb-performance .list-results {
2569
  max-height: 200px;
2570
  overflow-y: scroll;
@@ -3036,6 +3047,13 @@ only screen and ( min-resolution: 2dppx) {
3036
  margin-top: 0;
3037
  }
3038
 
 
 
 
 
 
 
 
3039
  .wpmud .wphb-code-snippet .button {
3040
  position: absolute;
3041
  left: 100%;
@@ -3124,7 +3142,7 @@ only screen and ( min-resolution: 2dppx) {
3124
  margin-left: 20px;
3125
  }
3126
  .wpmud .wphb-filename-info {
3127
- max-width: 350px;
3128
  }
3129
  }
3130
 
@@ -3278,10 +3296,10 @@ only screen and ( min-resolution: 2dppx) {
3278
  /* Box: Content w/Image (left) */
3279
  .wpmud .content-box-two-cols-image-left .wphb-block-entry {
3280
  text-align: center;
 
3281
  }
3282
  .wpmud .content-box-two-cols-image-left .wphb-block-entry-image {
3283
- float: none;
3284
- margin-bottom: 30px;
3285
  }
3286
  .wpmud .wphb-block-entry-third {
3287
  width: 49%;
456
  .wpmud .dev-list > li .list-label {
457
  font-size: 13px;
458
  font-weight: 500;
459
+ line-height: 21px;
460
  padding: 15px 10px 15px 0
461
  }
462
  .wpmud .dev-list > li .list-data {
1105
  .wpmud .wphb-notice:not(.notice) p:last-of-type {
1106
  margin: 0;
1107
  }
1108
+ .wpmud .wphb-notice:not(.notice) .buttons {
1109
+ margin: 10px 30px 0;
1110
+ }
1111
  .wpmud .wphb-notice p a {
1112
  font-weight: 500;
1113
  }
1164
  .wpmud .wphb-notice-success p:first-child:before,
1165
  .wpmud .wphb-notice-error p:first-child:before,
1166
  .wpmud .wphb-notice-warning p:first-child:before,
1167
+ .wpmud .wphb-notice-blue p:first-child:before,
1168
+ .wpmud .wphb-notice-blue-info p:first-child:before {
1169
  font-family: 'hummingbird', sans-serif;
1170
  font-size: 20px;
1171
  vertical-align: middle;
1190
  background-color: #FFF5D5;
1191
  color: #333333;
1192
  }
1193
+ .wpmud .wphb-notice-blue,
1194
+ .wpmud .wphb-notice-blue-info {
1195
  background-color: #E1F6FF;
1196
  margin-top: 30px;
1197
  }
1221
  content: '\e903';
1222
  color: #17A8E3;
1223
  }
1224
+ .wpmud .wphb-notice-blue-info p:before {
1225
+ content: '\e902';
1226
+ color: #17A8E3;
1227
+ }
1228
  .wpmud .dev-overlay .wphb-notice-warning p {
1229
  font-size: 14px;
1230
  line-height: 22px;
2153
  }
2154
  .wpmud div.wphb-block-entry {
2155
  width: 100%;
2156
+ min-height: 172px;
2157
  }
2158
  .wpmud .wphb-block-entry-third span.not-present {
2159
  font-size: 55px;
2575
  .wpmud .wrap-wphb-performance .scan-settings .buttons {
2576
  margin-top: 30px;
2577
  }
2578
+ .wpmud .wrap-wphb-caching .list-results,
2579
  .wpmud .wrap-wphb-performance .list-results {
2580
  max-height: 200px;
2581
  overflow-y: scroll;
3047
  margin-top: 0;
3048
  }
3049
 
3050
+ .wpmud .wphb-server-instructions .tabs {
3051
+ margin: 0;
3052
+ }
3053
+ .wpmud .wphb-server-instructions .tabs .tab .content {
3054
+ padding: 30px 30px 0;
3055
+ }
3056
+
3057
  .wpmud .wphb-code-snippet .button {
3058
  position: absolute;
3059
  left: 100%;
3142
  margin-left: 20px;
3143
  }
3144
  .wpmud .wphb-filename-info {
3145
+ max-width: 349px;
3146
  }
3147
  }
3148
 
3296
  /* Box: Content w/Image (left) */
3297
  .wpmud .content-box-two-cols-image-left .wphb-block-entry {
3298
  text-align: center;
3299
+ min-height: 100%;
3300
  }
3301
  .wpmud .content-box-two-cols-image-left .wphb-block-entry-image {
3302
+ display: none;
 
3303
  }
3304
  .wpmud .wphb-block-entry-third {
3305
  width: 49%;
admin/assets/js/admin.min.js CHANGED
@@ -1,15 +1,15 @@
1
- !function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=29)}([function(t,e,n){"use strict";function i(){function t(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";o.nonce=i,o.action=t;var s={data:o,method:c};return s.url=e,new(0,n(35).Promise)(function(t,e){jQuery.ajax(s).done(t).fail(e)}).then(function(t){return r(t)})}var e=ajaxurl,i=wphb.nonces.HBFetchNonce,o={caching:{setExpiration:function(e,n){return t("wphb_caching_set_expiration",{type:e,value:n},"POST")},setServer:function(e){return t("wphb_caching_set_server_type",{value:e},"POST")},reloadSnippets:function(e){return t("wphb_caching_reload_snippet",{type:e},"POST").then(function(t){return t})}},cloudflare:{connect:function(e,n,i){return t("wphb_cloudflare_connect",{step:e,formData:n,cfData:i},"POST").then(function(t){return t})},setExpiration:function(e){return t("wphb_cloudflare_set_expiry",{value:e},"POST")},purgeCache:function(){return t("wphb_cloudflare_purge_cache",{},"POST")}},dashboard:{toggleMinification:function(e){return t("wphb_dash_toggle_network_minification",{value:e},"POST")},skipSetup:function(){return t("wphb_dash_skip_setup",{},"POST")}},minification:{toggleCDN:function(e){return t("wphb_minification_toggle_cdn",{value:e},"POST")},toggleMinification:function(e){return t("wphb_minification_toggle_minification",{value:e},"POST")},startCheck:function(){return t("wphb_minification_start_check",{},"POST")},checkStep:function(e){return t("wphb_minification_check_step",{step:e},"POST").then(function(t){return t})},finishCheck:function(){return t("wphb_minification_finish_scan",{},"POST")},cancelScan:function(){return t("wphb_minification_cancel_scan",{},"POST")}},performance:{runTest:function(){return t("wphb_performance_run_test",{},"POST").then(function(t){return t})},addRecipient:function(e,n){return t("wphb_pro_performance_add_recipient",{email:e,name:n},"POST").then(function(t){return t})},saveReportsSettings:function(e){return t("wphb_pro_performance_save_reports_settings",{data:e},"POST")}}};(0,s.default)(this,o)}function r(t){if("object"!==(void 0===t?"undefined":o(t))&&(t=JSON.parse(t)),t.success)return t.data;var e=t.data||{},n=new Error(e.message||"Error trying to fetch response from server");throw n.response=t,n}Object.defineProperty(e,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c=n(62),s=function(t){return t&&t.__esModule?t:{default:t}}(c),a=new i;e.default=a},function(t,e,n){function i(t){return null==t?void 0===t?a:s:u&&u in Object(t)?o(t):c(t)}var r=n(6),o=n(50),c=n(56),s="[object Null]",a="[object Undefined]",u=r?r.toStringTag:void 0;t.exports=i},function(t,e,n){var i=n(10),r="object"==typeof self&&self&&self.Object===Object&&self,o=i||r||Function("return this")();t.exports=o},function(t,e,n){function i(t){return null!=t&&o(t.length)&&!r(t)}var r=n(15),o=n(16);t.exports=i},function(t,e){function n(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}t.exports=n},function(t,e){function n(t){return null!=t&&"object"==typeof t}t.exports=n},function(t,e,n){var i=n(2),r=i.Symbol;t.exports=r},function(t,e,n){function i(t,e,n){var i=t[e];s.call(t,e)&&o(i,n)&&(void 0!==n||e in t)||r(t,e,n)}var r=n(8),o=n(13),c=Object.prototype,s=c.hasOwnProperty;t.exports=i},function(t,e,n){function i(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}var r=n(9);t.exports=i},function(t,e,n){var i=n(49),r=function(){try{var t=i(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=r},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n(17))},function(t,e){function n(t,e){return!!(e=null==e?i:e)&&("number"==typeof t||r.test(t))&&t>-1&&t%1==0&&t<e}var i=9007199254740991,r=/^(?:0|[1-9]\d*)$/;t.exports=n},function(t,e){function n(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||i)}var i=Object.prototype;t.exports=n},function(t,e){function n(t,e){return t===e||t!==t&&e!==e}t.exports=n},function(t,e){function n(t){return t}t.exports=n},function(t,e,n){function i(t){if(!o(t))return!1;var e=r(t);return e==s||e==a||e==c||e==u}var r=n(1),o=n(4),c="[object AsyncFunction]",s="[object Function]",a="[object GeneratorFunction]",u="[object Proxy]";t.exports=i},function(t,e){function n(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=i}var i=9007199254740991;t.exports=n},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";jQuery(document).ready(function(){WPHB_Admin.init()})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(33),o=i(r),c=n(0),s=i(c);!function(t){WPHB_Admin.caching={module:"caching",selectedServer:"",$serverSelector:null,$serverInstructions:[],$expirySelectors:[],$snippets:[],init:function(){var e=this,n=t("#wphb-box-caching-settings"),i=n.find(".settings-form"),r=i.find(".spinner"),c=t("#wphb-box-caching-settings #connect-cloudflare-link");return new o.default(".wphb-code-snippet .button"),wphbCachingStrings&&(e.strings=wphbCachingStrings),c.on("click",function(n){n.preventDefault(),t("#wphb-server-type").val("cloudflare").trigger("wpmu:change"),e.hideCurrentInstructions(),e.showServerInstructions("cloudflare"),e.selectedServer="cloudflare",t("html, body").animate({scrollTop:t("#cloudflare-steps").offset().top},"slow")}),this.$serverSelector=t("#wphb-server-type"),this.selectedServer=this.$serverSelector.val(),e.$snippets.apache=t("#wphb-code-snippet-apache").find("pre").first(),e.$snippets.LiteSpeed=t("#wphb-code-snippet-litespeed").find("pre").first(),e.$snippets.nginx=t("#wphb-code-snippet-nginx").find("pre").first(),t(".wphb-server-instructions").each(function(){e.$serverInstructions[t(this).data("server")]=t(this)}),t(".wphb-expiry-select").each(function(){var n=t(this).data("type");n&&t(this).change(function(){i.find(".wphb-content").hide(),r.fadeIn(),t(".wphb-notice").hide(),function(i){var r=t(i).val();s.default.caching.setExpiration(n,r).then(function(){e.reloadSnippets()})}(this)})}),this.showServerInstructions(this.selectedServer),this.$serverSelector.change(function(){var n=t(this).val();e.hideCurrentInstructions(),e.showServerInstructions(n),e.setServer(n),e.selectedServer=n}),t("input[name='expiry-set-type']").on("click",function(){"expiry-all-types"===t(this).attr("id")?(t(".settings-form").find("[data='expiry-single-type']").hide(),t(".settings-form").find("[data='expiry-all-types']").show()):"expiry-single-type"===t(this).attr("id")&&(t(".settings-form").find("[data='expiry-all-types']").hide(),t(".settings-form").find("[data='expiry-single-type']").show())}),this},setServer:function(t){s.default.caching.setServer(t)},hideCurrentInstructions:function(){var t=this.selectedServer;this.$serverInstructions[t]&&this.$serverInstructions[t].hide()},showServerInstructions:function(e){if(void 0!==this.$serverInstructions[e]){var n=this.$serverInstructions[e];n.show(),n.find(".tab:first-child > label").trigger("click")}"apache"===e||"LiteSpeed"===e?t(".enable-cache-wrap-"+e).show():t("#enable-cache-wrap").hide()},reloadSnippets:function(){var e=this;for(var n in e.$snippets)e.$snippets.hasOwnProperty(n)&&s.default.caching.reloadSnippets(n).then(function(n){e.$snippets[n.type].text(n.code),n.type===e.selectedServer&&("apache"===n.type&&n.updatedFile?(t("#wphb-notice-code-snippet-htaccess-updated").show(),location.href=e.strings.recheckURL+"&caching-updated=true"):"apache"===n.type&&e.strings.cacheEnabled&&!n.updatedFile?(t("#wphb-notice-code-snippet-htaccess-error").show(),location.href=e.strings.htaccessErrorURL):(t("#wphb-notice-code-snippet-updated").show(),location.href=e.strings.recheckURL+"&caching-updated=true"))})}}}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.cloudflare={module:"cloudflare",$cfSelector:!1,$spinner:!1,init:function(){this.$spinner=t(".wphb-spinner"),this.$cfSelector=t("#wphb-caching-cloudflare-summary-set-expiry");var e=this;return wphb.cloudflare.is.connected&&this.$cfSelector.change(function(){e.setExpiry.call(e,[this])}),this},setExpiry:function(e){this.displaySpinner();var n=t(e).val();r.default.cloudflare.setExpiration(n).then(function(){window.location.reload()})},displaySpinner:function(){this.$spinner.css("visibility","visible")}}}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.DashboardCloudFlare={init:function(e){this.currentStep=e.currentStep,this.data=e,this.email=e.email,this.apiKey=e.apiKey,this.$stepsContainer=t("#cloudflare-steps"),this.$infoBox=t("#cloudflare-info"),this.$spinner=t(".cloudflare-spinner"),this.$deactivateButton=t(".cloudflare-deactivate.button"),this.renderStep(this.currentStep),t("body").on("click",".cloudflare-clear-cache.button",function(e){e.preventDefault(),this.purgeCache.apply(t(e.target),[this])}.bind(this))},purgeCache:function(e){var n=this;n.attr("disabled",!0),e.showSpinner(),r.default.cloudflare.purgeCache().then(function(){var i=t("#wphb-notice-cloudflare-purge-cache");window.scrollTo(0,0),i.slideDown(),setTimeout(function(){i.slideUp()},5e3),n.removeAttr("disabled"),e.hideSpinner()})},renderStep:function(e){var n=WPHB_Admin.DashboardCloudFlare.template("#cloudflare-step-"+e),i=n(this.data),r=this;i&&(this.currentStep=e,this.$stepsContainer.hide().html(n(this.data)).fadeIn().find("form").on("submit",function(e){e.preventDefault(),r.submitStep.call(r,t(this))}),this.$spinner=this.$stepsContainer.find(".cloudflare-spinner")),this.bindEvents()},bindEvents:function(){var e=t("#cloudflare-how-to");e.hide(),t("#cloudflare-how-to-title > a").click(function(t){t.preventDefault(),e.toggle()}),this.$stepsContainer.find("select").each(function(){window.WDP.wpmuSelect(this)}),"final"===this.currentStep?this.$deactivateButton.removeClass("hidden"):this.$deactivateButton.addClass("hidden")},emptyInfoBox:function(){this.$infoBox.html(""),this.$infoBox.removeClass()},showInfoBox:function(t){this.$infoBox.addClass("wphb-notice"),this.$infoBox.addClass("wphb-notice-error"),this.$infoBox.html(t+"")},showSpinner:function(){this.$spinner.css("visibility","visible")},hideSpinner:function(){this.$spinner.css("visibility","hidden")},submitStep:function(t){var e=this;t.find("input[type=submit]").attr("disabled","true"),this.emptyInfoBox(),this.showSpinner(),r.default.cloudflare.connect(this.currentStep,t.serialize(),this.data).then(function(t){e.data=t.newData,e.renderStep(t.nextStep),"final"===t.nextStep&&(window.location.href=t.redirect)}).catch(function(t){e.showInfoBox(t)}),t.find("input[type=submit]").removeAttr("disabled"),e.hideSpinner()}},WPHB_Admin.DashboardCloudFlare.template=_.memoize(function(e){var n=void 0,i={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"};return function(r){return _.templateSettings=i,(n=n||_.template(t(e).html()))(r)}})}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.dashboard={module:"dashboard",init:function(){var e=this;return wphbDashboardStrings&&(this.strings=wphbDashboardStrings),t("#wphb-activate-minification").change(function(){var n=t(this).val();r.default.dashboard.toggleMinification(n).then(function(){var i=t('input[name="use_cdn"]');"false"===n?(i.prop("checked",!1),i.prop("disabled",!0)):i.prop("disabled",!1),e.showNotice()})}),t("#use_cdn").change(function(){var n=t(this).is(":checked");r.default.minification.toggleCDN(n).then(function(){e.showNotice()})}),t(".wphb-performance-report-item").click(function(){var e=t(this).data("performance-url");e&&(location.href=e)}),this},showNotice:function(){var e=t("#wphb-notice-minification-settings-updated");e.slideDown(),setTimeout(function(){e.slideUp()},5e3)},startQuickSetup:function(){window.WDP.showOverlay("#wphb-quick-setup-modal",{class:"wphb-modal small wphb-quick-setup-modal no-close"})},skipSetup:function(){r.default.dashboard.skipSetup().then(function(){window.location.reload(!0)})},runPerformanceTest:function(){window.WDP.showOverlay("#run-performance-test-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),WPHB_Admin.getModule("performance").performanceTest(this.strings.finishedTestURLsLink)}}}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.gzip={module:"gzip",selectedServer:"",$serverSelector:null,$serverInstructions:[],init:function(){var e=this;return this.$serverSelector=t("#wphb-server-type"),this.selectedServer=this.$serverSelector.val(),t(".wphb-server-instructions").each(function(){e.$serverInstructions[t(this).data("server")]=t(this)}),this.showServerInstructions(this.selectedServer),this.$serverSelector.change(function(){var n=t(this).val();e.hideCurrentInstructions(),e.showServerInstructions(n),e.setServer(n),e.selectedServer=n}),t("#toggle-apache-instructions").click(function(e){e.preventDefault(),t(".apache-instructions").toggle()}),t("#toggle-litespeed-instructions").click(function(e){e.preventDefault(),t(".litespeed-instructions").toggle()}),this},hideCurrentInstructions:function(){var t=this.selectedServer;this.$serverInstructions[t]&&this.$serverInstructions[t].hide()},showServerInstructions:function(e){void 0!==this.$serverInstructions[e]&&this.$serverInstructions[e].show(),"apache"===e||"LiteSpeed"===e?t("#enable-cache-wrap").show():t("#enable-cache-wrap").hide()},setServer:function(t){r.default.caching.setServer(t)}}}(jQuery)},function(t,e,n){"use strict";!function(t){var e={modules:[],init:function(){function e(t){var e=t.find(".wphb-score-result-label"),n=parseInt(e.text(),10)||100,i=t.find(".wphb-score-graph-result"),r=void 0,o=void 0,c=void 0;r=i.attr("r"),o=Math.PI*(2*r),n<0&&(n=0),n>100&&(n=100),c=(100-n)/100*o,i.css({strokeDashoffset:c})}function n(){t(".wphb-performance-report-overall-score").each(function(){e(t(this))}),t(".wphb-performance-report-current-score").each(function(){e(t(this))}),t(".wphb-performance-report-item-score").each(function(){e(t(this))})}t("body").on("change",".mobile-nav",function(){var e=t(this).val();e.length>0&&(location.href=e)}),window.register_events_performance=function(){setTimeout(n,500)},t(function(){setTimeout(n,500)})},initModule:function(t){return this.hasOwnProperty(t)?(this.modules[t]=this[t].init(),this.modules[t]):{}},getModule:function(t){return void 0!==this.modules[t]?this.modules[t]:this.initModule(t)}};e.utils={membershipModal:{open:function(){t("#wphb-upgrade-membership-modal-link").trigger("click")}},post:function(e,n){return e.action="wphb_ajax",e.module=n,t.ajax({url:ajaxurl,method:"POST",data:e})}},e.notices={init:function(){t(".wphb-notice:not(.notice) a.wphb-dismiss").click(function(e){e.preventDefault();t(this).data("id"),t(this).data("nonce");t(this).parent(".error").hide()})}},window.WPHB_Admin=e}(jQuery)},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(0),o=i(r),c=n(34),s=n(30),a=i(s),u=n(31),l=i(u),f=n(32),p=i(f);!function(t){WPHB_Admin.minification={$checkFilesButton:null,$checkFilesResultsContainer:null,module:"minification",checkURLSList:null,checkedURLS:0,$spinner:null,init:function(){var e=this,n=this;this.scanner=new p.default(wphb.minification.get.totalSteps,wphb.minification.get.currentScanStep),this.scanner.onFinishStep=this.updateProgressBar,this.scanner.onFinish=function(n){e.updateProgressBar(100),wphb.minification.get.showCDNModal&&!0===n.show_cdn&&t("#enable-cdn-modal").length?window.WDP.showOverlay("#enable-cdn-modal",{class:"wphb-modal small wphb-progress-modal no-close"}):window.location.href=(0,c.getLink)("minification")},this.$checkFilesButton=t("#check-files"),this.$disableMinification=t("#wphb-disable-minification"),this.$spinner=t(".spinner"),this.$checkFilesButton.length&&this.$checkFilesButton.click(function(e){e.preventDefault(),window.WDP.showOverlay("#check-files-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),t(this).attr("disabled",!0),n.updateProgressBar(n.scanner.getProgress()),n.scanner.scan()}),t("body").on("click","#cancel-minification-check",function(t){t.preventDefault(),e.updateProgressBar(0,!0),e.scanner.cancel().then(function(){window.location.href=(0,c.getLink)("minification")})}),t("#wphb-minification-filter-button").on("click",function(e){e.preventDefault(),t("#wphb-minification-filter").toggle("slow")}),t(".wphb-discard").click(function(t){return t.preventDefault(),confirm((0,c.__)("discardAlert"))&&location.reload(),!1}),t(".wphb-enqueued-files input").on("change",function(){t(".wphb-discard").attr("disabled",!1)}),t("#use_cdn").change(function(){var e=t(this).is(":checked");o.default.minification.toggleCDN(e).then(function(){var e=t("#wphb-notice-minification-advanced-settings-updated");e.slideDown(),setTimeout(function(){e.slideUp()},5e3)})}),this.$disableMinification.change(function(){var e=t(this).is(":checked");n.$spinner.css("visibility","visible"),n.timer&&e&&(clearTimeout(n.timer),n.$spinner.css("visibility","hidden")),n.timer=setTimeout(function(){o.default.minification.toggleMinification(e).then(function(){location.reload()})},3e3)}),this.rowsCollection=new WPHB_Admin.minification.RowsCollection,t(".wphb-border-row").each(function(e,i){var r=void 0;r=t(i).data("filter-secondary")?new WPHB_Admin.minification.Row(t(i),t(i).data("filter"),t(i).data("filter-secondary")):new WPHB_Admin.minification.Row(t(i),t(i).data("filter")),n.rowsCollection.push(r)}),t("#wphb-s").keyup(function(){n.rowsCollection.addFilter(t(this).val(),"primary"),n.rowsCollection.applyFilters()}),t("#wphb-secondary-filter").change(function(){n.rowsCollection.addFilter(t(this).val(),"secondary"),n.rowsCollection.applyFilters()}),t(".filter-toggles").change(function(){var e=t(this),i=e.data("toggles"),r=e.prop("checked"),o=n.rowsCollection.getVisibleItems();for(var c in o)o[c].change(i,r)}),t("input.wphb-minification-file-selector").click(function(){var e=t(this),i=n.rowsCollection.getItemById(e.data("type"),e.data("handle"));i&&(e.is(":checked")?i.select():i.unSelect())}),t("#minification-bulk-file").click(function(){var e=t(this),i=n.rowsCollection.getItems();for(var r in i)i.hasOwnProperty(r)&&(e.is(":checked")?i[r].select():i[r].unSelect())}),t(".toggle-cross").on("click",function(){var e=t(this),i=e.find("input.toggle-include"),r=n.rowsCollection.getItemById(e.data("type"),e.data("handle"));r&&(r.change("include",!i.prop("checked")),r.getElement().find("input:not(.toggle-include)").prop("disabled",!i.prop("checked")))});var i=t("input[type=checkbox][name=use_cdn]");i.change(function(){var e=t(this).prop("checked");i.each(function(){this.checked=e})}),t("body").on("click",".wphb-minification-file-details",function(){window.innerWidth<783&&t(this).parent().find(".wphb-minification-row-details").toggle("slow")});var r=_.debounce(function(){window.innerWidth>=783?t(".wphb-minification-row-details").css("display","flex"):t(".wphb-minification-row-details").css("display","none")},250);return window.addEventListener("resize",r),this},updateProgressBar:function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e>100&&(e=100),t(".wphb-scan-progress .wphb-scan-progress-text span").text(e+"%"),t(".wphb-scan-progress .wphb-scan-progress-bar span").width(e+"%"),e>=90&&t(".wphb-progress-state .wphb-progress-state-text").text("Finalizing..."),n&&t(".wphb-progress-state .wphb-progress-state-text").text("Cancelling...")}},WPHB_Admin.minification.Row=a.default,WPHB_Admin.minification.RowsCollection=l.default}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.performance={module:"performance",iteration:0,progress:0,init:function(){var e=this,n=t("body");wphbPerformanceStrings&&(this.strings=wphbPerformanceStrings),this.$runTestButton=t("#run-performance-test");var i=t(".performance-report-table");i.off("click","button"),i.on("click","tr.wphb-performance-report-item",function(e){e.preventDefault();var n=t(this).closest(".wphb-performance-report-item"),i=n.nextUntil(".wphb-performance-report-item");i.toggleClass("wphb-performance-report-item-additional-content-opened"),i.hasClass("wphb-performance-report-item-additional-content-opened")?n.addClass("wphb-performance-report-item-opened"):n.removeClass("wphb-performance-report-item-opened")}),this.$runTestButton.length&&this.$runTestButton.click(function(n){n.preventDefault(),window.WDP.showOverlay("#run-performance-test-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),t(this).attr("disabled",!0),e.performanceTest(e.strings.finishedTestURLsLink)});var o=window.location.hash;if(o){var c=t(o);c.length&&c.find(".trigger-additional-content").trigger("click")}return t('select[name="email-frequency"]').change(function(){"1"===t(this).val()?t(this).closest(".schedule-box").find("div.days-container").hide():t(this).closest(".schedule-box").find("div.days-container").show()}).change(),n.on("click",".wphb-remove-recipient",function(e){e.preventDefault(),t(this).closest(".recipient").remove(),t(".scan-settings").find("input[id='scan_recipient'][value="+t(this).attr("data-id")+"]").remove()}),t("#add-receipt").click(function(){var n=t("#wphb-username-search").val(),i=t("#wphb-first-name").val();return r.default.performance.addRecipient(n,i).then(function(i){var r=t('<div class="recipient"/>'),o=t("<img/>").attr({src:i.avatar,width:"30"}),c=t("<span/>").html(i.name);r.append('<span class="name"/>'),r.find(".name").append(o,c),r.append(t('<span class="email"/>').html(n)),r.append(t("<a/>").attr({"data-id":i.user_id,class:"remove float-r wphb-remove-recipient",href:"#",alt:e.strings.removeButtonText}).html('<i class="dev-icon dev-icon-cross"></i>')),t("<input>").attr({type:"hidden",id:"scan_recipient",name:"email-recipients[]",value:JSON.stringify({email:i.email,name:i.name})}).appendTo(r),t(".receipt .recipients").append(r),t("#wphb-username-search").val(""),t("#wphb-first-name").val("")}).catch(function(t){alert(t.message)}),!1}),n.on("submit",".scan-frm",function(n){n.preventDefault();var i=t(this).serialize(),o=t(this);return o.find(".button").attr("disabled","disabled"),r.default.performance.saveReportsSettings(i).then(function(){o.find(".button").removeAttr("disabled"),e.showUpdateMessage()}),!1}),this},showUpdateMessage:function(){var e=t("#wphb-notice-performance-report-settings-updated");window.scrollTo(0,0),e.slideDown(),setTimeout(function(){e.slideUp()},5e3)},performanceTest:function(t){var e=this;void 0===t&&(t=!1),e.updateProgressBar(),r.default.performance.runTest().then(function(n){n.finished?t&&(window.location=t):window.setTimeout(function(){e.performanceTest(t)},5e3)})},updateProgressBar:function(){this.progress<90&&(this.progress+=35),this.progress>100&&(this.progress=90),t(".wphb-scan-progress .wphb-scan-progress-text span").text(this.progress+"%"),t(".wphb-scan-progress .wphb-scan-progress-bar span").attr("style","width:"+this.progress+"%")}}}(jQuery)},function(t,e,n){"use strict";!function(t){WPHB_Admin.uptime={module:"uptime",$dataRangeSelector:null,chartData:null,timer:null,$spinner:null,init:function(){this.$spinner=t(".spinner"),this.strings=wphbUptimeStrings,this.$dataRangeSelector=t("#wphb-uptime-data-range"),this.chartData=t("#uptime-chart-json").val(),this.$disableUptime=t("#wphb-disable-uptime"),this.$dataRangeSelector.change(function(){window.location.href=t(this).find(":selected").data("url")});var e=this;this.$disableUptime.change(function(){e.$spinner.css("visibility","visible"),t(this).is(":checked")&&e.timer?(clearTimeout(e.timer),e.$spinner.css("visibility","hidden")):e.timer=setTimeout(function(){location.href=e.strings.disableUptimeURL},3e3)}),this.drawChart(),t("#uptime-re-check-status").on("click",function(t){t.preventDefault(),location.reload()})},drawChart:function(){var e=new google.visualization.DataTable;e.addColumn("datetime","Day"),e.addColumn("number","Response Time (ms)");for(var n=JSON.parse(this.chartData),i=0;i<n.length;i++)n[i][0]=new Date(n[i][0]),n[i][1]=Math.round(n[i][1]),0==Math.round(n[i][1])&&(n[i][1]=-100);e.addRows(n);var r={chartArea:{left:80,top:20,width:"90%",height:"90%"},colors:["#24ADE5"],curveType:"function",legend:{position:"none"},vAxis:{format:"#,### ms",viewWindow:{min:0}},tooltip:{isHtml:!0},series:{0:{axis:"Resp"}},axes:{y:{Resp:{label:"Response Time (ms)"}}}},o=new google.visualization.LineChart(document.getElementById("uptime-chart"));o.draw(e,r),t(window).resize(function(){o.draw(e,r)})}}}(jQuery)},function(t,e,n){"use strict";n(25),n(27),n(24),n(20),n(26),n(23),n(22),n(28),n(21),n(19)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(t,e,n){var i=t,r=e.toLowerCase(),o=!1,c=!1,s=!0,a=i.find(".toggle-include"),u=i.find(".toggle-combine"),l=i.find(".toggle-minify"),f=i.find(".toggle-position-footer"),p=i.find(".toggle-defer"),h=i.find(".toggle-cross > i");return n&&(o=n.toLowerCase()),{hide:function(){i.addClass("out-of-filter"),s=!1},show:function(){i.removeClass("out-of-filter"),s=!0},getElement:function(){return i},getId:function(){return i.attr("id")},getFilter:function(){return r},matchFilter:function(t){return""===t||(t=t.toLowerCase(),r.search(t)>-1)},matchSecondaryFilter:function(t){return""===t||!!o&&(t=t.toLowerCase(),o===t)},isVisible:function(){return s},isSelected:function(){return c},select:function(){c=!0},unSelect:function(){c=!1},change:function(t,e){switch(t){case"minify":l.prop("checked",e);break;case"combine":u.prop("checked",e);break;case"defer":p.prop("checked",e);break;case"include":h.removeClass(),a.prop("checked",e),e?(i.removeClass("disabled"),h.addClass("dev-icon dev-icon-cross"),a.attr("checked",!0)):(i.addClass("disabled"),h.addClass("wdv-icon wdv-icon-refresh"),a.removeAttr("checked"));break;case"footer":f.prop("checked",e)}}}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){var t=[],e="",n="";return{push:function(e){"object"===(void 0===e?"undefined":i(e))&&t.push(e)},getItems:function(){return t},getItem:function(e){return!!t[e]&&t[e]},getItemById:function(e,n){var i=!1;for(var r in t)if("wphb-file-"+e+"-"+n===t[r].getId()){i=t[r];break}return i},getVisibleItems:function(){var e=[];for(var n in t)t[n].isVisible()&&e.push(t[n]);return e},getSelectedItems:function(){var e=[];for(var n in t)t[n].isVisible()&&t[n].isSelected()&&e.push(t[n]);return e},addFilter:function(t,i){"secondary"===i?n=t:e=t},applyFilters:function(){for(var i in t)t[i]&&(t[i].matchFilter(e)&&t[i].matchSecondaryFilter(n)?t[i].show():t[i].hide())}}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=function(t,e){t=parseInt(t),e=parseInt(e);var n=!1,i={scan:function(){var n=t-e;0!==e?o(n):r.default.minification.startCheck().then(function(){o(n)})},cancel:function(){return n=!0,r.default.minification.cancelScan()},getProgress:function(){if(n)return 0;var i=t-e;return Math.min(Math.round(100*parseInt(t-i)/t),99)},onFinishStep:function(t){},onFinish:function(t){}},o=function n(o){o>=0?(e=t-o,r.default.minification.checkStep(e).then(function(){o-=1,i.onFinishStep(i.getProgress()),n(o)})):r.default.minification.finishCheck().then(i.onFinish)};return i};e.default=o},function(t,e,n){"use strict";var i,r,o,c,c,s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};/*!
2
  * clipboard.js v1.7.1
3
  * https://zenorocha.github.io/clipboard.js
4
  *
5
  * Licensed MIT © Zeno Rocha
6
  */
7
- !function(n){if("object"===s(e)&&void 0!==t)t.exports=n();else{r=[],i=n,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}}(function(){var t;return function t(e,n,i){function r(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof c&&c;if(!a&&u)return c(s,!0);if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return r(n||t)},f,f.exports,t,e,n,i)}return n[s].exports}for(var o="function"==typeof c&&c,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e,n){function i(t,e){for(;t&&t.nodeType!==r;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var r=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var o=Element.prototype;o.matches=o.matchesSelector||o.mozMatchesSelector||o.msMatchesSelector||o.oMatchesSelector||o.webkitMatchesSelector}e.exports=i},{}],2:[function(t,e,n){function i(t,e,n,i,o){var c=r.apply(this,arguments);return t.addEventListener(n,c,o),{destroy:function(){t.removeEventListener(n,c,o)}}}function r(t,e,n,i){return function(n){n.delegateTarget=o(n.target,e),n.delegateTarget&&i.call(t,n)}}var o=t("./closest");e.exports=i},{"./closest":1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,n){function i(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!s.string(e))throw new TypeError("Second argument must be a String");if(!s.fn(n))throw new TypeError("Third argument must be a Function");if(s.node(t))return r(t,e,n);if(s.nodeList(t))return o(t,e,n);if(s.string(t))return c(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function o(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function c(t,e,n){return a(document.body,t,e,n)}var s=t("./is"),a=t("delegate");e.exports=i},{"./is":3,delegate:2}],5:[function(t,e,n){function i(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),r=document.createRange();r.selectNodeContents(t),i.removeAllRanges(),i.addRange(r),e=i.toString()}return e}e.exports=i},{}],6:[function(t,e,n){function i(){}i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){r.off(t,i),e.apply(n,arguments)}var r=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,r=n.length;for(i;i<r;i++)n[i].fn.apply(n[i].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),i=n[t],r=[];if(i&&e)for(var o=0,c=i.length;o<c;o++)i[o].fn!==e&&i[o].fn._!==e&&r.push(i[o]);return r.length?n[t]=r:delete n[t],this}},e.exports=i},{}],7:[function(e,n,i){!function(r,o){if("function"==typeof t&&t.amd)t(["module","select"],o);else if(void 0!==i)o(n,e("select"));else{var c={exports:{}};o(c,r.select),r.clipboardAction=c.exports}}(this,function(t,e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(t){return t&&t.__esModule?t:{default:t}}(e),r="function"==typeof Symbol&&"symbol"===s(Symbol.iterator)?function(t){return void 0===t?"undefined":s(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":void 0===t?"undefined":s(t)},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),c=function(){function t(e){n(this,t),this.resolveOptions(e),this.initSelection()}return o(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=c})},{select:5}],8:[function(e,n,i){!function(r,o){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],o);else if(void 0!==i)o(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var c={exports:{}};o(c,r.clipboardAction,r.tinyEmitter,r.goodListener),r.clipboard=c.exports}}(this,function(t,e,n,i){function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function c(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":s(e))&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":s(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function u(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var l=r(e),f=r(n),p=r(i),h="function"==typeof Symbol&&"symbol"===s(Symbol.iterator)?function(t){return void 0===t?"undefined":s(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":void 0===t?"undefined":s(t)},d=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),v=function(t){function e(t,n){o(this,e);var i=c(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return i.resolveOptions(n),i.listenClick(t),i}return a(e,t),d(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===h(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,p.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(f.default);t.exports=v})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.__=function(t){return wphb.strings[t]||""},e.getLink=function(t){return wphb.links[t]||""}},function(t,e,n){(function(e,i){/*!
8
  * @overview es6-promise - a tiny implementation of Promises/A+.
9
  * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
10
  * @license Licensed under MIT license
11
  * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
12
  * @version 4.1.1
13
  */
14
- !function(e,n){t.exports=n()}(0,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function r(t){return"function"==typeof t}function o(t){Q=t}function c(t){q=t}function s(){return void 0!==z?function(){z(u)}:a()}function a(){var t=setTimeout;return function(){return t(u,1)}}function u(){for(var t=0;t<N;t+=2){(0,X[t])(X[t+1]),X[t]=void 0,X[t+1]=void 0}N=0}function l(t,e){var n=arguments,i=this,r=new this.constructor(p);void 0===r[tt]&&E(r);var o=i._state;return o?function(){var t=n[o-1];q(function(){return A(o,r,t,i._result)})}():k(i,r,t,e),r}function f(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(p);return w(n,t),n}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function v(t){try{return t.then}catch(t){return rt.error=t,rt}}function m(t,e,n,i){try{t.call(e,n,i)}catch(t){return t}}function b(t,e,n){q(function(t){var i=!1,r=m(n,e,function(n){i||(i=!0,e!==n?w(t,n):S(t,n))},function(e){i||(i=!0,x(t,e))},"Settle: "+(t._label||" unknown promise"));!i&&r&&(i=!0,x(t,r))},t)}function g(t,e){e._state===nt?S(t,e._result):e._state===it?x(t,e._result):k(e,void 0,function(e){return w(t,e)},function(e){return x(t,e)})}function y(t,e,n){e.constructor===t.constructor&&n===l&&e.constructor.resolve===f?g(t,e):n===rt?(x(t,rt.error),rt.error=null):void 0===n?S(t,e):r(n)?b(t,e,n):S(t,e)}function w(e,n){e===n?x(e,h()):t(n)?y(e,n,v(n)):S(e,n)}function _(t){t._onerror&&t._onerror(t._result),T(t)}function S(t,e){t._state===et&&(t._result=e,t._state=nt,0!==t._subscribers.length&&q(T,t))}function x(t,e){t._state===et&&(t._state=it,t._result=e,q(_,t))}function k(t,e,n,i){var r=t._subscribers,o=r.length;t._onerror=null,r[o]=e,r[o+nt]=n,r[o+it]=i,0===o&&t._state&&q(T,t)}function T(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var i=void 0,r=void 0,o=t._result,c=0;c<e.length;c+=3)i=e[c],r=e[c+n],i?A(n,i,r,o):r(o);t._subscribers.length=0}}function j(){this.error=null}function O(t,e){try{return t(e)}catch(t){return ot.error=t,ot}}function A(t,e,n,i){var o=r(n),c=void 0,s=void 0,a=void 0,u=void 0;if(o){if(c=O(n,i),c===ot?(u=!0,s=c.error,c.error=null):a=!0,e===c)return void x(e,d())}else c=i,a=!0;e._state!==et||(o&&a?w(e,c):u?x(e,s):t===nt?S(e,c):t===it&&x(e,c))}function P(t,e){try{e(function(e){w(t,e)},function(e){x(t,e)})}catch(e){x(t,e)}}function C(){return ct++}function E(t){t[tt]=ct++,t._state=void 0,t._result=void 0,t._subscribers=[]}function $(t,e){this._instanceConstructor=t,this.promise=new t(p),this.promise[tt]||E(this.promise),U(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&S(this.promise,this._result))):x(this.promise,I())}function I(){return new Error("Array Methods must be provided an Array")}function M(t){return new $(this,t).promise}function B(t){var e=this;return new e(U(t)?function(n,i){for(var r=t.length,o=0;o<r;o++)e.resolve(t[o]).then(n,i)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function D(t){var e=this,n=new e(p);return x(n,t),n}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function L(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function R(t){this[tt]=C(),this._result=this._state=void 0,this._subscribers=[],p!==t&&("function"!=typeof t&&F(),this instanceof R?P(this,t):L())}function H(){var t=void 0;if(void 0!==i)t=i;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var n=null;try{n=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===n&&!e.cast)return}t.Promise=R}var W=void 0;W=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var U=W,N=0,z=void 0,Q=void 0,q=function(t,e){X[N]=t,X[N+1]=e,2===(N+=2)&&(Q?Q(u):Z())},V="undefined"!=typeof window?window:void 0,Y=V||{},J=Y.MutationObserver||Y.WebKitMutationObserver,K="undefined"==typeof self&&void 0!==e&&"[object process]"==={}.toString.call(e),G="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3),Z=void 0;Z=K?function(){return function(){return e.nextTick(u)}}():J?function(){var t=0,e=new J(u),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}():G?function(){var t=new MessageChannel;return t.port1.onmessage=u,function(){return t.port2.postMessage(0)}}():void 0===V?function(){try{var t=n(71);return z=t.runOnLoop||t.runOnContext,s()}catch(t){return a()}}():a();var tt=Math.random().toString(36).substring(16),et=void 0,nt=1,it=2,rt=new j,ot=new j,ct=0;return $.prototype._enumerate=function(t){for(var e=0;this._state===et&&e<t.length;e++)this._eachEntry(t[e],e)},$.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,i=n.resolve;if(i===f){var r=v(t);if(r===l&&t._state!==et)this._settledAt(t._state,e,t._result);else if("function"!=typeof r)this._remaining--,this._result[e]=t;else if(n===R){var o=new n(p);y(o,t,r),this._willSettleAt(o,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(i(t),e)},$.prototype._settledAt=function(t,e,n){var i=this.promise;i._state===et&&(this._remaining--,t===it?x(i,n):this._result[e]=n),0===this._remaining&&S(i,this._result)},$.prototype._willSettleAt=function(t,e){var n=this;k(t,void 0,function(t){return n._settledAt(nt,e,t)},function(t){return n._settledAt(it,e,t)})},R.all=M,R.race=B,R.resolve=f,R.reject=D,R._setScheduler=o,R._setAsap=c,R._asap=q,R.prototype={constructor:R,then:l,catch:function(t){return this.then(null,t)}},R.polyfill=H,R.Promise=R,R})}).call(e,n(70),n(17))},function(t,e){function n(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}t.exports=n},function(t,e,n){function i(t,e){var n=c(t),i=!n&&o(t),l=!n&&!i&&s(t),p=!n&&!i&&!l&&u(t),h=n||i||l||p,d=h?r(t.length,String):[],v=d.length;for(var m in t)!e&&!f.call(t,m)||h&&("length"==m||l&&("offset"==m||"parent"==m)||p&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||a(m,v))||d.push(m);return d}var r=n(44),o=n(64),c=n(65),s=n(66),a=n(11),u=n(67),l=Object.prototype,f=l.hasOwnProperty;t.exports=i},function(t,e,n){function i(t){return o(t)&&r(t)==c}var r=n(1),o=n(5),c="[object Arguments]";t.exports=i},function(t,e,n){function i(t){return!(!c(t)||o(t))&&(r(t)?d:u).test(s(t))}var r=n(15),o=n(53),c=n(4),s=n(61),a=/[\\^$.*+?()[\]{}|]/g,u=/^\[object .+?Constructor\]$/,l=Function.prototype,f=Object.prototype,p=l.toString,h=f.hasOwnProperty,d=RegExp("^"+p.call(h).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=i},function(t,e,n){function i(t){return c(t)&&o(t.length)&&!!s[r(t)]}var r=n(1),o=n(16),c=n(5),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1,t.exports=i},function(t,e,n){function i(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))s.call(t,n)&&"constructor"!=n&&e.push(n);return e}var r=n(12),o=n(54),c=Object.prototype,s=c.hasOwnProperty;t.exports=i},function(t,e,n){function i(t,e){return c(o(t,e,r),t+"")}var r=n(14),o=n(58),c=n(59);t.exports=i},function(t,e,n){var i=n(63),r=n(9),o=n(14),c=r?function(t,e){return r(t,"toString",{configurable:!0,enumerable:!1,value:i(e),writable:!0})}:o;t.exports=c},function(t,e){function n(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i}t.exports=n},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e,n){function i(t,e,n,i){var c=!n;n||(n={});for(var s=-1,a=e.length;++s<a;){var u=e[s],l=i?i(n[u],t[u],u,n,t):void 0;void 0===l&&(l=t[u]),c?o(n,u,l):r(n,u,l)}return n}var r=n(7),o=n(8);t.exports=i},function(t,e,n){var i=n(2),r=i["__core-js_shared__"];t.exports=r},function(t,e,n){function i(t){return r(function(e,n){var i=-1,r=n.length,c=r>1?n[r-1]:void 0,s=r>2?n[2]:void 0;for(c=t.length>3&&"function"==typeof c?(r--,c):void 0,s&&o(n[0],n[1],s)&&(c=r<3?void 0:c,r=1),e=Object(e);++i<r;){var a=n[i];a&&t(e,a,i,c)}return e})}var r=n(42),o=n(52);t.exports=i},function(t,e,n){function i(t,e){var n=o(t,e);return r(n)?n:void 0}var r=n(39),o=n(51);t.exports=i},function(t,e,n){function i(t){var e=c.call(t,a),n=t[a];try{t[a]=void 0;var i=!0}catch(t){}var r=s.call(t);return i&&(e?t[a]=n:delete t[a]),r}var r=n(6),o=Object.prototype,c=o.hasOwnProperty,s=o.toString,a=r?r.toStringTag:void 0;t.exports=i},function(t,e){function n(t,e){return null==t?void 0:t[e]}t.exports=n},function(t,e,n){function i(t,e,n){if(!s(n))return!1;var i=typeof e;return!!("number"==i?o(n)&&c(e,n.length):"string"==i&&e in n)&&r(n[e],t)}var r=n(13),o=n(3),c=n(11),s=n(4);t.exports=i},function(t,e,n){function i(t){return!!o&&o in t}var r=n(47),o=function(){var t=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();t.exports=i},function(t,e,n){var i=n(57),r=i(Object.keys,Object);t.exports=r},function(t,e,n){(function(t){var i=n(10),r="object"==typeof e&&e&&!e.nodeType&&e,o=r&&"object"==typeof t&&t&&!t.nodeType&&t,c=o&&o.exports===r,s=c&&i.process,a=function(){try{return s&&s.binding&&s.binding("util")}catch(t){}}();t.exports=a}).call(e,n(18)(t))},function(t,e){function n(t){return r.call(t)}var i=Object.prototype,r=i.toString;t.exports=n},function(t,e){function n(t,e){return function(n){return t(e(n))}}t.exports=n},function(t,e,n){function i(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,c=-1,s=o(i.length-e,0),a=Array(s);++c<s;)a[c]=i[e+c];c=-1;for(var u=Array(e+1);++c<e;)u[c]=i[c];return u[e]=n(a),r(t,this,u)}}var r=n(36),o=Math.max;t.exports=i},function(t,e,n){var i=n(43),r=n(60),o=r(i);t.exports=o},function(t,e){function n(t){var e=0,n=0;return function(){var c=o(),s=r-(c-n);if(n=c,s>0){if(++e>=i)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var i=800,r=16,o=Date.now;t.exports=n},function(t,e){function n(t){if(null!=t){try{return r.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var i=Function.prototype,r=i.toString;t.exports=n},function(t,e,n){var i=n(7),r=n(46),o=n(48),c=n(3),s=n(12),a=n(68),u=Object.prototype,l=u.hasOwnProperty,f=o(function(t,e){if(s(e)||c(e))return void r(e,a(e),t);for(var n in e)l.call(e,n)&&i(t,n,e[n])});t.exports=f},function(t,e){function n(t){return function(){return t}}t.exports=n},function(t,e,n){var i=n(38),r=n(5),o=Object.prototype,c=o.hasOwnProperty,s=o.propertyIsEnumerable,a=i(function(){return arguments}())?i:function(t){return r(t)&&c.call(t,"callee")&&!s.call(t,"callee")};t.exports=a},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){(function(t){var i=n(2),r=n(69),o="object"==typeof e&&e&&!e.nodeType&&e,c=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=c&&c.exports===o,a=s?i.Buffer:void 0,u=a?a.isBuffer:void 0,l=u||r;t.exports=l}).call(e,n(18)(t))},function(t,e,n){var i=n(40),r=n(45),o=n(55),c=o&&o.isTypedArray,s=c?r(c):i;t.exports=s},function(t,e,n){function i(t){return c(t)?r(t):o(t)}var r=n(37),o=n(41),c=n(3);t.exports=i},function(t,e){function n(){return!1}t.exports=n},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function r(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(f===clearTimeout)return clearTimeout(t);if((f===i||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function c(){v&&h&&(v=!1,h.length?d=h.concat(d):m=-1,d.length&&s())}function s(){if(!v){var t=r(c);v=!0;for(var e=d.length;e;){for(h=d,d=[];++m<e;)h&&h[m].run();m=-1,e=d.length}h=null,v=!1,o(t)}}function a(t,e){this.fun=t,this.array=e}function u(){}var l,f,p=t.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{f="function"==typeof clearTimeout?clearTimeout:i}catch(t){f=i}}();var h,d=[],v=!1,m=-1;p.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];d.push(new a(t,e)),1!==d.length||v||r(s)},a.prototype.run=function(){this.fun.apply(null,this.array)},p.title="browser",p.browser=!0,p.env={},p.argv=[],p.version="",p.versions={},p.on=u,p.addListener=u,p.once=u,p.off=u,p.removeListener=u,p.removeAllListeners=u,p.emit=u,p.prependListener=u,p.prependOnceListener=u,p.listeners=function(t){return[]},p.binding=function(t){throw new Error("process.binding is not supported")},p.cwd=function(){return"/"},p.chdir=function(t){throw new Error("process.chdir is not supported")},p.umask=function(){return 0}},function(t,e){}]);
15
  //# sourceMappingURL=admin.min.js.map
1
+ !function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=29)}([function(t,e,n){"use strict";function i(){function t(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";o.nonce=i,o.action=t;var s={data:o,method:c};return s.url=e,new(0,n(35).Promise)(function(t,e){jQuery.ajax(s).done(t).fail(e)}).then(function(t){return r(t)})}var e=ajaxurl,i=wphb.nonces.HBFetchNonce,o={notice:{dismiss:function(e){return t("wphb_notice_dismiss",{id:e},"POST")}},caching:{setServer:function(e){return t("wphb_caching_set_server_type",{value:e},"POST")},reloadSnippets:function(e){return t("wphb_caching_reload_snippet",{type:e},"POST").then(function(t){return t})}},cloudflare:{connect:function(e,n,i){return t("wphb_cloudflare_connect",{step:e,formData:n,cfData:i},"POST").then(function(t){return t})},setExpiration:function(e){return t("wphb_cloudflare_set_expiry",{value:e},"POST")},purgeCache:function(){return t("wphb_cloudflare_purge_cache",{},"POST")}},dashboard:{toggleMinification:function(e){return t("wphb_dash_toggle_network_minification",{value:e},"POST")},skipSetup:function(){return t("wphb_dash_skip_setup",{},"POST")}},minification:{toggleCDN:function(e){return t("wphb_minification_toggle_cdn",{value:e},"POST")},toggleMinification:function(e){return t("wphb_minification_toggle_minification",{value:e},"POST")},startCheck:function(){return t("wphb_minification_start_check",{},"POST")},checkStep:function(e){return t("wphb_minification_check_step",{step:e},"POST").then(function(t){return t})},finishCheck:function(){return t("wphb_minification_finish_scan",{},"POST")},cancelScan:function(){return t("wphb_minification_cancel_scan",{},"POST")}},performance:{runTest:function(){return t("wphb_performance_run_test",{},"POST").then(function(t){return t})},addRecipient:function(e,n){return t("wphb_pro_performance_add_recipient",{email:e,name:n},"POST").then(function(t){return t})},saveReportsSettings:function(e){return t("wphb_pro_performance_save_reports_settings",{data:e},"POST")}}};(0,s.default)(this,o)}function r(t){if("object"!==(void 0===t?"undefined":o(t))&&(t=JSON.parse(t)),t.success)return t.data;var e=t.data||{},n=new Error(e.message||"Error trying to fetch response from server");throw n.response=t,n}Object.defineProperty(e,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c=n(62),s=function(t){return t&&t.__esModule?t:{default:t}}(c),a=new i;e.default=a},function(t,e,n){function i(t){return null==t?void 0===t?a:s:u&&u in Object(t)?o(t):c(t)}var r=n(6),o=n(50),c=n(56),s="[object Null]",a="[object Undefined]",u=r?r.toStringTag:void 0;t.exports=i},function(t,e,n){var i=n(10),r="object"==typeof self&&self&&self.Object===Object&&self,o=i||r||Function("return this")();t.exports=o},function(t,e,n){function i(t){return null!=t&&o(t.length)&&!r(t)}var r=n(15),o=n(16);t.exports=i},function(t,e){function n(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}t.exports=n},function(t,e){function n(t){return null!=t&&"object"==typeof t}t.exports=n},function(t,e,n){var i=n(2),r=i.Symbol;t.exports=r},function(t,e,n){function i(t,e,n){var i=t[e];s.call(t,e)&&o(i,n)&&(void 0!==n||e in t)||r(t,e,n)}var r=n(8),o=n(13),c=Object.prototype,s=c.hasOwnProperty;t.exports=i},function(t,e,n){function i(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}var r=n(9);t.exports=i},function(t,e,n){var i=n(49),r=function(){try{var t=i(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=r},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n(17))},function(t,e){function n(t,e){return!!(e=null==e?i:e)&&("number"==typeof t||r.test(t))&&t>-1&&t%1==0&&t<e}var i=9007199254740991,r=/^(?:0|[1-9]\d*)$/;t.exports=n},function(t,e){function n(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||i)}var i=Object.prototype;t.exports=n},function(t,e){function n(t,e){return t===e||t!==t&&e!==e}t.exports=n},function(t,e){function n(t){return t}t.exports=n},function(t,e,n){function i(t){if(!o(t))return!1;var e=r(t);return e==s||e==a||e==c||e==u}var r=n(1),o=n(4),c="[object AsyncFunction]",s="[object Function]",a="[object GeneratorFunction]",u="[object Proxy]";t.exports=i},function(t,e){function n(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=i}var i=9007199254740991;t.exports=n},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";jQuery(document).ready(function(){WPHB_Admin.init()})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(33),o=i(r),c=n(0),s=i(c);!function(t){WPHB_Admin.caching={module:"caching",selectedServer:"",$serverSelector:null,$serverInstructions:[],$snippets:[],init:function(){var e=this,n=t("#wphb-box-caching-settings #connect-cloudflare-link");new o.default(".wphb-code-snippet .button"),wphbCachingStrings&&(e.strings=wphbCachingStrings),n.on("click",function(n){n.preventDefault(),t("#wphb-server-type").val("cloudflare").trigger("wpmu:change"),e.hideCurrentInstructions(),e.setServer("cloudflare"),e.showServerInstructions("cloudflare"),e.selectedServer="cloudflare",t("html, body").animate({scrollTop:t("#cloudflare-steps").offset().top},"slow")}),this.$serverSelector=t("#wphb-server-type"),this.selectedServer=this.$serverSelector.val(),e.$snippets.apache=t("#wphb-code-snippet-apache").find("pre").first(),e.$snippets.LiteSpeed=t("#wphb-code-snippet-litespeed").find("pre").first(),e.$snippets.nginx=t("#wphb-code-snippet-nginx").find("pre").first(),t(".wphb-server-instructions").each(function(){e.$serverInstructions[t(this).data("server")]=t(this)}),this.showServerInstructions(this.selectedServer),this.$serverSelector.change(function(){var n=t(this).val();e.hideCurrentInstructions(),e.showServerInstructions(n),e.setServer(n),e.selectedServer=n,e.updateTabSize(),t(".hb-server-type").val(n)});var i=t("input[name='expiry-set-type']"),r=t(".settings-form");return i.each(function(){this.checked&&("expiry-all-types"===t(this).attr("id")?(r.find("[data='expiry-single-type']").hide(),r.find("[data='expiry-all-types']").show()):"expiry-single-type"===t(this).attr("id")&&(r.find("[data='expiry-all-types']").hide(),r.find("[data='expiry-single-type']").show()))}),i.on("click",function(){"expiry-all-types"===t(this).attr("id")?(r.find("[data='expiry-single-type']").hide(),r.find("[data='expiry-all-types']").show()):"expiry-single-type"===t(this).attr("id")&&(r.find("[data='expiry-all-types']").hide(),r.find("[data='expiry-single-type']").show())}),this},setServer:function(t){s.default.caching.setServer(t)},updateTabSize:function(){var e=t("#wphb-server-instructions-"+this.selectedServer.toLowerCase()).find(".tabs"),n=e.find(".tab > input:checked").parent(),i=n.find(".content");e.height(i.outerHeight()+n.outerHeight()-6)},hideCurrentInstructions:function(){var t=this.selectedServer;this.$serverInstructions[t]&&this.$serverInstructions[t].hide()},showServerInstructions:function(e){if(void 0!==this.$serverInstructions[e]){var n=this.$serverInstructions[e];n.show(),n.find(".tab:first-child > label").trigger("click")}"apache"===e||"LiteSpeed"===e?t(".enable-cache-wrap-"+e).show():t("#enable-cache-wrap").hide()},reloadSnippets:function(){var e=this;for(var n in e.$snippets)e.$snippets.hasOwnProperty(n)&&s.default.caching.reloadSnippets(n).then(function(n){e.$snippets[n.type].text(n.code),n.type===e.selectedServer&&("apache"===n.type&&n.updatedFile?(t("#wphb-notice-code-snippet-htaccess-updated").show(),location.href=e.strings.recheckURL+"&caching-updated=true"):"apache"===n.type&&e.strings.cacheEnabled&&!n.updatedFile?(t("#wphb-notice-code-snippet-htaccess-error").show(),location.href=e.strings.htaccessErrorURL):(t("#wphb-notice-code-snippet-updated").show(),location.href=e.strings.recheckURL+"&caching-updated=true"))})}}}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.cloudflare={module:"cloudflare",$cfSelector:!1,$spinner:!1,init:function(){this.$spinner=t(".wphb-spinner"),this.$cfSelector=t("#wphb-caching-cloudflare-summary-set-expiry");var e=this;return wphb.cloudflare.is.connected&&this.$cfSelector.change(function(){e.setExpiry.call(e,[this])}),this},setExpiry:function(e){this.displaySpinner();var n=t(e).val();r.default.cloudflare.setExpiration(n).then(function(){window.location.reload()})},displaySpinner:function(){this.$spinner.css("visibility","visible")}}}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.DashboardCloudFlare={init:function(e){this.currentStep=e.currentStep,this.data=e,this.email=e.email,this.apiKey=e.apiKey,this.$stepsContainer=t("#cloudflare-steps"),this.$infoBox=t("#cloudflare-info"),this.$spinner=t(".cloudflare-spinner"),this.$deactivateButton=t(".cloudflare-deactivate.button"),this.renderStep(this.currentStep),t("body").on("click",".cloudflare-clear-cache.button",function(e){e.preventDefault(),this.purgeCache.apply(t(e.target),[this])}.bind(this))},purgeCache:function(e){var n=this;n.attr("disabled",!0),e.showSpinner(),r.default.cloudflare.purgeCache().then(function(){var i=t("#wphb-notice-cloudflare-purge-cache");window.scrollTo(0,0),i.slideDown(),setTimeout(function(){i.slideUp()},5e3),n.removeAttr("disabled"),e.hideSpinner()})},renderStep:function(e){var n=WPHB_Admin.DashboardCloudFlare.template("#cloudflare-step-"+e),i=n(this.data),r=this;i&&(this.currentStep=e,this.$stepsContainer.hide().html(n(this.data)).fadeIn().find("form").on("submit",function(e){e.preventDefault(),r.submitStep.call(r,t(this))}),this.$spinner=this.$stepsContainer.find(".cloudflare-spinner")),this.bindEvents()},bindEvents:function(){var e=t("#cloudflare-how-to");e.hide(),t("#cloudflare-how-to-title > a").click(function(t){t.preventDefault(),e.toggle()}),this.$stepsContainer.find("select").each(function(){window.WDP.wpmuSelect(this)}),"final"===this.currentStep?this.$deactivateButton.removeClass("hidden"):this.$deactivateButton.addClass("hidden")},emptyInfoBox:function(){this.$infoBox.html(""),this.$infoBox.removeClass()},showInfoBox:function(t){this.$infoBox.addClass("wphb-notice"),this.$infoBox.addClass("wphb-notice-error"),this.$infoBox.html(t+"")},showSpinner:function(){this.$spinner.css("visibility","visible")},hideSpinner:function(){this.$spinner.css("visibility","hidden")},submitStep:function(t){var e=this;t.find("input[type=submit]").attr("disabled","true"),this.emptyInfoBox(),this.showSpinner(),r.default.cloudflare.connect(this.currentStep,t.serialize(),this.data).then(function(t){e.data=t.newData,e.renderStep(t.nextStep),"final"===t.nextStep&&(window.location.href=t.redirect)}).catch(function(t){e.showInfoBox(t)}),t.find("input[type=submit]").removeAttr("disabled"),e.hideSpinner()}},WPHB_Admin.DashboardCloudFlare.template=_.memoize(function(e){var n=void 0,i={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"};return function(r){return _.templateSettings=i,(n=n||_.template(t(e).html()))(r)}})}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.dashboard={module:"dashboard",init:function(){var e=this;return wphbDashboardStrings&&(this.strings=wphbDashboardStrings),t("#wphb-activate-minification").change(function(){var n=t(this).val();r.default.dashboard.toggleMinification(n).then(function(){var i=t('input[name="use_cdn"]');"false"===n?(i.prop("checked",!1),i.prop("disabled",!0)):i.prop("disabled",!1),e.showNotice()})}),t("#use_cdn").change(function(){var n=t(this).is(":checked");r.default.minification.toggleCDN(n).then(function(){e.showNotice()})}),t(".wphb-performance-report-item").click(function(){var e=t(this).data("performance-url");e&&(location.href=e)}),this},showNotice:function(){var e=t("#wphb-notice-minification-settings-updated");e.slideDown(),setTimeout(function(){e.slideUp()},5e3)},startQuickSetup:function(){window.WDP.showOverlay("#wphb-quick-setup-modal",{class:"wphb-modal small wphb-quick-setup-modal no-close"})},skipSetup:function(){r.default.dashboard.skipSetup().then(function(){window.location.reload(!0)})},runPerformanceTest:function(){window.WDP.showOverlay("#run-performance-test-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),window.WPHB_Admin.getModule("performance").performanceTest(this.strings.finishedTestURLsLink)}}}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.gzip={module:"gzip",selectedServer:"",$serverSelector:null,$serverInstructions:[],init:function(){var e=this;return this.$serverSelector=t("#wphb-server-type"),this.selectedServer=this.$serverSelector.val(),t(".wphb-server-instructions").each(function(){e.$serverInstructions[t(this).data("server")]=t(this)}),this.showServerInstructions(this.selectedServer),this.$serverSelector.change(function(){var n=t(this).val();e.hideCurrentInstructions(),e.showServerInstructions(n),e.setServer(n),e.selectedServer=n}),t("#toggle-apache-instructions").click(function(e){e.preventDefault(),t(".apache-instructions").toggle()}),t("#toggle-litespeed-instructions").click(function(e){e.preventDefault(),t(".litespeed-instructions").toggle()}),this},hideCurrentInstructions:function(){var t=this.selectedServer;this.$serverInstructions[t]&&this.$serverInstructions[t].hide()},showServerInstructions:function(e){void 0!==this.$serverInstructions[e]&&this.$serverInstructions[e].show(),"apache"===e||"LiteSpeed"===e?t("#enable-cache-wrap").show():t("#enable-cache-wrap").hide()},setServer:function(t){r.default.caching.setServer(t)}}}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){var e={modules:[],init:function(){function e(t){var e=t.find(".wphb-score-result-label"),n=parseInt(e.text(),10)||100,i=t.find(".wphb-score-graph-result"),r=void 0,o=void 0,c=void 0;r=i.attr("r"),o=Math.PI*(2*r),n<0&&(n=0),n>100&&(n=100),c=(100-n)/100*o,i.css({strokeDashoffset:c})}function n(){t(".wphb-performance-report-overall-score").each(function(){e(t(this))}),t(".wphb-performance-report-current-score").each(function(){e(t(this))}),t(".wphb-performance-report-item-score").each(function(){e(t(this))})}t("body").on("change",".mobile-nav",function(){var e=t(this).val();e.length>0&&(location.href=e)}),t("#wphb-dismissable").on("click",".close",function(){var e=t(this).parent().attr("data-id");r.default.notice.dismiss(e)}),window.register_events_performance=function(){setTimeout(n,500)},t(function(){setTimeout(n,500)})},initModule:function(t){return this.hasOwnProperty(t)?(this.modules[t]=this[t].init(),this.modules[t]):{}},getModule:function(t){return void 0!==this.modules[t]?this.modules[t]:this.initModule(t)}};e.utils={membershipModal:{open:function(){t("#wphb-upgrade-membership-modal-link").trigger("click")}},post:function(e,n){return e.action="wphb_ajax",e.module=n,t.ajax({url:ajaxurl,method:"POST",data:e})}},e.notices={init:function(){t(".wphb-notice:not(.notice) a.wphb-dismiss").click(function(e){e.preventDefault();t(this).data("id"),t(this).data("nonce");t(this).parent(".error").hide()})}},window.WPHB_Admin=e}(jQuery)},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}var r=n(0),o=i(r),c=n(34),s=n(30),a=i(s),u=n(31),l=i(u),f=n(32),d=i(f);!function(t){WPHB_Admin.minification={$checkFilesButton:null,$checkFilesResultsContainer:null,module:"minification",checkURLSList:null,checkedURLS:0,$spinner:null,init:function(){var e=this,n=this;this.scanner=new d.default(wphb.minification.get.totalSteps,wphb.minification.get.currentScanStep),this.scanner.onFinishStep=this.updateProgressBar,this.scanner.onFinish=function(n){e.updateProgressBar(100),wphb.minification.get.showCDNModal&&!0===n.show_cdn&&t("#enable-cdn-modal").length?window.WDP.showOverlay("#enable-cdn-modal",{class:"wphb-modal small wphb-progress-modal no-close"}):window.location.href=(0,c.getLink)("minification")},this.$checkFilesButton=t("#check-files"),this.$disableMinification=t("#wphb-disable-minification"),this.$spinner=t(".spinner"),this.$checkFilesButton.length&&this.$checkFilesButton.click(function(e){e.preventDefault(),window.WDP.showOverlay("#check-files-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),t(this).attr("disabled",!0),n.updateProgressBar(n.scanner.getProgress()),n.scanner.scan()}),t("body").on("click","#cancel-minification-check",function(t){t.preventDefault(),e.updateProgressBar(0,!0),e.scanner.cancel().then(function(){window.location.href=(0,c.getLink)("minification")})}),t("#wphb-minification-filter-button").on("click",function(e){e.preventDefault(),t("#wphb-minification-filter").toggle("slow")}),t(".wphb-discard").click(function(t){return t.preventDefault(),confirm((0,c.__)("discardAlert"))&&location.reload(),!1}),t(".wphb-enqueued-files input").on("change",function(){t(".wphb-discard").attr("disabled",!1)}),t("#use_cdn").change(function(){var e=t(this).is(":checked");o.default.minification.toggleCDN(e).then(function(){var e=t("#wphb-notice-minification-advanced-settings-updated");e.slideDown(),setTimeout(function(){e.slideUp()},5e3)})}),this.$disableMinification.change(function(){var e=t(this).is(":checked");n.$spinner.css("visibility","visible"),n.timer&&e&&(clearTimeout(n.timer),n.$spinner.css("visibility","hidden")),n.timer=setTimeout(function(){o.default.minification.toggleMinification(e).then(function(){location.reload()})},3e3)}),this.rowsCollection=new WPHB_Admin.minification.RowsCollection,t(".wphb-border-row").each(function(e,i){var r=void 0;r=t(i).data("filter-secondary")?new WPHB_Admin.minification.Row(t(i),t(i).data("filter"),t(i).data("filter-secondary")):new WPHB_Admin.minification.Row(t(i),t(i).data("filter")),n.rowsCollection.push(r)}),t("#wphb-s").keyup(function(){n.rowsCollection.addFilter(t(this).val(),"primary"),n.rowsCollection.applyFilters()}),t("#wphb-secondary-filter").change(function(){n.rowsCollection.addFilter(t(this).val(),"secondary"),n.rowsCollection.applyFilters()}),t(".filter-toggles").change(function(){var e=t(this),i=e.data("toggles"),r=e.prop("checked"),o=n.rowsCollection.getVisibleItems();for(var c in o)o[c].change(i,r)}),t("input.wphb-minification-file-selector").click(function(){var e=t(this),i=n.rowsCollection.getItemById(e.data("type"),e.data("handle"));i&&(e.is(":checked")?i.select():i.unSelect())}),t("#minification-bulk-file").click(function(){var e=t(this),i=n.rowsCollection.getItems();for(var r in i)i.hasOwnProperty(r)&&(e.is(":checked")?i[r].select():i[r].unSelect())}),t(".toggle-cross").on("click",function(){var e=t(this),i=e.find("input.toggle-include"),r=n.rowsCollection.getItemById(e.data("type"),e.data("handle"));r&&(r.change("include",!i.prop("checked")),r.getElement().find("input:not(.toggle-include)").prop("disabled",!i.prop("checked")))});var i=t("input[type=checkbox][name=use_cdn]");i.change(function(){var e=t(this).prop("checked");i.each(function(){this.checked=e})}),t("body").on("click",".wphb-minification-file-details",function(){window.innerWidth<783&&t(this).parent().find(".wphb-minification-row-details").toggle("slow")});var r=_.debounce(function(){window.innerWidth>=783?t(".wphb-minification-row-details").css("display","flex"):t(".wphb-minification-row-details").css("display","none")},250);return window.addEventListener("resize",r),this},updateProgressBar:function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e>100&&(e=100),t(".wphb-scan-progress .wphb-scan-progress-text span").text(e+"%"),t(".wphb-scan-progress .wphb-scan-progress-bar span").width(e+"%"),e>=90&&t(".wphb-progress-state .wphb-progress-state-text").text("Finalizing..."),n&&t(".wphb-progress-state .wphb-progress-state-text").text("Cancelling...")}},WPHB_Admin.minification.Row=a.default,WPHB_Admin.minification.RowsCollection=l.default}(jQuery)},function(t,e,n){"use strict";var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i);!function(t){WPHB_Admin.performance={module:"performance",iteration:0,progress:0,init:function(){var e=this,n=t("body");wphbPerformanceStrings&&(this.strings=wphbPerformanceStrings),this.$runTestButton=t("#run-performance-test");var i=t(".performance-report-table");i.off("click","button"),i.on("click","tr.wphb-performance-report-item",function(e){e.preventDefault();var n=t(this).closest(".wphb-performance-report-item"),i=n.nextUntil(".wphb-performance-report-item");i.toggleClass("wphb-performance-report-item-additional-content-opened"),i.hasClass("wphb-performance-report-item-additional-content-opened")?n.addClass("wphb-performance-report-item-opened"):n.removeClass("wphb-performance-report-item-opened")}),this.$runTestButton.length&&this.$runTestButton.click(function(n){n.preventDefault(),window.WDP.showOverlay("#run-performance-test-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),t(this).attr("disabled",!0),e.performanceTest(e.strings.finishedTestURLsLink)});var o=window.location.hash;if(o){var c=t(o);c.length&&c.find(".trigger-additional-content").trigger("click")}return t('select[name="email-frequency"]').change(function(){"1"===t(this).val()?t(this).closest(".schedule-box").find("div.days-container").hide():t(this).closest(".schedule-box").find("div.days-container").show()}).change(),n.on("click",".wphb-remove-recipient",function(e){e.preventDefault(),t(this).closest(".recipient").remove(),t(".scan-settings").find("input[id='scan_recipient'][value="+t(this).attr("data-id")+"]").remove()}),t("#add-receipt").click(function(){var n=t("#wphb-username-search").val(),i=t("#wphb-first-name").val();return r.default.performance.addRecipient(n,i).then(function(i){var r=t('<div class="recipient"/>'),o=t("<img/>").attr({src:i.avatar,width:"30"}),c=t("<span/>").html(i.name);r.append('<span class="name"/>'),r.find(".name").append(o,c),r.append(t('<span class="email"/>').html(n)),r.append(t("<a/>").attr({"data-id":i.user_id,class:"remove float-r wphb-remove-recipient",href:"#",alt:e.strings.removeButtonText}).html('<i class="dev-icon dev-icon-cross"></i>')),t("<input>").attr({type:"hidden",id:"scan_recipient",name:"email-recipients[]",value:JSON.stringify({email:i.email,name:i.name})}).appendTo(r),t(".receipt .recipients").append(r),t("#wphb-username-search").val(""),t("#wphb-first-name").val("")}).catch(function(t){alert(t.message)}),!1}),n.on("submit",".scan-frm",function(n){n.preventDefault();var i=t(this).serialize(),o=t(this);return o.find(".button").attr("disabled","disabled"),r.default.performance.saveReportsSettings(i).then(function(){o.find(".button").removeAttr("disabled"),e.showUpdateMessage()}),!1}),this},showUpdateMessage:function(){var e=t("#wphb-notice-performance-report-settings-updated");window.scrollTo(0,0),e.slideDown(),setTimeout(function(){e.slideUp()},5e3)},performanceTest:function(t){var e=this;void 0===t&&(t=!1),e.updateProgressBar(),r.default.performance.runTest().then(function(n){n.finished?t&&(window.location=t):window.setTimeout(function(){e.performanceTest(t)},5e3)})},updateProgressBar:function(){this.progress<90&&(this.progress+=35),this.progress>100&&(this.progress=90),t(".wphb-scan-progress .wphb-scan-progress-text span").text(this.progress+"%"),t(".wphb-scan-progress .wphb-scan-progress-bar span").attr("style","width:"+this.progress+"%")}}}(jQuery)},function(t,e,n){"use strict";!function(t){WPHB_Admin.uptime={module:"uptime",$dataRangeSelector:null,chartData:null,timer:null,$spinner:null,init:function(){this.$spinner=t(".spinner"),this.strings=wphbUptimeStrings,this.$dataRangeSelector=t("#wphb-uptime-data-range"),this.chartData=t("#uptime-chart-json").val(),this.$disableUptime=t("#wphb-disable-uptime"),this.$dataRangeSelector.change(function(){window.location.href=t(this).find(":selected").data("url")});var e=this;this.$disableUptime.change(function(){e.$spinner.css("visibility","visible"),t(this).is(":checked")&&e.timer?(clearTimeout(e.timer),e.$spinner.css("visibility","hidden")):e.timer=setTimeout(function(){location.href=e.strings.disableUptimeURL},3e3)}),this.drawChart(),t("#uptime-re-check-status").on("click",function(t){t.preventDefault(),location.reload()})},drawChart:function(){var e=new google.visualization.DataTable;e.addColumn("datetime","Day"),e.addColumn("number","Response Time (ms)");for(var n=JSON.parse(this.chartData),i=0;i<n.length;i++)n[i][0]=new Date(n[i][0]),n[i][1]=Math.round(n[i][1]),0==Math.round(n[i][1])&&(n[i][1]=-100);e.addRows(n);var r={chartArea:{left:80,top:20,width:"90%",height:"90%"},colors:["#24ADE5"],curveType:"function",legend:{position:"none"},vAxis:{format:"#,### ms",viewWindow:{min:0}},tooltip:{isHtml:!0},series:{0:{axis:"Resp"}},axes:{y:{Resp:{label:"Response Time (ms)"}}}},o=new google.visualization.LineChart(document.getElementById("uptime-chart"));o.draw(e,r),t(window).resize(function(){o.draw(e,r)})}}}(jQuery)},function(t,e,n){"use strict";n(25),n(27),n(24),n(20),n(26),n(23),n(22),n(28),n(21),n(19)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(t,e,n){var i=t,r=e.toLowerCase(),o=!1,c=!1,s=!0,a=i.find(".toggle-include"),u=i.find(".toggle-combine"),l=i.find(".toggle-minify"),f=i.find(".toggle-position-footer"),d=i.find(".toggle-defer"),p=i.find(".toggle-cross > i");return n&&(o=n.toLowerCase()),{hide:function(){i.addClass("out-of-filter"),s=!1},show:function(){i.removeClass("out-of-filter"),s=!0},getElement:function(){return i},getId:function(){return i.attr("id")},getFilter:function(){return r},matchFilter:function(t){return""===t||(t=t.toLowerCase(),r.search(t)>-1)},matchSecondaryFilter:function(t){return""===t||!!o&&(t=t.toLowerCase(),o===t)},isVisible:function(){return s},isSelected:function(){return c},select:function(){c=!0},unSelect:function(){c=!1},change:function(t,e){switch(t){case"minify":l.prop("checked",e);break;case"combine":u.prop("checked",e);break;case"defer":d.prop("checked",e);break;case"include":p.removeClass(),a.prop("checked",e),e?(i.removeClass("disabled"),p.addClass("dev-icon dev-icon-cross"),a.attr("checked",!0)):(i.addClass("disabled"),p.addClass("wdv-icon wdv-icon-refresh"),a.removeAttr("checked"));break;case"footer":f.prop("checked",e)}}}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){var t=[],e="",n="";return{push:function(e){"object"===(void 0===e?"undefined":i(e))&&t.push(e)},getItems:function(){return t},getItem:function(e){return!!t[e]&&t[e]},getItemById:function(e,n){var i=!1;for(var r in t)if("wphb-file-"+e+"-"+n===t[r].getId()){i=t[r];break}return i},getVisibleItems:function(){var e=[];for(var n in t)t[n].isVisible()&&e.push(t[n]);return e},getSelectedItems:function(){var e=[];for(var n in t)t[n].isVisible()&&t[n].isSelected()&&e.push(t[n]);return e},addFilter:function(t,i){"secondary"===i?n=t:e=t},applyFilters:function(){for(var i in t)t[i]&&(t[i].matchFilter(e)&&t[i].matchSecondaryFilter(n)?t[i].show():t[i].hide())}}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(0),r=function(t){return t&&t.__esModule?t:{default:t}}(i),o=function(t,e){t=parseInt(t),e=parseInt(e);var n=!1,i={scan:function(){var n=t-e;0!==e?o(n):r.default.minification.startCheck().then(function(){o(n)})},cancel:function(){return n=!0,r.default.minification.cancelScan()},getProgress:function(){if(n)return 0;var i=t-e;return Math.min(Math.round(100*parseInt(t-i)/t),99)},onFinishStep:function(t){},onFinish:function(t){}},o=function n(o){o>=0?(e=t-o,r.default.minification.checkStep(e).then(function(){o-=1,i.onFinishStep(i.getProgress()),n(o)})):r.default.minification.finishCheck().then(i.onFinish)};return i};e.default=o},function(t,e,n){"use strict";var i,r,o,c,c,s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};/*!
2
  * clipboard.js v1.7.1
3
  * https://zenorocha.github.io/clipboard.js
4
  *
5
  * Licensed MIT © Zeno Rocha
6
  */
7
+ !function(n){if("object"===s(e)&&void 0!==t)t.exports=n();else{r=[],i=n,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}}(function(){var t;return function t(e,n,i){function r(s,a){if(!n[s]){if(!e[s]){var u="function"==typeof c&&c;if(!a&&u)return c(s,!0);if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return r(n||t)},f,f.exports,t,e,n,i)}return n[s].exports}for(var o="function"==typeof c&&c,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e,n){function i(t,e){for(;t&&t.nodeType!==r;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var r=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var o=Element.prototype;o.matches=o.matchesSelector||o.mozMatchesSelector||o.msMatchesSelector||o.oMatchesSelector||o.webkitMatchesSelector}e.exports=i},{}],2:[function(t,e,n){function i(t,e,n,i,o){var c=r.apply(this,arguments);return t.addEventListener(n,c,o),{destroy:function(){t.removeEventListener(n,c,o)}}}function r(t,e,n,i){return function(n){n.delegateTarget=o(n.target,e),n.delegateTarget&&i.call(t,n)}}var o=t("./closest");e.exports=i},{"./closest":1}],3:[function(t,e,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},{}],4:[function(t,e,n){function i(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!s.string(e))throw new TypeError("Second argument must be a String");if(!s.fn(n))throw new TypeError("Third argument must be a Function");if(s.node(t))return r(t,e,n);if(s.nodeList(t))return o(t,e,n);if(s.string(t))return c(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function o(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function c(t,e,n){return a(document.body,t,e,n)}var s=t("./is"),a=t("delegate");e.exports=i},{"./is":3,delegate:2}],5:[function(t,e,n){function i(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var i=window.getSelection(),r=document.createRange();r.selectNodeContents(t),i.removeAllRanges(),i.addRange(r),e=i.toString()}return e}e.exports=i},{}],6:[function(t,e,n){function i(){}i.prototype={on:function(t,e,n){var i=this.e||(this.e={});return(i[t]||(i[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function i(){r.off(t,i),e.apply(n,arguments)}var r=this;return i._=e,this.on(t,i,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),i=0,r=n.length;for(i;i<r;i++)n[i].fn.apply(n[i].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),i=n[t],r=[];if(i&&e)for(var o=0,c=i.length;o<c;o++)i[o].fn!==e&&i[o].fn._!==e&&r.push(i[o]);return r.length?n[t]=r:delete n[t],this}},e.exports=i},{}],7:[function(e,n,i){!function(r,o){if("function"==typeof t&&t.amd)t(["module","select"],o);else if(void 0!==i)o(n,e("select"));else{var c={exports:{}};o(c,r.select),r.clipboardAction=c.exports}}(this,function(t,e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var i=function(t){return t&&t.__esModule?t:{default:t}}(e),r="function"==typeof Symbol&&"symbol"===s(Symbol.iterator)?function(t){return void 0===t?"undefined":s(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":void 0===t?"undefined":s(t)},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),c=function(){function t(e){n(this,t),this.resolveOptions(e),this.initSelection()}return o(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=c})},{select:5}],8:[function(e,n,i){!function(r,o){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],o);else if(void 0!==i)o(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var c={exports:{}};o(c,r.clipboardAction,r.tinyEmitter,r.goodListener),r.clipboard=c.exports}}(this,function(t,e,n,i){function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function c(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":s(e))&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":s(e)));t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function u(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}var l=r(e),f=r(n),d=r(i),p="function"==typeof Symbol&&"symbol"===s(Symbol.iterator)?function(t){return void 0===t?"undefined":s(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":void 0===t?"undefined":s(t)},h=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),v=function(t){function e(t,n){o(this,e);var i=c(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return i.resolveOptions(n),i.listenClick(t),i}return a(e,t),h(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===p(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,d.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return u("action",t)}},{key:"defaultTarget",value:function(t){var e=u("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return u("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(f.default);t.exports=v})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.__=function(t){return wphb.strings[t]||""},e.getLink=function(t){return wphb.links[t]||""}},function(t,e,n){(function(e,i){/*!
8
  * @overview es6-promise - a tiny implementation of Promises/A+.
9
  * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
10
  * @license Licensed under MIT license
11
  * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
12
  * @version 4.1.1
13
  */
14
+ !function(e,n){t.exports=n()}(0,function(){"use strict";function t(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}function r(t){return"function"==typeof t}function o(t){Q=t}function c(t){q=t}function s(){return void 0!==z?function(){z(u)}:a()}function a(){var t=setTimeout;return function(){return t(u,1)}}function u(){for(var t=0;t<N;t+=2){(0,X[t])(X[t+1]),X[t]=void 0,X[t+1]=void 0}N=0}function l(t,e){var n=arguments,i=this,r=new this.constructor(d);void 0===r[tt]&&E(r);var o=i._state;return o?function(){var t=n[o-1];q(function(){return A(o,r,t,i._result)})}():k(i,r,t,e),r}function f(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(d);return w(n,t),n}function d(){}function p(){return new TypeError("You cannot resolve a promise with itself")}function h(){return new TypeError("A promises callback cannot return that same promise.")}function v(t){try{return t.then}catch(t){return rt.error=t,rt}}function m(t,e,n,i){try{t.call(e,n,i)}catch(t){return t}}function b(t,e,n){q(function(t){var i=!1,r=m(n,e,function(n){i||(i=!0,e!==n?w(t,n):S(t,n))},function(e){i||(i=!0,x(t,e))},"Settle: "+(t._label||" unknown promise"));!i&&r&&(i=!0,x(t,r))},t)}function y(t,e){e._state===nt?S(t,e._result):e._state===it?x(t,e._result):k(e,void 0,function(e){return w(t,e)},function(e){return x(t,e)})}function g(t,e,n){e.constructor===t.constructor&&n===l&&e.constructor.resolve===f?y(t,e):n===rt?(x(t,rt.error),rt.error=null):void 0===n?S(t,e):r(n)?b(t,e,n):S(t,e)}function w(e,n){e===n?x(e,p()):t(n)?g(e,n,v(n)):S(e,n)}function _(t){t._onerror&&t._onerror(t._result),T(t)}function S(t,e){t._state===et&&(t._result=e,t._state=nt,0!==t._subscribers.length&&q(T,t))}function x(t,e){t._state===et&&(t._state=it,t._result=e,q(_,t))}function k(t,e,n,i){var r=t._subscribers,o=r.length;t._onerror=null,r[o]=e,r[o+nt]=n,r[o+it]=i,0===o&&t._state&&q(T,t)}function T(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var i=void 0,r=void 0,o=t._result,c=0;c<e.length;c+=3)i=e[c],r=e[c+n],i?A(n,i,r,o):r(o);t._subscribers.length=0}}function j(){this.error=null}function O(t,e){try{return t(e)}catch(t){return ot.error=t,ot}}function A(t,e,n,i){var o=r(n),c=void 0,s=void 0,a=void 0,u=void 0;if(o){if(c=O(n,i),c===ot?(u=!0,s=c.error,c.error=null):a=!0,e===c)return void x(e,h())}else c=i,a=!0;e._state!==et||(o&&a?w(e,c):u?x(e,s):t===nt?S(e,c):t===it&&x(e,c))}function P(t,e){try{e(function(e){w(t,e)},function(e){x(t,e)})}catch(e){x(t,e)}}function C(){return ct++}function E(t){t[tt]=ct++,t._state=void 0,t._result=void 0,t._subscribers=[]}function $(t,e){this._instanceConstructor=t,this.promise=new t(d),this.promise[tt]||E(this.promise),U(e)?(this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(e),0===this._remaining&&S(this.promise,this._result))):x(this.promise,I())}function I(){return new Error("Array Methods must be provided an Array")}function M(t){return new $(this,t).promise}function B(t){var e=this;return new e(U(t)?function(n,i){for(var r=t.length,o=0;o<r;o++)e.resolve(t[o]).then(n,i)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function D(t){var e=this,n=new e(d);return x(n,t),n}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function L(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function R(t){this[tt]=C(),this._result=this._state=void 0,this._subscribers=[],d!==t&&("function"!=typeof t&&F(),this instanceof R?P(this,t):L())}function H(){var t=void 0;if(void 0!==i)t=i;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var n=null;try{n=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===n&&!e.cast)return}t.Promise=R}var W=void 0;W=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var U=W,N=0,z=void 0,Q=void 0,q=function(t,e){X[N]=t,X[N+1]=e,2===(N+=2)&&(Q?Q(u):Z())},V="undefined"!=typeof window?window:void 0,Y=V||{},J=Y.MutationObserver||Y.WebKitMutationObserver,K="undefined"==typeof self&&void 0!==e&&"[object process]"==={}.toString.call(e),G="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3),Z=void 0;Z=K?function(){return function(){return e.nextTick(u)}}():J?function(){var t=0,e=new J(u),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}():G?function(){var t=new MessageChannel;return t.port1.onmessage=u,function(){return t.port2.postMessage(0)}}():void 0===V?function(){try{var t=n(71);return z=t.runOnLoop||t.runOnContext,s()}catch(t){return a()}}():a();var tt=Math.random().toString(36).substring(16),et=void 0,nt=1,it=2,rt=new j,ot=new j,ct=0;return $.prototype._enumerate=function(t){for(var e=0;this._state===et&&e<t.length;e++)this._eachEntry(t[e],e)},$.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,i=n.resolve;if(i===f){var r=v(t);if(r===l&&t._state!==et)this._settledAt(t._state,e,t._result);else if("function"!=typeof r)this._remaining--,this._result[e]=t;else if(n===R){var o=new n(d);g(o,t,r),this._willSettleAt(o,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(i(t),e)},$.prototype._settledAt=function(t,e,n){var i=this.promise;i._state===et&&(this._remaining--,t===it?x(i,n):this._result[e]=n),0===this._remaining&&S(i,this._result)},$.prototype._willSettleAt=function(t,e){var n=this;k(t,void 0,function(t){return n._settledAt(nt,e,t)},function(t){return n._settledAt(it,e,t)})},R.all=M,R.race=B,R.resolve=f,R.reject=D,R._setScheduler=o,R._setAsap=c,R._asap=q,R.prototype={constructor:R,then:l,catch:function(t){return this.then(null,t)}},R.polyfill=H,R.Promise=R,R})}).call(e,n(70),n(17))},function(t,e){function n(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}t.exports=n},function(t,e,n){function i(t,e){var n=c(t),i=!n&&o(t),l=!n&&!i&&s(t),d=!n&&!i&&!l&&u(t),p=n||i||l||d,h=p?r(t.length,String):[],v=h.length;for(var m in t)!e&&!f.call(t,m)||p&&("length"==m||l&&("offset"==m||"parent"==m)||d&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||a(m,v))||h.push(m);return h}var r=n(44),o=n(64),c=n(65),s=n(66),a=n(11),u=n(67),l=Object.prototype,f=l.hasOwnProperty;t.exports=i},function(t,e,n){function i(t){return o(t)&&r(t)==c}var r=n(1),o=n(5),c="[object Arguments]";t.exports=i},function(t,e,n){function i(t){return!(!c(t)||o(t))&&(r(t)?h:u).test(s(t))}var r=n(15),o=n(53),c=n(4),s=n(61),a=/[\\^$.*+?()[\]{}|]/g,u=/^\[object .+?Constructor\]$/,l=Function.prototype,f=Object.prototype,d=l.toString,p=f.hasOwnProperty,h=RegExp("^"+d.call(p).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=i},function(t,e,n){function i(t){return c(t)&&o(t.length)&&!!s[r(t)]}var r=n(1),o=n(16),c=n(5),s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s["[object Arguments]"]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s["[object Function]"]=s["[object Map]"]=s["[object Number]"]=s["[object Object]"]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1,t.exports=i},function(t,e,n){function i(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))s.call(t,n)&&"constructor"!=n&&e.push(n);return e}var r=n(12),o=n(54),c=Object.prototype,s=c.hasOwnProperty;t.exports=i},function(t,e,n){function i(t,e){return c(o(t,e,r),t+"")}var r=n(14),o=n(58),c=n(59);t.exports=i},function(t,e,n){var i=n(63),r=n(9),o=n(14),c=r?function(t,e){return r(t,"toString",{configurable:!0,enumerable:!1,value:i(e),writable:!0})}:o;t.exports=c},function(t,e){function n(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i}t.exports=n},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e,n){function i(t,e,n,i){var c=!n;n||(n={});for(var s=-1,a=e.length;++s<a;){var u=e[s],l=i?i(n[u],t[u],u,n,t):void 0;void 0===l&&(l=t[u]),c?o(n,u,l):r(n,u,l)}return n}var r=n(7),o=n(8);t.exports=i},function(t,e,n){var i=n(2),r=i["__core-js_shared__"];t.exports=r},function(t,e,n){function i(t){return r(function(e,n){var i=-1,r=n.length,c=r>1?n[r-1]:void 0,s=r>2?n[2]:void 0;for(c=t.length>3&&"function"==typeof c?(r--,c):void 0,s&&o(n[0],n[1],s)&&(c=r<3?void 0:c,r=1),e=Object(e);++i<r;){var a=n[i];a&&t(e,a,i,c)}return e})}var r=n(42),o=n(52);t.exports=i},function(t,e,n){function i(t,e){var n=o(t,e);return r(n)?n:void 0}var r=n(39),o=n(51);t.exports=i},function(t,e,n){function i(t){var e=c.call(t,a),n=t[a];try{t[a]=void 0;var i=!0}catch(t){}var r=s.call(t);return i&&(e?t[a]=n:delete t[a]),r}var r=n(6),o=Object.prototype,c=o.hasOwnProperty,s=o.toString,a=r?r.toStringTag:void 0;t.exports=i},function(t,e){function n(t,e){return null==t?void 0:t[e]}t.exports=n},function(t,e,n){function i(t,e,n){if(!s(n))return!1;var i=typeof e;return!!("number"==i?o(n)&&c(e,n.length):"string"==i&&e in n)&&r(n[e],t)}var r=n(13),o=n(3),c=n(11),s=n(4);t.exports=i},function(t,e,n){function i(t){return!!o&&o in t}var r=n(47),o=function(){var t=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();t.exports=i},function(t,e,n){var i=n(57),r=i(Object.keys,Object);t.exports=r},function(t,e,n){(function(t){var i=n(10),r="object"==typeof e&&e&&!e.nodeType&&e,o=r&&"object"==typeof t&&t&&!t.nodeType&&t,c=o&&o.exports===r,s=c&&i.process,a=function(){try{return s&&s.binding&&s.binding("util")}catch(t){}}();t.exports=a}).call(e,n(18)(t))},function(t,e){function n(t){return r.call(t)}var i=Object.prototype,r=i.toString;t.exports=n},function(t,e){function n(t,e){return function(n){return t(e(n))}}t.exports=n},function(t,e,n){function i(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,c=-1,s=o(i.length-e,0),a=Array(s);++c<s;)a[c]=i[e+c];c=-1;for(var u=Array(e+1);++c<e;)u[c]=i[c];return u[e]=n(a),r(t,this,u)}}var r=n(36),o=Math.max;t.exports=i},function(t,e,n){var i=n(43),r=n(60),o=r(i);t.exports=o},function(t,e){function n(t){var e=0,n=0;return function(){var c=o(),s=r-(c-n);if(n=c,s>0){if(++e>=i)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var i=800,r=16,o=Date.now;t.exports=n},function(t,e){function n(t){if(null!=t){try{return r.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var i=Function.prototype,r=i.toString;t.exports=n},function(t,e,n){var i=n(7),r=n(46),o=n(48),c=n(3),s=n(12),a=n(68),u=Object.prototype,l=u.hasOwnProperty,f=o(function(t,e){if(s(e)||c(e))return void r(e,a(e),t);for(var n in e)l.call(e,n)&&i(t,n,e[n])});t.exports=f},function(t,e){function n(t){return function(){return t}}t.exports=n},function(t,e,n){var i=n(38),r=n(5),o=Object.prototype,c=o.hasOwnProperty,s=o.propertyIsEnumerable,a=i(function(){return arguments}())?i:function(t){return r(t)&&c.call(t,"callee")&&!s.call(t,"callee")};t.exports=a},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){(function(t){var i=n(2),r=n(69),o="object"==typeof e&&e&&!e.nodeType&&e,c=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=c&&c.exports===o,a=s?i.Buffer:void 0,u=a?a.isBuffer:void 0,l=u||r;t.exports=l}).call(e,n(18)(t))},function(t,e,n){var i=n(40),r=n(45),o=n(55),c=o&&o.isTypedArray,s=c?r(c):i;t.exports=s},function(t,e,n){function i(t){return c(t)?r(t):o(t)}var r=n(37),o=n(41),c=n(3);t.exports=i},function(t,e){function n(){return!1}t.exports=n},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function r(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(f===clearTimeout)return clearTimeout(t);if((f===i||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function c(){v&&p&&(v=!1,p.length?h=p.concat(h):m=-1,h.length&&s())}function s(){if(!v){var t=r(c);v=!0;for(var e=h.length;e;){for(p=h,h=[];++m<e;)p&&p[m].run();m=-1,e=h.length}p=null,v=!1,o(t)}}function a(t,e){this.fun=t,this.array=e}function u(){}var l,f,d=t.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{f="function"==typeof clearTimeout?clearTimeout:i}catch(t){f=i}}();var p,h=[],v=!1,m=-1;d.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];h.push(new a(t,e)),1!==h.length||v||r(s)},a.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=u,d.addListener=u,d.once=u,d.off=u,d.removeListener=u,d.removeAllListeners=u,d.emit=u,d.prependListener=u,d.prependOnceListener=u,d.listeners=function(t){return[]},d.binding=function(t){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(t){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},function(t,e){}]);
15
  //# sourceMappingURL=admin.min.js.map
admin/assets/js/admin.min.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///admin.min.js","webpack:///webpack/bootstrap 8c288d1698b31a5166bb","webpack:///./_src/admin/js/utils/fetcher.js","webpack:///./~/lodash/_baseGetTag.js","webpack:///./~/lodash/_root.js","webpack:///./~/lodash/isArrayLike.js","webpack:///./~/lodash/isObject.js","webpack:///./~/lodash/isObjectLike.js","webpack:///./~/lodash/_Symbol.js","webpack:///./~/lodash/_assignValue.js","webpack:///./~/lodash/_baseAssignValue.js","webpack:///./~/lodash/_defineProperty.js","webpack:///./~/lodash/_freeGlobal.js","webpack:///./~/lodash/_isIndex.js","webpack:///./~/lodash/_isPrototype.js","webpack:///./~/lodash/eq.js","webpack:///./~/lodash/identity.js","webpack:///./~/lodash/isFunction.js","webpack:///./~/lodash/isLength.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/module.js","webpack:///./_src/admin/js/admin-app.js","webpack:///./_src/admin/js/admin-caching.js","webpack:///./_src/admin/js/admin-cloudflare.js","webpack:///./_src/admin/js/admin-dashboard-cloudflare.js","webpack:///./_src/admin/js/admin-dashboard.js","webpack:///./_src/admin/js/admin-gzip.js","webpack:///./_src/admin/js/admin-main.js","webpack:///./_src/admin/js/admin-minification.js","webpack:///./_src/admin/js/admin-performance.js","webpack:///./_src/admin/js/admin-uptime.js","webpack:///./_src/admin/js/index.js","webpack:///./_src/admin/js/minification/Row.js","webpack:///./_src/admin/js/minification/RowsCollection.js","webpack:///./_src/admin/js/minification/Scanner.js","webpack:///./_src/admin/js/utils/clipboard.js","webpack:///./_src/admin/js/utils/helpers.js","webpack:///./~/es6-promise/dist/es6-promise.js","webpack:///./~/lodash/_apply.js","webpack:///./~/lodash/_arrayLikeKeys.js","webpack:///./~/lodash/_baseIsArguments.js","webpack:///./~/lodash/_baseIsNative.js","webpack:///./~/lodash/_baseIsTypedArray.js","webpack:///./~/lodash/_baseKeys.js","webpack:///./~/lodash/_baseRest.js","webpack:///./~/lodash/_baseSetToString.js","webpack:///./~/lodash/_baseTimes.js","webpack:///./~/lodash/_baseUnary.js","webpack:///./~/lodash/_copyObject.js","webpack:///./~/lodash/_coreJsData.js","webpack:///./~/lodash/_createAssigner.js","webpack:///./~/lodash/_getNative.js","webpack:///./~/lodash/_getRawTag.js","webpack:///./~/lodash/_getValue.js","webpack:///./~/lodash/_isIterateeCall.js","webpack:///./~/lodash/_isMasked.js","webpack:///./~/lodash/_nativeKeys.js","webpack:///./~/lodash/_nodeUtil.js","webpack:///./~/lodash/_objectToString.js","webpack:///./~/lodash/_overArg.js","webpack:///./~/lodash/_overRest.js","webpack:///./~/lodash/_setToString.js","webpack:///./~/lodash/_shortOut.js","webpack:///./~/lodash/_toSource.js","webpack:///./~/lodash/assign.js","webpack:///./~/lodash/constant.js","webpack:///./~/lodash/isArguments.js","webpack:///./~/lodash/isArray.js","webpack:///./~/lodash/isBuffer.js","webpack:///./~/lodash/isTypedArray.js","webpack:///./~/lodash/keys.js","webpack:///./~/lodash/stubFalse.js","webpack:///./~/process/browser.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","Fetcher","request","action","data","arguments","length","undefined","method","nonce","fetchNonce","args","url","fetchUrl","Promise","resolve","reject","jQuery","ajax","done","fail","then","response","checkStatus","ajaxurl","wphb","nonces","HBFetchNonce","methods","caching","setExpiration","type","actionPrefix","setServer","reloadSnippets","cloudflare","connect","step","formData","cfData","purgeCache","dashboard","toggleMinification","skipSetup","minification","toggleCDN","startCheck","checkStep","finishCheck","cancelScan","performance","runTest","addRecipient","email","actionPrefixPro","saveReportsSettings","_assign2","default","this","_typeof","JSON","parse","success","error","Error","message","Symbol","iterator","obj","constructor","_assign","HBFetcher","baseGetTag","undefinedTag","nullTag","symToStringTag","getRawTag","objectToString","toStringTag","freeGlobal","freeSelf","self","root","Function","isArrayLike","isLength","isFunction","isObject","isObjectLike","assignValue","key","objValue","eq","baseAssignValue","objectProto","writable","getNative","func","e","global","isIndex","MAX_SAFE_INTEGER","reIsUint","test","isPrototype","Ctor","other","identity","tag","funcTag","genTag","asyncTag","proxyTag","g","eval","window","webpackPolyfill","deprecate","paths","children","document","ready","WPHB_Admin","init","_interopRequireDefault","_clipboard","_clipboard2","_fetcher","_fetcher2","$","selectedServer","$serverSelector","$serverInstructions","$expirySelectors","$snippets","cachingMetabox","cachingContent","find","cachingContentSpinner","cloudflareLink","wphbCachingStrings","strings","on","preventDefault","val","trigger","hideCurrentInstructions","showServerInstructions","animate","scrollTop","offset","top","apache","first","LiteSpeed","nginx","each","change","hide","fadeIn","element","attr","show","selected","server","serverTab","text","code","updatedFile","location","href","recheckURL","cacheEnabled","htaccessErrorURL","$cfSelector","$spinner","is","connected","setExpiry","selector","displaySpinner","reload","css","DashboardCloudFlare","settings","currentStep","apiKey","$stepsContainer","$infoBox","$deactivateButton","renderStep","apply","target","bind","$button","showSpinner","$notice","scrollTo","slideDown","setTimeout","slideUp","removeAttr","hideSpinner","template","content","html","submitStep","bindEvents","$howToInstructions","click","toggle","WDP","wpmuSelect","removeClass","addClass","emptyInfoBox","showInfoBox","$form","serialize","newData","nextStep","redirect","catch","_","memoize","id","compiled","options","evaluate","interpolate","escape","variable","templateSettings","wphbDashboardStrings","CDNcheckbox","prop","showNotice","notice","startQuickSetup","showOverlay","class","runPerformanceTest","getModule","performanceTest","finishedTestURLsLink","gzip","updatePerformanceGraph","$wrap","$item","parseInt","$circle","r","pct","Math","PI","strokeDashoffset","updatePerformanceResultsGraphs","register_events_performance","initModule","utils","membershipModal","open","post","notices","parent","_helpers","_Row","_Row2","_RowsCollection","_RowsCollection2","_Scanner","_Scanner2","$checkFilesButton","$checkFilesResultsContainer","checkURLSList","checkedURLS","_this","scanner","totalSteps","currentScanStep","onFinishStep","updateProgressBar","onFinish","showCDNModal","show_cdn","getLink","$disableMinification","getProgress","scan","cancel","confirm","__","cdn_value","timer","clearTimeout","rowsCollection","RowsCollection","index","row","_row","Row","push","keyup","addFilter","applyFilters","what","visibleItems","getVisibleItems","$this","getItemById","select","unSelect","items","getItems","checkbox","getElement","checkboxes","checkedState","checked","innerWidth","minification_resize_rows","debounce","addEventListener","progress","width","iteration","body","wphbPerformanceStrings","$runTestButton","performanceReportTable","off","getParentPerformanceItem","closest","getNextAdditionalContentRow","nextUntil","toggleClass","hasClass","hash","remove","user_row","img","src","avatar","append","data-id","user_id","alt","removeButtonText","stringify","appendTo","alert","form_data","that","showUpdateMessage","finished","uptime","$dataRangeSelector","chartData","wphbUptimeStrings","$disableUptime","disableUptimeURL","drawChart","google","visualization","DataTable","addColumn","chart_array","Date","round","addRows","chartArea","left","height","colors","curveType","legend","position","vAxis","format","viewWindow","min","tooltip","isHtml","series","0","axis","axes","y","Resp","label","chart","LineChart","getElementById","draw","resize","_element","_filter","_filter_sec","$el","filter","toLowerCase","filterSecondary","visible","$include","$combine","$minify","$posFooter","$defer","$disableIcon","getId","getFilter","matchFilter","search","matchSecondaryFilter","isVisible","isSelected","currentFilter","currentSecondaryFilter","getItem","getSelectedItems","MinificationScanner","cancelling","remainingSteps","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","require","_typeof2","f","define","t","u","a","1","nodeType","DOCUMENT_NODE_TYPE","matches","parentNode","Element","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","2","delegate","callback","useCapture","listenerFn","listener","destroy","removeEventListener","delegateTarget","./closest","3","node","HTMLElement","nodeList","toString","string","String","fn","4","listen","TypeError","listenNode","listenNodeList","listenSelector","Array","forEach","./is","5","selectedText","nodeName","focus","isReadOnly","hasAttribute","setAttribute","setSelectionRange","removeAttribute","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","6","E","ctx","once","emit","slice","evtArr","len","evts","liveEvents","7","factory","amd","mod","clipboardAction","_select","_classCallCheck","instance","Constructor","_select2","_createClass","defineProperties","props","descriptor","protoProps","staticProps","ClipboardAction","resolveOptions","initSelection","container","emitter","selectFake","selectTarget","isRTL","documentElement","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","createElement","style","fontSize","border","padding","margin","yPosition","pageYOffset","appendChild","copyText","removeChild","succeeded","execCommand","err","handleResult","clearSelection","set","_action","_target","8","tinyEmitter","goodListener","clipboard","_clipboardAction","_tinyEmitter","_goodListener","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","getAttributeValue","suffix","attribute","_clipboardAction2","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","getPrototypeOf","listenClick","defaultAction","defaultTarget","defaultText","_this2","onClick","currentTarget","querySelector","actions","support","queryCommandSupported","./clipboard-action","good-listener","tiny-emitter","str","screen","links","process","objectOrFunction","x","setScheduler","scheduleFn","customSchedulerFn","setAsap","asapFn","asap","useVertxTimer","vertxNext","flush","useSetTimeout","globalSetTimeout","queue","onFulfillment","onRejection","_arguments","child","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","promise","selfFulfillment","cannotReturnOwn","getThen","GET_THEN_ERROR","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","_label","handleOwnThenable","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","PENDING","_subscribers","subscribers","settled","detail","ErrorObject","tryCatch","TRY_CATCH_ERROR","hasCallback","failed","initializePromise","resolver","nextId","Enumerator$1","input","_instanceConstructor","isArray","_remaining","_enumerate","validationError","all$1","entries","race$1","reject$1","needsResolver","needsNew","Promise$2","polyfill$1","local","P","promiseToString","cast","_isArray","arg","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","MessageChannel","nextTick","iterations","observer","createTextNode","observe","characterData","channel","port1","onmessage","port2","postMessage","vertx","runOnLoop","runOnContext","random","substring","_eachEntry","entry","resolve$$1","_then","_settledAt","_willSettleAt","state","enumerator","all","race","_setScheduler","_setAsap","_asap","polyfill","thisArg","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","result","baseTimes","baseIsArguments","argsTag","baseIsNative","isMasked","reIsNative","reIsHostCtor","toSource","reRegExpChar","funcProto","funcToString","RegExp","replace","baseIsTypedArray","typedArrayTags","baseKeys","nativeKeys","baseRest","start","setToString","overRest","constant","baseSetToString","iteratee","baseUnary","copyObject","source","customizer","isNew","newValue","coreJsData","createAssigner","assigner","sources","guard","isIterateeCall","getValue","isOwn","unmasked","nativeObjectToString","maskSrcKey","uid","exec","keys","IE_PROTO","overArg","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","binding","transform","nativeMax","array","otherArgs","max","shortOut","count","lastCalled","stamp","nativeNow","remaining","HOT_SPAN","HOT_COUNT","now","assign","propertyIsEnumerable","stubFalse","Buffer","nativeIsBuffer","nodeIsTypedArray","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","concat","queueIndex","drainQueue","timeout","run","Item","title","browser","env","argv","version","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","cwd","chdir","dir","umask"],"mappings":"CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAK,EAAA,SAAAK,GAA2C,MAAAA,IAG3CV,EAAAW,EAAA,SAAAR,EAAAS,EAAAC,GACAb,EAAAc,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAb,EAAAoB,EAAA,SAAAhB,GACA,GAAAS,GAAAT,KAAAiB,WACA,WAA2B,MAAAjB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAW,EAAAE,EAAA,IAAAA,GACAA,GAIAb,EAAAc,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDvB,EAAA0B,EAAA,GAGA1B,IAAA2B,EAAA,MDMM,SAAUvB,EAAQD,EAASH,GAEjC,YEtEA,SAAS4B,KAML,QAASC,GAASC,GAAoC,GAA5BC,GAA4BC,UAAAC,OAAA,OAAAC,KAAAF,UAAA,GAAAA,UAAA,MAAjBG,EAAiBH,UAAAC,OAAA,OAAAC,KAAAF,UAAA,GAAAA,UAAA,GAAR,KAC1CD,GAAKK,MAASC,EACdN,EAAKD,OAASA,CACd,IAAIQ,IAASP,OAAMI,SAGnB,OAFAG,GAAKC,IAAMC,EAEJ,IAAIC,EADGzC,EAAQ,IAAeyC,SACjB,SAAEC,EAASC,GAC3BC,OAAOC,KAAMP,GAAOQ,KAAMJ,GAAUK,KAAMJ,KAEzCK,KAAM,SAAEC,GAAF,MAAgBC,GAAaD,KAd5C,GAAMT,GAAkBW,QAClBd,EAAkBe,KAAKC,OAAOC,aAiB9BC,GAIFC,SAOIC,cAAe,SAAEC,EAAMhD,GAEnB,MAAOmB,GADQ8B,+BACWD,OAAMhD,SAAS,SAQ7CkD,UAAW,SAAElD,GAET,MAAOmB,GADQ8B,gCACWjD,SAAS,SAQvCmD,eAAgB,SAAEH,GAEd,MAAO7B,GADQ8B,+BACWD,QAAQ,QAC7BV,KAAM,SAAEC,GACL,MAAOA,OAQvBa,YAQLC,QAAS,SAAEC,EAAMC,EAAUC,GAEd,MAAOrC,GADJ8B,2BACuBK,OAAMC,WAAUC,UAAU,QAC/ClB,KAAM,SAAEC,GACL,MAAOA,MASnBQ,cAAe,SAAE/C,GAEb,MAAOmB,GADQ8B,8BACWjD,SAAS,SAMhDyD,WAAY,WAEC,MAAOtC,GADQ8B,iCACa,UAOpCS,WAMIC,mBAAoB,SAAE3D,GAElB,MAAOmB,GADQ8B,yCACWjD,SAAS,SAMhD4D,UAAW,WAEE,MAAOzC,GADQ8B,0BACa,UAOpCY,cAMIC,UAAW,SAAE9D,GAET,MAAOmB,GADQ8B,gCACWjD,SAAS,SAQvC2D,mBAAoB,SAAE3D,GAElB,MAAOmB,GADQ8B,yCACWjD,SAAS,SAQvC+D,WAAY,WAER,MAAO5C,GADQ8B,mCACa,SAShCe,UAAW,SAAEV,GAET,MAAOnC,GADQ8B,gCACWK,QAAQ,QAC7BhB,KAAM,SAAEC,GACL,MAAOA,MAOnB0B,YAAa,WAET,MAAO9C,GADQ8B,mCACa,SAMzCiB,WAAY,WAEX,MAAO/C,GADQ8B,mCACa,UAOxBkB,aAILC,QAAS,WAEI,MAAOjD,GADQ8B,+BACa,QACvBX,KAAM,SAAEC,GACN,MAAOA,MAUlB8B,aAAc,SAAEC,EAAOpE,GAEnB,MAAOiB,GADQoD,sCACWD,QAAOpE,QAAQ,QACpCoC,KAAM,SAAEC,GACL,MAAOA,MASnBiC,oBAAqB,SAAEnD,GAEnB,MAAOF,GADQoD,8CACWlD,QAAQ,YAK9C,EAAAoD,EAAAC,SAAQC,KAAM9B,GAMlB,QAASL,GAAaD,GAIlB,GAHyB,gBAApB,KAAOA,EAAP,YAAAqC,EAAOrC,MACRA,EAAWsC,KAAKC,MAAOvC,IAEtBA,EAASwC,QACV,MAAOxC,GAASlB,IAGpB,IAAIA,GAAOkB,EAASlB,SACd2D,EAAQ,GAAIC,OAAO5D,EAAK6D,SAAW,6CAEzC,MADAF,GAAMzC,SAAWA,EACXyC,EF1KV3E,OAAOC,eAAeb,EAAS,cAC3BO,OAAO,GAGX,IAAI4E,GAA4B,kBAAXO,SAAoD,gBAApBA,QAAOC,SAAwB,SAAUC,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOrE,UAAY,eAAkBuE,IE/EtQE,EAAAjG,EAAA,IFmFImF,EAEJ,SAAgCY,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,IAFjDE,GEoJhCC,EAAY,GAAItE,EFoFtBzB,GAAQiF,QEnFOc,GFsGT,SAAU9F,EAAQD,EAASH,GG5TjC,QAAAmG,GAAAzF,GACA,aAAAA,MACAwB,KAAAxB,EAAA0F,EAAAC,EAEAC,OAAAvF,QAAAL,GACA6F,EAAA7F,GACA8F,EAAA9F,GAxBA,GAAAmF,GAAA7F,EAAA,GACAuG,EAAAvG,EAAA,IACAwG,EAAAxG,EAAA,IAGAqG,EAAA,gBACAD,EAAA,qBAGAE,EAAAT,IAAAY,gBAAAvE,EAkBA9B,GAAAD,QAAAgG,GHqVM,SAAU/F,EAAQD,EAASH,GIhXjC,GAAA0G,GAAA1G,EAAA,IAGA2G,EAAA,gBAAAC,kBAAA7F,iBAAA6F,KAGAC,EAAAH,GAAAC,GAAAG,SAAA,gBAEA1G,GAAAD,QAAA0G,GJuXM,SAAUzG,EAAQD,EAASH,GKnWjC,QAAA+G,GAAArG,GACA,aAAAA,GAAAsG,EAAAtG,EAAAuB,UAAAgF,EAAAvG,GA7BA,GAAAuG,GAAAjH,EAAA,IACAgH,EAAAhH,EAAA,GA+BAI,GAAAD,QAAA4G,GLsYM,SAAU3G,EAAQD,GM7YxB,QAAA+G,GAAAxG,GACA,GAAAgD,SAAAhD,EACA,cAAAA,IAAA,UAAAgD,GAAA,YAAAA,GAGAtD,EAAAD,QAAA+G,GN6aM,SAAU9G,EAAQD,GOnbxB,QAAAgH,GAAAzG,GACA,aAAAA,GAAA,gBAAAA,GAGAN,EAAAD,QAAAgH,GPkdM,SAAU/G,EAAQD,EAASH,GQ9ejC,GAAA6G,GAAA7G,EAAA,GAGA6F,EAAAgB,EAAAhB,MAEAzF,GAAAD,QAAA0F,GRqfM,SAAUzF,EAAQD,EAASH,GSvejC,QAAAoH,GAAA9F,EAAA+F,EAAA3G,GACA,GAAA4G,GAAAhG,EAAA+F,EACA5F,GAAAlB,KAAAe,EAAA+F,IAAAE,EAAAD,EAAA5G,SACAwB,KAAAxB,GAAA2G,IAAA/F,KACAkG,EAAAlG,EAAA+F,EAAA3G,GAvBA,GAAA8G,GAAAxH,EAAA,GACAuH,EAAAvH,EAAA,IAGAyH,EAAA1G,OAAAS,UAGAC,EAAAgG,EAAAhG,cAoBArB,GAAAD,QAAAiH,GTigBM,SAAUhH,EAAQD,EAASH,GUjhBjC,QAAAwH,GAAAlG,EAAA+F,EAAA3G,GACA,aAAA2G,GAAArG,EACAA,EAAAM,EAAA+F,GACApG,cAAA,EACAC,YAAA,EACAR,QACAgH,UAAA,IAGApG,EAAA+F,GAAA3G,EApBA,GAAAM,GAAAhB,EAAA,EAwBAI,GAAAD,QAAAqH,GVmiBM,SAAUpH,EAAQD,EAASH,GW3jBjC,GAAA2H,GAAA3H,EAAA,IAEAgB,EAAA,WACA,IACA,GAAA4G,GAAAD,EAAA5G,OAAA,iBAEA,OADA6G,MAAW,OACXA,EACG,MAAAC,OAGHzH,GAAAD,QAAAa,GXkkBM,SAAUZ,EAAQD,EAASH,IY5kBjC,SAAA8H,GACA,GAAApB,GAAA,gBAAAoB,SAAA/G,iBAAA+G,CAEA1H,GAAAD,QAAAuG,IZglB6BnG,KAAKJ,EAASH,EAAoB,MAIzD,SAAUI,EAAQD,GazkBxB,QAAA4H,GAAArH,EAAAuB,GAEA,SADAA,EAAA,MAAAA,EAAA+F,EAAA/F,KAEA,gBAAAvB,IAAAuH,EAAAC,KAAAxH,KACAA,GAAA,GAAAA,EAAA,MAAAA,EAAAuB,EAjBA,GAAA+F,GAAA,iBAGAC,EAAA,kBAiBA7H,GAAAD,QAAA4H,Gb8lBM,SAAU3H,EAAQD,GczmBxB,QAAAgI,GAAAzH,GACA,GAAA0H,GAAA1H,KAAAsF,WAGA,OAAAtF,MAFA,kBAAA0H,MAAA5G,WAAAiG,GAXA,GAAAA,GAAA1G,OAAAS,SAgBApB,GAAAD,QAAAgI,Gd0nBM,SAAU/H,EAAQD,Ge3mBxB,QAAAoH,GAAA7G,EAAA2H,GACA,MAAA3H,KAAA2H,GAAA3H,OAAA2H,MAGAjI,EAAAD,QAAAoH,GfkpBM,SAAUnH,EAAQD,GgBtqBxB,QAAAmI,GAAA5H,GACA,MAAAA,GAGAN,EAAAD,QAAAmI,GhB6rBM,SAAUlI,EAAQD,EAASH,GiBvrBjC,QAAAiH,GAAAvG,GACA,IAAAwG,EAAAxG,GACA,QAIA,IAAA6H,GAAApC,EAAAzF,EACA,OAAA6H,IAAAC,GAAAD,GAAAE,GAAAF,GAAAG,GAAAH,GAAAI,EAjCA,GAAAxC,GAAAnG,EAAA,GACAkH,EAAAlH,EAAA,GAGA0I,EAAA,yBACAF,EAAA,oBACAC,EAAA,6BACAE,EAAA,gBA6BAvI,GAAAD,QAAA8G,GjBwtBM,SAAU7G,EAAQD,GkB/tBxB,QAAA6G,GAAAtG,GACA,sBAAAA,IACAA,GAAA,GAAAA,EAAA,MAAAA,GAAAsH,EA9BA,GAAAA,GAAA,gBAiCA5H,GAAAD,QAAA6G,GlBmwBM,SAAU5G,EAAQD,GmBryBxB,GAAAyI,EAGAA,GAAA,WACA,MAAAvD,QAGA,KAEAuD,KAAA9B,SAAA,qBAAA+B,MAAA,QACC,MAAAhB,GAED,gBAAAiB,UACAF,EAAAE,QAOA1I,EAAAD,QAAAyI,GnB4yBM,SAAUxI,EAAQD,GoBh0BxBC,EAAAD,QAAA,SAAAC,GAoBA,MAnBAA,GAAA2I,kBACA3I,EAAA4I,UAAA,aACA5I,EAAA6I,SAEA7I,EAAA8I,WAAA9I,EAAA8I,aACAnI,OAAAC,eAAAZ,EAAA,UACAc,YAAA,EACAC,IAAA,WACA,MAAAf,GAAAE,KAGAS,OAAAC,eAAAZ,EAAA,MACAc,YAAA,EACAC,IAAA,WACA,MAAAf,GAAAC,KAGAD,EAAA2I,gBAAA,GAEA3I,IpBw0BM,SAAUA,EAAQD,EAASH,GAEjC,YqB91BA4C,QAAOuG,UAAUC,MAAO,WACpBC,WAAWC,UrBs2BT,SAAUlJ,EAAQD,EAASH,GAEjC,YAWA,SAASuJ,GAAuBxD,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,GsBp3BvF,GAAAyD,GAAAxJ,EAAA,ItB82BIyJ,EAAcF,EAAuBC,GsB72BzCE,EAAA1J,EAAA,GtBi3BI2J,EAAYJ,EAAuBG,IsB/2BrC,SAAUE,GAERP,WAAW7F,SAEPpD,OAAQ,UACRyJ,eAAgB,GAChBC,gBAAiB,KACjBC,uBACAC,oBACAC,aAEAX,KAAM,WACF,GAAI1C,GAA0BvB,KAC1B6E,EAA0BN,EAAE,8BAC5BO,EAA0BD,EAAeE,KAAK,kBAC9CC,EAA0BF,EAAeC,KAAK,YAC9CE,EAA0BV,EAAE,sDA4EhC,OA1ET,IAAAH,GAAArE,QAAc,8BAEAmF,qBACD3D,EAAK4D,QAAUD,oBAEnBD,EAAeG,GAAG,QAAS,SAAS5C,GAChCA,EAAE6C,iBACdd,EAAE,qBAAqBe,IAAI,cAAcC,QAAQ,eACjDhE,EAAKiE,0BACLjE,EAAKkE,uBAAuB,cAC5BlE,EAAKiD,eAAiB,aACtBD,EAAE,cAAcmB,SAAUC,UAAWpB,EAAE,qBAAqBqB,SAASC,KAAO,UAGpE7F,KAAKyE,gBAAkBF,EAAG,qBAC1BvE,KAAKwE,eAAkBxE,KAAKyE,gBAAgBa,MAG5C/D,EAAKqD,UAAUkB,OAAYvB,EAAE,6BAA6BQ,KAAK,OAAOgB,QAC/ExE,EAAKqD,UAAUoB,UAAezB,EAAE,gCAAgCQ,KAAK,OAAOgB,QACnExE,EAAKqD,UAAUqB,MAAY1B,EAAE,4BAA4BQ,KAAK,OAAOgB,QAE9CxB,EAAG,6BACT2B,KAAM,WACnB3E,EAAKmD,oBAAqBH,EAAEvE,MAAMtD,KAAK,WAAc6H,EAAEvE,QAGrCuE,EAAG,uBAET2B,KAAM,WAClB,GAAM7H,GAAOkG,EAAEvE,MAAMtD,KAAK,OACrB2B,IACDkG,EAAEvE,MAAMmG,OAAQ,WAEZrB,EAAeC,KAAK,iBAAiBqB,OACrCpB,EAAsBqB,SACtB9B,EAAE,gBAAgB6B,OAGlB,SAAYE,GACR,GAAMjL,GAAQkJ,EAAG+B,GAAUhB,KAE3BhB,GAAAvE,QAAQ5B,QAAQC,cAAeC,EAAMhD,GAChCsC,KAAM,WAEH4D,EAAK/C,oBAGbwB,UAMhBA,KAAKyF,uBAAwBzF,KAAKwE,gBAElCxE,KAAKyE,gBAAgB0B,OAAQ,WACzB,GAAI9K,GAAQkJ,EAAEvE,MAAMsF,KACpB/D,GAAKiE,0BACLjE,EAAKkE,uBAAwBpK,GAC7BkG,EAAKhD,UAAUlD,GACfkG,EAAKiD,eAAiBnJ,IAG1BkJ,EAAE,iCAAiCa,GAAI,QAAS,WACvC,qBAAuBb,EAAEvE,MAAMuG,KAAK,OACpDhC,EAAE,kBAAkBQ,KAAM,+BAAgCqB,OAC1D7B,EAAE,kBAAkBQ,KAAM,6BAA8ByB,QACjC,uBAAyBjC,EAAEvE,MAAMuG,KAAK,QAC7DhC,EAAE,kBAAkBQ,KAAM,6BAA8BqB,OACxD7B,EAAE,kBAAkBQ,KAAM,+BAAgCyB,UAI5CxG,MAGXzB,UAAW,SAAUlD,GACjBiJ,EAAAvE,QAAQ5B,QAAQI,UAAWlD,IAG/BmK,wBAAyB,WACrB,GAAIiB,GAAWzG,KAAKwE,cACfxE,MAAK0E,oBAAqB+B,IAC3BzG,KAAK0E,oBAAqB+B,GAAWL,QAI7CX,uBAAwB,SAAUiB,GAC9B,OAAmD,KAAvC1G,KAAK0E,oBAAqBgC,GAA2B,CAC7D,GAAIC,GAAY3G,KAAK0E,oBAAqBgC,EACtDC,GAAUH,OAEVG,EAAU5B,KAAK,4BAA4BQ,QAAQ,SAGtC,WAAamB,GAAU,cAAgBA,EACxCnC,EAAG,sBAAwBmC,GAASF,OAGpCjC,EAAG,sBAAuB6B,QAIlC5H,eAAgB,WACZ,GAAI+C,GAAOvB,IAGX,KAAM,GAAIhF,KAAKuG,GAAKqD,UACXrD,EAAKqD,UAAUxI,eAAgBpB,IAChCsJ,EAAAvE,QAAQ5B,QAAQK,eAAgBxD,GAC3B2C,KAAM,SAAEC,GAKL2D,EAAKqD,UAAUhH,EAASS,MAAMuI,KAAMhJ,EAASiJ,MAGxCjJ,EAASS,OAASkD,EAAKiD,iBAIvB,WAAa5G,EAASS,MAAQT,EAASkJ,aACxCvC,EAAG,8CAA+CiC,OAClDO,SAASC,KAAOzF,EAAK4D,QAAQ8B,WAAa,yBAClC,WAAarJ,EAASS,MAAQkD,EAAK4D,QAAQ+B,eAAkBtJ,EAASkJ,aAC9EvC,EAAG,4CAA6CiC,OAChDO,SAASC,KAAOzF,EAAK4D,QAAQgC,mBAE7B5C,EAAG,qCAAsCiC,OACzCO,SAASC,KAAOzF,EAAK4D,QAAQ8B,WAAa,+BAQvE1J,StBm3BG,SAAUxC,EAAQD,EAASH,GAEjC,YuBrhCA,IAAA0J,GAAA1J,EAAA,GvB0hCI2J,EAEJ,SAAgC5D,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,IAFhD2D,IuBxhCrC,SAAUE,GACRP,WAAWvF,YACP1D,OAAQ,aACRqM,aAAa,EACbC,UAAU,EAEVpD,KAAM,WACFjE,KAAKqH,SAAW9C,EAAE,iBAClBvE,KAAKoH,YAAc7C,EAAE,8CACrB,IAAIhD,GAAOvB,IAOX,OANKjC,MAAKU,WAAW6I,GAAGC,WACpBvH,KAAKoH,YAAYjB,OAAQ,WACrB5E,EAAKiG,UAAUtM,KAAMqG,GAAOvB,SAI7BA,MAGXwH,UAAW,SAAUC,GACjBzH,KAAK0H,gBACL,IAAMrM,GAAQkJ,EAAEkD,GAAUnC,KAC1BhB,GAAAvE,QAAQtB,WAAWL,cAAe/C,GAC7BsC,KAAM,WACH8F,OAAOsD,SAASY,YAI5BD,eAAgB,WACZ1H,KAAKqH,SAASO,IAAK,aAAc,cAG1CrK,SvB+hCG,SAAUxC,EAAQD,EAASH,GAEjC,YwBnkCA,IAAA0J,GAAA1J,EAAA,GxBwkCI2J,EAEJ,SAAgC5D,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,IAFhD2D,IwBtkCrC,SAAUE,GACRP,WAAW6D,qBACP5D,KAAM,SAAU6D,GACZ9H,KAAK+H,YAAcD,EAASC,YAC5B/H,KAAKtD,KAAOoL,EACZ9H,KAAKL,MAAQmI,EAASnI,MACtBK,KAAKgI,OAASF,EAASE,OACvBhI,KAAKiI,gBAAkB1D,EAAE,qBACzBvE,KAAKkI,SAAW3D,EAAG,oBACnBvE,KAAKqH,SAAW9C,EAAG,uBACnBvE,KAAKmI,kBAAoB5D,EAAE,iCAE3BvE,KAAKoI,WAAYpI,KAAK+H,aAEtBxD,EAAE,QAAQa,GAAI,QAAS,iCAAkC,SAAS5C,GAC9DA,EAAE6C,iBACFrF,KAAKlB,WAAWuJ,MAAO9D,EAAE/B,EAAE8F,SAAUtI,QACvCuI,KAAKvI,QAIXlB,WAAY,SAAUyC,GAE3B,GAAMiH,GAAUxI,IAChBwI,GAAQjC,KAAM,YAAY,GAC1BhF,EAAKkH,cAEInE,EAAAvE,QAAQtB,WAAWK,aACdnB,KAAM,WAElB,GAAM+K,GAAUnE,EAAE,sCAClBd,QAAOkF,SAAS,EAAG,GACnBD,EAAQE,YACRC,WAAW,WACVH,EAAQI,WACN,KAEHN,EAAQO,WAAY,YACpBxH,EAAKyH,iBAIFZ,WAAY,SAAUzJ,GAClB,GAAMsK,GAAWjF,WAAW6D,oBAAoBoB,SAAU,oBAAsBtK,GAC1EuK,EAAUD,EAAUjJ,KAAKtD,MACzB6E,EAAOvB,IAERkJ,KACDlJ,KAAK+H,YAAcpJ,EACnBqB,KAAKiI,gBACA7B,OACA+C,KAAMF,EAAUjJ,KAAKtD,OACrB2J,SACAtB,KAAM,QACNK,GAAI,SAAU,SAAU5C,GACrBA,EAAE6C,iBACF9D,EAAK6H,WAAWlO,KAAMqG,EAAMgD,EAAEvE,SAGtCA,KAAKqH,SAAWrH,KAAKiI,gBAAgBlD,KAAM,wBAG/C/E,KAAKqJ,cAGTA,WAAY,WACR,GAAMC,GAAqB/E,EAAE,qBAE7B+E,GAAmBlD,OAEnB7B,EAAE,gCAAgCgF,MAAO,SAAU/G,GAC/CA,EAAE6C,iBACFiE,EAAmBE,WAGvBxJ,KAAKiI,gBAAgBlD,KAAM,UAAWmB,KAAM,WACpDzC,OAAOgG,IAAIC,WAAY1J,QAGV,UAAYA,KAAK+H,YAClB/H,KAAKmI,kBAAkBwB,YAAa,UAEpC3J,KAAKmI,kBAAkByB,SAAU,WAIzCC,aAAc,WACV7J,KAAKkI,SAASiB,KAAK,IACnBnJ,KAAKkI,SAASyB,eAGlBG,YAAa,SAAUvJ,GACnBP,KAAKkI,SAAS0B,SAAU,eACxB5J,KAAKkI,SAAS0B,SAAU,qBACxB5J,KAAKkI,SAASiB,KAAM5I,EAAU,KAGlCkI,YAAa,WACTzI,KAAKqH,SAASO,IAAK,aAAc,YAGrCoB,YAAa,WACThJ,KAAKqH,SAASO,IAAK,aAAc,WAGrCwB,WAAY,SAAUW,GAC3B,GAAMxI,GAAOvB,IAEb+J,GAAMhF,KAAM,sBAAuBwB,KAAM,WAAY,QACrDvG,KAAK6J,eACL7J,KAAKyI,cAELnE,EAAAvE,QAAQtB,WAAWC,QAASsB,KAAK+H,YAAagC,EAAMC,YAAahK,KAAKtD,MACxDiB,KAAM,SAAEC,GACpB2D,EAAK7E,KAAOkB,EAASqM,QACrB1I,EAAK6G,WAAYxK,EAASsM,UAEC,UAAtBtM,EAASsM,WACbzG,OAAOsD,SAASC,KAAOpJ,EAASuM,YAGjCC,MAAO,SAAE/J,GACTkB,EAAKuI,YAAazJ,KAGpB0J,EAAMhF,KAAM,sBAAuBgE,WAAY,YAC/CxH,EAAKyH,gBAIJhF,WAAW6D,oBAAoBoB,SAAWoB,EAAEC,QAAQ,SAAWC,GAC3D,GAAIC,UACAC,GACIC,SAAa,kBACbC,YAAa,0BACbC,OAAa,2BACbC,SAAa,OAGrB,OAAO,UAAWnO,GAGd,MAFA2N,GAAES,iBAAmBL,GACrBD,EAAWA,GAAYH,EAAEpB,SAAU1E,EAAGgG,GAAKpB,SAC1BzM,OAG3Ba,SxBqkCI,SAAUxC,EAAQD,EAASH,GAEjC,YyB1tCA,IAAA0J,GAAA1J,EAAA,GzB+tCI2J,EAEJ,SAAgC5D,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,IAFhD2D,IyB7tCrC,SAAUE,GACRP,WAAWjF,WACPhE,OAAQ,YAERkJ,KAAM,WACF,GAAM1C,GAAOvB,IAmCb,OAjCL+K,wBACH/K,KAAKmF,QAAU4F,sBAEPxG,EAAE,+BAA+B4B,OAAQ,WACrC,GAAM9K,GAAQkJ,EAAEvE,MAAMsF,KACtBhB,GAAAvE,QAAQhB,UAAUC,mBAAoB3D,GACjCsC,KAAM,WAEH,GAAMqN,GAAczG,EAAE,wBACjB,WAAYlJ,GACb2P,EAAYC,KAAM,WAAW,GAC7BD,EAAYC,KAAM,YAAY,IAE9BD,EAAYC,KAAM,YAAY,GAElC1J,EAAK2J,iBAIjB3G,EAAE,YAAY4B,OAAQ,WAClB,GAAM9K,GAAQkJ,EAAEvE,MAAMsH,GAAG,WACzBhD,GAAAvE,QAAQb,aAAaC,UAAW9D,GAC3BsC,KAAM,WACH4D,EAAK2J,iBAIjB3G,EAAE,iCAAiCgF,MAAO,WACtC,GAAMrM,GAAMqH,EAAEvE,MAAMtD,KAAM,kBACrBQ,KACD6J,SAASC,KAAO9J,KAGjB8C,MAMXkL,WAAY,WACR,GAAMC,GAAS5G,EAAE,6CACjB4G,GAAOvC,YACPC,WAAY,WACRsC,EAAOrC,WACR,MAMbsC,gBAAiB,WAEhB3H,OAAOgG,IAAI4B,YAAa,2BAA6BC,MAAO,sDAM7DrM,UAAW,WACDqF,EAAAvE,QAAQhB,UAAUE,YACbtB,KAAM,WACH8F,OAAOsD,SAASY,QAAO,MAOzC4D,mBAAoB,WAEnB9H,OAAOgG,IAAI4B,YAAY,+BAAiCC,MAAO,kDAGhDtH,WAAWwH,UAAU,eAC7BC,gBAAiBzL,KAAKmF,QAAQuG,yBAGrCnO,SzBiuCG,SAAUxC,EAAQD,EAASH,GAEjC,Y0BzzCA,IAAA0J,GAAA1J,EAAA,G1B8zCI2J,EAEJ,SAAgC5D,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,IAFhD2D,I0B5zCvC,SAAUE,GACNP,WAAW2H,MACP5Q,OAAQ,OACRyJ,eAAgB,GAChBC,gBAAiB,KACjBC,uBAEAT,KAAM,WACF,GAAM1C,GAAOvB,IAwBb,OAtBAA,MAAKyE,gBAAkBF,EAAE,qBACzBvE,KAAKwE,eAAiBxE,KAAKyE,gBAAgBa,MACpBf,EAAE,6BACR2B,KAAK,WAClB3E,EAAKmD,oBAAoBH,EAAEvE,MAAMtD,KAAK,WAAa6H,EAAEvE,QAEzDA,KAAKyF,uBAAuBzF,KAAKwE,gBACjCxE,KAAKyE,gBAAgB0B,OAAO,WACxB,GAAM9K,GAAQkJ,EAAEvE,MAAMsF,KACtB/D,GAAKiE,0BACLjE,EAAKkE,uBAAuBpK,GAC5BkG,EAAKhD,UAAUlD,GACfkG,EAAKiD,eAAiBnJ,IAE1BkJ,EAAE,+BAA+BgF,MAAM,SAAS/G,GAC5CA,EAAE6C,iBACFd,EAAE,wBAAwBiF,WAE9BjF,EAAE,kCAAkCgF,MAAM,SAAS/G,GAC/CA,EAAE6C,iBACFd,EAAE,2BAA2BiF,WAE1BxJ,MAGXwF,wBAAyB,WACrB,GAAMiB,GAAWzG,KAAKwE,cAClBxE,MAAK0E,oBAAoB+B,IACzBzG,KAAK0E,oBAAoB+B,GAAUL,QAI3CX,uBAAwB,SAASiB,OACmB,KAArC1G,KAAK0E,oBAAoBgC,IAChC1G,KAAK0E,oBAAoBgC,GAAQF,OAEjC,WAAaE,GAAU,cAAgBA,EACvCnC,EAAE,sBAAsBiC,OAExBjC,EAAE,sBAAsB6B,QAIhC7H,UAAW,SAAUlD,GACjBiJ,EAAAvE,QAAQ5B,QAAQI,UAAWlD,MAGpCkC,S1Bo0CG,SAAUxC,EAAQD,EAASH,GAEjC,c2Bj4CE,SAAU4J,GAGR,GAAIP,IACAtJ,WAEAuJ,KAAM,WASF,QAAS2H,GAAuBC,GAC5B,GAAIC,GAAQD,EAAM9G,KAAK,4BACnBO,EAAMyG,SAASD,EAAMlF,OAAQ,KAAO,IACpCoF,EAAUH,EAAM9G,KAAK,4BACrBkH,SAAG7Q,SAAG8Q,QAEVD,GAAID,EAAQzF,KAAK,KACjBnL,EAAI+Q,KAAKC,IAAM,EAAFH,GAET3G,EAAM,IAAKA,EAAM,GACjBA,EAAM,MAAOA,EAAM,KAEvB4G,GAAQ,IAAI5G,GAAK,IAAKlK,EAEtB4Q,EAAQpE,KAAMyE,iBAAkBH,IAGpC,QAASI,KAGL/H,EAAE,0CAA0C2B,KAAK,WAC7C0F,EAAuBrH,EAAEvE,SAI7BuE,EAAE,0CAA0C2B,KAAK,WAC7C0F,EAAuBrH,EAAEvE,SAI7BuE,EAAE,uCAAuC2B,KAAK,WAC1C0F,EAAuBrH,EAAEvE,SAtC1CuE,EAAE,QAAQa,GAAG,SAAU,cAAe,WACrC,GAAIlI,GAAMqH,EAAEvE,MAAMsF,KACdpI,GAAIN,OAAS,IAChBmK,SAASC,KAAO9J,KAuCTuG,OAAO8I,4BAA8B,WACjC1D,WAAWyD,EAAgC,MAE/C/H,EAAE,WAAYsE,WAAWyD,EAAgC,QAG7DE,WAAY,SAAUzR,GAClB,MAAKiF,MAAK5D,eAAgBrB,IACtBiF,KAAKtF,QAASK,GAAWiF,KAAMjF,GAASkJ,OACjCjE,KAAKtF,QAASK,QAK7ByQ,UAAW,SAAUzQ,GACjB,WAAuC,KAA3BiF,KAAKtF,QAASK,GACfiF,KAAKtF,QAASK,GAEdiF,KAAKwM,WAAYzR,IAKpCiJ,GAAWyI,OAEPC,iBACIC,KAAM,WACFpI,EAAG,uCAAuCgB,QAAS,WAI3DqH,KAAM,SAAUlQ,EAAM3B,GAGlB,MAFA2B,GAAKD,OAAS,YACdC,EAAK3B,OAASA,EACPwJ,EAAE/G,MACLN,IAAKY,QACLhB,OAAQ,OACRJ,KAAMA,MAKlBsH,EAAW6I,SAEP5I,KAAM,WACFM,EAAG,4CAA4CgF,MAAO,SAAU/G,GAC5DA,EAAE6C,gBACOd,GAAEvE,MAAMtD,KAAM,MACX6H,EAAEvE,MAAMtD,KAAM,QAE1B6H,GAAEvE,MAAM8M,OAAQ,UAAW1G,WAKvC3C,OAAOO,WAAaA,GAErBzG,S3Bw4CG,SAAUxC,EAAQD,EAASH,GAEjC,YAqBA,SAASuJ,GAAuBxD,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,G4B1gDvF,GAAA2D,GAAA1J,EAAA,G5B0/CI2J,EAAYJ,EAAuBG,G4Bz/CvC0I,EAAApS,EAAA,IACAqS,EAAArS,EAAA,I5B8/CIsS,EAAQ/I,EAAuB8I,G4B7/CnCE,EAAAvS,EAAA,I5BigDIwS,EAAmBjJ,EAAuBgJ,G4BhgD9CE,EAAAzS,EAAA,I5BogDI0S,EAAYnJ,EAAuBkJ,I4BlgDrC,SAAU7I,GAGRP,WAAW9E,cAEPoO,kBAAmB,KACnBC,4BAA8B,KAC9BxS,OAAQ,eACRyS,cAAe,KACfC,YAAa,EACbpG,SAAU,KAEVpD,KAAM,WAAW,GAAAyJ,GAAA1N,KACPuB,EAAOvB,IAGbA,MAAK2N,QAAU,GAAAN,GAAAtN,QAAahC,KAAKmB,aAAapD,IAAI8R,WAAY7P,KAAKmB,aAAapD,IAAI+R,iBACpF7N,KAAK2N,QAAQG,aAAe9N,KAAK+N,kBACjC/N,KAAK2N,QAAQK,SAAW,SAAEpQ,GACtB8P,EAAKK,kBAAmB,KACnBhQ,KAAKmB,aAAapD,IAAImS,eAAgB,IAASrQ,EAASsQ,UAAY3J,EAAE,qBAAqB3H,OAC5F6G,OAAOgG,IAAI4B,YAAa,qBAAuBC,MAAO,kDAEtD7H,OAAOsD,SAASC,MAAO,EAAA+F,EAAAoB,SAAS,iBAMxCnO,KAAKsN,kBAAoB/I,EAAG,gBAC5BvE,KAAKoO,qBAAuB7J,EAAE,8BAC9BvE,KAAKqH,SAAW9C,EAAE,YAEbvE,KAAKsN,kBAAkB1Q,QACxBoD,KAAKsN,kBAAkB/D,MAAO,SAAU/G,GACpCA,EAAE6C,iBACjB5B,OAAOgG,IAAI4B,YAAY,sBAAwBC,MAAO,kDACvC/G,EAAEvE,MAAMuG,KAAK,YAAY,GACzBhF,EAAKwM,kBAAmBxM,EAAKoM,QAAQU,eACrC9M,EAAKoM,QAAQW,SAKrB/J,EAAE,QAAQa,GAAI,QAAS,6BAA8B,SAAE5C,GACnDA,EAAE6C,iBACFqI,EAAKK,kBAAmB,GAAG,GAC3BL,EAAKC,QAAQY,SACR5Q,KAAM,WACH8F,OAAOsD,SAASC,MAAO,EAAA+F,EAAAoB,SAAS,oBAM5C5J,EAAE,oCAAoCa,GAAG,QAAS,SAAS5C,GACvDA,EAAE6C,iBACFd,EAAE,6BAA6BiF,OAAO,UAG1CjF,EAAE,iBAAiBgF,MAAO,SAAS/G,GAM/B,MALAA,GAAE6C,iBAEGmJ,SAAS,EAAAzB,EAAA0B,IAAI,kBACd1H,SAASY,UAEN,IAIXpD,EAAG,8BAA+Ba,GAAI,SAAU,WAC5Cb,EAAE,iBAAiBgC,KAAM,YAAY,KAGzChC,EAAE,YAAY4B,OAAQ,WAClB,GAAMuI,GAAYnK,EAAEvE,MAAMsH,GAAG,WAC7BhD,GAAAvE,QAAQb,aAAaC,UAAWuP,GAC3B/Q,KAAM,WACH,GAAMwN,GAAS5G,EAAE,sDACjB4G,GAAOvC,YACPC,WAAY,WACRsC,EAAOrC,WACR,SAIf9I,KAAKoO,qBAAqBjI,OAAQ,WAC9B,GAAM9K,GAAQkJ,EAAEvE,MAAMsH,GAAG,WAEzB/F,GAAK8F,SAASO,IAAK,aAAc,WAE5BrG,EAAKoN,OAAStT,IACfuT,aAAcrN,EAAKoN,OACnBpN,EAAK8F,SAASO,IAAK,aAAc,WAGrCrG,EAAKoN,MAAQ9F,WAAY,WACrBvE,EAAAvE,QAAQb,aAAaF,mBAAoB3D,GACpCsC,KAAM,WACHoJ,SAASY,YAElB,OAKP3H,KAAK6O,eAAiB,GAAI7K,YAAW9E,aAAa4P,eAErCvK,EAAE,oBAEV2B,KAAM,SAAU6I,EAAOC,GACxB,GAAIC,SAEAA,GADC1K,EAAEyK,GAAKtS,KAAK,oBACN,GAAIsH,YAAW9E,aAAagQ,IAAK3K,EAAEyK,GAAMzK,EAAEyK,GAAKtS,KAAK,UAAW6H,EAAEyK,GAAKtS,KAAK,qBAG5E,GAAIsH,YAAW9E,aAAagQ,IAAK3K,EAAEyK,GAAMzK,EAAEyK,GAAKtS,KAAK,WAEhE6E,EAAKsN,eAAeM,KAAMF,KAG9B1K,EAAE,WAAW6K,MAAO,WAChB7N,EAAKsN,eAAeQ,UAAW9K,EAAEvE,MAAMsF,MAAO,WAC9C/D,EAAKsN,eAAeS,iBAGxB/K,EAAE,0BAA0B4B,OAAQ,WAChC5E,EAAKsN,eAAeQ,UAAW9K,EAAEvE,MAAMsF,MAAO,aAC9C/D,EAAKsN,eAAeS,iBAGxB/K,EAAE,mBAAmB4B,OAAQ,WACzB,GAAMG,GAAU/B,EAAEvE,MACZuP,EAAOjJ,EAAQ5J,KAAK,WACpBrB,EAAQiL,EAAQ2E,KAAM,WACtBuE,EAAejO,EAAKsN,eAAeY,iBAEzC,KAAM,GAAIzU,KAAKwU,GACXA,EAAaxU,GAAGmL,OAAQoJ,EAAMlU,KAKpBkJ,EAAE,yCACVgF,MAAO,WACb,GAAMmG,GAAQnL,EAAGvE,MACXsG,EAAU/E,EAAKsN,eAAec,YAAaD,EAAMhT,KAAM,QAAUgT,EAAMhT,KAAM,UAC5E4J,KAIFoJ,EAAMpI,GAAI,YACXhB,EAAQsJ,SAGRtJ,EAAQuJ,cAIEtL,EAAE,2BACVgF,MAAO,WACb,GAAMmG,GAAQnL,EAAGvE,MACb8P,EAAQvO,EAAKsN,eAAekB,UAChC,KAAM,GAAI/U,KAAK8U,GACNA,EAAM1T,eAAgBpB,KAClB0U,EAAMpI,GAAI,YACXwI,EAAM9U,GAAG4U,SAGTE,EAAM9U,GAAG6U,cAOzBtL,EAAE,iBAAiBa,GAAG,QAAS,WAC3B,GAAMsK,GAAQnL,EAAEvE,MACVgQ,EAAWN,EAAM3K,KAAM,wBACvBiK,EAAMzN,EAAKsN,eAAec,YAAaD,EAAMhT,KAAM,QAAUgT,EAAMhT,KAAM,UAE1EsS,KACDA,EAAI7I,OAAQ,WAAa6J,EAAS/E,KAAM,YACxC+D,EAAIiB,aAAalL,KAAM,8BAA+BkG,KAAK,YAAc+E,EAAS/E,KAAM,cAKhG,IAAMiF,GAAa3L,EAAE,qCACrB2L,GAAW/J,OAAQ,WACf,GAAMgK,GAAe5L,EAAEvE,MAAMiL,KAAK,UAElCiF,GAAWhK,KAAM,WACblG,KAAKoQ,QAAUD,MAKvB5L,EAAE,QAAQa,GAAG,QAAS,kCAAmC,WAChD3B,OAAO4M,WAAa,KACrB9L,EAAEvE,MAAM8M,SAAS/H,KAAK,kCAAkCyE,OAAO,SAQvE,IAAI8G,GAA2BjG,EAAEkG,SAAS,WAEjC9M,OAAO4M,YAAc,IACtB9L,EAAE,kCAAkCqD,IAAI,UAAW,QAEnDrD,EAAE,kCAAkCqD,IAAI,UAAW,SAGxD,IAIH,OAFAnE,QAAO+M,iBAAiB,SAAUF,GAE3BtQ,MAGX+N,kBAAmB,SAAU0C,GAA2B,GAAjBlC,GAAiB5R,UAAAC,OAAA,OAAAC,KAAAF,UAAA,IAAAA,UAAA,EAC/C8T,GAAW,MACZA,EAAW,KAGflM,EAAE,qDAAqDqC,KAAM6J,EAAW,KACxElM,EAAE,oDAAoDmM,MAAOD,EAAW,KACnEA,GAAY,IACblM,EAAE,kDAAkDqC,KAAK,iBAExD2H,GACDhK,EAAE,kDAAkDqC,KAAK,mBAMrE5C,WAAW9E,aAAagQ,IAAxBjC,EAAAlN,QACAiE,WAAW9E,aAAa4P,eAAxB3B,EAAApN,SAEDxC,S5BigDG,SAAUxC,EAAQD,EAASH,GAEjC,Y6B5vDA,IAAA0J,GAAA1J,EAAA,G7BiwDI2J,EAEJ,SAAgC5D,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,IAFhD2D,I6B/vDrC,SAAUE,GAERP,WAAWxE,aAEPzE,OAAQ,cACR4V,UAAW,EACXF,SAAU,EAEVxM,KAAM,WAEF,GAAI1C,GAAOvB,KACP4Q,EAAOrM,EAAE,OAETsM,0BACA7Q,KAAKmF,QAAU0L,wBAEnB7Q,KAAK8Q,eAAiBvM,EAAE,wBAExB,IAAIwM,GAAyBxM,EAAE,4BAE/BwM,GAAuBC,IAAI,QAAS,UACpCD,EAAuB3L,GAAG,QAA2E,kCAAmC,SAAU5C,GAC9IA,EAAE6C,gBAEF,IAAI4L,GAA2B1M,EAAEvE,MAAMkR,QAAQ,iCAC3CC,EAA8BF,EAAyBG,UAAU,gCAErED,GAA4BE,YAAY,0DAEpCF,EAA4BG,SAAS,0DACrCL,EAAyBrH,SAAS,uCAElCqH,EAAyBtH,YAAY,yCAKzC3J,KAAK8Q,eAAelU,QACpBoD,KAAK8Q,eAAevH,MAAM,SAAU/G,GAChCA,EAAE6C,iBACjB5B,OAAOgG,IAAI4B,YAAY,+BAAiCC,MAAO,kDAChD/G,EAAEvE,MAAMuG,KAAK,YAAY,GACzBhF,EAAKkK,gBAAgBlK,EAAK4D,QAAQuG,uBAK1C,IAAM6F,GAAO9N,OAAOsD,SAASwK,IAC7B,IAAIA,EAAM,CACN,GAAMvC,GAAMzK,EAAEgN,EACVvC,GAAIpS,QACJoS,EAAIjK,KAAK,+BAA+BQ,QAAQ,SAgFxD,MA1EAhB,GAAE,kCAAkC4B,OAAO,WAClC,MAAQ5B,EAAEvE,MAAMsF,MACjBf,EAAEvE,MAAMkR,QAAQ,iBAAiBnM,KAAK,sBAAsBqB,OAE5D7B,EAAEvE,MAAMkR,QAAQ,iBAAiBnM,KAAK,sBAAsByB,SAEjEL,SAGHyK,EAAKxL,GAAG,QAAS,yBAA0B,SAAU5C,GACjDA,EAAE6C,iBACFd,EAAEvE,MAAMkR,QAAQ,cAAcM,SAC9BjN,EAAE,kBAAkBQ,KAAK,oCAAsCR,EAAEvE,MAAMuG,KAAK,WAAa,KAAKiL,WAIlGjN,EAAE,gBAAgBgF,MAAM,WACpB,GAAM5J,GAAQ4E,EAAE,yBAAyBe,MACnC/J,EAAOgJ,EAAE,oBAAoBe,KAqCnC,OApCAhB,GAAAvE,QAAQP,YAAYE,aAAcC,EAAOpE,GACpCoC,KAAM,SAAEC,GACL,GAAM6T,GAAWlN,EAAE,4BAEbmN,EAAMnN,EAAE,UAAUgC,MACpBoL,IAAO/T,EAASgU,OAChBlB,MAAS,OAEPnV,EAAOgJ,EAAE,WAAW4E,KAAKvL,EAASrC,KAExCkW,GAASI,OAAO,wBAChBJ,EAAS1M,KAAK,SAAS8M,OAAQH,EAAKnW,GAGpCkW,EAASI,OAAOtN,EAAE,yBAAyB4E,KAAKxJ,IAChD8R,EAASI,OAAOtN,EAAE,QAAQgC,MACtBuL,UAAWlU,EAASmU,QACpBzG,MAAS,uCACTtE,KAAQ,IACRgL,IAAOzQ,EAAK4D,QAAQ8M,mBACrB9I,KAAK,4CAER5E,EAAE,WAAWgC,MACTlI,KAAM,SACNkM,GAAI,iBACJhP,KAAM,qBACNF,MAAO6E,KAAKgS,WAAavS,MAAO/B,EAAS+B,MAAOpE,KAAMqC,EAASrC,SAChE4W,SAASV,GAEZlN,EAAE,wBAAwBsN,OAAOJ,GACjClN,EAAE,yBAAyBe,IAAI,IAC/Bf,EAAE,oBAAoBe,IAAI,MAE7B8E,MAAO,SAAE/J,GACN+R,MAAO/R,EAAME,YAEd,IAIXqQ,EAAKxL,GAAG,SAAU,YAAa,SAAU5C,GACrCA,EAAE6C,gBACF,IAAMgN,GAAY9N,EAAEvE,MAAMgK,YACtBsI,EAAO/N,EAAEvE,KASb,OAPAsS,GAAKvN,KAAK,WAAWwB,KAAK,WAAY,YAEtCjC,EAAAvE,QAAQP,YAAYK,oBAAqBwS,GACpC1U,KAAM,WACH2U,EAAKvN,KAAK,WAAWgE,WAAW,YAChCxH,EAAKgR,uBAEN,IAGJvS,MAIXuS,kBAAmB,WACf,GAAMpH,GAAS5G,EAAE,mDACjBd,QAAOkF,SAAS,EAAE,GAClBwC,EAAOvC,YACPC,WAAY,WACRsC,EAAOrC,WACR,MAGb2C,gBAAiB,SAAWtB,GAC3B,GAAM5I,GAAOvB,SAEqB,KAAbmK,IACRA,GAAW,GAGf5I,EAAKwM,oBAELzJ,EAAAvE,QAAQP,YAAYC,UACf9B,KAAM,SAAEC,GACbA,EAAS4U,SAKJrI,IACO1G,OAAOsD,SAAWoD,GAJpC1G,OAAOoF,WAAW,WACjBtH,EAAKkK,gBAAiBtB,IACpB,QAOD4D,kBAAmB,WACnB/N,KAAKyQ,SAAW,KACpBzQ,KAAKyQ,UAAY,IAEbzQ,KAAKyQ,SAAW,MACpBzQ,KAAKyQ,SAAW,IAEjBlM,EAAE,qDAAqDqC,KAAM5G,KAAKyQ,SAAW,KAC7ElM,EAAE,oDAAoDgC,KAAM,QAAS,SAAWvG,KAAKyQ,SAAW,QAGhGlT,S7B8vDG,SAAUxC,EAAQD,EAASH,GAEjC,c8Bn7DE,SAAU4J,GACRP,WAAWyO,QACP1X,OAAQ,SACR2X,mBAAoB,KACpBC,UAAW,KACXhE,MAAM,KACNtH,SAAU,KACVpD,KAAM,WACFjE,KAAKqH,SAAW9C,EAAE,YAClBvE,KAAKmF,QAAUyN,kBACf5S,KAAK0S,mBAAqBnO,EAAG,2BAC7BvE,KAAK2S,UAAYpO,EAAE,sBAAsBe,MACzCtF,KAAK6S,eAAiBtO,EAAE,wBAExBvE,KAAK0S,mBAAmBvM,OAAQ,WAC5B1C,OAAOsD,SAASC,KAAOzC,EAAEvE,MAAM+E,KAAM,aAAcrI,KAAM,QAG7D,IAAI6E,GAAOvB,IACXA,MAAK6S,eAAe1M,OAAQ,WACxB5E,EAAK8F,SAASO,IAAK,aAAc,WACrBrD,EAAEvE,MAAMsH,GAAG,aACT/F,EAAKoN,OACfC,aAAcrN,EAAKoN,OACnBpN,EAAK8F,SAASO,IAAK,aAAc,WAIjCrG,EAAKoN,MAAQ9F,WAAY,WACrB9B,SAASC,KAAOzF,EAAK4D,QAAQ2N,kBAC9B,OAMX9S,KAAK+S,YAGLxO,EAAE,2BAA2Ba,GAAI,QAAS,SAAS5C,GAC/CA,EAAE6C,iBACF0B,SAASY,YAIjBoL,UAAW,WACP,GAAIrW,GAAO,GAAIsW,QAAOC,cAAcC,SACpCxW,GAAKyW,UAAU,WAAY,OAC3BzW,EAAKyW,UAAU,SAAU,qBAGzB,KAAK,GADDC,GAAclT,KAAKC,MAAOH,KAAK2S,WAC1B3X,EAAI,EAAGA,EAAIoY,EAAYxW,OAAQ5B,IACpCoY,EAAYpY,GAAG,GAAK,GAAIqY,MAAMD,EAAYpY,GAAG,IAC7CoY,EAAYpY,GAAG,GAAKmR,KAAKmH,MAAOF,EAAYpY,GAAG,IAGP,GAAnCmR,KAAKmH,MAAOF,EAAYpY,GAAG,MAC5BoY,EAAYpY,GAAG,IAAM,IAK7B0B,GAAK6W,QAAQH,EAEb,IAAI3I,IACA+I,WACIC,KAAM,GACN5N,IAAK,GACL6K,MAAO,MACPgD,OAAQ,OAEZC,QAAS,WACTC,UAAW,WAEXC,QAAUC,SAAU,QACpBC,OACIC,OAAQ,WACRC,YAAcC,IAAK,IAEvBC,SAAWC,QAAQ,GACnBC,QACIC,GAAKC,KAAM,SAEfC,MACIC,GACIC,MAAQC,MAAO,yBAKvBC,EAAQ,GAAI5B,QAAOC,cAAc4B,UAAU/Q,SAASgR,eAAe,gBACvEF,GAAMG,KAAKrY,EAAM+N,GAEjBlG,EAAEd,QAAQuR,OAAO,WACbJ,EAAMG,KAAKrY,EAAM+N,QAI/BlN,S9Bw7DI,SAAUxC,EAAQD,EAASH,GAEjC,Y+B5hEAA,GAAQ,IACRA,EAAQ,IACRA,EAAQ,IACRA,EAAQ,IACRA,EAAQ,IACRA,EAAQ,IACRA,EAAQ,IACRA,EAAQ,IACRA,EAAQ,IACRA,EAAQ,K/BmiEF,SAAUI,EAAQD,EAASH,GAEjC,YAGAe,QAAOC,eAAeb,EAAS,cAC3BO,OAAO,GgCljEX,IAAM6T,GAAM,SAAE+F,EAAUC,EAASC,GAC7B,GAAIC,GAAMH,EACNI,EAASH,EAAQI,cACjBC,GAAkB,EAClB9O,GAAW,EACX+O,GAAU,EAERC,EAAWL,EAAIrQ,KAAM,mBACvB2Q,EAAWN,EAAIrQ,KAAM,mBACrB4Q,EAAUP,EAAIrQ,KAAM,kBACpB6Q,EAAaR,EAAIrQ,KAAM,2BACvB8Q,EAAST,EAAIrQ,KAAM,iBACnB+Q,EAAeV,EAAIrQ,KAAM,oBAM7B,OAJKoQ,KACDI,EAAkBJ,EAAYG,gBAI9BlP,KAAM,WACFgP,EAAIxL,SAAU,iBACd4L,GAAU,GAGdhP,KAAM,WACF4O,EAAIzL,YAAa,iBACjB6L,GAAU,GAGdvF,WAAY,WACR,MAAOmF,IAGXW,MAAO,WACH,MAAOX,GAAI7O,KAAM,OAGrByP,UAAW,WACP,MAAOX,IAGXY,YAAa,SAAUrP,GACnB,MAAc,KAATA,IAILA,EAAOA,EAAK0O,cACLD,EAAOa,OAAQtP,IAAW,IAGrCuP,qBAAsB,SAAUvP,GAC5B,MAAc,KAATA,KAIE2O,IAIP3O,EAAOA,EAAK0O,cACLC,IAAoB3O,IAG/BwP,UAAW,WACP,MAAOZ,IAGXa,WAAY,WACR,MAAO5P,IAGXmJ,OAAQ,WACJnJ,GAAW,GAGfoJ,SAAU,WACNpJ,GAAW,GAGfN,OAAQ,SAAUoJ,EAAMlU,GACpB,OAASkU,GACL,IAAK,SACDoG,EAAQ1K,KAAM,UAAW5P,EACzB,MAEJ,KAAK,UACDqa,EAASzK,KAAM,UAAW5P,EAC1B,MAEJ,KAAK,QACDwa,EAAO5K,KAAM,UAAW5P,EACxB,MAEJ,KAAK,UACDya,EAAanM,cACb8L,EAASxK,KAAM,UAAW5P,GACrBA,GACD+Z,EAAIzL,YAAa,YACjBmM,EAAalM,SAAU,2BACvB6L,EAASlP,KAAM,WAAW,KAE1B6O,EAAIxL,SAAU,YACdkM,EAAalM,SAAU,6BACvB6L,EAAS1M,WAAY,WAEzB,MAEJ,KAAK,SACD6M,EAAW3K,KAAM,UAAW5P,MhCkkEhDP,GAAQiF,QgCzjEOmP,GhC6jET,SAAUnU,EAAQD,EAASH,GAEjC,YAGAe,QAAOC,eAAeb,EAAS,cAC3BO,OAAO,GAGX,IAAI4E,GAA4B,kBAAXO,SAAoD,gBAApBA,QAAOC,SAAwB,SAAUC,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOrE,UAAY,eAAkBuE,IiC3rEhQoO,EAAiB,WACnB,GAAIgB,MACAwG,EAAgB,GAChBC,EAAyB,EAE7B,QACIpH,KAAM,SAAUH,GACQ,gBAAf,KAAOA,EAAP,YAAA/O,EAAO+O,KACRc,EAAMX,KAAMH,IAIpBe,SAAU,WACN,MAAOD,IAGX0G,QAAS,SAAUxb,GACf,QAAK8U,EAAM9U,IACA8U,EAAM9U,IAUrB2U,YAAa,SAAUtR,EAAMkM,GACzB,GAAIlP,IAAQ,CACZ,KAAM,GAAIL,KAAK8U,GACX,GAAK,aAAezR,EAAO,IAAMkM,IAAOuF,EAAM9U,GAAG+a,QAAU,CACvD1a,EAAQyU,EAAM9U,EACd,OAGR,MAAOK,IAGXoU,gBAAiB,WACb,GAAI+F,KACJ,KAAM,GAAIxa,KAAK8U,GACNA,EAAM9U,GAAGob,aACVZ,EAAQrG,KAAMW,EAAM9U,GAG5B,OAAOwa,IAGXiB,iBAAkB,WACd,GAAIhQ,KAEJ,KAAM,GAAIzL,KAAK8U,GACNA,EAAM9U,GAAGob,aAAetG,EAAM9U,GAAGqb,cAClC5P,EAAS0I,KAAMW,EAAM9U,GAI7B,OAAOyL,IAGX4I,UAAW,SAAUgG,EAAQhX,GACX,cAATA,EACDkY,EAAyBlB,EAGzBiB,EAAgBjB,GAIxB/F,aAAc,WACV,IAAM,GAAItU,KAAK8U,GACNA,EAAM9U,KACF8U,EAAM9U,GAAGib,YAAaK,IAAmBxG,EAAM9U,GAAGmb,qBAAsBI,GACzEzG,EAAM9U,GAAGwL,OAGTsJ,EAAM9U,GAAGoL,UjCmsEjCtL,GAAQiF,QiC1rEO+O,GjC8rET,SAAU/T,EAAQD,EAASH,GAEjC,YAGAe,QAAOC,eAAeb,EAAS,cAC3BO,OAAO,GkC1xEX,IAAAgJ,GAAA1J,EAAA,GlC+xEI2J,EAEJ,SAAgC5D,GAAO,MAAOA,IAAOA,EAAI1E,WAAa0E,GAAQX,QAASW,IAFhD2D,GkC7xEjCqS,EAAsB,SAAE9I,EAAY7F,GAEtC6F,EAAa7B,SAAU6B,GACvB7F,EAAcgE,SAAUhE,EACxB,IAAI4O,IAAa,EAEbjW,GACA4N,KAAM,WACF,GAAIsI,GAAiBhJ,EAAa7F,CACb,KAAhBA,EAEDpJ,EAAMiY,GAGNtS,EAAAvE,QAAQb,aAAaE,aAChBzB,KAAM,WACHgB,EAAMiY,MAKtBrI,OAAQ,WAEJ,MADAoI,IAAa,EACNrS,EAAAvE,QAAQb,aAAaK,cAEhC8O,YAAa,WACT,GAAKsI,EACD,MAAO,EAEX,IAAMC,GAAiBhJ,EAAa7F,CACpC,OAAOoE,MAAK+H,IAAK/H,KAAKmH,MAAuD,IAA9CvH,SAAY6B,EAAagJ,GAA6BhJ,GAAc,KAGvGE,aAAc,SAAU2C,KACxBzC,SAAU,SAAUpQ,MAUlBe,EAAO,QAAPA,GAAiBiY,GACdA,GAAkB,GACnB7O,EAAc6F,EAAagJ,EAC3BtS,EAAAvE,QAAQb,aAAaG,UAAW0I,GAC3BpK,KAAM,WACHiZ,GAAkC,EAClClW,EAAIoN,aAAcpN,EAAI2N,eACtB1P,EAAMiY,MAIdtS,EAAAvE,QAAQb,aACHI,cACA3B,KAAM+C,EAAIsN,UAIvB,OAAOtN,GlC6xEX5F,GAAQiF,QkC1xEO2W,GlC8xET,SAAU3b,EAAQD,EAASH,GAEjC,YACA,IAAIkc,GAAgCC,EAA8BC,EAAkCC,EAAYA,EAE5GC,EAA6B,kBAAXzW,SAAoD,gBAApBA,QAAOC,SAAwB,SAAUC,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOrE,UAAY,eAAkBuE;;;;;;CmC/1EvQ,SAAUwW,GAAG,GAAoB,WAAjBD,EAAOnc,QAAoC,KAATC,EAAsBA,EAAOD,QAAQoc,QAAS,CAA2CJ,KAAAD,EAAA,MAAAha,MAAAka,EAAA,kBAAAF,KAAAxO,MAAAvN,EAAAgc,GAAAD,KAAA9b,EAAAD,QAAAic,KAA0L,WAAW,GAAII,EAAsB,OAAQ,SAAS3U,GAAE4U,EAAErb,EAAEkQ,GAAG,QAAS3P,GAAEb,EAAE4b,GAAG,IAAItb,EAAEN,GAAG,CAAC,IAAI2b,EAAE3b,GAAG,CAAC,GAAI6b,GAAkB,kBAATN,IAAqBA,CAAQ,KAAIK,GAAGC,EAAE,MAAON,GAAEvb,GAAE,EAAI,IAAGT,EAAE,MAAOA,GAAES,GAAE,EAAI,IAAIyb,GAAE,GAAI5W,OAAM,uBAAuB7E,EAAE,IAAK,MAAMyb,GAAErQ,KAAK,mBAAmBqQ,EAAE,GAAIjc,GAAEc,EAAEN,IAAIX,WAAYsc,GAAE3b,GAAG,GAAGP,KAAKD,EAAEH,QAAQ,SAAS0H,GAAG,GAAIzG,GAAEqb,EAAE3b,GAAG,GAAG+G,EAAG,OAAOlG,GAAEP,GAAIyG,IAAIvH,EAAEA,EAAEH,QAAQ0H,EAAE4U,EAAErb,EAAEkQ,GAAG,MAAOlQ,GAAEN,GAAGX,QAAkD,IAAI,GAA1CE,GAAkB,kBAATgc,IAAqBA,EAAgBvb,EAAE,EAAEA,EAAEwQ,EAAErP,OAAOnB,IAAIa,EAAE2P,EAAExQ,GAAI,OAAOa,KAAKib,GAAG,SAASP,EAAQjc,EAAOD,GAuBx0B,QAASoW,GAAS5K,EAASmB,GACvB,KAAOnB,GAAWA,EAAQkR,WAAaC,GAAoB,CACvD,GAA+B,kBAApBnR,GAAQoR,SACfpR,EAAQoR,QAAQjQ,GAClB,MAAOnB,EAETA,GAAUA,EAAQqR,YA5B1B,GAAIF,GAAqB,CAKzB,IAAuB,mBAAZG,WAA4BA,QAAQzb,UAAUub,QAAS,CAC9D,GAAIG,GAAQD,QAAQzb,SAEpB0b,GAAMH,QAAUG,EAAMC,iBACND,EAAME,oBACNF,EAAMG,mBACNH,EAAMI,kBACNJ,EAAMK,sBAoB1Bnd,EAAOD,QAAUoW,OAEXiH,GAAG,SAASnB,EAAQjc,EAAOD,GAajC,QAASsd,GAAS9R,EAASmB,EAAUpJ,EAAMga,EAAUC,GACjD,GAAIC,GAAaC,EAASnQ,MAAMrI,KAAMrD,UAItC,OAFA2J,GAAQkK,iBAAiBnS,EAAMka,EAAYD,IAGvCG,QAAS,WACLnS,EAAQoS,oBAAoBra,EAAMka,EAAYD,KAc1D,QAASE,GAASlS,EAASmB,EAAUpJ,EAAMga,GACvC,MAAO,UAAS7V,GACZA,EAAEmW,eAAiBzH,EAAQ1O,EAAE8F,OAAQb,GAEjCjF,EAAEmW,gBACFN,EAASnd,KAAKoL,EAAS9D,IAtCnC,GAAI0O,GAAU8F,EAAQ,YA2CtBjc,GAAOD,QAAUsd,IAEdQ,YAAY,IAAIC,GAAG,SAAS7B,EAAQjc,EAAOD,GAO9CA,EAAQge,KAAO,SAASzd,GACpB,WAAiBwB,KAAVxB,GACAA,YAAiB0d,cACE,IAAnB1d,EAAMmc,UASjB1c,EAAQke,SAAW,SAAS3d,GACxB,GAAIgD,GAAO3C,OAAOS,UAAU8c,SAAS/d,KAAKG,EAE1C,YAAiBwB,KAAVxB,IACU,sBAATgD,GAAyC,4BAATA,IAChC,UAAYhD,KACK,IAAjBA,EAAMuB,QAAgB9B,EAAQge,KAAKzd,EAAM,MASrDP,EAAQoe,OAAS,SAAS7d,GACtB,MAAwB,gBAAVA,IACPA,YAAiB8d,SAS5Bre,EAAQse,GAAK,SAAS/d,GAGlB,MAAgB,sBAFLK,OAAOS,UAAU8c,SAAS/d,KAAKG,SAKxCge,GAAG,SAASrC,EAAQjc,EAAOD,GAajC,QAASwe,GAAOhR,EAAQjK,EAAMga,GAC1B,IAAK/P,IAAWjK,IAASga,EACrB,KAAM,IAAI/X,OAAM,6BAGpB,KAAKgH,EAAG4R,OAAO7a,GACX,KAAM,IAAIkb,WAAU,mCAGxB,KAAKjS,EAAG8R,GAAGf,GACP,KAAM,IAAIkB,WAAU,oCAGxB,IAAIjS,EAAGwR,KAAKxQ,GACR,MAAOkR,GAAWlR,EAAQjK,EAAMga,EAE/B,IAAI/Q,EAAG0R,SAAS1Q,GACjB,MAAOmR,GAAenR,EAAQjK,EAAMga,EAEnC,IAAI/Q,EAAG4R,OAAO5Q,GACf,MAAOoR,GAAepR,EAAQjK,EAAMga,EAGpC,MAAM,IAAIkB,WAAU,6EAa5B,QAASC,GAAWV,EAAMza,EAAMga,GAG5B,MAFAS,GAAKtI,iBAAiBnS,EAAMga,IAGxBI,QAAS,WACLK,EAAKJ,oBAAoBra,EAAMga,KAc3C,QAASoB,GAAeT,EAAU3a,EAAMga,GAKpC,MAJAsB,OAAMxd,UAAUyd,QAAQ1e,KAAK8d,EAAU,SAASF,GAC5CA,EAAKtI,iBAAiBnS,EAAMga,MAI5BI,QAAS,WACLkB,MAAMxd,UAAUyd,QAAQ1e,KAAK8d,EAAU,SAASF,GAC5CA,EAAKJ,oBAAoBra,EAAMga,OAe/C,QAASqB,GAAejS,EAAUpJ,EAAMga,GACpC,MAAOD,GAAStU,SAAS8M,KAAMnJ,EAAUpJ,EAAMga,GA3FnD,GAAI/Q,GAAK0P,EAAQ,QACboB,EAAWpB,EAAQ,WA6FvBjc,GAAOD,QAAUwe,IAEdO,OAAO,EAAEzB,SAAW,IAAI0B,GAAG,SAAS9C,EAAQjc,EAAOD,GACtD,QAAS8U,GAAOtJ,GACZ,GAAIyT,EAEJ,IAAyB,WAArBzT,EAAQ0T,SACR1T,EAAQ2T,QAERF,EAAezT,EAAQjL,UAEtB,IAAyB,UAArBiL,EAAQ0T,UAA6C,aAArB1T,EAAQ0T,SAAyB,CACtE,GAAIE,GAAa5T,EAAQ6T,aAAa,WAEjCD,IACD5T,EAAQ8T,aAAa,WAAY,IAGrC9T,EAAQsJ,SACRtJ,EAAQ+T,kBAAkB,EAAG/T,EAAQjL,MAAMuB,QAEtCsd,GACD5T,EAAQgU,gBAAgB,YAG5BP,EAAezT,EAAQjL,UAEtB,CACGiL,EAAQ6T,aAAa,oBACrB7T,EAAQ2T,OAGZ,IAAIM,GAAY9W,OAAO+W,eACnBC,EAAQ3W,SAAS4W,aAErBD,GAAME,mBAAmBrU,GACzBiU,EAAUK,kBACVL,EAAUM,SAASJ,GAEnBV,EAAeQ,EAAUtB,WAG7B,MAAOc,GAGXhf,EAAOD,QAAU8U,OAEXkL,GAAG,SAAS9D,EAAQjc,EAAOD,GACjC,QAASigB,MAKTA,EAAE5e,WACAiJ,GAAI,SAAU7J,EAAM8c,EAAU2C,GAC5B,GAAIxY,GAAIxC,KAAKwC,IAAMxC,KAAKwC,KAOxB,QALCA,EAAEjH,KAAUiH,EAAEjH,QAAa4T,MAC1BiK,GAAIf,EACJ2C,IAAKA,IAGAhb,MAGTib,KAAM,SAAU1f,EAAM8c,EAAU2C,GAE9B,QAASxC,KACPjX,EAAKyP,IAAIzV,EAAMid,GACfH,EAAShQ,MAAM2S,EAAKre,WAHtB,GAAI4E,GAAOvB,IAOX,OADAwY,GAASnO,EAAIgO,EACNrY,KAAKoF,GAAG7J,EAAMid,EAAUwC,IAGjCE,KAAM,SAAU3f,GACd,GAAImB,MAAUye,MAAMjgB,KAAKyB,UAAW,GAChCye,IAAWpb,KAAKwC,IAAMxC,KAAKwC,OAASjH,QAAa4f,QACjDngB,EAAI,EACJqgB,EAAMD,EAAOxe,MAEjB,KAAK5B,EAAGA,EAAIqgB,EAAKrgB,IACfogB,EAAOpgB,GAAGoe,GAAG/Q,MAAM+S,EAAOpgB,GAAGggB,IAAKte,EAGpC,OAAOsD,OAGTgR,IAAK,SAAUzV,EAAM8c,GACnB,GAAI7V,GAAIxC,KAAKwC,IAAMxC,KAAKwC,MACpB8Y,EAAO9Y,EAAEjH,GACTggB,IAEJ,IAAID,GAAQjD,EACV,IAAK,GAAIrd,GAAI,EAAGqgB,EAAMC,EAAK1e,OAAQ5B,EAAIqgB,EAAKrgB,IACtCsgB,EAAKtgB,GAAGoe,KAAOf,GAAYiD,EAAKtgB,GAAGoe,GAAG/O,IAAMgO,GAC9CkD,EAAWpM,KAAKmM,EAAKtgB,GAY3B,OAJCugB,GAAW3e,OACR4F,EAAEjH,GAAQggB,QACH/Y,GAAEjH,GAENyE,OAIXjF,EAAOD,QAAUigB,OAEXS,GAAG,SAASxE,EAAQjc,EAAOD,IACjC,SAAW2H,EAAQgZ,GACf,GAAsB,kBAAXtE,IAAyBA,EAAOuE,IACvCvE,GAAQ,SAAU,UAAWsE,OAC1B,QAAuB,KAAZ3gB,EACd2gB,EAAQ1gB,EAAQic,EAAQ,eACrB,CACH,GAAI2E,IACA7gB,WAEJ2gB,GAAQE,EAAKlZ,EAAOmN,QACpBnN,EAAOmZ,gBAAkBD,EAAI7gB,UAElCkF,KAAM,SAAUjF,EAAQ8gB,GAiBvB,QAASC,GAAgBC,EAAUC,GAC/B,KAAMD,YAAoBC,IACtB,KAAM,IAAIzC,WAAU,qCAhB5B,GAAI0C,GAEJ,SAAgCvb,GAC5B,MAAOA,IAAOA,EAAI1E,WAAa0E,GAC3BX,QAASW,IAJqBmb,GAQlC5b,EAA4B,kBAAXO,SAAoD,WAA3ByW,EAAOzW,OAAOC,UAAwB,SAAUC,GAC1F,gBAAcA,EAAd,YAAAuW,EAAcvW,IACd,SAAUA,GACV,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOrE,UAAY,aAAhG,KAAkHuE,EAAlH,YAAAuW,EAAkHvW,IASzHwb,EAAe,WACf,QAASC,GAAiB7T,EAAQ8T,GAC9B,IAAK,GAAIphB,GAAI,EAAGA,EAAIohB,EAAMxf,OAAQ5B,IAAK,CACnC,GAAIqhB,GAAaD,EAAMphB,EACvBqhB,GAAWxgB,WAAawgB,EAAWxgB,aAAc,EACjDwgB,EAAWzgB,cAAe,EACtB,SAAWygB,KAAYA,EAAWha,UAAW,GACjD3G,OAAOC,eAAe2M,EAAQ+T,EAAWra,IAAKqa,IAItD,MAAO,UAAUL,EAAaM,EAAYC,GAGtC,MAFID,IAAYH,EAAiBH,EAAY7f,UAAWmgB,GACpDC,GAAaJ,EAAiBH,EAAaO,GACxCP,MAIXQ,EAAkB,WAIlB,QAASA,GAAgB/R,GACrBqR,EAAgB9b,KAAMwc,GAEtBxc,KAAKyc,eAAehS,GACpBzK,KAAK0c,gBAmKT,MA1JAR,GAAaM,IACTxa,IAAK,iBACL3G,MAAO,WACH,GAAIoP,GAAU9N,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,KAE7EqD,MAAKvD,OAASgO,EAAQhO,OACtBuD,KAAK2c,UAAYlS,EAAQkS,UACzB3c,KAAK4c,QAAUnS,EAAQmS,QACvB5c,KAAKsI,OAASmC,EAAQnC,OACtBtI,KAAK4G,KAAO6D,EAAQ7D,KACpB5G,KAAKuF,QAAUkF,EAAQlF,QAEvBvF,KAAK+Z,aAAe,MAGxB/X,IAAK,gBACL3G,MAAO,WACC2E,KAAK4G,KACL5G,KAAK6c,aACE7c,KAAKsI,QACZtI,KAAK8c,kBAIb9a,IAAK,aACL3G,MAAO,WACH,GAAIqS,GAAQ1N,KAER+c,EAAwD,OAAhDjZ,SAASkZ,gBAAgBC,aAAa,MAElDjd,MAAKkd,aAELld,KAAKmd,oBAAsB,WACvB,MAAOzP,GAAMwP,cAEjBld,KAAKod,YAAcpd,KAAK2c,UAAUnM,iBAAiB,QAASxQ,KAAKmd,uBAAwB,EAEzFnd,KAAKqd,SAAWvZ,SAASwZ,cAAc,YAEvCtd,KAAKqd,SAASE,MAAMC,SAAW,OAE/Bxd,KAAKqd,SAASE,MAAME,OAAS,IAC7Bzd,KAAKqd,SAASE,MAAMG,QAAU,IAC9B1d,KAAKqd,SAASE,MAAMI,OAAS,IAE7B3d,KAAKqd,SAASE,MAAMzJ,SAAW,WAC/B9T,KAAKqd,SAASE,MAAMR,EAAQ,QAAU,QAAU,SAEhD,IAAIa,GAAYna,OAAOoa,aAAe/Z,SAASkZ,gBAAgBrX,SAC/D3F,MAAKqd,SAASE,MAAM1X,IAAM+X,EAAY,KAEtC5d,KAAKqd,SAASjD,aAAa,WAAY,IACvCpa,KAAKqd,SAAShiB,MAAQ2E,KAAK4G,KAE3B5G,KAAK2c,UAAUmB,YAAY9d,KAAKqd,UAEhCrd,KAAK+Z,cAAe,EAAIkC,EAASlc,SAASC,KAAKqd,UAC/Crd,KAAK+d,cAGT/b,IAAK,aACL3G,MAAO,WACC2E,KAAKod,cACLpd,KAAK2c,UAAUjE,oBAAoB,QAAS1Y,KAAKmd,qBACjDnd,KAAKod,YAAc,KACnBpd,KAAKmd,oBAAsB,MAG3Bnd,KAAKqd,WACLrd,KAAK2c,UAAUqB,YAAYhe,KAAKqd,UAChCrd,KAAKqd,SAAW,SAIxBrb,IAAK,eACL3G,MAAO,WACH2E,KAAK+Z,cAAe,EAAIkC,EAASlc,SAASC,KAAKsI,QAC/CtI,KAAK+d,cAGT/b,IAAK,WACL3G,MAAO,WACH,GAAI4iB,OAAY,EAEhB,KACIA,EAAYna,SAASoa,YAAYle,KAAKvD,QACxC,MAAO0hB,GACLF,GAAY,EAGhBje,KAAKoe,aAAaH,MAGtBjc,IAAK,eACL3G,MAAO,SAAsB4iB,GACzBje,KAAK4c,QAAQ1B,KAAK+C,EAAY,UAAY,SACtCxhB,OAAQuD,KAAKvD,OACbmK,KAAM5G,KAAK+Z,aACXxU,QAASvF,KAAKuF,QACd8Y,eAAgBre,KAAKqe,eAAe9V,KAAKvI,WAIjDgC,IAAK,iBACL3G,MAAO,WACC2E,KAAKuF,SACLvF,KAAKuF,QAAQ0U,QAGjBxW,OAAO+W,eAAeI,qBAG1B5Y,IAAK,UACL3G,MAAO,WACH2E,KAAKkd,gBAGTlb,IAAK,SACLsc,IAAK,WACD,GAAI7hB,GAASE,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,MAIjF,IAFAqD,KAAKue,QAAU9hB,EAEM,SAAjBuD,KAAKue,SAAuC,QAAjBve,KAAKue,QAChC,KAAM,IAAIje,OAAM,uDAGxBxE,IAAK,WACD,MAAOkE,MAAKue,WAGhBvc,IAAK,SACLsc,IAAK,SAAahW,GACd,OAAezL,KAAXyL,EAAsB,CACtB,IAAIA,GAA8E,gBAAjD,KAAXA,EAAyB,YAAcrI,EAAQqI,KAA6C,IAApBA,EAAOkP,SAWjG,KAAM,IAAIlX,OAAM,8CAVhB,IAAoB,SAAhBN,KAAKvD,QAAqB6L,EAAO6R,aAAa,YAC9C,KAAM,IAAI7Z,OAAM,oFAGpB,IAAoB,QAAhBN,KAAKvD,SAAqB6L,EAAO6R,aAAa,aAAe7R,EAAO6R,aAAa,aACjF,KAAM,IAAI7Z,OAAM,yGAGpBN,MAAKwe,QAAUlW,IAM3BxM,IAAK,WACD,MAAOkE,MAAKwe,YAIbhC,IAGXzhB,GAAOD,QAAU0hB,MAGlB5M,OAAS,IAAI6O,GAAG,SAASzH,EAAQjc,EAAOD,IAC3C,SAAW2H,EAAQgZ,GACf,GAAsB,kBAAXtE,IAAyBA,EAAOuE,IACvCvE,GAAQ,SAAU,qBAAsB,eAAgB,iBAAkBsE,OACvE,QAAuB,KAAZ3gB,EACd2gB,EAAQ1gB,EAAQic,EAAQ,sBAAuBA,EAAQ,gBAAiBA,EAAQ,sBAC7E,CACH,GAAI2E,IACA7gB,WAEJ2gB,GAAQE,EAAKlZ,EAAOmZ,gBAAiBnZ,EAAOic,YAAajc,EAAOkc,cAChElc,EAAOmc,UAAYjD,EAAI7gB,UAE5BkF,KAAM,SAAUjF,EAAQ8jB,EAAkBC,EAAcC,GASvD,QAAS7a,GAAuBxD,GAC5B,MAAOA,IAAOA,EAAI1E,WAAa0E,GAC3BX,QAASW,GAUjB,QAASob,GAAgBC,EAAUC,GAC/B,KAAMD,YAAoBC,IACtB,KAAM,IAAIzC,WAAU,qCAsB5B,QAASyF,GAA2Bzd,EAAMrG,GACtC,IAAKqG,EACD,KAAM,IAAI0d,gBAAe,4DAG7B,QAAO/jB,GAAyB,gBAAhB,KAAOA,EAAP,YAAA+b,EAAO/b,KAAqC,kBAATA,GAA8BqG,EAAPrG,EAG9E,QAASgkB,GAAUC,EAAUC,GACzB,GAA0B,kBAAfA,IAA4C,OAAfA,EACpC,KAAM,IAAI7F,WAAU,qEAAoE6F,EAApE,YAAAnI,EAAoEmI,IAG5FD,GAAShjB,UAAYT,OAAO2jB,OAAOD,GAAcA,EAAWjjB,WACxDwE,aACItF,MAAO8jB,EACPtjB,YAAY,EACZwG,UAAU,EACVzG,cAAc,KAGlBwjB,IAAY1jB,OAAO4jB,eAAiB5jB,OAAO4jB,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GAqH/G,QAASI,GAAkBC,EAAQnZ,GAC/B,GAAIoZ,GAAY,kBAAoBD,CAEpC,IAAKnZ,EAAQ6T,aAAauF,GAI1B,MAAOpZ,GAAQ2W,aAAayC,GA3LhC,GAAIC,GAAoBzb,EAAuB2a,GAE3Ce,EAAgB1b,EAAuB4a,GAEvCe,EAAiB3b,EAAuB6a,GAQxC9e,EAA4B,kBAAXO,SAAoD,WAA3ByW,EAAOzW,OAAOC,UAAwB,SAAUC,GAC1F,gBAAcA,EAAd,YAAAuW,EAAcvW,IACd,SAAUA,GACV,MAAOA,IAAyB,kBAAXF,SAAyBE,EAAIC,cAAgBH,QAAUE,IAAQF,OAAOrE,UAAY,aAAhG,KAAkHuE,EAAlH,YAAAuW,EAAkHvW,IASzHwb,EAAe,WACf,QAASC,GAAiB7T,EAAQ8T,GAC9B,IAAK,GAAIphB,GAAI,EAAGA,EAAIohB,EAAMxf,OAAQ5B,IAAK,CACnC,GAAIqhB,GAAaD,EAAMphB,EACvBqhB,GAAWxgB,WAAawgB,EAAWxgB,aAAc,EACjDwgB,EAAWzgB,cAAe,EACtB,SAAWygB,KAAYA,EAAWha,UAAW,GACjD3G,OAAOC,eAAe2M,EAAQ+T,EAAWra,IAAKqa,IAItD,MAAO,UAAUL,EAAaM,EAAYC,GAGtC,MAFID,IAAYH,EAAiBH,EAAY7f,UAAWmgB,GACpDC,GAAaJ,EAAiBH,EAAaO,GACxCP,MA4BX8D,EAAY,SAAUC,GAOtB,QAASD,GAAUva,EAASkF,GACxBqR,EAAgB9b,KAAM8f,EAEtB,IAAIpS,GAAQsR,EAA2Bhf,MAAO8f,EAAUP,WAAa7jB,OAAOskB,eAAeF,IAAY5kB,KAAK8E,MAI5G,OAFA0N,GAAM+O,eAAehS,GACrBiD,EAAMuS,YAAY1a,GACXmI,EA4FX,MAzGAwR,GAAUY,EAAWC,GAuBrB7D,EAAa4D,IACT9d,IAAK,iBACL3G,MAAO,WACH,GAAIoP,GAAU9N,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,KAE7EqD,MAAKvD,OAAmC,kBAAnBgO,GAAQhO,OAAwBgO,EAAQhO,OAASuD,KAAKkgB,cAC3ElgB,KAAKsI,OAAmC,kBAAnBmC,GAAQnC,OAAwBmC,EAAQnC,OAAStI,KAAKmgB,cAC3EngB,KAAK4G,KAA+B,kBAAjB6D,GAAQ7D,KAAsB6D,EAAQ7D,KAAO5G,KAAKogB,YACrEpgB,KAAK2c,UAA2C,WAA/B1c,EAAQwK,EAAQkS,WAA0BlS,EAAQkS,UAAY7Y,SAAS8M,QAG5F5O,IAAK,cACL3G,MAAO,SAAqBkK,GACxB,GAAI8a,GAASrgB,IAEbA,MAAKwY,UAAW,EAAIqH,EAAe9f,SAASwF,EAAS,QAAS,SAAU/C,GACpE,MAAO6d,GAAOC,QAAQ9d,QAI9BR,IAAK,UACL3G,MAAO,SAAiBmH,GACpB,GAAI+C,GAAU/C,EAAEmW,gBAAkBnW,EAAE+d,aAEhCvgB,MAAK4b,kBACL5b,KAAK4b,gBAAkB,MAG3B5b,KAAK4b,gBAAkB,GAAI+D,GAAkB5f,SACzCtD,OAAQuD,KAAKvD,OAAO8I,GACpB+C,OAAQtI,KAAKsI,OAAO/C,GACpBqB,KAAM5G,KAAK4G,KAAKrB,GAChBoX,UAAW3c,KAAK2c,UAChBpX,QAASA,EACTqX,QAAS5c,UAIjBgC,IAAK,gBACL3G,MAAO,SAAuBkK,GAC1B,MAAOia,GAAkB,SAAUja,MAGvCvD,IAAK,gBACL3G,MAAO,SAAuBkK,GAC1B,GAAIkC,GAAW+X,EAAkB,SAAUja,EAE3C,IAAIkC,EACA,MAAO3D,UAAS0c,cAAc/Y,MAItCzF,IAAK,cACL3G,MAAO,SAAqBkK,GACxB,MAAOia,GAAkB,OAAQja,MAGrCvD,IAAK,UACL3G,MAAO,WACH2E,KAAKwY,SAASC,UAEVzY,KAAK4b,kBACL5b,KAAK4b,gBAAgBnD,UACrBzY,KAAK4b,gBAAkB,WAI/B5Z,IAAK,cACL3G,MAAO,WACH,GAAIoB,GAASE,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,IAAM,OAAQ,OAEtF8jB,EAA4B,gBAAXhkB,IAAuBA,GAAUA,EAClDikB,IAAY5c,SAAS6c,qBAMzB,OAJAF,GAAQ7G,QAAQ,SAAUnd,GACtBikB,EAAUA,KAAa5c,SAAS6c,sBAAsBlkB,KAGnDikB,MAIRZ,GACTF,EAAc7f,QAiBhBhF,GAAOD,QAAUglB,MAGlBc,qBAAqB,EAAEC,gBAAgB,EAAEC,eAAe,SAAS,IAAI,MnC+2ElE,SAAU/lB,EAAQD,EAASH,GAEjC,YAGAe,QAAOC,eAAeb,EAAS,cAC7BO,OAAO,GoCloGIoT,MAAM,SAAEsS,GACjB,MAAOhjB,MAAKoH,QAAS4b,IAAS,IASrB5S,UAAU,SAAE6S,GACrB,MAAOjjB,MAAKkjB,MAAOD,IAAY,KpCgpG7B,SAAUjmB,EAAQD,EAASH,IAEL,SAASumB,EAASze;;;;;;;CqC5pG9C,SAAAA,EAAAgZ,GACA1gB,EAAAD,QAAA2gB,KAGCzb,EAAA,WAAqB,YAEtB,SAAAmhB,GAAAC,GACA,GAAA/iB,SAAA+iB,EACA,eAAAA,IAAA,WAAA/iB,GAAA,aAAAA,GAGA,QAAAuD,GAAAwf,GACA,wBAAAA,GAkCA,QAAAC,GAAAC,GACAC,EAAAD,EAGA,QAAAE,GAAAC,GACAC,EAAAD,EAqBA,QAAAE,KACA,gBAAAC,EACA,WACAA,EAAAC,IAIAC,IAuBA,QAAAA,KAGA,GAAAC,GAAAlZ,UACA,mBACA,MAAAkZ,GAAAF,EAAA,IAKA,QAAAA,KACA,OAAA7mB,GAAA,EAAiBA,EAAAqgB,EAASrgB,GAAA,IAI1Bqd,EAHA2J,EAAAhnB,IACAgnB,EAAAhnB,EAAA,IAIAgnB,EAAAhnB,OAAA6B,GACAmlB,EAAAhnB,EAAA,OAAA6B,GAGAwe,EAAA,EA4BA,QAAA1d,GAAAskB,EAAAC,GACA,GAAAC,GAAAxlB,UAEAmQ,EAAA9M,KAEAoiB,EAAA,GAAApiB,MAAAW,YAAA0hB,OAEAxlB,KAAAulB,EAAAE,KACAC,EAAAH,EAGA,IAAAI,GAAA1V,EAAA0V,MAaA,OAXAA,GACA,WACA,GAAAnK,GAAA8J,EAAAK,EAAA,EACAd,GAAA,WACA,MAAAe,GAAAD,EAAAJ,EAAA/J,EAAAvL,EAAA4V,cAIAC,EAAA7V,EAAAsV,EAAAH,EAAAC,GAGAE,EAkCA,QAAAQ,GAAA3mB,GAEA,GAAA+f,GAAAhc,IAEA,IAAA/D,GAAA,gBAAAA,MAAA0E,cAAAqb,EACA,MAAA/f,EAGA,IAAA4mB,GAAA,GAAA7G,GAAAqG,EAEA,OADAhlB,GAAAwlB,EAAA5mB,GACA4mB,EAKA,QAAAR,MAQA,QAAAS,KACA,UAAAvJ,WAAA,4CAGA,QAAAwJ,KACA,UAAAxJ,WAAA,wDAGA,QAAAyJ,GAAAH,GACA,IACA,MAAAA,GAAAllB,KACG,MAAA0C,GAEH,MADA4iB,IAAA5iB,QACA4iB,IAIA,QAAAC,GAAAC,EAAA9nB,EAAA+nB,EAAAC,GACA,IACAF,EAAAjoB,KAAAG,EAAA+nB,EAAAC,GACG,MAAA7gB,GACH,MAAAA,IAIA,QAAA8gB,GAAAT,EAAAU,EAAAJ,GACAzB,EAAA,SAAAmB,GACA,GAAAW,IAAA,EACAnjB,EAAA6iB,EAAAC,EAAAI,EAAA,SAAAloB,GACAmoB,IAGAA,GAAA,EACAD,IAAAloB,EACAgC,EAAAwlB,EAAAxnB,GAEAooB,EAAAZ,EAAAxnB,KAEK,SAAAqoB,GACLF,IAGAA,GAAA,EAEAlmB,EAAAulB,EAAAa,KACK,YAAAb,EAAAc,QAAA,sBAELH,GAAAnjB,IACAmjB,GAAA,EACAlmB,EAAAulB,EAAAxiB,KAEGwiB,GAGH,QAAAe,GAAAf,EAAAU,GACAA,EAAAf,SAAAqB,GACAJ,EAAAZ,EAAAU,EAAAb,SACGa,EAAAf,SAAAsB,GACHxmB,EAAAulB,EAAAU,EAAAb,SAEAC,EAAAY,MAAA1mB,GAAA,SAAAxB,GACA,MAAAgC,GAAAwlB,EAAAxnB,IACK,SAAAqoB,GACL,MAAApmB,GAAAulB,EAAAa,KAKA,QAAAK,GAAAlB,EAAAmB,EAAAb,GACAa,EAAArjB,cAAAkiB,EAAAliB,aAAAwiB,IAAAxlB,GAAAqmB,EAAArjB,YAAAtD,UAAAulB,EACAgB,EAAAf,EAAAmB,GAEAb,IAAAF,IACA3lB,EAAAulB,EAAAI,GAAA5iB,OACA4iB,GAAA5iB,MAAA,UACKxD,KAAAsmB,EACLM,EAAAZ,EAAAmB,GACKpiB,EAAAuhB,GACLG,EAAAT,EAAAmB,EAAAb,GAEAM,EAAAZ,EAAAmB,GAKA,QAAA3mB,GAAAwlB,EAAAxnB,GACAwnB,IAAAxnB,EACAiC,EAAAulB,EAAAC,KACG3B,EAAA9lB,GACH0oB,EAAAlB,EAAAxnB,EAAA2nB,EAAA3nB,IAEAooB,EAAAZ,EAAAxnB,GAIA,QAAA4oB,GAAApB,GACAA,EAAAqB,UACArB,EAAAqB,SAAArB,EAAAH,SAGAyB,EAAAtB,GAGA,QAAAY,GAAAZ,EAAAxnB,GACAwnB,EAAAL,SAAA4B,KAIAvB,EAAAH,QAAArnB,EACAwnB,EAAAL,OAAAqB,GAEA,IAAAhB,EAAAwB,aAAAznB,QACA8kB,EAAAyC,EAAAtB,IAIA,QAAAvlB,GAAAulB,EAAAa,GACAb,EAAAL,SAAA4B,KAGAvB,EAAAL,OAAAsB,GACAjB,EAAAH,QAAAgB,EAEAhC,EAAAuC,EAAApB,IAGA,QAAAF,GAAA7V,EAAAsV,EAAAH,EAAAC,GACA,GAAAmC,GAAAvX,EAAAuX,aACAznB,EAAAynB,EAAAznB,MAEAkQ,GAAAoX,SAAA,KAEAG,EAAAznB,GAAAwlB,EACAiC,EAAAznB,EAAAinB,IAAA5B,EACAoC,EAAAznB,EAAAknB,IAAA5B,EAEA,IAAAtlB,GAAAkQ,EAAA0V,QACAd,EAAAyC,EAAArX,GAIA,QAAAqX,GAAAtB,GACA,GAAAyB,GAAAzB,EAAAwB,aACAE,EAAA1B,EAAAL,MAEA,QAAA8B,EAAA1nB,OAAA,CAQA,OAJAwlB,OAAAvlB,GACAwb,MAAAxb,GACA2nB,EAAA3B,EAAAH,QAEA1nB,EAAA,EAAiBA,EAAAspB,EAAA1nB,OAAwB5B,GAAA,EACzConB,EAAAkC,EAAAtpB,GACAqd,EAAAiM,EAAAtpB,EAAAupB,GAEAnC,EACAK,EAAA8B,EAAAnC,EAAA/J,EAAAmM,GAEAnM,EAAAmM,EAIA3B,GAAAwB,aAAAznB,OAAA,GAGA,QAAA6nB,KACAzkB,KAAAK,MAAA,KAKA,QAAAqkB,GAAArM,EAAAmM,GACA,IACA,MAAAnM,GAAAmM,GACG,MAAAhiB,GAEH,MADAmiB,IAAAtkB,MAAAmC,EACAmiB,IAIA,QAAAlC,GAAA8B,EAAA1B,EAAAxK,EAAAmM,GACA,GAAAI,GAAAhjB,EAAAyW,GACAhd,MAAAwB,GACAwD,MAAAxD,GACAohB,MAAAphB,GACAgoB,MAAAhoB,EAEA,IAAA+nB,GAWA,GAVAvpB,EAAAqpB,EAAArM,EAAAmM,GAEAnpB,IAAAspB,IACAE,GAAA,EACAxkB,EAAAhF,EAAAgF,MACAhF,EAAAgF,MAAA,MAEA4d,GAAA,EAGA4E,IAAAxnB,EAEA,WADAiC,GAAAulB,EAAAE,SAIA1nB,GAAAmpB,EACAvG,GAAA,CAGA4E,GAAAL,SAAA4B,KAEGQ,GAAA3G,EACH5gB,EAAAwlB,EAAAxnB,GACKwpB,EACLvnB,EAAAulB,EAAAxiB,GACKkkB,IAAAV,GACLJ,EAAAZ,EAAAxnB,GACKkpB,IAAAT,IACLxmB,EAAAulB,EAAAxnB,IAIA,QAAAypB,GAAAjC,EAAAkC,GACA,IACAA,EAAA,SAAA1pB,GACAgC,EAAAwlB,EAAAxnB,IACK,SAAAqoB,GACLpmB,EAAAulB,EAAAa,KAEG,MAAAlhB,GACHlF,EAAAulB,EAAArgB,IAKA,QAAAwiB,KACA,MAAAza,MAGA,QAAAgY,GAAAM,GACAA,EAAAP,IAAA/X,KACAsY,EAAAL,WAAA3lB,GACAgmB,EAAAH,YAAA7lB,GACAgmB,EAAAwB,gBAGA,QAAAY,GAAAjJ,EAAAkJ,GACAllB,KAAAmlB,qBAAAnJ,EACAhc,KAAA6iB,QAAA,GAAA7G,GAAAqG,GAEAriB,KAAA6iB,QAAAP,KACAC,EAAAviB,KAAA6iB,SAGAuC,EAAAF,IACAllB,KAAApD,OAAAsoB,EAAAtoB,OACAoD,KAAAqlB,WAAAH,EAAAtoB,OAEAoD,KAAA0iB,QAAA,GAAA/I,OAAA3Z,KAAApD,QAEA,IAAAoD,KAAApD,OACA6mB,EAAAzjB,KAAA6iB,QAAA7iB,KAAA0iB,UAEA1iB,KAAApD,OAAAoD,KAAApD,QAAA,EACAoD,KAAAslB,WAAAJ,GACA,IAAAllB,KAAAqlB,YACA5B,EAAAzjB,KAAA6iB,QAAA7iB,KAAA0iB,WAIAplB,EAAA0C,KAAA6iB,QAAA0C,KAIA,QAAAA,KACA,UAAAjlB,OAAA,2CA8GA,QAAAklB,GAAAC,GACA,UAAAR,GAAAjlB,KAAAylB,GAAA5C,QAoEA,QAAA6C,GAAAD,GAEA,GAAAzJ,GAAAhc,IAEA,OAKA,IAAAgc,GALAoJ,EAAAK,GAKA,SAAApoB,EAAAC,GAEA,OADAV,GAAA6oB,EAAA7oB,OACA5B,EAAA,EAAqBA,EAAA4B,EAAY5B,IACjCghB,EAAA3e,QAAAooB,EAAAzqB,IAAA2C,KAAAN,EAAAC,IAPA,SAAA+M,EAAA/M,GACA,MAAAA,GAAA,GAAAic,WAAA,sCA8CA,QAAAoM,GAAAjC,GAEA,GAAA1H,GAAAhc,KACA6iB,EAAA,GAAA7G,GAAAqG,EAEA,OADA/kB,GAAAulB,EAAAa,GACAb,EAGA,QAAA+C,KACA,SAAArM,WAAA,sFAGA,QAAAsM,KACA,SAAAtM,WAAA,yHA0GA,QAAAuM,GAAAf,GACA/kB,KAAAsiB,IAAA0C,IACAhlB,KAAA0iB,QAAA1iB,KAAAwiB,WAAA3lB,GACAmD,KAAAqkB,gBAEAhC,IAAA0C,IACA,kBAAAA,IAAAa,IACA5lB,eAAA8lB,GAAAhB,EAAA9kB,KAAA+kB,GAAAc,KAmPA,QAAAE,KACA,GAAAC,OAAAnpB,EAEA,aAAA4F,EACAujB,EAAAvjB,MACK,uBAAAlB,MACLykB,EAAAzkB,SAEA,KACAykB,EAAAvkB,SAAA,iBACS,MAAAe,GACT,SAAAlC,OAAA,4EAIA,GAAA2lB,GAAAD,EAAA5oB,OAEA,IAAA6oB,EAAA,CACA,GAAAC,GAAA,IACA,KACAA,EAAAxqB,OAAAS,UAAA8c,SAAA/d,KAAA+qB,EAAA5oB,WACS,MAAAmF,IAIT,wBAAA0jB,IAAAD,EAAAE,KACA,OAIAH,EAAA5oB,QAAA0oB,EAlmCA,GAAAM,OAAAvpB,EAEAupB,GADAzM,MAAAyL,QACAzL,MAAAyL,QAEA,SAAAhE,GACA,yBAAA1lB,OAAAS,UAAA8c,SAAA/d,KAAAkmB,GAIA,IAAAgE,GAAAgB,EAEA/K,EAAA,EACAuG,MAAA/kB,GACA0kB,MAAA1kB,GAEA6kB,EAAA,SAAArJ,EAAAgO,GACArE,EAAA3G,GAAAhD,EACA2J,EAAA3G,EAAA,GAAAgL,EAEA,KADAhL,GAAA,KAKAkG,EACAA,EAAAM,GAEAyE,MAaAC,EAAA,mBAAA9iB,mBAAA5G,GACA2pB,EAAAD,MACAE,EAAAD,EAAAE,kBAAAF,EAAAG,uBACAC,EAAA,mBAAArlB,WAAA,KAAA2f,GAAiF,wBAAAjI,SAAA/d,KAAAgmB,GAGjF2F,EAAA,mBAAAC,oBAAA,mBAAAC,gBAAA,mBAAAC,gBAmDAhF,EAAA,GAAArI,OAAA,KA0BA2M,MAAAzpB,EAGAypB,GADAM,EA5EA,WAGA,kBACA,MAAA1F,GAAA+F,SAAApF,OA0EC4E,EA3DD,WACA,GAAAS,GAAA,EACAC,EAAA,GAAAV,GAAA5E,GACA/I,EAAAhV,SAAAsjB,eAAA,GAGA,OAFAD,GAAAE,QAAAvO,GAA0BwO,eAAA,IAE1B,WACAxO,EAAApc,KAAAwqB,MAAA,MAsDCL,EAjDD,WACA,GAAAU,GAAA,GAAAP,eAEA,OADAO,GAAAC,MAAAC,UAAA5F,EACA,WACA,MAAA0F,GAAAG,MAAAC,YAAA,WA+CC9qB,KAAA0pB,EAnBD,WACA,IACA,GACAqB,GAAAjtB,EAAA,GAEA,OADAinB,GAAAgG,EAAAC,WAAAD,EAAAE,aACAnG,IACG,MAAAnf,GACH,MAAAsf,SAeAA,GA0EA,IAAAQ,IAAAnW,KAAA4b,SAAA9O,SAAA,IAAA+O,UAAA,IAIA5D,OAAA,GACAP,GAAA,EACAC,GAAA,EAEAb,GAAA,GAAAwB,GA6KAE,GAAA,GAAAF,GA+DAla,GAAA,CAsqBA,OA1nBA0a,GAAA9oB,UAAAmpB,WAAA,SAAAJ,GACA,OAAAlqB,GAAA,EAAiBgF,KAAAwiB,SAAA4B,IAAAppB,EAAAkqB,EAAAtoB,OAA6C5B,IAC9DgF,KAAAioB,WAAA/C,EAAAlqB,OAIAiqB,EAAA9oB,UAAA8rB,WAAA,SAAAC,EAAAltB,GACA,GAAAI,GAAA4E,KAAAmlB,qBACAgD,EAAA/sB,EAAAiC,OAEA,IAAA8qB,IAAAvF,EAAA,CACA,GAAAwF,GAAApF,EAAAkF,EAEA,IAAAE,IAAAzqB,GAAAuqB,EAAA1F,SAAA4B,GACApkB,KAAAqoB,WAAAH,EAAA1F,OAAAxnB,EAAAktB,EAAAxF,aACK,sBAAA0F,GACLpoB,KAAAqlB,aACArlB,KAAA0iB,QAAA1nB,GAAAktB,MACK,IAAA9sB,IAAA0qB,EAAA,CACL,GAAAjD,GAAA,GAAAznB,GAAAinB,EACA0B,GAAAlB,EAAAqF,EAAAE,GACApoB,KAAAsoB,cAAAzF,EAAA7nB,OAEAgF,MAAAsoB,cAAA,GAAAltB,GAAA,SAAA+sB,GACA,MAAAA,GAAAD,KACOltB,OAGPgF,MAAAsoB,cAAAH,EAAAD,GAAAltB,IAIAiqB,EAAA9oB,UAAAksB,WAAA,SAAAE,EAAAvtB,EAAAK,GACA,GAAAwnB,GAAA7iB,KAAA6iB,OAEAA,GAAAL,SAAA4B,KACApkB,KAAAqlB,aAEAkD,IAAAzE,GACAxmB,EAAAulB,EAAAxnB,GAEA2E,KAAA0iB,QAAA1nB,GAAAK,GAIA,IAAA2E,KAAAqlB,YACA5B,EAAAZ,EAAA7iB,KAAA0iB,UAIAuC,EAAA9oB,UAAAmsB,cAAA,SAAAzF,EAAA7nB,GACA,GAAAwtB,GAAAxoB,IAEA2iB,GAAAE,MAAAhmB,GAAA,SAAAxB,GACA,MAAAmtB,GAAAH,WAAAxE,GAAA7oB,EAAAK,IACG,SAAAqoB,GACH,MAAA8E,GAAAH,WAAAvE,GAAA9oB,EAAA0oB,MA8SAoC,EAAA2C,IAAAjD,EACAM,EAAA4C,KAAAhD,EACAI,EAAAzoB,QAAAulB,EACAkD,EAAAxoB,OAAAqoB,EACAG,EAAA6C,cAAAtH,EACAyE,EAAA8C,SAAApH,EACAsE,EAAA+C,MAAAnH,EAEAoE,EAAA3pB,WACAwE,YAAAmlB,EAmMAnoB,OA6BAyM,MAAA,SAAA8X,GACA,MAAAliB,MAAArC,KAAA,KAAAukB,KAuCA4D,EAAAgD,SAAA/C,EACAD,EAAA1oB,QAAA0oB,EAEAA,MrC0qG6B5qB,KAAKJ,EAASH,EAAoB,IAAKA,EAAoB,MAIlF,SAAUI,EAAQD,GsCpyIxB,QAAAuN,GAAA9F,EAAAwmB,EAAA9rB,GACA,OAAAA,EAAAL,QACA,aAAA2F,GAAArH,KAAA6tB,EACA,cAAAxmB,GAAArH,KAAA6tB,EAAA9rB,EAAA,GACA,cAAAsF,GAAArH,KAAA6tB,EAAA9rB,EAAA,GAAAA,EAAA,GACA,cAAAsF,GAAArH,KAAA6tB,EAAA9rB,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAEA,MAAAsF,GAAA8F,MAAA0gB,EAAA9rB,GAGAlC,EAAAD,QAAAuN,GtCqzIM,SAAUtN,EAAQD,EAASH,GuCpzIjC,QAAAquB,GAAA3tB,EAAA4tB,GACA,GAAAC,GAAA9D,EAAA/pB,GACA8tB,GAAAD,GAAAE,EAAA/tB,GACAguB,GAAAH,IAAAC,GAAAG,EAAAjuB,GACAkuB,GAAAL,IAAAC,IAAAE,GAAAG,EAAAnuB,GACAouB,EAAAP,GAAAC,GAAAE,GAAAE,EACAG,EAAAD,EAAAE,EAAAtuB,EAAAuB,OAAAuc,WACAvc,EAAA8sB,EAAA9sB,MAEA,QAAAoF,KAAA3G,IACA4tB,IAAA7sB,EAAAlB,KAAAG,EAAA2G,IACAynB,IAEA,UAAAznB,GAEAqnB,IAAA,UAAArnB,GAAA,UAAAA,IAEAunB,IAAA,UAAAvnB,GAAA,cAAAA,GAAA,cAAAA,IAEAU,EAAAV,EAAApF,KAEA8sB,EAAAva,KAAAnN,EAGA,OAAA0nB,GA7CA,GAAAC,GAAAhvB,EAAA,IACAyuB,EAAAzuB,EAAA,IACAyqB,EAAAzqB,EAAA,IACA2uB,EAAA3uB,EAAA,IACA+H,EAAA/H,EAAA,IACA6uB,EAAA7uB,EAAA,IAGAyH,EAAA1G,OAAAS,UAGAC,EAAAgG,EAAAhG,cAqCArB,GAAAD,QAAAkuB,GvCg1IM,SAAUjuB,EAAQD,EAASH,GwCn3IjC,QAAAivB,GAAAvuB,GACA,MAAAyG,GAAAzG,IAAAyF,EAAAzF,IAAAwuB,EAdA,GAAA/oB,GAAAnG,EAAA,GACAmH,EAAAnH,EAAA,GAGAkvB,EAAA,oBAaA9uB,GAAAD,QAAA8uB,GxCu4IM,SAAU7uB,EAAQD,EAASH,GyCl3IjC,QAAAmvB,GAAAzuB,GACA,SAAAwG,EAAAxG,IAAA0uB,EAAA1uB,MAGAuG,EAAAvG,GAAA2uB,EAAAC,GACApnB,KAAAqnB,EAAA7uB,IA3CA,GAAAuG,GAAAjH,EAAA,IACAovB,EAAApvB,EAAA,IACAkH,EAAAlH,EAAA,GACAuvB,EAAAvvB,EAAA,IAMAwvB,EAAA,sBAGAF,EAAA,8BAGAG,EAAA3oB,SAAAtF,UACAiG,EAAA1G,OAAAS,UAGAkuB,EAAAD,EAAAnR,SAGA7c,EAAAgG,EAAAhG,eAGA4tB,EAAAM,OAAA,IACAD,EAAAnvB,KAAAkB,GAAAmuB,QAAAJ,EAAA,QACAI,QAAA,sEAmBAxvB,GAAAD,QAAAgvB,GzC+5IM,SAAU/uB,EAAQD,EAASH,G0Cv5IjC,QAAA6vB,GAAAnvB,GACA,MAAAyG,GAAAzG,IACAsG,EAAAtG,EAAAuB,WAAA6tB,EAAA3pB,EAAAzF,IAxDA,GAAAyF,GAAAnG,EAAA,GACAgH,EAAAhH,EAAA,IACAmH,EAAAnH,EAAA,GA8BA8vB,IACAA,GAZA,yBAYAA,EAXA,yBAYAA,EAXA,sBAWAA,EAVA,uBAWAA,EAVA,uBAUAA,EATA,uBAUAA,EATA,8BASAA,EARA,wBASAA,EARA,yBAQA,EACAA,EAjCA,sBAiCAA,EAhCA,kBAiCAA,EApBA,wBAoBAA,EAhCA,oBAiCAA,EApBA,qBAoBAA,EAhCA,iBAiCAA,EAhCA,kBAgCAA,EA/BA,qBAgCAA,EA/BA,gBA+BAA,EA9BA,mBA+BAA,EA9BA,mBA8BAA,EA7BA,mBA8BAA,EA7BA,gBA6BAA,EA5BA,mBA6BAA,EA5BA,qBA4BA,EAcA1vB,EAAAD,QAAA0vB,G1Co9IM,SAAUzvB,EAAQD,EAASH,G2C//IjC,QAAA+vB,GAAAzuB,GACA,IAAA6G,EAAA7G,GACA,MAAA0uB,GAAA1uB,EAEA,IAAAytB,KACA,QAAA1nB,KAAAtG,QAAAO,GACAG,EAAAlB,KAAAe,EAAA+F,IAAA,eAAAA,GACA0nB,EAAAva,KAAAnN,EAGA,OAAA0nB,GA1BA,GAAA5mB,GAAAnI,EAAA,IACAgwB,EAAAhwB,EAAA,IAGAyH,EAAA1G,OAAAS,UAGAC,EAAAgG,EAAAhG,cAsBArB,GAAAD,QAAA4vB,G3CshJM,SAAU3vB,EAAQD,EAASH,G4CviJjC,QAAAiwB,GAAAroB,EAAAsoB,GACA,MAAAC,GAAAC,EAAAxoB,EAAAsoB,EAAA5nB,GAAAV,EAAA,IAbA,GAAAU,GAAAtI,EAAA,IACAowB,EAAApwB,EAAA,IACAmwB,EAAAnwB,EAAA,GAcAI,GAAAD,QAAA8vB,G5C0jJM,SAAU7vB,EAAQD,EAASH,G6C1kJjC,GAAAqwB,GAAArwB,EAAA,IACAgB,EAAAhB,EAAA,GACAsI,EAAAtI,EAAA,IAUAswB,EAAAtvB,EAAA,SAAA4G,EAAA2W,GACA,MAAAvd,GAAA4G,EAAA,YACA3G,cAAA,EACAC,YAAA,EACAR,MAAA2vB,EAAA9R,GACA7W,UAAA,KALAY,CASAlI,GAAAD,QAAAmwB,G7CilJM,SAAUlwB,EAAQD,G8C7lJxB,QAAA6uB,GAAA5tB,EAAAmvB,GAIA,IAHA,GAAAnc,IAAA,EACA2a,EAAA/P,MAAA5d,KAEAgT,EAAAhT,GACA2tB,EAAA3a,GAAAmc,EAAAnc,EAEA,OAAA2a,GAGA3uB,EAAAD,QAAA6uB,G9C6mJM,SAAU5uB,EAAQD,G+CznJxB,QAAAqwB,GAAA5oB,GACA,gBAAAlH,GACA,MAAAkH,GAAAlH,IAIAN,EAAAD,QAAAqwB,G/CuoJM,SAAUpwB,EAAQD,EAASH,GgDvoJjC,QAAAywB,GAAAC,EAAAjP,EAAAngB,EAAAqvB,GACA,GAAAC,IAAAtvB,CACAA,UAKA,KAHA,GAAA8S,IAAA,EACAnS,EAAAwf,EAAAxf,SAEAmS,EAAAnS,GAAA,CACA,GAAAoF,GAAAoa,EAAArN,GAEAyc,EAAAF,EACAA,EAAArvB,EAAA+F,GAAAqpB,EAAArpB,KAAA/F,EAAAovB,OACAxuB,OAEAA,KAAA2uB,IACAA,EAAAH,EAAArpB,IAEAupB,EACAppB,EAAAlG,EAAA+F,EAAAwpB,GAEAzpB,EAAA9F,EAAA+F,EAAAwpB,GAGA,MAAAvvB,GApCA,GAAA8F,GAAApH,EAAA,GACAwH,EAAAxH,EAAA,EAsCAI,GAAAD,QAAAswB,GhD2pJM,SAAUrwB,EAAQD,EAASH,GiDlsJjC,GAAA6G,GAAA7G,EAAA,GAGA8wB,EAAAjqB,EAAA,qBAEAzG,GAAAD,QAAA2wB,GjDysJM,SAAU1wB,EAAQD,EAASH,GkDpsJjC,QAAA+wB,GAAAC,GACA,MAAAf,GAAA,SAAA3uB,EAAA2vB,GACA,GAAA7c,IAAA,EACAnS,EAAAgvB,EAAAhvB,OACA0uB,EAAA1uB,EAAA,EAAAgvB,EAAAhvB,EAAA,OAAAC,GACAgvB,EAAAjvB,EAAA,EAAAgvB,EAAA,OAAA/uB,EAWA,KATAyuB,EAAAK,EAAA/uB,OAAA,qBAAA0uB,IACA1uB,IAAA0uB,OACAzuB,GAEAgvB,GAAAC,EAAAF,EAAA,GAAAA,EAAA,GAAAC,KACAP,EAAA1uB,EAAA,MAAAC,GAAAyuB,EACA1uB,EAAA,GAEAX,EAAAP,OAAAO,KACA8S,EAAAnS,GAAA,CACA,GAAAyuB,GAAAO,EAAA7c,EACAsc,IACAM,EAAA1vB,EAAAovB,EAAAtc,EAAAuc,GAGA,MAAArvB,KAhCA,GAAA2uB,GAAAjwB,EAAA,IACAmxB,EAAAnxB,EAAA,GAmCAI,GAAAD,QAAA4wB,GlDqtJM,SAAU3wB,EAAQD,EAASH,GmD9uJjC,QAAA2H,GAAArG,EAAA+F,GACA,GAAA3G,GAAA0wB,EAAA9vB,EAAA+F,EACA,OAAA8nB,GAAAzuB,SAAAwB,GAbA,GAAAitB,GAAAnvB,EAAA,IACAoxB,EAAApxB,EAAA,GAeAI,GAAAD,QAAAwH,GnDgwJM,SAAUvH,EAAQD,EAASH,GoDvvJjC,QAAAuG,GAAA7F,GACA,GAAA2wB,GAAA5vB,EAAAlB,KAAAG,EAAA4F,GACAiC,EAAA7H,EAAA4F,EAEA,KACA5F,EAAA4F,OAAApE,EACA,IAAAovB,IAAA,EACG,MAAAzpB,IAEH,GAAAknB,GAAAwC,EAAAhxB,KAAAG,EAQA,OAPA4wB,KACAD,EACA3wB,EAAA4F,GAAAiC,QAEA7H,GAAA4F,IAGAyoB,EA1CA,GAAAlpB,GAAA7F,EAAA,GAGAyH,EAAA1G,OAAAS,UAGAC,EAAAgG,EAAAhG,eAOA8vB,EAAA9pB,EAAA6W,SAGAhY,EAAAT,IAAAY,gBAAAvE,EA6BA9B,GAAAD,QAAAoG,GpDuxJM,SAAUnG,EAAQD,GqD5zJxB,QAAAixB,GAAA9vB,EAAA+F,GACA,aAAA/F,MAAAY,GAAAZ,EAAA+F,GAGAjH,EAAAD,QAAAixB,GrD20JM,SAAUhxB,EAAQD,EAASH,GsDx0JjC,QAAAmxB,GAAAzwB,EAAA0T,EAAA9S,GACA,IAAA4F,EAAA5F,GACA,QAEA,IAAAoC,SAAA0Q,EACA,oBAAA1Q,EACAqD,EAAAzF,IAAAyG,EAAAqM,EAAA9S,EAAAW,QACA,UAAAyB,GAAA0Q,IAAA9S,KAEAiG,EAAAjG,EAAA8S,GAAA1T,GAxBA,GAAA6G,GAAAvH,EAAA,IACA+G,EAAA/G,EAAA,GACA+H,EAAA/H,EAAA,IACAkH,EAAAlH,EAAA,EA0BAI,GAAAD,QAAAgxB,GtD81JM,SAAU/wB,EAAQD,EAASH,GuD52JjC,QAAAovB,GAAAxnB,GACA,QAAA4pB,OAAA5pB,GAhBA,GAAAkpB,GAAA9wB,EAAA,IAGAwxB,EAAA,WACA,GAAAC,GAAA,SAAAC,KAAAZ,KAAAa,MAAAb,EAAAa,KAAAC,UAAA,GACA,OAAAH,GAAA,iBAAAA,EAAA,KAcArxB,GAAAD,QAAAivB,GvDk4JM,SAAUhvB,EAAQD,EAASH,GwDr5JjC,GAAA6xB,GAAA7xB,EAAA,IAGAgwB,EAAA6B,EAAA9wB,OAAA4wB,KAAA5wB,OAEAX,GAAAD,QAAA6vB,GxD45JM,SAAU5vB,EAAQD,EAASH,IyDj6JjC,SAAAI,GAAA,GAAAsG,GAAA1G,EAAA,IAGA8xB,EAAA,gBAAA3xB,UAAA0c,UAAA1c,EAGA4xB,EAAAD,GAAA,gBAAA1xB,UAAAyc,UAAAzc,EAGA4xB,EAAAD,KAAA5xB,UAAA2xB,EAGAG,EAAAD,GAAAtrB,EAAA6f,QAGA2L,EAAA,WACA,IACA,MAAAD,MAAAE,SAAAF,EAAAE,QAAA,QACG,MAAAtqB,OAGHzH,GAAAD,QAAA+xB,IzDq6J6B3xB,KAAKJ,EAASH,EAAoB,IAAII,KAI7D,SAAUA,EAAQD,G0D76JxB,QAAAqG,GAAA9F,GACA,MAAA6wB,GAAAhxB,KAAAG,GAjBA,GAAA+G,GAAA1G,OAAAS,UAOA+vB,EAAA9pB,EAAA6W,QAaAle,GAAAD,QAAAqG,G1Dq8JM,SAAUpG,EAAQD,G2Dl9JxB,QAAA0xB,GAAAjqB,EAAAwqB,GACA,gBAAA1G,GACA,MAAA9jB,GAAAwqB,EAAA1G,KAIAtrB,EAAAD,QAAA0xB,G3Di+JM,SAAUzxB,EAAQD,EAASH,G4Dj+JjC,QAAAowB,GAAAxoB,EAAAsoB,EAAAkC,GAEA,MADAlC,GAAAmC,MAAAnwB,KAAAguB,EAAAtoB,EAAA3F,OAAA,EAAAiuB,EAAA,GACA,WAMA,IALA,GAAA5tB,GAAAN,UACAoS,GAAA,EACAnS,EAAAowB,EAAA/vB,EAAAL,OAAAiuB,EAAA,GACAoC,EAAAtT,MAAA/c,KAEAmS,EAAAnS,GACAqwB,EAAAle,GAAA9R,EAAA4tB,EAAA9b,EAEAA,IAAA,CAEA,KADA,GAAAme,GAAAvT,MAAAkR,EAAA,KACA9b,EAAA8b,GACAqC,EAAAne,GAAA9R,EAAA8R,EAGA,OADAme,GAAArC,GAAAkC,EAAAE,GACA5kB,EAAA9F,EAAAvC,KAAAktB,IA/BA,GAAA7kB,GAAA1N,EAAA,IAGAqyB,EAAA7gB,KAAAghB,GAgCApyB,GAAAD,QAAAiwB,G5Ds/JM,SAAUhwB,EAAQD,EAASH,G6DzhKjC,GAAAswB,GAAAtwB,EAAA,IACAyyB,EAAAzyB,EAAA,IAUAmwB,EAAAsC,EAAAnC,EAEAlwB,GAAAD,QAAAgwB,G7DgiKM,SAAU/vB,EAAQD,G8D7hKxB,QAAAsyB,GAAA7qB,GACA,GAAA8qB,GAAA,EACAC,EAAA,CAEA,mBACA,GAAAC,GAAAC,IACAC,EAAAC,GAAAH,EAAAD,EAGA,IADAA,EAAAC,EACAE,EAAA,GACA,KAAAJ,GAAAM,EACA,MAAAhxB,WAAA,OAGA0wB,GAAA,CAEA,OAAA9qB,GAAA8F,UAAAxL,GAAAF,YA/BA,GAAAgxB,GAAA,IACAD,EAAA,GAGAF,EAAAna,KAAAua,GA+BA7yB,GAAAD,QAAAsyB,G9DojKM,SAAUryB,EAAQD,G+D3kKxB,QAAAovB,GAAA3nB,GACA,SAAAA,EAAA,CACA,IACA,MAAA8nB,GAAAnvB,KAAAqH,GACK,MAAAC,IACL,IACA,MAAAD,GAAA,GACK,MAAAC,KAEL,SArBA,GAAA4nB,GAAA3oB,SAAAtF,UAGAkuB,EAAAD,EAAAnR,QAqBAle,GAAAD,QAAAovB,G/D+lKM,SAAUnvB,EAAQD,EAASH,GgExnKjC,GAAAoH,GAAApH,EAAA,GACAywB,EAAAzwB,EAAA,IACA+wB,EAAA/wB,EAAA,IACA+G,EAAA/G,EAAA,GACAmI,EAAAnI,EAAA,IACA2xB,EAAA3xB,EAAA,IAGAyH,EAAA1G,OAAAS,UAGAC,EAAAgG,EAAAhG,eAkCAyxB,EAAAnC,EAAA,SAAAzvB,EAAAovB,GACA,GAAAvoB,EAAAuoB,IAAA3pB,EAAA2pB,GAEA,WADAD,GAAAC,EAAAiB,EAAAjB,GAAApvB,EAGA,QAAA+F,KAAAqpB,GACAjvB,EAAAlB,KAAAmwB,EAAArpB,IACAD,EAAA9F,EAAA+F,EAAAqpB,EAAArpB,KAKAjH,GAAAD,QAAA+yB,GhE+nKM,SAAU9yB,EAAQD,GiErqKxB,QAAAkwB,GAAA3vB,GACA,kBACA,MAAAA,IAIAN,EAAAD,QAAAkwB,GjE+rKM,SAAUjwB,EAAQD,EAASH,GkExtKjC,GAAAivB,GAAAjvB,EAAA,IACAmH,EAAAnH,EAAA,GAGAyH,EAAA1G,OAAAS,UAGAC,EAAAgG,EAAAhG,eAGA0xB,EAAA1rB,EAAA0rB,qBAoBA1E,EAAAQ,EAAA,WAA8C,MAAAjtB,eAAoBitB,EAAA,SAAAvuB,GAClE,MAAAyG,GAAAzG,IAAAe,EAAAlB,KAAAG,EAAA,YACAyyB,EAAA5yB,KAAAG,EAAA,UAGAN,GAAAD,QAAAsuB,GlE+tKM,SAAUruB,EAAQD,GmE3uKxB,GAAAsqB,GAAAzL,MAAAyL,OAEArqB,GAAAD,QAAAsqB,GnEywKM,SAAUrqB,EAAQD,EAASH,IoElyKjC,SAAAI,GAAA,GAAAyG,GAAA7G,EAAA,GACAozB,EAAApzB,EAAA,IAGA8xB,EAAA,gBAAA3xB,UAAA0c,UAAA1c,EAGA4xB,EAAAD,GAAA,gBAAA1xB,UAAAyc,UAAAzc,EAGA4xB,EAAAD,KAAA5xB,UAAA2xB,EAGAuB,EAAArB,EAAAnrB,EAAAwsB,WAAAnxB,GAGAoxB,EAAAD,IAAA1E,aAAAzsB,GAmBAysB,EAAA2E,GAAAF,CAEAhzB,GAAAD,QAAAwuB,IpEsyK6BpuB,KAAKJ,EAASH,EAAoB,IAAII,KAI7D,SAAUA,EAAQD,EAASH,GqE/0KjC,GAAA6vB,GAAA7vB,EAAA,IACAwwB,EAAAxwB,EAAA,IACAkyB,EAAAlyB,EAAA,IAGAuzB,EAAArB,KAAArD,aAmBAA,EAAA0E,EAAA/C,EAAA+C,GAAA1D,CAEAzvB,GAAAD,QAAA0uB,GrEs1KM,SAAUzuB,EAAQD,EAASH,GsEh1KjC,QAAA2xB,GAAArwB,GACA,MAAAyF,GAAAzF,GAAA+sB,EAAA/sB,GAAAyuB,EAAAzuB,GAjCA,GAAA+sB,GAAAruB,EAAA,IACA+vB,EAAA/vB,EAAA,IACA+G,EAAA/G,EAAA,EAkCAI,GAAAD,QAAAwxB,GtEu3KM,SAAUvxB,EAAQD,GuE94KxB,QAAAizB,KACA,SAGAhzB,EAAAD,QAAAizB,GvEk6KM,SAAUhzB,EAAQD,GwEx6KxB,QAAAqzB,KACA,SAAA7tB,OAAA,mCAEA,QAAA8tB,KACA,SAAA9tB,OAAA,qCAsBA,QAAA+tB,GAAAC,GACA,GAAAC,IAAA1lB,WAEA,MAAAA,YAAAylB,EAAA,EAGA,KAAAC,IAAAJ,IAAAI,IAAA1lB,WAEA,MADA0lB,GAAA1lB,WACAA,WAAAylB,EAAA,EAEA,KAEA,MAAAC,GAAAD,EAAA,GACK,MAAA9rB,GACL,IAEA,MAAA+rB,GAAArzB,KAAA,KAAAozB,EAAA,GACS,MAAA9rB,GAET,MAAA+rB,GAAArzB,KAAA8E,KAAAsuB,EAAA,KAMA,QAAAE,GAAAC,GACA,GAAAC,IAAA9f,aAEA,MAAAA,cAAA6f,EAGA,KAAAC,IAAAN,IAAAM,IAAA9f,aAEA,MADA8f,GAAA9f,aACAA,aAAA6f,EAEA,KAEA,MAAAC,GAAAD,GACK,MAAAjsB,GACL,IAEA,MAAAksB,GAAAxzB,KAAA,KAAAuzB,GACS,MAAAjsB,GAGT,MAAAksB,GAAAxzB,KAAA8E,KAAAyuB,KAYA,QAAAE,KACAC,GAAAC,IAGAD,GAAA,EACAC,EAAAjyB,OACAolB,EAAA6M,EAAAC,OAAA9M,GAEA+M,GAAA,EAEA/M,EAAAplB,QACAoyB,KAIA,QAAAA,KACA,IAAAJ,EAAA,CAGA,GAAAK,GAAAZ,EAAAM,EACAC,IAAA,CAGA,KADA,GAAAvT,GAAA2G,EAAAplB,OACAye,GAAA,CAGA,IAFAwT,EAAA7M,EACAA,OACA+M,EAAA1T,GACAwT,GACAA,EAAAE,GAAAG,KAGAH,IAAA,EACA1T,EAAA2G,EAAAplB,OAEAiyB,EAAA,KACAD,GAAA,EACAJ,EAAAS,IAiBA,QAAAE,GAAAb,EAAArB,GACAjtB,KAAAsuB,MACAtuB,KAAAitB,QAYA,QAAA5K,MAhKA,GAOAkM,GACAG,EARAxN,EAAAnmB,EAAAD,YAgBA,WACA,IAEAyzB,EADA,kBAAA1lB,YACAA,WAEAslB,EAEK,MAAA3rB,GACL+rB,EAAAJ,EAEA,IAEAO,EADA,kBAAA9f,cACAA,aAEAwf,EAEK,MAAA5rB,GACLksB,EAAAN,KAuDA,IAEAS,GAFA7M,KACA4M,GAAA,EAEAG,GAAA,CAyCA7N,GAAA+F,SAAA,SAAAqH,GACA,GAAArxB,GAAA,GAAA0c,OAAAhd,UAAAC,OAAA,EACA,IAAAD,UAAAC,OAAA,EACA,OAAA5B,GAAA,EAAuBA,EAAA2B,UAAAC,OAAsB5B,IAC7CiC,EAAAjC,EAAA,GAAA2B,UAAA3B,EAGAgnB,GAAA7S,KAAA,GAAAggB,GAAAb,EAAArxB,IACA,IAAA+kB,EAAAplB,QAAAgyB,GACAP,EAAAW,IASAG,EAAAhzB,UAAA+yB,IAAA,WACAlvB,KAAAsuB,IAAAjmB,MAAA,KAAArI,KAAAitB,QAEA/L,EAAAkO,MAAA,UACAlO,EAAAmO,SAAA,EACAnO,EAAAoO,OACApO,EAAAqO,QACArO,EAAAsO,QAAA,GACAtO,EAAAuO,YAIAvO,EAAA9b,GAAAid,EACAnB,EAAAwO,YAAArN,EACAnB,EAAAjG,KAAAoH,EACAnB,EAAAlQ,IAAAqR,EACAnB,EAAAyO,eAAAtN,EACAnB,EAAA0O,mBAAAvN,EACAnB,EAAAhG,KAAAmH,EACAnB,EAAA2O,gBAAAxN,EACAnB,EAAA4O,oBAAAzN,EAEAnB,EAAA6O,UAAA,SAAAx0B,GAAqC,UAErC2lB,EAAA4L,QAAA,SAAAvxB,GACA,SAAA+E,OAAA,qCAGA4gB,EAAA8O,IAAA,WAA2B,WAC3B9O,EAAA+O,MAAA,SAAAC,GACA,SAAA5vB,OAAA,mCAEA4gB,EAAAiP,MAAA,WAA4B,WxE07KtB,SAAUp1B,EAAQD","file":"admin.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 29);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _assign = __webpack_require__(62);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Fetcher() {\n var fetchUrl = ajaxurl;\n var fetchNonce = wphb.nonces.HBFetchNonce;\n var actionPrefix = 'wphb_';\n var actionPrefixPro = 'wphb_pro_';\n\n function request(action) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'GET';\n\n data.nonce = fetchNonce;\n data.action = action;\n var args = { data: data, method: method };\n args.url = fetchUrl;\n var Promise = __webpack_require__(35).Promise;\n return new Promise(function (resolve, reject) {\n jQuery.ajax(args).done(resolve).fail(reject);\n }).then(function (response) {\n return checkStatus(response);\n });\n }\n\n var methods = {\n /**\n * Caching module actions.\n */\n caching: {\n /**\n * Set expiration for browser caching.\n *\n * @param type File type.\n * @param value Expiry value.\n */\n setExpiration: function setExpiration(type, value) {\n var action = actionPrefix + 'caching_set_expiration';\n return request(action, { type: type, value: value }, 'POST');\n },\n\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: function setServer(value) {\n var action = actionPrefix + 'caching_set_server_type';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: function reloadSnippets(type) {\n var action = actionPrefix + 'caching_reload_snippet';\n return request(action, { type: type }, 'POST').then(function (response) {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n /**\n * Connect to CloudFlare.\n *\n * @param step\n * @param formData\n * @param cfData\n */\n connect: function connect(step, formData, cfData) {\n var action = actionPrefix + 'cloudflare_connect';\n return request(action, { step: step, formData: formData, cfData: cfData }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Set expiry for CloudFlare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: function setExpiration(value) {\n var action = actionPrefix + 'cloudflare_set_expiry';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Purge CloudFlare cache.\n */\n purgeCache: function purgeCache() {\n var action = actionPrefix + 'cloudflare_purge_cache';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'dash_toggle_network_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Skip quick setup.\n */\n skipSetup: function skipSetup() {\n var action = actionPrefix + 'dash_skip_setup';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: function toggleCDN(value) {\n var action = actionPrefix + 'minification_toggle_cdn';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'minification_toggle_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: function startCheck() {\n var action = actionPrefix + 'minification_start_check';\n return request(action, {}, 'POST');\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: function checkStep(step) {\n var action = actionPrefix + 'minification_check_step';\n return request(action, { step: step }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Finish minification process.\n */\n finishCheck: function finishCheck() {\n var action = actionPrefix + 'minification_finish_scan';\n return request(action, {}, 'POST');\n },\n\n /**\n * Cancel minification scan.\n */\n cancelScan: function cancelScan() {\n var action = actionPrefix + 'minification_cancel_scan';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Performance module actions.\n */\n performance: {\n /**\n * Run performance test.\n */\n runTest: function runTest() {\n var action = actionPrefix + 'performance_run_test';\n return request(action, {}, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Add a single email/name recipient to the reports list.\n *\n * @param email\n * @param name\n */\n addRecipient: function addRecipient(email, name) {\n var action = actionPrefixPro + 'performance_add_recipient';\n return request(action, { email: email, name: name }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Save reporting settings on minification page.\n *\n * @param data From data.\n */\n saveReportsSettings: function saveReportsSettings(data) {\n var action = actionPrefixPro + 'performance_save_reports_settings';\n return request(action, { data: data }, 'POST');\n }\n }\n };\n\n (0, _assign2.default)(this, methods);\n}\n\nvar HBFetcher = new Fetcher();\nexports.default = HBFetcher;\n\n\nfunction checkStatus(response) {\n if ((typeof response === 'undefined' ? 'undefined' : _typeof(response)) !== 'object') {\n response = JSON.parse(response);\n }\n if (response.success) {\n return response.data;\n }\n\n var data = response.data || {};\n var error = new Error(data.message || 'Error trying to fetch response from server');\n error.response = response;\n throw error;\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Symbol = __webpack_require__(6),\n getRawTag = __webpack_require__(50),\n objectToString = __webpack_require__(56);\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar freeGlobal = __webpack_require__(10);\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(15),\n isLength = __webpack_require__(16);\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar root = __webpack_require__(2);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseAssignValue = __webpack_require__(8),\n eq = __webpack_require__(13);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(9);\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getNative = __webpack_require__(49);\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(17)))\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isObject = __webpack_require__(4);\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\njQuery(document).ready(function () {\n WPHB_Admin.init();\n});\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _clipboard = __webpack_require__(33);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n WPHB_Admin.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $expirySelectors: [],\n $snippets: [],\n\n init: function init() {\n var self = this,\n cachingMetabox = $('#wphb-box-caching-settings'),\n cachingContent = cachingMetabox.find('.settings-form'),\n cachingContentSpinner = cachingContent.find('.spinner'),\n cloudflareLink = $('#wphb-box-caching-settings #connect-cloudflare-link');\n\n new _clipboard2.default('.wphb-code-snippet .button');\n\n if (wphbCachingStrings) self.strings = wphbCachingStrings;\n\n cloudflareLink.on('click', function (e) {\n e.preventDefault();\n $('#wphb-server-type').val('cloudflare').trigger('wpmu:change');\n self.hideCurrentInstructions();\n self.showServerInstructions('cloudflare');\n self.selectedServer = 'cloudflare';\n $('html, body').animate({ scrollTop: $('#cloudflare-steps').offset().top }, 'slow');\n });\n\n this.$serverSelector = $('#wphb-server-type');\n this.selectedServer = this.$serverSelector.val();\n //this.$spinner = $('#wphb-box-caching-enable .spinner');\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n self.$snippets.LiteSpeed = $('#wphb-code-snippet-litespeed').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n var instructionsList = $('.wphb-server-instructions');\n instructionsList.each(function () {\n self.$serverInstructions[$(this).data('server')] = $(this);\n });\n\n var expirySelectors = $('.wphb-expiry-select');\n\n expirySelectors.each(function () {\n var type = $(this).data('type');\n if (type) {\n $(this).change(function () {\n //self.$spinner.css( 'visibility', 'visible' );\n cachingContent.find('.wphb-content').hide();\n cachingContentSpinner.fadeIn();\n $('.wphb-notice').hide();\n\n // Expiration selector has changed\n (function (element) {\n var value = $(element).val();\n // Change the plugin settings\n _fetcher2.default.caching.setExpiration(type, value).then(function () {\n // And reload the code snippet\n self.reloadSnippets();\n });\n return false;\n })(this);\n });\n }\n });\n\n this.showServerInstructions(this.selectedServer);\n\n this.$serverSelector.change(function () {\n var value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n\n $(\"input[name='expiry-set-type']\").on('click', function () {\n if ('expiry-all-types' === $(this).attr('id')) {\n $('.settings-form').find(\"[data='expiry-single-type']\").hide();\n $('.settings-form').find(\"[data='expiry-all-types']\").show();\n } else if ('expiry-single-type' === $(this).attr('id')) {\n $('.settings-form').find(\"[data='expiry-all-types']\").hide();\n $('.settings-form').find(\"[data='expiry-single-type']\").show();\n }\n });\n\n return this;\n },\n\n setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n },\n\n hideCurrentInstructions: function hideCurrentInstructions() {\n var selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function showServerInstructions(server) {\n if (typeof this.$serverInstructions[server] !== 'undefined') {\n var serverTab = this.$serverInstructions[server];\n serverTab.show();\n // Show tab.\n serverTab.find('.tab:first-child > label').trigger('click');\n }\n\n if ('apache' === server || 'LiteSpeed' === server) {\n $('.enable-cache-wrap-' + server).show();\n } else {\n $('#enable-cache-wrap').hide();\n }\n },\n\n reloadSnippets: function reloadSnippets() {\n var self = this;\n var stop = false;\n\n for (var i in self.$snippets) {\n if (self.$snippets.hasOwnProperty(i)) {\n _fetcher2.default.caching.reloadSnippets(i).then(function (response) {\n if (stop) {\n return;\n }\n\n self.$snippets[response.type].text(response.code);\n\n // Make sure that we only do things when server displayed is the processed one\n if (response.type !== self.selectedServer) {\n return;\n }\n\n if ('apache' === response.type && response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ('apache' === response.type && self.strings.cacheEnabled && !response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-error').show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $('#wphb-notice-code-snippet-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n //self.$spinner.css( 'visibility', 'hidden' );\n });\n }\n }\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.cloudflare = {\n module: 'cloudflare',\n $cfSelector: false,\n $spinner: false,\n\n init: function init() {\n this.$spinner = $('.wphb-spinner');\n this.$cfSelector = $('#wphb-caching-cloudflare-summary-set-expiry');\n var self = this;\n if (wphb.cloudflare.is.connected) {\n this.$cfSelector.change(function () {\n self.setExpiry.call(self, [this]);\n });\n }\n\n return this;\n },\n\n setExpiry: function setExpiry(selector) {\n this.displaySpinner();\n var value = $(selector).val();\n _fetcher2.default.cloudflare.setExpiration(value).then(function () {\n window.location.reload();\n });\n },\n\n displaySpinner: function displaySpinner() {\n this.$spinner.css('visibility', 'visible');\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.DashboardCloudFlare = {\n init: function init(settings) {\n this.currentStep = settings.currentStep;\n this.data = settings;\n this.email = settings.email;\n this.apiKey = settings.apiKey;\n this.$stepsContainer = $('#cloudflare-steps');\n this.$infoBox = $('#cloudflare-info');\n this.$spinner = $('.cloudflare-spinner');\n this.$deactivateButton = $('.cloudflare-deactivate.button');\n\n this.renderStep(this.currentStep);\n\n $('body').on('click', '.cloudflare-clear-cache.button', function (e) {\n e.preventDefault();\n this.purgeCache.apply($(e.target), [this]);\n }.bind(this));\n },\n\n purgeCache: function purgeCache(self) {\n // Show spinner\n var $button = this;\n $button.attr('disabled', true);\n self.showSpinner();\n\n _fetcher2.default.cloudflare.purgeCache().then(function () {\n // Show notice\n var $notice = $('#wphb-notice-cloudflare-purge-cache');\n window.scrollTo(0, 0);\n $notice.slideDown();\n setTimeout(function () {\n $notice.slideUp();\n }, 5e3);\n // Remove spinner\n $button.removeAttr('disabled');\n self.hideSpinner();\n });\n },\n\n renderStep: function renderStep(step) {\n var template = WPHB_Admin.DashboardCloudFlare.template('#cloudflare-step-' + step);\n var content = template(this.data);\n var self = this;\n\n if (content) {\n this.currentStep = step;\n this.$stepsContainer.hide().html(template(this.data)).fadeIn().find('form').on('submit', function (e) {\n e.preventDefault();\n self.submitStep.call(self, $(this));\n });\n\n this.$spinner = this.$stepsContainer.find('.cloudflare-spinner');\n }\n\n this.bindEvents();\n },\n\n bindEvents: function bindEvents() {\n var $howToInstructions = $('#cloudflare-how-to');\n\n $howToInstructions.hide();\n\n $('#cloudflare-how-to-title > a').click(function (e) {\n e.preventDefault();\n $howToInstructions.toggle();\n });\n\n this.$stepsContainer.find('select').each(function () {\n window.WDP.wpmuSelect(this);\n });\n\n if ('final' === this.currentStep) {\n this.$deactivateButton.removeClass('hidden');\n } else {\n this.$deactivateButton.addClass('hidden');\n }\n },\n\n emptyInfoBox: function emptyInfoBox() {\n this.$infoBox.html('');\n this.$infoBox.removeClass();\n },\n\n showInfoBox: function showInfoBox(message) {\n this.$infoBox.addClass('wphb-notice');\n this.$infoBox.addClass('wphb-notice-error');\n this.$infoBox.html(message + '');\n },\n\n showSpinner: function showSpinner() {\n this.$spinner.css('visibility', 'visible');\n },\n\n hideSpinner: function hideSpinner() {\n this.$spinner.css('visibility', 'hidden');\n },\n\n submitStep: function submitStep($form) {\n var self = this;\n\n $form.find('input[type=submit]').attr('disabled', 'true');\n this.emptyInfoBox();\n this.showSpinner();\n\n _fetcher2.default.cloudflare.connect(this.currentStep, $form.serialize(), this.data).then(function (response) {\n self.data = response.newData;\n self.renderStep(response.nextStep);\n\n if (response.nextStep === 'final') {\n window.location.href = response.redirect;\n }\n }).catch(function (error) {\n self.showInfoBox(error);\n });\n\n $form.find('input[type=submit]').removeAttr('disabled');\n self.hideSpinner();\n }\n };\n\n WPHB_Admin.DashboardCloudFlare.template = _.memoize(function (id) {\n var compiled = void 0,\n options = {\n evaluate: /<#([\\s\\S]+?)#>/g,\n interpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n escape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n variable: 'data'\n };\n\n return function (data) {\n _.templateSettings = options;\n compiled = compiled || _.template($(id).html());\n return compiled(data);\n };\n });\n})(jQuery);\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.dashboard = {\n module: 'dashboard',\n\n init: function init() {\n var self = this;\n\n if (wphbDashboardStrings) this.strings = wphbDashboardStrings;\n\n $('#wphb-activate-minification').change(function () {\n var value = $(this).val();\n _fetcher2.default.dashboard.toggleMinification(value).then(function () {\n // If disabled, uncheck CDN checkbox and disable it.\n var CDNcheckbox = $('input[name=\"use_cdn\"]');\n if ('false' === value) {\n CDNcheckbox.prop('checked', false);\n CDNcheckbox.prop('disabled', true);\n } else {\n CDNcheckbox.prop('disabled', false);\n }\n self.showNotice();\n });\n });\n\n $('#use_cdn').change(function () {\n var value = $(this).is(':checked');\n _fetcher2.default.minification.toggleCDN(value).then(function () {\n self.showNotice();\n });\n });\n\n $('.wphb-performance-report-item').click(function () {\n var url = $(this).data('performance-url');\n if (url) {\n location.href = url;\n }\n });\n return this;\n },\n\n /**\n * Notice on settings update.\n */\n showNotice: function showNotice() {\n var notice = $('#wphb-notice-minification-settings-updated');\n notice.slideDown();\n setTimeout(function () {\n notice.slideUp();\n }, 5000);\n },\n\n /**\n * Run quick setup.\n */\n startQuickSetup: function startQuickSetup() {\n // Show quick setup modal\n window.WDP.showOverlay('#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' });\n },\n\n /**\n * Skip quick setup.\n */\n skipSetup: function skipSetup() {\n _fetcher2.default.dashboard.skipSetup().then(function () {\n window.location.reload(true);\n });\n },\n\n /**\n * Run performance test after quick setup.\n */\n runPerformanceTest: function runPerformanceTest() {\n // Show quick setup modal\n window.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n\n // Run performance test\n var module = WPHB_Admin.getModule('performance');\n module.performanceTest(this.strings.finishedTestURLsLink);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.gzip = {\n module: \"gzip\",\n selectedServer: \"\",\n $serverSelector: null,\n $serverInstructions: [],\n\n init: function init() {\n var self = this;\n\n this.$serverSelector = $(\"#wphb-server-type\");\n this.selectedServer = this.$serverSelector.val();\n var instructionsList = $(\".wphb-server-instructions\");\n instructionsList.each(function () {\n self.$serverInstructions[$(this).data(\"server\")] = $(this);\n });\n this.showServerInstructions(this.selectedServer);\n this.$serverSelector.change(function () {\n var value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n $(\"#toggle-apache-instructions\").click(function (e) {\n e.preventDefault();\n $(\".apache-instructions\").toggle();\n });\n $(\"#toggle-litespeed-instructions\").click(function (e) {\n e.preventDefault();\n $(\".litespeed-instructions\").toggle();\n });\n return this;\n },\n\n hideCurrentInstructions: function hideCurrentInstructions() {\n var selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function showServerInstructions(server) {\n if (typeof this.$serverInstructions[server] !== \"undefined\") {\n this.$serverInstructions[server].show();\n }\n if (\"apache\" === server || 'LiteSpeed' === server) {\n $(\"#enable-cache-wrap\").show();\n } else {\n $(\"#enable-cache-wrap\").hide();\n }\n },\n\n setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n(function ($) {\n 'use strict';\n\n var WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function init() {\n\n $('body').on('change', '.mobile-nav', function () {\n var url = $(this).val();\n if (url.length > 0) {\n location.href = url;\n }\n });\n\n function updatePerformanceGraph($wrap) {\n var $item = $wrap.find('.wphb-score-result-label'),\n val = parseInt($item.text(), 10) || 100,\n $circle = $wrap.find(\".wphb-score-graph-result\"),\n r = void 0,\n c = void 0,\n pct = void 0;\n r = $circle.attr('r');\n c = Math.PI * (r * 2);\n\n if (val < 0) {\n val = 0;\n }\n if (val > 100) {\n val = 100;\n }\n\n pct = (100 - val) / 100 * c;\n\n $circle.css({ strokeDashoffset: pct });\n }\n\n function updatePerformanceResultsGraphs() {\n\n // Update Overall Score\n $(\".wphb-performance-report-overall-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n\n // Update Current Score\n $(\".wphb-performance-report-current-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n\n // Update All Scores\n $(\".wphb-performance-report-item-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n }\n window.register_events_performance = function () {\n setTimeout(updatePerformanceResultsGraphs, 500);\n };\n $(function () {\n setTimeout(updatePerformanceResultsGraphs, 500);\n });\n },\n initModule: function initModule(module) {\n if (this.hasOwnProperty(module)) {\n this.modules[module] = this[module].init();\n return this.modules[module];\n }\n\n return {};\n },\n getModule: function getModule(module) {\n if (typeof this.modules[module] !== 'undefined') return this.modules[module];else return this.initModule(module);\n }\n };\n\n WPHB_Admin.utils = {\n\n membershipModal: {\n open: function open() {\n $('#wphb-upgrade-membership-modal-link').trigger('click');\n }\n },\n\n post: function post(data, module) {\n data.action = 'wphb_ajax';\n data.module = module;\n return $.ajax({\n url: ajaxurl,\n method: 'POST',\n data: data\n });\n }\n };\n\n WPHB_Admin.notices = {\n\n init: function init() {\n $('.wphb-notice:not(.notice) a.wphb-dismiss').click(function (e) {\n e.preventDefault();\n var id = $(this).data('id');\n var nonce = $(this).data('nonce');\n\n $(this).parent('.error').hide();\n });\n }\n };\n\n window.WPHB_Admin = WPHB_Admin;\n})(jQuery);\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nvar _helpers = __webpack_require__(34);\n\nvar _Row = __webpack_require__(30);\n\nvar _Row2 = _interopRequireDefault(_Row);\n\nvar _RowsCollection = __webpack_require__(31);\n\nvar _RowsCollection2 = _interopRequireDefault(_RowsCollection);\n\nvar _Scanner = __webpack_require__(32);\n\nvar _Scanner2 = _interopRequireDefault(_Scanner);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n WPHB_Admin.minification = {\n\n $checkFilesButton: null,\n $checkFilesResultsContainer: null,\n module: 'minification',\n checkURLSList: null,\n checkedURLS: 0,\n $spinner: null,\n\n init: function init() {\n var _this = this;\n\n var self = this;\n\n // Init files scanner\n this.scanner = new _Scanner2.default(wphb.minification.get.totalSteps, wphb.minification.get.currentScanStep);\n this.scanner.onFinishStep = this.updateProgressBar;\n this.scanner.onFinish = function (response) {\n _this.updateProgressBar(100);\n if (wphb.minification.get.showCDNModal && true === response.show_cdn && $('#enable-cdn-modal').length) {\n window.WDP.showOverlay('#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' });\n } else {\n window.location.href = (0, _helpers.getLink)('minification');\n }\n };\n\n // Check files button\n this.$checkFilesButton = $('#check-files');\n this.$disableMinification = $('#wphb-disable-minification');\n this.$spinner = $('.spinner');\n\n if (this.$checkFilesButton.length) {\n this.$checkFilesButton.click(function (e) {\n e.preventDefault();\n window.WDP.showOverlay(\"#check-files-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n $(this).attr('disabled', true);\n self.updateProgressBar(self.scanner.getProgress());\n self.scanner.scan();\n });\n }\n\n // Cancel scan button\n $('body').on('click', '#cancel-minification-check', function (e) {\n e.preventDefault();\n _this.updateProgressBar(0, true);\n _this.scanner.cancel().then(function () {\n window.location.href = (0, _helpers.getLink)('minification');\n });\n });\n\n // Filter action button on Minification page\n $('#wphb-minification-filter-button').on('click', function (e) {\n e.preventDefault();\n $('#wphb-minification-filter').toggle('slow');\n });\n\n $('.wphb-discard').click(function (e) {\n e.preventDefault();\n\n if (confirm((0, _helpers.__)('discardAlert'))) {\n location.reload();\n }\n return false;\n });\n\n $('.wphb-enqueued-files input').on('change', function () {\n $('.wphb-discard').attr('disabled', false);\n });\n\n $('#use_cdn').change(function () {\n var cdn_value = $(this).is(':checked');\n _fetcher2.default.minification.toggleCDN(cdn_value).then(function () {\n var notice = $('#wphb-notice-minification-advanced-settings-updated');\n notice.slideDown();\n setTimeout(function () {\n notice.slideUp();\n }, 5000);\n });\n });\n\n this.$disableMinification.change(function () {\n var value = $(this).is(':checked');\n\n self.$spinner.css('visibility', 'visible');\n\n if (self.timer && value) {\n clearTimeout(self.timer);\n self.$spinner.css('visibility', 'hidden');\n }\n\n self.timer = setTimeout(function () {\n _fetcher2.default.minification.toggleMinification(value).then(function () {\n location.reload();\n });\n }, 3000);\n });\n\n this.rowsCollection = new WPHB_Admin.minification.RowsCollection();\n\n var rows = $('.wphb-border-row');\n\n rows.each(function (index, row) {\n var _row = void 0;\n if ($(row).data('filter-secondary')) {\n _row = new WPHB_Admin.minification.Row($(row), $(row).data('filter'), $(row).data('filter-secondary'));\n } else {\n _row = new WPHB_Admin.minification.Row($(row), $(row).data('filter'));\n }\n self.rowsCollection.push(_row);\n });\n\n $('#wphb-s').keyup(function () {\n self.rowsCollection.addFilter($(this).val(), 'primary');\n self.rowsCollection.applyFilters();\n });\n\n $('#wphb-secondary-filter').change(function () {\n self.rowsCollection.addFilter($(this).val(), 'secondary');\n self.rowsCollection.applyFilters();\n });\n\n $('.filter-toggles').change(function () {\n var element = $(this);\n var what = element.data('toggles');\n var value = element.prop('checked');\n var visibleItems = self.rowsCollection.getVisibleItems();\n\n for (var i in visibleItems) {\n visibleItems[i].change(what, value);\n }\n });\n\n // Files selectors\n var filesList = $('input.wphb-minification-file-selector');\n filesList.click(function () {\n var $this = $(this);\n var element = self.rowsCollection.getItemById($this.data('type'), $this.data('handle'));\n if (!element) {\n return;\n }\n\n if ($this.is(':checked')) {\n element.select();\n } else {\n element.unSelect();\n }\n });\n\n var selectAll = $('#minification-bulk-file');\n selectAll.click(function () {\n var $this = $(this);\n var items = self.rowsCollection.getItems();\n for (var i in items) {\n if (items.hasOwnProperty(i)) {\n if ($this.is(':checked')) {\n items[i].select();\n } else {\n items[i].unSelect();\n }\n }\n }\n });\n\n // Include/exclude file checkbox\n $('.toggle-cross').on('click', function () {\n var $this = $(this);\n var checkbox = $this.find('input.toggle-include');\n var row = self.rowsCollection.getItemById($this.data('type'), $this.data('handle'));\n // Mark the item as include or not in the rows list\n if (row) {\n row.change('include', !checkbox.prop('checked'));\n row.getElement().find('input:not(.toggle-include)').prop('disabled', !checkbox.prop('checked'));\n }\n });\n\n // Handle two CDN checkboxes on Minification page\n var checkboxes = $(\"input[type=checkbox][name=use_cdn]\");\n checkboxes.change(function () {\n var checkedState = $(this).prop('checked');\n\n checkboxes.each(function () {\n this.checked = checkedState;\n });\n });\n\n /* Show details of minification row on mobile devices */\n $('body').on('click', '.wphb-minification-file-details', function () {\n if (window.innerWidth < 783) {\n $(this).parent().find('.wphb-minification-row-details').toggle('slow');\n }\n });\n\n /*\n Catch window resize and revert styles for responsive divs\n 1/4 of a second should be enough to trigger during device rotations (from portrait to landscape mode)\n */\n var minification_resize_rows = _.debounce(function () {\n\n if (window.innerWidth >= 783) {\n $('.wphb-minification-row-details').css('display', 'flex');\n } else {\n $('.wphb-minification-row-details').css('display', 'none');\n }\n }, 250);\n\n window.addEventListener('resize', minification_resize_rows);\n\n return this;\n },\n\n updateProgressBar: function updateProgressBar(progress) {\n var cancel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (progress > 100) {\n progress = 100;\n }\n // Update progress bar\n $('.wphb-scan-progress .wphb-scan-progress-text span').text(progress + '%');\n $('.wphb-scan-progress .wphb-scan-progress-bar span').width(progress + '%');\n if (progress >= 90) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Finalizing...');\n }\n if (cancel) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Cancelling...');\n }\n }\n\n }; // End WPHB_Admin.minification\n\n WPHB_Admin.minification.Row = _Row2.default;\n WPHB_Admin.minification.RowsCollection = _RowsCollection2.default;\n})(jQuery);\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n WPHB_Admin.performance = {\n\n module: 'performance',\n iteration: 0,\n progress: 0,\n\n init: function init() {\n\n var self = this;\n var body = $('body');\n\n if (wphbPerformanceStrings) this.strings = wphbPerformanceStrings;\n\n this.$runTestButton = $('#run-performance-test');\n\n var performanceReportTable = $(\".performance-report-table\");\n\n performanceReportTable.off('click', 'button');\n performanceReportTable.on('click', '.wphb-performance-report-item-cta .additional-content-opener' && 'tr.wphb-performance-report-item', function (e) {\n e.preventDefault();\n\n var getParentPerformanceItem = $(this).closest(\".wphb-performance-report-item\"),\n getNextAdditionalContentRow = getParentPerformanceItem.nextUntil(\".wphb-performance-report-item\");\n\n getNextAdditionalContentRow.toggleClass(\"wphb-performance-report-item-additional-content-opened\");\n\n if (getNextAdditionalContentRow.hasClass(\"wphb-performance-report-item-additional-content-opened\")) {\n getParentPerformanceItem.addClass(\"wphb-performance-report-item-opened\");\n } else {\n getParentPerformanceItem.removeClass(\"wphb-performance-report-item-opened\");\n }\n });\n\n if (this.$runTestButton.length) {\n this.$runTestButton.click(function (e) {\n e.preventDefault();\n window.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n $(this).attr('disabled', true);\n self.performanceTest(self.strings.finishedTestURLsLink);\n });\n }\n\n // If a hash is present in URL, let's open the rule extra content\n var hash = window.location.hash;\n if (hash) {\n var row = $(hash);\n if (row.length) {\n row.find('.trigger-additional-content').trigger('click');\n }\n }\n\n // Schedule show/hide day of week\n $('select[name=\"email-frequency\"]').change(function () {\n if ('1' === $(this).val()) {\n $(this).closest('.schedule-box').find('div.days-container').hide();\n } else {\n $(this).closest('.schedule-box').find('div.days-container').show();\n }\n }).change();\n\n // Remove recipient\n body.on('click', '.wphb-remove-recipient', function (e) {\n e.preventDefault();\n $(this).closest('.recipient').remove();\n $('.scan-settings').find(\"input[id='scan_recipient'][value=\" + $(this).attr('data-id') + \"]\").remove();\n });\n\n // Add recipient\n $('#add-receipt').click(function () {\n var email = $(\"#wphb-username-search\").val();\n var name = $(\"#wphb-first-name\").val();\n _fetcher2.default.performance.addRecipient(email, name).then(function (response) {\n var user_row = $('<div class=\"recipient\"/>');\n\n var img = $('<img/>').attr({\n 'src': response.avatar,\n 'width': '30'\n });\n var name = $('<span/>').html(response.name);\n\n user_row.append('<span class=\"name\"/>');\n user_row.find('.name').append(img, name);\n\n user_row.append($('<span class=\"email\"/>').html(email));\n user_row.append($('<a/>').attr({\n 'data-id': response.user_id,\n 'class': 'remove float-r wphb-remove-recipient',\n 'href': '#',\n 'alt': self.strings.removeButtonText\n }).html('<i class=\"dev-icon dev-icon-cross\"></i>'));\n\n $('<input>').attr({\n type: 'hidden',\n id: 'scan_recipient',\n name: 'email-recipients[]',\n value: JSON.stringify({ email: response.email, name: response.name })\n }).appendTo(user_row);\n\n $('.receipt .recipients').append(user_row);\n $(\"#wphb-username-search\").val('');\n $(\"#wphb-first-name\").val('');\n }).catch(function (error) {\n alert(error.message);\n });\n return false;\n });\n\n // Save report settings\n body.on('submit', '.scan-frm', function (e) {\n e.preventDefault();\n var form_data = $(this).serialize();\n var that = $(this);\n\n that.find('.button').attr('disabled', 'disabled');\n\n _fetcher2.default.performance.saveReportsSettings(form_data).then(function () {\n that.find('.button').removeAttr('disabled');\n self.showUpdateMessage();\n });\n return false;\n });\n\n return this;\n },\n\n showUpdateMessage: function showUpdateMessage() {\n var notice = $('#wphb-notice-performance-report-settings-updated');\n window.scrollTo(0, 0);\n notice.slideDown();\n setTimeout(function () {\n notice.slideUp();\n }, 5000);\n },\n\n performanceTest: function performanceTest(redirect) {\n var self = this;\n\n if (typeof redirect === 'undefined') redirect = false;\n\n // Update progress bar\n self.updateProgressBar();\n\n _fetcher2.default.performance.runTest().then(function (response) {\n if (!response.finished) {\n // Try again 5 seconds later\n window.setTimeout(function () {\n self.performanceTest(redirect);\n }, 5000);\n } else if (redirect) {\n window.location = redirect;\n }\n });\n },\n\n updateProgressBar: function updateProgressBar() {\n if (this.progress < 90) {\n this.progress += 35;\n }\n if (this.progress > 100) {\n this.progress = 90;\n }\n $('.wphb-scan-progress .wphb-scan-progress-text span').text(this.progress + '%');\n $('.wphb-scan-progress .wphb-scan-progress-bar span').attr('style', 'width:' + this.progress + '%');\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n(function ($) {\n WPHB_Admin.uptime = {\n module: 'uptime',\n $dataRangeSelector: null,\n chartData: null,\n timer: null,\n $spinner: null,\n init: function init() {\n this.$spinner = $('.spinner');\n this.strings = wphbUptimeStrings;\n this.$dataRangeSelector = $('#wphb-uptime-data-range');\n this.chartData = $('#uptime-chart-json').val();\n this.$disableUptime = $('#wphb-disable-uptime');\n\n this.$dataRangeSelector.change(function () {\n window.location.href = $(this).find(':selected').data('url');\n });\n\n var self = this;\n this.$disableUptime.change(function () {\n self.$spinner.css('visibility', 'visible');\n var value = $(this).is(':checked');\n if (value && self.timer) {\n clearTimeout(self.timer);\n self.$spinner.css('visibility', 'hidden');\n } else {\n // you have 3 seconds to change your mind\n self.timer = setTimeout(function () {\n location.href = self.strings.disableUptimeURL;\n }, 3000);\n }\n\n return;\n });\n\n this.drawChart();\n\n /* Re-check Uptime status */\n $('#uptime-re-check-status').on('click', function (e) {\n e.preventDefault();\n location.reload();\n });\n },\n\n drawChart: function drawChart() {\n var data = new google.visualization.DataTable();\n data.addColumn('datetime', 'Day');\n data.addColumn('number', 'Response Time (ms)');\n\n var chart_array = JSON.parse(this.chartData);\n for (var i = 0; i < chart_array.length; i++) {\n chart_array[i][0] = new Date(chart_array[i][0]);\n chart_array[i][1] = Math.round(chart_array[i][1]);\n\n /* brings the graph below the x axis */\n if (Math.round(chart_array[i][1]) == 0) {\n chart_array[i][1] = -100;\n }\n }\n\n data.addRows(chart_array);\n\n var options = {\n chartArea: {\n left: 80,\n top: 20,\n width: '90%',\n height: '90%'\n },\n colors: ['#24ADE5'],\n curveType: 'function',\n /*interpolateNulls: true,*/\n legend: { position: 'none' },\n vAxis: {\n format: '#,### ms',\n viewWindow: { min: 0 /* don't display negative values */\n } },\n tooltip: { isHtml: true },\n series: {\n 0: { axis: 'Resp' }\n },\n axes: {\n y: {\n Resp: { label: 'Response Time (ms)' }\n }\n }\n };\n\n var chart = new google.visualization.LineChart(document.getElementById('uptime-chart'));\n chart.draw(data, options);\n\n $(window).resize(function () {\n chart.draw(data, options);\n });\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(25);\n__webpack_require__(27);\n__webpack_require__(24);\n__webpack_require__(20);\n__webpack_require__(26);\n__webpack_require__(23);\n__webpack_require__(22);\n__webpack_require__(28);\n__webpack_require__(21);\n__webpack_require__(19);\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar Row = function Row(_element, _filter, _filter_sec) {\n var $el = _element,\n filter = _filter.toLowerCase(),\n filterSecondary = false,\n selected = false,\n visible = true;\n\n var $include = $el.find('.toggle-include'),\n $combine = $el.find('.toggle-combine'),\n $minify = $el.find('.toggle-minify'),\n $posFooter = $el.find('.toggle-position-footer'),\n $defer = $el.find('.toggle-defer'),\n $disableIcon = $el.find('.toggle-cross > i');\n\n if (_filter_sec) {\n filterSecondary = _filter_sec.toLowerCase();\n }\n\n return {\n hide: function hide() {\n $el.addClass('out-of-filter');\n visible = false;\n },\n\n show: function show() {\n $el.removeClass('out-of-filter');\n visible = true;\n },\n\n getElement: function getElement() {\n return $el;\n },\n\n getId: function getId() {\n return $el.attr('id');\n },\n\n getFilter: function getFilter() {\n return filter;\n },\n\n matchFilter: function matchFilter(text) {\n if (text === '') {\n return true;\n }\n\n text = text.toLowerCase();\n return filter.search(text) > -1;\n },\n\n matchSecondaryFilter: function matchSecondaryFilter(text) {\n if (text === '') {\n return true;\n }\n\n if (!filterSecondary) {\n return false;\n }\n\n text = text.toLowerCase();\n return filterSecondary === text;\n },\n\n isVisible: function isVisible() {\n return visible;\n },\n\n isSelected: function isSelected() {\n return selected;\n },\n\n select: function select() {\n selected = true;\n },\n\n unSelect: function unSelect() {\n selected = false;\n },\n\n change: function change(what, value) {\n switch (what) {\n case 'minify':\n {\n $minify.prop('checked', value);\n break;\n }\n case 'combine':\n {\n $combine.prop('checked', value);\n break;\n }\n case 'defer':\n {\n $defer.prop('checked', value);\n break;\n }\n case 'include':\n {\n $disableIcon.removeClass();\n $include.prop('checked', value);\n if (value) {\n $el.removeClass('disabled');\n $disableIcon.addClass('dev-icon dev-icon-cross');\n $include.attr('checked', true);\n } else {\n $el.addClass('disabled');\n $disableIcon.addClass('wdv-icon wdv-icon-refresh');\n $include.removeAttr('checked');\n }\n break;\n }\n case 'footer':\n {\n $posFooter.prop('checked', value);\n break;\n }\n }\n }\n\n };\n};\n\nexports.default = Row;\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar RowsCollection = function RowsCollection() {\n var items = [];\n var currentFilter = '';\n var currentSecondaryFilter = '';\n\n return {\n push: function push(row) {\n if ((typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') {\n items.push(row);\n }\n },\n\n getItems: function getItems() {\n return items;\n },\n\n getItem: function getItem(i) {\n if (items[i]) {\n return items[i];\n }\n return false;\n },\n\n /**\n * Get a collection item by type and ID\n * @param type\n * @param id\n */\n getItemById: function getItemById(type, id) {\n var value = false;\n for (var i in items) {\n if ('wphb-file-' + type + '-' + id === items[i].getId()) {\n value = items[i];\n break;\n }\n }\n return value;\n },\n\n getVisibleItems: function getVisibleItems() {\n var visible = [];\n for (var i in items) {\n if (items[i].isVisible()) {\n visible.push(items[i]);\n }\n }\n return visible;\n },\n\n getSelectedItems: function getSelectedItems() {\n var selected = [];\n\n for (var i in items) {\n if (items[i].isVisible() && items[i].isSelected()) {\n selected.push(items[i]);\n }\n }\n\n return selected;\n },\n\n addFilter: function addFilter(filter, type) {\n if (type === 'secondary') {\n currentSecondaryFilter = filter;\n } else {\n currentFilter = filter;\n }\n },\n\n applyFilters: function applyFilters() {\n for (var i in items) {\n if (items[i]) {\n if (items[i].matchFilter(currentFilter) && items[i].matchSecondaryFilter(currentSecondaryFilter)) {\n items[i].show();\n } else {\n items[i].hide();\n }\n }\n }\n }\n };\n};\n\nexports.default = RowsCollection;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MinificationScanner = function MinificationScanner(totalSteps, currentStep) {\n\n totalSteps = parseInt(totalSteps);\n currentStep = parseInt(currentStep);\n var cancelling = false;\n\n var obj = {\n scan: function scan() {\n var remainingSteps = totalSteps - currentStep;\n if (currentStep !== 0) {\n // Scan started on a previous pageload\n step(remainingSteps);\n } else {\n _fetcher2.default.minification.startCheck().then(function () {\n step(remainingSteps);\n });\n }\n },\n cancel: function cancel() {\n cancelling = true;\n return _fetcher2.default.minification.cancelScan();\n },\n getProgress: function getProgress() {\n if (cancelling) {\n return 0;\n }\n var remainingSteps = totalSteps - currentStep;\n return Math.min(Math.round(parseInt(totalSteps - remainingSteps) * 100 / totalSteps), 99);\n },\n // Overridable functions\n onFinishStep: function onFinishStep(progress) {},\n onFinish: function onFinish(response) {}\n };\n\n /**\n * Execute a scan step recursively\n *\n * Private to avoid overrdings\n *\n * @param remainingSteps\n */\n var step = function step(remainingSteps) {\n if (remainingSteps >= 0) {\n currentStep = totalSteps - remainingSteps;\n _fetcher2.default.minification.checkStep(currentStep).then(function () {\n remainingSteps = remainingSteps - 1;\n obj.onFinishStep(obj.getProgress());\n step(remainingSteps);\n });\n } else {\n _fetcher2.default.minification.finishCheck().then(obj.onFinish);\n }\n };\n\n return obj;\n};\n\nexports.default = MinificationScanner;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;\n\nvar _typeof2 = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function (f) {\n if (( false ? \"undefined\" : _typeof2(exports)) === \"object\" && typeof module !== \"undefined\") {\n module.exports = f();\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (f),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {\n var g;if (typeof window !== \"undefined\") {\n g = window;\n } else if (typeof global !== \"undefined\") {\n g = global;\n } else if (typeof self !== \"undefined\") {\n g = self;\n } else {\n g = this;\n }g.Clipboard = f();\n }\n})(function () {\n var define, module, exports;return function e(t, n, r) {\n function s(o, u) {\n if (!n[o]) {\n if (!t[o]) {\n var a = typeof require == \"function\" && require;if (!u && a) return require(o, !0);if (i) return i(o, !0);var f = new Error(\"Cannot find module '\" + o + \"'\");throw f.code = \"MODULE_NOT_FOUND\", f;\n }var l = n[o] = { exports: {} };t[o][0].call(l.exports, function (e) {\n var n = t[o][1][e];return s(n ? n : e);\n }, l, l.exports, e, t, n, r);\n }return n[o].exports;\n }var i = typeof require == \"function\" && require;for (var o = 0; o < r.length; o++) {\n s(r[o]);\n }return s;\n }({ 1: [function (require, module, exports) {\n var DOCUMENT_NODE_TYPE = 9;\n\n /**\n * A polyfill for Element.matches()\n */\n if (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;\n }\n\n /**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\n function closest(element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' && element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n }\n\n module.exports = closest;\n }, {}], 2: [function (require, module, exports) {\n var closest = require('./closest');\n\n /**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\n function delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function destroy() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n };\n }\n\n /**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\n function listener(element, selector, type, callback) {\n return function (e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n };\n }\n\n module.exports = delegate;\n }, { \"./closest\": 1 }], 3: [function (require, module, exports) {\n /**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.node = function (value) {\n return value !== undefined && value instanceof HTMLElement && value.nodeType === 1;\n };\n\n /**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.nodeList = function (value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined && (type === '[object NodeList]' || type === '[object HTMLCollection]') && 'length' in value && (value.length === 0 || exports.node(value[0]));\n };\n\n /**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.string = function (value) {\n return typeof value === 'string' || value instanceof String;\n };\n\n /**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.fn = function (value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n };\n }, {}], 4: [function (require, module, exports) {\n var is = require('./is');\n var delegate = require('delegate');\n\n /**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n } else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n } else if (is.string(target)) {\n return listenSelector(target, type, callback);\n } else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n }\n\n /**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function destroy() {\n node.removeEventListener(type, callback);\n }\n };\n }\n\n /**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function (node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function destroy() {\n Array.prototype.forEach.call(nodeList, function (node) {\n node.removeEventListener(type, callback);\n });\n }\n };\n }\n\n /**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n }\n\n module.exports = listen;\n }, { \"./is\": 3, \"delegate\": 2 }], 5: [function (require, module, exports) {\n function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n } else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n }\n\n module.exports = select;\n }, {}], 6: [function (require, module, exports) {\n function E() {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n }\n\n E.prototype = {\n on: function on(name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function once(name, callback, ctx) {\n var self = this;\n function listener() {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback;\n return this.on(name, listener, ctx);\n },\n\n emit: function emit(name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function off(name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n liveEvents.length ? e[name] = liveEvents : delete e[name];\n\n return this;\n }\n };\n\n module.exports = E;\n }, {}], 7: [function (require, module, exports) {\n (function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n })(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n });\n }, { \"select\": 5 }], 8: [function (require, module, exports) {\n (function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n })(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : _typeof2(superClass)));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n });\n }, { \"./clipboard-action\": 7, \"good-listener\": 4, \"tiny-emitter\": 6 }] }, {}, [8])(8);\n});\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Strings internationalization\n *\n * @param str\n *\n * @returns {*|string}\n */\nvar __ = exports.__ = function __(str) {\n return wphb.strings[str] || '';\n};\n\n/**\n * Get a link to a HB screen\n *\n * @param {string} screen Screen slug\n * @returns {string}\n */\nvar getLink = exports.getLink = function getLink(screen) {\n return wphb.links[screen] || '';\n};\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process, global) {var require;/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 4.1.1\n */\n\n(function (global, factory) {\n\t true ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = __webpack_require__(71);\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && \"function\" === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator$1(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nEnumerator$1.prototype._enumerate = function (input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n};\n\nEnumerator$1.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$2) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n};\n\nEnumerator$1.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator$1.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all$1(entries) {\n return new Enumerator$1(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race$1(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise$2(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise$2.all = all$1;\nPromise$2.race = race$1;\nPromise$2.resolve = resolve$1;\nPromise$2.reject = reject$1;\nPromise$2._setScheduler = setScheduler;\nPromise$2._setAsap = setAsap;\nPromise$2._asap = asap;\n\nPromise$2.prototype = {\n constructor: Promise$2,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\n/*global self*/\nfunction polyfill$1() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$2;\n}\n\n// Strange compat..\nPromise$2.polyfill = polyfill$1;\nPromise$2.Promise = Promise$2;\n\nreturn Promise$2;\n\n})));\n\n//# sourceMappingURL=es6-promise.map\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(70), __webpack_require__(17)))\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseTimes = __webpack_require__(44),\n isArguments = __webpack_require__(64),\n isArray = __webpack_require__(65),\n isBuffer = __webpack_require__(66),\n isIndex = __webpack_require__(11),\n isTypedArray = __webpack_require__(67);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isObjectLike = __webpack_require__(5);\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(15),\n isMasked = __webpack_require__(53),\n isObject = __webpack_require__(4),\n toSource = __webpack_require__(61);\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isLength = __webpack_require__(16),\n isObjectLike = __webpack_require__(5);\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isPrototype = __webpack_require__(12),\n nativeKeys = __webpack_require__(54);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar identity = __webpack_require__(14),\n overRest = __webpack_require__(58),\n setToString = __webpack_require__(59);\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar constant = __webpack_require__(63),\n defineProperty = __webpack_require__(9),\n identity = __webpack_require__(14);\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports) {\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(7),\n baseAssignValue = __webpack_require__(8);\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar root = __webpack_require__(2);\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseRest = __webpack_require__(42),\n isIterateeCall = __webpack_require__(52);\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsNative = __webpack_require__(39),\n getValue = __webpack_require__(51);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Symbol = __webpack_require__(6);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar eq = __webpack_require__(13),\n isArrayLike = __webpack_require__(3),\n isIndex = __webpack_require__(11),\n isObject = __webpack_require__(4);\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar coreJsData = __webpack_require__(47);\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar overArg = __webpack_require__(57);\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(10);\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)(module)))\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports) {\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports) {\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar apply = __webpack_require__(36);\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseSetToString = __webpack_require__(43),\n shortOut = __webpack_require__(60);\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports) {\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(7),\n copyObject = __webpack_require__(46),\n createAssigner = __webpack_require__(48),\n isArrayLike = __webpack_require__(3),\n isPrototype = __webpack_require__(12),\n keys = __webpack_require__(68);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports) {\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsArguments = __webpack_require__(38),\n isObjectLike = __webpack_require__(5);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports) {\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(2),\n stubFalse = __webpack_require__(69);\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)(module)))\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsTypedArray = __webpack_require__(40),\n baseUnary = __webpack_require__(45),\n nodeUtil = __webpack_require__(55);\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeKeys = __webpack_require__(37),\n baseKeys = __webpack_require__(41),\n isArrayLike = __webpack_require__(3);\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports) {\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// admin.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 29);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 8c288d1698b31a5166bb","import assign from 'lodash/assign';\n\nfunction Fetcher() {\n let fetchUrl = ajaxurl;\n let fetchNonce = wphb.nonces.HBFetchNonce;\n const actionPrefix = 'wphb_';\n const actionPrefixPro = 'wphb_pro_';\n\n function request( action, data = {}, method = 'GET' ) {\n data.nonce = fetchNonce;\n data.action = action;\n let args = { data, method };\n args.url = fetchUrl;\n let Promise = require('es6-promise').Promise;\n return new Promise( ( resolve, reject ) => {\n jQuery.ajax( args ).done( resolve ).fail( reject );\n })\n .then( ( response ) => checkStatus( response ) );\n\n }\n\n const methods = {\n /**\n * Caching module actions.\n */\n caching: {\n /**\n * Set expiration for browser caching.\n *\n * @param type File type.\n * @param value Expiry value.\n */\n setExpiration: ( type, value ) => {\n const action = actionPrefix + 'caching_set_expiration';\n return request( action, { type, value }, 'POST' );\n },\n\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: ( value ) => {\n const action = actionPrefix + 'caching_set_server_type';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: ( type ) => {\n const action = actionPrefix + 'caching_reload_snippet';\n return request( action, { type }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n\t\t\t/**\n\t\t\t * Connect to CloudFlare.\n\t\t\t *\n\t\t\t * @param step\n\t\t\t * @param formData\n\t\t\t * @param cfData\n\t\t\t */\n\t\t\tconnect: ( step, formData, cfData ) => {\n\t\t\t\tconst action = actionPrefix + 'cloudflare_connect';\n return request( action, { step, formData, cfData }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Set expiry for CloudFlare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: ( value ) => {\n const action = actionPrefix + 'cloudflare_set_expiry';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Purge CloudFlare cache.\n\t\t\t */\n\t\t\tpurgeCache: () => {\n const action = actionPrefix + 'cloudflare_purge_cache';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'dash_toggle_network_minification';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Skip quick setup.\n\t\t\t */\n\t\t\tskipSetup: () => {\n const action = actionPrefix + 'dash_skip_setup';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: ( value ) => {\n const action = actionPrefix + 'minification_toggle_cdn';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'minification_toggle_minification';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: () => {\n const action = actionPrefix + 'minification_start_check';\n return request( action, {}, 'POST' );\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: ( step ) => {\n const action = actionPrefix + 'minification_check_step';\n return request( action, { step }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Finish minification process.\n */\n finishCheck: () => {\n const action = actionPrefix + 'minification_finish_scan';\n return request( action, {}, 'POST' );\n },\n\n\t\t\t/**\n * Cancel minification scan.\n\t\t\t */\n\t\t\tcancelScan: function cancelScan() {\n\t\t\t\tconst action = actionPrefix + 'minification_cancel_scan';\n\t\t\t\treturn request( action, {}, 'POST' );\n\t\t\t}\n },\n\n /**\n * Performance module actions.\n */\n performance: {\n\t\t\t/**\n * Run performance test.\n\t\t\t */\n\t\t\trunTest: () => {\n const action = actionPrefix + 'performance_run_test';\n return request( action, {}, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Add a single email/name recipient to the reports list.\n *\n * @param email\n * @param name\n */\n addRecipient: ( email, name ) => {\n const action = actionPrefixPro + 'performance_add_recipient';\n return request( action, { email, name }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Save reporting settings on minification page.\n *\n * @param data From data.\n */\n saveReportsSettings: ( data ) => {\n const action = actionPrefixPro + 'performance_save_reports_settings';\n return request( action, { data }, 'POST' );\n }\n }\n };\n\n assign( this, methods );\n}\n\nconst HBFetcher = new Fetcher();\nexport default HBFetcher;\n\nfunction checkStatus( response ) {\n if ( typeof response !== 'object' ) {\n response = JSON.parse( response );\n }\n if ( response.success ) {\n return response.data;\n }\n\n let data = response.data || {};\n const error = new Error( data.message || 'Error trying to fetch response from server' );\n error.response = response;\n throw error;\n}\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/utils/fetcher.js","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseGetTag.js\n// module id = 1\n// module chunks = 0","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_root.js\n// module id = 2\n// module chunks = 0","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArrayLike.js\n// module id = 3\n// module chunks = 0","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isObject.js\n// module id = 4\n// module chunks = 0","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isObjectLike.js\n// module id = 5\n// module chunks = 0","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Symbol.js\n// module id = 6\n// module chunks = 0","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_assignValue.js\n// module id = 7\n// module chunks = 0","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseAssignValue.js\n// module id = 8\n// module chunks = 0","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_defineProperty.js\n// module id = 9\n// module chunks = 0","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_freeGlobal.js\n// module id = 10\n// module chunks = 0","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isIndex.js\n// module id = 11\n// module chunks = 0","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isPrototype.js\n// module id = 12\n// module chunks = 0","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/eq.js\n// module id = 13\n// module chunks = 0","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/identity.js\n// module id = 14\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isFunction.js\n// module id = 15\n// module chunks = 0","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isLength.js\n// module id = 16\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 17\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 18\n// module chunks = 0","jQuery(document).ready( function() {\n WPHB_Admin.init();\n});\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-app.js","import Clipboard from './utils/clipboard';\nimport Fetcher from './utils/fetcher';\n\n( function( $ ) {\n 'use strict';\n WPHB_Admin.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $expirySelectors: [],\n $snippets: [],\n\n init: function () {\n let self = this,\n cachingMetabox = $('#wphb-box-caching-settings'),\n cachingContent = cachingMetabox.find('.settings-form'),\n cachingContentSpinner = cachingContent.find('.spinner'),\n cloudflareLink = $('#wphb-box-caching-settings #connect-cloudflare-link');\n\n\t\t\tnew Clipboard('.wphb-code-snippet .button');\n\n if ( wphbCachingStrings )\n self.strings = wphbCachingStrings;\n\n cloudflareLink.on('click', function(e) {\n e.preventDefault();\n\t\t\t\t$('#wphb-server-type').val('cloudflare').trigger('wpmu:change');\n\t\t\t\tself.hideCurrentInstructions();\n\t\t\t\tself.showServerInstructions('cloudflare');\n\t\t\t\tself.selectedServer = 'cloudflare';\n\t\t\t\t$('html, body').animate({ scrollTop: $('#cloudflare-steps').offset().top }, 'slow');\n });\n\n this.$serverSelector = $( '#wphb-server-type' );\n this.selectedServer = this.$serverSelector.val();\n //this.$spinner = $('#wphb-box-caching-enable .spinner');\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n\t\t\tself.$snippets.LiteSpeed = $('#wphb-code-snippet-litespeed').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n let instructionsList = $( '.wphb-server-instructions' );\n instructionsList.each( function() {\n self.$serverInstructions[ $(this).data('server') ] = $(this);\n });\n\n let expirySelectors = $( '.wphb-expiry-select' );\n\n expirySelectors.each( function() {\n const type = $(this).data('type');\n if ( type ) {\n $(this).change( function() {\n //self.$spinner.css( 'visibility', 'visible' );\n cachingContent.find('.wphb-content').hide();\n cachingContentSpinner.fadeIn();\n $('.wphb-notice').hide();\n\n // Expiration selector has changed\n ( function( element ) {\n const value = $( element ).val();\n // Change the plugin settings\n Fetcher.caching.setExpiration( type, value )\n .then( () => {\n // And reload the code snippet\n self.reloadSnippets();\n });\n return false;\n })( this );\n });\n }\n\n });\n\n this.showServerInstructions( this.selectedServer );\n\n this.$serverSelector.change( function() {\n let value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions( value );\n self.setServer(value);\n self.selectedServer = value;\n });\n\n $(\"input[name='expiry-set-type']\").on( 'click', function () {\n if ( 'expiry-all-types' === $(this).attr('id') ) {\n\t\t\t\t\t$('.settings-form').find( \"[data='expiry-single-type']\" ).hide();\n\t\t\t\t\t$('.settings-form').find( \"[data='expiry-all-types']\" ).show();\n } else if ( 'expiry-single-type' === $(this).attr('id') ) {\n\t\t\t\t\t$('.settings-form').find( \"[data='expiry-all-types']\" ).hide();\n\t\t\t\t\t$('.settings-form').find( \"[data='expiry-single-type']\" ).show();\n }\n\t\t\t});\n\n return this;\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n\n hideCurrentInstructions: function() {\n let selected = this.selectedServer;\n if ( this.$serverInstructions[ selected ] ) {\n this.$serverInstructions[ selected ].hide();\n }\n },\n\n showServerInstructions: function( server ) {\n if ( typeof this.$serverInstructions[ server ] !== 'undefined' ) {\n let serverTab = this.$serverInstructions[ server ];\n\t\t\t\tserverTab.show();\n // Show tab.\n\t\t\t\tserverTab.find('.tab:first-child > label').trigger('click');\n }\n\n if ( 'apache' === server || 'LiteSpeed' === server ) {\n $( '.enable-cache-wrap-' + server ).show();\n }\n else {\n $( '#enable-cache-wrap' ).hide();\n }\n },\n\n reloadSnippets: function() {\n let self = this;\n let stop = false;\n\n for ( let i in self.$snippets ) {\n if ( self.$snippets.hasOwnProperty( i ) ) {\n Fetcher.caching.reloadSnippets( i )\n .then( ( response ) => {\n if ( stop ) {\n return;\n }\n\n self.$snippets[response.type].text( response.code );\n\n // Make sure that we only do things when server displayed is the processed one\n if ( response.type !== self.selectedServer ) {\n return;\n }\n\n if ( 'apache' === response.type && response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ( 'apache' === response.type && self.strings.cacheEnabled && ! response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-error' ).show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $( '#wphb-notice-code-snippet-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n //self.$spinner.css( 'visibility', 'hidden' );\n });\n }\n }\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-caching.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.cloudflare = {\n module: 'cloudflare',\n $cfSelector: false,\n $spinner: false,\n\n init: function () {\n this.$spinner = $('.wphb-spinner');\n this.$cfSelector = $('#wphb-caching-cloudflare-summary-set-expiry');\n let self = this;\n if ( wphb.cloudflare.is.connected ) {\n this.$cfSelector.change( function() {\n self.setExpiry.call( self, [this] );\n } );\n }\n\n return this;\n },\n\n setExpiry: function( selector ) {\n this.displaySpinner();\n const value = $(selector).val();\n Fetcher.cloudflare.setExpiration( value )\n .then( () => {\n window.location.reload();\n });\n },\n\n displaySpinner: function() {\n this.$spinner.css( 'visibility', 'visible' );\n }\n };\n}( jQuery ) );\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-cloudflare.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.DashboardCloudFlare = {\n init: function( settings ) {\n this.currentStep = settings.currentStep;\n this.data = settings;\n this.email = settings.email;\n this.apiKey = settings.apiKey;\n this.$stepsContainer = $('#cloudflare-steps');\n this.$infoBox = $( '#cloudflare-info' );\n this.$spinner = $( '.cloudflare-spinner' );\n this.$deactivateButton = $('.cloudflare-deactivate.button');\n\n this.renderStep( this.currentStep );\n\n $('body').on( 'click', '.cloudflare-clear-cache.button', function(e ) {\n e.preventDefault();\n this.purgeCache.apply( $(e.target), [this] );\n }.bind(this));\n\n },\n\n purgeCache: function( self ) {\n // Show spinner\n\t\t\tconst $button = this;\n\t\t\t$button.attr( 'disabled', true );\n\t\t\tself.showSpinner();\n\n Fetcher.cloudflare.purgeCache()\n .then( () => {\n // Show notice\n\t\t\t\t\tconst $notice = $('#wphb-notice-cloudflare-purge-cache');\n\t\t\t\t\twindow.scrollTo(0, 0);\n\t\t\t\t\t$notice.slideDown();\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t$notice.slideUp();\n\t\t\t\t\t}, 5e3);\n // Remove spinner\n\t\t\t\t\t$button.removeAttr( 'disabled' );\n\t\t\t\t\tself.hideSpinner();\n });\n },\n\n renderStep: function( step ) {\n const template = WPHB_Admin.DashboardCloudFlare.template( '#cloudflare-step-' + step );\n const content = template( this.data );\n const self = this;\n\n if ( content ) {\n this.currentStep = step;\n this.$stepsContainer\n .hide()\n .html( template( this.data ) )\n .fadeIn()\n .find( 'form' )\n .on( 'submit', function( e ) {\n e.preventDefault();\n self.submitStep.call( self, $(this) );\n });\n\n this.$spinner = this.$stepsContainer.find( '.cloudflare-spinner' );\n }\n\n this.bindEvents();\n },\n\n bindEvents: function() {\n const $howToInstructions = $('#cloudflare-how-to');\n\n $howToInstructions.hide();\n\n $('#cloudflare-how-to-title > a').click( function( e ) {\n e.preventDefault();\n $howToInstructions.toggle();\n });\n\n this.$stepsContainer.find( 'select' ).each( function() {\n\t\t\t\twindow.WDP.wpmuSelect( this );\n });\n\n if ( 'final' === this.currentStep ) {\n this.$deactivateButton.removeClass( 'hidden' );\n } else {\n this.$deactivateButton.addClass( 'hidden' );\n }\n },\n\n emptyInfoBox: function() {\n this.$infoBox.html('');\n this.$infoBox.removeClass();\n },\n\n showInfoBox: function( message ) {\n this.$infoBox.addClass( 'wphb-notice' );\n this.$infoBox.addClass( 'wphb-notice-error' );\n this.$infoBox.html( message + '' );\n },\n\n showSpinner: function() {\n this.$spinner.css( 'visibility', 'visible' );\n },\n\n hideSpinner: function() {\n this.$spinner.css( 'visibility', 'hidden' );\n },\n\n submitStep: function( $form ) {\n\t\t\tconst self = this;\n\n\t\t\t$form.find( 'input[type=submit]' ).attr( 'disabled', 'true' );\n\t\t\tthis.emptyInfoBox();\n\t\t\tthis.showSpinner();\n\n\t\t\tFetcher.cloudflare.connect( this.currentStep, $form.serialize(), this.data )\n .then( ( response ) => {\n\t\t\t\t\tself.data = response.newData;\n\t\t\t\t\tself.renderStep( response.nextStep );\n\n\t\t\t\t\tif ( response.nextStep === 'final' ) {\n\t\t\t\t\t\twindow.location.href = response.redirect;\n\t\t\t\t\t}\n })\n\t\t\t\t.catch( ( error ) => {\n\t\t\t\t\tself.showInfoBox( error );\n\t\t\t\t});\n\n\t\t\t$form.find( 'input[type=submit]' ).removeAttr( 'disabled' );\n\t\t\tself.hideSpinner();\n }\n };\n\n WPHB_Admin.DashboardCloudFlare.template = _.memoize(function ( id ) {\n let compiled,\n options = {\n evaluate: /<#([\\s\\S]+?)#>/g,\n interpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n escape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n variable: 'data'\n };\n\n return function ( data ) {\n _.templateSettings = options;\n compiled = compiled || _.template( $( id ).html() );\n return compiled( data );\n };\n });\n}(jQuery));\n\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-dashboard-cloudflare.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.dashboard = {\n module: 'dashboard',\n\n init: function() {\n const self = this;\n\n\t\t\tif (wphbDashboardStrings)\n\t\t\t\tthis.strings = wphbDashboardStrings;\n\n $('#wphb-activate-minification').change( function() {\n const value = $(this).val();\n Fetcher.dashboard.toggleMinification( value )\n .then( () => {\n // If disabled, uncheck CDN checkbox and disable it.\n const CDNcheckbox = $('input[name=\"use_cdn\"]');\n if ( 'false' === value ) {\n CDNcheckbox.prop( 'checked', false );\n CDNcheckbox.prop( 'disabled', true );\n } else {\n CDNcheckbox.prop( 'disabled', false );\n }\n self.showNotice();\n });\n });\n\n $('#use_cdn').change( function() {\n const value = $(this).is(':checked');\n Fetcher.minification.toggleCDN( value )\n .then( () => {\n self.showNotice();\n });\n });\n\n $('.wphb-performance-report-item').click( function() {\n const url = $(this).data( 'performance-url' );\n if ( url ) {\n location.href = url;\n }\n });\n return this;\n },\n\n /**\n * Notice on settings update.\n */\n showNotice: function () {\n const notice = $('#wphb-notice-minification-settings-updated');\n notice.slideDown();\n setTimeout( function() {\n notice.slideUp();\n }, 5000 );\n },\n\n\t\t/**\n * Run quick setup.\n\t\t */\n\t\tstartQuickSetup: function () {\n // Show quick setup modal\n\t\t\twindow.WDP.showOverlay( '#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' } );\n },\n\n\t\t/**\n * Skip quick setup.\n\t\t */\n\t\tskipSetup: function () {\n Fetcher.dashboard.skipSetup()\n .then( () => {\n window.location.reload(true);\n });\n },\n\n\t\t/**\n * Run performance test after quick setup.\n\t\t */\n\t\trunPerformanceTest: function() {\n\t\t\t// Show quick setup modal\n\t\t\twindow.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n\n\t\t\t// Run performance test\n\t\t\tconst module = WPHB_Admin.getModule('performance');\n\t\t\tmodule.performanceTest( this.strings.finishedTestURLsLink );\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-dashboard.js","import Fetcher from './utils/fetcher';\n\n(function($) {\n WPHB_Admin.gzip = {\n module: \"gzip\",\n selectedServer: \"\",\n $serverSelector: null,\n $serverInstructions: [],\n\n init: function() {\n const self = this;\n\n this.$serverSelector = $(\"#wphb-server-type\");\n this.selectedServer = this.$serverSelector.val();\n let instructionsList = $(\".wphb-server-instructions\");\n instructionsList.each(function() {\n self.$serverInstructions[$(this).data(\"server\")] = $(this);\n });\n this.showServerInstructions(this.selectedServer);\n this.$serverSelector.change(function() {\n const value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n $(\"#toggle-apache-instructions\").click(function(e) {\n e.preventDefault();\n $(\".apache-instructions\").toggle();\n });\n $(\"#toggle-litespeed-instructions\").click(function(e) {\n e.preventDefault();\n $(\".litespeed-instructions\").toggle();\n });\n return this;\n },\n\n hideCurrentInstructions: function() {\n const selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function(server) {\n if (typeof this.$serverInstructions[server] !== \"undefined\") {\n this.$serverInstructions[server].show();\n }\n if (\"apache\" === server || 'LiteSpeed' === server) {\n $(\"#enable-cache-wrap\").show();\n } else {\n $(\"#enable-cache-wrap\").hide();\n }\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n };\n})(jQuery);\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-gzip.js","( function( $ ) {\n 'use strict';\n\n let WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function() {\n\n\t\t\t$('body').on('change', '.mobile-nav', function () {\n\t\t\t\tlet url = $(this).val();\n\t\t\t\tif (url.length > 0) {\n\t\t\t\t\tlocation.href = url;\n\t\t\t\t}\n\t\t\t});\n\n function updatePerformanceGraph($wrap){\n let $item = $wrap.find('.wphb-score-result-label'),\n val = parseInt($item.text(), 10) || 100,\n $circle = $wrap.find(\".wphb-score-graph-result\"),\n r, c, pct\n ;\n r = $circle.attr('r');\n c = Math.PI*(r*2);\n\n if (val < 0) { val = 0;}\n if (val > 100) { val = 100;}\n\n pct = ((100-val)/100)*c;\n\n $circle.css({ strokeDashoffset: pct});\n }\n\n function updatePerformanceResultsGraphs(){\n\n // Update Overall Score\n $(\".wphb-performance-report-overall-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n // Update Current Score\n $(\".wphb-performance-report-current-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n // Update All Scores\n $(\".wphb-performance-report-item-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n }\n window.register_events_performance = function(){\n setTimeout(updatePerformanceResultsGraphs, 500);\n };\n $(function(){ setTimeout(updatePerformanceResultsGraphs, 500); });\n\n },\n initModule: function( module ) {\n if ( this.hasOwnProperty( module ) ) {\n this.modules[ module ] = this[ module ].init();\n return this.modules[ module ];\n }\n\n return {};\n },\n getModule: function( module ) {\n if ( typeof this.modules[ module ] !== 'undefined' )\n return this.modules[ module ];\n else\n return this.initModule( module );\n }\n };\n \n\n WPHB_Admin.utils = {\n\n membershipModal: {\n open: function() {\n $( '#wphb-upgrade-membership-modal-link').trigger( 'click' );\n }\n },\n\n post: function( data, module ) {\n data.action = 'wphb_ajax';\n data.module = module;\n return $.ajax({\n url: ajaxurl,\n method: 'POST',\n data: data\n });\n }\n };\n\n WPHB_Admin.notices = {\n\n init: function() {\n $( '.wphb-notice:not(.notice) a.wphb-dismiss').click( function( e ) {\n e.preventDefault();\n let id = $(this).data( 'id' );\n let nonce = $(this).data( 'nonce' );\n\n $(this).parent( '.error' ).hide();\n });\n }\n };\n\n window.WPHB_Admin = WPHB_Admin;\n\n}( jQuery ) );\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-main.js","import Fetcher from './utils/fetcher';\nimport { __, getLink } from './utils/helpers';\nimport Row from './minification/Row';\nimport RowsCollection from './minification/RowsCollection';\nimport Scanner from './minification/Scanner';\n\n( function( $ ) {\n 'use strict';\n\n WPHB_Admin.minification = {\n\n $checkFilesButton: null,\n $checkFilesResultsContainer : null,\n module: 'minification',\n checkURLSList: null,\n checkedURLS: 0,\n $spinner: null,\n\n init: function() {\n const self = this;\n\n // Init files scanner\n this.scanner = new Scanner( wphb.minification.get.totalSteps, wphb.minification.get.currentScanStep );\n this.scanner.onFinishStep = this.updateProgressBar;\n this.scanner.onFinish = ( response ) => {\n this.updateProgressBar( 100 );\n if ( wphb.minification.get.showCDNModal && true === response.show_cdn && $('#enable-cdn-modal').length ) {\n window.WDP.showOverlay( '#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' } );\n } else {\n window.location.href = getLink( 'minification' );\n }\n };\n\n\n // Check files button\n this.$checkFilesButton = $( '#check-files' );\n this.$disableMinification = $('#wphb-disable-minification');\n this.$spinner = $('.spinner');\n\n if ( this.$checkFilesButton.length ) {\n this.$checkFilesButton.click( function( e ) {\n e.preventDefault();\n\t\t\t\t\twindow.WDP.showOverlay(\"#check-files-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n $(this).attr('disabled', true);\n self.updateProgressBar( self.scanner.getProgress() );\n self.scanner.scan();\n });\n }\n\n // Cancel scan button\n $('body').on( 'click', '#cancel-minification-check', ( e ) => {\n e.preventDefault();\n this.updateProgressBar( 0, true );\n this.scanner.cancel()\n .then( () => {\n window.location.href = getLink( 'minification' );\n });\n\n });\n\n // Filter action button on Minification page\n $('#wphb-minification-filter-button').on('click', function(e) {\n e.preventDefault();\n $('#wphb-minification-filter').toggle('slow');\n });\n\n $('.wphb-discard').click( function(e) {\n e.preventDefault();\n\n if ( confirm( __( 'discardAlert' ) ) ) {\n location.reload();\n }\n return false;\n\n });\n\n $( '.wphb-enqueued-files input' ).on( 'change', function() {\n $('.wphb-discard').attr( 'disabled', false );\n });\n\n $('#use_cdn').change( function() {\n const cdn_value = $(this).is(':checked');\n Fetcher.minification.toggleCDN( cdn_value )\n .then( () => {\n const notice = $('#wphb-notice-minification-advanced-settings-updated');\n notice.slideDown();\n setTimeout( function() {\n notice.slideUp();\n }, 5000 );\n });\n });\n\n this.$disableMinification.change( function() {\n const value = $(this).is(':checked');\n\n self.$spinner.css( 'visibility', 'visible' );\n\n if ( self.timer && value ) {\n clearTimeout( self.timer );\n self.$spinner.css( 'visibility', 'hidden' );\n }\n\n self.timer = setTimeout( function() {\n Fetcher.minification.toggleMinification( value )\n .then( () => {\n location.reload();\n });\n }, 3000 );\n\n\n });\n\n this.rowsCollection = new WPHB_Admin.minification.RowsCollection();\n\n const rows = $('.wphb-border-row');\n\n rows.each( function( index, row ) {\n let _row;\n if ( $(row).data('filter-secondary') ) {\n _row = new WPHB_Admin.minification.Row( $(row), $(row).data('filter'), $(row).data('filter-secondary') );\n }\n else {\n _row = new WPHB_Admin.minification.Row( $(row), $(row).data('filter') );\n }\n self.rowsCollection.push( _row );\n });\n\n $('#wphb-s').keyup( function() {\n self.rowsCollection.addFilter( $(this).val(), 'primary' );\n self.rowsCollection.applyFilters();\n });\n\n $('#wphb-secondary-filter').change( function() {\n self.rowsCollection.addFilter( $(this).val(), 'secondary' );\n self.rowsCollection.applyFilters();\n });\n\n $('.filter-toggles').change( function() {\n const element = $(this);\n const what = element.data('toggles');\n const value = element.prop( 'checked' );\n const visibleItems = self.rowsCollection.getVisibleItems();\n\n for ( let i in visibleItems ) {\n visibleItems[i].change( what, value );\n }\n });\n\n // Files selectors\n const filesList = $('input.wphb-minification-file-selector');\n filesList.click( function() {\n const $this = $( this );\n const element = self.rowsCollection.getItemById( $this.data( 'type' ), $this.data( 'handle' ) );\n if ( ! element ) {\n return;\n }\n\n if ( $this.is( ':checked' ) ) {\n element.select();\n }\n else {\n element.unSelect();\n }\n });\n\n const selectAll = $('#minification-bulk-file');\n selectAll.click( function() {\n const $this = $( this );\n let items = self.rowsCollection.getItems();\n for ( let i in items ) {\n if ( items.hasOwnProperty( i ) ) {\n if ( $this.is( ':checked' ) ) {\n items[i].select();\n }\n else {\n items[i].unSelect();\n }\n }\n }\n });\n\n // Include/exclude file checkbox\n $('.toggle-cross').on('click', function() {\n const $this = $(this);\n const checkbox = $this.find( 'input.toggle-include' );\n const row = self.rowsCollection.getItemById( $this.data( 'type' ), $this.data( 'handle' ) );\n // Mark the item as include or not in the rows list\n if ( row ) {\n row.change( 'include', ! checkbox.prop( 'checked' ) );\n row.getElement().find( 'input:not(.toggle-include)' ).prop('disabled', ! checkbox.prop( 'checked' ) );\n }\n });\n\n // Handle two CDN checkboxes on Minification page\n const checkboxes = $(\"input[type=checkbox][name=use_cdn]\");\n checkboxes.change( function() {\n const checkedState = $(this).prop('checked');\n\n checkboxes.each( function() {\n this.checked = checkedState;\n });\n });\n\n /* Show details of minification row on mobile devices */\n $('body').on('click', '.wphb-minification-file-details', function() {\n if ( window.innerWidth < 783 ) {\n $(this).parent().find('.wphb-minification-row-details').toggle('slow');\n }\n });\n\n /*\n Catch window resize and revert styles for responsive divs\n 1/4 of a second should be enough to trigger during device rotations (from portrait to landscape mode)\n */\n let minification_resize_rows = _.debounce(function() {\n\n if ( window.innerWidth >= 783 ) {\n $('.wphb-minification-row-details').css('display', 'flex');\n } else {\n $('.wphb-minification-row-details').css('display', 'none');\n }\n\n }, 250);\n\n window.addEventListener('resize', minification_resize_rows);\n\n return this;\n },\n\n updateProgressBar: function( progress, cancel = false ) {\n if ( progress > 100 ) {\n progress = 100;\n }\n // Update progress bar\n $('.wphb-scan-progress .wphb-scan-progress-text span').text( progress + '%' );\n $('.wphb-scan-progress .wphb-scan-progress-bar span').width( progress + '%' );\n if ( progress >= 90 ) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Finalizing...');\n }\n if ( cancel ) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Cancelling...');\n }\n },\n\n }; // End WPHB_Admin.minification\n\n WPHB_Admin.minification.Row = Row;\n WPHB_Admin.minification.RowsCollection = RowsCollection;\n\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-minification.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n 'use strict';\n WPHB_Admin.performance = {\n\n module: 'performance',\n iteration: 0,\n progress: 0,\n\n init: function () {\n\n let self = this;\n let body = $('body');\n\n if (wphbPerformanceStrings)\n this.strings = wphbPerformanceStrings;\n\n this.$runTestButton = $('#run-performance-test');\n\n let performanceReportTable = $(\".performance-report-table\");\n\n performanceReportTable.off('click', 'button');\n performanceReportTable.on('click', '.wphb-performance-report-item-cta .additional-content-opener' && 'tr.wphb-performance-report-item', function (e) {\n e.preventDefault();\n\n let getParentPerformanceItem = $(this).closest(\".wphb-performance-report-item\"),\n getNextAdditionalContentRow = getParentPerformanceItem.nextUntil(\".wphb-performance-report-item\");\n\n getNextAdditionalContentRow.toggleClass(\"wphb-performance-report-item-additional-content-opened\");\n\n if (getNextAdditionalContentRow.hasClass(\"wphb-performance-report-item-additional-content-opened\")) {\n getParentPerformanceItem.addClass(\"wphb-performance-report-item-opened\");\n } else {\n getParentPerformanceItem.removeClass(\"wphb-performance-report-item-opened\");\n }\n\n });\n\n if (this.$runTestButton.length) {\n this.$runTestButton.click(function (e) {\n e.preventDefault();\n\t\t\t\t\twindow.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n $(this).attr('disabled', true);\n self.performanceTest(self.strings.finishedTestURLsLink);\n });\n }\n\n // If a hash is present in URL, let's open the rule extra content\n const hash = window.location.hash;\n if (hash) {\n const row = $(hash);\n if (row.length) {\n row.find('.trigger-additional-content').trigger('click');\n }\n\n }\n\n // Schedule show/hide day of week\n $('select[name=\"email-frequency\"]').change(function () {\n if ( '1' === $(this).val() ) {\n $(this).closest('.schedule-box').find('div.days-container').hide();\n } else {\n $(this).closest('.schedule-box').find('div.days-container').show();\n }\n }).change();\n\n // Remove recipient\n body.on('click', '.wphb-remove-recipient', function (e) {\n e.preventDefault();\n $(this).closest('.recipient').remove();\n $('.scan-settings').find(\"input[id='scan_recipient'][value=\" + $(this).attr('data-id') + \"]\").remove();\n });\n\n // Add recipient\n $('#add-receipt').click(function () {\n const email = $(\"#wphb-username-search\").val();\n const name = $(\"#wphb-first-name\").val();\n Fetcher.performance.addRecipient( email, name )\n .then( ( response ) => {\n const user_row = $('<div class=\"recipient\"/>');\n\n const img = $('<img/>').attr({\n 'src': response.avatar,\n 'width': '30'\n });\n const name = $('<span/>').html(response.name);\n\n user_row.append('<span class=\"name\"/>');\n user_row.find('.name').append( img, name);\n\n\n user_row.append($('<span class=\"email\"/>').html(email));\n user_row.append($('<a/>').attr({\n 'data-id': response.user_id,\n 'class': 'remove float-r wphb-remove-recipient',\n 'href': '#',\n 'alt': self.strings.removeButtonText\n }).html('<i class=\"dev-icon dev-icon-cross\"></i>'));\n\n $('<input>').attr({\n type: 'hidden',\n id: 'scan_recipient',\n name: 'email-recipients[]',\n value: JSON.stringify( { email: response.email, name: response.name } )\n }).appendTo(user_row);\n\n $('.receipt .recipients').append(user_row);\n $(\"#wphb-username-search\").val('');\n $(\"#wphb-first-name\").val('');\n })\n .catch( ( error ) => {\n alert( error.message );\n } );\n return false;\n });\n\n // Save report settings\n body.on('submit', '.scan-frm', function (e) {\n e.preventDefault();\n const form_data = $(this).serialize();\n let that = $(this);\n\n that.find('.button').attr('disabled', 'disabled');\n\n Fetcher.performance.saveReportsSettings( form_data )\n .then( () => {\n that.find('.button').removeAttr('disabled');\n self.showUpdateMessage();\n });\n return false;\n });\n\n return this;\n\n },\n\n showUpdateMessage: function () {\n const notice = $('#wphb-notice-performance-report-settings-updated');\n window.scrollTo(0,0);\n notice.slideDown();\n setTimeout( function() {\n notice.slideUp();\n }, 5000 );\n },\n\n\t\tperformanceTest: function ( redirect ) {\n\t\t\tconst self = this;\n\n if ( typeof redirect === 'undefined' )\n redirect = false;\n\n // Update progress bar\n self.updateProgressBar();\n\n Fetcher.performance.runTest()\n .then( ( response ) => {\n\t\t\t\t\tif ( ! response.finished ) {\n\t\t\t\t\t\t// Try again 5 seconds later\n\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\tself.performanceTest( redirect );\n\t\t\t\t\t\t}, 5000);\n\t\t\t\t\t} else if ( redirect ) {\n window.location = redirect;\n\t\t\t\t\t}\n });\n },\n\n updateProgressBar: function() {\n\t\t\tif ( this.progress < 90 ) {\n\t\t\t\tthis.progress += 35;\n\t\t\t}\n\t\t\tif ( this.progress > 100 ) {\n\t\t\t\tthis.progress = 90;\n\t\t\t}\n\t\t\t$('.wphb-scan-progress .wphb-scan-progress-text span').text( this.progress + '%' );\n\t\t\t$('.wphb-scan-progress .wphb-scan-progress-bar span').attr( 'style', 'width:' + this.progress + '%' );\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-performance.js","( function( $ ) {\n WPHB_Admin.uptime = {\n module: 'uptime',\n $dataRangeSelector: null,\n chartData: null,\n timer:null,\n $spinner: null,\n init: function() {\n this.$spinner = $('.spinner');\n this.strings = wphbUptimeStrings;\n this.$dataRangeSelector = $( '#wphb-uptime-data-range' );\n this.chartData = $('#uptime-chart-json').val();\n this.$disableUptime = $('#wphb-disable-uptime');\n\n this.$dataRangeSelector.change( function() {\n window.location.href = $(this).find( ':selected' ).data( 'url' );\n });\n\n var self = this;\n this.$disableUptime.change( function() {\n self.$spinner.css( 'visibility', 'visible' );\n var value = $(this).is(':checked');\n if ( value && self.timer ) {\n clearTimeout( self.timer );\n self.$spinner.css( 'visibility', 'hidden' );\n }\n else {\n // you have 3 seconds to change your mind\n self.timer = setTimeout( function() {\n location.href = self.strings.disableUptimeURL;\n }, 3000 );\n }\n\n return;\n });\n\n this.drawChart();\n\n /* Re-check Uptime status */\n $('#uptime-re-check-status').on( 'click', function(e){\n e.preventDefault();\n location.reload();\n });\n },\n\n drawChart: function() {\n var data = new google.visualization.DataTable();\n data.addColumn('datetime', 'Day');\n data.addColumn('number', 'Response Time (ms)');\n\n var chart_array = JSON.parse( this.chartData );\n for (var i = 0; i < chart_array.length; i++) {\n chart_array[i][0] = new Date( chart_array[i][0] );\n chart_array[i][1] = Math.round( chart_array[i][1] );\n\n /* brings the graph below the x axis */\n if ( Math.round( chart_array[i][1] ) == 0 ) {\n chart_array[i][1] = -100;\n }\n\n }\n\n data.addRows(chart_array);\n\n var options = {\n chartArea: {\n left: 80,\n top: 20,\n width: '90%',\n height: '90%'\n },\n colors: ['#24ADE5'],\n curveType: 'function',\n /*interpolateNulls: true,*/\n legend: { position: 'none' },\n vAxis: {\n format: '#,### ms',\n viewWindow: { min: 0 } /* don't display negative values */\n },\n tooltip: { isHtml: true },\n series: {\n 0: { axis: 'Resp' }\n },\n axes: {\n y: {\n Resp: { label: 'Response Time (ms)' }\n }\n }\n };\n\n var chart = new google.visualization.LineChart(document.getElementById('uptime-chart'));\n chart.draw(data, options);\n\n $(window).resize(function(){\n chart.draw(data, options);\n });\n }\n };\n}(jQuery));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-uptime.js","require('./admin-main.js');\nrequire('./admin-performance.js');\nrequire('./admin-gzip.js');\nrequire('./admin-caching.js');\nrequire('./admin-minification.js');\nrequire('./admin-dashboard.js');\nrequire('./admin-dashboard-cloudflare.js');\nrequire('./admin-uptime.js');\nrequire('./admin-cloudflare.js');\nrequire('./admin-app.js');\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/index.js","const Row = ( _element, _filter, _filter_sec ) => {\n let $el = _element,\n filter = _filter.toLowerCase(),\n filterSecondary = false,\n selected = false,\n visible = true;\n\n const $include = $el.find( '.toggle-include' ),\n $combine = $el.find( '.toggle-combine' ),\n $minify = $el.find( '.toggle-minify' ),\n $posFooter = $el.find( '.toggle-position-footer' ),\n $defer = $el.find( '.toggle-defer' ),\n $disableIcon = $el.find( '.toggle-cross > i' );\n\n if ( _filter_sec ) {\n filterSecondary = _filter_sec.toLowerCase();\n }\n\n return {\n hide: function() {\n $el.addClass( 'out-of-filter' );\n visible = false;\n },\n\n show: function() {\n $el.removeClass( 'out-of-filter' );\n visible = true;\n },\n\n getElement: function() {\n return $el;\n },\n\n getId: function() {\n return $el.attr( 'id' );\n },\n\n getFilter: function() {\n return filter;\n },\n\n matchFilter: function( text ) {\n if ( text === '' ) {\n return true;\n }\n\n text = text.toLowerCase();\n return filter.search( text ) > - 1;\n },\n\n matchSecondaryFilter: function( text ) {\n if ( text === '' ) {\n return true;\n }\n\n if ( ! filterSecondary ) {\n return false;\n }\n\n text = text.toLowerCase();\n return filterSecondary === text;\n },\n\n isVisible: function() {\n return visible;\n },\n\n isSelected: function() {\n return selected;\n },\n\n select: function() {\n selected = true;\n },\n\n unSelect: function() {\n selected = false;\n },\n\n change: function( what, value ) {\n switch ( what ) {\n case 'minify': {\n $minify.prop( 'checked', value );\n break;\n }\n case 'combine': {\n $combine.prop( 'checked', value );\n break;\n }\n case 'defer': {\n $defer.prop( 'checked', value );\n break;\n }\n case 'include': {\n $disableIcon.removeClass();\n $include.prop( 'checked', value );\n if ( value ) {\n $el.removeClass( 'disabled' );\n $disableIcon.addClass( 'dev-icon dev-icon-cross' );\n $include.attr( 'checked', true );\n } else {\n $el.addClass( 'disabled' );\n $disableIcon.addClass( 'wdv-icon wdv-icon-refresh' );\n $include.removeAttr( 'checked' );\n }\n break;\n }\n case 'footer': {\n $posFooter.prop( 'checked', value );\n break;\n }\n }\n }\n\n };\n};\n\nexport default Row;\n\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/minification/Row.js","const RowsCollection = () => {\n let items = [];\n let currentFilter = '';\n let currentSecondaryFilter = '';\n\n return {\n push: function( row ) {\n if ( typeof row === 'object' ) {\n items.push( row );\n }\n },\n\n getItems: function() {\n return items;\n },\n\n getItem: function( i ) {\n if ( items[i] ) {\n return items[i];\n }\n return false;\n },\n\n /**\n * Get a collection item by type and ID\n * @param type\n * @param id\n */\n getItemById: function( type, id ) {\n let value = false;\n for ( let i in items ) {\n if ( 'wphb-file-' + type + '-' + id === items[i].getId() ) {\n value = items[i];\n break;\n }\n }\n return value;\n },\n\n getVisibleItems: function() {\n let visible = [];\n for ( let i in items ) {\n if ( items[i].isVisible() ) {\n visible.push( items[i] );\n }\n }\n return visible;\n },\n\n getSelectedItems: function() {\n let selected = [];\n\n for ( let i in items ) {\n if ( items[i].isVisible() && items[i].isSelected() ) {\n selected.push( items[i] );\n }\n }\n\n return selected;\n },\n\n addFilter: function( filter, type ) {\n if ( type === 'secondary' ) {\n currentSecondaryFilter = filter;\n }\n else {\n currentFilter = filter;\n }\n },\n\n applyFilters: function() {\n for ( let i in items ) {\n if ( items[i] ) {\n if ( items[i].matchFilter( currentFilter ) && items[i].matchSecondaryFilter( currentSecondaryFilter ) ) {\n items[i].show();\n }\n else {\n items[i].hide();\n }\n }\n\n }\n }\n };\n};\n\nexport default RowsCollection;\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/minification/RowsCollection.js","import Fetcher from '../utils/fetcher';\n\nconst MinificationScanner = ( totalSteps, currentStep ) => {\n\n totalSteps = parseInt( totalSteps );\n currentStep = parseInt( currentStep );\n let cancelling = false;\n\n let obj = {\n scan: function() {\n let remainingSteps = totalSteps - currentStep;\n if ( currentStep !== 0 ) {\n // Scan started on a previous pageload\n step( remainingSteps );\n }\n else {\n Fetcher.minification.startCheck()\n .then( () => {\n step( remainingSteps );\n });\n }\n\n },\n cancel: function() {\n cancelling = true;\n return Fetcher.minification.cancelScan();\n },\n getProgress: function() {\n if ( cancelling ) {\n return 0;\n }\n const remainingSteps = totalSteps - currentStep;\n return Math.min( Math.round( ( parseInt( ( totalSteps - remainingSteps ) ) * 100 ) / totalSteps ), 99 );\n },\n // Overridable functions\n onFinishStep: function( progress ) {},\n onFinish: function( response ) {},\n };\n\n /**\n * Execute a scan step recursively\n *\n * Private to avoid overrdings\n *\n * @param remainingSteps\n */\n const step = function( remainingSteps ) {\n if ( remainingSteps >= 0 ) {\n currentStep = totalSteps - remainingSteps;\n Fetcher.minification.checkStep( currentStep )\n .then( () => {\n remainingSteps = remainingSteps - 1;\n obj.onFinishStep( obj.getProgress() );\n step( remainingSteps );\n });\n }\n else {\n Fetcher.minification\n .finishCheck()\n .then( obj.onFinish );\n }\n };\n\n return obj;\n};\n\nexport default MinificationScanner;\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/minification/Scanner.js","/*!\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/utils/clipboard.js","/**\n * Strings internationalization\n *\n * @param str\n *\n * @returns {*|string}\n */\nexport const __ = ( str ) => {\n return wphb.strings[ str ] || '';\n};\n\n/**\n * Get a link to a HB screen\n *\n * @param {string} screen Screen slug\n * @returns {string}\n */\nexport const getLink = ( screen ) => {\n return wphb.links[ screen ] || '';\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/utils/helpers.js","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 4.1.1\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator$1(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nEnumerator$1.prototype._enumerate = function (input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n};\n\nEnumerator$1.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$2) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n};\n\nEnumerator$1.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator$1.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all$1(entries) {\n return new Enumerator$1(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race$1(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise$2(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise$2.all = all$1;\nPromise$2.race = race$1;\nPromise$2.resolve = resolve$1;\nPromise$2.reject = reject$1;\nPromise$2._setScheduler = setScheduler;\nPromise$2._setAsap = setAsap;\nPromise$2._asap = asap;\n\nPromise$2.prototype = {\n constructor: Promise$2,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\n/*global self*/\nfunction polyfill$1() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$2;\n}\n\n// Strange compat..\nPromise$2.polyfill = polyfill$1;\nPromise$2.Promise = Promise$2;\n\nreturn Promise$2;\n\n})));\n\n//# sourceMappingURL=es6-promise.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/es6-promise/dist/es6-promise.js\n// module id = 35\n// module chunks = 0","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_apply.js\n// module id = 36\n// module chunks = 0","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arrayLikeKeys.js\n// module id = 37\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsArguments.js\n// module id = 38\n// module chunks = 0","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsNative.js\n// module id = 39\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsTypedArray.js\n// module id = 40\n// module chunks = 0","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseKeys.js\n// module id = 41\n// module chunks = 0","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseRest.js\n// module id = 42\n// module chunks = 0","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseSetToString.js\n// module id = 43\n// module chunks = 0","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseTimes.js\n// module id = 44\n// module chunks = 0","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseUnary.js\n// module id = 45\n// module chunks = 0","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_copyObject.js\n// module id = 46\n// module chunks = 0","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_coreJsData.js\n// module id = 47\n// module chunks = 0","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_createAssigner.js\n// module id = 48\n// module chunks = 0","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getNative.js\n// module id = 49\n// module chunks = 0","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getRawTag.js\n// module id = 50\n// module chunks = 0","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getValue.js\n// module id = 51\n// module chunks = 0","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isIterateeCall.js\n// module id = 52\n// module chunks = 0","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isMasked.js\n// module id = 53\n// module chunks = 0","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nativeKeys.js\n// module id = 54\n// module chunks = 0","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nodeUtil.js\n// module id = 55\n// module chunks = 0","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_objectToString.js\n// module id = 56\n// module chunks = 0","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_overArg.js\n// module id = 57\n// module chunks = 0","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_overRest.js\n// module id = 58\n// module chunks = 0","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_setToString.js\n// module id = 59\n// module chunks = 0","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_shortOut.js\n// module id = 60\n// module chunks = 0","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_toSource.js\n// module id = 61\n// module chunks = 0","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/assign.js\n// module id = 62\n// module chunks = 0","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/constant.js\n// module id = 63\n// module chunks = 0","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArguments.js\n// module id = 64\n// module chunks = 0","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArray.js\n// module id = 65\n// module chunks = 0","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isBuffer.js\n// module id = 66\n// module chunks = 0","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isTypedArray.js\n// module id = 67\n// module chunks = 0","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/keys.js\n// module id = 68\n// module chunks = 0","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/stubFalse.js\n// module id = 69\n// module chunks = 0","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 70\n// module chunks = 0"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///admin.min.js","webpack:///webpack/bootstrap 69602eb88a58dab13599","webpack:///./_src/admin/js/utils/fetcher.js","webpack:///./~/lodash/_baseGetTag.js","webpack:///./~/lodash/_root.js","webpack:///./~/lodash/isArrayLike.js","webpack:///./~/lodash/isObject.js","webpack:///./~/lodash/isObjectLike.js","webpack:///./~/lodash/_Symbol.js","webpack:///./~/lodash/_assignValue.js","webpack:///./~/lodash/_baseAssignValue.js","webpack:///./~/lodash/_defineProperty.js","webpack:///./~/lodash/_freeGlobal.js","webpack:///./~/lodash/_isIndex.js","webpack:///./~/lodash/_isPrototype.js","webpack:///./~/lodash/eq.js","webpack:///./~/lodash/identity.js","webpack:///./~/lodash/isFunction.js","webpack:///./~/lodash/isLength.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/module.js","webpack:///./_src/admin/js/admin-app.js","webpack:///./_src/admin/js/admin-caching.js","webpack:///./_src/admin/js/admin-cloudflare.js","webpack:///./_src/admin/js/admin-dashboard-cloudflare.js","webpack:///./_src/admin/js/admin-dashboard.js","webpack:///./_src/admin/js/admin-gzip.js","webpack:///./_src/admin/js/admin-main.js","webpack:///./_src/admin/js/admin-minification.js","webpack:///./_src/admin/js/admin-performance.js","webpack:///./_src/admin/js/admin-uptime.js","webpack:///./_src/admin/js/index.js","webpack:///./_src/admin/js/minification/Row.js","webpack:///./_src/admin/js/minification/RowsCollection.js","webpack:///./_src/admin/js/minification/Scanner.js","webpack:///./_src/admin/js/utils/clipboard.js","webpack:///./_src/admin/js/utils/helpers.js","webpack:///./~/es6-promise/dist/es6-promise.js","webpack:///./~/lodash/_apply.js","webpack:///./~/lodash/_arrayLikeKeys.js","webpack:///./~/lodash/_baseIsArguments.js","webpack:///./~/lodash/_baseIsNative.js","webpack:///./~/lodash/_baseIsTypedArray.js","webpack:///./~/lodash/_baseKeys.js","webpack:///./~/lodash/_baseRest.js","webpack:///./~/lodash/_baseSetToString.js","webpack:///./~/lodash/_baseTimes.js","webpack:///./~/lodash/_baseUnary.js","webpack:///./~/lodash/_copyObject.js","webpack:///./~/lodash/_coreJsData.js","webpack:///./~/lodash/_createAssigner.js","webpack:///./~/lodash/_getNative.js","webpack:///./~/lodash/_getRawTag.js","webpack:///./~/lodash/_getValue.js","webpack:///./~/lodash/_isIterateeCall.js","webpack:///./~/lodash/_isMasked.js","webpack:///./~/lodash/_nativeKeys.js","webpack:///./~/lodash/_nodeUtil.js","webpack:///./~/lodash/_objectToString.js","webpack:///./~/lodash/_overArg.js","webpack:///./~/lodash/_overRest.js","webpack:///./~/lodash/_setToString.js","webpack:///./~/lodash/_shortOut.js","webpack:///./~/lodash/_toSource.js","webpack:///./~/lodash/assign.js","webpack:///./~/lodash/constant.js","webpack:///./~/lodash/isArguments.js","webpack:///./~/lodash/isArray.js","webpack:///./~/lodash/isBuffer.js","webpack:///./~/lodash/isTypedArray.js","webpack:///./~/lodash/keys.js","webpack:///./~/lodash/stubFalse.js","webpack:///./~/process/browser.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","Fetcher","request","action","data","arguments","length","undefined","method","nonce","fetchNonce","args","url","fetchUrl","Promise","resolve","reject","jQuery","ajax","done","fail","then","response","checkStatus","ajaxurl","wphb","nonces","HBFetchNonce","methods","notice","dismiss","id","actionPrefix","caching","setServer","reloadSnippets","type","cloudflare","connect","step","formData","cfData","setExpiration","purgeCache","dashboard","toggleMinification","skipSetup","minification","toggleCDN","startCheck","checkStep","finishCheck","cancelScan","performance","runTest","addRecipient","email","actionPrefixPro","saveReportsSettings","_assign2","default","this","_typeof","JSON","parse","success","error","Error","message","Symbol","iterator","obj","constructor","_assign","HBFetcher","baseGetTag","undefinedTag","nullTag","symToStringTag","getRawTag","objectToString","toStringTag","freeGlobal","freeSelf","self","root","Function","isArrayLike","isLength","isFunction","isObject","isObjectLike","assignValue","key","objValue","eq","baseAssignValue","objectProto","writable","getNative","func","e","global","isIndex","MAX_SAFE_INTEGER","reIsUint","test","isPrototype","Ctor","other","identity","tag","funcTag","genTag","asyncTag","proxyTag","g","eval","window","webpackPolyfill","deprecate","paths","children","document","ready","WPHB_Admin","init","_interopRequireDefault","_clipboard","_clipboard2","_fetcher","_fetcher2","$","selectedServer","$serverSelector","$serverInstructions","$snippets","cloudflareLink","wphbCachingStrings","strings","on","preventDefault","val","trigger","hideCurrentInstructions","showServerInstructions","animate","scrollTop","offset","top","apache","find","first","LiteSpeed","nginx","each","change","updateTabSize","expiryInput","expirySettingsForm","checked","attr","hide","show","jq","toLowerCase","current","parent","content","height","outerHeight","selected","server","serverTab","text","code","updatedFile","location","href","recheckURL","cacheEnabled","htaccessErrorURL","$cfSelector","$spinner","is","connected","setExpiry","selector","displaySpinner","reload","css","DashboardCloudFlare","settings","currentStep","apiKey","$stepsContainer","$infoBox","$deactivateButton","renderStep","apply","target","bind","$button","showSpinner","$notice","scrollTo","slideDown","setTimeout","slideUp","removeAttr","hideSpinner","template","html","fadeIn","submitStep","bindEvents","$howToInstructions","click","toggle","WDP","wpmuSelect","removeClass","addClass","emptyInfoBox","showInfoBox","$form","serialize","newData","nextStep","redirect","catch","_","memoize","compiled","options","evaluate","interpolate","escape","variable","templateSettings","wphbDashboardStrings","CDNcheckbox","prop","showNotice","startQuickSetup","showOverlay","class","runPerformanceTest","getModule","performanceTest","finishedTestURLsLink","gzip","updatePerformanceGraph","$wrap","$item","parseInt","$circle","r","pct","Math","PI","strokeDashoffset","updatePerformanceResultsGraphs","notice_id","register_events_performance","initModule","utils","membershipModal","open","post","notices","_helpers","_Row","_Row2","_RowsCollection","_RowsCollection2","_Scanner","_Scanner2","$checkFilesButton","$checkFilesResultsContainer","checkURLSList","checkedURLS","_this","scanner","totalSteps","currentScanStep","onFinishStep","updateProgressBar","onFinish","showCDNModal","show_cdn","getLink","$disableMinification","getProgress","scan","cancel","confirm","__","cdn_value","timer","clearTimeout","rowsCollection","RowsCollection","index","row","_row","Row","push","keyup","addFilter","applyFilters","element","what","visibleItems","getVisibleItems","$this","getItemById","select","unSelect","items","getItems","checkbox","getElement","checkboxes","checkedState","innerWidth","minification_resize_rows","debounce","addEventListener","progress","width","iteration","body","wphbPerformanceStrings","$runTestButton","performanceReportTable","off","getParentPerformanceItem","closest","getNextAdditionalContentRow","nextUntil","toggleClass","hasClass","hash","remove","user_row","img","src","avatar","append","data-id","user_id","alt","removeButtonText","stringify","appendTo","alert","form_data","that","showUpdateMessage","finished","uptime","$dataRangeSelector","chartData","wphbUptimeStrings","$disableUptime","disableUptimeURL","drawChart","google","visualization","DataTable","addColumn","chart_array","Date","round","addRows","chartArea","left","colors","curveType","legend","position","vAxis","format","viewWindow","min","tooltip","isHtml","series","0","axis","axes","y","Resp","label","chart","LineChart","getElementById","draw","resize","_element","_filter","_filter_sec","$el","filter","filterSecondary","visible","$include","$combine","$minify","$posFooter","$defer","$disableIcon","getId","getFilter","matchFilter","search","matchSecondaryFilter","isVisible","isSelected","currentFilter","currentSecondaryFilter","getItem","getSelectedItems","MinificationScanner","cancelling","remainingSteps","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","require","_typeof2","f","define","t","u","a","1","nodeType","DOCUMENT_NODE_TYPE","matches","parentNode","Element","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","2","delegate","callback","useCapture","listenerFn","listener","destroy","removeEventListener","delegateTarget","./closest","3","node","HTMLElement","nodeList","toString","string","String","fn","4","listen","TypeError","listenNode","listenNodeList","listenSelector","Array","forEach","./is","5","selectedText","nodeName","focus","isReadOnly","hasAttribute","setAttribute","setSelectionRange","removeAttribute","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","6","E","ctx","once","emit","slice","evtArr","len","evts","liveEvents","7","factory","amd","mod","clipboardAction","_select","_classCallCheck","instance","Constructor","_select2","_createClass","defineProperties","props","descriptor","protoProps","staticProps","ClipboardAction","resolveOptions","initSelection","container","emitter","selectFake","selectTarget","isRTL","documentElement","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","createElement","style","fontSize","border","padding","margin","yPosition","pageYOffset","appendChild","copyText","removeChild","succeeded","execCommand","err","handleResult","clearSelection","set","_action","_target","8","tinyEmitter","goodListener","clipboard","_clipboardAction","_tinyEmitter","_goodListener","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","getAttributeValue","suffix","attribute","_clipboardAction2","_tinyEmitter2","_goodListener2","Clipboard","_Emitter","getPrototypeOf","listenClick","defaultAction","defaultTarget","defaultText","_this2","onClick","currentTarget","querySelector","actions","support","queryCommandSupported","./clipboard-action","good-listener","tiny-emitter","str","screen","links","process","objectOrFunction","x","setScheduler","scheduleFn","customSchedulerFn","setAsap","asapFn","asap","useVertxTimer","vertxNext","flush","useSetTimeout","globalSetTimeout","queue","onFulfillment","onRejection","_arguments","child","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","promise","selfFulfillment","cannotReturnOwn","getThen","GET_THEN_ERROR","tryThen","then$$1","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","_label","handleOwnThenable","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","PENDING","_subscribers","subscribers","settled","detail","ErrorObject","tryCatch","TRY_CATCH_ERROR","hasCallback","failed","initializePromise","resolver","nextId","Enumerator$1","input","_instanceConstructor","isArray","_remaining","_enumerate","validationError","all$1","entries","race$1","reject$1","needsResolver","needsNew","Promise$2","polyfill$1","local","P","promiseToString","cast","_isArray","arg","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","MessageChannel","nextTick","iterations","observer","createTextNode","observe","characterData","channel","port1","onmessage","port2","postMessage","vertx","runOnLoop","runOnContext","random","substring","_eachEntry","entry","resolve$$1","_then","_settledAt","_willSettleAt","state","enumerator","all","race","_setScheduler","_setAsap","_asap","polyfill","thisArg","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","result","baseTimes","baseIsArguments","argsTag","baseIsNative","isMasked","reIsNative","reIsHostCtor","toSource","reRegExpChar","funcProto","funcToString","RegExp","replace","baseIsTypedArray","typedArrayTags","baseKeys","nativeKeys","baseRest","start","setToString","overRest","constant","baseSetToString","iteratee","baseUnary","copyObject","source","customizer","isNew","newValue","coreJsData","createAssigner","assigner","sources","guard","isIterateeCall","getValue","isOwn","unmasked","nativeObjectToString","maskSrcKey","uid","exec","keys","IE_PROTO","overArg","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","binding","transform","nativeMax","array","otherArgs","max","shortOut","count","lastCalled","stamp","nativeNow","remaining","HOT_SPAN","HOT_COUNT","now","assign","propertyIsEnumerable","stubFalse","Buffer","nativeIsBuffer","nodeIsTypedArray","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","concat","queueIndex","drainQueue","timeout","run","Item","title","browser","env","argv","version","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","cwd","chdir","dir","umask"],"mappings":"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","file":"admin.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 29);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _assign = __webpack_require__(62);\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Fetcher() {\n var fetchUrl = ajaxurl;\n var fetchNonce = wphb.nonces.HBFetchNonce;\n var actionPrefix = 'wphb_';\n var actionPrefixPro = 'wphb_pro_';\n\n function request(action) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'GET';\n\n data.nonce = fetchNonce;\n data.action = action;\n var args = { data: data, method: method };\n args.url = fetchUrl;\n var Promise = __webpack_require__(35).Promise;\n return new Promise(function (resolve, reject) {\n jQuery.ajax(args).done(resolve).fail(reject);\n }).then(function (response) {\n return checkStatus(response);\n });\n }\n\n var methods = {\n /**\n * Notices actions.\n */\n notice: {\n /**\n * Dismiss notice\n * @param id Notice id.\n */\n dismiss: function dismiss(id) {\n var action = actionPrefix + 'notice_dismiss';\n return request(action, { id: id }, 'POST');\n }\n },\n /**\n * Caching module actions.\n */\n caching: {\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: function setServer(value) {\n var action = actionPrefix + 'caching_set_server_type';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: function reloadSnippets(type) {\n var action = actionPrefix + 'caching_reload_snippet';\n return request(action, { type: type }, 'POST').then(function (response) {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n /**\n * Connect to Cloudflare.\n *\n * @param step\n * @param formData\n * @param cfData\n */\n connect: function connect(step, formData, cfData) {\n var action = actionPrefix + 'cloudflare_connect';\n return request(action, { step: step, formData: formData, cfData: cfData }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Set expiry for Cloudflare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: function setExpiration(value) {\n var action = actionPrefix + 'cloudflare_set_expiry';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Purge Cloudflare cache.\n */\n purgeCache: function purgeCache() {\n var action = actionPrefix + 'cloudflare_purge_cache';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'dash_toggle_network_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Skip quick setup.\n */\n skipSetup: function skipSetup() {\n var action = actionPrefix + 'dash_skip_setup';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: function toggleCDN(value) {\n var action = actionPrefix + 'minification_toggle_cdn';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'minification_toggle_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: function startCheck() {\n var action = actionPrefix + 'minification_start_check';\n return request(action, {}, 'POST');\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: function checkStep(step) {\n var action = actionPrefix + 'minification_check_step';\n return request(action, { step: step }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Finish minification process.\n */\n finishCheck: function finishCheck() {\n var action = actionPrefix + 'minification_finish_scan';\n return request(action, {}, 'POST');\n },\n\n /**\n * Cancel minification scan.\n */\n cancelScan: function cancelScan() {\n var action = actionPrefix + 'minification_cancel_scan';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Performance module actions.\n */\n performance: {\n /**\n * Run performance test.\n */\n runTest: function runTest() {\n var action = actionPrefix + 'performance_run_test';\n return request(action, {}, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Add a single email/name recipient to the reports list.\n *\n * @param email\n * @param name\n */\n addRecipient: function addRecipient(email, name) {\n var action = actionPrefixPro + 'performance_add_recipient';\n return request(action, { email: email, name: name }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Save reporting settings on minification page.\n *\n * @param data From data.\n */\n saveReportsSettings: function saveReportsSettings(data) {\n var action = actionPrefixPro + 'performance_save_reports_settings';\n return request(action, { data: data }, 'POST');\n }\n }\n };\n\n (0, _assign2.default)(this, methods);\n}\n\nvar HBFetcher = new Fetcher();\nexports.default = HBFetcher;\n\n\nfunction checkStatus(response) {\n if ((typeof response === 'undefined' ? 'undefined' : _typeof(response)) !== 'object') {\n response = JSON.parse(response);\n }\n if (response.success) {\n return response.data;\n }\n\n var data = response.data || {};\n var error = new Error(data.message || 'Error trying to fetch response from server');\n error.response = response;\n throw error;\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Symbol = __webpack_require__(6),\n getRawTag = __webpack_require__(50),\n objectToString = __webpack_require__(56);\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar freeGlobal = __webpack_require__(10);\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(15),\n isLength = __webpack_require__(16);\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar root = __webpack_require__(2);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseAssignValue = __webpack_require__(8),\n eq = __webpack_require__(13);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(9);\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getNative = __webpack_require__(49);\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(17)))\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isObject = __webpack_require__(4);\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\njQuery(document).ready(function () {\n WPHB_Admin.init();\n});\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _clipboard = __webpack_require__(33);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n WPHB_Admin.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $snippets: [],\n\n init: function init() {\n var self = this,\n cloudflareLink = $('#wphb-box-caching-settings #connect-cloudflare-link');\n\n new _clipboard2.default('.wphb-code-snippet .button');\n\n if (wphbCachingStrings) self.strings = wphbCachingStrings;\n\n cloudflareLink.on('click', function (e) {\n e.preventDefault();\n $('#wphb-server-type').val('cloudflare').trigger('wpmu:change');\n self.hideCurrentInstructions();\n self.setServer('cloudflare');\n self.showServerInstructions('cloudflare');\n self.selectedServer = 'cloudflare';\n $('html, body').animate({ scrollTop: $('#cloudflare-steps').offset().top }, 'slow');\n });\n\n this.$serverSelector = $('#wphb-server-type');\n this.selectedServer = this.$serverSelector.val();\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n self.$snippets.LiteSpeed = $('#wphb-code-snippet-litespeed').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n var instructionsList = $('.wphb-server-instructions');\n instructionsList.each(function () {\n self.$serverInstructions[$(this).data('server')] = $(this);\n });\n\n this.showServerInstructions(this.selectedServer);\n\n this.$serverSelector.change(function () {\n var value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n // Update tab size on select change.\n self.updateTabSize();\n $('.hb-server-type').val(value);\n });\n\n var expiryInput = $(\"input[name='expiry-set-type']\");\n var expirySettingsForm = $('.settings-form');\n expiryInput.each(function () {\n if (this.checked) {\n if ('expiry-all-types' === $(this).attr('id')) {\n expirySettingsForm.find(\"[data='expiry-single-type']\").hide();\n expirySettingsForm.find(\"[data='expiry-all-types']\").show();\n } else if ('expiry-single-type' === $(this).attr('id')) {\n expirySettingsForm.find(\"[data='expiry-all-types']\").hide();\n expirySettingsForm.find(\"[data='expiry-single-type']\").show();\n }\n }\n });\n expiryInput.on('click', function () {\n if ('expiry-all-types' === $(this).attr('id')) {\n expirySettingsForm.find(\"[data='expiry-single-type']\").hide();\n expirySettingsForm.find(\"[data='expiry-all-types']\").show();\n } else if ('expiry-single-type' === $(this).attr('id')) {\n expirySettingsForm.find(\"[data='expiry-all-types']\").hide();\n expirySettingsForm.find(\"[data='expiry-single-type']\").show();\n }\n });\n\n return this;\n },\n\n setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n },\n\n updateTabSize: function updateTabSize() {\n var jq = $('#wphb-server-instructions-' + this.selectedServer.toLowerCase()).find('.tabs'),\n current = jq.find('.tab > input:checked').parent(),\n content = current.find('.content');\n\n jq.height(content.outerHeight() + current.outerHeight() - 6);\n },\n\n hideCurrentInstructions: function hideCurrentInstructions() {\n var selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function showServerInstructions(server) {\n if (typeof this.$serverInstructions[server] !== 'undefined') {\n var serverTab = this.$serverInstructions[server];\n serverTab.show();\n // Show tab.\n serverTab.find('.tab:first-child > label').trigger('click');\n }\n\n if ('apache' === server || 'LiteSpeed' === server) {\n $('.enable-cache-wrap-' + server).show();\n } else {\n $('#enable-cache-wrap').hide();\n }\n },\n\n reloadSnippets: function reloadSnippets() {\n var self = this;\n var stop = false;\n\n for (var i in self.$snippets) {\n if (self.$snippets.hasOwnProperty(i)) {\n _fetcher2.default.caching.reloadSnippets(i).then(function (response) {\n if (stop) {\n return;\n }\n\n self.$snippets[response.type].text(response.code);\n\n // Make sure that we only do things when server displayed is the processed one\n if (response.type !== self.selectedServer) {\n return;\n }\n\n if ('apache' === response.type && response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ('apache' === response.type && self.strings.cacheEnabled && !response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-error').show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $('#wphb-notice-code-snippet-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n });\n }\n }\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.cloudflare = {\n module: 'cloudflare',\n $cfSelector: false,\n $spinner: false,\n\n init: function init() {\n this.$spinner = $('.wphb-spinner');\n this.$cfSelector = $('#wphb-caching-cloudflare-summary-set-expiry');\n var self = this;\n if (wphb.cloudflare.is.connected) {\n this.$cfSelector.change(function () {\n self.setExpiry.call(self, [this]);\n });\n }\n\n return this;\n },\n\n setExpiry: function setExpiry(selector) {\n this.displaySpinner();\n var value = $(selector).val();\n _fetcher2.default.cloudflare.setExpiration(value).then(function () {\n window.location.reload();\n });\n },\n\n displaySpinner: function displaySpinner() {\n this.$spinner.css('visibility', 'visible');\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.DashboardCloudFlare = {\n init: function init(settings) {\n this.currentStep = settings.currentStep;\n this.data = settings;\n this.email = settings.email;\n this.apiKey = settings.apiKey;\n this.$stepsContainer = $('#cloudflare-steps');\n this.$infoBox = $('#cloudflare-info');\n this.$spinner = $('.cloudflare-spinner');\n this.$deactivateButton = $('.cloudflare-deactivate.button');\n\n this.renderStep(this.currentStep);\n\n $('body').on('click', '.cloudflare-clear-cache.button', function (e) {\n e.preventDefault();\n this.purgeCache.apply($(e.target), [this]);\n }.bind(this));\n },\n\n purgeCache: function purgeCache(self) {\n // Show spinner\n var $button = this;\n $button.attr('disabled', true);\n self.showSpinner();\n\n _fetcher2.default.cloudflare.purgeCache().then(function () {\n // Show notice\n var $notice = $('#wphb-notice-cloudflare-purge-cache');\n window.scrollTo(0, 0);\n $notice.slideDown();\n setTimeout(function () {\n $notice.slideUp();\n }, 5e3);\n // Remove spinner\n $button.removeAttr('disabled');\n self.hideSpinner();\n });\n },\n\n renderStep: function renderStep(step) {\n var template = WPHB_Admin.DashboardCloudFlare.template('#cloudflare-step-' + step);\n var content = template(this.data);\n var self = this;\n\n if (content) {\n this.currentStep = step;\n this.$stepsContainer.hide().html(template(this.data)).fadeIn().find('form').on('submit', function (e) {\n e.preventDefault();\n self.submitStep.call(self, $(this));\n });\n\n this.$spinner = this.$stepsContainer.find('.cloudflare-spinner');\n }\n\n this.bindEvents();\n },\n\n bindEvents: function bindEvents() {\n var $howToInstructions = $('#cloudflare-how-to');\n\n $howToInstructions.hide();\n\n $('#cloudflare-how-to-title > a').click(function (e) {\n e.preventDefault();\n $howToInstructions.toggle();\n });\n\n this.$stepsContainer.find('select').each(function () {\n window.WDP.wpmuSelect(this);\n });\n\n if ('final' === this.currentStep) {\n this.$deactivateButton.removeClass('hidden');\n } else {\n this.$deactivateButton.addClass('hidden');\n }\n },\n\n emptyInfoBox: function emptyInfoBox() {\n this.$infoBox.html('');\n this.$infoBox.removeClass();\n },\n\n showInfoBox: function showInfoBox(message) {\n this.$infoBox.addClass('wphb-notice');\n this.$infoBox.addClass('wphb-notice-error');\n this.$infoBox.html(message + '');\n },\n\n showSpinner: function showSpinner() {\n this.$spinner.css('visibility', 'visible');\n },\n\n hideSpinner: function hideSpinner() {\n this.$spinner.css('visibility', 'hidden');\n },\n\n submitStep: function submitStep($form) {\n var self = this;\n\n $form.find('input[type=submit]').attr('disabled', 'true');\n this.emptyInfoBox();\n this.showSpinner();\n\n _fetcher2.default.cloudflare.connect(this.currentStep, $form.serialize(), this.data).then(function (response) {\n self.data = response.newData;\n self.renderStep(response.nextStep);\n\n if (response.nextStep === 'final') {\n window.location.href = response.redirect;\n }\n }).catch(function (error) {\n self.showInfoBox(error);\n });\n\n $form.find('input[type=submit]').removeAttr('disabled');\n self.hideSpinner();\n }\n };\n\n WPHB_Admin.DashboardCloudFlare.template = _.memoize(function (id) {\n var compiled = void 0,\n options = {\n evaluate: /<#([\\s\\S]+?)#>/g,\n interpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n escape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n variable: 'data'\n };\n\n return function (data) {\n _.templateSettings = options;\n compiled = compiled || _.template($(id).html());\n return compiled(data);\n };\n });\n})(jQuery);\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.dashboard = {\n module: 'dashboard',\n\n init: function init() {\n var self = this;\n\n if (wphbDashboardStrings) this.strings = wphbDashboardStrings;\n\n $('#wphb-activate-minification').change(function () {\n var value = $(this).val();\n _fetcher2.default.dashboard.toggleMinification(value).then(function () {\n // If disabled, uncheck CDN checkbox and disable it.\n var CDNcheckbox = $('input[name=\"use_cdn\"]');\n if ('false' === value) {\n CDNcheckbox.prop('checked', false);\n CDNcheckbox.prop('disabled', true);\n } else {\n CDNcheckbox.prop('disabled', false);\n }\n self.showNotice();\n });\n });\n\n $('#use_cdn').change(function () {\n var value = $(this).is(':checked');\n _fetcher2.default.minification.toggleCDN(value).then(function () {\n self.showNotice();\n });\n });\n\n $('.wphb-performance-report-item').click(function () {\n var url = $(this).data('performance-url');\n if (url) {\n location.href = url;\n }\n });\n return this;\n },\n\n /**\n * Notice on settings update.\n */\n showNotice: function showNotice() {\n var notice = $('#wphb-notice-minification-settings-updated');\n notice.slideDown();\n setTimeout(function () {\n notice.slideUp();\n }, 5000);\n },\n\n /**\n * Run quick setup.\n */\n startQuickSetup: function startQuickSetup() {\n // Show quick setup modal\n window.WDP.showOverlay('#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' });\n },\n\n /**\n * Skip quick setup.\n */\n skipSetup: function skipSetup() {\n _fetcher2.default.dashboard.skipSetup().then(function () {\n window.location.reload(true);\n });\n },\n\n /**\n * Run performance test after quick setup.\n */\n runPerformanceTest: function runPerformanceTest() {\n // Show quick setup modal\n window.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n\n // Run performance test\n var module = window.WPHB_Admin.getModule('performance');\n module.performanceTest(this.strings.finishedTestURLsLink);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.gzip = {\n module: \"gzip\",\n selectedServer: \"\",\n $serverSelector: null,\n $serverInstructions: [],\n\n init: function init() {\n var self = this;\n\n this.$serverSelector = $(\"#wphb-server-type\");\n this.selectedServer = this.$serverSelector.val();\n var instructionsList = $(\".wphb-server-instructions\");\n instructionsList.each(function () {\n self.$serverInstructions[$(this).data(\"server\")] = $(this);\n });\n this.showServerInstructions(this.selectedServer);\n this.$serverSelector.change(function () {\n var value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n $(\"#toggle-apache-instructions\").click(function (e) {\n e.preventDefault();\n $(\".apache-instructions\").toggle();\n });\n $(\"#toggle-litespeed-instructions\").click(function (e) {\n e.preventDefault();\n $(\".litespeed-instructions\").toggle();\n });\n return this;\n },\n\n hideCurrentInstructions: function hideCurrentInstructions() {\n var selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function showServerInstructions(server) {\n if (typeof this.$serverInstructions[server] !== \"undefined\") {\n this.$serverInstructions[server].show();\n }\n if (\"apache\" === server || 'LiteSpeed' === server) {\n $(\"#enable-cache-wrap\").show();\n } else {\n $(\"#enable-cache-wrap\").hide();\n }\n },\n\n setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n var WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function init() {\n\n // Mobile navigation links.\n $('body').on('change', '.mobile-nav', function () {\n var url = $(this).val();\n if (url.length > 0) {\n location.href = url;\n }\n });\n\n // Dismiss notice via an ajax call.\n $('#wphb-dismissable').on('click', '.close', function () {\n var notice_id = $(this).parent().attr('data-id');\n _fetcher2.default.notice.dismiss(notice_id);\n });\n\n function updatePerformanceGraph($wrap) {\n var $item = $wrap.find('.wphb-score-result-label'),\n val = parseInt($item.text(), 10) || 100,\n $circle = $wrap.find(\".wphb-score-graph-result\"),\n r = void 0,\n c = void 0,\n pct = void 0;\n r = $circle.attr('r');\n c = Math.PI * (r * 2);\n\n if (val < 0) {\n val = 0;\n }\n if (val > 100) {\n val = 100;\n }\n\n pct = (100 - val) / 100 * c;\n\n $circle.css({ strokeDashoffset: pct });\n }\n\n function updatePerformanceResultsGraphs() {\n\n // Update Overall Score\n $(\".wphb-performance-report-overall-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n\n // Update Current Score\n $(\".wphb-performance-report-current-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n\n // Update All Scores\n $(\".wphb-performance-report-item-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n }\n window.register_events_performance = function () {\n setTimeout(updatePerformanceResultsGraphs, 500);\n };\n $(function () {\n setTimeout(updatePerformanceResultsGraphs, 500);\n });\n },\n initModule: function initModule(module) {\n if (this.hasOwnProperty(module)) {\n this.modules[module] = this[module].init();\n return this.modules[module];\n }\n\n return {};\n },\n getModule: function getModule(module) {\n if (typeof this.modules[module] !== 'undefined') return this.modules[module];else return this.initModule(module);\n }\n };\n\n WPHB_Admin.utils = {\n\n membershipModal: {\n open: function open() {\n $('#wphb-upgrade-membership-modal-link').trigger('click');\n }\n },\n\n post: function post(data, module) {\n data.action = 'wphb_ajax';\n data.module = module;\n return $.ajax({\n url: ajaxurl,\n method: 'POST',\n data: data\n });\n }\n };\n\n WPHB_Admin.notices = {\n\n init: function init() {\n $('.wphb-notice:not(.notice) a.wphb-dismiss').click(function (e) {\n e.preventDefault();\n var id = $(this).data('id');\n var nonce = $(this).data('nonce');\n\n $(this).parent('.error').hide();\n });\n }\n };\n\n window.WPHB_Admin = WPHB_Admin;\n})(jQuery);\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nvar _helpers = __webpack_require__(34);\n\nvar _Row = __webpack_require__(30);\n\nvar _Row2 = _interopRequireDefault(_Row);\n\nvar _RowsCollection = __webpack_require__(31);\n\nvar _RowsCollection2 = _interopRequireDefault(_RowsCollection);\n\nvar _Scanner = __webpack_require__(32);\n\nvar _Scanner2 = _interopRequireDefault(_Scanner);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n WPHB_Admin.minification = {\n\n $checkFilesButton: null,\n $checkFilesResultsContainer: null,\n module: 'minification',\n checkURLSList: null,\n checkedURLS: 0,\n $spinner: null,\n\n init: function init() {\n var _this = this;\n\n var self = this;\n\n // Init files scanner\n this.scanner = new _Scanner2.default(wphb.minification.get.totalSteps, wphb.minification.get.currentScanStep);\n this.scanner.onFinishStep = this.updateProgressBar;\n this.scanner.onFinish = function (response) {\n _this.updateProgressBar(100);\n if (wphb.minification.get.showCDNModal && true === response.show_cdn && $('#enable-cdn-modal').length) {\n window.WDP.showOverlay('#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' });\n } else {\n window.location.href = (0, _helpers.getLink)('minification');\n }\n };\n\n // Check files button\n this.$checkFilesButton = $('#check-files');\n this.$disableMinification = $('#wphb-disable-minification');\n this.$spinner = $('.spinner');\n\n if (this.$checkFilesButton.length) {\n this.$checkFilesButton.click(function (e) {\n e.preventDefault();\n window.WDP.showOverlay(\"#check-files-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n $(this).attr('disabled', true);\n self.updateProgressBar(self.scanner.getProgress());\n self.scanner.scan();\n });\n }\n\n // Cancel scan button\n $('body').on('click', '#cancel-minification-check', function (e) {\n e.preventDefault();\n _this.updateProgressBar(0, true);\n _this.scanner.cancel().then(function () {\n window.location.href = (0, _helpers.getLink)('minification');\n });\n });\n\n // Filter action button on Minification page\n $('#wphb-minification-filter-button').on('click', function (e) {\n e.preventDefault();\n $('#wphb-minification-filter').toggle('slow');\n });\n\n $('.wphb-discard').click(function (e) {\n e.preventDefault();\n\n if (confirm((0, _helpers.__)('discardAlert'))) {\n location.reload();\n }\n return false;\n });\n\n $('.wphb-enqueued-files input').on('change', function () {\n $('.wphb-discard').attr('disabled', false);\n });\n\n $('#use_cdn').change(function () {\n var cdn_value = $(this).is(':checked');\n _fetcher2.default.minification.toggleCDN(cdn_value).then(function () {\n var notice = $('#wphb-notice-minification-advanced-settings-updated');\n notice.slideDown();\n setTimeout(function () {\n notice.slideUp();\n }, 5000);\n });\n });\n\n this.$disableMinification.change(function () {\n var value = $(this).is(':checked');\n\n self.$spinner.css('visibility', 'visible');\n\n if (self.timer && value) {\n clearTimeout(self.timer);\n self.$spinner.css('visibility', 'hidden');\n }\n\n self.timer = setTimeout(function () {\n _fetcher2.default.minification.toggleMinification(value).then(function () {\n location.reload();\n });\n }, 3000);\n });\n\n this.rowsCollection = new WPHB_Admin.minification.RowsCollection();\n\n var rows = $('.wphb-border-row');\n\n rows.each(function (index, row) {\n var _row = void 0;\n if ($(row).data('filter-secondary')) {\n _row = new WPHB_Admin.minification.Row($(row), $(row).data('filter'), $(row).data('filter-secondary'));\n } else {\n _row = new WPHB_Admin.minification.Row($(row), $(row).data('filter'));\n }\n self.rowsCollection.push(_row);\n });\n\n $('#wphb-s').keyup(function () {\n self.rowsCollection.addFilter($(this).val(), 'primary');\n self.rowsCollection.applyFilters();\n });\n\n $('#wphb-secondary-filter').change(function () {\n self.rowsCollection.addFilter($(this).val(), 'secondary');\n self.rowsCollection.applyFilters();\n });\n\n $('.filter-toggles').change(function () {\n var element = $(this);\n var what = element.data('toggles');\n var value = element.prop('checked');\n var visibleItems = self.rowsCollection.getVisibleItems();\n\n for (var i in visibleItems) {\n visibleItems[i].change(what, value);\n }\n });\n\n // Files selectors\n var filesList = $('input.wphb-minification-file-selector');\n filesList.click(function () {\n var $this = $(this);\n var element = self.rowsCollection.getItemById($this.data('type'), $this.data('handle'));\n if (!element) {\n return;\n }\n\n if ($this.is(':checked')) {\n element.select();\n } else {\n element.unSelect();\n }\n });\n\n var selectAll = $('#minification-bulk-file');\n selectAll.click(function () {\n var $this = $(this);\n var items = self.rowsCollection.getItems();\n for (var i in items) {\n if (items.hasOwnProperty(i)) {\n if ($this.is(':checked')) {\n items[i].select();\n } else {\n items[i].unSelect();\n }\n }\n }\n });\n\n // Include/exclude file checkbox\n $('.toggle-cross').on('click', function () {\n var $this = $(this);\n var checkbox = $this.find('input.toggle-include');\n var row = self.rowsCollection.getItemById($this.data('type'), $this.data('handle'));\n // Mark the item as include or not in the rows list\n if (row) {\n row.change('include', !checkbox.prop('checked'));\n row.getElement().find('input:not(.toggle-include)').prop('disabled', !checkbox.prop('checked'));\n }\n });\n\n // Handle two CDN checkboxes on Minification page\n var checkboxes = $(\"input[type=checkbox][name=use_cdn]\");\n checkboxes.change(function () {\n var checkedState = $(this).prop('checked');\n\n checkboxes.each(function () {\n this.checked = checkedState;\n });\n });\n\n /* Show details of minification row on mobile devices */\n $('body').on('click', '.wphb-minification-file-details', function () {\n if (window.innerWidth < 783) {\n $(this).parent().find('.wphb-minification-row-details').toggle('slow');\n }\n });\n\n /*\n Catch window resize and revert styles for responsive divs\n 1/4 of a second should be enough to trigger during device rotations (from portrait to landscape mode)\n */\n var minification_resize_rows = _.debounce(function () {\n\n if (window.innerWidth >= 783) {\n $('.wphb-minification-row-details').css('display', 'flex');\n } else {\n $('.wphb-minification-row-details').css('display', 'none');\n }\n }, 250);\n\n window.addEventListener('resize', minification_resize_rows);\n\n return this;\n },\n\n updateProgressBar: function updateProgressBar(progress) {\n var cancel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (progress > 100) {\n progress = 100;\n }\n // Update progress bar\n $('.wphb-scan-progress .wphb-scan-progress-text span').text(progress + '%');\n $('.wphb-scan-progress .wphb-scan-progress-bar span').width(progress + '%');\n if (progress >= 90) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Finalizing...');\n }\n if (cancel) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Cancelling...');\n }\n }\n\n }; // End WPHB_Admin.minification\n\n WPHB_Admin.minification.Row = _Row2.default;\n WPHB_Admin.minification.RowsCollection = _RowsCollection2.default;\n})(jQuery);\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n WPHB_Admin.performance = {\n\n module: 'performance',\n iteration: 0,\n progress: 0,\n\n init: function init() {\n\n var self = this;\n var body = $('body');\n\n if (wphbPerformanceStrings) this.strings = wphbPerformanceStrings;\n\n this.$runTestButton = $('#run-performance-test');\n\n var performanceReportTable = $(\".performance-report-table\");\n\n performanceReportTable.off('click', 'button');\n performanceReportTable.on('click', '.wphb-performance-report-item-cta .additional-content-opener' && 'tr.wphb-performance-report-item', function (e) {\n e.preventDefault();\n\n var getParentPerformanceItem = $(this).closest(\".wphb-performance-report-item\"),\n getNextAdditionalContentRow = getParentPerformanceItem.nextUntil(\".wphb-performance-report-item\");\n\n getNextAdditionalContentRow.toggleClass(\"wphb-performance-report-item-additional-content-opened\");\n\n if (getNextAdditionalContentRow.hasClass(\"wphb-performance-report-item-additional-content-opened\")) {\n getParentPerformanceItem.addClass(\"wphb-performance-report-item-opened\");\n } else {\n getParentPerformanceItem.removeClass(\"wphb-performance-report-item-opened\");\n }\n });\n\n if (this.$runTestButton.length) {\n this.$runTestButton.click(function (e) {\n e.preventDefault();\n window.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n $(this).attr('disabled', true);\n self.performanceTest(self.strings.finishedTestURLsLink);\n });\n }\n\n // If a hash is present in URL, let's open the rule extra content\n var hash = window.location.hash;\n if (hash) {\n var row = $(hash);\n if (row.length) {\n row.find('.trigger-additional-content').trigger('click');\n }\n }\n\n // Schedule show/hide day of week\n $('select[name=\"email-frequency\"]').change(function () {\n if ('1' === $(this).val()) {\n $(this).closest('.schedule-box').find('div.days-container').hide();\n } else {\n $(this).closest('.schedule-box').find('div.days-container').show();\n }\n }).change();\n\n // Remove recipient\n body.on('click', '.wphb-remove-recipient', function (e) {\n e.preventDefault();\n $(this).closest('.recipient').remove();\n $('.scan-settings').find(\"input[id='scan_recipient'][value=\" + $(this).attr('data-id') + \"]\").remove();\n });\n\n // Add recipient\n $('#add-receipt').click(function () {\n var email = $(\"#wphb-username-search\").val();\n var name = $(\"#wphb-first-name\").val();\n _fetcher2.default.performance.addRecipient(email, name).then(function (response) {\n var user_row = $('<div class=\"recipient\"/>');\n\n var img = $('<img/>').attr({\n 'src': response.avatar,\n 'width': '30'\n });\n var name = $('<span/>').html(response.name);\n\n user_row.append('<span class=\"name\"/>');\n user_row.find('.name').append(img, name);\n\n user_row.append($('<span class=\"email\"/>').html(email));\n user_row.append($('<a/>').attr({\n 'data-id': response.user_id,\n 'class': 'remove float-r wphb-remove-recipient',\n 'href': '#',\n 'alt': self.strings.removeButtonText\n }).html('<i class=\"dev-icon dev-icon-cross\"></i>'));\n\n $('<input>').attr({\n type: 'hidden',\n id: 'scan_recipient',\n name: 'email-recipients[]',\n value: JSON.stringify({ email: response.email, name: response.name })\n }).appendTo(user_row);\n\n $('.receipt .recipients').append(user_row);\n $(\"#wphb-username-search\").val('');\n $(\"#wphb-first-name\").val('');\n }).catch(function (error) {\n alert(error.message);\n });\n return false;\n });\n\n // Save report settings\n body.on('submit', '.scan-frm', function (e) {\n e.preventDefault();\n var form_data = $(this).serialize();\n var that = $(this);\n\n that.find('.button').attr('disabled', 'disabled');\n\n _fetcher2.default.performance.saveReportsSettings(form_data).then(function () {\n that.find('.button').removeAttr('disabled');\n self.showUpdateMessage();\n });\n return false;\n });\n\n return this;\n },\n\n showUpdateMessage: function showUpdateMessage() {\n var notice = $('#wphb-notice-performance-report-settings-updated');\n window.scrollTo(0, 0);\n notice.slideDown();\n setTimeout(function () {\n notice.slideUp();\n }, 5000);\n },\n\n performanceTest: function performanceTest(redirect) {\n var self = this;\n\n if (typeof redirect === 'undefined') redirect = false;\n\n // Update progress bar\n self.updateProgressBar();\n\n _fetcher2.default.performance.runTest().then(function (response) {\n if (!response.finished) {\n // Try again 5 seconds later\n window.setTimeout(function () {\n self.performanceTest(redirect);\n }, 5000);\n } else if (redirect) {\n window.location = redirect;\n }\n });\n },\n\n updateProgressBar: function updateProgressBar() {\n if (this.progress < 90) {\n this.progress += 35;\n }\n if (this.progress > 100) {\n this.progress = 90;\n }\n $('.wphb-scan-progress .wphb-scan-progress-text span').text(this.progress + '%');\n $('.wphb-scan-progress .wphb-scan-progress-bar span').attr('style', 'width:' + this.progress + '%');\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n(function ($) {\n WPHB_Admin.uptime = {\n module: 'uptime',\n $dataRangeSelector: null,\n chartData: null,\n timer: null,\n $spinner: null,\n init: function init() {\n this.$spinner = $('.spinner');\n this.strings = wphbUptimeStrings;\n this.$dataRangeSelector = $('#wphb-uptime-data-range');\n this.chartData = $('#uptime-chart-json').val();\n this.$disableUptime = $('#wphb-disable-uptime');\n\n this.$dataRangeSelector.change(function () {\n window.location.href = $(this).find(':selected').data('url');\n });\n\n var self = this;\n this.$disableUptime.change(function () {\n self.$spinner.css('visibility', 'visible');\n var value = $(this).is(':checked');\n if (value && self.timer) {\n clearTimeout(self.timer);\n self.$spinner.css('visibility', 'hidden');\n } else {\n // you have 3 seconds to change your mind\n self.timer = setTimeout(function () {\n location.href = self.strings.disableUptimeURL;\n }, 3000);\n }\n\n return;\n });\n\n this.drawChart();\n\n /* Re-check Uptime status */\n $('#uptime-re-check-status').on('click', function (e) {\n e.preventDefault();\n location.reload();\n });\n },\n\n drawChart: function drawChart() {\n var data = new google.visualization.DataTable();\n data.addColumn('datetime', 'Day');\n data.addColumn('number', 'Response Time (ms)');\n\n var chart_array = JSON.parse(this.chartData);\n for (var i = 0; i < chart_array.length; i++) {\n chart_array[i][0] = new Date(chart_array[i][0]);\n chart_array[i][1] = Math.round(chart_array[i][1]);\n\n /* brings the graph below the x axis */\n if (Math.round(chart_array[i][1]) == 0) {\n chart_array[i][1] = -100;\n }\n }\n\n data.addRows(chart_array);\n\n var options = {\n chartArea: {\n left: 80,\n top: 20,\n width: '90%',\n height: '90%'\n },\n colors: ['#24ADE5'],\n curveType: 'function',\n /*interpolateNulls: true,*/\n legend: { position: 'none' },\n vAxis: {\n format: '#,### ms',\n viewWindow: { min: 0 /* don't display negative values */\n } },\n tooltip: { isHtml: true },\n series: {\n 0: { axis: 'Resp' }\n },\n axes: {\n y: {\n Resp: { label: 'Response Time (ms)' }\n }\n }\n };\n\n var chart = new google.visualization.LineChart(document.getElementById('uptime-chart'));\n chart.draw(data, options);\n\n $(window).resize(function () {\n chart.draw(data, options);\n });\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(25);\n__webpack_require__(27);\n__webpack_require__(24);\n__webpack_require__(20);\n__webpack_require__(26);\n__webpack_require__(23);\n__webpack_require__(22);\n__webpack_require__(28);\n__webpack_require__(21);\n__webpack_require__(19);\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar Row = function Row(_element, _filter, _filter_sec) {\n var $el = _element,\n filter = _filter.toLowerCase(),\n filterSecondary = false,\n selected = false,\n visible = true;\n\n var $include = $el.find('.toggle-include'),\n $combine = $el.find('.toggle-combine'),\n $minify = $el.find('.toggle-minify'),\n $posFooter = $el.find('.toggle-position-footer'),\n $defer = $el.find('.toggle-defer'),\n $disableIcon = $el.find('.toggle-cross > i');\n\n if (_filter_sec) {\n filterSecondary = _filter_sec.toLowerCase();\n }\n\n return {\n hide: function hide() {\n $el.addClass('out-of-filter');\n visible = false;\n },\n\n show: function show() {\n $el.removeClass('out-of-filter');\n visible = true;\n },\n\n getElement: function getElement() {\n return $el;\n },\n\n getId: function getId() {\n return $el.attr('id');\n },\n\n getFilter: function getFilter() {\n return filter;\n },\n\n matchFilter: function matchFilter(text) {\n if (text === '') {\n return true;\n }\n\n text = text.toLowerCase();\n return filter.search(text) > -1;\n },\n\n matchSecondaryFilter: function matchSecondaryFilter(text) {\n if (text === '') {\n return true;\n }\n\n if (!filterSecondary) {\n return false;\n }\n\n text = text.toLowerCase();\n return filterSecondary === text;\n },\n\n isVisible: function isVisible() {\n return visible;\n },\n\n isSelected: function isSelected() {\n return selected;\n },\n\n select: function select() {\n selected = true;\n },\n\n unSelect: function unSelect() {\n selected = false;\n },\n\n change: function change(what, value) {\n switch (what) {\n case 'minify':\n {\n $minify.prop('checked', value);\n break;\n }\n case 'combine':\n {\n $combine.prop('checked', value);\n break;\n }\n case 'defer':\n {\n $defer.prop('checked', value);\n break;\n }\n case 'include':\n {\n $disableIcon.removeClass();\n $include.prop('checked', value);\n if (value) {\n $el.removeClass('disabled');\n $disableIcon.addClass('dev-icon dev-icon-cross');\n $include.attr('checked', true);\n } else {\n $el.addClass('disabled');\n $disableIcon.addClass('wdv-icon wdv-icon-refresh');\n $include.removeAttr('checked');\n }\n break;\n }\n case 'footer':\n {\n $posFooter.prop('checked', value);\n break;\n }\n }\n }\n\n };\n};\n\nexports.default = Row;\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar RowsCollection = function RowsCollection() {\n var items = [];\n var currentFilter = '';\n var currentSecondaryFilter = '';\n\n return {\n push: function push(row) {\n if ((typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') {\n items.push(row);\n }\n },\n\n getItems: function getItems() {\n return items;\n },\n\n getItem: function getItem(i) {\n if (items[i]) {\n return items[i];\n }\n return false;\n },\n\n /**\n * Get a collection item by type and ID\n * @param type\n * @param id\n */\n getItemById: function getItemById(type, id) {\n var value = false;\n for (var i in items) {\n if ('wphb-file-' + type + '-' + id === items[i].getId()) {\n value = items[i];\n break;\n }\n }\n return value;\n },\n\n getVisibleItems: function getVisibleItems() {\n var visible = [];\n for (var i in items) {\n if (items[i].isVisible()) {\n visible.push(items[i]);\n }\n }\n return visible;\n },\n\n getSelectedItems: function getSelectedItems() {\n var selected = [];\n\n for (var i in items) {\n if (items[i].isVisible() && items[i].isSelected()) {\n selected.push(items[i]);\n }\n }\n\n return selected;\n },\n\n addFilter: function addFilter(filter, type) {\n if (type === 'secondary') {\n currentSecondaryFilter = filter;\n } else {\n currentFilter = filter;\n }\n },\n\n applyFilters: function applyFilters() {\n for (var i in items) {\n if (items[i]) {\n if (items[i].matchFilter(currentFilter) && items[i].matchSecondaryFilter(currentSecondaryFilter)) {\n items[i].show();\n } else {\n items[i].hide();\n }\n }\n }\n }\n };\n};\n\nexports.default = RowsCollection;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar MinificationScanner = function MinificationScanner(totalSteps, currentStep) {\n\n totalSteps = parseInt(totalSteps);\n currentStep = parseInt(currentStep);\n var cancelling = false;\n\n var obj = {\n scan: function scan() {\n var remainingSteps = totalSteps - currentStep;\n if (currentStep !== 0) {\n // Scan started on a previous pageload\n step(remainingSteps);\n } else {\n _fetcher2.default.minification.startCheck().then(function () {\n step(remainingSteps);\n });\n }\n },\n cancel: function cancel() {\n cancelling = true;\n return _fetcher2.default.minification.cancelScan();\n },\n getProgress: function getProgress() {\n if (cancelling) {\n return 0;\n }\n var remainingSteps = totalSteps - currentStep;\n return Math.min(Math.round(parseInt(totalSteps - remainingSteps) * 100 / totalSteps), 99);\n },\n // Overridable functions\n onFinishStep: function onFinishStep(progress) {},\n onFinish: function onFinish(response) {}\n };\n\n /**\n * Execute a scan step recursively\n *\n * Private to avoid overrdings\n *\n * @param remainingSteps\n */\n var step = function step(remainingSteps) {\n if (remainingSteps >= 0) {\n currentStep = totalSteps - remainingSteps;\n _fetcher2.default.minification.checkStep(currentStep).then(function () {\n remainingSteps = remainingSteps - 1;\n obj.onFinishStep(obj.getProgress());\n step(remainingSteps);\n });\n } else {\n _fetcher2.default.minification.finishCheck().then(obj.onFinish);\n }\n };\n\n return obj;\n};\n\nexports.default = MinificationScanner;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;\n\nvar _typeof2 = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function (f) {\n if (( false ? \"undefined\" : _typeof2(exports)) === \"object\" && typeof module !== \"undefined\") {\n module.exports = f();\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (f),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {\n var g;if (typeof window !== \"undefined\") {\n g = window;\n } else if (typeof global !== \"undefined\") {\n g = global;\n } else if (typeof self !== \"undefined\") {\n g = self;\n } else {\n g = this;\n }g.Clipboard = f();\n }\n})(function () {\n var define, module, exports;return function e(t, n, r) {\n function s(o, u) {\n if (!n[o]) {\n if (!t[o]) {\n var a = typeof require == \"function\" && require;if (!u && a) return require(o, !0);if (i) return i(o, !0);var f = new Error(\"Cannot find module '\" + o + \"'\");throw f.code = \"MODULE_NOT_FOUND\", f;\n }var l = n[o] = { exports: {} };t[o][0].call(l.exports, function (e) {\n var n = t[o][1][e];return s(n ? n : e);\n }, l, l.exports, e, t, n, r);\n }return n[o].exports;\n }var i = typeof require == \"function\" && require;for (var o = 0; o < r.length; o++) {\n s(r[o]);\n }return s;\n }({ 1: [function (require, module, exports) {\n var DOCUMENT_NODE_TYPE = 9;\n\n /**\n * A polyfill for Element.matches()\n */\n if (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;\n }\n\n /**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\n function closest(element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' && element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n }\n\n module.exports = closest;\n }, {}], 2: [function (require, module, exports) {\n var closest = require('./closest');\n\n /**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\n function delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function destroy() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n };\n }\n\n /**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\n function listener(element, selector, type, callback) {\n return function (e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n };\n }\n\n module.exports = delegate;\n }, { \"./closest\": 1 }], 3: [function (require, module, exports) {\n /**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.node = function (value) {\n return value !== undefined && value instanceof HTMLElement && value.nodeType === 1;\n };\n\n /**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.nodeList = function (value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined && (type === '[object NodeList]' || type === '[object HTMLCollection]') && 'length' in value && (value.length === 0 || exports.node(value[0]));\n };\n\n /**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.string = function (value) {\n return typeof value === 'string' || value instanceof String;\n };\n\n /**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\n exports.fn = function (value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n };\n }, {}], 4: [function (require, module, exports) {\n var is = require('./is');\n var delegate = require('delegate');\n\n /**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n } else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n } else if (is.string(target)) {\n return listenSelector(target, type, callback);\n } else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n }\n\n /**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function destroy() {\n node.removeEventListener(type, callback);\n }\n };\n }\n\n /**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function (node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function destroy() {\n Array.prototype.forEach.call(nodeList, function (node) {\n node.removeEventListener(type, callback);\n });\n }\n };\n }\n\n /**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\n function listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n }\n\n module.exports = listen;\n }, { \"./is\": 3, \"delegate\": 2 }], 5: [function (require, module, exports) {\n function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n } else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n }\n\n module.exports = select;\n }, {}], 6: [function (require, module, exports) {\n function E() {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n }\n\n E.prototype = {\n on: function on(name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function once(name, callback, ctx) {\n var self = this;\n function listener() {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback;\n return this.on(name, listener, ctx);\n },\n\n emit: function emit(name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function off(name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n liveEvents.length ? e[name] = liveEvents : delete e[name];\n\n return this;\n }\n };\n\n module.exports = E;\n }, {}], 7: [function (require, module, exports) {\n (function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n })(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n });\n }, { \"select\": 5 }], 8: [function (require, module, exports) {\n (function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n })(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof2(obj);\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : _typeof2(superClass)));\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n });\n }, { \"./clipboard-action\": 7, \"good-listener\": 4, \"tiny-emitter\": 6 }] }, {}, [8])(8);\n});\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Strings internationalization\n *\n * @param str\n *\n * @returns {*|string}\n */\nvar __ = exports.__ = function __(str) {\n return wphb.strings[str] || '';\n};\n\n/**\n * Get a link to a HB screen\n *\n * @param {string} screen Screen slug\n * @returns {string}\n */\nvar getLink = exports.getLink = function getLink(screen) {\n return wphb.links[screen] || '';\n};\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process, global) {var require;/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 4.1.1\n */\n\n(function (global, factory) {\n\t true ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = __webpack_require__(71);\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && \"function\" === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator$1(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nEnumerator$1.prototype._enumerate = function (input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n};\n\nEnumerator$1.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$2) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n};\n\nEnumerator$1.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator$1.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all$1(entries) {\n return new Enumerator$1(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race$1(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise$2(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise$2.all = all$1;\nPromise$2.race = race$1;\nPromise$2.resolve = resolve$1;\nPromise$2.reject = reject$1;\nPromise$2._setScheduler = setScheduler;\nPromise$2._setAsap = setAsap;\nPromise$2._asap = asap;\n\nPromise$2.prototype = {\n constructor: Promise$2,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\n/*global self*/\nfunction polyfill$1() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$2;\n}\n\n// Strange compat..\nPromise$2.polyfill = polyfill$1;\nPromise$2.Promise = Promise$2;\n\nreturn Promise$2;\n\n})));\n\n//# sourceMappingURL=es6-promise.map\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(70), __webpack_require__(17)))\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseTimes = __webpack_require__(44),\n isArguments = __webpack_require__(64),\n isArray = __webpack_require__(65),\n isBuffer = __webpack_require__(66),\n isIndex = __webpack_require__(11),\n isTypedArray = __webpack_require__(67);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isObjectLike = __webpack_require__(5);\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(15),\n isMasked = __webpack_require__(53),\n isObject = __webpack_require__(4),\n toSource = __webpack_require__(61);\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isLength = __webpack_require__(16),\n isObjectLike = __webpack_require__(5);\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isPrototype = __webpack_require__(12),\n nativeKeys = __webpack_require__(54);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar identity = __webpack_require__(14),\n overRest = __webpack_require__(58),\n setToString = __webpack_require__(59);\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar constant = __webpack_require__(63),\n defineProperty = __webpack_require__(9),\n identity = __webpack_require__(14);\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports) {\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(7),\n baseAssignValue = __webpack_require__(8);\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar root = __webpack_require__(2);\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseRest = __webpack_require__(42),\n isIterateeCall = __webpack_require__(52);\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsNative = __webpack_require__(39),\n getValue = __webpack_require__(51);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Symbol = __webpack_require__(6);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar eq = __webpack_require__(13),\n isArrayLike = __webpack_require__(3),\n isIndex = __webpack_require__(11),\n isObject = __webpack_require__(4);\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar coreJsData = __webpack_require__(47);\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar overArg = __webpack_require__(57);\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(10);\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)(module)))\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports) {\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports) {\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar apply = __webpack_require__(36);\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseSetToString = __webpack_require__(43),\n shortOut = __webpack_require__(60);\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports) {\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(7),\n copyObject = __webpack_require__(46),\n createAssigner = __webpack_require__(48),\n isArrayLike = __webpack_require__(3),\n isPrototype = __webpack_require__(12),\n keys = __webpack_require__(68);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports) {\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsArguments = __webpack_require__(38),\n isObjectLike = __webpack_require__(5);\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports) {\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(2),\n stubFalse = __webpack_require__(69);\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(18)(module)))\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsTypedArray = __webpack_require__(40),\n baseUnary = __webpack_require__(45),\n nodeUtil = __webpack_require__(55);\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeKeys = __webpack_require__(37),\n baseKeys = __webpack_require__(41),\n isArrayLike = __webpack_require__(3);\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports) {\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// admin.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 29);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 69602eb88a58dab13599","import assign from 'lodash/assign';\n\nfunction Fetcher() {\n let fetchUrl = ajaxurl;\n let fetchNonce = wphb.nonces.HBFetchNonce;\n const actionPrefix = 'wphb_';\n const actionPrefixPro = 'wphb_pro_';\n\n function request( action, data = {}, method = 'GET' ) {\n data.nonce = fetchNonce;\n data.action = action;\n let args = { data, method };\n args.url = fetchUrl;\n let Promise = require('es6-promise').Promise;\n return new Promise( ( resolve, reject ) => {\n jQuery.ajax( args ).done( resolve ).fail( reject );\n })\n .then( ( response ) => checkStatus( response ) );\n\n }\n\n const methods = {\n\t\t/**\n * Notices actions.\n\t\t */\n\t\tnotice: {\n\t\t\t/**\n * Dismiss notice\n\t\t\t * @param id Notice id.\n\t\t\t */\n\t\t\tdismiss: ( id ) => {\n\t\t const action = actionPrefix + 'notice_dismiss';\n\t\t return request( action, { id }, 'POST' );\n }\n },\n\t\t/**\n\t\t * Caching module actions.\n */\n caching: {\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: ( value ) => {\n const action = actionPrefix + 'caching_set_server_type';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: ( type ) => {\n const action = actionPrefix + 'caching_reload_snippet';\n return request( action, { type }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n\t\t\t/**\n\t\t\t * Connect to Cloudflare.\n\t\t\t *\n\t\t\t * @param step\n\t\t\t * @param formData\n\t\t\t * @param cfData\n\t\t\t */\n\t\t\tconnect: ( step, formData, cfData ) => {\n\t\t\t\tconst action = actionPrefix + 'cloudflare_connect';\n return request( action, { step, formData, cfData }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Set expiry for Cloudflare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: ( value ) => {\n const action = actionPrefix + 'cloudflare_set_expiry';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Purge Cloudflare cache.\n\t\t\t */\n\t\t\tpurgeCache: () => {\n const action = actionPrefix + 'cloudflare_purge_cache';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'dash_toggle_network_minification';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Skip quick setup.\n\t\t\t */\n\t\t\tskipSetup: () => {\n const action = actionPrefix + 'dash_skip_setup';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: ( value ) => {\n const action = actionPrefix + 'minification_toggle_cdn';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'minification_toggle_minification';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: () => {\n const action = actionPrefix + 'minification_start_check';\n return request( action, {}, 'POST' );\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: ( step ) => {\n const action = actionPrefix + 'minification_check_step';\n return request( action, { step }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Finish minification process.\n */\n finishCheck: () => {\n const action = actionPrefix + 'minification_finish_scan';\n return request( action, {}, 'POST' );\n },\n\n\t\t\t/**\n * Cancel minification scan.\n\t\t\t */\n\t\t\tcancelScan: function cancelScan() {\n\t\t\t\tconst action = actionPrefix + 'minification_cancel_scan';\n\t\t\t\treturn request( action, {}, 'POST' );\n\t\t\t}\n },\n\n /**\n * Performance module actions.\n */\n performance: {\n\t\t\t/**\n * Run performance test.\n\t\t\t */\n\t\t\trunTest: () => {\n const action = actionPrefix + 'performance_run_test';\n return request( action, {}, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Add a single email/name recipient to the reports list.\n *\n * @param email\n * @param name\n */\n addRecipient: ( email, name ) => {\n const action = actionPrefixPro + 'performance_add_recipient';\n return request( action, { email, name }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Save reporting settings on minification page.\n *\n * @param data From data.\n */\n saveReportsSettings: ( data ) => {\n const action = actionPrefixPro + 'performance_save_reports_settings';\n return request( action, { data }, 'POST' );\n }\n }\n };\n\n assign( this, methods );\n}\n\nconst HBFetcher = new Fetcher();\nexport default HBFetcher;\n\nfunction checkStatus( response ) {\n if ( typeof response !== 'object' ) {\n response = JSON.parse( response );\n }\n if ( response.success ) {\n return response.data;\n }\n\n let data = response.data || {};\n const error = new Error( data.message || 'Error trying to fetch response from server' );\n error.response = response;\n throw error;\n}\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/utils/fetcher.js","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseGetTag.js\n// module id = 1\n// module chunks = 0","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_root.js\n// module id = 2\n// module chunks = 0","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArrayLike.js\n// module id = 3\n// module chunks = 0","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isObject.js\n// module id = 4\n// module chunks = 0","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isObjectLike.js\n// module id = 5\n// module chunks = 0","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Symbol.js\n// module id = 6\n// module chunks = 0","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_assignValue.js\n// module id = 7\n// module chunks = 0","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseAssignValue.js\n// module id = 8\n// module chunks = 0","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_defineProperty.js\n// module id = 9\n// module chunks = 0","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_freeGlobal.js\n// module id = 10\n// module chunks = 0","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isIndex.js\n// module id = 11\n// module chunks = 0","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isPrototype.js\n// module id = 12\n// module chunks = 0","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/eq.js\n// module id = 13\n// module chunks = 0","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/identity.js\n// module id = 14\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isFunction.js\n// module id = 15\n// module chunks = 0","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isLength.js\n// module id = 16\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 17\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 18\n// module chunks = 0","jQuery(document).ready( function() {\n WPHB_Admin.init();\n});\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-app.js","import Clipboard from './utils/clipboard';\nimport Fetcher from './utils/fetcher';\n\n( function( $ ) {\n 'use strict';\n WPHB_Admin.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $snippets: [],\n\n init: function () {\n let self = this,\n cloudflareLink = $('#wphb-box-caching-settings #connect-cloudflare-link');\n\n\t\t\tnew Clipboard('.wphb-code-snippet .button');\n\n if ( wphbCachingStrings )\n self.strings = wphbCachingStrings;\n\n cloudflareLink.on('click', function(e) {\n e.preventDefault();\n\t\t\t\t$('#wphb-server-type').val('cloudflare').trigger('wpmu:change');\n\t\t\t\tself.hideCurrentInstructions();\n self.setServer('cloudflare');\n\t\t\t\tself.showServerInstructions('cloudflare');\n\t\t\t\tself.selectedServer = 'cloudflare';\n\t\t\t\t$('html, body').animate({ scrollTop: $('#cloudflare-steps').offset().top }, 'slow');\n });\n\n this.$serverSelector = $( '#wphb-server-type' );\n this.selectedServer = this.$serverSelector.val();\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n\t\t\tself.$snippets.LiteSpeed = $('#wphb-code-snippet-litespeed').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n let instructionsList = $( '.wphb-server-instructions' );\n instructionsList.each( function() {\n self.$serverInstructions[ $(this).data('server') ] = $(this);\n });\n\n this.showServerInstructions( this.selectedServer );\n\n this.$serverSelector.change( function() {\n let value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions( value );\n self.setServer(value);\n self.selectedServer = value;\n\t\t\t\t// Update tab size on select change.\n self.updateTabSize();\n $('.hb-server-type').val( value );\n });\n\n let expiryInput = $(\"input[name='expiry-set-type']\");\n let expirySettingsForm = $('.settings-form');\n\t\t\texpiryInput.each( function () {\n if ( this.checked ) {\n if ( 'expiry-all-types' === $(this).attr('id') ) {\n\t\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-single-type']\" ).hide();\n\t\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-all-types']\" ).show();\n } else if ( 'expiry-single-type' === $(this).attr('id') ) {\n\t\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-all-types']\" ).hide();\n\t\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-single-type']\" ).show();\n }\n }\n });\n\t\t\texpiryInput.on( 'click', function () {\n if ( 'expiry-all-types' === $(this).attr('id') ) {\n\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-single-type']\" ).hide();\n\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-all-types']\" ).show();\n } else if ( 'expiry-single-type' === $(this).attr('id') ) {\n\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-all-types']\" ).hide();\n\t\t\t\t\texpirySettingsForm.find( \"[data='expiry-single-type']\" ).show();\n }\n\t\t\t});\n\n return this;\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n\n\t\tupdateTabSize: function() {\n\t\t\tlet jq = $( '#wphb-server-instructions-' + this.selectedServer.toLowerCase() ).find( '.tabs' ),\n current = jq.find('.tab > input:checked').parent(),\n\t\t\t\tcontent = current.find('.content');\n\n\t\t\tjq.height( content.outerHeight() + current.outerHeight() - 6 );\n },\n\n hideCurrentInstructions: function() {\n let selected = this.selectedServer;\n if ( this.$serverInstructions[ selected ] ) {\n this.$serverInstructions[ selected ].hide();\n }\n },\n\n showServerInstructions: function( server ) {\n if ( typeof this.$serverInstructions[ server ] !== 'undefined' ) {\n let serverTab = this.$serverInstructions[ server ];\n\t\t\t\tserverTab.show();\n // Show tab.\n\t\t\t\tserverTab.find('.tab:first-child > label').trigger('click');\n }\n\n if ( 'apache' === server || 'LiteSpeed' === server ) {\n $( '.enable-cache-wrap-' + server ).show();\n }\n else {\n $( '#enable-cache-wrap' ).hide();\n }\n },\n\n reloadSnippets: function() {\n let self = this;\n let stop = false;\n\n for ( let i in self.$snippets ) {\n if ( self.$snippets.hasOwnProperty( i ) ) {\n Fetcher.caching.reloadSnippets( i )\n .then( ( response ) => {\n if ( stop ) {\n return;\n }\n\n self.$snippets[response.type].text( response.code );\n\n // Make sure that we only do things when server displayed is the processed one\n if ( response.type !== self.selectedServer ) {\n return;\n }\n\n if ( 'apache' === response.type && response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ( 'apache' === response.type && self.strings.cacheEnabled && ! response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-error' ).show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $( '#wphb-notice-code-snippet-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n });\n }\n }\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-caching.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.cloudflare = {\n module: 'cloudflare',\n $cfSelector: false,\n $spinner: false,\n\n init: function () {\n this.$spinner = $('.wphb-spinner');\n this.$cfSelector = $('#wphb-caching-cloudflare-summary-set-expiry');\n let self = this;\n if ( wphb.cloudflare.is.connected ) {\n this.$cfSelector.change( function() {\n self.setExpiry.call( self, [this] );\n } );\n }\n\n return this;\n },\n\n setExpiry: function( selector ) {\n this.displaySpinner();\n const value = $(selector).val();\n Fetcher.cloudflare.setExpiration( value )\n .then( () => {\n window.location.reload();\n });\n },\n\n displaySpinner: function() {\n this.$spinner.css( 'visibility', 'visible' );\n }\n };\n}( jQuery ) );\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-cloudflare.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.DashboardCloudFlare = {\n init: function( settings ) {\n this.currentStep = settings.currentStep;\n this.data = settings;\n this.email = settings.email;\n this.apiKey = settings.apiKey;\n this.$stepsContainer = $('#cloudflare-steps');\n this.$infoBox = $( '#cloudflare-info' );\n this.$spinner = $( '.cloudflare-spinner' );\n this.$deactivateButton = $('.cloudflare-deactivate.button');\n\n this.renderStep( this.currentStep );\n\n $('body').on( 'click', '.cloudflare-clear-cache.button', function(e ) {\n e.preventDefault();\n this.purgeCache.apply( $(e.target), [this] );\n }.bind(this));\n\n },\n\n purgeCache: function( self ) {\n // Show spinner\n\t\t\tconst $button = this;\n\t\t\t$button.attr( 'disabled', true );\n\t\t\tself.showSpinner();\n\n Fetcher.cloudflare.purgeCache()\n .then( () => {\n // Show notice\n\t\t\t\t\tconst $notice = $('#wphb-notice-cloudflare-purge-cache');\n\t\t\t\t\twindow.scrollTo(0, 0);\n\t\t\t\t\t$notice.slideDown();\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t$notice.slideUp();\n\t\t\t\t\t}, 5e3);\n // Remove spinner\n\t\t\t\t\t$button.removeAttr( 'disabled' );\n\t\t\t\t\tself.hideSpinner();\n });\n },\n\n renderStep: function( step ) {\n const template = WPHB_Admin.DashboardCloudFlare.template( '#cloudflare-step-' + step );\n const content = template( this.data );\n const self = this;\n\n if ( content ) {\n this.currentStep = step;\n this.$stepsContainer\n .hide()\n .html( template( this.data ) )\n .fadeIn()\n .find( 'form' )\n .on( 'submit', function( e ) {\n e.preventDefault();\n self.submitStep.call( self, $(this) );\n });\n\n this.$spinner = this.$stepsContainer.find( '.cloudflare-spinner' );\n }\n\n this.bindEvents();\n },\n\n bindEvents: function() {\n const $howToInstructions = $('#cloudflare-how-to');\n\n $howToInstructions.hide();\n\n $('#cloudflare-how-to-title > a').click( function( e ) {\n e.preventDefault();\n $howToInstructions.toggle();\n });\n\n this.$stepsContainer.find( 'select' ).each( function() {\n\t\t\t\twindow.WDP.wpmuSelect( this );\n });\n\n if ( 'final' === this.currentStep ) {\n this.$deactivateButton.removeClass( 'hidden' );\n } else {\n this.$deactivateButton.addClass( 'hidden' );\n }\n },\n\n emptyInfoBox: function() {\n this.$infoBox.html('');\n this.$infoBox.removeClass();\n },\n\n showInfoBox: function( message ) {\n this.$infoBox.addClass( 'wphb-notice' );\n this.$infoBox.addClass( 'wphb-notice-error' );\n this.$infoBox.html( message + '' );\n },\n\n showSpinner: function() {\n this.$spinner.css( 'visibility', 'visible' );\n },\n\n hideSpinner: function() {\n this.$spinner.css( 'visibility', 'hidden' );\n },\n\n submitStep: function( $form ) {\n\t\t\tconst self = this;\n\n\t\t\t$form.find( 'input[type=submit]' ).attr( 'disabled', 'true' );\n\t\t\tthis.emptyInfoBox();\n\t\t\tthis.showSpinner();\n\n\t\t\tFetcher.cloudflare.connect( this.currentStep, $form.serialize(), this.data )\n .then( ( response ) => {\n\t\t\t\t\tself.data = response.newData;\n\t\t\t\t\tself.renderStep( response.nextStep );\n\n\t\t\t\t\tif ( response.nextStep === 'final' ) {\n\t\t\t\t\t\twindow.location.href = response.redirect;\n\t\t\t\t\t}\n })\n\t\t\t\t.catch( ( error ) => {\n\t\t\t\t\tself.showInfoBox( error );\n\t\t\t\t});\n\n\t\t\t$form.find( 'input[type=submit]' ).removeAttr( 'disabled' );\n\t\t\tself.hideSpinner();\n }\n };\n\n WPHB_Admin.DashboardCloudFlare.template = _.memoize(function ( id ) {\n let compiled,\n options = {\n evaluate: /<#([\\s\\S]+?)#>/g,\n interpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n escape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n variable: 'data'\n };\n\n return function ( data ) {\n _.templateSettings = options;\n compiled = compiled || _.template( $( id ).html() );\n return compiled( data );\n };\n });\n}(jQuery));\n\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-dashboard-cloudflare.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.dashboard = {\n module: 'dashboard',\n\n init: function() {\n const self = this;\n\n\t\t\tif (wphbDashboardStrings)\n\t\t\t\tthis.strings = wphbDashboardStrings;\n\n $('#wphb-activate-minification').change( function() {\n const value = $(this).val();\n Fetcher.dashboard.toggleMinification( value )\n .then( () => {\n // If disabled, uncheck CDN checkbox and disable it.\n const CDNcheckbox = $('input[name=\"use_cdn\"]');\n if ( 'false' === value ) {\n CDNcheckbox.prop( 'checked', false );\n CDNcheckbox.prop( 'disabled', true );\n } else {\n CDNcheckbox.prop( 'disabled', false );\n }\n self.showNotice();\n });\n });\n\n $('#use_cdn').change( function() {\n const value = $(this).is(':checked');\n Fetcher.minification.toggleCDN( value )\n .then( () => {\n self.showNotice();\n });\n });\n\n $('.wphb-performance-report-item').click( function() {\n const url = $(this).data( 'performance-url' );\n if ( url ) {\n location.href = url;\n }\n });\n return this;\n },\n\n /**\n * Notice on settings update.\n */\n showNotice: function () {\n const notice = $('#wphb-notice-minification-settings-updated');\n notice.slideDown();\n setTimeout( function() {\n notice.slideUp();\n }, 5000 );\n },\n\n\t\t/**\n * Run quick setup.\n\t\t */\n\t\tstartQuickSetup: function () {\n // Show quick setup modal\n\t\t\twindow.WDP.showOverlay( '#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' } );\n },\n\n\t\t/**\n * Skip quick setup.\n\t\t */\n\t\tskipSetup: function () {\n Fetcher.dashboard.skipSetup()\n .then( () => {\n window.location.reload(true);\n });\n },\n\n\t\t/**\n * Run performance test after quick setup.\n\t\t */\n\t\trunPerformanceTest: function() {\n\t\t\t// Show quick setup modal\n\t\t\twindow.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n\n\t\t\t// Run performance test\n\t\t\tconst module = window.WPHB_Admin.getModule('performance');\n\t\t\tmodule.performanceTest( this.strings.finishedTestURLsLink );\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-dashboard.js","import Fetcher from './utils/fetcher';\n\n(function($) {\n WPHB_Admin.gzip = {\n module: \"gzip\",\n selectedServer: \"\",\n $serverSelector: null,\n $serverInstructions: [],\n\n init: function() {\n const self = this;\n\n this.$serverSelector = $(\"#wphb-server-type\");\n this.selectedServer = this.$serverSelector.val();\n let instructionsList = $(\".wphb-server-instructions\");\n instructionsList.each(function() {\n self.$serverInstructions[$(this).data(\"server\")] = $(this);\n });\n this.showServerInstructions(this.selectedServer);\n this.$serverSelector.change(function() {\n const value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n $(\"#toggle-apache-instructions\").click(function(e) {\n e.preventDefault();\n $(\".apache-instructions\").toggle();\n });\n $(\"#toggle-litespeed-instructions\").click(function(e) {\n e.preventDefault();\n $(\".litespeed-instructions\").toggle();\n });\n return this;\n },\n\n hideCurrentInstructions: function() {\n const selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function(server) {\n if (typeof this.$serverInstructions[server] !== \"undefined\") {\n this.$serverInstructions[server].show();\n }\n if (\"apache\" === server || 'LiteSpeed' === server) {\n $(\"#enable-cache-wrap\").show();\n } else {\n $(\"#enable-cache-wrap\").hide();\n }\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n };\n})(jQuery);\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-gzip.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n 'use strict';\n\n let WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function() {\n\n // Mobile navigation links.\n\t\t\t$('body').on('change', '.mobile-nav', function () {\n\t\t\t\tlet url = $(this).val();\n\t\t\t\tif (url.length > 0) {\n\t\t\t\t\tlocation.href = url;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Dismiss notice via an ajax call.\n\t\t\t$('#wphb-dismissable').on('click', '.close', function() {\n\t\t\t const notice_id = $(this).parent().attr('data-id');\n\t\t\t Fetcher.notice.dismiss( notice_id );\n });\n\n function updatePerformanceGraph($wrap){\n let $item = $wrap.find('.wphb-score-result-label'),\n val = parseInt($item.text(), 10) || 100,\n $circle = $wrap.find(\".wphb-score-graph-result\"),\n r, c, pct\n ;\n r = $circle.attr('r');\n c = Math.PI*(r*2);\n\n if (val < 0) { val = 0;}\n if (val > 100) { val = 100;}\n\n pct = ((100-val)/100)*c;\n\n $circle.css({ strokeDashoffset: pct});\n }\n\n function updatePerformanceResultsGraphs(){\n\n // Update Overall Score\n $(\".wphb-performance-report-overall-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n // Update Current Score\n $(\".wphb-performance-report-current-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n // Update All Scores\n $(\".wphb-performance-report-item-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n }\n window.register_events_performance = function(){\n setTimeout(updatePerformanceResultsGraphs, 500);\n };\n $(function(){ setTimeout(updatePerformanceResultsGraphs, 500); });\n\n },\n initModule: function( module ) {\n if ( this.hasOwnProperty( module ) ) {\n this.modules[ module ] = this[ module ].init();\n return this.modules[ module ];\n }\n\n return {};\n },\n getModule: function( module ) {\n if ( typeof this.modules[ module ] !== 'undefined' )\n return this.modules[ module ];\n else\n return this.initModule( module );\n }\n };\n \n\n WPHB_Admin.utils = {\n\n membershipModal: {\n open: function() {\n $( '#wphb-upgrade-membership-modal-link').trigger( 'click' );\n }\n },\n\n post: function( data, module ) {\n data.action = 'wphb_ajax';\n data.module = module;\n return $.ajax({\n url: ajaxurl,\n method: 'POST',\n data: data\n });\n }\n };\n\n WPHB_Admin.notices = {\n\n init: function() {\n $( '.wphb-notice:not(.notice) a.wphb-dismiss').click( function( e ) {\n e.preventDefault();\n let id = $(this).data( 'id' );\n let nonce = $(this).data( 'nonce' );\n\n $(this).parent( '.error' ).hide();\n });\n }\n };\n\n window.WPHB_Admin = WPHB_Admin;\n\n}( jQuery ) );\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-main.js","import Fetcher from './utils/fetcher';\nimport { __, getLink } from './utils/helpers';\nimport Row from './minification/Row';\nimport RowsCollection from './minification/RowsCollection';\nimport Scanner from './minification/Scanner';\n\n( function( $ ) {\n 'use strict';\n\n WPHB_Admin.minification = {\n\n $checkFilesButton: null,\n $checkFilesResultsContainer : null,\n module: 'minification',\n checkURLSList: null,\n checkedURLS: 0,\n $spinner: null,\n\n init: function() {\n const self = this;\n\n // Init files scanner\n this.scanner = new Scanner( wphb.minification.get.totalSteps, wphb.minification.get.currentScanStep );\n this.scanner.onFinishStep = this.updateProgressBar;\n this.scanner.onFinish = ( response ) => {\n this.updateProgressBar( 100 );\n if ( wphb.minification.get.showCDNModal && true === response.show_cdn && $('#enable-cdn-modal').length ) {\n window.WDP.showOverlay( '#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' } );\n } else {\n window.location.href = getLink( 'minification' );\n }\n };\n\n\n // Check files button\n this.$checkFilesButton = $( '#check-files' );\n this.$disableMinification = $('#wphb-disable-minification');\n this.$spinner = $('.spinner');\n\n if ( this.$checkFilesButton.length ) {\n this.$checkFilesButton.click( function( e ) {\n e.preventDefault();\n\t\t\t\t\twindow.WDP.showOverlay(\"#check-files-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n $(this).attr('disabled', true);\n self.updateProgressBar( self.scanner.getProgress() );\n self.scanner.scan();\n });\n }\n\n // Cancel scan button\n $('body').on( 'click', '#cancel-minification-check', ( e ) => {\n e.preventDefault();\n this.updateProgressBar( 0, true );\n this.scanner.cancel()\n .then( () => {\n window.location.href = getLink( 'minification' );\n });\n\n });\n\n // Filter action button on Minification page\n $('#wphb-minification-filter-button').on('click', function(e) {\n e.preventDefault();\n $('#wphb-minification-filter').toggle('slow');\n });\n\n $('.wphb-discard').click( function(e) {\n e.preventDefault();\n\n if ( confirm( __( 'discardAlert' ) ) ) {\n location.reload();\n }\n return false;\n\n });\n\n $( '.wphb-enqueued-files input' ).on( 'change', function() {\n $('.wphb-discard').attr( 'disabled', false );\n });\n\n $('#use_cdn').change( function() {\n const cdn_value = $(this).is(':checked');\n Fetcher.minification.toggleCDN( cdn_value )\n .then( () => {\n const notice = $('#wphb-notice-minification-advanced-settings-updated');\n notice.slideDown();\n setTimeout( function() {\n notice.slideUp();\n }, 5000 );\n });\n });\n\n this.$disableMinification.change( function() {\n const value = $(this).is(':checked');\n\n self.$spinner.css( 'visibility', 'visible' );\n\n if ( self.timer && value ) {\n clearTimeout( self.timer );\n self.$spinner.css( 'visibility', 'hidden' );\n }\n\n self.timer = setTimeout( function() {\n Fetcher.minification.toggleMinification( value )\n .then( () => {\n location.reload();\n });\n }, 3000 );\n\n\n });\n\n this.rowsCollection = new WPHB_Admin.minification.RowsCollection();\n\n const rows = $('.wphb-border-row');\n\n rows.each( function( index, row ) {\n let _row;\n if ( $(row).data('filter-secondary') ) {\n _row = new WPHB_Admin.minification.Row( $(row), $(row).data('filter'), $(row).data('filter-secondary') );\n }\n else {\n _row = new WPHB_Admin.minification.Row( $(row), $(row).data('filter') );\n }\n self.rowsCollection.push( _row );\n });\n\n $('#wphb-s').keyup( function() {\n self.rowsCollection.addFilter( $(this).val(), 'primary' );\n self.rowsCollection.applyFilters();\n });\n\n $('#wphb-secondary-filter').change( function() {\n self.rowsCollection.addFilter( $(this).val(), 'secondary' );\n self.rowsCollection.applyFilters();\n });\n\n $('.filter-toggles').change( function() {\n const element = $(this);\n const what = element.data('toggles');\n const value = element.prop( 'checked' );\n const visibleItems = self.rowsCollection.getVisibleItems();\n\n for ( let i in visibleItems ) {\n visibleItems[i].change( what, value );\n }\n });\n\n // Files selectors\n const filesList = $('input.wphb-minification-file-selector');\n filesList.click( function() {\n const $this = $( this );\n const element = self.rowsCollection.getItemById( $this.data( 'type' ), $this.data( 'handle' ) );\n if ( ! element ) {\n return;\n }\n\n if ( $this.is( ':checked' ) ) {\n element.select();\n }\n else {\n element.unSelect();\n }\n });\n\n const selectAll = $('#minification-bulk-file');\n selectAll.click( function() {\n const $this = $( this );\n let items = self.rowsCollection.getItems();\n for ( let i in items ) {\n if ( items.hasOwnProperty( i ) ) {\n if ( $this.is( ':checked' ) ) {\n items[i].select();\n }\n else {\n items[i].unSelect();\n }\n }\n }\n });\n\n // Include/exclude file checkbox\n $('.toggle-cross').on('click', function() {\n const $this = $(this);\n const checkbox = $this.find( 'input.toggle-include' );\n const row = self.rowsCollection.getItemById( $this.data( 'type' ), $this.data( 'handle' ) );\n // Mark the item as include or not in the rows list\n if ( row ) {\n row.change( 'include', ! checkbox.prop( 'checked' ) );\n row.getElement().find( 'input:not(.toggle-include)' ).prop('disabled', ! checkbox.prop( 'checked' ) );\n }\n });\n\n // Handle two CDN checkboxes on Minification page\n const checkboxes = $(\"input[type=checkbox][name=use_cdn]\");\n checkboxes.change( function() {\n const checkedState = $(this).prop('checked');\n\n checkboxes.each( function() {\n this.checked = checkedState;\n });\n });\n\n /* Show details of minification row on mobile devices */\n $('body').on('click', '.wphb-minification-file-details', function() {\n if ( window.innerWidth < 783 ) {\n $(this).parent().find('.wphb-minification-row-details').toggle('slow');\n }\n });\n\n /*\n Catch window resize and revert styles for responsive divs\n 1/4 of a second should be enough to trigger during device rotations (from portrait to landscape mode)\n */\n let minification_resize_rows = _.debounce(function() {\n\n if ( window.innerWidth >= 783 ) {\n $('.wphb-minification-row-details').css('display', 'flex');\n } else {\n $('.wphb-minification-row-details').css('display', 'none');\n }\n\n }, 250);\n\n window.addEventListener('resize', minification_resize_rows);\n\n return this;\n },\n\n updateProgressBar: function( progress, cancel = false ) {\n if ( progress > 100 ) {\n progress = 100;\n }\n // Update progress bar\n $('.wphb-scan-progress .wphb-scan-progress-text span').text( progress + '%' );\n $('.wphb-scan-progress .wphb-scan-progress-bar span').width( progress + '%' );\n if ( progress >= 90 ) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Finalizing...');\n }\n if ( cancel ) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Cancelling...');\n }\n },\n\n }; // End WPHB_Admin.minification\n\n WPHB_Admin.minification.Row = Row;\n WPHB_Admin.minification.RowsCollection = RowsCollection;\n\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-minification.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n 'use strict';\n WPHB_Admin.performance = {\n\n module: 'performance',\n iteration: 0,\n progress: 0,\n\n init: function () {\n\n let self = this;\n let body = $('body');\n\n if (wphbPerformanceStrings)\n this.strings = wphbPerformanceStrings;\n\n this.$runTestButton = $('#run-performance-test');\n\n let performanceReportTable = $(\".performance-report-table\");\n\n performanceReportTable.off('click', 'button');\n performanceReportTable.on('click', '.wphb-performance-report-item-cta .additional-content-opener' && 'tr.wphb-performance-report-item', function (e) {\n e.preventDefault();\n\n let getParentPerformanceItem = $(this).closest(\".wphb-performance-report-item\"),\n getNextAdditionalContentRow = getParentPerformanceItem.nextUntil(\".wphb-performance-report-item\");\n\n getNextAdditionalContentRow.toggleClass(\"wphb-performance-report-item-additional-content-opened\");\n\n if (getNextAdditionalContentRow.hasClass(\"wphb-performance-report-item-additional-content-opened\")) {\n getParentPerformanceItem.addClass(\"wphb-performance-report-item-opened\");\n } else {\n getParentPerformanceItem.removeClass(\"wphb-performance-report-item-opened\");\n }\n\n });\n\n if (this.$runTestButton.length) {\n this.$runTestButton.click(function (e) {\n e.preventDefault();\n\t\t\t\t\twindow.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n $(this).attr('disabled', true);\n self.performanceTest(self.strings.finishedTestURLsLink);\n });\n }\n\n // If a hash is present in URL, let's open the rule extra content\n const hash = window.location.hash;\n if (hash) {\n const row = $(hash);\n if (row.length) {\n row.find('.trigger-additional-content').trigger('click');\n }\n\n }\n\n // Schedule show/hide day of week\n $('select[name=\"email-frequency\"]').change(function () {\n if ( '1' === $(this).val() ) {\n $(this).closest('.schedule-box').find('div.days-container').hide();\n } else {\n $(this).closest('.schedule-box').find('div.days-container').show();\n }\n }).change();\n\n // Remove recipient\n body.on('click', '.wphb-remove-recipient', function (e) {\n e.preventDefault();\n $(this).closest('.recipient').remove();\n $('.scan-settings').find(\"input[id='scan_recipient'][value=\" + $(this).attr('data-id') + \"]\").remove();\n });\n\n // Add recipient\n $('#add-receipt').click(function () {\n const email = $(\"#wphb-username-search\").val();\n const name = $(\"#wphb-first-name\").val();\n Fetcher.performance.addRecipient( email, name )\n .then( ( response ) => {\n const user_row = $('<div class=\"recipient\"/>');\n\n const img = $('<img/>').attr({\n 'src': response.avatar,\n 'width': '30'\n });\n const name = $('<span/>').html(response.name);\n\n user_row.append('<span class=\"name\"/>');\n user_row.find('.name').append( img, name);\n\n\n user_row.append($('<span class=\"email\"/>').html(email));\n user_row.append($('<a/>').attr({\n 'data-id': response.user_id,\n 'class': 'remove float-r wphb-remove-recipient',\n 'href': '#',\n 'alt': self.strings.removeButtonText\n }).html('<i class=\"dev-icon dev-icon-cross\"></i>'));\n\n $('<input>').attr({\n type: 'hidden',\n id: 'scan_recipient',\n name: 'email-recipients[]',\n value: JSON.stringify( { email: response.email, name: response.name } )\n }).appendTo(user_row);\n\n $('.receipt .recipients').append(user_row);\n $(\"#wphb-username-search\").val('');\n $(\"#wphb-first-name\").val('');\n })\n .catch( ( error ) => {\n alert( error.message );\n } );\n return false;\n });\n\n // Save report settings\n body.on('submit', '.scan-frm', function (e) {\n e.preventDefault();\n const form_data = $(this).serialize();\n let that = $(this);\n\n that.find('.button').attr('disabled', 'disabled');\n\n Fetcher.performance.saveReportsSettings( form_data )\n .then( () => {\n that.find('.button').removeAttr('disabled');\n self.showUpdateMessage();\n });\n return false;\n });\n\n return this;\n\n },\n\n showUpdateMessage: function () {\n const notice = $('#wphb-notice-performance-report-settings-updated');\n window.scrollTo(0,0);\n notice.slideDown();\n setTimeout( function() {\n notice.slideUp();\n }, 5000 );\n },\n\n\t\tperformanceTest: function ( redirect ) {\n\t\t\tconst self = this;\n\n if ( typeof redirect === 'undefined' )\n redirect = false;\n\n // Update progress bar\n self.updateProgressBar();\n\n Fetcher.performance.runTest()\n .then( ( response ) => {\n\t\t\t\t\tif ( ! response.finished ) {\n\t\t\t\t\t\t// Try again 5 seconds later\n\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\tself.performanceTest( redirect );\n\t\t\t\t\t\t}, 5000);\n\t\t\t\t\t} else if ( redirect ) {\n window.location = redirect;\n\t\t\t\t\t}\n });\n },\n\n updateProgressBar: function() {\n\t\t\tif ( this.progress < 90 ) {\n\t\t\t\tthis.progress += 35;\n\t\t\t}\n\t\t\tif ( this.progress > 100 ) {\n\t\t\t\tthis.progress = 90;\n\t\t\t}\n\t\t\t$('.wphb-scan-progress .wphb-scan-progress-text span').text( this.progress + '%' );\n\t\t\t$('.wphb-scan-progress .wphb-scan-progress-bar span').attr( 'style', 'width:' + this.progress + '%' );\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-performance.js","( function( $ ) {\n WPHB_Admin.uptime = {\n module: 'uptime',\n $dataRangeSelector: null,\n chartData: null,\n timer:null,\n $spinner: null,\n init: function() {\n this.$spinner = $('.spinner');\n this.strings = wphbUptimeStrings;\n this.$dataRangeSelector = $( '#wphb-uptime-data-range' );\n this.chartData = $('#uptime-chart-json').val();\n this.$disableUptime = $('#wphb-disable-uptime');\n\n this.$dataRangeSelector.change( function() {\n window.location.href = $(this).find( ':selected' ).data( 'url' );\n });\n\n var self = this;\n this.$disableUptime.change( function() {\n self.$spinner.css( 'visibility', 'visible' );\n var value = $(this).is(':checked');\n if ( value && self.timer ) {\n clearTimeout( self.timer );\n self.$spinner.css( 'visibility', 'hidden' );\n }\n else {\n // you have 3 seconds to change your mind\n self.timer = setTimeout( function() {\n location.href = self.strings.disableUptimeURL;\n }, 3000 );\n }\n\n return;\n });\n\n this.drawChart();\n\n /* Re-check Uptime status */\n $('#uptime-re-check-status').on( 'click', function(e){\n e.preventDefault();\n location.reload();\n });\n },\n\n drawChart: function() {\n var data = new google.visualization.DataTable();\n data.addColumn('datetime', 'Day');\n data.addColumn('number', 'Response Time (ms)');\n\n var chart_array = JSON.parse( this.chartData );\n for (var i = 0; i < chart_array.length; i++) {\n chart_array[i][0] = new Date( chart_array[i][0] );\n chart_array[i][1] = Math.round( chart_array[i][1] );\n\n /* brings the graph below the x axis */\n if ( Math.round( chart_array[i][1] ) == 0 ) {\n chart_array[i][1] = -100;\n }\n\n }\n\n data.addRows(chart_array);\n\n var options = {\n chartArea: {\n left: 80,\n top: 20,\n width: '90%',\n height: '90%'\n },\n colors: ['#24ADE5'],\n curveType: 'function',\n /*interpolateNulls: true,*/\n legend: { position: 'none' },\n vAxis: {\n format: '#,### ms',\n viewWindow: { min: 0 } /* don't display negative values */\n },\n tooltip: { isHtml: true },\n series: {\n 0: { axis: 'Resp' }\n },\n axes: {\n y: {\n Resp: { label: 'Response Time (ms)' }\n }\n }\n };\n\n var chart = new google.visualization.LineChart(document.getElementById('uptime-chart'));\n chart.draw(data, options);\n\n $(window).resize(function(){\n chart.draw(data, options);\n });\n }\n };\n}(jQuery));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-uptime.js","require('./admin-main.js');\nrequire('./admin-performance.js');\nrequire('./admin-gzip.js');\nrequire('./admin-caching.js');\nrequire('./admin-minification.js');\nrequire('./admin-dashboard.js');\nrequire('./admin-dashboard-cloudflare.js');\nrequire('./admin-uptime.js');\nrequire('./admin-cloudflare.js');\nrequire('./admin-app.js');\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/index.js","const Row = ( _element, _filter, _filter_sec ) => {\n let $el = _element,\n filter = _filter.toLowerCase(),\n filterSecondary = false,\n selected = false,\n visible = true;\n\n const $include = $el.find( '.toggle-include' ),\n $combine = $el.find( '.toggle-combine' ),\n $minify = $el.find( '.toggle-minify' ),\n $posFooter = $el.find( '.toggle-position-footer' ),\n $defer = $el.find( '.toggle-defer' ),\n $disableIcon = $el.find( '.toggle-cross > i' );\n\n if ( _filter_sec ) {\n filterSecondary = _filter_sec.toLowerCase();\n }\n\n return {\n hide: function() {\n $el.addClass( 'out-of-filter' );\n visible = false;\n },\n\n show: function() {\n $el.removeClass( 'out-of-filter' );\n visible = true;\n },\n\n getElement: function() {\n return $el;\n },\n\n getId: function() {\n return $el.attr( 'id' );\n },\n\n getFilter: function() {\n return filter;\n },\n\n matchFilter: function( text ) {\n if ( text === '' ) {\n return true;\n }\n\n text = text.toLowerCase();\n return filter.search( text ) > - 1;\n },\n\n matchSecondaryFilter: function( text ) {\n if ( text === '' ) {\n return true;\n }\n\n if ( ! filterSecondary ) {\n return false;\n }\n\n text = text.toLowerCase();\n return filterSecondary === text;\n },\n\n isVisible: function() {\n return visible;\n },\n\n isSelected: function() {\n return selected;\n },\n\n select: function() {\n selected = true;\n },\n\n unSelect: function() {\n selected = false;\n },\n\n change: function( what, value ) {\n switch ( what ) {\n case 'minify': {\n $minify.prop( 'checked', value );\n break;\n }\n case 'combine': {\n $combine.prop( 'checked', value );\n break;\n }\n case 'defer': {\n $defer.prop( 'checked', value );\n break;\n }\n case 'include': {\n $disableIcon.removeClass();\n $include.prop( 'checked', value );\n if ( value ) {\n $el.removeClass( 'disabled' );\n $disableIcon.addClass( 'dev-icon dev-icon-cross' );\n $include.attr( 'checked', true );\n } else {\n $el.addClass( 'disabled' );\n $disableIcon.addClass( 'wdv-icon wdv-icon-refresh' );\n $include.removeAttr( 'checked' );\n }\n break;\n }\n case 'footer': {\n $posFooter.prop( 'checked', value );\n break;\n }\n }\n }\n\n };\n};\n\nexport default Row;\n\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/minification/Row.js","const RowsCollection = () => {\n let items = [];\n let currentFilter = '';\n let currentSecondaryFilter = '';\n\n return {\n push: function( row ) {\n if ( typeof row === 'object' ) {\n items.push( row );\n }\n },\n\n getItems: function() {\n return items;\n },\n\n getItem: function( i ) {\n if ( items[i] ) {\n return items[i];\n }\n return false;\n },\n\n /**\n * Get a collection item by type and ID\n * @param type\n * @param id\n */\n getItemById: function( type, id ) {\n let value = false;\n for ( let i in items ) {\n if ( 'wphb-file-' + type + '-' + id === items[i].getId() ) {\n value = items[i];\n break;\n }\n }\n return value;\n },\n\n getVisibleItems: function() {\n let visible = [];\n for ( let i in items ) {\n if ( items[i].isVisible() ) {\n visible.push( items[i] );\n }\n }\n return visible;\n },\n\n getSelectedItems: function() {\n let selected = [];\n\n for ( let i in items ) {\n if ( items[i].isVisible() && items[i].isSelected() ) {\n selected.push( items[i] );\n }\n }\n\n return selected;\n },\n\n addFilter: function( filter, type ) {\n if ( type === 'secondary' ) {\n currentSecondaryFilter = filter;\n }\n else {\n currentFilter = filter;\n }\n },\n\n applyFilters: function() {\n for ( let i in items ) {\n if ( items[i] ) {\n if ( items[i].matchFilter( currentFilter ) && items[i].matchSecondaryFilter( currentSecondaryFilter ) ) {\n items[i].show();\n }\n else {\n items[i].hide();\n }\n }\n\n }\n }\n };\n};\n\nexport default RowsCollection;\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/minification/RowsCollection.js","import Fetcher from '../utils/fetcher';\n\nconst MinificationScanner = ( totalSteps, currentStep ) => {\n\n totalSteps = parseInt( totalSteps );\n currentStep = parseInt( currentStep );\n let cancelling = false;\n\n let obj = {\n scan: function() {\n let remainingSteps = totalSteps - currentStep;\n if ( currentStep !== 0 ) {\n // Scan started on a previous pageload\n step( remainingSteps );\n }\n else {\n Fetcher.minification.startCheck()\n .then( () => {\n step( remainingSteps );\n });\n }\n\n },\n cancel: function() {\n cancelling = true;\n return Fetcher.minification.cancelScan();\n },\n getProgress: function() {\n if ( cancelling ) {\n return 0;\n }\n const remainingSteps = totalSteps - currentStep;\n return Math.min( Math.round( ( parseInt( ( totalSteps - remainingSteps ) ) * 100 ) / totalSteps ), 99 );\n },\n // Overridable functions\n onFinishStep: function( progress ) {},\n onFinish: function( response ) {},\n };\n\n /**\n * Execute a scan step recursively\n *\n * Private to avoid overrdings\n *\n * @param remainingSteps\n */\n const step = function( remainingSteps ) {\n if ( remainingSteps >= 0 ) {\n currentStep = totalSteps - remainingSteps;\n Fetcher.minification.checkStep( currentStep )\n .then( () => {\n remainingSteps = remainingSteps - 1;\n obj.onFinishStep( obj.getProgress() );\n step( remainingSteps );\n });\n }\n else {\n Fetcher.minification\n .finishCheck()\n .then( obj.onFinish );\n }\n };\n\n return obj;\n};\n\nexport default MinificationScanner;\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/minification/Scanner.js","/*!\n * clipboard.js v1.7.1\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n},{}],2:[function(require,module,exports){\nvar closest = require('./closest');\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n},{}],4:[function(require,module,exports){\nvar is = require('./is');\nvar delegate = require('delegate');\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n},{}],6:[function(require,module,exports){\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n},{}],7:[function(require,module,exports){\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'select'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('select'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.select);\n global.clipboardAction = mod.exports;\n }\n})(this, function (module, _select) {\n 'use strict';\n\n var _select2 = _interopRequireDefault(_select);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n },\n get: function get() {\n return this._action;\n }\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n },\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n }();\n\n module.exports = ClipboardAction;\n});\n\n},{\"select\":5}],8:[function(require,module,exports){\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n global.clipboard = mod.exports;\n }\n})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n 'use strict';\n\n var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n var _goodListener2 = _interopRequireDefault(_goodListener);\n\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n }\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n\n var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n function _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n }\n\n function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n }\n\n var Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n }, {\n key: 'defaultText',\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n }(_tinyEmitter2.default);\n\n /**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n function getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n }\n\n module.exports = Clipboard;\n});\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/utils/clipboard.js","/**\n * Strings internationalization\n *\n * @param str\n *\n * @returns {*|string}\n */\nexport const __ = ( str ) => {\n return wphb.strings[ str ] || '';\n};\n\n/**\n * Get a link to a HB screen\n *\n * @param {string} screen Screen slug\n * @returns {string}\n */\nexport const getLink = ( screen ) => {\n return wphb.links[ screen ] || '';\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/utils/helpers.js","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 4.1.1\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator$1(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nEnumerator$1.prototype._enumerate = function (input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n};\n\nEnumerator$1.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$2) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n};\n\nEnumerator$1.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator$1.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all$1(entries) {\n return new Enumerator$1(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race$1(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise$2(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise$2.all = all$1;\nPromise$2.race = race$1;\nPromise$2.resolve = resolve$1;\nPromise$2.reject = reject$1;\nPromise$2._setScheduler = setScheduler;\nPromise$2._setAsap = setAsap;\nPromise$2._asap = asap;\n\nPromise$2.prototype = {\n constructor: Promise$2,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\n/*global self*/\nfunction polyfill$1() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$2;\n}\n\n// Strange compat..\nPromise$2.polyfill = polyfill$1;\nPromise$2.Promise = Promise$2;\n\nreturn Promise$2;\n\n})));\n\n//# sourceMappingURL=es6-promise.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/es6-promise/dist/es6-promise.js\n// module id = 35\n// module chunks = 0","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_apply.js\n// module id = 36\n// module chunks = 0","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arrayLikeKeys.js\n// module id = 37\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsArguments.js\n// module id = 38\n// module chunks = 0","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsNative.js\n// module id = 39\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsTypedArray.js\n// module id = 40\n// module chunks = 0","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseKeys.js\n// module id = 41\n// module chunks = 0","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseRest.js\n// module id = 42\n// module chunks = 0","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseSetToString.js\n// module id = 43\n// module chunks = 0","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseTimes.js\n// module id = 44\n// module chunks = 0","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseUnary.js\n// module id = 45\n// module chunks = 0","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_copyObject.js\n// module id = 46\n// module chunks = 0","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_coreJsData.js\n// module id = 47\n// module chunks = 0","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_createAssigner.js\n// module id = 48\n// module chunks = 0","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getNative.js\n// module id = 49\n// module chunks = 0","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getRawTag.js\n// module id = 50\n// module chunks = 0","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getValue.js\n// module id = 51\n// module chunks = 0","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isIterateeCall.js\n// module id = 52\n// module chunks = 0","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isMasked.js\n// module id = 53\n// module chunks = 0","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nativeKeys.js\n// module id = 54\n// module chunks = 0","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nodeUtil.js\n// module id = 55\n// module chunks = 0","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_objectToString.js\n// module id = 56\n// module chunks = 0","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_overArg.js\n// module id = 57\n// module chunks = 0","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_overRest.js\n// module id = 58\n// module chunks = 0","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_setToString.js\n// module id = 59\n// module chunks = 0","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_shortOut.js\n// module id = 60\n// module chunks = 0","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_toSource.js\n// module id = 61\n// module chunks = 0","var assignValue = require('./_assignValue'),\n copyObject = require('./_copyObject'),\n createAssigner = require('./_createAssigner'),\n isArrayLike = require('./isArrayLike'),\n isPrototype = require('./_isPrototype'),\n keys = require('./keys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nmodule.exports = assign;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/assign.js\n// module id = 62\n// module chunks = 0","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/constant.js\n// module id = 63\n// module chunks = 0","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArguments.js\n// module id = 64\n// module chunks = 0","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArray.js\n// module id = 65\n// module chunks = 0","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isBuffer.js\n// module id = 66\n// module chunks = 0","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isTypedArray.js\n// module id = 67\n// module chunks = 0","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/keys.js\n// module id = 68\n// module chunks = 0","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/stubFalse.js\n// module id = 69\n// module chunks = 0","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 70\n// module chunks = 0"],"sourceRoot":""}
admin/class-admin-ajax.php CHANGED
@@ -19,11 +19,11 @@ class WP_Hummingbird_Admin_AJAX {
19
  add_action( 'wp_ajax_wphb_caching_set_server_type', array( $this, 'caching_set_server_type' ) );
20
  // Reload snippet.
21
  add_action( 'wp_ajax_wphb_caching_reload_snippet', array( $this, 'caching_reload_snippet' ) );
22
- // CloudFlare connect.
23
  add_action( 'wp_ajax_wphb_cloudflare_connect', array( $this, 'cloudflare_connect' ) );
24
- // CloudFlare expirtion cache.
25
  add_action( 'wp_ajax_wphb_cloudflare_set_expiry', array( $this, 'cloudflare_set_expiry' ) );
26
- // CloudFlare purge cache.
27
  add_action( 'wp_ajax_wphb_cloudflare_purge_cache', array( $this, 'cloudflare_purge_cache' ) );
28
  // Activate network minification.
29
  add_action( 'wp_ajax_wphb_dash_toggle_network_minification', array( $this, 'dash_toggle_network_minification' ) );
@@ -41,7 +41,8 @@ class WP_Hummingbird_Admin_AJAX {
41
  add_action( 'wp_ajax_wphb_minification_cancel_scan', array( $this, 'minification_cancel_scan' ) );
42
  // Delete scan
43
  add_action( 'wp_ajax_wphb_minification_finish_scan', array( $this, 'minification_finish_scan' ) );
44
-
 
45
  }
46
 
47
  /**
@@ -365,7 +366,7 @@ class WP_Hummingbird_Admin_AJAX {
365
  }
366
 
367
  wp_send_json_success( array(
368
- 'show_cdn' => $cdn_modal
369
  ));
370
  }
371
 
@@ -382,7 +383,7 @@ class WP_Hummingbird_Admin_AJAX {
382
  }
383
 
384
  /**
385
- * Connect to CloudFlare.
386
  */
387
  public function cloudflare_connect() {
388
  check_ajax_referer( 'wphb-fetch', 'nonce' );
@@ -460,7 +461,7 @@ class WP_Hummingbird_Admin_AJAX {
460
 
461
  if ( empty( $settings['cloudflare-zone'] ) ) {
462
  wp_send_json_error( array(
463
- 'message' => __( 'Please, select a CloudFlare zone. Normally, this is your website', 'wphb' ),
464
  ));
465
  }
466
 
@@ -509,7 +510,7 @@ class WP_Hummingbird_Admin_AJAX {
509
  }
510
 
511
  /**
512
- * Set expiration for CloudFlare cache.
513
  */
514
  public function cloudflare_set_expiry() {
515
  check_ajax_referer( 'wphb-fetch', 'nonce' );
@@ -529,7 +530,7 @@ class WP_Hummingbird_Admin_AJAX {
529
  }
530
 
531
  /**
532
- * Purge CloudFlare cache.
533
  */
534
  public function cloudflare_purge_cache() {
535
  check_ajax_referer( 'wphb-fetch', 'nonce' );
@@ -545,4 +546,25 @@ class WP_Hummingbird_Admin_AJAX {
545
  wp_send_json_success();
546
  }
547
 
548
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  add_action( 'wp_ajax_wphb_caching_set_server_type', array( $this, 'caching_set_server_type' ) );
20
  // Reload snippet.
21
  add_action( 'wp_ajax_wphb_caching_reload_snippet', array( $this, 'caching_reload_snippet' ) );
22
+ // Cloudflare connect.
23
  add_action( 'wp_ajax_wphb_cloudflare_connect', array( $this, 'cloudflare_connect' ) );
24
+ // Cloudflare expirtion cache.
25
  add_action( 'wp_ajax_wphb_cloudflare_set_expiry', array( $this, 'cloudflare_set_expiry' ) );
26
+ // Cloudflare purge cache.
27
  add_action( 'wp_ajax_wphb_cloudflare_purge_cache', array( $this, 'cloudflare_purge_cache' ) );
28
  // Activate network minification.
29
  add_action( 'wp_ajax_wphb_dash_toggle_network_minification', array( $this, 'dash_toggle_network_minification' ) );
41
  add_action( 'wp_ajax_wphb_minification_cancel_scan', array( $this, 'minification_cancel_scan' ) );
42
  // Delete scan
43
  add_action( 'wp_ajax_wphb_minification_finish_scan', array( $this, 'minification_finish_scan' ) );
44
+ // Dismiss notice.
45
+ add_action( 'wp_ajax_wphb_notice_dismiss', array( $this, 'notice_dismiss' ) );
46
  }
47
 
48
  /**
366
  }
367
 
368
  wp_send_json_success( array(
369
+ 'show_cdn' => $cdn_modal,
370
  ));
371
  }
372
 
383
  }
384
 
385
  /**
386
+ * Connect to Cloudflare.
387
  */
388
  public function cloudflare_connect() {
389
  check_ajax_referer( 'wphb-fetch', 'nonce' );
461
 
462
  if ( empty( $settings['cloudflare-zone'] ) ) {
463
  wp_send_json_error( array(
464
+ 'message' => __( 'Please, select a Cloudflare zone. Normally, this is your website', 'wphb' ),
465
  ));
466
  }
467
 
510
  }
511
 
512
  /**
513
+ * Set expiration for Cloudflare cache.
514
  */
515
  public function cloudflare_set_expiry() {
516
  check_ajax_referer( 'wphb-fetch', 'nonce' );
530
  }
531
 
532
  /**
533
+ * Purge Cloudflare cache.
534
  */
535
  public function cloudflare_purge_cache() {
536
  check_ajax_referer( 'wphb-fetch', 'nonce' );
546
  wp_send_json_success();
547
  }
548
 
549
+ /**
550
+ * Dismiss notice.
551
+ *
552
+ * @since 1.6.1
553
+ */
554
+ public function notice_dismiss() {
555
+ check_ajax_referer( 'wphb-fetch', 'nonce' );
556
+
557
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
558
+ return;
559
+ }
560
+
561
+ $notice_id = sanitize_text_field( wp_unslash( $_POST['id'] ) );
562
+
563
+ //update_user_meta( get_current_user_id(), 'wphb-notice-' . $notice_id . '-dismissed', 'true' );
564
+ //delete_site_option( 'wphb-notice-' . $notice . '-show' );
565
+ update_option( 'wphb-notice-' . $notice_id . '-dismissed', 'true' );
566
+
567
+ wp_send_json_success();
568
+ }
569
+
570
+ }
admin/class-admin.php CHANGED
@@ -99,8 +99,7 @@ class WP_Hummingbird_Admin {
99
  || ( true === $minify )
100
  ) {
101
  $this->pages['wphb-minification'] = new WP_Hummingbird_Minification_Page( 'wphb-minification', __( 'Minification', 'wphb' ), __( 'Hummingbird', 'wphb' ), false );
102
- }
103
- elseif ( isset( $_GET['page'] ) && 'wphb-minification' === $_GET['page'] ) {
104
  // Minification is off, and is a network, let's redirect to network admin
105
  $url = network_admin_url( 'admin.php?page=wphb#wphb-box-dashboard-minification-network-module' );
106
  $url = add_query_arg( 'minify-instructions', 'true', $url );
@@ -108,9 +107,7 @@ class WP_Hummingbird_Admin {
108
  exit;
109
  }
110
  }
111
-
112
  }
113
-
114
  }
115
 
116
  public function add_network_menu_pages() {
@@ -164,7 +161,7 @@ class WP_Hummingbird_Admin {
164
  ?>
165
  <script>
166
  jQuery( document ).ready( function() {
167
- var module = WPHB_Admin.getModule( 'minification' );
168
  module.scanner.scan();
169
  module.minificationStarted = true;
170
  });
@@ -209,7 +206,7 @@ class WP_Hummingbird_Admin {
209
  ?>
210
  <script>
211
  jQuery( document ).ready( function() {
212
- var module = WPHB_Admin.getModule( 'performance' );
213
  module.performanceTest( '<?php echo $redirect; ?>' );
214
  });
215
  </script>
99
  || ( true === $minify )
100
  ) {
101
  $this->pages['wphb-minification'] = new WP_Hummingbird_Minification_Page( 'wphb-minification', __( 'Minification', 'wphb' ), __( 'Hummingbird', 'wphb' ), false );
102
+ } elseif ( isset( $_GET['page'] ) && 'wphb-minification' === $_GET['page'] ) {
 
103
  // Minification is off, and is a network, let's redirect to network admin
104
  $url = network_admin_url( 'admin.php?page=wphb#wphb-box-dashboard-minification-network-module' );
105
  $url = add_query_arg( 'minify-instructions', 'true', $url );
107
  exit;
108
  }
109
  }
 
110
  }
 
111
  }
112
 
113
  public function add_network_menu_pages() {
161
  ?>
162
  <script>
163
  jQuery( document ).ready( function() {
164
+ var module = window.WPHB_Admin.getModule( 'minification' );
165
  module.scanner.scan();
166
  module.minificationStarted = true;
167
  });
206
  ?>
207
  <script>
208
  jQuery( document ).ready( function() {
209
+ var module = window.WPHB_Admin.getModule( 'performance' );
210
  module.performanceTest( '<?php echo $redirect; ?>' );
211
  });
212
  </script>
admin/class-caching-page.php CHANGED
@@ -19,7 +19,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
19
  /**
20
  * Number of issues.
21
  *
22
- * If CloudFlare is enabled will calculate number of issues for it, if not - number of local issues.
23
  *
24
  * @since 1.5.3
25
  * @var int $issues Default 0.
@@ -35,7 +35,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
35
  private $expires;
36
 
37
  /**
38
- * CloudFlare status.
39
  *
40
  * @since 1.5.3
41
  * @var bool $cloudflare Default false.
@@ -44,7 +44,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
44
  private $cloudflare = false;
45
 
46
  /**
47
- * CloudFlare expiration value.
48
  *
49
  * TODO: maybe we can delete this, as it is used only once in the header of a meta box.
50
  *
@@ -55,7 +55,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
55
  private $expiration = 0;
56
 
57
  /**
58
- * WP_Hummingbird_Performance_Report_Page constructor.
59
  *
60
  * @param string $slug The slug name to refer to this menu by (should be unique for this menu).
61
  * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected.
@@ -82,9 +82,9 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
82
  );
83
 
84
  /**
85
- * Check CloudFlare status.
86
  *
87
- * If CloudFlare is active, we store the values of CLoudFlare caching settings to the report variable.
88
  * Else - we store the local setting in the report variable. That way we don't have to query and check
89
  * later on what report to show to the user.
90
  *
@@ -94,7 +94,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
94
  $this->cloudflare = wphb_cloudflare_is_active();
95
  if ( $this->cloudflare ) {
96
  $this->expiration = $cf_module->get_caching_expiration();
97
- // Fill the report with values from CloudFlare.
98
  $this->report = array_fill_keys( array_keys( $this->expires ), $this->expiration );
99
  } else {
100
  // Get latest local report.
@@ -137,7 +137,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
137
  }
138
 
139
  switch ( $type ) {
140
- // Deactivate CloudFlare.
141
  case 'cf-deactivate':
142
  wphb_cloudflare_disconnect();
143
  break;
@@ -187,11 +187,11 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
187
  </div>
188
 
189
  <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-code-snippet-htaccess-updated">
190
- <p><?php esc_html_e( 'Apache <strong>.htaccess</strong> file updated. Please, wait while Hummingbird recheck expirations...', 'wphb' ); ?></p>
191
  </div>
192
 
193
  <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-cloudflare-purge-cache">
194
- <p><?php esc_html_e( 'CloudFlare cache successfully purged. Please wait 30 seconds for the purge to complete.', 'wphb' ); ?></p>
195
  </div>
196
 
197
  <?php
@@ -228,7 +228,49 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
228
  public function register_meta_boxes() {
229
  $redirect = false;
230
 
231
- if ( isset( $_GET['enable'] ) && current_user_can( wphb_get_admin_capability() ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  // Enable caching in .htaccess (only for apache servers).
233
  $result = wphb_save_htaccess( 'caching' );
234
  if ( $result ) {
@@ -259,7 +301,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
259
  }
260
  }
261
 
262
- if ( isset( $_GET['disable'] ) && current_user_can( wphb_get_admin_capability() ) ) {
263
  // Disable caching in htaccess (only for apache servers).
264
  $result = wphb_unsave_htaccess( 'caching' );
265
  if ( $result ) {
@@ -290,13 +332,13 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
290
  }
291
  }
292
 
293
- if ( isset( $_GET['run'] ) && current_user_can( wphb_get_admin_capability() ) ) {
294
  // Force a refresh of the data.
295
  wphb_get_caching_status( true );
296
  $redirect = true;
297
  }
298
 
299
- if ( isset( $_GET['run'] ) && isset( $_GET['type'] ) ) {
300
  $this->run_actions( $_GET['type'] );
301
  }
302
 
@@ -537,7 +579,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
537
  $htaccess_written = wphb_is_htaccess_written( 'caching' );
538
  $already_enabled = $this->is_caching_fully_enabled() && ! $htaccess_written;
539
 
540
- // CloudFlare deactivate URL.
541
  $deactivate_url = add_query_arg( array(
542
  'type' => 'cf-deactivate',
543
  'run' => 'true',
@@ -554,11 +596,33 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
554
  'disable' => 'true',
555
  ));
556
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
557
  $this->view( 'caching/browser-caching-configure-meta-box', array(
558
  'results' => $this->report,
559
  'human_results' => array_map( 'wphb_human_read_time_diff', $this->report ),
560
  'expires' => $this->expires,
561
- 'server_type' => wphb_get_server_type(),
562
  'snippets' => $snippets,
563
  'htaccess_written' => $htaccess_written,
564
  'htaccess_writable' => wphb_is_htaccess_writable(),
@@ -568,6 +632,8 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
568
  'cf_disable_url' => $deactivate_url,
569
  'enable_link' => $enable_link,
570
  'disable_link' => $disable_link,
 
 
571
  ));
572
  }
573
 
@@ -632,4 +698,70 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
632
  ));
633
  }
634
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
635
  }
19
  /**
20
  * Number of issues.
21
  *
22
+ * If Cloudflare is enabled will calculate number of issues for it, if not - number of local issues.
23
  *
24
  * @since 1.5.3
25
  * @var int $issues Default 0.
35
  private $expires;
36
 
37
  /**
38
+ * Cloudflare status.
39
  *
40
  * @since 1.5.3
41
  * @var bool $cloudflare Default false.
44
  private $cloudflare = false;
45
 
46
  /**
47
+ * Cloudflare expiration value.
48
  *
49
  * TODO: maybe we can delete this, as it is used only once in the header of a meta box.
50
  *
55
  private $expiration = 0;
56
 
57
  /**
58
+ * WP_Hummingbird_Admin_Page constructor.
59
  *
60
  * @param string $slug The slug name to refer to this menu by (should be unique for this menu).
61
  * @param string $page_title The text to be displayed in the title tags of the page when the menu is selected.
82
  );
83
 
84
  /**
85
+ * Check Cloudflare status.
86
  *
87
+ * If Cloudflare is active, we store the values of CLoudFlare caching settings to the report variable.
88
  * Else - we store the local setting in the report variable. That way we don't have to query and check
89
  * later on what report to show to the user.
90
  *
94
  $this->cloudflare = wphb_cloudflare_is_active();
95
  if ( $this->cloudflare ) {
96
  $this->expiration = $cf_module->get_caching_expiration();
97
+ // Fill the report with values from Cloudflare.
98
  $this->report = array_fill_keys( array_keys( $this->expires ), $this->expiration );
99
  } else {
100
  // Get latest local report.
137
  }
138
 
139
  switch ( $type ) {
140
+ // Deactivate Cloudflare.
141
  case 'cf-deactivate':
142
  wphb_cloudflare_disconnect();
143
  break;
187
  </div>
188
 
189
  <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-code-snippet-htaccess-updated">
190
+ <p><?php esc_html_e( 'Apache .htaccess file updated. Please, wait while Hummingbird recheck expirations...', 'wphb' ); ?></p>
191
  </div>
192
 
193
  <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-cloudflare-purge-cache">
194
+ <p><?php esc_html_e( 'Cloudflare cache successfully purged. Please wait 30 seconds for the purge to complete.', 'wphb' ); ?></p>
195
  </div>
196
 
197
  <?php
228
  public function register_meta_boxes() {
229
  $redirect = false;
230
 
231
+ // Process form submit from expiry settings.
232
+ if ( isset( $_POST['submit'] ) ) { // Input var ok.
233
+
234
+ check_admin_referer( 'wphb-caching' );
235
+
236
+ if ( isset( $_POST['expiry-set-type'] ) && 'all' === sanitize_text_field( wp_unslash( $_POST['expiry-set-type'] ) ) ) { // Input var ok.
237
+ $this->caching_set_expiration( 'all', $_POST['set-expiry-all'] );
238
+ } else {
239
+ $this->caching_set_expiration( 'javascript', $_POST['set-expiry-javascript'] );
240
+ $this->caching_set_expiration( 'css', $_POST['set-expiry-css'] );
241
+ $this->caching_set_expiration( 'media', $_POST['set-expiry-media'] );
242
+ $this->caching_set_expiration( 'images', $_POST['set-expiry-images'] );
243
+ }
244
+
245
+ $response = $this->caching_reload_snippet();
246
+
247
+ $redirect_to = remove_query_arg( array(
248
+ 'run',
249
+ 'enable',
250
+ 'disable',
251
+ 'caching-updated',
252
+ 'cache-disabled',
253
+ 'htaccess-error',
254
+ ) );
255
+ if ( 'apache' === $response['type'] && $response['updatedFile'] ) {
256
+ $redirect_to = add_query_arg( array(
257
+ 'run' => true,
258
+ 'caching-updated' => true,
259
+ ), $redirect_to );
260
+ } elseif ( 'apache' === $response['type'] && ! $response['updatedFile'] ) {
261
+ $redirect_to = add_query_arg( 'htaccess-error', true, $redirect_to );
262
+ } else {
263
+ $redirect_to = add_query_arg( array(
264
+ 'run' => true,
265
+ 'caching-updated' => true,
266
+ ), $redirect_to );
267
+ }
268
+
269
+ wp_safe_redirect( $redirect_to );
270
+ exit;
271
+ } // End if().
272
+
273
+ if ( isset( $_GET['enable'] ) && current_user_can( wphb_get_admin_capability() ) ) { // Input var ok.
274
  // Enable caching in .htaccess (only for apache servers).
275
  $result = wphb_save_htaccess( 'caching' );
276
  if ( $result ) {
301
  }
302
  }
303
 
304
+ if ( isset( $_GET['disable'] ) && current_user_can( wphb_get_admin_capability() ) ) { // Input var ok.
305
  // Disable caching in htaccess (only for apache servers).
306
  $result = wphb_unsave_htaccess( 'caching' );
307
  if ( $result ) {
332
  }
333
  }
334
 
335
+ if ( isset( $_GET['run'] ) && current_user_can( wphb_get_admin_capability() ) ) { // Input var ok.
336
  // Force a refresh of the data.
337
  wphb_get_caching_status( true );
338
  $redirect = true;
339
  }
340
 
341
+ if ( isset( $_GET['run'] ) && isset( $_GET['type'] ) ) { // Input var ok.
342
  $this->run_actions( $_GET['type'] );
343
  }
344
 
579
  $htaccess_written = wphb_is_htaccess_written( 'caching' );
580
  $already_enabled = $this->is_caching_fully_enabled() && ! $htaccess_written;
581
 
582
+ // Cloudflare deactivate URL.
583
  $deactivate_url = add_query_arg( array(
584
  'type' => 'cf-deactivate',
585
  'run' => 'true',
596
  'disable' => 'true',
597
  ));
598
 
599
+ $expiry_selects = false;
600
+ // Default to show Cloudflare or Apache if set up.
601
+ $server_type = wphb_get_server_type();
602
+ if ( $this->cloudflare ) {
603
+ $server_type = 'cloudflare';
604
+ // If htaccess has been written, remove it.
605
+ if ( wphb_is_htaccess_writable() && $htaccess_written ) {
606
+ $result = wphb_unsave_htaccess( 'caching' );
607
+ if ( $result ) {
608
+ wphb_get_caching_status( true );
609
+ }
610
+ }
611
+ $expiry_selects = true;
612
+ } elseif ( wphb_is_htaccess_writable() && $htaccess_written ) {
613
+ if ( 'LiteSpeed' !== $server_type ) {
614
+ $server_type = 'apache';
615
+ }
616
+ $expiry_selects = true;
617
+ }
618
+
619
+ $all_expiry = ( count( array_unique( $this->expires ) ) === 1 );
620
+
621
  $this->view( 'caching/browser-caching-configure-meta-box', array(
622
  'results' => $this->report,
623
  'human_results' => array_map( 'wphb_human_read_time_diff', $this->report ),
624
  'expires' => $this->expires,
625
+ 'server_type' => $server_type,
626
  'snippets' => $snippets,
627
  'htaccess_written' => $htaccess_written,
628
  'htaccess_writable' => wphb_is_htaccess_writable(),
632
  'cf_disable_url' => $deactivate_url,
633
  'enable_link' => $enable_link,
634
  'disable_link' => $disable_link,
635
+ 'all_expiry' => $all_expiry,
636
+ 'expiry_selects' => $expiry_selects,
637
  ));
638
  }
639
 
698
  ));
699
  }
700
 
701
+ /**
702
+ * Set expiration for browser caching.
703
+ *
704
+ * @since 1.6.1
705
+ * @param string $type Expiry type.
706
+ * @param string $value Expiry value.
707
+ */
708
+ public function caching_set_expiration( $type, $value ) {
709
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
710
+ return;
711
+ }
712
+
713
+ $type = sanitize_text_field( wp_unslash( $type ) ); // Input var okay.
714
+ $value = sanitize_text_field( wp_unslash( $value ) ); // Input var okay.
715
+
716
+ $frequencies = wphb_get_caching_frequencies();
717
+
718
+ if ( ! isset( $frequencies[ $value ] ) ) {
719
+ die();
720
+ }
721
+
722
+ $options = wphb_get_settings();
723
+ if ( 'all' === $type ) {
724
+ $options['caching_expiry_css'] = $value;
725
+ $options['caching_expiry_javascript'] = $value;
726
+ $options['caching_expiry_media'] = $value;
727
+ $options['caching_expiry_images'] = $value;
728
+ } else {
729
+ $options[ 'caching_expiry_' . $type ] = $value;
730
+ }
731
+
732
+ wphb_update_settings( $options );
733
+ }
734
+
735
+ /**
736
+ * Reload snippet after new expiration interval has been selected.
737
+ *
738
+ * @since 1.6.1
739
+ * @return array|void
740
+ */
741
+ public function caching_reload_snippet() {
742
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
743
+ return;
744
+ }
745
+
746
+ if ( ! isset( $_POST['hb_server_type'] ) ) { // Input var okay.
747
+ die();
748
+ }
749
+
750
+ $type = sanitize_text_field( wp_unslash( $_POST['hb_server_type'] ) ); // Input var okay.
751
+
752
+ $code = wphb_get_code_snippet( 'caching', $type );
753
+
754
+ $updated_file = false;
755
+ if ( true === wphb_is_htaccess_written( 'caching' ) && 'apache' === $type ) {
756
+ $updated_file = wphb_unsave_htaccess( 'caching' );
757
+ $updated_file = wphb_save_htaccess( 'caching' );
758
+ }
759
+ $response = array(
760
+ 'type' => $type,
761
+ 'code' => $code,
762
+ 'updatedFile' => $updated_file,
763
+ );
764
+
765
+ return $response;
766
+ }
767
  }
admin/class-dashboard-page.php CHANGED
@@ -47,7 +47,7 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
47
  }
48
 
49
  if ( isset( $_GET['wphb-cache-cleared-with-cloudflare'] ) ) {
50
- $this->show_notice( 'updated', __( 'Your local and CloudFlare caches have been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
51
  }
52
  ?>
53
  <section id="header">
@@ -79,6 +79,12 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
79
  */
80
  private function run_actions( $type ) {
81
 
 
 
 
 
 
 
82
  // Check if Uptime is active in the server.
83
  if ( wphb_is_uptime_remotely_enabled() ) {
84
  wphb_uptime_enable_locally();
@@ -86,16 +92,10 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
86
  wphb_uptime_disable_locally();
87
  }
88
 
89
- check_admin_referer( 'wphb-run-dashboard' );
90
-
91
- if ( ! current_user_can( wphb_get_admin_capability() ) ) {
92
- return;
93
- }
94
-
95
  if ( 'performance' === $type ) {
96
  // Start performance test.
97
  wphb_performance_init_scan();
98
- wp_safe_redirect( remove_query_arg( array( 'run', '_wpnonce' ) ) );
99
  exit;
100
  }
101
 
@@ -130,6 +130,13 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
130
 
131
  /* Performance */
132
  $last_report = wphb_performance_get_last_report();
 
 
 
 
 
 
 
133
  if ( wphb_performance_is_doing_report() ) {
134
  $this->add_meta_box( 'dashboard/performance/running-test', __( 'Performance test in progress', 'wphb' ), null, null, null, 'box-dashboard-left' );
135
  } elseif ( ! wphb_performance_is_doing_report() && $last_report && ! is_wp_error( $last_report ) ) {
@@ -238,7 +245,7 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
238
  $uptime_report = wphb_uptime_get_last_report( 'week' );
239
  }
240
  $site_date = '';
241
- if ( wphb_is_member() && isset( $uptime_report->up_since ) ) {
242
  $gmt_date = date( 'Y-m-d H:i:s', $uptime_report->up_since );
243
  $site_date = get_date_from_gmt( $gmt_date, get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) );
244
  }
@@ -489,13 +496,11 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
489
  $report = $report->data;
490
  $viewreport_link = wphb_get_admin_menu_url( 'performance' );
491
 
492
- $settings = wphb_get_settings();
493
- if ( wphb_is_member() ) {
494
- $notifications = $settings['email-notifications'];
495
- } else {
496
- $notifications = false;
497
- }
498
-
499
 
500
  $args = compact( 'report', 'viewreport_link', 'notifications' );
501
  $this->view( 'dashboard/performance/module-meta-box', $args );
47
  }
48
 
49
  if ( isset( $_GET['wphb-cache-cleared-with-cloudflare'] ) ) {
50
+ $this->show_notice( 'updated', __( 'Your local and Cloudflare caches have been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
51
  }
52
  ?>
53
  <section id="header">
79
  */
80
  private function run_actions( $type ) {
81
 
82
+ check_admin_referer( 'wphb-run-dashboard' );
83
+
84
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
85
+ return;
86
+ }
87
+
88
  // Check if Uptime is active in the server.
89
  if ( wphb_is_uptime_remotely_enabled() ) {
90
  wphb_uptime_enable_locally();
92
  wphb_uptime_disable_locally();
93
  }
94
 
 
 
 
 
 
 
95
  if ( 'performance' === $type ) {
96
  // Start performance test.
97
  wphb_performance_init_scan();
98
+ wp_safe_redirect( remove_query_arg( array( 'run', '_wpnonce' ), wphb_get_admin_menu_url( 'performance' ) ) );
99
  exit;
100
  }
101
 
130
 
131
  /* Performance */
132
  $last_report = wphb_performance_get_last_report();
133
+
134
+ // Check to see if there's a fresh report on the server.
135
+ if ( false === $last_report ) {
136
+ wphb_performance_refresh_report();
137
+ $last_report = wphb_performance_get_last_report();
138
+ }
139
+
140
  if ( wphb_performance_is_doing_report() ) {
141
  $this->add_meta_box( 'dashboard/performance/running-test', __( 'Performance test in progress', 'wphb' ), null, null, null, 'box-dashboard-left' );
142
  } elseif ( ! wphb_performance_is_doing_report() && $last_report && ! is_wp_error( $last_report ) ) {
245
  $uptime_report = wphb_uptime_get_last_report( 'week' );
246
  }
247
  $site_date = '';
248
+ if ( wphb_is_member() && isset( $uptime_report->up_since ) && false !== $uptime_report->up_since ) {
249
  $gmt_date = date( 'Y-m-d H:i:s', $uptime_report->up_since );
250
  $site_date = get_date_from_gmt( $gmt_date, get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) );
251
  }
496
  $report = $report->data;
497
  $viewreport_link = wphb_get_admin_menu_url( 'performance' );
498
 
499
+ $settings = wphb_get_settings();
500
+ $notifications = false;
501
+ if ( wphb_is_member() && isset( $settings['email-notifications'] ) ) {
502
+ $notifications = $settings['email-notifications'];
503
+ }
 
 
504
 
505
  $args = compact( 'report', 'viewreport_link', 'notifications' );
506
  $this->view( 'dashboard/performance/module-meta-box', $args );
admin/class-gzip-page.php CHANGED
@@ -133,9 +133,12 @@ class WP_Hummingbird_GZIP_Page extends WP_Hummingbird_Admin_Page {
133
  public function gzip_summary_metabox_header() {
134
  $recheck_url = add_query_arg( 'run', 'true' );
135
  $recheck_url = remove_query_arg( 'htaccess-error', $recheck_url );
 
 
136
  $this->view( 'gzip/summary-meta-box-header', array(
137
- 'recheck_url' => $recheck_url,
138
- 'title' => __( 'Summary', 'wphb' ),
 
139
  ));
140
  }
141
 
133
  public function gzip_summary_metabox_header() {
134
  $recheck_url = add_query_arg( 'run', 'true' );
135
  $recheck_url = remove_query_arg( 'htaccess-error', $recheck_url );
136
+ $status = wphb_get_gzip_status();
137
+ $full_enabled = array_sum( $status ) === 3;
138
  $this->view( 'gzip/summary-meta-box-header', array(
139
+ 'recheck_url' => $recheck_url,
140
+ 'title' => __( 'Summary', 'wphb' ),
141
+ 'full_enabled' => $full_enabled,
142
  ));
143
  }
144
 
admin/class-minification-page.php CHANGED
@@ -73,12 +73,11 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
73
 
74
  if ( ! empty( $_POST[ $type ] ) ) {
75
  foreach ( $_POST[ $type ] as $handle => $item ) {
76
- $key = array_search( $handle, $options['block'][ $type ] );
77
 
78
  if ( ! isset( $item['include'] ) ) {
79
  $options['block'][ $type ][] = $handle;
80
- }
81
- elseif ( $key !== false ) {
82
  unset( $options['block'][ $type ][ $key ] );
83
  }
84
  $options['block'][ $type ] = array_unique( $options['block'][ $type ] );
@@ -95,11 +94,10 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
95
  }
96
  }
97
 
98
- $key = array_search( $handle, $options['dont_minify'][ $type ] );
99
  if ( ! isset( $item['minify'] ) ) {
100
  $options['dont_minify'][ $type ][] = $handle;
101
- }
102
- elseif ( $key !== false ) {
103
  unset( $options['dont_minify'][ $type ][ $key ] );
104
  }
105
  $options['dont_minify'][ $type ] = array_unique( $options['dont_minify'][ $type ] );
@@ -116,11 +114,10 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
116
  }
117
  }
118
 
119
- $key = array_search( $handle, $options['combine'][ $type ] );
120
  if ( ! isset( $item['combine'] ) && false !== $key ) {
121
  unset( $options['combine'][ $type ][ $key ] );
122
- }
123
- elseif ( isset( $item['combine'] ) ) {
124
  $options['combine'][ $type ][] = $handle;
125
  }
126
  $options['combine'][ $type ] = array_unique( $options['combine'][ $type ] );
@@ -138,11 +135,10 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
138
  }
139
  }
140
 
141
- $key = array_search( $handle, $options['defer'][ $type ] );
142
  if ( ! isset( $item['defer'] ) && false !== $key ) {
143
  unset( $options['defer'][ $type ][ $key ] );
144
- }
145
- elseif ( isset( $item['defer'] ) ) {
146
  $options['defer'][ $type ][] = $handle;
147
  }
148
  $options['defer'][ $type ] = array_unique( $options['defer'][ $type ] );
@@ -160,14 +156,13 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
160
  }
161
  }
162
 
163
- if ( empty( $item['position'] ) ) {
164
- $item['position'] = 'header';
165
- }
166
  $key_exists = array_key_exists( $handle, $options['position'][ $type ] );
167
- if ( 'footer' === $item['position'] ) {
168
  $options['position'][ $type ][ $handle ] = $item['position'];
169
- }
170
- elseif ( $key_exists ) {
171
  unset( $options['position'][ $type ][ $handle ] );
172
  }
173
  if ( $diff = array_diff_key( $current_options['position'][ $type ], $options['position'][ $type ] ) ) {
@@ -183,19 +178,19 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
183
  array_diff_key( $options['position'][ $type ], $current_options['position'][ $type ] )
184
  );
185
  if ( $diff ) {
186
- foreach ( $diff as $diff_handle => $position) {
187
  $_groups = WP_Hummingbird_Module_Minify_Group::get_groups_from_handle( $diff_handle, $type );
188
  if ( $_groups ) {
189
  $changed_groups = array_merge( $changed_groups, $_groups );
190
  }
191
  }
192
  }
193
- }
194
- }
195
 
196
- // Delete those groups
197
  foreach ( $changed_groups as $group ) {
198
- /** @var WP_Hummingbird_Module_Minify_Group $group */
199
  $group->delete_file();
200
  }
201
 
@@ -208,72 +203,68 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
208
  */
209
  public function render() {
210
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
 
212
- <div id="container" class="wrap wrap-wp-hummingbird wrap-wp-hummingbird-page <?php echo 'wrap-' . $this->slug; ?>">
213
- <?php
214
- if ( isset( $_GET['updated'] ) ) {
215
- $this->show_notice( 'updated', __( 'Your new minify settings have been saved. Simply refresh your homepage and Hummingbird will minify and serve your newly compressed files.', 'wphb' ), 'success', false );
216
- }
217
-
218
- if ( isset( $_GET['wphb-cache-cleared'] ) ) {
219
- $this->show_notice( 'updated', __( 'Your cache has been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
220
- }
221
-
222
- if ( isset( $_GET['wphb-cache-cleared-with-cloudflare'] ) ) {
223
- $this->show_notice( 'updated', __( 'Your local and CloudFlare caches have been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
224
- }
225
- ?>
226
- <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-minification-advanced-settings-updated">
227
- <p><?php _e( 'Settings updated', 'wphb' ); ?></p>
228
- </div>
229
-
230
- <?php
231
  $this->render_header();
232
 
233
  $this->render_inner_content();
234
  ?>
235
-
236
  </div><!-- end container -->
237
 
238
  <script>
239
- jQuery(document).ready( function() {
240
- WPHB_Admin.getModule( 'notices' );
241
- });
242
 
243
- // Avoid moving dashboard notice under h2
244
- var wpmuDash = document.getElementById( 'wpmu-install-dashboard' );
245
- if ( wpmuDash )
246
- wpmuDash.className = wpmuDash.className + " inline";
247
 
248
- jQuery( 'div.updated, div.error' ).addClass( 'inline' );
249
  </script>
250
  <?php
251
  }
252
 
253
  public function render_header() {
254
- ?>
255
- <section id="header">
256
- <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
257
- <?php
258
- $collection = wphb_minification_get_resources_collection();
259
- $module = wphb_get_module( 'minify' );
260
- if ( ( ! empty( $collection['styles'] ) && ! empty( $collection['scripts'] ) ) && $module->is_active() ) : ?>
261
- <div class="actions status">
262
- <div class="toggle-group toggle-group-with-buttons">
263
- <div class="tooltip-box">
264
- <span class="toggle" tooltip="<?php _e( 'Turn off Minification', 'wphb' ); ?>">
265
  <input type="checkbox" id="wphb-disable-minification" class="toggle-checkbox" name="wphb-disable-minification" checked>
266
  <label for="wphb-disable-minification" class="toggle-label"></label>
267
  </span>
268
- </div>
269
- </div>
270
- <span class="spinner right"></span>
271
- </div>
272
- <?php endif; ?>
273
- </section>
274
-
275
- <?php
276
- //parent::render_header(); // TODO: Change the autogenerated stub
277
  }
278
 
279
  /**
@@ -282,7 +273,7 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
282
  protected function render_inner_content() {
283
  $collection = wphb_minification_get_resources_collection();
284
  $args = array(
285
- 'instructions' => empty( $collection['styles'] ) && empty( $collection['scripts'] )
286
  );
287
 
288
  $this->view( $this->slug . '-page', $args );
@@ -294,8 +285,7 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
294
 
295
  if ( ( empty( $collection['styles'] ) && empty( $collection['scripts'] ) ) || wphb_minification_is_scanning_files() || ! $module->is_active() ) {
296
  $this->add_meta_box( 'minification/enqueued-files-empty', __( 'Get Started', 'wphb' ), array( $this, 'enqueued_files_empty_metabox' ), null, null, 'box-enqueued-files-empty', array( 'box_class' => 'dev-box content-box content-box-one-col-center') );
297
- }
298
- else {
299
  $this->add_meta_box( 'minification/summary-meta-box', null, array( $this, 'summary_metabox' ), null, null, 'summary', array( 'box_class' => 'dev-box content-box content-box-two-cols-image-left' ) );
300
 
301
  $this->add_meta_box( 'minification/enqueued-files', __( 'Files', 'wphb' ), array( $this, 'enqueued_files_metabox' ), null, null, 'main', array( 'box_content_class' => 'box-content', 'box_footer_class' => 'box-footer') );
@@ -307,7 +297,7 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
307
  }
308
 
309
  public function enqueued_files_empty_metabox() {
310
- // Get current user name
311
  $user = wphb_get_current_user_info();
312
  $checking_files = wphb_minification_is_scanning_files();
313
  $this->view( 'minification/enqueued-files-empty-meta-box', array( 'user' => $user, 'checking_files' => $checking_files ) );
@@ -319,6 +309,9 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
319
  $styles_rows = $this->_collection_rows( $collection['styles'], 'styles' );
320
  $scripts_rows = $this->_collection_rows( $collection['scripts'], 'scripts' );
321
 
 
 
 
322
  $active_plugins = get_option('active_plugins', array() );
323
  if ( is_multisite() ) {
324
  foreach ( get_site_option('active_sitewide_plugins', array() ) as $plugin => $item ) {
@@ -350,7 +343,7 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
350
  $this->view( 'minification/export-form' );
351
  }
352
 
353
- $args = compact( 'collection', 'styles_rows', 'scripts_rows', 'selector_filter', 'is_server_error', 'server_errors', 'error_time_left' );
354
  $this->view( 'minification/enqueued-files-meta-box', $args );
355
  }
356
 
@@ -367,6 +360,9 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
367
  }
368
  }
369
 
 
 
 
370
  /**
371
  * @var WP_Hummingbird_Module_Minify $minification_module
372
  */
@@ -440,6 +436,8 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
440
  }
441
  }
442
 
 
 
443
  /**
444
  * Allows to enable/disable switchers in minification page
445
  *
@@ -449,7 +447,7 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
449
  */
450
  $disable_switchers = apply_filters( 'wphb_minification_disable_switchers', $disable_switchers, $item, $type );
451
 
452
- $args = compact( 'item', 'options', 'type', 'position', 'base_name', 'original_size', 'compressed_size', 'rel_src', 'full_src', 'ext', 'row_error', 'disable_switchers', 'filter' );
453
  $content .= $this->view( 'minification/enqueued-files-rows', $args, false );
454
  }
455
 
@@ -519,4 +517,16 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
519
  echo ' <span class="wphb-button-label wphb-button-label-light">' . wphb_minification_files_count() . '</span>';
520
  }
521
  }
 
 
 
 
 
 
 
 
 
 
 
 
522
  }
73
 
74
  if ( ! empty( $_POST[ $type ] ) ) {
75
  foreach ( $_POST[ $type ] as $handle => $item ) {
76
+ $key = array_search( $handle, $options['block'][ $type ], true );
77
 
78
  if ( ! isset( $item['include'] ) ) {
79
  $options['block'][ $type ][] = $handle;
80
+ } elseif ( false !== $key ) {
 
81
  unset( $options['block'][ $type ][ $key ] );
82
  }
83
  $options['block'][ $type ] = array_unique( $options['block'][ $type ] );
94
  }
95
  }
96
 
97
+ $key = array_search( $handle, $options['dont_minify'][ $type ], true );
98
  if ( ! isset( $item['minify'] ) ) {
99
  $options['dont_minify'][ $type ][] = $handle;
100
+ } elseif ( false !== $key ) {
 
101
  unset( $options['dont_minify'][ $type ][ $key ] );
102
  }
103
  $options['dont_minify'][ $type ] = array_unique( $options['dont_minify'][ $type ] );
114
  }
115
  }
116
 
117
+ $key = array_search( $handle, $options['combine'][ $type ], true );
118
  if ( ! isset( $item['combine'] ) && false !== $key ) {
119
  unset( $options['combine'][ $type ][ $key ] );
120
+ } elseif ( isset( $item['combine'] ) ) {
 
121
  $options['combine'][ $type ][] = $handle;
122
  }
123
  $options['combine'][ $type ] = array_unique( $options['combine'][ $type ] );
135
  }
136
  }
137
 
138
+ $key = array_search( $handle, $options['defer'][ $type ], true );
139
  if ( ! isset( $item['defer'] ) && false !== $key ) {
140
  unset( $options['defer'][ $type ][ $key ] );
141
+ } elseif ( isset( $item['defer'] ) ) {
 
142
  $options['defer'][ $type ][] = $handle;
143
  }
144
  $options['defer'][ $type ] = array_unique( $options['defer'][ $type ] );
156
  }
157
  }
158
 
159
+ if ( empty( $item['position'] ) ) {
160
+ $item['position'] = 'header';
161
+ }
162
  $key_exists = array_key_exists( $handle, $options['position'][ $type ] );
163
+ if ( 'footer' === $item['position'] ) {
164
  $options['position'][ $type ][ $handle ] = $item['position'];
165
+ } elseif ( $key_exists ) {
 
166
  unset( $options['position'][ $type ][ $handle ] );
167
  }
168
  if ( $diff = array_diff_key( $current_options['position'][ $type ], $options['position'][ $type ] ) ) {
178
  array_diff_key( $options['position'][ $type ], $current_options['position'][ $type ] )
179
  );
180
  if ( $diff ) {
181
+ foreach ( $diff as $diff_handle => $position ) {
182
  $_groups = WP_Hummingbird_Module_Minify_Group::get_groups_from_handle( $diff_handle, $type );
183
  if ( $_groups ) {
184
  $changed_groups = array_merge( $changed_groups, $_groups );
185
  }
186
  }
187
  }
188
+ } // End foreach().
189
+ } // End if().
190
 
191
+ // Delete those groups.
192
  foreach ( $changed_groups as $group ) {
193
+ /* @var WP_Hummingbird_Module_Minify_Group $group */
194
  $group->delete_file();
195
  }
196
 
203
  */
204
  public function render() {
205
  ?>
206
+ <div id="container" class="wrap wrap-wp-hummingbird wrap-wp-hummingbird-page <?php echo 'wrap-' . esc_attr( $this->slug ); ?>">
207
+ <?php
208
+ if ( isset( $_GET['updated'] ) ) {
209
+ $this->show_notice( 'updated', __( 'Your new minify settings have been saved. Simply refresh your homepage and Hummingbird will minify and serve your newly compressed files.', 'wphb' ), 'success', false );
210
+ }
211
+
212
+ if ( isset( $_GET['wphb-cache-cleared'] ) ) {
213
+ $this->show_notice( 'updated', __( 'Your cache has been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
214
+ }
215
+
216
+ if ( isset( $_GET['wphb-cache-cleared-with-cloudflare'] ) ) {
217
+ $this->show_notice( 'updated', __( 'Your local and Cloudflare caches have been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
218
+ }
219
+ ?>
220
+ <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-minification-advanced-settings-updated">
221
+ <p><?php esc_html_e( 'Settings updated', 'wphb' ); ?></p>
222
+ </div>
223
 
224
+ <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
  $this->render_header();
226
 
227
  $this->render_inner_content();
228
  ?>
 
229
  </div><!-- end container -->
230
 
231
  <script>
232
+ jQuery(document).ready( function() {
233
+ window.WPHB_Admin.getModule( 'notices' );
234
+ });
235
 
236
+ // Avoid moving dashboard notice under h2
237
+ var wpmuDash = document.getElementById( 'wpmu-install-dashboard' );
238
+ if ( wpmuDash )
239
+ wpmuDash.className = wpmuDash.className + " inline";
240
 
241
+ jQuery( 'div.updated, div.error' ).addClass( 'inline' );
242
  </script>
243
  <?php
244
  }
245
 
246
  public function render_header() {
247
+ ?>
248
+ <section id="header">
249
+ <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
250
+ <?php
251
+ $collection = wphb_minification_get_resources_collection();
252
+ $module = wphb_get_module( 'minify' );
253
+ if ( ( ! empty( $collection['styles'] ) && ! empty( $collection['scripts'] ) ) && $module->is_active() ) : ?>
254
+ <div class="actions status">
255
+ <div class="toggle-group toggle-group-with-buttons">
256
+ <div class="tooltip-box">
257
+ <span class="toggle" tooltip="<?php esc_attr_e( 'Turn off Minification', 'wphb' ); ?>">
258
  <input type="checkbox" id="wphb-disable-minification" class="toggle-checkbox" name="wphb-disable-minification" checked>
259
  <label for="wphb-disable-minification" class="toggle-label"></label>
260
  </span>
261
+ </div>
262
+ </div>
263
+ <span class="spinner right"></span>
264
+ </div>
265
+ <?php endif; ?>
266
+ </section>
267
+ <?php
 
 
268
  }
269
 
270
  /**
273
  protected function render_inner_content() {
274
  $collection = wphb_minification_get_resources_collection();
275
  $args = array(
276
+ 'instructions' => empty( $collection['styles'] ) && empty( $collection['scripts'] ),
277
  );
278
 
279
  $this->view( $this->slug . '-page', $args );
285
 
286
  if ( ( empty( $collection['styles'] ) && empty( $collection['scripts'] ) ) || wphb_minification_is_scanning_files() || ! $module->is_active() ) {
287
  $this->add_meta_box( 'minification/enqueued-files-empty', __( 'Get Started', 'wphb' ), array( $this, 'enqueued_files_empty_metabox' ), null, null, 'box-enqueued-files-empty', array( 'box_class' => 'dev-box content-box content-box-one-col-center') );
288
+ } else {
 
289
  $this->add_meta_box( 'minification/summary-meta-box', null, array( $this, 'summary_metabox' ), null, null, 'summary', array( 'box_class' => 'dev-box content-box content-box-two-cols-image-left' ) );
290
 
291
  $this->add_meta_box( 'minification/enqueued-files', __( 'Files', 'wphb' ), array( $this, 'enqueued_files_metabox' ), null, null, 'main', array( 'box_content_class' => 'box-content', 'box_footer_class' => 'box-footer') );
297
  }
298
 
299
  public function enqueued_files_empty_metabox() {
300
+ // Get current user name.
301
  $user = wphb_get_current_user_info();
302
  $checking_files = wphb_minification_is_scanning_files();
303
  $this->view( 'minification/enqueued-files-empty-meta-box', array( 'user' => $user, 'checking_files' => $checking_files ) );
309
  $styles_rows = $this->_collection_rows( $collection['styles'], 'styles' );
310
  $scripts_rows = $this->_collection_rows( $collection['scripts'], 'scripts' );
311
 
312
+ // This will be used to disable the combine button on the bulk update modal if site is ssl.
313
+ $is_ssl = wphb_is_ssl();
314
+
315
  $active_plugins = get_option('active_plugins', array() );
316
  if ( is_multisite() ) {
317
  foreach ( get_site_option('active_sitewide_plugins', array() ) as $plugin => $item ) {
343
  $this->view( 'minification/export-form' );
344
  }
345
 
346
+ $args = compact( 'collection', 'styles_rows', 'scripts_rows', 'selector_filter', 'is_server_error', 'server_errors', 'error_time_left', 'is_ssl' );
347
  $this->view( 'minification/enqueued-files-meta-box', $args );
348
  }
349
 
360
  }
361
  }
362
 
363
+ // This will be used to disable the combine button if site is ssl.
364
+ $is_ssl = wphb_is_ssl();
365
+
366
  /**
367
  * @var WP_Hummingbird_Module_Minify $minification_module
368
  */
436
  }
437
  }
438
 
439
+ $minified_file = $this->is_minified( wp_basename( $rel_src ) );
440
+
441
  /**
442
  * Allows to enable/disable switchers in minification page
443
  *
447
  */
448
  $disable_switchers = apply_filters( 'wphb_minification_disable_switchers', $disable_switchers, $item, $type );
449
 
450
+ $args = compact( 'item', 'options', 'type', 'position', 'base_name', 'original_size', 'compressed_size', 'rel_src', 'full_src', 'ext', 'row_error', 'disable_switchers', 'filter', 'is_ssl', 'minified_file' );
451
  $content .= $this->view( 'minification/enqueued-files-rows', $args, false );
452
  }
453
 
517
  echo ' <span class="wphb-button-label wphb-button-label-light">' . wphb_minification_files_count() . '</span>';
518
  }
519
  }
520
+
521
+ /**
522
+ * Checks whether the file has 'min' before the file extension
523
+ *
524
+ * @return bool Default: False. True if file is min.
525
+ */
526
+ function is_minified( $file_name ) {
527
+ if ( preg_match( '/\.min\.(css|js)/', $file_name ) ) {
528
+ return true;
529
+ }
530
+ return false;
531
+ }
532
  }
admin/class-performance-page.php CHANGED
@@ -30,9 +30,6 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
30
 
31
  // We need to actually tweak these tasks.
32
  add_filter( 'wphb_admin_after_tab_' . $this->get_slug(), array( $this, 'after_tab' ) );
33
-
34
- //$this->recommendations = wphb_get_number_of_issues( 'performance' );
35
- //$this->get_error_status();
36
  }
37
 
38
  /**
@@ -42,6 +39,13 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
42
  $this->get_error_status();
43
 
44
  $last_report = wphb_performance_get_last_report();
 
 
 
 
 
 
 
45
  $run_url = add_query_arg( 'run', 'true', wphb_get_admin_menu_url( 'performance' ) );
46
  $run_url = wp_nonce_url( $run_url, 'wphb-run-performance-test' );
47
  $next_test_on = WP_Hummingbird_Module_Performance::can_run_test();
@@ -58,49 +62,87 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
58
  $disabled = true !== $next_test_on;
59
  ?>
60
  <p class="actions-label">
61
- <?php printf( __('Your last performance test was on <strong>%s</strong> at <strong>%s</strong>', 'wphb' ), date_i18n( get_option( 'date_format' ), $data_time ), date_i18n( get_option( 'time_format' ), $data_time ) ); ?>
62
- <?php if ( $disabled ): ?>
63
- <br/><?php printf( __( 'Hummingbird is just catching her breath. <strong>Run again in %d minutes</strong>', 'wphb' ), $next_test_on ) ;?>
 
 
64
  <?php endif; ?>
65
  </p>
66
- <?php if ( ! $disabled ): ?>
67
  <a href="<?php echo esc_url( $run_url ); ?>" <?php disabled( $disabled ); ?> class="button"><?php _e( 'Run Test', 'wphb' ); ?></a>
68
  <?php endif; ?>
69
  <?php endif; ?>
70
  </div>
71
  </section><!-- end header -->
72
-
73
  <?php
74
  }
75
 
76
- public function register_meta_boxes() {
77
-
 
 
78
  if ( isset( $_GET['run'] ) ) {
79
  check_admin_referer( 'wphb-run-performance-test' );
80
 
81
- if ( ! current_user_can( wphb_get_admin_capability() ) )
82
  return;
 
83
 
 
 
 
84
  // Start the test
85
  wphb_performance_init_scan();
86
 
87
  wp_redirect( remove_query_arg( array( 'run', '_wpnonce' ) ) );
88
  exit;
89
  }
 
90
 
91
- $last_test = wphb_performance_get_last_report();
92
-
93
- if ( ! $last_test ) {
94
- $this->add_meta_box( 'performance-summary', __( 'Summary', 'wphb' ), array( $this, 'performance_summary_metabox' ), array( $this, 'performance_summary_metabox_header' ), null, 'main', array( 'box_class' => 'dev-box content-box-one-col-center' ) );
95
- }
96
- elseif ( is_wp_error( $last_test ) ) {
97
- $this->add_meta_box( 'performance-summary', __( 'Summary', 'wphb' ), array( $this, 'performance_summary_metabox' ), array( $this, 'performance_summary_metabox_header' ), null, 'main', array( 'box_class' => 'dev-box content-box-one-col-center', 'box_content_class' => 'box-content no-side-padding' ) );
98
- }
99
- else {
100
- $this->add_meta_box( 'performance-welcome', null , array( $this, 'performance_welcome_metabox' ), null, null, 'summary', array( 'box_class' => 'dev-box content-box content-box-two-cols-image-left' ) );
101
- $this->add_meta_box( 'performance-summary', __( 'Improvements', 'wphb' ), array( $this, 'performance_summary_metabox' ), array( $this, 'performance_summary_metabox_header' ), null, 'main', array( 'box_class' => 'dev-box content-box-one-col-center', 'box_content_class' => 'box-content no-side-padding' ) );
102
- }
103
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  }
105
 
106
  public function performance_summary_metabox() {
@@ -115,14 +157,12 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
115
  $error_details = $last_test->get_error_data();
116
  if ( is_array( $error_details ) && isset( $error_details['details'] ) ) {
117
  $error_details = $error_details['details'];
118
- }
119
- else {
120
  $error_details = '';
121
  }
122
 
123
  $this->has_error = true;
124
- }
125
- else {
126
  $last_test = $last_test->data;
127
  /*$this->has_error = false;*/
128
  }
@@ -130,34 +170,74 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
130
  $retry_url = add_query_arg( 'run', 'true', wphb_get_admin_menu_url( 'performance' ) );
131
  $retry_url = wp_nonce_url( $retry_url, 'wphb-run-performance-test' );
132
 
133
- $this->view( 'performance/summary-meta-box', array( 'last_test' => $last_test, 'error' => $this->has_error, 'error_details' => $error_details, 'error_text' => $error_text, 'retry_url' => $retry_url ) );
 
 
 
 
 
 
 
 
 
134
  } else {
135
- $this->view( 'performance/empty-summary-meta-box', array( 'doing_report' => $doing_report ) );
136
- }
137
-
 
 
 
 
138
  }
139
 
140
  public function performance_welcome_metabox() {
141
  $last_report = wphb_performance_get_last_report();
142
- $last_report = $last_report->data;
143
 
 
144
  $improvement = 0;
145
- $last_score = false;
146
- if ( $last_report->last_score ) {
147
- $improvement = $last_report->score - $last_report->last_score['score'];
148
- $last_score = $last_report->last_score['score'];
 
 
 
 
149
  }
150
 
151
- $this->view( 'performance/module-resume-meta-box', array( 'last_report' => $last_report, 'improvement' => $improvement, 'last_score' => $last_score, 'recommendations' => wphb_get_number_of_issues( 'performance' ) ) );
 
 
 
 
 
 
 
 
152
  }
153
 
154
  public function performance_summary_metabox_header() {
155
- $title = __( 'Improvements', 'wphb' );
156
  $last_report = wphb_performance_get_last_report();
157
  if ( $last_report && ! is_wp_error( $last_report ) ) {
158
  $last_report = $last_report->data;
159
  }
160
- $this->view( 'performance/summary-meta-box-header', array( 'title' => $title, 'last_report' => $last_report ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  }
162
 
163
  /**
@@ -213,4 +293,4 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
213
  }
214
  }
215
 
216
- }
30
 
31
  // We need to actually tweak these tasks.
32
  add_filter( 'wphb_admin_after_tab_' . $this->get_slug(), array( $this, 'after_tab' ) );
 
 
 
33
  }
34
 
35
  /**
39
  $this->get_error_status();
40
 
41
  $last_report = wphb_performance_get_last_report();
42
+
43
+ // Check to see if there's a fresh report on the server.
44
+ if ( false === $last_report && ! wphb_performance_is_doing_report() ) {
45
+ wphb_performance_refresh_report();
46
+ $last_report = wphb_performance_get_last_report();
47
+ }
48
+
49
  $run_url = add_query_arg( 'run', 'true', wphb_get_admin_menu_url( 'performance' ) );
50
  $run_url = wp_nonce_url( $run_url, 'wphb-run-performance-test' );
51
  $next_test_on = WP_Hummingbird_Module_Performance::can_run_test();
62
  $disabled = true !== $next_test_on;
63
  ?>
64
  <p class="actions-label">
65
+ <?php /* translators: %1$s: date, %2$s: time. */
66
+ printf( __( 'Your last performance test was on <strong>%1$s</strong> at <strong>%2$s</strong>', 'wphb' ), date_i18n( get_option( 'date_format' ), $data_time ), date_i18n( get_option( 'time_format' ), $data_time ) );
67
+ if ( $disabled ) : ?>
68
+ <br/><?php /* translators: %d: number of minutes. */
69
+ printf( __( 'Hummingbird is just catching her breath. <strong>Run again in %d minutes</strong>', 'wphb' ), $next_test_on ); ?>
70
  <?php endif; ?>
71
  </p>
72
+ <?php if ( ! $disabled ) : ?>
73
  <a href="<?php echo esc_url( $run_url ); ?>" <?php disabled( $disabled ); ?> class="button"><?php _e( 'Run Test', 'wphb' ); ?></a>
74
  <?php endif; ?>
75
  <?php endif; ?>
76
  </div>
77
  </section><!-- end header -->
 
78
  <?php
79
  }
80
 
81
+ /**
82
+ * Function triggered when the page is loaded before render any content.
83
+ */
84
+ public function on_load() {
85
  if ( isset( $_GET['run'] ) ) {
86
  check_admin_referer( 'wphb-run-performance-test' );
87
 
88
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
89
  return;
90
+ }
91
 
92
+ if ( wphb_performance_is_doing_report() ) {
93
+ return;
94
+ }
95
  // Start the test
96
  wphb_performance_init_scan();
97
 
98
  wp_redirect( remove_query_arg( array( 'run', '_wpnonce' ) ) );
99
  exit;
100
  }
101
+ }
102
 
103
+ /**
104
+ * Register meta boxes.
105
+ */
106
+ public function register_meta_boxes() {
107
+ // Default to empty meta box if doing performance scan, or we will get php notices.
108
+ if ( ! wphb_performance_is_doing_report() ) {
109
+ $this->add_meta_box(
110
+ 'performance-welcome',
111
+ null,
112
+ array( $this, 'performance_welcome_metabox' ),
113
+ null,
114
+ null,
115
+ 'summary',
116
+ array(
117
+ 'box_class' => 'dev-box content-box content-box-two-cols-image-left',
118
+ )
119
+ );
120
+ $this->add_meta_box(
121
+ 'performance-summary',
122
+ __( 'Improvements', 'wphb' ),
123
+ array( $this, 'performance_summary_metabox' ),
124
+ array( $this, 'performance_summary_metabox_header' ),
125
+ null,
126
+ 'main',
127
+ array(
128
+ 'box_class' => 'dev-box content-box-one-col-center',
129
+ 'box_content_class' => 'box-content no-side-padding',
130
+ )
131
+ );
132
+ } else {
133
+ $this->add_meta_box(
134
+ 'performance-summary',
135
+ __( 'Performance test', 'wphb' ),
136
+ array( $this, 'performance_empty_metabox' ),
137
+ null,
138
+ null,
139
+ 'main',
140
+ array(
141
+ 'box_class' => 'dev-box content-box-one-col-center',
142
+ 'box_content_class' => 'box-content no-side-padding',
143
+ )
144
+ );
145
+ } // End if().
146
  }
147
 
148
  public function performance_summary_metabox() {
157
  $error_details = $last_test->get_error_data();
158
  if ( is_array( $error_details ) && isset( $error_details['details'] ) ) {
159
  $error_details = $error_details['details'];
160
+ } else {
 
161
  $error_details = '';
162
  }
163
 
164
  $this->has_error = true;
165
+ } else {
 
166
  $last_test = $last_test->data;
167
  /*$this->has_error = false;*/
168
  }
170
  $retry_url = add_query_arg( 'run', 'true', wphb_get_admin_menu_url( 'performance' ) );
171
  $retry_url = wp_nonce_url( $retry_url, 'wphb-run-performance-test' );
172
 
173
+ $this->view(
174
+ 'performance/summary-meta-box',
175
+ array(
176
+ 'last_test' => $last_test,
177
+ 'error' => $this->has_error,
178
+ 'error_details' => $error_details,
179
+ 'error_text' => $error_text,
180
+ 'retry_url' => $retry_url,
181
+ )
182
+ );
183
  } else {
184
+ $this->view(
185
+ 'performance/empty-summary-meta-box',
186
+ array(
187
+ 'doing_report' => $doing_report,
188
+ )
189
+ );
190
+ } // End if().
191
  }
192
 
193
  public function performance_welcome_metabox() {
194
  $last_report = wphb_performance_get_last_report();
 
195
 
196
+ $last_score = '';
197
  $improvement = 0;
198
+ if ( ! is_wp_error( $last_report ) ) {
199
+ $last_report = $last_report->data;
200
+
201
+ $last_score = false;
202
+ if ( $last_report->last_score ) {
203
+ $improvement = $last_report->score - $last_report->last_score['score'];
204
+ $last_score = $last_report->last_score['score'];
205
+ }
206
  }
207
 
208
+ $this->view(
209
+ 'performance/module-resume-meta-box',
210
+ array(
211
+ 'last_report' => $last_report,
212
+ 'improvement' => $improvement,
213
+ 'last_score' => $last_score,
214
+ 'recommendations' => wphb_get_number_of_issues( 'performance' ),
215
+ )
216
+ );
217
  }
218
 
219
  public function performance_summary_metabox_header() {
220
+ $title = __( 'Improvements', 'wphb' );
221
  $last_report = wphb_performance_get_last_report();
222
  if ( $last_report && ! is_wp_error( $last_report ) ) {
223
  $last_report = $last_report->data;
224
  }
225
+ $this->view(
226
+ 'performance/summary-meta-box-header',
227
+ array(
228
+ 'title' => $title,
229
+ 'last_report' => $last_report,
230
+ )
231
+ );
232
+ }
233
+
234
+ public function performance_empty_metabox() {
235
+ $this->view(
236
+ 'performance/empty-summary-meta-box',
237
+ array(
238
+ 'doing_report' => true,
239
+ )
240
+ );
241
  }
242
 
243
  /**
293
  }
294
  }
295
 
296
+ }
admin/class-uptime-page.php CHANGED
@@ -43,9 +43,7 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
43
  </div>
44
  <?php endif; ?>
45
  </section><!-- end header -->
46
-
47
  <?php
48
- //parent::render_header(); // TODO: Change the autogenerated stub
49
  }
50
 
51
  public function register_meta_boxes() {
@@ -61,19 +59,39 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
61
  /* @var WP_Hummingbird_Module_Uptime $module */
62
  $module = wphb_get_module( 'uptime' );
63
  $is_active = $module->is_active();
64
- $uptime_report = wphb_uptime_get_last_report( $this->get_current_data_range() );
 
 
 
65
 
66
  if ( ! wphb_is_member() ) {
67
  $this->add_meta_box( 'uptime-no-membership', __( 'Uptime', 'wphb' ), array( $this, 'uptime_membership_metabox' ), null, null, 'main', null );
68
- }
69
- elseif ( is_wp_error( $uptime_report ) && $is_active ) {
70
  $this->add_meta_box( 'uptime', __( 'Uptime', 'wphb' ), array( $this, 'uptime_metabox' ), null, null, 'main', null );
71
- }
72
- elseif ( ! $is_active && wphb_is_member() ) {
73
- $this->add_meta_box( 'uptime-disabled', __( 'Uptime', 'wphb' ), array( $this, 'uptime_disabled_metabox' ), null, null, 'box-uptime-disabled', array( 'box_class' => 'dev-box content-box content-box-one-col-center') );
74
- }
75
- else {
76
- $this->add_meta_box( 'uptime-summary', null, array( $this, 'uptime_summary_metabox' ), null, null, 'summary', array( 'box_class' => 'dev-box content-box content-box-two-cols-image-left' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  $this->add_meta_box( 'uptime-response-time', __( 'Response Time', 'wphb' ), array( $this, 'uptime_metabox' ), array( $this, 'uptime_metabox_header' ), null, 'main', null );
78
  $this->add_meta_box( 'uptime-downtime', __( 'Downtime', 'wphb' ), array( $this, 'uptime_downtime_metabox' ), null, null, 'main', null );
79
  }
@@ -86,15 +104,16 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
86
  if ( 'enable' === $action ) {
87
  check_admin_referer( 'wphb-toggle-uptime' );
88
 
89
- if ( ! current_user_can( wphb_get_admin_capability() ) )
90
  return;
 
91
 
92
  $result = wphb_uptime_enable();
93
  if ( is_wp_error( $result ) ) {
94
  $redirect_to = add_query_arg( 'error', 'true', wphb_get_admin_menu_url( 'uptime' ) );
95
  $redirect_to = add_query_arg( array(
96
  'code' => $result->get_error_code(),
97
- 'message' => urlencode( $result->get_error_message() )
98
  ), $redirect_to );
99
  wp_redirect( $redirect_to );
100
  exit;
@@ -110,8 +129,9 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
110
  if ( 'disable' === $action ) {
111
  check_admin_referer( 'wphb-toggle-uptime' );
112
 
113
- if ( ! current_user_can( wphb_get_admin_capability() ) )
114
  return;
 
115
 
116
  wphb_uptime_disable();
117
 
@@ -121,8 +141,9 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
121
  if ( isset( $_GET['run'] ) ) {
122
  check_admin_referer( 'wphb-run-uptime' );
123
 
124
- if ( ! current_user_can( wphb_get_admin_capability() ) )
125
  return;
 
126
 
127
  // Start the test
128
  wphb_uptime_clear_cache();
@@ -158,14 +179,17 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
158
  $user = wphb_get_current_user_info();
159
  $activate_url = add_query_arg( 'action', 'enable', wphb_get_admin_menu_url( 'uptime' ) );
160
  $activate_url = wp_nonce_url( $activate_url, 'wphb-toggle-uptime' );
161
- $this->view( 'uptime/disabled-meta-box', array( 'user' => $user, 'activate_url' => $activate_url ) );
 
 
 
162
  }
163
 
164
  private function get_data_ranges() {
165
  return array(
166
- 'day' => __( 'Last Day', 'wphb' ),
167
- 'week' => __( 'Last Week', 'wphb' ),
168
- 'month' => __( 'Last Month', 'wphb' )
169
  );
170
  }
171
 
@@ -187,8 +211,7 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
187
  $uptime_stats = wphb_uptime_get_last_report( $data_range );
188
  if ( isset( $uptime_stats->code ) && $is_active ) {
189
  $error = $uptime_stats->message;
190
- }
191
- elseif ( false === $uptime_stats ) {
192
  $is_active = false;
193
  }
194
  }
@@ -196,15 +219,14 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
196
  $retry_url = add_query_arg(
197
  array(
198
  '_wpnonce' => wp_create_nonce( 'wphb-toggle-uptime' ),
199
- 'action' => 'enable'
200
  ),
201
  wphb_get_admin_menu_url( 'uptime' )
202
  );
203
-
204
 
205
  $args = array(
206
- 'error' => $error,
207
- 'retry_url' => $retry_url
208
  );
209
 
210
  $this->view( $this->slug . '-page', $args );
@@ -228,10 +250,9 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
228
  if ( is_wp_error( $stats ) ) {
229
  $error = $stats->get_error_message();
230
  $error_type = 'error';
231
- }
232
- else {
233
  if ( isset( $_GET['error'] ) ) {
234
- $error = urldecode($_GET['message'] );
235
  $error_type = 'error';
236
  }
237
  }
@@ -259,54 +280,54 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
259
  * @since 1.5.0
260
  */
261
  public function uptime_summary_metabox() {
262
-
263
  if ( ! wphb_is_member() ) {
264
  return;
265
  }
266
 
267
  $stats = wphb_uptime_get_last_report( $this->get_current_data_range() );
268
 
269
- $this->view( 'uptime/summary-meta-box', array( 'uptime_stats' => $stats ) );
 
 
270
  }
271
 
272
  /**
273
  * Uptime header for meta box.
274
- *
275
- * @since 1.5.0
276
  */
277
  public function uptime_metabox_header() {
278
-
279
- $this->view( 'uptime/meta-box-header', array( 'title' => __( 'Response Time', 'wphb' ) ) );
280
-
281
- }
282
 
283
  /**
284
  * Uptime downtime meta box.
285
- *
286
- * @since 1.5.0
287
  */
288
- public function uptime_downtime_metabox() {
289
-
290
- if ( ! wphb_is_member() ) {
291
- return;
292
- }
293
-
294
- $stats = wphb_uptime_get_last_report( $this->get_current_data_range() );
295
- if ( is_wp_error( $stats ) ) {
296
- return;
297
- }
298
- else {
299
- if ( isset( $_GET['error'] ) ) {
300
- return;
301
- }
302
- }
303
 
304
- $this->view( 'uptime/downtime-meta-box', array( 'uptime_stats' => $stats ) );
 
 
 
 
 
 
 
305
 
306
- }
 
 
 
307
 
308
- public function uptime_membership_metabox() {
309
- $this->view( 'uptime/no-membership-meta-box', array() );
310
- }
311
 
312
- }
43
  </div>
44
  <?php endif; ?>
45
  </section><!-- end header -->
 
46
  <?php
 
47
  }
48
 
49
  public function register_meta_boxes() {
59
  /* @var WP_Hummingbird_Module_Uptime $module */
60
  $module = wphb_get_module( 'uptime' );
61
  $is_active = $module->is_active();
62
+ $uptime_report = '';
63
+ if ( $is_active ) {
64
+ $uptime_report = wphb_uptime_get_last_report( $this->get_current_data_range() );
65
+ }
66
 
67
  if ( ! wphb_is_member() ) {
68
  $this->add_meta_box( 'uptime-no-membership', __( 'Uptime', 'wphb' ), array( $this, 'uptime_membership_metabox' ), null, null, 'main', null );
69
+ } elseif ( $is_active && is_wp_error( $uptime_report ) ) {
 
70
  $this->add_meta_box( 'uptime', __( 'Uptime', 'wphb' ), array( $this, 'uptime_metabox' ), null, null, 'main', null );
71
+ } elseif ( ! $is_active && wphb_is_member() ) {
72
+ $this->add_meta_box(
73
+ 'uptime-disabled',
74
+ __( 'Uptime', 'wphb' ),
75
+ array( $this, 'uptime_disabled_metabox' ),
76
+ null,
77
+ null,
78
+ 'box-uptime-disabled',
79
+ array(
80
+ 'box_class' => 'dev-box content-box content-box-one-col-center',
81
+ )
82
+ );
83
+ } else {
84
+ $this->add_meta_box(
85
+ 'uptime-summary',
86
+ null,
87
+ array( $this, 'uptime_summary_metabox' ),
88
+ null,
89
+ null,
90
+ 'summary',
91
+ array(
92
+ 'box_class' => 'dev-box content-box content-box-two-cols-image-left',
93
+ )
94
+ );
95
  $this->add_meta_box( 'uptime-response-time', __( 'Response Time', 'wphb' ), array( $this, 'uptime_metabox' ), array( $this, 'uptime_metabox_header' ), null, 'main', null );
96
  $this->add_meta_box( 'uptime-downtime', __( 'Downtime', 'wphb' ), array( $this, 'uptime_downtime_metabox' ), null, null, 'main', null );
97
  }
104
  if ( 'enable' === $action ) {
105
  check_admin_referer( 'wphb-toggle-uptime' );
106
 
107
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
108
  return;
109
+ }
110
 
111
  $result = wphb_uptime_enable();
112
  if ( is_wp_error( $result ) ) {
113
  $redirect_to = add_query_arg( 'error', 'true', wphb_get_admin_menu_url( 'uptime' ) );
114
  $redirect_to = add_query_arg( array(
115
  'code' => $result->get_error_code(),
116
+ 'message' => urlencode( $result->get_error_message() ),
117
  ), $redirect_to );
118
  wp_redirect( $redirect_to );
119
  exit;
129
  if ( 'disable' === $action ) {
130
  check_admin_referer( 'wphb-toggle-uptime' );
131
 
132
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
133
  return;
134
+ }
135
 
136
  wphb_uptime_disable();
137
 
141
  if ( isset( $_GET['run'] ) ) {
142
  check_admin_referer( 'wphb-run-uptime' );
143
 
144
+ if ( ! current_user_can( wphb_get_admin_capability() ) ) {
145
  return;
146
+ }
147
 
148
  // Start the test
149
  wphb_uptime_clear_cache();
179
  $user = wphb_get_current_user_info();
180
  $activate_url = add_query_arg( 'action', 'enable', wphb_get_admin_menu_url( 'uptime' ) );
181
  $activate_url = wp_nonce_url( $activate_url, 'wphb-toggle-uptime' );
182
+ $this->view( 'uptime/disabled-meta-box', array(
183
+ 'user' => $user,
184
+ 'activate_url' => $activate_url,
185
+ ));
186
  }
187
 
188
  private function get_data_ranges() {
189
  return array(
190
+ 'day' => __( 'Last Day', 'wphb' ),
191
+ 'week' => __( 'Last Week', 'wphb' ),
192
+ 'month' => __( 'Last Month', 'wphb' ),
193
  );
194
  }
195
 
211
  $uptime_stats = wphb_uptime_get_last_report( $data_range );
212
  if ( isset( $uptime_stats->code ) && $is_active ) {
213
  $error = $uptime_stats->message;
214
+ } elseif ( false === $uptime_stats ) {
 
215
  $is_active = false;
216
  }
217
  }
219
  $retry_url = add_query_arg(
220
  array(
221
  '_wpnonce' => wp_create_nonce( 'wphb-toggle-uptime' ),
222
+ 'action' => 'enable',
223
  ),
224
  wphb_get_admin_menu_url( 'uptime' )
225
  );
 
226
 
227
  $args = array(
228
+ 'error' => $error,
229
+ 'retry_url' => $retry_url,
230
  );
231
 
232
  $this->view( $this->slug . '-page', $args );
250
  if ( is_wp_error( $stats ) ) {
251
  $error = $stats->get_error_message();
252
  $error_type = 'error';
253
+ } else {
 
254
  if ( isset( $_GET['error'] ) ) {
255
+ $error = urldecode( $_GET['message'] );
256
  $error_type = 'error';
257
  }
258
  }
280
  * @since 1.5.0
281
  */
282
  public function uptime_summary_metabox() {
 
283
  if ( ! wphb_is_member() ) {
284
  return;
285
  }
286
 
287
  $stats = wphb_uptime_get_last_report( $this->get_current_data_range() );
288
 
289
+ $this->view( 'uptime/summary-meta-box', array(
290
+ 'uptime_stats' => $stats,
291
+ ));
292
  }
293
 
294
  /**
295
  * Uptime header for meta box.
296
+ *
297
+ * @since 1.5.0
298
  */
299
  public function uptime_metabox_header() {
300
+ $this->view( 'uptime/meta-box-header', array(
301
+ 'title' => __( 'Response Time', 'wphb' ),
302
+ ));
303
+ }
304
 
305
  /**
306
  * Uptime downtime meta box.
307
+ *
308
+ * @since 1.5.0
309
  */
310
+ public function uptime_downtime_metabox() {
311
+ if ( ! wphb_is_member() ) {
312
+ return;
313
+ }
 
 
 
 
 
 
 
 
 
 
 
314
 
315
+ $stats = wphb_uptime_get_last_report( $this->get_current_data_range() );
316
+ if ( is_wp_error( $stats ) ) {
317
+ return;
318
+ } else {
319
+ if ( isset( $_GET['error'] ) ) {
320
+ return;
321
+ }
322
+ }
323
 
324
+ $this->view( 'uptime/downtime-meta-box', array(
325
+ 'uptime_stats' => $stats,
326
+ ));
327
+ }
328
 
329
+ public function uptime_membership_metabox() {
330
+ $this->view( 'uptime/no-membership-meta-box', array() );
331
+ }
332
 
333
+ }
admin/views/caching/browser-caching-configure-meta-box-header.php CHANGED
@@ -5,7 +5,7 @@
5
  * @package Hummingbird
6
  *
7
  * @var string $title Title of the module.
8
- * @var bool $cf_active CloudFlare status.
9
  */
10
 
11
  ?>
@@ -13,7 +13,7 @@
13
  <?php if ( ! $cf_active ) : ?>
14
  <div class="buttons buttons-group">
15
  <p class="wphb-label-notice-inline hide-to-mobile">
16
- <?php esc_html_e( 'Using CloudFlare?', 'wphb' ); ?>
17
  <a href="#" id="connect-cloudflare-link">
18
  <?php esc_html_e( 'Connect account', 'wphb' ); ?>
19
  </a>
5
  * @package Hummingbird
6
  *
7
  * @var string $title Title of the module.
8
+ * @var bool $cf_active Cloudflare status.
9
  */
10
 
11
  ?>
13
  <?php if ( ! $cf_active ) : ?>
14
  <div class="buttons buttons-group">
15
  <p class="wphb-label-notice-inline hide-to-mobile">
16
+ <?php esc_html_e( 'Using Cloudflare?', 'wphb' ); ?>
17
  <a href="#" id="connect-cloudflare-link">
18
  <?php esc_html_e( 'Connect account', 'wphb' ); ?>
19
  </a>
admin/views/caching/browser-caching-configure-meta-box.php CHANGED
@@ -7,19 +7,21 @@
7
  * @var array $results Current report.
8
  * @var array $human_results Current report in readable format.
9
  * @var array $expires Current expiration value settings.
10
- * @var bool $cf_active CloudFlare status.
11
- * @var int $cf_current CloudFlare expiration value.
12
- * @var string $cf_disable_url CloudFlare deactivate URL.
 
13
  * @var string $server_type Current server type.
14
  * @var array $snippets Code snippets for servers.
15
  * @var bool $htaccess_written File .htaccess is written.
16
  * @var bool $htaccess_writable File .htaccess is writable.
17
  * @var bool $already_enabled Caching is enabled.
 
18
  * @var string $enable_link Activate automatic caching link.
19
  * @var string $disable_link Disable automatic caching link.
20
  */
21
 
22
- ?>
23
  <div class="row settings-form with-bottom-border">
24
  <div class="col-third">
25
  <strong><?php esc_html_e( 'Expiry Settings', 'wphb' ) ?></strong>
@@ -28,58 +30,67 @@
28
  </span>
29
  </div><!-- end col-third -->
30
  <div class="col-two-third">
31
-
32
- <?php if ( ! $cf_active ) : ?>
33
- <div class="wphb-radio-group">
34
- <input type="radio" name="expiry-set-type" id="expiry-all-types" checked="checked">
35
- <label for="expiry-all-types"><?php esc_html_e( 'Apply for all cache types', 'wphb' ); ?></label>
36
- </div>
37
- <div class="wphb-radio-group">
38
- <input type="radio" name="expiry-set-type" id="expiry-single-type">
39
- <label for="expiry-single-type"><?php esc_html_e( 'Apply for each cache type', 'wphb' ); ?></label>
40
- </div>
41
- <?php endif; ?>
42
-
43
- <div class="wphb-border-frame with-padding">
44
- <small>
45
- <?php esc_html_e( 'Please choose your desired expiry time. Google recommends 8 days as a good benchmark.', 'wphb' ); ?>
46
- </small>
47
  <?php if ( ! $cf_active ) : ?>
48
- <div data="expiry-all-types">
49
- <label><?php esc_html_e( 'All types', 'wphb' ); ?></label>
50
- <?php
51
- wphb_get_caching_frequencies_dropdown( array(
52
- 'name' => 'wphb-caching-all-set-expiry-select-css',
53
- 'class' => 'wphb-expiry-select',
54
- 'selected' => $expires['css'],
55
- 'data-type' => 'all',
56
- )); ?>
57
  </div>
58
- <div class="hidden" data="expiry-single-type">
59
- <?php foreach ( $human_results as $type => $result ) : ?>
60
- <label><?php echo esc_html( $type ); ?></label>
 
 
 
 
 
 
 
 
 
 
61
  <?php
62
  wphb_get_caching_frequencies_dropdown( array(
63
- 'name' => 'wphb-caching-summary-set-expiry-select-css',
64
  'class' => 'wphb-expiry-select',
65
- 'selected' => $expires[ $type ],
66
- 'data-type' => $type,
67
  ));
68
- endforeach; ?>
69
- </div>
70
- <?php elseif ( $cf_active ) : ?>
71
- <label><?php esc_html_e( 'Choose expiry', 'wphb' ); ?></label>
72
- <?php
73
- wphb_get_caching_cloudflare_frequencies_dropdown( array(
74
- 'name' => 'wphb-caching-cloudflare-summary-set-expiry',
75
- 'class' => 'wphb-expiry-select',
76
- 'selected' => $cf_current,
77
- ));
78
- endif; ?>
79
- </div><!-- end wphb-border-frame -->
80
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  </div><!-- end col-two-third -->
82
  </div><!-- end row -->
 
83
 
84
  <div class="row settings-form">
85
  <div class="col-third">
@@ -96,7 +107,7 @@
96
 
97
  if ( ! $cf_active ) : ?>
98
  <span class="sub">
99
- <?php esc_html_e( 'Using CloudFlare?', 'wphb' ); ?>
100
  <a href="#" id="connect-cloudflare-link">
101
  <?php esc_html_e( 'Connect account', 'wphb' ); ?>
102
  </a>
@@ -113,7 +124,7 @@
113
  <div class="tabs">
114
  <div class="tab">
115
  <label for="apache-config-auto"><?php esc_html_e( 'Automatic', 'wphb' ); ?></label>
116
- <input type="radio" name="apache-config-type" id="apache-config-auto">
117
  <div class="content">
118
  <span class="sub">
119
  <?php esc_html_e( 'Hummingbird can automatically apply browser caching for Apache servers by writing your .htaccess file. Alternately, switch to Manual to apply these rules yourself.', 'wphb' ); ?>
@@ -268,9 +279,9 @@
268
  <?php else : ?>
269
  <p><?php
270
  printf(
271
- /* translators: %s: Link to TechNet */
272
- __( 'For IIS servers, <a href="%s">visit Microsoft TechNet</a>', 'wphb' ),
273
- 'https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/25d2170b-09c0-45fd-8da4-898cf9a7d568.mspx?mfr=true' ); ?>
274
  </p>
275
  <?php endif; ?>
276
  </div>
@@ -283,9 +294,9 @@
283
  <?php else : ?>
284
  <p><?php
285
  printf(
286
- /* translators: %s: Link to TechNet */
287
- __( 'For IIS 7 servers, <a href="%s">visit Microsoft TechNet</a>', 'wphb' ),
288
- 'https://technet.microsoft.com/en-us/library/cc771003(v=ws.10).aspx' ); ?>
289
  </p>
290
  <?php endif; ?>
291
  </div>
@@ -293,7 +304,7 @@
293
 
294
  <div id="wphb-server-instructions-cloudflare" class="wphb-server-instructions hidden" data-server="cloudflare">
295
  <span class="sub">
296
- <?php esc_html_e( 'Hummingbird can control your CloudFlare Browser Cache settings from here. Simply add your CloudFlare API details and configure away.', 'wphb' ); ?>
297
  </span>
298
  <?php
299
  /* @var WP_Hummingbird_Module_Cloudflare $cf_module */
@@ -325,22 +336,22 @@
325
  <script type="text/template" id="cloudflare-step-credentials">
326
  <div class="cloudflare-step">
327
  <form class="wphb-border-frame with-padding" action="" method="post" id="cloudflare-credentials">
328
- <label for="cloudflare-email"><?php esc_html_e( 'CloudFlare account email', 'wphb' ); ?>
329
  <input type="text" autocomplete="off" value="{{ data.email }}" name="cloudflare-email" id="cloudflare-email" placeholder="<?php esc_attr_e( 'Enter email address', 'wphb' ); ?>">
330
  </label>
331
 
332
- <label for="cloudflare-api-key"><?php esc_html_e( 'CloudFlare Global API Key', 'wphb' ); ?>
333
  <input type="text" autocomplete="off" value="{{ data.apiKey }}" name="cloudflare-api-key" id="cloudflare-api-key" placeholder="<?php esc_attr_e( 'Enter your 37 digit API key', 'wphb' ); ?>">
334
  </label>
335
 
336
  <p class="cloudflare-submit">
337
  <span class="spinner cloudflare-spinner"></span>
338
- <input type="submit" class="button button-large" value="<?php echo esc_attr( _x( 'Connect', 'Connect to CloufFlare button text', 'wphb' ) ); ?>">
339
  </p>
340
  <p id="cloudflare-how-to-title"><a href="#cloudflare-how-to"><?php esc_html_e( 'Need help getting your API Key?', 'wphb' ); ?></a></p>
341
  <div class="clear"></div>
342
  <ol id="cloudflare-how-to" class="wphb-block-content-blue">
343
- <li><?php printf( __( '<a target="_blank" href="%s">Log in</a> to your CloudFlare account.', 'wphb' ), 'https://www.cloudflare.com/a/login' ); ?></li>
344
  <li><?php esc_html_e( 'Go to My Settings.', 'wphb' ); ?></li>
345
  <li><?php esc_html_e( 'Scroll down to API Key.', 'wphb' ); ?></li>
346
  <li><?php esc_html_e( "Click 'View API Key' button and copy your API identifier.", 'wphb' ); ?></li>
@@ -353,25 +364,41 @@
353
  <div class="cloudflare-step">
354
  <form action="" method="post" id="cloudflare-zone">
355
  <# if ( ! data.zones.length ) { #>
356
- <p><?php esc_html_e( 'It appears you have no active zones available. Double check your domain has been added to CloudFlare and try again.', 'wphb' ); ?></p>
357
  <p class="cloudflare-submit">
358
  <a href="<?php echo esc_url( wphb_get_admin_menu_url( 'caching' ) ); ?>&reload=<?php echo time(); ?>#wphb-box-dashboard-cloudflare" class="button"><?php esc_html_e( 'Re-Check', 'wphb' ); ?></a>
359
  </p>
360
- <# } else { #>
 
 
 
 
 
 
 
 
361
  <p>
362
- <label for="cloudflare-zone"><?php esc_html_e( 'Select the domain that matches this website', 'wphb' ); ?></label>
363
  <select name="cloudflare-zone" id="cloudflare-zone">
364
- <option value=""><?php esc_html_e( 'Select domain', 'wphb' ); ?></option>
365
  <# for ( i in data.zones ) { #>
366
  <option value="{{ data.zones[i].value }}">{{{ data.zones[i].label }}}</option>
367
- <# } #>
368
  </select>
 
369
  <p class="cloudflare-submit">
370
  <span class="spinner cloudflare-spinner"></span>
371
- <input type="submit" class="button" value="<?php esc_attr_e( 'Enable CloudFlare', 'wphb' ); ?>">
372
  </p>
373
- <# } #>
374
- <div class="clear"></div>
 
 
 
 
 
 
 
375
  </form>
376
  </div>
377
  </script>
@@ -379,17 +406,17 @@
379
  <script type="text/template" id="cloudflare-step-final">
380
  <div class="cloudflare-step">
381
  <div class="wphb-caching-success wphb-notice wphb-notice-blue">
382
- <p><?php esc_html_e( 'CloudFlare is connected for this domain. Adjust your expiry settings and save your settings to update your CloudFlare cache settings.', 'wphb' ); ?></p>
383
  </div>
384
  <p class="cloudflare-data">
385
  <?php
386
  $cf_zone_name = wphb_get_setting( 'cloudflare-zone-name' );
387
  if ( ! empty( $cf_zone_name ) ) : ?>
388
- <span><strong><?php _ex( 'Zone', 'CloudFlare Zone', 'wphb' ); ?>:</strong> {{ data.zoneName }}</span>
389
  <?php endif;
390
  $cf_plan = $cf_module->get_plan();
391
  if ( ! empty( $cf_plan ) ) : ?>
392
- <span><strong><?php _ex( 'Plan', 'CloudFlare Plan', 'wphb' ); ?>:</strong> {{ data.plan }}</span>
393
  <?php endif; ?>
394
  </p>
395
  <div class="wphb-border-frame with-padding">
@@ -423,6 +450,17 @@
423
  if ( window.WPHB_Admin ) {
424
  window.WPHB_Admin.getModule( 'cloudflare' );
425
  }
 
 
 
 
 
426
  });
427
  </script>
428
  <?php endif; ?>
 
 
 
 
 
 
7
  * @var array $results Current report.
8
  * @var array $human_results Current report in readable format.
9
  * @var array $expires Current expiration value settings.
10
+ * @var bool $expiry_selects Expiry selects.
11
+ * @var bool $cf_active Cloudflare status.
12
+ * @var int $cf_current Cloudflare expiration value.
13
+ * @var string $cf_disable_url Cloudflare deactivate URL.
14
  * @var string $server_type Current server type.
15
  * @var array $snippets Code snippets for servers.
16
  * @var bool $htaccess_written File .htaccess is written.
17
  * @var bool $htaccess_writable File .htaccess is writable.
18
  * @var bool $already_enabled Caching is enabled.
19
+ * @var bool $all_expiry All expiry values the same.
20
  * @var string $enable_link Activate automatic caching link.
21
  * @var string $disable_link Disable automatic caching link.
22
  */
23
 
24
+ if ( $expiry_selects ) : ?>
25
  <div class="row settings-form with-bottom-border">
26
  <div class="col-third">
27
  <strong><?php esc_html_e( 'Expiry Settings', 'wphb' ) ?></strong>
30
  </span>
31
  </div><!-- end col-third -->
32
  <div class="col-two-third">
33
+ <form action="" method="post">
34
+ <input type="hidden" class="hb-server-type" name="hb_server_type" value="<?php echo esc_attr( $server_type ); ?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  <?php if ( ! $cf_active ) : ?>
36
+ <div class="wphb-radio-group">
37
+ <input type="radio" name="expiry-set-type" id="expiry-all-types" value="all" <?php checked( $all_expiry ); ?>>
38
+ <label for="expiry-all-types"><?php esc_html_e( 'Apply for all cache types', 'wphb' ); ?></label>
 
 
 
 
 
 
39
  </div>
40
+ <div class="wphb-radio-group">
41
+ <input type="radio" name="expiry-set-type" id="expiry-single-type" value="single" <?php checked( ! $all_expiry ); ?>>
42
+ <label for="expiry-single-type"><?php esc_html_e( 'Apply for each cache type', 'wphb' ); ?></label>
43
+ </div>
44
+ <?php endif; ?>
45
+
46
+ <div class="wphb-border-frame with-padding">
47
+ <small>
48
+ <?php esc_html_e( 'Please choose your desired expiry time. Google recommends 8 days as a good benchmark.', 'wphb' ); ?>
49
+ </small>
50
+ <?php if ( ! $cf_active ) : ?>
51
+ <div data="expiry-all-types">
52
+ <label><?php esc_html_e( 'All types', 'wphb' ); ?></label>
53
  <?php
54
  wphb_get_caching_frequencies_dropdown( array(
55
+ 'name' => 'set-expiry-all',
56
  'class' => 'wphb-expiry-select',
57
+ 'selected' => $expires['css'],
58
+ 'data-type' => 'all',
59
  ));
60
+ ?>
61
+ </div>
62
+ <div class="hidden" data="expiry-single-type">
63
+ <?php foreach ( $human_results as $type => $result ) : ?>
64
+ <label><?php echo esc_html( $type ); ?></label>
65
+ <?php
66
+ wphb_get_caching_frequencies_dropdown( array(
67
+ 'name' => 'set-expiry-' . $type,
68
+ 'class' => 'wphb-expiry-select',
69
+ 'selected' => $expires[ $type ],
70
+ 'data-type' => $type,
71
+ ));
72
+ endforeach;
73
+ ?>
74
+ </div>
75
+ <?php elseif ( $cf_active ) : ?>
76
+ <label><?php esc_html_e( 'Choose expiry', 'wphb' ); ?></label>
77
+ <?php
78
+ wphb_get_caching_cloudflare_frequencies_dropdown( array(
79
+ 'name' => 'wphb-caching-cloudflare-summary-set-expiry',
80
+ 'class' => 'wphb-expiry-select',
81
+ 'selected' => $cf_current,
82
+ ));
83
+ endif;
84
+ ?>
85
+ </div><!-- end wphb-border-frame -->
86
+ <div class="buttons alignright">
87
+ <input type="submit" class="button button-large" name="submit" value="<?php esc_attr_e( 'Save Changes', 'wphb' ); ?>"/>
88
+ </div>
89
+ <?php wp_nonce_field( 'wphb-caching' ); ?>
90
+ </form>
91
  </div><!-- end col-two-third -->
92
  </div><!-- end row -->
93
+ <?php endif; ?>
94
 
95
  <div class="row settings-form">
96
  <div class="col-third">
107
 
108
  if ( ! $cf_active ) : ?>
109
  <span class="sub">
110
+ <?php esc_html_e( 'Using Cloudflare?', 'wphb' ); ?>
111
  <a href="#" id="connect-cloudflare-link">
112
  <?php esc_html_e( 'Connect account', 'wphb' ); ?>
113
  </a>
124
  <div class="tabs">
125
  <div class="tab">
126
  <label for="apache-config-auto"><?php esc_html_e( 'Automatic', 'wphb' ); ?></label>
127
+ <input type="radio" name="apache-config-type" id="apache-config-auto" checked>
128
  <div class="content">
129
  <span class="sub">
130
  <?php esc_html_e( 'Hummingbird can automatically apply browser caching for Apache servers by writing your .htaccess file. Alternately, switch to Manual to apply these rules yourself.', 'wphb' ); ?>
279
  <?php else : ?>
280
  <p><?php
281
  printf(
282
+ /* translators: %s: Link to TechNet */
283
+ __( 'For IIS servers, <a href="%s" target="_blank">visit Microsoft TechNet</a>', 'wphb' ),
284
+ 'https://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/25d2170b-09c0-45fd-8da4-898cf9a7d568.mspx?mfr=true' ); ?>
285
  </p>
286
  <?php endif; ?>
287
  </div>
294
  <?php else : ?>
295
  <p><?php
296
  printf(
297
+ /* translators: %s: Link to TechNet */
298
+ __( 'For IIS 7 servers, <a href="%s" target="_blank">visit Microsoft TechNet</a>', 'wphb' ),
299
+ 'https://technet.microsoft.com/en-us/library/cc771003(v=ws.10).aspx' ); ?>
300
  </p>
301
  <?php endif; ?>
302
  </div>
304
 
305
  <div id="wphb-server-instructions-cloudflare" class="wphb-server-instructions hidden" data-server="cloudflare">
306
  <span class="sub">
307
+ <?php esc_html_e( 'Hummingbird can control your Cloudflare Browser Cache settings from here. Simply add your Cloudflare API details and configure away.', 'wphb' ); ?>
308
  </span>
309
  <?php
310
  /* @var WP_Hummingbird_Module_Cloudflare $cf_module */
336
  <script type="text/template" id="cloudflare-step-credentials">
337
  <div class="cloudflare-step">
338
  <form class="wphb-border-frame with-padding" action="" method="post" id="cloudflare-credentials">
339
+ <label for="cloudflare-email"><?php esc_html_e( 'Cloudflare account email', 'wphb' ); ?>
340
  <input type="text" autocomplete="off" value="{{ data.email }}" name="cloudflare-email" id="cloudflare-email" placeholder="<?php esc_attr_e( 'Enter email address', 'wphb' ); ?>">
341
  </label>
342
 
343
+ <label for="cloudflare-api-key"><?php esc_html_e( 'Cloudflare Global API Key', 'wphb' ); ?>
344
  <input type="text" autocomplete="off" value="{{ data.apiKey }}" name="cloudflare-api-key" id="cloudflare-api-key" placeholder="<?php esc_attr_e( 'Enter your 37 digit API key', 'wphb' ); ?>">
345
  </label>
346
 
347
  <p class="cloudflare-submit">
348
  <span class="spinner cloudflare-spinner"></span>
349
+ <input type="submit" class="button button-large" value="<?php echo esc_attr( _x( 'Connect', 'Connect to Cloudflare button text', 'wphb' ) ); ?>">
350
  </p>
351
  <p id="cloudflare-how-to-title"><a href="#cloudflare-how-to"><?php esc_html_e( 'Need help getting your API Key?', 'wphb' ); ?></a></p>
352
  <div class="clear"></div>
353
  <ol id="cloudflare-how-to" class="wphb-block-content-blue">
354
+ <li><?php printf( __( '<a target="_blank" href="%s">Log in</a> to your Cloudflare account.', 'wphb' ), 'https://www.cloudflare.com/a/login' ); ?></li>
355
  <li><?php esc_html_e( 'Go to My Settings.', 'wphb' ); ?></li>
356
  <li><?php esc_html_e( 'Scroll down to API Key.', 'wphb' ); ?></li>
357
  <li><?php esc_html_e( "Click 'View API Key' button and copy your API identifier.", 'wphb' ); ?></li>
364
  <div class="cloudflare-step">
365
  <form action="" method="post" id="cloudflare-zone">
366
  <# if ( ! data.zones.length ) { #>
367
+ <p><?php _e( 'It appears you have no active zones available. Double check your domain has been added to Cloudflare and try again.', 'wphb' ); ?></p>
368
  <p class="cloudflare-submit">
369
  <a href="<?php echo esc_url( wphb_get_admin_menu_url( 'caching' ) ); ?>&reload=<?php echo time(); ?>#wphb-box-dashboard-cloudflare" class="button"><?php esc_html_e( 'Re-Check', 'wphb' ); ?></a>
370
  </p>
371
+ <# } else { #>
372
+ <# var zone = false; #>
373
+ <# for( var i = 0, len = data.zones.length; i < len; i++ ) { #>
374
+ <# if( data.zones[i].label === window.location.hostname ) { #>
375
+ <# zone = true; #>
376
+ <# break; #>
377
+ <# } #>
378
+ <# } #>
379
+ <# if ( zone ) { #>
380
  <p>
381
+ <label for="cloudflare-zone"><?php _e( 'Select the domain that matches this website', 'wphb' ); ?></label>
382
  <select name="cloudflare-zone" id="cloudflare-zone">
383
+ <option value=""><?php _e( 'Select domain', 'wphb' ); ?></option>
384
  <# for ( i in data.zones ) { #>
385
  <option value="{{ data.zones[i].value }}">{{{ data.zones[i].label }}}</option>
386
+ <# } #>
387
  </select>
388
+ </p>
389
  <p class="cloudflare-submit">
390
  <span class="spinner cloudflare-spinner"></span>
391
+ <input type="submit" class="button" value="<?php esc_attr_e( 'Enable Cloudflare', 'wphb' ); ?>">
392
  </p>
393
+ <# } else { #>
394
+ <p><?php _e( 'It appears you have no active zones available. Double check your domain has been added to Cloudflare and try again.', 'wphb' ); ?></p>
395
+ <p class="cloudflare-submit">
396
+ <a href="<?php echo esc_url( $cf_disable_url ); ?>" class="cloudflare-deactivate button button-ghost button"><?php esc_attr_e( 'Deactivate', 'wphb' ); ?></a>
397
+ <a href="<?php echo esc_url( wphb_get_admin_menu_url( 'caching' ) ); ?>&reload=<?php echo time(); ?>#wphb-box-dashboard-cloudflare" class="button"><?php esc_html_e( 'Re-Check', 'wphb' ); ?></a>
398
+ </p>
399
+ <# } #>
400
+ <# } #>
401
+ <div class="clear"></div>
402
  </form>
403
  </div>
404
  </script>
406
  <script type="text/template" id="cloudflare-step-final">
407
  <div class="cloudflare-step">
408
  <div class="wphb-caching-success wphb-notice wphb-notice-blue">
409
+ <p><?php esc_html_e( 'Cloudflare is connected for this domain. Adjust your expiry settings and save your settings to update your Cloudflare cache settings.', 'wphb' ); ?></p>
410
  </div>
411
  <p class="cloudflare-data">
412
  <?php
413
  $cf_zone_name = wphb_get_setting( 'cloudflare-zone-name' );
414
  if ( ! empty( $cf_zone_name ) ) : ?>
415
+ <span><strong><?php _ex( 'Zone', 'Cloudflare Zone', 'wphb' ); ?>:</strong> {{ data.zoneName }}</span>
416
  <?php endif;
417
  $cf_plan = $cf_module->get_plan();
418
  if ( ! empty( $cf_plan ) ) : ?>
419
+ <span><strong><?php _ex( 'Plan', 'Cloudflare Plan', 'wphb' ); ?>:</strong> {{ data.plan }}</span>
420
  <?php endif; ?>
421
  </p>
422
  <div class="wphb-border-frame with-padding">
450
  if ( window.WPHB_Admin ) {
451
  window.WPHB_Admin.getModule( 'cloudflare' );
452
  }
453
+ //jq.on('click', '.tab > input[type=radio]', updateHash);
454
+ //jQuery('.tab > input[type=radio]').trigger('wpmu:change')
455
+ var content = jQuery('.tab > #apache-config-manual');
456
+ window.console.log( content );
457
+ content.trigger('click')
458
  });
459
  </script>
460
  <?php endif; ?>
461
+ <script>
462
+ jQuery(window).load(function() {
463
+ var caching = window.WPHB_Admin.getModule( 'caching' );
464
+ caching.updateTabSize();
465
+ });
466
+ </script>
admin/views/caching/cloudflare-meta-box.php CHANGED
@@ -32,25 +32,25 @@ $cloudflare_js_settings = wp_json_encode( $cloudflare_js_settings );
32
  <script type="text/template" id="cloudflare-step-credentials">
33
  <div class="cloudflare-step">
34
 
35
- <p><?php _e( 'Hummingbird can control your CloudFlare Browser Cache settings from here. Simply add your CloudFlare API details and configure away.', 'wphb' ); ?></p>
36
 
37
  <form class="wphb-border-frame with-padding" action="" method="post" id="cloudflare-credentials">
38
- <label for="cloudflare-email"><?php _e( 'CloudFlare email', 'wphb' ); ?>
39
- <input type="text" autocomplete="off" value="{{ data.email }}" name="cloudflare-email" id="cloudflare-email" placeholder="<?php _e( 'Your CloudFlare account email', 'wphb' ); ?>">
40
  </label>
41
 
42
- <label for="cloudflare-api-key"><?php _e( 'CloudFlare Global API Key', 'wphb' ); ?>
43
  <input type="text" autocomplete="off" value="{{ data.apiKey }}" name="cloudflare-api-key" id="cloudflare-api-key" placeholder="<?php _e( 'Enter your 37 digit API key', 'wphb' ); ?>">
44
  </label>
45
 
46
  <p class="cloudflare-submit">
47
  <span class="spinner cloudflare-spinner"></span>
48
- <input type="submit" class="button" value="<?php echo esc_attr( _x( 'Connect', 'Connect to CloufFlare button text', 'wphb' ) ); ?>">
49
  </p>
50
  <p id="cloudflare-how-to-title"><a href="#cloudflare-how-to"><?php _e( 'Need help getting your API Key?', 'wphb' ); ?></a></p>
51
  <div class="clear"></div>
52
  <ol id="cloudflare-how-to" class="wphb-block-content-blue">
53
- <li><?php printf( __( '<a target="_blank" href="%s">Log in</a> to your CloudFlare account.', 'wphb' ), 'https://www.cloudflare.com/a/login' ); ?></li>
54
  <li><?php _e( 'Go to My Settings.', 'wphb' ); ?></li>
55
  <li><?php _e( 'Scroll down to API Key.', 'wphb' ); ?></li>
56
  <li><?php _e( "Click 'View API Key' button and copy your API identifier.", 'wphb' ); ?></li>
@@ -63,7 +63,7 @@ $cloudflare_js_settings = wp_json_encode( $cloudflare_js_settings );
63
  <div class="cloudflare-step">
64
  <form action="" method="post" id="cloudflare-zone">
65
  <# if ( ! data.zones.length ) { #>
66
- <p><?php _e( 'It appears you have no active zones available. Double check your domain has been added to CloudFlare and try again.', 'wphb' ); ?></p>
67
  <p class="cloudflare-submit">
68
  <a href="<?php echo esc_url( wphb_get_admin_menu_url( 'caching' ) ); ?>&reload=<?php echo time(); ?>#wphb-box-dashboard-cloudflare" class="button"><?php esc_html_e( 'Re-Check', 'wphb' ); ?></a>
69
  </p>
@@ -78,7 +78,7 @@ $cloudflare_js_settings = wp_json_encode( $cloudflare_js_settings );
78
  </select>
79
  <p class="cloudflare-submit">
80
  <span class="spinner cloudflare-spinner"></span>
81
- <input type="submit" class="button" value="<?php esc_attr_e( 'Enable CloudFlare', 'wphb' ); ?>">
82
  </p>
83
  <# } #>
84
  <div class="clear"></div>
@@ -89,21 +89,21 @@ $cloudflare_js_settings = wp_json_encode( $cloudflare_js_settings );
89
  <script type="text/template" id="cloudflare-step-final">
90
  <div class="cloudflare-step">
91
  <div class="wphb-notice wphb-notice-blue">
92
- <p><?php esc_html_e( 'CloudFlare is active on this domain. The settings you choose here will also update CloudFlare settings.', 'wphb' ); ?></p>
93
  </div>
94
  <p class="cloudflare-data">
95
  <?php
96
  $zone_name = wphb_get_setting( 'cloudflare-zone-name' );
97
  if ( ! empty( $zone_name ) ) : ?>
98
- <span><strong><?php _ex( 'Zone', 'CloudFlare Zone', 'wphb' ); ?>:</strong> {{ data.zoneName }}</span>
99
  <?php endif;
100
  $plan = $cf_module->get_plan();
101
  if ( ! empty( $plan ) ) : ?>
102
- <span><strong><?php _ex( 'Plan', 'CloudFlare Plan', 'wphb' ); ?>:</strong> {{ data.plan }}</span>
103
  <?php endif; ?>
104
  </p>
105
  <hr>
106
- <p class="cloudflare-clear-cache-text"><?php esc_html_e( 'Made changes to your website? Use Purge Cache button to clear CloudFlare\'s cache', 'wphb' ); ?></p class="cloudflare-clear-cache-text">
107
  <p class="cloudflare-clear-cache">
108
  <input type="submit" class="button button-ghost" value="<?php esc_attr_e( 'Purge Cache', 'wphb' ); ?>">
109
  <span class="spinner cloudflare-spinner"></span>
32
  <script type="text/template" id="cloudflare-step-credentials">
33
  <div class="cloudflare-step">
34
 
35
+ <p><?php _e( 'Hummingbird can control your Cloudflare Browser Cache settings from here. Simply add your Cloudflare API details and configure away.', 'wphb' ); ?></p>
36
 
37
  <form class="wphb-border-frame with-padding" action="" method="post" id="cloudflare-credentials">
38
+ <label for="cloudflare-email"><?php _e( 'Cloudflare email', 'wphb' ); ?>
39
+ <input type="text" autocomplete="off" value="{{ data.email }}" name="cloudflare-email" id="cloudflare-email" placeholder="<?php _e( 'Your Cloudflare account email', 'wphb' ); ?>">
40
  </label>
41
 
42
+ <label for="cloudflare-api-key"><?php _e( 'Cloudflare Global API Key', 'wphb' ); ?>
43
  <input type="text" autocomplete="off" value="{{ data.apiKey }}" name="cloudflare-api-key" id="cloudflare-api-key" placeholder="<?php _e( 'Enter your 37 digit API key', 'wphb' ); ?>">
44
  </label>
45
 
46
  <p class="cloudflare-submit">
47
  <span class="spinner cloudflare-spinner"></span>
48
+ <input type="submit" class="button" value="<?php echo esc_attr( _x( 'Connect', 'Connect to Cloudflare button text', 'wphb' ) ); ?>">
49
  </p>
50
  <p id="cloudflare-how-to-title"><a href="#cloudflare-how-to"><?php _e( 'Need help getting your API Key?', 'wphb' ); ?></a></p>
51
  <div class="clear"></div>
52
  <ol id="cloudflare-how-to" class="wphb-block-content-blue">
53
+ <li><?php printf( __( '<a target="_blank" href="%s">Log in</a> to your Cloudflare account.', 'wphb' ), 'https://www.cloudflare.com/a/login' ); ?></li>
54
  <li><?php _e( 'Go to My Settings.', 'wphb' ); ?></li>
55
  <li><?php _e( 'Scroll down to API Key.', 'wphb' ); ?></li>
56
  <li><?php _e( "Click 'View API Key' button and copy your API identifier.", 'wphb' ); ?></li>
63
  <div class="cloudflare-step">
64
  <form action="" method="post" id="cloudflare-zone">
65
  <# if ( ! data.zones.length ) { #>
66
+ <p><?php _e( 'It appears you have no active zones available. Double check your domain has been added to Cloudflare and try again.', 'wphb' ); ?></p>
67
  <p class="cloudflare-submit">
68
  <a href="<?php echo esc_url( wphb_get_admin_menu_url( 'caching' ) ); ?>&reload=<?php echo time(); ?>#wphb-box-dashboard-cloudflare" class="button"><?php esc_html_e( 'Re-Check', 'wphb' ); ?></a>
69
  </p>
78
  </select>
79
  <p class="cloudflare-submit">
80
  <span class="spinner cloudflare-spinner"></span>
81
+ <input type="submit" class="button" value="<?php esc_attr_e( 'Enable Cloudflare', 'wphb' ); ?>">
82
  </p>
83
  <# } #>
84
  <div class="clear"></div>
89
  <script type="text/template" id="cloudflare-step-final">
90
  <div class="cloudflare-step">
91
  <div class="wphb-notice wphb-notice-blue">
92
+ <p><?php esc_html_e( 'Cloudflare is active on this domain. The settings you choose here will also update Cloudflare settings.', 'wphb' ); ?></p>
93
  </div>
94
  <p class="cloudflare-data">
95
  <?php
96
  $zone_name = wphb_get_setting( 'cloudflare-zone-name' );
97
  if ( ! empty( $zone_name ) ) : ?>
98
+ <span><strong><?php _ex( 'Zone', 'Cloudflare Zone', 'wphb' ); ?>:</strong> {{ data.zoneName }}</span>
99
  <?php endif;
100
  $plan = $cf_module->get_plan();
101
  if ( ! empty( $plan ) ) : ?>
102
+ <span><strong><?php _ex( 'Plan', 'Cloudflare Plan', 'wphb' ); ?>:</strong> {{ data.plan }}</span>
103
  <?php endif; ?>
104
  </p>
105
  <hr>
106
+ <p class="cloudflare-clear-cache-text"><?php esc_html_e( 'Made changes to your website? Use Purge Cache button to clear Cloudflare\'s cache', 'wphb' ); ?></p class="cloudflare-clear-cache-text">
107
  <p class="cloudflare-clear-cache">
108
  <input type="submit" class="button button-ghost" value="<?php esc_attr_e( 'Purge Cache', 'wphb' ); ?>">
109
  <span class="spinner cloudflare-spinner"></span>
admin/views/dashboard/caching/module-meta-box-header.php CHANGED
@@ -4,8 +4,8 @@
4
  *
5
  * @package Hummingbird
6
  *
7
- * @var bool $cf_active CloudFlare status.
8
- * @var int $cf_current Current CloudFlare caching value.
9
  * @var int $issues Number of issues.
10
  * @var string $title Module title.
11
  */
4
  *
5
  * @package Hummingbird
6
  *
7
+ * @var bool $cf_active Cloudflare status.
8
+ * @var int $cf_current Current Cloudflare caching value.
9
  * @var int $issues Number of issues.
10
  * @var string $title Module title.
11
  */
admin/views/dashboard/performance/module-error-meta-box.php CHANGED
@@ -11,13 +11,15 @@
11
 
12
  ?>
13
  <div class="row">
14
- <div class="wphb-notice wphb-notice-error wphb-notice-box can-close">
15
- <p><?php echo $error; ?></p>
16
- <a href="<?php echo esc_url( $retry_url ); ?>" class="button button-grey">
17
- <?php esc_html_e( 'Try again', 'wphb' ); ?>
18
- </a>
19
- <a target="_blank" href="<?php echo esc_url( $support_url ); ?>" class="button button-grey">
20
- <?php esc_html_e( 'Support', 'wphb' ); ?>
21
- </a>
 
 
22
  </div>
23
  </div>
11
 
12
  ?>
13
  <div class="row">
14
+ <div class="wphb-notice wphb-notice-error wphb-notice-box">
15
+ <p><?php echo esc_html( $error ); ?></p>
16
+ <div class="buttons">
17
+ <a href="<?php echo esc_url( $retry_url ); ?>" class="button button-grey">
18
+ <?php esc_html_e( 'Try again', 'wphb' ); ?>
19
+ </a>
20
+ <a target="_blank" href="<?php echo esc_url( $support_url ); ?>" class="button button-grey">
21
+ <?php esc_html_e( 'Support', 'wphb' ); ?>
22
+ </a>
23
+ </div>
24
  </div>
25
  </div>
admin/views/dashboard/uptime/error-meta-box.php CHANGED
@@ -11,12 +11,14 @@
11
  ?>
12
  <div class="row">
13
  <div class="wphb-notice wphb-notice-error wphb-notice-box">
14
- <p><?php echo $error; ?></p>
15
- <a href="<?php echo esc_url( $retry_url ); ?>" class="button button-grey">
16
- <?php esc_html_e( 'Try again', 'wphb' ); ?>
17
- </a>
18
- <a target="_blank" href="<?php echo esc_url( $support_url ); ?>" class="button button-grey">
19
- <?php esc_html_e( 'Support', 'wphb' ); ?>
20
- </a>
 
 
21
  </div>
22
  </div>
11
  ?>
12
  <div class="row">
13
  <div class="wphb-notice wphb-notice-error wphb-notice-box">
14
+ <p><?php echo esc_html( $error ); ?></p>
15
+ <div class="buttons">
16
+ <a href="<?php echo esc_url( $retry_url ); ?>" class="button button-grey">
17
+ <?php esc_html_e( 'Try again', 'wphb' ); ?>
18
+ </a>
19
+ <a target="_blank" href="<?php echo esc_url( $support_url ); ?>" class="button button-grey">
20
+ <?php esc_html_e( 'Support', 'wphb' ); ?>
21
+ </a>
22
+ </div>
23
  </div>
24
  </div>
admin/views/dashboard/welcome/meta-box.php CHANGED
@@ -5,8 +5,8 @@
5
  * @package Hummingbird
6
  *
7
  * @var int $caching_issues Number of issues.
8
- * @var bool $cf_active CloudFlare status.
9
- * @var int $cf_current CloudFlare expiry settings.
10
  * @var int $gzip_issues Number of gzip issues.
11
  * @var object $last_report Last report object.
12
  * @var bool $uptime_active Uptime status.
@@ -95,6 +95,8 @@
95
  <a target="_blank" class="button button-disabled" id="dash-uptime-inactive">
96
  <?php esc_html_e( 'Uptime Inactive', 'wphb' ); ?>
97
  </a>
 
 
98
  <?php else :
99
  echo esc_html( $site_date );
100
  endif; ?>
5
  * @package Hummingbird
6
  *
7
  * @var int $caching_issues Number of issues.
8
+ * @var bool $cf_active Cloudflare status.
9
+ * @var int $cf_current Cloudflare expiry settings.
10
  * @var int $gzip_issues Number of gzip issues.
11
  * @var object $last_report Last report object.
12
  * @var bool $uptime_active Uptime status.
95
  <a target="_blank" class="button button-disabled" id="dash-uptime-inactive">
96
  <?php esc_html_e( 'Uptime Inactive', 'wphb' ); ?>
97
  </a>
98
+ <?php elseif ( empty( $site_date ) ) :
99
+ esc_html_e( 'Website is reported down', 'wphb' ); ?>
100
  <?php else :
101
  echo esc_html( $site_date );
102
  endif; ?>
admin/views/gzip/code-snippet-meta-box-header.php CHANGED
@@ -1,7 +1,11 @@
1
- <div class="extra">
2
- <div class="wphb-select-group">
3
- <label for="wphb-server-type" class="inline-label"><?php _e( 'Server Type:', 'wphb' ); ?></label>
4
- <?php wphb_get_servers_dropdown( array( 'selected' => $gzip_server_type ), false ); ?>
 
 
5
  </div>
6
- </div>
 
 
7
  <h3><?php echo esc_html( $title ); ?></h3>
1
+ <?php if ( ! $full_enabled ) : ?>
2
+ <div class="extra">
3
+ <div class="wphb-select-group">
4
+ <label for="wphb-server-type" class="inline-label"><?php echo esc_html( 'Server Type:', 'wphb' ); ?></label>
5
+ <?php wphb_get_servers_dropdown( array( 'selected' => $gzip_server_type ), false ); ?>
6
+ </div>
7
  </div>
8
+ <?php else : ?>
9
+ <input id="wphb-server-type" type="hidden" value="<?php echo esc_attr( $gzip_server_type ); ?>">
10
+ <?php endif; ?>
11
  <h3><?php echo esc_html( $title ); ?></h3>
admin/views/minification/enqueued-files-empty-meta-box.php CHANGED
@@ -34,7 +34,7 @@ if ( ! is_multisite() ) {
34
  wphb_enable_cdn_modal();
35
  }
36
 
37
- if ( $checking_files || isset( $_GET['wphb-cache-cleared'] ) ): // Show the progress bar if we are still checking files. ?>
38
  <script>
39
  jQuery(document).ready( function() {
40
  window.WPHB_Admin.getModule( 'minification' );
34
  wphb_enable_cdn_modal();
35
  }
36
 
37
+ if ( $checking_files || isset( $_GET['wphb-cache-cleared'] ) ) : // Show the progress bar if we are still checking files. ?>
38
  <script>
39
  jQuery(document).ready( function() {
40
  window.WPHB_Admin.getModule( 'minification' );
admin/views/minification/enqueued-files-meta-box.php CHANGED
@@ -1,105 +1,131 @@
1
- <!--<div class="wphb-table-wrapper complex">-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- <?php if ( $is_server_error ): ?>
4
- <div class="wphb-notice wphb-notice-error wphb-notice-box can-close">
5
- <span class="close"></span>
6
- <p><?php printf( __( 'It seems that we are having problems in our servers. Minification will be turned off for %d minutes', 'wphb' ), $error_time_left ); ?></p>
7
- <p><?php echo $server_errors[0]->get_error_message(); ?></p>
8
- </div>
9
- <?php endif; ?>
10
-
11
- <p><?php _e( 'Choose what files to minify, combine and where to position them in the page.', 'wphb' ); ?></p>
12
-
13
- <div class="alignleft">
14
- <a href="#bulk-update-modal" class="button button-notice disabled" id="bulk-update" rel="dialog"><?php _e( 'Bulk Update', 'wphb' ); ?></a>
15
- </div>
16
- <div class="buttons alignright">
17
- <a href="#" class="button button-ghost" id="wphb-minification-filter-button"><?php _e( 'Filter', 'wphb' ); ?></a>
18
- </div>
19
- <div class="clear"></div>
20
-
21
- <div id="wphb-minification-filter" class="wphb-border-frame hidden">
22
- <div class="wphb-minification-filter-block" id="wphb-minification-filter-block-search">
23
- <h3 class="wphb-block-title"><?php _e( 'Filter', 'wphb' ); ?></h3>
24
-
25
- <div class="wphb-filters-data">
26
-
27
- <div class="wphb-minification-filter-field wphb-minification-filter-field-select">
28
- <label for="wphb-secondary-filter" class="screen-reader-text"><?php _e( 'Filter plugin or theme.', 'wphb' ); ?></label>
29
- <select name="wphb-secondary-filter" id="wphb-secondary-filter">
30
- <option value=""><?php esc_html_e( 'Choose Plugin or Theme', 'wphb' ); ?></option>
31
- <option value="other"><?php esc_html_e( 'Others', 'wphb' ); ?></option>
32
- <?php foreach ( $selector_filter as $secondary_filter ): ?>
33
- <option value="<?php echo esc_attr( $secondary_filter ); ?>"><?php echo esc_html( $secondary_filter ); ?></option>
34
- <?php endforeach; ?>
35
- </select>
36
- </div>
37
-
38
- <div class="wphb-minification-filter-field wphb-minification-filter-field-search">
39
- <label for="wphb-s" class="screen-reader-text"><?php _e( 'Search by name or extension', 'wphb' ); ?></label>
40
- <input type="text" id="wphb-s" name="s" placeholder="<?php esc_attr_e( 'Search by name or extension', 'wphb' ); ?>" autocomplete="off">
41
- </div>
42
-
43
- </div>
44
-
45
- </div>
46
- </div>
47
-
48
- <div class="wphb-enqueued-files">
49
- <div class="wphb-border-row-header">
50
- <div class="wphb-minification-file-select">
51
- <label for="minification-bulk-file" class="screen-reader-text"><?php _e( 'Hello', 'wphb' ); ?></label>
52
- <input type="checkbox" id="minification-bulk-file" name="minification-bulk-files" class="wphb-minification-bulk-file-selector">
53
  </div>
54
- <div class="wphb-minification-file-details"><?php _e( 'File Details', 'wphb' ); ?></div>
55
- <div class="wphb-minification-exclude">&nbsp;</div>
56
- <div class="wphb-minification-row-details">
57
- <span><?php _e( 'Configuration', 'wphb' ); ?></span>
58
- <span><?php _e( 'Filesize', 'wphb' ); ?></span>
59
- </div>
60
- </div>
61
- <?php echo $styles_rows; ?>
62
- <?php echo $scripts_rows; ?>
63
- <div class="buttons alignright">
64
- <button type="submit" class="button button-grey button-large wphb-discard hidden"><?php esc_html_e( 'Discard Changes', 'wphb' ); ?></button>
65
- <input type="submit" class="button button-large" name="submit" value="<?php esc_attr_e( 'Save Changes', 'wphb' ); ?>"/>
66
- </div>
67
- <div class="clear"></div>
68
- </div>
69
-
70
- <!--</div>-->
 
 
 
 
 
 
 
 
 
 
71
 
72
  <?php wp_nonce_field( 'wphb-enqueued-files' ); ?>
73
  <?php wphb_bulk_update_modal(); ?>
74
 
75
  <script type="text/javascript">
76
- jQuery(document).ready(function() {
77
- jQuery( trackChanges );
78
-
79
- // track changes made to the form
80
- function trackChanges(){
81
- jQuery('.wphb-discard').hide();
82
-
83
- jQuery(':input').on('change', function( objEvent ) {
84
-
85
- jQuery( this ).toggleClass('changed');
86
- var $changed = jQuery('.wphb-enqueued-files').find('input.changed');
87
- if ( $changed.length === 0 ) {
88
- jQuery('.wphb-discard').hide();
89
- jQuery('#bulk-update').removeClass('button-grey');
90
- jQuery('#bulk-update').addClass('button-notice disabled');
91
- } else {
92
- jQuery('.wphb-discard').show();
93
- jQuery('#bulk-update').removeClass('button-notice disabled');
94
- jQuery('#bulk-update').addClass('button-grey');
95
- }
96
- });
97
- }
98
-
99
- // toggle checkboxes
100
- jQuery('#minification-bulk-file').on('click', function() {
101
- var checkBoxes = jQuery('input[class=wphb-minification-file-selector]');
102
- checkBoxes.prop('checked', !checkBoxes.prop('checked'));
103
- });
104
- })
 
105
  </script>
1
+ <?php
2
+ /**
3
+ * Minification table.
4
+ *
5
+ * @package Hummingbird
6
+ *
7
+ * @var int $error_time_left Time left before next scan is possible.
8
+ * @var bool $is_server_error Server error status.
9
+ * @var bool $is_ssl Is server running ssl.
10
+ * @var string $scripts_rows Table rows for minified scripts.
11
+ * @var array $selector_filter List of items to filter by.
12
+ * @var array $server_errors List of server errors.
13
+ * @var string $styles_rows Table rows for minified stykes.
14
+ */
15
+
16
+ ?>
17
+ <?php if ( $is_server_error ) : ?>
18
+ <div class="wphb-notice wphb-notice-error wphb-notice-box can-close">
19
+ <span class="close"></span>
20
+ <p>
21
+ <?php printf(
22
+ /* translators: %d: Time left before another retry. */
23
+ __( 'It seems that we are having problems in our servers. Minification will be turned off for %d minutes', 'wphb' ),
24
+ $error_time_left ); ?>
25
+ </p>
26
+ <p><?php echo $server_errors[0]->get_error_message(); ?></p>
27
+ </div>
28
+ <?php endif; ?>
29
+
30
+ <p><?php esc_html_e( 'Choose what files to minify, combine and where to position them in the page.', 'wphb' ); ?></p>
31
+
32
+ <?php if ( $is_ssl ) {
33
+ $this->show_notice( 'http2-info', __( "We've disabled the Combine option because your server has HTTP/2 activated. HTTP/2 automatically optimizes the delivery of assets for you", 'wphb' ), 'blue-info', false, true );
34
+ } ?>
35
+
36
+ <div class="alignleft">
37
+ <a href="#bulk-update-modal" class="button button-notice disabled" id="bulk-update" rel="dialog">
38
+ <?php esc_html_e( 'Bulk Update', 'wphb' ); ?>
39
+ </a>
40
+ </div>
41
+ <div class="buttons alignright">
42
+ <a href="#" class="button button-ghost" id="wphb-minification-filter-button">
43
+ <?php esc_html_e( 'Filter', 'wphb' ); ?>
44
+ </a>
45
+ </div>
46
+ <div class="clear"></div>
47
+
48
+ <div id="wphb-minification-filter" class="wphb-border-frame hidden">
49
+ <div class="wphb-minification-filter-block" id="wphb-minification-filter-block-search">
50
+ <h3 class="wphb-block-title"><?php esc_html_e( 'Filter', 'wphb' ); ?></h3>
51
+
52
+ <div class="wphb-filters-data">
53
+
54
+ <div class="wphb-minification-filter-field wphb-minification-filter-field-select">
55
+ <label for="wphb-secondary-filter" class="screen-reader-text"><?php esc_html_e( 'Filter plugin or theme.', 'wphb' ); ?></label>
56
+ <select name="wphb-secondary-filter" id="wphb-secondary-filter">
57
+ <option value=""><?php esc_html_e( 'Choose Plugin or Theme', 'wphb' ); ?></option>
58
+ <option value="other"><?php esc_html_e( 'Others', 'wphb' ); ?></option>
59
+ <?php foreach ( $selector_filter as $secondary_filter ) : ?>
60
+ <option value="<?php echo esc_attr( $secondary_filter ); ?>"><?php echo esc_html( $secondary_filter ); ?></option>
61
+ <?php endforeach; ?>
62
+ </select>
63
+ </div>
64
 
65
+ <div class="wphb-minification-filter-field wphb-minification-filter-field-search">
66
+ <label for="wphb-s" class="screen-reader-text"><?php esc_html_e( 'Search by name or extension', 'wphb' ); ?></label>
67
+ <input type="text" id="wphb-s" name="s" placeholder="<?php esc_attr_e( 'Search by name or extension', 'wphb' ); ?>" autocomplete="off">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  </div>
69
+
70
+ </div>
71
+
72
+ </div>
73
+ </div>
74
+
75
+ <div class="wphb-enqueued-files">
76
+ <div class="wphb-border-row-header">
77
+ <div class="wphb-minification-file-select">
78
+ <label for="minification-bulk-file" class="screen-reader-text"><?php esc_html_e( 'Hello', 'wphb' ); ?></label>
79
+ <input type="checkbox" id="minification-bulk-file" name="minification-bulk-files" class="wphb-minification-bulk-file-selector">
80
+ </div>
81
+ <div class="wphb-minification-file-details"><?php esc_html_e( 'File Details', 'wphb' ); ?></div>
82
+ <div class="wphb-minification-exclude">&nbsp;</div>
83
+ <div class="wphb-minification-row-details">
84
+ <span><?php esc_html_e( 'Configuration', 'wphb' ); ?></span>
85
+ <span><?php esc_html_e( 'Filesize', 'wphb' ); ?></span>
86
+ </div>
87
+ </div>
88
+ <?php echo $styles_rows; ?>
89
+ <?php echo $scripts_rows; ?>
90
+ <div class="buttons alignright">
91
+ <button type="submit" class="button button-grey button-large wphb-discard hidden"><?php esc_html_e( 'Discard Changes', 'wphb' ); ?></button>
92
+ <input type="submit" class="button button-large" name="submit" value="<?php esc_attr_e( 'Save Changes', 'wphb' ); ?>"/>
93
+ </div>
94
+ <div class="clear"></div>
95
+ </div>
96
 
97
  <?php wp_nonce_field( 'wphb-enqueued-files' ); ?>
98
  <?php wphb_bulk_update_modal(); ?>
99
 
100
  <script type="text/javascript">
101
+ jQuery(document).ready(function() {
102
+ jQuery( trackChanges );
103
+
104
+ // Track changes made to the form.
105
+ function trackChanges(){
106
+ jQuery('.wphb-discard').hide();
107
+
108
+ jQuery(':input').on('change', function( objEvent ) {
109
+
110
+ jQuery( this ).toggleClass('changed');
111
+ var $changed = jQuery('.wphb-enqueued-files').find('input.changed');
112
+ var buldUpdateButton = jQuery('#bulk-update');
113
+ if ( $changed.length === 0 ) {
114
+ jQuery('.wphb-discard').hide();
115
+ buldUpdateButton.removeClass('button-grey');
116
+ buldUpdateButton.addClass('button-notice disabled');
117
+ } else {
118
+ jQuery('.wphb-discard').show();
119
+ buldUpdateButton.removeClass('button-notice disabled');
120
+ buldUpdateButton.addClass('button-grey');
121
+ }
122
+ });
123
+ }
124
+
125
+ // Toggle checkboxes.
126
+ jQuery('#minification-bulk-file').on('click', function() {
127
+ var checkBoxes = jQuery('input[class=wphb-minification-file-selector]');
128
+ checkBoxes.prop('checked', !checkBoxes.prop('checked'));
129
+ });
130
+ })
131
  </script>
admin/views/minification/enqueued-files-rows.php CHANGED
@@ -12,6 +12,8 @@
12
  * @var string $full_src File URL.
13
  * @var array $item File info.
14
  * @var bool|string $original_size False if no original size. Or size.
 
 
15
  * @var string $position File position. Possible values: '' or 'footer'.
16
  * @var string $rel_src Relative path to file.
17
  * @var bool|array $row_e
12
  * @var string $full_src File URL.
13
  * @var array $item File info.
14
  * @var bool|string $original_size False if no original size. Or size.
15
+ * @var bool $is_ssl True if site is ssl.
16
+ * @var bool $minified_file True if site is file is already minified.
17
  * @var string $position File position. Possible values: '' or 'footer'.
18
  * @var string $rel_src Relative path to file.
19
  * @var bool|array $row_e