1257 lines
38 KiB
PHTML
1257 lines
38 KiB
PHTML
<script>
|
|
//TODO: in help screen and error dialog, give button to display all client settings (excluding pwds) for easier troubleshooting
|
|
|
|
|
|
var wp_site = <?php echo json_encode($this->wp_site, JSON_FORCE_OBJECT|JSON_UNESCAPED_SLASHES); ?>
|
|
|
|
// TODO: update this from prapre_for_export() response;
|
|
var current_archive = {};
|
|
|
|
var current_deployment_method = '<?php echo $this->options->selected_deployment_option ? $this->options->selected_deployment_option : 'folder'; ?>';
|
|
|
|
// TODO: get the log out of the archive, along with it's meta infos
|
|
var log_file_url = wp_site.uploads_url + '/WP-STATIC-EXPORT-LOG.txt';
|
|
var discovered_urls_file_url = wp_site.uploads_url + '/WP-STATIC-DISCOVERED-URLS-LOG.txt';
|
|
var modified_crawl_list_file_url = wp_site.uploads_url + '/WP-STATIC-MODIFIED-CRAWL-LIST.txt';
|
|
var detected_wordpress_urls_file_url = wp_site.uploads_url + '/WP-STATIC-INITIAL-CRAWL-LIST.txt';
|
|
var encountered_404s_list_file_url = wp_site.uploads_url + '/WP-STATIC-404-LOG.txt';
|
|
var crawled_links_list_file_url = wp_site.uploads_url + '/WP-STATIC-CRAWLED-LINKS.txt';
|
|
var progress_file = wp_site.uploads_url + '/WP-STATIC-PROGRESS.txt';
|
|
|
|
var export_action = '';
|
|
var export_targets = [];
|
|
var export_commence_time = '';
|
|
var export_duration = '';
|
|
var batch_increment = 0;
|
|
var status_text = '';
|
|
var protocolAndDomainRE = /^(?:\w+:)?\/\/(\S+)$/;
|
|
var localhostDomainRE = /^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/
|
|
var nonLocalhostDomainRE = /^[^\s\.]+\.\S{2,}$/;
|
|
var pollingIntervalID = '';
|
|
var status_descriptions = {
|
|
'crawl_site' : 'Crawling initial file list',
|
|
'crawl_again' : 'Crawling discovered URLs',
|
|
'post_process_archive_dir' : 'Processing the crawled files',
|
|
'post_export_teardown' : 'Cleaning up after processing',
|
|
'netlify_do_export' : 'Deploying to Netlify',
|
|
's3_prepare_export' : 'Preparing files for S3 deployment',
|
|
's3_transfer_files' : 'Deploying files to S3',
|
|
'cloudfront_invalidate_all_items' : 'Invalidating CloudFront cache',
|
|
'bunnycdn_prepare_export' : 'Preparing files for BunnyCDN deployment',
|
|
'bunnycdn_transfer_files' : 'Deploying files to BunnyCDN',
|
|
'bunnycdn_purge_cache' : 'Purging BunnyCDN cache',
|
|
'ftp_prepare_export' : 'Preparing files for FTP deployment',
|
|
'ftp_transfer_files' : 'Deploying files via FTP',
|
|
'github_prepare_export' : 'Preparing files for GitHub deployment',
|
|
'github_upload_files' : 'Deploying files via GitHub',
|
|
'bitbucket_prepare_export' : 'Preparing files for Bitbucket deployment',
|
|
'bitbucket_upload_files' : 'Deploying files to Bitbucket (progress will look slow at end if using large batch sizes)',
|
|
'gitlab_prepare_export' : 'Preparing files for GitLab deployment',
|
|
'gitlab_upload_files' : 'Deploying files to GitLab',
|
|
'finalize_deployment' : 'Performing post-deployment actions'
|
|
};
|
|
|
|
|
|
jQuery(document).ready(function($){
|
|
function prepareInitialFileList() {
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('generate_filelist_preview');
|
|
|
|
status_text = 'Analyzing site... this may take a few minutes (but it\'s worth it!)';
|
|
$('#current_action').html( status_text );
|
|
$('#progress').show();
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
$('#initial_crawl_list_loader').hide();
|
|
$('#initial_crawl_list_count').text(serverResponse + ' URLs were detected on your site that will be used to initiate the crawl. Other URLs will be discovered while crawling.');
|
|
$('#preview_initial_crawl_list_button').show();
|
|
|
|
$('#startExportButton').prop('disabled', false);
|
|
$('.saveSettingsButton').prop('disabled', false);
|
|
$('.resetDefaultSettingsButton').prop('disabled', false);
|
|
$('#progress').hide();
|
|
},
|
|
error: function(serverResponse) {
|
|
$('#initial_crawl_list_loader').hide();
|
|
// TODO: surface via ajaxerrorhandler
|
|
console.log('error in generating the initial crawl list');
|
|
}
|
|
});
|
|
|
|
// on result, hide progress and show error or update with number of files found
|
|
|
|
}
|
|
|
|
function saveOptions( reload ) {
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('save_options');
|
|
|
|
$('#current_action').html('Saving options');
|
|
$('#progress').show();
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
$('#progress').hide();
|
|
if ( reload ) {
|
|
location.reload();
|
|
} else {
|
|
alert('Options have been saved');
|
|
}
|
|
},
|
|
error: function(serverResponse) {
|
|
$('#progress').hide();
|
|
}
|
|
});
|
|
}
|
|
|
|
function millisToMinutesAndSeconds(millis) {
|
|
var minutes = Math.floor(millis / 60000);
|
|
var seconds = ((millis % 60000) / 1000).toFixed(0);
|
|
return minutes + ":" + (seconds < 10 ? '0' : '') + seconds;
|
|
}
|
|
|
|
function processExportTargets () {
|
|
// TODO: optimisation: just call doAJAXExport with shifted arr element (req's consistent naming of exports)
|
|
|
|
if( export_targets.length > 0) {
|
|
switch(target = export_targets.shift()) {
|
|
case 'GITLAB':
|
|
doAJAXExport(
|
|
'gitlab_prepare_export',
|
|
'gitlab_upload_files',
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
case 'BITBUCKET':
|
|
doAJAXExport(
|
|
'bitbucket_prepare_export',
|
|
'bitbucket_upload_files',
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
case 'GITHUB':
|
|
doAJAXExport(
|
|
'github_prepare_export',
|
|
'github_upload_files',
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
case 'ZIP':
|
|
doAJAXExport(
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
case 'FOLDER':
|
|
doAJAXExport(
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
case 'FTP':
|
|
doAJAXExport(
|
|
'ftp_prepare_export',
|
|
'ftp_transfer_files',
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
|
|
case 'BUNNYCDN':
|
|
doAJAXExport(
|
|
'bunnycdn_prepare_export',
|
|
'bunnycdn_transfer_files',
|
|
'bunnycdn_purge_cache',
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
|
|
case 'S3':
|
|
doAJAXExport(
|
|
's3_prepare_export',
|
|
's3_transfer_files',
|
|
'cloudfront_invalidate_all_items',
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
|
|
case 'NETLIFY':
|
|
doAJAXExport(
|
|
'netlify_do_export',
|
|
'finalize_deployment'
|
|
);
|
|
break;
|
|
|
|
default:
|
|
console.log('unexpected return value from export target processing');
|
|
break;
|
|
}
|
|
} else {
|
|
// if zip was selected, call to get zip name and enable the button with the link to download
|
|
if (current_deployment_method === 'zip') {
|
|
$('#downloadZIP').show();
|
|
|
|
$.get( wp_site.uploads_url + '/WP2STATIC-CURRENT-ARCHIVE.txt?cacheBuster=' + Date.now(),
|
|
function( archive_path ) {
|
|
path_segments = archive_path.split('/');
|
|
current_archive.name = path_segments[path_segments.length - 2];
|
|
zipURL = wp_site.uploads_url + '/' + current_archive.name + '.zip';
|
|
$('#downloadZIP').attr('href', zipURL);
|
|
},
|
|
'text'
|
|
);
|
|
} else {
|
|
// for other methods, show the Go to my static site link
|
|
$('#goToMyStaticSite').attr('href', $('#baseUrl').val());
|
|
$('#goToMyStaticSite').show();
|
|
}
|
|
|
|
// all complete
|
|
exportCompleteTime = + new Date();
|
|
export_duration = exportCompleteTime - export_commence_time;
|
|
|
|
stopPolling();
|
|
setProgressBarPercent( 0 );
|
|
$('#current_action').text('Process completed in ' + millisToMinutesAndSeconds(export_duration) + ' (mins:ss)');
|
|
$("#goToMyStaticSite").focus();
|
|
$(".pulsate-css").hide();
|
|
$('#startExportButton').prop('disabled', false);
|
|
$('.saveSettingsButton').prop('disabled', false);
|
|
$('.resetDefaultSettingsButton').prop('disabled', false);
|
|
$('.cancelExportButton').hide();
|
|
notifyMe();
|
|
}
|
|
}
|
|
|
|
function ajaxErrorHandler () {
|
|
stopPolling();
|
|
$('#current_action').html(
|
|
// if not debug mode
|
|
'Failed during "' + status_text + '", please consult the Help tab for where to get assistance.')
|
|
// if debug mode
|
|
$(".pulsate-css").hide();
|
|
$('#startExportButton').prop('disabled', false);
|
|
$('.saveSettingsButton').prop('disabled', false);
|
|
$('.resetDefaultSettingsButton').prop('disabled', false);
|
|
$('.cancelExportButton').hide();
|
|
}
|
|
|
|
function startExport() {
|
|
// start timer
|
|
export_commence_time = + new Date();
|
|
|
|
startPolling();
|
|
|
|
validation_errors = getValidationErrors();
|
|
|
|
if (validation_errors !== '') {
|
|
alert(validation_errors);
|
|
|
|
// TODO: place in function that resets any in progress counters, etc
|
|
$('#progress').hide();
|
|
$('#startExportButton').prop('disabled', false);
|
|
$('.saveSettingsButton').prop('disabled', false);
|
|
$('.resetDefaultSettingsButton').prop('disabled', false);
|
|
$('.cancelExportButton').hide();
|
|
|
|
return false;
|
|
}
|
|
|
|
$('#current_action').html('Starting export...');
|
|
|
|
showProgress();
|
|
|
|
// reset export targets to avoid having left-overs from a failed run
|
|
export_targets = [];
|
|
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('prepare_for_export');
|
|
|
|
// set the correct one
|
|
switch (current_deployment_method) {
|
|
case 'zip':
|
|
$('#createZip').attr('checked', 'checked');
|
|
export_targets.push('ZIP');
|
|
break;
|
|
case 'folder':
|
|
export_targets.push('FOLDER');
|
|
break;
|
|
|
|
case 'github':
|
|
export_targets.push('GITHUB');
|
|
break;
|
|
|
|
case 'bitbucket':
|
|
export_targets.push('BITBUCKET');
|
|
break;
|
|
|
|
case 'gitlab':
|
|
export_targets.push('GITLAB');
|
|
break;
|
|
|
|
case 'bunnycdn':
|
|
export_targets.push('BUNNYCDN');
|
|
break;
|
|
|
|
case 's3':
|
|
export_targets.push('S3');
|
|
break;
|
|
|
|
case 'netlify':
|
|
export_targets.push('NETLIFY');
|
|
break;
|
|
|
|
case 'ftp':
|
|
export_targets.push('FTP');
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
}
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
doAJAXExport('crawl_site', 'crawl_again', 'post_process_archive_dir');
|
|
},
|
|
error: ajaxErrorHandler
|
|
});
|
|
}
|
|
|
|
function clearProgressAndResults() {
|
|
$('#downloadZIP').hide();
|
|
$('#goToMyStaticSite').hide();
|
|
$('#exportDuration').hide();
|
|
}
|
|
|
|
function showProgress() {
|
|
clearProgressAndResults();
|
|
$('#progress').show();
|
|
$(".pulsate-css").show();
|
|
}
|
|
|
|
function getValidationErrors() {
|
|
validation_errors = '';
|
|
// check for when targetFolder is showing (plugin reset state)
|
|
if ($('#targetFolder').is(':visible') &&
|
|
( $('#targetFolder').val() == '' ) ) {
|
|
validation_errors += 'Target folder may not be empty. Please adjust your settings.';
|
|
}
|
|
|
|
if (( $('#baseUrl').val() === undefined ||
|
|
$('#baseUrl').val() == '' ) &&
|
|
!$('#allowOfflineUsage').is(":checked")) {
|
|
validation_errors += "Please set the Base URL field to the address you will host your static site.\n";
|
|
}
|
|
|
|
// TODO: on new Debian package-managed environment, this was falsely erroring
|
|
if (!isUrl($('#baseUrl').val()) && !$('#allowOfflineUsage').is(":checked")) {
|
|
// TODO: testing / URL as base
|
|
if ($('#baseUrl').val() !== '/') {
|
|
validation_errors += "Please set the Base URL field to a valid URL, ie http://mystaticsite.com.\n";
|
|
}
|
|
}
|
|
|
|
switch(current_deployment_method) {
|
|
case 'zip':
|
|
break;
|
|
|
|
case 'ftp':
|
|
required_fields = {
|
|
ftpServer: 'Please specify the FTP server address needed to transfer your files via FTP',
|
|
ftpUsername: 'Please input an FTP username in order to authenticate when using the FTP deployment method.',
|
|
ftpPassword: 'Please input an FTP password in order to authenticate when using the FTP deployment method.',
|
|
};
|
|
|
|
Object.keys(required_fields).forEach(function(key,index) {
|
|
if ($('#' + key).val() == '') {
|
|
validation_errors += required_fields[key] + "\n";
|
|
}
|
|
});
|
|
break;
|
|
|
|
case 'folder':
|
|
break;
|
|
|
|
case 's3':
|
|
required_fields = {
|
|
s3Key: 'Please input an S3 Key in order to authenticate when using the S3 deployment method.',
|
|
s3Secret: 'Please input an S3 Secret in order to authenticate when using the S3 deployment method.',
|
|
s3Bucket: 'Please input the name of the S3 bucket you are trying to deploy to.',
|
|
};
|
|
|
|
Object.keys(required_fields).forEach(function(key,index) {
|
|
if ($('#' + key).val() == '') {
|
|
validation_errors += required_fields[key] + "\n";
|
|
}
|
|
});
|
|
break;
|
|
|
|
case 'bunnycdn':
|
|
required_fields = {
|
|
bunnycdnPullZoneName: 'Please specify your BunnyCDN pull zone name in order to deploy to BunnyCDN.',
|
|
bunnycdnAPIKey: 'Please specify your BunnyCDN API/FTP password in order to deploy to BunnyCDN.',
|
|
};
|
|
|
|
Object.keys(required_fields).forEach(function(key,index) {
|
|
if ($('#' + key).val() == '') {
|
|
validation_errors += required_fields[key] + "\n";
|
|
}
|
|
});
|
|
break;
|
|
|
|
case 'netlify':
|
|
required_fields = {
|
|
netlifyPersonalAccessToken: 'Please specify your Netlify personal access token in order to deploy to Netlify.',
|
|
netlifySiteID: 'Please specify the id of your Netlify site you want to deploy to.',
|
|
};
|
|
|
|
Object.keys(required_fields).forEach(function(key,index) {
|
|
if ($('#' + key).val() == '') {
|
|
validation_errors += required_fields[key] + "\n";
|
|
}
|
|
});
|
|
break;
|
|
|
|
case 'github':
|
|
required_fields = {
|
|
ghToken: 'Please specify your GitHub personal access token in order to deploy to GitHub.',
|
|
ghRepo: 'Please specify your GitHub repository name in order to deploy to GitHub.',
|
|
ghBranch: 'Please specify which branch in your GitHub repository you want to deploy to.',
|
|
};
|
|
|
|
Object.keys(required_fields).forEach(function(key,index) {
|
|
if ($('#' + key).val() == '') {
|
|
validation_errors += required_fields[key] + "\n";
|
|
}
|
|
});
|
|
|
|
repo = $('#ghRepo').val();
|
|
|
|
if (repo != '') {
|
|
if (repo.split('/').length !== 2) {
|
|
validation_errors += "Please ensure your GitHub repo is specified as USER_OR_ORG_NAME/REPO_NAME\n";
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'bitbucket':
|
|
required_fields = {
|
|
bbToken: 'Please specify your Bitbucket personal access token in order to deploy to Bitbucket.',
|
|
bbRepo: 'Please specify your Bitbucket repository name in order to deploy to Bitbucket.',
|
|
bbBranch: 'Please specify which branch in your Bitbucket repository you want to deploy to.',
|
|
};
|
|
|
|
Object.keys(required_fields).forEach(function(key,index) {
|
|
if ($('#' + key).val() == '') {
|
|
validation_errors += required_fields[key] + "\n";
|
|
}
|
|
});
|
|
|
|
repo = $('#bbRepo').val();
|
|
|
|
if (repo != '') {
|
|
if (repo.split('/').length !== 2) {
|
|
validation_errors += "Please ensure your Bitbucket repo is specified as USER_OR_ORG_NAME/REPO_NAME\n";
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'gitlab':
|
|
required_fields = {
|
|
glToken: 'Please specify your GitLab personal access token in order to deploy to GitLab.',
|
|
glProject: 'Please specify your GitLab project ID in order to deploy to GitLab.',
|
|
glBranch: 'Please specify which branch in your GitLab repository you want to deploy to.',
|
|
};
|
|
|
|
Object.keys(required_fields).forEach(function(key,index) {
|
|
if ($('#' + key).val() == '') {
|
|
validation_errors += required_fields[key] + "\n";
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
|
|
return validation_errors;
|
|
}
|
|
|
|
function isUrl(string) {
|
|
if (typeof string !== 'string') {
|
|
return false;
|
|
}
|
|
|
|
var match = string.match(protocolAndDomainRE);
|
|
|
|
if (!match) {
|
|
return false;
|
|
}
|
|
|
|
var everythingAfterProtocol = match[1];
|
|
|
|
if (!everythingAfterProtocol) {
|
|
return false;
|
|
}
|
|
|
|
if (localhostDomainRE.test(everythingAfterProtocol) ||
|
|
nonLocalhostDomainRE.test(everythingAfterProtocol)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
doAJAXExport() can handle from 1 to n actions
|
|
each action runs, with 3 possible results:
|
|
SUCCESS - action is complete
|
|
> 0 - action is in progress inremental task
|
|
ERROR
|
|
|
|
if an action is successful, and there are other actions queued up,
|
|
it will call the function again with the remaining arguments/actions
|
|
|
|
if an action is succesful, and there are no other actions queued,
|
|
it will call processExportTargets() to continue any other exports
|
|
|
|
if an action is in progress incremental, it will call itself again,
|
|
with all the same arguments
|
|
|
|
if an action fails, ajaxErrorHandler() is called
|
|
*/
|
|
function doAJAXExport() {
|
|
// arguments is not a real array, avoid nastiness by capturing as such
|
|
var args = [];
|
|
for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
|
|
|
|
export_action = args[0];
|
|
status_text = export_action;
|
|
|
|
if ( status_descriptions[export_action] != undefined ) {
|
|
status_text = status_descriptions[export_action];
|
|
} else {
|
|
status_text = export_option;
|
|
}
|
|
|
|
$('#current_action').html(status_text);
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val(export_action);
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
// if an action is successful, and there are other actions queued up
|
|
if (serverResponse === 'SUCCESS' && args.length > 1) {
|
|
batch_increment = 0;
|
|
// rm first action now that it's succeeded
|
|
args.shift();
|
|
// call function with all other actions
|
|
doAJAXExport.apply(this, args);
|
|
// if an action is in progress incremental, it will call itself again
|
|
} else if (serverResponse > 0) {
|
|
doAJAXExport.apply(this, args);
|
|
|
|
batch_increment += 1;
|
|
} else if (serverResponse === 'SUCCESS') {
|
|
// not an incremental action, continue on with export targets
|
|
processExportTargets();
|
|
batch_increment = 0;
|
|
} else {
|
|
ajaxErrorHandler();
|
|
}
|
|
},
|
|
error: ajaxErrorHandler
|
|
});
|
|
}
|
|
|
|
function startPolling() {
|
|
pollingIntervalID = window.setInterval(checkProgress, 500);
|
|
}
|
|
|
|
function stopPolling() {
|
|
window.clearInterval( pollingIntervalID );
|
|
|
|
setProgressBarPercent( 0 );
|
|
}
|
|
|
|
function checkProgress() {
|
|
console.log('checking progress');
|
|
|
|
// get WP2STATIC-PROGRESS.txt
|
|
$.get( progress_file + '?cacheBuster=' + Date.now(), function( data ) {
|
|
progress_amount = parseInt( data );
|
|
|
|
setProgressBarPercent( progress_amount );
|
|
});
|
|
|
|
// TODO: append progress to current task if we're in certain task
|
|
}
|
|
|
|
function setProgressBarPercent( percent ) {
|
|
$('#pbar-fill').css('width', percent.toString() + '%');
|
|
}
|
|
|
|
function updateBaseURLReferences() {
|
|
var base_url_previews = $('.base_url_preview' );
|
|
|
|
if ($('#baseUrl-' + current_deployment_method)) {
|
|
base_url = $('#baseUrl-' + current_deployment_method).val();
|
|
|
|
$('#baseUrl').val($('#baseUrl-' + current_deployment_method).val());
|
|
|
|
base_url_previews.text(base_url.replace(/\/$/, "") + '/');
|
|
|
|
// update the clickable preview url in folder options
|
|
$('#folderPreviewURL').text(wp_site.site_url + '/');
|
|
$('#folderPreviewURL').attr('href', (wp_site.site_url + '/'));
|
|
}
|
|
}
|
|
|
|
/*
|
|
TODO: quick win to get the select menu options to behave like the sendViaFTP, etc checkboxes
|
|
*/
|
|
// TODO: remove this completely?
|
|
function setDeploymentMethod(selected_deployment_method) {
|
|
// hide zip dl link for all
|
|
$('#downloadZIP').hide();
|
|
current_deployment_method = selected_deployment_method;
|
|
|
|
// set the selected option in case calling this from outside the event handler
|
|
$('.selected_deployment_method').val(selected_deployment_method);
|
|
}
|
|
|
|
function offlineUsageChangeHandler(checkbox) {
|
|
if ($(checkbox).is(':checked')) {
|
|
$('#baseUrl-zip').prop('disabled', true);
|
|
} else {
|
|
$('#baseUrl-zip').prop('disabled', false);
|
|
}
|
|
}
|
|
|
|
function setExportSettingDetailsVisibility(changed_checkbox) {
|
|
checkbox_name = $(changed_checkbox).attr('name');
|
|
export_option_name = checkbox_name.replace('sendVia', '').toLowerCase();
|
|
|
|
var export_option_elements = $('.' + export_option_name );
|
|
|
|
if($(changed_checkbox).is(":checked")) {
|
|
export_option_elements.show();
|
|
// unhide all the inputs, the following span and the following br
|
|
} else {
|
|
// hide all the inputs, the following span and the following br
|
|
export_option_elements.hide();
|
|
}
|
|
}
|
|
|
|
/*
|
|
render the information and settings blocks based on the deployment method selected
|
|
*/
|
|
function renderSettingsBlock(selected_deployment_method) {
|
|
deployment_options = [
|
|
'zip',
|
|
'ftp',
|
|
'folder',
|
|
's3',
|
|
'bunnycdn',
|
|
'netlify',
|
|
'github',
|
|
'gitlab',
|
|
'bitbucket'
|
|
];
|
|
|
|
// hide those not selected
|
|
$.each(deployment_options, function(index, deployment_option) {
|
|
$('.' + deployment_option + '_settings_block').hide();
|
|
});
|
|
|
|
$('.' + selected_deployment_method + '_settings_block').show();
|
|
}
|
|
|
|
function notifyMe() {
|
|
if (!Notification) {
|
|
alert('All exports are complete!.');
|
|
return;
|
|
}
|
|
|
|
if (Notification.permission !== "granted") {
|
|
Notification.requestPermission();
|
|
} else {
|
|
var notification = new Notification('WP Static HTML Export', {
|
|
icon: 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Wordpress_Shiny_Icon.svg/768px-Wordpress_Shiny_Icon.svg.png',
|
|
body: "Exports have finished!",
|
|
});
|
|
|
|
notification.onclick = function () {
|
|
parent.focus();
|
|
window.focus();
|
|
this.close();
|
|
};
|
|
}
|
|
}
|
|
|
|
function reloadLogFile() {
|
|
// get current log selection
|
|
current_log_target = $("#log_switcher").val();
|
|
|
|
// if not empty, call loadLogFile again
|
|
if ( current_log_target ) {
|
|
loadLogFile( current_log_target );
|
|
}
|
|
}
|
|
|
|
|
|
function loadLogFile( log_name ) {
|
|
// display loading icon
|
|
$('#log_load_progress').show();
|
|
|
|
// set textarea to disabled
|
|
$("#export_log_textarea" ).attr('disabled', true);
|
|
|
|
// set textarea content to 'Loading log file...'
|
|
$("#export_log_textarea" ).html('Loading log file...');
|
|
|
|
var log_url = '';
|
|
|
|
switch ( log_name ) {
|
|
case 'export_log':
|
|
// TODO: rename ambiguous export log name
|
|
log_url = log_file_url;
|
|
break;
|
|
|
|
case 'discovered_urls':
|
|
log_url = discovered_urls_file_url;
|
|
break;
|
|
|
|
case 'detected_wordpress_urls':
|
|
log_url = detected_wordpress_urls_file_url;
|
|
break;
|
|
|
|
case 'modified_crawl_list':
|
|
log_url = modified_crawl_list_file_url;
|
|
break;
|
|
|
|
case 'crawled_links':
|
|
log_url = crawled_links_list_file_url;
|
|
break;
|
|
|
|
case 'encountered_404s':
|
|
log_url = encountered_404s_list_file_url;
|
|
break;
|
|
}
|
|
|
|
// load the log file
|
|
$.get( log_url, function( data ) {
|
|
// hide loading icon
|
|
$('#log_load_progress').hide();
|
|
|
|
// set textarea to enabled
|
|
$("#export_log_textarea" ).attr('disabled', false);
|
|
|
|
// set textarea content
|
|
$("#export_log_textarea" ).html( data );
|
|
}).fail(function() {
|
|
$('#log_load_progress').hide();
|
|
|
|
// set textarea to enabled
|
|
$("#export_log_textarea" ).attr('disabled', false);
|
|
|
|
// set textarea content
|
|
$("#export_log_textarea" ).html( 'Requested log file not found' );
|
|
});
|
|
}
|
|
|
|
/*****************************/
|
|
/* END FUNCTION DECLARATIONS */
|
|
/*****************************/
|
|
|
|
|
|
if (Notification.permission !== "granted") {
|
|
Notification.requestPermission();
|
|
}
|
|
|
|
$('input[type="checkbox"]').change(function() {
|
|
setExportSettingDetailsVisibility(this);
|
|
});
|
|
|
|
// disable zip base url field when offline usage is checked
|
|
$('#allowOfflineUsage').change(function() {
|
|
offlineUsageChangeHandler($(this));
|
|
});
|
|
|
|
// handler when deployment method is changed
|
|
$('.selected_deployment_method').change(function() {
|
|
renderSettingsBlock(this.value);
|
|
setDeploymentMethod(this.value);
|
|
updateBaseURLReferences();
|
|
clearProgressAndResults();
|
|
});
|
|
|
|
// handler when log selector is changed
|
|
$('#reload_log_button').click(function() {
|
|
reloadLogFile();
|
|
});
|
|
|
|
// handler when log selector is changed
|
|
$('#log_switcher').change(function() {
|
|
target_log = this.value;
|
|
|
|
if (target_log) {
|
|
loadLogFile( target_log );
|
|
}
|
|
});
|
|
|
|
// update base url previews in realtime
|
|
$(document).on('input',
|
|
'#baseUrl-s3, #baseUrl-ftp, #baseUrl-folder, #baseUrl-github, #baseUrl-bitbucket, #baseUrl-gitlab, #baseUrl-netlify, #baseUrl-bunnycdn, #baseUrl-zip',
|
|
function() {
|
|
updateBaseURLReferences();
|
|
}
|
|
);
|
|
|
|
$(document).on('click', '.nav-tab' , function(evt) {
|
|
evt.preventDefault();
|
|
current_tab = $(this);
|
|
$('.nav-tab').removeClass('nav-tab-active');
|
|
current_tab.addClass('nav-tab-active');
|
|
current_tab_text = current_tab.text();
|
|
|
|
switch(current_tab_text) {
|
|
case 'Advanced options':
|
|
$('.export_your_site').hide();
|
|
$('.help_troubleshooting').hide();
|
|
$('.crawl_settings').hide();
|
|
$('.processing_settings').hide();
|
|
$('.advanced_settings').show();
|
|
$('.export_logs').hide();
|
|
$('.give_love').hide();
|
|
break;
|
|
|
|
case 'Deploy static website':
|
|
$('.advanced_settings').hide();
|
|
$('.help_troubleshooting').hide();
|
|
$('.export_your_site').show();
|
|
$('.processing_settings').hide();
|
|
$('.crawl_settings').hide();
|
|
$('.export_logs').hide();
|
|
$('.give_love').hide();
|
|
break;
|
|
|
|
case 'Help':
|
|
$('.export_your_site').hide();
|
|
$('.advanced_settings').hide();
|
|
$('.help_troubleshooting').show();
|
|
$('.processing_settings').hide();
|
|
$('.crawl_settings').hide();
|
|
$('.export_logs').hide();
|
|
$('.give_love').hide();
|
|
break;
|
|
|
|
case 'Logs':
|
|
$('.export_your_site').hide();
|
|
$('.advanced_settings').hide();
|
|
$('.help_troubleshooting').hide();
|
|
$('.export_logs').show();
|
|
$('.processing_settings').hide();
|
|
$('.crawl_settings').hide();
|
|
$('.give_love').hide();
|
|
break;
|
|
|
|
case 'Crawling':
|
|
$('.export_your_site').hide();
|
|
$('.advanced_settings').hide();
|
|
$('.help_troubleshooting').hide();
|
|
$('.processing_settings').hide();
|
|
$('.crawl_settings').show();
|
|
$('.export_logs').hide();
|
|
$('.give_love').hide();
|
|
break;
|
|
|
|
case 'Processing':
|
|
$('.export_your_site').hide();
|
|
$('.advanced_settings').hide();
|
|
$('.help_troubleshooting').hide();
|
|
$('.processing_settings').show();
|
|
$('.crawl_settings').hide();
|
|
$('.export_logs').hide();
|
|
$('.give_love').hide();
|
|
break;
|
|
|
|
case '':
|
|
$('.export_your_site').hide();
|
|
$('.advanced_settings').hide();
|
|
$('.help_troubleshooting').hide();
|
|
$('.processing_settings').hide();
|
|
$('.crawl_settings').hide();
|
|
$('.export_logs').hide();
|
|
$('.give_love').show();
|
|
break;
|
|
}
|
|
|
|
current_tab.blur();
|
|
});
|
|
|
|
$(document).on('submit', '#general-options' , function(evt) {
|
|
evt.preventDefault();
|
|
});
|
|
|
|
$('#startExportButton').click(function() {
|
|
$(this).prop('disabled', true);
|
|
$('.saveSettingsButton').prop('disabled', true);
|
|
$('.resetDefaultSettingsButton').prop('disabled', true);
|
|
$('.cancelExportButton').show();
|
|
startExport();
|
|
});
|
|
|
|
$('.cancelExportButton').click(function() {
|
|
var reallyCancel = confirm("Stop current export and reload page?");
|
|
if (reallyCancel) {
|
|
window.location = window.location.href;
|
|
}
|
|
});
|
|
|
|
$('#wp2static-footer').on('click', '.resetDefaultSettingsButton', function(event) {
|
|
event.preventDefault();
|
|
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('reset_default_settings');
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
alert("Settings have been reset to default, the page will now be reloaded.");
|
|
window.location.reload(true);
|
|
},
|
|
error: function(serverResponse) {
|
|
alert("Error encountered in trying to reset settings. Please try refreshing the page.");
|
|
}
|
|
});
|
|
});
|
|
|
|
$('#wp2static-footer').on('click', '.saveSettingsButton', function(event) {
|
|
event.preventDefault();
|
|
saveOptions();
|
|
});
|
|
|
|
$('.wrap').on('click', '#delete_deploy_cache_button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('delete_deploy_cache');
|
|
|
|
button = event.currentTarget;
|
|
spinner = $('button').siblings('div.spinner')
|
|
spinner.show();
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
if (serverResponse === 'SUCCESS') {
|
|
alert('Deploy cache cleared');
|
|
} else {
|
|
alert('FAIL: Unable to delete deploy cache');
|
|
}
|
|
|
|
spinner.hide();
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to delete deploy cache');
|
|
|
|
spinner.hide();
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.wrap').on('click', '#ftp-test-button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('test_ftp');
|
|
|
|
button = event.currentTarget;
|
|
spinner = $('button').siblings('div.spinner')
|
|
spinner.show();
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
if (serverResponse === 'SUCCESS') {
|
|
alert('FTP Connection Test Successful');
|
|
} else {
|
|
alert('FAIL: Unable to login to FTP server');
|
|
}
|
|
|
|
spinner.hide();
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to login to FTP server');
|
|
|
|
spinner.hide();
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.wrap').on('click', '#bitbucket-test-button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('test_bitbucket');
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
if (serverResponse === 'SUCCESS') {
|
|
alert('Bitbucket Connection/Upload Test Successful');
|
|
} else {
|
|
alert('FAIL: Unable to complete test upload to Bitbucket');
|
|
}
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to complete test upload to Bitbucket');
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.wrap').on('click', '#netlify-test-button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('test_netlify');
|
|
$('#netlify_test_results').html('');
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
alert('Netlify Connection/Upload Test Successful');
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to complete test upload to Netlify');
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.wrap').on('click', '#s3-test-button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('test_s3');
|
|
$('#s3_test_results').html('');
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
alert('S3 Connection/Upload Test Successful');
|
|
|
|
$('#s3_test_results').html(serverResponse);
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to complete test upload to S3');
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.wrap').on('click', '#bunny-test-button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('test_bunny');
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
if (serverResponse === 'SUCCESS') {
|
|
alert('BunnyCDN Connection/Upload Test Successful');
|
|
} else {
|
|
alert('FAIL: Unable to complete test upload to BunnyCDN');
|
|
}
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to complete test upload to BunnyCDN');
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.wrap').on('click', '#gitlab-test-button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('test_gitlab');
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
if (serverResponse === 'SUCCESS') {
|
|
alert('GitLab Connection/Upload Test Successful');
|
|
} else {
|
|
alert('FAIL: Unable to complete test upload to GitLab');
|
|
}
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to complete test upload to GitLab');
|
|
}
|
|
});
|
|
});
|
|
|
|
$('.wrap').on('click', '#save-and-reload', function(event) {
|
|
event.preventDefault();
|
|
saveOptions( 'reload' );
|
|
});
|
|
|
|
$('.wrap').on('click', '#github-test-button', function(event) {
|
|
event.preventDefault();
|
|
$('.hiddenActionField').val('wp_static_html_output_ajax');
|
|
$('#hiddenAJAXAction').val('test_github');
|
|
|
|
data = $(".options-form :input")
|
|
.filter(function(index, element) {
|
|
return $(element).val() != '';
|
|
})
|
|
.serialize();
|
|
|
|
$.ajax({
|
|
url: ajaxurl,
|
|
data: data,
|
|
dataType: 'html',
|
|
method: 'POST',
|
|
success: function(serverResponse) {
|
|
if (serverResponse === 'SUCCESS') {
|
|
alert('GitHub Connection/Upload Test Successful');
|
|
} else {
|
|
alert('FAIL: Unable to complete test upload to GitHub');
|
|
}
|
|
},
|
|
error: function(serverResponse) {
|
|
alert('FAIL: Unable to complete test upload to GitHub');
|
|
}
|
|
});
|
|
});
|
|
|
|
// populate some hidden fields
|
|
$('#wp_site_url').val(wp_site.site_url);
|
|
$('#wp_uploads_path').val(wp_site.wp_uploads_path);
|
|
$('#wp_uploads_url').val(wp_site.uploads_url);
|
|
$('#wp_site_path').val(wp_site.site_path);
|
|
$('#wp_inc').val(wp_site.wp_inc);
|
|
$('#wp_active_theme').val(wp_site.wp_active_theme);
|
|
$('#wp_uploads').val(wp_site.wp_uploads);
|
|
$('.spinner').hide();
|
|
|
|
// call change handler on page load, to set correct state
|
|
offlineUsageChangeHandler($('#allowOfflineUsage'));
|
|
|
|
updateBaseURLReferences($('#baseUrl').val());
|
|
|
|
// TODO: These may still be needed?
|
|
|
|
// set and show the previous selected deployment method
|
|
renderSettingsBlock(current_deployment_method);
|
|
//
|
|
// // set the select to the current deployment type
|
|
setDeploymentMethod(current_deployment_method);
|
|
|
|
prepareInitialFileList();
|
|
|
|
});
|
|
</script>
|
|
|