Version Description
Download this release
Release Info
Developer | Nikschavan |
Plugin | |
Version | 1.1.0 |
Comparing to | |
See all releases |
Code changes from version 1.0.14 to 1.1.0
- astra-sites.php +3 -3
- inc/assets/css/admin.css +30 -0
- inc/assets/js/admin-page.js +484 -63
- inc/assets/js/eventsource.js +673 -0
- inc/assets/js/eventsource.min.js +6 -0
- inc/classes/class-astra-sites-importer-log.php +494 -0
- inc/classes/class-astra-sites-importer.php +131 -110
- inc/classes/class-astra-sites-notices.php +2 -0
- inc/classes/class-astra-sites.php +45 -1
- inc/classes/compatibility/astra-pro/class-astra-sites-compatibility-astra-pro.php +35 -0
- inc/importers/batch-processing/helpers/class-astra-sites-image-importer.php +2 -2
- inc/importers/wxr-importer/class-astra-wxr-importer.php +215 -34
- inc/importers/wxr-importer/class-logger.php +4 -0
- inc/importers/wxr-importer/class-wp-importer-logger-serversentevents.php +46 -0
- inc/importers/wxr-importer/class-wxr-import-info.php +21 -0
- inc/importers/wxr-importer/class-wxr-importer.php +1 -1
- inc/includes/admin-page.php +23 -23
- languages/astra-sites.pot +228 -45
- readme.txt +13 -4
astra-sites.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
-
* Plugin Name: Astra Sites
|
4 |
* Plugin URI: http://www.wpastra.com/pro/
|
5 |
* Description: Import free sites build with Astra theme.
|
6 |
-
* Version: 1.0
|
7 |
* Author: Brainstorm Force
|
8 |
* Author URI: http://www.brainstormforce.com
|
9 |
* Text Domain: astra-sites
|
@@ -19,7 +19,7 @@ if ( ! defined( 'ASTRA_SITES_NAME' ) ) {
|
|
19 |
}
|
20 |
|
21 |
if ( ! defined( 'ASTRA_SITES_VER' ) ) {
|
22 |
-
define( 'ASTRA_SITES_VER', '1.0
|
23 |
}
|
24 |
|
25 |
if ( ! defined( 'ASTRA_SITES_FILE' ) ) {
|
1 |
<?php
|
2 |
/**
|
3 |
+
* Plugin Name: Astra Starter Sites
|
4 |
* Plugin URI: http://www.wpastra.com/pro/
|
5 |
* Description: Import free sites build with Astra theme.
|
6 |
+
* Version: 1.1.0
|
7 |
* Author: Brainstorm Force
|
8 |
* Author URI: http://www.brainstormforce.com
|
9 |
* Text Domain: astra-sites
|
19 |
}
|
20 |
|
21 |
if ( ! defined( 'ASTRA_SITES_VER' ) ) {
|
22 |
+
define( 'ASTRA_SITES_VER', '1.1.0' );
|
23 |
}
|
24 |
|
25 |
if ( ! defined( 'ASTRA_SITES_FILE' ) ) {
|
inc/assets/css/admin.css
CHANGED
@@ -90,6 +90,11 @@
|
|
90 |
text-align: center;
|
91 |
}
|
92 |
|
|
|
|
|
|
|
|
|
|
|
93 |
.wp-full-overlay-footer .installing:before {
|
94 |
vertical-align: text-bottom;
|
95 |
}
|
@@ -236,6 +241,9 @@
|
|
236 |
#astra-sites-admin {
|
237 |
height: 100vh;
|
238 |
}
|
|
|
|
|
|
|
239 |
|
240 |
.astra-sites-suggestions:before {
|
241 |
border: 5px dashed #ccc;
|
@@ -285,4 +293,26 @@
|
|
285 |
|
286 |
.no-themes .description {
|
287 |
display: block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
}
|
90 |
text-align: center;
|
91 |
}
|
92 |
|
93 |
+
.wp-core-ui .wp-full-overlay-footer .button.button-hero,
|
94 |
+
.wp-core-ui .wp-full-overlay-footer .button-group.button-hero .button {
|
95 |
+
padding: 0 10px 1px;
|
96 |
+
}
|
97 |
+
|
98 |
.wp-full-overlay-footer .installing:before {
|
99 |
vertical-align: text-bottom;
|
100 |
}
|
241 |
#astra-sites-admin {
|
242 |
height: 100vh;
|
243 |
}
|
244 |
+
.install-theme-info > .notice {
|
245 |
+
margin: 5px 0 10px 0;
|
246 |
+
}
|
247 |
|
248 |
.astra-sites-suggestions:before {
|
249 |
border: 5px dashed #ccc;
|
293 |
|
294 |
.no-themes .description {
|
295 |
display: block;
|
296 |
+
}
|
297 |
+
|
298 |
+
/**
|
299 |
+
* Responsive Button UI
|
300 |
+
*/
|
301 |
+
.astra-sites-preview .wp-full-overlay-footer .devices button.active:before,
|
302 |
+
.astra-sites-preview .wp-full-overlay-footer .devices button:hover:before {
|
303 |
+
color: #0073aa;
|
304 |
+
}
|
305 |
+
.astra-sites-preview .wp-full-overlay-footer .devices button:before {
|
306 |
+
color: #c1c1c1;
|
307 |
+
}
|
308 |
+
.astra-sites-preview .wp-full-overlay-footer .devices button:hover {
|
309 |
+
background-color: transparent;
|
310 |
+
}
|
311 |
+
.astra-sites-preview .wp-full-overlay-footer .devices button {
|
312 |
+
border: none;
|
313 |
+
}
|
314 |
+
.astra-sites-preview .wp-full-overlay-footer .devices button:focus,
|
315 |
+
.astra-sites-preview .wp-full-overlay-footer .devices button.active:hover {
|
316 |
+
border-bottom-color: transparent;
|
317 |
+
background-color: transparent;
|
318 |
}
|
inc/assets/js/admin-page.js
CHANGED
@@ -74,16 +74,92 @@ var AstraSitesAjaxQueue = (function() {
|
|
74 |
};
|
75 |
|
76 |
}());
|
|
|
77 |
(function($){
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
AstraSitesAdmin = {
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
init: function()
|
82 |
{
|
83 |
this._resetPagedCount();
|
84 |
this._bind();
|
85 |
},
|
86 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
/**
|
88 |
* Binds events for the Astra Sites.
|
89 |
*
|
@@ -105,6 +181,244 @@ var AstraSitesAjaxQueue = (function() {
|
|
105 |
$( document ).on('wp-plugin-installing' , AstraSitesAdmin._pluginInstalling);
|
106 |
$( document ).on('wp-plugin-install-error' , AstraSitesAdmin._installError);
|
107 |
$( document ).on('wp-plugin-install-success' , AstraSitesAdmin._installSuccess);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
},
|
109 |
|
110 |
/**
|
@@ -136,6 +450,59 @@ var AstraSitesAjaxQueue = (function() {
|
|
136 |
.attr( 'aria-pressed', true );
|
137 |
},
|
138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
/**
|
140 |
* Install Now
|
141 |
*/
|
@@ -164,8 +531,10 @@ var AstraSitesAjaxQueue = (function() {
|
|
164 |
} );
|
165 |
}
|
166 |
|
|
|
|
|
167 |
wp.updates.installPlugin( {
|
168 |
-
slug:
|
169 |
} );
|
170 |
},
|
171 |
|
@@ -176,6 +545,8 @@ var AstraSitesAjaxQueue = (function() {
|
|
176 |
|
177 |
event.preventDefault();
|
178 |
|
|
|
|
|
179 |
var $message = jQuery( '.plugin-card-' + response.slug ).find( '.button' );
|
180 |
var $siteOptions = jQuery( '.wp-full-overlay-header').find('.astra-site-options').val();
|
181 |
var $enabledExtensions = jQuery( '.wp-full-overlay-header').find('.astra-enabled-extensions').val();
|
@@ -194,7 +565,7 @@ var AstraSitesAjaxQueue = (function() {
|
|
194 |
// WordPress adds "Activate" button after waiting for 1000ms. So we will run our activation after that.
|
195 |
setTimeout( function() {
|
196 |
|
197 |
-
|
198 |
url: astraSitesAdmin.ajaxurl,
|
199 |
type: 'POST',
|
200 |
data: {
|
@@ -240,6 +611,8 @@ var AstraSitesAjaxQueue = (function() {
|
|
240 |
|
241 |
var $card = jQuery( '.plugin-card-' + response.slug );
|
242 |
|
|
|
|
|
243 |
$card
|
244 |
.addClass( 'button-primary' )
|
245 |
.html( wp.updates.l10n.installNow );
|
@@ -254,6 +627,8 @@ var AstraSitesAjaxQueue = (function() {
|
|
254 |
var $card = jQuery( '.plugin-card-' + args.slug );
|
255 |
var $button = $card.find( '.button' );
|
256 |
|
|
|
|
|
257 |
$card.addClass('updating-message');
|
258 |
$button.addClass('already-started');
|
259 |
|
@@ -274,13 +649,15 @@ var AstraSitesAjaxQueue = (function() {
|
|
274 |
return;
|
275 |
}
|
276 |
|
|
|
|
|
277 |
$button.addClass('updating-message button-primary')
|
278 |
.html( astraSitesAdmin.strings.btnActivating );
|
279 |
|
280 |
var $siteOptions = jQuery( '.wp-full-overlay-header').find('.astra-site-options').val();
|
281 |
var $enabledExtensions = jQuery( '.wp-full-overlay-header').find('.astra-enabled-extensions').val();
|
282 |
|
283 |
-
|
284 |
url: astraSitesAdmin.ajaxurl,
|
285 |
type: 'POST',
|
286 |
data: {
|
@@ -294,6 +671,8 @@ var AstraSitesAjaxQueue = (function() {
|
|
294 |
|
295 |
if( result.success ) {
|
296 |
|
|
|
|
|
297 |
var pluginsList = astraSitesAdmin.requiredPlugins.inactive;
|
298 |
|
299 |
// Reset not installed plugins list.
|
@@ -368,10 +747,13 @@ var AstraSitesAjaxQueue = (function() {
|
|
368 |
*/
|
369 |
_activateAllPlugins: function( activate_plugins ) {
|
370 |
|
371 |
-
//
|
|
|
372 |
AstraSitesAjaxQueue.run();
|
373 |
|
374 |
-
|
|
|
|
|
375 |
|
376 |
var $card = jQuery( '.plugin-card-' + single_plugin.slug ),
|
377 |
$button = $card.find('.button'),
|
@@ -384,15 +766,17 @@ var AstraSitesAjaxQueue = (function() {
|
|
384 |
url: astraSitesAdmin.ajaxurl,
|
385 |
type: 'POST',
|
386 |
data: {
|
387 |
-
'action'
|
388 |
-
'init'
|
389 |
-
'options'
|
390 |
'enabledExtensions' : $enabledExtensions,
|
391 |
},
|
392 |
success: function( result ){
|
393 |
|
394 |
if( result.success ) {
|
395 |
|
|
|
|
|
396 |
var $card = jQuery( '.plugin-card-' + single_plugin.slug );
|
397 |
var $button = $card.find( '.button' );
|
398 |
if( ! $button.hasClass('already-started') ) {
|
@@ -409,6 +793,8 @@ var AstraSitesAjaxQueue = (function() {
|
|
409 |
|
410 |
// Enable Demo Import Button
|
411 |
AstraSitesAdmin._enable_demo_import_button();
|
|
|
|
|
412 |
}
|
413 |
}
|
414 |
});
|
@@ -419,8 +805,10 @@ var AstraSitesAjaxQueue = (function() {
|
|
419 |
* Install All Plugins.
|
420 |
*/
|
421 |
_installAllPlugins: function( not_installed ) {
|
|
|
|
|
422 |
|
423 |
-
|
424 |
|
425 |
var $card = jQuery( '.plugin-card-' + single_plugin.slug ),
|
426 |
$button = $card.find('.button');
|
@@ -476,6 +864,9 @@ var AstraSitesAjaxQueue = (function() {
|
|
476 |
return;
|
477 |
}
|
478 |
|
|
|
|
|
|
|
479 |
$('.astra-demo-import').attr('data-import', 'disabled')
|
480 |
.addClass('updating-message installing')
|
481 |
.text( astraSitesAdmin.strings.importingDemo );
|
@@ -485,57 +876,68 @@ var AstraSitesAjaxQueue = (function() {
|
|
485 |
var $theme = $this.closest('.astra-sites-preview').find('.wp-full-overlay-header');
|
486 |
|
487 |
var apiURL = $theme.data('demo-api') || '';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
488 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
489 |
$.ajax({
|
490 |
-
url: astraSitesAdmin.ajaxurl,
|
491 |
-
type: 'POST',
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
api_url: apiURL
|
496 |
},
|
497 |
})
|
498 |
-
.
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
|
|
|
|
|
|
|
|
|
|
510 |
|
511 |
} else {
|
512 |
|
513 |
-
|
514 |
-
|
515 |
-
output += ' <button type="button" class="notice-dismiss">';
|
516 |
-
output += ' <span class="screen-reader-text">'+commonL10n.dismiss+'</span>';
|
517 |
-
output += ' </button>';
|
518 |
-
output += '</div>';
|
519 |
|
520 |
-
|
|
|
|
|
|
|
521 |
|
522 |
-
|
523 |
-
// Which reinitialize the dismiss error message events.
|
524 |
-
jQuery(document).trigger('wp-updates-notice-added');
|
525 |
}
|
526 |
-
|
527 |
-
})
|
528 |
-
.fail(function ( demos ) {
|
529 |
-
jQuery('.astra-demo-import').removeClass('updating-message installing')
|
530 |
-
.removeAttr('data-import')
|
531 |
-
.addClass('view-site')
|
532 |
-
.removeClass('astra-demo-import')
|
533 |
-
.attr('target', '_blank')
|
534 |
-
.attr('href', astraSitesAdmin.strings.importFailedURL );
|
535 |
-
|
536 |
-
jQuery('.wp-full-overlay-header .view-site').text( astraSitesAdmin.strings.importFailedBtnSmall ).append('<i class="dashicons dashicons-external"></i>');
|
537 |
-
jQuery('.footer-import-button-wrap .view-site').text( astraSitesAdmin.strings.importFailedBtnLarge ).append('<i class="dashicons dashicons-external"></i>');
|
538 |
});
|
|
|
539 |
},
|
540 |
|
541 |
/**
|
@@ -643,6 +1045,8 @@ var AstraSitesAjaxQueue = (function() {
|
|
643 |
astraSiteOptions = anchor.find('.astra-site-options').val() || '';
|
644 |
astraEnabledExtensions = anchor.find('.astra-enabled-extensions').val() || '';
|
645 |
|
|
|
|
|
646 |
var template = wp.template('astra-site-preview');
|
647 |
|
648 |
templateData = [{
|
@@ -670,7 +1074,7 @@ var AstraSitesAjaxQueue = (function() {
|
|
670 |
var descHeight = parseInt( desc.outerHeight() );
|
671 |
var descBtn = jQuery('.theme-details-read-more');
|
672 |
|
673 |
-
if(
|
674 |
|
675 |
if( descHeight >= 55 ) {
|
676 |
|
@@ -703,13 +1107,28 @@ var AstraSitesAjaxQueue = (function() {
|
|
703 |
// or
|
704 |
var $pluginsFilter = jQuery( '#plugin-filter' ),
|
705 |
data = {
|
706 |
-
|
|
|
707 |
required_plugins : requiredPlugins
|
708 |
};
|
709 |
|
710 |
jQuery('.required-plugins').addClass('loading').html('<span class="spinner is-active"></span>');
|
711 |
|
712 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
713 |
|
714 |
// Remove loader.
|
715 |
jQuery('.required-plugins').removeClass('loading').html('');
|
@@ -725,12 +1144,12 @@ var AstraSitesAjaxQueue = (function() {
|
|
725 |
*
|
726 |
* List of not installed required plugins.
|
727 |
*/
|
728 |
-
if ( typeof response.notinstalled !== 'undefined' ) {
|
729 |
|
730 |
// Add not have installed plugins count.
|
731 |
-
remaining_plugins += parseInt( response.notinstalled.length );
|
732 |
|
733 |
-
jQuery( response.notinstalled ).each(function( index, plugin ) {
|
734 |
|
735 |
var output = '<div class="plugin-card ';
|
736 |
output += ' plugin-card-'+plugin.slug+'"';
|
@@ -756,12 +1175,12 @@ var AstraSitesAjaxQueue = (function() {
|
|
756 |
*
|
757 |
* List of not inactive required plugins.
|
758 |
*/
|
759 |
-
if ( typeof response.inactive !== 'undefined' ) {
|
760 |
|
761 |
// Add inactive plugins count.
|
762 |
-
remaining_plugins += parseInt( response.inactive.length );
|
763 |
|
764 |
-
jQuery( response.inactive ).each(function( index, plugin ) {
|
765 |
|
766 |
var output = '<div class="plugin-card ';
|
767 |
output += ' plugin-card-'+plugin.slug+'"';
|
@@ -787,9 +1206,9 @@ var AstraSitesAjaxQueue = (function() {
|
|
787 |
*
|
788 |
* List of not active required plugins.
|
789 |
*/
|
790 |
-
if ( typeof response.active !== 'undefined' ) {
|
791 |
|
792 |
-
jQuery( response.active ).each(function( index, plugin ) {
|
793 |
|
794 |
var output = '<div class="plugin-card ';
|
795 |
output += ' plugin-card-'+plugin.slug+'"';
|
@@ -813,10 +1232,10 @@ var AstraSitesAjaxQueue = (function() {
|
|
813 |
* Enable Demo Import Button
|
814 |
* @type number
|
815 |
*/
|
816 |
-
astraSitesAdmin.requiredPlugins = response;
|
817 |
AstraSitesAdmin._enable_demo_import_button();
|
818 |
|
819 |
-
}
|
820 |
|
821 |
} else {
|
822 |
|
@@ -831,7 +1250,9 @@ var AstraSitesAjaxQueue = (function() {
|
|
831 |
/**
|
832 |
* Enable Demo Import Button.
|
833 |
*/
|
834 |
-
_enable_demo_import_button: function( type
|
|
|
|
|
835 |
|
836 |
switch( type ) {
|
837 |
|
74 |
};
|
75 |
|
76 |
}());
|
77 |
+
|
78 |
(function($){
|
79 |
|
80 |
+
var AstraSSEImport = {
|
81 |
+
complete: {
|
82 |
+
posts: 0,
|
83 |
+
media: 0,
|
84 |
+
users: 0,
|
85 |
+
comments: 0,
|
86 |
+
terms: 0,
|
87 |
+
},
|
88 |
+
|
89 |
+
updateDelta: function (type, delta) {
|
90 |
+
this.complete[ type ] += delta;
|
91 |
+
|
92 |
+
var self = this;
|
93 |
+
requestAnimationFrame(function () {
|
94 |
+
self.render();
|
95 |
+
});
|
96 |
+
},
|
97 |
+
updateProgress: function ( type, complete, total ) {
|
98 |
+
var text = complete + '/' + total;
|
99 |
+
|
100 |
+
if( 'undefined' !== type && 'undefined' !== text ) {
|
101 |
+
total = parseInt( total, 10 );
|
102 |
+
if ( 0 === total || isNaN( total ) ) {
|
103 |
+
total = 1;
|
104 |
+
}
|
105 |
+
var percent = parseInt( complete, 10 ) / total;
|
106 |
+
var progress = Math.round( percent * 100 ) + '%';
|
107 |
+
var progress_bar = percent * 100;
|
108 |
+
}
|
109 |
+
},
|
110 |
+
render: function () {
|
111 |
+
var types = Object.keys( this.complete );
|
112 |
+
var complete = 0;
|
113 |
+
var total = 0;
|
114 |
+
|
115 |
+
for (var i = types.length - 1; i >= 0; i--) {
|
116 |
+
var type = types[i];
|
117 |
+
this.updateProgress( type, this.complete[ type ], this.data.count[ type ] );
|
118 |
+
|
119 |
+
complete += this.complete[ type ];
|
120 |
+
total += this.data.count[ type ];
|
121 |
+
}
|
122 |
+
|
123 |
+
this.updateProgress( 'total', complete, total );
|
124 |
+
}
|
125 |
+
};
|
126 |
+
|
127 |
AstraSitesAdmin = {
|
128 |
|
129 |
+
log_file : '',
|
130 |
+
customizer_data : '',
|
131 |
+
wxr_url : '',
|
132 |
+
options_data : '',
|
133 |
+
widgets_data : '',
|
134 |
+
|
135 |
init: function()
|
136 |
{
|
137 |
this._resetPagedCount();
|
138 |
this._bind();
|
139 |
},
|
140 |
|
141 |
+
/**
|
142 |
+
* Debugging.
|
143 |
+
*
|
144 |
+
* @param {mixed} data Mixed data.
|
145 |
+
*/
|
146 |
+
_log: function( data ) {
|
147 |
+
|
148 |
+
if( astraSitesAdmin.debug ) {
|
149 |
+
|
150 |
+
var date = new Date();
|
151 |
+
var time = date.toLocaleTimeString();
|
152 |
+
|
153 |
+
if (typeof data == 'object') {
|
154 |
+
console.log('%c ' + JSON.stringify( data ) + ' ' + time, 'background: #ededed; color: #444');
|
155 |
+
} else {
|
156 |
+
console.log('%c ' + data + ' ' + time, 'background: #ededed; color: #444');
|
157 |
+
}
|
158 |
+
|
159 |
+
|
160 |
+
}
|
161 |
+
},
|
162 |
+
|
163 |
/**
|
164 |
* Binds events for the Astra Sites.
|
165 |
*
|
181 |
$( document ).on('wp-plugin-installing' , AstraSitesAdmin._pluginInstalling);
|
182 |
$( document ).on('wp-plugin-install-error' , AstraSitesAdmin._installError);
|
183 |
$( document ).on('wp-plugin-install-success' , AstraSitesAdmin._installSuccess);
|
184 |
+
|
185 |
+
$( document ).on('astra-sites-import-set-site-data-done' , AstraSitesAdmin._importCustomizerSettings );
|
186 |
+
$( document ).on('astra-sites-import-customizer-settings-done' , AstraSitesAdmin._importPrepareXML );
|
187 |
+
$( document ).on('astra-sites-import-xml-done' , AstraSitesAdmin._importSiteOptions );
|
188 |
+
$( document ).on('astra-sites-import-options-done' , AstraSitesAdmin._importWidgets );
|
189 |
+
$( document ).on('astra-sites-import-widgets-done' , AstraSitesAdmin._importEnd );
|
190 |
+
},
|
191 |
+
|
192 |
+
/**
|
193 |
+
* 5. Import Complete.
|
194 |
+
*/
|
195 |
+
_importEnd: function( event ) {
|
196 |
+
|
197 |
+
$.ajax({
|
198 |
+
url : astraSitesAdmin.ajaxurl,
|
199 |
+
type : 'POST',
|
200 |
+
data : {
|
201 |
+
action : 'astra-sites-import-end',
|
202 |
+
},
|
203 |
+
beforeSend: function() {
|
204 |
+
$('.button-hero.astra-demo-import').text( astraSitesAdmin.log.importComplete );
|
205 |
+
}
|
206 |
+
})
|
207 |
+
.fail(function( jqXHR ){
|
208 |
+
AstraSitesAdmin._importFailMessage( jqXHR.status + ' ' + jqXHR.responseText );
|
209 |
+
AstraSitesAdmin._log( jqXHR.status + ' ' + jqXHR.responseText );
|
210 |
+
})
|
211 |
+
.done(function ( data ) {
|
212 |
+
|
213 |
+
// 5. Fail - Import Complete.
|
214 |
+
if( false === data.success ) {
|
215 |
+
AstraSitesAdmin._importFailMessage( data.data );
|
216 |
+
AstraSitesAdmin._log( data.data );
|
217 |
+
} else {
|
218 |
+
|
219 |
+
// 5. Pass - Import Complete.
|
220 |
+
AstraSitesAdmin._importSuccessMessage();
|
221 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.success + ' ' + astraSitesAdmin.siteURL );
|
222 |
+
}
|
223 |
+
});
|
224 |
+
},
|
225 |
+
|
226 |
+
/**
|
227 |
+
* 4. Import Widgets.
|
228 |
+
*/
|
229 |
+
_importWidgets: function( event ) {
|
230 |
+
|
231 |
+
$.ajax({
|
232 |
+
url : astraSitesAdmin.ajaxurl,
|
233 |
+
type : 'POST',
|
234 |
+
data : {
|
235 |
+
action : 'astra-sites-import-widgets',
|
236 |
+
widgets_data : AstraSitesAdmin.widgets_data,
|
237 |
+
},
|
238 |
+
beforeSend: function() {
|
239 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importWidgets );
|
240 |
+
$('.button-hero.astra-demo-import').text( astraSitesAdmin.log.importingWidgets );
|
241 |
+
},
|
242 |
+
})
|
243 |
+
.fail(function( jqXHR ){
|
244 |
+
AstraSitesAdmin._importFailMessage( jqXHR.status + ' ' + jqXHR.responseText );
|
245 |
+
AstraSitesAdmin._log( jqXHR.status + ' ' + jqXHR.responseText );
|
246 |
+
})
|
247 |
+
.done(function ( widgets_data ) {
|
248 |
+
|
249 |
+
// 4. Fail - Import Widgets.
|
250 |
+
if( false === widgets_data.success ) {
|
251 |
+
AstraSitesAdmin._importFailMessage( widgets_data.data );
|
252 |
+
AstraSitesAdmin._log( widgets_data.data );
|
253 |
+
|
254 |
+
} else {
|
255 |
+
|
256 |
+
// 4. Pass - Import Widgets.
|
257 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importWidgetsSuccess );
|
258 |
+
$(document).trigger( 'astra-sites-import-widgets-done' );
|
259 |
+
}
|
260 |
+
});
|
261 |
+
},
|
262 |
+
|
263 |
+
/**
|
264 |
+
* 3. Import Site Options.
|
265 |
+
*/
|
266 |
+
_importSiteOptions: function( event ) {
|
267 |
+
|
268 |
+
$.ajax({
|
269 |
+
url : astraSitesAdmin.ajaxurl,
|
270 |
+
type : 'POST',
|
271 |
+
data : {
|
272 |
+
action : 'astra-sites-import-options',
|
273 |
+
options_data : AstraSitesAdmin.options_data,
|
274 |
+
},
|
275 |
+
beforeSend: function() {
|
276 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importOptions );
|
277 |
+
$('.button-hero.astra-demo-import').text( astraSitesAdmin.log.importingOptions );
|
278 |
+
},
|
279 |
+
})
|
280 |
+
.fail(function( jqXHR ){
|
281 |
+
AstraSitesAdmin._importFailMessage( jqXHR.status + ' ' + jqXHR.responseText );
|
282 |
+
AstraSitesAdmin._log( jqXHR.status + ' ' + jqXHR.responseText );
|
283 |
+
})
|
284 |
+
.done(function ( options_data ) {
|
285 |
+
|
286 |
+
// 3. Fail - Import Site Options.
|
287 |
+
if( false === options_data.success ) {
|
288 |
+
AstraSitesAdmin._log( options_data );
|
289 |
+
AstraSitesAdmin._importFailMessage( options_data.data );
|
290 |
+
AstraSitesAdmin._log( options_data.data );
|
291 |
+
|
292 |
+
} else {
|
293 |
+
|
294 |
+
// 3. Pass - Import Site Options.
|
295 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importOptionsSuccess );
|
296 |
+
$(document).trigger( 'astra-sites-import-options-done' );
|
297 |
+
}
|
298 |
+
});
|
299 |
+
},
|
300 |
+
|
301 |
+
/**
|
302 |
+
* 2. Prepare XML Data.
|
303 |
+
*/
|
304 |
+
_importPrepareXML: function( event ) {
|
305 |
+
|
306 |
+
$.ajax({
|
307 |
+
url : astraSitesAdmin.ajaxurl,
|
308 |
+
type : 'POST',
|
309 |
+
data : {
|
310 |
+
action : 'astra-sites-import-prepare-xml',
|
311 |
+
wxr_url : AstraSitesAdmin.wxr_url,
|
312 |
+
},
|
313 |
+
beforeSend: function() {
|
314 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importXMLPrepare );
|
315 |
+
$('.button-hero.astra-demo-import').text( astraSitesAdmin.log.importXMLPreparing );
|
316 |
+
},
|
317 |
+
})
|
318 |
+
.fail(function( jqXHR ){
|
319 |
+
AstraSitesAdmin._importFailMessage( jqXHR.status + ' ' + jqXHR.responseText );
|
320 |
+
AstraSitesAdmin._log( jqXHR.status + ' ' + jqXHR.responseText );
|
321 |
+
})
|
322 |
+
.done(function ( xml_data ) {
|
323 |
+
|
324 |
+
// 2. Fail - Prepare XML Data.
|
325 |
+
if( false === xml_data.success ) {
|
326 |
+
AstraSitesAdmin._log( xml_data );
|
327 |
+
AstraSitesAdmin._importFailMessage( xml_data.data );
|
328 |
+
AstraSitesAdmin._log( xml_data.data );
|
329 |
+
|
330 |
+
} else {
|
331 |
+
|
332 |
+
// 2. Pass - Prepare XML Data.
|
333 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importXMLPrepareSuccess );
|
334 |
+
|
335 |
+
// Import XML though Event Source.
|
336 |
+
AstraSSEImport.data = xml_data.data;
|
337 |
+
AstraSSEImport.render();
|
338 |
+
|
339 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importXML );
|
340 |
+
$('.button-hero.astra-demo-import').text( astraSitesAdmin.log.importingXML );
|
341 |
+
|
342 |
+
var evtSource = new EventSource( AstraSSEImport.data.url );
|
343 |
+
evtSource.onmessage = function ( message ) {
|
344 |
+
var data = JSON.parse( message.data );
|
345 |
+
switch ( data.action ) {
|
346 |
+
case 'updateDelta':
|
347 |
+
AstraSSEImport.updateDelta( data.type, data.delta );
|
348 |
+
break;
|
349 |
+
|
350 |
+
case 'complete':
|
351 |
+
evtSource.close();
|
352 |
+
|
353 |
+
// 2. Pass - Import XML though "Source Event".
|
354 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importXMLSuccess );
|
355 |
+
AstraSitesAdmin._log( '----- SSE - XML import Complete -----' );
|
356 |
+
|
357 |
+
$(document).trigger( 'astra-sites-import-xml-done' );
|
358 |
+
|
359 |
+
break;
|
360 |
+
}
|
361 |
+
};
|
362 |
+
evtSource.addEventListener( 'log', function ( message ) {
|
363 |
+
var data = JSON.parse( message.data );
|
364 |
+
AstraSitesAdmin._log( data.level + ' ' + data.message );
|
365 |
+
});
|
366 |
+
}
|
367 |
+
});
|
368 |
+
},
|
369 |
+
|
370 |
+
/**
|
371 |
+
* 1. Import Customizer Options.
|
372 |
+
*/
|
373 |
+
_importCustomizerSettings: function( event ) {
|
374 |
+
|
375 |
+
$.ajax({
|
376 |
+
url : astraSitesAdmin.ajaxurl,
|
377 |
+
type : 'POST',
|
378 |
+
data : {
|
379 |
+
action : 'astra-sites-import-customizer-settings',
|
380 |
+
customizer_data : AstraSitesAdmin.customizer_data,
|
381 |
+
},
|
382 |
+
beforeSend: function() {
|
383 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importCustomizer );
|
384 |
+
$('.button-hero.astra-demo-import').text( astraSitesAdmin.log.importingCustomizer );
|
385 |
+
},
|
386 |
+
})
|
387 |
+
.fail(function( jqXHR ){
|
388 |
+
AstraSitesAdmin._importFailMessage( jqXHR.status + ' ' + jqXHR.responseText );
|
389 |
+
AstraSitesAdmin._log( jqXHR.status + ' ' + jqXHR.responseText );
|
390 |
+
})
|
391 |
+
.done(function ( customizer_data ) {
|
392 |
+
|
393 |
+
// 1. Fail - Import Customizer Options.
|
394 |
+
if( false === customizer_data.success ) {
|
395 |
+
AstraSitesAdmin._importFailMessage( customizer_data.data );
|
396 |
+
AstraSitesAdmin._log( customizer_data.data );
|
397 |
+
} else {
|
398 |
+
|
399 |
+
// 1. Pass - Import Customizer Options.
|
400 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importCustomizerSuccess );
|
401 |
+
|
402 |
+
$(document).trigger( 'astra-sites-import-customizer-settings-done' );
|
403 |
+
}
|
404 |
+
});
|
405 |
+
},
|
406 |
+
|
407 |
+
/**
|
408 |
+
* Import Success Button.
|
409 |
+
*
|
410 |
+
* @param {string} data Error message.
|
411 |
+
*/
|
412 |
+
_importSuccessMessage: function() {
|
413 |
+
|
414 |
+
$('.astra-demo-import').removeClass('updating-message installing')
|
415 |
+
.removeAttr('data-import')
|
416 |
+
.addClass('view-site')
|
417 |
+
.removeClass('astra-demo-import')
|
418 |
+
.text( astraSitesAdmin.strings.viewSite )
|
419 |
+
.attr('target', '_blank')
|
420 |
+
.append('<i class="dashicons dashicons-external"></i>')
|
421 |
+
.attr('href', astraSitesAdmin.siteURL );
|
422 |
},
|
423 |
|
424 |
/**
|
450 |
.attr( 'aria-pressed', true );
|
451 |
},
|
452 |
|
453 |
+
/**
|
454 |
+
* Import Error Button.
|
455 |
+
*
|
456 |
+
* @param {string} data Error message.
|
457 |
+
*/
|
458 |
+
_importFailMessage: function( message, from ) {
|
459 |
+
|
460 |
+
$('.astra-demo-import')
|
461 |
+
.addClass('go-pro button-primary')
|
462 |
+
.removeClass('updating-message installing')
|
463 |
+
.removeAttr('data-import')
|
464 |
+
.attr('target', '_blank')
|
465 |
+
.append('<i class="dashicons dashicons-external"></i>')
|
466 |
+
.removeClass('astra-demo-import');
|
467 |
+
|
468 |
+
// Add the doc link due to import log file not generated.
|
469 |
+
if( 'undefined' === from ) {
|
470 |
+
|
471 |
+
$('.wp-full-overlay-header .go-pro').text( astraSitesAdmin.strings.importFailedBtnSmall );
|
472 |
+
$('.wp-full-overlay-footer .go-pro').text( astraSitesAdmin.strings.importFailedBtnLarge );
|
473 |
+
$('.go-pro').attr('href', astraSitesAdmin.log.serverConfiguration );
|
474 |
+
|
475 |
+
// Add the import log file link.
|
476 |
+
} else {
|
477 |
+
|
478 |
+
$('.wp-full-overlay-header .go-pro').text( astraSitesAdmin.strings.importFailBtn );
|
479 |
+
$('.wp-full-overlay-footer .go-pro').text( astraSitesAdmin.strings.importFailBtnLarge )
|
480 |
+
|
481 |
+
// Add the import log file link.
|
482 |
+
if( 'undefined' !== AstraSitesAdmin.log_file_url ) {
|
483 |
+
$('.go-pro').attr('href', AstraSitesAdmin.log_file_url );
|
484 |
+
} else {
|
485 |
+
$('.go-pro').attr('href', astraSitesAdmin.log.serverConfiguration );
|
486 |
+
}
|
487 |
+
}
|
488 |
+
|
489 |
+
var output = '<div class="astra-api-error notice notice-error notice-alt is-dismissible">';
|
490 |
+
output += ' <p>'+message+'</p>';
|
491 |
+
output += ' <button type="button" class="notice-dismiss">';
|
492 |
+
output += ' <span class="screen-reader-text">'+commonL10n.dismiss+'</span>';
|
493 |
+
output += ' </button>';
|
494 |
+
output += '</div>';
|
495 |
+
|
496 |
+
// Fail Notice.
|
497 |
+
$('.install-theme-info').append( output );
|
498 |
+
|
499 |
+
|
500 |
+
// !important to add trigger.
|
501 |
+
// Which reinitialize the dismiss error message events.
|
502 |
+
$(document).trigger('wp-updates-notice-added');
|
503 |
+
},
|
504 |
+
|
505 |
+
|
506 |
/**
|
507 |
* Install Now
|
508 |
*/
|
531 |
} );
|
532 |
}
|
533 |
|
534 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.installingPlugin + ' ' + $button.data( 'slug' ) );
|
535 |
+
|
536 |
wp.updates.installPlugin( {
|
537 |
+
slug: $button.data( 'slug' )
|
538 |
} );
|
539 |
},
|
540 |
|
545 |
|
546 |
event.preventDefault();
|
547 |
|
548 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.installed + ' ' + response.slug );
|
549 |
+
|
550 |
var $message = jQuery( '.plugin-card-' + response.slug ).find( '.button' );
|
551 |
var $siteOptions = jQuery( '.wp-full-overlay-header').find('.astra-site-options').val();
|
552 |
var $enabledExtensions = jQuery( '.wp-full-overlay-header').find('.astra-enabled-extensions').val();
|
565 |
// WordPress adds "Activate" button after waiting for 1000ms. So we will run our activation after that.
|
566 |
setTimeout( function() {
|
567 |
|
568 |
+
$.ajax({
|
569 |
url: astraSitesAdmin.ajaxurl,
|
570 |
type: 'POST',
|
571 |
data: {
|
611 |
|
612 |
var $card = jQuery( '.plugin-card-' + response.slug );
|
613 |
|
614 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.installError + ' ' + response.slug );
|
615 |
+
|
616 |
$card
|
617 |
.addClass( 'button-primary' )
|
618 |
.html( wp.updates.l10n.installNow );
|
627 |
var $card = jQuery( '.plugin-card-' + args.slug );
|
628 |
var $button = $card.find( '.button' );
|
629 |
|
630 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.installingPlugin + ' ' + args.slug );
|
631 |
+
|
632 |
$card.addClass('updating-message');
|
633 |
$button.addClass('already-started');
|
634 |
|
649 |
return;
|
650 |
}
|
651 |
|
652 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.activating + ' ' + $slug );
|
653 |
+
|
654 |
$button.addClass('updating-message button-primary')
|
655 |
.html( astraSitesAdmin.strings.btnActivating );
|
656 |
|
657 |
var $siteOptions = jQuery( '.wp-full-overlay-header').find('.astra-site-options').val();
|
658 |
var $enabledExtensions = jQuery( '.wp-full-overlay-header').find('.astra-enabled-extensions').val();
|
659 |
|
660 |
+
$.ajax({
|
661 |
url: astraSitesAdmin.ajaxurl,
|
662 |
type: 'POST',
|
663 |
data: {
|
671 |
|
672 |
if( result.success ) {
|
673 |
|
674 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.activated + ' ' + $slug );
|
675 |
+
|
676 |
var pluginsList = astraSitesAdmin.requiredPlugins.inactive;
|
677 |
|
678 |
// Reset not installed plugins list.
|
747 |
*/
|
748 |
_activateAllPlugins: function( activate_plugins ) {
|
749 |
|
750 |
+
// Activate ALl Plugins.
|
751 |
+
AstraSitesAjaxQueue.stop();
|
752 |
AstraSitesAjaxQueue.run();
|
753 |
|
754 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.bulkActivation );
|
755 |
+
|
756 |
+
$.each( activate_plugins, function(index, single_plugin) {
|
757 |
|
758 |
var $card = jQuery( '.plugin-card-' + single_plugin.slug ),
|
759 |
$button = $card.find('.button'),
|
766 |
url: astraSitesAdmin.ajaxurl,
|
767 |
type: 'POST',
|
768 |
data: {
|
769 |
+
'action' : 'astra-required-plugin-activate',
|
770 |
+
'init' : single_plugin.init,
|
771 |
+
'options' : $siteOptions,
|
772 |
'enabledExtensions' : $enabledExtensions,
|
773 |
},
|
774 |
success: function( result ){
|
775 |
|
776 |
if( result.success ) {
|
777 |
|
778 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.activate + ' ' + single_plugin.slug );
|
779 |
+
|
780 |
var $card = jQuery( '.plugin-card-' + single_plugin.slug );
|
781 |
var $button = $card.find( '.button' );
|
782 |
if( ! $button.hasClass('already-started') ) {
|
793 |
|
794 |
// Enable Demo Import Button
|
795 |
AstraSitesAdmin._enable_demo_import_button();
|
796 |
+
} else {
|
797 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.activationError + ' - ' + single_plugin.slug );
|
798 |
}
|
799 |
}
|
800 |
});
|
805 |
* Install All Plugins.
|
806 |
*/
|
807 |
_installAllPlugins: function( not_installed ) {
|
808 |
+
|
809 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.bulkInstall );
|
810 |
|
811 |
+
$.each( not_installed, function(index, single_plugin) {
|
812 |
|
813 |
var $card = jQuery( '.plugin-card-' + single_plugin.slug ),
|
814 |
$button = $card.find('.button');
|
864 |
return;
|
865 |
}
|
866 |
|
867 |
+
// Remove all notices before import start.
|
868 |
+
$('.install-theme-info > .notice').remove();
|
869 |
+
|
870 |
$('.astra-demo-import').attr('data-import', 'disabled')
|
871 |
.addClass('updating-message installing')
|
872 |
.text( astraSitesAdmin.strings.importingDemo );
|
876 |
var $theme = $this.closest('.astra-sites-preview').find('.wp-full-overlay-header');
|
877 |
|
878 |
var apiURL = $theme.data('demo-api') || '';
|
879 |
+
|
880 |
+
// Site Import by API URL.
|
881 |
+
if( apiURL ) {
|
882 |
+
AstraSitesAdmin._importSite( apiURL );
|
883 |
+
}
|
884 |
+
|
885 |
+
},
|
886 |
|
887 |
+
/**
|
888 |
+
* Start Import Process by API URL.
|
889 |
+
*
|
890 |
+
* @param {string} apiURL Site API URL.
|
891 |
+
*/
|
892 |
+
_importSite: function( apiURL ) {
|
893 |
+
|
894 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.api + ' : ' + apiURL );
|
895 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.importing );
|
896 |
+
|
897 |
+
$('.button-hero.astra-demo-import').text( astraSitesAdmin.log.gettingData );
|
898 |
+
|
899 |
+
// 1. Request Site Import
|
900 |
$.ajax({
|
901 |
+
url : astraSitesAdmin.ajaxurl,
|
902 |
+
type : 'POST',
|
903 |
+
data : {
|
904 |
+
'action' : 'astra-sites-import-set-site-data',
|
905 |
+
'api_url' : apiURL,
|
|
|
906 |
},
|
907 |
})
|
908 |
+
.fail(function( jqXHR ){
|
909 |
+
AstraSitesAdmin._importFailMessage( jqXHR.status + ' ' + jqXHR.responseText );
|
910 |
+
AstraSitesAdmin._log( jqXHR.status + ' ' + jqXHR.responseText );
|
911 |
+
})
|
912 |
+
.done(function ( demo_data ) {
|
913 |
+
|
914 |
+
/**
|
915 |
+
* Set log file URL
|
916 |
+
*/
|
917 |
+
if( astraSitesAdmin.debug && ( undefined !== demo_data.data.log_file.abs_url || null !== demo_data.data.log_file.abs_url ) ) {
|
918 |
+
AstraSitesAdmin.log_file_url = decodeURIComponent( demo_data.data.log_file.url ) || '';
|
919 |
+
}
|
920 |
+
|
921 |
+
// 1. Fail - Request Site Import
|
922 |
+
if( false === demo_data.success ) {
|
923 |
+
|
924 |
+
AstraSitesAdmin._importFailMessage( demo_data.data );
|
925 |
|
926 |
} else {
|
927 |
|
928 |
+
// 1. Pass - Request Site Import
|
929 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.processingRequest );
|
|
|
|
|
|
|
|
|
930 |
|
931 |
+
AstraSitesAdmin.customizer_data = JSON.stringify( demo_data.data['astra-site-customizer-data'] ) || '';
|
932 |
+
AstraSitesAdmin.wxr_url = encodeURI( demo_data.data['astra-site-wxr-path'] ) || '';
|
933 |
+
AstraSitesAdmin.options_data = JSON.stringify( demo_data.data['astra-site-options-data'] ) || '';
|
934 |
+
AstraSitesAdmin.widgets_data = JSON.stringify( demo_data.data['astra-site-widgets-data'] ) || '';
|
935 |
|
936 |
+
$(document).trigger( 'astra-sites-import-set-site-data-done' );
|
|
|
|
|
937 |
}
|
938 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
939 |
});
|
940 |
+
|
941 |
},
|
942 |
|
943 |
/**
|
1045 |
astraSiteOptions = anchor.find('.astra-site-options').val() || '';
|
1046 |
astraEnabledExtensions = anchor.find('.astra-enabled-extensions').val() || '';
|
1047 |
|
1048 |
+
AstraSitesAdmin._log( astraSitesAdmin.log.preview + ' "' + demo_name + '" URL : ' + demoURL );
|
1049 |
+
|
1050 |
var template = wp.template('astra-site-preview');
|
1051 |
|
1052 |
templateData = [{
|
1074 |
var descHeight = parseInt( desc.outerHeight() );
|
1075 |
var descBtn = jQuery('.theme-details-read-more');
|
1076 |
|
1077 |
+
if( $.isArray( requiredPlugins ) ) {
|
1078 |
|
1079 |
if( descHeight >= 55 ) {
|
1080 |
|
1107 |
// or
|
1108 |
var $pluginsFilter = jQuery( '#plugin-filter' ),
|
1109 |
data = {
|
1110 |
+
action : 'astra-required-plugins',
|
1111 |
+
_ajax_nonce : astraSitesAdmin._ajax_nonce,
|
1112 |
required_plugins : requiredPlugins
|
1113 |
};
|
1114 |
|
1115 |
jQuery('.required-plugins').addClass('loading').html('<span class="spinner is-active"></span>');
|
1116 |
|
1117 |
+
// Required Required.
|
1118 |
+
$.ajax({
|
1119 |
+
url : astraSitesAdmin.ajaxurl,
|
1120 |
+
type : 'POST',
|
1121 |
+
data : data,
|
1122 |
+
})
|
1123 |
+
.fail(function( jqXHR ){
|
1124 |
+
|
1125 |
+
// Remove loader.
|
1126 |
+
jQuery('.required-plugins').removeClass('loading').html('');
|
1127 |
+
|
1128 |
+
AstraSitesAdmin._importFailMessage( jqXHR.status + ' ' + jqXHR.responseText, 'plugins' );
|
1129 |
+
AstraSitesAdmin._log( jqXHR.status + ' ' + jqXHR.responseText );
|
1130 |
+
})
|
1131 |
+
.done(function ( response ) {
|
1132 |
|
1133 |
// Remove loader.
|
1134 |
jQuery('.required-plugins').removeClass('loading').html('');
|
1144 |
*
|
1145 |
* List of not installed required plugins.
|
1146 |
*/
|
1147 |
+
if ( typeof response.data.notinstalled !== 'undefined' ) {
|
1148 |
|
1149 |
// Add not have installed plugins count.
|
1150 |
+
remaining_plugins += parseInt( response.data.notinstalled.length );
|
1151 |
|
1152 |
+
jQuery( response.data.notinstalled ).each(function( index, plugin ) {
|
1153 |
|
1154 |
var output = '<div class="plugin-card ';
|
1155 |
output += ' plugin-card-'+plugin.slug+'"';
|
1175 |
*
|
1176 |
* List of not inactive required plugins.
|
1177 |
*/
|
1178 |
+
if ( typeof response.data.inactive !== 'undefined' ) {
|
1179 |
|
1180 |
// Add inactive plugins count.
|
1181 |
+
remaining_plugins += parseInt( response.data.inactive.length );
|
1182 |
|
1183 |
+
jQuery( response.data.inactive ).each(function( index, plugin ) {
|
1184 |
|
1185 |
var output = '<div class="plugin-card ';
|
1186 |
output += ' plugin-card-'+plugin.slug+'"';
|
1206 |
*
|
1207 |
* List of not active required plugins.
|
1208 |
*/
|
1209 |
+
if ( typeof response.data.active !== 'undefined' ) {
|
1210 |
|
1211 |
+
jQuery( response.data.active ).each(function( index, plugin ) {
|
1212 |
|
1213 |
var output = '<div class="plugin-card ';
|
1214 |
output += ' plugin-card-'+plugin.slug+'"';
|
1232 |
* Enable Demo Import Button
|
1233 |
* @type number
|
1234 |
*/
|
1235 |
+
astraSitesAdmin.requiredPlugins = response.data;
|
1236 |
AstraSitesAdmin._enable_demo_import_button();
|
1237 |
|
1238 |
+
});
|
1239 |
|
1240 |
} else {
|
1241 |
|
1250 |
/**
|
1251 |
* Enable Demo Import Button.
|
1252 |
*/
|
1253 |
+
_enable_demo_import_button: function( type ) {
|
1254 |
+
|
1255 |
+
type = ( undefined !== type ) ? type : 'free';
|
1256 |
|
1257 |
switch( type ) {
|
1258 |
|
inc/assets/js/eventsource.js
ADDED
@@ -0,0 +1,673 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/** @license
|
2 |
+
* eventsource.js
|
3 |
+
* Available under MIT License (MIT)
|
4 |
+
* https://github.com/Yaffle/EventSource/
|
5 |
+
*/
|
6 |
+
|
7 |
+
/*jslint indent: 2, vars: true, plusplus: true */
|
8 |
+
/*global setTimeout, clearTimeout */
|
9 |
+
|
10 |
+
(function (global) {
|
11 |
+
"use strict";
|
12 |
+
|
13 |
+
var setTimeout = global.setTimeout;
|
14 |
+
var clearTimeout = global.clearTimeout;
|
15 |
+
var XMLHttpRequest = global.XMLHttpRequest;
|
16 |
+
var XDomainRequest = global.XDomainRequest;
|
17 |
+
var NativeEventSource = global.EventSource;
|
18 |
+
var document = global.document;
|
19 |
+
|
20 |
+
if (Object.create == null) {
|
21 |
+
Object.create = function (C) {
|
22 |
+
function F(){}
|
23 |
+
F.prototype = C;
|
24 |
+
return new F();
|
25 |
+
};
|
26 |
+
}
|
27 |
+
|
28 |
+
var k = function () {
|
29 |
+
};
|
30 |
+
|
31 |
+
function XHRWrapper(xhr) {
|
32 |
+
this.withCredentials = false;
|
33 |
+
this.responseType = "";
|
34 |
+
this.readyState = 0;
|
35 |
+
this.status = 0;
|
36 |
+
this.statusText = "";
|
37 |
+
this.responseText = "";
|
38 |
+
this.onprogress = k;
|
39 |
+
this.onreadystatechange = k;
|
40 |
+
this._contentType = "";
|
41 |
+
this._xhr = xhr;
|
42 |
+
this._sendTimeout = 0;
|
43 |
+
this._abort = k;
|
44 |
+
}
|
45 |
+
|
46 |
+
XHRWrapper.prototype.open = function (method, url) {
|
47 |
+
this._abort(true);
|
48 |
+
|
49 |
+
var that = this;
|
50 |
+
var xhr = this._xhr;
|
51 |
+
var state = 1;
|
52 |
+
var timeout = 0;
|
53 |
+
|
54 |
+
this._abort = function (silent) {
|
55 |
+
if (that._sendTimeout !== 0) {
|
56 |
+
clearTimeout(that._sendTimeout);
|
57 |
+
that._sendTimeout = 0;
|
58 |
+
}
|
59 |
+
if (state === 1 || state === 2 || state === 3) {
|
60 |
+
state = 4;
|
61 |
+
xhr.onload = k;
|
62 |
+
xhr.onerror = k;
|
63 |
+
xhr.onabort = k;
|
64 |
+
xhr.onprogress = k;
|
65 |
+
xhr.onreadystatechange = k;
|
66 |
+
// IE 8 - 9: XDomainRequest#abort() does not fire any event
|
67 |
+
// Opera < 10: XMLHttpRequest#abort() does not fire any event
|
68 |
+
xhr.abort();
|
69 |
+
if (timeout !== 0) {
|
70 |
+
clearTimeout(timeout);
|
71 |
+
timeout = 0;
|
72 |
+
}
|
73 |
+
if (!silent) {
|
74 |
+
that.readyState = 4;
|
75 |
+
that.onreadystatechange();
|
76 |
+
}
|
77 |
+
}
|
78 |
+
state = 0;
|
79 |
+
};
|
80 |
+
|
81 |
+
var onStart = function () {
|
82 |
+
if (state === 1) {
|
83 |
+
//state = 2;
|
84 |
+
var status = 0;
|
85 |
+
var statusText = "";
|
86 |
+
var contentType = undefined;
|
87 |
+
if (!("contentType" in xhr)) {
|
88 |
+
try {
|
89 |
+
status = xhr.status;
|
90 |
+
statusText = xhr.statusText;
|
91 |
+
contentType = xhr.getResponseHeader("Content-Type");
|
92 |
+
} catch (error) {
|
93 |
+
// IE < 10 throws exception for `xhr.status` when xhr.readyState === 2 || xhr.readyState === 3
|
94 |
+
// Opera < 11 throws exception for `xhr.status` when xhr.readyState === 2
|
95 |
+
// https://bugs.webkit.org/show_bug.cgi?id=29121
|
96 |
+
status = 0;
|
97 |
+
statusText = "";
|
98 |
+
contentType = undefined;
|
99 |
+
// Firefox < 14, Chrome ?, Safari ?
|
100 |
+
// https://bugs.webkit.org/show_bug.cgi?id=29658
|
101 |
+
// https://bugs.webkit.org/show_bug.cgi?id=77854
|
102 |
+
}
|
103 |
+
} else {
|
104 |
+
status = 200;
|
105 |
+
statusText = "OK";
|
106 |
+
contentType = xhr.contentType;
|
107 |
+
}
|
108 |
+
if (status !== 0) {
|
109 |
+
state = 2;
|
110 |
+
that.readyState = 2;
|
111 |
+
that.status = status;
|
112 |
+
that.statusText = statusText;
|
113 |
+
that._contentType = contentType;
|
114 |
+
that.onreadystatechange();
|
115 |
+
}
|
116 |
+
}
|
117 |
+
};
|
118 |
+
var onProgress = function () {
|
119 |
+
onStart();
|
120 |
+
if (state === 2 || state === 3) {
|
121 |
+
state = 3;
|
122 |
+
var responseText = "";
|
123 |
+
try {
|
124 |
+
responseText = xhr.responseText;
|
125 |
+
} catch (error) {
|
126 |
+
// IE 8 - 9 with XMLHttpRequest
|
127 |
+
}
|
128 |
+
that.readyState = 3;
|
129 |
+
that.responseText = responseText;
|
130 |
+
that.onprogress();
|
131 |
+
}
|
132 |
+
};
|
133 |
+
var onFinish = function () {
|
134 |
+
// Firefox 52 fires "readystatechange" (xhr.readyState === 4) without final "readystatechange" (xhr.readyState === 3)
|
135 |
+
// IE 8 fires "onload" without "onprogress"
|
136 |
+
onProgress();
|
137 |
+
if (state === 1 || state === 2 || state === 3) {
|
138 |
+
state = 4;
|
139 |
+
if (timeout !== 0) {
|
140 |
+
clearTimeout(timeout);
|
141 |
+
timeout = 0;
|
142 |
+
}
|
143 |
+
that.readyState = 4;
|
144 |
+
that.onreadystatechange();
|
145 |
+
}
|
146 |
+
};
|
147 |
+
var onReadyStateChange = function () {
|
148 |
+
if (xhr != undefined) { // Opera 12
|
149 |
+
if (xhr.readyState === 4) {
|
150 |
+
onFinish();
|
151 |
+
} else if (xhr.readyState === 3) {
|
152 |
+
onProgress();
|
153 |
+
} else if (xhr.readyState === 2) {
|
154 |
+
onStart();
|
155 |
+
}
|
156 |
+
}
|
157 |
+
};
|
158 |
+
var onTimeout = function () {
|
159 |
+
timeout = setTimeout(function () {
|
160 |
+
onTimeout();
|
161 |
+
}, 500);
|
162 |
+
if (xhr.readyState === 3) {
|
163 |
+
onProgress();
|
164 |
+
}
|
165 |
+
};
|
166 |
+
|
167 |
+
// XDomainRequest#abort removes onprogress, onerror, onload
|
168 |
+
xhr.onload = onFinish;
|
169 |
+
xhr.onerror = onFinish;
|
170 |
+
// improper fix to match Firefox behaviour, but it is better than just ignore abort
|
171 |
+
// see https://bugzilla.mozilla.org/show_bug.cgi?id=768596
|
172 |
+
// https://bugzilla.mozilla.org/show_bug.cgi?id=880200
|
173 |
+
// https://code.google.com/p/chromium/issues/detail?id=153570
|
174 |
+
// IE 8 fires "onload" without "onprogress
|
175 |
+
xhr.onabort = onFinish;
|
176 |
+
|
177 |
+
// https://bugzilla.mozilla.org/show_bug.cgi?id=736723
|
178 |
+
if (!("sendAsBinary" in XMLHttpRequest.prototype) && !("mozAnon" in XMLHttpRequest.prototype)) {
|
179 |
+
xhr.onprogress = onProgress;
|
180 |
+
}
|
181 |
+
|
182 |
+
// IE 8 - 9 (XMLHTTPRequest)
|
183 |
+
// Opera < 12
|
184 |
+
// Firefox < 3.5
|
185 |
+
// Firefox 3.5 - 3.6 - ? < 9.0
|
186 |
+
// onprogress is not fired sometimes or delayed
|
187 |
+
// see also #64
|
188 |
+
xhr.onreadystatechange = onReadyStateChange;
|
189 |
+
|
190 |
+
if ("contentType" in xhr) {
|
191 |
+
url += (url.indexOf("?", 0) === -1 ? "?" : "&") + "padding=true";
|
192 |
+
}
|
193 |
+
xhr.open(method, url, true);
|
194 |
+
|
195 |
+
if ("readyState" in xhr) {
|
196 |
+
// workaround for Opera 12 issue with "progress" events
|
197 |
+
// #91
|
198 |
+
timeout = setTimeout(function () {
|
199 |
+
onTimeout();
|
200 |
+
}, 0);
|
201 |
+
}
|
202 |
+
};
|
203 |
+
XHRWrapper.prototype.abort = function () {
|
204 |
+
this._abort(false);
|
205 |
+
};
|
206 |
+
XHRWrapper.prototype.getResponseHeader = function (name) {
|
207 |
+
return this._contentType;
|
208 |
+
};
|
209 |
+
XHRWrapper.prototype.setRequestHeader = function (name, value) {
|
210 |
+
var xhr = this._xhr;
|
211 |
+
if ("setRequestHeader" in xhr) {
|
212 |
+
xhr.setRequestHeader(name, value);
|
213 |
+
}
|
214 |
+
};
|
215 |
+
XHRWrapper.prototype.send = function () {
|
216 |
+
// loading indicator in Safari < ? (6), Chrome < 14, Firefox
|
217 |
+
if (!("ontimeout" in XMLHttpRequest.prototype) &&
|
218 |
+
document != undefined &&
|
219 |
+
document.readyState != undefined &&
|
220 |
+
document.readyState !== "complete") {
|
221 |
+
var that = this;
|
222 |
+
that._sendTimeout = setTimeout(function () {
|
223 |
+
that._sendTimeout = 0;
|
224 |
+
that.send();
|
225 |
+
}, 4);
|
226 |
+
return;
|
227 |
+
}
|
228 |
+
|
229 |
+
var xhr = this._xhr;
|
230 |
+
// withCredentials should be set after "open" for Safari and Chrome (< 19 ?)
|
231 |
+
xhr.withCredentials = this.withCredentials;
|
232 |
+
xhr.responseType = this.responseType;
|
233 |
+
try {
|
234 |
+
// xhr.send(); throws "Not enough arguments" in Firefox 3.0
|
235 |
+
xhr.send(undefined);
|
236 |
+
} catch (error1) {
|
237 |
+
// Safari 5.1.7, Opera 12
|
238 |
+
throw error1;
|
239 |
+
}
|
240 |
+
};
|
241 |
+
|
242 |
+
function XHRTransport(xhr) {
|
243 |
+
this._xhr = new XHRWrapper(xhr);
|
244 |
+
}
|
245 |
+
|
246 |
+
XHRTransport.prototype.open = function (onStartCallback, onProgressCallback, onFinishCallback, url, withCredentials, headers) {
|
247 |
+
var xhr = this._xhr;
|
248 |
+
xhr.open("GET", url);
|
249 |
+
var offset = 0;
|
250 |
+
xhr.onprogress = function () {
|
251 |
+
var responseText = xhr.responseText;
|
252 |
+
var chunk = responseText.slice(offset);
|
253 |
+
offset += chunk.length;
|
254 |
+
onProgressCallback(chunk);
|
255 |
+
};
|
256 |
+
xhr.onreadystatechange = function () {
|
257 |
+
if (xhr.readyState === 2) {
|
258 |
+
var status = xhr.status;
|
259 |
+
var statusText = xhr.statusText;
|
260 |
+
var contentType = xhr.getResponseHeader("Content-Type");
|
261 |
+
onStartCallback(status, statusText, contentType);
|
262 |
+
} else if (xhr.readyState === 4) {
|
263 |
+
onFinishCallback();
|
264 |
+
}
|
265 |
+
};
|
266 |
+
xhr.withCredentials = withCredentials;
|
267 |
+
xhr.responseType = "text";
|
268 |
+
for (var name in headers) {
|
269 |
+
if (Object.prototype.hasOwnProperty.call(headers, name)) {
|
270 |
+
xhr.setRequestHeader(name, headers[name]);
|
271 |
+
}
|
272 |
+
}
|
273 |
+
xhr.send();
|
274 |
+
};
|
275 |
+
|
276 |
+
XHRTransport.prototype.cancel = function () {
|
277 |
+
var xhr = this._xhr;
|
278 |
+
xhr.abort();
|
279 |
+
};
|
280 |
+
|
281 |
+
function EventTarget() {
|
282 |
+
this._listeners = Object.create(null);
|
283 |
+
}
|
284 |
+
|
285 |
+
function throwError(e) {
|
286 |
+
setTimeout(function () {
|
287 |
+
throw e;
|
288 |
+
}, 0);
|
289 |
+
}
|
290 |
+
|
291 |
+
EventTarget.prototype.dispatchEvent = function (event) {
|
292 |
+
event.target = this;
|
293 |
+
var typeListeners = this._listeners[event.type];
|
294 |
+
if (typeListeners != undefined) {
|
295 |
+
var length = typeListeners.length;
|
296 |
+
for (var i = 0; i < length; i += 1) {
|
297 |
+
var listener = typeListeners[i];
|
298 |
+
try {
|
299 |
+
if (typeof listener.handleEvent === "function") {
|
300 |
+
listener.handleEvent(event);
|
301 |
+
} else {
|
302 |
+
listener.call(this, event);
|
303 |
+
}
|
304 |
+
} catch (e) {
|
305 |
+
throwError(e);
|
306 |
+
}
|
307 |
+
}
|
308 |
+
}
|
309 |
+
};
|
310 |
+
EventTarget.prototype.addEventListener = function (type, listener) {
|
311 |
+
type = String(type);
|
312 |
+
var listeners = this._listeners;
|
313 |
+
var typeListeners = listeners[type];
|
314 |
+
if (typeListeners == undefined) {
|
315 |
+
typeListeners = [];
|
316 |
+
listeners[type] = typeListeners;
|
317 |
+
}
|
318 |
+
var found = false;
|
319 |
+
for (var i = 0; i < typeListeners.length; i += 1) {
|
320 |
+
if (typeListeners[i] === listener) {
|
321 |
+
found = true;
|
322 |
+
}
|
323 |
+
}
|
324 |
+
if (!found) {
|
325 |
+
typeListeners.push(listener);
|
326 |
+
}
|
327 |
+
};
|
328 |
+
EventTarget.prototype.removeEventListener = function (type, listener) {
|
329 |
+
type = String(type);
|
330 |
+
var listeners = this._listeners;
|
331 |
+
var typeListeners = listeners[type];
|
332 |
+
if (typeListeners != undefined) {
|
333 |
+
var filtered = [];
|
334 |
+
for (var i = 0; i < typeListeners.length; i += 1) {
|
335 |
+
if (typeListeners[i] !== listener) {
|
336 |
+
filtered.push(typeListeners[i]);
|
337 |
+
}
|
338 |
+
}
|
339 |
+
if (filtered.length === 0) {
|
340 |
+
delete listeners[type];
|
341 |
+
} else {
|
342 |
+
listeners[type] = filtered;
|
343 |
+
}
|
344 |
+
}
|
345 |
+
};
|
346 |
+
|
347 |
+
function Event(type) {
|
348 |
+
this.type = type;
|
349 |
+
this.target = undefined;
|
350 |
+
}
|
351 |
+
|
352 |
+
function MessageEvent(type, options) {
|
353 |
+
Event.call(this, type);
|
354 |
+
this.data = options.data;
|
355 |
+
this.lastEventId = options.lastEventId;
|
356 |
+
}
|
357 |
+
|
358 |
+
MessageEvent.prototype = Object.create(Event.prototype);
|
359 |
+
|
360 |
+
var WAITING = -1;
|
361 |
+
var CONNECTING = 0;
|
362 |
+
var OPEN = 1;
|
363 |
+
var CLOSED = 2;
|
364 |
+
|
365 |
+
var AFTER_CR = -1;
|
366 |
+
var FIELD_START = 0;
|
367 |
+
var FIELD = 1;
|
368 |
+
var VALUE_START = 2;
|
369 |
+
var VALUE = 3;
|
370 |
+
|
371 |
+
var contentTypeRegExp = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i;
|
372 |
+
|
373 |
+
var MINIMUM_DURATION = 1000;
|
374 |
+
var MAXIMUM_DURATION = 18000000;
|
375 |
+
|
376 |
+
var parseDuration = function (value, def) {
|
377 |
+
var n = parseInt(value, 10);
|
378 |
+
if (n !== n) {
|
379 |
+
n = def;
|
380 |
+
}
|
381 |
+
return clampDuration(n);
|
382 |
+
};
|
383 |
+
var clampDuration = function (n) {
|
384 |
+
return Math.min(Math.max(n, MINIMUM_DURATION), MAXIMUM_DURATION);
|
385 |
+
};
|
386 |
+
|
387 |
+
var fire = function (that, f, event) {
|
388 |
+
try {
|
389 |
+
if (typeof f === "function") {
|
390 |
+
f.call(that, event);
|
391 |
+
}
|
392 |
+
} catch (e) {
|
393 |
+
throwError(e);
|
394 |
+
}
|
395 |
+
};
|
396 |
+
|
397 |
+
function EventSourcePolyfill(url, options) {
|
398 |
+
EventTarget.call(this);
|
399 |
+
|
400 |
+
this.onopen = undefined;
|
401 |
+
this.onmessage = undefined;
|
402 |
+
this.onerror = undefined;
|
403 |
+
|
404 |
+
this.url = undefined;
|
405 |
+
this.readyState = undefined;
|
406 |
+
this.withCredentials = undefined;
|
407 |
+
|
408 |
+
this._close = undefined;
|
409 |
+
|
410 |
+
start(this, url, options);
|
411 |
+
}
|
412 |
+
|
413 |
+
function start(es, url, options) {
|
414 |
+
url = String(url);
|
415 |
+
var withCredentials = options != undefined && Boolean(options.withCredentials);
|
416 |
+
|
417 |
+
var initialRetry = clampDuration(1000);
|
418 |
+
var heartbeatTimeout = clampDuration(45000);
|
419 |
+
|
420 |
+
var lastEventId = "";
|
421 |
+
var retry = initialRetry;
|
422 |
+
var wasActivity = false;
|
423 |
+
var headers = options != undefined && options.headers != undefined ? JSON.parse(JSON.stringify(options.headers)) : undefined;
|
424 |
+
var CurrentTransport = options != undefined && options.Transport != undefined ? options.Transport : (XDomainRequest != undefined ? XDomainRequest : XMLHttpRequest);
|
425 |
+
var transport = new XHRTransport(new CurrentTransport());
|
426 |
+
var timeout = 0;
|
427 |
+
var currentState = WAITING;
|
428 |
+
var dataBuffer = "";
|
429 |
+
var lastEventIdBuffer = "";
|
430 |
+
var eventTypeBuffer = "";
|
431 |
+
|
432 |
+
var textBuffer = "";
|
433 |
+
var state = FIELD_START;
|
434 |
+
var fieldStart = 0;
|
435 |
+
var valueStart = 0;
|
436 |
+
|
437 |
+
var onStart = function (status, statusText, contentType) {
|
438 |
+
if (currentState === CONNECTING) {
|
439 |
+
if (status === 200 && contentType != undefined && contentTypeRegExp.test(contentType)) {
|
440 |
+
currentState = OPEN;
|
441 |
+
wasActivity = true;
|
442 |
+
retry = initialRetry;
|
443 |
+
es.readyState = OPEN;
|
444 |
+
var event = new Event("open");
|
445 |
+
es.dispatchEvent(event);
|
446 |
+
fire(es, es.onopen, event);
|
447 |
+
} else {
|
448 |
+
var message = "";
|
449 |
+
if (status !== 200) {
|
450 |
+
if (statusText) {
|
451 |
+
statusText = statusText.replace(/\s+/g, " ");
|
452 |
+
}
|
453 |
+
message = "EventSource's response has a status " + status + " " + statusText + " that is not 200. Aborting the connection.";
|
454 |
+
} else {
|
455 |
+
message = "EventSource's response has a Content-Type specifying an unsupported type: " + (contentType == undefined ? "-" : contentType.replace(/\s+/g, " ")) + ". Aborting the connection.";
|
456 |
+
}
|
457 |
+
throwError(new Error(message));
|
458 |
+
close();
|
459 |
+
var event = new Event("error");
|
460 |
+
es.dispatchEvent(event);
|
461 |
+
fire(es, es.onerror, event);
|
462 |
+
}
|
463 |
+
}
|
464 |
+
};
|
465 |
+
|
466 |
+
var onProgress = function (textChunk) {
|
467 |
+
if (currentState === OPEN) {
|
468 |
+
var n = -1;
|
469 |
+
for (var i = 0; i < textChunk.length; i += 1) {
|
470 |
+
var c = textChunk.charCodeAt(i);
|
471 |
+
if (c === "\n".charCodeAt(0) || c === "\r".charCodeAt(0)) {
|
472 |
+
n = i;
|
473 |
+
}
|
474 |
+
}
|
475 |
+
var chunk = (n !== -1 ? textBuffer : "") + textChunk.slice(0, n + 1);
|
476 |
+
textBuffer = (n === -1 ? textBuffer : "") + textChunk.slice(n + 1);
|
477 |
+
if (chunk !== "") {
|
478 |
+
wasActivity = true;
|
479 |
+
}
|
480 |
+
for (var position = 0; position < chunk.length; position += 1) {
|
481 |
+
var c = chunk.charCodeAt(position);
|
482 |
+
if (state === AFTER_CR && c === "\n".charCodeAt(0)) {
|
483 |
+
state = FIELD_START;
|
484 |
+
} else {
|
485 |
+
if (state === AFTER_CR) {
|
486 |
+
state = FIELD_START;
|
487 |
+
}
|
488 |
+
if (c === "\r".charCodeAt(0) || c === "\n".charCodeAt(0)) {
|
489 |
+
if (state !== FIELD_START) {
|
490 |
+
if (state === FIELD) {
|
491 |
+
valueStart = position + 1;
|
492 |
+
}
|
493 |
+
var field = chunk.slice(fieldStart, valueStart - 1);
|
494 |
+
var value = chunk.slice(valueStart + (valueStart < position && chunk.charCodeAt(valueStart) === " ".charCodeAt(0) ? 1 : 0), position);
|
495 |
+
if (field === "data") {
|
496 |
+
dataBuffer += "\n";
|
497 |
+
dataBuffer += value;
|
498 |
+
} else if (field === "id") {
|
499 |
+
lastEventIdBuffer = value;
|
500 |
+
} else if (field === "event") {
|
501 |
+
eventTypeBuffer = value;
|
502 |
+
} else if (field === "retry") {
|
503 |
+
initialRetry = parseDuration(value, initialRetry);
|
504 |
+
retry = initialRetry;
|
505 |
+
} else if (field === "heartbeatTimeout") {
|
506 |
+
heartbeatTimeout = parseDuration(value, heartbeatTimeout);
|
507 |
+
if (timeout !== 0) {
|
508 |
+
clearTimeout(timeout);
|
509 |
+
timeout = setTimeout(function () {
|
510 |
+
onTimeout();
|
511 |
+
}, heartbeatTimeout);
|
512 |
+
}
|
513 |
+
}
|
514 |
+
}
|
515 |
+
if (state === FIELD_START) {
|
516 |
+
if (dataBuffer !== "") {
|
517 |
+
lastEventId = lastEventIdBuffer;
|
518 |
+
if (eventTypeBuffer === "") {
|
519 |
+
eventTypeBuffer = "message";
|
520 |
+
}
|
521 |
+
var event = new MessageEvent(eventTypeBuffer, {
|
522 |
+
data: dataBuffer.slice(1),
|
523 |
+
lastEventId: lastEventIdBuffer
|
524 |
+
});
|
525 |
+
es.dispatchEvent(event);
|
526 |
+
if (eventTypeBuffer === "message") {
|
527 |
+
fire(es, es.onmessage, event);
|
528 |
+
}
|
529 |
+
if (currentState === CLOSED) {
|
530 |
+
return;
|
531 |
+
}
|
532 |
+
}
|
533 |
+
dataBuffer = "";
|
534 |
+
eventTypeBuffer = "";
|
535 |
+
}
|
536 |
+
state = c === "\r".charCodeAt(0) ? AFTER_CR : FIELD_START;
|
537 |
+
} else {
|
538 |
+
if (state === FIELD_START) {
|
539 |
+
fieldStart = position;
|
540 |
+
state = FIELD;
|
541 |
+
}
|
542 |
+
if (state === FIELD) {
|
543 |
+
if (c === ":".charCodeAt(0)) {
|
544 |
+
valueStart = position + 1;
|
545 |
+
state = VALUE_START;
|
546 |
+
}
|
547 |
+
} else if (state === VALUE_START) {
|
548 |
+
state = VALUE;
|
549 |
+
}
|
550 |
+
}
|
551 |
+
}
|
552 |
+
}
|
553 |
+
}
|
554 |
+
};
|
555 |
+
|
556 |
+
var onFinish = function () {
|
557 |
+
if (currentState === OPEN || currentState === CONNECTING) {
|
558 |
+
currentState = WAITING;
|
559 |
+
if (timeout !== 0) {
|
560 |
+
clearTimeout(timeout);
|
561 |
+
|