Skip to content

Commit

Permalink
Fix: #127 - generate unique ID upon creation
Browse files Browse the repository at this point in the history
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
  • Loading branch information
torleif authored and Torleif West committed Jul 13, 2016
1 parent 90d6402 commit 987d293
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 32 deletions.
13 changes: 8 additions & 5 deletions code/model/Widget.php
Original file line number Diff line number Diff line change
Expand Up @@ -209,22 +209,25 @@ public function getCMSFields()
/**
* @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;
}

Expand Down
30 changes: 3 additions & 27 deletions javascript/WidgetAreaEditor.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)});
Expand All @@ -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)));
}
});
}
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit 987d293

Please sign in to comment.