Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev dzil #338

Open
wants to merge 31 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
0b977cf
Adding number control By Kartik
DzilJalal Aug 15, 2020
bc16f89
Refactor Kartik Number: Bad Practice By Me
DzilJalal Aug 15, 2020
4c24ee6
Refactor Minify JS
DzilJalal Aug 15, 2020
54d71b2
Fix Select2
DzilJalal Aug 26, 2020
2af7ae4
Regenerated minify js
DzilJalal Oct 3, 2020
429340f
Mnify Js; Select 2 keep spinning
DzilJalal Oct 3, 2020
49d7737
Master to dev dzil tahap 1
DzilJalal Oct 3, 2020
97edbf8
Master to dev dzil tahap 2
DzilJalal Oct 3, 2020
f20e392
Master to dev dzil tahap 3
DzilJalal Oct 3, 2020
44ae50e
Di lokal malah bisa
DzilJalal Oct 3, 2020
c3d940f
Di lokal malah bisa, coba minify
DzilJalal Oct 3, 2020
3cd44e9
Di lokal malah bisa, coba minify ke 2
DzilJalal Oct 3, 2020
f9f0a90
Di lokal malah bisa, coba minify ke 3
DzilJalal Oct 3, 2020
1f42a92
Bug jika bukan di ajax call
DzilJalal Oct 20, 2020
4a41774
Bug jika bukan di ajax call 2
DzilJalal Oct 20, 2020
fe017e6
Remove duplicate code
DzilJalal Oct 21, 2020
a328ec1
Added jui datepicker
DzilJalal Oct 22, 2020
62ce0da
Fix datepicker
DzilJalal Oct 31, 2020
1e39d61
Bug crud non ajax
DzilJalal Jun 17, 2021
c397a68
Remove datepicker JUI
DzilJalal Oct 11, 2021
a0102eb
Revert
DzilJalal Oct 12, 2021
727947a
Revert Back
DzilJalal Oct 12, 2021
1ca337a
Update composer.json
ahmadfadlydziljalal Sep 12, 2022
3483d34
Update yii2-dynamic-form.js
ahmadfadlydziljalal Mar 14, 2024
1c50f81
Update yii2-dynamic-form.min.js
ahmadfadlydziljalal Mar 14, 2024
6d1e277
Chore: Update yii2-dynamic-form.js
ahmadfadlydziljalal Mar 14, 2024
453ac4e
Update yii2-dynamic-form.min.js
ahmadfadlydziljalal Mar 18, 2024
d49a80b
Update yii2-dynamic-form.js
ahmadfadlydziljalal Nov 8, 2024
3ddb01d
Update yii2-dynamic-form.min.js
ahmadfadlydziljalal Nov 8, 2024
6167612
Update DynamicFormWidget.php
ahmadfadlydziljalal Feb 1, 2025
4d778f2
Update DynamicFormWidget.php
ahmadfadlydziljalal Feb 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"widget",
"yii2-dynamicform",
"copy DOM element",
"yii2 dynamic form"
"yii2 dynamic form",
"Dev Dev Dzil"
],
"type": "yii2-extension",
"license": "BSD-3-Clause",
Expand All @@ -26,8 +27,8 @@
],
"require": {
"yiisoft/yii2": "~2.0.5",
"symfony/css-selector": "~2.8|~3.0",
"symfony/dom-crawler": "~2.8|~3.0"
"symfony/css-selector": "*",
"symfony/dom-crawler": "*"
},
"autoload": {
"psr-4": {
Expand Down
21 changes: 19 additions & 2 deletions src/DynamicFormWidget.php
Original file line number Diff line number Diff line change
Expand Up @@ -234,9 +234,26 @@ public function run()
$this->_options['template'] = trim($document->saveHTML());

if (isset($this->_options['min']) && $this->_options['min'] === 0 && $this->model->isNewRecord) {
$content = $this->removeItems($content);
}

/**
* This is will be handle for ajax request,
* if all attribute from formFields at least one attribute is not emtpy,
* prevent the html element to be removed.
*/
$isRemovedItems = true;
foreach ($this->formFields as $field) {
if(!empty($this->model->{$field})) {
$isRemovedItems = false;
break;
}
}

if($isRemovedItems){
$content = $this->removeItems($content);
}

}

$this->hashOptions();
$view = $this->getView();
$widgetRegistered = $this->registerHashVarWidget();
Expand Down
136 changes: 77 additions & 59 deletions src/assets/yii2-dynamic-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@
},

addItem: function (widgetOptions, e, $elem) {
_addItem(widgetOptions, e, $elem);
_addItem(widgetOptions, e, $elem);
},

deleteItem: function (widgetOptions, e, $elem) {
_deleteItem(widgetOptions, e, $elem);
_deleteItem(widgetOptions, e, $elem);
},

