%PDF- %PDF-
| Direktori : /home/vacivi36/public_bakcup/old/wp-content/plugins/templatesnext-toolkit/inc/meta-box/js/ |
| Current File : /home/vacivi36/public_bakcup/old/wp-content/plugins/templatesnext-toolkit/inc/meta-box/js/clone.js |
jQuery( function ( $ )
{
'use strict';
/**
* Clone fields
* @param $container A div container which has all fields
* @return void
*/
function clone( $container )
{
var $clone_last = $container.find( '.rwmb-clone:last' ),
$clone = $clone_last.clone(),
$input;
$clone.insertAfter( $clone_last );
$input = $clone.find( ':input[class|="rwmb"]' );
// Increment each field type
$input.each( function ()
{
var $this = $( this );
if ( $this.attr( 'type' ) === 'radio' || $this.attr( 'type' ) === 'checkbox' )
{
// Reset 'checked' attribute
$this.removeAttr( 'checked' );
}
else
{
// Reset value
$this.val( '' );
}
// Get the field name, and increment
var name = $this.attr( 'name' ).replace( /\[(\d+)\]/, function ( match, p1 )
{
return '[' + ( parseInt( p1, 10 ) + 1 ) + ']';
} );
// Update the "name" attribute
$this.attr( 'name', name );
// Get the field id, and increment
// Not all fields require id, such as 'radio', 'checkbox_list'
var id = $this.attr( 'id' );
if ( id )
{
if ( /_(\d+)/.test( id ) )
{
id = id.replace( /_(\d+)/, function ( match, p1 )
{
return '_' + ( parseInt( p1, 10 ) + 1 );
} );
}
else
{
id += '_1';
}
// Update the "id" attribute
$this.attr( 'id', id );
}
// Update the address_button "value" attribute
var $address_button = $clone.find( '.rwmb-map-goto-address-button' );
if ( $address_button )
{
var value = $address_button.attr( 'value' );
if ( /_(\d+)/.test( value ) )
{
value = value.replace( /_(\d+)/, function ( match, p1 )
{
return '_' + ( parseInt( p1, 10 ) + 1 );
} );
}
else
{
value += '_1';
}
$address_button.attr( 'value', value );
}
} );
// Toggle remove buttons
toggleRemoveButtons( $input );
// Trigger custom clone event
$input.trigger( 'clone' );
}
/**
* Hide remove buttons when there's only 1 of them
*
* @param $el jQuery element. If not supplied, the function will applies for all fields
*
* @return void
*/
function toggleRemoveButtons( $el )
{
var $button;
$el = $el || $( '.rwmb-field' );
$el.each( function ()
{
$button = $( this ).find( '.remove-clone' );
if ( $button.length < 2 )
{
$button.hide();
}
else
{
$button.show();
}
} );
}
/**
* Clone WYSIWYG field
* @param $container
* @return void
*/
function cloneWYSIWYG( $container )
{
var $clone_first = $container.find( '.rwmb-clone:first' ),
$clone_last = $container.find( '.rwmb-clone:last' ),
$clone = $( '<div />' ).addClass( 'rwmb-clone' ),
field_name = $clone_last.find( 'textarea.wp-editor-area' ).attr( 'name' ),
field_id = field_name.replace( /\[(\d+)\]/, '' );
//Create some global vars
var new_index = 0;
var new_name = field_name.replace( /\[(\d+)\]/, function ( match, p1 )
{
new_index = ( parseInt( p1, 10 ) + 1 );
return '[' + new_index + ']';
} );
if ( typeof rwmb_cloneable_editors !== 'undefined' && typeof rwmb_cloneable_editors[field_id] !== 'undefined' )
{
//Get HTML of editor from global object
var cloned_editor = $( rwmb_cloneable_editors[field_id] );
//Fill new clone with html form global object
$clone.append( cloned_editor );
//Add remove button to clone
$clone.append( $clone_last.find( '.remove-clone' ).clone() );
//Add new clone after the last clone
$clone.insertAfter( $clone_last );
//Replace ID of field with new ID
var new_id = cloned_editor.attr( 'id' ).replace( /\[(\d+)\]/, '[' + new_index + ']' );
cloned_editor.attr( 'id', new_id );
//Replace all IDs within cloned field
cloned_editor.find( '[id*="' + field_id + '"]' ).each( function ()
{
var id = $( this ).attr( 'id' ).replace( /\[(\d+)\]/, '[' + new_index + ']' );
$( this ).attr( 'id', id );
} );
//Get the new textarea element
var textarea = $( cloned_editor ).find( 'textarea.wp-editor-area' );
// Update the "name" attribute
textarea.attr( 'name', new_name );
//Empty the textarea
textarea.html( '' );
//Update editor link, so we can add media to the new editor
cloned_editor.find( '#insert-media-button' ).data( 'editor', new_name );
//Get TinyMCE setting for our fields
var tmceinit = tinyMCEPreInit.mceInit[$clone_first.find( 'textarea.wp-editor-area' ).attr( 'name' )];
var tmceqtinit = tinyMCEPreInit.qtInit[$clone_first.find( 'textarea.wp-editor-area' ).attr( 'name' )];
//Replace id & elements with new created field names
tmceinit.elements = new_name;
tmceqtinit.id = new_name;
//Initialize TinyMCE
try
{
tinymce.init( tmceinit );
}
catch ( e )
{
}
if ( typeof(QTags) === 'function' )
{
try
{
quicktags( tmceqtinit );
}
catch ( e )
{
}
}
// Toggle remove buttons
toggleRemoveButtons( $clone );
//Trigger custom clone event
textarea.trigger( 'clone' );
}
}
// Add more clones
$( '.add-clone' ).on( 'click', function ( e )
{
e.preventDefault();
var $input = $( this ).parents( '.rwmb-input' );
if ( $( this ).parents( '.rwmb-field' ).hasClass( 'rwmb-wysiwyg-wrapper' ) )
{
cloneWYSIWYG( $input );
}
else
{
clone( $input );
}
toggleRemoveButtons( $input );
} );
// Remove clones
$( '.rwmb-input' ).on( 'click', '.remove-clone', function ( e )
{
e.preventDefault();
var $this = $( this ),
$input = $this.parents( '.rwmb-input' );
// Remove clone only if there're 2 or more of them
if ( $input.find( '.rwmb-clone' ).length <= 1 )
{
return;
}
$this.parent().remove();
// Toggle remove buttons
toggleRemoveButtons( $input );
} );
toggleRemoveButtons();
} );