From ec7b2297c3ef498a39fa53a2a755193c37926748 Mon Sep 17 00:00:00 2001 From: Frans Saris <franssaris@gmail.com> Date: Wed, 20 Apr 2016 15:45:10 +0200 Subject: [PATCH] [BUGFIX] Remember not rendered checkboxes in TCA treeSelect When you have a select field of rendertype selectTree it looses the selected values of the not rendered checkboxes. This changes makes sure that also the not rendered values are kept. Change-Id: I8649e83c56a0265a7de069ef9654ed13b90b3239 Resolves: #75519 Releases: master, 7.6, 6.2 Reviewed-on: https://review.typo3.org/47900 Reviewed-by: Frans Saris <franssaris@gmail.com> Tested-by: Frans Saris <franssaris@gmail.com> --- .../Resources/Public/JavaScript/tree.js | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/tree.js b/typo3/sysext/backend/Resources/Public/JavaScript/tree.js index 65bfe0657f74..27b8495663a6 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/tree.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/tree.js @@ -60,6 +60,14 @@ TYPO3.Components.Tree.StandardTree = function(config) { Ext.extend(TYPO3.Components.Tree.StandardTree, Ext.tree.TreePanel, { initComponent: function() { + // prepare hidden input field (make sure only comma separated uids are present) + var selected = Ext.fly('treeinput' + this.id).dom.value.split(','); + for (var i = 0; i < selected.length; i++) { + var value = selected[i].split('|'); + selected[i] = value[0]; + } + Ext.fly('treeinput' + this.id).dom.value = selected.join(','); + Ext.apply(this, { tbar: this.initialConfig.showHeader ? TYPO3.Components.Tree.Toolbar([], this) : null }); @@ -182,7 +190,8 @@ TYPO3.Components.Tree.EmptySelectionModel = new Ext.tree.DefaultSelectionModel({ TYPO3.Components.Tree.TcaCheckChangeHandler = function(checkedNode, checked) { var exclusiveKeys = this.tcaExclusiveKeys.split(','), - uid = '' + checkedNode.attributes.uid; + uid = '' + checkedNode.attributes.uid, + selected = Ext.fly('treeinput' + this.id).dom.value.split(','); this.suspendEvents(); @@ -226,12 +235,20 @@ TYPO3.Components.Tree.TcaCheckChangeHandler = function(checkedNode, checked) { node.ui.toggleCheck(checkedNode.attributes.checked); }) } - var selected = []; + this.root.cascade(function(node) { if (node.ui.isChecked()) { - selected.push(node.attributes.uid); + if (selected.indexOf(node.attributes.uid) < 0) { + selected.push(node.attributes.uid) + } + } else { + var index = selected.indexOf(node.attributes.uid); + if (index >= 0) { + selected.splice(index, 1); + } } }); + this.countSelectedNodes = selected.length; Ext.fly('treeinput' + this.id).dom.value = selected.join(','); eval(this.onChange); -- GitLab