1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-09 00:06:55 +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) {
setupFieldsets();
$original.children('option').each(function() {
var name = $(this).text();
if(name.indexOf('_END') > 0 && name.substring(name.length - 4) == '_END') {
fieldsetCloseItems[name] = $(this);
}
findFieldsetCloseItems($original);
$original.on('rebuild', function(e) {
console.log('asmSelect REBUILD');
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
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() {
var $a = $(this);
@@ -37,48 +37,94 @@ function TemplateFieldAddDialog() {
}
$button.hide();
});
// if field has been saved once, now offer a Close & Add button
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;
// if field has been saved once, now offer a Close & Add button
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');
// 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() {
$('#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)});