[FEATURE] add option to select recursively in tcaTree
authorSteffen Ritter <info@rs-websystems.de>
Tue, 1 Mar 2011 13:18:32 +0000 (14:18 +0100)
committerSteffen Ritter <info@rs-websystems.de>
Tue, 14 Feb 2012 06:18:15 +0000 (07:18 +0100)
in some cases you might need or want to select a whole subtree - this is now possible.
Since ExtJs delivers nearly everything, just use it.

Add this to pending Documentation:
new Option in tcaTree[appearence]: allowRecursiveMode
If true, a toggle button in the toolbar is activated. If you toggle the button, a selection of a node, will automatically select/unselect all childnodes recursively, too.

Note: I added a Icon to the sprite, which has been regenerated via extdeveval (therefore the patch is more lengthy)

Change-Id: Ic79c2cddfeb111cfc2911bf6f4dfe51c6f36a14c
Resolves: #25061
Releases: 4.7
Reviewed-on: http://review.typo3.org/958
Reviewed-by: Stefan Neufeind
Tested-by: Stefan Neufeind
Reviewed-by: Wouter Wolters
Tested-by: Wouter Wolters
Reviewed-by: Georg Ringer
Tested-by: Georg Ringer
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
t3lib/js/extjs/tree/tree.js
t3lib/stddb/tables.php
t3lib/tceforms/class.t3lib_tceforms_tree.php
typo3/sysext/lang/locallang_csh_corebe.xlf
typo3/sysext/t3skin/images/icons/apps/tcatree-select-recursive.png [new file with mode: 0644]
typo3/sysext/t3skin/images/sprites/t3skin.png
typo3/sysext/t3skin/stylesheets/sprites/t3skin.css

