1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-09 16:26:59 +02:00

Fix issue processwire/processwire-issues#1571 which adds support for adding _END fieldset item with ProcessTemplateFieldCreator

This commit is contained in:
matjazpotocnik
2023-08-18 09:00:47 -04:00
committed by Ryan Cramer
parent 754fb2b1fd
commit a8894391a2
4 changed files with 108 additions and 48 deletions

View File

@@ -158,11 +158,10 @@
if(options.fieldset) { if(options.fieldset) {
setupFieldsets(); setupFieldsets();
$original.children('option').each(function() { findFieldsetCloseItems($original);
var name = $(this).text(); $original.on('rebuild', function(e) {
if(name.indexOf('_END') > 0 && name.substring(name.length - 4) == '_END') { console.log('asmSelect REBUILD');
fieldsetCloseItems[name] = $(this); findFieldsetCloseItems($(this));
}
}); });
} }
@@ -1031,6 +1030,21 @@
} }
}); });
} }
/**
* Find all options with a name that ends with _END and populate to fieldsetCloseItems
*
* @param $select
*
*/
function findFieldsetCloseItems($select) {
$select.children('option').each(function() {
var name = $(this).text();
if(name.indexOf('_END') > 0 && name.substring(name.length - 4) == '_END') {
fieldsetCloseItems[name] = $(this);
}
});
}
// initialize for this iteration // initialize for this iteration
init(); init();

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
// made by adrian // made by adrian with fieldset additions by matjazpotocnik
function TemplateFieldAddDialog() { function TemplateFieldAddDialog() {
var $a = $(this); var $a = $(this);
@@ -37,48 +37,94 @@ function TemplateFieldAddDialog() {
} }
$button.hide(); $button.hide();
}); });
// if field has been saved once, now offer a Close & Add button // if field has been saved once, now offer a Close & Add button
if(fieldReady) { if(fieldReady) {
buttons[n] = { buttons[n] = {
'text': $('#fieldgroup_fields').attr('data-closeAddLabel'), 'text': $('#fieldgroup_fields').attr('data-closeAddLabel'),
'class': ($button && $button.hasClass('ui-priority-secondary') ? 'ui-priority-secondary' : ''), 'class': ($button && $button.hasClass('ui-priority-secondary') ? 'ui-priority-secondary' : ''),
'click': function() { 'click': function() {
setTimeout(function() { setTimeout(function() { buttonClicked(); }, 500);
var newFieldId = $icontents.find("#Inputfield_id").last().val(); }
$iframe.dialog('close'); };
var $options = $('#fieldgroup_fields option'); }
var numOptions = $options.length;
$iframe.setButtons(buttons);
$options.eq(1).before($("<option></option>").val(newFieldId).text($icontents.find("#Inputfield_name").val()));
$('#fieldgroup_fields option[value="'+newFieldId+'"]') /*************************************/
.attr('id', 'asm0option'+numOptions)
.attr('data-desc', ($icontents.find("#field_label").val())) function buttonClicked() {
.attr('data-status', ($icontents.find("#Inputfield_type option:selected").text())); var newFieldId = $icontents.find("#Inputfield_id").last().val();
var $options = $('#fieldgroup_fields option');
$("#asmSelect0 option").eq(1).before($("<option></option>") var numOptions = $options.length;
.val(newFieldId).text($icontents.find("#Inputfield_name").val()));
$("#asmSelect0").find('option:selected').removeAttr("selected"); $iframe.dialog('close');
$('#asmSelect0 option[value="'+newFieldId+'"]')
.attr('rel', 'asm0option'+numOptions) $options.eq(1).before($("<option></option>").val(newFieldId).text($icontents.find("#Inputfield_name").val()));
.attr('selected', 'selected')
.addClass('asmOptionDisabled') $('#fieldgroup_fields option[value="'+newFieldId+'"]')
.attr('disabled', 'disabled') .attr('id', 'asm0option'+numOptions)
.trigger('change') .attr('data-desc', ($icontents.find("#field_label").val()))
.removeAttr("selected"); .attr('data-status', ($icontents.find("#Inputfield_type option:selected").text()));
}, 500);
} $("#asmSelect0 option").eq(1).before($("<option></option>")
}; .val(newFieldId).text($icontents.find("#Inputfield_name").val()));
} $("#asmSelect0").find('option:selected').prop('selected', false);
$('#asmSelect0 option[value="'+newFieldId+'"]')
$iframe.setButtons(buttons); .attr('rel', 'asm0option'+numOptions)
}); .attr('selected', 'selected')
.addClass('asmOptionDisabled')
return false; .prop('disabled', 'disabled');
// MP check for Fieldset (Open) and Fieldset in Tab (Open)
var name = $icontents.find('#Inputfield_name').val();
var type = $icontents.find('#Inputfield_type option:selected').val();
if(type === 'FieldtypeFieldsetOpen' || type === 'FieldtypeFieldsetTabOpen') {
// Fieldset added
name = name + '_END';
var numOptions1 = numOptions + 1;
// just an asumption that created _END field has an ID incremented by 1, no way to tell for sure
// other than querying db via ajax, I think it's not worth it
var newFieldId1 = (parseInt(newFieldId) + 1) + '';
$options.eq(1).before($('<option></option>')
.val(newFieldId1)
.text(name)
);
var dataStatus = '';
var dataDesc = '';
$('#fieldgroup_fields option[value="'+newFieldId1+'"]')
.attr('id', 'asm0option'+numOptions1)
.attr('data-desc', dataDesc)
.attr('data-status', dataStatus);
$('#asmSelect0 option').eq(1).after($('<option></option>')
.val(newFieldId1)
.text(name)
);
$('#asmSelect0 option[value="'+newFieldId1+'"]')
.attr('rel', 'asm0option'+numOptions1)
.addClass('asmOptionDisabled')
.prop('disabled', true);
// rebuild event recognized by asmSelect
$('#fieldgroup_fields').trigger('rebuild');
}
$('#asmSelect0 option[value="'+newFieldId+'"]')
.trigger('change')
.prop('selected', false);
}
});
return false;
} }
$(document).ready(function() { $(document).ready(function() {
$('#wrap_fieldgroup_fields p.description a').on('click', TemplateFieldAddDialog); $('#wrap_fieldgroup_fields p.description a').on('click', TemplateFieldAddDialog);
}); });

