From e48963b1e9a25e95f63a5f5afbcd19c05c245dd0 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Sat, 28 Feb 2015 19:33:11 +1100 Subject: [PATCH] Improve mode detection for relations by using an event target --- modules/backend/assets/js/october.popup.js | 1 + .../backend/behaviors/RelationController.php | 56 +++++++++++++++---- .../assets/js/october.relation.js | 12 ++-- .../partials/_button_add.htm | 1 + .../partials/_button_create.htm | 1 + .../partials/_button_link.htm | 1 + .../partials/_button_update.htm | 1 + .../partials/_manage_form.htm | 6 +- .../partials/_pivot_form.htm | 35 +++++++----- 9 files changed, 82 insertions(+), 32 deletions(-) diff --git a/modules/backend/assets/js/october.popup.js b/modules/backend/assets/js/october.popup.js index 89db1457d..991e50ae9 100644 --- a/modules/backend/assets/js/october.popup.js +++ b/modules/backend/assets/js/october.popup.js @@ -10,6 +10,7 @@ * - data-handler="widget:pluginName" - October ajax request name * - data-keyboard="false" - Allow popup to be closed with the keyboard * - data-request-data="file_id: 1" - October ajax request data + * - data-size="large" - Popup size, available sizes: giant, huge, large, small, tiny * * JavaScript API: * $('a#someLink').popup({ ajax: 'popup-content.htm' }) diff --git a/modules/backend/behaviors/RelationController.php b/modules/backend/behaviors/RelationController.php index edaa83fe6..a712f4b0a 100644 --- a/modules/backend/behaviors/RelationController.php +++ b/modules/backend/behaviors/RelationController.php @@ -132,6 +132,11 @@ class RelationController extends ControllerBehavior */ protected $manageMode; + /** + * @var string The target that triggered an AJAX event (button, list) + */ + protected $eventTarget; + /** * @var int Primary id of an existing relation record. */ @@ -307,22 +312,29 @@ class RelationController extends ControllerBehavior return $mode; } + switch ($this->eventTarget) { + case 'button-create': + case 'button-update': + return 'form'; + + case 'button-link': + return 'list'; + } + switch ($this->relationType) { case 'belongsTo': - $mode = 'list'; - break; + return 'list'; case 'belongsToMany': - $mode = (isset($this->config->pivot)) ? 'pivot' : 'list'; - break; + if (isset($this->config->pivot)) return 'pivot'; + elseif ($this->eventTarget == 'list') return 'form'; + else return 'list'; case 'hasOne': case 'hasMany': - $mode = 'form'; - break; + if ($this->eventTarget == 'button-add') return 'list'; + else return 'form'; } - - return $mode; } /** @@ -533,13 +545,13 @@ class RelationController extends ControllerBehavior public function onRelationButtonAdd() { - $this->manageMode = 'list'; + $this->eventTarget = 'button-add'; return $this->onRelationManageForm(); } public function onRelationButtonCreate() { - $this->manageMode = 'form'; + $this->eventTarget = 'button-create'; return $this->onRelationManageForm(); } @@ -550,7 +562,7 @@ class RelationController extends ControllerBehavior public function onRelationButtonLink() { - $this->manageMode = 'list'; + $this->eventTarget = 'button-link'; return $this->onRelationManageForm(); } @@ -566,7 +578,27 @@ class RelationController extends ControllerBehavior public function onRelationButtonUpdate() { - $this->manageMode = 'form'; + $this->eventTarget = 'button-update'; + return $this->onRelationManageForm(); + } + + // + // AJAX (List events) + // + + public function onRelationClickManageList() + { + return $this->onRelationManageAdd(); + } + + public function onRelationClickManageListPivot() + { + return $this->onRelationManagePivotForm(); + } + + public function onRelationClickViewList() + { + $this->eventTarget = 'list'; return $this->onRelationManageForm(); } diff --git a/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js b/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js index f0f46b2fa..b541f593d 100644 --- a/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js +++ b/modules/backend/behaviors/relationcontroller/assets/js/october.relation.js @@ -8,7 +8,7 @@ this.clickManageListRecord = function(recordId, relationField, sessionKey) { var oldPopup = $('#relationManagePopup') - $.request('onRelationManageAdd', { + $.request('onRelationClickManageList', { data: { 'record_id': recordId, '_relation_field': relationField, @@ -23,7 +23,8 @@ var newPopup = $('') newPopup.popup({ - handler: 'onRelationManageForm', + handler: 'onRelationClickViewList', + size: 'huge', extraData: { 'manage_id': recordId, '_relation_field': relationField, @@ -36,10 +37,13 @@ var oldPopup = $('#relationManagePivotPopup'), newPopup = $('') - oldPopup.popup('hide') + if (oldPopup.length) { + oldPopup.popup('hide') + } newPopup.popup({ - handler: 'onRelationManagePivotForm', + handler: 'onRelationClickManageListPivot', + size: 'huge', extraData: { 'foreign_id': foreignId, '_relation_field': relationField, diff --git a/modules/backend/behaviors/relationcontroller/partials/_button_add.htm b/modules/backend/behaviors/relationcontroller/partials/_button_add.htm index 64e1988f5..4832a5d16 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_button_add.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_button_add.htm @@ -1,5 +1,6 @@ diff --git a/modules/backend/behaviors/relationcontroller/partials/_button_create.htm b/modules/backend/behaviors/relationcontroller/partials/_button_create.htm index 65859c1d9..7eafbc8d6 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_button_create.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_button_create.htm @@ -1,5 +1,6 @@ diff --git a/modules/backend/behaviors/relationcontroller/partials/_button_link.htm b/modules/backend/behaviors/relationcontroller/partials/_button_link.htm index 40c2225bf..933c3a9a8 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_button_link.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_button_link.htm @@ -1,5 +1,6 @@ diff --git a/modules/backend/behaviors/relationcontroller/partials/_button_update.htm b/modules/backend/behaviors/relationcontroller/partials/_button_update.htm index 0da1eec88..99a546d47 100644 --- a/modules/backend/behaviors/relationcontroller/partials/_button_update.htm +++ b/modules/backend/behaviors/relationcontroller/partials/_button_update.htm @@ -1,5 +1,6 @@ × @@ -58,7 +58,7 @@