updateContainer: function () {
Expand All @@ -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;
};

Expand Down Expand Up @@ -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){
Expand All @@ -208,7 +196,9 @@

widgetsOptions = widgetsOptions.reverse();
for (var i = identifiers.length - 1; i >= 1; i--) {
identifiers[i] = $elem.closest(widgetsOptions[i].widgetItem).index();
if(typeof widgetsOptions[i] !== 'undefined'){
identifiers[i] = $elem.closest(widgetsOptions[i].widgetItem).index();
}
}
}

Expand All @@ -225,7 +215,7 @@
$(this).removeClass('field-' + id).addClass('field-' + newID);
});
// update "for" attribute
$elem.closest(widgetOptions.widgetItem).find("label[for='" + id + "']").attr('for',newID);
$elem.closest(widgetOptions.widgetItem).find("label[for='" + id + "']").attr('for',newID);
}

return newID;
Expand All @@ -250,7 +240,10 @@

widgetsOptions = widgetsOptions.reverse();
for (var i = identifiers.length - 1; i >= 1; i--) {
identifiers[i] = $elem.closest(widgetsOptions[i].widgetItem).index();

if(typeof widgetsOptions[i] !== 'undefined'){
identifiers[i] = $elem.closest(widgetsOptions[i].widgetItem).index();
}
}
}

Expand Down Expand Up @@ -331,7 +324,6 @@
}
}
}

$elem.depdrop(configDepdrop);
};

Expand All @@ -347,14 +339,20 @@
});
}

// "kartik-v/yii2-widget-datepicker"
var $hasDatepicker = $(widgetOptionsRoot.widgetItem).find('[data-krajee-datepicker]');
if ($hasDatepicker.length > 0) {
$hasDatepicker.each(function() {
$(this).parent().removeData().datepicker('remove');
$(this).parent().datepicker(eval($(this).attr('data-krajee-datepicker')));
// JUI Datepicker
/*$( ".picker" ).each(function() {
$( this ).datepicker({
dateFormat : 'dd-mm-yy',
language : 'en',
});
}
});*/

// "kartik-v/yii2-widget-datepicker"
var datePickers = $(widgetOptionsRoot.widgetItem).find('[data-krajee-kvdatepicker]');
datePickers.each(function(index, el) {
//$(this).parent().removeData().kvDatepicker('remove');
$(this).parent().kvDatepicker(eval($(this).attr('data-krajee-kvdatepicker')));
});

// "kartik-v/yii2-widget-timepicker"
var $hasTimepicker = $(widgetOptionsRoot.widgetItem).find('[data-krajee-timepicker]');
Expand Down Expand Up @@ -433,6 +431,8 @@
$(this).unbind();
_restoreKrajeeDepdrop($(this));
}
var configDepdrop = eval($(this).attr('data-krajee-depdrop'));
$(this).depdrop(configDepdrop);
});
}

Expand All @@ -442,34 +442,52 @@
$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)
});
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());
});
}
});
}

$('#' + id).on('select2:unselect', function() {
window[kvClose] = true;
});
// "kartik-v/yii2-numbercontrol"
var $hasNumberControl = $(widgetOptionsRoot.widgetItem).find('[data-krajee-numbercontrol]');
if ($hasNumberControl.length > 0) {
$hasNumberControl.each(function() {
var configNumberControl = eval($(this).attr('data-krajee-numbercontrol'));
configNumberControl.displayId = $(this).parent().prev().attr('id');
if ($(this).data('numberControl')) { $(this).numberControl('destroy'); }
$(this).numberControl(configNumberControl);
});
}

if (configDepdrop) {
var loadingText = (configDepdrop.loadingText) ? configDepdrop.loadingText : 'Loading ...';
initDepdropS2(id, loadingText);
// kartik datecontrol
var $hasDateControl = $(widgetOptionsRoot.widgetItem).find('[data-krajee-datecontrol]');
if ($hasDateControl.length > 0) {
$hasDateControl.each(function() {
var id = $(this).attr('id');
var dcElementOptions = eval($(this).attr('data-krajee-datecontrol'));
if (id.indexOf(dcElementOptions.idSave) < 0) {
// initialize the NEW DateControl element
var cdNewOptions = $.extend(true, {}, dcElementOptions);
$types=cdNewOptions.type;
if($types=='datetime'){
$(this).parent().datetimepicker(eval($(this).attr('data-krajee-datetimepicker')));
}else{
$(this).parent().kvDatepicker(eval($(this).attr('data-krajee-kvdatepicker')));
}
cdNewOptions.idSave = $(this).parent().next().attr('id');
$(this).removeAttr('value name data-krajee-datecontrol');
$(this).datecontrol(cdNewOptions);
}
});
}
Expand Down
Loading