///
namespace LolitaFramework {
export class CustomizeRepeaters {
/**
* WordPress customizer
* @type {any}
*/
api: any = (window).wp.customize;
/**
* Lolita repeaters
* @type {any}
*/
repeaters: any = (window).LolitaFramework.repeaters;
/**
* Repeaters collection
* @type {any}
*/
public collection: any = [];
/**
* Repeaters controls
*/
constructor() {
var api: any, me:any;
api = this.api;
me = this;
this.repeaters.update();
this.api.bind(
'ready',
() => this.repeaters.widgetUpdate()
);
this.api.RepeaterControl = this.api.Control.extend({
ready: function() {
var control:any, element:any, events:string, type:string;
control = this;
control.container.find('[data-customize-setting-link]').each(
function(index:any, data:any) {
element = jQuery(this);
events = '';
if ( element.is('input, select, textarea') ) {
events += 'change';
if ( element.is('input') ) {
type = element.prop('type');
if ( 'text' === type || 'password' === type ) {
events += ' keyup';
} else if ( 'range' === type ) {
events += ' input propertychange';
}
} else if ( element.is('textarea') ) {
events += ' keyup';
}
}
jQuery(document).on(
events,
element,
(e:any) => me.update(e, control)
);
}
);
}
});
jQuery.extend(
this.api.controlConstructor,
{
'repeater': this.api.RepeaterControl,
}
);
}
/**
* Update
* @param {any} e [description]
* @param {any} control [description]
*/
update(e:any, control:any)
{
var obj:any, keys:any, i:number, k:string, new_obj:any;
obj = (window).jQuery.deparam(control.container.find(':input').serialize());
obj = jQuery.extend({}, obj[control.id]);
this.api.instance(control.id).set(obj);
}
}
(window).LolitaFramework.repeaters = new CustomizeRepeaters();
}