From 1d06ef80ad307da21ff059296e0fed818147d3ef Mon Sep 17 00:00:00 2001 From: aliahmad6666 <96882058+aliahmad6666@users.noreply.github.com> Date: Mon, 18 Jul 2022 16:36:54 +0300 Subject: [PATCH 1/4] fix select2 with dynamicForm --- src/assets/yii2-dynamic-form.js | 138 ++++++++++++++------------------ 1 file changed, 59 insertions(+), 79 deletions(-) diff --git a/src/assets/yii2-dynamic-form.js b/src/assets/yii2-dynamic-form.js index fbe3045..eebdec3 100644 --- a/src/assets/yii2-dynamic-form.js +++ b/src/assets/yii2-dynamic-form.js @@ -66,30 +66,18 @@ }); $template.find('input, textarea, select').each(function() { - if ($(this).is(':checkbox') || $(this).is(':radio')) { - var type = ($(this).is(':checkbox')) ? 'checkbox' : 'radio'; - var inputName = $(this).attr('name'); - var $inputHidden = $template.find('input[type="hidden"][name="' + inputName + '"]').first(); - var count = $template.find('input[type="' + type +'"][name="' + inputName + '"]').length; - - if ($inputHidden && count === 1) { - $(this).val(1); - $inputHidden.val(0); - } + $(this).val(''); + }); - $(this).prop('checked', false); - } else if($(this).is('select')) { - $(this).find('option:selected').removeAttr("selected"); - } else { - $(this).val(''); + $template.find('input[type="checkbox"], input[type="radio"]').each(function() { + var inputName = $(this).attr('name'); + var $inputHidden = $template.find('input[type="hidden"][name="' + inputName + '"]').first(); + if ($inputHidden) { + $(this).val(1); + $inputHidden.val(0); } }); - // remove "error/success" css class - var yiiActiveFormData = $('#' + widgetOptions.formId).yiiActiveForm('data'); - $template.find('.' + yiiActiveFormData.settings.errorCssClass).removeClass(yiiActiveFormData.settings.errorCssClass); - $template.find('.' + yiiActiveFormData.settings.successCssClass).removeClass(yiiActiveFormData.settings.successCssClass); - return $template; }; @@ -115,7 +103,7 @@ var count = _count($elem, widgetOptions); if (count < widgetOptions.limit) { - $toclone = $(widgetOptions.template); + $toclone = widgetOptions.template; $newclone = $toclone.clone(false, false); if (widgetOptions.insertPosition === 'top') { @@ -199,7 +187,7 @@ matches[2] = matches[2].substring(1, matches[2].length - 1); var identifiers = matches[2].split('-'); identifiers[0] = index; - + if (identifiers.length > 1) { var widgetsOptions = []; $elem.parents('div[data-dynamicform]').each(function(i){ @@ -318,35 +306,9 @@ }); }; - var _restoreKrajeeDepdrop = function($elem) { - var configDepdrop = $.extend(true, {}, eval($elem.attr('data-krajee-depdrop'))); - var inputID = $elem.attr('id'); - var matchID = inputID.match(regexID); - - if (matchID && matchID.length === 4) { - for (index = 0; index < configDepdrop.depends.length; ++index) { - var match = configDepdrop.depends[index].match(regexID); - if (match && match.length === 4) { - configDepdrop.depends[index] = match[1] + matchID[2] + match[3]; - } - } - } - - $elem.depdrop(configDepdrop); - }; - var _restoreSpecialJs = function(widgetOptions) { var widgetOptionsRoot = _getWidgetOptionsRoot(widgetOptions); - // "jquery.inputmask" - var $hasInputmask = $(widgetOptionsRoot.widgetItem).find('[data-plugin-inputmask]'); - if ($hasInputmask.length > 0) { - $hasInputmask.each(function() { - $(this).inputmask('remove'); - $(this).inputmask(eval($(this).attr('data-plugin-inputmask'))); - }); - } - // "kartik-v/yii2-widget-datepicker" var $hasDatepicker = $(widgetOptionsRoot.widgetItem).find('[data-krajee-datepicker]'); if ($hasDatepicker.length > 0) { @@ -424,15 +386,48 @@ }); } + var _restoreKrajeeDepdrop = function($elem) { + var configDepdrop = $.extend(true, {}, eval($elem.attr('data-krajee-depdrop'))); + var inputID = $elem.attr('id'); + var matchID = inputID.match(regexID); + + if (matchID && matchID.length === 4) { + for (index = 0; index < configDepdrop.depends.length; ++index) { + var match = configDepdrop.depends[index].match(regexID); + if (match && match.length === 4) { + configDepdrop.depends[index] = match[1] + matchID[2] + match[3]; + } + } + } + $elem.depdrop(configDepdrop); + }; + // "kartik-v/yii2-widget-depdrop" + var _restoreKrajeeDepdrop = function($elem) { + var configDepdrop = $.extend(true, {}, eval($elem.attr('data-krajee-depdrop'))); + var inputID = $elem.attr('id'); + var matchID = inputID.match(regexID); + + if (matchID && matchID.length === 4) { + for (index = 0; index < configDepdrop.depends.length; ++index) { + var match = configDepdrop.depends[index].match(regexID); + if (match && match.length === 4) { + configDepdrop.depends[index] = match[1] + matchID[2] + match[3]; + } + } + } + $elem.depdrop(configDepdrop); + }; var $hasDepdrop = $(widgetOptionsRoot.widgetItem).find('[data-krajee-depdrop]'); if ($hasDepdrop.length > 0) { $hasDepdrop.each(function() { if ($(this).data('select2') === undefined) { - $(this).removeData().off(); - $(this).unbind(); - _restoreKrajeeDepdrop($(this)); - } + $(this).removeData().off(); + $(this).unbind(); + _restoreKrajeeDepdrop($(this)); + } + var configDepdrop = eval($(this).attr('data-krajee-depdrop')); + $(this).depdrop(configDepdrop); }); } @@ -442,34 +437,19 @@ $hasSelect2.each(function() { var id = $(this).attr('id'); var configSelect2 = eval($(this).attr('data-krajee-select2')); - - if ($(this).data('select2')) { - $(this).select2('destroy'); - } - - var configDepdrop = $(this).data('depdrop'); - if (configDepdrop) { - configDepdrop = $.extend(true, {}, configDepdrop); - $(this).removeData().off(); - $(this).unbind(); - _restoreKrajeeDepdrop($(this)); - } - - $.when($('#' + id).select2(configSelect2)).done(initSelect2Loading(id, '.select2-container--krajee')); - - var kvClose = 'kv_close_' + id.replace(/\-/g, '_'); - - $('#' + id).on('select2:opening', function(ev) { - initSelect2DropStyle(id, kvClose, ev); + $.when($('#' + id).select2(configSelect2)).done(initS2Loading(id)); + $('#' + id).on('select2-open', function() { + initSelect2DropStyle(id) }); - - $('#' + id).on('select2:unselect', function() { - window[kvClose] = true; - }); - - if (configDepdrop) { - var loadingText = (configDepdrop.loadingText) ? configDepdrop.loadingText : 'Loading ...'; - initDepdropS2(id, loadingText); + if ($(this).attr('data-krajee-depdrop')) { + $(this).on('depdrop.beforeChange', function(e,i,v) { + var configDepdrop = eval($(this).attr('data-krajee-depdrop')); + var loadingText = (configDepdrop.loadingText)? configDepdrop.loadingText : 'Loading ...'; + $('#' + id).select2('data', {text: loadingText}); + }); + $(this).on('depdrop.change', function(e,i,v,c) { + $('#' + id).select2('val', $('#' + id).val()); + }); } }); } From 71666743c944ad8ee79df1ee9d7948d4b2999d81 Mon Sep 17 00:00:00 2001 From: aliahmad6666 <96882058+aliahmad6666@users.noreply.github.com> Date: Mon, 18 Jul 2022 17:30:01 +0300 Subject: [PATCH 2/4] fix namespace --- src/DynamicFormAsset.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DynamicFormAsset.php b/src/DynamicFormAsset.php index a88ce18..6caa51c 100644 --- a/src/DynamicFormAsset.php +++ b/src/DynamicFormAsset.php @@ -5,7 +5,7 @@ * @license https://github.com/wbraganca/yii2-dynamicform/blob/master/LICENSE */ -namespace wbraganca\dynamicform; +namespace wbraganca\dynamicform\src; /** * Asset bundle for dynamicform Widget From 4192a7bf9fdb63de4de78e225848066af306f723 Mon Sep 17 00:00:00 2001 From: aliahmad6666 <96882058+aliahmad6666@users.noreply.github.com> Date: Mon, 18 Jul 2022 17:30:28 +0300 Subject: [PATCH 3/4] Update DynamicFormWidget.php --- src/DynamicFormWidget.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DynamicFormWidget.php b/src/DynamicFormWidget.php index 4fe09fd..68f2eab 100644 --- a/src/DynamicFormWidget.php +++ b/src/DynamicFormWidget.php @@ -5,7 +5,7 @@ * @license https://github.com/wbraganca/yii2-dynamicform/blob/master/LICENSE */ -namespace wbraganca\dynamicform; +namespace wbraganca\dynamicform\src; use Yii; use yii\helpers\Html; From 5dc94ebed8ee508f922247fd2bb47f5d69daaa2e Mon Sep 17 00:00:00 2001 From: aliahmad6666 <96882058+aliahmad6666@users.noreply.github.com> Date: Thu, 21 Jul 2022 14:56:17 +0300 Subject: [PATCH 4/4] Update yii2-dynamic-form.min.js --- src/assets/yii2-dynamic-form.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/yii2-dynamic-form.min.js b/src/assets/yii2-dynamic-form.min.js index 75c934e..4709274 100644 --- a/src/assets/yii2-dynamic-form.min.js +++ b/src/assets/yii2-dynamic-form.min.js @@ -1 +1 @@ -!function($){var pluginName="yiiDynamicForm",regexID=/^(.+?)([-\d-]{1,})(.+)$/i,regexName=/(^.+?)([\[\d{1,}\]]{1,})(\[.+\]$)/i;$.fn.yiiDynamicForm=function(e){return methods[e]?methods[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?($.error("Method "+e+" does not exist on jQuery.yiiDynamicForm"),!1):methods.init.apply(this,arguments)};var events={beforeInsert:"beforeInsert",afterInsert:"afterInsert",beforeDelete:"beforeDelete",afterDelete:"afterDelete",limitReached:"limitReached"},methods={init:function(e){return this.each(function(){e.template=_parseTemplate(e)})},addItem:function(e,t,i){_addItem(e,t,i)},deleteItem:function(e,t,i){_deleteItem(e,t,i)},updateContainer:function(){var widgetOptions=eval($(this).attr("data-dynamicform"));_updateAttributes(widgetOptions),_restoreSpecialJs(widgetOptions),_fixFormValidaton(widgetOptions)}},_parseTemplate=function(widgetOptions){var $template=$(widgetOptions.template);$template.find("div[data-dynamicform]").each(function(){var widgetOptions=eval($(this).attr("data-dynamicform")),item;1<$(widgetOptions.widgetItem).length&&(item=$(this).find(widgetOptions.widgetItem).first()[0].outerHTML,$(this).find(widgetOptions.widgetBody).html(item))}),$template.find("input, textarea, select").each(function(){var e,t,i,n;$(this).is(":checkbox")||$(this).is(":radio")?(e=$(this).is(":checkbox")?"checkbox":"radio",t=$(this).attr("name"),i=$template.find('input[type="hidden"][name="'+t+'"]').first(),n=$template.find('input[type="'+e+'"][name="'+t+'"]').length,i&&1===n&&($(this).val(1),i.val(0)),$(this).prop("checked",!1)):$(this).is("select")?$(this).find("option:selected").removeAttr("selected"):$(this).val("")});var yiiActiveFormData=$("#"+widgetOptions.formId).yiiActiveForm("data");return $template.find("."+yiiActiveFormData.settings.errorCssClass).removeClass(yiiActiveFormData.settings.errorCssClass),$template.find("."+yiiActiveFormData.settings.successCssClass).removeClass(yiiActiveFormData.settings.successCssClass),$template},_getWidgetOptionsRoot=function(widgetOptions){return eval($(widgetOptions.widgetBody).parents("div[data-dynamicform]").last().attr("data-dynamicform"))},_getLevel=function(e){var t=e.parents("div[data-dynamicform]").length;return t=t<0?0:t},_count=function(e,t){return e.closest("."+t.widgetContainer).find(t.widgetItem).length},_createIdentifiers=function(e){return new Array(e+2).join("0").split("")},_addItem=function(e,t,i){_count(i,e)e.min&&($todelete=i.closest(e.widgetItem),!1!==$("."+e.widgetContainer).triggerHandler(events.beforeDelete,$todelete)&&(_removeValidations($todelete,e,n),$todelete.remove(),_updateAttributes(e),_restoreSpecialJs(e),_fixFormValidaton(e),$("."+e.widgetContainer).triggerHandler(events.afterDelete)))},_updateAttrID=function($elem,index){var widgetOptions=eval($elem.closest("div[data-dynamicform]").attr("data-dynamicform")),id=$elem.attr("id"),newID=id;if(void 0!==id){var matches=id.match(regexID);if(matches&&4===matches.length){matches[2]=matches[2].substring(1,matches[2].length-1);var identifiers=matches[2].split("-");if(identifiers[0]=index,11){var item=$(this).find(widgetOptions.widgetItem).first()[0].outerHTML;$(this).find(widgetOptions.widgetBody).html(item)}}),$template.find("input, textarea, select").each(function(){$(this).val("")}),$template.find('input[type="checkbox"], input[type="radio"]').each(function(){var b=$(this).attr("name"),a=$template.find('input[type="hidden"][name="'+b+'"]').first();a&&($(this).val(1),a.val(0))}),$template},_getWidgetOptionsRoot=function(widgetOptions){return eval($(widgetOptions.widgetBody).parents("div[data-dynamicform]").last().attr("data-dynamicform"))},_getLevel=function(b){var a=b.parents("div[data-dynamicform]").length;return a<0?0:a},_count=function(b,a){return b.closest("."+a.widgetContainer).find(a.widgetItem).length},_createIdentifiers=function(a){return new Array(a+2).join("0").split("")},_addItem=function(a,c,b){_count(b,a)1){$elem.find("div[data-dynamicform]").each(function(){for(var currentWidgetOptions=eval($(this).attr("data-dynamicform")),level=_getLevel($(this)),identifiers=_createIdentifiers(level),numItems=$(this).find(currentWidgetOptions.widgetItem).length,i=1;i<=numItems-1;i++){var aux=identifiers;aux[level]=i,currentWidgetOptions.fields.forEach(function(b){var a=b.id.replace("{}",aux.join("-"));"undefined"!==$("#"+currentWidgetOptions.formId).yiiActiveForm("find",a)&&$("#"+currentWidgetOptions.formId).yiiActiveForm("remove",a)})}});var level=_getLevel($elem.closest("."+widgetOptions.widgetContainer)),widgetOptionsRoot=_getWidgetOptionsRoot(widgetOptions),identifiers=_createIdentifiers(level);identifiers[0]=$(widgetOptionsRoot.widgetItem).length-1,identifiers[level]=count-1,widgetOptions.fields.forEach(function(b){var a=b.id.replace("{}",identifiers.join("-"));"undefined"!==$("#"+widgetOptions.formId).yiiActiveForm("find",a)&&$("#"+widgetOptions.formId).yiiActiveForm("remove",a)})}},_deleteItem=function(a,e,b){var c=_count(b,a);if(c>a.min){$todelete=b.closest(a.widgetItem);var d=$("."+a.widgetContainer).triggerHandler(events.beforeDelete,$todelete);!1!==d&&(_removeValidations($todelete,a,c),$todelete.remove(),_updateAttributes(a),_restoreSpecialJs(a),_fixFormValidaton(a),$("."+a.widgetContainer).triggerHandler(events.afterDelete))}},_updateAttrID=function($elem,index){var widgetOptions=eval($elem.closest("div[data-dynamicform]").attr("data-dynamicform")),id=$elem.attr("id"),newID=id;if(void 0!==id){var matches=id.match(regexID);if(matches&&4===matches.length){matches[2]=matches[2].substring(1,matches[2].length-1);var identifiers=matches[2].split("-");if(identifiers[0]=index,identifiers.length>1){var widgetsOptions=[];$elem.parents("div[data-dynamicform]").each(function(i){widgetsOptions[i]=eval($(this).attr("data-dynamicform"))}),widgetsOptions=widgetsOptions.reverse();for(var i=identifiers.length-1;i>=1;i--)identifiers[i]=$elem.closest(widgetsOptions[i].widgetItem).index()}newID=matches[1]+"-"+identifiers.join("-")+"-"+matches[3],$elem.attr("id",newID)}else newID=id+index,$elem.attr("id",newID)}return id!==newID&&($elem.closest(widgetOptions.widgetItem).find(".field-"+id).each(function(){$(this).removeClass("field-"+id).addClass("field-"+newID)}),$elem.closest(widgetOptions.widgetItem).find("label[for='"+id+"']").attr("for",newID)),newID},_updateAttrName=function($elem,index){var name=$elem.attr("name");if(void 0!==name){var matches=name.match(regexName);if(matches&&4===matches.length){matches[2]=matches[2].replace(/\]\[/g,"-").replace(/\]|\[/g,"");var identifiers=matches[2].split("-");if(identifiers[0]=index,identifiers.length>1){var widgetsOptions=[];$elem.parents("div[data-dynamicform]").each(function(i){widgetsOptions[i]=eval($(this).attr("data-dynamicform"))}),widgetsOptions=widgetsOptions.reverse();for(var i=identifiers.length-1;i>=1;i--)identifiers[i]=$elem.closest(widgetsOptions[i].widgetItem).index()}name=matches[1]+"["+identifiers.join("][")+"]"+matches[3],$elem.attr("name",name)}}return name},_updateAttributes=function(a){var b=_getWidgetOptionsRoot(a);$(b.widgetItem).each(function(a){$(this),$(this).find("*").each(function(){_updateAttrID($(this),a),_updateAttrName($(this),a)})})},_fixFormValidatonInput=function(c,a,b,d){void 0!==a&&((a=$.extend(!0,{},a)).id=b,a.container=".field-"+b,a.input="#"+b,a.name=d,a.value=$("#"+b).val(),a.status=0,"undefined"!==$("#"+c.formId).yiiActiveForm("find",b)&&$("#"+c.formId).yiiActiveForm("remove",b),$("#"+c.formId).yiiActiveForm("add",a))},_fixFormValidaton=function(widgetOptions){var widgetOptionsRoot=_getWidgetOptionsRoot(widgetOptions);$(widgetOptionsRoot.widgetBody).find("input, textarea, select").each(function(){var id=$(this).attr("id"),name=$(this).attr("name");if(void 0!==id&& void 0!==name){currentWidgetOptions=eval($(this).closest("div[data-dynamicform]").attr("data-dynamicform"));var matches=id.match(regexID);if(matches&&4===matches.length){matches[2]=matches[2].substring(1,matches[2].length-1);var level=_getLevel($(this)),identifiers=_createIdentifiers(level-1),baseID=matches[1]+"-"+identifiers.join("-")+"-"+matches[3],attribute=$("#"+currentWidgetOptions.formId).yiiActiveForm("find",baseID);_fixFormValidatonInput(currentWidgetOptions,attribute,id,name)}}})},_restoreSpecialJs=function(widgetOptions){var widgetOptionsRoot=_getWidgetOptionsRoot(widgetOptions),$hasDatepicker=$(widgetOptionsRoot.widgetItem).find("[data-krajee-datepicker]");$hasDatepicker.length>0&&$hasDatepicker.each(function(){$(this).parent().removeData().datepicker("remove"),$(this).parent().datepicker(eval($(this).attr("data-krajee-datepicker")))});var $hasTimepicker=$(widgetOptionsRoot.widgetItem).find("[data-krajee-timepicker]");$hasTimepicker.length>0&&$hasTimepicker.each(function(){$(this).removeData().off(),$(this).parent().find(".bootstrap-timepicker-widget").remove(),$(this).unbind(),$(this).timepicker(eval($(this).attr("data-krajee-timepicker")))});var $hasMaskmoney=$(widgetOptionsRoot.widgetItem).find("[data-krajee-maskMoney]");$hasMaskmoney.length>0&&$hasMaskmoney.each(function(){$(this).parent().find("input").removeData().off();var id="#"+$(this).attr("id"),displayID=id+"-disp";$(displayID).maskMoney("destroy"),$(displayID).maskMoney(eval($(this).attr("data-krajee-maskMoney"))),$(displayID).maskMoney("mask",parseFloat($(id).val())),$(displayID).on("change",function(){var a=$(displayID).maskMoney("unmasked")[0];$(id).val(a),$(id).trigger("change")})});var $hasFileinput=$(widgetOptionsRoot.widgetItem).find("[data-krajee-fileinput]");$hasFileinput.length>0&&$hasFileinput.each(function(){$(this).fileinput(eval($(this).attr("data-krajee-fileinput")))});var $hasTouchSpin=$(widgetOptionsRoot.widgetItem).find("[data-krajee-TouchSpin]");$hasTouchSpin.length>0&&$hasTouchSpin.each(function(){$(this).TouchSpin("destroy"),$(this).TouchSpin(eval($(this).attr("data-krajee-TouchSpin")))});var $hasSpectrum=$(widgetOptionsRoot.widgetItem).find("[data-krajee-spectrum]");$hasSpectrum.length>0&&$hasSpectrum.each(function(){var id="#"+$(this).attr("id"),sourceID=id+"-source";$(sourceID).spectrum("destroy"),$(sourceID).unbind(),$(id).unbind();var configSpectrum=eval($(this).attr("data-krajee-spectrum"));configSpectrum.change=function(a){jQuery(id).val(a.toString())},$(sourceID).attr("name",$(sourceID).attr("id")),$(sourceID).spectrum(configSpectrum),$(sourceID).spectrum("set",jQuery(id).val()),$(id).on("change",function(){$(sourceID).spectrum("set",jQuery(id).val())})});var _restoreKrajeeDepdrop=function($elem){var inputID,configDepdrop=$.extend(!0,{},eval($elem.attr("data-krajee-depdrop"))),matchID=$elem.attr("id").match(regexID);if(matchID&&4===matchID.length)for(index=0;index0&&$hasDepdrop.each(function(){void 0===$(this).data("select2")&&($(this).removeData().off(),$(this).unbind(),_restoreKrajeeDepdrop($(this)));var configDepdrop=eval($(this).attr("data-krajee-depdrop"));$(this).depdrop(configDepdrop)});var $hasSelect2=$(widgetOptionsRoot.widgetItem).find("[data-krajee-select2]");$hasSelect2.length>0&&$hasSelect2.each(function(){var id=$(this).attr("id"),configSelect2=eval($(this).attr("data-krajee-select2"));$.when($("#"+id).select2(configSelect2)).done(initS2Loading(id)),$("#"+id).on("select2-open",function(){initSelect2DropStyle(id)}),$(this).attr("data-krajee-depdrop")&&($(this).on("depdrop.beforeChange",function(e,i,v){var configDepdrop=eval($(this).attr("data-krajee-depdrop")),loadingText=configDepdrop.loadingText?configDepdrop.loadingText:"Loading ...";$("#"+id).select2("data",{text:loadingText})}),$(this).on("depdrop.change",function(a,b,c,d){$("#"+id).select2("val",$("#"+id).val())}))})}}(window.jQuery)