3
3
*/
4
4
var AdminTree = ( function ( ) {
5
5
6
- var my = { } ,
7
- generateDialog ;
6
+ 'use strict' ;
8
7
9
- generateDialog = function ( url , closeCallback ) {
10
- var treeDialog = jQuery ( "<iframe id='tree_dialog'></iframe>" ) ; // iframe is needed because the delivered form might need some additional JS
8
+ var my = { } ;
11
9
12
- jQuery ( document . body ) . append ( treeDialog ) ;
10
+ var generateDialog = function ( url , closeCallback ) {
11
+ // iframe is needed because the delivered form might need some additional JS
12
+ var treeDialog = jQuery ( "<iframe id='tree_dialog'></iframe>" ) ;
13
13
treeDialog . attr ( 'src' , url ) ;
14
+ treeDialog . css ( 'height' , '500px' ) ;
14
15
15
16
treeDialog . dialog ( {
16
- width : 800 ,
17
- modal : true ,
18
- autoOpen : true ,
17
+ width : 800 ,
18
+ modal : true ,
19
+ autoOpen : true ,
19
20
resizable : true ,
20
- close : function ( event , ui ) {
21
+ zIndex : 9999 ,
22
+ close : function ( e , ui ) {
21
23
if ( closeCallback ) {
22
- closeCallback ( event , ui ) ;
24
+ closeCallback ( e , ui ) ;
23
25
}
24
- } ,
25
- zIndex : 9999
26
+ }
26
27
} ) ;
27
28
28
- treeDialog . attr ( 'style' , 'height: 500px' ) ;
29
+ jQuery ( document . body ) . append ( treeDialog ) ;
29
30
30
31
return treeDialog ;
31
32
} ;
32
33
33
34
my . generateTreeStateArray = function ( path ) {
34
35
35
- var start , pos , segments , curSegment , curItem ;
36
-
37
- curSegment = '' ;
38
- segments = [ ] ;
39
- start = 1 ;
40
- pos = path . indexOf ( '/' , start ) ;
36
+ var curItem ;
37
+ var curSegment = '' ;
38
+ var segments = [ ] ;
39
+ var start = 1 ;
40
+ var pos = path . indexOf ( '/' , start ) ;
41
41
42
42
while ( pos > 0 ) {
43
43
curItem = path . substr ( start , pos - start ) ;
44
- if ( curItem !== '' ) {
44
+ if ( '' !== curItem ) {
45
45
curSegment = curSegment + '/' + curItem ;
46
+
46
47
segments . push ( curSegment ) ;
47
48
}
49
+
48
50
start = pos + 1 ;
49
51
pos = path . indexOf ( '/' , start ) ;
50
52
}
51
53
52
54
curItem = path . substr ( start ) ;
53
55
54
- if ( curItem !== '' ) {
56
+ if ( '' !== curItem ) {
55
57
curSegment = curSegment + '/' + curItem ;
58
+
56
59
segments . push ( curSegment ) ;
57
60
}
58
61
59
62
return segments ;
60
63
} ;
61
64
62
65
my . initTree = function ( config ) {
63
- if ( ! 'rootNode' in config ) {
64
- config . rootNode = "/" ;
65
- }
66
- if ( ! 'selected' in config ) {
66
+ jQuery . extend ( true , {
67
+ rootNode : '/' ,
68
+ selected : null , // will be set to the rootNode by default
69
+ routing_defaults : { } ,
70
+ selector : null ,
71
+ path : {
72
+ expanded : null ,
73
+ preloaded : null
74
+ } ,
75
+ ajax : {
76
+ children_url : null ,
77
+ move_url : null ,
78
+ reorder_url : null
79
+ } ,
80
+ types : { } ,
81
+ labels : {
82
+ createItem : null ,
83
+ deleteItem : null
84
+ } ,
85
+ createInOverlay : null ,
86
+ editInOverlay : null
87
+ } , config ) ;
88
+
89
+ if ( ! config . hasOwnProperty ( 'selected' ) ) {
67
90
config . selected = config . rootNode ;
68
91
}
69
- if ( ! 'routing_defaults' in config ) {
70
- config . routing_defaults = { } ;
71
- }
92
+
72
93
var treeInst = jQuery ( config . selector ) . jstree ( {
73
94
"core" : {
74
95
"initially_load" : config . path . expanded ,
75
96
"initially_open" : config . path . preloaded
76
97
} ,
77
- "plugins" : [ "contextmenu" , "themes" , "types" , "ui" , "json_data" , "crrm" , "dnd" , "cookies" ] ,
98
+ "plugins" : [ "contextmenu" , "themes" , "types" , "ui" , "json_data" , "crrm" , "dnd" , "cookies" ] ,
78
99
"json_data" : {
79
100
"ajax" : {
80
101
"url" : config . ajax . children_url ,
81
102
"data" : function ( node ) {
82
- if ( node == - 1 ) {
103
+ if ( - 1 === node ) {
83
104
return { 'root' : config . rootNode } ;
84
105
} else {
85
106
return { 'root' : jQuery ( node ) . attr ( 'id' ) } ;
@@ -88,34 +109,40 @@ var AdminTree = (function () {
88
109
}
89
110
} ,
90
111
"types" : {
91
- "max_depth" : - 1 ,
92
- "max_children" : - 1 ,
93
- "valid_children" : "all" ,
94
- "types" : config . types
112
+ "max_depth" : - 1 ,
113
+ "max_children" : - 1 ,
114
+ "valid_children" : "all" ,
115
+ "types" : config . types
95
116
} ,
96
117
"ui" : {
97
- "initially_select" : [ config . selected ]
118
+ "initially_select" : [ config . selected ]
98
119
} ,
99
120
"contextmenu" : {
100
- "items" : function ( node ) {
121
+ "items" : function ( node ) {
101
122
var result = { } ;
102
123
var nodetype = node . attr ( "rel" ) ;
103
- if ( nodetype in config . types ) {
124
+
125
+ if ( config . types . hasOwnProperty ( nodetype ) ) {
104
126
var createItem = { } ;
105
127
var found = false ;
128
+
106
129
createItem . label = config . labels . createItem ;
107
130
createItem . submenu = { } ;
108
- $ . each ( config . types [ nodetype ] . valid_children , function ( i , val ) {
109
- if ( val in config . types ) {
131
+
132
+ jQuery . each ( config . types [ nodetype ] . valid_children , function ( i , val ) {
133
+ if ( config . types . hasOwnProperty ( val ) ) {
110
134
createItem . submenu [ val ] = { } ;
111
135
createItem . submenu [ val ] . label = config . types [ val ] . label ;
112
136
createItem . submenu [ val ] . action = function ( node ) {
113
- routing_defaults = config . routing_defaults ;
114
- routing_defaults [ " parent" ] = node . attr ( "url_safe_id" ) ;
137
+ var routing_defaults = config . routing_defaults ;
138
+ routing_defaults . parent = node . attr ( "url_safe_id" ) ;
115
139
116
140
if ( config . createInOverlay ) {
117
141
generateDialog (
118
- Routing . generate ( config . types [ val ] . routes . create_route , routing_defaults ) ,
142
+ Routing . generate (
143
+ config . types [ val ] . routes . create_route ,
144
+ routing_defaults
145
+ ) ,
119
146
function ( ) {
120
147
treeInst . jstree ( 'refresh' , node ) ;
121
148
}
@@ -127,19 +154,22 @@ var AdminTree = (function () {
127
154
found = true ;
128
155
}
129
156
} ) ;
157
+
130
158
if ( found ) {
131
159
result . createItem = createItem ;
132
160
}
133
161
}
162
+
134
163
if ( undefined !== config . types [ node . attr ( "rel" ) ] . routes . delete_route ) {
135
164
result . deleteItem = { } ;
136
165
result . deleteItem . label = config . labels . deleteItem ;
137
166
result . deleteItem . action = function ( node ) {
138
- routing_defaults = config . routing_defaults ;
139
- routing_defaults [ "id" ] = node . attr ( "url_safe_id" ) ;
167
+ var routing_defaults = config . routing_defaults ;
168
+ routing_defaults . id = node . attr ( "url_safe_id" ) ;
140
169
window . location = Routing . generate ( config . types [ node . attr ( "rel" ) ] . routes . delete_route , routing_defaults ) ;
141
170
} ;
142
171
}
172
+
143
173
return result ;
144
174
}
145
175
} ,
@@ -157,16 +187,19 @@ var AdminTree = (function () {
157
187
158
188
treeInst . bind ( "select_node.jstree" , function ( event , data ) {
159
189
if ( data . rslt . obj . attr ( "rel" ) in config . types
160
- && data . rslt . obj . attr ( "id" ) != config . selected
161
- && undefined != config . types [ data . rslt . obj . attr ( "rel" ) ] . routes . select_route
190
+ && data . rslt . obj . attr ( "id" ) !== config . selected
191
+ && undefined !== config . types [ data . rslt . obj . attr ( "rel" ) ] . routes . select_route
162
192
) {
163
- routing_defaults = config . routing_defaults ;
164
- routing_defaults [ "id" ] = data . rslt . obj . attr ( "url_safe_id" ) ;
193
+ var routing_defaults = config . routing_defaults ;
194
+ routing_defaults . id = data . rslt . obj . attr ( "url_safe_id" ) ;
165
195
166
196
if ( config . editInOverlay ) {
167
197
if ( 2 < data . args . length ) { // only generateDialog() when the tree has received a click, not on refresh
168
198
generateDialog (
169
- Routing . generate ( config . types [ data . rslt . obj . attr ( "rel" ) ] . routes . select_route , routing_defaults ) ,
199
+ Routing . generate (
200
+ config . types [ data . rslt . obj . attr ( "rel" ) ] . routes . select_route ,
201
+ routing_defaults
202
+ ) ,
170
203
function ( ) {
171
204
treeInst . jstree ( 'refresh' ) ;
172
205
}
@@ -177,23 +210,26 @@ var AdminTree = (function () {
177
210
}
178
211
} else {
179
212
// TODO: overlay?
180
- console . log ( 'This node is not editable' ) ;
213
+ console . log ( 'This node is not editable' ) ; // note this will break lte IE8
181
214
}
182
215
} )
183
216
. bind ( "before.jstree" , function ( e , data ) {
184
- if ( data . func === "move_node" && data . plugin === "crrm" && data . args [ 1 ] == false ) {
217
+ if ( "move_node" === data . func && "crrm" === data . plugin && false === data . args [ 1 ] ) {
185
218
var confirmEvent = jQuery . Event ( 'symfony_cmf_tree.move' , data . inst ) ;
186
- $ ( this ) . trigger ( confirmEvent ) ;
219
+
220
+ jQuery ( this ) . trigger ( confirmEvent ) ;
221
+
187
222
if ( confirmEvent . isDefaultPrevented ( ) ) {
188
223
e . stopImmediatePropagation ( ) ;
224
+
189
225
return false ;
190
226
}
191
227
}
192
228
} )
193
229
. bind ( "move_node.jstree" , function ( event , data ) {
194
- var dropped = data . rslt . o ;
195
- var target = data . rslt . r ;
196
- var position = data . rslt . p ;
230
+ var dropped = data . rslt . o ;
231
+ var target = data . rslt . r ;
232
+ var position = data . rslt . p ;
197
233
var oldParent = data . rslt . op ;
198
234
var newParent = data . rslt . np ;
199
235
@@ -204,7 +240,7 @@ var AdminTree = (function () {
204
240
}
205
241
206
242
if ( ! oldParent . is ( newParent ) ) {
207
- $ . post (
243
+ jQuery . post (
208
244
config . ajax . move_url ,
209
245
{ "dropped" : dropped . attr ( "id" ) , "target" : parent } ,
210
246
function ( data ) {
@@ -213,14 +249,15 @@ var AdminTree = (function () {
213
249
}
214
250
) ;
215
251
} else {
216
- $ . post (
252
+ jQuery . post (
217
253
config . ajax . reorder_url ,
218
254
{ "dropped" : dropped . attr ( "id" ) , "target" : target . attr ( "id" ) , "parent" : parent , "position" : position }
219
255
) ;
220
256
}
221
257
} )
222
-
223
- . delegate ( "a" , "click" , function ( event , data ) { event . preventDefault ( ) ; } ) ;
258
+ . on ( "click" , "a" , function ( e ) {
259
+ e . preventDefault ( ) ;
260
+ } ) ;
224
261
} ;
225
262
226
263
return my ;
0 commit comments