(function($) {
var saved_settings;
$(document).ready(function() {
$('.as3cf-settings').each(function() {
var $container = $(this);
var $bucketList = $('.as3cf-bucket-list');
var $createBucketForm = $container.find('.as3cf-create-bucket-form');
if($createBucketForm.length){
var $createBucketButton = $createBucketForm.find('button'),
origButtonText = $createBucketButton.text();
$createBucketForm.on('submit', function(e){
e.preventDefault();
$( '.as3cf-bucket-error' ).hide();
$bucketList.addClass('saving');
$createBucketButton.text($createBucketButton.attr('data-working'));
$createBucketButton.prop('disabled', true);
var bucketName = $createBucketForm.find('input[name="bucket_name"]').val();
var data = {
action: 'as3cf-create-bucket',
bucket_name: bucketName,
_nonce: as3cf_i18n.create_bucket_nonce
};
$.ajax({
url: ajaxurl,
type: 'POST',
dataType: 'JSON',
data: data,
error: function(jqXHR, textStatus, errorThrown) {
$createBucketButton.text(origButtonText);
show_bucket_error( as3cf_i18n.create_bucket_error, errorThrown );
},
success: function(data, textStatus, jqXHR) {
$createBucketButton.text(origButtonText);
$createBucketButton.prop('disabled', false);
if (typeof data['success'] !== 'undefined') {
bucket_select( bucketName, data['region'], data['can_write'] );
// tidy up create bucket form
$createBucketForm.find('input[name="bucket_name"]').val('');
$('.as3cf-bucket-list a' ).removeClass('selected');
loadBuckets();
$bucketList.removeClass('saving');
} else {
show_bucket_error( as3cf_i18n.create_bucket_error, data['error'] );
}
}
});
});
}
var $changeBucket = $container.find('.as3cf-change-bucket');
if($changeBucket.length){
$changeBucket.on('click', function(e){
e.preventDefault();
$( '.updated' ).hide();
$('.as3cf-can-write-error').hide();
$('.as3cf-settings').removeClass('as3cf-has-bucket');
loadBuckets();
if ( $('.as3cf-active-bucket' ).html ) {
$('.as3cf-cancel-bucket-select-wrap' ).show();
}
if ( $( '.as3cf-bucket-list a.selected' ).length ) {
$( '.as3cf-bucket-list' ).scrollTop( $( '.as3cf-bucket-list a.selected' ).position().top - 50 );
}
});
}
var $refreshBuckets = $container.find('.as3cf-refresh-buckets');
if($refreshBuckets.length){
$refreshBuckets.on('click', function(e){
e.preventDefault();
loadBuckets();
});
}
var $cancelChangeBucket = $container.find('.as3cf-cancel-bucket-select');
if($cancelChangeBucket.length){
$cancelChangeBucket.on('click', function(e){
e.preventDefault();
$( '.as3cf-bucket-error' ).hide();
$('.as3cf-settings').addClass('as3cf-has-bucket');
});
}
});
var $bucketList = $('.as3cf-bucket-list');
function loadBuckets() {
$( '.as3cf-bucket-error' ).hide();
$bucketList.html('
'+ $bucketList.attr('data-working') +'');
var data = {
action: 'as3cf-get-buckets',
_nonce: as3cf_i18n.get_buckets_nonce
};
$.ajax({
url: ajaxurl,
type: 'POST',
dataType: 'JSON',
data: data,
error: function(jqXHR, textStatus, errorThrown) {
$bucketList.html('');
show_bucket_error( as3cf_i18n.get_buckets_error, errorThrown );
},
success: function(data, textStatus, jqXHR) {
$bucketList.html('');
if (typeof data['success'] !== 'undefined') {
$(data['buckets']).each(function(idx, bucket){
var bucket_class = ( bucket.Name == data['selected'] ) ? 'selected' : '';
$bucketList.append(' '+ bucket.Name +'');
});
} else {
show_bucket_error( as3cf_i18n.get_buckets_error, data[ 'error' ] );
}
}
});
}
$bucketList.on('click', 'a', function(e){
e.preventDefault();
if ( $(this).hasClass('selected') ) {
$('.as3cf-settings').addClass('as3cf-has-bucket');
return;
}
var bucket = this;
$('.as3cf-bucket-list a' ).removeClass('selected');
$(bucket).addClass('selected');
$bucketList.addClass('saving');
$(bucket).find('.spinner').show();
var bucketName = $(bucket).attr('data-bucket');
var data = {
action: 'as3cf-save-bucket',
bucket_name: bucketName,
_nonce: as3cf_i18n.save_bucket_nonce
};
$.ajax({
url: ajaxurl,
type: 'POST',
dataType: 'JSON',
data: data,
error: function(jqXHR, textStatus, errorThrown) {
$bucketList.removeClass('saving');
show_bucket_error( as3cf_i18n.save_bucket_error, errorThrown );
},
success: function(data, textStatus, jqXHR) {
$(bucket).find('.spinner').hide();
$bucketList.removeClass('saving');
if (typeof data['success'] !== 'undefined') {
bucket_select( bucketName, data['region'], data['can_write'] );
} else {
show_bucket_error( as3cf_i18n.save_bucket_error, data['error'] );
}
}
});
});
function show_bucket_error( title, error ) {
$( '.as3cf-bucket-error span.title' ).html( title );
$( '.as3cf-bucket-error span.message' ).html( error );
$( '.as3cf-bucket-error' ).show();
}
function bucket_select( bucket, region, can_write ) {
if ( '' == $( '.as3cf-active-bucket' ).text() ) {
// first time bucket select - enable main options by default
set_checkbox( 'copy-to-s3-wrap' );
set_checkbox( 'serve-from-s3-wrap' );
}
$( '.as3cf-active-bucket' ).text( bucket );
$( '#as3cf-bucket' ).val( bucket );
$( '#as3cf-region' ).val( region );
$( '.updated' ).show();
// check permission on bucket
if( can_write === false){
$('.as3cf-can-write-error').show();
}
$( '.as3cf-settings' ).addClass( 'as3cf-has-bucket' );
generate_url_preview();
}
$('.as3cf-switch').on('click', 'span', function(e){
if ( ! $(this).parent().hasClass('disabled') ) {
var parent_id = $(this).parent().attr('id');
set_checkbox( parent_id );
}
});
function set_checkbox( checkbox_wrap ) {
$('#' + checkbox_wrap + ' span' ).toggleClass('checked');
var switch_on = $('#' + checkbox_wrap + ' span.on' ).hasClass('checked');
var checkbox_name = $('#' + checkbox_wrap).data('checkbox');
var $checkbox = $('input#' + checkbox_name);
$checkbox.attr( "checked", switch_on );
$checkbox.trigger("change");
}
if ( $( '.as3cf-settings' ).length && ! $( '.as3cf-settings' ).hasClass( 'as3cf-has-bucket' ) ) {
loadBuckets();
}
if ( $( '#copy-to-s3' ).is( ":checked" ) ) {
$('tr.advanced-options').show();
}
$('.as3cf-settings').on('change', '#copy-to-s3', function(e){
$('tr.advanced-options').toggle();
});
if ( $( '#serve-from-s3' ).is( ":checked" ) ) {
$('tr.configure-url').show();
}
$('.as3cf-settings').on('change', '#serve-from-s3', function(e){
$('tr.configure-url').toggle();
});
$('.as3cf-settings').on('change', '.sub-toggle', function(e){
var setting = $(this ).attr('id');
$('.as3cf-setting.' + setting ).toggleClass('hide');
});
$('.as3cf-domain').on('change', 'input[type="radio"]', function(e){
var domain = $( 'input:radio[name="domain"]:checked' ).val();
if ( 'cloudfront' == domain && $('.as3cf-setting.cloudfront' ).hasClass('hide') ) {
$('.as3cf-setting.cloudfront' ).removeClass('hide');
} else {
$('.as3cf-setting.cloudfront' ).addClass('hide');
}
});
$( '.as3cf-ssl' ).on( 'change', 'input[type="radio"]', function( e ) {
var ssl = $( 'input:radio[name="ssl"]:checked' ).val();
if ( 'https' == ssl ) {
var domain = $( 'input:radio[name="domain"]:checked' ).val();
if ( 'subdomain' == domain ) {
$( 'input[name="domain"][value="path"]' ).attr( "checked", true );
}
$( '.subdomain-wrap input' ).attr( 'disabled', true );
$( '.subdomain-wrap' ).addClass( 'disabled' );
} else {
$( '.subdomain-wrap input' ).removeAttr( 'disabled' );
$( '.subdomain-wrap' ).removeClass( 'disabled' );
}
} );
$('.url-preview').on('change', 'input', function(e){
generate_url_preview();
});
function generate_url_preview() {
$('.as3cf-url-preview' ).html( 'Generating...' );
var data = {
_nonce: as3cf_i18n.get_url_preview_nonce
};
$.each( $(".as3cf-main-settings form").serializeArray(), function(i,o){
var n = o.name,
v = o.value;
n = n.replace('[]', '');
data[n] = data[n] === undefined ? v
: $.isArray( data[n] ) ? data[n].concat( v )
: [ data[n], v ];
});
// overwrite the save action stored in the form
data['action'] = 'as3cf-get-url-preview';
$.ajax({
url: ajaxurl,
type: 'POST',
dataType: 'JSON',
data: data,
error: function(jqXHR, textStatus, errorThrown) {
alert(as3cf_i18n.get_url_preview_error + errorThrown);
},
success: function(data, textStatus, jqXHR) {
if (typeof data['success'] !== 'undefined') {
$('.as3cf-url-preview' ).html( data['url'] );
} else {
alert(as3cf_i18n.get_url_preview_error + data['error']);
}
}
});
}
// save the original state of the form for comparison later
saved_settings = $( '.as3cf-main-settings form' ).serialize();
// let the save settings submit happen as normal
$( document ).on( 'submit', '.as3cf-main-settings form', function( event ) {
// disable unload warning
$( window ).off( 'beforeunload.as3cf-settings' );
} );
// prompt user with dialog if leaving the settings page with unsaved changes
$( window ).on( 'beforeunload.as3cf-settings', function() {
if ( $( '.as3cf-main-settings form' ).serialize() != saved_settings ) {
return as3cf_i18n.save_alert;
}
} );
});
})(jQuery);