This repository has been archived on 2023-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
Omphaloskepsis/plugins/jetpack/modules/custom-post-types/js/many-items.js
2018-03-21 18:19:20 +00:00

113 lines
2.9 KiB
JavaScript

/* jshint onevar: false, smarttabs: true */
(function( $ ){
var menuSelector, nonceInput, methods;
methods = {
init : function( /*options*/ ) {
var $this = this, tbody, row;
this
.on( 'keypress.manyItemsTable', function( event ) {
if ( 13 !== event.which ) {
return;
}
event.preventDefault();
if ( 'function' === typeof FormData ) {
methods.submitRow.apply( $this );
}
methods.addRow.apply( $this );
} )
.on( 'focus.manyItemsTable', ':input', function( /*event*/ ) {
$this.data( 'currentRow', $( this ).parents( 'tr:first' ) );
} );
tbody = this.find( 'tbody:last' );
row = tbody.find( 'tr:first' ).clone();
this.data( 'form', this.parents( 'form:first' ) );
this.data( 'tbody', tbody );
this.data( 'row', row );
this.data( 'currentRow', row );
menuSelector = $( '#nova-menu-tax' );
nonceInput = $( '#_wpnonce' );
return this;
},
destroy : function() {
this.off( '.manyItemsTable' );
return this;
},
submitRow : function() {
var submittedRow, currentInputs, allInputs, partialFormData;
submittedRow = this.data( 'currentRow' );
currentInputs = submittedRow.find( ':input' );
allInputs = this.data( 'form' ).find( ':input' ).not( currentInputs ).attr( 'disabled', true ).end();
partialFormData = new FormData( this.data( 'form' ).get( 0 ) );
partialFormData.append( 'ajax', '1' );
partialFormData.append( 'nova_menu_tax', menuSelector.val() );
partialFormData.append( '_wpnonce', nonceInput.val() );
allInputs.attr( 'disabled', false );
$.ajax( {
url: '',
type: 'POST',
data: partialFormData,
processData: false,
contentType: false
} ).complete( function( xhr ) {
submittedRow.html( xhr.responseText );
} );
currentInputs.attr( 'disabled', true );
return this;
},
addRow : function() {
var row = this.data( 'row' ).clone();
row.appendTo( this.data( 'tbody' ) );
row.find( ':input:first' ).focus();
return this;
}
};
$.fn.manyItemsTable = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ) );
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.manyItemsTable' );
return this;
}
};
$.fn.clickAddRow = function() {
var tbody = this.find( 'tbody:last' ),
row = tbody.find( 'tr:first' ).clone();
$( row ).find( 'input, textarea' ).val( '' );
$( row ).appendTo( tbody );
};
})( jQuery );
jQuery( '.many-items-table' ).one( 'focus', ':input', function( event ) {
jQuery( event.delegateTarget ).manyItemsTable();
} );
jQuery( '.many-items-table' ).on( 'click', 'a.nova-new-row', function( event ) {
jQuery( event.delegateTarget ).clickAddRow();
} );