Import legacy nurinda.co.id website
This commit is contained in:
1 parent
3f59bb9038
commit
6e21646ac4
13389 files changed
+3246690
No files matched your search
@@ -0,0 +1,211 @@
|
||||
/* global jQuery, rwmb_cloneable_editors */
|
||||
|
||||
jQuery( function ( $ )
|
||||
{
|
||||
'use strict';
|
||||
|
||||
// Object holds all methods related to fields' index when clone
|
||||
var cloneIndex = {
|
||||
/**
|
||||
* Set index for fields in a .mashsb-rwmb-clone
|
||||
* @param $clone .mashsb-rwmb-clone element
|
||||
* @param index Index value
|
||||
*/
|
||||
set: function ( $clone, index )
|
||||
{
|
||||
$clone.find( ':input[class|="rwmb"]' ).each( function ()
|
||||
{
|
||||
var $field = $( this );
|
||||
|
||||
// Name attribute
|
||||
var name = $field.attr( 'name' );
|
||||
if ( name )
|
||||
{
|
||||
$field.attr( 'name', cloneIndex.replace( index, name, '[', ']', false ) );
|
||||
}
|
||||
|
||||
// ID attribute
|
||||
var id = this.id;
|
||||
if ( id )
|
||||
{
|
||||
$field.attr( 'id', cloneIndex.replace( index, id, '_' ) );
|
||||
}
|
||||
} );
|
||||
|
||||
// Address button's value attribute
|
||||
var $address = $clone.find( '.mashsb-rwmb-map-goto-address-button' );
|
||||
if ( $address.length )
|
||||
{
|
||||
var value = $address.attr( 'value' );
|
||||
$address.attr( 'value', cloneIndex.replace( index, value, '_' ) );
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Replace an attribute of a field with updated index
|
||||
* @param index New index value
|
||||
* @param value Attribute value
|
||||
* @param before String before returned value
|
||||
* @param after String after returned value
|
||||
* @param alternative Check if attribute does not contain any integer, will reset the attribute?
|
||||
* @return string
|
||||
*/
|
||||
replace: function ( index, value, before, after, alternative )
|
||||
{
|
||||
before = before || '';
|
||||
after = after || '';
|
||||
alternative = alternative || true;
|
||||
|
||||
var regex = new RegExp( cloneIndex.escapeRegex( before ) + '(\\d+)' + cloneIndex.escapeRegex( after ) ),
|
||||
newValue = before + index + after;
|
||||
|
||||
return regex.test( value ) ? value.replace( regex, newValue ) : (alternative ? value + newValue : value );
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper function to escape string in regular expression
|
||||
* @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
escapeRegex: function ( string )
|
||||
{
|
||||
return string.replace( /[.*+?^${}()|[\]\\]/g, "\\$&" );
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper function to create next index for clones
|
||||
* @param $container .mashsb-rwmb-input container
|
||||
* @return integer
|
||||
*/
|
||||
nextIndex: function ( $container )
|
||||
{
|
||||
var nextIndex = $container.data( 'next-index' );
|
||||
$container.data( 'next-index', nextIndex + 1 );
|
||||
return nextIndex;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Clone fields
|
||||
* @param $container A div container which has all fields
|
||||
* @return void
|
||||
*/
|
||||
function clone( $container )
|
||||
{
|
||||
var $last = $container.children( '.mashsb-rwmb-clone:last' ),
|
||||
$clone = $last.clone(),
|
||||
$input = $clone.find( ':input[class|="rwmb"]' ),
|
||||
nextIndex = cloneIndex.nextIndex( $container );
|
||||
|
||||
// Reset value for fields
|
||||
$input.each( function ()
|
||||
{
|
||||
var $field = $( this );
|
||||
if ( $field.is( ':radio' ) || $field.is( ':checkbox' ) )
|
||||
{
|
||||
// Reset 'checked' attribute
|
||||
$field.prop( 'checked', false );
|
||||
}
|
||||
else if ( $field.is( 'select' ) )
|
||||
{
|
||||
// Reset select to first
|
||||
$field.prop( 'selectedIndex', 0 )
|
||||
}
|
||||
else if ( 'hidden' !== $field.attr( 'type' ) )
|
||||
{
|
||||
// Reset value
|
||||
$field.val( '' );
|
||||
}
|
||||
} );
|
||||
|
||||
// Insert Clone
|
||||
$clone.insertAfter( $last );
|
||||
// Set fields index. Must run before trigger clone event.
|
||||
cloneIndex.set( $clone, nextIndex );
|
||||
|
||||
// Trigger custom clone event
|
||||
$input.trigger( 'clone', nextIndex );
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide remove buttons when there's only 1 of them
|
||||
*
|
||||
* @param $container .mashsb-rwmb-input container
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function toggleRemoveButtons( $container )
|
||||
{
|
||||
var $button = $container.find( '.remove-clone' );
|
||||
$button.toggle( $button.length > 1 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle add button
|
||||
* Used with [data-max-clone] attribute. When max clone is reached, the add button is hid and vice versa
|
||||
*
|
||||
* @param $container .mashsb-rwmb-input container
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function toggleAddButton( $container )
|
||||
{
|
||||
var $button = $container.find( '.add-clone' ),
|
||||
maxClone = parseInt( $container.data( 'max-clone' ) ),
|
||||
numClone = $container.find( '.mashsb-rwmb-clone' ).length;
|
||||
|
||||
$button.toggle( isNaN( maxClone ) || ( maxClone && numClone < maxClone ) );
|
||||
}
|
||||
|
||||
$( '#wpbody-content' )
|
||||
// Add clones
|
||||
.on( 'click', '.add-clone', function ( e )
|
||||
{
|
||||
e.preventDefault();
|
||||
|
||||
var $container = $( this ).closest( '.mashsb-rwmb-input' );
|
||||
clone( $container );
|
||||
|
||||
toggleRemoveButtons( $container );
|
||||
toggleAddButton( $container );
|
||||
} )
|
||||
// Remove clones
|
||||
.on( 'click', '.remove-clone', function ( e )
|
||||
{
|
||||
e.preventDefault();
|
||||
|
||||
var $this = $( this ),
|
||||
$container = $this.closest( '.mashsb-rwmb-input' );
|
||||
|
||||
// Remove clone only if there are 2 or more of them
|
||||
if ( $container.find( '.mashsb-rwmb-clone' ).length < 2 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$this.parent().trigger( 'remove' ).remove();
|
||||
toggleRemoveButtons( $container );
|
||||
toggleAddButton( $container )
|
||||
} );
|
||||
|
||||
$( '.mashsb-rwmb-input' ).each( function ()
|
||||
{
|
||||
var $container = $( this );
|
||||
toggleRemoveButtons( $container );
|
||||
toggleAddButton( $container );
|
||||
|
||||
$container
|
||||
.data( 'next-index', $container.children( '.mashsb-rwmb-clone' ).length )
|
||||
.sortable( {
|
||||
handle : '.mashsb-rwmb-clone-icon',
|
||||
placeholder: ' mashsb-rwmb-clone mashsb-rwmb-clone-placeholder',
|
||||
items : '.mashsb-rwmb-clone',
|
||||
start : function ( event, ui )
|
||||
{
|
||||
// Make the placeholder has the same height as dragged item
|
||||
ui.placeholder.height( ui.item.height() );
|
||||
}
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
Reference in new issue
Block a user