From 455a653b5a01f4ee865e69b9a75f27f2f69762a1 Mon Sep 17 00:00:00 2001 From: Jake Bentvelzen Date: Wed, 4 Jan 2017 17:05:14 +1100 Subject: [PATCH 1/3] feat(QuickAddNew): Add functionality so the action can be overwritten. --- code/extensions/QuickAddNewExtension.php | 29 ++++++++++++++++++++++++ javascript/quickaddnew.js | 13 +++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/code/extensions/QuickAddNewExtension.php b/code/extensions/QuickAddNewExtension.php index 2c0b3fa..0b4e610 100644 --- a/code/extensions/QuickAddNewExtension.php +++ b/code/extensions/QuickAddNewExtension.php @@ -7,12 +7,20 @@ **/ class QuickAddNewExtension extends Extension { + /** + * @var boolean + */ + protected $addNewEnabled = false; /** * @var FieldList **/ protected $addNewFields; + /** + * @var string + */ + protected $addNewAction; /** * @var string @@ -98,6 +106,7 @@ public function useAddNew( } $this->owner->addExtraClass('quickaddnew-field'); + $this->addNewEnabled = true; $this->sourceCallback = $sourceCallback; $this->isFrontend = $isFrontend; @@ -108,6 +117,26 @@ public function useAddNew( return $this->owner; } + /** + * @return boolean + */ + public function hasAddNewButton() { + return $this->addNewEnabled; + } + + /** + * + */ + public function updateAttributes(&$attributes) { + if (!$this->addNewFields) { + // Ignore if not using QuickAddNew + return; + } + $action = $this->owner->Link('AddNewFormHTML'); + // Remove [] for ListboxSetField/CheckboxSetField + $action = preg_replace("/[\[\]']+/", "", $action); + $attributes['data-quickaddnew-action'] = $action; + } /** * The AddNewForm for the dialog window diff --git a/javascript/quickaddnew.js b/javascript/quickaddnew.js index 24b4359..be41a33 100644 --- a/javascript/quickaddnew.js +++ b/javascript/quickaddnew.js @@ -43,8 +43,17 @@ jQuery.entwine("quickaddnew", function($) { var fieldName = this.attr('name'); if (this.hasClass('checkboxset')) fieldName = this.find('input:checkbox').attr('name').replace(/\[[0-9]+\]/g, ''); var action = this.parents('form').attr('action').split('?', 2); //add support for url parameters e.g. ?locale=en_US when using Translatable - var dialogHTMLURL = action[0] + '/field/' + fieldName + '/AddNewFormHTML' + '?' + action[1]; - this.setURL(dialogHTMLURL.replace(/[\[\]']+/g,'')); + + var dialogHTMLURL = this.data('quickaddnew-action'); + if (!dialogHTMLURL) { + // Fallback to default action + dialogHTMLURL = action[0] + '/field/' + fieldName + '/AddNewFormHTML'; + } + if (action[1]) { + dialogHTMLURL += '?' + action[1]; + } + dialogHTMLURL = dialogHTMLURL.replace(/[\[\]']+/g,''); + this.setURL(dialogHTMLURL); // configure the dialog this.getDialog().data("field", this).dialog({ From b3f4b705aa50a0641faf9f18b8bff15160eb0dc6 Mon Sep 17 00:00:00 2001 From: Jake Bentvelzen Date: Thu, 5 Jan 2017 14:47:17 +1100 Subject: [PATCH 2/3] feat(JavaScript): Change submit button to change state on submit (fixes bug where button disables for HTML5 validation), If field updating is a