diff --git a/t3lib/js/extjs/tree/tree.js b/t3lib/js/extjs/tree/tree.js index 95ff4b2..6da3d24 100644 --- a/t3lib/js/extjs/tree/tree.js +++ b/t3lib/js/extjs/tree/tree.js @@ -223,14 +223,59 @@ TYPO3.Components.Tree.TcaCheckChangeHandler = function(checkedNode, checked) { checkedNode.getUI().removeClass('complete'); } var selected = []; + + // if node has been checked -> check all parents in cascade + if (checked) { + TYPO3.Components.Tree.checkCascade(checkedNode); + } + // if node has been un-checked -> un-check all children in cascade + else { + TYPO3.Components.Tree.uncheckCascade(checkedNode); + } + this.root.cascade(function(node) { if (node.ui.isChecked()) { selected.push(node.attributes.uid); } }); + this.countSelectedNodes = selected.length; Ext.fly('treeinput' + this.id).dom.value = selected.join(','); eval(this.onChange); this.resumeEvents(); }; + +/** + * Select node in cascade + * + * @param {Object} Ext.tree.TreeNode + */ +TYPO3.Components.Tree.checkCascade = function(node) { + + if (node.isRoot != true) { + node.parentNode.ui.toggleCheck(true); + + // Recursive call until the tree is traversed. + TYPO3.Components.Tree.checkCascade(node.parentNode); + } +} + +/** + * Disselect node in cascade when + * + * @param {Object} Ext.tree.TreeNode + */ +TYPO3.Components.Tree.uncheckCascade = function(node) { + + node.cascade(function(childNode) { + if (childNode != node) { + childNode.ui.toggleCheck(false); + + if (childNode.childNodes.length > 0) { + // Recursive call until the tree is traversed. + TYPO3.Components.Tree.uncheckCascade(childNode); + } + } + }); +} \ No newline at end of file