mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
BUG Updating node would position wrong, Sort isnt === offset
This commit is contained in:
parent
120de7cba2
commit
22d6c7afa4
@ -748,12 +748,25 @@ class LeftAndMain extends Controller implements PermissionProvider {
|
|||||||
foreach($ids as $id) {
|
foreach($ids as $id) {
|
||||||
$record = $this->getRecord($id);
|
$record = $this->getRecord($id);
|
||||||
$recordController = ($this->stat('tree_class') == 'SiteTree') ? singleton('CMSPageEditController') : $this;
|
$recordController = ($this->stat('tree_class') == 'SiteTree') ? singleton('CMSPageEditController') : $this;
|
||||||
|
|
||||||
|
// Find the next & previous nodes, for proper positioning (Sort isn't good enough - it's not a raw offset)
|
||||||
|
// TODO: These methods should really be in hierarchy - for a start it assumes Sort exists
|
||||||
|
$next = $prev = null;
|
||||||
|
|
||||||
|
$className = $this->stat('tree_class');
|
||||||
|
$next = DataObject::get($className, 'ParentID = '.$record->ParentID.' AND Sort > '.$record->Sort)->first();
|
||||||
|
if (!$next) {
|
||||||
|
$prev = DataObject::get($className, 'ParentID = '.$record->ParentID.' AND Sort < '.$record->Sort)->reverse()->first();
|
||||||
|
}
|
||||||
|
|
||||||
$link = Controller::join_links($recordController->Link("show"), $record->ID);
|
$link = Controller::join_links($recordController->Link("show"), $record->ID);
|
||||||
$html = LeftAndMain_TreeNode::create($record, $link, $this->isCurrentPage($record))->forTemplate() . '</li>';
|
$html = LeftAndMain_TreeNode::create($record, $link, $this->isCurrentPage($record))->forTemplate() . '</li>';
|
||||||
|
|
||||||
$data[$id] = array(
|
$data[$id] = array(
|
||||||
'html' => $html,
|
'html' => $html,
|
||||||
'ParentID' => $record->ParentID,
|
'ParentID' => $record->ParentID,
|
||||||
'Sort' => $record->Sort
|
'NextID' => $next ? $next->ID : null,
|
||||||
|
'PrevID' => $prev ? $prev->ID : null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$this->response->addHeader('Content-Type', 'text/json');
|
$this->response->addHeader('Content-Type', 'text/json');
|
||||||
|
@ -271,8 +271,11 @@
|
|||||||
* (Object) Map of additional data, e.g. ParentID
|
* (Object) Map of additional data, e.g. ParentID
|
||||||
*/
|
*/
|
||||||
updateNode: function(node, html, data) {
|
updateNode: function(node, html, data) {
|
||||||
var self = this, newNode = $(html), origClasses = node.attr('class'),
|
var self = this, newNode = $(html), origClasses = node.attr('class');
|
||||||
parentNode = data.ParentID ? this.find('li[data-id='+data.ParentID+']') : false;
|
|
||||||
|
var nextNode = data.NextID ? this.find('li[data-id='+data.NextID+']') : false;
|
||||||
|
var prevNode = data.PrevID ? this.find('li[data-id='+data.PrevID+']') : false;
|
||||||
|
var parentNode = data.ParentID ? this.find('li[data-id='+data.ParentID+']') : false;
|
||||||
|
|
||||||
// Copy attributes. We can't replace the node completely
|
// Copy attributes. We can't replace the node completely
|
||||||
// without removing or detaching its children nodes.
|
// without removing or detaching its children nodes.
|
||||||
@ -284,8 +287,15 @@
|
|||||||
// Replace inner content
|
// Replace inner content
|
||||||
node.addClass(origClasses).html(newNode.html());
|
node.addClass(origClasses).html(newNode.html());
|
||||||
|
|
||||||
// Set correct parent
|
if (nextNode && nextNode.length) {
|
||||||
this.jstree('move_node', node, parentNode.length ? parentNode : -1, data.Sort);
|
this.jstree('move_node', node, nextNode, 'before');
|
||||||
|
}
|
||||||
|
else if (prevNode && prevNode.length) {
|
||||||
|
this.jstree('move_node', node, prevNode, 'after');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.jstree('move_node', node, parentNode.length ? parentNode : -1);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user