View File

@@ -1 +1 @@
function TemplateFieldAddDialog(){var $a=$(this);var fieldReady=false;var $iframe=pwModalWindow($a.attr("href"),{},"large");$iframe.on("load",function(){var $button;var buttons=[];var $icontents=$iframe.contents();var n=0;$icontents.find("#breadcrumbs ul.nav, #Inputfield_submit_save_field_copy").hide();$icontents.find("#content form button.ui-button[type=submit]").each(function(){var text=$(this).text();var skip=false;$button=$(this);for(var i=0;i<buttons.length;i++){if(buttons[i].text==text||text.length<1)skip=true}if(!skip){buttons[n]={text:text,class:$button.hasClass("ui-priority-secondary")?"ui-priority-secondary":"",click:function(){$button.trigger("click");fieldReady=true}};n++}$button.hide()});if(fieldReady){buttons[n]={text:$("#fieldgroup_fields").attr("data-closeAddLabel"),class:$button&&$button.hasClass("ui-priority-secondary")?"ui-priority-secondary":"",click:function(){setTimeout(function(){var newFieldId=$icontents.find("#Inputfield_id").last().val();$iframe.dialog("close");var $options=$("#fieldgroup_fields option");var numOptions=$options.length;$options.eq(1).before($("<option></option>").val(newFieldId).text($icontents.find("#Inputfield_name").val()));$('#fieldgroup_fields option[value="'+newFieldId+'"]').attr("id","asm0option"+numOptions).attr("data-desc",$icontents.find("#field_label").val()).attr("data-status",$icontents.find("#Inputfield_type option:selected").text());$("#asmSelect0 option").eq(1).before($("<option></option>").val(newFieldId).text($icontents.find("#Inputfield_name").val()));$("#asmSelect0").find("option:selected").removeAttr("selected");$('#asmSelect0 option[value="'+newFieldId+'"]').attr("rel","asm0option"+numOptions).attr("selected","selected").addClass("asmOptionDisabled").attr("disabled","disabled").trigger("change").removeAttr("selected")},500)}}}$iframe.setButtons(buttons)});return false}$(document).ready(function(){$("#wrap_fieldgroup_fields p.description a").on("click",TemplateFieldAddDialog)}); function TemplateFieldAddDialog(){var $a=$(this);var fieldReady=false;var $iframe=pwModalWindow($a.attr("href"),{},"large");$iframe.on("load",function(){var $button;var buttons=[];var $icontents=$iframe.contents();var n=0;$icontents.find("#breadcrumbs ul.nav, #Inputfield_submit_save_field_copy").hide();$icontents.find("#content form button.ui-button[type=submit]").each(function(){var text=$(this).text();var skip=false;$button=$(this);for(var i=0;i<buttons.length;i++){if(buttons[i].text==text||text.length<1)skip=true}if(!skip){buttons[n]={text:text,class:$button.hasClass("ui-priority-secondary")?"ui-priority-secondary":"",click:function(){$button.trigger("click");fieldReady=true}};n++}$button.hide()});if(fieldReady){buttons[n]={text:$("#fieldgroup_fields").attr("data-closeAddLabel"),class:$button&&$button.hasClass("ui-priority-secondary")?"ui-priority-secondary":"",click:function(){setTimeout(function(){buttonClicked()},500)}}}$iframe.setButtons(buttons);function buttonClicked(){var newFieldId=$icontents.find("#Inputfield_id").last().val();var $options=$("#fieldgroup_fields option");var numOptions=$options.length;$iframe.dialog("close");$options.eq(1).before($("<option></option>").val(newFieldId).text($icontents.find("#Inputfield_name").val()));$('#fieldgroup_fields option[value="'+newFieldId+'"]').attr("id","asm0option"+numOptions).attr("data-desc",$icontents.find("#field_label").val()).attr("data-status",$icontents.find("#Inputfield_type option:selected").text());$("#asmSelect0 option").eq(1).before($("<option></option>").val(newFieldId).text($icontents.find("#Inputfield_name").val()));$("#asmSelect0").find("option:selected").prop("selected",false);$('#asmSelect0 option[value="'+newFieldId+'"]').attr("rel","asm0option"+numOptions).attr("selected","selected").addClass("asmOptionDisabled").prop("disabled","disabled");var name=$icontents.find("#Inputfield_name").val();var type=$icontents.find("#Inputfield_type option:selected").val();if(type==="FieldtypeFieldsetOpen"||type==="FieldtypeFieldsetTabOpen"){name=name+"_END";var numOptions1=numOptions+1;var newFieldId1=parseInt(newFieldId)+1+"";$options.eq(1).before($("<option></option>").val(newFieldId1).text(name));var dataStatus="";var dataDesc="";$('#fieldgroup_fields option[value="'+newFieldId1+'"]').attr("id","asm0option"+numOptions1).attr("data-desc",dataDesc).attr("data-status",dataStatus);$("#asmSelect0 option").eq(1).after($("<option></option>").val(newFieldId1).text(name));$('#asmSelect0 option[value="'+newFieldId1+'"]').attr("rel","asm0option"+numOptions1).addClass("asmOptionDisabled").prop("disabled",true);$("#fieldgroup_fields").trigger("rebuild")}$('#asmSelect0 option[value="'+newFieldId+'"]').trigger("change").prop("selected",false)}});return false}$(document).ready(function(){$("#wrap_fieldgroup_fields p.description a").on("click",TemplateFieldAddDialog)});