Hummingbird Page Speed Optimization - Version 1.5.4

Version Description

( 2017-07-13 ) = - Fix: Cron reports were stuck on a loop on some WordPress installations - Fix: Issue with reports and calculating UTC time - Fix: Minification was duplicating inline styles - Fix: IE incompatibility in magnification screen - Fix: Compatibility with Contact Form 7 - Fix: Mobile menus not working on Performance and Minification pages - Enhance: Remove jQuery and jQuery migrate from minification process - Enhance: Minor style changes and updates - Enhance: Cron reports functionality - Enhance: Code optimization - Enhance: Admin area performance improvements

Download this release

Release Info

Developer igmoweb
Plugin Icon 128x128 Hummingbird Page Speed Optimization
Version 1.5.4
Comparing to
See all releases

Code changes from version 1.5.3 to 1.5.4

Files changed (45) hide show
  1. _src/admin/js/admin-dashboard-cloudflare.js +1 -1
  2. _src/admin/js/admin-dashboard.js +2 -2
  3. _src/admin/js/admin-main.js +7 -0
  4. _src/admin/js/admin-minification.js +1 -0
  5. _src/admin/js/admin-performance.js +1 -0
  6. _src/admin/js/utils/fetcher.js +1 -0
  7. admin/assets/css/admin.css +40 -8
  8. admin/assets/js/admin.min.js +8 -1
  9. admin/assets/js/admin.min.js.map +1 -1
  10. admin/class-admin-notices.php +68 -21
  11. admin/class-admin.php +60 -50
  12. admin/class-dashboard-page.php +16 -4
  13. admin/class-minification-page.php +2 -2
  14. admin/class-performance-page.php +5 -10
  15. admin/class-uptime-page.php +37 -39
  16. admin/views/caching/cloudflare-meta-box.php +12 -9
  17. admin/views/dashboard/welcome/meta-box.php +12 -8
  18. admin/views/minification/enqueued-files-empty-meta-box.php +4 -4
  19. admin/views/minification/enqueued-files-meta-box.php +1 -1
  20. admin/views/modals/bulk-update-modal.php +4 -4
  21. admin/views/modals/check-performance-modal.php +25 -19
  22. admin/views/performance/empty-summary-meta-box.php +6 -6
  23. admin/views/performance/summary-membership-meta-box.php +1 -1
  24. admin/views/tabs.php +8 -23
  25. admin/views/uptime/meta-box.php +1 -1
  26. admin/views/wphb-minification-page.php +5 -5
  27. admin/views/wphb-page.php +2 -2
  28. admin/views/wphb-performance-page.php +12 -12
  29. core/api/request/wpmudev.php +4 -3
  30. core/class-installer.php +52 -3
  31. core/integration.php +2 -1
  32. core/integration/avada.php +41 -0
  33. core/integration/divi.php +4 -0
  34. core/modules-hooks.php +11 -3
  35. core/modules/class-module-minify.php +34 -10
  36. core/modules/class-module-performance.php +14 -13
  37. core/modules/minify/class-errors-controller.php +9 -8
  38. core/modules/minify/class-minify-group.php +27 -1
  39. core/modules/minify/class-minify-groups-list.php +6 -6
  40. helpers/wp-hummingbird-helpers-core.php +5 -1
  41. helpers/wp-hummingbird-helpers-modules.php +2 -1
  42. languages/wphb-default.pot +267 -244
  43. readme.txt +15 -2
  44. uninstall.php +3 -1
  45. wp-hummingbird.php +9 -2
_src/admin/js/admin-dashboard-cloudflare.js CHANGED
@@ -76,7 +76,7 @@ import Fetcher from './utils/fetcher';
76
  });
77
 
78
  this.$stepsContainer.find( 'select' ).each( function() {
79
- WDP.wpmuSelect( this );
80
  });
81
 
82
  if ( 'final' === this.currentStep ) {
76
  });
77
 
78
  this.$stepsContainer.find( 'select' ).each( function() {
79
+ window.WDP.wpmuSelect( this );
80
  });
81
 
82
  if ( 'final' === this.currentStep ) {
_src/admin/js/admin-dashboard.js CHANGED
@@ -59,7 +59,7 @@ import Fetcher from './utils/fetcher';
59
  */
60
  startQuickSetup: function () {
61
  // Show quick setup modal
62
- WDP.showOverlay( '#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' } );
63
  },
64
 
65
  /**
@@ -77,7 +77,7 @@ import Fetcher from './utils/fetcher';
77
  */
78
  runPerformanceTest: function() {
79
  // Show quick setup modal
80
- WDP.showOverlay("#run-performance-test-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
81
 
82
  // Run performance test
83
  const module = WPHB_Admin.getModule('performance');
59
  */
60
  startQuickSetup: function () {
61
  // Show quick setup modal
62
+ window.WDP.showOverlay( '#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' } );
63
  },
64
 
65
  /**
77
  */
78
  runPerformanceTest: function() {
79
  // Show quick setup modal
80
+ window.WDP.showOverlay("#run-performance-test-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
81
 
82
  // Run performance test
83
  const module = WPHB_Admin.getModule('performance');
_src/admin/js/admin-main.js CHANGED
@@ -6,6 +6,13 @@
6
  // Common functionality to all screens
7
  init: function() {
8
 
 
 
 
 
 
 
 
9
  function updatePerformanceGraph($wrap){
10
  let $item = $wrap.find('.wphb-score-result-label'),
11
  val = parseInt($item.text(), 10) || 100,
6
  // Common functionality to all screens
7
  init: function() {
8
 
9
+ $('body').on('change', '.mobile-nav', function () {
10
+ let url = $(this).val();
11
+ if (url.length > 0) {
12
+ location.href = url;
13
+ }
14
+ });
15
+
16
  function updatePerformanceGraph($wrap){
17
  let $item = $wrap.find('.wphb-score-result-label'),
18
  val = parseInt($item.text(), 10) || 100,
_src/admin/js/admin-minification.js CHANGED
@@ -32,6 +32,7 @@ import RowsCollection from './minification/RowsCollection';
32
  if ( this.$checkFilesButton.length ) {
33
  this.$checkFilesButton.click( function( e ) {
34
  e.preventDefault();
 
35
  $(this).attr('disabled', true);
36
  self.checkFiles( getLink( 'minification' ) );
37
  });
32
  if ( this.$checkFilesButton.length ) {
33
  this.$checkFilesButton.click( function( e ) {
34
  e.preventDefault();
35
+ window.WDP.showOverlay("#check-files-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
36
  $(this).attr('disabled', true);
37
  self.checkFiles( getLink( 'minification' ) );
38
  });
_src/admin/js/admin-performance.js CHANGED
@@ -40,6 +40,7 @@ import Fetcher from './utils/fetcher';
40
  if (this.$runTestButton.length) {
41
  this.$runTestButton.click(function (e) {
42
  e.preventDefault();
 
43
  $(this).attr('disabled', true);
44
  self.performanceTest(self.strings.finishedTestURLsLink);
45
  });
40
  if (this.$runTestButton.length) {
41
  this.$runTestButton.click(function (e) {
42
  e.preventDefault();
43
+ window.WDP.showOverlay("#run-performance-test-modal", { class: 'wphb-modal small wphb-progress-modal no-close' } );
44
  $(this).attr('disabled', true);
45
  self.performanceTest(self.strings.finishedTestURLsLink);
46
  });
_src/admin/js/utils/fetcher.js CHANGED
@@ -11,6 +11,7 @@ function Fetcher() {
11
  data.action = action;
12
  let args = { data, method };
13
  args.url = fetchUrl;
 
14
  return new Promise( ( resolve, reject ) => {
15
  jQuery.ajax( args ).done( resolve ).fail( reject );
16
  })
11
  data.action = action;
12
  let args = { data, method };
13
  args.url = fetchUrl;
14
+ let Promise = require('es6-promise').Promise;
15
  return new Promise( ( resolve, reject ) => {
16
  jQuery.ajax( args ).done( resolve ).fail( reject );
17
  })
admin/assets/css/admin.css CHANGED
@@ -19,6 +19,21 @@
19
  /* ****************************************************************************
20
  * 1. EXTEND/OVERRIDE WPMUDEV DASHBOARD/WP STYLES
21
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  /* Fix for overflowing tooltips start */
23
  .wpmud .list-table > tbody > tr > td {
24
  z-index: 0;
@@ -93,8 +108,9 @@
93
  line-height: inherit;
94
  }
95
  .wpmud #header {
 
96
  margin-bottom: 0;
97
- overflow: hidden;
98
  }
99
  .wpmud #header h1 {
100
  color: #333333;
@@ -116,10 +132,11 @@
116
  }
117
  .wpmud #header .actions.status {
118
  left: 200px;
119
- margin-top: 36px;
120
  }
121
  .wpmud .wrap-wphb-uptime > #header .actions.status {
122
  left: 120px;
 
123
  }
124
  .wpmud #header .actions.status [tooltip]:after {
125
  margin-left: 27px;
@@ -133,12 +150,10 @@
133
  }
134
  .wpmud #header .actions {
135
  position: absolute;
136
- top: 0;
137
- right: 0;
138
- margin-top: 35px;
139
- margin-right: 20px;
140
  display: flex;
141
  align-items: center;
 
 
142
  }
143
  .wpmud #header .actions > * {
144
  display: inline-block;
@@ -3336,9 +3351,10 @@ div.wphb-block-entry {
3336
  .wpmud #header .actions {
3337
  float: none;
3338
  }
3339
- .wpmud #header .actions:last-child {
3340
  position: relative;
3341
- margin-top: 20px !important;
 
3342
  }
3343
  .wpmud #header .actions:last-child > a {
3344
  margin-left: 0;
@@ -3654,6 +3670,22 @@ div.wphb-block-entry {
3654
  border-right-color: transparent;
3655
  }
3656
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3657
  }
3658
 
3659
  /* HELPER CLASSES */
19
  /* ****************************************************************************
20
  * 1. EXTEND/OVERRIDE WPMUDEV DASHBOARD/WP STYLES
21
  */
22
+ /* Overwrite for the default notifications */
23
+ button.notice-dismiss {
24
+ position: absolute;
25
+ top: 0;
26
+ right: 1px;
27
+ border: none !important;
28
+ margin: 0 !important;
29
+ padding: 9px !important;
30
+ background: none !important;
31
+ color: #72777c !important;
32
+ cursor: pointer !important;
33
+ }
34
+ .wpmud #wpbody-content > .notice {
35
+ margin: 5px 20px 2px 5px;
36
+ }
37
  /* Fix for overflowing tooltips start */
38
  .wpmud .list-table > tbody > tr > td {
39
  z-index: 0;
108
  line-height: inherit;
109
  }
110
  .wpmud #header {
111
+ position: relative;
112
  margin-bottom: 0;
113
+ /*overflow: hidden;*/
114
  }
115
  .wpmud #header h1 {
116
  color: #333333;
132
  }
133
  .wpmud #header .actions.status {
134
  left: 200px;
135
+ margin-top: 1px;
136
  }
137
  .wpmud .wrap-wphb-uptime > #header .actions.status {
138
  left: 120px;
139
+ margin-top: 1px !important;
140
  }
141
  .wpmud #header .actions.status [tooltip]:after {
142
  margin-left: 27px;
150
  }
151
  .wpmud #header .actions {
152
  position: absolute;
 
 
 
 
153
  display: flex;
154
  align-items: center;
155
+ top: 5px;
156
+ right: 0;
157
  }
158
  .wpmud #header .actions > * {
159
  display: inline-block;
3351
  .wpmud #header .actions {
3352
  float: none;
3353
  }
3354
+ .wpmud #header .actions:not(.status):last-child {
3355
  position: relative;
3356
+ float: right;
3357
+ margin: 0 0 20px !important;
3358
  }
3359
  .wpmud #header .actions:last-child > a {
3360
  margin-left: 0;
3670
  border-right-color: transparent;
3671
  }
3672
 
3673
+ /* Performance reports */
3674
+ .wpmud .wrap-wphb-performance .recipient,
3675
+ .wpmud .wrap-wphb-performance .recipient .name,
3676
+ .wpmud .wrap-wphb-performance .add-recipient {
3677
+ flex-flow: row wrap;
3678
+ }
3679
+ .wpmud .wrap-wphb-performance .add-recipient > button,
3680
+ .wpmud .wrap-wphb-performance .add-recipient #wphb-first-name {
3681
+ border-radius: 0 !important;
3682
+ margin-bottom: 5px;
3683
+ border: 1px solid #E6E6E6;
3684
+ }
3685
+ .wpmud .wrap-wphb-performance .add-recipient > button {
3686
+ margin-top: 10px !important;
3687
+ }
3688
+
3689
  }
3690
 
3691
  /* HELPER CLASSES */
