9
9
define ( [
10
10
'jquery' ,
11
11
'jquery/ui' ,
12
- 'jquery/jstree/jquery.jstree'
12
+ 'jquery/jstree/jquery.jstree' ,
13
+ 'mage/translate' ,
13
14
] , function ( $ ) {
14
15
'use strict' ;
15
16
17
+ // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
16
18
$ . widget ( 'mage.rolesTree' , {
17
19
options : {
18
20
treeInitData : { } ,
@@ -26,9 +28,7 @@ define([
26
28
this . element . jstree ( {
27
29
plugins : [ 'checkbox' ] ,
28
30
checkbox : {
29
- // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
30
31
three_state : false ,
31
- // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
32
32
visible : this . options . checkboxVisible ,
33
33
cascade : 'undetermined'
34
34
} ,
@@ -40,13 +40,64 @@ define([
40
40
}
41
41
} ) ;
42
42
this . _bind ( ) ;
43
+ this . _createButtons ( ) ;
44
+ } ,
45
+
46
+ _createButtons : function ( ) {
47
+ const $tree = $ . jstree . reference ( this . element ) ;
48
+
49
+ const collapseAllButton = document . createElement ( 'button' ) ;
50
+ collapseAllButton . innerText = $ . mage . __ ( 'Collapse all' ) ;
51
+ collapseAllButton . addEventListener ( 'click' , function ( ) {
52
+ $tree . close_all ( ) ;
53
+ } ) ;
54
+
55
+ const expandAllButton = document . createElement ( 'button' ) ;
56
+ expandAllButton . innerText = $ . mage . __ ( 'Expand all' ) ;
57
+ expandAllButton . addEventListener ( 'click' , function ( ) {
58
+ $tree . open_all ( ) ;
59
+ } ) ;
60
+
61
+ const expandUsedButton = document . createElement ( 'button' ) ;
62
+ expandUsedButton . innerText = $ . mage . __ ( 'Expand selected' ) ;
63
+ expandUsedButton . addEventListener ( 'click' , function ( ) {
64
+ const hasOpened = [ ] ;
65
+ $tree . get_checked ( true ) . forEach ( function ( node ) {
66
+ $tree . open_node ( node ) ;
67
+ hasOpened . push ( node . id ) ;
68
+ for ( let i = 0 ; i < node . parents . length - 1 ; i ++ ) {
69
+ const id = node . parents [ i ] ;
70
+ if ( ! hasOpened . includes ( id ) ) {
71
+ $tree . open_node ( $tree . get_node ( id ) ) ;
72
+ hasOpened . push ( id ) ;
73
+ }
74
+ }
75
+ } ) ;
76
+ } ) ;
77
+
78
+ this . buttons = [
79
+ collapseAllButton ,
80
+ expandAllButton ,
81
+ expandUsedButton ,
82
+ ] ;
83
+
84
+ const parent = this . element [ 0 ] ;
85
+ const ul = this . element . find ( 'ul' ) [ 0 ] ;
86
+ this . buttons . forEach ( function ( button ) {
87
+ button . type = 'button' ;
88
+ parent . insertBefore ( button , ul ) ;
89
+ } ) ;
43
90
} ,
44
91
45
92
/**
46
93
* @private
47
94
*/
48
95
_destroy : function ( ) {
49
96
this . element . jstree ( 'destroy' ) ;
97
+
98
+ this . buttons . forEach ( function ( element ) {
99
+ element . parentNode . removeChild ( element ) ;
100
+ } ) ;
50
101
} ,
51
102
52
103
/**
@@ -64,7 +115,6 @@ define([
64
115
* @private
65
116
*/
66
117
_selectChildNodes : function ( event , selected ) {
67
- // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
68
118
selected . instance . open_node ( selected . node ) ;
69
119
selected . node . children . each ( function ( id ) {
70
120
var selector = '[id="' + id + '"]' ;
@@ -73,7 +123,6 @@ define([
73
123
selected . instance . get_node ( $ ( selector ) , false )
74
124
) ;
75
125
} ) ;
76
- // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
77
126
} ,
78
127
79
128
/**
0 commit comments