fancytree-rails 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +50 -0
  6. data/Rakefile +1 -0
  7. data/fancytree-rails.gemspec +27 -0
  8. data/lib/fancytree-rails.rb +1 -0
  9. data/lib/fancytree/rails.rb +7 -0
  10. data/lib/fancytree/rails/engine.rb +4 -0
  11. data/lib/fancytree/rails/version.rb +6 -0
  12. data/vendor/assets/javascripts/fancytree.js +2 -0
  13. data/vendor/assets/javascripts/fancytree/jquery.fancytree-all.js +5366 -0
  14. data/vendor/assets/javascripts/fancytree/jquery.fancytree-all.min.js +6 -0
  15. data/vendor/assets/javascripts/fancytree/jquery.fancytree-all.min.js.map +1 -0
  16. data/vendor/assets/javascripts/fancytree/jquery.fancytree.js +3715 -0
  17. data/vendor/assets/javascripts/fancytree/jquery.fancytree.min.js +6 -0
  18. data/vendor/assets/javascripts/fancytree/jquery.fancytree.min.js.map +1 -0
  19. data/vendor/assets/stylesheets/skin-awesome/ui.fancytree.css +272 -0
  20. data/vendor/assets/stylesheets/skin-lion/icons.gif +0 -0
  21. data/vendor/assets/stylesheets/skin-lion/loading.gif +0 -0
  22. data/vendor/assets/stylesheets/skin-lion/ui.fancytree-org.css +460 -0
  23. data/vendor/assets/stylesheets/skin-lion/ui.fancytree.css +453 -0
  24. data/vendor/assets/stylesheets/skin-themeroller/icons.gif +0 -0
  25. data/vendor/assets/stylesheets/skin-themeroller/loading.gif +0 -0
  26. data/vendor/assets/stylesheets/skin-themeroller/ui.fancytree-org.css +505 -0
  27. data/vendor/assets/stylesheets/skin-themeroller/ui.fancytree.css +505 -0
  28. data/vendor/assets/stylesheets/skin-vista/icons.gif +0 -0
  29. data/vendor/assets/stylesheets/skin-vista/loading.gif +0 -0
  30. data/vendor/assets/stylesheets/skin-vista/ui.fancytree-org.css +610 -0
  31. data/vendor/assets/stylesheets/skin-vista/ui.fancytree.css +459 -0
  32. data/vendor/assets/stylesheets/skin-win7/icons.gif +0 -0
  33. data/vendor/assets/stylesheets/skin-win7/loading.gif +0 -0
  34. data/vendor/assets/stylesheets/skin-win7/ui.fancytree-org.css +592 -0
  35. data/vendor/assets/stylesheets/skin-win7/ui.fancytree.css +523 -0
  36. data/vendor/assets/stylesheets/skin-win8/icons.gif +0 -0
  37. data/vendor/assets/stylesheets/skin-win8/loading.gif +0 -0
  38. data/vendor/assets/stylesheets/skin-win8/ui.fancytree-org.css +602 -0
  39. data/vendor/assets/stylesheets/skin-win8/ui.fancytree.css +470 -0
  40. data/vendor/assets/stylesheets/skin-xp/icons-rtl.gif +0 -0
  41. data/vendor/assets/stylesheets/skin-xp/icons.gif +0 -0
  42. data/vendor/assets/stylesheets/skin-xp/loading.gif +0 -0
  43. data/vendor/assets/stylesheets/skin-xp/ui.fancytree-org.css +578 -0
  44. data/vendor/assets/stylesheets/skin-xp/ui.fancytree.css +450 -0
  45. data/vendor/assets/stylesheets/skin-xp/vline-rtl.gif +0 -0
  46. data/vendor/assets/stylesheets/skin-xp/vline.gif +0 -0
  47. data/vendor/assets/stylesheets/ui.fancytree.css +3 -0
  48. metadata +166 -0
