Version Description
( 2017-11-14 ) = - New: Debugging option for page caching - New: Support for DONOTCACHEPAGE - Fix: Ability to disable minification on multisite - Fix: Rating message shown on Pro version and without a 7 day delay - Enhance: Description on clear cache notice - Enhance: Better support for clearing cache for post/page taxonomies - Enhance: Do not try to cache pages if advanced-cache.php can't load page caching class
Download this release
Release Info
Developer | jdailey |
Plugin | Hummingbird Page Speed Optimization |
Version | 1.7.0.3 |
Comparing to | |
See all releases |
Code changes from version 1.6.2 to 1.7.0.3
- _src/admin/js/admin-caching.js +5 -34
- _src/admin/js/admin-cloudflare.js +1 -1
- _src/admin/js/admin-dashboard.js +11 -1
- _src/admin/js/admin-gzip.js +34 -5
- _src/admin/js/admin-minification.js +0 -21
- _src/admin/js/minification/Row.js +5 -0
- _src/admin/js/utils/fetcher.js +7 -13
- admin/abstract-class-admin-page.php +13 -40
- admin/assets/css/admin.css +285 -57
- admin/assets/fonts/hummingbird.eot +0 -0
- admin/assets/fonts/hummingbird.svg +6 -0
- admin/assets/fonts/hummingbird.ttf +0 -0
- admin/assets/fonts/hummingbird.woff +0 -0
- admin/assets/image/graphic-hb-cf-sell@2x.png +0 -0
- admin/assets/image/hb-graphic-performancetest-top.png +0 -0
- admin/assets/js/admin.min.js +3 -3
- admin/assets/js/admin.min.js.map +1 -1
- admin/class-admin-ajax.php +18 -33
- admin/class-admin-notices.php +306 -101
- admin/class-admin.php +18 -24
- admin/class-caching-page.php +310 -189
- admin/class-dashboard-page.php +208 -65
_src/admin/js/admin-caching.js
CHANGED
@@ -78,6 +78,11 @@ import Fetcher from './utils/fetcher';
|
|
78 |
}
|
79 |
});
|
80 |
|
|
|
|
|
|
|
|
|
|
|
81 |
return this;
|
82 |
},
|
83 |
|
@@ -114,40 +119,6 @@ import Fetcher from './utils/fetcher';
|
|
114 |
else {
|
115 |
$( '#enable-cache-wrap' ).hide();
|
116 |
}
|
117 |
-
},
|
118 |
-
|
119 |
-
reloadSnippets: function() {
|
120 |
-
let self = this;
|
121 |
-
let stop = false;
|
122 |
-
|
123 |
-
for ( let i in self.$snippets ) {
|
124 |
-
if ( self.$snippets.hasOwnProperty( i ) ) {
|
125 |
-
Fetcher.caching.reloadSnippets( i )
|
126 |
-
.then( ( response ) => {
|
127 |
-
if ( stop ) {
|
128 |
-
return;
|
129 |
-
}
|
130 |
-
|
131 |
-
self.$snippets[response.type].text( response.code );
|
132 |
-
|
133 |
-
// Make sure that we only do things when server displayed is the processed one
|
134 |
-
if ( response.type !== self.selectedServer ) {
|
135 |
-
return;
|
136 |
-
}
|
137 |
-
|
138 |
-
if ( 'apache' === response.type && response.updatedFile ) {
|
139 |
-
$( '#wphb-notice-code-snippet-htaccess-updated' ).show();
|
140 |
-
location.href = self.strings.recheckURL + '&caching-updated=true';
|
141 |
-
} else if ( 'apache' === response.type && self.strings.cacheEnabled && ! response.updatedFile ) {
|
142 |
-
$( '#wphb-notice-code-snippet-htaccess-error' ).show();
|
143 |
-
location.href = self.strings.htaccessErrorURL;
|
144 |
-
} else {
|
145 |
-
$( '#wphb-notice-code-snippet-updated' ).show();
|
146 |
-
location.href = self.strings.recheckURL + '&caching-updated=true';
|
147 |
-
}
|
148 |
-
});
|
149 |
-
}
|
150 |
-
}
|
151 |
}
|
152 |
};
|
153 |
}( jQuery ));
|
78 |
}
|
79 |
});
|
80 |
|
81 |
+
$( '.tab label' ).on( 'click', function() {
|
82 |
+
$( this ).parent().parent().find( '.tab label.active' ).removeClass( 'active' );
|
83 |
+
$( this ).addClass( 'active' );
|
84 |
+
});
|
85 |
+
|
86 |
return this;
|
87 |
},
|
88 |
|
119 |
else {
|
120 |
$( '#enable-cache-wrap' ).hide();
|
121 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
}
|
123 |
};
|
124 |
}( jQuery ));
|
_src/admin/js/admin-cloudflare.js
CHANGED
@@ -8,7 +8,7 @@ import Fetcher from './utils/fetcher';
|
|
8 |
|
9 |
init: function () {
|
10 |
this.$spinner = $('.wphb-spinner');
|
11 |
-
this.$cfSelector = $('#
|
12 |
let self = this;
|
13 |
if ( wphb.cloudflare.is.connected ) {
|
14 |
this.$cfSelector.change( function() {
|
8 |
|
9 |
init: function () {
|
10 |
this.$spinner = $('.wphb-spinner');
|
11 |
+
this.$cfSelector = $('#set-expiry-all');
|
12 |
let self = this;
|
13 |
if ( wphb.cloudflare.is.connected ) {
|
14 |
this.$cfSelector.change( function() {
|
_src/admin/js/admin-dashboard.js
CHANGED
@@ -6,6 +6,8 @@ import Fetcher from './utils/fetcher';
|
|
6 |
|
7 |
init: function() {
|
8 |
const self = this;
|
|
|
|
|
9 |
|
10 |
if (wphbDashboardStrings)
|
11 |
this.strings = wphbDashboardStrings;
|
@@ -40,6 +42,14 @@ import Fetcher from './utils/fetcher';
|
|
40 |
location.href = url;
|
41 |
}
|
42 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
return this;
|
44 |
},
|
45 |
|
@@ -76,7 +86,7 @@ import Fetcher from './utils/fetcher';
|
|
76 |
* Run performance test after quick setup.
|
77 |
*/
|
78 |
runPerformanceTest: function() {
|
79 |
-
// Show
|
80 |
window.WDP.showOverlay("#run-performance-test-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
|
81 |
|
82 |
// Run performance test
|
6 |
|
7 |
init: function() {
|
8 |
const self = this;
|
9 |
+
let cloudFlareDismissLink = $('#dismiss-cf-notice');
|
10 |
+
let cloudFlareDashNotice = $('.cf-dash-notice');
|
11 |
|
12 |
if (wphbDashboardStrings)
|
13 |
this.strings = wphbDashboardStrings;
|
42 |
location.href = url;
|
43 |
}
|
44 |
});
|
45 |
+
|
46 |
+
cloudFlareDismissLink.click( function(e) {
|
47 |
+
e.preventDefault();
|
48 |
+
Fetcher.notice.dismissCloudflareDash();
|
49 |
+
cloudFlareDashNotice.slideUp();
|
50 |
+
cloudFlareDashNotice.parent().addClass('no-background-image');
|
51 |
+
|
52 |
+
});
|
53 |
return this;
|
54 |
},
|
55 |
|
86 |
* Run performance test after quick setup.
|
87 |
*/
|
88 |
runPerformanceTest: function() {
|
89 |
+
// Show performance test modal
|
90 |
window.WDP.showOverlay("#run-performance-test-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
|
91 |
|
92 |
// Run performance test
|
_src/admin/js/admin-gzip.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
import Fetcher from './utils/fetcher';
|
|
|
2 |
|
3 |
(function($) {
|
4 |
WPHB_Admin.gzip = {
|
@@ -12,7 +13,13 @@ import Fetcher from './utils/fetcher';
|
|
12 |
|
13 |
this.$serverSelector = $("#wphb-server-type");
|
14 |
this.selectedServer = this.$serverSelector.val();
|
15 |
-
let instructionsList = $(".wphb-server-instructions")
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
instructionsList.each(function() {
|
17 |
self.$serverInstructions[$(this).data("server")] = $(this);
|
18 |
});
|
@@ -23,14 +30,29 @@ import Fetcher from './utils/fetcher';
|
|
23 |
self.showServerInstructions(value);
|
24 |
self.setServer(value);
|
25 |
self.selectedServer = value;
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
});
|
27 |
-
|
28 |
e.preventDefault();
|
29 |
-
$(
|
30 |
});
|
31 |
-
|
32 |
e.preventDefault();
|
33 |
-
$(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
});
|
35 |
return this;
|
36 |
},
|
@@ -52,6 +74,13 @@ import Fetcher from './utils/fetcher';
|
|
52 |
$("#enable-cache-wrap").hide();
|
53 |
}
|
54 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
|
56 |
setServer: function( value ) {
|
57 |
Fetcher.caching.setServer( value );
|
1 |
import Fetcher from './utils/fetcher';
|
2 |
+
import Clipboard from './utils/clipboard';
|
3 |
|
4 |
(function($) {
|
5 |
WPHB_Admin.gzip = {
|
13 |
|
14 |
this.$serverSelector = $("#wphb-server-type");
|
15 |
this.selectedServer = this.$serverSelector.val();
|
16 |
+
let instructionsList = $(".wphb-server-instructions"),
|
17 |
+
configureLink = $("#configure-gzip-link"),
|
18 |
+
troubleshootingLink = $("#troubleshooting-link"),
|
19 |
+
troubleshootingLinkLiteSpeed = $("#troubleshooting-link-litespeed");
|
20 |
+
|
21 |
+
new Clipboard('.wphb-code-snippet .button');
|
22 |
+
|
23 |
instructionsList.each(function() {
|
24 |
self.$serverInstructions[$(this).data("server")] = $(this);
|
25 |
});
|
30 |
self.showServerInstructions(value);
|
31 |
self.setServer(value);
|
32 |
self.selectedServer = value;
|
33 |
+
// Update tab size on select change.
|
34 |
+
self.updateTabSize();
|
35 |
+
});
|
36 |
+
configureLink.on('click', function(e) {
|
37 |
+
e.preventDefault();
|
38 |
+
$('html, body').animate({ scrollTop: $('#wphb-box-gzip-settings').offset().top -50 }, 'slow');
|
39 |
});
|
40 |
+
troubleshootingLink.on('click', function(e) {
|
41 |
e.preventDefault();
|
42 |
+
$('html, body').animate({ scrollTop: $('#troubleshooting-gzip').offset().top }, 'slow');
|
43 |
});
|
44 |
+
troubleshootingLinkLiteSpeed.on('click', function(e) {
|
45 |
e.preventDefault();
|
46 |
+
$('html, body').animate({ scrollTop: $('#troubleshooting-gzip-litespeed').offset().top }, 'slow');
|
47 |
+
});
|
48 |
+
$( '.tab label' ).on( 'click', function() {
|
49 |
+
$( this ).parent().parent().find( '.tab label.active' ).removeClass( 'active' );
|
50 |
+
$( this ).addClass( 'active' );
|
51 |
+
});
|
52 |
+
$( '.switch-manual' ).on( 'click', function() {
|
53 |
+
let lowercaseServername = self.selectedServer.toLowerCase();
|
54 |
+
$( '#wphb-server-instructions-' + lowercaseServername ).find( '.tab label.active' ).first().removeClass( 'active' );
|
55 |
+
$( this ).parents().find( '#' + lowercaseServername + '-config-manual' ).prev().addClass( 'active' );
|
56 |
});
|
57 |
return this;
|
58 |
},
|
74 |
$("#enable-cache-wrap").hide();
|
75 |
}
|
76 |
},
|
77 |
+
updateTabSize: function() {
|
78 |
+
let jq = $( '#wphb-server-instructions-' + this.selectedServer.toLowerCase() ).find( '.tabs' ),
|
79 |
+
current = jq.find('.tab > input:checked').parent(),
|
80 |
+
content = current.find('.content');
|
81 |
+
|
82 |
+
jq.height( content.outerHeight() + current.outerHeight() - 6 );
|
83 |
+
},
|
84 |
|
85 |
setServer: function( value ) {
|
86 |
Fetcher.caching.setServer( value );
|
_src/admin/js/admin-minification.js
CHANGED
@@ -34,7 +34,6 @@ import Scanner from './minification/Scanner';
|
|
34 |
|
35 |
// Check files button
|
36 |
this.$checkFilesButton = $( '#check-files' );
|
37 |
-
this.$disableMinification = $('#wphb-disable-minification');
|
38 |
this.$spinner = $('.spinner');
|
39 |
|
40 |
if ( this.$checkFilesButton.length ) {
|
@@ -90,26 +89,6 @@ import Scanner from './minification/Scanner';
|
|
90 |
});
|
91 |
});
|
92 |
|
93 |
-
this.$disableMinification.change( function() {
|
94 |
-
const value = $(this).is(':checked');
|
95 |
-
|
96 |
-
self.$spinner.css( 'visibility', 'visible' );
|
97 |
-
|
98 |
-
if ( self.timer && value ) {
|
99 |
-
clearTimeout( self.timer );
|
100 |
-
self.$spinner.css( 'visibility', 'hidden' );
|
101 |
-
}
|
102 |
-
|
103 |
-
self.timer = setTimeout( function() {
|
104 |
-
Fetcher.minification.toggleMinification( value )
|
105 |
-
.then( () => {
|
106 |
-
location.reload();
|
107 |
-
});
|
108 |
-
}, 3000 );
|
109 |
-
|
110 |
-
|
111 |
-
});
|
112 |
-
|
113 |
this.rowsCollection = new WPHB_Admin.minification.RowsCollection();
|
114 |
|
115 |
const rows = $('.wphb-border-row');
|
34 |
|
35 |
// Check files button
|
36 |
this.$checkFilesButton = $( '#check-files' );
|
|
|
37 |
this.$spinner = $('.spinner');
|
38 |
|
39 |
if ( this.$checkFilesButton.length ) {
|
89 |
});
|
90 |
});
|
91 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
this.rowsCollection = new WPHB_Admin.minification.RowsCollection();
|
93 |
|
94 |
const rows = $('.wphb-border-row');
|
_src/admin/js/minification/Row.js
CHANGED
@@ -10,6 +10,7 @@ const Row = ( _element, _filter, _filter_sec ) => {
|
|
10 |
$minify = $el.find( '.toggle-minify' ),
|
11 |
$posFooter = $el.find( '.toggle-position-footer' ),
|
12 |
$defer = $el.find( '.toggle-defer' ),
|
|
|
13 |
$disableIcon = $el.find( '.toggle-cross > i' );
|
14 |
|
15 |
if ( _filter_sec ) {
|
@@ -91,6 +92,10 @@ const Row = ( _element, _filter, _filter_sec ) => {
|
|
91 |
$defer.prop( 'checked', value );
|
92 |
break;
|
93 |
}
|
|
|
|
|
|
|
|
|
94 |
case 'include': {
|
95 |
$disableIcon.removeClass();
|
96 |
$include.prop( 'checked', value );
|
10 |
$minify = $el.find( '.toggle-minify' ),
|
11 |
$posFooter = $el.find( '.toggle-position-footer' ),
|
12 |
$defer = $el.find( '.toggle-defer' ),
|
13 |
+
$inline = $el.find( '.toggle-inline' ),
|
14 |
$disableIcon = $el.find( '.toggle-cross > i' );
|
15 |
|
16 |
if ( _filter_sec ) {
|
92 |
$defer.prop( 'checked', value );
|
93 |
break;
|
94 |
}
|
95 |
+
case 'inline': {
|
96 |
+
$inline.prop( 'checked', value );
|
97 |
+
break;
|
98 |
+
}
|
99 |
case 'include': {
|
100 |
$disableIcon.removeClass();
|
101 |
$include.prop( 'checked', value );
|
_src/admin/js/utils/fetcher.js
CHANGED
@@ -31,6 +31,13 @@ function Fetcher() {
|
|
31 |
dismiss: ( id ) => {
|
32 |
const action = actionPrefix + 'notice_dismiss';
|
33 |
return request( action, { id }, 'POST' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
}
|
35 |
},
|
36 |
/**
|
@@ -45,19 +52,6 @@ function Fetcher() {
|
|
45 |
setServer: ( value ) => {
|
46 |
const action = actionPrefix + 'caching_set_server_type';
|
47 |
return request( action, { value }, 'POST' );
|
48 |
-
},
|
49 |
-
|
50 |
-
/**
|
51 |
-
* Reload snippet.
|
52 |
-
*
|
53 |
-
* @param type Server type.
|
54 |
-
*/
|
55 |
-
reloadSnippets: ( type ) => {
|
56 |
-
const action = actionPrefix + 'caching_reload_snippet';
|
57 |
-
return request( action, { type }, 'POST' )
|
58 |
-
.then( ( response ) => {
|
59 |
-
return response;
|
60 |
-
});
|
61 |
}
|
62 |
},
|
63 |
|
31 |
dismiss: ( id ) => {
|
32 |
const action = actionPrefix + 'notice_dismiss';
|
33 |
return request( action, { id }, 'POST' );
|
34 |
+
},
|
35 |
+
/**
|
36 |
+
* Dismiss CloudFlare dash notice
|
37 |
+
*/
|
38 |
+
dismissCloudflareDash: () => {
|
39 |
+
const action = actionPrefix + 'cf_notice_dismiss';
|
40 |
+
return request( action, {}, 'POST' );
|
41 |
}
|
42 |
},
|
43 |
/**
|
52 |
setServer: ( value ) => {
|
53 |
const action = actionPrefix + 'caching_set_server_type';
|
54 |
return request( action, { value }, 'POST' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
}
|
56 |
},
|
57 |
|
admin/abstract-class-admin-page.php
CHANGED
@@ -11,12 +11,9 @@ abstract class WP_Hummingbird_Admin_Page {
|
|
11 |
protected $tabs = array();
|
12 |
|
13 |
/**
|
14 |
-
*
|
15 |
-
* we save notices IDs here
|
16 |
-
*
|
17 |
-
* @var array
|
18 |
*/
|
19 |
-
protected
|
20 |
|
21 |
/**
|
22 |
* WP_Hummingbird_Admin_Page constructor.
|
@@ -30,6 +27,8 @@ abstract class WP_Hummingbird_Admin_Page {
|
|
30 |
public function __construct( $slug, $page_title, $menu_title, $parent = false, $render = true ) {
|
31 |
$this->slug = $slug;
|
32 |
|
|
|
|
|
33 |
if ( ! $parent ) {
|
34 |
$this->page_id = add_menu_page(
|
35 |
$page_title,
|
@@ -146,6 +145,9 @@ abstract class WP_Hummingbird_Admin_Page {
|
|
146 |
|
147 |
// Scripts
|
148 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
|
|
|
|
|
|
149 |
}
|
150 |
|
151 |
/**
|
@@ -242,12 +244,16 @@ abstract class WP_Hummingbird_Admin_Page {
|
|
242 |
/**
|
243 |
* Renders the template header that is repeated on every page.
|
244 |
* From WPMU DEV Dashboard
|
245 |
-
*
|
246 |
*/
|
247 |
protected function render_header() {
|
248 |
?>
|
249 |
<section id="header">
|
250 |
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
|
|
|
|
|
|
|
|
|
|
|
251 |
</section><!-- end header -->
|
252 |
|
253 |
<?php
|
@@ -261,7 +267,7 @@ abstract class WP_Hummingbird_Admin_Page {
|
|
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->
|
265 |
endif;
|
266 |
|
267 |
$this->render_header();
|
@@ -292,39 +298,6 @@ abstract class WP_Hummingbird_Admin_Page {
|
|
292 |
$this->view( $this->slug . '-page' );
|
293 |
}
|
294 |
|
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;
|
326 |
-
}
|
327 |
-
|
328 |
/**
|
329 |
* Return this menu page URL
|
330 |
*
|
11 |
protected $tabs = array();
|
12 |
|
13 |
/**
|
14 |
+
* @var WP_Hummingbird_Admin_Notices
|
|
|
|
|
|
|
15 |
*/
|
16 |
+
protected $admin_notices;
|
17 |
|
18 |
/**
|
19 |
* WP_Hummingbird_Admin_Page constructor.
|
27 |
public function __construct( $slug, $page_title, $menu_title, $parent = false, $render = true ) {
|
28 |
$this->slug = $slug;
|
29 |
|
30 |
+
$this->admin_notices = WP_Hummingbird_Admin_Notices::get_instance();
|
31 |
+
|
32 |
if ( ! $parent ) {
|
33 |
$this->page_id = add_menu_page(
|
34 |
$page_title,
|
145 |
|
146 |
// Scripts
|
147 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
148 |
+
|
149 |
+
// TODO: remove this once it's fixed in Smush
|
150 |
+
wp_dequeue_style( 'wp-smushit-admin-css' );
|
151 |
}
|
152 |
|
153 |
/**
|
244 |
/**
|
245 |
* Renders the template header that is repeated on every page.
|
246 |
* From WPMU DEV Dashboard
|
|
|
247 |
*/
|
248 |
protected function render_header() {
|
249 |
?>
|
250 |
<section id="header">
|
251 |
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
|
252 |
+
<div class="actions">
|
253 |
+
<a href="<?php echo esc_url( wphb_get_documentation_url( $this->slug, $this->get_current_tab() ) ); ?>" target="_blank" class="button button-ghost documentation-button">
|
254 |
+
<?php esc_html_e( 'View Documentation', 'wphb' ); ?>
|
255 |
+
</a>
|
256 |
+
</div>
|
257 |
</section><!-- end header -->
|
258 |
|
259 |
<?php
|
267 |
<div id="container" class="wrap wrap-wp-hummingbird wrap-wp-hummingbird-page <?php echo 'wrap-' . $this->slug; ?>">
|
268 |
<?php
|
269 |
if ( isset( $_GET['updated'] ) ) :
|
270 |
+
$this->admin_notices->show( 'updated', __( 'Settings Updated', 'wphb' ), 'success' );
|
271 |
endif;
|
272 |
|
273 |
$this->render_header();
|
298 |
$this->view( $this->slug . '-page' );
|
299 |
}
|
300 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
301 |
/**
|
302 |
* Return this menu page URL
|
303 |
*
|
admin/assets/css/admin.css
CHANGED
@@ -31,12 +31,22 @@ button.notice-dismiss {
|
|
31 |
color: #72777c !important;
|
32 |
cursor: pointer !important;
|
33 |
}
|
|
|
|
|
|
|
34 |
.wpmud .wphb-dismiss {
|
35 |
float: right;
|
36 |
}
|
37 |
.wpmud #wpbody-content > .notice {
|
38 |
margin: 5px 20px 2px 5px;
|
39 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
/* Fix for overflowing tooltips start */
|
41 |
.wpmud .list-table > tbody > tr > td {
|
42 |
z-index: 0;
|
@@ -100,6 +110,17 @@ button.notice-dismiss {
|
|
100 |
.wpmud .toggle .toggle-checkbox:checked + .toggle-label:after {
|
101 |
margin-left: 24px;
|
102 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
.wpmud .spinner.standalone {
|
104 |
float: none;
|
105 |
margin: 0;
|
@@ -128,7 +149,6 @@ button.notice-dismiss {
|
|
128 |
.wpmud #header {
|
129 |
position: relative;
|
130 |
margin-bottom: 0;
|
131 |
-
/*overflow: hidden;*/
|
132 |
}
|
133 |
.wpmud #header h1 {
|
134 |
color: #333333;
|
@@ -152,6 +172,11 @@ button.notice-dismiss {
|
|
152 |
left: 200px;
|
153 |
margin-top: 1px;
|
154 |
}
|
|
|
|
|
|
|
|
|
|
|
155 |
.wpmud .wrap-wphb-uptime > #header .actions.status {
|
156 |
left: 120px;
|
157 |
margin-top: 1px !important;
|
@@ -187,6 +212,10 @@ button.notice-dismiss {
|
|
187 |
margin: 0;
|
188 |
text-align: right;
|
189 |
}
|
|
|
|
|
|
|
|
|
190 |
|
191 |
.wpmud #header ~ .sub-header {
|
192 |
margin-top: -15px;
|
@@ -293,7 +322,7 @@ button.notice-dismiss {
|
|
293 |
text-transform: uppercase;
|
294 |
}
|
295 |
.wpmud .dev-box .box-title .wphb-select-group {
|
296 |
-
margin:
|
297 |
}
|
298 |
.wpmud .dev-box .box-title .test-results {
|
299 |
float: right;
|
@@ -355,7 +384,8 @@ button.notice-dismiss {
|
|
355 |
}
|
356 |
.wpmud .box-footer {
|
357 |
margin-top: 0;
|
358 |
-
padding:
|
|
|
359 |
}
|
360 |
.wpmud .select-list-container {
|
361 |
min-width: 100px;
|
@@ -419,7 +449,10 @@ button.notice-dismiss {
|
|
419 |
line-height: 22px;
|
420 |
margin: 10px 0 0;
|
421 |
}
|
422 |
-
.wpmud .
|
|
|
|
|
|
|
423 |
display: inline-block;
|
424 |
padding: 2px 10px 0;
|
425 |
color: #333;
|
@@ -569,10 +602,6 @@ button.notice-dismiss {
|
|
569 |
z-index: 9;
|
570 |
}
|
571 |
|
572 |
-
.wpmud .box-gzip-enable #enable-cache-wrap .button {
|
573 |
-
margin: -10px 30px 30px;
|
574 |
-
}
|
575 |
-
|
576 |
.wpmud .wphb-dashboard-caching-cloudflare-box p {
|
577 |
margin-top:30px;
|
578 |
margin-bottom:20px;
|
@@ -717,8 +746,8 @@ button.notice-dismiss {
|
|
717 |
.wpmud .wphb-modal .button-ghost {
|
718 |
padding: 5px 16px 7px !important;
|
719 |
background-color: transparent !important;
|
720 |
-
border: 2px solid #
|
721 |
-
color: #
|
722 |
}
|
723 |
.wpmud .wrap-wp-hummingbird button.button-ghost:hover:not(.wph-button):not(#collapse-button),
|
724 |
.wpmud .wrap-wp-hummingbird .button-ghost:hover:not(:focus):not(:active),
|
@@ -776,7 +805,6 @@ button.notice-dismiss {
|
|
776 |
.wpmud .wrap-wp-hummingbird .button-notice {
|
777 |
background-color: #E6E6E6 !important;
|
778 |
color: #AAAAAA !important;
|
779 |
-
margin-top: 20px;
|
780 |
}
|
781 |
.wpmud .wrap-wp-hummingbird .button-notice:hover:not(:focus):not(:active):not(.wph-button):not(#collapse-button):not([tooltip]),
|
782 |
.wpmud .wrap-wp-hummingbird .button-notice:hover:not(:focus):not(:active),
|
@@ -904,11 +932,17 @@ button.notice-dismiss {
|
|
904 |
.wpmud .hb-wpmudev-icon-info:before { content: "\e902"; }
|
905 |
.wpmud .hb-wpmudev-icon-tick:before { content: "\e903"; }
|
906 |
.wpmud .hb-wpmudev-icon-warning:before { content: "\e904"; }
|
|
|
|
|
|
|
|
|
|
|
907 |
.wpmud .hb-icon-cache:before { content: "\e905"; }
|
908 |
.wpmud .hb-icon-cloudflare:before { content: "\e906"; }
|
909 |
.wpmud .hb-icon-gzip:before { content: "\e907"; }
|
910 |
.wpmud .hb-icon-minify-combine:before { content: "\e908"; }
|
911 |
.wpmud .hb-icon-minify-defer:before { content: "\e909"; }
|
|
|
912 |
.wpmud .hb-icon-minify-footer:before { content: "\e90a"; }
|
913 |
.wpmud .hb-icon-minify:before { content: "\e90b"; }
|
914 |
.wpmud .hb-icon-performancetest:before { content: "\e90c"; }
|
@@ -923,6 +957,20 @@ button.notice-dismiss {
|
|
923 |
display: block;
|
924 |
float: left;
|
925 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
926 |
|
927 |
/* ****************************************************************************
|
928 |
* 2. COMMON/GENERAL STYLES
|
@@ -964,6 +1012,14 @@ button.notice-dismiss {
|
|
964 |
padding: 30px 30px 10px !important;
|
965 |
}
|
966 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
967 |
/* Images */
|
968 |
.wpmud section[class^="box-dashboard-"] .box-title:before {
|
969 |
font-family: 'hummingbird', sans-serif;
|
@@ -974,12 +1030,14 @@ button.notice-dismiss {
|
|
974 |
}
|
975 |
.wpmud section[class^="box-dashboard-performance"] .box-title:before { content: '\e90c'; }
|
976 |
.wpmud section[class^="box-dashboard-minification"] .box-title:before { content: '\e90b'; }
|
977 |
-
.wpmud section[class^="box-dashboard-
|
978 |
.wpmud section[class^="box-dashboard-gzip"] .box-title:before { content: '\e907'; }
|
979 |
.wpmud section[class^="box-dashboard-uptime"] .box-title:before { content: '\e900'; }
|
980 |
.wpmud section[class^="box-dashboard-smush"] .box-title:before { content: '\e90f'; }
|
981 |
.wpmud section[class^="box-dashboard-cloudflare"] .box-title:before { content: '\e906'; }
|
982 |
.wpmud section[class^="box-dashboard-reports"] .box-title:before { content: '\e90d'; }
|
|
|
|
|
983 |
|
984 |
.wpmud .wphb-image,
|
985 |
.wpmud .wphb-image-icon-content {
|
@@ -1159,12 +1217,14 @@ button.notice-dismiss {
|
|
1159 |
opacity: 1;
|
1160 |
}
|
1161 |
.wpmud .wphb-block-entry-third span.status-ok:before,
|
|
|
1162 |
.wpmud .wphb-notice-error.can-close p:before,
|
1163 |
.wpmud .wphb-notice-success.can-close p:before,
|
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;
|
@@ -1175,10 +1235,33 @@ button.notice-dismiss {
|
|
1175 |
margin-left: -30px;
|
1176 |
margin-right: 10px;
|
1177 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1178 |
.wpmud .wphb-notice-error.can-close p:before,
|
1179 |
.wpmud .wphb-notice-success.can-close p:before {
|
1180 |
margin-right: 20px;
|
1181 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
1182 |
|
1183 |
.wpmud .wphb-notice-success {
|
1184 |
background-color: #D1F1EA;
|
@@ -1232,7 +1315,7 @@ button.notice-dismiss {
|
|
1232 |
.wpmud .wphb-notice-warning p,
|
1233 |
.wpmud .wphb-notice-warning p a,
|
1234 |
.wpmud .wphb-notice-warning.can-close .close:after {
|
1235 |
-
color: #
|
1236 |
}
|
1237 |
|
1238 |
.wpmud .wphb-heading-status-green {
|
@@ -1316,10 +1399,10 @@ button.notice-dismiss {
|
|
1316 |
}
|
1317 |
|
1318 |
/* Box-footer with buttons */
|
1319 |
-
.wpmud .box-footer.buttons.buttons-on-left {
|
1320 |
text-align: left;
|
1321 |
}
|
1322 |
-
.wpmud .box-footer.buttons.buttons-on-right {
|
1323 |
text-align: right;
|
1324 |
}
|
1325 |
|
@@ -2140,6 +2223,7 @@ button.notice-dismiss {
|
|
2140 |
color: #333333;
|
2141 |
width: calc( 100% / 2 - 98px );
|
2142 |
padding-left: 5%;
|
|
|
2143 |
display: inline-block;
|
2144 |
vertical-align: middle;
|
2145 |
}
|
@@ -2151,10 +2235,6 @@ button.notice-dismiss {
|
|
2151 |
margin-top: 0;
|
2152 |
color: #888888;
|
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;
|
2160 |
line-height: 30px;
|
@@ -2191,13 +2271,14 @@ button.notice-dismiss {
|
|
2191 |
/* Dashboard background images */
|
2192 |
.box-dashboard-reports-no-membership,
|
2193 |
.box-dashboard-uptime-no-membership,
|
2194 |
-
.box-dashboard-smush-no-membership
|
|
|
|
|
2195 |
background: no-repeat 30px 100%;
|
2196 |
padding-bottom: 30px !important;
|
2197 |
}
|
2198 |
.box-dashboard-reports-no-membership .box-content,
|
2199 |
-
.box-dashboard-uptime-no-membership .box-content
|
2200 |
-
.box-dashboard-smush-no-membership .box-content {
|
2201 |
padding: 30px 30px 0 !important;
|
2202 |
}
|
2203 |
.box-dashboard-reports-no-membership {
|
@@ -2206,9 +2287,21 @@ button.notice-dismiss {
|
|
2206 |
.box-dashboard-uptime-no-membership {
|
2207 |
background-image: url('../image/hb-graphic-upsell-uptime.png');
|
2208 |
}
|
2209 |
-
.box-dashboard-smush-no-membership {
|
2210 |
background-image: url('../image/smush-share-widget.png');
|
2211 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2212 |
@media
|
2213 |
only screen and (-webkit-min-device-pixel-ratio: 2),
|
2214 |
only screen and ( min--moz-device-pixel-ratio: 2),
|
@@ -2218,7 +2311,7 @@ only screen and ( min-resolution: 192dpi),
|
|
2218 |
only screen and ( min-resolution: 2dppx) {
|
2219 |
.box-dashboard-reports-no-membership,
|
2220 |
.box-dashboard-uptime-no-membership,
|
2221 |
-
.box-dashboard-smush-no-membership {
|
2222 |
background-size: 107px 148px;
|
2223 |
}
|
2224 |
.box-dashboard-reports-no-membership {
|
@@ -2227,9 +2320,12 @@ only screen and ( min-resolution: 2dppx) {
|
|
2227 |
.box-dashboard-uptime-no-membership {
|
2228 |
background-image: url('../image/hb-graphic-upsell-uptime@2x.png');
|
2229 |
}
|
2230 |
-
.box-dashboard-smush-no-membership {
|
2231 |
background-image: url('../image/smush-share-widget@2x.png');
|
2232 |
}
|
|
|
|
|
|
|
2233 |
}
|
2234 |
|
2235 |
@media screen and ( min-width: 1550px ) {
|
@@ -2252,6 +2348,8 @@ only screen and ( min-resolution: 2dppx) {
|
|
2252 |
line-height: 30px;
|
2253 |
display: flex;
|
2254 |
}
|
|
|
|
|
2255 |
.wpmud .wphb-dash-table-row > div:first-child {
|
2256 |
display: flex;
|
2257 |
align-items: center;
|
@@ -2265,8 +2363,9 @@ only screen and ( min-resolution: 2dppx) {
|
|
2265 |
height: 60px;
|
2266 |
border-top: 1px solid #E6E6E6;
|
2267 |
}
|
|
|
2268 |
.wpmud .wphb-dash-table-row:last-child {
|
2269 |
-
|
2270 |
}
|
2271 |
.wpmud .wphb-dash-table-header > span:first-child,
|
2272 |
.wpmud .wphb-dash-table-row > div:first-child {
|
@@ -2318,6 +2417,8 @@ only screen and ( min-resolution: 2dppx) {
|
|
2318 |
}
|
2319 |
|
2320 |
/* Dashboard: Minification */
|
|
|
|
|
2321 |
.wpmud .box-dashboard-minification-module .wphb-dash-table-row > div:last-child {
|
2322 |
font-size: 18px;
|
2323 |
font-family: "Roboto Condensed", sans-serif;
|
@@ -2337,9 +2438,10 @@ only screen and ( min-resolution: 2dppx) {
|
|
2337 |
padding-bottom: 30px;
|
2338 |
text-transform: uppercase;
|
2339 |
}
|
2340 |
-
.wpmud .callout-box p
|
2341 |
margin-bottom: 30px;
|
2342 |
}
|
|
|
2343 |
.wpmud .wphb-upsell-free-message p {
|
2344 |
position: relative;
|
2345 |
border-radius: 4px;
|
@@ -2362,11 +2464,21 @@ only screen and ( min-resolution: 2dppx) {
|
|
2362 |
border-bottom: 7px solid transparent;
|
2363 |
border-right: 7px solid #E1F6FF;
|
2364 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2365 |
|
2366 |
/* Dashboard Smush */
|
|
|
2367 |
.wpmud .box-dashboard-smush .content .wphb-notice,
|
|
|
|
|
|
|
2368 |
.wpmud .box-dashboard-smush-no-membership .content .wphb-notice {
|
2369 |
-
margin-top:
|
2370 |
}
|
2371 |
|
2372 |
/* Dashboard Reports */
|
@@ -2572,6 +2684,9 @@ only screen and ( min-resolution: 2dppx) {
|
|
2572 |
}
|
2573 |
|
2574 |
/* Reporting */
|
|
|
|
|
|
|
2575 |
.wpmud .wrap-wphb-performance .scan-settings .buttons {
|
2576 |
margin-top: 30px;
|
2577 |
}
|
@@ -2660,6 +2775,10 @@ only screen and ( min-resolution: 2dppx) {
|
|
2660 |
color: #333;
|
2661 |
}
|
2662 |
|
|
|
|
|
|
|
|
|
2663 |
/* ****************************************************************************
|
2664 |
* 6. MINIFICATION
|
2665 |
*/
|
@@ -2688,7 +2807,7 @@ only screen and ( min-resolution: 2dppx) {
|
|
2688 |
}
|
2689 |
|
2690 |
.wrap-wphb-minification .box-minification-enqueued-files .alignright {
|
2691 |
-
margin-top:
|
2692 |
}
|
2693 |
#wphb-box-minification-advanced-settings .toggle-item-description {
|
2694 |
font-size: 13px;
|
@@ -2716,9 +2835,6 @@ only screen and ( min-resolution: 2dppx) {
|
|
2716 |
.wpmud .box-minification-enqueued-files .alignright {
|
2717 |
margin-bottom: 0;
|
2718 |
}
|
2719 |
-
.wpmud .box-minification-enqueued-files .alignleft > .button-grey {
|
2720 |
-
margin-top: 20px;
|
2721 |
-
}
|
2722 |
.wpmud .wphb-enqueued-files .buttons {
|
2723 |
margin: 30px;
|
2724 |
}
|
@@ -2803,10 +2919,10 @@ only screen and ( min-resolution: 2dppx) {
|
|
2803 |
flex: 0 0 4%;
|
2804 |
}
|
2805 |
.wpmud .wphb-minification-file-details {
|
2806 |
-
flex: 0 0
|
2807 |
}
|
2808 |
.wpmud .wphb-minification-row-details {
|
2809 |
-
flex: 0 0
|
2810 |
}
|
2811 |
|
2812 |
.wpmud .wphb-minification-file-details .wphb-filename-info {
|
@@ -2863,16 +2979,6 @@ only screen and ( min-resolution: 2dppx) {
|
|
2863 |
/* ****************************************************************************
|
2864 |
* 7. BROWSER CACHING
|
2865 |
*/
|
2866 |
-
/*
|
2867 |
-
.wpmud .box-caching-summary .wphb-caching-summary-heading th,
|
2868 |
-
.wpmud .box-caching-summary .wphb-caching-summary-item td {
|
2869 |
-
width: 25%;
|
2870 |
-
font-size: 13px;
|
2871 |
-
}
|
2872 |
-
.wpmud .box-caching-summary .wphb-caching-summary-item td:first-child {
|
2873 |
-
font-weight: 500;
|
2874 |
-
}
|
2875 |
-
*/
|
2876 |
.wpmud .wphb-caching-error {
|
2877 |
text-align: left;
|
2878 |
}
|
@@ -2886,9 +2992,6 @@ only screen and ( min-resolution: 2dppx) {
|
|
2886 |
.wpmud .wphb-caching-cloudflare-box > p {
|
2887 |
margin: 0 0 20px 0;
|
2888 |
}
|
2889 |
-
.wpmud .box-gzip-enable .box-footer {
|
2890 |
-
padding: 0;
|
2891 |
-
}
|
2892 |
.wpmud .box-caching-enable .buttons {
|
2893 |
margin-top: -20px;
|
2894 |
}
|
@@ -2953,7 +3056,8 @@ only screen and ( min-resolution: 2dppx) {
|
|
2953 |
}
|
2954 |
|
2955 |
.wpmud .wphb-server-instructions .wphb-notice,
|
2956 |
-
.wpmud .box-caching-summary .wphb-notice
|
|
|
2957 |
margin-bottom: 30px !important;
|
2958 |
}
|
2959 |
.wpmud .wphb-server-instructions .wphb-notice.wphb-notice-blue p {
|
@@ -2988,7 +3092,10 @@ only screen and ( min-resolution: 2dppx) {
|
|
2988 |
.wpmud .wphb-border-frame .table-header .wphb-caching-summary-heading-type {
|
2989 |
flex-basis: 85px;
|
2990 |
}
|
2991 |
-
.wpmud .wphb-border-frame .table-row .wphb-
|
|
|
|
|
|
|
2992 |
.wpmud .wphb-border-frame .table-row .wphb-caching-summary-item-expiry,
|
2993 |
.wpmud .wphb-border-frame .table-row .wphb-caching-summary-item-status {
|
2994 |
flex-basis: 80px;
|
@@ -2999,13 +3106,16 @@ only screen and ( min-resolution: 2dppx) {
|
|
2999 |
color: #333333;
|
3000 |
}
|
3001 |
|
3002 |
-
.wpmud .box-caching-settings label
|
|
|
3003 |
margin-top: 15px;
|
3004 |
margin-bottom: 5px;
|
3005 |
padding: 0;
|
3006 |
}
|
3007 |
.wpmud .box-caching-settings label,
|
3008 |
-
.wpmud .box-
|
|
|
|
|
3009 |
color: #888888;
|
3010 |
font-size: 13px;
|
3011 |
font-weight: 500;
|
@@ -3019,20 +3129,30 @@ only screen and ( min-resolution: 2dppx) {
|
|
3019 |
}
|
3020 |
|
3021 |
/* Server select tabs (automatic/manual) */
|
|
|
3022 |
.wpmud .wrap-wphb-caching .tabs,
|
|
|
3023 |
.wpmud .wrap-wphb-caching .tabs .tab label,
|
|
|
3024 |
.wpmud .wrap-wphb-caching .tabs .tab .content {
|
3025 |
border: 0;
|
3026 |
}
|
3027 |
|
|
|
3028 |
.wpmud .wrap-wphb-caching .tabs .tab .content {
|
3029 |
border-top: 2px solid #E6E6E6;
|
|
|
3030 |
}
|
|
|
3031 |
.wpmud .wrap-wphb-caching .tabs .tab label {
|
3032 |
font-size: 15px;
|
3033 |
text-transform: capitalize;
|
3034 |
color: #888888;
|
|
|
|
|
|
|
3035 |
}
|
|
|
3036 |
.wpmud .wrap-wphb-caching #enable-cache-wrap .button {
|
3037 |
margin-top: 30px;
|
3038 |
}
|
@@ -3051,8 +3171,14 @@ only screen and ( min-resolution: 2dppx) {
|
|
3051 |
margin: 0;
|
3052 |
}
|
3053 |
.wpmud .wphb-server-instructions .tabs .tab .content {
|
3054 |
-
padding:
|
3055 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
3056 |
|
3057 |
.wpmud .wphb-code-snippet .button {
|
3058 |
position: absolute;
|
@@ -3061,20 +3187,59 @@ only screen and ( min-resolution: 2dppx) {
|
|
3061 |
margin-top: 20px !important;
|
3062 |
}
|
3063 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3064 |
/* Gravatar caching */
|
3065 |
.wpmud .box-caching-gravatar .button-large {
|
3066 |
margin: 0 !important;
|
3067 |
}
|
|
|
3068 |
.wpmud .box-caching-gravatar .wphb-notice {
|
3069 |
-
margin-top:
|
3070 |
}
|
3071 |
|
3072 |
-
|
3073 |
/* ****************************************************************************
|
3074 |
* 8. GZIP COMPRESSION
|
3075 |
*/
|
3076 |
.wpmud #wphb-code-snippet {
|
3077 |
margin-top: 20px;
|
|
|
3078 |
}
|
3079 |
.wpmud .wphb-gzip-error {
|
3080 |
text-align:left;
|
@@ -3082,10 +3247,53 @@ only screen and ( min-resolution: 2dppx) {
|
|
3082 |
.wpmud .wphb-gzip-error p:first-child {
|
3083 |
margin: 0 0 10px 0;
|
3084 |
}
|
3085 |
-
.wpmud .wphb-gzip-error a
|
|
|
3086 |
text-decoration:underline;
|
3087 |
}
|
3088 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3089 |
/* ****************************************************************************
|
3090 |
* 9. UPTIME
|
3091 |
*/
|
@@ -3251,6 +3459,9 @@ only screen and ( min-resolution: 2dppx) {
|
|
3251 |
.wpmud .performance-report-table .wphb-performance-report-item-cta {
|
3252 |
width: 180px;
|
3253 |
}
|
|
|
|
|
|
|
3254 |
|
3255 |
/* Page: Caching */
|
3256 |
.wpmud .wrap-wphb-caching .row {
|
@@ -3329,10 +3540,12 @@ only screen and ( min-resolution: 2dppx) {
|
|
3329 |
.wpmud .box-dashboard-reports-no-membership .wphb-block-entry-image {
|
3330 |
display: none;
|
3331 |
}
|
|
|
3332 |
.wpmud .wphb-upsell-free-message p {
|
3333 |
margin-left: auto;
|
3334 |
margin-top: 30px;
|
3335 |
}
|
|
|
3336 |
.wpmud .wphb-upsell-free-message p:after {
|
3337 |
display: none;
|
3338 |
}
|
@@ -3518,10 +3731,16 @@ only screen and ( min-resolution: 2dppx) {
|
|
3518 |
display: flex;
|
3519 |
align-items: center;
|
3520 |
top: 0;
|
3521 |
-
margin: 10px 0
|
3522 |
-
float:
|
3523 |
padding-bottom: 0;
|
3524 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
3525 |
.wpmud .box-content .with-padding {
|
3526 |
padding: 0;
|
3527 |
}
|
@@ -3591,6 +3810,9 @@ only screen and ( min-resolution: 2dppx) {
|
|
3591 |
.wpmud .wrap-wp-hummingbird > .wphb-notice {
|
3592 |
width: 85%;
|
3593 |
}
|
|
|
|
|
|
|
3594 |
|
3595 |
/* Page: Dashboard */
|
3596 |
.wpmud .callout-box .callout-title {
|
@@ -3775,6 +3997,12 @@ only screen and ( min-resolution: 2dppx) {
|
|
3775 |
.wpmud .wphb-block-entry-third .current-performance-score {
|
3776 |
margin-bottom: 5px;
|
3777 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
3778 |
}
|
3779 |
|
3780 |
/* MOBILE */
|
31 |
color: #72777c !important;
|
32 |
cursor: pointer !important;
|
33 |
}
|
34 |
+
.wpmud #header .actions .button + .button {
|
35 |
+
margin-left: 10px;
|
36 |
+
}
|
37 |
.wpmud .wphb-dismiss {
|
38 |
float: right;
|
39 |
}
|
40 |
.wpmud #wpbody-content > .notice {
|
41 |
margin: 5px 20px 2px 5px;
|
42 |
}
|
43 |
+
/* Fix for tooltip-below */
|
44 |
+
.wpmud [tooltip].tooltip-bottom:before {
|
45 |
+
margin-top: 2px;
|
46 |
+
}
|
47 |
+
.wpmud [tooltip].tooltip-bottom:after {
|
48 |
+
margin-top: 12px;
|
49 |
+
}
|
50 |
/* Fix for overflowing tooltips start */
|
51 |
.wpmud .list-table > tbody > tr > td {
|
52 |
z-index: 0;
|
110 |
.wpmud .toggle .toggle-checkbox:checked + .toggle-label:after {
|
111 |
margin-left: 24px;
|
112 |
}
|
113 |
+
.wpmud .toggle .toggle-label.small {
|
114 |
+
width: 36px;
|
115 |
+
height: 16px;
|
116 |
+
}
|
117 |
+
.wpmud .toggle .toggle-label.small:after {
|
118 |
+
width: 14px;
|
119 |
+
height: 14px;
|
120 |
+
}
|
121 |
+
.wpmud .toggle .toggle-checkbox:checked + .toggle-label.small:after {
|
122 |
+
margin-left: 21px;
|
123 |
+
}
|
124 |
.wpmud .spinner.standalone {
|
125 |
float: none;
|
126 |
margin: 0;
|
149 |
.wpmud #header {
|
150 |
position: relative;
|
151 |
margin-bottom: 0;
|
|
|
152 |
}
|
153 |
.wpmud #header h1 {
|
154 |
color: #333333;
|
172 |
left: 200px;
|
173 |
margin-top: 1px;
|
174 |
}
|
175 |
+
.wpmud #header .button[disabled] {
|
176 |
+
background-color: #E6E6E6 !important;
|
177 |
+
border-radius: 4px;
|
178 |
+
color: #AAAAAA !important;
|
179 |
+
}
|
180 |
.wpmud .wrap-wphb-uptime > #header .actions.status {
|
181 |
left: 120px;
|
182 |
margin-top: 1px !important;
|
212 |
margin: 0;
|
213 |
text-align: right;
|
214 |
}
|
215 |
+
.wpmud #header .actions .header-label {
|
216 |
+
font-size: 12px;
|
217 |
+
color: #AAAAAA;
|
218 |
+
}
|
219 |
|
220 |
.wpmud #header ~ .sub-header {
|
221 |
margin-top: -15px;
|
322 |
text-transform: uppercase;
|
323 |
}
|
324 |
.wpmud .dev-box .box-title .wphb-select-group {
|
325 |
+
margin: 10px 0 0;
|
326 |
}
|
327 |
.wpmud .dev-box .box-title .test-results {
|
328 |
float: right;
|
384 |
}
|
385 |
.wpmud .box-footer {
|
386 |
margin-top: 0;
|
387 |
+
padding: 30px;
|
388 |
+
border-top: 1px solid #EAEAEA;
|
389 |
}
|
390 |
.wpmud .select-list-container {
|
391 |
min-width: 100px;
|
449 |
line-height: 22px;
|
450 |
margin: 10px 0 0;
|
451 |
}
|
452 |
+
.wpmud .wphb-dash-table-row span.sub {
|
453 |
+
margin: 0;
|
454 |
+
}
|
455 |
+
.wpmud .settings-form .col-two-third > label {
|
456 |
display: inline-block;
|
457 |
padding: 2px 10px 0;
|
458 |
color: #333;
|
602 |
z-index: 9;
|
603 |
}
|
604 |
|
|
|
|
|
|
|
|
|
605 |
.wpmud .wphb-dashboard-caching-cloudflare-box p {
|
606 |
margin-top:30px;
|
607 |
margin-bottom:20px;
|
746 |
.wpmud .wphb-modal .button-ghost {
|
747 |
padding: 5px 16px 7px !important;
|
748 |
background-color: transparent !important;
|
749 |
+
border: 2px solid #DDDDDD;
|
750 |
+
color: #888888 !important;
|
751 |
}
|
752 |
.wpmud .wrap-wp-hummingbird button.button-ghost:hover:not(.wph-button):not(#collapse-button),
|
753 |
.wpmud .wrap-wp-hummingbird .button-ghost:hover:not(:focus):not(:active),
|
805 |
.wpmud .wrap-wp-hummingbird .button-notice {
|
806 |
background-color: #E6E6E6 !important;
|
807 |
color: #AAAAAA !important;
|
|
|
808 |
}
|
809 |
.wpmud .wrap-wp-hummingbird .button-notice:hover:not(:focus):not(:active):not(.wph-button):not(#collapse-button):not([tooltip]),
|
810 |
.wpmud .wrap-wp-hummingbird .button-notice:hover:not(:focus):not(:active),
|
932 |
.wpmud .hb-wpmudev-icon-info:before { content: "\e902"; }
|
933 |
.wpmud .hb-wpmudev-icon-tick:before { content: "\e903"; }
|
934 |
.wpmud .hb-wpmudev-icon-warning:before { content: "\e904"; }
|
935 |
+
.wpmud .hb-wpmudev-icon-eye:before { content: "\e911"; }
|
936 |
+
.wpmud .hb-wpmudev-icon-wrench-tool:before { content: "\e912"; }
|
937 |
+
.wpmud .hb-wpmudev-icon-profile-male:before { content: "\e913"; }
|
938 |
+
.wpmud .hb-wpmudev-icon-page:before { content: "\e914"; }
|
939 |
+
.wpmud .hb-wpmudev-icon-academy:before { content: "\e915"; }
|
940 |
.wpmud .hb-icon-cache:before { content: "\e905"; }
|
941 |
.wpmud .hb-icon-cloudflare:before { content: "\e906"; }
|
942 |
.wpmud .hb-icon-gzip:before { content: "\e907"; }
|
943 |
.wpmud .hb-icon-minify-combine:before { content: "\e908"; }
|
944 |
.wpmud .hb-icon-minify-defer:before { content: "\e909"; }
|
945 |
+
.wpmud .hb-icon-minify-inline:before { content: "\e910"; }
|
946 |
.wpmud .hb-icon-minify-footer:before { content: "\e90a"; }
|
947 |
.wpmud .hb-icon-minify:before { content: "\e90b"; }
|
948 |
.wpmud .hb-icon-performancetest:before { content: "\e90c"; }
|
957 |
display: block;
|
958 |
float: left;
|
959 |
}
|
960 |
+
.wpmud .wphb-dash-icon {
|
961 |
+
font-size: 12px;
|
962 |
+
padding-right: 2px;
|
963 |
+
}
|
964 |
+
.wpmud .cf-dismiss {
|
965 |
+
display: block;
|
966 |
+
margin-top: 6px;
|
967 |
+
}
|
968 |
+
.wpmud .wphb-cf-notice .cf-dismiss a {
|
969 |
+
text-transform: uppercase;
|
970 |
+
text-decoration: none;
|
971 |
+
color: #888888;
|
972 |
+
}
|
973 |
+
|
974 |
|
975 |
/* ****************************************************************************
|
976 |
* 2. COMMON/GENERAL STYLES
|
1012 |
padding: 30px 30px 10px !important;
|
1013 |
}
|
1014 |
|
1015 |
+
.box-dashboard-welcome .wphb-block-entry,
|
1016 |
+
.box-performance-welcome .wphb-block-entry,
|
1017 |
+
.box-minification-summary-meta-box .wphb-block-entry,
|
1018 |
+
.box-uptime-summary .wphb-block-entry {
|
1019 |
+
width: 100%;
|
1020 |
+
min-height: 172px;
|
1021 |
+
}
|
1022 |
+
|
1023 |
/* Images */
|
1024 |
.wpmud section[class^="box-dashboard-"] .box-title:before {
|
1025 |
font-family: 'hummingbird', sans-serif;
|
1030 |
}
|
1031 |
.wpmud section[class^="box-dashboard-performance"] .box-title:before { content: '\e90c'; }
|
1032 |
.wpmud section[class^="box-dashboard-minification"] .box-title:before { content: '\e90b'; }
|
1033 |
+
.wpmud section[class^="box-dashboard-browser"] .box-title:before { content: '\e905'; }
|
1034 |
.wpmud section[class^="box-dashboard-gzip"] .box-title:before { content: '\e907'; }
|
1035 |
.wpmud section[class^="box-dashboard-uptime"] .box-title:before { content: '\e900'; }
|
1036 |
.wpmud section[class^="box-dashboard-smush"] .box-title:before { content: '\e90f'; }
|
1037 |
.wpmud section[class^="box-dashboard-cloudflare"] .box-title:before { content: '\e906'; }
|
1038 |
.wpmud section[class^="box-dashboard-reports"] .box-title:before { content: '\e90d'; }
|
1039 |
+
.wpmud section[class^="box-dashboard-caching-gravatar"] .box-title:before { content: '\e913'; }
|
1040 |
+
.wpmud section[class^="box-dashboard-caching-page"] .box-title:before { content: '\e914'; }
|
1041 |
|
1042 |
.wpmud .wphb-image,
|
1043 |
.wpmud .wphb-image-icon-content {
|
1217 |
opacity: 1;
|
1218 |
}
|
1219 |
.wpmud .wphb-block-entry-third span.status-ok:before,
|
1220 |
+
.wpmud span.dash-cloudflare-connected-status:before,
|
1221 |
.wpmud .wphb-notice-error.can-close p:before,
|
1222 |
.wpmud .wphb-notice-success.can-close p:before,
|
1223 |
.wpmud .wphb-notice-success p:first-child:before,
|
1224 |
.wpmud .wphb-notice-error p:first-child:before,
|
1225 |
.wpmud .wphb-notice-warning p:first-child:before,
|
1226 |
.wpmud .wphb-notice-blue p:first-child:before,
|
1227 |
+
.wpmud .wphb-notice-blue p:first-child:before,
|
1228 |
.wpmud .wphb-notice-blue-info p:first-child:before {
|
1229 |
font-family: 'hummingbird', sans-serif;
|
1230 |
font-size: 20px;
|
1235 |
margin-left: -30px;
|
1236 |
margin-right: 10px;
|
1237 |
}
|
1238 |
+
.wpmud .documentation-button:before {
|
1239 |
+
content: '\e915';
|
1240 |
+
color: #888888;
|
1241 |
+
font-family: 'hummingbird', sans-serif;
|
1242 |
+
font-size: 12px;
|
1243 |
+
vertical-align: middle;
|
1244 |
+
line-height: 16px;
|
1245 |
+
top: -2px;
|
1246 |
+
position: relative;
|
1247 |
+
margin-right: 5px;
|
1248 |
+
}
|
1249 |
+
.wpmud .documentation-button:hover:before {
|
1250 |
+
color: #FFFFFF;
|
1251 |
+
}
|
1252 |
+
.wpmud .documentation-button:focus:before {
|
1253 |
+
color: #FFFFFF;
|
1254 |
+
}
|
1255 |
.wpmud .wphb-notice-error.can-close p:before,
|
1256 |
.wpmud .wphb-notice-success.can-close p:before {
|
1257 |
margin-right: 20px;
|
1258 |
}
|
1259 |
+
.wpmud span.dash-cloudflare-connected-status:before {
|
1260 |
+
color: #17A8E3;
|
1261 |
+
content: '\e903';
|
1262 |
+
font-size: 16px;
|
1263 |
+
margin-right: 8px;
|
1264 |
+
}
|
1265 |
|
1266 |
.wpmud .wphb-notice-success {
|
1267 |
background-color: #D1F1EA;
|
1315 |
.wpmud .wphb-notice-warning p,
|
1316 |
.wpmud .wphb-notice-warning p a,
|
1317 |
.wpmud .wphb-notice-warning.can-close .close:after {
|
1318 |
+
color: #333333;
|
1319 |
}
|
1320 |
|
1321 |
.wpmud .wphb-heading-status-green {
|
1399 |
}
|
1400 |
|
1401 |
/* Box-footer with buttons */
|
1402 |
+
.wpmud .box-footer .buttons.buttons-on-left {
|
1403 |
text-align: left;
|
1404 |
}
|
1405 |
+
.wpmud .box-footer .buttons.buttons-on-right {
|
1406 |
text-align: right;
|
1407 |
}
|
1408 |
|
2223 |
color: #333333;
|
2224 |
width: calc( 100% / 2 - 98px );
|
2225 |
padding-left: 5%;
|
2226 |
+
padding-top: 10px;
|
2227 |
display: inline-block;
|
2228 |
vertical-align: middle;
|
2229 |
}
|
2235 |
margin-top: 0;
|
2236 |
color: #888888;
|
2237 |
}
|
|
|
|
|
|
|
|
|
2238 |
.wpmud .wphb-block-entry-third span.not-present {
|
2239 |
font-size: 55px;
|
2240 |
line-height: 30px;
|
2271 |
/* Dashboard background images */
|
2272 |
.box-dashboard-reports-no-membership,
|
2273 |
.box-dashboard-uptime-no-membership,
|
2274 |
+
.box-dashboard-smush-no-membership .box-content,
|
2275 |
+
.box-dashboard-browser-caching-module .box-content,
|
2276 |
+
.box-reporting-summary .wphb-reporting-no-membership {
|
2277 |
background: no-repeat 30px 100%;
|
2278 |
padding-bottom: 30px !important;
|
2279 |
}
|
2280 |
.box-dashboard-reports-no-membership .box-content,
|
2281 |
+
.box-dashboard-uptime-no-membership .box-content {
|
|
|
2282 |
padding: 30px 30px 0 !important;
|
2283 |
}
|
2284 |
.box-dashboard-reports-no-membership {
|
2287 |
.box-dashboard-uptime-no-membership {
|
2288 |
background-image: url('../image/hb-graphic-upsell-uptime.png');
|
2289 |
}
|
2290 |
+
.box-dashboard-smush-no-membership .box-content {
|
2291 |
background-image: url('../image/smush-share-widget.png');
|
2292 |
}
|
2293 |
+
.box-dashboard-browser-caching-module .box-content {
|
2294 |
+
background-image: url('../image/graphic-hb-cf-sell@2x.png');
|
2295 |
+
background-size: 107px 148px;
|
2296 |
+
}
|
2297 |
+
.box-reporting-summary .wphb-reporting-no-membership {
|
2298 |
+
background-image: url('../image/hummingbird-upsell-minify.png');
|
2299 |
+
background-size: 118px 126px;
|
2300 |
+
}
|
2301 |
+
|
2302 |
+
.box-dashboard-browser-caching-module .box-content.no-background-image {
|
2303 |
+
background-image: none;
|
2304 |
+
}
|
2305 |
@media
|
2306 |
only screen and (-webkit-min-device-pixel-ratio: 2),
|
2307 |
only screen and ( min--moz-device-pixel-ratio: 2),
|
2311 |
only screen and ( min-resolution: 2dppx) {
|
2312 |
.box-dashboard-reports-no-membership,
|
2313 |
.box-dashboard-uptime-no-membership,
|
2314 |
+
.box-dashboard-smush-no-membership .box-content {
|
2315 |
background-size: 107px 148px;
|
2316 |
}
|
2317 |
.box-dashboard-reports-no-membership {
|
2320 |
.box-dashboard-uptime-no-membership {
|
2321 |
background-image: url('../image/hb-graphic-upsell-uptime@2x.png');
|
2322 |
}
|
2323 |
+
.box-dashboard-smush-no-membership .box-content {
|
2324 |
background-image: url('../image/smush-share-widget@2x.png');
|
2325 |
}
|
2326 |
+
.box-reporting-summary .wphb-reporting-no-membership {
|
2327 |
+
background-image: url('../image/hummingbird-upsell-minify@2x.png');
|
2328 |
+
}
|
2329 |
}
|
2330 |
|
2331 |
@media screen and ( min-width: 1550px ) {
|
2348 |
line-height: 30px;
|
2349 |
display: flex;
|
2350 |
}
|
2351 |
+
.wpmud .wphb-border-frame .wphb-caching-summary-item-type,
|
2352 |
+
.wpmud .wphb-border-frame .wphb-gzip-summary-item-type,
|
2353 |
.wpmud .wphb-dash-table-row > div:first-child {
|
2354 |
display: flex;
|
2355 |
align-items: center;
|
2363 |
height: 60px;
|
2364 |
border-top: 1px solid #E6E6E6;
|
2365 |
}
|
2366 |
+
|
2367 |
.wpmud .wphb-dash-table-row:last-child {
|
2368 |
+
margin-bottom: -10px;
|
2369 |
}
|
2370 |
.wpmud .wphb-dash-table-header > span:first-child,
|
2371 |
.wpmud .wphb-dash-table-row > div:first-child {
|
2417 |
}
|
2418 |
|
2419 |
/* Dashboard: Minification */
|
2420 |
+
.wpmud .box-dashboard-welcome .dev-list > li:last-child .list-detail,
|
2421 |
+
.wpmud .box-dashboard-uptime .wphb-dash-table-row > div:last-child,
|
2422 |
.wpmud .box-dashboard-minification-module .wphb-dash-table-row > div:last-child {
|
2423 |
font-size: 18px;
|
2424 |
font-family: "Roboto Condensed", sans-serif;
|
2438 |
padding-bottom: 30px;
|
2439 |
text-transform: uppercase;
|
2440 |
}
|
2441 |
+
.wpmud .callout-box p {
|
2442 |
margin-bottom: 30px;
|
2443 |
}
|
2444 |
+
.wpmud .wphb-cf-notice p,
|
2445 |
.wpmud .wphb-upsell-free-message p {
|
2446 |
position: relative;
|
2447 |
border-radius: 4px;
|
2464 |
border-bottom: 7px solid transparent;
|
2465 |
border-right: 7px solid #E1F6FF;
|
2466 |
}
|
2467 |
+
.wpmud .wphb-cf-notice a,
|
2468 |
+
.wpmud .wphb-upsell-free-message a {
|
2469 |
+
color: #333333;
|
2470 |
+
text-decoration: underline;
|
2471 |
+
font-weight: 500;
|
2472 |
+
}
|
2473 |
|
2474 |
/* Dashboard Smush */
|
2475 |
+
.wpmud .box-dashboard-caching-gravatar-module .wphb-notice,
|
2476 |
.wpmud .box-dashboard-smush .content .wphb-notice,
|
2477 |
+
.wpmud .box-dashboard-caching-page-module .content .wphb-notice,
|
2478 |
+
.wpmud .box-dashboard-browser-caching-module .content .wphb-notice,
|
2479 |
+
.wpmud .box-dashboard-gzip-module .content .wphb-notice,
|
2480 |
.wpmud .box-dashboard-smush-no-membership .content .wphb-notice {
|
2481 |
+
margin-top: 20px !important;
|
2482 |
}
|
2483 |
|
2484 |
/* Dashboard Reports */
|
2684 |
}
|
2685 |
|
2686 |
/* Reporting */
|
2687 |
+
.wpmud .wrap-wphb-performance .box-content.settings-form.disabled {
|
2688 |
+
padding-bottom: 30px;
|
2689 |
+
}
|
2690 |
.wpmud .wrap-wphb-performance .scan-settings .buttons {
|
2691 |
margin-top: 30px;
|
2692 |
}
|
2775 |
color: #333;
|
2776 |
}
|
2777 |
|
2778 |
+
.wpmud .box-reporting-summary .wphb-block-entry-content {
|
2779 |
+
margin-top: 0;
|
2780 |
+
}
|
2781 |
+
|
2782 |
/* ****************************************************************************
|
2783 |
* 6. MINIFICATION
|
2784 |
*/
|
2807 |
}
|
2808 |
|
2809 |
.wrap-wphb-minification .box-minification-enqueued-files .alignright {
|
2810 |
+
margin-top: 0;
|
2811 |
}
|
2812 |
#wphb-box-minification-advanced-settings .toggle-item-description {
|
2813 |
font-size: 13px;
|
2835 |
.wpmud .box-minification-enqueued-files .alignright {
|
2836 |
margin-bottom: 0;
|
2837 |
}
|
|
|
|
|
|
|
2838 |
.wpmud .wphb-enqueued-files .buttons {
|
2839 |
margin: 30px;
|
2840 |
}
|
2919 |
flex: 0 0 4%;
|
2920 |
}
|
2921 |
.wpmud .wphb-minification-file-details {
|
2922 |
+
flex: 0 0 47%;
|
2923 |
}
|
2924 |
.wpmud .wphb-minification-row-details {
|
2925 |
+
flex: 0 0 41%;
|
2926 |
}
|
2927 |
|
2928 |
.wpmud .wphb-minification-file-details .wphb-filename-info {
|
2979 |
/* ****************************************************************************
|
2980 |
* 7. BROWSER CACHING
|
2981 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2982 |
.wpmud .wphb-caching-error {
|
2983 |
text-align: left;
|
2984 |
}
|
2992 |
.wpmud .wphb-caching-cloudflare-box > p {
|
2993 |
margin: 0 0 20px 0;
|
2994 |
}
|
|
|
|
|
|
|
2995 |
.wpmud .box-caching-enable .buttons {
|
2996 |
margin-top: -20px;
|
2997 |
}
|
3056 |
}
|
3057 |
|
3058 |
.wpmud .wphb-server-instructions .wphb-notice,
|
3059 |
+
.wpmud .box-caching-summary .wphb-notice,
|
3060 |
+
.wpmud .box-gzip-summary .wphb-notice {
|
3061 |
margin-bottom: 30px !important;
|
3062 |
}
|
3063 |
.wpmud .wphb-server-instructions .wphb-notice.wphb-notice-blue p {
|
3092 |
.wpmud .wphb-border-frame .table-header .wphb-caching-summary-heading-type {
|
3093 |
flex-basis: 85px;
|
3094 |
}
|
3095 |
+
.wpmud .wphb-border-frame .table-row .wphb-gzip-summary-item-type,
|
3096 |
+
.wpmud .wphb-border-frame .table-row .wphb-caching-summary-item-type {
|
3097 |
+
flex-basis: 90px;
|
3098 |
+
}
|
3099 |
.wpmud .wphb-border-frame .table-row .wphb-caching-summary-item-expiry,
|
3100 |
.wpmud .wphb-border-frame .table-row .wphb-caching-summary-item-status {
|
3101 |
flex-basis: 80px;
|
3106 |
color: #333333;
|
3107 |
}
|
3108 |
|
3109 |
+
.wpmud .box-caching-settings label,
|
3110 |
+
.wpmud .box-gzip-settings label {
|
3111 |
margin-top: 15px;
|
3112 |
margin-bottom: 5px;
|
3113 |
padding: 0;
|
3114 |
}
|
3115 |
.wpmud .box-caching-settings label,
|
3116 |
+
.wpmud .box-gzip-settings label,
|
3117 |
+
.wpmud .box-caching-settings .wphb-border-frame > label,
|
3118 |
+
.wpmud .box-gzip-settings .wphb-border-frame > label {
|
3119 |
color: #888888;
|
3120 |
font-size: 13px;
|
3121 |
font-weight: 500;
|
3129 |
}
|
3130 |
|
3131 |
/* Server select tabs (automatic/manual) */
|
3132 |
+
.wpmud .wrap-wphb-gzip .tabs,
|
3133 |
.wpmud .wrap-wphb-caching .tabs,
|
3134 |
+
.wpmud .wrap-wphb-gzip .tabs .tab label,
|
3135 |
.wpmud .wrap-wphb-caching .tabs .tab label,
|
3136 |
+
.wpmud .wrap-wphb-gzip .tabs .tab .content,
|
3137 |
.wpmud .wrap-wphb-caching .tabs .tab .content {
|
3138 |
border: 0;
|
3139 |
}
|
3140 |
|
3141 |
+
.wpmud .wrap-wphb-gzip .tabs .tab .content,
|
3142 |
.wpmud .wrap-wphb-caching .tabs .tab .content {
|
3143 |
border-top: 2px solid #E6E6E6;
|
3144 |
+
top: 38px;
|
3145 |
}
|
3146 |
+
.wpmud .wrap-wphb-gzip .tabs .tab label,
|
3147 |
.wpmud .wrap-wphb-caching .tabs .tab label {
|
3148 |
font-size: 15px;
|
3149 |
text-transform: capitalize;
|
3150 |
color: #888888;
|
3151 |
+
padding: 0 10px;
|
3152 |
+
line-height: 1.5em;
|
3153 |
+
height: 40px;
|
3154 |
}
|
3155 |
+
.wpmud .wrap-wphb-gzip #enable-cache-wrap .button,
|
3156 |
.wpmud .wrap-wphb-caching #enable-cache-wrap .button {
|
3157 |
margin-top: 30px;
|
3158 |
}
|
3171 |
margin: 0;
|
3172 |
}
|
3173 |
.wpmud .wphb-server-instructions .tabs .tab .content {
|
3174 |
+
padding: 20px 0 0;
|
3175 |
}
|
3176 |
+
.wpmud .wphb-server-instructions .tabs .tab > .active {
|
3177 |
+
color: #333333;
|
3178 |
+
border-bottom: 2px solid #333333;
|
3179 |
+
z-index: 10;
|
3180 |
+
}
|
3181 |
+
|
3182 |
|
3183 |
.wpmud .wphb-code-snippet .button {
|
3184 |
position: absolute;
|
3187 |
margin-top: 20px !important;
|
3188 |
}
|
3189 |
|
3190 |
+
/* Page caching */
|
3191 |
+
.wpmud .box-page-caching .box-footer {
|
3192 |
+
border-top: 1px solid #E6E6E6;
|
3193 |
+
padding: 50px 30px;
|
3194 |
+
}
|
3195 |
+
.wpmud .box-page-caching .box-footer .buttons > .button {
|
3196 |
+
margin-top: -20px;
|
3197 |
+
}
|
3198 |
+
.wpmud .box-page-caching h4 {
|
3199 |
+
color: #666666;
|
3200 |
+
font-size: 15px;
|
3201 |
+
font-weight: 500;
|
3202 |
+
text-align: left;
|
3203 |
+
text-transform: none;
|
3204 |
+
}
|
3205 |
+
.wpmud .box-page-caching textarea {
|
3206 |
+
height: 180px;
|
3207 |
+
max-width: 490px;
|
3208 |
+
color: #333333;
|
3209 |
+
border: 1px solid #E6E6E6;
|
3210 |
+
border-radius: 4px;
|
3211 |
+
background-color: #F8F8F8;
|
3212 |
+
margin-top: 20px;
|
3213 |
+
}
|
3214 |
+
.wpmud .box-page-caching .col-two-third .with-bottom-border {
|
3215 |
+
margin-bottom: 30px;
|
3216 |
+
}
|
3217 |
+
/* Page caching: page types table */
|
3218 |
+
.wpmud .box-page-caching .wphb-dash-table .sub {
|
3219 |
+
width: 75px;
|
3220 |
+
}
|
3221 |
+
.wpmud .box-page-caching .wphb-dash-table .wphb-dash-table-row:first-child {
|
3222 |
+
border-top: 0;
|
3223 |
+
}
|
3224 |
+
.wpmud .box-page-caching .wphb-dash-table .wphb-dash-table-row:last-child {
|
3225 |
+
border-bottom: 0;
|
3226 |
+
}
|
3227 |
+
|
3228 |
/* Gravatar caching */
|
3229 |
.wpmud .box-caching-gravatar .button-large {
|
3230 |
margin: 0 !important;
|
3231 |
}
|
3232 |
+
.wpmud .box-page-caching .wphb-notice,
|
3233 |
.wpmud .box-caching-gravatar .wphb-notice {
|
3234 |
+
margin-top: 20px;
|
3235 |
}
|
3236 |
|
|
|
3237 |
/* ****************************************************************************
|
3238 |
* 8. GZIP COMPRESSION
|
3239 |
*/
|
3240 |
.wpmud #wphb-code-snippet {
|
3241 |
margin-top: 20px;
|
3242 |
+
margin-bottom: 20px;
|
3243 |
}
|
3244 |
.wpmud .wphb-gzip-error {
|
3245 |
text-align:left;
|
3247 |
.wpmud .wphb-gzip-error p:first-child {
|
3248 |
margin: 0 0 10px 0;
|
3249 |
}
|
3250 |
+
.wpmud .wphb-gzip-error a,
|
3251 |
+
.wpmud #configure-gzip-link {
|
3252 |
text-decoration:underline;
|
3253 |
}
|
3254 |
|
3255 |
+
|
3256 |
+
.wpmud .box-gzip-settings .inline-label {
|
3257 |
+
color: #888888 !important;
|
3258 |
+
font-size: 13px;
|
3259 |
+
font-weight: 500;
|
3260 |
+
padding-left: 0 !important;
|
3261 |
+
}
|
3262 |
+
.wpmud .box-gzip-settings .select-container {
|
3263 |
+
max-width: 240px;
|
3264 |
+
}
|
3265 |
+
|
3266 |
+
.wpmud .box-gzip-settings .wphb-notice-blue {
|
3267 |
+
margin-top: 0;
|
3268 |
+
margin-bottom: 30px;
|
3269 |
+
padding: 15px 20px;
|
3270 |
+
}
|
3271 |
+
.wpmud .box-gzip-settings .wphb-notice-blue p {
|
3272 |
+
font-size: 13px;
|
3273 |
+
}
|
3274 |
+
.wpmud .box-gzip-settings .wphb-notice-blue p:before {
|
3275 |
+
font-size: 16px;
|
3276 |
+
}
|
3277 |
+
.wpmud .box-gzip-settings .wphb-notice.htaccess-warning {
|
3278 |
+
margin-top: 30px;
|
3279 |
+
margin-bottom: 0 !important;
|
3280 |
+
padding: 15px 20px;
|
3281 |
+
}
|
3282 |
+
.wpmud .box-gzip-settings .wphb-notice.htaccess-warning a {
|
3283 |
+
text-decoration: underline;
|
3284 |
+
}
|
3285 |
+
|
3286 |
+
@media screen and (min-width: 960px) {
|
3287 |
+
.wpmud .wphb-border-frame.two-columns .table-header,
|
3288 |
+
.wpmud .wphb-border-frame.two-columns .table-row {
|
3289 |
+
justify-content: flex-start;
|
3290 |
+
}
|
3291 |
+
.wpmud .wphb-border-frame.two-columns .table-header > div:first-child,
|
3292 |
+
.wpmud .wphb-border-frame.two-columns .table-row > div:first-child {
|
3293 |
+
flex-basis: 50%;
|
3294 |
+
}
|
3295 |
+
}
|
3296 |
+
|
3297 |
/* ****************************************************************************
|
3298 |
* 9. UPTIME
|
3299 |
*/
|
3459 |
.wpmud .performance-report-table .wphb-performance-report-item-cta {
|
3460 |
width: 180px;
|
3461 |
}
|
3462 |
+
.wpmud .box-reporting-summary .box-footer .wphb-block-entry-content {
|
3463 |
+
margin-top: 0;
|
3464 |
+
}
|
3465 |
|
3466 |
/* Page: Caching */
|
3467 |
.wpmud .wrap-wphb-caching .row {
|
3540 |
.wpmud .box-dashboard-reports-no-membership .wphb-block-entry-image {
|
3541 |
display: none;
|
3542 |
}
|
3543 |
+
.wpmud .wphb-cf-notice p,
|
3544 |
.wpmud .wphb-upsell-free-message p {
|
3545 |
margin-left: auto;
|
3546 |
margin-top: 30px;
|
3547 |
}
|
3548 |
+
.wpmud .wphb-cf-notice p:after,
|
3549 |
.wpmud .wphb-upsell-free-message p:after {
|
3550 |
display: none;
|
3551 |
}
|
3731 |
display: flex;
|
3732 |
align-items: center;
|
3733 |
top: 0;
|
3734 |
+
margin: 10px 0 10px;
|
3735 |
+
float: none;
|
3736 |
padding-bottom: 0;
|
3737 |
}
|
3738 |
+
.wpmud #header .actions .button:first-child {
|
3739 |
+
margin-left: 0;
|
3740 |
+
}
|
3741 |
+
.wpmud #header .actions [tooltip].tooltip-bottom:after {
|
3742 |
+
margin-left: -54px;
|
3743 |
+
}
|
3744 |
.wpmud .box-content .with-padding {
|
3745 |
padding: 0;
|
3746 |
}
|
3810 |
.wpmud .wrap-wp-hummingbird > .wphb-notice {
|
3811 |
width: 85%;
|
3812 |
}
|
3813 |
+
.wpmud #header .after-header-actions .button {
|
3814 |
+
margin-top: -15px;
|
3815 |
+
}
|
3816 |
|
3817 |
/* Page: Dashboard */
|
3818 |
.wpmud .callout-box .callout-title {
|
3997 |
.wpmud .wphb-block-entry-third .current-performance-score {
|
3998 |
margin-bottom: 5px;
|
3999 |
}
|
4000 |
+
.wpmud .content-box-two-cols-image-left .wphb-block-entry-content.wphb-cf-notice {
|
4001 |
+
margin: 35px 0 0 0;
|
4002 |
+
}
|
4003 |
+
.box-dashboard-browser-caching-module .box-content {
|
4004 |
+
background-image: none;
|
4005 |
+
}
|
4006 |
}
|
4007 |
|
4008 |
/* MOBILE */
|
admin/assets/fonts/hummingbird.eot
CHANGED
Binary file
|
admin/assets/fonts/hummingbird.svg
CHANGED
@@ -23,4 +23,10 @@
|
|
23 |
<glyph unicode="" glyph-name="icon-reports" d="M42.667 178.59v414.476h170.667v-414.476h-170.667zM554.667 178.59v704.61h170.709v-704.61h-170.709zM810.667 178.59v580.267h170.667v-580.267h-170.667zM298.667 178.59v580.267h170.667v-580.267h-170.667zM981.333 95.695c23.552 0 42.667-18.569 42.667-41.448s-19.115-41.448-42.667-41.448h-938.667c-23.552 0-42.667 18.569-42.667 41.448s19.115 41.448 42.667 41.448h938.667z" />
|
24 |
<glyph unicode="" glyph-name="icon-restore" d="M902.64 323.64c-54.449-169.391-209.853-291.64-393.065-291.64-132.494 0-254.648 64.449-332.218 171.518l94.867 72.464c55.492-76.596 142.639-122.575 237.351-122.575 130.156 0 240.664 86.376 280.121 206.348l-66.184-49.013c-23.042-17.064-54.657-11.593-70.614 12.219s-10.213 56.949 12.829 74.013l220.862 163.561 129.987-228.053c14.243-24.988 6.22-57.64-17.919-72.932s-55.254-7.431-69.497 17.557l-26.522 46.531zM121.36 572.36c54.449 169.391 209.853 291.64 393.065 291.64 132.494 0 254.648-64.449 332.218-171.518l-94.867-72.464c-55.492 76.596-142.639 122.575-237.351 122.575-130.156 0-240.664-86.376-280.121-206.348l66.184 49.013c23.042 17.064 54.657 11.593 70.614-12.219s10.213-56.949-12.829-74.013l-220.862-163.561-129.987 228.053c-14.243 24.988-6.22 57.64 17.919 72.932s55.254 7.431 69.497-17.557l26.522-46.531z" />
|
25 |
<glyph unicode="" glyph-name="icon-smush" d="M0 908.8l51.757-92.949 460.375-828.651 511.868 921.6h-1024zM512.002 104.813l-414.733 747.178h829.463l-414.73-747.178zM213.99 782.555l298.011-536.892 298.008 536.892h-596.019zM311.259 722.586h401.485l-200.742-361.655-200.742 361.655z" />
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
</font></defs></svg>
|
23 |
<glyph unicode="" glyph-name="icon-reports" d="M42.667 178.59v414.476h170.667v-414.476h-170.667zM554.667 178.59v704.61h170.709v-704.61h-170.709zM810.667 178.59v580.267h170.667v-580.267h-170.667zM298.667 178.59v580.267h170.667v-580.267h-170.667zM981.333 95.695c23.552 0 42.667-18.569 42.667-41.448s-19.115-41.448-42.667-41.448h-938.667c-23.552 0-42.667 18.569-42.667 41.448s19.115 41.448 42.667 41.448h938.667z" />
|
24 |
<glyph unicode="" glyph-name="icon-restore" d="M902.64 323.64c-54.449-169.391-209.853-291.64-393.065-291.64-132.494 0-254.648 64.449-332.218 171.518l94.867 72.464c55.492-76.596 142.639-122.575 237.351-122.575 130.156 0 240.664 86.376 280.121 206.348l-66.184-49.013c-23.042-17.064-54.657-11.593-70.614 12.219s-10.213 56.949 12.829 74.013l220.862 163.561 129.987-228.053c14.243-24.988 6.22-57.64-17.919-72.932s-55.254-7.431-69.497 17.557l-26.522 46.531zM121.36 572.36c54.449 169.391 209.853 291.64 393.065 291.64 132.494 0 254.648-64.449 332.218-171.518l-94.867-72.464c-55.492 76.596-142.639 122.575-237.351 122.575-130.156 0-240.664-86.376-280.121-206.348l66.184 49.013c23.042 17.064 54.657 11.593 70.614-12.219s10.213-56.949-12.829-74.013l-220.862-163.561-129.987 228.053c-14.243 24.988-6.22 57.64 17.919 72.932s55.254 7.431 69.497-17.557l26.522-46.531z" />
|
25 |
<glyph unicode="" glyph-name="icon-smush" d="M0 908.8l51.757-92.949 460.375-828.651 511.868 921.6h-1024zM512.002 104.813l-414.733 747.178h829.463l-414.73-747.178zM213.99 782.555l298.011-536.892 298.008 536.892h-596.019zM311.259 722.586h401.485l-200.742-361.655-200.742 361.655z" />
|
26 |
+
<glyph unicode="" glyph-name="icon-minify-inline" d="M42.667 960h938.667c23.564 0 42.667-19.103 42.667-42.667v0c0-23.564-19.103-42.667-42.667-42.667h-938.667c-23.564 0-42.667 19.103-42.667 42.667v0 0c0 23.564 19.103 42.667 42.667 42.667v0zM42.667 362.667h938.667c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-938.667c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667v0zM42.667 192h938.667c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-938.667c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667v0zM42.667 21.333h938.667c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667h-938.667c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667v0zM85.333 789.333h853.333c47.128 0 85.333-38.205 85.333-85.333v-170.667c0-47.128-38.205-85.333-85.333-85.333h-853.333c-47.128 0-85.333 38.205-85.333 85.333v170.667c0 47.128 38.205 85.333 85.333 85.333v0z" />
|
27 |
+
<glyph unicode="" glyph-name="wpmudev-icon-eye" d="M512 223.915c123.759 0 224.085 100.326 224.085 224.085s-100.326 224.085-224.085 224.085c-123.759 0-224.085-100.326-224.085-224.085s100.326-224.085 224.085-224.085zM0 448s136.533 352.085 512 352.085 512-352.085 512-352.085-136.533-352.085-512-352.085-512 352.085-512 352.085zM512 352.085c52.972 0 95.915 42.942 95.915 95.915s-42.942 95.915-95.915 95.915c-52.972 0-95.915-42.942-95.915-95.915s42.942-95.915 95.915-95.915z" />
|
28 |
+
<glyph unicode="" glyph-name="wpmudev-icon-wrench-tool" d="M985.6 795.307l-162.133-162.133c-2.102-0.132-4.559-0.207-7.034-0.207-65.98 0-119.467 53.487-119.467 119.467 0 2.475 0.075 4.931 0.224 7.369l62.106 61.788 100.011 100.011c1.55 1.519 2.51 3.634 2.51 5.973s-0.961 4.454-2.509 5.972c-0.592 0.532-1.266 0.988-1.998 1.344l-0.052 0.023h-1.365c-33.663 15.322-73.006 24.252-114.435 24.252-155.806 0-282.112-126.306-282.112-282.112 0-30.298 4.776-59.48 13.616-86.835l-294.958-292.404c-98.646-1.646-177.982-81.999-177.982-180.883 0-99.912 80.995-180.907 180.907-180.907 98.884 0 179.237 79.336 180.881 177.827l294.402 294.725c25.684-8.52 55.252-13.435 85.968-13.435 155.618 0 281.771 126.153 281.771 281.771 0 41.642-9.033 81.175-25.248 116.745l0.72-0.228c-0.311 0.584-0.651 1.087-1.036 1.551-1.507 1.535-3.622 2.495-5.961 2.495s-4.454-0.961-5.972-2.509zM256 116.907c-0.194-41.137-33.587-74.41-74.751-74.41-41.284 0-74.752 33.468-74.752 74.752 0 41.164 33.273 74.557 74.391 74.751 0.12 0.001 0.24 0.001 0.361 0.001 41.284 0 74.752-33.468 74.752-74.752 0-0.12 0-0.241-0.001-0.361z" />
|
29 |
+
<glyph unicode="" glyph-name="wpmudev-icon-profile-male" horiz-adv-x="1019" d="M978.261 134.144c-43.008 70.997-144.043 85.333-194.56 102.4s-147.627 87.893-147.627 87.893v51.2c19.87 18.419 36.867 39.546 50.502 62.877l0.698 1.294c2.048 3.584 3.755 6.997 5.461 10.24v1.365c1.365 3.072 2.56 5.803 3.584 8.533v1.877c0.943 2.416 1.88 5.437 2.626 8.532 1.791 8.072 3.238 17.391 4.129 26.872 9.117 3.338 13.725-1.612 25.331 28.255 13.141 34.133 35.328 109.909 20.821 125.952-3.371 3.949-8.353 6.437-13.916 6.437-3.855 0-7.432-1.195-10.379-3.234 7.133 29.653 11.189 63.652 11.189 98.599 0 8.856-0.26 17.651-0.774 26.378-6.599 106.316-111.73 167.927-209.010 177.484-107.861 10.581-105.131-8.363-116.736-46.763-78.848 1.195-112.299-71.339-112.299-71.339-19.115-43.691-20.309-100.693-3.584-182.613-2.887 2-6.463 3.195-10.318 3.195-5.563 0-10.546-2.488-13.895-6.412-14.528-16.068 7.659-92.356 20.8-125.977s17.067-24.235 26.965-27.819c0-4.437 1.365-22.187 2.389-26.795 13.335-37.939 35.415-69.97 63.908-94.837l0.263-52.79s-97.28-70.997-147.797-87.893-151.381-31.744-194.389-102.4-41.643-198.656-41.643-198.656h1019.392s1.877 127.147-41.131 198.144z" />
|
30 |
+
<glyph unicode="" glyph-name="wpmudev-icon-page" horiz-adv-x="717" d="M716.8 891.733v0 47.787c0 11.311-9.169 20.48-20.48 20.48h-389.12l-307.2-307.2v-696.32c0-11.311 9.169-20.48 20.48-20.48h675.84c11.311 0 20.48 9.169 20.48 20.48v29.013zM117.931 53.931v557.909h209.749c11.311 0 20.48 9.169 20.48 20.48v209.749h250.88v-788.139z" />
|
31 |
+
<glyph unicode="" glyph-name="wpmudev-icon-academy" horiz-adv-x="1353" d="M676.352 42.325c-73.045 0-382.976 69.973-382.976 210.091v157.013l370.859-151.723c3.558-1.498 7.693-2.369 12.032-2.369s8.474 0.87 12.241 2.446l366.553 149.938 4.096-2.048v-153.6c0-140.117-309.76-210.091-382.805-210.091zM1266.517 21.333l-71.851 87.211-72.021-87.211v403.968c0 3.755 0 18.603 0 18.603l-201.728 102.4 345.941-76.8zM1184.427 529.067l-394.069 77.312c-0.322 0.050-0.694 0.079-1.072 0.079-4.053 0-7.339-3.286-7.339-7.339 0-2.399 1.151-4.529 2.931-5.868l212.328-140.814-320.853-131.243-676.352 276.821 676.352 276.651 676.352-276.651z" />
|
32 |
</font></defs></svg>
|
admin/assets/fonts/hummingbird.ttf
CHANGED
Binary file
|
admin/assets/fonts/hummingbird.woff
CHANGED
Binary file
|
admin/assets/image/graphic-hb-cf-sell@2x.png
ADDED
Binary file
|
admin/assets/image/hb-graphic-performancetest-top.png
ADDED
Binary file
|
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={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
|
1 |
+
!function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},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=20)}([function(t,e,n){"use strict";function r(){function t(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";o.nonce=r,o.action=t;var c={data:o,method:s};return c.url=e,new(0,n(56).Promise)(function(t,e){jQuery.ajax(c).done(t).fail(e)}).then(function(t){return i(t)})}var e=ajaxurl,r=wphb.nonces.HBFetchNonce,o={notice:{dismiss:function(e){return t("wphb_notice_dismiss",{id:e},"POST")},dismissCloudflareDash:function(){return t("wphb_cf_notice_dismiss",{},"POST")}},caching:{setServer:function(e){return t("wphb_caching_set_server_type",{value:e},"POST")}},cloudflare:{connect:function(e,n,r){return t("wphb_cloudflare_connect",{step:e,formData:n,cfData:r},"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,c.default)(this,o)}function i(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},s=n(22),c=function(t){return t&&t.__esModule?t:{default:t}}(s),a=new r;e.default=a},function(t,e,n){function r(t){return null==t?void 0===t?a:c:u&&u in Object(t)?o(t):s(t)}var i=n(10),o=n(25),s=n(26),c="[object Null]",a="[object Undefined]",u=i?i.toStringTag:void 0;t.exports=r},function(t,e,n){var r=n(11),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();t.exports=o},function(t,e){function n(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}t.exports=n},function(t,e,n){function r(t){return null!=t&&o(t.length)&&!i(t)}var i=n(9),o=n(15);t.exports=r},function(t,e){function n(t){return null!=t&&"object"==typeof t}t.exports=n},function(t,e,n){function r(t,e,n){var r=t[e];c.call(t,e)&&o(r,n)&&(void 0!==n||e in t)||i(t,e,n)}var i=n(7),o=n(13),s=Object.prototype,c=s.hasOwnProperty;t.exports=r},function(t,e,n){function r(t,e,n){"__proto__"==e&&i?i(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}var i=n(8);t.exports=r},function(t,e,n){var r=n(23),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){function r(t){if(!o(t))return!1;var e=i(t);return e==c||e==a||e==s||e==u}var i=n(1),o=n(3),s="[object AsyncFunction]",c="[object Function]",a="[object GeneratorFunction]",u="[object Proxy]";t.exports=r},function(t,e,n){var r=n(2),i=r.Symbol;t.exports=i},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n(12))},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){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){function n(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e){function n(t,e){return!!(e=null==e?r:e)&&("number"==typeof t||i.test(t))&&t>-1&&t%1==0&&t<e}var r=9007199254740991,i=/^(?: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||r)}var r=Object.prototype;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";var r,i,o,s,s,c="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"===c(e)&&void 0!==t)t.exports=n();else{i=[],r=n,void 0!==(o="function"==typeof r?r.apply(e,i):r)&&(t.exports=o)}}(function(){var t;return function t(e,n,r){function i(c,a){if(!n[c]){if(!e[c]){var u="function"==typeof s&&s;if(!a&&u)return s(c,!0);if(o)return o(c,!0);var l=new Error("Cannot find module '"+c+"'");throw l.code="MODULE_NOT_FOUND",l}var f=n[c]={exports:{}};e[c][0].call(f.exports,function(t){var n=e[c][1][t];return i(n||t)},f,f.exports,t,e,n,r)}return n[c].exports}for(var o="function"==typeof s&&s,c=0;c<r.length;c++)i(r[c]);return i}({1:[function(t,e,n){function r(t,e){for(;t&&t.nodeType!==i;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var i=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=r},{}],2:[function(t,e,n){function r(t,e,n,r,o){var s=i.apply(this,arguments);return t.addEventListener(n,s,o),{destroy:function(){t.removeEventListener(n,s,o)}}}function i(t,e,n,r){return function(n){n.delegateTarget=o(n.target,e),n.delegateTarget&&r.call(t,n)}}var o=t("./closest");e.exports=r},{"./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 r(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!c.string(e))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(t))return i(t,e,n);if(c.nodeList(t))return o(t,e,n);if(c.string(t))return s(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(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 s(t,e,n){return a(document.body,t,e,n)}var c=t("./is"),a=t("delegate");e.exports=r},{"./is":3,delegate:2}],5:[function(t,e,n){function r(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 r=window.getSelection(),i=document.createRange();i.selectNodeContents(t),r.removeAllRanges(),r.addRange(i),e=r.toString()}return e}e.exports=r},{}],6:[function(t,e,n){function r(){}r.prototype={on:function(t,e,n){var r=this.e||(this.e={});return(r[t]||(r[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function r(){i.off(t,r),e.apply(n,arguments)}var i=this;return r._=e,this.on(t,r,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),r=0,i=n.length;for(r;r<i;r++)n[r].fn.apply(n[r].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),r=n[t],i=[];if(r&&e)for(var o=0,s=r.length;o<s;o++)r[o].fn!==e&&r[o].fn._!==e&&i.push(r[o]);return i.length?n[t]=i:delete n[t],this}},e.exports=r},{}],7:[function(e,n,r){!function(i,o){if("function"==typeof t&&t.amd)t(["module","select"],o);else if(void 0!==r)o(n,e("select"));else{var s={exports:{}};o(s,i.select),i.clipboardAction=s.exports}}(this,function(t,e){function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=function(t){return t&&t.__esModule?t:{default:t}}(e),i="function"==typeof Symbol&&"symbol"===c(Symbol.iterator)?function(t){return void 0===t?"undefined":c(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":void 0===t?"undefined":c(t)},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=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,r.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,r.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":i(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=s})},{select:5}],8:[function(e,n,r){!function(i,o){if("function"==typeof t&&t.amd)t(["module","./clipboard-action","tiny-emitter","good-listener"],o);else if(void 0!==r)o(n,e("./clipboard-action"),e("tiny-emitter"),e("good-listener"));else{var s={exports:{}};o(s,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=s.exports}}(this,function(t,e,n,r){function i(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 s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":c(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":c(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=i(e),f=i(n),d=i(r),p="function"==typeof Symbol&&"symbol"===c(Symbol.iterator)?function(t){return void 0===t?"undefined":c(t)}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":void 0===t?"undefined":c(t)},h=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),v=function(t){function e(t,n){o(this,e);var r=s(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return r.resolveOptions(n),r.listenClick(t),r}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";n(21),n(59),n(60),n(61),n(62),n(67),n(68),n(69),n(70),n(71)},function(t,e,n){"use strict";var r=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(r);!function(t){var e={modules:[],init:function(){function e(t){var e=t.find(".wphb-score-result-label"),n=parseInt(e.text(),10)||100,r=t.find(".wphb-score-graph-result"),i=void 0,o=void 0,s=void 0;i=r.attr("r"),o=Math.PI*(2*i),n<0&&(n=0),n>100&&(n=100),s=(100-n)/100*o,r.css({strokeDashoffset:s})}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");i.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){var r=n(6),i=n(31),o=n(32),s=n(4),c=n(17),a=n(41),u=Object.prototype,l=u.hasOwnProperty,f=o(function(t,e){if(c(e)||s(e))return void i(e,a(e),t);for(var n in e)l.call(e,n)&&r(t,n,e[n])});t.exports=f},function(t,e,n){function r(t,e){var n=o(t,e);return i(n)?n:void 0}var i=n(24),o=n(30);t.exports=r},function(t,e,n){function r(t){return!(!s(t)||o(t))&&(i(t)?h:u).test(c(t))}var i=n(9),o=n(27),s=n(3),c=n(29),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=r},function(t,e,n){function r(t){var e=s.call(t,a),n=t[a];try{t[a]=void 0;var r=!0}catch(t){}var i=c.call(t);return r&&(e?t[a]=n:delete t[a]),i}var i=n(10),o=Object.prototype,s=o.hasOwnProperty,c=o.toString,a=i?i.toStringTag:void 0;t.exports=r},function(t,e){function n(t){return i.call(t)}var r=Object.prototype,i=r.toString;t.exports=n},function(t,e,n){function r(t){return!!o&&o in t}var i=n(28),o=function(){var t=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();t.exports=r},function(t,e,n){var r=n(2),i=r["__core-js_shared__"];t.exports=i},function(t,e){function n(t){if(null!=t){try{return i.call(t)}catch(t){}try{return t+""}catch(t){}}return""}var r=Function.prototype,i=r.toString;t.exports=n},function(t,e){function n(t,e){return null==t?void 0:t[e]}t.exports=n},function(t,e,n){function r(t,e,n,r){var s=!n;n||(n={});for(var c=-1,a=e.length;++c<a;){var u=e[c],l=r?r(n[u],t[u],u,n,t):void 0;void 0===l&&(l=t[u]),s?o(n,u,l):i(n,u,l)}return n}var i=n(6),o=n(7);t.exports=r},function(t,e,n){function r(t){return i(function(e,n){var r=-1,i=n.length,s=i>1?n[i-1]:void 0,c=i>2?n[2]:void 0;for(s=t.length>3&&"function"==typeof s?(i--,s):void 0,c&&o(n[0],n[1],c)&&(s=i<3?void 0:s,i=1),e=Object(e);++r<i;){var a=n[r];a&&t(e,a,r,s)}return e})}var i=n(33),o=n(40);t.exports=r},function(t,e,n){function r(t,e){return s(o(t,e,i),t+"")}var i=n(14),o=n(34),s=n(36);t.exports=r},function(t,e,n){function r(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var r=arguments,s=-1,c=o(r.length-e,0),a=Array(c);++s<c;)a[s]=r[e+s];s=-1;for(var u=Array(e+1);++s<e;)u[s]=r[s];return u[e]=n(a),i(t,this,u)}}var i=n(35),o=Math.max;t.exports=r},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){var r=n(37),i=n(39),o=i(r);t.exports=o},function(t,e,n){var r=n(38),i=n(8),o=n(14),s=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:o;t.exports=s},function(t,e){function n(t){return function(){return t}}t.exports=n},function(t,e){function n(t){var e=0,n=0;return function(){var s=o(),c=i-(s-n);if(n=s,c>0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var r=800,i=16,o=Date.now;t.exports=n},function(t,e,n){function r(t,e,n){if(!c(n))return!1;var r=typeof e;return!!("number"==r?o(n)&&s(e,n.length):"string"==r&&e in n)&&i(n[e],t)}var i=n(13),o=n(4),s=n(16),c=n(3);t.exports=r},function(t,e,n){function r(t){return s(t)?i(t):o(t)}var i=n(42),o=n(53),s=n(4);t.exports=r},function(t,e,n){function r(t,e){var n=s(t),r=!n&&o(t),l=!n&&!r&&c(t),d=!n&&!r&&!l&&u(t),p=n||r||l||d,h=p?i(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 i=n(43),o=n(44),s=n(46),c=n(47),a=n(16),u=n(49),l=Object.prototype,f=l.hasOwnProperty;t.exports=r},function(t,e){function n(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}t.exports=n},function(t,e,n){var r=n(45),i=n(5),o=Object.prototype,s=o.hasOwnProperty,c=o.propertyIsEnumerable,a=r(function(){return arguments}())?r:function(t){return i(t)&&s.call(t,"callee")&&!c.call(t,"callee")};t.exports=a},function(t,e,n){function r(t){return o(t)&&i(t)==s}var i=n(1),o=n(5),s="[object Arguments]";t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){(function(t){var r=n(2),i=n(48),o="object"==typeof e&&e&&!e.nodeType&&e,s=o&&"object"==typeof t&&t&&!t.nodeType&&t,c=s&&s.exports===o,a=c?r.Buffer:void 0,u=a?a.isBuffer:void 0,l=u||i;t.exports=l}).call(e,n(18)(t))},function(t,e){function n(){return!1}t.exports=n},function(t,e,n){var r=n(50),i=n(51),o=n(52),s=o&&o.isTypedArray,c=s?i(s):r;t.exports=c},function(t,e,n){function r(t){return s(t)&&o(t.length)&&!!c[i(t)]}var i=n(1),o=n(15),s=n(5),c={};c["[object Float32Array]"]=c["[object Float64Array]"]=c["[object Int8Array]"]=c["[object Int16Array]"]=c["[object Int32Array]"]=c["[object Uint8Array]"]=c["[object Uint8ClampedArray]"]=c["[object Uint16Array]"]=c["[object Uint32Array]"]=!0,c["[object Arguments]"]=c["[object Array]"]=c["[object ArrayBuffer]"]=c["[object Boolean]"]=c["[object DataView]"]=c["[object Date]"]=c["[object Error]"]=c["[object Function]"]=c["[object Map]"]=c["[object Number]"]=c["[object Object]"]=c["[object RegExp]"]=c["[object Set]"]=c["[object String]"]=c["[object WeakMap]"]=!1,t.exports=r},function(t,e){function n(t){return function(e){return t(e)}}t.exports=n},function(t,e,n){(function(t){var r=n(11),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===i,c=s&&r.process,a=function(){try{return c&&c.binding&&c.binding("util")}catch(t){}}();t.exports=a}).call(e,n(18)(t))},function(t,e,n){function r(t){if(!i(t))return o(t);var e=[];for(var n in Object(t))c.call(t,n)&&"constructor"!=n&&e.push(n);return e}var i=n(17),o=n(54),s=Object.prototype,c=s.hasOwnProperty;t.exports=r},function(t,e,n){var r=n(55),i=r(Object.keys,Object);t.exports=i},function(t,e){function n(t,e){return function(n){return t(e(n))}}t.exports=n},function(t,e,n){(function(e,r){/*!
|
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 i(t){return"function"==typeof t}function o(t){Q=t}function s(t){q=t}function c(){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,r=this,i=new this.constructor(d);void 0===i[tt]&&E(i);var o=r._state;return o?function(){var t=n[o-1];q(function(){return A(o,i,t,r._result)})}():x(r,i,t,e),i}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 it.error=t,it}}function m(t,e,n,r){try{t.call(e,n,r)}catch(t){return t}}function b(t,e,n){q(function(t){var r=!1,i=m(n,e,function(n){r||(r=!0,e!==n?w(t,n):S(t,n))},function(e){r||(r=!0,k(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&i&&(r=!0,k(t,i))},t)}function g(t,e){e._state===nt?S(t,e._result):e._state===rt?k(t,e._result):x(e,void 0,function(e){return w(t,e)},function(e){return k(t,e)})}function y(t,e,n){e.constructor===t.constructor&&n===l&&e.constructor.resolve===f?g(t,e):n===it?(k(t,it.error),it.error=null):void 0===n?S(t,e):i(n)?b(t,e,n):S(t,e)}function w(e,n){e===n?k(e,p()):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 k(t,e){t._state===et&&(t._state=rt,t._result=e,q(_,t))}function x(t,e,n,r){var i=t._subscribers,o=i.length;t._onerror=null,i[o]=e,i[o+nt]=n,i[o+rt]=r,0===o&&t._state&&q(T,t)}function T(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r=void 0,i=void 0,o=t._result,s=0;s<e.length;s+=3)r=e[s],i=e[s+n],r?A(n,r,i,o):i(o);t._subscribers.length=0}}function j(){this.error=null}function C(t,e){try{return t(e)}catch(t){return ot.error=t,ot}}function A(t,e,n,r){var o=i(n),s=void 0,c=void 0,a=void 0,u=void 0;if(o){if(s=C(n,r),s===ot?(u=!0,c=s.error,s.error=null):a=!0,e===s)return void k(e,h())}else s=r,a=!0;e._state!==et||(o&&a?w(e,s):u?k(e,c):t===nt?S(e,s):t===rt&&k(e,s))}function O(t,e){try{e(function(e){w(t,e)},function(e){k(t,e)})}catch(e){k(t,e)}}function P(){return st++}function E(t){t[tt]=st++,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))):k(this.promise,I())}function I(){return new Error("Array Methods must be provided an Array")}function D(t){return new $(this,t).promise}function B(t){var e=this;return new e(U(t)?function(n,r){for(var i=t.length,o=0;o<i;o++)e.resolve(t[o]).then(n,r)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function M(t){var e=this,n=new e(d);return k(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 H(t){this[tt]=P(),this._result=this._state=void 0,this._subscribers=[],d!==t&&("function"!=typeof t&&F(),this instanceof H?O(this,t):L())}function R(){var t=void 0;if(void 0!==r)t=r;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=H}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(58);return z=t.runOnLoop||t.runOnContext,c()}catch(t){return a()}}():a();var tt=Math.random().toString(36).substring(16),et=void 0,nt=1,rt=2,it=new j,ot=new j,st=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,r=n.resolve;if(r===f){var i=v(t);if(i===l&&t._state!==et)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(n===H){var o=new n(d);y(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},$.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===et&&(this._remaining--,t===rt?k(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},$.prototype._willSettleAt=function(t,e){var n=this;x(t,void 0,function(t){return n._settledAt(nt,e,t)},function(t){return n._settledAt(rt,e,t)})},H.all=D,H.race=B,H.resolve=f,H.reject=M,H._setScheduler=o,H._setAsap=s,H._asap=q,H.prototype={constructor:H,then:l,catch:function(t){return this.then(null,t)}},H.polyfill=R,H.Promise=H,H})}).call(e,n(57),n(12))},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(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===r||!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 s(){v&&p&&(v=!1,p.length?h=p.concat(h):m=-1,h.length&&c())}function c(){if(!v){var t=i(s);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:r}catch(t){f=r}}();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||i(c)},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){},function(t,e,n){"use strict";var r=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(r);!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 r=t(".performance-report-table");r.off("click","button"),r.on("click","tr.wphb-performance-report-item",function(e){e.preventDefault();var n=t(this).closest(".wphb-performance-report-item"),r=n.nextUntil(".wphb-performance-report-item");r.toggleClass("wphb-performance-report-item-additional-content-opened"),r.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 s=t(o);s.length&&s.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(),r=t("#wphb-first-name").val();return i.default.performance.addRecipient(n,r).then(function(r){var i=t('<div class="recipient"/>'),o=t("<img/>").attr({src:r.avatar,width:"30"}),s=t("<span/>").html(r.name);i.append('<span class="name"/>'),i.find(".name").append(o,s),i.append(t('<span class="email"/>').html(n)),i.append(t("<a/>").attr({"data-id":r.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:r.email,name:r.name})}).appendTo(i),t(".receipt .recipients").append(i),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 r=t(this).serialize(),o=t(this);return o.find(".button").attr("disabled","disabled"),i.default.performance.saveReportsSettings(r).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(),i.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 r(t){return t&&t.__esModule?t:{default:t}}var i=n(0),o=r(i),s=n(19),c=r(s);!function(t){WPHB_Admin.gzip={module:"gzip",selectedServer:"",$serverSelector:null,$serverInstructions:[],init:function(){var e=this;this.$serverSelector=t("#wphb-server-type"),this.selectedServer=this.$serverSelector.val();var n=t(".wphb-server-instructions"),r=t("#configure-gzip-link"),i=t("#troubleshooting-link"),o=t("#troubleshooting-link-litespeed");return new c.default(".wphb-code-snippet .button"),n.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()}),r.on("click",function(e){e.preventDefault(),t("html, body").animate({scrollTop:t("#wphb-box-gzip-settings").offset().top-50},"slow")}),i.on("click",function(e){e.preventDefault(),t("html, body").animate({scrollTop:t("#troubleshooting-gzip").offset().top},"slow")}),o.on("click",function(e){e.preventDefault(),t("html, body").animate({scrollTop:t("#troubleshooting-gzip-litespeed").offset().top},"slow")}),t(".tab label").on("click",function(){t(this).parent().parent().find(".tab label.active").removeClass("active"),t(this).addClass("active")}),t(".switch-manual").on("click",function(){var n=e.selectedServer.toLowerCase();t("#wphb-server-instructions-"+n).find(".tab label.active").first().removeClass("active"),t(this).parents().find("#"+n+"-config-manual").prev().addClass("active")}),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()},updateTabSize:function(){var e=t("#wphb-server-instructions-"+this.selectedServer.toLowerCase()).find(".tabs"),n=e.find(".tab > input:checked").parent(),r=n.find(".content");e.height(r.outerHeight()+n.outerHeight()-6)},setServer:function(t){o.default.caching.setServer(t)}}}(jQuery)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var i=n(19),o=r(i),s=n(0),c=r(s);!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 r=t("input[name='expiry-set-type']"),i=t(".settings-form");return r.each(function(){this.checked&&("expiry-all-types"===t(this).attr("id")?(i.find("[data='expiry-single-type']").hide(),i.find("[data='expiry-all-types']").show()):"expiry-single-type"===t(this).attr("id")&&(i.find("[data='expiry-all-types']").hide(),i.find("[data='expiry-single-type']").show()))}),r.on("click",function(){"expiry-all-types"===t(this).attr("id")?(i.find("[data='expiry-single-type']").hide(),i.find("[data='expiry-all-types']").show()):"expiry-single-type"===t(this).attr("id")&&(i.find("[data='expiry-all-types']").hide(),i.find("[data='expiry-single-type']").show())}),t(".tab label").on("click",function(){t(this).parent().parent().find(".tab label.active").removeClass("active"),t(this).addClass("active")}),this},setServer:function(t){c.default.caching.setServer(t)},updateTabSize:function(){var e=t("#wphb-server-instructions-"+this.selectedServer.toLowerCase()).find(".tabs"),n=e.find(".tab > input:checked").parent(),r=n.find(".content");e.height(r.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()}}}(jQuery)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var i=n(0),o=r(i),s=n(63),c=n(64),a=r(c),u=n(65),l=r(u),f=n(66),d=r(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,s.getLink)("minification")},this.$checkFilesButton=t("#check-files"),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,s.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,s.__)("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.rowsCollection=new WPHB_Admin.minification.RowsCollection,t(".wphb-border-row").each(function(e,r){var i=void 0;i=t(r).data("filter-secondary")?new WPHB_Admin.minification.Row(t(r),t(r).data("filter"),t(r).data("filter-secondary")):new WPHB_Admin.minification.Row(t(r),t(r).data("filter")),n.rowsCollection.push(i)}),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),r=e.data("toggles"),i=e.prop("checked"),o=n.rowsCollection.getVisibleItems();for(var s in o)o[s].change(r,i)}),t("input.wphb-minification-file-selector").click(function(){var e=t(this),r=n.rowsCollection.getItemById(e.data("type"),e.data("handle"));r&&(e.is(":checked")?r.select():r.unSelect())}),t("#minification-bulk-file").click(function(){var e=t(this),r=n.rowsCollection.getItems();for(var i in r)r.hasOwnProperty(i)&&(e.is(":checked")?r[i].select():r[i].unSelect())}),t(".toggle-cross").on("click",function(){var e=t(this),r=e.find("input.toggle-include"),i=n.rowsCollection.getItemById(e.data("type"),e.data("handle"));i&&(i.change("include",!r.prop("checked")),i.getElement().find("input:not(.toggle-include)").prop("disabled",!r.prop("checked")))});var r=t("input[type=checkbox][name=use_cdn]");r.change(function(){var e=t(this).prop("checked");r.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 i=_.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",i),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";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){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,n){var r=t,i=e.toLowerCase(),o=!1,s=!1,c=!0,a=r.find(".toggle-include"),u=r.find(".toggle-combine"),l=r.find(".toggle-minify"),f=r.find(".toggle-position-footer"),d=r.find(".toggle-defer"),p=r.find(".toggle-inline"),h=r.find(".toggle-cross > i");return n&&(o=n.toLowerCase()),{hide:function(){r.addClass("out-of-filter"),c=!1},show:function(){r.removeClass("out-of-filter"),c=!0},getElement:function(){return r},getId:function(){return r.attr("id")},getFilter:function(){return i},matchFilter:function(t){return""===t||(t=t.toLowerCase(),i.search(t)>-1)},matchSecondaryFilter:function(t){return""===t||!!o&&(t=t.toLowerCase(),o===t)},isVisible:function(){return c},isSelected:function(){return s},select:function(){s=!0},unSelect:function(){s=!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"inline":p.prop("checked",e);break;case"include":h.removeClass(),a.prop("checked",e),e?(r.removeClass("disabled"),h.addClass("dev-icon dev-icon-cross"),a.attr("checked",!0)):(r.addClass("disabled"),h.addClass("wdv-icon wdv-icon-refresh"),a.removeAttr("checked"));break;case"footer":f.prop("checked",e)}}}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r="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},i=function(){var t=[],e="",n="";return{push:function(e){"object"===(void 0===e?"undefined":r(e))&&t.push(e)},getItems:function(){return t},getItem:function(e){return!!t[e]&&t[e]},getItemById:function(e,n){var r=!1;for(var i in t)if("wphb-file-"+e+"-"+n===t[i].getId()){r=t[i];break}return r},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,r){"secondary"===r?n=t:e=t},applyFilters:function(){for(var r in t)t[r]&&(t[r].matchFilter(e)&&t[r].matchSecondaryFilter(n)?t[r].show():t[r].hide())}}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(r),o=function(t,e){t=parseInt(t),e=parseInt(e);var n=!1,r={scan:function(){var n=t-e;0!==e?o(n):i.default.minification.startCheck().then(function(){o(n)})},cancel:function(){return n=!0,i.default.minification.cancelScan()},getProgress:function(){if(n)return 0;var r=t-e;return Math.min(Math.round(100*parseInt(t-r)/t),99)},onFinishStep:function(t){},onFinish:function(t){}},o=function n(o){o>=0?(e=t-o,i.default.minification.checkStep(e).then(function(){o-=1,r.onFinishStep(r.getProgress()),n(o)})):i.default.minification.finishCheck().then(r.onFinish)};return r};e.default=o},function(t,e,n){"use strict";var r=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(r);!function(t){WPHB_Admin.dashboard={module:"dashboard",init:function(){var e=this,n=t("#dismiss-cf-notice"),r=t(".cf-dash-notice");return wphbDashboardStrings&&(this.strings=wphbDashboardStrings),t("#wphb-activate-minification").change(function(){var n=t(this).val();i.default.dashboard.toggleMinification(n).then(function(){var r=t('input[name="use_cdn"]');"false"===n?(r.prop("checked",!1),r.prop("disabled",!0)):r.prop("disabled",!1),e.showNotice()})}),t("#use_cdn").change(function(){var n=t(this).is(":checked");i.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)}),n.click(function(t){t.preventDefault(),i.default.notice.dismissCloudflareDash(),r.slideUp(),r.parent().addClass("no-background-image")}),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(){i.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 r=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(r);!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(),i.default.cloudflare.purgeCache().then(function(){var r=t("#wphb-notice-cloudflare-purge-cache");window.scrollTo(0,0),r.slideDown(),setTimeout(function(){r.slideUp()},5e3),n.removeAttr("disabled"),e.hideSpinner()})},renderStep:function(e){var n=WPHB_Admin.DashboardCloudFlare.template("#cloudflare-step-"+e),r=n(this.data),i=this;r&&(this.currentStep=e,this.$stepsContainer.hide().html(n(this.data)).fadeIn().find("form").on("submit",function(e){e.preventDefault(),i.submitStep.call(i,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(),i.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,r={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"};return function(i){return _.templateSettings=r,(n=n||_.template(t(e).html()))(i)}})}(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),r=0;r<n.length;r++)n[r][0]=new Date(n[r][0]),n[r][1]=Math.round(n[r][1]),0==Math.round(n[r][1])&&(n[r][1]=-100);e.addRows(n);var i={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,i),t(window).resize(function(){o.draw(e,i)})}}}(jQuery)},function(t,e,n){"use strict";var r=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(r);!function(t){WPHB_Admin.cloudflare={module:"cloudflare",$cfSelector:!1,$spinner:!1,init:function(){this.$spinner=t(".wphb-spinner"),this.$cfSelector=t("#set-expiry-all");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();i.default.cloudflare.setExpiration(n).then(function(){window.location.reload()})},displaySpinner:function(){this.$spinner.css("visibility","visible")}}}(jQuery)},function(t,e,n){"use strict";jQuery(document).ready(function(){WPHB_Admin.init()})}]);
|
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 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":""}
|
1 |
+
{"version":3,"sources":["webpack:///admin.min.js","webpack:///webpack/bootstrap beb0d49820ef0e59c001","webpack:///./_src/admin/js/utils/fetcher.js","webpack:////root/hummingbird/node_modules/lodash/_baseGetTag.js","webpack:////root/hummingbird/node_modules/lodash/_root.js","webpack:////root/hummingbird/node_modules/lodash/isObject.js","webpack:////root/hummingbird/node_modules/lodash/isArrayLike.js","webpack:////root/hummingbird/node_modules/lodash/isObjectLike.js","webpack:////root/hummingbird/node_modules/lodash/_assignValue.js","webpack:////root/hummingbird/node_modules/lodash/_baseAssignValue.js","webpack:////root/hummingbird/node_modules/lodash/_defineProperty.js","webpack:////root/hummingbird/node_modules/lodash/isFunction.js","webpack:////root/hummingbird/node_modules/lodash/_Symbol.js","webpack:////root/hummingbird/node_modules/lodash/_freeGlobal.js","webpack:///(webpack)/buildin/global.js","webpack:////root/hummingbird/node_modules/lodash/eq.js","webpack:////root/hummingbird/node_modules/lodash/identity.js","webpack:////root/hummingbird/node_modules/lodash/isLength.js","webpack:////root/hummingbird/node_modules/lodash/_isIndex.js","webpack:////root/hummingbird/node_modules/lodash/_isPrototype.js","webpack:///(webpack)/buildin/module.js","webpack:///./_src/admin/js/utils/clipboard.js","webpack:///./_src/admin/js/index.js","webpack:///./_src/admin/js/admin-main.js","webpack:////root/hummingbird/node_modules/lodash/assign.js","webpack:////root/hummingbird/node_modules/lodash/_getNative.js","webpack:////root/hummingbird/node_modules/lodash/_baseIsNative.js","webpack:////root/hummingbird/node_modules/lodash/_getRawTag.js","webpack:////root/hummingbird/node_modules/lodash/_objectToString.js","webpack:////root/hummingbird/node_modules/lodash/_isMasked.js","webpack:////root/hummingbird/node_modules/lodash/_coreJsData.js","webpack:////root/hummingbird/node_modules/lodash/_toSource.js","webpack:////root/hummingbird/node_modules/lodash/_getValue.js","webpack:////root/hummingbird/node_modules/lodash/_copyObject.js","webpack:////root/hummingbird/node_modules/lodash/_createAssigner.js","webpack:////root/hummingbird/node_modules/lodash/_baseRest.js","webpack:////root/hummingbird/node_modules/lodash/_overRest.js","webpack:////root/hummingbird/node_modules/lodash/_apply.js","webpack:////root/hummingbird/node_modules/lodash/_setToString.js","webpack:////root/hummingbird/node_modules/lodash/_baseSetToString.js","webpack:////root/hummingbird/node_modules/lodash/constant.js","webpack:////root/hummingbird/node_modules/lodash/_shortOut.js","webpack:////root/hummingbird/node_modules/lodash/_isIterateeCall.js","webpack:////root/hummingbird/node_modules/lodash/keys.js","webpack:////root/hummingbird/node_modules/lodash/_arrayLikeKeys.js","webpack:////root/hummingbird/node_modules/lodash/_baseTimes.js","webpack:////root/hummingbird/node_modules/lodash/isArguments.js","webpack:////root/hummingbird/node_modules/lodash/_baseIsArguments.js","webpack:////root/hummingbird/node_modules/lodash/isArray.js","webpack:////root/hummingbird/node_modules/lodash/isBuffer.js","webpack:////root/hummingbird/node_modules/lodash/stubFalse.js","webpack:////root/hummingbird/node_modules/lodash/isTypedArray.js","webpack:////root/hummingbird/node_modules/lodash/_baseIsTypedArray.js","webpack:////root/hummingbird/node_modules/lodash/_baseUnary.js","webpack:////root/hummingbird/node_modules/lodash/_nodeUtil.js","webpack:////root/hummingbird/node_modules/lodash/_baseKeys.js","webpack:////root/hummingbird/node_modules/lodash/_nativeKeys.js","webpack:////root/hummingbird/node_modules/lodash/_overArg.js","webpack:////root/hummingbird/node_modules/es6-promise/dist/es6-promise.js","webpack:////root/hummingbird/node_modules/process/browser.js","webpack:///./_src/admin/js/admin-performance.js","webpack:///./_src/admin/js/admin-gzip.js","webpack:///./_src/admin/js/admin-caching.js","webpack:///./_src/admin/js/admin-minification.js","webpack:///./_src/admin/js/utils/helpers.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/admin-dashboard.js","webpack:///./_src/admin/js/admin-dashboard-cloudflare.js","webpack:///./_src/admin/js/admin-uptime.js","webpack:///./_src/admin/js/admin-cloudflare.js","webpack:///./_src/admin/js/admin-app.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","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","dismissCloudflareDash","caching","setServer","value","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","isObject","type","isArrayLike","isLength","isFunction","isObjectLike","assignValue","key","objValue","eq","baseAssignValue","objectProto","writable","getNative","func","e","tag","funcTag","genTag","asyncTag","proxyTag","global","g","eval","window","other","identity","MAX_SAFE_INTEGER","isIndex","reIsUint","test","isPrototype","Ctor","webpackPolyfill","deprecate","paths","children","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","require","_typeof2","f","apply","define","t","r","u","a","code","1","closest","element","selector","nodeType","DOCUMENT_NODE_TYPE","matches","parentNode","Element","proto","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","2","delegate","callback","useCapture","listenerFn","listener","addEventListener","destroy","removeEventListener","delegateTarget","target","./closest","3","node","HTMLElement","nodeList","toString","string","String","fn","4","listen","is","TypeError","listenNode","listenNodeList","listenSelector","Array","forEach","document","body","./is","5","select","selectedText","nodeName","focus","isReadOnly","hasAttribute","setAttribute","setSelectionRange","removeAttribute","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","6","E","on","ctx","push","once","off","_","emit","slice","evtArr","len","evts","liveEvents","7","factory","amd","mod","clipboardAction","_select","_classCallCheck","instance","Constructor","_select2","_createClass","defineProperties","props","descriptor","protoProps","staticProps","ClipboardAction","options","resolveOptions","initSelection","container","emitter","text","trigger","selectFake","selectTarget","_this","isRTL","documentElement","getAttribute","removeFake","fakeHandlerCallback","fakeHandler","fakeElem","createElement","style","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","appendChild","copyText","removeChild","succeeded","execCommand","err","handleResult","clearSelection","bind","set","_action","_target","8","tinyEmitter","goodListener","clipboard","_clipboardAction","_tinyEmitter","_goodListener","_interopRequireDefault","_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","_fetcher","_fetcher2","$","WPHB_Admin","init","updatePerformanceGraph","$wrap","$item","find","val","parseInt","$circle","pct","attr","Math","PI","css","strokeDashoffset","updatePerformanceResultsGraphs","each","location","href","notice_id","parent","register_events_performance","setTimeout","initModule","getModule","utils","membershipModal","open","post","notices","click","preventDefault","hide","copyObject","createAssigner","keys","assign","source","getValue","baseIsNative","isMasked","reIsNative","reIsHostCtor","toSource","reRegExpChar","funcProto","funcToString","RegExp","replace","isOwn","unmasked","result","nativeObjectToString","maskSrcKey","coreJsData","uid","exec","IE_PROTO","customizer","isNew","index","newValue","assigner","baseRest","sources","guard","isIterateeCall","start","setToString","overRest","transform","nativeMax","array","otherArgs","max","thisArg","baseSetToString","shortOut","constant","count","lastCalled","stamp","nativeNow","remaining","HOT_SPAN","HOT_COUNT","Date","now","arrayLikeKeys","baseKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","baseTimes","iteratee","baseIsArguments","propertyIsEnumerable","argsTag","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","typedArrayTags","freeProcess","process","binding","nativeKeys","overArg","arg","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","_remaining","_enumerate","validationError","all$1","entries","race$1","reject$1","needsResolver","needsNew","Promise$2","polyfill$1","local","P","promiseToString","cast","_isArray","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","catch","polyfill","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","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","iteration","progress","wphbPerformanceStrings","strings","$runTestButton","performanceReportTable","getParentPerformanceItem","getNextAdditionalContentRow","nextUntil","toggleClass","hasClass","addClass","removeClass","WDP","showOverlay","class","performanceTest","finishedTestURLsLink","hash","row","change","show","remove","user_row","img","src","avatar","width","html","append","data-id","user_id","alt","removeButtonText","stringify","appendTo","alert","form_data","serialize","that","removeAttr","showUpdateMessage","scrollTo","slideDown","slideUp","redirect","updateProgressBar","finished","_clipboard","_clipboard2","gzip","selectedServer","$serverSelector","$serverInstructions","instructionsList","configureLink","troubleshootingLink","troubleshootingLinkLiteSpeed","showServerInstructions","hideCurrentInstructions","updateTabSize","animate","offset","lowercaseServername","toLowerCase","first","parents","prev","selected","server","jq","current","content","height","outerHeight","$snippets","cloudflareLink","wphbCachingStrings","apache","LiteSpeed","nginx","expiryInput","expirySettingsForm","checked","serverTab","_helpers","_Row","_Row2","_RowsCollection","_RowsCollection2","_Scanner","_Scanner2","$checkFilesButton","$checkFilesResultsContainer","checkURLSList","checkedURLS","$spinner","scanner","totalSteps","currentScanStep","onFinishStep","onFinish","showCDNModal","show_cdn","getLink","getProgress","scan","cancel","toggle","confirm","__","reload","cdn_value","rowsCollection","RowsCollection","_row","Row","keyup","addFilter","applyFilters","what","prop","visibleItems","getVisibleItems","$this","getItemById","unSelect","items","getItems","checkbox","getElement","checkboxes","checkedState","innerWidth","minification_resize_rows","debounce","str","screen","links","_element","_filter","_filter_sec","$el","filter","filterSecondary","visible","$include","$combine","$minify","$posFooter","$defer","$inline","$disableIcon","getId","getFilter","matchFilter","search","matchSecondaryFilter","isVisible","isSelected","currentFilter","currentSecondaryFilter","getItem","getSelectedItems","MinificationScanner","currentStep","cancelling","remainingSteps","min","round","cloudFlareDismissLink","cloudFlareDashNotice","wphbDashboardStrings","CDNcheckbox","showNotice","startQuickSetup","runPerformanceTest","DashboardCloudFlare","settings","apiKey","$stepsContainer","$infoBox","$deactivateButton","renderStep","$button","showSpinner","$notice","hideSpinner","template","fadeIn","submitStep","bindEvents","$howToInstructions","wpmuSelect","emptyInfoBox","showInfoBox","$form","newData","nextStep","memoize","compiled","evaluate","interpolate","escape","variable","templateSettings","uptime","$dataRangeSelector","chartData","timer","wphbUptimeStrings","$disableUptime","disableUptimeURL","drawChart","google","visualization","DataTable","addColumn","chart_array","addRows","chartArea","left","colors","curveType","legend","vAxis","format","viewWindow","tooltip","isHtml","series","0","axis","axes","y","Resp","label","chart","LineChart","getElementById","draw","resize","$cfSelector","connected","setExpiry","displaySpinner","ready"],"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// 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 = 20);\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__(22);\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__(56).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 * Dismiss CloudFlare dash notice\n */\n dismissCloudflareDash: function dismissCloudflareDash() {\n var action = actionPrefix + 'cf_notice_dismiss';\n return request(action, {}, '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 /**\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__(10),\n getRawTag = __webpack_require__(25),\n objectToString = __webpack_require__(26);\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__(11);\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) {\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/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(9),\n isLength = __webpack_require__(15);\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/* 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 baseAssignValue = __webpack_require__(7),\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/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(8);\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/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getNative = __webpack_require__(23);\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/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isObject = __webpack_require__(3);\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/* 10 */\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/* 11 */\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__(12)))\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\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) {\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/* 16 */\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/* 17 */\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/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(module) {\n\tif(!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif(!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n/***/ }),\n/* 19 */\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/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(21);\n__webpack_require__(59);\n__webpack_require__(60);\n__webpack_require__(61);\n__webpack_require__(62);\n__webpack_require__(67);\n__webpack_require__(68);\n__webpack_require__(69);\n__webpack_require__(70);\n__webpack_require__(71);\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 '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/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(6),\n copyObject = __webpack_require__(31),\n createAssigner = __webpack_require__(32),\n isArrayLike = __webpack_require__(4),\n isPrototype = __webpack_require__(17),\n keys = __webpack_require__(41);\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/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsNative = __webpack_require__(24),\n getValue = __webpack_require__(30);\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/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(9),\n isMasked = __webpack_require__(27),\n isObject = __webpack_require__(3),\n toSource = __webpack_require__(29);\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/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Symbol = __webpack_require__(10);\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/* 26 */\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/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar coreJsData = __webpack_require__(28);\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/* 28 */\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/* 29 */\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/* 30 */\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/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(6),\n baseAssignValue = __webpack_require__(7);\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/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseRest = __webpack_require__(33),\n isIterateeCall = __webpack_require__(40);\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/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar identity = __webpack_require__(14),\n overRest = __webpack_require__(34),\n setToString = __webpack_require__(36);\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/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar apply = __webpack_require__(35);\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/* 35 */\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/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseSetToString = __webpack_require__(37),\n shortOut = __webpack_require__(39);\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/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar constant = __webpack_require__(38),\n defineProperty = __webpack_require__(8),\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/* 38 */\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/* 39 */\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/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar eq = __webpack_require__(13),\n isArrayLike = __webpack_require__(4),\n isIndex = __webpack_require__(16),\n isObject = __webpack_require__(3);\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/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeKeys = __webpack_require__(42),\n baseKeys = __webpack_require__(53),\n isArrayLike = __webpack_require__(4);\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/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseTimes = __webpack_require__(43),\n isArguments = __webpack_require__(44),\n isArray = __webpack_require__(46),\n isBuffer = __webpack_require__(47),\n isIndex = __webpack_require__(16),\n isTypedArray = __webpack_require__(49);\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/* 43 */\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/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsArguments = __webpack_require__(45),\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/* 45 */\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/* 46 */\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/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(2),\n stubFalse = __webpack_require__(48);\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/* 48 */\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/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsTypedArray = __webpack_require__(50),\n baseUnary = __webpack_require__(51),\n nodeUtil = __webpack_require__(52);\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/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseGetTag = __webpack_require__(1),\n isLength = __webpack_require__(15),\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/* 51 */\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/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(11);\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/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isPrototype = __webpack_require__(17),\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/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar overArg = __webpack_require__(55);\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) {\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/* 56 */\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__(58);\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__(57), __webpack_require__(12)))\n\n/***/ }),\n/* 57 */\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/* 58 */\n/***/ (function(module, exports) {\n\n/* (ignored) */\n\n/***/ }),\n/* 59 */\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/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nvar _clipboard = __webpack_require__(19);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\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 configureLink = $(\"#configure-gzip-link\"),\n troubleshootingLink = $(\"#troubleshooting-link\"),\n troubleshootingLinkLiteSpeed = $(\"#troubleshooting-link-litespeed\");\n\n new _clipboard2.default('.wphb-code-snippet .button');\n\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 // Update tab size on select change.\n self.updateTabSize();\n });\n configureLink.on('click', function (e) {\n e.preventDefault();\n $('html, body').animate({ scrollTop: $('#wphb-box-gzip-settings').offset().top - 50 }, 'slow');\n });\n troubleshootingLink.on('click', function (e) {\n e.preventDefault();\n $('html, body').animate({ scrollTop: $('#troubleshooting-gzip').offset().top }, 'slow');\n });\n troubleshootingLinkLiteSpeed.on('click', function (e) {\n e.preventDefault();\n $('html, body').animate({ scrollTop: $('#troubleshooting-gzip-litespeed').offset().top }, 'slow');\n });\n $('.tab label').on('click', function () {\n $(this).parent().parent().find('.tab label.active').removeClass('active');\n $(this).addClass('active');\n });\n $('.switch-manual').on('click', function () {\n var lowercaseServername = self.selectedServer.toLowerCase();\n $('#wphb-server-instructions-' + lowercaseServername).find('.tab label.active').first().removeClass('active');\n $(this).parents().find('#' + lowercaseServername + '-config-manual').prev().addClass('active');\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 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 setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _clipboard = __webpack_require__(19);\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 $('.tab label').on('click', function () {\n $(this).parent().parent().find('.tab label.active').removeClass('active');\n $(this).addClass('active');\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})(jQuery);\n\n/***/ }),\n/* 62 */\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__(63);\n\nvar _Row = __webpack_require__(64);\n\nvar _Row2 = _interopRequireDefault(_Row);\n\nvar _RowsCollection = __webpack_require__(65);\n\nvar _RowsCollection2 = _interopRequireDefault(_RowsCollection);\n\nvar _Scanner = __webpack_require__(66);\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.$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.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/* 63 */\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/* 64 */\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 $inline = $el.find('.toggle-inline'),\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 'inline':\n {\n $inline.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/* 65 */\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/* 66 */\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/* 67 */\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 var cloudFlareDismissLink = $('#dismiss-cf-notice');\n var cloudFlareDashNotice = $('.cf-dash-notice');\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\n cloudFlareDismissLink.click(function (e) {\n e.preventDefault();\n _fetcher2.default.notice.dismissCloudflareDash();\n cloudFlareDashNotice.slideUp();\n cloudFlareDashNotice.parent().addClass('no-background-image');\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 performance test 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/* 68 */\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/* 69 */\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/* 70 */\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 = $('#set-expiry-all');\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/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\njQuery(document).ready(function () {\n WPHB_Admin.init();\n});\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// 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 = 20);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap beb0d49820ef0e59c001","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 * Dismiss CloudFlare dash notice\n */\n dismissCloudflareDash: () => {\n const action = actionPrefix + 'cf_notice_dismiss';\n return request( action, {}, '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 /**\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// /root/hummingbird/node_modules/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// /root/hummingbird/node_modules/lodash/_root.js\n// module id = 2\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// /root/hummingbird/node_modules/lodash/isObject.js\n// module id = 3\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// /root/hummingbird/node_modules/lodash/isArrayLike.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// /root/hummingbird/node_modules/lodash/isObjectLike.js\n// module id = 5\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// /root/hummingbird/node_modules/lodash/_assignValue.js\n// module id = 6\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// /root/hummingbird/node_modules/lodash/_baseAssignValue.js\n// module id = 7\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// /root/hummingbird/node_modules/lodash/_defineProperty.js\n// module id = 8\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// /root/hummingbird/node_modules/lodash/isFunction.js\n// module id = 9\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// /root/hummingbird/node_modules/lodash/_Symbol.js\n// module id = 10\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// /root/hummingbird/node_modules/lodash/_freeGlobal.js\n// module id = 11\n// module chunks = 0","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.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// /root/hummingbird/node_modules/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// /root/hummingbird/node_modules/lodash/identity.js\n// module id = 14\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// /root/hummingbird/node_modules/lodash/isLength.js\n// module id = 15\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// /root/hummingbird/node_modules/lodash/_isIndex.js\n// module id = 16\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// /root/hummingbird/node_modules/lodash/_isPrototype.js\n// module id = 17\n// module chunks = 0","module.exports = function(module) {\n\tif(!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif(!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 18\n// module chunks = 0","/*!\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","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","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","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// /root/hummingbird/node_modules/lodash/assign.js\n// module id = 22\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// /root/hummingbird/node_modules/lodash/_getNative.js\n// module id = 23\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// /root/hummingbird/node_modules/lodash/_baseIsNative.js\n// module id = 24\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// /root/hummingbird/node_modules/lodash/_getRawTag.js\n// module id = 25\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// /root/hummingbird/node_modules/lodash/_objectToString.js\n// module id = 26\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// /root/hummingbird/node_modules/lodash/_isMasked.js\n// module id = 27\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// /root/hummingbird/node_modules/lodash/_coreJsData.js\n// module id = 28\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// /root/hummingbird/node_modules/lodash/_toSource.js\n// module id = 29\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// /root/hummingbird/node_modules/lodash/_getValue.js\n// module id = 30\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// /root/hummingbird/node_modules/lodash/_copyObject.js\n// module id = 31\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// /root/hummingbird/node_modules/lodash/_createAssigner.js\n// module id = 32\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// /root/hummingbird/node_modules/lodash/_baseRest.js\n// module id = 33\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// /root/hummingbird/node_modules/lodash/_overRest.js\n// module id = 34\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// /root/hummingbird/node_modules/lodash/_apply.js\n// module id = 35\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// /root/hummingbird/node_modules/lodash/_setToString.js\n// module id = 36\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// /root/hummingbird/node_modules/lodash/_baseSetToString.js\n// module id = 37\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// /root/hummingbird/node_modules/lodash/constant.js\n// module id = 38\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// /root/hummingbird/node_modules/lodash/_shortOut.js\n// module id = 39\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// /root/hummingbird/node_modules/lodash/_isIterateeCall.js\n// module id = 40\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// /root/hummingbird/node_modules/lodash/keys.js\n// module id = 41\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// /root/hummingbird/node_modules/lodash/_arrayLikeKeys.js\n// module id = 42\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// /root/hummingbird/node_modules/lodash/_baseTimes.js\n// module id = 43\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// /root/hummingbird/node_modules/lodash/isArguments.js\n// module id = 44\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// /root/hummingbird/node_modules/lodash/_baseIsArguments.js\n// module id = 45\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// /root/hummingbird/node_modules/lodash/isArray.js\n// module id = 46\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// /root/hummingbird/node_modules/lodash/isBuffer.js\n// module id = 47\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// /root/hummingbird/node_modules/lodash/stubFalse.js\n// module id = 48\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// /root/hummingbird/node_modules/lodash/isTypedArray.js\n// module id = 49\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// /root/hummingbird/node_modules/lodash/_baseIsTypedArray.js\n// module id = 50\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// /root/hummingbird/node_modules/lodash/_baseUnary.js\n// module id = 51\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// /root/hummingbird/node_modules/lodash/_nodeUtil.js\n// module id = 52\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// /root/hummingbird/node_modules/lodash/_baseKeys.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// /root/hummingbird/node_modules/lodash/_nativeKeys.js\n// module id = 54\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// /root/hummingbird/node_modules/lodash/_overArg.js\n// module id = 55\n// module chunks = 0","/*!\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// /root/hummingbird/node_modules/es6-promise/dist/es6-promise.js\n// module id = 56\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// /root/hummingbird/node_modules/process/browser.js\n// module id = 57\n// module chunks = 0","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","import Fetcher from './utils/fetcher';\nimport Clipboard from './utils/clipboard';\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 configureLink = $(\"#configure-gzip-link\"),\n troubleshootingLink = $(\"#troubleshooting-link\"),\n troubleshootingLinkLiteSpeed = $(\"#troubleshooting-link-litespeed\");\n\n new Clipboard('.wphb-code-snippet .button');\n \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 // Update tab size on select change.\n self.updateTabSize();\n });\n configureLink.on('click', function(e) {\n e.preventDefault();\n $('html, body').animate({ scrollTop: $('#wphb-box-gzip-settings').offset().top -50 }, 'slow');\n });\n troubleshootingLink.on('click', function(e) {\n e.preventDefault();\n $('html, body').animate({ scrollTop: $('#troubleshooting-gzip').offset().top }, 'slow');\n });\n troubleshootingLinkLiteSpeed.on('click', function(e) {\n e.preventDefault();\n $('html, body').animate({ scrollTop: $('#troubleshooting-gzip-litespeed').offset().top }, 'slow');\n });\n $( '.tab label' ).on( 'click', function() {\n $( this ).parent().parent().find( '.tab label.active' ).removeClass( 'active' );\n $( this ).addClass( 'active' );\n });\n $( '.switch-manual' ).on( 'click', function() {\n let lowercaseServername = self.selectedServer.toLowerCase();\n $( '#wphb-server-instructions-' + lowercaseServername ).find( '.tab label.active' ).first().removeClass( 'active' );\n $( this ).parents().find( '#' + lowercaseServername + '-config-manual' ).prev().addClass( 'active' );\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 updateTabSize: function() {\n let 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 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 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 $( '.tab label' ).on( 'click', function() {\n $( this ).parent().parent().find( '.tab label.active' ).removeClass( 'active' );\n $( this ).addClass( 'active' );\n });\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}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-caching.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.$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.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","/**\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","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 $inline = $el.find( '.toggle-inline' ),\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\t\t\t\tcase 'inline': {\n\t\t\t\t\t$inline.prop( 'checked', value );\n\t\t\t\t\tbreak;\n\t\t\t\t}\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","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.dashboard = {\n module: 'dashboard',\n\n init: function() {\n const self = this;\n let cloudFlareDismissLink = $('#dismiss-cf-notice');\n let cloudFlareDashNotice = $('.cf-dash-notice');\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\n cloudFlareDismissLink.click( function(e) {\n e.preventDefault();\n Fetcher.notice.dismissCloudflareDash();\n cloudFlareDashNotice.slideUp();\n cloudFlareDashNotice.parent().addClass('no-background-image');\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 performance test 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.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","( 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","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 = $('#set-expiry-all');\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","jQuery(document).ready( function() {\n WPHB_Admin.init();\n});\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-app.js"],"sourceRoot":""}
|
admin/class-admin-ajax.php
CHANGED
@@ -17,8 +17,6 @@ class WP_Hummingbird_Admin_AJAX {
|
|
17 |
add_action( 'wp_ajax_wphb_caching_set_expiration', array( $this, 'caching_set_expiration' ) );
|
18 |
// Set server type.
|
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.
|
@@ -43,6 +41,8 @@ class WP_Hummingbird_Admin_AJAX {
|
|
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 |
/**
|
@@ -187,37 +187,6 @@ class WP_Hummingbird_Admin_AJAX {
|
|
187 |
wp_send_json_success();
|
188 |
}
|
189 |
|
190 |
-
/**
|
191 |
-
* Reload snippet after new expiration interval has been selected.
|
192 |
-
*/
|
193 |
-
public function caching_reload_snippet() {
|
194 |
-
check_ajax_referer( 'wphb-fetch', 'nonce' );
|
195 |
-
|
196 |
-
if ( ! current_user_can( wphb_get_admin_capability() ) ) {
|
197 |
-
return;
|
198 |
-
}
|
199 |
-
|
200 |
-
if ( ! isset( $_POST['type'] ) ) { // Input var okay.
|
201 |
-
die();
|
202 |
-
}
|
203 |
-
|
204 |
-
$type = sanitize_text_field( wp_unslash( $_POST['type'] ) ); // Input var okay.
|
205 |
-
|
206 |
-
$code = wphb_get_code_snippet( 'caching', $type );
|
207 |
-
|
208 |
-
$updated_file = false;
|
209 |
-
if ( true === wphb_is_htaccess_written( 'caching' ) && 'apache' === $type ) {
|
210 |
-
$updated_file = wphb_unsave_htaccess( 'caching' );
|
211 |
-
$updated_file = wphb_save_htaccess( 'caching' );
|
212 |
-
}
|
213 |
-
|
214 |
-
wp_send_json_success( array(
|
215 |
-
'type' => $type,
|
216 |
-
'code' => $code,
|
217 |
-
'updatedFile' => $updated_file,
|
218 |
-
));
|
219 |
-
}
|
220 |
-
|
221 |
/**
|
222 |
* Toggle settings for network minification in multisite installs.
|
223 |
*/
|
@@ -567,4 +536,20 @@ class WP_Hummingbird_Admin_AJAX {
|
|
567 |
wp_send_json_success();
|
568 |
}
|
569 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
570 |
}
|
17 |
add_action( 'wp_ajax_wphb_caching_set_expiration', array( $this, 'caching_set_expiration' ) );
|
18 |
// Set server type.
|
19 |
add_action( 'wp_ajax_wphb_caching_set_server_type', array( $this, 'caching_set_server_type' ) );
|
|
|
|
|
20 |
// Cloudflare connect.
|
21 |
add_action( 'wp_ajax_wphb_cloudflare_connect', array( $this, 'cloudflare_connect' ) );
|
22 |
// Cloudflare expirtion cache.
|
41 |
add_action( 'wp_ajax_wphb_minification_finish_scan', array( $this, 'minification_finish_scan' ) );
|
42 |
// Dismiss notice.
|
43 |
add_action( 'wp_ajax_wphb_notice_dismiss', array( $this, 'notice_dismiss' ) );
|
44 |
+
// Dismiss notice.
|
45 |
+
add_action( 'wp_ajax_wphb_cf_notice_dismiss', array( $this, 'cf_notice_dismiss' ) );
|
46 |
}
|
47 |
|
48 |
/**
|
187 |
wp_send_json_success();
|
188 |
}
|
189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
/**
|
191 |
* Toggle settings for network minification in multisite installs.
|
192 |
*/
|
536 |
wp_send_json_success();
|
537 |
}
|
538 |
|
539 |
+
/**
|
540 |
+
* Dismiss CloudFlare dash notice.
|
541 |
+
*
|
542 |
+
* @since 1.7.0
|
543 |
+
*/
|
544 |
+
public function cf_notice_dismiss() {
|
545 |
+
check_ajax_referer( 'wphb-fetch', 'nonce' );
|
546 |
+
|
547 |
+
if ( ! current_user_can( wphb_get_admin_capability() ) ) {
|
548 |
+
return;
|
549 |
+
}
|
550 |
+
|
551 |
+
update_site_option( 'wphb-cloudflare-dash-notice', 'dismissed' );
|
552 |
+
|
553 |
+
wp_send_json_success();
|
554 |
+
}
|
555 |
}
|
admin/class-admin-notices.php
CHANGED
@@ -10,16 +10,66 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
10 |
class WP_Hummingbird_Admin_Notices {
|
11 |
|
12 |
/**
|
13 |
-
*
|
|
|
14 |
*
|
15 |
-
* @
|
|
|
16 |
*/
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
$dismiss = isset( $_GET['wphb-dismiss'] ) ? sanitize_text_field( $_GET['wphb-dismiss'] ) : false;
|
19 |
if ( $dismiss ) {
|
20 |
$this->dismiss( $dismiss );
|
21 |
}
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
if ( is_multisite() ) {
|
24 |
add_action( 'network_admin_notices', array( $this, 'upgrade_to_pro' ) );
|
25 |
add_action( 'network_admin_notices', array( $this, 'free_version_deactivated' ) );
|
@@ -28,9 +78,186 @@ class WP_Hummingbird_Admin_Notices {
|
|
28 |
add_action( 'admin_notices', array( $this, 'upgrade_to_pro' ) );
|
29 |
add_action( 'admin_notices', array( $this, 'free_version_deactivated' ) );
|
30 |
add_action( 'admin_notices', array( $this, 'free_version_rate' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
}
|
33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
/**
|
35 |
* Show Upgrade to Pro notice
|
36 |
*
|
@@ -50,24 +277,11 @@ class WP_Hummingbird_Admin_Notices {
|
|
50 |
return;
|
51 |
}
|
52 |
|
53 |
-
$url = WPMUDEV_Dashboard::$ui->page_urls->plugins_url;
|
54 |
-
$cap = is_multisite() ? 'manage_network_plugins' : 'update_plugins';
|
55 |
-
if ( ! current_user_can( $cap ) ) {
|
56 |
-
return;
|
57 |
-
}
|
58 |
-
|
59 |
-
$dismiss_url = wp_nonce_url( add_query_arg( 'wphb-dismiss', 'upgrade-to-pro' ), 'wphb-dismiss-notice' );
|
60 |
-
|
61 |
if ( ! get_site_option( 'wphb-pro' ) && wphb_is_member() ) {
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
<?php printf( __( 'Awww yeah! You’ve got access to Hummingbird Pro! Let’s upgrade your free version so you can start using premium features. <a href="%s">Upgrade</a>', 'wphb' ), esc_url( $url ) ); ?>
|
67 |
-
<a class="wphb-dismiss" href="<?php echo esc_url( $dismiss_url ); ?>"><span class="dashicons dashicons-dismiss"></span></a>
|
68 |
-
</p>
|
69 |
-
</div>
|
70 |
-
<?php
|
71 |
}
|
72 |
}
|
73 |
|
@@ -75,7 +289,7 @@ class WP_Hummingbird_Admin_Notices {
|
|
75 |
* Notice displayed when the free version is deactivated because the pro one was already active
|
76 |
*/
|
77 |
public function free_version_deactivated() {
|
78 |
-
if ( ! array_key_exists( '
|
79 |
return;
|
80 |
}
|
81 |
|
@@ -83,27 +297,10 @@ class WP_Hummingbird_Admin_Notices {
|
|
83 |
return;
|
84 |
}
|
85 |
|
86 |
-
$
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
$dismiss_url = wp_nonce_url( add_query_arg( 'wphb-dismiss', 'free-deactivated' ), 'wphb-dismiss-notice' );
|
92 |
-
|
93 |
-
?>
|
94 |
-
<div class="notice-info notice wphb-notice">
|
95 |
-
<p>
|
96 |
-
<?php esc_html_e( 'We noticed you’re running both the free and pro versions of Hummingbird. No biggie! We’ve deactivated the free version for you. Enjoy the pro features!', 'wphb' ); ?>
|
97 |
-
<a class="wphb-dismiss" href="<?php echo esc_url( $dismiss_url ); ?>"><span class="dashicons dashicons-dismiss"></span></a>
|
98 |
-
</p>
|
99 |
-
</div>
|
100 |
-
<style>
|
101 |
-
.wphb-notice .wphb-dismiss {
|
102 |
-
text-decoration: none;
|
103 |
-
float:right;
|
104 |
-
}
|
105 |
-
</style>
|
106 |
-
<?php
|
107 |
}
|
108 |
|
109 |
/**
|
@@ -112,7 +309,7 @@ class WP_Hummingbird_Admin_Notices {
|
|
112 |
* @since 1.5.4
|
113 |
*/
|
114 |
public function free_version_rate() {
|
115 |
-
if (
|
116 |
return;
|
117 |
}
|
118 |
|
@@ -127,75 +324,83 @@ class WP_Hummingbird_Admin_Notices {
|
|
127 |
return;
|
128 |
}
|
129 |
|
130 |
-
$
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
$dismiss_url = wp_nonce_url( add_query_arg( 'wphb-dismiss', 'free-rated' ), 'wphb-dismiss-notice' );
|
136 |
-
$review_url = 'https://wordpress.org/support/plugin/hummingbird-performance/reviews/';
|
137 |
-
|
138 |
-
?>
|
139 |
-
<div class="notice-info notice wphb-notice">
|
140 |
-
<p>
|
141 |
-
<?php esc_html_e( "We've spent countless hours developing this free plugin for you, and we would really appreciate it if you dropped us a quick rating!", 'wphb' ); ?>
|
142 |
-
<a class="wphb-dismiss" href="<?php echo esc_url( $dismiss_url ); ?>"><span class="dashicons dashicons-dismiss"></span></a>
|
143 |
-
</p>
|
144 |
-
<p>
|
145 |
-
<a href="<?php echo esc_url( $review_url ); ?>" class="button" target="_blank"><?php esc_html_e( 'Rate Hummingbird', 'wphb' ); ?></a>
|
146 |
-
</p>
|
147 |
-
</div>
|
148 |
-
<style>
|
149 |
-
.wphb-notice .wphb-dismiss {
|
150 |
-
text-decoration: none;
|
151 |
-
float:right;
|
152 |
-
}
|
153 |
-
</style>
|
154 |
-
<?php
|
155 |
}
|
156 |
|
157 |
/**
|
158 |
-
*
|
159 |
-
*
|
160 |
-
* @param string $notice Notice.
|
161 |
-
* @param string $mode Default: user.
|
162 |
*
|
163 |
-
* @
|
164 |
*/
|
165 |
-
public function
|
166 |
-
if ( '
|
167 |
-
return
|
168 |
-
} else {
|
169 |
-
return 'yes' !== get_site_option( 'wphb-notice-' . $notice . '-show' );
|
170 |
}
|
171 |
-
}
|
172 |
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
|
|
180 |
|
181 |
-
|
182 |
-
|
183 |
-
|
|
|
184 |
|
185 |
-
$
|
186 |
-
|
187 |
-
|
188 |
-
|
|
|
|
|
|
|
|
|
|
|
189 |
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
}
|
195 |
|
196 |
-
$
|
197 |
-
|
198 |
-
|
|
|
|
|
199 |
}
|
200 |
|
201 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
class WP_Hummingbird_Admin_Notices {
|
11 |
|
12 |
/**
|
13 |
+
* In order to avoid duplicated notices,
|
14 |
+
* we save notices IDs here
|
15 |
*
|
16 |
+
* @var array $displayed_notices
|
17 |
+
* @access protected
|
18 |
*/
|
19 |
+
protected static $displayed_notices = array();
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Instance of class.
|
23 |
+
*
|
24 |
+
* @since 1.7.0
|
25 |
+
* @access private
|
26 |
+
* @var $instance
|
27 |
+
*/
|
28 |
+
private static $instance = null;
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Store list of installed plugins.
|
32 |
+
*
|
33 |
+
* @since 1.7.0
|
34 |
+
* @access private
|
35 |
+
* @var array $plugins List of installed plugins.
|
36 |
+
*/
|
37 |
+
private $plugins = array();
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Return the plugin instance.
|
41 |
+
*
|
42 |
+
* @since 1.7.0
|
43 |
+
* @return WP_Hummingbird_Admin_Notices
|
44 |
+
*/
|
45 |
+
public static function get_instance() {
|
46 |
+
if ( ! self::$instance ) {
|
47 |
+
self::$instance = new self();
|
48 |
+
}
|
49 |
+
|
50 |
+
return self::$instance;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* WP_Hummingbird_Admin_Notices constructor.
|
55 |
+
*/
|
56 |
+
public function __construct() {
|
57 |
$dismiss = isset( $_GET['wphb-dismiss'] ) ? sanitize_text_field( $_GET['wphb-dismiss'] ) : false;
|
58 |
if ( $dismiss ) {
|
59 |
$this->dismiss( $dismiss );
|
60 |
}
|
61 |
|
62 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
63 |
+
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
64 |
+
}
|
65 |
+
$this->plugins = get_plugins();
|
66 |
+
|
67 |
+
// Only show notices to users who can do something about it (update, for example).
|
68 |
+
$cap = is_multisite() ? 'manage_network_plugins' : 'update_plugins';
|
69 |
+
if ( ! current_user_can( $cap ) ) {
|
70 |
+
return;
|
71 |
+
}
|
72 |
+
|
73 |
if ( is_multisite() ) {
|
74 |
add_action( 'network_admin_notices', array( $this, 'upgrade_to_pro' ) );
|
75 |
add_action( 'network_admin_notices', array( $this, 'free_version_deactivated' ) );
|
78 |
add_action( 'admin_notices', array( $this, 'upgrade_to_pro' ) );
|
79 |
add_action( 'admin_notices', array( $this, 'free_version_deactivated' ) );
|
80 |
add_action( 'admin_notices', array( $this, 'free_version_rate' ) );
|
81 |
+
add_action( 'admin_notices', array( $this, 'clear_cache' ) );
|
82 |
+
}
|
83 |
+
|
84 |
+
add_action( 'activated_plugin', array( $this, 'plugin_changed' ) );
|
85 |
+
add_action( 'deactivated_plugin', array( $this, 'plugin_changed' ) );
|
86 |
+
add_action( 'after_switch_theme', array( $this, 'plugin_changed' ) );
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Display notice HTML code.
|
91 |
+
*
|
92 |
+
* @since 1.7.0
|
93 |
+
* @access private
|
94 |
+
* @param string $id Accepted: upgrade-to-pro, free-deactivated, free-rated.
|
95 |
+
* @param string $message Notice message.
|
96 |
+
* @param bool $additional Additional content that goes after the message text.
|
97 |
+
* @param bool $only_hb_pages Show message only on Hummingbird pages.
|
98 |
+
*/
|
99 |
+
private function show_notice( $id = '', $message = '', $additional = false, $only_hb_pages = false ) {
|
100 |
+
|
101 |
+
// Only run on HB pages.
|
102 |
+
$hb_pages = array(
|
103 |
+
'toplevel_page_wphb',
|
104 |
+
'hummingbird_page_wphb-performance',
|
105 |
+
'hummingbird_page_wphb-minification',
|
106 |
+
'hummingbird_page_wphb-caching',
|
107 |
+
'hummingbird_page_wphb-gzip',
|
108 |
+
'hummingbird_page_wphb-uptime',
|
109 |
+
'toplevel_page_wphb-network',
|
110 |
+
'hummingbird_page_wphb-performance-network',
|
111 |
+
'hummingbird_page_wphb-minification-network',
|
112 |
+
'hummingbird_page_wphb-caching-network',
|
113 |
+
'hummingbird_page_wphb-gzip-network',
|
114 |
+
'hummingbird_page_wphb-uptime-network',
|
115 |
+
);
|
116 |
+
|
117 |
+
if ( $only_hb_pages && ! in_array( get_current_screen()->id, $hb_pages, true ) ) {
|
118 |
+
return;
|
119 |
+
}
|
120 |
+
|
121 |
+
$dismiss_url = wp_nonce_url( add_query_arg( 'wphb-dismiss', $id ), 'wphb-dismiss-notice' );
|
122 |
+
?>
|
123 |
+
<div class="notice-info notice wphb-notice">
|
124 |
+
<p>
|
125 |
+
<?php echo $message; ?>
|
126 |
+
<a class="wphb-dismiss" href="<?php echo esc_url( $dismiss_url ); ?>">
|
127 |
+
<span class="dashicons dashicons-dismiss"></span>
|
128 |
+
<span class="screen-reader-text">
|
129 |
+
<?php esc_html_e( 'Dismiss this notice.', 'wphb' ); ?>
|
130 |
+
</span>
|
131 |
+
</a>
|
132 |
+
</p>
|
133 |
+
<?php if ( $additional ) : ?>
|
134 |
+
<p>
|
135 |
+
<?php echo $additional; ?>
|
136 |
+
</p>
|
137 |
+
<?php endif; ?>
|
138 |
+
</div>
|
139 |
+
<style>
|
140 |
+
.wphb-notice .wphb-dismiss {
|
141 |
+
text-decoration: none;
|
142 |
+
float:right;
|
143 |
+
color: #333333;
|
144 |
+
}
|
145 |
+
</style>
|
146 |
+
<?php
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Show info notice (HB style, not WP).
|
151 |
+
*
|
152 |
+
* @ince 1.7.0
|
153 |
+
* @access private
|
154 |
+
* @param string $id Unique identifier for the notice.
|
155 |
+
* @param string $message The notice text.
|
156 |
+
* @param string $class Class for the notice wrapper.
|
157 |
+
* @param bool $auto_hide Auto hide notice.
|
158 |
+
* @param bool $dismissable If is dissmisable or not
|
159 |
+
* @used-by WP_Hummingbird_Admin_Notices::show()
|
160 |
+
*/
|
161 |
+
private function show_info_notice( $id, $message, $class, $dismissable, $auto_hide ) {
|
162 |
+
?>
|
163 |
+
<div class="wphb-notice wphb-notice-<?php echo $class; ?> can-close" <?php if ( $dismissable ) : ?>
|
164 |
+
id="wphb-dismissable"
|
165 |
+
data-id="<?php echo esc_attr( $id ); ?>"<?php endif; ?>>
|
166 |
+
<p><?php echo $message; ?></p>
|
167 |
+
<div class="close"></div>
|
168 |
+
</div>
|
169 |
+
|
170 |
+
<?php if ( $auto_hide ) : ?>
|
171 |
+
<script type="text/javascript">
|
172 |
+
jQuery('.wphb-notice:not(.notice)').delay(3000).slideUp('slow');
|
173 |
+
</script>
|
174 |
+
<?php endif;
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Check if a notice has been dismissed by the current user.
|
179 |
+
*
|
180 |
+
* @since 1.7.0 changed to private
|
181 |
+
* @access private
|
182 |
+
* @param string $notice Notice.
|
183 |
+
* @param string $mode Default: user.
|
184 |
+
* @return mixed
|
185 |
+
*/
|
186 |
+
private function is_dismissed( $notice, $mode = 'user' ) {
|
187 |
+
if ( 'user' === $mode ) {
|
188 |
+
return get_user_meta( get_current_user_id(), 'wphb-' . $notice . '-dismissed' );
|
189 |
+
} else {
|
190 |
+
return 'yes' !== get_site_option( 'wphb-notice-' . $notice . '-show' );
|
191 |
+
}
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Dismiss a notice.
|
196 |
+
*
|
197 |
+
* @since 1.7.0 changed to private
|
198 |
+
* @access private
|
199 |
+
* @param string $notice Notice.
|
200 |
+
*/
|
201 |
+
private function dismiss( $notice ) {
|
202 |
+
check_admin_referer( 'wphb-dismiss-notice' );
|
203 |
+
|
204 |
+
$user_notices = array(
|
205 |
+
'upgrade-to-pro',
|
206 |
+
);
|
207 |
+
|
208 |
+
$options_notices = array(
|
209 |
+
'free-deactivated',
|
210 |
+
'free-rated',
|
211 |
+
'cache-cleaned',
|
212 |
+
);
|
213 |
+
|
214 |
+
if ( in_array( $notice, $user_notices, true ) ) {
|
215 |
+
update_user_meta( get_current_user_id(), 'wphb-' . $notice . '-dismissed', true );
|
216 |
+
} elseif ( in_array( $notice, $options_notices, true ) ) {
|
217 |
+
delete_site_option( 'wphb-notice-' . $notice . '-show' );
|
218 |
+
}
|
219 |
+
|
220 |
+
$redirect = remove_query_arg( array( 'wphb-dismiss', '_wpnonce' ) );
|
221 |
+
wp_safe_redirect( $redirect );
|
222 |
+
exit;
|
223 |
+
}
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Show an admin notice
|
227 |
+
*
|
228 |
+
* @param string $id Unique identifier for the notice.
|
229 |
+
* @param string $message The notice text.
|
230 |
+
* @param string $class Class for the notice wrapper.
|
231 |
+
* @param bool $auto_hide Auto hide notice.
|
232 |
+
* @param bool $dismissable If is dissmisable or not.
|
233 |
+
*/
|
234 |
+
public function show( $id, $message, $class = 'error', $auto_hide = false, $dismissable = false ) {
|
235 |
+
// Is already dismissed ?
|
236 |
+
if ( $dismissable && 'true' === get_option( 'wphb-notice-' . $id . '-dismissed' ) ) {
|
237 |
+
return;
|
238 |
}
|
239 |
+
|
240 |
+
if ( ! current_user_can( wphb_get_admin_capability() ) ) {
|
241 |
+
return;
|
242 |
+
}
|
243 |
+
|
244 |
+
if ( in_array( $id, self::$displayed_notices ) ) {
|
245 |
+
return;
|
246 |
+
}
|
247 |
+
|
248 |
+
$this->show_info_notice( $id, $message, $class, $dismissable, $auto_hide );
|
249 |
+
|
250 |
+
self::$displayed_notices[] = $id;
|
251 |
}
|
252 |
|
253 |
+
/**
|
254 |
+
* Available notices.
|
255 |
+
*
|
256 |
+
* @see WP_Hummingbird_Admin_Notices::upgrade_to_pro()
|
257 |
+
* @see WP_Hummingbird_Admin_Notices::free_version_deactivated()
|
258 |
+
* @see WP_Hummingbird_Admin_Notices::free_version_rate()
|
259 |
+
*/
|
260 |
+
|
261 |
/**
|
262 |
* Show Upgrade to Pro notice
|
263 |
*
|
277 |
return;
|
278 |
}
|
279 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
if ( ! get_site_option( 'wphb-pro' ) && wphb_is_member() ) {
|
281 |
+
$url = WPMUDEV_Dashboard::$ui->page_urls->plugins_url;
|
282 |
+
/* translators: %s: Upgrade URL */
|
283 |
+
$message = sprintf( __( 'Awww yeah! You’ve got access to Hummingbird Pro! Let’s upgrade your free version so you can start using premium features. <a href="%s">Upgrade</a>', 'wphb' ), esc_url( $url ) );
|
284 |
+
$this->show_notice( 'upgrade-to-pro', $message, false, true );
|
|
|
|
|
|
|
|
|
|
|
285 |
}
|
286 |
}
|
287 |
|
289 |
* Notice displayed when the free version is deactivated because the pro one was already active
|
290 |
*/
|
291 |
public function free_version_deactivated() {
|
292 |
+
if ( ! array_key_exists( 'hummingbird-performance/wp-hummingbird.php', $this->plugins ) ) {
|
293 |
return;
|
294 |
}
|
295 |
|
297 |
return;
|
298 |
}
|
299 |
|
300 |
+
$this->show_notice(
|
301 |
+
'free-deactivated',
|
302 |
+
__( 'We noticed you’re running both the free and pro versions of Hummingbird. No biggie! We’ve deactivated the free version for you. Enjoy the pro features!', 'wphb' )
|
303 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
304 |
}
|
305 |
|
306 |
/**
|
309 |
* @since 1.5.4
|
310 |
*/
|
311 |
public function free_version_rate() {
|
312 |
+
if ( get_site_option( 'wphb-pro' ) && wphb_is_member() ) {
|
313 |
return;
|
314 |
}
|
315 |
|
324 |
return;
|
325 |
}
|
326 |
|
327 |
+
$this->show_notice(
|
328 |
+
'free-rated',
|
329 |
+
__( "We've spent countless hours developing Hummingbird and making it free for you to use. We would really appreciate it if you dropped us a quick rating!", 'wphb' ),
|
330 |
+
'<a href="https://wordpress.org/support/plugin/hummingbird-performance/reviews/" class="button" target="_blank">' . __( 'Rate Hummingbird', 'wphb' ) . '</a>'
|
331 |
+
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
}
|
333 |
|
334 |
/**
|
335 |
+
* Show clear cache notice.
|
|
|
|
|
|
|
336 |
*
|
337 |
+
* @since 1.7.0
|
338 |
*/
|
339 |
+
public function clear_cache() {
|
340 |
+
if ( wphb_cache_is_multisite() || $this->is_dismissed( 'cache-cleaned', 'option' ) ) {
|
341 |
+
return;
|
|
|
|
|
342 |
}
|
|
|
343 |
|
344 |
+
// Only show if minification or page cache is enabled.
|
345 |
+
$minify_active = false;
|
346 |
+
if ( wphb_can_execute_php() ) {
|
347 |
+
$minify = wphb_get_module( 'minify' );
|
348 |
+
$minify_active = $minify->is_active();
|
349 |
+
}
|
350 |
+
$caching = wphb_get_module( 'page-caching' );
|
351 |
+
$caching_active = $caching->is_active();
|
352 |
|
353 |
+
// If both modules disabled - don't show notice
|
354 |
+
if ( ! $minify_active && ! $caching_active ) {
|
355 |
+
return;
|
356 |
+
}
|
357 |
|
358 |
+
if ( $minify_active ) {
|
359 |
+
// Clear cache button link
|
360 |
+
$clear_cache_url = add_query_arg(
|
361 |
+
array(
|
362 |
+
'clear-cache' => 'true',
|
363 |
+
'clear-pc' => $caching_active,
|
364 |
+
),
|
365 |
+
wphb_get_admin_menu_url( 'minification' )
|
366 |
+
);
|
367 |
|
368 |
+
$text = __( "We've noticed you've made changes to your website and have Hummingbird's Minification feature active. You might want to clear cache to avoid any issues.", 'wphb' );
|
369 |
+
|
370 |
+
if ( $caching_active ) {
|
371 |
+
$text = __( "We've noticed you've made changes to your website and have Hummingbird's Minification and Page Caching features active. You might want to clear cache to avoid any issues.", 'wphb' );
|
372 |
+
}
|
373 |
+
|
374 |
+
} elseif ( $caching_active ) {
|
375 |
+
// Clear cache button link
|
376 |
+
$clear_cache_url = add_query_arg(
|
377 |
+
array(
|
378 |
+
'type' => 'pc-purge',
|
379 |
+
'run' => 'true',
|
380 |
+
),
|
381 |
+
wphb_get_admin_menu_url( 'caching' ) . '&view=main'
|
382 |
+
);
|
383 |
+
$clear_cache_url = wp_nonce_url( $clear_cache_url, 'wphb-run-caching' );
|
384 |
+
|
385 |
+
$text = __( "We've noticed you've made changes to your website and have Hummingbird's Page Caching feature active. You might want to clear cache to avoid any issues.", 'wphb' );
|
386 |
}
|
387 |
|
388 |
+
$this->show_notice(
|
389 |
+
'cache-cleaned',
|
390 |
+
$text,
|
391 |
+
'<a href="' . esc_url( $clear_cache_url ) . '" class="button">' . __( 'Clear Cache', 'wphb' ) . '</a>'
|
392 |
+
);
|
393 |
}
|
394 |
|
395 |
+
/**
|
396 |
+
* Clear the notice blocker on plugin activate/deactivate.
|
397 |
+
*
|
398 |
+
* @since 1.7.0
|
399 |
+
* @used-by activated_plugin action
|
400 |
+
* @used-by deactivated_plugin action
|
401 |
+
*/
|
402 |
+
public function plugin_changed() {
|
403 |
+
update_site_option( 'wphb-notice-cache-cleaned-show', 'yes' );
|
404 |
+
}
|
405 |
+
|
406 |
+
}
|
admin/class-admin.php
CHANGED
@@ -17,18 +17,18 @@ class WP_Hummingbird_Admin {
|
|
17 |
public function __construct() {
|
18 |
$this->includes();
|
19 |
|
20 |
-
$this->admin_notices =
|
21 |
-
$this->admin_notices->init();
|
22 |
|
23 |
add_action( 'admin_menu', array( $this, 'add_menu_pages' ) );
|
24 |
add_action( 'network_admin_menu', array( $this, 'add_network_menu_pages' ) );
|
25 |
|
26 |
-
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
|
27 |
new WP_Hummingbird_Admin_AJAX();
|
|
|
28 |
|
29 |
add_action( 'admin_footer', array( $this, 'maybe_check_files' ) );
|
30 |
add_action( 'admin_footer', array( $this, 'maybe_check_report' ) );
|
31 |
-
add_action( 'admin_footer', array( $this, 'maybe_show_quick_setup') );
|
32 |
|
33 |
add_filter( 'network_admin_plugin_action_links_wp-hummingbird/wp-hummingbird.php', array( $this, 'add_plugin_action_links' ) );
|
34 |
add_filter( 'plugin_action_links_wp-hummingbird/wp-hummingbird.php', array( $this, 'add_plugin_action_links' ) );
|
@@ -49,8 +49,7 @@ class WP_Hummingbird_Admin {
|
|
49 |
if ( current_user_can( wphb_get_admin_capability() ) ) {
|
50 |
if ( is_multisite() && ! is_network_admin() ) {
|
51 |
$url = network_admin_url( 'admin.php?page=wphb' );
|
52 |
-
}
|
53 |
-
else {
|
54 |
$url = wphb_get_admin_menu_url( '' );
|
55 |
}
|
56 |
$actions['dashboard'] = '<a href="' . $url . '" aria-label="' . esc_attr( __( 'Go to Hummingbird Dashboard', 'wphb' ) ) . '">' . esc_html__( 'Settings', 'wphb' ) . '</a>';
|
@@ -135,19 +134,22 @@ class WP_Hummingbird_Admin {
|
|
135 |
}
|
136 |
|
137 |
public function maybe_check_files() {
|
138 |
-
if ( ! is_user_logged_in() )
|
139 |
return;
|
|
|
140 |
|
141 |
$checking_files = wphb_minification_is_scanning_files();
|
142 |
|
143 |
// If we are checking files, continue with it
|
144 |
-
if ( ! $checking_files )
|
145 |
return;
|
|
|
146 |
|
147 |
$enqueued = wp_script_is( 'wphb-admin', 'enqueued' );
|
148 |
|
149 |
-
if ( ! $enqueued )
|
150 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
|
|
151 |
|
152 |
// If we are in minification page, we should redirect when checking files is finished
|
153 |
$screen = get_current_screen();
|
@@ -162,7 +164,7 @@ class WP_Hummingbird_Admin {
|
|
162 |
<script>
|
163 |
jQuery( document ).ready( function() {
|
164 |
var module = window.WPHB_Admin.getModule( 'minification' );
|
165 |
-
|
166 |
module.minificationStarted = true;
|
167 |
});
|
168 |
</script>
|
@@ -170,14 +172,16 @@ class WP_Hummingbird_Admin {
|
|
170 |
}
|
171 |
|
172 |
public function maybe_check_report() {
|
173 |
-
if ( ! is_user_logged_in() )
|
174 |
return;
|
|
|
175 |
|
176 |
$doing_report = wphb_performance_is_doing_report();
|
177 |
|
178 |
// If we are checking files, continue with it.
|
179 |
-
if ( ! $doing_report )
|
180 |
return;
|
|
|
181 |
|
182 |
if ( wphb_performance_stopped_report() ) {
|
183 |
return;
|
@@ -185,8 +189,9 @@ class WP_Hummingbird_Admin {
|
|
185 |
|
186 |
$enqueued = wp_script_is( 'wphb-admin', 'enqueued' );
|
187 |
|
188 |
-
if ( ! $enqueued )
|
189 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
|
|
190 |
|
191 |
// If we are in performance page, we should redirect when checking files is finished.
|
192 |
$screen = get_current_screen();
|
@@ -255,14 +260,6 @@ class WP_Hummingbird_Admin {
|
|
255 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
256 |
}
|
257 |
|
258 |
-
// Enable automatic scans by default.
|
259 |
-
if ( wphb_is_member() ) {
|
260 |
-
$settings = wphb_get_settings();
|
261 |
-
$settings['email-notifications'] = true;
|
262 |
-
// Enable automatic reports for members.
|
263 |
-
wphb_update_settings( $settings );
|
264 |
-
}
|
265 |
-
|
266 |
wphb_quick_setup_modal();
|
267 |
wphb_check_performance_modal();
|
268 |
?>
|
@@ -278,6 +275,3 @@ class WP_Hummingbird_Admin {
|
|
278 |
}
|
279 |
|
280 |
}
|
281 |
-
|
282 |
-
|
283 |
-
|
17 |
public function __construct() {
|
18 |
$this->includes();
|
19 |
|
20 |
+
$this->admin_notices = WP_Hummingbird_Admin_Notices::get_instance();
|
|
|
21 |
|
22 |
add_action( 'admin_menu', array( $this, 'add_menu_pages' ) );
|
23 |
add_action( 'network_admin_menu', array( $this, 'add_network_menu_pages' ) );
|
24 |
|
25 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
26 |
new WP_Hummingbird_Admin_AJAX();
|
27 |
+
}
|
28 |
|
29 |
add_action( 'admin_footer', array( $this, 'maybe_check_files' ) );
|
30 |
add_action( 'admin_footer', array( $this, 'maybe_check_report' ) );
|
31 |
+
add_action( 'admin_footer', array( $this, 'maybe_show_quick_setup' ) );
|
32 |
|
33 |
add_filter( 'network_admin_plugin_action_links_wp-hummingbird/wp-hummingbird.php', array( $this, 'add_plugin_action_links' ) );
|
34 |
add_filter( 'plugin_action_links_wp-hummingbird/wp-hummingbird.php', array( $this, 'add_plugin_action_links' ) );
|
49 |
if ( current_user_can( wphb_get_admin_capability() ) ) {
|
50 |
if ( is_multisite() && ! is_network_admin() ) {
|
51 |
$url = network_admin_url( 'admin.php?page=wphb' );
|
52 |
+
} else {
|
|
|
53 |
$url = wphb_get_admin_menu_url( '' );
|
54 |
}
|
55 |
$actions['dashboard'] = '<a href="' . $url . '" aria-label="' . esc_attr( __( 'Go to Hummingbird Dashboard', 'wphb' ) ) . '">' . esc_html__( 'Settings', 'wphb' ) . '</a>';
|
134 |
}
|
135 |
|
136 |
public function maybe_check_files() {
|
137 |
+
if ( ! is_user_logged_in() ) {
|
138 |
return;
|
139 |
+
}
|
140 |
|
141 |
$checking_files = wphb_minification_is_scanning_files();
|
142 |
|
143 |
// If we are checking files, continue with it
|
144 |
+
if ( ! $checking_files ) {
|
145 |
return;
|
146 |
+
}
|
147 |
|
148 |
$enqueued = wp_script_is( 'wphb-admin', 'enqueued' );
|
149 |
|
150 |
+
if ( ! $enqueued ) {
|
151 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
152 |
+
}
|
153 |
|
154 |
// If we are in minification page, we should redirect when checking files is finished
|
155 |
$screen = get_current_screen();
|
164 |
<script>
|
165 |
jQuery( document ).ready( function() {
|
166 |
var module = window.WPHB_Admin.getModule( 'minification' );
|
167 |
+
module.scanner.scan();
|
168 |
module.minificationStarted = true;
|
169 |
});
|
170 |
</script>
|
172 |
}
|
173 |
|
174 |
public function maybe_check_report() {
|
175 |
+
if ( ! is_user_logged_in() ) {
|
176 |
return;
|
177 |
+
}
|
178 |
|
179 |
$doing_report = wphb_performance_is_doing_report();
|
180 |
|
181 |
// If we are checking files, continue with it.
|
182 |
+
if ( ! $doing_report ) {
|
183 |
return;
|
184 |
+
}
|
185 |
|
186 |
if ( wphb_performance_stopped_report() ) {
|
187 |
return;
|
189 |
|
190 |
$enqueued = wp_script_is( 'wphb-admin', 'enqueued' );
|
191 |
|
192 |
+
if ( ! $enqueued ) {
|
193 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
194 |
+
}
|
195 |
|
196 |
// If we are in performance page, we should redirect when checking files is finished.
|
197 |
$screen = get_current_screen();
|
260 |
wphb_enqueue_admin_scripts( WPHB_VERSION );
|
261 |
}
|
262 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
263 |
wphb_quick_setup_modal();
|
264 |
wphb_check_performance_modal();
|
265 |
?>
|
275 |
}
|
276 |
|
277 |
}
|
|
|
|
|
|
admin/class-caching-page.php
CHANGED
@@ -67,7 +67,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
67 |
parent::__construct( $slug, $page_title, $menu_title, $parent, $render );
|
68 |
|
69 |
$this->tabs = array(
|
70 |
-
|
71 |
'browser' => __( 'Browser Caching', 'wphb' ),
|
72 |
'gravatar' => __( 'Gravatar Caching', 'wphb' ),
|
73 |
);
|
@@ -99,10 +99,6 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
99 |
} else {
|
100 |
// Get latest local report.
|
101 |
$this->report = wphb_get_caching_status();
|
102 |
-
if ( false === $this->report ) {
|
103 |
-
// Force only when we don't have any data yet.
|
104 |
-
$this->report = wphb_get_caching_status( true );
|
105 |
-
}
|
106 |
}
|
107 |
|
108 |
// Get number of issues.
|
@@ -112,19 +108,152 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
112 |
$this->issues = count( $this->report );
|
113 |
}
|
114 |
|
115 |
-
/*
|
116 |
-
Comment out for now.
|
117 |
-
if ( 'main' === $this->get_current_tab() ) {
|
118 |
-
echo '';
|
119 |
-
}
|
120 |
-
*/
|
121 |
-
|
122 |
// We need to actually tweak these tasks.
|
123 |
add_filter( 'wphb_admin_after_tab_' . $this->get_slug(), array( $this, 'after_tab' ) );
|
124 |
}
|
125 |
|
126 |
/**
|
127 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
*
|
129 |
* @param string $type Type of action to run.
|
130 |
* @since 1.4.5
|
@@ -137,6 +266,18 @@ 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();
|
@@ -149,7 +290,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
149 |
case 'gc-deactivate':
|
150 |
wphb_update_setting( 'gravatar_cache', false );
|
151 |
break;
|
152 |
-
// Purge files.
|
153 |
case 'gc-purge':
|
154 |
/* @var WP_Hummingbird_Module_Gravatar $module */
|
155 |
$module = wphb_get_module( 'gravatar' );
|
@@ -162,7 +303,27 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
162 |
}
|
163 |
wp_safe_redirect( $redirect_to );
|
164 |
exit;
|
165 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
|
167 |
wp_safe_redirect( remove_query_arg( array( 'run', '_wpnonce', 'type' ) ) );
|
168 |
exit;
|
@@ -176,20 +337,6 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
176 |
*/
|
177 |
public function render_header() {
|
178 |
?>
|
179 |
-
<?php if ( ! wphb_is_htaccess_written( 'caching' ) ) : ?>
|
180 |
-
<div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-code-snippet-updated">
|
181 |
-
<p><?php esc_html_e( 'Code snippet updated', 'wphb' ); ?></p>
|
182 |
-
</div>
|
183 |
-
<?php endif; ?>
|
184 |
-
|
185 |
-
<div class="wphb-notice wphb-notice-error <?php echo ! isset( $_GET['htaccess-error'] ) ? 'hidden' : ''; ?>" id="wphb-notice-code-snippet-htaccess-error">
|
186 |
-
<p><?php esc_html_e( 'Hummingbird could not update or write your .htaccess file. Please, make .htaccess writable or paste the code yourself.', 'wphb' ); ?></p>
|
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>
|
@@ -197,26 +344,30 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
197 |
<?php
|
198 |
if ( isset( $_GET['caching-updated'] ) && ! isset( $_GET['htaccess-error'] ) ) {
|
199 |
if ( wphb_is_htaccess_written( 'caching' ) ) {
|
200 |
-
$this->
|
201 |
} else {
|
202 |
-
$this->
|
203 |
}
|
204 |
}
|
205 |
|
206 |
if ( isset( $_GET['cache-enabled'] ) ) {
|
207 |
-
$this->
|
208 |
}
|
209 |
|
210 |
if ( isset( $_GET['cache-disabled'] ) ) {
|
211 |
-
$this->
|
212 |
}
|
213 |
|
214 |
if ( isset( $_GET['gravatars-purged'] ) ) {
|
215 |
-
$this->
|
|
|
|
|
|
|
|
|
216 |
}
|
217 |
|
218 |
if ( isset( $_GET['purge-error'] ) ) {
|
219 |
-
$this->
|
220 |
}
|
221 |
|
222 |
parent::render_header();
|
@@ -226,148 +377,38 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
226 |
* Register meta boxes for the page.
|
227 |
*/
|
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 ) {
|
277 |
-
wphb_get_caching_status( true );
|
278 |
-
$redirect_to = remove_query_arg( array(
|
279 |
-
'run',
|
280 |
-
'enable',
|
281 |
-
'disable',
|
282 |
-
'caching-updated',
|
283 |
-
'cache-disabled',
|
284 |
-
'htaccess-error',
|
285 |
-
) );
|
286 |
-
$redirect_to = add_query_arg( 'cache-enabled', true, $redirect_to );
|
287 |
-
wp_safe_redirect( $redirect_to );
|
288 |
-
exit;
|
289 |
-
} else {
|
290 |
-
$redirect_to = remove_query_arg( array(
|
291 |
-
'run',
|
292 |
-
'enable',
|
293 |
-
'disable',
|
294 |
-
'caching-updated',
|
295 |
-
'cache-enabled',
|
296 |
-
'cache-disabled',
|
297 |
-
) );
|
298 |
-
$redirect_to = add_query_arg( 'htaccess-error', true, $redirect_to );
|
299 |
-
wp_safe_redirect( $redirect_to );
|
300 |
-
exit;
|
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 ) {
|
308 |
-
wphb_get_caching_status( true );
|
309 |
-
$redirect_to = remove_query_arg( array(
|
310 |
-
'run',
|
311 |
-
'enable',
|
312 |
-
'disable',
|
313 |
-
'caching-updated',
|
314 |
-
'cache-enabled',
|
315 |
-
'htaccess-error',
|
316 |
-
) );
|
317 |
-
$redirect_to = add_query_arg( 'cache-disabled', true, $redirect_to );
|
318 |
-
wp_safe_redirect( $redirect_to );
|
319 |
-
exit;
|
320 |
-
} else {
|
321 |
-
$redirect_to = remove_query_arg( array(
|
322 |
-
'run',
|
323 |
-
'enable',
|
324 |
-
'disable',
|
325 |
-
'caching-updated',
|
326 |
-
'cache-enabled',
|
327 |
-
'cache-disabled',
|
328 |
-
) );
|
329 |
-
$redirect_to = add_query_arg( 'htaccess-error', true, $redirect_to );
|
330 |
-
wp_safe_redirect( $redirect_to );
|
331 |
-
exit;
|
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 |
-
|
345 |
-
if ( $redirect ) {
|
346 |
-
wp_safe_redirect( remove_query_arg( array(
|
347 |
-
'run',
|
348 |
-
'enable',
|
349 |
-
'disable',
|
350 |
-
'htaccess-error',
|
351 |
-
'cache-disabled',
|
352 |
-
'cache-enabled',
|
353 |
-
) ) );
|
354 |
-
exit;
|
355 |
-
}
|
356 |
-
|
357 |
/**
|
358 |
* PAGE CACHING META BOXES.
|
359 |
*/
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
371 |
|
372 |
/**
|
373 |
* BROWSER CACHING META BOXES.
|
@@ -456,9 +497,14 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
456 |
} else {
|
457 |
echo '<i class="hb-wpmudev-icon-tick"></i>';
|
458 |
}
|
459 |
-
} elseif ( 'gravatar' === $tab ) {
|
460 |
-
|
461 |
-
|
|
|
|
|
|
|
|
|
|
|
462 |
if ( $module->is_active() && ! is_wp_error( $module->error ) ) {
|
463 |
echo '<i class="hb-wpmudev-icon-tick"></i>';
|
464 |
} elseif ( is_wp_error( $module->error ) ) {
|
@@ -477,10 +523,6 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
477 |
$recommended = wphb_get_recommended_caching_values();
|
478 |
|
479 |
$results = wphb_get_caching_status();
|
480 |
-
if ( false === $results ) {
|
481 |
-
// Force only when we don't have any data yet.
|
482 |
-
$results = wphb_get_caching_status( true );
|
483 |
-
}
|
484 |
|
485 |
$result_sum = 0;
|
486 |
|
@@ -504,7 +546,69 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
504 |
* @since 1.5.4
|
505 |
*/
|
506 |
public function page_caching_disabled_metabox() {
|
507 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
508 |
}
|
509 |
|
510 |
/**
|
@@ -526,10 +630,16 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
526 |
$issues = 0;
|
527 |
}
|
528 |
|
|
|
|
|
|
|
|
|
|
|
|
|
529 |
$this->view( 'caching/browser-caching-meta-box-header', array(
|
530 |
'title' => __( 'Browser Caching', 'wphb' ),
|
531 |
'issues' => $issues,
|
532 |
-
'url' =>
|
533 |
));
|
534 |
}
|
535 |
|
@@ -584,7 +694,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
584 |
'type' => 'cf-deactivate',
|
585 |
'run' => 'true',
|
586 |
));
|
587 |
-
$deactivate_url = wp_nonce_url( $deactivate_url, 'wphb-run-caching' )
|
588 |
|
589 |
// Footer links to enable/disable automatic caching.
|
590 |
$enable_link = add_query_arg( array(
|
@@ -605,7 +715,10 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
605 |
if ( wphb_is_htaccess_writable() && $htaccess_written ) {
|
606 |
$result = wphb_unsave_htaccess( 'caching' );
|
607 |
if ( $result ) {
|
608 |
-
|
|
|
|
|
|
|
609 |
}
|
610 |
}
|
611 |
$expiry_selects = true;
|
@@ -651,7 +764,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
651 |
'type' => 'gc-activate',
|
652 |
'run' => 'true',
|
653 |
));
|
654 |
-
$activate_url = wp_nonce_url( $activate_url, 'wphb-run-caching' )
|
655 |
|
656 |
$this->view( 'caching/disabled-gravatar-meta-box', array(
|
657 |
'activate_url' => $activate_url,
|
@@ -689,7 +802,7 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
689 |
'type' => 'gc-deactivate',
|
690 |
'run' => 'true',
|
691 |
));
|
692 |
-
$deactivate_url = wp_nonce_url( $deactivate_url, 'wphb-run-caching' )
|
693 |
|
694 |
$this->view( 'caching/gravatar-meta-box', array(
|
695 |
'module_active' => $module->is_active(),
|
@@ -713,18 +826,26 @@ class WP_Hummingbird_Caching_Page extends WP_Hummingbird_Admin_Page {
|
|
713 |
$type = sanitize_text_field( wp_unslash( $type ) ); // Input var okay.
|
714 |
$value = sanitize_text_field( wp_unslash( $value ) ); // Input var okay.
|
715 |
|
716 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
}
|
67 |
parent::__construct( $slug, $page_title, $menu_title, $parent, $render );
|
68 |
|
69 |
$this->tabs = array(
|
70 |
+
'main' => __( 'Page Caching', 'wphb' ),
|
71 |
'browser' => __( 'Browser Caching', 'wphb' ),
|
72 |
'gravatar' => __( 'Gravatar Caching', 'wphb' ),
|
73 |
);
|
99 |
} else {
|
100 |
// Get latest local report.
|
101 |
$this->report = wphb_get_caching_status();
|
|
|
|
|
|
|
|
|
102 |
}
|
103 |
|
104 |
// Get number of issues.
|
108 |
$this->issues = count( $this->report );
|
109 |
}
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
// We need to actually tweak these tasks.
|
112 |
add_filter( 'wphb_admin_after_tab_' . $this->get_slug(), array( $this, 'after_tab' ) );
|
113 |
}
|
114 |
|
115 |
/**
|
116 |
+
* Function triggered when the page is loaded before render any content.
|
117 |
+
*
|
118 |
+
* @since 1.7.0
|
119 |
+
*/
|
120 |
+
public function on_load() {
|
121 |
+
if ( ! current_user_can( wphb_get_admin_capability() ) ) {
|
122 |
+
return;
|
123 |
+
}
|
124 |
+
|
125 |
+
$redirect_to = remove_query_arg( array(
|
126 |
+
'run',
|
127 |
+
'enable',
|
128 |
+
'disable',
|
129 |
+
'caching-updated',
|
130 |
+
'cache-disabled',
|
131 |
+
'cache-enabled',
|
132 |
+
'htaccess-error',
|
133 |
+
) );
|
134 |
+
|
135 |
+
// Parse submitted form from page caching or expiry settings pages.
|
136 |
+
if ( isset( $_POST['submit'] ) ) { // Input var ok.
|
137 |
+
check_admin_referer( 'wphb-caching' );
|
138 |
+
|
139 |
+
if ( isset( $_POST['pc-settings'] ) && 1 === absint( $_POST['pc-settings'] ) ) {
|
140 |
+
$form = 'page-caching';
|
141 |
+
} elseif ( isset( $_POST['expiry-settings'] ) && 1 === absint( $_POST['expiry-settings'] ) ) {
|
142 |
+
$form = 'expiry-settings';
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
// Process form submit from page caching settings.
|
147 |
+
if ( isset( $form ) && 'page-caching' === $form ) {
|
148 |
+
$page_types = array();
|
149 |
+
if ( isset( $_POST['page_types'] ) && is_array( $_POST['page_types'] ) ) {
|
150 |
+
$page_types = array_keys( $_POST['page_types'] );
|
151 |
+
}
|
152 |
+
|
153 |
+
$cache_settings = array();
|
154 |
+
//if ( isset( $_POST['settings'] ) && is_array( $_POST['settings'] ) ) {
|
155 |
+
$form_data = $_POST['settings'];
|
156 |
+
$cache_settings['logged_in'] = isset( $form_data['logged-in'] ) ? absint( $form_data['logged-in'] ) : 0;
|
157 |
+
$cache_settings['url_queries'] = isset( $form_data['url-queries'] ) ? absint( $form_data['url-queries'] ) : 0;
|
158 |
+
$cache_settings['clear_update'] = isset( $form_data['clear-update'] ) ? absint( $form_data['clear-update'] ) : 0;
|
159 |
+
$cache_settings['debug_log'] = isset( $form_data['debug-log'] ) ? absint( $form_data['debug-log'] ) : 0;
|
160 |
+
//}
|
161 |
+
|
162 |
+
$url_strings = '';
|
163 |
+
if ( isset( $_POST['url_strings'] ) ) {
|
164 |
+
$url_strings = sanitize_textarea_field( wp_unslash( $_POST['url_strings'] ) ); // Input var okay.
|
165 |
+
$url_strings = preg_split( '/[\r\n\t ]+/', $url_strings );
|
166 |
+
}
|
167 |
+
|
168 |
+
$user_agents = '';
|
169 |
+
if ( isset( $_POST['user_agents'] ) ) {
|
170 |
+
$user_agents = sanitize_textarea_field( wp_unslash( $_POST['user_agents'] ) ); // Input var okay.
|
171 |
+
$user_agents = preg_split( '/[\r\n\t ]+/', $user_agents );
|
172 |
+
}
|
173 |
+
|
174 |
+
$settings['page_types'] = $page_types;
|
175 |
+
$settings['settings'] = $cache_settings;
|
176 |
+
$settings['exclude']['url_strings'] = $url_strings;
|
177 |
+
$settings['exclude']['user_agents'] = $user_agents;
|
178 |
+
|
179 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
180 |
+
$module = wphb_get_module( 'page-caching' );
|
181 |
+
$module->save_settings( $settings );
|
182 |
+
} // End if().
|
183 |
+
|
184 |
+
// Process form submit from expiry settings.
|
185 |
+
if ( isset( $form ) && 'expiry-settings' === $form ) {
|
186 |
+
if ( isset( $_POST['expiry-set-type'] ) && 'all' === sanitize_text_field( wp_unslash( $_POST['expiry-set-type'] ) ) ) { // Input var ok.
|
187 |
+
$this->caching_set_expiration( 'all', $_POST['set-expiry-all'] );
|
188 |
+
} else {
|
189 |
+
$this->caching_set_expiration( 'javascript', $_POST['set-expiry-javascript'] );
|
190 |
+
$this->caching_set_expiration( 'css', $_POST['set-expiry-css'] );
|
191 |
+
$this->caching_set_expiration( 'media', $_POST['set-expiry-media'] );
|
192 |
+
$this->caching_set_expiration( 'images', $_POST['set-expiry-images'] );
|
193 |
+
}
|
194 |
+
|
195 |
+
$response = $this->caching_reload_snippet();
|
196 |
+
wphb_clear_caching_cache();
|
197 |
+
wphb_get_caching_status();
|
198 |
+
|
199 |
+
if ( 'apache' === $response['type'] && $response['updatedFile'] ) {
|
200 |
+
$redirect_to = add_query_arg( array(
|
201 |
+
'run' => true,
|
202 |
+
'caching-updated' => true,
|
203 |
+
), $redirect_to );
|
204 |
+
} elseif ( 'apache' === $response['type'] && ! $response['updatedFile'] ) {
|
205 |
+
$redirect_to = add_query_arg( 'htaccess-error', true, $redirect_to );
|
206 |
+
} else {
|
207 |
+
$redirect_to = add_query_arg( array(
|
208 |
+
'run' => true,
|
209 |
+
'caching-updated' => true,
|
210 |
+
), $redirect_to );
|
211 |
+
}
|
212 |
+
} // End if().
|
213 |
+
|
214 |
+
// Enable browser caching.
|
215 |
+
if ( isset( $_GET['enable'] ) ) { // Input var ok.
|
216 |
+
// Enable caching in .htaccess (only for apache servers).
|
217 |
+
$result = wphb_save_htaccess( 'caching' );
|
218 |
+
if ( $result ) {
|
219 |
+
// Clear saved status.
|
220 |
+
wphb_clear_caching_cache();
|
221 |
+
// Update cache status.
|
222 |
+
wphb_get_caching_status();
|
223 |
+
$redirect_to = add_query_arg( 'cache-enabled', true, $redirect_to );
|
224 |
+
} else {
|
225 |
+
$redirect_to = add_query_arg( 'htaccess-error', true, $redirect_to );
|
226 |
+
}
|
227 |
+
} // End if().
|
228 |
+
|
229 |
+
// Disable browser caching.
|
230 |
+
if ( isset( $_GET['disable'] ) ) { // Input var ok.
|
231 |
+
// Disable caching in htaccess (only for apache servers).
|
232 |
+
$result = wphb_unsave_htaccess( 'caching' );
|
233 |
+
if ( $result ) {
|
234 |
+
// Clear saved status.
|
235 |
+
wphb_clear_caching_cache();
|
236 |
+
// Update cache status.
|
237 |
+
wphb_get_caching_status();
|
238 |
+
$redirect_to = add_query_arg( 'cache-disabled', true, $redirect_to );
|
239 |
+
} else {
|
240 |
+
$redirect_to = add_query_arg( 'htaccess-error', true, $redirect_to );
|
241 |
+
}
|
242 |
+
} // End if().
|
243 |
+
|
244 |
+
if ( isset( $_GET['run'] ) && isset( $_GET['type'] ) ) { // Input var ok.
|
245 |
+
$this->run_actions( $_GET['type'] );
|
246 |
+
}
|
247 |
+
|
248 |
+
if ( isset( $_POST['submit'] ) || isset( $_GET['enable'] ) || isset( $_GET['disable'] ) || isset( $_GET['run'] ) ) {
|
249 |
+
wp_safe_redirect( $redirect_to );
|
250 |
+
exit;
|
251 |
+
}
|
252 |
+
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Run Page caching, Browser caching, Gravatar caching...
|
257 |
*
|
258 |
* @param string $type Type of action to run.
|
259 |
* @since 1.4.5
|
266 |
}
|
267 |
|
268 |
switch ( $type ) {
|
269 |
+
// Activate Page Cache.
|
270 |
+
case 'pc-activate':
|
271 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
272 |
+
$module = wphb_get_module( 'page-caching' );
|
273 |
+
$module->activate();
|
274 |
+
break;
|
275 |
+
// Deactivate Page Cache.
|
276 |
+
case 'pc-deactivate':
|
277 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
278 |
+
$module = wphb_get_module( 'page-caching' );
|
279 |
+
$module->deactivate();
|
280 |
+
break;
|
281 |
// Deactivate Cloudflare.
|
282 |
case 'cf-deactivate':
|
283 |
wphb_cloudflare_disconnect();
|
290 |
case 'gc-deactivate':
|
291 |
wphb_update_setting( 'gravatar_cache', false );
|
292 |
break;
|
293 |
+
// Purge gravatar files.
|
294 |
case 'gc-purge':
|
295 |
/* @var WP_Hummingbird_Module_Gravatar $module */
|
296 |
$module = wphb_get_module( 'gravatar' );
|
303 |
}
|
304 |
wp_safe_redirect( $redirect_to );
|
305 |
exit;
|
306 |
+
// Purge page cache files.
|
307 |
+
case 'pc-purge':
|
308 |
+
// Remove notice.
|
309 |
+
delete_site_option( 'wphb-notice-cache-cleaned-show' );
|
310 |
+
|
311 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
312 |
+
$module = wphb_get_module( 'page-caching' );
|
313 |
+
$redirect_to = remove_query_arg( array( 'run', '_wpnonce', 'type', 'page-cache-purged', 'purge-error' ) );
|
314 |
+
|
315 |
+
if ( $module->purge_cache_dir() ) {
|
316 |
+
$redirect_to = add_query_arg( 'page-cache-purged', true, $redirect_to );
|
317 |
+
} else {
|
318 |
+
$redirect_to = add_query_arg( 'purge-error', true, $redirect_to );
|
319 |
+
}
|
320 |
+
wp_safe_redirect( $redirect_to );
|
321 |
+
exit;
|
322 |
+
case 'check-expiry':
|
323 |
+
// On check expiry click force a refresh of the data.
|
324 |
+
wphb_get_status_from_api( 'caching' );
|
325 |
+
break;
|
326 |
+
} // End switch().
|
327 |
|
328 |
wp_safe_redirect( remove_query_arg( array( 'run', '_wpnonce', 'type' ) ) );
|
329 |
exit;
|
337 |
*/
|
338 |
public function render_header() {
|
339 |
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
340 |
<div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-cloudflare-purge-cache">
|
341 |
<p><?php esc_html_e( 'Cloudflare cache successfully purged. Please wait 30 seconds for the purge to complete.', 'wphb' ); ?></p>
|
342 |
</div>
|
344 |
<?php
|
345 |
if ( isset( $_GET['caching-updated'] ) && ! isset( $_GET['htaccess-error'] ) ) {
|
346 |
if ( wphb_is_htaccess_written( 'caching' ) ) {
|
347 |
+
$this->admin_notices->show( 'updated', __( 'Your .htaccess file has been updated', 'wphb' ), 'success', true );
|
348 |
} else {
|
349 |
+
$this->admin_notices->show( 'updated', __( 'Code snippet updated', 'wphb' ), 'success', true );
|
350 |
}
|
351 |
}
|
352 |
|
353 |
if ( isset( $_GET['cache-enabled'] ) ) {
|
354 |
+
$this->admin_notices->show( 'updated', __( 'Browser cache enabled. Your .htaccess file has been updated', 'wphb' ), 'success', true );
|
355 |
}
|
356 |
|
357 |
if ( isset( $_GET['cache-disabled'] ) ) {
|
358 |
+
$this->admin_notices->show( 'updated', __( 'Browser cache disabled. Your .htaccess file has been updated', 'wphb' ), 'success', true );
|
359 |
}
|
360 |
|
361 |
if ( isset( $_GET['gravatars-purged'] ) ) {
|
362 |
+
$this->admin_notices->show( 'purged', __( 'Gravatar cache purged.', 'wphb' ), 'success', true );
|
363 |
+
}
|
364 |
+
|
365 |
+
if ( isset( $_GET['page-cache-purged'] ) ) {
|
366 |
+
$this->admin_notices->show( 'purged', __( 'Page cache purged.', 'wphb' ), 'success', true );
|
367 |
}
|
368 |
|
369 |
if ( isset( $_GET['purge-error'] ) ) {
|
370 |
+
$this->admin_notices->show( 'purged', __( 'There was an error during the cache purge. Check file permissions are 755 for /wp-content/wphb-cache or delete directory manually.', 'wphb' ), 'error', true );
|
371 |
}
|
372 |
|
373 |
parent::render_header();
|
377 |
* Register meta boxes for the page.
|
378 |
*/
|
379 |
public function register_meta_boxes() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
380 |
/**
|
381 |
* PAGE CACHING META BOXES.
|
382 |
*/
|
383 |
+
|
384 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
385 |
+
$module = wphb_get_module( 'page-caching' );
|
386 |
+
|
387 |
+
if ( ! $module->is_active() ) {
|
388 |
+
$this->add_meta_box(
|
389 |
+
'page-caching-disabled',
|
390 |
+
__( 'Page Caching', 'wphb' ),
|
391 |
+
array( $this, 'page_caching_disabled_metabox' ),
|
392 |
+
null,
|
393 |
+
null,
|
394 |
+
'main',
|
395 |
+
array(
|
396 |
+
'box_class' => 'dev-box content-box content-box-one-col-center',
|
397 |
+
)
|
398 |
+
);
|
399 |
+
} else {
|
400 |
+
$this->add_meta_box(
|
401 |
+
'page-caching',
|
402 |
+
__( 'Page Caching', 'wphb' ),
|
403 |
+
array( $this, 'page_caching_metabox' ),
|
404 |
+
array( $this, 'page_caching_metabox_header' ),
|
405 |
+
array( $this, 'page_caching_metabox_footer' ),
|
406 |
+
'main',
|
407 |
+
array(
|
408 |
+
'box_content_class' => 'box-content',
|
409 |
+
)
|
410 |
+
);
|
411 |
+
}
|
412 |
|
413 |
/**
|
414 |
* BROWSER CACHING META BOXES.
|
497 |
} else {
|
498 |
echo '<i class="hb-wpmudev-icon-tick"></i>';
|
499 |
}
|
500 |
+
} elseif ( 'gravatar' === $tab || 'main' === $tab ) {
|
501 |
+
if ( 'gravatar' === $tab ) {
|
502 |
+
/* @var WP_Hummingbird_Module_Gravatar $module */
|
503 |
+
$module = wphb_get_module( 'gravatar' );
|
504 |
+
} else {
|
505 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
506 |
+
$module = wphb_get_module( 'page-caching' );
|
507 |
+
}
|
508 |
if ( $module->is_active() && ! is_wp_error( $module->error ) ) {
|
509 |
echo '<i class="hb-wpmudev-icon-tick"></i>';
|
510 |
} elseif ( is_wp_error( $module->error ) ) {
|
523 |
$recommended = wphb_get_recommended_caching_values();
|
524 |
|
525 |
$results = wphb_get_caching_status();
|
|
|
|
|
|
|
|
|
526 |
|
527 |
$result_sum = 0;
|
528 |
|
546 |
* @since 1.5.4
|
547 |
*/
|
548 |
public function page_caching_disabled_metabox() {
|
549 |
+
$activate_url = add_query_arg( array(
|
550 |
+
'type' => 'pc-activate',
|
551 |
+
'run' => 'true',
|
552 |
+
));
|
553 |
+
$activate_url = wp_nonce_url( $activate_url, 'wphb-run-caching' );
|
554 |
+
|
555 |
+
$this->view( 'caching/disabled-page-caching-meta-box', array(
|
556 |
+
'activate_url' => $activate_url,
|
557 |
+
) );
|
558 |
+
}
|
559 |
+
|
560 |
+
/**
|
561 |
+
* Page caching meta box.
|
562 |
+
*
|
563 |
+
* @since 1.7.0
|
564 |
+
*/
|
565 |
+
public function page_caching_metabox() {
|
566 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
567 |
+
$module = wphb_get_module( 'page-caching' );
|
568 |
+
|
569 |
+
$settings = $module->get_settings();
|
570 |
+
|
571 |
+
$deactivate_url = add_query_arg( array(
|
572 |
+
'type' => 'pc-deactivate',
|
573 |
+
'run' => 'true',
|
574 |
+
));
|
575 |
+
$deactivate_url = wp_nonce_url( $deactivate_url, 'wphb-run-caching' );
|
576 |
+
|
577 |
+
$page_types = $module->get_page_types();
|
578 |
+
|
579 |
+
$this->view( 'caching/page-caching-meta-box', array(
|
580 |
+
'error' => $module->error,
|
581 |
+
'deactivate_url' => $deactivate_url,
|
582 |
+
'settings' => $settings,
|
583 |
+
'pages' => $page_types,
|
584 |
+
) );
|
585 |
+
}
|
586 |
+
|
587 |
+
/**
|
588 |
+
* Page caching meta box header.
|
589 |
+
*
|
590 |
+
* @since 1.7.0
|
591 |
+
*/
|
592 |
+
public function page_caching_metabox_header() {
|
593 |
+
$purge_url = add_query_arg( array(
|
594 |
+
'type' => 'pc-purge',
|
595 |
+
'run' => 'true',
|
596 |
+
));
|
597 |
+
$purge_url = wp_nonce_url( $purge_url, 'wphb-run-caching' );
|
598 |
+
|
599 |
+
$this->view( 'caching/page-caching-meta-box-header', array(
|
600 |
+
'title' => __( 'Page Caching', 'wphb' ),
|
601 |
+
'purge_url' => $purge_url,
|
602 |
+
));
|
603 |
+
}
|
604 |
+
|
605 |
+
/**
|
606 |
+
* Page caching meta box footer.
|
607 |
+
*
|
608 |
+
* @since 1.7.0
|
609 |
+
*/
|
610 |
+
public function page_caching_metabox_footer() {
|
611 |
+
$this->view( 'caching/page-caching-meta-box-footer', array() );
|
612 |
}
|
613 |
|
614 |
/**
|
630 |
$issues = 0;
|
631 |
}
|
632 |
|
633 |
+
$check_expiry_url = add_query_arg( array(
|
634 |
+
'type' => 'check-expiry',
|
635 |
+
'run' => 'true',
|
636 |
+
));
|
637 |
+
$check_expiry_url = wp_nonce_url( $check_expiry_url, 'wphb-run-caching' );
|
638 |
+
|
639 |
$this->view( 'caching/browser-caching-meta-box-header', array(
|
640 |
'title' => __( 'Browser Caching', 'wphb' ),
|
641 |
'issues' => $issues,
|
642 |
+
'url' => $check_expiry_url,
|
643 |
));
|
644 |
}
|
645 |
|
694 |
'type' => 'cf-deactivate',
|
695 |
'run' => 'true',
|
696 |
));
|
697 |
+
$deactivate_url = wp_nonce_url( $deactivate_url, 'wphb-run-caching' );
|
698 |
|
699 |
// Footer links to enable/disable automatic caching.
|
700 |
$enable_link = add_query_arg( array(
|
715 |
if ( wphb_is_htaccess_writable() && $htaccess_written ) {
|
716 |
$result = wphb_unsave_htaccess( 'caching' );
|
717 |
if ( $result ) {
|
718 |
+
// Clear cached status.
|
719 |
+
wphb_clear_caching_cache();
|
720 |
+
// Update with new settings.
|
721 |
+
wphb_get_caching_status();
|
722 |
}
|
723 |
}
|
724 |
$expiry_selects = true;
|
764 |
'type' => 'gc-activate',
|
765 |
'run' => 'true',
|
766 |
));
|
767 |
+
$activate_url = wp_nonce_url( $activate_url, 'wphb-run-caching' );
|
768 |
|
769 |
$this->view( 'caching/disabled-gravatar-meta-box', array(
|
770 |
'activate_url' => $activate_url,
|
802 |
'type' => 'gc-deactivate',
|
803 |
'run' => 'true',
|
804 |
));
|
805 |
+
$deactivate_url = wp_nonce_url( $deactivate_url, 'wphb-run-caching' );
|
806 |
|
807 |
$this->view( 'caching/gravatar-meta-box', array(
|
808 |
'module_active' => $module->is_active(),
|
826 |
$type = sanitize_text_field( wp_unslash( $type ) ); // Input var okay.
|
827 |
$value = sanitize_text_field( wp_unslash( $value ) ); // Input var okay.
|
828 |
|
829 |
+
$cf_active = wphb_cloudflare_is_active();
|
830 |
+
|
831 |
+
if ( $cf_active ) {
|
832 |
+
$frequencies = wphb_get_caching_cloudflare_frequencies();
|
833 |
+
} else {
|
834 |
+
$frequencies = wphb_get_caching_frequencies();
|
835 |
+
}
|
836 |
|
837 |
if ( ! isset( $frequencies[ $value ] ) ) {
|
838 |
die();
|
839 |
}
|
840 |
|
841 |
$options = wphb_get_settings();
|
842 |
+
if ( 'all' === $type && ! $cf_active ) {
|
843 |
$options['caching_expiry_css'] = $value;
|
844 |
$options['caching_expiry_javascript'] = $value;
|
845 |
$options['caching_expiry_media'] = $value;
|
846 |
$options['caching_expiry_images'] = $value;
|
847 |
+
} elseif ( 'all' === $type && $cf_active ) {
|
848 |
+
$options['cloudflare-caching-expiry'] = $value;
|
849 |
} else {
|
850 |
$options[ 'caching_expiry_' . $type ] = $value;
|
851 |
}
|
admin/class-dashboard-page.php
CHANGED
@@ -5,6 +5,14 @@
|
|
5 |
*/
|
6 |
class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
/**
|
9 |
* Function triggered when the page is loaded
|
10 |
* before render any content
|
@@ -14,10 +22,35 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
|
14 |
wphb_minification_maybe_stop_scanning_files();
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
if ( isset( $_GET['wphb-clear-files'] ) && current_user_can( wphb_get_admin_capability() ) ) {
|
18 |
check_admin_referer( 'wphb-clear-files' );
|
19 |
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
$url = remove_query_arg( array( 'wphb-clear-files', 'updated', '_wpnonce' ) );
|
22 |
|
23 |
if ( wphb_cloudflare_is_active() ) {
|
@@ -43,30 +76,37 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
|
43 |
$clear_cache_url = wp_nonce_url( $clear_cache_url, 'wphb-clear-files' );
|
44 |
|
45 |
if ( isset( $_GET['wphb-cache-cleared'] ) ) {
|
46 |
-
$this->
|
47 |
}
|
48 |
|
49 |
if ( isset( $_GET['wphb-cache-cleared-with-cloudflare'] ) ) {
|
50 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
}
|
52 |
?>
|
53 |
<section id="header">
|
54 |
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
|
55 |
<div class="actions">
|
56 |
-
<?php if (
|
57 |
-
<?php
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
),
|
63 |
-
wphb_get_admin_menu_url( '' )
|
64 |
-
);
|
65 |
-
$scan_link = wp_nonce_url( $scan_link, 'wphb-run-dashboard' ) . '#wphb-box-dashboard-performance-running-test';
|
66 |
-
?>
|
67 |
-
<a href="<?php echo esc_url( $scan_link ); ?>" class="button"><?php esc_html_e( 'Run Test', 'wphb' ); ?></a>
|
68 |
-
<?php endif; ?>
|
69 |
-
<a href="<?php echo esc_url( $clear_cache_url ); ?>" class="button button-ghost"><?php esc_html_e( 'Clear Cache', 'wphb' ); ?></a>
|
70 |
</div>
|
71 |
</section><!-- end header -->
|
72 |
<?php
|
@@ -131,8 +171,9 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
|
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 |
-
|
|
|
136 |
wphb_performance_refresh_report();
|
137 |
$last_report = wphb_performance_get_last_report();
|
138 |
}
|
@@ -140,9 +181,14 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
|
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 ) ) {
|
143 |
-
$this->add_meta_box(
|
144 |
-
'
|
145 |
-
|
|
|
|
|
|
|
|
|
|
|
146 |
} elseif ( is_wp_error( $last_report ) ) {
|
147 |
$this->add_meta_box( 'dashboard-performance-module-error', __( 'Performance Report', 'wphb' ), array( $this, 'dashboard_performance_module_error_metabox' ), null, null, 'box-dashboard-left', array(
|
148 |
'box_class' => 'dev-box content-box content-box-one-col-center',
|
@@ -153,71 +199,175 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
|
153 |
));
|
154 |
}
|
155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
156 |
/* Browser caching */
|
157 |
-
$
|
158 |
-
|
159 |
-
|
160 |
-
|
|
|
|
|
|
|
|
|
|
|
161 |
}
|
162 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
|
164 |
/* GZIP */
|
165 |
-
$this->add_meta_box(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
|
167 |
/* Minification */
|
168 |
if ( ! wphb_can_execute_php() ) {
|
169 |
-
$this->add_meta_box( 'dashboard/minification/cant-execute-php', __( 'Minification', 'wphb' ), null, null, null, 'box-dashboard-right', array(
|
170 |
-
|
171 |
-
|
|
|
172 |
// Minification metabox is different on network admin
|
173 |
-
$this->add_meta_box( 'dashboard/minification/network-module', __( 'Minification', 'wphb' ), array( $this, 'dashboard_minification_network_module_metabox' ), null, null, 'box-dashboard-right', array(
|
174 |
-
|
175 |
-
|
|
|
176 |
$module = wphb_get_module( 'minify' );
|
177 |
$collection = wphb_minification_get_resources_collection();
|
178 |
if ( ( ! empty( $collection['styles'] ) || ! empty( $collection['scripts'] ) ) && ( $module->is_active() ) ) {
|
179 |
-
$this->add_meta_box(
|
180 |
-
|
181 |
-
|
182 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
}
|
184 |
}
|
185 |
|
186 |
/* Smush */
|
187 |
$smush_id = wphb_is_member() ? 'dashboard-smush' : 'dashboard/smush/no-membership';
|
188 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
|
190 |
/* Become Pro Member Callout */
|
191 |
if ( ! wphb_is_member() ) {
|
192 |
-
$this->add_meta_box( 'dashboard-pro-membership', null, array( $this, 'dashboard_membership_metabox' ), null, null, 'box-dashboard-left', array(
|
|
|
|
|
193 |
}
|
194 |
|
195 |
/* Uptime */
|
196 |
$uptime_module = wphb_get_module( 'uptime' );
|
197 |
$is_active = $uptime_module->is_active();
|
198 |
-
$report = '';
|
199 |
-
if ( $is_active ) {
|
200 |
-
$report = wphb_uptime_get_last_report( 'week' );
|
201 |
-
}
|
202 |
|
203 |
if ( ! wphb_is_member() ) {
|
204 |
-
$this->add_meta_box(
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
$this->add_meta_box(
|
214 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
|
216 |
/* Reports */
|
217 |
-
if ( ! wphb_is_member() ) {
|
218 |
-
$this->add_meta_box(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
}
|
220 |
-
|
221 |
}
|
222 |
|
223 |
/**
|
@@ -225,25 +375,14 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
|
225 |
*/
|
226 |
public function dashboard_welcome_metabox() {
|
227 |
$caching_status = wphb_get_caching_status();
|
228 |
-
if ( false === $caching_status ) {
|
229 |
-
// Force only when we don't have any data yet.
|
230 |
-
$caching_status = wphb_get_caching_status( true );
|
231 |
-
}
|
232 |
$caching_issues = wphb_get_number_of_issues( 'caching' );
|
233 |
|
234 |
$gzip_status = wphb_get_gzip_status();
|
235 |
-
if ( false === $gzip_status ) {
|
236 |
-
// Force only when we don't have any data yet.
|
237 |
-
$gzip_status
|
5 |
*/
|
6 |
class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
|
7 |
|
8 |
+
/**
|
9 |
+
* Uptime report.
|
10 |
+
*
|
11 |
+
* @since 1.7.0
|
12 |
+
* @var array $uptime_report
|
13 |
+
*/
|
14 |
+
private $uptime_report = array();
|
15 |
+
|
16 |
/**
|
17 |
* Function triggered when the page is loaded
|
18 |
* before render any content
|
22 |
wphb_minification_maybe_stop_scanning_files();
|
23 |
}
|
24 |
|
25 |
+
// Get latest uptime report.
|
26 |
+
$uptime_module = wphb_get_module( 'uptime' );
|
27 |
+
if ( $uptime_module->is_active() ) {
|
28 |
+
$this->uptime_report = wphb_uptime_get_last_report();
|
29 |
+
}
|
30 |
+
|
31 |
if ( isset( $_GET['wphb-clear-files'] ) && current_user_can( wphb_get_admin_capability() ) ) {
|
32 |
check_admin_referer( 'wphb-clear-files' );
|
33 |
|
34 |
+
/* @var WP_Hummingbird_Module_Minify $minify_module */
|
35 |
+
$minify_module = wphb_get_module( 'minify' );
|
36 |
+
if ( $minify_module->is_active() ) {
|
37 |
+
wphb_minification_clear_files();
|
38 |
+
}
|
39 |
+
/* @var WP_Hummingbird_Module_GZip $gzip_module */
|
40 |
+
$gzip_module = wphb_get_module( 'gzip' );
|
41 |
+
if ( $gzip_module->is_active() ) {
|
42 |
+
wphb_clear_gzip_cache();
|
43 |
+
}
|
44 |
+
/* @var WP_Hummingbird_Module_Page_Caching $pc_module */
|
45 |
+
$pc_module = wphb_get_module( 'page-caching' );
|
46 |
+
if ( $pc_module->is_active() ) {
|
47 |
+
$pc_module->purge_cache_dir();
|
48 |
+
}
|
49 |
+
/* @var WP_Hummingbird_Module_Gravatar $gc_module */
|
50 |
+
$gc_module = wphb_get_module( 'gravatar' );
|
51 |
+
if ( $gc_module->is_active() ) {
|
52 |
+
$gc_module->delete_files();
|
53 |
+
}
|
54 |
$url = remove_query_arg( array( 'wphb-clear-files', 'updated', '_wpnonce' ) );
|
55 |
|
56 |
if ( wphb_cloudflare_is_active() ) {
|
76 |
$clear_cache_url = wp_nonce_url( $clear_cache_url, 'wphb-clear-files' );
|
77 |
|
78 |
if ( isset( $_GET['wphb-cache-cleared'] ) ) {
|
79 |
+
$this->admin_notices->show( 'updated', __( 'Your cache has been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
|
80 |
}
|
81 |
|
82 |
if ( isset( $_GET['wphb-cache-cleared-with-cloudflare'] ) ) {
|
83 |
+
$this->admin_notices->show( 'updated', __( 'Your local and Cloudflare caches have been successfully cleared. Your assets will regenerate the next time someone visits your website.', 'wphb' ), 'success', true );
|
84 |
+
}
|
85 |
+
$tooltip = '';
|
86 |
+
$modules = wphb_get_active_cache_modules();
|
87 |
+
$show_clear_cache = false;
|
88 |
+
if ( count( $modules ) > 0 ) {
|
89 |
+
$show_clear_cache = true;
|
90 |
+
if ( count( $modules ) === 1 ) {
|
91 |
+
/* translators: %s: module name. */
|
92 |
+
$tooltip = sprintf( __( 'This will clear your %s cache', 'wphb' ), $modules[0] );
|
93 |
+
} else {
|
94 |
+
$last = array_pop( $modules );
|
95 |
+
$module_names = implode( ', ', $modules ) . ' & ' . $last;
|
96 |
+
/* translators: %s: module name. */
|
97 |
+
$tooltip = sprintf( __( 'This will clear your %s caches', 'wphb' ), $module_names );
|
98 |
+
}
|
99 |
}
|
100 |
?>
|
101 |
<section id="header">
|
102 |
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
|
103 |
<div class="actions">
|
104 |
+
<?php if ( $show_clear_cache ) { ?>
|
105 |
+
<a href="<?php echo esc_url( $clear_cache_url ); ?>" class="button button-grey tooltip-l tooltip-bottom" tooltip="<?php echo esc_attr( $tooltip ); ?>" aria-hidden="true"><?php esc_html_e( 'Clear Cache', 'wphb' ); ?></a>
|
106 |
+
<?php } ?>
|
107 |
+
<a href="<?php echo esc_url( wphb_get_documentation_url( $this->slug, $this->get_current_tab() ) ); ?>" target="_blank" class="button button-ghost documentation-button">
|
108 |
+
<?php esc_html_e( 'View Documentation', 'wphb' ); ?>
|
109 |
+
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
</div>
|
111 |
</section><!-- end header -->
|
112 |
<?php
|
171 |
/* Performance */
|
172 |
$last_report = wphb_performance_get_last_report();
|
173 |
|
174 |
+
// Check to see if there's a fresh report on the server (but don't update it on quick setup dialog).
|
175 |
+
$quick_setup = get_option( 'wphb-quick-setup' );
|
176 |
+
if ( false === $last_report && true === $quick_setup['finished'] ) {
|
177 |
wphb_performance_refresh_report();
|
178 |
$last_report = wphb_performance_get_last_report();
|
179 |
}
|
181 |
if ( wphb_performance_is_doing_report() ) {
|
182 |
$this->add_meta_box( 'dashboard/performance/running-test', __( 'Performance test in progress', 'wphb' ), null, null, null, 'box-dashboard-left' );
|
183 |
} elseif ( ! wphb_performance_is_doing_report() && $last_report && ! is_wp_error( $last_report ) ) {
|
184 |
+
$this->add_meta_box(
|
185 |
+
'dashboard-performance-module',
|
186 |
+
__( 'Performance Report', 'wphb' ),
|
187 |
+
array( $this, 'dashboard_performance_module_metabox' ),
|
188 |
+
array( $this, 'dashboard_performance_module_metabox_header' ),
|
189 |
+
array( $this, 'dashboard_performance_module_metabox_footer' ),
|
190 |
+
'box-dashboard-left'
|
191 |
+
);
|
192 |
} elseif ( is_wp_error( $last_report ) ) {
|
193 |
$this->add_meta_box( 'dashboard-performance-module-error', __( 'Performance Report', 'wphb' ), array( $this, 'dashboard_performance_module_error_metabox' ), null, null, 'box-dashboard-left', array(
|
194 |
'box_class' => 'dev-box content-box content-box-one-col-center',
|
199 |
));
|
200 |
}
|
201 |
|
202 |
+
/* Page caching */
|
203 |
+
/* @var WP_Hummingbird_Module_Page_Caching $module */
|
204 |
+
$module = wphb_get_module( 'page-caching' );
|
205 |
+
$footer = null;
|
206 |
+
if ( $module->is_active() ) {
|
207 |
+
$footer = array( $this, 'dashboard_page_caching_module_metabox_footer' );
|
208 |
+
}
|
209 |
+
$this->add_meta_box(
|
210 |
+
'dashboard-caching-page-module',
|
211 |
+
__( 'Page Caching', 'wphb' ),
|
212 |
+
array( $this, 'dashboard_page_caching_module_metabox' ),
|
213 |
+
null,
|
214 |
+
$footer,
|
215 |
+
'box-dashboard-left'
|
216 |
+
);
|
217 |
+
|
218 |
/* Browser caching */
|
219 |
+
$browser_caching_args = array(
|
220 |
+
'box_content_class' => 'box-content no-background-image',
|
221 |
+
);
|
222 |
+
/** @var WP_Hummingbird_Module_Cloudflare $cf_module */
|
223 |
+
$cf_module = wphb_get_module( 'cloudflare' );
|
224 |
+
if ( ! wphb_cloudflare_is_active() ) {
|
225 |
+
if ( ! get_site_option( 'wphb-cloudflare-dash-notice' ) && 'dismissed' !== get_site_option( 'wphb-cloudflare-dash-notice' ) ) {
|
226 |
+
$browser_caching_args = array();
|
227 |
+
}
|
228 |
}
|
229 |
+
|
230 |
+
$this->add_meta_box(
|
231 |
+
'dashboard-browser-caching-module',
|
232 |
+
__( 'Browser Caching', 'wphb' ),
|
233 |
+
array( $this, 'dashboard_browser_caching_module_metabox' ),
|
234 |
+
array( $this, 'dashboard_browser_caching_module_metabox_header' ),
|
235 |
+
array( $this, 'dashboard_browser_caching_module_metabox_footer' ),
|
236 |
+
'box-dashboard-left',
|
237 |
+
$browser_caching_args
|
238 |
+
);
|
239 |
+
|
240 |
+
/* Gravatar caching */
|
241 |
+
/* @var WP_Hummingbird_Module_Gravatar $module */
|
242 |
+
$module = wphb_get_module( 'gravatar' );
|
243 |
+
$footer = null;
|
244 |
+
if ( $module->is_active() ) {
|
245 |
+
$footer = array( $this, 'dashboard_gravatar_caching_module_metabox_footer' );
|
246 |
+
}
|
247 |
+
$this->add_meta_box(
|
248 |
+
'dashboard-caching-gravatar-module',
|
249 |
+
__( 'Gravatar Caching', 'wphb' ),
|
250 |
+
array( $this, 'dashboard_gravatar_caching_module_metabox' ),
|
251 |
+
null,
|
252 |
+
$footer,
|
253 |
+
'box-dashboard-left'
|
254 |
+
);
|
255 |
|
256 |
/* GZIP */
|
257 |
+
$this->add_meta_box(
|
258 |
+
'dashboard-gzip-module',
|
259 |
+
__( 'GZIP Compression', 'wphb' ),
|
260 |
+
array( $this, 'dashboard_gzip_module_metabox' ),
|
261 |
+
array( $this, 'dashboard_gzip_module_metabox_header' ),
|
262 |
+
array( $this, 'dashboard_gzip_module_metabox_footer' ),
|
263 |
+
'box-dashboard-right'
|
264 |
+
);
|
265 |
|
266 |
/* Minification */
|
267 |
if ( ! wphb_can_execute_php() ) {
|
268 |
+
$this->add_meta_box( 'dashboard/minification/cant-execute-php', __( 'Minification', 'wphb' ), null, null, null, 'box-dashboard-right', array(
|
269 |
+
'box_class' => 'dev-box content-box content-box-one-col-center',
|
270 |
+
) );
|
271 |
+
} elseif ( is_multisite() && is_network_admin() ) {
|
272 |
// Minification metabox is different on network admin
|
273 |
+
$this->add_meta_box( 'dashboard/minification/network-module', __( 'Minification', 'wphb' ), array( $this, 'dashboard_minification_network_module_metabox' ), null, null, 'box-dashboard-right', array(
|
274 |
+
'box_class' => 'dev-box content-box content-box-one-col-center',
|
275 |
+
) );
|
276 |
+
} else {
|
277 |
$module = wphb_get_module( 'minify' );
|
278 |
$collection = wphb_minification_get_resources_collection();
|
279 |
if ( ( ! empty( $collection['styles'] ) || ! empty( $collection['scripts'] ) ) && ( $module->is_active() ) ) {
|
280 |
+
$this->add_meta_box(
|
281 |
+
'dashboard/minification-module',
|
282 |
+
__( 'Minification', 'wphb' ),
|
283 |
+
array( $this, 'dashboard_minification_module_metabox' ),
|
284 |
+
null,
|
285 |
+
array( $this, 'dashboard_minification_module_metabox_footer' ),
|
286 |
+
'box-dashboard-right'
|
287 |
+
);
|
288 |
+
} else {
|
289 |
+
$this->add_meta_box( 'dashboard/minification-disabled', __( 'Minification', 'wphb' ), array( $this, 'dashboard_minification_disabled_metabox' ), null, null, 'box-dashboard-right', array(
|
290 |
+
'box_class' => 'dev-box content-box content-box-one-col-center',
|
291 |
+
) );
|
292 |
}
|
293 |
}
|
294 |
|
295 |
/* Smush */
|
296 |
$smush_id = wphb_is_member() ? 'dashboard-smush' : 'dashboard/smush/no-membership';
|
297 |
+
$smush_footer = array( $this, 'dashboard_smush_metabox_footer' );
|
298 |
+
if ( ! wphb_smush_is_smush_active() || ! wphb_smush_is_smush_installed() ) {
|
299 |
+
$smush_footer = null;
|
300 |
+
}
|
301 |
+
$this->add_meta_box(
|
302 |
+
$smush_id,
|
303 |
+
__( 'Image Optimization', 'wphb' ),
|
304 |
+
array( $this, 'dashboard_smush_metabox' ),
|
305 |
+
array( $this, 'dashboard_smush_metabox_header' ),
|
306 |
+
$smush_footer,
|
307 |
+
'box-dashboard-right'
|
308 |
+
);
|
309 |
|
310 |
/* Become Pro Member Callout */
|
311 |
if ( ! wphb_is_member() ) {
|
312 |
+
$this->add_meta_box( 'dashboard-pro-membership', null, array( $this, 'dashboard_membership_metabox' ), null, null, 'box-dashboard-left', array(
|
313 |
+
'box_class' => 'dev-box callout-box content-box content-box-one-col-center',
|
314 |
+
) );
|
315 |
}
|
316 |
|
317 |
/* Uptime */
|
318 |
$uptime_module = wphb_get_module( 'uptime' );
|
319 |
$is_active = $uptime_module->is_active();
|
|
|
|
|
|
|
|
|
320 |
|
321 |
if ( ! wphb_is_member() ) {
|
322 |
+
$this->add_meta_box(
|
323 |
+
'dashboard/uptime/no-membership',
|
324 |
+
__( 'Uptime Monitoring', 'wphb' ),
|
325 |
+
null,
|
326 |
+
array( $this, 'dashboard_uptime_module_metabox_header' ),
|
327 |
+
null,
|
328 |
+
'box-dashboard-right'
|
329 |
+
);
|
330 |
+
} elseif ( is_wp_error( $this->uptime_report ) && $is_active ) {
|
331 |
+
$this->add_meta_box(
|
332 |
+
'dashboard-uptime-error',
|
333 |
+
__( 'Uptime', 'wphb' ),
|
334 |
+
array( $this, 'dashboard_uptime_error_metabox' ),
|
335 |
+
null,
|
336 |
+
null,
|
337 |
+
'box-dashboard-right'
|
338 |
+
);
|
339 |
+
} elseif ( ! $is_active ) {
|
340 |
+
$this->add_meta_box(
|
341 |
+
'dashboard-uptime-disabled',
|
342 |
+
__( 'Uptime', 'wphb' ),
|
343 |
+
array( $this, 'dashboard_uptime_disabled_metabox' ),
|
344 |
+
null,
|
345 |
+
null,
|
346 |
+
'box-dashboard-right'
|
347 |
+
);
|
348 |
+
} else {
|
349 |
+
$this->add_meta_box(
|
350 |
+
'dashboard-uptime',
|
351 |
+
__( 'Uptime', 'wphb' ),
|
352 |
+
array( $this, 'dashboard_uptime_metabox' ),
|
353 |
+
array( $this, 'dashboard_uptime_module_metabox_header' ),
|
354 |
+
array( $this, 'dashboard_uptime_module_metabox_footer' ),
|
355 |
+
'box-dashboard-right',
|
356 |
+
null
|
357 |
+
);
|
358 |
+
} // End if().
|
359 |
|
360 |
/* Reports */
|
361 |
+
if ( ! wphb_is_member() || ( defined( 'WPHB_WPORG' ) && WPHB_WPORG ) ) {
|
362 |
+
$this->add_meta_box(
|
363 |
+
'dashboard/reports/no-membership',
|
364 |
+
__( 'Reporting', 'wphb' ),
|
365 |
+
null,
|
366 |
+
array( $this, 'dashboard_reports_module_metabox_header' ),
|
367 |
+
null,
|
368 |
+
'box-dashboard-right'
|
369 |
+
);
|
370 |
}
|
|
|
371 |
}
|
372 |
|
373 |
/**
|
375 |
*/
|
376 |
public function dashboard_welcome_metabox() {
|
377 |
$caching_status = wphb_get_caching_status();
|
|
|
|
|
|
|
|
|
378 |
$caching_issues = wphb_get_number_of_issues( 'caching' );
|
379 |
|
380 |
$gzip_status = wphb_get_gzip_status();
|
|
|
|
|
|