index f0cad39..955da3d 100644 (file)
@@ -161,6 +161,16 @@ TYPO3.Components.Tree.Toolbar = function(items, scope) {
                }),
                '->',
                {
+                       iconCls: 't3-icon t3-icon-apps t3-icon-apps-tcatree t3-icon-tcatree-select-recursive',
+                       tooltip: TYPO3.lang['tcatree.enableRecursiveSelection'],
+                       enableToggle: true,
+                       disable: scope.tcaSelectRecursive,
+                       toggleHandler: function(btn, state) {
+                               this.tcaSelectRecursive = state;
+                       },
+                       scope: scope
+               },
+               {
                        iconCls: 'icon-expand-all',
                        tooltip: TYPO3.l10n.localize('tcatree.expandAll'),
                        handler: function() {
@@ -222,6 +232,13 @@ TYPO3.Components.Tree.TcaCheckChangeHandler = function(checkedNode, checked) {
        } else {
                checkedNode.getUI().removeClass('complete');
        }
+               // if recursive selection is asked, hand over selection
+       if(this.tcaSelectRecursive) {
+               checkedNode.cascade(function(node) {
+                       node.attributes.checked = checkedNode.attributes.checked;
+                       node.ui.toggleCheck(checkedNode.attributes.checked);
+               })
+       }
        var selected = [];
        this.root.cascade(function(node) {
                if (node.ui.isChecked()) {
index d619033..83c05dd 100644 (file)
@@ -659,6 +659,7 @@ $GLOBALS['TBE_STYLES']['spriteIconApi']['coreSpriteImageNames'] = array(
        'apps-pagetree-page-shortcut-root',
        'apps-pagetree-root',
        'apps-pagetree-spacer',
+       'apps-tcatree-select-recursive',
        'apps-toolbar-menu-actions',
        'apps-toolbar-menu-cache',
        'apps-toolbar-menu-opendocs',
@@ -680,6 +681,7 @@ $GLOBALS['TBE_STYLES']['spriteIconApi']['coreSpriteImageNames'] = array(
        'mimetypes-text-js',
        'mimetypes-text-php',
        'mimetypes-text-text',
+       'mimetypes-word',
        'mimetypes-x-content-divider',
        'mimetypes-x-content-domain',
        'mimetypes-x-content-form',
@@ -795,6 +797,7 @@ $GLOBALS['TBE_STYLES']['spriteIconApi']['coreSpriteImageNames'] = array(
 
 
 
+
 $GLOBALS['TBE_STYLES']['spriteIconApi']['spriteIconRecordOverlayPriorities'] = array(
        'deleted',
        'hidden',
index a281351..8e56214 100644 (file)
@@ -196,9 +196,10 @@ class t3lib_TCEforms_Tree {
                                        }
                                },
                                tcaMaxItems: ' . ($PA['fieldConf']['config']['maxitems'] ? intval($PA['fieldConf']['config']['maxitems']) : 99999) . ',
-                               tcaExclusiveKeys: "' . (
-               $PA['fieldConf']['config']['exclusiveKeys']
-                               ? $PA['fieldConf']['config']['exclusiveKeys'] : '') . '",
+                               tcaSelectRecursiveAllowed: ' . ($appearance['allowRecursiveMode'] ? 'true' : 'false')  . ',
+                               tcaSelectRecursive: false,
+                               tcaExclusiveKeys: "' .
+                               ($PA['fieldConf']['config']['exclusiveKeys'] ? $PA['fieldConf']['config']['exclusiveKeys'] : '') . '",
                                ucId: "' . md5($table . '|' . $field) . '",
                                selModel: TYPO3.Components.Tree.EmptySelectionModel,
                                disabled: ' . ($PA['fieldConf']['config']['readOnly'] ? 'true' : 'false') . '
index 44a362c..c31cf01 100644 (file)
@@ -172,6 +172,9 @@ If you click the folder title in the Folder Tree you will see the sub-module loa
                        <trans-unit id="tcatree.filter.contains" xml:space="preserve">
                                <source>contains</source>
                        </trans-unit>
+                       <trans-unit id="tcatree.enableRecursiveSelection" xml:space="preserve">
+                               <source>enable recursive selection</source>
+                       </trans-unit>
                        <trans-unit id="list_module.alttitle" xml:space="preserve">
                                <source>The Web&gt;List module</source>
                        </trans-unit>
diff --git a/typo3/sysext/t3skin/images/icons/apps/tcatree-select-recursive.png b/typo3/sysext/t3skin/images/icons/apps/tcatree-select-recursive.png
new file mode 100644 (file)
index 0000000..46c75aa
Binary files /dev/null and b/typo3/sysext/t3skin/images/icons/apps/tcatree-select-recursive.png differ
index b6372ee..e015eee 100644 (file)
Binary files a/typo3/sysext/t3skin/images/sprites/t3skin.png and b/typo3/sysext/t3skin/images/sprites/t3skin.png differ
index 8ed8bd6..44422a5 100644 (file)
@@ -1,24 +1,24 @@
 
 .t3-icon-actions {
-       background-image: url('../../images/sprites/t3skin.png?1312224321') !important;
+       background-image: url('../../images/sprites/t3skin.png?1329123896') !important;
        height: 16px;
        width: 16px;
 }
 
 .t3-icon-apps {
-       background-image: url('../../images/sprites/t3skin.png?1312224321') !important;
+       background-image: url('../../images/sprites/t3skin.png?1329123896') !important;
        height: 16px;
        width: 16px;
 }
 
 .t3-icon-mimetypes {
-       background-image: url('../../images/sprites/t3skin.png?1312224321') !important;
+       background-image: url('../../images/sprites/t3skin.png?1329123896') !important;
        height: 16px;
        width: 16px;
 }
 
 .t3-icon-status {
-       background-image: url('../../images/sprites/t3skin.png?1312224321') !important;
+       background-image: url('../../images/sprites/t3skin.png?1329123896') !important;
        height: 16px;
        width: 16px;
 }
        background-position: -54px -162px !important;
 
 }
-.t3-icon-toolbar-menu-actions {
+.t3-icon-tcatree-select-recursive {
        background-position: -72px -162px !important;
 
 }
-.t3-icon-toolbar-menu-cache {
+.t3-icon-toolbar-menu-actions {
        background-position: -90px -162px !important;
 
 }
-.t3-icon-toolbar-menu-opendocs {
+.t3-icon-toolbar-menu-cache {
        background-position: -108px -162px !important;
 
 }
-.t3-icon-toolbar-menu-search {
+.t3-icon-toolbar-menu-opendocs {
        background-position: -126px -162px !important;
 
 }
-.t3-icon-toolbar-menu-shortcut {
+.t3-icon-toolbar-menu-search {
        background-position: -144px -162px !important;
 
 }
-.t3-icon-toolbar-menu-workspace {
+.t3-icon-toolbar-menu-shortcut {
        background-position: -162px -162px !important;
 
 }
-.t3-icon-compressed {
+.t3-icon-toolbar-menu-workspace {
        background-position: -180px -162px !important;
 
 }
-.t3-icon-excel {
+.t3-icon-compressed {
        background-position: -198px -162px !important;
 
 }
-.t3-icon-media-audio {
+.t3-icon-excel {
        background-position: -216px -162px !important;
 
 }
-.t3-icon-media-flash {
+.t3-icon-media-audio {
        background-position: -234px -162px !important;
 
 }
-.t3-icon-media-image {
+.t3-icon-media-flash {
        background-position: -252px -162px !important;
 
 }
-.t3-icon-media-video {
+.t3-icon-media-image {
        background-position: -270px -162px !important;
 
 }
-.t3-icon-other-other {
+.t3-icon-media-video {
        background-position: -288px -162px !important;
 
 }
-.t3-icon-pdf {
+.t3-icon-other-other {
        background-position: -306px -162px !important;
 
 }
-.t3-icon-powerpoint {
+.t3-icon-pdf {
        background-position: -0px -180px !important;
 
 }
-.t3-icon-text-css {
+.t3-icon-powerpoint {
        background-position: -18px -180px !important;
 
 }
-.t3-icon-text-csv {
+.t3-icon-text-css {
        background-position: -36px -180px !important;
 
 }
-.t3-icon-text-html {
+.t3-icon-text-csv {
        background-position: -54px -180px !important;
 
 }
-.t3-icon-text-js {
+.t3-icon-text-html {
        background-position: -72px -180px !important;
 
 }
-.t3-icon-text-php {
+.t3-icon-text-js {
        background-position: -90px -180px !important;
 
 }
-.t3-icon-text-text {
+.t3-icon-text-php {
        background-position: -108px -180px !important;
 
 }
-.t3-icon-word {
+.t3-icon-text-text {
        background-position: -126px -180px !important;
 
 }
-.t3-icon-x-content-divider {
+.t3-icon-word {
        background-position: -144px -180px !important;
 
 }
-.t3-icon-x-content-domain {
+.t3-icon-x-content-divider {
        background-position: -162px -180px !important;
 
 }
+.t3-icon-x-content-domain {
+       background-position: -180px -180px !important;
+
+}
 .t3-icon-x-content-form-search {
-       background-position: -198px -180px !important;
+       background-position: -216px -180px !important;
 
 }
 .t3-icon-x-content-form {
-       background-position: -180px -180px !important;
+       background-position: -198px -180px !important;
 
 }
 .t3-icon-x-content-header {
-       background-position: -216px -180px !important;
+       background-position: -234px -180px !important;
 
 }
 .t3-icon-x-content-html {
-       background-position: -234px -180px !important;
+       background-position: -252px -180px !important;
 
 }
 .t3-icon-x-content-image {
-       background-position: -252px -180px !important;
+       background-position: -270px -180px !important;
 
 }
 .t3-icon-x-content-link {
-       background-position: -270px -180px !important;
+       background-position: -288px -180px !important;
 
 }
 .t3-icon-x-content-list-bullets {
-       background-position: -288px -180px !important;
+       background-position: -306px -180px !important;
 
 }
 .t3-icon-x-content-list-files {
-       background-position: -306px -180px !important;
+       background-position: -0px -198px !important;
 
 }
 .t3-icon-x-content-login {
-       background-position: -0px -198px !important;
+       background-position: -18px -198px !important;
 
 }
 .t3-icon-x-content-menu {
-       background-position: -18px -198px !important;
+       background-position: -36px -198px !important;
 
 }
 .t3-icon-x-content-multimedia {
-       background-position: -36px -198px !important;
+       background-position: -54px -198px !important;
 
 }
 .t3-icon-x-content-page-language-overlay {
-       background-position: -54px -198px !important;
+       background-position: -72px -198px !important;
 
 }
 .t3-icon-x-content-plugin {
-       background-position: -72px -198px !important;
+       background-position: -90px -198px !important;
 
 }
 .t3-icon-x-content-script {
-       background-position: -90px -198px !important;
+       background-position: -108px -198px !important;
 
 }
 .t3-icon-x-content-table {
-       background-position: -108px -198px !important;
+       background-position: -126px -198px !important;
 
 }
 .t3-icon-x-content-template-extension {
-       background-position: -144px -198px !important;
+       background-position: -162px -198px !important;
 
 }
 .t3-icon-x-content-template-static {
-       background-position: -162px -198px !important;
+       background-position: -180px -198px !important;
 
 }
 .t3-icon-x-content-template {
-       background-position: -126px -198px !important;
+       background-position: -144px -198px !important;
 
 }
 .t3-icon-x-content-text-picture {
-       background-position: -198px -198px !important;
+       background-position: -216px -198px !important;
 
 }
 .t3-icon-x-content-text {
-       background-position: -180px -198px !important;
+       background-position: -198px -198px !important;
 
 }
 .t3-icon-x-sys_action {
-       background-position: -216px -198px !important;
+       background-position: -234px -198px !important;
 
 }
 .t3-icon-x-sys_language {
 
 }
 .t3-icon-x-sys_news {
-       background-position: -234px -198px !important;
+       background-position: -252px -198px !important;
 
 }
 .t3-icon-x-sys_workspace {
-       background-position: -252px -198px !important;
+       background-position: -270px -198px !important;
 
 }
 .t3-icon-x_belayout {
-       background-position: -270px -198px !important;
+       background-position: -288px -198px !important;
 
 }
 .t3-icon-dialog-error {
-       background-position: -288px -198px !important;
+       background-position: -306px -198px !important;
 
 }
 .t3-icon-dialog-information {
-       background-position: -306px -198px !important;
+       background-position: -0px -216px !important;
 
 }
 .t3-icon-dialog-notification {
-       background-position: -0px -216px !important;
+       background-position: -18px -216px !important;
 
 }
 .t3-icon-dialog-ok {
-       background-position: -18px -216px !important;
+       background-position: -36px -216px !important;
 
 }
 .t3-icon-dialog-warning {
-       background-position: -36px -216px !important;
+       background-position: -54px -216px !important;
 
 }
 .t3-icon-overlay-access-restricted {
-       background-position: -54px -216px !important;
+       background-position: -72px -216px !important;
 
 }
 .t3-icon-overlay-deleted {
-       background-position: -72px -216px !important;
+       background-position: -90px -216px !important;
 
 }
 .t3-icon-overlay-hidden {
-       background-position: -90px -216px !important;
+       background-position: -108px -216px !important;
 
 }
 .t3-icon-overlay-icon-missing {
-       background-position: -108px -216px !important;
+       background-position: -126px -216px !important;
 
 }
 .t3-icon-overlay-includes-subpages {
-       background-position: -126px -216px !important;
+       background-position: -144px -216px !important;
 
 }
 .t3-icon-overlay-locked {
-       background-position: -144px -216px !important;
+       background-position: -162px -216px !important;
 
 }
 .t3-icon-overlay-scheduled-future-end {
-       background-position: -180px -216px !important;
+       background-position: -198px -216px !important;
 
 }
 .t3-icon-overlay-scheduled {
-       background-position: -162px -216px !important;
+       background-position: -180px -216px !important;
 
 }
 .t3-icon-overlay-translated {
-       background-position: -198px -216px !important;
+       background-position: -216px -216px !important;
 
 }
 .t3-icon-status-checked {
-       background-position: -216px -216px !important;
+       background-position: -234px -216px !important;
 
 }
 .t3-icon-status-current {
-       background-position: -234px -216px !important;
+       background-position: -252px -216px !important;
 
 }
 .t3-icon-status-edit-read-only {
-       background-position: -252px -216px !important;
+       background-position: -270px -216px !important;
 
 }
 .t3-icon-status-icon-missing {
-       background-position: -270px -216px !important;
+       background-position: -288px -216px !important;
 
 }
 .t3-icon-status-locked {
-       background-position: -288px -216px !important;
+       background-position: -306px -216px !important;
 
 }
 .t3-icon-status-permission-denied {
-       background-position: -306px -216px !important;
+       background-position: -0px -234px !important;
 
 }
 .t3-icon-status-permission-granted {
-       background-position: -0px -234px !important;
+       background-position: -18px -234px !important;
 
 }
 .t3-icon-status-reference-hard {
-       background-position: -18px -234px !important;
+       background-position: -36px -234px !important;
 
 }
 .t3-icon-status-reference-soft {
-       background-position: -36px -234px !important;
+       background-position: -54px -234px !important;
 
 }
 .t3-icon-status-workspace-draft {
-       background-position: -54px -234px !important;
+       background-position: -72px -234px !important;
 
 }
 .t3-icon-system-extension-required {
-       background-position: -72px -234px !important;
+       background-position: -90px -234px !important;
 
 }
 .t3-icon-user-admin {
-       background-position: -90px -234px !important;
+       background-position: -108px -234px !important;
 
 }
 .t3-icon-user-backend {
-       background-position: -108px -234px !important;
+       background-position: -126px -234px !important;
 
 }
 .t3-icon-user-frontend {
-       background-position: -126px -234px !important;
+       background-position: -144px -234px !important;
 
 }
 .t3-icon-user-group-backend {
-       background-position: -144px -234px !important;
+       background-position: -162px -234px !important;
 
 }
 .t3-icon-user-group-frontend {
-       background-position: -162px -234px !important;
+       background-position: -180px -234px !important;
 
 }
 .t3-icon-version-1 {
-       background-position: -180px -234px !important;
+       background-position: -198px -234px !important;
 
 }
 .t3-icon-version-10 {
-       background-position: -18px -252px !important;
+       background-position: -36px -252px !important;
 
 }
 .t3-icon-version-11 {
-       background-position: -36px -252px !important;
+       background-position: -54px -252px !important;
 
 }
 .t3-icon-version-12 {
-       background-position: -54px -252px !important;
+       background-position: -72px -252px !important;
 
 }
 .t3-icon-version-13 {
-       background-position: -72px -252px !important;
+       background-position: -90px -252px !important;
 
 }
 .t3-icon-version-14 {
-       background-position: -90px -252px !important;
+       background-position: -108px -252px !important;
 
 }
 .t3-icon-version-15 {
-       background-position: -108px -252px !important;
+       background-position: -126px -252px !important;
 
 }
 .t3-icon-version-16 {
-       background-position: -126px -252px !important;
+       background-position: -144px -252px !important;
 
 }
 .t3-icon-version-17 {
-       background-position: -144px -252px !important;
+       background-position: -162px -252px !important;
 
 }
 .t3-icon-version-18 {
-       background-position: -162px -252px !important;
+       background-position: -180px -252px !important;
 
 }
 .t3-icon-version-19 {
-       background-position: -180px -252px !important;
+       background-position: -198px -252px !important;
 
 }
 .t3-icon-version-2 {
-       background-position: -198px -234px !important;
+       background-position: -216px -234px !important;
 
 }
 .t3-icon-version-20 {
-       background-position: -198px -252px !important;
+       background-position: -216px -252px !important;
 
 }
 .t3-icon-version-21 {
-       background-position: -216px -252px !important;
+       background-position: -234px -252px !important;
 
 }
 .t3-icon-version-22 {
-       background-position: -234px -252px !important;
+       background-position: -252px -252px !important;
 
 }
 .t3-icon-version-23 {
-       background-position: -252px -252px !important;
+       background-position: -270px -252px !important;
 
 }
 .t3-icon-version-24 {
-       background-position: -270px -252px !important;
+       background-position: -288px -252px !important;
 
 }
 .t3-icon-version-25 {
-       background-position: -288px -252px !important;
+       background-position: -306px -252px !important;
 
 }
 .t3-icon-version-26 {
-       background-position: -306px -252px !important;
+       background-position: -0px -270px !important;
 
 }
 .t3-icon-version-27 {
-       background-position: -0px -270px !important;
+       background-position: -18px -270px !important;
 
 }
 .t3-icon-version-28 {
-       background-position: -18px -270px !important;
+       background-position: -36px -270px !important;
 
 }
 .t3-icon-version-29 {
-       background-position: -36px -270px !important;
+       background-position: -54px -270px !important;
 
 }
 .t3-icon-version-3 {
-       background-position: -216px -234px !important;
+       background-position: -234px -234px !important;
 
 }
 .t3-icon-version-30 {
-       background-position: -54px -270px !important;
+       background-position: -72px -270px !important;
 
 }
 .t3-icon-version-31 {
-       background-position: -72px -270px !important;
+       background-position: -90px -270px !important;
 
 }
 .t3-icon-version-32 {
-       background-position: -90px -270px !important;
+       background-position: -108px -270px !important;
 
 }
 .t3-icon-version-33 {
-       background-position: -108px -270px !important;
+       background-position: -126px -270px !important;
 
 }
 .t3-icon-version-34 {
-       background-position: -126px -270px !important;
+       background-position: -144px -270px !important;
 
 }
 .t3-icon-version-35 {
-       background-position: -144px -270px !important;
+       background-position: -162px -270px !important;
 
 }
 .t3-icon-version-36 {
-       background-position: -162px -270px !important;
+       background-position: -180px -270px !important;
 
 }
 .t3-icon-version-37 {
-       background-position: -180px -270px !important;
+       background-position: -198px -270px !important;
 
 }
 .t3-icon-version-38 {
-       background-position: -198px -270px !important;
+       background-position: -216px -270px !important;
 
 }
 .t3-icon-version-39 {
-       background-position: -216px -270px !important;
+       background-position: -234px -270px !important;
 
 }
 .t3-icon-version-4 {
-       background-position: -234px -234px !important;
+       background-position: -252px -234px !important;
 
 }
 .t3-icon-version-40 {
-       background-position: -234px -270px !important;
+       background-position: -252px -270px !important;
 
 }
 .t3-icon-version-41 {
-       background-position: -252px -270px !important;
+       background-position: -270px -270px !important;
 
 }
 .t3-icon-version-42 {
-       background-position: -270px -270px !important;
+       background-position: -288px -270px !important;
 
 }
 .t3-icon-version-43 {
-       background-position: -288px -270px !important;
+       background-position: -306px -270px !important;
 
 }
 .t3-icon-version-44 {
-       background-position: -306px -270px !important;
+       background-position: -0px -288px !important;
 
 }
 .t3-icon-version-45 {
-       background-position: -0px -288px !important;
+       background-position: -18px -288px !important;
 
 }
 .t3-icon-version-46 {
-       background-position: -18px -288px !important;
+       background-position: -36px -288px !important;
 
 }
 .t3-icon-version-47 {
-       background-position: -36px -288px !important;
+       background-position: -54px -288px !important;
 
 }
 .t3-icon-version-48 {
-       background-position: -54px -288px !important;
+       background-position: -72px -288px !important;
 
 }
 .t3-icon-version-49 {
-       background-position: -72px -288px !important;
+       background-position: -90px -288px !important;
 
 }
 .t3-icon-version-5 {
-       background-position: -252px -234px !important;
+       background-position: -270px -234px !important;
 
 }
 .t3-icon-version-50 {
-       background-position: -90px -288px !important;
+       background-position: -108px -288px !important;
 
 }
 .t3-icon-version-6 {
-       background-position: -270px -234px !important;
+       background-position: -288px -234px !important;
 
 }
 .t3-icon-version-7 {
-       background-position: -288px -234px !important;
+       background-position: -306px -234px !important;
 
 }
 .t3-icon-version-8 {
-       background-position: -306px -234px !important;
+       background-position: -0px -252px !important;
 
 }
 .t3-icon-version-9 {
-       background-position: -0px -252px !important;
+       background-position: -18px -252px !important;
 
 }
 .t3-icon-version-no-version {
-       background-position: -108px -288px !important;
+       background-position: -126px -288px !important;
 
 }
 .t3-icon-warning-in-use {
-       background-position: -126px -288px !important;
+       background-position: -144px -288px !important;
 
 }
 .t3-icon-warning-lock {
-       background-position: -144px -288px !important;
+       background-position: -162px -288px !important;
 
 }