@@ -0,0 +1,602 @@
1
+ /*
2
+ * Fancytree Win8 styles
3
+
4
+ Borders have NO radius and NO gradients are used!
5
+
6
+ both:
7
+ unselected background: white
8
+ hover bar (unselected, inactive): #E5F3FB (border: #70C0E7) 'very light blue'
9
+ active node: #CBE8F6 (border: #26A0DA) 'light blue'
10
+ active node with hover: wie active node
11
+
12
+ Tree view:
13
+ active node, tree inactive: #F7F7F7 (border: #DEDEDE) 'light gray, selected, but tree not active'
14
+
15
+ List view:
16
+ selected bar: --> active bar
17
+ focus bar: transparent(white) + border 1px solid #3399FF ()
18
+
19
+ table left/right border: #EDEDED 'light gray'
20
+ */
21
+ .ui-helper-hidden {
22
+ display: none;
23
+ }
24
+
25
+ .fancytree-container
26
+ {
27
+ font-family: tahoma, arial, helvetica;
28
+ font-size: 10pt; /* font size should not be too big */
29
+ white-space: nowrap;
30
+ padding: 3px;
31
+ margin: 0; /* issue 201 */
32
+ background-color: white;
33
+ border: 1px dotted gray;
34
+ overflow: auto;
35
+ height: 100%; /* issue 263 */
36
+ }
37
+
38
+ ul.fancytree-container ul
39
+ {
40
+ padding: 0 0 0 16px;
41
+ margin: 0;
42
+ }
43
+
44
+ ul.fancytree-container li
45
+ {
46
+ list-style-image: none;
47
+ list-style-position: outside;
48
+ list-style-type: none;
49
+ -moz-background-clip:border;
50
+ -moz-background-inline-policy: continuous;
51
+ -moz-background-origin: padding;
52
+ background-attachment: scroll;
53
+ background-color: transparent;
54
+ background-position: 0 0;
55
+ background-repeat: repeat-y;
56
+ background-image: none; /* no v-lines */
57
+
58
+ margin:0;
59
+ padding:1px 0 0 0;
60
+ }
61
+ /* Suppress lines for last child node */
62
+ ul.fancytree-container li.fancytree-lastsib
63
+ {
64
+ background-image: none;
65
+ }
66
+ /* Suppress lines if level is fixed expanded (option minExpandLevel) */
67
+ ul.fancytree-no-connector > li
68
+ {
69
+ background-image: none;
70
+ }
71
+
72
+ /* Style, when control is disabled */
73
+ .ui-fancytree-disabled ul.fancytree-container
74
+ {
75
+ opacity: 0.5;
76
+ /* filter: alpha(opacity=50); /* Yields a css warning */
77
+ background-color: silver;
78
+ }
79
+
80
+
81
+ span.fancytree-node
82
+ {
83
+ display: inline-block;
84
+ width: 100%;
85
+ border: 1px solid transparent;
86
+ }
87
+
88
+ /*******************************************************************************
89
+ * Common icon definitions
90
+ */
91
+ span.fancytree-empty,
92
+ span.fancytree-vline,
93
+ /*span.fancytree-connector,*/
94
+ span.fancytree-expander,
95
+ span.fancytree-icon,
96
+ span.fancytree-checkbox,
97
+ span.fancytree-radio,
98
+ span.fancytree-drag-helper-img,
99
+ #fancytree-drop-marker
100
+ {
101
+ width: 16px;
102
+ height: 16px;
103
+ /* display: -moz-inline-box; /* @ FF 1+2 removed for issue 221*/
104
+ /* -moz-box-align: start; /* issue 221 */
105
+ display: inline-block; /* Required to make a span sizeable */
106
+ vertical-align: top;
107
+ background-repeat: no-repeat;
108
+ background-position: left;
109
+ background-image: url("icons.gif");
110
+ background-position: 0 0;
111
+ }
112
+ /** Used by iconclass option */
113
+ span.fancytree-custom-icon {
114
+ display: inline-block;
115
+ }
116
+ /** Used by 'icon' node option: */
117
+ .fancytree-container img
118
+ {
119
+ width: 16px;
120
+ height: 16px;
121
+ margin-left: 3px;
122
+ vertical-align: top;
123
+ border-style: none;
124
+ }
125
+
126
+
127
+ /*******************************************************************************
128
+ * Lines and connectors
129
+ */
130
+ /* span.fancytree-connector
131
+ {
132
+ background-image: none;
133
+ }
134
+ */
135
+ /*******************************************************************************
136
+ * Expander icon
137
+ * Note: IE6 doesn't correctly evaluate multiples class names,
138
+ * so we create combined class names that can be used in the CSS.
139
+ *
140
+ * Prefix: fancytree-exp-
141
+ * 1st character: 'e': expanded, 'c': collapsed, 'n': no children
142
+ * 2nd character (optional): 'd': lazy (Delayed)
143
+ * 3rd character (optional): 'l': Last sibling
144
+ */
145
+
146
+ span.fancytree-expander
147
+ {
148
+ background-position: 0px -80px;
149
+ cursor: pointer;
150
+ }
151
+ span.fancytree-expander:hover
152
+ {
153
+ background-position: -16px -80px;
154
+ }
155
+ .fancytree-exp-n span.fancytree-expander:hover /* Collapsed, not delayed, not last sibling */
156
+ {
157
+ background-position: -16px -80px;
158
+ }
159
+ .fancytree-exp-cl span.fancytree-expander /* Collapsed, not delayed, last sibling */
160
+ {
161
+ }
162
+ .fancytree-exp-cd span.fancytree-expander /* Collapsed, delayed, not last sibling */
163
+ {
164
+ }
165
+ .fancytree-exp-cdl span.fancytree-expander /* Collapsed, delayed, last sibling */
166
+ {
167
+ }
168
+ .fancytree-exp-e span.fancytree-expander, /* Expanded, not delayed, not last sibling */
169
+ .fancytree-exp-ed span.fancytree-expander, /* Expanded, delayed, not last sibling */
170
+ .fancytree-exp-el span.fancytree-expander, /* Expanded, not delayed, last sibling */
171
+ .fancytree-exp-edl span.fancytree-expander /* Expanded, delayed, last sibling */
172
+ {
173
+ background-position: -32px -80px;
174
+ }
175
+ .fancytree-exp-e span.fancytree-expander:hover, /* Expanded, not delayed, not last sibling */
176
+ .fancytree-exp-ed span.fancytree-expander:hover, /* Expanded, delayed, not last sibling */
177
+ .fancytree-exp-el span.fancytree-expander:hover, /* Expanded, not delayed, last sibling */
178
+ .fancytree-exp-edl span.fancytree-expander:hover /* Expanded, delayed, last sibling */
179
+ {
180
+ background-position: -48px -80px;
181
+ }
182
+ .fancytree-loading span.fancytree-expander /* 'Loading' status overrides all others */
183
+ {
184
+ background-position: 0 0;
185
+ background-image: url("loading.gif");
186
+ }
187
+
188
+ .fancytree-exp-n span.fancytree-expander, /* Connector instead of expander, if node has no children */
189
+ .fancytree-exp-nl span.fancytree-expander
190
+ {
191
+ background-image: none;
192
+ cursor: default;
193
+ }
194
+
195
+
196
+ /*******************************************************************************
197
+ * Checkbox icon
198
+ */
199
+ span.fancytree-checkbox
200
+ {
201
+ margin-left: 3px;
202
+ background-position: 0px -32px;
203
+ }
204
+ span.fancytree-checkbox:hover
205
+ {
206
+ background-position: -16px -32px;
207
+ }
208
+
209
+ .fancytree-partsel span.fancytree-checkbox
210
+ {
211
+ background-position: -64px -32px;
212
+ }
213
+ .fancytree-partsel span.fancytree-checkbox:hover
214
+ {
215
+ background-position: -80px -32px;
216
+ }
217
+
218
+ .fancytree-selected span.fancytree-checkbox
219
+ {
220
+ background-position: -32px -32px;
221
+ }
222
+ .fancytree-selected span.fancytree-checkbox:hover
223
+ {
224
+ background-position: -48px -32px;
225
+ }
226
+
227
+ /*******************************************************************************
228
+ * Radiobutton icon
229
+ * This is a customization, that may be activated by overriding the 'checkbox'
230
+ * class name as 'fancytree-radio' in the tree options.
231
+ */
232
+ .fancytree-radio span.fancytree-checkbox
233
+ {
234
+ margin-left: 3px;
235
+ background-position: 0px -48px;
236
+ }
237
+ .fancytree-radio span.fancytree-checkbox:hover
238
+ {
239
+ background-position: -16px -48px;
240
+ }
241
+
242
+ .fancytree-radio .fancytree-partsel span.fancytree-checkbox
243
+ {
244
+ background-position: -64px -48px;
245
+ }
246
+ .fancytree-radio .fancytree-partsel span.fancytree-checkbox:hover
247
+ {
248
+ background-position: -80px -48px;
249
+ }
250
+
251
+ .fancytree-radio .fancytree-selected span.fancytree-checkbox
252
+ {
253
+ background-position: -32px -48px;
254
+ }
255
+ .fancytree-radio .fancytree-selected span.fancytree-checkbox:hover
256
+ {
257
+ background-position: -48px -48px;
258
+ }
259
+
260
+
261
+ /*******************************************************************************
262
+ * Node type icon
263
+ * Note: IE6 doesn't correctly evaluate multiples class names,
264
+ * so we create combined class names that can be used in the CSS.
265
+ *
266
+ * Prefix: fancytree-ico-
267
+ * 1st character: 'e': expanded, 'c': collapsed
268
+ * 2nd character (optional): 'f': folder
269
+ */
270
+
271
+ span.fancytree-icon /* Default icon */
272
+ {
273
+ margin-left: 3px;
274
+ background-position: 0px 0px;
275
+ }
276
+
277
+ .fancytree-has-children span.fancytree-icon /* Default icon */
278
+ {
279
+ /* background-position: 0px -16px; */
280
+ }
281
+
282
+ .fancytree-ico-cf span.fancytree-icon /* Collapsed Folder */
283
+ {
284
+ background-position: 0px -16px;
285
+ }
286
+
287
+ .fancytree-ico-ef span.fancytree-icon /* Expanded Folder */
288
+ {
289
+ background-position: -64px -16px;
290
+ }
291
+
292
+ /* Status node icons */
293
+
294
+ .fancytree-statusnode-wait span.fancytree-icon
295
+ {
296
+ background-image: url("loading.gif");
297
+ }
298
+
299
+ .fancytree-statusnode-error span.fancytree-icon
300
+ {
301
+ background-position: 0px -112px;
302
+ /* background-image: url("ltError.gif");*/
303
+ }
304
+
305
+ /*******************************************************************************
306
+ * Node titles
307
+ */
308
+
309
+ span.fancytree-title
310
+ {
311
+ display: inline-block;
312
+ }
313
+ /* Remove blue color and underline from title links */
314
+ a.fancytree-title
315
+ {
316
+ text-decoration: none;
317
+ }
318
+
319
+ .fancytree-title
320
+ {
321
+ display: inline-block; /* Better alignment, when title contains <br> */
322
+ /* vertical-align: top;*/
323
+ padding-left: 3px;
324
+ padding-right: 3px; /* Otherwise italic font will be outside bounds */
325
+ /* line-height: 16px; /* should be the same as img height, in case 16 px */
326
+ color: black; /* inherit doesn't work on IE */
327
+ vertical-align: top;
328
+ margin: 0px;
329
+ margin-left: 3px;
330
+ /* outline: 0; /* @ Firefox, prevent dotted border after click */
331
+ /* Set transparent border to prevent jumping when active node gets a border
332
+ (we can do this, because this theme doesn't use vertical lines)
333
+ */
334
+ /* border: 1px solid white; /* Note: 'transparent' would not work in IE6 */
335
+ cursor: pointer;
336
+ }
337
+ span.fancytree-node:hover
338
+ {
339
+ background-color: #E5F3FB;
340
+ border-color: #70C0E7;
341
+ }
342
+ .fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused
343
+ {
344
+ border-color: #3399FF;
345
+ /* outline: 1px solid #3399FF; */
346
+ }
347
+ span.fancytree-node.fancytree-active,
348
+ span.fancytree-node.fancytree-selected
349
+ { /* active/selcted nodes inside inactive tree */
350
+ background-color: #F7F7F7;
351
+ border-color: #DEDEDE;
352
+ }
353
+ .fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-active,
354
+ .fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-selected,
355
+ span.fancytree-node.fancytree-active:hover,
356
+ span.fancytree-node.fancytree-selected:hover
357
+ {
358
+ background-color: #CBE8F6;
359
+ border-color: #26A0DA;
360
+ }
361
+ span.fancytree-node.fancytree-selected
362
+ {
363
+ font-style: italic;
364
+ }
365
+
366
+
367
+ /*******************************************************************************
368
+ * 'table' extension
369
+ */
370
+
371
+ /*
372
+ table.fancytree-ext-table {
373
+ border-collapse: collapse;
374
+ width: 100%;
375
+ }
376
+ table.fancytree-ext-table tbody tr:nth-child(even){
377
+ background-color: #f4f4f8;
378
+ }
379
+ table.fancytree-ext-table tbody tr td {
380
+ border: 1px solid lightgray;
381
+ }
382
+ */
383
+ table.fancytree-ext-table {
384
+ border-collapse: collapse;
385
+ }
386
+ table.fancytree-ext-table tbody tr:hover {
387
+ background-color: #E5F3FB;
388
+ outline: 1px solid #70C0E7;
389
+ }
390
+ table.fancytree-ext-table.fancytree-container.fancytree-treefocus span.fancytree-node.fancytree-focused
391
+ {
392
+ outline: 1px solid #3399FF;
393
+ }
394
+ table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-focused {
395
+ outline: 1px solid #26A0DA;
396
+ }
397
+ table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-active,
398
+ table.fancytree-ext-table.fancytree-treefocus tbody tr.fancytree-selected
399
+ {
400
+ background-color: #CBE8F6;
401
+ outline: 1px solid #26A0DA;
402
+ }
403
+ table.fancytree-ext-table tbody tr.fancytree-active,
404
+ table.fancytree-ext-table tbody tr.fancytree-selected
405
+ {
406
+ background-color: #F7F7F7;
407
+ outline: 1px solid #DEDEDE;
408
+ }
409
+
410
+ /*******************************************************************************
411
+ * 'columnview' extension
412
+ */
413
+
414
+ /*
415
+ table.fancytree-ext-columnview {
416
+ border-collapse: collapse;
417
+ width: 100%;
418
+ }
419
+ */
420
+ table.fancytree-ext-columnview td
421
+ {
422
+ position: relative;
423
+ }
424
+ table.fancytree-ext-columnview td >ul
425
+ {
426
+ padding: 0;
427
+ }
428
+ table.fancytree-ext-columnview td >ul li
429
+ {
430
+ list-style-image: none;
431
+ list-style-position: outside;
432
+ list-style-type: none;
433
+ -moz-background-clip:border;
434
+ -moz-background-inline-policy: continuous;
435
+ -moz-background-origin: padding;
436
+ background-attachment: scroll;
437
+ background-color: transparent;
438
+ background-position: 0 0;
439
+ background-repeat: repeat-y;
440
+ background-image: none; /* no v-lines */
441
+
442
+ margin: 0;
443
+ padding: 1px 0 0 0;
444
+ }
445
+ /*
446
+ table.fancytree-ext-columnview tbody tr[0] {
447
+ height: 200px;
448
+ }
449
+ */
450
+ table.fancytree-ext-columnview tbody tr td {
451
+ border: 1px solid gray;
452
+ vertical-align: top;
453
+ overflow: auto;
454
+ }
455
+ table.fancytree-ext-columnview span.fancytree-node {
456
+ position: relative; /* allow positioning of embedded spans*/
457
+ }
458
+ table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
459
+ background-color: #CBE8F6;
460
+ }
461
+ /*
462
+ table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
463
+ background-color: royalblue;
464
+ }
465
+ */
466
+ table.fancytree-ext-columnview span.fancytree-cv-right {
467
+ background-position: 0px -80px;
468
+ position: absolute;
469
+ right: 3px;
470
+ }
471
+
472
+ /*******************************************************************************
473
+ * 'filter' extension
474
+ */
475
+ .fancytree-ext-filter .fancytree-node .fancytree-title {
476
+ color: silver;
477
+ font-weight: lighter;
478
+ }
479
+ .fancytree-ext-filter .fancytree-node.fancytree-submatch .fancytree-title {
480
+ color: black;
481
+ font-weight: normal;
482
+ }
483
+ .fancytree-ext-filter .fancytree-node.fancytree-match .fancytree-title {
484
+ color: black;
485
+ font-weight: bold;
486
+ }
487
+
488
+ /*
489
+ .fancytree-ext-filter-hide span.fancytree-node,
490
+ .fancytree-ext-filter-hide tr.fancytree-node {
491
+ display: none;
492
+ }
493
+ .fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch,
494
+ .fancytree-ext-filter-hide span.fancytree-node.fancytree-match {
495
+ display: inline-block;
496
+ }
497
+ .fancytree-ext-filter-hide tr.fancytree-node.fancytree-submatch,
498
+ .fancytree-ext-filter-hide tr.fancytree-node.fancytree-match {
499
+ display: table-row;
500
+ }
501
+ */
502
+
503
+ /*******************************************************************************
504
+ * Drag'n'drop support
505
+ */
506
+
507
+ /*** Helper object ************************************************************/
508
+ div.fancytree-drag-helper
509
+ {
510
+ }
511
+ div.fancytree-drag-helper a
512
+ {
513
+ border: 1px solid gray;
514
+ background-color: white;
515
+ padding-left: 5px;
516
+ padding-right: 5px;
517
+ opacity: 0.8;
518
+ }
519
+ span.fancytree-drag-helper-img
520
+ {
521
+ /*
522
+ position: relative;
523
+ left: -16px;
524
+ */
525
+ }
526
+ div.fancytree-drag-helper /*.fancytree-drop-accept*/
527
+ {
528
+ /* border-color: green;
529
+ background-color: red;*/
530
+ }
531
+ div.fancytree-drop-accept span.fancytree-drag-helper-img
532
+ {
533
+ background-position: -32px -112px;
534
+ }
535
+ div.fancytree-drag-helper.fancytree-drop-reject
536
+ {
537
+ border-color: red;
538
+ }
539
+ div.fancytree-drop-reject span.fancytree-drag-helper-img
540
+ {
541
+ background-position: -16px -112px;
542
+ }
543
+
544
+ /*** Drop marker icon *********************************************************/
545
+
546
+ #fancytree-drop-marker
547
+ {
548
+ width: 24px;
549
+ position: absolute;
550
+ background-position: 0 -128px;
551
+ margin: 0;
552
+ }
553
+ #fancytree-drop-marker.fancytree-drop-after,
554
+ #fancytree-drop-marker.fancytree-drop-before
555
+ {
556
+ width:64px;
557
+ background-position: 0 -144px;
558
+ }
559
+ #fancytree-drop-marker.fancytree-drop-copy
560
+ {
561
+ background-position: -64px -128px;
562
+ }
563
+ #fancytree-drop-marker.fancytree-drop-move
564
+ {
565
+ background-position: -64px -128px;
566
+ }
567
+
568
+ /*** Source node while dragging ***********************************************/
569
+
570
+ span.fancytree-drag-source
571
+ {
572
+ /* border: 1px dotted gray; */
573
+ background-color: #e0e0e0;
574
+ }
575
+ span.fancytree-drag-source a
576
+ {
577
+ color: gray;
578
+ }
579
+
580
+ /*** Target node while dragging cursor is over it *****************************/
581
+
582
+ span.fancytree-drop-target
583
+ {
584
+ /*border: 1px solid gray;*/
585
+ }
586
+ span.fancytree-drop-target a
587
+ {
588
+ }
589
+ span.fancytree-drop-target.fancytree-drop-accept a
590
+ {
591
+ /*border: 1px solid green;*/
592
+ background-color: #3169C6 !important;
593
+ color: white !important; /* @ IE6 */
594
+ text-decoration: none;
595
+ }
596
+ span.fancytree-drop-target.fancytree-drop-reject
597
+ {
598
+ /*border: 1px solid red;*/
599
+ }
600
+ span.fancytree-drop-target.fancytree-drop-after a
601
+ {
602
+ }