292 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			292 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| ( function( $ ) {
 | |
| 
 | |
| 	'use strict';
 | |
| 
 | |
| 	if ( typeof wpcf7 === 'undefined' || wpcf7 === null ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$( function() {
 | |
| 		var welcomePanel = $( '#welcome-panel' );
 | |
| 		var updateWelcomePanel;
 | |
| 
 | |
| 		updateWelcomePanel = function( visible ) {
 | |
| 			$.post( ajaxurl, {
 | |
| 				action: 'wpcf7-update-welcome-panel',
 | |
| 				visible: visible,
 | |
| 				welcomepanelnonce: $( '#welcomepanelnonce' ).val()
 | |
| 			} );
 | |
| 		};
 | |
| 
 | |
| 		$( 'a.welcome-panel-close', welcomePanel ).click( function( event ) {
 | |
| 			event.preventDefault();
 | |
| 			welcomePanel.addClass( 'hidden' );
 | |
| 			updateWelcomePanel( 0 );
 | |
| 		} );
 | |
| 
 | |
| 		$( '#contact-form-editor' ).tabs( {
 | |
| 			active: wpcf7.activeTab,
 | |
| 			activate: function( event, ui ) {
 | |
| 				$( '#active-tab' ).val( ui.newTab.index() );
 | |
| 			}
 | |
| 		} );
 | |
| 
 | |
| 		$( '#contact-form-editor-tabs' ).focusin( function( event ) {
 | |
| 			$( '#contact-form-editor .keyboard-interaction' ).css(
 | |
| 				'visibility', 'visible' );
 | |
| 		} ).focusout( function( event ) {
 | |
| 			$( '#contact-form-editor .keyboard-interaction' ).css(
 | |
| 				'visibility', 'hidden' );
 | |
| 		} );
 | |
| 
 | |
| 		wpcf7.toggleMail2( 'input:checkbox.toggle-form-table' );
 | |
| 
 | |
| 		$( 'input:checkbox.toggle-form-table' ).click( function( event ) {
 | |
| 			wpcf7.toggleMail2( this );
 | |
| 		} );
 | |
| 
 | |
| 		if ( '' === $( '#title' ).val() ) {
 | |
| 			$( '#title' ).focus();
 | |
| 		}
 | |
| 
 | |
| 		wpcf7.titleHint();
 | |
| 
 | |
| 		$( '.contact-form-editor-box-mail span.mailtag' ).click( function( event ) {
 | |
| 			var range = document.createRange();
 | |
| 			range.selectNodeContents( this );
 | |
| 			window.getSelection().addRange( range );
 | |
| 		} );
 | |
| 
 | |
| 		wpcf7.updateConfigErrors();
 | |
| 
 | |
| 		$( '[data-config-field]' ).change( function() {
 | |
| 			var postId = $( '#post_ID' ).val();
 | |
| 
 | |
| 			if ( ! postId || -1 == postId ) {
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			var data = [];
 | |
| 
 | |
| 			$( this ).closest( 'form' ).find( '[data-config-field]' ).each( function() {
 | |
| 				data.push( {
 | |
| 					'name': $( this ).attr( 'name' ).replace( /^wpcf7-/, '' ).replace( /-/g, '_' ),
 | |
| 					'value': $( this ).val()
 | |
| 				} );
 | |
| 			} );
 | |
| 
 | |
| 			data.push( { 'name': 'context', 'value': 'dry-run' } );
 | |
| 
 | |
| 			$.ajax( {
 | |
| 				method: 'POST',
 | |
| 				url: wpcf7.apiSettings.getRoute( '/contact-forms/' + postId ),
 | |
| 				beforeSend: function( xhr ) {
 | |
| 					xhr.setRequestHeader( 'X-WP-Nonce', wpcf7.apiSettings.nonce );
 | |
| 				},
 | |
| 				data: data
 | |
| 			} ).done( function( response ) {
 | |
| 				wpcf7.configValidator.errors = response.config_errors;
 | |
| 				wpcf7.updateConfigErrors();
 | |
| 			} );
 | |
| 		} );
 | |
| 
 | |
| 		$( window ).on( 'beforeunload', function( event ) {
 | |
| 			var changed = false;
 | |
| 
 | |
| 			$( '#wpcf7-admin-form-element :input[type!="hidden"]' ).each( function() {
 | |
| 				if ( $( this ).is( ':checkbox, :radio' ) ) {
 | |
| 					if ( this.defaultChecked != $( this ).is( ':checked' ) ) {
 | |
| 						changed = true;
 | |
| 					}
 | |
| 				} else if ( $( this ).is( 'select' ) ) {
 | |
| 					$( this ).find( 'option' ).each( function() {
 | |
| 						if ( this.defaultSelected != $( this ).is( ':selected' ) ) {
 | |
| 							changed = true;
 | |
| 						}
 | |
| 					} );
 | |
| 				} else {
 | |
| 					if ( this.defaultValue != $( this ).val() ) {
 | |
| 						changed = true;
 | |
| 					}
 | |
| 				}
 | |
| 			} );
 | |
| 
 | |
| 			if ( changed ) {
 | |
| 				event.returnValue = wpcf7.saveAlert;
 | |
| 				return wpcf7.saveAlert;
 | |
| 			}
 | |
| 		} );
 | |
| 
 | |
| 		$( '#wpcf7-admin-form-element' ).submit( function() {
 | |
| 			if ( 'copy' != this.action.value ) {
 | |
| 				$( window ).off( 'beforeunload' );
 | |
| 			}
 | |
| 
 | |
| 			if ( 'save' == this.action.value ) {
 | |
| 				$( '#publishing-action .spinner' ).addClass( 'is-active' );
 | |
| 			}
 | |
| 		} );
 | |
| 	} );
 | |
| 
 | |
| 	wpcf7.toggleMail2 = function( checkbox ) {
 | |
| 		var $checkbox = $( checkbox );
 | |
| 		var $fieldset = $( 'fieldset',
 | |
| 			$checkbox.closest( '.contact-form-editor-box-mail' ) );
 | |
| 
 | |
| 		if ( $checkbox.is( ':checked' ) ) {
 | |
| 			$fieldset.removeClass( 'hidden' );
 | |
| 		} else {
 | |
| 			$fieldset.addClass( 'hidden' );
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| 	wpcf7.updateConfigErrors = function() {
 | |
| 		var errors = wpcf7.configValidator.errors;
 | |
| 		var errorCount = { total: 0 };
 | |
| 
 | |
| 		$( '[data-config-field]' ).each( function() {
 | |
| 			$( this ).removeAttr( 'aria-invalid' );
 | |
| 			$( this ).next( 'ul.config-error' ).remove();
 | |
| 
 | |
| 			var section = $( this ).attr( 'data-config-field' );
 | |
| 
 | |
| 			if ( errors[ section ] ) {
 | |
| 				var $list = $( '<ul></ul>' ).attr( {
 | |
| 					'role': 'alert',
 | |
| 					'class': 'config-error'
 | |
| 				} );
 | |
| 
 | |
| 				$.each( errors[ section ], function( i, val ) {
 | |
| 					var $li = $( '<li></li>' ).append(
 | |
| 						wpcf7.iconInCircle( '!' )
 | |
| 					).append(
 | |
| 						$( '<span class="screen-reader-text"></span>' ).text( wpcf7.configValidator.iconAlt )
 | |
| 					).append( ' ' );
 | |
| 
 | |
| 					if ( val.link ) {
 | |
| 						$li.append(
 | |
| 							$( '<a></a>' ).attr( 'href', val.link ).text( val.message )
 | |
| 						);
 | |
| 					} else {
 | |
| 						$li.text( val.message );
 | |
| 					}
 | |
| 
 | |
| 					$li.appendTo( $list );
 | |
| 
 | |
| 					var tab = section
 | |
| 						.replace( /^mail_\d+\./, 'mail.' ).replace( /\..*$/, '' );
 | |
| 
 | |
| 					if ( ! errorCount[ tab ] ) {
 | |
| 						errorCount[ tab ] = 0;
 | |
| 					}
 | |
| 
 | |
| 					errorCount[ tab ] += 1;
 | |
| 
 | |
| 					errorCount.total += 1;
 | |
| 				} );
 | |
| 
 | |
| 				$( this ).after( $list ).attr( { 'aria-invalid': 'true' } );
 | |
| 			}
 | |
| 		} );
 | |
| 
 | |
| 		$( '#contact-form-editor-tabs > li' ).each( function() {
 | |
| 			var $item = $( this );
 | |
| 			$item.find( '.icon-in-circle' ).remove();
 | |
| 			var tab = $item.attr( 'id' ).replace( /-panel-tab$/, '' );
 | |
| 
 | |
| 			$.each( errors, function( key, val ) {
 | |
| 				key = key.replace( /^mail_\d+\./, 'mail.' );
 | |
| 
 | |
| 				if ( key.replace( /\..*$/, '' ) == tab.replace( '-', '_' ) ) {
 | |
| 					var $mark = wpcf7.iconInCircle( '!' );
 | |
| 					$item.find( 'a.ui-tabs-anchor' ).first().append( $mark );
 | |
| 					return false;
 | |
| 				}
 | |
| 			} );
 | |
| 
 | |
| 			var $tabPanelError = $( '#' + tab + '-panel > div.config-error:first' );
 | |
| 			$tabPanelError.empty();
 | |
| 
 | |
| 			if ( errorCount[ tab.replace( '-', '_' ) ] ) {
 | |
| 				$tabPanelError.append( wpcf7.iconInCircle( '!' ) );
 | |
| 
 | |
| 				if ( 1 < errorCount[ tab.replace( '-', '_' ) ] ) {
 | |
| 					var manyErrorsInTab = wpcf7.configValidator.manyErrorsInTab
 | |
| 						.replace( '%d', errorCount[ tab.replace( '-', '_' ) ] );
 | |
| 					$tabPanelError.append( manyErrorsInTab );
 | |
| 				} else {
 | |
| 					$tabPanelError.append( wpcf7.configValidator.oneErrorInTab );
 | |
| 				}
 | |
| 			}
 | |
| 		} );
 | |
| 
 | |
| 		$( '#misc-publishing-actions .misc-pub-section.config-error' ).remove();
 | |
| 
 | |
| 		if ( errorCount.total ) {
 | |
| 			var $warning = $( '<div></div>' )
 | |
| 				.addClass( 'misc-pub-section config-error' )
 | |
| 				.append( wpcf7.iconInCircle( '!' ) );
 | |
| 
 | |
| 			if ( 1 < errorCount.total ) {
 | |
| 				$warning.append(
 | |
| 					wpcf7.configValidator.manyErrors.replace( '%d', errorCount.total )
 | |
| 				);
 | |
| 			} else {
 | |
| 				$warning.append( wpcf7.configValidator.oneError );
 | |
| 			}
 | |
| 
 | |
| 			$warning.append( '<br />' ).append(
 | |
| 				$( '<a></a>' )
 | |
| 					.attr( 'href', wpcf7.configValidator.docUrl )
 | |
| 					.text( wpcf7.configValidator.howToCorrect )
 | |
| 			);
 | |
| 
 | |
| 			$( '#misc-publishing-actions' ).append( $warning );
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| 	/**
 | |
| 	 * Copied from wptitlehint() in wp-admin/js/post.js
 | |
| 	 */
 | |
| 	wpcf7.titleHint = function() {
 | |
| 		var $title = $( '#title' );
 | |
| 		var $titleprompt = $( '#title-prompt-text' );
 | |
| 
 | |
| 		if ( '' === $title.val() ) {
 | |
| 			$titleprompt.removeClass( 'screen-reader-text' );
 | |
| 		}
 | |
| 
 | |
| 		$titleprompt.click( function() {
 | |
| 			$( this ).addClass( 'screen-reader-text' );
 | |
| 			$title.focus();
 | |
| 		} );
 | |
| 
 | |
| 		$title.blur( function() {
 | |
| 			if ( '' === $(this).val() ) {
 | |
| 				$titleprompt.removeClass( 'screen-reader-text' );
 | |
| 			}
 | |
| 		} ).focus( function() {
 | |
| 			$titleprompt.addClass( 'screen-reader-text' );
 | |
| 		} ).keydown( function( e ) {
 | |
| 			$titleprompt.addClass( 'screen-reader-text' );
 | |
| 			$( this ).unbind( e );
 | |
| 		} );
 | |
| 	};
 | |
| 
 | |
| 	wpcf7.iconInCircle = function( icon ) {
 | |
| 		var $span = $( '<span class="icon-in-circle" aria-hidden="true"></span>' );
 | |
| 		return $span.text( icon );
 | |
| 	};
 | |
| 
 | |
| 	wpcf7.apiSettings.getRoute = function( path ) {
 | |
| 		var url = wpcf7.apiSettings.root;
 | |
| 
 | |
| 		url = url.replace(
 | |
| 			wpcf7.apiSettings.namespace,
 | |
| 			wpcf7.apiSettings.namespace + path );
 | |
| 
 | |
| 		return url;
 | |
| 	};
 | |
| 
 | |
| } )( jQuery );
 |