From 987d29341e4c681fcaff8e12c087f989e97faf07 Mon Sep 17 00:00:00 2001 From: torleif Date: Tue, 21 Jun 2016 11:22:38 +1200 Subject: [PATCH] Fix: #127 - generate unique ID upon creation Fixes front end components that require a unique ID. Duplicate IDs in the DOM is invalid HTML. Fix: #127 - code formatting Check validation before writing BUG fixes duplicate ID issue Fixes #127 BUG fixes duplicate ID issue Fixes #127 remove unneeded write() Fix: #127 - generate unique ID upon creation --- code/model/Widget.php | 13 ++++++++----- javascript/WidgetAreaEditor.js | 30 +++--------------------------- 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/code/model/Widget.php b/code/model/Widget.php index ad3e601..2bb2efb 100644 --- a/code/model/Widget.php +++ b/code/model/Widget.php @@ -209,22 +209,25 @@ class Widget extends DataObject /** * @return FieldList */ - public function CMSEditor() + public function CMSEditor() { - $fields = $this->getCMSFields(); + $fields = $this->getCMSFields(); $outputFields = new FieldList(); + $this->FormID = $this->FormID ? : uniqid(); + $outputFields->push(HiddenField::create('Widget[' . $this->FormID . '][FormID]', 'FormID', $this->FormID)->addExtraClass('formid')); + foreach ($fields as $field) { $name = $field->getName(); $value = $this->getField($name); if ($value) { $field->setValue($value); } - $name = preg_replace("/([A-Za-z0-9\-_]+)/", "Widget[" . $this->ID . "][\\1]", $name); - $field->setName($name); + $namefiltered = preg_replace("/([A-Za-z0-9\-_]+)/", "Widget[" . $this->FormID . "][\\1]", $name); + + $field->setName($namefiltered); $outputFields->push($field); } - return $outputFields; } diff --git a/javascript/WidgetAreaEditor.js b/javascript/WidgetAreaEditor.js index bf1f514..10e3958 100644 --- a/javascript/WidgetAreaEditor.js +++ b/javascript/WidgetAreaEditor.js @@ -24,22 +24,7 @@ placeholder: 'ui-state-highlight', forcePlaceholderSize: true }); - - // Figure out maxid, this is used when creating new widgets - $(this).data('maxid', 0); - - var usedWidgets = $(this).find('.usedWidgets .Widget'); - usedWidgets.each(function() { - var widget = $(this)[0]; - if(widget.id) { - widgetid = widget.id.match(/Widget\[(.+?)\]\[([0-9]+)\]/i); - if(widgetid && parseInt(widgetid[2]) > parseInt(parentRef.data('maxid'))) { - parentRef.data('maxid', parseInt(widgetid[2])); - } - } - }); - - + // Ensure correct sort values are written when page is saved // TODO Adjust to new event listeners $('.cms-container').bind('submitform', function(e) {parentRef.beforeSave(e)}); @@ -58,17 +43,13 @@ if (!widget.rewritten && (widget.id || widget.name)) { if (widget.id && widget.id.indexOf('Widget[') === 0) { var newValue = widget.id.replace(/Widget\[/, 'Widget['+name+']['); - //console.log('Renaming '+widget.tagName+' ID '+widget.id+' to '+newValue); widget.id = newValue; } if (widget.name && widget.name.indexOf('Widget[') === 0) { var newValue = widget.name.replace(/Widget\[/, 'Widget['+name+']['); - //console.log('Renaming '+widget.tagName+' Name '+widget.name+' to '+newValue); widget.name=newValue; } widget.rewritten='yes'; - }else { - //console.log('Skipping '+(widget.id ? widget.id : (widget.name ? widget.name : 'unknown '+widget.tagName))); } }); } @@ -130,13 +111,8 @@ }, insertWidgetEditor: function(response) { - var usedWidgets = $('#usedWidgets-'+$(this).attr('name')).children(); - - // Give the widget a unique id - var newID=parseInt($(this).data('maxid'))+1; - $(this).data('maxid', newID); - - var widgetContent = response.replace(/Widget\[0\]/gi, "Widget[new-" + (newID) + "]"); + var newID = $(response).find('.formid').val(); + var widgetContent = response.replace(/Widget\[0\]/gi, "Widget[" + (newID) + "]"); $('#usedWidgets-'+$(this).attr('name')).append(widgetContent); this.rewriteWidgetAreaAttributes();