관리-도구
편집 파일: wp-seo-bulk-editor.js
/* global ajaxurl */ /* global wpseo_bulk_editor_nonce */ /* jshint -W097 */ 'use strict'; var bulk_editor = function( current_table ) { var new_class = current_table.find( '[class^=wpseo-new]' ).first().attr( 'class' ); var new_id = '#' + new_class + '-'; var existing_id = new_id.replace( 'new', 'existing' ); var column_value = current_table.find( 'th[id^=col_existing_yoast]' ).first().text().replace( 'Existing ', '' ); var save_method = new_class.replace( '-new-', '_save_' ); var save_all_method = 'wpseo_save_all_' + current_table.attr( 'class' ).split( 'wpseo_bulk_' )[ 1 ]; var bulk_type = save_method.replace( 'wpseo_save_', '' ); var options = { new_class: '.' + new_class, new_id: new_id, existing_id: existing_id }; var instance = { submit_new: function( id ) { var new_target = options.new_id + id; var existing_target = options.existing_id + id; var new_value; if ( jQuery( options.new_id + id ).prop( 'type' ) === 'select-one' ) { new_value = jQuery( new_target ).find( ':selected' ).text(); } else { new_value = jQuery( new_target ).val(); } var current_value = jQuery( existing_target ).html(); if ( new_value === current_value ) { jQuery( new_target ).val( '' ).focus(); } else { if ( ( new_value === '' ) && !window.confirm( 'Are you sure you want to remove the existing ' + column_value + '?' ) ) { jQuery( new_target ).focus(); jQuery( new_target ).val( '' ).focus(); return; } var data = { action: save_method, _ajax_nonce: wpseo_bulk_editor_nonce, wpseo_post_id: id, new_value: new_value, existing_value: current_value }; jQuery.post( ajaxurl, data, instance.handle_response ); } }, submit_all: function( event ) { event.preventDefault(); var data = { action: save_all_method, _ajax_nonce: wpseo_bulk_editor_nonce }; data.send = false; data.items = {}; data.existing_items = {}; jQuery( options.new_class ).each( function() { var id = jQuery( this ).data( 'id' ); var value = jQuery( this ).val(); var existing_value = jQuery( options.existing_id + id ).html(); if ( value !== '' ) { if ( value === existing_value ) { jQuery( options.new_id + id ).val( '' ).focus(); } else { data.send = true; data.items[ id ] = value; data.existing_items[ id ] = existing_value; } } } ); if ( data.send ) { jQuery.post( ajaxurl, data, instance.handle_responses ); } }, handle_response: function( response, status ) { if ( status !== 'success' ) { return; } var resp = response; if ( typeof resp === 'string' ) { resp = JSON.parse( resp ); } if ( resp instanceof Array ) { jQuery.each( resp, function() { instance.handle_response( this, status ); } ); } else { if ( resp.status === 'success' ) { var new_value = resp[ 'new_' + bulk_type ]; jQuery( options.existing_id + resp.post_id ).html( new_value.replace( /\\(?!\\)/g, '' ) ); jQuery( options.new_id + resp.post_id ).val( '' ).focus(); } } }, handle_responses: function( responses, status ) { var resps = jQuery.parseJSON( responses ); jQuery.each( resps, function() { instance.handle_response( this, status ); } ); }, set_events: function() { current_table.find( '.wpseo-save' ).click( function() { var id = jQuery( this ).data( 'id' ); instance.submit_new( id, this ); } ); current_table.find( '.wpseo-save-all' ).click( instance.submit_all ); current_table.find( options.new_class ).keypress( function( event ) { if ( event.which === 13 ) { event.preventDefault(); var id = jQuery( this ).data( 'id' ); instance.submit_new( id, this ); } } ); } }; return instance; }; jQuery( document ).ready( function() { var parent_tables = jQuery( 'table[class*="wpseo_bulk"]' ); parent_tables.each( function( number, parent_table ) { var current_table = jQuery( parent_table ); var bulk_edit = bulk_editor( current_table ); bulk_edit.set_events(); } ); } );