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,66 @@ 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
+ collapseAllButton = document . createElement ( 'button' ) ,
49
+ expandAllButton = document . createElement ( 'button' ) ,
50
+ expandUsedButton = document . createElement ( 'button' ) ,
51
+ parent = this . element [ 0 ] ,
52
+ ul = this . element . find ( 'ul' ) [ 0 ] ;
53
+
54
+ collapseAllButton . innerText = $ . mage . __ ( 'Collapse all' ) ;
55
+ collapseAllButton . addEventListener ( 'click' , function ( ) {
56
+ $tree . close_all ( ) ;
57
+ } ) ;
58
+
59
+ expandAllButton . innerText = $ . mage . __ ( 'Expand all' ) ;
60
+ expandAllButton . addEventListener ( 'click' , function ( ) {
61
+ $tree . open_all ( ) ;
62
+ } ) ;
63
+
64
+ expandUsedButton . innerText = $ . mage . __ ( 'Expand selected' ) ;
65
+ expandUsedButton . addEventListener ( 'click' , function ( ) {
66
+ const hasOpened = [ ] ;
67
+
68
+ $tree . get_checked ( true ) . forEach ( function ( node ) {
69
+ $tree . open_node ( node ) ;
70
+ hasOpened . push ( node . id ) ;
71
+ for ( let i = 0 ; i < node . parents . length - 1 ; i ++ ) {
72
+ const id = node . parents [ i ] ;
73
+
74
+ if ( ! hasOpened . includes ( id ) ) {
75
+ $tree . open_node ( $tree . get_node ( id ) ) ;
76
+ hasOpened . push ( id ) ;
77
+ }
78
+ }
79
+ } ) ;
80
+ } ) ;
81
+
82
+ this . buttons = [
83
+ collapseAllButton ,
84
+ expandAllButton ,
85
+ expandUsedButton
86
+ ] ;
87
+
88
+ this . buttons . forEach ( function ( button ) {
89
+ button . type = 'button' ;
90
+ parent . insertBefore ( button , ul ) ;
91
+ } ) ;
43
92
} ,
44
93
45
94
/**
46
95
* @private
47
96
*/
48
97
_destroy : function ( ) {
49
98
this . element . jstree ( 'destroy' ) ;
99
+
100
+ this . buttons . forEach ( function ( element ) {
101
+ element . parentNode . removeChild ( element ) ;
102
+ } ) ;
50
103
} ,
51
104
52
105
/**
@@ -64,7 +117,6 @@ define([
64
117
* @private
65
118
*/
66
119
_selectChildNodes : function ( event , selected ) {
67
- // jscs:disable requireCamelCaseOrUpperCaseIdentifiers
68
120
selected . instance . open_node ( selected . node ) ;
69
121
selected . node . children . each ( function ( id ) {
70
122
var selector = '[id="' + id + '"]' ;
@@ -73,7 +125,6 @@ define([
73
125
selected . instance . get_node ( $ ( selector ) , false )
74
126
) ;
75
127
} ) ;
76
- // jscs:enable requireCamelCaseOrUpperCaseIdentifiers
77
128
} ,
78
129
79
130
/**
0 commit comments