From 79bb4c203586832866928b41626198a5e6121fc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C5=BEe=20=C4=8Casar?= Date: Fri, 22 Jul 2016 00:38:32 +0200 Subject: [PATCH] Nested DependsOn --- modules/backend/formwidgets/Repeater.php | 8 ++++++++ .../formwidgets/repeater/partials/_repeater.htm | 3 ++- .../formwidgets/repeater/partials/_repeater_item.htm | 5 ++++- .../backend/widgets/form/assets/js/october.form.js | 11 ++++++++--- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/modules/backend/formwidgets/Repeater.php b/modules/backend/formwidgets/Repeater.php index 0287756de..f67252842 100644 --- a/modules/backend/formwidgets/Repeater.php +++ b/modules/backend/formwidgets/Repeater.php @@ -158,4 +158,12 @@ class Repeater extends FormWidgetBase // Useful for deleting relations } + public function onRefresh() + { + $index = post('_index'); + + $widget = $this->makeItemFormWidget($index); + + return $widget->onRefresh(); + } } diff --git a/modules/backend/formwidgets/repeater/partials/_repeater.htm b/modules/backend/formwidgets/repeater/partials/_repeater.htm index cdb9fe2c9..011241949 100644 --- a/modules/backend/formwidgets/repeater/partials/_repeater.htm +++ b/modules/backend/formwidgets/repeater/partials/_repeater.htm @@ -13,7 +13,8 @@ + data-request="getEventHandler('onAddItem') ?>" + data-request-success="$('#getId('items') ?> .field-repeater-form:last').formWidget()"> diff --git a/modules/backend/formwidgets/repeater/partials/_repeater_item.htm b/modules/backend/formwidgets/repeater/partials/_repeater_item.htm index c3ddec648..a4b360cab 100644 --- a/modules/backend/formwidgets/repeater/partials/_repeater_item.htm +++ b/modules/backend/formwidgets/repeater/partials/_repeater_item.htm @@ -17,7 +17,10 @@ -
+
getFields() as $field): ?> renderField($field) ?> diff --git a/modules/backend/widgets/form/assets/js/october.form.js b/modules/backend/widgets/form/assets/js/october.form.js index 8299a98f9..7b46b581b 100644 --- a/modules/backend/widgets/form/assets/js/october.form.js +++ b/modules/backend/widgets/form/assets/js/october.form.js @@ -77,12 +77,13 @@ FormWidget.prototype.bindDependants = function() { var self = this, form = this.$el, - fieldMap = {} + fieldMap = {}, + nestedDependencies = form.find('[data-control="formwidget"] [data-field-depends]'); /* * Map master and slave fields */ - form.find('[data-field-depends]').each(function() { + form.find('[data-field-depends]').not(nestedDependencies).each(function() { var name = $(this).data('field-name'), depends = $(this).data('field-depends') @@ -100,6 +101,8 @@ $.each(fieldMap, function(fieldName, toRefresh){ form .find('[data-field-name="'+fieldName+'"]') + // Exclude nested formwidget elements + .not(form.find('[data-control="formwidget"] [data-field-name="'+fieldName+'"]')) .on('change.oc.formwidget', $.proxy(self.onRefreshDependants, self, fieldName, toRefresh)) }) } @@ -119,7 +122,7 @@ this.dependantUpdateTimers[fieldName] = window.setTimeout(function() { formEl.request(self.options.refreshHandler, { - data: toRefresh + data: $.extend({}, toRefresh, form.data('refresh-data')) }).success(function() { self.toggleEmptyTabs() }) @@ -127,6 +130,8 @@ $.each(toRefresh.fields, function(index, field) { form.find('[data-field-name="'+field+'"]:visible') + // Exclude nested formwidget elements + .not(form.find('[data-control="formwidget"] [data-field-name="'+field+'"]:visible')) .addClass('loading-indicator-container size-form-field') .loadIndicator() })