(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' ); var $manualBucketForm = $container.find( '.as3cf-manual-save-bucket-form' ); if ( $createBucketForm.length ) { var $createBucketButton = $createBucketForm.find( 'button' ); var 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( '' ); if ( $( '.as3cf-bucket-list-wrapper' ).is( ':visible' ) ) { loadBuckets(); } $( '.as3cf-bucket-list a' ).removeClass( 'selected' ); $bucketList.removeClass( 'saving' ); $manualBucketForm.find( 'input[name="bucket_name"]' ).val( bucketName ); } else { show_bucket_error( as3cf_i18n.create_bucket_error, data[ 'error' ] ); } } } ); } ); } if ( $manualBucketForm.length ) { var $manualBucketButton = $manualBucketForm.find( 'button' ); var origManualButtonText = $manualBucketButton.text(); $manualBucketForm.on( 'submit', function( e ) { e.preventDefault(); var bucketName = $manualBucketForm.find( 'input[name="bucket_name"]' ).val(); if ( bucketName === $( '.as3cf-active-bucket' ).text() ) { $( '.as3cf-bucket-error' ).hide(); $( '.as3cf-settings' ).addClass( 'as3cf-has-bucket' ); return; } $( '.as3cf-bucket-error' ).hide(); $manualBucketButton.text( $manualBucketButton.attr( 'data-working' ) ); $manualBucketButton.prop( 'disabled', true ); var data = { action : 'as3cf-manual-save-bucket', bucket_name: bucketName, _nonce : as3cf_i18n.manual_bucket_nonce }; $.ajax( { url : ajaxurl, type : 'POST', dataType: 'JSON', data : data, error : function( jqXHR, textStatus, errorThrown ) { $manualBucketButton.text( origManualButtonText ); show_bucket_error( as3cf_i18n.save_bucket_error, errorThrown ); }, success : function( data, textStatus, jqXHR ) { $manualBucketButton.text( origManualButtonText ); $manualBucketButton.prop( 'disabled', false ); if ( typeof data[ 'success' ] !== 'undefined' ) { bucket_select( bucketName, data[ 'region' ], data[ 'can_write' ] ); $( '.as3cf-bucket-list a' ).removeClass( 'selected' ); } else { show_bucket_error( as3cf_i18n.save_bucket_error, data[ 'error' ] ); } } } ); } ); } var $changeBucket = $container.find( '.as3cf-change-bucket' ); if ( $changeBucket.length ) { $changeBucket.on( 'click', function( e ) { e.preventDefault(); $( '.updated' ).not( '.as3cf-notice' ).hide(); $( '.as3cf-can-write-error' ).hide(); $( '.as3cf-settings' ).removeClass( 'as3cf-has-bucket' ); if ( $( '.as3cf-bucket-list-wrapper' ).is( ':visible' ) ) { loadBuckets(); if ( $( '.as3cf-active-bucket' ).html ) { $( '.as3cf-cancel-bucket-select-wrap' ).show(); } } } ); } 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 + '
  • ' ); } ); scroll_to_selected_bucket(); } 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; var previous_bucket = $( '.as3cf-bucket-list a.selected' ).attr( 'data-bucket' ); $( '.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 ); $( '.as3cf-bucket-list a' ).removeClass( 'selected' ); $( '.as3cf-bucket-list a[data-bucket="' + previous_bucket + '"]' ).addClass( 'selected' ); }, 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' ] ); $( '.as3cf-bucket-list a' ).removeClass( 'selected' ); $( '.as3cf-bucket-list a[data-bucket="' + previous_bucket + '"]' ).addClass( 'selected' ); } } } ); } ); function scroll_to_selected_bucket() { if ( ! $( '.as3cf-bucket-list a.selected' ).length ) { return; } var offset = $( 'ul.as3cf-bucket-list li' ).first().position().top + 150; $( 'ul.as3cf-bucket-list' ).animate( { scrollTop: $( 'ul.as3cf-bucket-list li a.selected' ).position().top - offset } ); } 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 ); $( 'form.as3cf-manual-save-bucket-form .as3cf-bucket-name' ).val( bucket ); $( '#as3cf-bucket' ).val( bucket ); $( '#as3cf-region' ).val( region ); $( '.updated' ).not( '.as3cf-notice' ).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' ) ) { if ( $( '.as3cf-bucket-list-wrapper' ).is( ':visible' ) ) { loadBuckets(); } } $( '.as3cf-settings' ).on( 'change', '.sub-toggle', function( e ) { var setting = $( this ).attr( 'id' ); $( '.as3cf-setting.' + setting ).toggleClass( 'hide' ); } ); $( '.as3cf-settings' ).on( 'click', '.as3cf-manual-bucket-toggle', function( e ) { e.preventDefault(); $( '.as3cf-bucket-select' ).addClass( 'manual' ); } ); $( '.as3cf-settings' ).on( 'click', '.as3cf-bucket-list-toggle', function( e ) { e.preventDefault(); loadBuckets(); $( '.as3cf-bucket-select' ).removeClass( 'manual' ); $( '.as3cf-cancel-bucket-select-wrap' ).show(); } ); $( '.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' ] ); } } } ); } /** * Return the serialized string of the settings form * excluding the bucket and region inputs as they get saved via AJAX * * @returns {string} */ function serialized_form() { return $( '.as3cf-main-settings form' ).find( 'input:not(.no-compare)' ).serialize(); } // save the original state of the form for comparison later saved_settings = serialized_form(); // 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 ( serialized_form() !== saved_settings ) { return as3cf_i18n.save_alert; } } ); } ); })(jQuery);