admin/assets/js/admin.min.js CHANGED
@@ -1,2 +1,9 @@
1
- !function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=28)}([function(e,t,n){"use strict";function i(){function e(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";i.nonce=n,i.action=e;var s={data:i,method:o};return s.url=t,new Promise(function(e,t){jQuery.ajax(s).done(e).fail(t)}).then(function(e){return r(e)})}var t=ajaxurl,n=wphb.nonces.HBFetchNonce,i={caching:{setExpiration:function(t,n){return e("wphb_caching_set_expiration",{type:t,value:n},"POST")},setServer:function(t){return e("wphb_caching_set_server_type",{value:t},"POST")},reloadSnippets:function(t){return e("wphb_caching_reload_snippet",{type:t},"POST").then(function(e){return e})}},cloudflare:{connect:function(t,n,i){return e("wphb_cloudflare_connect",{step:t,formData:n,cfData:i},"POST").then(function(e){return e})},setExpiration:function(t){return e("wphb_cloudflare_set_expiry",{value:t},"POST")},purgeCache:function(){return e("wphb_cloudflare_purge_cache",{},"POST")}},dashboard:{toggleMinification:function(t){return e("wphb_dash_toggle_network_minification",{value:t},"POST")},skipSetup:function(){return e("wphb_dash_skip_setup",{},"POST")}},minification:{toggleCDN:function(t){return e("wphb_minification_toggle_cdn",{value:t},"POST")},toggleMinification:function(t){return e("wphb_minification_toggle_minification",{value:t},"POST")},startCheck:function(t){return e("wphb_minification_start_check",{progress:t},"POST").then(function(e){return e})},checkStep:function(t,n){return e("wphb_minification_check_step",{progress:t,step:n},"POST").then(function(e){return e})},cancelScan:function(){return e("wphb_minification_cancel_scan",{},"POST")}},performance:{runTest:function(){return e("wphb_performance_run_test",{},"POST").then(function(e){return e})},addRecipient:function(t,n){return e("wphb_pro_performance_add_recipient",{email:t,name:n},"POST").then(function(e){return e})},saveReportsSettings:function(t){return e("wphb_pro_performance_save_reports_settings",{data:t},"POST")}}};(0,c.default)(this,i)}function r(e){if("object"!==(void 0===e?"undefined":o(e))&&(e=JSON.parse(e)),e.success)return e.data;var t=e.data||{},n=new Error(t.message||"Error trying to fetch response from server");throw n.response=e,n}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=n(58),c=function(e){return e&&e.__esModule?e:{default:e}}(s),a=new i;t.default=a},function(e,t,n){function i(e){return null==e?void 0===e?a:c:u&&u in Object(e)?o(e):s(e)}var r=n(6),o=n(46),s=n(52),c="[object Null]",a="[object Undefined]",u=r?r.toStringTag:void 0;e.exports=i},function(e,t,n){var i=n(10),r="object"==typeof self&&self&&self.Object===Object&&self,o=i||r||Function("return this")();e.exports=o},function(e,t,n){function i(e){return null!=e&&o(e.length)&&!r(e)}var r=n(15),o=n(16);e.exports=i},function(e,t){function n(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}e.exports=n},function(e,t){function n(e){return null!=e&&"object"==typeof e}e.exports=n},function(e,t,n){var i=n(2),r=i.Symbol;e.exports=r},function(e,t,n){function i(e,t,n){var i=e[t];c.call(e,t)&&o(i,n)&&(void 0!==n||t in e)||r(e,t,n)}var r=n(8),o=n(13),s=Object.prototype,c=s.hasOwnProperty;e.exports=i},function(e,t,n){function i(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var r=n(9);e.exports=i},function(e,t,n){var i=n(45),r=function(){try{var e=i(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=r},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(t,n(66))},function(e,t){function n(e,t){return!!(t=null==t?i:t)&&("number"==typeof e||r.test(e))&&e>-1&&e%1==0&&e<t}var i=9007199254740991,r=/^(?:0|[1-9]\d*)$/;e.exports=n},function(e,t){function n(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||i)}var i=Object.prototype;e.exports=n},function(e,t){function n(e,t){return e===t||e!==e&&t!==t}e.exports=n},function(e,t){function n(e){return e}e.exports=n},function(e,t,n){function i(e){if(!o(e))return!1;var t=r(e);return t==c||t==a||t==s||t==u}var r=n(1),o=n(4),s="[object AsyncFunction]",c="[object Function]",a="[object GeneratorFunction]",u="[object Proxy]";e.exports=i},function(e,t){function n(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=i}var i=9007199254740991;e.exports=n},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";jQuery(document).ready(function(){WPHB_Admin.init()})},function(e,t,n){"use strict";var i=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(i);!function(e){WPHB_Admin.caching={module:"caching",selectedServer:"",$serverSelector:null,$serverInstructions:[],$expirySelectors:[],$snippets:[],init:function(){var t=this,n=e("#wphb-box-caching-enable"),i=n.find(".box-content"),o=i.find(".spinner"),s=n.find(".box-footer");return wphbCachingStrings&&(t.strings=wphbCachingStrings),this.$serverSelector=e("#wphb-server-type"),this.selectedServer=this.$serverSelector.val(),t.$snippets.apache=e("#wphb-code-snippet-apache").find("pre").first(),t.$snippets.nginx=e("#wphb-code-snippet-nginx").find("pre").first(),e(".wphb-server-instructions").each(function(){t.$serverInstructions[e(this).data("server")]=e(this)}),e(".wphb-expiry-select").each(function(){var n=e(this).data("type");n&&e(this).change(function(){i.find(".wphb-content").hide(),s.hide(),o.fadeIn(),e(".wphb-notice").hide(),function(i){var o=e(i).val();r.default.caching.setExpiration(n,o).then(function(){t.reloadSnippets()})}(this)})}),this.showServerInstructions(this.selectedServer),this.$serverSelector.change(function(){var n=e(this).val();t.hideCurrentInstructions(),t.showServerInstructions(n),t.setServer(n),t.selectedServer=n}),e("#toggle-apache-instructions").click(function(t){t.preventDefault(),e(".apache-instructions").slideToggle()}),e("#toggle-litespeed-instructions").click(function(t){t.preventDefault(),e(".litespeed-instructions").slideToggle()}),this},setServer:function(e){r.default.caching.setServer(e)},hideCurrentInstructions:function(){var e=this.selectedServer;this.$serverInstructions[e]&&this.$serverInstructions[e].hide()},showServerInstructions:function(t){void 0!==this.$serverInstructions[t]&&this.$serverInstructions[t].show(),"apache"===t||"LiteSpeed"===t?e("#enable-cache-wrap").show():e("#enable-cache-wrap").hide()},reloadSnippets:function(){var t=this;for(var n in t.$snippets)t.$snippets.hasOwnProperty(n)&&r.default.caching.reloadSnippets(n).then(function(n){t.$snippets[n.type].text(n.code),n.type===t.selectedServer&&("apache"===n.type&&n.updatedFile?(e("#wphb-notice-code-snippet-htaccess-updated").show(),location.href=t.strings.recheckURL+"&caching-updated=true"):"apache"===n.type&&t.strings.cacheEnabled&&!n.updatedFile?(e("#wphb-notice-code-snippet-htaccess-error").show(),location.href=t.strings.htaccessErrorURL):(e("#wphb-notice-code-snippet-updated").show(),location.href=t.strings.recheckURL+"&caching-updated=true"))})}}}(jQuery)},function(e,t,n){"use strict";var i=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(i);!function(e){WPHB_Admin.cloudflare={module:"cloudflare",$cfSelector:!1,$spinner:!1,init:function(){this.$spinner=e(".wphb-spinner"),this.$cfSelector=e("#wphb-caching-cloudflare-summary-set-expiry");var t=this;return wphb.cloudflare.is.connected&&this.$cfSelector.change(function(){t.setExpiry.call(t,[this])}),this},setExpiry:function(t){this.displaySpinner();var n=e(t).val();r.default.cloudflare.setExpiration(n).then(function(){window.location.reload()})},displaySpinner:function(){this.$spinner.css("visibility","visible")}}}(jQuery)},function(e,t,n){"use strict";var i=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(i);!function(e){WPHB_Admin.DashboardCloudFlare={init:function(t){this.currentStep=t.currentStep,this.data=t,this.email=t.email,this.apiKey=t.apiKey,this.$stepsContainer=e("#cloudflare-steps"),this.$infoBox=e("#cloudflare-info"),this.$spinner=e(".cloudflare-spinner"),this.$deactivateButton=e("#wphb-box-dashboard-cloudflare").find(".box-title .buttons"),this.renderStep(this.currentStep),e("body").on("click",".cloudflare-clear-cache .button",function(t){t.preventDefault(),this.purgeCache.apply(e(t.target),[this])}.bind(this))},purgeCache:function(t){var n=this;n.attr("disabled",!0),t.showSpinner(),r.default.cloudflare.purgeCache().then(function(){var i=e("#wphb-notice-cloudflare-purge-cache");window.scrollTo(0,0),i.slideDown(),setTimeout(function(){i.slideUp()},5e3),n.removeAttr("disabled"),t.hideSpinner()})},renderStep:function(t){var n=WPHB_Admin.DashboardCloudFlare.template("#cloudflare-step-"+t),i=n(this.data),r=this;i&&(this.currentStep=t,this.$stepsContainer.hide().html(n(this.data)).fadeIn().find("form").on("submit",function(t){t.preventDefault(),r.submitStep.call(r,e(this))}),this.$spinner=this.$stepsContainer.find(".cloudflare-spinner")),this.bindEvents()},bindEvents:function(){var t=e("#cloudflare-how-to");t.hide(),e("#cloudflare-how-to-title > a").click(function(e){e.preventDefault(),t.toggle()}),this.$stepsContainer.find("select").each(function(){WDP.wpmuSelect(this)}),"final"===this.currentStep?this.$deactivateButton.removeClass("hidden"):this.$deactivateButton.addClass("hidden")},emptyInfoBox:function(){this.$infoBox.html(""),this.$infoBox.removeClass()},showInfoBox:function(e){this.$infoBox.addClass("wphb-notice"),this.$infoBox.addClass("wphb-notice-error"),this.$infoBox.text(e)},showSpinner:function(){this.$spinner.css("visibility","visible")},hideSpinner:function(){this.$spinner.css("visibility","hidden")},submitStep:function(e){var t=this;e.find("input[type=submit]").attr("disabled","true"),this.emptyInfoBox(),this.showSpinner(),r.default.cloudflare.connect(this.currentStep,e.serialize(),this.data).then(function(e){t.data=e.newData,t.renderStep(e.nextStep),"final"===e.nextStep&&(window.location.href=e.redirect)}).catch(function(e){t.showInfoBox(e)}),e.find("input[type=submit]").removeAttr("disabled"),t.hideSpinner()}},WPHB_Admin.DashboardCloudFlare.template=_.memoize(function(t){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(e(t).html()))(r)}})}(jQuery)},function(e,t,n){"use strict";var i=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(i);!function(e){WPHB_Admin.dashboard={module:"dashboard",init:function(){var t=this;return wphbDashboardStrings&&(this.strings=wphbDashboardStrings),e("#wphb-activate-minification").change(function(){var n=e(this).val();r.default.dashboard.toggleMinification(n).then(function(){var i=e('input[name="use_cdn"]');"false"===n?(i.prop("checked",!1),i.prop("disabled",!0)):i.prop("disabled",!1),t.showNotice()})}),e("#use_cdn").change(function(){var n=e(this).is(":checked");r.default.minification.toggleCDN(n).then(function(){t.showNotice()})}),e(".wphb-performance-report-item").click(function(){var t=e(this).data("performance-url");t&&(location.href=t)}),this},showNotice:function(){var t=e("#wphb-notice-minification-settings-updated");t.slideDown(),setTimeout(function(){t.slideUp()},5e3)},startQuickSetup:function(){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(){WDP.showOverlay("#run-performance-test-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),WPHB_Admin.getModule("performance").performanceTest(this.strings.finishedTestURLsLink)}}}(jQuery)},function(e,t,n){"use strict";var i=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(i);!function(e){WPHB_Admin.gzip={module:"gzip",selectedServer:"",$serverSelector:null,$serverInstructions:[],init:function(){var t=this;return this.$serverSelector=e("#wphb-server-type"),this.selectedServer=this.$serverSelector.val(),e(".wphb-server-instructions").each(function(){t.$serverInstructions[e(this).data("server")]=e(this)}),this.showServerInstructions(this.selectedServer),this.$serverSelector.change(function(){var n=e(this).val();t.hideCurrentInstructions(),t.showServerInstructions(n),t.setServer(n),t.selectedServer=n}),e("#toggle-apache-instructions").click(function(t){t.preventDefault(),e(".apache-instructions").toggle()}),e("#toggle-litespeed-instructions").click(function(t){t.preventDefault(),e(".litespeed-instructions").toggle()}),this},hideCurrentInstructions:function(){var e=this.selectedServer;this.$serverInstructions[e]&&this.$serverInstructions[e].hide()},showServerInstructions:function(t){void 0!==this.$serverInstructions[t]&&this.$serverInstructions[t].show(),"apache"===t||"LiteSpeed"===t?e("#enable-cache-wrap").show():e("#enable-cache-wrap").hide()},setServer:function(e){r.default.caching.setServer(e)}}}(jQuery)},function(e,t,n){"use strict";!function(e){var t={modules:[],init:function(){function t(e){var t=e.find(".wphb-score-result-label"),n=parseInt(t.text(),10)||100,i=e.find(".wphb-score-graph-result"),r=void 0,o=void 0,s=void 0;r=i.attr("r"),o=Math.PI*(2*r),n<0&&(n=0),n>100&&(n=100),s=(100-n)/100*o,i.css({strokeDashoffset:s})}function n(){e(".wphb-performance-report-overall-score").each(function(){t(e(this))}),e(".wphb-performance-report-current-score").each(function(){t(e(this))}),e(".wphb-performance-report-item-score").each(function(){t(e(this))})}window.register_events_performance=function(){setTimeout(n,500)},e(function(){setTimeout(n,500)})},initModule:function(e){return this.hasOwnProperty(e)?(this.modules[e]=this[e].init(),this.modules[e]):{}},getModule:function(e){return void 0!==this.modules[e]?this.modules[e]:this.initModule(e)}};t.utils={membershipModal:{open:function(){e("#wphb-upgrade-membership-modal-link").trigger("click")}},post:function(t,n){return t.action="wphb_ajax",t.module=n,e.ajax({url:ajaxurl,method:"POST",data:t})}},t.notices={init:function(){e(".wphb-notice:not(.notice) a.wphb-dismiss").click(function(t){t.preventDefault();e(this).data("id"),e(this).data("nonce");e(this).parent(".error").hide()})}},window.WPHB_Admin=t}(jQuery)},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(0),o=i(r),s=n(31),c=n(29),a=i(c),u=n(30),l=i(u);!function(e){WPHB_Admin.minification={$checkFilesButton:null,$checkFilesResultsContainer:null,module:"minification",checkURLSList:null,checkedURLS:0,$spinner:null,init:function(){var t=this;e("#wphb-minification-filter-button").on("click",function(t){t.preventDefault(),e("#wphb-minification-filter").toggle("slow")}),this.$checkFilesButton=e("#check-files"),this.$disableMinification=e("#wphb-disable-minification"),this.$spinner=e(".spinner"),this.$checkFilesButton.length&&this.$checkFilesButton.click(function(n){n.preventDefault(),e(this).attr("disabled",!0),t.checkFiles((0,s.getLink)("minification"))}),e(".wphb-discard").click(function(e){return e.preventDefault(),confirm((0,s.__)("discardAlert"))&&location.reload(),!1}),e(".wphb-enqueued-files input").on("change",function(){e(".wphb-discard").attr("disabled",!1)}),e("#use_cdn").change(function(){var t=e(this).is(":checked");o.default.minification.toggleCDN(t).then(function(){var t=e("#wphb-notice-minification-advanced-settings-updated");t.slideDown(),setTimeout(function(){t.slideUp()},5e3)})}),this.$disableMinification.change(function(){var n=e(this).is(":checked");t.$spinner.css("visibility","visible"),t.timer&&n&&(clearTimeout(t.timer),t.$spinner.css("visibility","hidden")),t.timer=setTimeout(function(){o.default.minification.toggleMinification(n).then(function(){location.reload()})},3e3)}),this.rowsCollection=new WPHB_Admin.minification.RowsCollection,e(".wphb-border-row").each(function(n,i){var r=void 0;r=e(i).data("filter-secondary")?new WPHB_Admin.minification.Row(e(i),e(i).data("filter"),e(i).data("filter-secondary")):new WPHB_Admin.minification.Row(e(i),e(i).data("filter")),t.rowsCollection.push(r)}),e("#wphb-s").keyup(function(){t.rowsCollection.addFilter(e(this).val(),"primary"),t.rowsCollection.applyFilters()}),e("#wphb-secondary-filter").change(function(){t.rowsCollection.addFilter(e(this).val(),"secondary"),t.rowsCollection.applyFilters()}),e(".filter-toggles").change(function(){var n=e(this),i=n.data("toggles"),r=n.prop("checked"),o=t.rowsCollection.getVisibleItems();for(var s in o)o[s].change(i,r)}),e("input.wphb-minification-file-selector").click(function(){var n=e(this),i=t.rowsCollection.getItemById(n.data("type"),n.data("handle"));i&&(n.is(":checked")?i.select():i.unSelect())}),e("#minification-bulk-file").click(function(){var n=e(this),i=t.rowsCollection.getItems();for(var r in i)i.hasOwnProperty(r)&&(n.is(":checked")?i[r].select():i[r].unSelect())}),e(".toggle-cross").on("click",function(){var n=e(this),i=n.find("input.toggle-include"),r=t.rowsCollection.getItemById(n.data("type"),n.data("handle"));r&&(r.change("include",!i.prop("checked")),r.getElement().find("input:not(.toggle-include)").prop("disabled",!i.prop("checked")))});var n=e("input[type=checkbox][name=use_cdn]");n.change(function(){var t=e(this).prop("checked");n.each(function(){this.checked=t})}),e("body").on("click",".wphb-minification-file-details",function(){window.innerWidth<783&&e(this).parent().find(".wphb-minification-row-details").toggle("slow")});var i=_.debounce(function(){window.innerWidth>=783?e(".wphb-minification-row-details").css("display","flex"):e(".wphb-minification-row-details").css("display","none")},250);return window.addEventListener("resize",i),this},checkFiles:function(t){var n=this,i=this;if(void 0===t&&(t=!1),i.minificationStarted){var r=sessionStorage.getItem("progress"),s=Math.round(80/sessionStorage.getItem("steps"));o.default.minification.checkStep(r,s).then(function(r){if(void 0!==r.finished){if(r.finished&&t)sessionStorage.clear(),n.updateProgressBar(100),!0===r.show_cdn&&e("#enable-cdn-modal").length?WDP.showOverlay("#enable-cdn-modal",{class:"wphb-modal small wphb-progress-modal no-close"}):window.location.href=t;else if(!r.finished){var o=parseInt(sessionStorage.getItem("progress"))+Math.round(80/sessionStorage.getItem("steps"));sessionStorage.setItem("progress",o),n.updateProgressBar(o),window.setTimeout(function(){i.checkFiles(t)},3e3)}}else window.location.href=t})}else{null===sessionStorage.getItem("progress")&&sessionStorage.setItem("progress",10);var c=sessionStorage.getItem("progress");this.updateProgressBar(c),o.default.minification.startCheck(c).then(function(e){void 0!==e.steps&&null===sessionStorage.getItem("steps")&&sessionStorage.setItem("steps",e.steps),i.minificationStarted=!0,i.checkFiles(t)})}},updateProgressBar:function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t>100&&(t=100),e(".wphb-scan-progress .wphb-scan-progress-text span").text(t+"%"),t>=90&&e(".wphb-progress-state .wphb-progress-state-text").text("Finalizing..."),n&&e(".wphb-progress-state .wphb-progress-state-text").text("Cancelling..."),e(".wphb-scan-progress .wphb-scan-progress-bar span").width(t+"%")},cancelScan:function(){var e=this;o.default.minification.cancelScan().then(function(){sessionStorage.clear(),e.updateProgressBar(0,!0),window.location.href=(0,s.getLink)("minification")})}},WPHB_Admin.minification.Row=a.default,WPHB_Admin.minification.RowsCollection=l.default}(jQuery)},function(e,t,n){"use strict";var i=n(0),r=function(e){return e&&e.__esModule?e:{default:e}}(i);!function(e){WPHB_Admin.performance={module:"performance",iteration:0,progress:0,init:function(){var t=this,n=e("body");wphbPerformanceStrings&&(this.strings=wphbPerformanceStrings),this.$runTestButton=e("#run-performance-test");var i=e(".performance-report-table");i.off("click","button"),i.on("click","tr.wphb-performance-report-item",function(t){t.preventDefault();var n=e(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(),e(this).attr("disabled",!0),t.performanceTest(t.strings.finishedTestURLsLink)});var o=window.location.hash;if(o){var s=e(o);s.length&&s.find(".trigger-additional-content").trigger("click")}return e('select[name="email-frequency"]').change(function(){"1"===e(this).val()?e(this).closest(".schedule-box").find("div.days-container").hide():e(this).closest(".schedule-box").find("div.days-container").show()}).change(),n.on("click",".wphb-remove-recipient",function(t){t.preventDefault(),e(this).closest(".recipient").remove(),e(".scan-settings").find("input[id='scan_recipient'][value="+e(this).attr("data-id")+"]").remove()}),e("#add-receipt").click(function(){var n=e("#wphb-username-search").val(),i=e("#wphb-first-name").val();return r.default.performance.addRecipient(n,i).then(function(i){var r=e('<div class="recipient"/>'),o=e("<img/>").attr({src:i.avatar,width:"30"}),s=e("<span/>").html(i.name);r.append('<span class="name"/>'),r.find(".name").append(o,s),r.append(e('<span class="email"/>').html(n)),r.append(e("<a/>").attr({"data-id":i.user_id,class:"remove float-r wphb-remove-recipient",href:"#",alt:t.strings.removeButtonText}).html('<i class="dev-icon dev-icon-cross"></i>')),e("<input>").attr({type:"hidden",id:"scan_recipient",name:"email-recipients[]",value:JSON.stringify({email:i.email,name:i.name})}).appendTo(r),e(".receipt .recipients").append(r),e("#wphb-username-search").val(""),e("#wphb-first-name").val("")}).catch(function(e){alert(e.message)}),!1}),n.on("submit",".scan-frm",function(n){n.preventDefault();var i=e(this).serialize(),o=e(this);return o.find(".button").attr("disabled","disabled"),r.default.performance.saveReportsSettings(i).then(function(){o.find(".button").removeAttr("disabled"),t.showUpdateMessage()}),!1}),this},showUpdateMessage:function(){var t=e("#wphb-notice-performance-report-settings-updated");window.scrollTo(0,0),t.slideDown(),setTimeout(function(){t.slideUp()},5e3)},performanceTest:function(e){var t=this;void 0===e&&(e=!1),t.updateProgressBar(),r.default.performance.runTest().then(function(n){n.finished?e&&(window.location=e):window.setTimeout(function(){t.performanceTest(e)},5e3)})},updateProgressBar:function(){this.progress<90&&(this.progress+=35),this.progress>100&&(this.progress=90),e(".wphb-scan-progress .wphb-scan-progress-text span").text(this.progress+"%"),e(".wphb-scan-progress .wphb-scan-progress-bar span").attr("style","width:"+this.progress+"%")}}}(jQuery)},function(e,t,n){"use strict";!function(e){WPHB_Admin.uptime={module:"uptime",$dataRangeSelector:null,chartData:null,timer:null,$spinner:null,init:function(){this.$spinner=e(".spinner"),this.strings=wphbUptimeStrings,this.$dataRangeSelector=e("#wphb-uptime-data-range"),this.chartData=e("#uptime-chart-json").val(),this.$disableUptime=e("#wphb-disable-uptime"),this.$dataRangeSelector.change(function(){window.location.href=e(this).find(":selected").data("url")});var t=this;this.$disableUptime.change(function(){t.$spinner.css("visibility","visible"),e(this).is(":checked")&&t.timer?(clearTimeout(t.timer),t.$spinner.css("visibility","hidden")):t.timer=setTimeout(function(){location.href=t.strings.disableUptimeURL},3e3)}),this.drawChart(),e("#uptime-re-check-status").on("click",function(e){e.preventDefault(),location.reload()})},drawChart:function(){var t=new google.visualization.DataTable;t.addColumn("datetime","Day"),t.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);t.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(t,r),e(window).resize(function(){o.draw(t,r)})}}}(jQuery)},function(e,t,n){"use strict";n(24),n(26),n(23),n(19),n(25),n(22),n(21),n(27),n(20),n(18)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(e,t,n){var i=e,r=t.toLowerCase(),o=!1,s=!1,c=!0,a=i.find(".toggle-include"),u=i.find(".toggle-combine"),l=i.find(".toggle-minify"),f=i.find(".toggle-position-footer"),p=i.find(".toggle-cross > i");return n&&(o=n.toLowerCase()),{hide:function(){i.addClass("out-of-filter"),c=!1},show:function(){i.removeClass("out-of-filter"),c=!0},getElement:function(){return i},getId:function(){return i.attr("id")},getFilter:function(){return r},matchFilter:function(e){return""===e||(e=e.toLowerCase(),r.search(e)>-1)},matchSecondaryFilter:function(e){return""===e||!!o&&(e=e.toLowerCase(),o===e)},isVisible:function(){return c},isSelected:function(){return s},select:function(){s=!0},unSelect:function(){s=!1},change:function(e,t){switch(e){case"minify":l.prop("checked",t);break;case"combine":u.prop("checked",t);break;case"include":p.removeClass(),a.prop("checked",t),t?(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",t)}}}};t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(){var e=[],t="",n="";return{push:function(t){"object"===(void 0===t?"undefined":i(t))&&e.push(t)},getItems:function(){return e},getItem:function(t){return!!e[t]&&e[t]},getItemById:function(t,n){var i=!1;for(var r in e)if("wphb-file-"+t+"-"+n===e[r].getId()){i=e[r];break}return i},getVisibleItems:function(){var t=[];for(var n in e)e[n].isVisible()&&t.push(e[n]);return t},getSelectedItems:function(){var t=[];for(var n in e)e[n].isVisible()&&e[n].isSelected()&&t.push(e[n]);return t},addFilter:function(e,i){"secondary"===i?n=e:t=e},applyFilters:function(){for(var i in e)e[i]&&(e[i].matchFilter(t)&&e[i].matchSecondaryFilter(n)?e[i].show():e[i].hide())}}};t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.__=function(e){return wphb.strings[e]||""},t.getLink=function(e){return wphb.links[e]||""}},function(e,t){function n(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}e.exports=n},function(e,t,n){function i(e,t){var n=s(e),i=!n&&o(e),l=!n&&!i&&c(e),p=!n&&!i&&!l&&u(e),d=n||i||l||p,h=d?r(e.length,String):[],v=h.length;for(var b in e)!t&&!f.call(e,b)||d&&("length"==b||l&&("offset"==b||"parent"==b)||p&&("buffer"==b||"byteLength"==b||"byteOffset"==b)||a(b,v))||h.push(b);return h}var r=n(40),o=n(60),s=n(61),c=n(62),a=n(11),u=n(63),l=Object.prototype,f=l.hasOwnProperty;e.exports=i},function(e,t,n){function i(e){return o(e)&&r(e)==s}var r=n(1),o=n(5),s="[object Arguments]";e.exports=i},function(e,t,n){function i(e){return!(!s(e)||o(e))&&(r(e)?h:u).test(c(e))}var r=n(15),o=n(49),s=n(4),c=n(57),a=/[\\^$.*+?()[\]{}|]/g,u=/^\[object .+?Constructor\]$/,l=Function.prototype,f=Object.prototype,p=l.toString,d=f.hasOwnProperty,h=RegExp("^"+p.call(d).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=i},function(e,t,n){function i(e){return s(e)&&o(e.length)&&!!c[r(e)]}var r=n(1),o=n(16),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,e.exports=i},function(e,t,n){function i(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))c.call(e,n)&&"constructor"!=n&&t.push(n);return t}var r=n(12),o=n(50),s=Object.prototype,c=s.hasOwnProperty;e.exports=i},function(e,t,n){function i(e,t){return s(o(e,t,r),e+"")}var r=n(14),o=n(54),s=n(55);e.exports=i},function(e,t,n){var i=n(59),r=n(9),o=n(14),s=r?function(e,t){return r(e,"toString",{configurable:!0,enumerable:!1,value:i(t),writable:!0})}:o;e.exports=s},function(e,t){function n(e,t){for(var n=-1,i=Array(e);++n<e;)i[n]=t(n);return i}e.exports=n},function(e,t){function n(e){return function(t){return e(t)}}e.exports=n},function(e,t,n){function i(e,t,n,i){var s=!n;n||(n={});for(var c=-1,a=t.length;++c<a;){var u=t[c],l=i?i(n[u],e[u],u,n,e):void 0;void 0===l&&(l=e[u]),s?o(n,u,l):r(n,u,l)}return n}var r=n(7),o=n(8);e.exports=i},function(e,t,n){var i=n(2),r=i["__core-js_shared__"];e.exports=r},function(e,t,n){function i(e){return r(function(t,n){var i=-1,r=n.length,s=r>1?n[r-1]:void 0,c=r>2?n[2]:void 0;for(s=e.length>3&&"function"==typeof s?(r--,s):void 0,c&&o(n[0],n[1],c)&&(s=r<3?void 0:s,r=1),t=Object(t);++i<r;){var a=n[i];a&&e(t,a,i,s)}return t})}var r=n(38),o=n(48);e.exports=i},function(e,t,n){function i(e,t){var n=o(e,t);return r(n)?n:void 0}var r=n(35),o=n(47);e.exports=i},function(e,t,n){function i(e){var t=s.call(e,a),n=e[a];try{e[a]=void 0;var i=!0}catch(e){}var r=c.call(e);return i&&(t?e[a]=n:delete e[a]),r}var r=n(6),o=Object.prototype,s=o.hasOwnProperty,c=o.toString,a=r?r.toStringTag:void 0;e.exports=i},function(e,t){function n(e,t){return null==e?void 0:e[t]}e.exports=n},function(e,t,n){function i(e,t,n){if(!c(n))return!1;var i=typeof t;return!!("number"==i?o(n)&&s(t,n.length):"string"==i&&t in n)&&r(n[t],e)}var r=n(13),o=n(3),s=n(11),c=n(4);e.exports=i},function(e,t,n){function i(e){return!!o&&o in e}var r=n(43),o=function(){var e=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();e.exports=i},function(e,t,n){var i=n(53),r=i(Object.keys,Object);e.exports=r},function(e,t,n){(function(e){var i=n(10),r="object"==typeof t&&t&&!t.nodeType&&t,o=r&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===r,c=s&&i.process,a=function(){try{return c&&c.binding&&c.binding("util")}catch(e){}}();e.exports=a}).call(t,n(17)(e))},function(e,t){function n(e){return r.call(e)}var i=Object.prototype,r=i.toString;e.exports=n},function(e,t){function n(e,t){return function(n){return e(t(n))}}e.exports=n},function(e,t,n){function i(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var i=arguments,s=-1,c=o(i.length-t,0),a=Array(c);++s<c;)a[s]=i[t+s];s=-1;for(var u=Array(t+1);++s<t;)u[s]=i[s];return u[t]=n(a),r(e,this,u)}}var r=n(32),o=Math.max;e.exports=i},function(e,t,n){var i=n(39),r=n(56),o=r(i);e.exports=o},function(e,t){function n(e){var t=0,n=0;return function(){var s=o(),c=r-(s-n);if(n=s,c>0){if(++t>=i)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var i=800,r=16,o=Date.now;e.exports=n},function(e,t){function n(e){if(null!=e){try{return r.call(e)}catch(e){}try{return e+""}catch(e){}}return""}var i=Function.prototype,r=i.toString;e.exports=n},function(e,t,n){var i=n(7),r=n(42),o=n(44),s=n(3),c=n(12),a=n(64),u=Object.prototype,l=u.hasOwnProperty,f=o(function(e,t){if(c(t)||s(t))return void r(t,a(t),e);for(var n in t)l.call(t,n)&&i(e,n,t[n])});e.exports=f},function(e,t){function n(e){return function(){return e}}e.exports=n},function(e,t,n){var i=n(34),r=n(5),o=Object.prototype,s=o.hasOwnProperty,c=o.propertyIsEnumerable,a=i(function(){return arguments}())?i:function(e){return r(e)&&s.call(e,"callee")&&!c.call(e,"callee")};e.exports=a},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){(function(e){var i=n(2),r=n(65),o="object"==typeof t&&t&&!t.nodeType&&t,s=o&&"object"==typeof e&&e&&!e.nodeType&&e,c=s&&s.exports===o,a=c?i.Buffer:void 0,u=a?a.isBuffer:void 0,l=u||r;e.exports=l}).call(t,n(17)(e))},function(e,t,n){var i=n(36),r=n(41),o=n(51),s=o&&o.isTypedArray,c=s?r(s):i;e.exports=c},function(e,t,n){function i(e){return s(e)?r(e):o(e)}var r=n(33),o=n(37),s=n(3);e.exports=i},function(e,t){function n(){return!1}e.exports=n},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n}]);
 
 
 
 
 
 
 
2
  //# 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.i=function(t){return t},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=29)}([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(33).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={caching:{setExpiration:function(e,n){return t("wphb_caching_set_expiration",{type:e,value:n},"POST")},setServer:function(e){return t("wphb_caching_set_server_type",{value:e},"POST")},reloadSnippets:function(e){return t("wphb_caching_reload_snippet",{type:e},"POST").then(function(t){return t})}},cloudflare:{connect:function(e,n,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(e){return t("wphb_minification_start_check",{progress:e},"POST").then(function(t){return t})},checkStep:function(e,n){return t("wphb_minification_check_step",{progress:e,step:n},"POST").then(function(t){return t})},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(60),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(6),o=n(48),s=n(54),c="[object Null]",a="[object Undefined]",u=i?i.toStringTag:void 0;t.exports=r},function(t,e,n){var r=n(10),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();t.exports=o},function(t,e,n){function r(t){return null!=t&&o(t.length)&&!i(t)}var i=n(15),o=n(16);t.exports=r},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 r=n(2),i=r.Symbol;t.exports=i},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(8),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(9);t.exports=r},function(t,e,n){var r=n(47),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();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(17))},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){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 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(4),s="[object AsyncFunction]",c="[object Function]",a="[object GeneratorFunction]",u="[object Proxy]";t.exports=r},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){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";var r=n(0),i=function(t){return t&&t.__esModule?t:{default:t}}(r);!function(t){WPHB_Admin.caching={module:"caching",selectedServer:"",$serverSelector:null,$serverInstructions:[],$expirySelectors:[],$snippets:[],init:function(){var e=this,n=t("#wphb-box-caching-enable"),r=n.find(".box-content"),o=r.find(".spinner"),s=n.find(".box-footer");return wphbCachingStrings&&(e.strings=wphbCachingStrings),this.$serverSelector=t("#wphb-server-type"),this.selectedServer=this.$serverSelector.val(),e.$snippets.apache=t("#wphb-code-snippet-apache").find("pre").first(),e.$snippets.nginx=t("#wphb-code-snippet-nginx").find("pre").first(),t(".wphb-server-instructions").each(function(){e.$serverInstructions[t(this).data("server")]=t(this)}),t(".wphb-expiry-select").each(function(){var n=t(this).data("type");n&&t(this).change(function(){r.find(".wphb-content").hide(),s.hide(),o.fadeIn(),t(".wphb-notice").hide(),function(r){var o=t(r).val();i.default.caching.setExpiration(n,o).then(function(){e.reloadSnippets()})}(this)})}),this.showServerInstructions(this.selectedServer),this.$serverSelector.change(function(){var n=t(this).val();e.hideCurrentInstructions(),e.showServerInstructions(n),e.setServer(n),e.selectedServer=n}),t("#toggle-apache-instructions").click(function(e){e.preventDefault(),t(".apache-instructions").slideToggle()}),t("#toggle-litespeed-instructions").click(function(e){e.preventDefault(),t(".litespeed-instructions").slideToggle()}),this},setServer:function(t){i.default.caching.setServer(t)},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()},reloadSnippets:function(){var e=this;for(var n in e.$snippets)e.$snippets.hasOwnProperty(n)&&i.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 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("#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();i.default.cloudflare.setExpiration(n).then(function(){window.location.reload()})},displaySpinner:function(){this.$spinner.css("visibility","visible")}}}(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("#wphb-box-dashboard-cloudflare").find(".box-title .buttons"),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.text(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";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;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)}),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"}),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.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){i.default.caching.setServer(t)}}}(jQuery)},function(t,e,n){"use strict";!function(t){var e={modules:[],init:function(){function e(t){var e=t.find(".wphb-score-result-label"),n=parseInt(e.text(),10)||100,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)}),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 r(t){return t&&t.__esModule?t:{default:t}}var i=n(0),o=r(i),s=n(32),c=n(30),a=r(c),u=n(31),l=r(u);!function(t){WPHB_Admin.minification={$checkFilesButton:null,$checkFilesResultsContainer:null,module:"minification",checkURLSList:null,checkedURLS:0,$spinner:null,init:function(){var e=this;t("#wphb-minification-filter-button").on("click",function(e){e.preventDefault(),t("#wphb-minification-filter").toggle("slow")}),this.$checkFilesButton=t("#check-files"),this.$disableMinification=t("#wphb-disable-minification"),this.$spinner=t(".spinner"),this.$checkFilesButton.length&&this.$checkFilesButton.click(function(n){n.preventDefault(),window.WDP.showOverlay("#check-files-modal",{class:"wphb-modal small wphb-progress-modal no-close"}),t(this).attr("disabled",!0),e.checkFiles((0,s.getLink)("minification"))}),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.$disableMinification.change(function(){var n=t(this).is(":checked");e.$spinner.css("visibility","visible"),e.timer&&n&&(clearTimeout(e.timer),e.$spinner.css("visibility","hidden")),e.timer=setTimeout(function(){o.default.minification.toggleMinification(n).then(function(){location.reload()})},3e3)}),this.rowsCollection=new WPHB_Admin.minification.RowsCollection,t(".wphb-border-row").each(function(n,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")),e.rowsCollection.push(i)}),t("#wphb-s").keyup(function(){e.rowsCollection.addFilter(t(this).val(),"primary"),e.rowsCollection.applyFilters()}),t("#wphb-secondary-filter").change(function(){e.rowsCollection.addFilter(t(this).val(),"secondary"),e.rowsCollection.applyFilters()}),t(".filter-toggles").change(function(){var n=t(this),r=n.data("toggles"),i=n.prop("checked"),o=e.rowsCollection.getVisibleItems();for(var s in o)o[s].change(r,i)}),t("input.wphb-minification-file-selector").click(function(){var n=t(this),r=e.rowsCollection.getItemById(n.data("type"),n.data("handle"));r&&(n.is(":checked")?r.select():r.unSelect())}),t("#minification-bulk-file").click(function(){var n=t(this),r=e.rowsCollection.getItems();for(var i in r)r.hasOwnProperty(i)&&(n.is(":checked")?r[i].select():r[i].unSelect())}),t(".toggle-cross").on("click",function(){var n=t(this),r=n.find("input.toggle-include"),i=e.rowsCollection.getItemById(n.data("type"),n.data("handle"));i&&(i.change("include",!r.prop("checked")),i.getElement().find("input:not(.toggle-include)").prop("disabled",!r.prop("checked")))});var n=t("input[type=checkbox][name=use_cdn]");n.change(function(){var e=t(this).prop("checked");n.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},checkFiles:function(e){var n=this,r=this;if(void 0===e&&(e=!1),r.minificationStarted){var i=sessionStorage.getItem("progress"),s=Math.round(80/sessionStorage.getItem("steps"));o.default.minification.checkStep(i,s).then(function(i){if(void 0!==i.finished){if(i.finished&&e)sessionStorage.clear(),n.updateProgressBar(100),!0===i.show_cdn&&t("#enable-cdn-modal").length?WDP.showOverlay("#enable-cdn-modal",{class:"wphb-modal small wphb-progress-modal no-close"}):window.location.href=e;else if(!i.finished){var o=parseInt(sessionStorage.getItem("progress"))+Math.round(80/sessionStorage.getItem("steps"));sessionStorage.setItem("progress",o),n.updateProgressBar(o),window.setTimeout(function(){r.checkFiles(e)},3e3)}}else window.location.href=e})}else{null===sessionStorage.getItem("progress")&&sessionStorage.setItem("progress",10);var c=sessionStorage.getItem("progress");this.updateProgressBar(c),o.default.minification.startCheck(c).then(function(t){void 0!==t.steps&&null===sessionStorage.getItem("steps")&&sessionStorage.setItem("steps",t.steps),r.minificationStarted=!0,r.checkFiles(e)})}},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+"%"),e>=90&&t(".wphb-progress-state .wphb-progress-state-text").text("Finalizing..."),n&&t(".wphb-progress-state .wphb-progress-state-text").text("Cancelling..."),t(".wphb-scan-progress .wphb-scan-progress-bar span").width(e+"%")},cancelScan:function(){var t=this;o.default.minification.cancelScan().then(function(){sessionStorage.clear(),t.updateProgressBar(0,!0),window.location.href=(0,s.getLink)("minification")})}},WPHB_Admin.minification.Row=a.default,WPHB_Admin.minification.RowsCollection=l.default}(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.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(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";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 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"),p=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"include":p.removeClass(),a.prop("checked",e),e?(r.removeClass("disabled"),p.addClass("dev-icon dev-icon-cross"),a.attr("checked",!0)):(r.addClass("disabled"),p.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});e.__=function(t){return wphb.strings[t]||""},e.getLink=function(t){return wphb.links[t]||""}},function(t,e,n){(function(e,r){/*!
2
+ * @overview es6-promise - a tiny implementation of Promises/A+.
3
+ * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
4
+ * @license Licensed under MIT license
5
+ * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
6
+ * @version 4.1.1
7
+ */
8
+ !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){z=t}function s(t){V=t}function c(){return void 0!==Q?function(){Q(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(p);void 0===i[tt]&&A(i);var o=r._state;return o?function(){var t=n[o-1];V(function(){return $(o,i,t,r._result)})}():j(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(p);return y(n,t),n}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function v(t){try{return t.then}catch(t){return 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){V(function(t){var r=!1,i=m(n,e,function(n){r||(r=!0,e!==n?y(t,n):S(t,n))},function(e){r||(r=!0,x(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&i&&(r=!0,x(t,i))},t)}function g(t,e){e._state===nt?S(t,e._result):e._state===rt?x(t,e._result):j(e,void 0,function(e){return y(t,e)},function(e){return x(t,e)})}function w(t,e,n){e.constructor===t.constructor&&n===l&&e.constructor.resolve===f?g(t,e):n===it?(x(t,it.error),it.error=null):void 0===n?S(t,e):i(n)?b(t,e,n):S(t,e)}function y(e,n){e===n?x(e,h()):t(n)?w(e,n,v(n)):S(e,n)}function _(t){t._onerror&&t._onerror(t._result),k(t)}function S(t,e){t._state===et&&(t._result=e,t._state=nt,0!==t._subscribers.length&&V(k,t))}function x(t,e){t._state===et&&(t._state=rt,t._result=e,V(_,t))}function j(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&&V(k,t)}function k(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?$(n,r,i,o):i(o);t._subscribers.length=0}}function T(){this.error=null}function P(t,e){try{return t(e)}catch(t){return ot.error=t,ot}}function $(t,e,n,r){var o=i(n),s=void 0,c=void 0,a=void 0,u=void 0;if(o){if(s=P(n,r),s===ot?(u=!0,c=s.error,s.error=null):a=!0,e===s)return void x(e,d())}else s=r,a=!0;e._state!==et||(o&&a?y(e,s):u?x(e,c):t===nt?S(e,s):t===rt&&x(e,s))}function O(t,e){try{e(function(e){y(t,e)},function(e){x(t,e)})}catch(e){x(t,e)}}function C(){return st++}function A(t){t[tt]=st++,t._state=void 0,t._result=void 0,t._subscribers=[]}function I(t,e){this._instanceConstructor=t,this.promise=new t(p),this.promise[tt]||A(this.promise),H(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,B())}function B(){return new Error("Array Methods must be provided an Array")}function D(t){return new I(this,t).promise}function M(t){var e=this;return new e(H(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 F(t){var e=this,n=new e(p);return x(n,t),n}function E(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function L(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function R(t){this[tt]=C(),this._result=this._state=void 0,this._subscribers=[],p!==t&&("function"!=typeof t&&E(),this instanceof R?O(this,t):L())}function W(){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=R}var U=void 0;U=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var H=U,N=0,Q=void 0,z=void 0,V=function(t,e){X[N]=t,X[N+1]=e,2===(N+=2)&&(z?z(u):Z())},q="undefined"!=typeof window?window:void 0,J=q||{},K=J.MutationObserver||J.WebKitMutationObserver,Y="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=Y?function(){return function(){return e.nextTick(u)}}():K?function(){var t=0,e=new K(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===q?function(){try{var t=n(69);return Q=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 T,ot=new T,st=0;return I.prototype._enumerate=function(t){for(var e=0;this._state===et&&e<t.length;e++)this._eachEntry(t[e],e)},I.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===R){var o=new n(p);w(o,t,i),this._willSettleAt(o,e)}else this._willSettleAt(new n(function(e){return e(t)}),e)}else this._willSettleAt(r(t),e)},I.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===et&&(this._remaining--,t===rt?x(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},I.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){return n._settledAt(nt,e,t)},function(t){return n._settledAt(rt,e,t)})},R.all=D,R.race=M,R.resolve=f,R.reject=F,R._setScheduler=o,R._setAsap=s,R._asap=V,R.prototype={constructor:R,then:l,catch:function(t){return this.then(null,t)}},R.polyfill=W,R.Promise=R,R})}).call(e,n(68),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 r(t,e){var n=s(t),r=!n&&o(t),l=!n&&!r&&c(t),p=!n&&!r&&!l&&u(t),h=n||r||l||p,d=h?i(t.length,String):[],v=d.length;for(var m in t)!e&&!f.call(t,m)||h&&("length"==m||l&&("offset"==m||"parent"==m)||p&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||a(m,v))||d.push(m);return d}var i=n(42),o=n(62),s=n(63),c=n(64),a=n(11),u=n(65),l=Object.prototype,f=l.hasOwnProperty;t.exports=r},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,n){function r(t){return!(!s(t)||o(t))&&(i(t)?d:u).test(c(t))}var i=n(15),o=n(51),s=n(4),c=n(59),a=/[\\^$.*+?()[\]{}|]/g,u=/^\[object .+?Constructor\]$/,l=Function.prototype,f=Object.prototype,p=l.toString,h=f.hasOwnProperty,d=RegExp("^"+p.call(h).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=r},function(t,e,n){function r(t){return s(t)&&o(t.length)&&!!c[i(t)]}var i=n(1),o=n(16),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,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(12),o=n(52),s=Object.prototype,c=s.hasOwnProperty;t.exports=r},function(t,e,n){function r(t,e){return s(o(t,e,i),t+"")}var i=n(14),o=n(56),s=n(57);t.exports=r},function(t,e,n){var r=n(61),i=n(9),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,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}t.exports=n},function(t,e){function n(t){return function(e){return 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(7),o=n(8);t.exports=r},function(t,e,n){var r=n(2),i=r["__core-js_shared__"];t.exports=i},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(40),o=n(50);t.exports=r},function(t,e,n){function r(t,e){var n=o(t,e);return i(n)?n:void 0}var i=n(37),o=n(49);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(6),o=Object.prototype,s=o.hasOwnProperty,c=o.toString,a=i?i.toStringTag:void 0;t.exports=r},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){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(3),s=n(11),c=n(4);t.exports=r},function(t,e,n){function r(t){return!!o&&o in t}var i=n(45),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(55),i=r(Object.keys,Object);t.exports=i},function(t,e,n){(function(t){var r=n(10),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){function n(t){return i.call(t)}var r=Object.prototype,i=r.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 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(34),o=Math.max;t.exports=r},function(t,e,n){var r=n(41),i=n(58),o=i(r);t.exports=o},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){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,n){var r=n(7),i=n(44),o=n(46),s=n(3),c=n(12),a=n(66),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){function n(t){return function(){return t}}t.exports=n},function(t,e,n){var r=n(36),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){var n=Array.isArray;t.exports=n},function(t,e,n){(function(t){var r=n(2),i=n(67),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,n){var r=n(38),i=n(43),o=n(53),s=o&&o.isTypedArray,c=s?i(s):r;t.exports=c},function(t,e,n){function r(t){return s(t)?i(t):o(t)}var i=n(35),o=n(39),s=n(3);t.exports=r},function(t,e){function n(){return!1}t.exports=n},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&&h&&(v=!1,h.length?d=h.concat(d):m=-1,d.length&&c())}function c(){if(!v){var t=i(s);v=!0;for(var e=d.length;e;){for(h=d,d=[];++m<e;)h&&h[m].run();m=-1,e=d.length}h=null,v=!1,o(t)}}function a(t,e){this.fun=t,this.array=e}function u(){}var l,f,p=t.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{f="function"==typeof clearTimeout?clearTimeout:r}catch(t){f=r}}();var h,d=[],v=!1,m=-1;p.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];d.push(new a(t,e)),1!==d.length||v||i(c)},a.prototype.run=function(){this.fun.apply(null,this.array)},p.title="browser",p.browser=!0,p.env={},p.argv=[],p.version="",p.versions={},p.on=u,p.addListener=u,p.once=u,p.off=u,p.removeListener=u,p.removeAllListeners=u,p.emit=u,p.prependListener=u,p.prependOnceListener=u,p.listeners=function(t){return[]},p.binding=function(t){throw new Error("process.binding is not supported")},p.cwd=function(){return"/"},p.chdir=function(t){throw new Error("process.chdir is not supported")},p.umask=function(){return 0}},function(t,e){}]);
9
  //# 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 1371ae49cdc9501be886","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/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/utils/helpers.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:///(webpack)/buildin/global.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","Fetcher","request","action","data","arguments","length","undefined","method","nonce","fetchNonce","args","url","fetchUrl","Promise","resolve","reject","jQuery","ajax","done","fail","then","response","checkStatus","ajaxurl","wphb","nonces","HBFetchNonce","methods","caching","setExpiration","type","actionPrefix","setServer","reloadSnippets","cloudflare","connect","step","formData","cfData","purgeCache","dashboard","toggleMinification","skipSetup","minification","toggleCDN","startCheck","progress","checkStep","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","webpackPolyfill","deprecate","paths","children","document","ready","WPHB_Admin","init","_fetcher","_fetcher2","$","selectedServer","$serverSelector","$serverInstructions","$expirySelectors","$snippets","cachingMetabox","cachingContent","find","cachingContentSpinner","cachingFooter","wphbCachingStrings","strings","val","apache","first","nginx","each","change","hide","fadeIn","element","showServerInstructions","hideCurrentInstructions","click","preventDefault","slideToggle","selected","server","show","text","code","updatedFile","location","href","recheckURL","cacheEnabled","htaccessErrorURL","$cfSelector","$spinner","is","connected","setExpiry","selector","displaySpinner","window","reload","css","DashboardCloudFlare","settings","currentStep","apiKey","$stepsContainer","$infoBox","$deactivateButton","renderStep","on","apply","target","bind","$button","attr","showSpinner","$notice","scrollTo","slideDown","setTimeout","slideUp","removeAttr","hideSpinner","template","content","html","submitStep","bindEvents","$howToInstructions","toggle","WDP","wpmuSelect","removeClass","addClass","emptyInfoBox","showInfoBox","$form","serialize","newData","nextStep","redirect","catch","_","memoize","id","compiled","options","evaluate","interpolate","escape","variable","templateSettings","wphbDashboardStrings","CDNcheckbox","prop","showNotice","notice","startQuickSetup","showOverlay","class","runPerformanceTest","getModule","performanceTest","finishedTestURLsLink","gzip","updatePerformanceGraph","$wrap","$item","parseInt","$circle","r","pct","Math","PI","strokeDashoffset","updatePerformanceResultsGraphs","register_events_performance","initModule","utils","membershipModal","open","trigger","post","notices","parent","_interopRequireDefault","_helpers","_Row","_Row2","_RowsCollection","_RowsCollection2","$checkFilesButton","$checkFilesResultsContainer","checkURLSList","checkedURLS","$disableMinification","checkFiles","getLink","confirm","__","cdn_value","timer","clearTimeout","rowsCollection","RowsCollection","index","row","_row","Row","push","keyup","addFilter","applyFilters","what","visibleItems","getVisibleItems","$this","getItemById","select","unSelect","items","getItems","checkbox","getElement","checkboxes","checkedState","checked","innerWidth","minification_resize_rows","debounce","addEventListener","_this","minificationStarted","sessionStorage","getItem","round","finished","clear","updateProgressBar","show_cdn","setItem","steps","cancel","width","_this2","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","uptime","$dataRangeSelector","chartData","wphbUptimeStrings","$disableUptime","disableUptimeURL","drawChart","google","visualization","DataTable","addColumn","chart_array","Date","addRows","chartArea","left","top","height","colors","curveType","legend","position","vAxis","format","viewWindow","min","tooltip","isHtml","series","0","axis","axes","y","Resp","label","chart","LineChart","getElementById","draw","resize","_element","_filter","_filter_sec","$el","filter","toLowerCase","filterSecondary","visible","$include","$combine","$minify","$posFooter","$disableIcon","getId","getFilter","matchFilter","search","matchSecondaryFilter","isVisible","isSelected","currentFilter","currentSecondaryFilter","getSelectedItems","str","screen","links","thisArg","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","result","baseTimes","String","baseIsArguments","argsTag","baseIsNative","isMasked","reIsNative","reIsHostCtor","toSource","reRegExpChar","funcProto","funcToString","toString","RegExp","replace","baseIsTypedArray","typedArrayTags","baseKeys","nativeKeys","baseRest","start","setToString","overRest","constant","baseSetToString","string","iteratee","Array","baseUnary","copyObject","source","props","customizer","isNew","newValue","coreJsData","createAssigner","assigner","sources","guard","isIterateeCall","getValue","isOwn","unmasked","nativeObjectToString","maskSrcKey","uid","exec","keys","IE_PROTO","overArg","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","binding","transform","arg","nativeMax","array","otherArgs","max","shortOut","count","lastCalled","stamp","nativeNow","remaining","HOT_SPAN","HOT_COUNT","now","assign","propertyIsEnumerable","stubFalse","Buffer","nativeIsBuffer","nodeIsTypedArray","g","eval"],"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 = 28);\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__(58);\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 return new Promise(function (resolve, reject) {\n jQuery.ajax(args).done(resolve).fail(reject);\n }).then(function (response) {\n return checkStatus(response);\n });\n }\n\n var methods = {\n /**\n * Caching module actions.\n */\n caching: {\n /**\n * Set expiration for browser caching.\n *\n * @param type File type.\n * @param value Expiry value.\n */\n setExpiration: function setExpiration(type, value) {\n var action = actionPrefix + 'caching_set_expiration';\n return request(action, { type: type, value: value }, 'POST');\n },\n\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: function setServer(value) {\n var action = actionPrefix + 'caching_set_server_type';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: function reloadSnippets(type) {\n var action = actionPrefix + 'caching_reload_snippet';\n return request(action, { type: type }, 'POST').then(function (response) {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n /**\n * Connect to CloudFlare.\n *\n * @param step\n * @param formData\n * @param cfData\n */\n connect: function connect(step, formData, cfData) {\n var action = actionPrefix + 'cloudflare_connect';\n return request(action, { step: step, formData: formData, cfData: cfData }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Set expiry for CloudFlare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: function setExpiration(value) {\n var action = actionPrefix + 'cloudflare_set_expiry';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Purge CloudFlare cache.\n */\n purgeCache: function purgeCache() {\n var action = actionPrefix + 'cloudflare_purge_cache';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'dash_toggle_network_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Skip quick setup.\n */\n skipSetup: function skipSetup() {\n var action = actionPrefix + 'dash_skip_setup';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: function toggleCDN(value) {\n var action = actionPrefix + 'minification_toggle_cdn';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'minification_toggle_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: function startCheck(progress) {\n var action = actionPrefix + 'minification_start_check';\n return request(action, { progress: progress }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: function checkStep(progress, step) {\n var action = actionPrefix + 'minification_check_step';\n return request(action, { progress: progress, step: step }, 'POST').then(function (response) {\n return response;\n });\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__(46),\n objectToString = __webpack_require__(52);\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__(45);\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__(66)))\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\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/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\njQuery(document).ready(function () {\n WPHB_Admin.init();\n});\n\n/***/ }),\n/* 19 */\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.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $expirySelectors: [],\n $snippets: [],\n\n init: function init() {\n var self = this,\n cachingMetabox = $('#wphb-box-caching-enable'),\n cachingContent = cachingMetabox.find('.box-content'),\n cachingContentSpinner = cachingContent.find('.spinner'),\n cachingFooter = cachingMetabox.find('.box-footer');\n\n if (wphbCachingStrings) self.strings = wphbCachingStrings;\n\n this.$serverSelector = $('#wphb-server-type');\n this.selectedServer = this.$serverSelector.val();\n //this.$spinner = $('#wphb-box-caching-enable .spinner');\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n var instructionsList = $('.wphb-server-instructions');\n instructionsList.each(function () {\n self.$serverInstructions[$(this).data('server')] = $(this);\n });\n\n var expirySelectors = $('.wphb-expiry-select');\n\n expirySelectors.each(function () {\n var type = $(this).data('type');\n if (type) {\n $(this).change(function () {\n //self.$spinner.css( 'visibility', 'visible' );\n cachingContent.find('.wphb-content').hide();\n cachingFooter.hide();\n cachingContentSpinner.fadeIn();\n $('.wphb-notice').hide();\n\n // Expiration selector has changed\n (function (element) {\n var value = $(element).val();\n // Change the plugin settings\n _fetcher2.default.caching.setExpiration(type, value).then(function () {\n // And reload the code snippet\n self.reloadSnippets();\n });\n return false;\n })(this);\n });\n }\n });\n\n this.showServerInstructions(this.selectedServer);\n\n this.$serverSelector.change(function () {\n var value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n\n $('#toggle-apache-instructions').click(function (e) {\n e.preventDefault();\n $('.apache-instructions').slideToggle();\n });\n\n $('#toggle-litespeed-instructions').click(function (e) {\n e.preventDefault();\n $('.litespeed-instructions').slideToggle();\n });\n\n return this;\n },\n\n setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n },\n\n hideCurrentInstructions: function hideCurrentInstructions() {\n var selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function showServerInstructions(server) {\n if (typeof this.$serverInstructions[server] !== 'undefined') {\n this.$serverInstructions[server].show();\n }\n\n if ('apache' === server || 'LiteSpeed' === server) {\n $('#enable-cache-wrap').show();\n } else {\n $('#enable-cache-wrap').hide();\n }\n },\n\n reloadSnippets: function reloadSnippets() {\n var self = this;\n var stop = false;\n for (var i in self.$snippets) {\n if (self.$snippets.hasOwnProperty(i)) {\n _fetcher2.default.caching.reloadSnippets(i).then(function (response) {\n if (stop) {\n return;\n }\n\n self.$snippets[response.type].text(response.code);\n\n // Make sure that we only do things when server displayed is the processed one\n if (response.type !== self.selectedServer) {\n return;\n }\n\n if ('apache' === response.type && response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ('apache' === response.type && self.strings.cacheEnabled && !response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-error').show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $('#wphb-notice-code-snippet-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n //self.$spinner.css( 'visibility', 'hidden' );\n });\n }\n }\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 20 */\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/* 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.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 = $('#wphb-box-dashboard-cloudflare').find('.box-title .buttons');\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 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.text(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/* 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.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 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 WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n\n // Run performance test\n var module = WPHB_Admin.getModule('performance');\n module.performanceTest(this.strings.finishedTestURLsLink);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 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.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/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n(function ($) {\n 'use strict';\n\n var WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function init() {\n\n 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/* 25 */\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__(31);\n\nvar _Row = __webpack_require__(29);\n\nvar _Row2 = _interopRequireDefault(_Row);\n\nvar _RowsCollection = __webpack_require__(30);\n\nvar _RowsCollection2 = _interopRequireDefault(_RowsCollection);\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 self = this;\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 // 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 $(this).attr('disabled', true);\n self.checkFiles((0, _helpers.getLink)('minification'));\n });\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 checkFiles: function checkFiles(redirect) {\n var _this = this;\n\n var self = this;\n\n if (typeof redirect === 'undefined') redirect = false;\n\n if (!self.minificationStarted) {\n // Store the progress in session storage to persist during page reloads\n // If there is no previous value, we init one with 10%\n if (sessionStorage.getItem('progress') === null) {\n sessionStorage.setItem('progress', 10);\n }\n\n // Update progress bar\n var progress = sessionStorage.getItem('progress');\n this.updateProgressBar(progress);\n\n // Send an AJAX request that will flag the check files as started\n _fetcher2.default.minification.startCheck(progress).then(function (response) {\n // Set the number of steps to be used in percentage count. Only if not set already.\n if (typeof response.steps !== 'undefined' && sessionStorage.getItem('steps') === null) {\n sessionStorage.setItem('steps', response.steps);\n }\n\n self.minificationStarted = true;\n self.checkFiles(redirect);\n });\n } else {\n var _progress = sessionStorage.getItem('progress');\n var step = Math.round(80 / sessionStorage.getItem('steps'));\n _fetcher2.default.minification.checkStep(_progress, step).then(function (response) {\n if (typeof response.finished !== 'undefined') {\n // Finished\n if (response.finished && redirect) {\n // Clear session storage\n sessionStorage.clear();\n\n // Update progress bar\n _this.updateProgressBar(100);\n\n // Show enable cdn modal only for members\n if (true === response.show_cdn && $('#enable-cdn-modal').length) {\n WDP.showOverlay('#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' });\n } else {\n window.location.href = redirect;\n }\n }\n // Next step\n else if (!response.finished) {\n // Store the progress in session storage to persist during page reloads\n var _progress2 = parseInt(sessionStorage.getItem('progress')) + Math.round(80 / sessionStorage.getItem('steps'));\n sessionStorage.setItem('progress', _progress2);\n\n // Update progress bar.\n _this.updateProgressBar(_progress2);\n\n // Wait 3 seconds before calling again\n window.setTimeout(function () {\n self.checkFiles(redirect);\n }, 3000);\n }\n } else {\n // Error\n window.location.href = redirect;\n }\n });\n } // End else\n }, // End checkFiles\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 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 $('.wphb-scan-progress .wphb-scan-progress-bar span').width(progress + '%');\n },\n\n cancelScan: function cancelScan() {\n var _this2 = this;\n\n _fetcher2.default.minification.cancelScan().then(function () {\n // Clear session storage\n sessionStorage.clear();\n\n _this2.updateProgressBar(0, true);\n\n // Reload page\n window.location.href = (0, _helpers.getLink)('minification');\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/* 26 */\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 $(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/* 27 */\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/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n__webpack_require__(24);\n__webpack_require__(26);\n__webpack_require__(23);\n__webpack_require__(19);\n__webpack_require__(25);\n__webpack_require__(22);\n__webpack_require__(21);\n__webpack_require__(27);\n__webpack_require__(20);\n__webpack_require__(18);\n\n/***/ }),\n/* 29 */\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 $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 '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/* 30 */\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/* 31 */\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/* 32 */\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/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseTimes = __webpack_require__(40),\n isArguments = __webpack_require__(60),\n isArray = __webpack_require__(61),\n isBuffer = __webpack_require__(62),\n isIndex = __webpack_require__(11),\n isTypedArray = __webpack_require__(63);\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/* 34 */\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/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(15),\n isMasked = __webpack_require__(49),\n isObject = __webpack_require__(4),\n toSource = __webpack_require__(57);\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/* 36 */\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/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isPrototype = __webpack_require__(12),\n nativeKeys = __webpack_require__(50);\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/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar identity = __webpack_require__(14),\n overRest = __webpack_require__(54),\n setToString = __webpack_require__(55);\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/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar constant = __webpack_require__(59),\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/* 40 */\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/* 41 */\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/* 42 */\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/* 43 */\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/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseRest = __webpack_require__(38),\n isIterateeCall = __webpack_require__(48);\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/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsNative = __webpack_require__(35),\n getValue = __webpack_require__(47);\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/* 46 */\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/* 47 */\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/* 48 */\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/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar coreJsData = __webpack_require__(43);\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/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar overArg = __webpack_require__(53);\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/* 51 */\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__(17)(module)))\n\n/***/ }),\n/* 52 */\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/* 53 */\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/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar apply = __webpack_require__(32);\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/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseSetToString = __webpack_require__(39),\n shortOut = __webpack_require__(56);\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/* 56 */\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/* 57 */\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/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(7),\n copyObject = __webpack_require__(42),\n createAssigner = __webpack_require__(44),\n isArrayLike = __webpack_require__(3),\n isPrototype = __webpack_require__(12),\n keys = __webpack_require__(64);\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/* 59 */\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/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsArguments = __webpack_require__(34),\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/* 61 */\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/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(2),\n stubFalse = __webpack_require__(65);\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__(17)(module)))\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsTypedArray = __webpack_require__(36),\n baseUnary = __webpack_require__(41),\n nodeUtil = __webpack_require__(51);\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/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeKeys = __webpack_require__(33),\n baseKeys = __webpack_require__(37),\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/* 65 */\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/* 66 */\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/******/ ]);\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 = 28);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 1371ae49cdc9501be886","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 return new Promise( ( resolve, reject ) => {\n jQuery.ajax( args ).done( resolve ).fail( reject );\n })\n .then( ( response ) => checkStatus( response ) );\n\n }\n\n const methods = {\n /**\n * Caching module actions.\n */\n caching: {\n /**\n * Set expiration for browser caching.\n *\n * @param type File type.\n * @param value Expiry value.\n */\n setExpiration: ( type, value ) => {\n const action = actionPrefix + 'caching_set_expiration';\n return request( action, { type, value }, 'POST' );\n },\n\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: ( value ) => {\n const action = actionPrefix + 'caching_set_server_type';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: ( type ) => {\n const action = actionPrefix + 'caching_reload_snippet';\n return request( action, { type }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n\t\t\t/**\n\t\t\t * Connect to CloudFlare.\n\t\t\t *\n\t\t\t * @param step\n\t\t\t * @param formData\n\t\t\t * @param cfData\n\t\t\t */\n\t\t\tconnect: ( step, formData, cfData ) => {\n\t\t\t\tconst action = actionPrefix + 'cloudflare_connect';\n return request( action, { step, formData, cfData }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Set expiry for CloudFlare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: ( value ) => {\n const action = actionPrefix + 'cloudflare_set_expiry';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Purge CloudFlare cache.\n\t\t\t */\n\t\t\tpurgeCache: () => {\n const action = actionPrefix + 'cloudflare_purge_cache';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'dash_toggle_network_minification';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Skip quick setup.\n\t\t\t */\n\t\t\tskipSetup: () => {\n const action = actionPrefix + 'dash_skip_setup';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: ( value ) => {\n const action = actionPrefix + 'minification_toggle_cdn';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'minification_toggle_minification';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: ( progress ) => {\n const action = actionPrefix + 'minification_start_check';\n return request( action, { progress }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: ( progress, step ) => {\n const action = actionPrefix + 'minification_check_step';\n return request( action, { progress, step }, 'POST' )\n .then( ( response ) => {\n return response;\n });\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 /**\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","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 = 17\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 Fetcher from './utils/fetcher';\n\n( function( $ ) {\n 'use strict';\n WPHB_Admin.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $expirySelectors: [],\n $snippets: [],\n\n init: function () {\n let self = this,\n cachingMetabox = $('#wphb-box-caching-enable'),\n cachingContent = cachingMetabox.find('.box-content'),\n cachingContentSpinner = cachingContent.find('.spinner'),\n cachingFooter = cachingMetabox.find('.box-footer');\n\n if ( wphbCachingStrings )\n self.strings = wphbCachingStrings;\n\n this.$serverSelector = $( '#wphb-server-type' );\n this.selectedServer = this.$serverSelector.val();\n //this.$spinner = $('#wphb-box-caching-enable .spinner');\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n let instructionsList = $( '.wphb-server-instructions' );\n instructionsList.each( function() {\n self.$serverInstructions[ $(this).data('server') ] = $(this);\n });\n\n let expirySelectors = $( '.wphb-expiry-select' );\n\n expirySelectors.each( function() {\n const type = $(this).data('type');\n if ( type ) {\n $(this).change( function() {\n //self.$spinner.css( 'visibility', 'visible' );\n cachingContent.find('.wphb-content').hide();\n cachingFooter.hide();\n cachingContentSpinner.fadeIn();\n $('.wphb-notice').hide();\n\n // Expiration selector has changed\n ( function( element ) {\n const value = $( element ).val();\n // Change the plugin settings\n Fetcher.caching.setExpiration( type, value )\n .then( () => {\n // And reload the code snippet\n self.reloadSnippets();\n });\n return false;\n })( this );\n });\n }\n\n });\n\n this.showServerInstructions( this.selectedServer );\n\n this.$serverSelector.change( function() {\n let value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions( value );\n self.setServer(value);\n self.selectedServer = value;\n });\n\n $( '#toggle-apache-instructions').click( function( e ) {\n e.preventDefault();\n $('.apache-instructions').slideToggle();\n });\n\n $( '#toggle-litespeed-instructions').click( function( e ) {\n e.preventDefault();\n $('.litespeed-instructions').slideToggle();\n });\n\n\n return this;\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n\n hideCurrentInstructions: function() {\n let selected = this.selectedServer;\n if ( this.$serverInstructions[ selected ] ) {\n this.$serverInstructions[ selected ].hide();\n }\n },\n\n showServerInstructions: function( server ) {\n if ( typeof this.$serverInstructions[ server ] !== 'undefined' ) {\n this.$serverInstructions[ server ].show();\n }\n\n if ( 'apache' === server || 'LiteSpeed' === server ) {\n $( '#enable-cache-wrap').show();\n }\n else {\n $( '#enable-cache-wrap').hide();\n }\n },\n\n reloadSnippets: function() {\n let self = this;\n let stop = false;\n for ( let i in self.$snippets ) {\n if ( self.$snippets.hasOwnProperty( i ) ) {\n Fetcher.caching.reloadSnippets( i )\n .then( ( response ) => {\n if ( stop ) {\n return;\n }\n\n self.$snippets[response.type].text( response.code );\n\n // Make sure that we only do things when server displayed is the processed one\n if ( response.type !== self.selectedServer ) {\n return;\n }\n\n if ( 'apache' === response.type && response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ( 'apache' === response.type && self.strings.cacheEnabled && ! response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-error' ).show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $( '#wphb-notice-code-snippet-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n //self.$spinner.css( 'visibility', 'hidden' );\n });\n }\n }\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-caching.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.cloudflare = {\n module: 'cloudflare',\n $cfSelector: false,\n $spinner: false,\n\n init: function () {\n this.$spinner = $('.wphb-spinner');\n this.$cfSelector = $('#wphb-caching-cloudflare-summary-set-expiry');\n let self = this;\n if ( wphb.cloudflare.is.connected ) {\n this.$cfSelector.change( function() {\n self.setExpiry.call( self, [this] );\n } );\n }\n\n return this;\n },\n\n setExpiry: function( selector ) {\n this.displaySpinner();\n const value = $(selector).val();\n Fetcher.cloudflare.setExpiration( value )\n .then( () => {\n window.location.reload();\n });\n },\n\n displaySpinner: function() {\n this.$spinner.css( 'visibility', 'visible' );\n }\n };\n}( jQuery ) );\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-cloudflare.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.DashboardCloudFlare = {\n init: function( settings ) {\n this.currentStep = settings.currentStep;\n this.data = settings;\n this.email = settings.email;\n this.apiKey = settings.apiKey;\n this.$stepsContainer = $('#cloudflare-steps');\n this.$infoBox = $('#cloudflare-info');\n this.$spinner = $( '.cloudflare-spinner' );\n this.$deactivateButton = $('#wphb-box-dashboard-cloudflare').find('.box-title .buttons');\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 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.text( 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 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\tWDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n\n\t\t\t// Run performance test\n\t\t\tconst module = WPHB_Admin.getModule('performance');\n\t\t\tmodule.performanceTest( this.strings.finishedTestURLsLink );\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-dashboard.js","import Fetcher from './utils/fetcher';\n\n(function($) {\n WPHB_Admin.gzip = {\n module: \"gzip\",\n selectedServer: \"\",\n $serverSelector: null,\n $serverInstructions: [],\n\n init: function() {\n const self = this;\n\n this.$serverSelector = $(\"#wphb-server-type\");\n this.selectedServer = this.$serverSelector.val();\n let instructionsList = $(\".wphb-server-instructions\");\n instructionsList.each(function() {\n self.$serverInstructions[$(this).data(\"server\")] = $(this);\n });\n this.showServerInstructions(this.selectedServer);\n this.$serverSelector.change(function() {\n const value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n $(\"#toggle-apache-instructions\").click(function(e) {\n e.preventDefault();\n $(\".apache-instructions\").toggle();\n });\n $(\"#toggle-litespeed-instructions\").click(function(e) {\n e.preventDefault();\n $(\".litespeed-instructions\").toggle();\n });\n return this;\n },\n\n hideCurrentInstructions: function() {\n const selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function(server) {\n if (typeof this.$serverInstructions[server] !== \"undefined\") {\n this.$serverInstructions[server].show();\n }\n if (\"apache\" === server || 'LiteSpeed' === server) {\n $(\"#enable-cache-wrap\").show();\n } else {\n $(\"#enable-cache-wrap\").hide();\n }\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n };\n})(jQuery);\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-gzip.js","( function( $ ) {\n 'use strict';\n\n let WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function() {\n\n 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';\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 // 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 // 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 $(this).attr('disabled', true);\n self.checkFiles( getLink( 'minification' ) );\n });\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 checkFiles: function( redirect ) {\n const self = this;\n\n if ( typeof redirect === 'undefined' )\n redirect = false;\n\n if ( ! self.minificationStarted ) {\n // Store the progress in session storage to persist during page reloads\n // If there is no previous value, we init one with 10%\n if ( sessionStorage.getItem('progress') === null ) {\n sessionStorage.setItem('progress', 10);\n }\n\n // Update progress bar\n const progress = sessionStorage.getItem('progress');\n this.updateProgressBar( progress );\n\n // Send an AJAX request that will flag the check files as started\n Fetcher.minification.startCheck( progress )\n .then( ( response ) => {\n // Set the number of steps to be used in percentage count. Only if not set already.\n if ( ( typeof response.steps !== 'undefined' ) && ( sessionStorage.getItem('steps') === null ) ) {\n sessionStorage.setItem('steps', response.steps);\n }\n\n self.minificationStarted = true;\n self.checkFiles( redirect );\n });\n }\n else {\n const progress = sessionStorage.getItem('progress');\n const step = Math.round( 80 / sessionStorage.getItem('steps') );\n Fetcher.minification.checkStep( progress, step )\n .then( ( response ) => {\n if ( typeof response.finished !== 'undefined' ) {\n // Finished\n if ( response.finished && redirect ) {\n // Clear session storage\n sessionStorage.clear();\n\n // Update progress bar\n this.updateProgressBar( 100 );\n\n // Show enable cdn modal only for members\n if ( true === response.show_cdn && $('#enable-cdn-modal').length ) {\n WDP.showOverlay( '#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' } );\n } else {\n window.location.href = redirect;\n }\n }\n // Next step\n else if ( ! response.finished ) {\n // Store the progress in session storage to persist during page reloads\n let progress = parseInt( sessionStorage.getItem('progress') ) + Math.round( 80 / sessionStorage.getItem('steps') );\n sessionStorage.setItem( 'progress', progress );\n\n // Update progress bar.\n this.updateProgressBar( progress );\n\n // Wait 3 seconds before calling again\n window.setTimeout( function() {\n self.checkFiles( redirect );\n }, 3000);\n }\n } else {\n // Error\n window.location.href = redirect;\n }\n });\n } // End else\n\n }, // End checkFiles\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 if ( progress >= 90 ) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Finalizing...');\n }\n if ( cancel ) {\n\t\t\t\t$('.wphb-progress-state .wphb-progress-state-text').text('Cancelling...');\n }\n $('.wphb-scan-progress .wphb-scan-progress-bar span').width( progress + '%' );\n },\n\n cancelScan: function() {\n Fetcher.minification.cancelScan()\n .then( () => {\n\t\t\t\t\t// Clear session storage\n\t\t\t\t\tsessionStorage.clear();\n\n\t\t\t\t\tthis.updateProgressBar( 0, true );\n\n\t\t\t\t\t// Reload page\n window.location.href = getLink( 'minification' );\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 $(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 $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 '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","/**\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 * 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 = 32\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 = 33\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 = 34\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 = 35\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 = 36\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 = 37\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 = 38\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 = 39\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 = 40\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 = 41\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 = 42\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 = 43\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 = 44\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 = 45\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 = 46\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 = 47\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 = 48\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 = 49\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 = 50\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 = 51\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 = 52\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 = 53\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 = 54\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 = 55\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 = 56\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 = 57\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 = 58\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 = 59\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 = 60\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 = 61\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 = 62\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 = 63\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 = 64\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 = 65\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 = 66\n// module chunks = 0"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///admin.min.js","webpack:///webpack/bootstrap f3f08962be2e8bf066f2","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/utils/helpers.js","webpack:///./~/es6-promise/dist/es6-promise.js","webpack:///./~/lodash/_apply.js","webpack:///./~/lodash/_arrayLikeKeys.js","webpack:///./~/lodash/_baseIsArguments.js","webpack:///./~/lodash/_baseIsNative.js","webpack:///./~/lodash/_baseIsTypedArray.js","webpack:///./~/lodash/_baseKeys.js","webpack:///./~/lodash/_baseRest.js","webpack:///./~/lodash/_baseSetToString.js","webpack:///./~/lodash/_baseTimes.js","webpack:///./~/lodash/_baseUnary.js","webpack:///./~/lodash/_copyObject.js","webpack:///./~/lodash/_coreJsData.js","webpack:///./~/lodash/_createAssigner.js","webpack:///./~/lodash/_getNative.js","webpack:///./~/lodash/_getRawTag.js","webpack:///./~/lodash/_getValue.js","webpack:///./~/lodash/_isIterateeCall.js","webpack:///./~/lodash/_isMasked.js","webpack:///./~/lodash/_nativeKeys.js","webpack:///./~/lodash/_nodeUtil.js","webpack:///./~/lodash/_objectToString.js","webpack:///./~/lodash/_overArg.js","webpack:///./~/lodash/_overRest.js","webpack:///./~/lodash/_setToString.js","webpack:///./~/lodash/_shortOut.js","webpack:///./~/lodash/_toSource.js","webpack:///./~/lodash/assign.js","webpack:///./~/lodash/constant.js","webpack:///./~/lodash/isArguments.js","webpack:///./~/lodash/isArray.js","webpack:///./~/lodash/isBuffer.js","webpack:///./~/lodash/isTypedArray.js","webpack:///./~/lodash/keys.js","webpack:///./~/lodash/stubFalse.js","webpack:///./~/process/browser.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","Fetcher","request","action","data","arguments","length","undefined","method","nonce","fetchNonce","args","url","fetchUrl","Promise","resolve","reject","jQuery","ajax","done","fail","then","response","checkStatus","ajaxurl","wphb","nonces","HBFetchNonce","methods","caching","setExpiration","type","actionPrefix","setServer","reloadSnippets","cloudflare","connect","step","formData","cfData","purgeCache","dashboard","toggleMinification","skipSetup","minification","toggleCDN","startCheck","progress","checkStep","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","_fetcher","_fetcher2","$","selectedServer","$serverSelector","$serverInstructions","$expirySelectors","$snippets","cachingMetabox","cachingContent","find","cachingContentSpinner","cachingFooter","wphbCachingStrings","strings","val","apache","first","nginx","each","change","hide","fadeIn","element","showServerInstructions","hideCurrentInstructions","click","preventDefault","slideToggle","selected","server","show","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","on","apply","target","bind","$button","attr","showSpinner","$notice","scrollTo","slideDown","setTimeout","slideUp","removeAttr","hideSpinner","template","content","html","submitStep","bindEvents","$howToInstructions","toggle","WDP","wpmuSelect","removeClass","addClass","emptyInfoBox","showInfoBox","$form","serialize","newData","nextStep","redirect","catch","_","memoize","id","compiled","options","evaluate","interpolate","escape","variable","templateSettings","wphbDashboardStrings","CDNcheckbox","prop","showNotice","notice","startQuickSetup","showOverlay","class","runPerformanceTest","getModule","performanceTest","finishedTestURLsLink","gzip","updatePerformanceGraph","$wrap","$item","parseInt","$circle","r","pct","Math","PI","strokeDashoffset","updatePerformanceResultsGraphs","register_events_performance","initModule","utils","membershipModal","open","trigger","post","notices","parent","_interopRequireDefault","_helpers","_Row","_Row2","_RowsCollection","_RowsCollection2","$checkFilesButton","$checkFilesResultsContainer","checkURLSList","checkedURLS","$disableMinification","checkFiles","getLink","confirm","__","cdn_value","timer","clearTimeout","rowsCollection","RowsCollection","index","row","_row","Row","push","keyup","addFilter","applyFilters","what","visibleItems","getVisibleItems","$this","getItemById","select","unSelect","items","getItems","checkbox","getElement","checkboxes","checkedState","checked","innerWidth","minification_resize_rows","debounce","addEventListener","_this","minificationStarted","sessionStorage","getItem","round","finished","clear","updateProgressBar","show_cdn","setItem","steps","cancel","width","_this2","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","uptime","$dataRangeSelector","chartData","wphbUptimeStrings","$disableUptime","disableUptimeURL","drawChart","google","visualization","DataTable","addColumn","chart_array","Date","addRows","chartArea","left","top","height","colors","curveType","legend","position","vAxis","format","viewWindow","min","tooltip","isHtml","series","0","axis","axes","y","Resp","label","chart","LineChart","getElementById","draw","resize","_element","_filter","_filter_sec","$el","filter","toLowerCase","filterSecondary","visible","$include","$combine","$minify","$posFooter","$disableIcon","getId","getFilter","matchFilter","search","matchSecondaryFilter","isVisible","isSelected","currentFilter","currentSecondaryFilter","getSelectedItems","str","screen","links","process","factory","objectOrFunction","x","setScheduler","scheduleFn","customSchedulerFn","setAsap","asapFn","asap","useVertxTimer","vertxNext","flush","useSetTimeout","globalSetTimeout","len","callback","queue","onFulfillment","onRejection","_arguments","child","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","Constructor","promise","selfFulfillment","TypeError","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","succeeded","failed","initializePromise","resolver","nextId","Enumerator$1","input","_instanceConstructor","isArray","_remaining","Array","_enumerate","validationError","all$1","entries","race$1","reject$1","needsResolver","needsNew","Promise$2","polyfill$1","local","P","promiseToString","toString","cast","_isArray","arg","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","MessageChannel","nextTick","iterations","observer","node","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","String","baseIsArguments","argsTag","baseIsNative","isMasked","reIsNative","reIsHostCtor","toSource","reRegExpChar","funcProto","funcToString","RegExp","replace","baseIsTypedArray","typedArrayTags","baseKeys","nativeKeys","baseRest","start","setToString","overRest","constant","baseSetToString","string","iteratee","baseUnary","copyObject","source","props","customizer","isNew","newValue","coreJsData","createAssigner","assigner","sources","guard","isIterateeCall","getValue","isOwn","unmasked","nativeObjectToString","maskSrcKey","uid","exec","keys","IE_PROTO","overArg","freeExports","nodeType","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","once","removeListener","removeAllListeners","emit","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__(60);\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__(33).Promise;\n return new Promise(function (resolve, reject) {\n jQuery.ajax(args).done(resolve).fail(reject);\n }).then(function (response) {\n return checkStatus(response);\n });\n }\n\n var methods = {\n /**\n * Caching module actions.\n */\n caching: {\n /**\n * Set expiration for browser caching.\n *\n * @param type File type.\n * @param value Expiry value.\n */\n setExpiration: function setExpiration(type, value) {\n var action = actionPrefix + 'caching_set_expiration';\n return request(action, { type: type, value: value }, 'POST');\n },\n\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: function setServer(value) {\n var action = actionPrefix + 'caching_set_server_type';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: function reloadSnippets(type) {\n var action = actionPrefix + 'caching_reload_snippet';\n return request(action, { type: type }, 'POST').then(function (response) {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n /**\n * Connect to CloudFlare.\n *\n * @param step\n * @param formData\n * @param cfData\n */\n connect: function connect(step, formData, cfData) {\n var action = actionPrefix + 'cloudflare_connect';\n return request(action, { step: step, formData: formData, cfData: cfData }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Set expiry for CloudFlare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: function setExpiration(value) {\n var action = actionPrefix + 'cloudflare_set_expiry';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Purge CloudFlare cache.\n */\n purgeCache: function purgeCache() {\n var action = actionPrefix + 'cloudflare_purge_cache';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'dash_toggle_network_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Skip quick setup.\n */\n skipSetup: function skipSetup() {\n var action = actionPrefix + 'dash_skip_setup';\n return request(action, {}, 'POST');\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: function toggleCDN(value) {\n var action = actionPrefix + 'minification_toggle_cdn';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: function toggleMinification(value) {\n var action = actionPrefix + 'minification_toggle_minification';\n return request(action, { value: value }, 'POST');\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: function startCheck(progress) {\n var action = actionPrefix + 'minification_start_check';\n return request(action, { progress: progress }, 'POST').then(function (response) {\n return response;\n });\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: function checkStep(progress, step) {\n var action = actionPrefix + 'minification_check_step';\n return request(action, { progress: progress, step: step }, 'POST').then(function (response) {\n return response;\n });\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__(48),\n objectToString = __webpack_require__(54);\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__(47);\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 _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n 'use strict';\n\n WPHB_Admin.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $expirySelectors: [],\n $snippets: [],\n\n init: function init() {\n var self = this,\n cachingMetabox = $('#wphb-box-caching-enable'),\n cachingContent = cachingMetabox.find('.box-content'),\n cachingContentSpinner = cachingContent.find('.spinner'),\n cachingFooter = cachingMetabox.find('.box-footer');\n\n if (wphbCachingStrings) self.strings = wphbCachingStrings;\n\n this.$serverSelector = $('#wphb-server-type');\n this.selectedServer = this.$serverSelector.val();\n //this.$spinner = $('#wphb-box-caching-enable .spinner');\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n var instructionsList = $('.wphb-server-instructions');\n instructionsList.each(function () {\n self.$serverInstructions[$(this).data('server')] = $(this);\n });\n\n var expirySelectors = $('.wphb-expiry-select');\n\n expirySelectors.each(function () {\n var type = $(this).data('type');\n if (type) {\n $(this).change(function () {\n //self.$spinner.css( 'visibility', 'visible' );\n cachingContent.find('.wphb-content').hide();\n cachingFooter.hide();\n cachingContentSpinner.fadeIn();\n $('.wphb-notice').hide();\n\n // Expiration selector has changed\n (function (element) {\n var value = $(element).val();\n // Change the plugin settings\n _fetcher2.default.caching.setExpiration(type, value).then(function () {\n // And reload the code snippet\n self.reloadSnippets();\n });\n return false;\n })(this);\n });\n }\n });\n\n this.showServerInstructions(this.selectedServer);\n\n this.$serverSelector.change(function () {\n var value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n\n $('#toggle-apache-instructions').click(function (e) {\n e.preventDefault();\n $('.apache-instructions').slideToggle();\n });\n\n $('#toggle-litespeed-instructions').click(function (e) {\n e.preventDefault();\n $('.litespeed-instructions').slideToggle();\n });\n\n return this;\n },\n\n setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n },\n\n hideCurrentInstructions: function hideCurrentInstructions() {\n var selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function showServerInstructions(server) {\n if (typeof this.$serverInstructions[server] !== 'undefined') {\n this.$serverInstructions[server].show();\n }\n\n if ('apache' === server || 'LiteSpeed' === server) {\n $('#enable-cache-wrap').show();\n } else {\n $('#enable-cache-wrap').hide();\n }\n },\n\n reloadSnippets: function reloadSnippets() {\n var self = this;\n var stop = false;\n for (var i in self.$snippets) {\n if (self.$snippets.hasOwnProperty(i)) {\n _fetcher2.default.caching.reloadSnippets(i).then(function (response) {\n if (stop) {\n return;\n }\n\n self.$snippets[response.type].text(response.code);\n\n // Make sure that we only do things when server displayed is the processed one\n if (response.type !== self.selectedServer) {\n return;\n }\n\n if ('apache' === response.type && response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ('apache' === response.type && self.strings.cacheEnabled && !response.updatedFile) {\n $('#wphb-notice-code-snippet-htaccess-error').show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $('#wphb-notice-code-snippet-updated').show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n //self.$spinner.css( 'visibility', 'hidden' );\n });\n }\n }\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.cloudflare = {\n module: 'cloudflare',\n $cfSelector: false,\n $spinner: false,\n\n init: function init() {\n this.$spinner = $('.wphb-spinner');\n this.$cfSelector = $('#wphb-caching-cloudflare-summary-set-expiry');\n var self = this;\n if (wphb.cloudflare.is.connected) {\n this.$cfSelector.change(function () {\n self.setExpiry.call(self, [this]);\n });\n }\n\n return this;\n },\n\n setExpiry: function setExpiry(selector) {\n this.displaySpinner();\n var value = $(selector).val();\n _fetcher2.default.cloudflare.setExpiration(value).then(function () {\n window.location.reload();\n });\n },\n\n displaySpinner: function displaySpinner() {\n this.$spinner.css('visibility', 'visible');\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.DashboardCloudFlare = {\n init: function init(settings) {\n this.currentStep = settings.currentStep;\n this.data = settings;\n this.email = settings.email;\n this.apiKey = settings.apiKey;\n this.$stepsContainer = $('#cloudflare-steps');\n this.$infoBox = $('#cloudflare-info');\n this.$spinner = $('.cloudflare-spinner');\n this.$deactivateButton = $('#wphb-box-dashboard-cloudflare').find('.box-title .buttons');\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.text(message);\n },\n\n showSpinner: function showSpinner() {\n this.$spinner.css('visibility', 'visible');\n },\n\n hideSpinner: function hideSpinner() {\n this.$spinner.css('visibility', 'hidden');\n },\n\n submitStep: function submitStep($form) {\n var self = this;\n\n $form.find('input[type=submit]').attr('disabled', 'true');\n this.emptyInfoBox();\n this.showSpinner();\n\n _fetcher2.default.cloudflare.connect(this.currentStep, $form.serialize(), this.data).then(function (response) {\n self.data = response.newData;\n self.renderStep(response.nextStep);\n\n if (response.nextStep === 'final') {\n window.location.href = response.redirect;\n }\n }).catch(function (error) {\n self.showInfoBox(error);\n });\n\n $form.find('input[type=submit]').removeAttr('disabled');\n self.hideSpinner();\n }\n };\n\n WPHB_Admin.DashboardCloudFlare.template = _.memoize(function (id) {\n var compiled = void 0,\n options = {\n evaluate: /<#([\\s\\S]+?)#>/g,\n interpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n escape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n variable: 'data'\n };\n\n return function (data) {\n _.templateSettings = options;\n compiled = compiled || _.template($(id).html());\n return compiled(data);\n };\n });\n})(jQuery);\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.dashboard = {\n module: 'dashboard',\n\n init: function init() {\n var self = this;\n\n if (wphbDashboardStrings) this.strings = wphbDashboardStrings;\n\n $('#wphb-activate-minification').change(function () {\n var value = $(this).val();\n _fetcher2.default.dashboard.toggleMinification(value).then(function () {\n // If disabled, uncheck CDN checkbox and disable it.\n var CDNcheckbox = $('input[name=\"use_cdn\"]');\n if ('false' === value) {\n CDNcheckbox.prop('checked', false);\n CDNcheckbox.prop('disabled', true);\n } else {\n CDNcheckbox.prop('disabled', false);\n }\n self.showNotice();\n });\n });\n\n $('#use_cdn').change(function () {\n var value = $(this).is(':checked');\n _fetcher2.default.minification.toggleCDN(value).then(function () {\n self.showNotice();\n });\n });\n\n $('.wphb-performance-report-item').click(function () {\n var url = $(this).data('performance-url');\n if (url) {\n location.href = url;\n }\n });\n return this;\n },\n\n /**\n * Notice on settings update.\n */\n showNotice: function showNotice() {\n var notice = $('#wphb-notice-minification-settings-updated');\n notice.slideDown();\n setTimeout(function () {\n notice.slideUp();\n }, 5000);\n },\n\n /**\n * Run quick setup.\n */\n startQuickSetup: function startQuickSetup() {\n // Show quick setup modal\n window.WDP.showOverlay('#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' });\n },\n\n /**\n * Skip quick setup.\n */\n skipSetup: function skipSetup() {\n _fetcher2.default.dashboard.skipSetup().then(function () {\n window.location.reload(true);\n });\n },\n\n /**\n * Run performance test after quick setup.\n */\n runPerformanceTest: function runPerformanceTest() {\n // Show quick setup modal\n window.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' });\n\n // Run performance test\n var module = WPHB_Admin.getModule('performance');\n module.performanceTest(this.strings.finishedTestURLsLink);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function ($) {\n WPHB_Admin.gzip = {\n module: \"gzip\",\n selectedServer: \"\",\n $serverSelector: null,\n $serverInstructions: [],\n\n init: function init() {\n var self = this;\n\n this.$serverSelector = $(\"#wphb-server-type\");\n this.selectedServer = this.$serverSelector.val();\n var instructionsList = $(\".wphb-server-instructions\");\n instructionsList.each(function () {\n self.$serverInstructions[$(this).data(\"server\")] = $(this);\n });\n this.showServerInstructions(this.selectedServer);\n this.$serverSelector.change(function () {\n var value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n $(\"#toggle-apache-instructions\").click(function (e) {\n e.preventDefault();\n $(\".apache-instructions\").toggle();\n });\n $(\"#toggle-litespeed-instructions\").click(function (e) {\n e.preventDefault();\n $(\".litespeed-instructions\").toggle();\n });\n return this;\n },\n\n hideCurrentInstructions: function hideCurrentInstructions() {\n var selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function showServerInstructions(server) {\n if (typeof this.$serverInstructions[server] !== \"undefined\") {\n this.$serverInstructions[server].show();\n }\n if (\"apache\" === server || 'LiteSpeed' === server) {\n $(\"#enable-cache-wrap\").show();\n } else {\n $(\"#enable-cache-wrap\").hide();\n }\n },\n\n setServer: function setServer(value) {\n _fetcher2.default.caching.setServer(value);\n }\n };\n})(jQuery);\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n(function ($) {\n 'use strict';\n\n var WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function init() {\n\n $('body').on('change', '.mobile-nav', function () {\n var url = $(this).val();\n if (url.length > 0) {\n location.href = url;\n }\n });\n\n function updatePerformanceGraph($wrap) {\n var $item = $wrap.find('.wphb-score-result-label'),\n val = parseInt($item.text(), 10) || 100,\n $circle = $wrap.find(\".wphb-score-graph-result\"),\n r = void 0,\n c = void 0,\n pct = void 0;\n r = $circle.attr('r');\n c = Math.PI * (r * 2);\n\n if (val < 0) {\n val = 0;\n }\n if (val > 100) {\n val = 100;\n }\n\n pct = (100 - val) / 100 * c;\n\n $circle.css({ strokeDashoffset: pct });\n }\n\n function updatePerformanceResultsGraphs() {\n\n // Update Overall Score\n $(\".wphb-performance-report-overall-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n\n // Update Current Score\n $(\".wphb-performance-report-current-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n\n // Update All Scores\n $(\".wphb-performance-report-item-score\").each(function () {\n updatePerformanceGraph($(this));\n });\n }\n window.register_events_performance = function () {\n setTimeout(updatePerformanceResultsGraphs, 500);\n };\n $(function () {\n setTimeout(updatePerformanceResultsGraphs, 500);\n });\n },\n initModule: function initModule(module) {\n if (this.hasOwnProperty(module)) {\n this.modules[module] = this[module].init();\n return this.modules[module];\n }\n\n return {};\n },\n getModule: function getModule(module) {\n if (typeof this.modules[module] !== 'undefined') return this.modules[module];else return this.initModule(module);\n }\n };\n\n WPHB_Admin.utils = {\n\n membershipModal: {\n open: function open() {\n $('#wphb-upgrade-membership-modal-link').trigger('click');\n }\n },\n\n post: function post(data, module) {\n data.action = 'wphb_ajax';\n data.module = module;\n return $.ajax({\n url: ajaxurl,\n method: 'POST',\n data: data\n });\n }\n };\n\n WPHB_Admin.notices = {\n\n init: function init() {\n $('.wphb-notice:not(.notice) a.wphb-dismiss').click(function (e) {\n e.preventDefault();\n var id = $(this).data('id');\n var nonce = $(this).data('nonce');\n\n $(this).parent('.error').hide();\n });\n }\n };\n\n window.WPHB_Admin = WPHB_Admin;\n})(jQuery);\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _fetcher = __webpack_require__(0);\n\nvar _fetcher2 = _interopRequireDefault(_fetcher);\n\nvar _helpers = __webpack_require__(32);\n\nvar _Row = __webpack_require__(30);\n\nvar _Row2 = _interopRequireDefault(_Row);\n\nvar _RowsCollection = __webpack_require__(31);\n\nvar _RowsCollection2 = _interopRequireDefault(_RowsCollection);\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 self = this;\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 // 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.checkFiles((0, _helpers.getLink)('minification'));\n });\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 checkFiles: function checkFiles(redirect) {\n var _this = this;\n\n var self = this;\n\n if (typeof redirect === 'undefined') redirect = false;\n\n if (!self.minificationStarted) {\n // Store the progress in session storage to persist during page reloads\n // If there is no previous value, we init one with 10%\n if (sessionStorage.getItem('progress') === null) {\n sessionStorage.setItem('progress', 10);\n }\n\n // Update progress bar\n var progress = sessionStorage.getItem('progress');\n this.updateProgressBar(progress);\n\n // Send an AJAX request that will flag the check files as started\n _fetcher2.default.minification.startCheck(progress).then(function (response) {\n // Set the number of steps to be used in percentage count. Only if not set already.\n if (typeof response.steps !== 'undefined' && sessionStorage.getItem('steps') === null) {\n sessionStorage.setItem('steps', response.steps);\n }\n\n self.minificationStarted = true;\n self.checkFiles(redirect);\n });\n } else {\n var _progress = sessionStorage.getItem('progress');\n var step = Math.round(80 / sessionStorage.getItem('steps'));\n _fetcher2.default.minification.checkStep(_progress, step).then(function (response) {\n if (typeof response.finished !== 'undefined') {\n // Finished\n if (response.finished && redirect) {\n // Clear session storage\n sessionStorage.clear();\n\n // Update progress bar\n _this.updateProgressBar(100);\n\n // Show enable cdn modal only for members\n if (true === response.show_cdn && $('#enable-cdn-modal').length) {\n WDP.showOverlay('#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' });\n } else {\n window.location.href = redirect;\n }\n }\n // Next step\n else if (!response.finished) {\n // Store the progress in session storage to persist during page reloads\n var _progress2 = parseInt(sessionStorage.getItem('progress')) + Math.round(80 / sessionStorage.getItem('steps'));\n sessionStorage.setItem('progress', _progress2);\n\n // Update progress bar.\n _this.updateProgressBar(_progress2);\n\n // Wait 3 seconds before calling again\n window.setTimeout(function () {\n self.checkFiles(redirect);\n }, 3000);\n }\n } else {\n // Error\n window.location.href = redirect;\n }\n });\n } // End else\n }, // End checkFiles\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 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 $('.wphb-scan-progress .wphb-scan-progress-bar span').width(progress + '%');\n },\n\n cancelScan: function cancelScan() {\n var _this2 = this;\n\n _fetcher2.default.minification.cancelScan().then(function () {\n // Clear session storage\n sessionStorage.clear();\n\n _this2.updateProgressBar(0, true);\n\n // Reload page\n window.location.href = (0, _helpers.getLink)('minification');\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 $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 '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/**\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/* 33 */\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__(69);\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__(68), __webpack_require__(17)))\n\n/***/ }),\n/* 34 */\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/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseTimes = __webpack_require__(42),\n isArguments = __webpack_require__(62),\n isArray = __webpack_require__(63),\n isBuffer = __webpack_require__(64),\n isIndex = __webpack_require__(11),\n isTypedArray = __webpack_require__(65);\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/* 36 */\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/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isFunction = __webpack_require__(15),\n isMasked = __webpack_require__(51),\n isObject = __webpack_require__(4),\n toSource = __webpack_require__(59);\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/* 38 */\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/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isPrototype = __webpack_require__(12),\n nativeKeys = __webpack_require__(52);\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/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar identity = __webpack_require__(14),\n overRest = __webpack_require__(56),\n setToString = __webpack_require__(57);\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/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar constant = __webpack_require__(61),\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/* 42 */\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/* 43 */\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/* 44 */\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/* 45 */\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/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseRest = __webpack_require__(40),\n isIterateeCall = __webpack_require__(50);\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/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsNative = __webpack_require__(37),\n getValue = __webpack_require__(49);\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/* 48 */\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/* 49 */\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/* 50 */\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/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar coreJsData = __webpack_require__(45);\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/* 52 */\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/* 53 */\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/* 54 */\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/* 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\nvar apply = __webpack_require__(34);\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/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseSetToString = __webpack_require__(41),\n shortOut = __webpack_require__(58);\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/* 58 */\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/* 59 */\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/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar assignValue = __webpack_require__(7),\n copyObject = __webpack_require__(44),\n createAssigner = __webpack_require__(46),\n isArrayLike = __webpack_require__(3),\n isPrototype = __webpack_require__(12),\n keys = __webpack_require__(66);\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/* 61 */\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/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsArguments = __webpack_require__(36),\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/* 63 */\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/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(2),\n stubFalse = __webpack_require__(67);\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/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar baseIsTypedArray = __webpack_require__(38),\n baseUnary = __webpack_require__(43),\n nodeUtil = __webpack_require__(53);\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/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar arrayLikeKeys = __webpack_require__(35),\n baseKeys = __webpack_require__(39),\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/* 67 */\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/* 68 */\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/* 69 */\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 f3f08962be2e8bf066f2","import assign from 'lodash/assign';\n\nfunction Fetcher() {\n let fetchUrl = ajaxurl;\n let fetchNonce = wphb.nonces.HBFetchNonce;\n const actionPrefix = 'wphb_';\n const actionPrefixPro = 'wphb_pro_';\n\n function request( action, data = {}, method = 'GET' ) {\n data.nonce = fetchNonce;\n data.action = action;\n let args = { data, method };\n args.url = fetchUrl;\n let Promise = require('es6-promise').Promise;\n return new Promise( ( resolve, reject ) => {\n jQuery.ajax( args ).done( resolve ).fail( reject );\n })\n .then( ( response ) => checkStatus( response ) );\n\n }\n\n const methods = {\n /**\n * Caching module actions.\n */\n caching: {\n /**\n * Set expiration for browser caching.\n *\n * @param type File type.\n * @param value Expiry value.\n */\n setExpiration: ( type, value ) => {\n const action = actionPrefix + 'caching_set_expiration';\n return request( action, { type, value }, 'POST' );\n },\n\n /**\n * Set server type.\n *\n * @param value Server type.\n */\n setServer: ( value ) => {\n const action = actionPrefix + 'caching_set_server_type';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Reload snippet.\n *\n * @param type Server type.\n */\n reloadSnippets: ( type ) => {\n const action = actionPrefix + 'caching_reload_snippet';\n return request( action, { type }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n }\n },\n\n /**\n * CLoudflare module actions.\n */\n cloudflare: {\n\t\t\t/**\n\t\t\t * Connect to CloudFlare.\n\t\t\t *\n\t\t\t * @param step\n\t\t\t * @param formData\n\t\t\t * @param cfData\n\t\t\t */\n\t\t\tconnect: ( step, formData, cfData ) => {\n\t\t\t\tconst action = actionPrefix + 'cloudflare_connect';\n return request( action, { step, formData, cfData }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Set expiry for CloudFlare cache.\n *\n * @param value Expiry value.\n */\n setExpiration: ( value ) => {\n const action = actionPrefix + 'cloudflare_set_expiry';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Purge CloudFlare cache.\n\t\t\t */\n\t\t\tpurgeCache: () => {\n const action = actionPrefix + 'cloudflare_purge_cache';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Dashboard module actions.\n */\n dashboard: {\n /**\n * Toggle global minification settings for network installs.\n *\n * @param value Accepts: 'super-admins', 'false' and 'true'. Default: 'true'.\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'dash_toggle_network_minification';\n return request( action, { value }, 'POST' );\n },\n\n\t\t\t/**\n * Skip quick setup.\n\t\t\t */\n\t\t\tskipSetup: () => {\n const action = actionPrefix + 'dash_skip_setup';\n return request( action, {}, 'POST' );\n }\n },\n\n /**\n * Minification module actions.\n */\n minification: {\n /**\n * Toggle CDN settings.\n *\n * @param value CDN checkbox value.\n */\n toggleCDN: ( value ) => {\n const action = actionPrefix + 'minification_toggle_cdn';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Toggle minificatiojn settings on per site basis.\n *\n * @param value\n */\n toggleMinification: ( value ) => {\n const action = actionPrefix + 'minification_toggle_minification';\n return request( action, { value }, 'POST' );\n },\n\n /**\n * Start minification check.\n *\n * @param progress\n */\n startCheck: ( progress ) => {\n const action = actionPrefix + 'minification_start_check';\n return request( action, { progress }, 'POST' )\n .then( ( response ) => {\n return response;\n });\n },\n\n /**\n * Do a step in minification process.\n *\n * @param progress\n * @param step\n */\n checkStep: ( progress, step ) => {\n const action = actionPrefix + 'minification_check_step';\n return request( action, { progress, step }, 'POST' )\n .then( ( response ) => {\n return response;\n });\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 /**\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 Fetcher from './utils/fetcher';\n\n( function( $ ) {\n 'use strict';\n WPHB_Admin.caching = {\n\n module: 'caching',\n selectedServer: '',\n $serverSelector: null,\n $serverInstructions: [],\n $expirySelectors: [],\n $snippets: [],\n\n init: function () {\n let self = this,\n cachingMetabox = $('#wphb-box-caching-enable'),\n cachingContent = cachingMetabox.find('.box-content'),\n cachingContentSpinner = cachingContent.find('.spinner'),\n cachingFooter = cachingMetabox.find('.box-footer');\n\n if ( wphbCachingStrings )\n self.strings = wphbCachingStrings;\n\n this.$serverSelector = $( '#wphb-server-type' );\n this.selectedServer = this.$serverSelector.val();\n //this.$spinner = $('#wphb-box-caching-enable .spinner');\n\n self.$snippets.apache = $('#wphb-code-snippet-apache').find('pre').first();\n self.$snippets.nginx = $('#wphb-code-snippet-nginx').find('pre').first();\n\n let instructionsList = $( '.wphb-server-instructions' );\n instructionsList.each( function() {\n self.$serverInstructions[ $(this).data('server') ] = $(this);\n });\n\n let expirySelectors = $( '.wphb-expiry-select' );\n\n expirySelectors.each( function() {\n const type = $(this).data('type');\n if ( type ) {\n $(this).change( function() {\n //self.$spinner.css( 'visibility', 'visible' );\n cachingContent.find('.wphb-content').hide();\n cachingFooter.hide();\n cachingContentSpinner.fadeIn();\n $('.wphb-notice').hide();\n\n // Expiration selector has changed\n ( function( element ) {\n const value = $( element ).val();\n // Change the plugin settings\n Fetcher.caching.setExpiration( type, value )\n .then( () => {\n // And reload the code snippet\n self.reloadSnippets();\n });\n return false;\n })( this );\n });\n }\n\n });\n\n this.showServerInstructions( this.selectedServer );\n\n this.$serverSelector.change( function() {\n let value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions( value );\n self.setServer(value);\n self.selectedServer = value;\n });\n\n $( '#toggle-apache-instructions').click( function( e ) {\n e.preventDefault();\n $('.apache-instructions').slideToggle();\n });\n\n $( '#toggle-litespeed-instructions').click( function( e ) {\n e.preventDefault();\n $('.litespeed-instructions').slideToggle();\n });\n\n\n return this;\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n\n hideCurrentInstructions: function() {\n let selected = this.selectedServer;\n if ( this.$serverInstructions[ selected ] ) {\n this.$serverInstructions[ selected ].hide();\n }\n },\n\n showServerInstructions: function( server ) {\n if ( typeof this.$serverInstructions[ server ] !== 'undefined' ) {\n this.$serverInstructions[ server ].show();\n }\n\n if ( 'apache' === server || 'LiteSpeed' === server ) {\n $( '#enable-cache-wrap').show();\n }\n else {\n $( '#enable-cache-wrap').hide();\n }\n },\n\n reloadSnippets: function() {\n let self = this;\n let stop = false;\n for ( let i in self.$snippets ) {\n if ( self.$snippets.hasOwnProperty( i ) ) {\n Fetcher.caching.reloadSnippets( i )\n .then( ( response ) => {\n if ( stop ) {\n return;\n }\n\n self.$snippets[response.type].text( response.code );\n\n // Make sure that we only do things when server displayed is the processed one\n if ( response.type !== self.selectedServer ) {\n return;\n }\n\n if ( 'apache' === response.type && response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n } else if ( 'apache' === response.type && self.strings.cacheEnabled && ! response.updatedFile ) {\n $( '#wphb-notice-code-snippet-htaccess-error' ).show();\n location.href = self.strings.htaccessErrorURL;\n } else {\n $( '#wphb-notice-code-snippet-updated' ).show();\n location.href = self.strings.recheckURL + '&caching-updated=true';\n }\n //self.$spinner.css( 'visibility', 'hidden' );\n });\n }\n }\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-caching.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.cloudflare = {\n module: 'cloudflare',\n $cfSelector: false,\n $spinner: false,\n\n init: function () {\n this.$spinner = $('.wphb-spinner');\n this.$cfSelector = $('#wphb-caching-cloudflare-summary-set-expiry');\n let self = this;\n if ( wphb.cloudflare.is.connected ) {\n this.$cfSelector.change( function() {\n self.setExpiry.call( self, [this] );\n } );\n }\n\n return this;\n },\n\n setExpiry: function( selector ) {\n this.displaySpinner();\n const value = $(selector).val();\n Fetcher.cloudflare.setExpiration( value )\n .then( () => {\n window.location.reload();\n });\n },\n\n displaySpinner: function() {\n this.$spinner.css( 'visibility', 'visible' );\n }\n };\n}( jQuery ) );\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-cloudflare.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.DashboardCloudFlare = {\n init: function( settings ) {\n this.currentStep = settings.currentStep;\n this.data = settings;\n this.email = settings.email;\n this.apiKey = settings.apiKey;\n this.$stepsContainer = $('#cloudflare-steps');\n this.$infoBox = $('#cloudflare-info');\n this.$spinner = $( '.cloudflare-spinner' );\n this.$deactivateButton = $('#wphb-box-dashboard-cloudflare').find('.box-title .buttons');\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.text( message );\n },\n\n showSpinner: function() {\n this.$spinner.css( 'visibility', 'visible' );\n },\n\n hideSpinner: function() {\n this.$spinner.css( 'visibility', 'hidden' );\n },\n\n submitStep: function( $form ) {\n\t\t\tconst self = this;\n\n\t\t\t$form.find( 'input[type=submit]' ).attr( 'disabled', 'true' );\n\t\t\tthis.emptyInfoBox();\n\t\t\tthis.showSpinner();\n\n\t\t\tFetcher.cloudflare.connect( this.currentStep, $form.serialize(), this.data )\n .then( ( response ) => {\n\t\t\t\t\tself.data = response.newData;\n\t\t\t\t\tself.renderStep( response.nextStep );\n\n\t\t\t\t\tif ( response.nextStep === 'final' ) {\n\t\t\t\t\t\twindow.location.href = response.redirect;\n\t\t\t\t\t}\n })\n\t\t\t\t.catch( ( error ) => {\n\t\t\t\t\tself.showInfoBox( error );\n\t\t\t\t});\n\n\t\t\t$form.find( 'input[type=submit]' ).removeAttr( 'disabled' );\n\t\t\tself.hideSpinner();\n }\n };\n\n WPHB_Admin.DashboardCloudFlare.template = _.memoize(function ( id ) {\n let compiled,\n options = {\n evaluate: /<#([\\s\\S]+?)#>/g,\n interpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n escape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n variable: 'data'\n };\n\n return function ( data ) {\n _.templateSettings = options;\n compiled = compiled || _.template( $( id ).html() );\n return compiled( data );\n };\n });\n}(jQuery));\n\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-dashboard-cloudflare.js","import Fetcher from './utils/fetcher';\n\n( function( $ ) {\n WPHB_Admin.dashboard = {\n module: 'dashboard',\n\n init: function() {\n const self = this;\n\n\t\t\tif (wphbDashboardStrings)\n\t\t\t\tthis.strings = wphbDashboardStrings;\n\n $('#wphb-activate-minification').change( function() {\n const value = $(this).val();\n Fetcher.dashboard.toggleMinification( value )\n .then( () => {\n // If disabled, uncheck CDN checkbox and disable it.\n const CDNcheckbox = $('input[name=\"use_cdn\"]');\n if ( 'false' === value ) {\n CDNcheckbox.prop( 'checked', false );\n CDNcheckbox.prop( 'disabled', true );\n } else {\n CDNcheckbox.prop( 'disabled', false );\n }\n self.showNotice();\n });\n });\n\n $('#use_cdn').change( function() {\n const value = $(this).is(':checked');\n Fetcher.minification.toggleCDN( value )\n .then( () => {\n self.showNotice();\n });\n });\n\n $('.wphb-performance-report-item').click( function() {\n const url = $(this).data( 'performance-url' );\n if ( url ) {\n location.href = url;\n }\n });\n return this;\n },\n\n /**\n * Notice on settings update.\n */\n showNotice: function () {\n const notice = $('#wphb-notice-minification-settings-updated');\n notice.slideDown();\n setTimeout( function() {\n notice.slideUp();\n }, 5000 );\n },\n\n\t\t/**\n * Run quick setup.\n\t\t */\n\t\tstartQuickSetup: function () {\n // Show quick setup modal\n\t\t\twindow.WDP.showOverlay( '#wphb-quick-setup-modal', { class: 'wphb-modal small wphb-quick-setup-modal no-close' } );\n },\n\n\t\t/**\n * Skip quick setup.\n\t\t */\n\t\tskipSetup: function () {\n Fetcher.dashboard.skipSetup()\n .then( () => {\n window.location.reload(true);\n });\n },\n\n\t\t/**\n * Run performance test after quick setup.\n\t\t */\n\t\trunPerformanceTest: function() {\n\t\t\t// Show quick setup modal\n\t\t\twindow.WDP.showOverlay(\"#run-performance-test-modal\", { class: 'wphb-modal small wphb-progress-modal no-close' } );\n\n\t\t\t// Run performance test\n\t\t\tconst module = WPHB_Admin.getModule('performance');\n\t\t\tmodule.performanceTest( this.strings.finishedTestURLsLink );\n }\n };\n}( jQuery ));\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-dashboard.js","import Fetcher from './utils/fetcher';\n\n(function($) {\n WPHB_Admin.gzip = {\n module: \"gzip\",\n selectedServer: \"\",\n $serverSelector: null,\n $serverInstructions: [],\n\n init: function() {\n const self = this;\n\n this.$serverSelector = $(\"#wphb-server-type\");\n this.selectedServer = this.$serverSelector.val();\n let instructionsList = $(\".wphb-server-instructions\");\n instructionsList.each(function() {\n self.$serverInstructions[$(this).data(\"server\")] = $(this);\n });\n this.showServerInstructions(this.selectedServer);\n this.$serverSelector.change(function() {\n const value = $(this).val();\n self.hideCurrentInstructions();\n self.showServerInstructions(value);\n self.setServer(value);\n self.selectedServer = value;\n });\n $(\"#toggle-apache-instructions\").click(function(e) {\n e.preventDefault();\n $(\".apache-instructions\").toggle();\n });\n $(\"#toggle-litespeed-instructions\").click(function(e) {\n e.preventDefault();\n $(\".litespeed-instructions\").toggle();\n });\n return this;\n },\n\n hideCurrentInstructions: function() {\n const selected = this.selectedServer;\n if (this.$serverInstructions[selected]) {\n this.$serverInstructions[selected].hide();\n }\n },\n\n showServerInstructions: function(server) {\n if (typeof this.$serverInstructions[server] !== \"undefined\") {\n this.$serverInstructions[server].show();\n }\n if (\"apache\" === server || 'LiteSpeed' === server) {\n $(\"#enable-cache-wrap\").show();\n } else {\n $(\"#enable-cache-wrap\").hide();\n }\n },\n\n setServer: function( value ) {\n Fetcher.caching.setServer( value );\n },\n };\n})(jQuery);\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-gzip.js","( function( $ ) {\n 'use strict';\n\n let WPHB_Admin = {\n modules: [],\n // Common functionality to all screens\n init: function() {\n\n\t\t\t$('body').on('change', '.mobile-nav', function () {\n\t\t\t\tlet url = $(this).val();\n\t\t\t\tif (url.length > 0) {\n\t\t\t\t\tlocation.href = url;\n\t\t\t\t}\n\t\t\t});\n\n function updatePerformanceGraph($wrap){\n let $item = $wrap.find('.wphb-score-result-label'),\n val = parseInt($item.text(), 10) || 100,\n $circle = $wrap.find(\".wphb-score-graph-result\"),\n r, c, pct\n ;\n r = $circle.attr('r');\n c = Math.PI*(r*2);\n\n if (val < 0) { val = 0;}\n if (val > 100) { val = 100;}\n\n pct = ((100-val)/100)*c;\n\n $circle.css({ strokeDashoffset: pct});\n }\n\n function updatePerformanceResultsGraphs(){\n\n // Update Overall Score\n $(\".wphb-performance-report-overall-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n // Update Current Score\n $(\".wphb-performance-report-current-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n // Update All Scores\n $(\".wphb-performance-report-item-score\").each(function(){\n updatePerformanceGraph($(this));\n });\n\n }\n window.register_events_performance = function(){\n setTimeout(updatePerformanceResultsGraphs, 500);\n };\n $(function(){ setTimeout(updatePerformanceResultsGraphs, 500); });\n\n },\n initModule: function( module ) {\n if ( this.hasOwnProperty( module ) ) {\n this.modules[ module ] = this[ module ].init();\n return this.modules[ module ];\n }\n\n return {};\n },\n getModule: function( module ) {\n if ( typeof this.modules[ module ] !== 'undefined' )\n return this.modules[ module ];\n else\n return this.initModule( module );\n }\n };\n \n\n WPHB_Admin.utils = {\n\n membershipModal: {\n open: function() {\n $( '#wphb-upgrade-membership-modal-link').trigger( 'click' );\n }\n },\n\n post: function( data, module ) {\n data.action = 'wphb_ajax';\n data.module = module;\n return $.ajax({\n url: ajaxurl,\n method: 'POST',\n data: data\n });\n }\n };\n\n WPHB_Admin.notices = {\n\n init: function() {\n $( '.wphb-notice:not(.notice) a.wphb-dismiss').click( function( e ) {\n e.preventDefault();\n let id = $(this).data( 'id' );\n let nonce = $(this).data( 'nonce' );\n\n $(this).parent( '.error' ).hide();\n });\n }\n };\n\n window.WPHB_Admin = WPHB_Admin;\n\n}( jQuery ) );\n\n\n// WEBPACK FOOTER //\n// ./_src/admin/js/admin-main.js","import Fetcher from './utils/fetcher';\nimport { __, getLink } from './utils/helpers';\nimport Row from './minification/Row';\nimport RowsCollection from './minification/RowsCollection';\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 // 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 // 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.checkFiles( getLink( 'minification' ) );\n });\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 checkFiles: function( redirect ) {\n const self = this;\n\n if ( typeof redirect === 'undefined' )\n redirect = false;\n\n if ( ! self.minificationStarted ) {\n // Store the progress in session storage to persist during page reloads\n // If there is no previous value, we init one with 10%\n if ( sessionStorage.getItem('progress') === null ) {\n sessionStorage.setItem('progress', 10);\n }\n\n // Update progress bar\n const progress = sessionStorage.getItem('progress');\n this.updateProgressBar( progress );\n\n // Send an AJAX request that will flag the check files as started\n Fetcher.minification.startCheck( progress )\n .then( ( response ) => {\n // Set the number of steps to be used in percentage count. Only if not set already.\n if ( ( typeof response.steps !== 'undefined' ) && ( sessionStorage.getItem('steps') === null ) ) {\n sessionStorage.setItem('steps', response.steps);\n }\n\n self.minificationStarted = true;\n self.checkFiles( redirect );\n });\n }\n else {\n const progress = sessionStorage.getItem('progress');\n const step = Math.round( 80 / sessionStorage.getItem('steps') );\n Fetcher.minification.checkStep( progress, step )\n .then( ( response ) => {\n if ( typeof response.finished !== 'undefined' ) {\n // Finished\n if ( response.finished && redirect ) {\n // Clear session storage\n sessionStorage.clear();\n\n // Update progress bar\n this.updateProgressBar( 100 );\n\n // Show enable cdn modal only for members\n if ( true === response.show_cdn && $('#enable-cdn-modal').length ) {\n WDP.showOverlay( '#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' } );\n } else {\n window.location.href = redirect;\n }\n }\n // Next step\n else if ( ! response.finished ) {\n // Store the progress in session storage to persist during page reloads\n let progress = parseInt( sessionStorage.getItem('progress') ) + Math.round( 80 / sessionStorage.getItem('steps') );\n sessionStorage.setItem( 'progress', progress );\n\n // Update progress bar.\n this.updateProgressBar( progress );\n\n // Wait 3 seconds before calling again\n window.setTimeout( function() {\n self.checkFiles( redirect );\n }, 3000);\n }\n } else {\n // Error\n window.location.href = redirect;\n }\n });\n } // End else\n\n }, // End checkFiles\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 if ( progress >= 90 ) {\n $('.wphb-progress-state .wphb-progress-state-text').text('Finalizing...');\n }\n if ( cancel ) {\n\t\t\t\t$('.wphb-progress-state .wphb-progress-state-text').text('Cancelling...');\n }\n $('.wphb-scan-progress .wphb-scan-progress-bar span').width( progress + '%' );\n },\n\n cancelScan: function() {\n Fetcher.minification.cancelScan()\n .then( () => {\n\t\t\t\t\t// Clear session storage\n\t\t\t\t\tsessionStorage.clear();\n\n\t\t\t\t\tthis.updateProgressBar( 0, true );\n\n\t\t\t\t\t// Reload page\n window.location.href = getLink( 'minification' );\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 $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 '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","/**\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 = 33\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 = 34\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 = 35\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 = 36\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 = 37\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 = 38\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 = 39\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 = 40\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 = 41\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 = 42\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 = 43\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 = 44\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 = 45\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 = 46\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 = 47\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 = 48\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 = 49\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 = 50\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 = 51\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 = 52\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 = 53\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 = 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// ./~/lodash/_overArg.js\n// module id = 55\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 = 56\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 = 57\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 = 58\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 = 59\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 = 60\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 = 61\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 = 62\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 = 63\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 = 64\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 = 65\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 = 66\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 = 67\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 = 68\n// module chunks = 0"],"sourceRoot":""}
admin/class-admin-notices.php CHANGED
@@ -4,6 +4,9 @@ if ( ! defined( 'ABSPATH' ) ) {
4
  exit;
5
  }
6
 
 
 
 
7
  class WP_Hummingbird_Admin_Notices {
8
 
9
  /**
@@ -20,10 +23,11 @@ class WP_Hummingbird_Admin_Notices {
20
  if ( is_multisite() ) {
21
  add_action( 'network_admin_notices', array( $this, 'upgrade_to_pro' ) );
22
  add_action( 'network_admin_notices', array( $this, 'free_version_deactivated' ) );
23
- }
24
- else {
25
  add_action( 'admin_notices', array( $this, 'upgrade_to_pro' ) );
26
  add_action( 'admin_notices', array( $this, 'free_version_deactivated' ) );
 
27
  }
28
  }
29
 
@@ -58,16 +62,11 @@ class WP_Hummingbird_Admin_Notices {
58
  ?>
59
  <div class="notice-info notice wphb-notice">
60
  <p>
 
61
  <?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 ) ); ?>
62
- <a class="wphb-dismiss" href="<?php echo esc_url ( $dismiss_url ); ?>"><span class="dashicons dashicons-dismiss"></span></a>
63
  </p>
64
  </div>
65
- <style>
66
- .wphb-notice .wphb-dismiss {
67
- text-decoration: none;
68
- float:right;
69
- }
70
- </style>
71
  <?php
72
  }
73
  }
@@ -94,8 +93,8 @@ class WP_Hummingbird_Admin_Notices {
94
  ?>
95
  <div class="notice-info notice wphb-notice">
96
  <p>
97
- <?php _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' ); ?>
98
- <a class="wphb-dismiss" href="<?php echo esc_url ( $dismiss_url ); ?>"><span class="dashicons dashicons-dismiss"></span></a>
99
  </p>
100
  </div>
101
  <style>
@@ -107,11 +106,58 @@ class WP_Hummingbird_Admin_Notices {
107
  <?php
108
  }
109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
 
111
  /**
112
- * Check if a notice has been dismissed by the current user
113
  *
114
- * @param string $notice
 
115
  *
116
  * @return mixed
117
  */
@@ -124,29 +170,30 @@ class WP_Hummingbird_Admin_Notices {
124
  }
125
 
126
  /**
127
- * Dismiss a notice
128
  *
129
- * @param string $notice
130
  */
131
- public function dismiss( $notice) {
132
  check_admin_referer( 'wphb-dismiss-notice' );
133
 
134
  $user_notices = array(
135
- 'upgrade-to-pro'
136
  );
137
 
138
  $options_notices = array(
139
- 'free-deactivated'
 
140
  );
141
 
142
- if ( in_array( $notice, $user_notices ) ) {
143
  update_user_meta( get_current_user_id(), 'wphb-' . $notice . '-dismissed', true );
144
- } elseif ( in_array( $notice, $options_notices ) ) {
145
  delete_site_option( 'wphb-notice-' . $notice . '-show' );
146
  }
147
 
148
  $redirect = remove_query_arg( array( 'wphb-dismiss', '_wpnonce' ) );
149
- wp_redirect( $redirect );
150
  exit;
151
  }
152
 
4
  exit;
5
  }
6
 
7
+ /**
8
+ * Class WP_Hummingbird_Admin_Notices
9
+ */
10
  class WP_Hummingbird_Admin_Notices {
11
 
12
  /**
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' ) );
26
+ add_action( 'network_admin_notices', array( $this, 'free_version_rate' ) );
27
+ } else {
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
 
62
  ?>
63
  <div class="notice-info notice wphb-notice">
64
  <p>
65
+ <?php /* translators: %s: Upgrade URL */ ?>
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
  }
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>
106
  <?php
107
  }
108
 
109
+ /**
110
+ * Offer the user to submit a review for the free version of the plugin.
111
+ *
112
+ * @since 1.5.4
113
+ */
114
+ public function free_version_rate() {
115
+ if ( ! get_plugins( '/wp-hummingbird-wporg' ) ) {
116
+ return;
117
+ }
118
+
119
+ if ( $this->is_dismissed( 'free-rated', 'option' ) ) {
120
+ return;
121
+ }
122
+
123
+ // Show only if at least 7 days have past after installation of the free version.
124
+ $now = current_time( 'timestamp' );
125
+ $free_installation = get_site_option( 'wphb-free-install-date' );
126
+ if ( ( $now - (int) $free_installation ) < 604800 ) {
127
+ return;
128
+ }
129
+
130
+ $cap = is_multisite() ? 'manage_network_plugins' : 'update_plugins';
131
+ if ( ! current_user_can( $cap ) ) {
132
+ return;
133
+ }
134
+
135
+ $dismiss_url = wp_nonce_url( add_query_arg( 'wphb-dismiss', 'free-rated' ), 'wphb-dismiss-notice' );
136
+ $review_url = 'https://wordpress.org/plugins/hummingbird-performance';
137
+
138
+ ?>
139
+ <div class="notice-info notice wphb-notice">
140
+ <p>
141
+ <?php
142
+ /* translators: %s: Review URL */
143
+ printf( __( 'We\'ve spent countless hours developing this free plugin for you, and we would really appreciate it if you <a href="%s" target="_blank">dropped us a quick rating</a>!', 'wphb' ), esc_url( $review_url ) ); ?>
144
+ <a class="wphb-dismiss" href="<?php echo esc_url( $dismiss_url ); ?>"><span class="dashicons dashicons-dismiss"></span></a>
145
+ </p>
146
+ </div>
147
+ <style>
148
+ .wphb-notice .wphb-dismiss {
149
+ text-decoration: none;
150
+ float:right;
151
+ }
152
+ </style>
153
+ <?php
154
+ }
155
 
156
  /**
157
+ * Check if a notice has been dismissed by the current user.
158
  *
159
+ * @param string $notice Notice.
160
+ * @param string $mode Default: user.
161
  *
162
  * @return mixed
163
  */
170
  }
171
 
172
  /**
173
+ * Dismiss a notice.
174
  *
175
+ * @param string $notice Notice.
176
  */
177
+ public function dismiss( $notice ) {
178
  check_admin_referer( 'wphb-dismiss-notice' );
179
 
180
  $user_notices = array(
181
+ 'upgrade-to-pro',
182
  );
183
 
184
  $options_notices = array(
185
+ 'free-deactivated',
186
+ 'free-rated',
187
  );
188
 
189
+ if ( in_array( $notice, $user_notices, true ) ) {
190
  update_user_meta( get_current_user_id(), 'wphb-' . $notice . '-dismissed', true );
191
+ } elseif ( in_array( $notice, $options_notices, true ) ) {
192
  delete_site_option( 'wphb-notice-' . $notice . '-show' );
193
  }
194
 
195
  $redirect = remove_query_arg( array( 'wphb-dismiss', '_wpnonce' ) );
196
+ wp_safe_redirect( $redirect );
197
  exit;
198
  }
199
 
admin/class-admin.php CHANGED
@@ -227,57 +227,67 @@ class WP_Hummingbird_Admin {
227
 
228
  /**
229
  * Show quick setup modal.
230
- *
231
- * @since 1.5.0
232
  */
233
- public function maybe_show_quick_setup() {
234
-
235
- // Only run on HB pages
236
- $hb_pages = array(
237
- 'toplevel_page_wphb',
238
- 'hummingbird_page_wphb-performance',
239
- 'hummingbird_page_wphb-minification',
240
- 'hummingbird_page_wphb-caching',
241
- 'hummingbird_page_wphb-gzip',
242
- 'hummingbird_page_wphb-uptime',
243
- );
244
- if ( ! in_array( get_current_screen()->id, $hb_pages ) )
245
- return;
246
-
247
- if ( ! is_user_logged_in() )
248
- return;
249
-
250
- // If setup has already ran - exit
251
- $quick_setup = get_option( 'wphb-quick-setup' );
252
- if ( true === $quick_setup['finished'] ) {
253
- return;
254
- }
255
-
256
- $enqueued = wp_script_is( 'wphb-admin', 'enqueued' );
257
-
258
- if ( ! $enqueued )
259
- wphb_enqueue_admin_scripts( WPHB_VERSION );
260
-
261
- // Enable automatic scans by default
262
- if ( wphb_is_member() ) {
263
- $settings = wphb_get_settings();
264
- $settings['email-notifications'] = true;
265
- // Enable automatic reports for members
266
- wphb_update_settings( $settings );
267
- }
268
-
269
- wphb_quick_setup_modal();
270
- wphb_check_performance_modal();
271
- ?>
272
-
273
- <script>
274
- jQuery(document).ready( function() {
275
- var module = WPHB_Admin.getModule('dashboard');
276
- module.startQuickSetup();
277
- });
278
- </script>
279
- <?php
280
- }
 
 
 
 
 
 
 
 
 
 
281
 
282
  }
283
 
227
 
228
  /**
229
  * Show quick setup modal.
230
+ *
231
+ * @since 1.5.0
232
  */
233
+ public function maybe_show_quick_setup() {
234
+
235
+ // Only run on HB pages.
236
+ $hb_pages = array(
237
+ 'toplevel_page_wphb',
238
+ 'hummingbird_page_wphb-performance',
239
+ 'hummingbird_page_wphb-minification',
240
+ 'hummingbird_page_wphb-caching',
241
+ 'hummingbird_page_wphb-gzip',
242
+ 'hummingbird_page_wphb-uptime',
243
+ 'toplevel_page_wphb-network',
244
+ 'hummingbird_page_wphb-performance-network',
245
+ 'hummingbird_page_wphb-minification-network',
246
+ 'hummingbird_page_wphb-caching-network',
247
+ 'hummingbird_page_wphb-gzip-network',
248
+ 'hummingbird_page_wphb-uptime-network',
249
+ );
250
+ if ( ! in_array( get_current_screen()->id, $hb_pages, true ) ) {
251
+ return;
252
+ }
253
+
254
+ if ( ! is_user_logged_in() ) {
255
+ return;
256
+ }
257
+
258
+ // If setup has already ran - exit.
259
+ $quick_setup = get_option( 'wphb-quick-setup' );
260
+ if ( true === $quick_setup['finished'] ) {
261
+ return;
262
+ }
263
+
264
+ $enqueued = wp_script_is( 'wphb-admin', 'enqueued' );
265
+
266
+ if ( ! $enqueued ) {
267
+ wphb_enqueue_admin_scripts( WPHB_VERSION );
268
+ }
269
+
270
+ // Enable automatic scans by default.
271
+ if ( wphb_is_member() ) {
272
+ $settings = wphb_get_settings();
273
+ $settings['email-notifications'] = true;
274
+ // Enable automatic reports for members.
275
+ wphb_update_settings( $settings );
276
+ }
277
+
278
+ wphb_quick_setup_modal();
279
+ wphb_check_performance_modal();
280
+ ?>
281
+ <script>
282
+ jQuery(document).ready( function() {
283
+ if ( window.WPHB_Admin ) {
284
+ var module = window.WPHB_Admin.getModule('dashboard');
285
+ module.startQuickSetup();
286
+ }
287
+ });
288
+ </script>
289
+ <?php
290
+ }
291
 
292
  }
293
 
admin/class-dashboard-page.php CHANGED
@@ -32,6 +32,7 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
32
  exit;
33
  }
34
  }
 
35
  public function render_header() {
36
  $clear_cache_url = add_query_arg( 'wphb-clear-files', 'true' );
37
  $clear_cache_url = wp_nonce_url( $clear_cache_url, 'wphb-clear-files' );
@@ -177,7 +178,10 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
177
  /* Uptime */
178
  $uptime_module = wphb_get_module( 'uptime' );
179
  $is_active = $uptime_module->is_active();
180
- $report = wphb_uptime_get_last_report( 'week' );
 
 
 
181
 
182
  if ( ! wphb_is_member() ) {
183
  $this->add_meta_box( 'dashboard/uptime/no-membership', __( 'Uptime Monitoring', 'wphb' ), null, array( $this, 'dashboard_uptime_module_metabox_header' ), null, 'box-dashboard-right', array( 'box_class' => 'dev-box content-box content-box-one-col-center' ) );
@@ -216,9 +220,12 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
216
 
217
  $uptime_module = wphb_get_module( 'uptime' );
218
  $uptime_active = $uptime_module->is_active();
219
- $uptime_report = wphb_uptime_get_last_report( 'week' );
 
 
 
220
  $site_date = '';
221
- if ( wphb_is_member() && $uptime_report ) {
222
  $gmt_date = date( 'Y-m-d H:i:s', $uptime_report->up_since );
223
  $site_date = get_date_from_gmt( $gmt_date, get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) );
224
  }
@@ -510,10 +517,15 @@ class WP_Hummingbird_Dashboard_Page extends WP_Hummingbird_Admin_Page {
510
 
511
  $smush_data = array( 'human' => '', 'percent' => 0 );
512
  $unsmushed_images = 0;
513
- if ( is_a( $wpsmushit_admin, 'WpSmushitAdmin' ) ) {
 
514
  $smush_data = $wpsmushit_admin->global_stats();
 
 
 
515
  $unsmushed_images = count( $wpsmush_db->get_unsmushed_attachments() );
516
  }
 
517
  $this->view(
518
  'dashboard/smush/meta-box',
519
  array(
32
  exit;
33
  }
34
  }
35
+
36
  public function render_header() {
37
  $clear_cache_url = add_query_arg( 'wphb-clear-files', 'true' );
38
  $clear_cache_url = wp_nonce_url( $clear_cache_url, 'wphb-clear-files' );
178
  /* Uptime */
179
  $uptime_module = wphb_get_module( 'uptime' );
180
  $is_active = $uptime_module->is_active();
181
+ $report = '';
182
+ if ( $is_active ) {
183
+ $report = wphb_uptime_get_last_report( 'week' );
184
+ }
185
 
186
  if ( ! wphb_is_member() ) {
187
  $this->add_meta_box( 'dashboard/uptime/no-membership', __( 'Uptime Monitoring', 'wphb' ), null, array( $this, 'dashboard_uptime_module_metabox_header' ), null, 'box-dashboard-right', array( 'box_class' => 'dev-box content-box content-box-one-col-center' ) );
220
 
221
  $uptime_module = wphb_get_module( 'uptime' );
222
  $uptime_active = $uptime_module->is_active();
223
+ $uptime_report = '';
224
+ if ( $uptime_active ) {
225
+ $uptime_report = wphb_uptime_get_last_report( 'week' );
226
+ }
227
  $site_date = '';
228
+ if ( wphb_is_member() && isset( $uptime_report->up_since ) ) {
229
  $gmt_date = date( 'Y-m-d H:i:s', $uptime_report->up_since );
230
  $site_date = get_date_from_gmt( $gmt_date, get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) );
231
  }
517
 
518
  $smush_data = array( 'human' => '', 'percent' => 0 );
519
  $unsmushed_images = 0;
520
+ if ( is_a( $wpsmushit_admin, 'WpSmushitAdmin' ) && method_exists( $wpsmushit_admin, 'global_stats' ) ) {
521
+ /** @var WpSmushitAdmin $wpsmushit_admin */
522
  $smush_data = $wpsmushit_admin->global_stats();
523
+ }
524
+ if ( is_a ( $wpsmush_db, 'WpSmushDB' ) && method_exists( $wpsmush_db, 'get_unsmushed_attachments' )) {
525
+ /** @var WpSmushDB $wpsmush_db */
526
  $unsmushed_images = count( $wpsmush_db->get_unsmushed_attachments() );
527
  }
528
+
529
  $this->view(
530
  'dashboard/smush/meta-box',
531
  array(
admin/class-minification-page.php CHANGED
@@ -40,14 +40,14 @@ class WP_Hummingbird_Minification_Page extends WP_Hummingbird_Admin_Page {
40
 
41
  wphb_update_settings( $options );
42
 
43
- wp_redirect( add_query_arg( 'updated', 'true' ) );
44
  exit;
45
  }
46
 
47
  if ( isset( $_POST['clear-cache'] ) ) {
48
  wphb_clear_minification_cache( false );
49
  $url = remove_query_arg( 'updated' );
50
- wp_redirect( add_query_arg( 'wphb-cache-cleared', 'true', $url ) );
51
  exit;
52
  }
53
 
40
 
41
  wphb_update_settings( $options );
42
 
43
+ wp_safe_redirect( add_query_arg( 'updated', 'true' ) );
44
  exit;
45
  }
46
 
47
  if ( isset( $_POST['clear-cache'] ) ) {
48
  wphb_clear_minification_cache( false );
49
  $url = remove_query_arg( 'updated' );
50
+ wp_safe_redirect( add_query_arg( 'wphb-cache-cleared', 'true', $url ) );
51
  exit;
52
  }
53
 
admin/class-performance-page.php CHANGED
@@ -31,7 +31,6 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
31
  //$this->recommendations = wphb_get_number_of_issues( 'performance' );
32
  //$this->get_error_status();
33
  }
34
-
35
  public function render_header() {
36
  $this->get_error_status();
37
 
@@ -40,16 +39,16 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
40
  $run_url = wp_nonce_url( $run_url, 'wphb-run-performance-test' );
41
  $next_test_on = WP_Hummingbird_Module_Performance::can_run_test();
42
  ?>
43
- <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-performance-report-settings-updated">
44
- <p><?php _e( 'Settings updated', 'wphb' ); ?></p>
45
- </div>
46
  <section id="header">
47
  <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
48
  <div class="actions label-and-button">
49
  <?php if ( $last_report && ! is_wp_error( $last_report ) ): ?>
50
  <?php
51
- $data_time = strtotime( get_date_from_gmt( date( 'Y-m-d H:i:s', $last_report->data->time ) ) );
52
- $disabled = true !== $next_test_on;
53
  ?>
54
  <p class="actions-label">
55
  <?php printf( __('Your last performance test was on <strong>%s</strong> at <strong>%s</strong>', 'wphb' ), date_i18n( get_option( 'date_format' ), $data_time ), date_i18n( get_option( 'time_format' ), $data_time ) ); ?>
@@ -76,12 +75,8 @@ class WP_Hummingbird_Performance_Report_Page extends WP_Hummingbird_Admin_Page {
76
  return;
77
 
78
  // Start the test
79
- wphb_performance_clear_cache();
80
  wphb_performance_init_scan();
81
 
82
- // This will trigger the popup
83
- wphb_performance_set_doing_report( true );
84
-
85
  wp_redirect( remove_query_arg( array( 'run', '_wpnonce' ) ) );
86
  exit;
87
  }
31
  //$this->recommendations = wphb_get_number_of_issues( 'performance' );
32
  //$this->get_error_status();
33
  }
 
34
  public function render_header() {
35
  $this->get_error_status();
36
 
39
  $run_url = wp_nonce_url( $run_url, 'wphb-run-performance-test' );
40
  $next_test_on = WP_Hummingbird_Module_Performance::can_run_test();
41
  ?>
42
+ <div class="wphb-notice wphb-notice-success hidden" id="wphb-notice-performance-report-settings-updated">
43
+ <p><?php _e( 'Settings updated', 'wphb' ); ?></p>
44
+ </div>
45
  <section id="header">
46
  <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
47
  <div class="actions label-and-button">
48
  <?php if ( $last_report && ! is_wp_error( $last_report ) ): ?>
49
  <?php
50
+ $data_time = strtotime( get_date_from_gmt( date( 'Y-m-d H:i:s', $last_report->data->time ) ) );
51
+ $disabled = true !== $next_test_on;
52
  ?>
53
  <p class="actions-label">
54
  <?php printf( __('Your last performance test was on <strong>%s</strong> at <strong>%s</strong>', 'wphb' ), date_i18n( get_option( 'date_format' ), $data_time ), date_i18n( get_option( 'time_format' ), $data_time ) ); ?>
75
  return;
76
 
77
  // Start the test
 
78
  wphb_performance_init_scan();
79
 
 
 
 
80
  wp_redirect( remove_query_arg( array( 'run', '_wpnonce' ) ) );
81
  exit;
82
  }
admin/class-uptime-page.php CHANGED
@@ -4,46 +4,45 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
4
 
5
  private $current_report;
6
 
7
- public function render_header()
8
- {
9
 
10
  $data_ranges = $this->get_data_ranges();
11
  $data_range_selected = isset( $_GET['data-range'] ) && array_key_exists( $_GET['data-range'], $this->get_data_ranges() ) ? $_GET['data-range'] : 'week';
12
  ?>
13
 
14
- <section id="header">
15
- <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
16
- <?php
17
- $module = wphb_get_module( 'uptime' );
18
- $is_active = $module->is_active();
19
- if ( wphb_is_member() && $is_active ): ?>
20
- <div class="actions status">
21
- <div class="toggle-group toggle-group-with-buttons">
22
- <div class="tooltip-box">
23
- <span class="toggle" tooltip="<?php _e( 'Disable Uptime', 'wphb' ); ?>">
24
- <input type="checkbox" id="wphb-disable-uptime" class="toggle-checkbox" name="wphb-disable-uptime" <?php checked( wphb_get_setting( 'uptime' ) ); ?>>
25
- <label for="wphb-disable-uptime" class="toggle-label"></label>
26
- </span>
27
- </div>
28
- </div>
29
- <span class="spinner right"></span>
30
- </div>
31
- <div class="actions">
32
- <span class="spinner left"></span>
33
- <label for="wphb-uptime-data-range" class="inline-label"><?php _e( 'Reporting period', 'wphb' ); ?></label>
34
- <select name="wphb-uptime-data-range" id="wphb-uptime-data-range">
35
- <?php foreach ( $data_ranges as $range => $label ): ?>
36
- <option
37
- value="<?php echo esc_attr( $range ); ?>"
38
- <?php selected( $data_range_selected, $range ); ?>
39
- data-url="<?php echo esc_url( add_query_arg( 'data-range', $range, wphb_get_admin_menu_url( 'uptime' ) ) ); ?>">
40
- <?php echo esc_html( $label ); ?>
41
- </option>
42
- <?php endforeach; ?>
43
- </select>
44
- </div>
45
- <?php endif; ?>
46
- </section><!-- end header -->
47
 
48
  <?php
49
  //parent::render_header(); // TODO: Change the autogenerated stub
@@ -51,17 +50,16 @@ class WP_Hummingbird_Uptime_Page extends WP_Hummingbird_Admin_Page {
51
 
52
  public function register_meta_boxes() {
53
 
54
- // Check if Uptime is active in the server
55
  if ( wphb_is_uptime_remotely_enabled() ) {
56
  wphb_uptime_enable_locally();
57
- }
58
- else {
59
  wphb_uptime_disable_locally();
60
  }
61
 
62
  $this->run_actions();
63
 
64
- /** @var WP_Hummingbird_Module_Uptime $module */
65
  $module = wphb_get_module( 'uptime' );
66
  $is_active = $module->is_active();
67
  $uptime_report = wphb_uptime_get_last_report( $this->get_current_data_range() );
4
 
5
  private $current_report;
6
 
7
+ public function render_header() {
 
8
 
9
  $data_ranges = $this->get_data_ranges();
10
  $data_range_selected = isset( $_GET['data-range'] ) && array_key_exists( $_GET['data-range'], $this->get_data_ranges() ) ? $_GET['data-range'] : 'week';
11
  ?>
12
 
13
+ <section id="header">
14
+ <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
15
+ <?php
16
+ $module = wphb_get_module( 'uptime' );
17
+ $is_active = $module->is_active();
18
+ if ( wphb_is_member() && $is_active ) : ?>
19
+ <div class="actions status">
20
+ <div class="toggle-group toggle-group-with-buttons">
21
+ <div class="tooltip-box">
22
+ <span class="toggle" tooltip="<?php esc_attr_e( 'Disable Uptime', 'wphb' ); ?>">
23
+ <input type="checkbox" id="wphb-disable-uptime" class="toggle-checkbox" name="wphb-disable-uptime" <?php checked( wphb_get_setting( 'uptime' ) ); ?>>
24
+ <label for="wphb-disable-uptime" class="toggle-label"></label>
25
+ </span>
26
+ </div>
27
+ </div>
28
+ <span class="spinner right"></span>
29
+ </div>
30
+ <div class="actions">
31
+ <span class="spinner left"></span>
32
+ <label for="wphb-uptime-data-range" class="inline-label"><?php esc_html_e( 'Reporting period', 'wphb' ); ?></label>
33
+ <select name="wphb-uptime-data-range" id="wphb-uptime-data-range">
34
+ <?php foreach ( $data_ranges as $range => $label ) : ?>
35
+ <option
36
+ value="<?php echo esc_attr( $range ); ?>"
37
+ <?php selected( $data_range_selected, $range ); ?>
38
+ data-url="<?php echo esc_url( add_query_arg( 'data-range', $range, wphb_get_admin_menu_url( 'uptime' ) ) ); ?>">
39
+ <?php echo esc_html( $label ); ?>
40
+ </option>
41
+ <?php endforeach; ?>
42
+ </select>
43
+ </div>
44
+ <?php endif; ?>
45
+ </section><!-- end header -->
46
 
47
  <?php
48
  //parent::render_header(); // TODO: Change the autogenerated stub
50
 
51
  public function register_meta_boxes() {
52
 
53
+ // Check if Uptime is active in the server.
54
  if ( wphb_is_uptime_remotely_enabled() ) {
55
  wphb_uptime_enable_locally();
56
+ } else {
 
57
  wphb_uptime_disable_locally();
58
  }
59
 
60
  $this->run_actions();
61
 
62
+ /* @var WP_Hummingbird_Module_Uptime $module */
63
  $module = wphb_get_module( 'uptime' );
64
  $is_active = $module->is_active();
65
  $uptime_report = wphb_uptime_get_last_report( $this->get_current_data_range() );
admin/views/caching/cloudflare-meta-box.php CHANGED
@@ -89,18 +89,21 @@ $cloudflare_js_settings = wp_json_encode( $cloudflare_js_settings );
89
  <script type="text/template" id="cloudflare-step-final">
90
  <div class="cloudflare-step">
91
  <div class="wphb-notice wphb-notice-blue">
92
- <p><?php _e( 'CloudFlare is active on this domain. The settings you choose here will also update CloudFlare settings.', 'wphb' ); ?></p>
93
  </div>
94
  <p class="cloudflare-data">
95
- <?php if ( ! empty( wphb_get_setting( 'cloudflare-zone-name' ) ) ) : ?>
96
- <span><strong><?php _ex( 'Zone', 'CloudFlare Zone', 'wphb' ); ?>:</strong> {{ data.zoneName }}</span>
97
- <?php endif; ?>
98
- <?php if ( ! empty ( $cf_module->get_plan() ) ) : ?>
99
- <span><strong><?php _ex( 'Plan', 'CloudFlare Plan', 'wphb' ); ?>:</strong> {{ data.plan }}</span>
100
- <?php endif; ?>
 
 
 
101
  </p>
102
  <hr>
103
- <p class="cloudflare-clear-cache-text"><?php _e( 'Made changes to your website? Use Purge Cache button to clear CloudFlare\'s cache', 'wphb' ); ?></p class="cloudflare-clear-cache-text">
104
  <p class="cloudflare-clear-cache">
105
  <input type="submit" class="button button-ghost" value="<?php esc_attr_e( 'Purge Cache', 'wphb' ); ?>">
106
  <span class="spinner cloudflare-spinner"></span>
@@ -112,7 +115,7 @@ $cloudflare_js_settings = wp_json_encode( $cloudflare_js_settings );
112
 
113
  <script>
114
  jQuery(document).ready( function( $ ) {
115
- WPHB_Admin.DashboardCloudFlare.init( <?php echo $cloudflare_js_settings; ?> );
116
  });
117
  </script>
118
 
89
  <script type="text/template" id="cloudflare-step-final">
90
  <div class="cloudflare-step">
91
  <div class="wphb-notice wphb-notice-blue">
92
+ <p><?php esc_html_e( 'CloudFlare is active on this domain. The settings you choose here will also update CloudFlare settings.', 'wphb' ); ?></p>
93
  </div>
94
  <p class="cloudflare-data">
95
+ <?php
96
+ $zone_name = wphb_get_setting( 'cloudflare-zone-name' );
97
+ if ( ! empty( $zone_name ) ) : ?>
98
+ <span><strong><?php _ex( 'Zone', 'CloudFlare Zone', 'wphb' ); ?>:</strong> {{ data.zoneName }}</span>
99
+ <?php endif;
100
+ $plan = $cf_module->get_plan();
101
+ if ( ! empty( $plan ) ) : ?>
102
+ <span><strong><?php _ex( 'Plan', 'CloudFlare Plan', 'wphb' ); ?>:</strong> {{ data.plan }}</span>
103
+ <?php endif; ?>
104
  </p>
105
  <hr>
106
+ <p class="cloudflare-clear-cache-text"><?php esc_html_e( 'Made changes to your website? Use Purge Cache button to clear CloudFlare\'s cache', 'wphb' ); ?></p class="cloudflare-clear-cache-text">
107
  <p class="cloudflare-clear-cache">
108
  <input type="submit" class="button button-ghost" value="<?php esc_attr_e( 'Purge Cache', 'wphb' ); ?>">
109
  <span class="spinner cloudflare-spinner"></span>
115
 
116
  <script>
117
  jQuery(document).ready( function( $ ) {
118
+ window.WPHB_Admin.DashboardCloudFlare.init( <?php echo $cloudflare_js_settings; ?> );
119
  });
120
  </script>
121
 
admin/views/dashboard/welcome/meta-box.php CHANGED
@@ -23,13 +23,17 @@
23
  <span>
24
  <?php
25
  if ( $last_report && ! is_wp_error( $last_report ) ) {
26
- $data_time = strtotime( get_date_from_gmt( date( 'Y-m-d H:i:s', $last_report->data->time ) ) );
27
- echo date_i18n( get_option( 'date_format' ), $data_time ); ?> <span class="list-detail-stats-heading-extra-info"><?php printf( _x( 'at %s', 'Time of the last performance report', 'wphb' ), date_i18n( get_option( 'time_format' ), $data_time ) );
28
- } elseif ( wphb_performance_is_doing_report() ) {
29
- _e( 'Running scan...', 'wphb' );
30
- } else {
31
- _e( 'Never', 'wphb' );
32
- } ?>
 
 
 
 
33
  </span>
34
  <p><?php _e( 'Last test date', 'wphb' ); ?></p>
35
  </div>
@@ -79,4 +83,4 @@
79
  </ul>
80
  </div>
81
 
82
- </div><!-- end wphb-block-entry -->
23
  <span>
24
  <?php
25
  if ( $last_report && ! is_wp_error( $last_report ) ) {
26
+ $data_time = strtotime( get_date_from_gmt( date( 'Y-m-d H:i:s', $last_report->data->time ) ) );
27
+ echo date_i18n( get_option( 'date_format' ), $data_time ); ?>
28
+ <span class="list-detail-stats-heading-extra-info">
29
+ <?php printf( _x( 'at %s', 'Time of the last performance report', 'wphb' ), date_i18n( get_option( 'time_format' ), $data_time ) ); ?>
30
+ </span>
31
+ <?php
32
+ } elseif ( wphb_performance_is_doing_report() ) {
33
+ _e( 'Running scan...', 'wphb' );
34
+ } else {
35
+ _e( 'Never', 'wphb' );
36
+ } ?>
37
  </span>
38
  <p><?php _e( 'Last test date', 'wphb' ); ?></p>
39
  </div>
83
  </ul>
84
  </div>
85
 
86
+ </div><!-- end wphb-block-entry -->
admin/views/minification/enqueued-files-empty-meta-box.php CHANGED
@@ -8,7 +8,7 @@
8
 
9
  <div class="content">
10
  <p><?php echo sprintf( __( "Hummingbird's Minification engine can combine and minify the files your website outputs when a <br> user visits your website. The less requests your visitors have to make to your server, the <br> better. Let's check to see what we can optimise, %s!", 'wphb' ), $user ); ?></p>
11
- <a id="check-files" class="button button-large" href="#check-files-modal" rel="dialog"><?php _e( 'Activate Minification', 'wphb' ); ?></a>
12
  </div><!-- end content -->
13
 
14
  </div><!-- end wphb-block-entry-content -->
@@ -18,7 +18,7 @@
18
  <script>
19
  jQuery('#enable-cdn').on('click', function(e) {
20
  e.preventDefault();
21
- WDP.showOverlay( '#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' } );
22
  })
23
  </script>
24
 
@@ -29,10 +29,10 @@ if ( ! is_multisite() ) {
29
  wphb_enable_cdn_modal();
30
  }
31
 
32
- if ( $checking_files || isset( $_GET['wphb-cache-cleared'] ) ): // Show the progress bar if we are still checking files ?>
33
  <script>
34
  jQuery(document).ready( function() {
35
- var module = WPHB_Admin.getModule( 'minification' );
36
  jQuery('#check-files').trigger('click');
37
  });
38
  </script>
8
 
9
  <div class="content">
10
  <p><?php echo sprintf( __( "Hummingbird's Minification engine can combine and minify the files your website outputs when a <br> user visits your website. The less requests your visitors have to make to your server, the <br> better. Let's check to see what we can optimise, %s!", 'wphb' ), $user ); ?></p>
11
+ <a id="check-files" class="button button-large" href="#check-files-modal"><?php esc_html_e( 'Activate Minification', 'wphb' ); ?></a>
12
  </div><!-- end content -->
13
 
14
  </div><!-- end wphb-block-entry-content -->
18
  <script>
19
  jQuery('#enable-cdn').on('click', function(e) {
20
  e.preventDefault();
21
+ window.WDP.showOverlay( '#enable-cdn-modal', { class: 'wphb-modal small wphb-progress-modal no-close' } );
22
  })
23
  </script>
24
 
29
  wphb_enable_cdn_modal();
30
  }
31
 
32
+ if ( $checking_files || isset( $_GET['wphb-cache-cleared'] ) ): // Show the progress bar if we are still checking files. ?>
33
  <script>
34
  jQuery(document).ready( function() {
35
+ window.WPHB_Admin.getModule( 'minification' );
36
  jQuery('#check-files').trigger('click');
37
  });
38
  </script>
admin/views/minification/enqueued-files-meta-box.php CHANGED
@@ -98,7 +98,7 @@
98
 
99
  // toggle checkboxes
100
  jQuery('#minification-bulk-file').on('click', function() {
101
- const checkBoxes = jQuery('input[class=wphb-minification-file-selector]');
102
  checkBoxes.prop('checked', !checkBoxes.prop('checked'));
103
  });
104
  })
98
 
99
  // toggle checkboxes
100
  jQuery('#minification-bulk-file').on('click', function() {
101
+ var checkBoxes = jQuery('input[class=wphb-minification-file-selector]');
102
  checkBoxes.prop('checked', !checkBoxes.prop('checked'));
103
  });
104
  })
admin/views/modals/bulk-update-modal.php CHANGED
@@ -8,16 +8,16 @@
8
  });
9
 
10
  jQuery('.save-batch').on('click', function() {
11
- const filesCollection = WPHB_Admin.minification.rowsCollection;
12
 
13
- const modal = jQuery( '#bulk-update-modal' );
14
  // Get the selected batch status
15
- let minify = modal.find( 'input.filter-minify' ).prop( 'checked' ),
16
  combine = modal.find( 'input.filter-combine').prop('checked'),
17
  footer = modal.find( 'input.filter-position-footer' ).prop( 'checked' ),
18
  selectedFiles = filesCollection.getSelectedItems();
19
 
20
- for ( let i in selectedFiles ) {
21
  selectedFiles[i].change( 'minify', minify );
22
  selectedFiles[i].change( 'combine', combine );
23
  selectedFiles[i].change( 'footer', footer );
8
  });
9
 
10
  jQuery('.save-batch').on('click', function() {
11
+ var filesCollection = WPHB_Admin.minification.rowsCollection;
12
 
13
+ var modal = jQuery( '#bulk-update-modal' );
14
  // Get the selected batch status
15
+ var minify = modal.find( 'input.filter-minify' ).prop( 'checked' ),
16
  combine = modal.find( 'input.filter-combine').prop('checked'),
17
  footer = modal.find( 'input.filter-position-footer' ).prop( 'checked' ),
18
  selectedFiles = filesCollection.getSelectedItems();
19
 
20
+ for ( var i in selectedFiles ) {
21
  selectedFiles[i].change( 'minify', minify );
22
  selectedFiles[i].change( 'combine', combine );
23
  selectedFiles[i].change( 'footer', footer );
admin/views/modals/check-performance-modal.php CHANGED
@@ -1,26 +1,32 @@
 
1
  <dialog class="wphb-modal small wphb-progress-modal no-close" id="run-performance-test-modal" title="<?php _e( 'Test in progress', 'wphb' ); ?>">
2
  <div class="wphb-dialog-content">
3
  <p><?php _e( 'Hummingbird is running a test to measure your website performance, please wait.', 'wphb' ); ?></p>
4
  <?php $progress = get_option( 'wphb-minification-check-files-progress' ); ?>
 
 
 
 
 
5
 
6
- <div class="wphb-block-test" id="run-performance-test-modal-modal-content">
7
- <div class="wphb-scan-progress">
8
- <div class="wphb-scan-progress-text">
9
- <span>0%</span>
10
- </div><!-- end wphb-scan-progress-text -->
11
- <div class="wphb-scan-progress-bar">
12
- <span style="width: 0%"></span>
13
- </div><!-- end wphb-scan-progress-bar -->
14
- </div><!-- end wphb-scan-progress -->
15
- </div><!-- end wphb-block-test -->
16
 
17
- <div class="wphb-progress-state">
18
- <span class="wphb-progress-state-text"><?php _e( 'Performance test in progress...', 'wphb' ); ?></span>
19
- </div><!-- end wphb-progress-state -->
20
 
21
- <img class="wphb-image wphb-image-center wphb-modal-image-bottom"
22
- src="<?php echo wphb_plugin_url() . 'admin/assets/image/hummingbird-modal-quicksetup.png'; ?>"
23
- srcset="<?php echo wphb_plugin_url() . 'admin/assets/image/hummingbird-modal-quicksetup@2x.png'; ?> 2x"
24
- alt="<?php esc_attr_e( 'Reduce your page load time!', 'wphb' ); ?>">
25
- </div><!-- end wphb-dialog-content -->
26
- </dialog><!-- end run-performance-test-modal-modal -->
1
+ <<<<<<< HEAD
2
  <dialog class="wphb-modal small wphb-progress-modal no-close" id="run-performance-test-modal" title="<?php _e( 'Test in progress', 'wphb' ); ?>">
3
  <div class="wphb-dialog-content">
4
  <p><?php _e( 'Hummingbird is running a test to measure your website performance, please wait.', 'wphb' ); ?></p>
5
  <?php $progress = get_option( 'wphb-minification-check-files-progress' ); ?>
6
+ =======
7
+ <dialog class="wphb-modal small wphb-progress-modal no-close" id="run-performance-test-modal" title="<?php esc_attr_e( 'Test in progress', 'wphb' ); ?>">
8
+ <div class="wphb-dialog-content">
9
+ <p><?php esc_html_e( 'Hummingbird is running a test to measure your website performance, please wait.', 'wphb' ); ?></p>
10
+ >>>>>>> b8f82a5... Update code to support IE browsers
11
 
12
+ <div class="wphb-block-test" id="run-performance-test-modal-modal-content">
13
+ <div class="wphb-scan-progress">
14
+ <div class="wphb-scan-progress-text">
15
+ <span>0%</span>
16
+ </div><!-- end wphb-scan-progress-text -->
17
+ <div class="wphb-scan-progress-bar">
18
+ <span style="width: 0%"></span>
19
+ </div><!-- end wphb-scan-progress-bar -->
20
+ </div><!-- end wphb-scan-progress -->
21
+ </div><!-- end wphb-block-test -->
22
 
23
+ <div class="wphb-progress-state">
24
+ <span class="wphb-progress-state-text"><?php esc_html_e( 'Performance test in progress...', 'wphb' ); ?></span>
25
+ </div><!-- end wphb-progress-state -->
26
 
27
+ <img class="wphb-image wphb-image-center wphb-modal-image-bottom"
28
+ src="<?php echo wphb_plugin_url() . 'admin/assets/image/hummingbird-modal-quicksetup.png'; ?>"
29
+ srcset="<?php echo wphb_plugin_url() . 'admin/assets/image/hummingbird-modal-quicksetup@2x.png'; ?> 2x"
30
+ alt="<?php esc_attr_e( 'Reduce your page load time!', 'wphb' ); ?>">
31
+ </div><!-- end wphb-dialog-content -->
32
+ </dialog><!-- end run-performance-test-modal-modal -->
admin/views/performance/empty-summary-meta-box.php CHANGED
@@ -8,8 +8,7 @@
8
  alt="<?php esc_attr_e( "Let's see what we can improve!", 'wphb' ); ?>">
9
 
10
  <p><?php _e( 'For us to know what to improve we need to test your website. All testing is done in the background via our <br> secure servers. Once complete, we\'ll give you a list of things to improve, and how to do it.', 'wphb' ); ?></p>
11
- <a href="#run-performance-test-modal" class="button button-large" id="run-performance-test" rel="dialog"><?php _e( 'Test my website', 'wphb' ); ?></a>
12
-
13
  </div><!-- end content -->
14
 
15
  </div><!-- end wphb-block-entry-content -->
@@ -18,11 +17,12 @@
18
 
19
  <?php wphb_check_performance_modal(); ?>
20
 
21
- <?php if ( $doing_report ): // Show the progress bar if we are still checking files ?>
22
  <script>
23
- jQuery( document).ready( function() {
24
- var module = WPHB_Admin.getModule( 'performance' );
25
  jQuery('#run-performance-test').trigger('click');
26
  });
27
  </script>
28
- <?php endif; ?>
 
8
  alt="<?php esc_attr_e( "Let's see what we can improve!", 'wphb' ); ?>">
9
 
10
  <p><?php _e( 'For us to know what to improve we need to test your website. All testing is done in the background via our <br> secure servers. Once complete, we\'ll give you a list of things to improve, and how to do it.', 'wphb' ); ?></p>
11
+ <a href="#run-performance-test-modal" class="button button-large" id="run-performance-test"><?php esc_html_e( 'Test my website', 'wphb' ); ?></a>
 
12
  </div><!-- end content -->
13
 
14
  </div><!-- end wphb-block-entry-content -->
17
 
18
  <?php wphb_check_performance_modal(); ?>
19
 
20
+ <?php if ( $doing_report ) : // Show the progress bar if we are still checking files. ?>
21
  <script>
22
+ jQuery(document).ready( function() {
23
+ window.WPHB_Admin.getModule( 'performance' );
24
  jQuery('#run-performance-test').trigger('click');
25
  });
26
  </script>
27
+ <?php endif; ?>
28
+
admin/views/performance/summary-membership-meta-box.php CHANGED
@@ -16,6 +16,6 @@
16
 
17
  <script>
18
  jQuery( document).ready( function() {
19
- WPHB_Admin.utils.membershipModal.open();
20
  });
21
  </script>
16
 
17
  <script>
18
  jQuery( document).ready( function() {
19
+ window.WPHB_Admin.utils.membershipModal.open();
20
  });
21
  </script>
admin/views/tabs.php CHANGED
@@ -1,8 +1,8 @@
1
  <ul class="wphb-tabs hide-on-mobile">
2
- <?php foreach ( $this->get_tabs() as $tab => $name ): ?>
3
  <li class="wphb-tab <?php echo ( $tab === $this->get_current_tab() ) ? 'current' : null ?>">
4
  <a href="<?php echo esc_url( $this->get_tab_url( $tab ) ) ?>">
5
- <?php echo $name; ?>
6
  </a>
7
  <?php do_action( 'wphb_admin_after_tab_' . $this->get_slug(), $tab ); ?>
8
  </li>
@@ -10,24 +10,9 @@
10
  </ul>
11
 
12
  <div class="mline hide-on-large">
13
- <div class="select-container mobile-nav">
14
- <span class="dropdown-handle"><i class="wdv-icon wdv-icon-reorder"></i></span>
15
- <select class="mobile-nav wdev-styled" style="display: none;">
16
- <?php foreach ( $this->get_tabs() as $tab => $name ): ?>
17
- <option value="#<?php echo $tab; ?>" <?php selected( $this->get_current_tab(), $tab ); ?>><?php echo $name; ?></option>
18
- <?php endforeach; ?>
19
- </select>
20
- <div class="select-list-container">
21
- <div class="list-value">
22
- <?php echo $this->get_tab_name( $this->get_current_tab() ); ?>
23
- </div>
24
- <ul class="list-results wphb-tabs">
25
- <?php foreach ( $this->get_tabs() as $tab => $name ): ?>
26
- <li class="wphb-tab <?php echo ( $tab === $this->get_current_tab() ) ? 'current' : null ?>">
27
- <a href="<?php echo esc_url( $this->get_tab_url( $tab ) ) ?>" data-tab="#<?php echo $tab; ?>"><?php echo $name; ?></a>
28
- </li>
29
- <?php endforeach; ?>
30
- </ul>
31
- </div>
32
- </div>
33
- </div><!-- end mline -->
1
  <ul class="wphb-tabs hide-on-mobile">
2
+ <?php foreach ( $this->get_tabs() as $tab => $name ) : ?>
3
  <li class="wphb-tab <?php echo ( $tab === $this->get_current_tab() ) ? 'current' : null ?>">
4
  <a href="<?php echo esc_url( $this->get_tab_url( $tab ) ) ?>">
5
+ <?php echo esc_html( $name ); ?>
6
  </a>
7
  <?php do_action( 'wphb_admin_after_tab_' . $this->get_slug(), $tab ); ?>
8
  </li>
10
  </ul>
11
 
12
  <div class="mline hide-on-large">
13
+ <select class="mobile-nav">
14
+ <?php foreach ( $this->get_tabs() as $tab => $name ) : ?>
15
+ <option value="<?php echo esc_url( $this->get_tab_url( $tab ) ) ?>" <?php selected( $this->get_current_tab(), $tab ); ?>><?php echo esc_html( $name ); ?></option>
16
+ <?php endforeach; ?>
17
+ </select>
18
+ </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/views/uptime/meta-box.php CHANGED
@@ -41,7 +41,7 @@
41
 
42
  <script>
43
  jQuery(document).ready( function() {
44
- WPHB_Admin.getModule( 'uptime' );
45
  });
46
  </script>
47
  <?php endif; ?>
41
 
42
  <script>
43
  jQuery(document).ready( function() {
44
+ window.WPHB_Admin.getModule( 'uptime' );
45
  });
46
  </script>
47
  <?php endif; ?>
admin/views/wphb-minification-page.php CHANGED
@@ -20,9 +20,9 @@
20
  <div class="minification-main-screen">
21
  <?php $this->do_meta_boxes( 'main' ); ?>
22
 
23
- <?php if ( $this->has_meta_boxes( 'main-2' ) ): ?>
24
  <div class="wphb-notice wphb-notice-box no-top-space">
25
- <p><?php _e( 'Hummingbird will combine your files as best it can, however, depending on your settings, combining all your files might not be possible. What you see here is the best output Hummingbird can muster!', 'wphb' ); ?></p>
26
  </div>
27
  <?php $this->do_meta_boxes( 'main-2' ); ?>
28
  <?php endif; ?>
@@ -46,9 +46,9 @@ wphb_membership_modal();
46
 
47
  <script>
48
  jQuery(document).ready( function() {
49
- var module = WPHB_Admin.getModule( 'minification' );
50
- <?php if ( isset( $_GET['run'] ) ): ?>
51
- module.$checkFilesButton.trigger( 'click' );
52
  <?php endif; ?>
53
  });
54
  </script>
20
  <div class="minification-main-screen">
21
  <?php $this->do_meta_boxes( 'main' ); ?>
22
 
23
+ <?php if ( $this->has_meta_boxes( 'main-2' ) ) : ?>
24
  <div class="wphb-notice wphb-notice-box no-top-space">
25
+ <p><?php esc_html_e( 'Hummingbird will combine your files as best it can, however, depending on your settings, combining all your files might not be possible. What you see here is the best output Hummingbird can muster!', 'wphb' ); ?></p>
26
  </div>
27
  <?php $this->do_meta_boxes( 'main-2' ); ?>
28
  <?php endif; ?>
46
 
47
  <script>
48
  jQuery(document).ready( function() {
49
+ var module = window.WPHB_Admin.getModule( 'minification' );
50
+ <?php if ( isset( $_GET['run'] ) ) : ?>
51
+ module.$checkFilesButton.trigger( 'click' );
52
  <?php endif; ?>
53
  });
54
  </script>
admin/views/wphb-page.php CHANGED
@@ -13,6 +13,6 @@ wphb_membership_modal();
13
 
14
  <script>
15
  jQuery( document).ready( function () {
16
- WPHB_Admin.getModule( 'dashboard' );
17
  });
18
- </script>
13
 
14
  <script>
15
  jQuery( document).ready( function () {
16
+ window.WPHB_Admin.getModule( 'dashboard' );
17
  });
18
+ </script>
admin/views/wphb-performance-page.php CHANGED
@@ -4,27 +4,27 @@ $last_test = wphb_performance_get_last_report();
4
  ?>
5
 
6
  <?php if ( $this->has_meta_boxes( 'summary' ) ) : ?>
7
- <div class="row">
8
- <?php $this->do_meta_boxes( 'summary' ); ?>
9
- </div>
10
  <?php endif; ?>
11
 
12
  <div class="row">
13
- <?php if ( $last_test ) : ?>
14
  <div class="col-fifth">
15
  <?php $this->show_tabs(); ?>
16
- </div><!-- end col-sixth -->
17
 
18
- <div class="col-four-fifths">
19
- <?php $this->do_meta_boxes( $this->get_current_tab() ); ?>
20
- </div>
21
- <?php else : ?>
22
- <?php $this->do_meta_boxes( 'main' ); ?>
23
- <?php endif; ?>
24
  </div><!-- end row -->
25
 
26
  <script>
27
  jQuery(document).ready( function() {
28
- WPHB_Admin.getModule( 'performance' );
29
  });
30
  </script>
4
  ?>
5
 
6
  <?php if ( $this->has_meta_boxes( 'summary' ) ) : ?>
7
+ <div class="row">
8
+ <?php $this->do_meta_boxes( 'summary' ); ?>
9
+ </div>
10
  <?php endif; ?>
11
 
12
  <div class="row">
13
+ <?php if ( $last_test ) : ?>
14
  <div class="col-fifth">
15
  <?php $this->show_tabs(); ?>
16
+ </div><!-- end col-sixth -->
17
 
18
+ <div class="col-four-fifths">
19
+ <?php $this->do_meta_boxes( $this->get_current_tab() ); ?>
20
+ </div>
21
+ <?php else : ?>
22
+ <?php $this->do_meta_boxes( 'main' ); ?>
23
+ <?php endif; ?>
24
  </div><!-- end row -->
25
 
26
  <script>
27
  jQuery(document).ready( function() {
28
+ window.WPHB_Admin.getModule( 'performance' );
29
  });
30
  </script>
core/api/request/wpmudev.php CHANGED
@@ -26,12 +26,13 @@ class WP_Hummingbird_API_Request_WPMUDEV extends WP_Hummingbird_API_Request {
26
  }
27
 
28
  public function get_api_url( $path = '' ) {
 
29
  if ( defined( 'WPHB_TEST_API_URL' ) && WPHB_TEST_API_URL ) {
30
- $url = WPHB_TEST_API_URL;
 
31
  } else {
32
- /** @var WP_Hummingbird_API_Service_Performance|WP_Hummingbird_API_Service_Uptime $service */
33
  $service = $this->get_service();
34
- $url = 'https://premium.wpmudev.org/api/' . $this->get_service()->get_name() . '/' . $service->get_version() . '/';
35
  }
36
 
37
  $url = trailingslashit( $url . $path );
26
  }
27
 
28
  public function get_api_url( $path = '' ) {
29
+ /** @var WP_Hummingbird_API_Service_Performance|WP_Hummingbird_API_Service_Uptime $service */
30
  if ( defined( 'WPHB_TEST_API_URL' ) && WPHB_TEST_API_URL ) {
31
+ $service = $this->get_service();
32
+ $url = WPHB_TEST_API_URL . $service->get_name() . '/' . $service->get_version() . '/';
33
  } else {
 
34
  $service = $this->get_service();
35
+ $url = 'https://premium.wpmudev.org/api/' . $service->get_name() . '/' . $service->get_version() . '/';
36
  }
37
 
38
  $url = trailingslashit( $url . $path );
core/class-installer.php CHANGED
@@ -98,7 +98,7 @@ if ( ! class_exists( 'WP_Hummingbird_Installer' ) ) {
98
  */
99
  public static function maybe_upgrade() {
100
  if ( defined( 'WPHB_ACTIVATING' ) ) {
101
- // Avoid to execute this over an over in same thread execution
102
  return;
103
  }
104
 
@@ -128,7 +128,9 @@ if ( ! class_exists( 'WP_Hummingbird_Installer' ) ) {
128
 
129
  if ( $version != WPHB_VERSION ) {
130
 
131
- define( 'WPHB_UPGRADING', true );
 
 
132
 
133
  if ( version_compare( $version, '1.0-RC-7', '<' ) ) {
134
  delete_site_option( 'wphb-server-type' );
@@ -180,6 +182,10 @@ if ( ! class_exists( 'WP_Hummingbird_Installer' ) ) {
180
  self::upgrade_1_5_3();
181
  }
182
 
 
 
 
 
183
  update_site_option( 'wphb_version', WPHB_VERSION );
184
  } // End if().
185
  }
@@ -203,6 +209,14 @@ if ( ! class_exists( 'WP_Hummingbird_Installer' ) ) {
203
  self::upgrade_1_5();
204
  }
205
 
 
 
 
 
 
 
 
 
206
  update_option( 'wphb_version', WPHB_VERSION );
207
  }
208
 
@@ -252,7 +266,6 @@ if ( ! class_exists( 'WP_Hummingbird_Installer' ) ) {
252
  }
253
  }
254
  }
255
-
256
  wphb_update_settings( $options );
257
  }
258
 
@@ -291,5 +304,41 @@ if ( ! class_exists( 'WP_Hummingbird_Installer' ) ) {
291
  delete_metadata( 'user', '', 'wphb-hide-welcome-box', '', true );
292
  }
293
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
294
  }
295
  }
98
  */
99
  public static function maybe_upgrade() {
100
  if ( defined( 'WPHB_ACTIVATING' ) ) {
101
+ // Avoid to execute this over an over in same thread execution.
102
  return;
103
  }
104
 
128
 
129
  if ( $version != WPHB_VERSION ) {
130
 
131
+ if ( ! defined( 'WPHB_UPGRADING' ) ) {
132
+ define( 'WPHB_UPGRADING', true );
133
+ }
134
 
135
  if ( version_compare( $version, '1.0-RC-7', '<' ) ) {
136
  delete_site_option( 'wphb-server-type' );
182
  self::upgrade_1_5_3();
183
  }
184
 
185
+ if ( version_compare( $version, '1.5.4.beta.1', '<' ) ) {
186
+ self::upgrade_1_5_4_beta_1();
187
+ }
188
+
189
  update_site_option( 'wphb_version', WPHB_VERSION );
190
  } // End if().
191
  }
209
  self::upgrade_1_5();
210
  }
211
 
212
+ if ( version_compare( $version, '1.5.4.beta.1', '<' ) ) {
213
+ self::upgrade_1_5_4_beta_1();
214
+ }
215
+
216
+ if ( version_compare( $version, '1.5.4.beta.2', '<' ) ) {
217
+ self::upgrade_1_5_4_beta_2();
218
+ }
219
+
220
  update_option( 'wphb_version', WPHB_VERSION );
221
  }
222
 
266
  }
267
  }
268
  }
 
269
  wphb_update_settings( $options );
270
  }
271
 
304
  delete_metadata( 'user', '', 'wphb-hide-welcome-box', '', true );
305
  }
306
 
307
+ private static function upgrade_1_5_4_beta_1() {
308
+ $options = wphb_get_settings();
309
+
310
+ $scripts = array( 'jquery', 'jquery-migrate', 'jquery-core' );
311
+
312
+ foreach ( $scripts as $script ) {
313
+ // Remove jQuery from minification options
314
+ $blocked = array_search( $script, $options['block']['scripts'] );
315
+ if ( false !== $blocked ) {
316
+ unset( $options['block']['scripts'][ $blocked ] );
317
+ $options['block']['scripts'] = array_values( $options['block']['scripts'] );
318
+ }
319
+ $dont_minify = array_search( $script, $options['dont_minify']['scripts'] );
320
+ if ( false !== $dont_minify ) {
321
+ unset( $options['dont_minify']['scripts'][ $dont_minify ] );
322
+ $options['dont_minify']['scripts'] = array_values( $options['dont_minify']['scripts'] );
323
+ }
324
+ $combine = array_search( $script, $options['combine']['scripts'] );
325
+ if ( false !== $combine ) {
326
+ unset( $options['combine']['scripts'][ $combine ] );
327
+ $options['combine']['scripts'] = array_values( $options['combine']['scripts'] );
328
+ }
329
+
330
+ if ( isset( $options['position']['scripts'][ $script ] ) ) {
331
+ unset( $options['position']['scripts'][ $script ] );
332
+ }
333
+ }
334
+
335
+ wphb_update_settings( $options );
336
+ }
337
+
338
+
339
+ private static function upgrade_1_5_4_beta_2() {
340
+ wphb_clear_minification_cache( false );
341
+ }
342
+
343
  }
344
  }
core/integration.php CHANGED
@@ -1,3 +1,4 @@
1
  <?php
2
 
3
- include_once( 'integration/divi.php' );
 
1
  <?php
2
 
3
+ include_once( 'integration/divi.php' );
4
+ include_once( 'integration/avada.php' );
core/integration/avada.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Check that Avada theme is used
4
+ *
5
+ * @return bool
6
+ * @since 1.5.0
7
+ */
8
+ function wphb_et_avada_theme_active() {
9
+ $theme = wp_get_theme();
10
+ return ( 'avada' === strtolower( $theme ) || 'avada' === strtolower( $theme->get_template() ) );
11
+ }
12
+
13
+ /**
14
+ * Show notice
15
+ *
16
+ * @since 1.5.0
17
+ */
18
+ function wphb_avada_compiler_notice() {
19
+ $settings_url = admin_url( 'themes.php?page=avada_options' );
20
+ ?>
21
+ <div class="notice-info notice wphb-notice">
22
+ <p><?php printf( esc_attr__( 'JS Compiler detected in Avada Theme. For Hummingbird minification settings to work correctly, it is recommended you %s in Advanced - Dynamic CSS & JS.', 'wphb' ), '<a href="' . $settings_url . '" target="_blank">disable it</a>' ); ?></p>
23
+ </div>
24
+ <?php
25
+
26
+ }
27
+
28
+ /**
29
+ * Check to see if JS Compiler is enabled in Avada
30
+ *
31
+ * @since 1.5.0
32
+ */
33
+ if ( wphb_et_avada_theme_active() ) {
34
+ if ( ! function_exists( 'wphb_get_module' ) ) {
35
+ include_once( wphb_plugin_dir() . 'helpers/wp-hummingbird-helpers-modules.php' );
36
+ }
37
+ $fusion = get_option( 'fusion_options' );
38
+ if ( '1' === $fusion['js_compiler'] ) {
39
+ add_action( 'admin_notices', 'wphb_avada_compiler_notice' );
40
+ }
41
+ }
core/integration/divi.php CHANGED
@@ -1,5 +1,9 @@
1
  <?php
2
 
 
 
 
 
3
  function wphb_et_divi_theme_active() {
4
  $theme = wp_get_theme();
5
  return ( 'divi' === strtolower( $theme ) || 'divi' === strtolower( $theme->get_template() ) );
1
  <?php
2
 
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ }
6
+
7
  function wphb_et_divi_theme_active() {
8
  $theme = wp_get_theme();
9
  return ( 'divi' === strtolower( $theme ) || 'divi' === strtolower( $theme->get_template() ) );
core/modules-hooks.php CHANGED
@@ -10,13 +10,12 @@
10
  */
11
  add_filter( 'wphb_minification_display_enqueued_file', 'wphb_minification_hooks_hide_jquery_switchers', 10, 3 );
12
  function wphb_minification_hooks_hide_jquery_switchers( $display, $handle, $type ) {
13
-
14
  if ( 'toplevel_page_wphb' === get_current_screen()->id ) {
15
- if ( ( 'scripts' === $type && 'jquery' === $handle['handle'] ) || ( ! isset( $handle['original_size'] ) ) ) {
16
  return false;
17
  }
18
  } else {
19
- if ( 'scripts' === $type && 'jquery' === $handle['handle'] ) {
20
  return false;
21
  }
22
  }
@@ -24,3 +23,12 @@ function wphb_minification_hooks_hide_jquery_switchers( $display, $handle, $type
24
 
25
  return $display;
26
  }
 
 
 
 
 
 
 
 
 
10
  */
11
  add_filter( 'wphb_minification_display_enqueued_file', 'wphb_minification_hooks_hide_jquery_switchers', 10, 3 );
12
  function wphb_minification_hooks_hide_jquery_switchers( $display, $handle, $type ) {
 
13
  if ( 'toplevel_page_wphb' === get_current_screen()->id ) {
14
+ if ( ( 'scripts' === $type && in_array( $handle['handle'], array( 'jquery', 'jquery-core', 'jquery-migrate' ) ) ) || ( ! isset( $handle['original_size'] ) ) ) {
15
  return false;
16
  }
17
  } else {
18
+ if ( 'scripts' === $type && in_array( $handle['handle'], array( 'jquery', 'jquery-core', 'jquery-migrate' ) ) ) {
19
  return false;
20
  }
21
  }
23
 
24
  return $display;
25
  }
26
+
27
+ add_filter( 'wphb_combine_resource', 'wphb_minification_combine_jquery', 150, 3 );
28
+ add_filter( 'wphb_minify_resource', 'wphb_minification_combine_jquery', 150, 3 );
29
+ function wphb_minification_combine_jquery( $combine, $handle, $type ) {
30
+ if ( ( 'scripts' === $type && in_array( $handle, array( 'jquery', 'jquery-core', 'jquery-migrate' ) ) ) ) {
31
+ return false;
32
+ }
33
+ return $combine;
34
+ }
core/modules/class-module-minify.php CHANGED
@@ -86,7 +86,7 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
86
  $group = WP_Hummingbird_Module_Minify_Group::get_instance_by_post_id( $post_id );
87
 
88
  if ( is_a( $group, 'WP_Hummingbird_Module_Minify_Group' ) && $group->file_id ) {
89
- if ( $group->get_file_path() ) {
90
  wp_delete_file( $group->get_file_path() );
91
  }
92
  wp_cache_delete( 'wphb_minify_groups' );
@@ -252,9 +252,12 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
252
  // If we aren't in footer, remove handles that need to go to footer
253
  if ( ! self::is_in_footer() && isset ( $wp_dependencies->registered[ $handle ]->extra['group'] ) && $wp_dependencies->registered[ $handle ]->extra['group'] ) {
254
  $this->to_footer[$type][] = $handle;
 
255
  }
256
  }
257
 
 
 
258
  $return_to_wp = array();
259
 
260
  if ( self::is_in_footer() && ! empty( $this->to_footer[ $type ] ) ) {
@@ -272,12 +275,6 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
272
 
273
  unset( $_groups );
274
 
275
- $this->attach_inline_attribute( $groups_list, $wp_dependencies );
276
-
277
- if ( 'scripts' === $type ) {
278
- $this->attach_scripts_localization( $groups_list, $wp_dependencies );
279
- }
280
-
281
 
282
  // Time to split the groups if we're not combining some of them
283
  foreach ( $groups_list->get_groups() as $group ) {
@@ -366,11 +363,15 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
366
  }
367
  }
368
 
 
 
 
 
 
369
  // Parse dependencies, load files and mark groups as ready,process or only-handles
370
  // Watch out! Groups must not be changed after this point
371
  $groups_list->preprocess_groups();
372
 
373
-
374
  foreach ( $groups_list->get_groups() as $group ) {
375
  $group_status = $groups_list->get_group_status( $group->hash );
376
  $deps = $groups_list->get_group_dependencies( $group->hash );
@@ -487,11 +488,16 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
487
  $new_group = new WP_Hummingbird_Module_Minify_Group();
488
  $new_group->set_type( $type );
489
  foreach ( $registered_dependency->extra as $key => $value ) {
 
 
 
 
490
  $new_group->add_extra( $key, $value );
491
  }
492
 
493
  // We'll treat this later
494
  $new_group->delete_extra( 'after' );
 
495
 
496
  $new_group->set_args( $registered_dependency->args );
497
 
@@ -542,14 +548,19 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
542
  $registered = $wp_dependencies->registered;
543
  $extras = wp_list_pluck( $registered, 'extra' );
544
  $after = wp_list_pluck( array_filter( $extras, array( $this, '_filter_after_after_attribute' ) ), 'after' );
 
545
 
546
- array_map( function( $group ) use ( $groups_list, $after ) {
547
  /** @var WP_Hummingbird_Module_Minify_Group $group */
548
- array_map( function( $handle ) use ( $after, $group ) {
549
  if ( isset( $after[ $handle ] ) ) {
550
  // Add!
551
  $group->add_after( $after[ $handle ] );
552
  }
 
 
 
 
553
  }, $group->get_handles() );
554
  }, $groups_list->get_groups() );
555
  }
@@ -593,6 +604,18 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
593
  return false;
594
  }
595
 
 
 
 
 
 
 
 
 
 
 
 
 
596
 
597
  /**
598
  * Return if we are processing the footer
@@ -778,6 +801,7 @@ class WP_Hummingbird_Module_Minify extends WP_Hummingbird_Module {
778
  delete_option( $name );
779
  }
780
 
 
781
  WP_Hummingbird_Sources_Collector::clear_collection();
782
 
783
  wphb_minification_clear_files();
86
  $group = WP_Hummingbird_Module_Minify_Group::get_instance_by_post_id( $post_id );
87
 
88
  if ( is_a( $group, 'WP_Hummingbird_Module_Minify_Group' ) && $group->file_id ) {
89
+ if ( $group->get_file_path() && file_exists( $group->get_file_path() ) ) {
90
  wp_delete_file( $group->get_file_path() );
91
  }
92
  wp_cache_delete( 'wphb_minify_groups' );
252
  // If we aren't in footer, remove handles that need to go to footer
253
  if ( ! self::is_in_footer() && isset ( $wp_dependencies->registered[ $handle ]->extra['group'] ) && $wp_dependencies->registered[ $handle ]->extra['group'] ) {
254
  $this->to_footer[$type][] = $handle;
255
+ unset( $handles[ $key ] );
256
  }
257
  }
258
 
259
+ $handles = array_values( $handles );
260
+
261
  $return_to_wp = array();
262
 
263
  if ( self::is_in_footer() && ! empty( $this->to_footer[ $type ] ) ) {
275
 
276
  unset( $_groups );
277
 
 
 
 
 
 
 
278
 
279
  // Time to split the groups if we're not combining some of them
280
  foreach ( $groups_list->get_groups() as $group ) {
363
  }
364
  }
365
 
366
+ if ( 'scripts' === $type ) {
367
+ $this->attach_scripts_localization( $groups_list, $wp_dependencies );
368
+ }
369
+ $this->attach_inline_attribute( $groups_list, $wp_dependencies );
370
+
371
  // Parse dependencies, load files and mark groups as ready,process or only-handles
372
  // Watch out! Groups must not be changed after this point
373
  $groups_list->preprocess_groups();
374
 
 
375
  foreach ( $groups_list->get_groups() as $group ) {
376
  $group_status = $groups_list->get_group_status( $group->hash );
377
  $deps = $groups_list->get_group_dependencies( $group->hash );
488
  $new_group = new WP_Hummingbird_Module_Minify_Group();
489
  $new_group->set_type( $type );
490
  foreach ( $registered_dependency->extra as $key => $value ) {
491
+ if ( 'data' === $key ) {
492
+ // We'll do this later as it can cause duplicated data in different groups
493
+ continue;
494
+ }
495
  $new_group->add_extra( $key, $value );
496
  }
497
 
498
  // We'll treat this later
499
  $new_group->delete_extra( 'after' );
500
+ $new_group->delete_extra( 'before' );
501
 
502
  $new_group->set_args( $registered_dependency->args );
503
 
548
  $registered = $wp_dependencies->registered;
549
  $extras = wp_list_pluck( $registered, 'extra' );
550
  $after = wp_list_pluck( array_filter( $extras, array( $this, '_filter_after_after_attribute' ) ), 'after' );
551
+ $before = wp_list_pluck( array_filter( $extras, array( $this, '_filter_after_before_attribute' ) ), 'before' );
552
 
553
+ array_map( function( $group ) use ( $groups_list, $after, $before ) {
554
  /** @var WP_Hummingbird_Module_Minify_Group $group */
555
+ array_map( function( $handle ) use ( $after, $group, $before ) {
556
  if ( isset( $after[ $handle ] ) ) {
557
  // Add!
558
  $group->add_after( $after[ $handle ] );
559
  }
560
+ if ( isset( $before[ $handle ] ) ) {
561
+ // Add!
562
+ $group->add_before( $before[ $handle ] );
563
+ }
564
  }, $group->get_handles() );
565
  }, $groups_list->get_groups() );
566
  }
604
  return false;
605
  }
606
 
607
+ /**
608
+ * Filter a list of dependencies returning their 'before' attribute inside 'extra' list
609
+ *
610
+ * @internal
611
+ */
612
+ public function _filter_after_before_attribute( $a ) {
613
+ if ( isset ( $a['before'] ) ) {
614
+ return $a['before'];
615
+ }
616
+ return false;
617
+ }
618
+
619
 
620
  /**
621
  * Return if we are processing the footer
801
  delete_option( $name );
802
  }
803
 
804
+
805
  WP_Hummingbird_Sources_Collector::clear_collection();
806
 
807
  wphb_minification_clear_files();
core/modules/class-module-performance.php CHANGED
@@ -10,10 +10,10 @@ class WP_Hummingbird_Module_Performance extends WP_Hummingbird_Module {
10
  * Initializes the Performance Scan
11
  */
12
  public static function init_scan() {
13
- // Start the test
14
  self::clear_cache();
15
 
16
- // Start the test
17
  self::set_doing_report( true );
18
  $api = wphb_get_api();
19
  $api->performance->ping();
@@ -31,8 +31,7 @@ class WP_Hummingbird_Module_Performance extends WP_Hummingbird_Module {
31
  $last_score = get_site_option( 'wphb-last-report-score' );
32
  if ( $last_score && ! is_wp_error( $report ) ) {
33
  $report->data->last_score = $last_score;
34
- }
35
- elseif ( is_object( $report ) && ! is_wp_error( $report ) ) {
36
  $report->data->last_score = false;
37
  }
38
  return $report;
@@ -75,9 +74,8 @@ class WP_Hummingbird_Module_Performance extends WP_Hummingbird_Module {
75
  if ( ! $status ) {
76
  delete_site_option( 'wphb-doing-report' );
77
  update_site_option( 'wphb-stop-report', true );
78
- }
79
- else {
80
- // Set time when we started the report
81
  update_site_option( 'wphb-doing-report', current_time( 'timestamp' ) );
82
  delete_site_option( 'wphb-stop-report' );
83
  }
@@ -92,11 +90,13 @@ class WP_Hummingbird_Module_Performance extends WP_Hummingbird_Module {
92
  $results = $api->performance->results();
93
 
94
  if ( is_wp_error( $results ) ) {
95
- // It's an error
96
  $results = new WP_Error(
97
  'performance-error',
98
  __( "The performance test didn't return any results. This probably means you're on a local website (which we can't scan) or something went wrong trying to access WPMU DEV. Try again and if this error continues to appear please open a ticket with our support heroes", 'wphb' ),
99
- array( 'details' => $results->get_error_message() )
 
 
100
  );
101
  }
102
 
@@ -115,8 +115,7 @@ class WP_Hummingbird_Module_Performance extends WP_Hummingbird_Module {
115
  $data_time = $last_report->data->time;
116
  if ( ( $data_time + 300 ) < $current_gmt_time ) {
117
  return true;
118
- }
119
- else {
120
  $remaining = ceil( ( ( $data_time + 300 ) - $current_gmt_time ) / 60 );
121
  return absint( $remaining );
122
  }
@@ -131,8 +130,10 @@ class WP_Hummingbird_Module_Performance extends WP_Hummingbird_Module {
131
  public static function clear_cache() {
132
  $last_report = get_site_option( 'wphb-last-report' );
133
  if ( $last_report && isset( $last_report->data->score ) ) {
134
- // Save latest score
135
- update_site_option( 'wphb-last-report-score', array( 'score' => $last_report->data->score ) );
 
 
136
  }
137
 
138
  delete_site_option( 'wphb-last-report' );
10
  * Initializes the Performance Scan
11
  */
12
  public static function init_scan() {
13
+ // Clear the cache.
14
  self::clear_cache();
15
 
16
+ // Start the test.
17
  self::set_doing_report( true );
18
  $api = wphb_get_api();
19
  $api->performance->ping();
31
  $last_score = get_site_option( 'wphb-last-report-score' );
32
  if ( $last_score && ! is_wp_error( $report ) ) {
33
  $report->data->last_score = $last_score;
34
+ } elseif ( is_object( $report ) && ! is_wp_error( $report ) ) {
 
35
  $report->data->last_score = false;
36
  }
37
  return $report;
74
  if ( ! $status ) {
75
  delete_site_option( 'wphb-doing-report' );
76
  update_site_option( 'wphb-stop-report', true );
77
+ } else {
78
+ // Set time when we started the report.
 
79
  update_site_option( 'wphb-doing-report', current_time( 'timestamp' ) );
80
  delete_site_option( 'wphb-stop-report' );
81
  }
90
  $results = $api->performance->results();
91
 
92
  if ( is_wp_error( $results ) ) {
93
+ // It's an error.
94
  $results = new WP_Error(
95
  'performance-error',
96
  __( "The performance test didn't return any results. This probably means you're on a local website (which we can't scan) or something went wrong trying to access WPMU DEV. Try again and if this error continues to appear please open a ticket with our support heroes", 'wphb' ),
97
+ array(
98
+ 'details' => $results->get_error_message(),
99
+ )
100
  );
101
  }
102
 
115
  $data_time = $last_report->data->time;
116
  if ( ( $data_time + 300 ) < $current_gmt_time ) {
117
  return true;
118
+ } else {
 
119
  $remaining = ceil( ( ( $data_time + 300 ) - $current_gmt_time ) / 60 );
120
  return absint( $remaining );
121
  }
130
  public static function clear_cache() {
131
  $last_report = get_site_option( 'wphb-last-report' );
132
  if ( $last_report && isset( $last_report->data->score ) ) {
133
+ // Save latest score.
134
+ update_site_option( 'wphb-last-report-score', array(
135
+ 'score' => $last_report->data->score,
136
+ ));
137
  }
138
 
139
  delete_site_option( 'wphb-last-report' );
core/modules/minify/class-errors-controller.php CHANGED
@@ -96,16 +96,17 @@ class WP_Hummingbird_Minification_Errors_Controller {
96
  * @return bool|array
97
  */
98
  public function get_handle_error( $handle, $type ) {
99
- if ( ! isset( $this->errors[ $type ][ $handle ] ) ) {
100
- return false;
 
 
 
 
 
 
101
  }
102
 
103
- $defaults = array(
104
- 'handle' => '',
105
- 'error' => '',
106
- 'disable' => array()
107
- );
108
- return wp_parse_args( $this->errors[ $type ][ $handle ], $defaults );
109
  }
110
 
111
  /**
96
  * @return bool|array
97
  */
98
  public function get_handle_error( $handle, $type ) {
99
+ $error = false;
100
+ if ( isset( $this->errors[ $type ][ $handle ] ) ) {
101
+ $defaults = array(
102
+ 'handle' => '',
103
+ 'error' => '',
104
+ 'disable' => array()
105
+ );
106
+ $error = wp_parse_args( $this->errors[ $type ][ $handle ], $defaults );
107
  }
108
 
109
+ return apply_filters( "wphb_handle_error_{$handle}_{$type}", $error, $handle, $type );;
 
 
 
 
 
110
  }
111
 
112
  /**
core/modules/minify/class-minify-group.php CHANGED
@@ -604,6 +604,23 @@ class WP_Hummingbird_Module_Minify_Group {
604
  $this->refresh_hash();
605
  }
606
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
607
  /**
608
  * Add an after attribute. Normally us by add_inline_script/style functions
609
  *
@@ -620,7 +637,7 @@ class WP_Hummingbird_Module_Minify_Group {
620
  $data = array( $data );
621
  }
622
 
623
- $data = array_merge( $new_data, $data );
624
  $this->extra['data'] = $data;
625
  $this->refresh_hash();
626
  }
@@ -634,6 +651,15 @@ class WP_Hummingbird_Module_Minify_Group {
634
  return isset( $this->extra['after'] ) ? $this->extra['after'] : array();
635
  }
636
 
 
 
 
 
 
 
 
 
 
637
  /**
638
  * Return data attribute
639
  *
604
  $this->refresh_hash();
605
  }
606
 
607
+ /**
608
+ * Add a before attribute. Normally us by add_inline_script/style functions
609
+ *
610
+ * @param $new_before
611
+ */
612
+ public function add_before( $new_before ) {
613
+ $before = $this->get_before();
614
+
615
+ if ( ! is_array( $new_before ) ) {
616
+ $new_before = array( $new_before );
617
+ }
618
+
619
+ $before = array_merge( $new_before, $before );
620
+ $this->extra['before'] = $before;
621
+ $this->refresh_hash();
622
+ }
623
+
624
  /**
625
  * Add an after attribute. Normally us by add_inline_script/style functions
626
  *
637
  $data = array( $data );
638
  }
639
 
640
+ $data = array_unique( array_merge( $new_data, $data ) );
641
  $this->extra['data'] = $data;
642
  $this->refresh_hash();
643
  }
651
  return isset( $this->extra['after'] ) ? $this->extra['after'] : array();
652
  }
653
 
654
+ /**
655
+ * Return after attribute
656
+ *
657
+ * @return array
658
+ */
659
+ public function get_before() {
660
+ return isset( $this->extra['before'] ) ? $this->extra['before'] : array();
661
+ }
662
+
663
  /**
664
  * Return data attribute
665
  *
core/modules/minify/class-minify-groups-list.php CHANGED
@@ -249,19 +249,19 @@ class WP_Hummingbird_Module_Minify_Groups_List {
249
  *
250
  */
251
  public function preprocess_groups() {
252
- $self = $this;
253
- array_map( function( $group ) use ( &$self ) {
254
  /** @var WP_Hummingbird_Module_Minify_Group $group */
255
  $group->maybe_load_file();
256
  $group_src = $group->get_group_src();
257
 
258
  if ( $group->should_process_group() && $group->file_id && $group_src && ! $group->is_expired() ) {
259
  // The group has its file and is not expired
260
- $self->set_group_status( $group->hash, 'ready' );
261
  }
262
  elseif ( ( $group->should_process_group() && ( empty( $group_src ) ) || $group->is_expired() ) ) {
263
  // The group must be processed but it has no file yet
264
- $self->set_group_status( $group->hash, 'process' );
265
 
266
  // Delete file in case there's one (but is expired)
267
  $group->delete_file();
@@ -269,9 +269,9 @@ class WP_Hummingbird_Module_Minify_Groups_List {
269
  else {
270
  // The group won't be processed
271
  // Use the original handles and their URLs instead
272
- $self->set_group_status( $group->hash, 'only-handles' );
273
  }
274
- }, $this->get_groups() );
275
 
276
  $this->parse_groups_dependencies();
277
  }
249
  *
250
  */
251
  public function preprocess_groups() {
252
+
253
+ foreach ( $this->get_groups() as $group ) {
254
  /** @var WP_Hummingbird_Module_Minify_Group $group */
255
  $group->maybe_load_file();
256
  $group_src = $group->get_group_src();
257
 
258
  if ( $group->should_process_group() && $group->file_id && $group_src && ! $group->is_expired() ) {
259
  // The group has its file and is not expired
260
+ $this->set_group_status( $group->hash, 'ready' );
261
  }
262
  elseif ( ( $group->should_process_group() && ( empty( $group_src ) ) || $group->is_expired() ) ) {
263
  // The group must be processed but it has no file yet
264
+ $this->set_group_status( $group->hash, 'process' );
265
 
266
  // Delete file in case there's one (but is expired)
267
  $group->delete_file();
269
  else {
270
  // The group won't be processed
271
  // Use the original handles and their URLs instead
272
+ $this->set_group_status( $group->hash, 'only-handles' );
273
  }
274
+ }
275
 
276
  $this->parse_groups_dependencies();
277
  }
helpers/wp-hummingbird-helpers-core.php CHANGED
@@ -292,7 +292,11 @@ function wphb_update_membership_link() {
292
  }
293
 
294
  function wphb_support_link() {
295
- return "https://premium.wpmudev.org/forums/forum/support#question";
 
 
 
 
296
  }
297
 
298
  function wphb_cdn_link() {
292
  }
293
 
294
  function wphb_support_link() {
295
+ if ( is_wpmudev_member() ) {
296
+ return 'https://premium.wpmudev.org/forums/forum/support#question';
297
+ } else {
298
+ return 'https://wordpress.org/support/plugin/hummingbird-performance';
299
+ }
300
  }
301
 
302
  function wphb_cdn_link() {
helpers/wp-hummingbird-helpers-modules.php CHANGED
@@ -366,7 +366,8 @@ function wphb_performance_set_doing_report( $status = true ) {
366
  * Wrapper function for WP_Hummingbird_Module_Performance::init_scan()
367
  */
368
  function wphb_performance_init_scan() {
369
- // Init scan
370
  WP_Hummingbird_Module_Performance::init_scan();
 
371
  do_action( 'wphb_init_performance_scan' );
372
  }
366
  * Wrapper function for WP_Hummingbird_Module_Performance::init_scan()
367
  */
368
  function wphb_performance_init_scan() {
369
+ // Init scan.
370
  WP_Hummingbird_Module_Performance::init_scan();
371
+ // TODO: this creates a duplicate task from cron.
372
  do_action( 'wphb_init_performance_scan' );
373
  }
languages/wphb-default.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the Hummingbird Pro package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Hummingbird Pro 1.5.3\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
- "POT-Creation-Date: 2017-06-26 14:58:55+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -33,20 +33,30 @@ msgstr ""
33
  msgid "The selected zone is not valid"
34
  msgstr ""
35
 
36
- #: admin/class-admin-notices.php:61
37
- #: build/wp-hummingbird/admin/class-admin-notices.php:61
 
38
  msgid ""
39
  "Awww yeah! You’ve got access to Hummingbird Pro! Let’s upgrade your free "
40
  "version so you can start using premium features. <a href=\"%s\">Upgrade</a>"
41
  msgstr ""
42
 
43
- #: admin/class-admin-notices.php:97
44
- #: build/wp-hummingbird/admin/class-admin-notices.php:97
45
  msgid ""
46
  "We noticed you’re running both the free and pro versions of Hummingbird. No "
47
  "biggie! We’ve deactivated the free version for you. Enjoy the pro features!"
48
  msgstr ""
49
 
 
 
 
 
 
 
 
 
 
50
  #: admin/class-admin.php:56 build/wp-hummingbird/admin/class-admin.php:56
51
  msgid "Go to Hummingbird Dashboard"
52
  msgstr ""
@@ -81,74 +91,74 @@ msgid "Dashboard"
81
  msgstr ""
82
 
83
  #: admin/class-admin.php:87 admin/class-admin.php:122
84
- #: admin/class-dashboard-page.php:128 admin/class-dashboard-page.php:131
85
- #: admin/class-dashboard-page.php:134 admin/class-dashboard-page.php:480
86
  #: build/wp-hummingbird/admin/class-admin.php:87
87
  #: build/wp-hummingbird/admin/class-admin.php:122
88
- #: build/wp-hummingbird/admin/class-dashboard-page.php:128
89
- #: build/wp-hummingbird/admin/class-dashboard-page.php:131
90
- #: build/wp-hummingbird/admin/class-dashboard-page.php:134
91
- #: build/wp-hummingbird/admin/class-dashboard-page.php:480
92
  msgid "Performance Report"
93
  msgstr ""
94
 
95
  #: admin/class-admin.php:90 admin/class-admin.php:104
96
- #: admin/class-dashboard-page.php:153 admin/class-dashboard-page.php:157
97
- #: admin/class-dashboard-page.php:161 admin/class-dashboard-page.php:164
98
- #: admin/class-dashboard-page.php:417
99
  #: build/wp-hummingbird/admin/class-admin.php:90
100
  #: build/wp-hummingbird/admin/class-admin.php:104
101
- #: build/wp-hummingbird/admin/class-dashboard-page.php:153
102
- #: build/wp-hummingbird/admin/class-dashboard-page.php:157
103
- #: build/wp-hummingbird/admin/class-dashboard-page.php:161
104
- #: build/wp-hummingbird/admin/class-dashboard-page.php:164
105
- #: build/wp-hummingbird/admin/class-dashboard-page.php:417
106
  msgid "Minification"
107
  msgstr ""
108
 
109
  #: admin/class-admin.php:92 admin/class-admin.php:123
110
- #: admin/class-dashboard-page.php:143 admin/class-dashboard-page.php:308
111
- #: admin/views/dashboard/welcome/meta-box.php:40
112
  #: build/wp-hummingbird/admin/class-admin.php:92
113
  #: build/wp-hummingbird/admin/class-admin.php:123
114
- #: build/wp-hummingbird/admin/class-dashboard-page.php:143
115
- #: build/wp-hummingbird/admin/class-dashboard-page.php:308
116
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:40
117
  msgid "Browser Caching"
118
  msgstr ""
119
 
120
  #: admin/class-admin.php:93 admin/class-admin.php:124
121
- #: admin/class-dashboard-page.php:146 admin/class-dashboard-page.php:443
122
- #: admin/views/dashboard/welcome/meta-box.php:58
123
  #: build/wp-hummingbird/admin/class-admin.php:93
124
  #: build/wp-hummingbird/admin/class-admin.php:124
125
- #: build/wp-hummingbird/admin/class-dashboard-page.php:146
126
- #: build/wp-hummingbird/admin/class-dashboard-page.php:443
127
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:58
128
  msgid "GZIP Compression"
129
  msgstr ""
130
 
131
  #: admin/class-admin.php:94 admin/class-admin.php:125
132
- #: admin/class-dashboard-page.php:186 admin/class-dashboard-page.php:189
133
- #: admin/class-dashboard-page.php:192 admin/class-uptime-page.php:70
134
- #: admin/class-uptime-page.php:73 admin/class-uptime-page.php:76
135
  #: build/wp-hummingbird/admin/class-admin.php:94
136
  #: build/wp-hummingbird/admin/class-admin.php:125
137
- #: build/wp-hummingbird/admin/class-dashboard-page.php:186
138
- #: build/wp-hummingbird/admin/class-dashboard-page.php:189
139
- #: build/wp-hummingbird/admin/class-dashboard-page.php:192
140
- #: build/wp-hummingbird/admin/class-uptime-page.php:70
141
- #: build/wp-hummingbird/admin/class-uptime-page.php:73
142
- #: build/wp-hummingbird/admin/class-uptime-page.php:76
143
  #: build/wp-hummingbird/core/class-core.php:53 core/class-core.php:53
144
  msgid "Uptime"
145
  msgstr ""
146
 
147
- #: admin/class-admin.php:125 admin/class-dashboard-page.php:183
148
- #: admin/class-dashboard-page.php:332
149
  #: build/wp-hummingbird/admin/class-admin.php:125
150
- #: build/wp-hummingbird/admin/class-dashboard-page.php:183
151
- #: build/wp-hummingbird/admin/class-dashboard-page.php:332
152
  msgid "Uptime Monitoring"
153
  msgstr ""
154
 
@@ -197,13 +207,13 @@ msgstr ""
197
 
198
  #: admin/class-caching-page.php:121 admin/class-caching-page.php:181
199
  #: admin/class-gzip-page.php:77 admin/class-gzip-page.php:112
200
- #: admin/class-performance-page.php:92 admin/class-performance-page.php:95
201
  #: build/wp-hummingbird/admin/class-caching-page.php:121
202
  #: build/wp-hummingbird/admin/class-caching-page.php:181
203
  #: build/wp-hummingbird/admin/class-gzip-page.php:77
204
  #: build/wp-hummingbird/admin/class-gzip-page.php:112
205
- #: build/wp-hummingbird/admin/class-performance-page.php:92
206
- #: build/wp-hummingbird/admin/class-performance-page.php:95
207
  msgid "Summary"
208
  msgstr ""
209
 
@@ -219,68 +229,68 @@ msgstr ""
219
  msgid "CloudFlare"
220
  msgstr ""
221
 
222
- #: admin/class-caching-page.php:171 admin/class-dashboard-page.php:290
223
  #: admin/views/caching/summary-meta-box.php:36
224
  #: admin/views/dashboard/caching/module-meta-box.php:25
225
  #: build/wp-hummingbird/admin/class-caching-page.php:171
226
- #: build/wp-hummingbird/admin/class-dashboard-page.php:290
227
  #: build/wp-hummingbird/admin/views/caching/summary-meta-box.php:36
228
  #: build/wp-hummingbird/admin/views/dashboard/caching/module-meta-box.php:25
229
  msgid "Caching is enabled"
230
  msgstr ""
231
 
232
- #: admin/class-caching-page.php:171 admin/class-dashboard-page.php:290
233
  #: admin/views/caching/summary-meta-box.php:40
234
  #: admin/views/dashboard/caching/module-meta-box.php:29
235
  #: build/wp-hummingbird/admin/class-caching-page.php:171
236
- #: build/wp-hummingbird/admin/class-dashboard-page.php:290
237
  #: build/wp-hummingbird/admin/views/caching/summary-meta-box.php:40
238
  #: build/wp-hummingbird/admin/views/dashboard/caching/module-meta-box.php:29
239
  msgid "Caching is enabled but you aren't using our recommended value"
240
  msgstr ""
241
 
242
- #: admin/class-dashboard-page.php:40 admin/class-minification-page.php:197
243
- #: build/wp-hummingbird/admin/class-dashboard-page.php:40
244
  #: build/wp-hummingbird/admin/class-minification-page.php:197
245
  msgid ""
246
  "Your cache has been successfully cleared. Your assets will regenerate the "
247
  "next time someone visits your website."
248
  msgstr ""
249
 
250
- #: admin/class-dashboard-page.php:44 admin/class-minification-page.php:201
251
- #: build/wp-hummingbird/admin/class-dashboard-page.php:44
252
  #: build/wp-hummingbird/admin/class-minification-page.php:201
253
  msgid ""
254
  "Your local and CloudFlare caches have been successfully cleared. Your "
255
  "assets will regenerate the next time someone visits your website."
256
  msgstr ""
257
 
258
- #: admin/class-dashboard-page.php:61 admin/class-performance-page.php:61
259
  #: admin/views/dashboard/performance/disabled-meta-box.php:7
260
- #: build/wp-hummingbird/admin/class-dashboard-page.php:61
261
- #: build/wp-hummingbird/admin/class-performance-page.php:61
262
  #: build/wp-hummingbird/admin/views/dashboard/performance/disabled-meta-box.php:7
263
  msgid "Run Test"
264
  msgstr ""
265
 
266
- #: admin/class-dashboard-page.php:63
267
- #: build/wp-hummingbird/admin/class-dashboard-page.php:63
268
  msgid "Clear Cache"
269
  msgstr ""
270
 
271
- #: admin/class-dashboard-page.php:125
272
- #: build/wp-hummingbird/admin/class-dashboard-page.php:125
273
  msgid "Performance test in progress"
274
  msgstr ""
275
 
276
- #: admin/class-dashboard-page.php:170 admin/class-dashboard-page.php:531
277
- #: build/wp-hummingbird/admin/class-dashboard-page.php:170
278
- #: build/wp-hummingbird/admin/class-dashboard-page.php:531
279
  msgid "Image Optimization"
280
  msgstr ""
281
 
282
- #: admin/class-dashboard-page.php:197
283
- #: build/wp-hummingbird/admin/class-dashboard-page.php:197
284
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:27
285
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:40
286
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:42
@@ -290,13 +300,13 @@ msgstr ""
290
  msgid "Reporting"
291
  msgstr ""
292
 
293
- #: admin/class-dashboard-page.php:257
294
- #: build/wp-hummingbird/admin/class-dashboard-page.php:257
295
  msgid "Welcome %s"
296
  msgstr ""
297
 
298
- #: admin/class-dashboard-page.php:544
299
- #: build/wp-hummingbird/admin/class-dashboard-page.php:544
300
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:55
301
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:87
302
  #: core/pro/admin/class-pro-admin.php:55 core/pro/admin/class-pro-admin.php:87
@@ -332,10 +342,10 @@ msgid ""
332
  "Hummingbird will minify and serve your newly compressed files."
333
  msgstr ""
334
 
335
- #: admin/class-minification-page.php:205 admin/class-performance-page.php:44
336
  #: admin/views/minification/advanced-settings.php:2
337
  #: build/wp-hummingbird/admin/class-minification-page.php:205
338
- #: build/wp-hummingbird/admin/class-performance-page.php:44
339
  #: build/wp-hummingbird/admin/views/minification/advanced-settings.php:2
340
  msgid "Settings updated"
341
  msgstr ""
@@ -364,63 +374,63 @@ msgstr ""
364
  msgid "OTHER"
365
  msgstr ""
366
 
367
- #: admin/class-performance-page.php:25 admin/class-performance-page.php:99
368
- #: admin/class-performance-page.php:153
369
  #: build/wp-hummingbird/admin/class-performance-page.php:25
370
- #: build/wp-hummingbird/admin/class-performance-page.php:99
371
- #: build/wp-hummingbird/admin/class-performance-page.php:153
372
  msgid "Improvements"
373
  msgstr ""
374
 
375
- #: admin/class-performance-page.php:55
376
- #: build/wp-hummingbird/admin/class-performance-page.php:55
377
  msgid "Your last performance test was on <strong>%s</strong> at <strong>%s</strong>"
378
  msgstr ""
379
 
380
- #: admin/class-performance-page.php:57
381
- #: build/wp-hummingbird/admin/class-performance-page.php:57
382
  msgid ""
383
  "Hummingbird is just catching her breath. <strong>Run again in %d "
384
  "minutes</strong>"
385
  msgstr ""
386
 
387
- #: admin/class-uptime-page.php:23
388
- #: build/wp-hummingbird/admin/class-uptime-page.php:23
389
  msgid "Disable Uptime"
390
  msgstr ""
391
 
392
- #: admin/class-uptime-page.php:33
393
- #: build/wp-hummingbird/admin/class-uptime-page.php:33
394
  msgid "Reporting period"
395
  msgstr ""
396
 
397
- #: admin/class-uptime-page.php:80 admin/class-uptime-page.php:282
398
- #: build/wp-hummingbird/admin/class-uptime-page.php:80
399
- #: build/wp-hummingbird/admin/class-uptime-page.php:282
400
  msgid "Response Time"
401
  msgstr ""
402
 
403
- #: admin/class-uptime-page.php:81
404
  #: admin/views/dashboard/uptime/module-meta-box.php:18
405
  #: admin/views/uptime/summary-meta-box.php:40
406
- #: build/wp-hummingbird/admin/class-uptime-page.php:81
407
  #: build/wp-hummingbird/admin/views/dashboard/uptime/module-meta-box.php:18
408
  #: build/wp-hummingbird/admin/views/uptime/summary-meta-box.php:40
409
  msgid "Downtime"
410
  msgstr ""
411
 
412
- #: admin/class-uptime-page.php:169
413
- #: build/wp-hummingbird/admin/class-uptime-page.php:169
414
  msgid "Last Day"
415
  msgstr ""
416
 
417
- #: admin/class-uptime-page.php:170
418
- #: build/wp-hummingbird/admin/class-uptime-page.php:170
419
  msgid "Last Week"
420
  msgstr ""
421
 
422
- #: admin/class-uptime-page.php:171
423
- #: build/wp-hummingbird/admin/class-uptime-page.php:171
424
  msgid "Last Month"
425
  msgstr ""
426
 
@@ -519,15 +529,15 @@ msgid ""
519
  "update CloudFlare settings."
520
  msgstr ""
521
 
522
- #: admin/views/caching/cloudflare-meta-box.php:103
523
- #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:103
524
  msgid ""
525
  "Made changes to your website? Use Purge Cache button to clear CloudFlare's "
526
  "cache"
527
  msgstr ""
528
 
529
- #: admin/views/caching/cloudflare-meta-box.php:105
530
- #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:105
531
  msgid "Purge Cache"
532
  msgstr ""
533
 
@@ -900,18 +910,18 @@ msgstr ""
900
  #: admin/views/dashboard/caching/module-meta-box.php:70
901
  #: build/wp-hummingbird/admin/views/caching/summary-meta-box.php:84
902
  #: build/wp-hummingbird/admin/views/dashboard/caching/module-meta-box.php:70
903
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:404
904
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:430
905
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:574
906
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:578
907
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:582
908
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:586
909
- #: helpers/wp-hummingbird-helpers-core.php:404
910
- #: helpers/wp-hummingbird-helpers-core.php:430
911
- #: helpers/wp-hummingbird-helpers-core.php:574
912
  #: helpers/wp-hummingbird-helpers-core.php:578
913
  #: helpers/wp-hummingbird-helpers-core.php:582
914
  #: helpers/wp-hummingbird-helpers-core.php:586
 
915
  msgid "8 days"
916
  msgstr ""
917
 
@@ -1169,9 +1179,11 @@ msgid "Automated performance tests are enabled"
1169
  msgstr ""
1170
 
1171
  #: admin/views/dashboard/performance/running-test-meta-box.php:5
1172
- #: admin/views/modals/check-performance-modal.php:3
 
1173
  #: build/wp-hummingbird/admin/views/dashboard/performance/running-test-meta-box.php:5
1174
- #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:3
 
1175
  msgid ""
1176
  "Hummingbird is running a test to measure your website performance, please "
1177
  "wait."
@@ -1324,9 +1336,9 @@ msgid "Average Response Time"
1324
  msgstr ""
1325
 
1326
  #: admin/views/dashboard/uptime/module-meta-box.php:32
1327
- #: admin/views/dashboard/welcome/meta-box.php:68
1328
  #: build/wp-hummingbird/admin/views/dashboard/uptime/module-meta-box.php:32
1329
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:68
1330
  msgid "Last Down"
1331
  msgstr ""
1332
 
@@ -1356,34 +1368,34 @@ msgstr ""
1356
  msgid "Current performance score"
1357
  msgstr ""
1358
 
1359
- #: admin/views/dashboard/welcome/meta-box.php:29
1360
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:29
1361
  msgid "Running scan..."
1362
  msgstr ""
1363
 
1364
- #: admin/views/dashboard/welcome/meta-box.php:31
1365
  #: admin/views/performance/module-resume-meta-box.php:27
1366
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:31
1367
  #: build/wp-hummingbird/admin/views/performance/module-resume-meta-box.php:27
1368
  msgid "Never"
1369
  msgstr ""
1370
 
1371
- #: admin/views/dashboard/welcome/meta-box.php:34
1372
  #: admin/views/performance/module-resume-meta-box.php:30
1373
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:34
1374
  #: build/wp-hummingbird/admin/views/performance/module-resume-meta-box.php:30
1375
  msgid "Last test date"
1376
  msgstr ""
1377
 
1378
- #: admin/views/dashboard/welcome/meta-box.php:71
1379
  #: admin/views/minification/summary-meta-box.php:53
1380
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:71
1381
  #: build/wp-hummingbird/admin/views/minification/summary-meta-box.php:53
1382
  msgid "Pro Feature"
1383
  msgstr ""
1384
 
1385
- #: admin/views/dashboard/welcome/meta-box.php:73
1386
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:73
1387
  msgid "Uptime Inactive"
1388
  msgstr ""
1389
 
@@ -1513,12 +1525,12 @@ msgstr ""
1513
 
1514
  #: admin/views/minification/enqueued-files-empty-meta-box.php:7
1515
  #: admin/views/modals/check-files-modal.php:31
1516
- #: admin/views/modals/check-performance-modal.php:24
1517
  #: admin/views/modals/enable-cdn-modal.php:33
1518
  #: admin/views/modals/quick-setup-modal.php:14
1519
  #: build/wp-hummingbird/admin/views/minification/enqueued-files-empty-meta-box.php:7
1520
  #: build/wp-hummingbird/admin/views/modals/check-files-modal.php:31
1521
- #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:24
1522
  #: build/wp-hummingbird/admin/views/modals/enable-cdn-modal.php:33
1523
  #: build/wp-hummingbird/admin/views/modals/quick-setup-modal.php:14
1524
  msgid "Reduce your page load time!"
@@ -1822,13 +1834,15 @@ msgid ""
1822
  "a setting causes errors then revert the setting here."
1823
  msgstr ""
1824
 
1825
- #: admin/views/modals/check-performance-modal.php:1
1826
- #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:1
 
 
1827
  msgid "Test in progress"
1828
  msgstr ""
1829
 
1830
- #: admin/views/modals/check-performance-modal.php:18
1831
- #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:18
1832
  msgid "Performance test in progress..."
1833
  msgstr ""
1834
 
@@ -2145,8 +2159,8 @@ msgstr ""
2145
  msgid "Wrong Service. $service must be an instance of WP_Hummingbird_API_Service"
2146
  msgstr ""
2147
 
2148
- #: build/wp-hummingbird/core/api/request/wpmudev.php:84
2149
- #: core/api/request/wpmudev.php:84
2150
  msgid "Unknown Error. Code: %s"
2151
  msgstr ""
2152
 
@@ -2188,13 +2202,20 @@ msgstr ""
2188
  msgid "See this page minified"
2189
  msgstr ""
2190
 
 
 
 
 
 
 
 
2191
  #: build/wp-hummingbird/core/modules/class-module-cloudflare.php:341
2192
  #: core/modules/class-module-cloudflare.php:341
2193
  msgid "Invalid CloudFlare expiration value"
2194
  msgstr ""
2195
 
2196
- #: build/wp-hummingbird/core/modules/class-module-performance.php:98
2197
- #: core/modules/class-module-performance.php:98
2198
  msgid ""
2199
  "The performance test didn't return any results. This probably means you're "
2200
  "on a local website (which we can't scan) or something went wrong trying to "
@@ -2207,33 +2228,33 @@ msgstr ""
2207
  msgid "You need to be a WPMU DEV Member"
2208
  msgstr ""
2209
 
2210
- #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:759
2211
- #: core/modules/minify/class-minify-group.php:759
2212
  msgid "This file has not a linked URL, it will not be combined/minified"
2213
  msgstr ""
2214
 
2215
- #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:772
2216
- #: core/modules/minify/class-minify-group.php:772
2217
  msgid "This file included in your output can't be minified or combined"
2218
  msgstr ""
2219
 
2220
- #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:819
2221
- #: core/modules/minify/class-minify-group.php:819
2222
  msgid "It looks like this file is empty"
2223
  msgstr ""
2224
 
2225
- #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:850
2226
- #: core/modules/minify/class-minify-group.php:850
2227
  msgid "@import directive is not allowed in stylesheets"
2228
  msgstr ""
2229
 
2230
- #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:865
2231
- #: core/modules/minify/class-minify-group.php:865
2232
  msgid "Hummingbird could not parse the content of this file"
2233
  msgstr ""
2234
 
2235
- #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:901
2236
- #: core/modules/minify/class-minify-group.php:901
2237
  msgid "Minify callback does not exist"
2238
  msgstr ""
2239
 
@@ -2459,8 +2480,9 @@ msgstr ""
2459
  msgid "Hide details"
2460
  msgstr ""
2461
 
2462
- #: build/wp-hummingbird/core/pro/modules/class-module-reporting.php:36
2463
- #: core/pro/modules/class-module-reporting.php:36
 
2464
  msgid "Here's your latest performance test results for %s"
2465
  msgstr ""
2466
 
@@ -2498,38 +2520,39 @@ msgstr ""
2498
  msgid "Hummingbird Performance Report"
2499
  msgstr ""
2500
 
2501
- #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:18
2502
- #: core/pro/modules/reporting/templates/main.php:18
 
2503
  msgid "Hi %s,"
2504
  msgstr ""
2505
 
2506
- #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:20
2507
- #: core/pro/modules/reporting/templates/main.php:20
2508
  msgid "It’s Hummingbird here, straight from the"
2509
  msgstr ""
2510
 
2511
- #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:20
2512
- #: core/pro/modules/reporting/templates/main.php:20
2513
  msgid "engine room. Here’s your latest Performance Test summary."
2514
  msgstr ""
2515
 
2516
- #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:28
2517
- #: core/pro/modules/reporting/templates/main.php:28
2518
  msgid "Ok"
2519
  msgstr ""
2520
 
2521
- #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:30
2522
- #: core/pro/modules/reporting/templates/main.php:30
2523
  msgid "Warning"
2524
  msgstr ""
2525
 
2526
- #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:32
2527
- #: core/pro/modules/reporting/templates/main.php:32
2528
  msgid "Critical"
2529
  msgstr ""
2530
 
2531
- #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:46
2532
- #: core/pro/modules/reporting/templates/main.php:46
2533
  msgid "View full report"
2534
  msgstr ""
2535
 
@@ -2549,216 +2572,216 @@ msgstr ""
2549
  msgid "Saving"
2550
  msgstr ""
2551
 
2552
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:323
2553
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:373
2554
- #: helpers/wp-hummingbird-helpers-core.php:323
2555
- #: helpers/wp-hummingbird-helpers-core.php:373
2556
  msgid "Are you sure? All your changes will be lost"
2557
  msgstr ""
2558
 
2559
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:329
2560
- #: helpers/wp-hummingbird-helpers-core.php:329
2561
  msgid "Remove"
2562
  msgstr ""
2563
 
2564
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:330
2565
- #: helpers/wp-hummingbird-helpers-core.php:330
2566
  msgid "You"
2567
  msgstr ""
2568
 
2569
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:391
2570
- #: helpers/wp-hummingbird-helpers-core.php:391
2571
- msgid "1 hour"
2572
- msgstr ""
2573
-
2574
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:392
2575
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:418
2576
- #: helpers/wp-hummingbird-helpers-core.php:392
2577
- #: helpers/wp-hummingbird-helpers-core.php:418
2578
- msgid "3 hours"
2579
- msgstr ""
2580
-
2581
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:393
2582
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:419
2583
- #: helpers/wp-hummingbird-helpers-core.php:393
2584
- #: helpers/wp-hummingbird-helpers-core.php:419
2585
- msgid "4 hours"
2586
- msgstr ""
2587
-
2588
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:394
2589
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:420
2590
- #: helpers/wp-hummingbird-helpers-core.php:394
2591
- #: helpers/wp-hummingbird-helpers-core.php:420
2592
- msgid "5 hours"
2593
- msgstr ""
2594
-
2595
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:395
2596
  #: helpers/wp-hummingbird-helpers-core.php:395
2597
- msgid "6 hours"
2598
  msgstr ""
2599
 
2600
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:396
2601
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:422
2602
  #: helpers/wp-hummingbird-helpers-core.php:396
2603
  #: helpers/wp-hummingbird-helpers-core.php:422
2604
- msgid "12 hours"
2605
  msgstr ""
2606
 
2607
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:397
2608
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:423
2609
  #: helpers/wp-hummingbird-helpers-core.php:397
2610
  #: helpers/wp-hummingbird-helpers-core.php:423
2611
- msgid "16 hours"
2612
  msgstr ""
2613
 
2614
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:398
2615
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:424
2616
  #: helpers/wp-hummingbird-helpers-core.php:398
2617
  #: helpers/wp-hummingbird-helpers-core.php:424
2618
- msgid "20 hours"
2619
  msgstr ""
2620
 
2621
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:399
2622
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:425
2623
  #: helpers/wp-hummingbird-helpers-core.php:399
2624
- #: helpers/wp-hummingbird-helpers-core.php:425
2625
- msgid "1 day"
2626
  msgstr ""
2627
 
2628
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:400
2629
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:426
2630
  #: helpers/wp-hummingbird-helpers-core.php:400
2631
  #: helpers/wp-hummingbird-helpers-core.php:426
2632
- msgid "2 days"
2633
  msgstr ""
2634
 
2635
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:401
2636
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:427
2637
  #: helpers/wp-hummingbird-helpers-core.php:401
2638
  #: helpers/wp-hummingbird-helpers-core.php:427
2639
- msgid "3 days"
2640
  msgstr ""
2641
 
2642
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:402
2643
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:428
2644
  #: helpers/wp-hummingbird-helpers-core.php:402
2645
  #: helpers/wp-hummingbird-helpers-core.php:428
2646
- msgid "4 days"
2647
  msgstr ""
2648
 
2649
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:403
2650
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:429
2651
  #: helpers/wp-hummingbird-helpers-core.php:403
2652
  #: helpers/wp-hummingbird-helpers-core.php:429
2653
- msgid "5 days"
 
 
 
 
 
 
 
2654
  msgstr ""
2655
 
2656
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:405
2657
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:431
2658
  #: helpers/wp-hummingbird-helpers-core.php:405
2659
  #: helpers/wp-hummingbird-helpers-core.php:431
2660
- msgid "16 days"
2661
  msgstr ""
2662
 
2663
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:406
2664
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:432
2665
  #: helpers/wp-hummingbird-helpers-core.php:406
2666
  #: helpers/wp-hummingbird-helpers-core.php:432
2667
- msgid "24 days"
2668
  msgstr ""
2669
 
2670
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:407
2671
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:433
2672
  #: helpers/wp-hummingbird-helpers-core.php:407
2673
  #: helpers/wp-hummingbird-helpers-core.php:433
2674
- msgid "1 month"
2675
- msgstr ""
2676
-
2677
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:408
2678
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:434
2679
- #: helpers/wp-hummingbird-helpers-core.php:408
2680
- #: helpers/wp-hummingbird-helpers-core.php:434
2681
- msgid "2 months"
2682
  msgstr ""
2683
 
2684
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:409
 
2685
  #: helpers/wp-hummingbird-helpers-core.php:409
2686
- msgid "3 months"
 
2687
  msgstr ""
2688
 
2689
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:410
2690
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:435
2691
  #: helpers/wp-hummingbird-helpers-core.php:410
2692
- #: helpers/wp-hummingbird-helpers-core.php:435
2693
- msgid "6 months"
2694
  msgstr ""
2695
 
2696
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:411
2697
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:436
2698
  #: helpers/wp-hummingbird-helpers-core.php:411
2699
- #: helpers/wp-hummingbird-helpers-core.php:436
2700
- msgid "1 year"
2701
  msgstr ""
2702
 
2703
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:417
2704
- #: helpers/wp-hummingbird-helpers-core.php:417
2705
- msgid "2 hours"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2706
  msgstr ""
2707
 
2708
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:421
2709
  #: helpers/wp-hummingbird-helpers-core.php:421
 
 
 
 
 
2710
  msgid "8 hours"
2711
  msgstr ""
2712
 
2713
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:550
2714
- #: helpers/wp-hummingbird-helpers-core.php:550
2715
  msgid "%d year"
2716
  msgid_plural "%d years"
2717
  msgstr[0] ""
2718
  msgstr[1] ""
2719
 
2720
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:553
2721
- #: helpers/wp-hummingbird-helpers-core.php:553
2722
  msgid "%d month"
2723
  msgid_plural "%d months"
2724
  msgstr[0] ""
2725
  msgstr[1] ""
2726
 
2727
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:556
2728
- #: helpers/wp-hummingbird-helpers-core.php:556
2729
  msgid "%d day"
2730
  msgid_plural "%d days"
2731
  msgstr[0] ""
2732
  msgstr[1] ""
2733
 
2734
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:559
2735
- #: helpers/wp-hummingbird-helpers-core.php:559
2736
  msgid "%d hour"
2737
  msgid_plural "%d hours"
2738
  msgstr[0] ""
2739
  msgstr[1] ""
2740
 
2741
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:562
2742
- #: helpers/wp-hummingbird-helpers-core.php:562
2743
  msgid "%d minute"
2744
  msgid_plural "%d minutes"
2745
  msgstr[0] ""
2746
  msgstr[1] ""
2747
 
2748
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:565
2749
- #: helpers/wp-hummingbird-helpers-core.php:565
2750
  msgid "%d second"
2751
  msgid_plural "%d seconds"
2752
  msgstr[0] ""
2753
  msgstr[1] ""
2754
 
2755
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:689
2756
- #: helpers/wp-hummingbird-helpers-core.php:689
2757
  msgid "Still having trouble? "
2758
  msgstr ""
2759
 
2760
- #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:689
2761
- #: helpers/wp-hummingbird-helpers-core.php:689
2762
  msgid "Open a support ticket."
2763
  msgstr ""
2764
 
@@ -2787,21 +2810,21 @@ msgctxt "Connect to CloufFlare button text"
2787
  msgid "Connect"
2788
  msgstr ""
2789
 
2790
- #: admin/views/caching/cloudflare-meta-box.php:96
2791
- #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:96
2792
  msgctxt "CloudFlare Zone"
2793
  msgid "Zone"
2794
  msgstr ""
2795
 
2796
- #: admin/views/caching/cloudflare-meta-box.php:99
2797
- #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:99
2798
  msgctxt "CloudFlare Plan"
2799
  msgid "Plan"
2800
  msgstr ""
2801
 
2802
- #: admin/views/dashboard/welcome/meta-box.php:27
2803
  #: admin/views/performance/module-resume-meta-box.php:25
2804
- #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:27
2805
  #: build/wp-hummingbird/admin/views/performance/module-resume-meta-box.php:25
2806
  msgctxt "Time of the last performance report"
2807
  msgid "at %s"
2
  # This file is distributed under the same license as the Hummingbird Pro package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Hummingbird Pro 1.5.4\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
+ "POT-Creation-Date: 2017-07-13 07:00:26+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
33
  msgid "The selected zone is not valid"
34
  msgstr ""
35
 
36
+ #: admin/class-admin-notices.php:66
37
+ #: build/wp-hummingbird/admin/class-admin-notices.php:66
38
+ #. translators: %s: Upgrade URL
39
  msgid ""
40
  "Awww yeah! You’ve got access to Hummingbird Pro! Let’s upgrade your free "
41
  "version so you can start using premium features. <a href=\"%s\">Upgrade</a>"
42
  msgstr ""
43
 
44
+ #: admin/class-admin-notices.php:96
45
+ #: build/wp-hummingbird/admin/class-admin-notices.php:96
46
  msgid ""
47
  "We noticed you’re running both the free and pro versions of Hummingbird. No "
48
  "biggie! We’ve deactivated the free version for you. Enjoy the pro features!"
49
  msgstr ""
50
 
51
+ #: admin/class-admin-notices.php:143
52
+ #: build/wp-hummingbird/admin/class-admin-notices.php:143
53
+ #. translators: %s: Review URL
54
+ msgid ""
55
+ "We've spent countless hours developing this free plugin for you, and we "
56
+ "would really appreciate it if you <a href=\"%s\" target=\"_blank\">dropped "
57
+ "us a quick rating</a>!"
58
+ msgstr ""
59
+
60
  #: admin/class-admin.php:56 build/wp-hummingbird/admin/class-admin.php:56
61
  msgid "Go to Hummingbird Dashboard"
62
  msgstr ""
91
  msgstr ""
92
 
93
  #: admin/class-admin.php:87 admin/class-admin.php:122
94
+ #: admin/class-dashboard-page.php:129 admin/class-dashboard-page.php:132
95
+ #: admin/class-dashboard-page.php:135 admin/class-dashboard-page.php:487
96
  #: build/wp-hummingbird/admin/class-admin.php:87
97
  #: build/wp-hummingbird/admin/class-admin.php:122
98
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:129
99
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:132
100
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:135
101
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:487
102
  msgid "Performance Report"
103
  msgstr ""
104
 
105
  #: admin/class-admin.php:90 admin/class-admin.php:104
106
+ #: admin/class-dashboard-page.php:154 admin/class-dashboard-page.php:158
107
+ #: admin/class-dashboard-page.php:162 admin/class-dashboard-page.php:165
108
+ #: admin/class-dashboard-page.php:424
109
  #: build/wp-hummingbird/admin/class-admin.php:90
110
  #: build/wp-hummingbird/admin/class-admin.php:104
111
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:154
112
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:158
113
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:162
114
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:165
115
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:424
116
  msgid "Minification"
117
  msgstr ""
118
 
119
  #: admin/class-admin.php:92 admin/class-admin.php:123
120
+ #: admin/class-dashboard-page.php:144 admin/class-dashboard-page.php:315
121
+ #: admin/views/dashboard/welcome/meta-box.php:44
122
  #: build/wp-hummingbird/admin/class-admin.php:92
123
  #: build/wp-hummingbird/admin/class-admin.php:123
124
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:144
125
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:315
126
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:44
127
  msgid "Browser Caching"
128
  msgstr ""
129
 
130
  #: admin/class-admin.php:93 admin/class-admin.php:124
131
+ #: admin/class-dashboard-page.php:147 admin/class-dashboard-page.php:450
132
+ #: admin/views/dashboard/welcome/meta-box.php:62
133
  #: build/wp-hummingbird/admin/class-admin.php:93
134
  #: build/wp-hummingbird/admin/class-admin.php:124
135
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:147
136
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:450
137
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:62
138
  msgid "GZIP Compression"
139
  msgstr ""
140
 
141
  #: admin/class-admin.php:94 admin/class-admin.php:125
142
+ #: admin/class-dashboard-page.php:190 admin/class-dashboard-page.php:193
143
+ #: admin/class-dashboard-page.php:196 admin/class-uptime-page.php:68
144
+ #: admin/class-uptime-page.php:71 admin/class-uptime-page.php:74
145
  #: build/wp-hummingbird/admin/class-admin.php:94
146
  #: build/wp-hummingbird/admin/class-admin.php:125
147
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:190
148
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:193
149
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:196
150
+ #: build/wp-hummingbird/admin/class-uptime-page.php:68
151
+ #: build/wp-hummingbird/admin/class-uptime-page.php:71
152
+ #: build/wp-hummingbird/admin/class-uptime-page.php:74
153
  #: build/wp-hummingbird/core/class-core.php:53 core/class-core.php:53
154
  msgid "Uptime"
155
  msgstr ""
156
 
157
+ #: admin/class-admin.php:125 admin/class-dashboard-page.php:187
158
+ #: admin/class-dashboard-page.php:339
159
  #: build/wp-hummingbird/admin/class-admin.php:125
160
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:187
161
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:339
162
  msgid "Uptime Monitoring"
163
  msgstr ""
164
 
207
 
208
  #: admin/class-caching-page.php:121 admin/class-caching-page.php:181
209
  #: admin/class-gzip-page.php:77 admin/class-gzip-page.php:112
210
+ #: admin/class-performance-page.php:87 admin/class-performance-page.php:90
211
  #: build/wp-hummingbird/admin/class-caching-page.php:121
212
  #: build/wp-hummingbird/admin/class-caching-page.php:181
213
  #: build/wp-hummingbird/admin/class-gzip-page.php:77
214
  #: build/wp-hummingbird/admin/class-gzip-page.php:112
215
+ #: build/wp-hummingbird/admin/class-performance-page.php:87
216
+ #: build/wp-hummingbird/admin/class-performance-page.php:90
217
  msgid "Summary"
218
  msgstr ""
219
 
229
  msgid "CloudFlare"
230
  msgstr ""
231
 
232
+ #: admin/class-caching-page.php:171 admin/class-dashboard-page.php:297
233
  #: admin/views/caching/summary-meta-box.php:36
234
  #: admin/views/dashboard/caching/module-meta-box.php:25
235
  #: build/wp-hummingbird/admin/class-caching-page.php:171
236
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:297
237
  #: build/wp-hummingbird/admin/views/caching/summary-meta-box.php:36
238
  #: build/wp-hummingbird/admin/views/dashboard/caching/module-meta-box.php:25
239
  msgid "Caching is enabled"
240
  msgstr ""
241
 
242
+ #: admin/class-caching-page.php:171 admin/class-dashboard-page.php:297
243
  #: admin/views/caching/summary-meta-box.php:40
244
  #: admin/views/dashboard/caching/module-meta-box.php:29
245
  #: build/wp-hummingbird/admin/class-caching-page.php:171
246
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:297
247
  #: build/wp-hummingbird/admin/views/caching/summary-meta-box.php:40
248
  #: build/wp-hummingbird/admin/views/dashboard/caching/module-meta-box.php:29
249
  msgid "Caching is enabled but you aren't using our recommended value"
250
  msgstr ""
251
 
252
+ #: admin/class-dashboard-page.php:41 admin/class-minification-page.php:197
253
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:41
254
  #: build/wp-hummingbird/admin/class-minification-page.php:197
255
  msgid ""
256
  "Your cache has been successfully cleared. Your assets will regenerate the "
257
  "next time someone visits your website."
258
  msgstr ""
259
 
260
+ #: admin/class-dashboard-page.php:45 admin/class-minification-page.php:201
261
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:45
262
  #: build/wp-hummingbird/admin/class-minification-page.php:201
263
  msgid ""
264
  "Your local and CloudFlare caches have been successfully cleared. Your "
265
  "assets will regenerate the next time someone visits your website."
266
  msgstr ""
267
 
268
+ #: admin/class-dashboard-page.php:62 admin/class-performance-page.php:60
269
  #: admin/views/dashboard/performance/disabled-meta-box.php:7
270
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:62
271
+ #: build/wp-hummingbird/admin/class-performance-page.php:60
272
  #: build/wp-hummingbird/admin/views/dashboard/performance/disabled-meta-box.php:7
273
  msgid "Run Test"
274
  msgstr ""
275
 
276
+ #: admin/class-dashboard-page.php:64
277
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:64
278
  msgid "Clear Cache"
279
  msgstr ""
280
 
281
+ #: admin/class-dashboard-page.php:126
282
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:126
283
  msgid "Performance test in progress"
284
  msgstr ""
285
 
286
+ #: admin/class-dashboard-page.php:171 admin/class-dashboard-page.php:543
287
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:171
288
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:543
289
  msgid "Image Optimization"
290
  msgstr ""
291
 
292
+ #: admin/class-dashboard-page.php:201
293
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:201
294
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:27
295
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:40
296
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:42
300
  msgid "Reporting"
301
  msgstr ""
302
 
303
+ #: admin/class-dashboard-page.php:264
304
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:264
305
  msgid "Welcome %s"
306
  msgstr ""
307
 
308
+ #: admin/class-dashboard-page.php:556
309
+ #: build/wp-hummingbird/admin/class-dashboard-page.php:556
310
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:55
311
  #: build/wp-hummingbird/core/pro/admin/class-pro-admin.php:87
312
  #: core/pro/admin/class-pro-admin.php:55 core/pro/admin/class-pro-admin.php:87
342
  "Hummingbird will minify and serve your newly compressed files."
343
  msgstr ""
344
 
345
+ #: admin/class-minification-page.php:205 admin/class-performance-page.php:43
346
  #: admin/views/minification/advanced-settings.php:2
347
  #: build/wp-hummingbird/admin/class-minification-page.php:205
348
+ #: build/wp-hummingbird/admin/class-performance-page.php:43
349
  #: build/wp-hummingbird/admin/views/minification/advanced-settings.php:2
350
  msgid "Settings updated"
351
  msgstr ""
374
  msgid "OTHER"
375
  msgstr ""
376
 
377
+ #: admin/class-performance-page.php:25 admin/class-performance-page.php:94
378
+ #: admin/class-performance-page.php:148
379
  #: build/wp-hummingbird/admin/class-performance-page.php:25
380
+ #: build/wp-hummingbird/admin/class-performance-page.php:94
381
+ #: build/wp-hummingbird/admin/class-performance-page.php:148
382
  msgid "Improvements"
383
  msgstr ""
384
 
385
+ #: admin/class-performance-page.php:54
386
+ #: build/wp-hummingbird/admin/class-performance-page.php:54
387
  msgid "Your last performance test was on <strong>%s</strong> at <strong>%s</strong>"
388
  msgstr ""
389
 
390
+ #: admin/class-performance-page.php:56
391
+ #: build/wp-hummingbird/admin/class-performance-page.php:56
392
  msgid ""
393
  "Hummingbird is just catching her breath. <strong>Run again in %d "
394
  "minutes</strong>"
395
  msgstr ""
396
 
397
+ #: admin/class-uptime-page.php:22
398
+ #: build/wp-hummingbird/admin/class-uptime-page.php:22
399
  msgid "Disable Uptime"
400
  msgstr ""
401
 
402
+ #: admin/class-uptime-page.php:32
403
+ #: build/wp-hummingbird/admin/class-uptime-page.php:32
404
  msgid "Reporting period"
405
  msgstr ""
406
 
407
+ #: admin/class-uptime-page.php:78 admin/class-uptime-page.php:280
408
+ #: build/wp-hummingbird/admin/class-uptime-page.php:78
409
+ #: build/wp-hummingbird/admin/class-uptime-page.php:280
410
  msgid "Response Time"
411
  msgstr ""
412
 
413
+ #: admin/class-uptime-page.php:79
414
  #: admin/views/dashboard/uptime/module-meta-box.php:18
415
  #: admin/views/uptime/summary-meta-box.php:40
416
+ #: build/wp-hummingbird/admin/class-uptime-page.php:79
417
  #: build/wp-hummingbird/admin/views/dashboard/uptime/module-meta-box.php:18
418
  #: build/wp-hummingbird/admin/views/uptime/summary-meta-box.php:40
419
  msgid "Downtime"
420
  msgstr ""
421
 
422
+ #: admin/class-uptime-page.php:167
423
+ #: build/wp-hummingbird/admin/class-uptime-page.php:167
424
  msgid "Last Day"
425
  msgstr ""
426
 
427
+ #: admin/class-uptime-page.php:168
428
+ #: build/wp-hummingbird/admin/class-uptime-page.php:168
429
  msgid "Last Week"
430
  msgstr ""
431
 
432
+ #: admin/class-uptime-page.php:169
433
+ #: build/wp-hummingbird/admin/class-uptime-page.php:169
434
  msgid "Last Month"
435
  msgstr ""
436
 
529
  "update CloudFlare settings."
530
  msgstr ""
531
 
532
+ #: admin/views/caching/cloudflare-meta-box.php:106
533
+ #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:106
534
  msgid ""
535
  "Made changes to your website? Use Purge Cache button to clear CloudFlare's "
536
  "cache"
537
  msgstr ""
538
 
539
+ #: admin/views/caching/cloudflare-meta-box.php:108
540
+ #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:108
541
  msgid "Purge Cache"
542
  msgstr ""
543
 
910
  #: admin/views/dashboard/caching/module-meta-box.php:70
911
  #: build/wp-hummingbird/admin/views/caching/summary-meta-box.php:84
912
  #: build/wp-hummingbird/admin/views/dashboard/caching/module-meta-box.php:70
913
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:408
914
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:434
 
915
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:578
916
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:582
917
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:586
918
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:590
919
+ #: helpers/wp-hummingbird-helpers-core.php:408
920
+ #: helpers/wp-hummingbird-helpers-core.php:434
921
  #: helpers/wp-hummingbird-helpers-core.php:578
922
  #: helpers/wp-hummingbird-helpers-core.php:582
923
  #: helpers/wp-hummingbird-helpers-core.php:586
924
+ #: helpers/wp-hummingbird-helpers-core.php:590
925
  msgid "8 days"
926
  msgstr ""
927
 
1179
  msgstr ""
1180
 
1181
  #: admin/views/dashboard/performance/running-test-meta-box.php:5
1182
+ #: admin/views/modals/check-performance-modal.php:4
1183
+ #: admin/views/modals/check-performance-modal.php:9
1184
  #: build/wp-hummingbird/admin/views/dashboard/performance/running-test-meta-box.php:5
1185
+ #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:4
1186
+ #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:9
1187
  msgid ""
1188
  "Hummingbird is running a test to measure your website performance, please "
1189
  "wait."
1336
  msgstr ""
1337
 
1338
  #: admin/views/dashboard/uptime/module-meta-box.php:32
1339
+ #: admin/views/dashboard/welcome/meta-box.php:72
1340
  #: build/wp-hummingbird/admin/views/dashboard/uptime/module-meta-box.php:32
1341
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:72
1342
  msgid "Last Down"
1343
  msgstr ""
1344
 
1368
  msgid "Current performance score"
1369
  msgstr ""
1370
 
1371
+ #: admin/views/dashboard/welcome/meta-box.php:33
1372
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:33
1373
  msgid "Running scan..."
1374
  msgstr ""
1375
 
1376
+ #: admin/views/dashboard/welcome/meta-box.php:35
1377
  #: admin/views/performance/module-resume-meta-box.php:27
1378
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:35
1379
  #: build/wp-hummingbird/admin/views/performance/module-resume-meta-box.php:27
1380
  msgid "Never"
1381
  msgstr ""
1382
 
1383
+ #: admin/views/dashboard/welcome/meta-box.php:38
1384
  #: admin/views/performance/module-resume-meta-box.php:30
1385
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:38
1386
  #: build/wp-hummingbird/admin/views/performance/module-resume-meta-box.php:30
1387
  msgid "Last test date"
1388
  msgstr ""
1389
 
1390
+ #: admin/views/dashboard/welcome/meta-box.php:75
1391
  #: admin/views/minification/summary-meta-box.php:53
1392
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:75
1393
  #: build/wp-hummingbird/admin/views/minification/summary-meta-box.php:53
1394
  msgid "Pro Feature"
1395
  msgstr ""
1396
 
1397
+ #: admin/views/dashboard/welcome/meta-box.php:77
1398
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:77
1399
  msgid "Uptime Inactive"
1400
  msgstr ""
1401
 
1525
 
1526
  #: admin/views/minification/enqueued-files-empty-meta-box.php:7
1527
  #: admin/views/modals/check-files-modal.php:31
1528
+ #: admin/views/modals/check-performance-modal.php:30
1529
  #: admin/views/modals/enable-cdn-modal.php:33
1530
  #: admin/views/modals/quick-setup-modal.php:14
1531
  #: build/wp-hummingbird/admin/views/minification/enqueued-files-empty-meta-box.php:7
1532
  #: build/wp-hummingbird/admin/views/modals/check-files-modal.php:31
1533
+ #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:30
1534
  #: build/wp-hummingbird/admin/views/modals/enable-cdn-modal.php:33
1535
  #: build/wp-hummingbird/admin/views/modals/quick-setup-modal.php:14
1536
  msgid "Reduce your page load time!"
1834
  "a setting causes errors then revert the setting here."
1835
  msgstr ""
1836
 
1837
+ #: admin/views/modals/check-performance-modal.php:2
1838
+ #: admin/views/modals/check-performance-modal.php:7
1839
+ #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:2
1840
+ #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:7
1841
  msgid "Test in progress"
1842
  msgstr ""
1843
 
1844
+ #: admin/views/modals/check-performance-modal.php:24
1845
+ #: build/wp-hummingbird/admin/views/modals/check-performance-modal.php:24
1846
  msgid "Performance test in progress..."
1847
  msgstr ""
1848
 
2159
  msgid "Wrong Service. $service must be an instance of WP_Hummingbird_API_Service"
2160
  msgstr ""
2161
 
2162
+ #: build/wp-hummingbird/core/api/request/wpmudev.php:85
2163
+ #: core/api/request/wpmudev.php:85
2164
  msgid "Unknown Error. Code: %s"
2165
  msgstr ""
2166
 
2202
  msgid "See this page minified"
2203
  msgstr ""
2204
 
2205
+ #: build/wp-hummingbird/core/integration/avada.php:22
2206
+ #: core/integration/avada.php:22
2207
+ msgid ""
2208
+ "JS Compiler detected in Avada Theme. For Hummingbird minification settings "
2209
+ "to work correctly, it is recommended you %s in Advanced - Dynamic CSS & JS."
2210
+ msgstr ""
2211
+
2212
  #: build/wp-hummingbird/core/modules/class-module-cloudflare.php:341
2213
  #: core/modules/class-module-cloudflare.php:341
2214
  msgid "Invalid CloudFlare expiration value"
2215
  msgstr ""
2216
 
2217
+ #: build/wp-hummingbird/core/modules/class-module-performance.php:96
2218
+ #: core/modules/class-module-performance.php:96
2219
  msgid ""
2220
  "The performance test didn't return any results. This probably means you're "
2221
  "on a local website (which we can't scan) or something went wrong trying to "
2228
  msgid "You need to be a WPMU DEV Member"
2229
  msgstr ""
2230
 
2231
+ #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:785
2232
+ #: core/modules/minify/class-minify-group.php:785
2233
  msgid "This file has not a linked URL, it will not be combined/minified"
2234
  msgstr ""
2235
 
2236
+ #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:798
2237
+ #: core/modules/minify/class-minify-group.php:798
2238
  msgid "This file included in your output can't be minified or combined"
2239
  msgstr ""
2240
 
2241
+ #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:845
2242
+ #: core/modules/minify/class-minify-group.php:845
2243
  msgid "It looks like this file is empty"
2244
  msgstr ""
2245
 
2246
+ #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:876
2247
+ #: core/modules/minify/class-minify-group.php:876
2248
  msgid "@import directive is not allowed in stylesheets"
2249
  msgstr ""
2250
 
2251
+ #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:891
2252
+ #: core/modules/minify/class-minify-group.php:891
2253
  msgid "Hummingbird could not parse the content of this file"
2254
  msgstr ""
2255
 
2256
+ #: build/wp-hummingbird/core/modules/minify/class-minify-group.php:927
2257
+ #: core/modules/minify/class-minify-group.php:927
2258
  msgid "Minify callback does not exist"
2259
  msgstr ""
2260
 
2480
  msgid "Hide details"
2481
  msgstr ""
2482
 
2483
+ #: build/wp-hummingbird/core/pro/modules/class-module-reporting.php:34
2484
+ #: core/pro/modules/class-module-reporting.php:34
2485
+ #. translators: %s: Url for site
2486
  msgid "Here's your latest performance test results for %s"
2487
  msgstr ""
2488
 
2520
  msgid "Hummingbird Performance Report"
2521
  msgstr ""
2522
 
2523
+ #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:24
2524
+ #: core/pro/modules/reporting/templates/main.php:24
2525
+ #. translators: %s: Username.
2526
  msgid "Hi %s,"
2527
  msgstr ""
2528
 
2529
+ #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:26
2530
+ #: core/pro/modules/reporting/templates/main.php:26
2531
  msgid "It’s Hummingbird here, straight from the"
2532
  msgstr ""
2533
 
2534
+ #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:26
2535
+ #: core/pro/modules/reporting/templates/main.php:26
2536
  msgid "engine room. Here’s your latest Performance Test summary."
2537
  msgstr ""
2538
 
2539
+ #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:34
2540
+ #: core/pro/modules/reporting/templates/main.php:34
2541
  msgid "Ok"
2542
  msgstr ""
2543
 
2544
+ #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:36
2545
+ #: core/pro/modules/reporting/templates/main.php:36
2546
  msgid "Warning"
2547
  msgstr ""
2548
 
2549
+ #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:38
2550
+ #: core/pro/modules/reporting/templates/main.php:38
2551
  msgid "Critical"
2552
  msgstr ""
2553
 
2554
+ #: build/wp-hummingbird/core/pro/modules/reporting/templates/main.php:52
2555
+ #: core/pro/modules/reporting/templates/main.php:52
2556
  msgid "View full report"
2557
  msgstr ""
2558
 
2572
  msgid "Saving"
2573
  msgstr ""
2574
 
2575
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:327
2576
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:377
2577
+ #: helpers/wp-hummingbird-helpers-core.php:327
2578
+ #: helpers/wp-hummingbird-helpers-core.php:377
2579
  msgid "Are you sure? All your changes will be lost"
2580
  msgstr ""
2581
 
2582
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:333
2583
+ #: helpers/wp-hummingbird-helpers-core.php:333
2584
  msgid "Remove"
2585
  msgstr ""
2586
 
2587
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:334
2588
+ #: helpers/wp-hummingbird-helpers-core.php:334
2589
  msgid "You"
2590
  msgstr ""
2591
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2592
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:395
2593
  #: helpers/wp-hummingbird-helpers-core.php:395
2594
+ msgid "1 hour"
2595
  msgstr ""
2596
 
2597
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:396
2598
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:422
2599
  #: helpers/wp-hummingbird-helpers-core.php:396
2600
  #: helpers/wp-hummingbird-helpers-core.php:422
2601
+ msgid "3 hours"
2602
  msgstr ""
2603
 
2604
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:397
2605
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:423
2606
  #: helpers/wp-hummingbird-helpers-core.php:397
2607
  #: helpers/wp-hummingbird-helpers-core.php:423
2608
+ msgid "4 hours"
2609
  msgstr ""
2610
 
2611
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:398
2612
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:424
2613
  #: helpers/wp-hummingbird-helpers-core.php:398
2614
  #: helpers/wp-hummingbird-helpers-core.php:424
2615
+ msgid "5 hours"
2616
  msgstr ""
2617
 
2618
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:399
 
2619
  #: helpers/wp-hummingbird-helpers-core.php:399
2620
+ msgid "6 hours"
 
2621
  msgstr ""
2622
 
2623
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:400
2624
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:426
2625
  #: helpers/wp-hummingbird-helpers-core.php:400
2626
  #: helpers/wp-hummingbird-helpers-core.php:426
2627
+ msgid "12 hours"
2628
  msgstr ""
2629
 
2630
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:401
2631
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:427
2632
  #: helpers/wp-hummingbird-helpers-core.php:401
2633
  #: helpers/wp-hummingbird-helpers-core.php:427
2634
+ msgid "16 hours"
2635
  msgstr ""
2636
 
2637
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:402
2638
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:428
2639
  #: helpers/wp-hummingbird-helpers-core.php:402
2640
  #: helpers/wp-hummingbird-helpers-core.php:428
2641
+ msgid "20 hours"
2642
  msgstr ""
2643
 
2644
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:403
2645
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:429
2646
  #: helpers/wp-hummingbird-helpers-core.php:403
2647
  #: helpers/wp-hummingbird-helpers-core.php:429
2648
+ msgid "1 day"
2649
+ msgstr ""
2650
+
2651
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:404
2652
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:430
2653
+ #: helpers/wp-hummingbird-helpers-core.php:404
2654
+ #: helpers/wp-hummingbird-helpers-core.php:430
2655
+ msgid "2 days"
2656
  msgstr ""
2657
 
2658
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:405
2659
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:431
2660
  #: helpers/wp-hummingbird-helpers-core.php:405
2661
  #: helpers/wp-hummingbird-helpers-core.php:431
2662
+ msgid "3 days"
2663
  msgstr ""
2664
 
2665
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:406
2666
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:432
2667
  #: helpers/wp-hummingbird-helpers-core.php:406
2668
  #: helpers/wp-hummingbird-helpers-core.php:432
2669
+ msgid "4 days"
2670
  msgstr ""
2671
 
2672
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:407
2673
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:433
2674
  #: helpers/wp-hummingbird-helpers-core.php:407
2675
  #: helpers/wp-hummingbird-helpers-core.php:433
2676
+ msgid "5 days"
 
 
 
 
 
 
 
2677
  msgstr ""
2678
 
2679
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:409
2680
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:435
2681
  #: helpers/wp-hummingbird-helpers-core.php:409
2682
+ #: helpers/wp-hummingbird-helpers-core.php:435
2683
+ msgid "16 days"
2684
  msgstr ""
2685
 
2686
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:410
2687
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:436
2688
  #: helpers/wp-hummingbird-helpers-core.php:410
2689
+ #: helpers/wp-hummingbird-helpers-core.php:436
2690
+ msgid "24 days"
2691
  msgstr ""
2692
 
2693
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:411
2694
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:437
2695
  #: helpers/wp-hummingbird-helpers-core.php:411
2696
+ #: helpers/wp-hummingbird-helpers-core.php:437
2697
+ msgid "1 month"
2698
  msgstr ""
2699
 
2700
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:412
2701
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:438
2702
+ #: helpers/wp-hummingbird-helpers-core.php:412
2703
+ #: helpers/wp-hummingbird-helpers-core.php:438
2704
+ msgid "2 months"
2705
+ msgstr ""
2706
+
2707
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:413
2708
+ #: helpers/wp-hummingbird-helpers-core.php:413
2709
+ msgid "3 months"
2710
+ msgstr ""
2711
+
2712
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:414
2713
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:439
2714
+ #: helpers/wp-hummingbird-helpers-core.php:414
2715
+ #: helpers/wp-hummingbird-helpers-core.php:439
2716
+ msgid "6 months"
2717
+ msgstr ""
2718
+
2719
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:415
2720
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:440
2721
+ #: helpers/wp-hummingbird-helpers-core.php:415
2722
+ #: helpers/wp-hummingbird-helpers-core.php:440
2723
+ msgid "1 year"
2724
  msgstr ""
2725
 
2726
  #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:421
2727
  #: helpers/wp-hummingbird-helpers-core.php:421
2728
+ msgid "2 hours"
2729
+ msgstr ""
2730
+
2731
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:425
2732
+ #: helpers/wp-hummingbird-helpers-core.php:425
2733
  msgid "8 hours"
2734
  msgstr ""
2735
 
2736
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:554
2737
+ #: helpers/wp-hummingbird-helpers-core.php:554
2738
  msgid "%d year"
2739
  msgid_plural "%d years"
2740
  msgstr[0] ""
2741
  msgstr[1] ""
2742
 
2743
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:557
2744
+ #: helpers/wp-hummingbird-helpers-core.php:557
2745
  msgid "%d month"
2746
  msgid_plural "%d months"
2747
  msgstr[0] ""
2748
  msgstr[1] ""
2749
 
2750
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:560
2751
+ #: helpers/wp-hummingbird-helpers-core.php:560
2752
  msgid "%d day"
2753
  msgid_plural "%d days"
2754
  msgstr[0] ""
2755
  msgstr[1] ""
2756
 
2757
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:563
2758
+ #: helpers/wp-hummingbird-helpers-core.php:563
2759
  msgid "%d hour"
2760
  msgid_plural "%d hours"
2761
  msgstr[0] ""
2762
  msgstr[1] ""
2763
 
2764
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:566
2765
+ #: helpers/wp-hummingbird-helpers-core.php:566
2766
  msgid "%d minute"
2767
  msgid_plural "%d minutes"
2768
  msgstr[0] ""
2769
  msgstr[1] ""
2770
 
2771
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:569
2772
+ #: helpers/wp-hummingbird-helpers-core.php:569
2773
  msgid "%d second"
2774
  msgid_plural "%d seconds"
2775
  msgstr[0] ""
2776
  msgstr[1] ""
2777
 
2778
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:693
2779
+ #: helpers/wp-hummingbird-helpers-core.php:693
2780
  msgid "Still having trouble? "
2781
  msgstr ""
2782
 
2783
+ #: build/wp-hummingbird/helpers/wp-hummingbird-helpers-core.php:693
2784
+ #: helpers/wp-hummingbird-helpers-core.php:693
2785
  msgid "Open a support ticket."
2786
  msgstr ""
2787
 
2810
  msgid "Connect"
2811
  msgstr ""
2812
 
2813
+ #: admin/views/caching/cloudflare-meta-box.php:98
2814
+ #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:98
2815
  msgctxt "CloudFlare Zone"
2816
  msgid "Zone"
2817
  msgstr ""
2818
 
2819
+ #: admin/views/caching/cloudflare-meta-box.php:102
2820
+ #: build/wp-hummingbird/admin/views/caching/cloudflare-meta-box.php:102
2821
  msgctxt "CloudFlare Plan"
2822
  msgid "Plan"
2823
  msgstr ""
2824
 
2825
+ #: admin/views/dashboard/welcome/meta-box.php:29
2826
  #: admin/views/performance/module-resume-meta-box.php:25
2827
+ #: build/wp-hummingbird/admin/views/dashboard/welcome/meta-box.php:29
2828
  #: build/wp-hummingbird/admin/views/performance/module-resume-meta-box.php:25
2829
  msgctxt "Time of the last performance report"
2830
  msgid "at %s"
readme.txt CHANGED
@@ -6,8 +6,8 @@ Author URI: http://premium.wpmudev.org/
6
  Contributors: WPMUDEV
7
  Tags: Optimization, Caching, Speed, Performance, Faster, PageSpeed, Gzip, Compression, Minify, Minification, CloudFlare
8
  Requires at least: 3.5
9
- Tested up to: 4.8
10
- Stable tag: 1.5.2
11
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
12
 
13
  Make your site load faster with file compression, minification and browser caching – because when it comes to pagespeed, every millisecond counts!
@@ -106,6 +106,19 @@ Minification is a great way to speed up your site but moving combining and rearr
106
 
107
  == Changelog ==
108
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
  = 1.5.3 ( 2017-06-21 ) =
110
  - Fix: Avada & Google Maps scripts incompatibility
111
  - Fix: Bulk update not working when selecting all items in minification screen
6
  Contributors: WPMUDEV
7
  Tags: Optimization, Caching, Speed, Performance, Faster, PageSpeed, Gzip, Compression, Minify, Minification, CloudFlare
8
  Requires at least: 3.5
9
+ Tested up to: 4.7.3
10
+ Stable tag: 1.5.4
11
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
12
 
13
  Make your site load faster with file compression, minification and browser caching – because when it comes to pagespeed, every millisecond counts!
106
 
107
  == Changelog ==
108
 
109
+ = 1.5.4 ( 2017-07-13 ) =
110
+ - Fix: Cron reports were stuck on a loop on some WordPress installations
111
+ - Fix: Issue with reports and calculating UTC time
112
+ - Fix: Minification was duplicating inline styles
113
+ - Fix: IE incompatibility in magnification screen
114
+ - Fix: Compatibility with Contact Form 7
115
+ - Fix: Mobile menus not working on Performance and Minification pages
116
+ - Enhance: Remove jQuery and jQuery migrate from minification process
117
+ - Enhance: Minor style changes and updates
118
+ - Enhance: Cron reports functionality
119
+ - Enhance: Code optimization
120
+ - Enhance: Admin area performance improvements
121
+
122
  = 1.5.3 ( 2017-06-21 ) =
123
  - Fix: Avada & Google Maps scripts incompatibility
124
  - Fix: Bulk update not working when selecting all items in minification screen
uninstall.php CHANGED
@@ -43,4 +43,6 @@ delete_site_option( 'wphb_settings' );
43
  delete_site_option( 'wphb_version' );
44
 
45
  delete_site_option( 'wphb-is-cloudflare' );
46
- delete_site_option( 'wphb-quick-setup' );
 
 
43
  delete_site_option( 'wphb_version' );
44
 
45
  delete_site_option( 'wphb-is-cloudflare' );
46
+ delete_site_option( 'wphb-quick-setup' );
47
+ delete_site_option( 'wphb-notice-free-rated-show' );
48
+ delete_site_option( 'wphb-free-install-date' );
wp-hummingbird.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /**
3
  Plugin Name: Hummingbird
4
- Version: 1.5.3
5
  Plugin URI: https://premium.wpmudev.org/project/wp-hummingbird/
6
  Description: Hummingbird zips through your site finding new ways to make it load faster, from file compression and minification to browser caching – because when it comes to pagespeed, every millisecond counts.
7
  Author: WPMU DEV
@@ -32,7 +32,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32
  */
33
 
34
  if ( ! defined( 'WPHB_VERSION' ) ) {
35
- define( 'WPHB_VERSION', '1.5.3' );
36
  }
37
 
38
  if ( file_exists( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'free-mods.php' ) ) {
@@ -40,6 +40,13 @@ if ( file_exists( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'free-mods.ph
40
  }
41
 
42
  if ( defined( 'WPHB_WPORG' ) && WPHB_WPORG && 'wp-hummingbird/wp-hummingbird.php' != plugin_basename( __FILE__ ) ) {
 
 
 
 
 
 
 
43
  // This plugin is the free version so if the Pro version is activated we need to deactivate this one.
44
  if ( ! function_exists( 'is_plugin_active' ) ) {
45
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
1
  <?php
2
  /**
3
  Plugin Name: Hummingbird
4
+ Version: 1.5.4
5
  Plugin URI: https://premium.wpmudev.org/project/wp-hummingbird/
6
  Description: Hummingbird zips through your site finding new ways to make it load faster, from file compression and minification to browser caching – because when it comes to pagespeed, every millisecond counts.
7
  Author: WPMU DEV
32
  */
33
 
34
  if ( ! defined( 'WPHB_VERSION' ) ) {
35
+ define( 'WPHB_VERSION', '1.5.4' );
36
  }
37
 
38
  if ( file_exists( trailingslashit( plugin_dir_path( __FILE__ ) ) . 'free-mods.php' ) ) {
40
  }
41
 
42
  if ( defined( 'WPHB_WPORG' ) && WPHB_WPORG && 'wp-hummingbird/wp-hummingbird.php' != plugin_basename( __FILE__ ) ) {
43
+ // Add notice to rate the free version.
44
+ $free_installation = get_site_option( 'wphb-free-install-date' );
45
+ if ( empty( $free_installation ) ) {
46
+ update_site_option( 'wphb-notice-free-rated-show', 'yes' );
47
+ update_site_option( 'wphb-free-install-date', current_time( 'timestamp' ) );
48
+ }
49
+
50
  // This plugin is the free version so if the Pro version is activated we need to deactivate this one.
51
  if ( ! function_exists( 'is_plugin_active' ) ) {
52
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );