jQuery(document).ready(function($) {
var allRows;
var acf_settings_collapse = acf.model.extend({
actions: {
'open_field': 'render_fields'
},
events: {
'change .hide-collapse': 'change_collapse',
},
render_fields: function(){
var self = this;
$('.acf-field-object.open').each(function(){
self.render_field( $(this) );
});
},
render_field: function( $field ){
// vars
var $input = $field.find('.hide-collapse'),
checked = $input.prop('checked'),
$td = $input.closest('.acf-field');
if( checked ) {
$td.siblings('[data-name*="collapse_all"]').hide();
$td.siblings('[data-name="btn-icon-only"]').hide();
} else {
$td.siblings('[data-name*="collapse_all"]').show();
$td.siblings('[data-name="btn-icon-only"]').show();
}
},
change_collapse: function( e ){
// bail early if not correct field type
if( e.$field.attr('data-type') != 'repeater' && e.$field.attr('data-type') != 'flexible_content' ) {
return;
}
// vars
var $input = e.$el,
checked = e.$el.prop('checked'),
$td = $input.closest('.acf-field');
if( checked ) {
$td.siblings('[data-name*="collapse_all"]').hide();
$td.siblings('[data-name="btn-icon-only"]').hide();
} else {
$td.siblings('[data-name*="collapse_all"]').show();
$td.siblings('[data-name="btn-icon-only"]').show();
}
// clear name
// $el.find('.acf-field[data-name="name"] input').val('').trigger('change');
}
});
/**
* set up the buttons on the entire form
*/
function acfRepeaterCollapserInit() {
// HTML to put above each repeater instance & flexible instance
collapseRepeaterButton = '';
collapseFlexButton = '';
// find each repeater instance and add the button
$('.acf-field-repeater').each( function() {
repeater = $(this);
repeater.children('.acf-input').children('.acf-repeater').each(function() {
allRows = repeater.children('.acf-input').children('.acf-repeater').children('.acf-table').children('tbody');
if ( repeater.hasClass('repeater-collapse') ) {
repeater.prepend( collapseRepeaterButton );
}
if ( repeater.hasClass('collapse-all') ) {
allRows.children('.acf-row').not('.acf-clone').each( function() {
$(this).addClass('-collapsed');
});
}
});
if ( allRows.children('.acf-row').not('.acf-clone').length == allRows.children('.acf-row.-collapsed').not('.acf-clone').length ) {
button = repeater.find('.field-repeater-toggle');
button.addClass('collapsed-row');
button.find('span').text(collapsetranslation.expandAll);
}
});
// Bind click event to the button for the Repeater Fields
$('.field-repeater-toggle-all').live('click', function() {
button = $(this);
theRepeater = button.parent().children('.acf-input').children('.acf-repeater');
theRows = theRepeater.children('.acf-table').children('tbody').children('.acf-row').not('.acf-clone');
colspan = theRows.children('.acf-field').length / theRows.length;
if ( button.hasClass('collapsed-row') ) {
button.removeClass('collapsed-row');
button.find('span').text(collapsetranslation.collapseAll);
theRows.removeClass('-collapsed');
theRows.find('.acf-field.-collapsed-target').removeAttr('colspan');
} else {
button.addClass('collapsed-row');
button.find('span').text(collapsetranslation.expandAll);
theRows.addClass('-collapsed');
if ( theRepeater.hasClass('-table') ) {
theRows.children('.acf-field.-collapsed-target').attr('colspan', colspan);
}
}
// prevent bubbling up to parent repeater rowset
event.stopPropagation();
});
// find each flexible instance and add the button
$('.acf-field-flexible-content').each( function() {
affectedFlexible = $(this);
affectedFlexible.data('acf-rowset-collapsed', false).attr('aria-expanded', false);
if ( affectedFlexible.hasClass('flexible-collapse') ) {
affectedFlexible.prepend( collapseFlexButton ).data('acf-rowset-collapsed', false);
}
allRows = affectedFlexible.children('.acf-input').children('.acf-flexible-content').children('.values');
if ( affectedFlexible.hasClass('collapse-all') ) {
allRows.children('.layout').each( function() {
$(this).addClass('-collapsed');
});
}
if ( allRows.children('.layout').length == allRows.children('.layout.-collapsed').length ) {
button = affectedFlexible.find('.field-flexible-toggle-all');
button.addClass('collapsed-row');
button.find('span').text(collapsetranslation.expandAll);
}
});
// Bind click event to the button for the Flexible Content Fields
$('.field-flexible-toggle-all').live('click', function() {
button = $(this);
theFlex = button.parent().children('.acf-input').children('.acf-flexible-content');
theRows = theFlex.children('.values').children('.layout');
if ( button.hasClass('collapsed-row') ) {
button.removeClass('collapsed-row');
button.find('span').text(collapsetranslation.collapseAll);
theRows.removeClass('-collapsed');
} else {
button.addClass('collapsed-row');
button.find('span').text(collapsetranslation.expandAll);
theRows.addClass('-collapsed');
}
// prevent bubbling up to parent repeater rowset
event.stopPropagation();
});
}
// Initiatilize the plugin
acfRepeaterCollapserInit();
});