rsence-pre 2.2.2.1 → 2.3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/VERSION +1 -1
  2. data/conf/default_conf.yaml +6 -1
  3. data/js/comm/queue/queue.js +0 -1
  4. data/js/comm/transporter/transporter.js +32 -16
  5. data/js/comm/values/values.js +45 -13
  6. data/js/controls/sliders/slider/slider.js +5 -6
  7. data/js/controls/sliders/slider/themes/default/slider.css +34 -62
  8. data/js/controls/sliders/slider/themes/default/slider.html +4 -4
  9. data/js/controls/sliders/vslider/themes/default/vslider.css +43 -10
  10. data/js/controls/sliders/vslider/vslider.js +3 -1
  11. data/js/controls/stepper/stepper.js +1 -1
  12. data/js/controls/stringview/stringview.js +6 -8
  13. data/js/controls/stringview/themes/default/stringview.html +1 -1
  14. data/js/controls/textcontrol/textcontrol.js +22 -16
  15. data/js/controls/textcontrol/themes/default/textcontrol.css +23 -22
  16. data/js/controls/window/window.js +1 -1
  17. data/js/core/class/class.js +4 -4
  18. data/js/core/event/event.js +3 -2
  19. data/js/datetime/calendar/calendar.coffee +114 -58
  20. data/js/datetime/calendar/themes/default/calendar.css +4 -2
  21. data/js/foundation/control/control.js +2 -0
  22. data/js/foundation/control/dyncontrol/dyncontrol.js +15 -0
  23. data/js/foundation/control/eventresponder/eventresponder.js +29 -20
  24. data/js/foundation/eventmanager/eventmanager.coffee +1090 -0
  25. data/js/foundation/eventmanager/eventmanager.js +116 -28
  26. data/js/foundation/json_renderer/json_renderer.js +4 -2
  27. data/js/foundation/system/system.js +3 -0
  28. data/js/foundation/view/view.js +6 -30
  29. data/js/lists/listitems/listitems.js +8 -1
  30. data/js/lists/radiobuttonlist/radiobuttonlist.js +9 -4
  31. data/js/menus/minimenu/minimenu.js +11 -5
  32. data/js/menus/minimenuitem/minimenuitem.js +6 -4
  33. data/js/tables/table/table.coffee +19 -0
  34. data/js/tables/table/themes/default/table.css +0 -0
  35. data/js/tables/table/themes/default/table.html +19 -0
  36. data/lib/rsence/argv/initenv_argv.rb +1 -1
  37. data/lib/rsence/http/broker.rb +3 -1
  38. data/lib/rsence/msg.rb +1 -1
  39. data/lib/rsence/plugins/gui_plugin.rb +2 -0
  40. data/lib/rsence/sessionmanager.rb +7 -7
  41. data/lib/rsence/sessionstorage.rb +3 -1
  42. data/lib/rsence/transporter.rb +56 -32
  43. data/lib/rsence/valuemanager.rb +3 -3
  44. data/plugins/client_pkg/client_pkg.rb +5 -0
  45. data/plugins/client_pkg/lib/client_pkg_build.rb +29 -4
  46. metadata +10 -7
@@ -359,7 +359,7 @@ HWindow = HDynControl.extend({
359
359
  _fitsRect.setHeight( this.options.minSize[1] );
360
360
  }
361
361
  // doesn't fit or right-clicked or alt-clicked, maximize:
362
- if (!_fitsRect.equals(_maxRect) && (EVENT.status[ EVENT.button2 ] || EVENT.status[ EVENT.altKeyDown ]) ){
362
+ if (!_fitsRect.equals(_maxRect) && (EVENT.status.button2 || EVENT.status.altKeyDown) ){
363
363
  // console.log('force-max');
364
364
  this.animateTo( _maxRect );
365
365
  this.prevRect = HRect.nu( this.rect );
@@ -139,7 +139,7 @@ HClass.prototype = {
139
139
  return this;
140
140
  },
141
141
  /** = Description
142
- * If a method has been overridden then the base method provides access to the overridden method.
142
+ * If a method has been overridden then the base method provides access to the overridden method.
143
143
  * Call this method from any other method to invoke that method's ancestor.
144
144
  * It is also possible to call the base method from within a constructor function.
145
145
  *
@@ -205,7 +205,7 @@ HClass.extend = function(_instance, _static) {
205
205
  HClass._prototyping = true;
206
206
  // this is base for single instance or prototype (class structure) for object that are created
207
207
  // from this class
208
- _prototype = new this;
208
+ _prototype = new this();
209
209
  // copies properties and methods from _instance to _prototype (class structure)
210
210
  _extend.call(_prototype, _instance);
211
211
  // this constructor came from _instance
@@ -329,8 +329,8 @@ try {
329
329
  // console.log surrogate for browsers without a console
330
330
  if(window['console']===undefined){
331
331
  window.console = {
332
- log: function(){
333
- }
332
+ log: function(){},
333
+ warn: function(){}
334
334
  };
335
335
  }
336
336
 
@@ -65,11 +65,11 @@ Event = {
65
65
  if (!Event.observers) {
66
66
  Event.observers = [];
67
67
  }
68
- if (_elem.addEventListener) {
68
+ if (_elem && _elem.addEventListener) {
69
69
  this.observers.push([_elem, _name, _function, _useCapture]);
70
70
  _elem.addEventListener(_name, _function, _useCapture);
71
71
  }
72
- else if (_elem.attachEvent) {
72
+ else if (_elem && _elem.attachEvent) {
73
73
  this.observers.push([_elem, _name, _function, _useCapture]);
74
74
  _elem.attachEvent("on" + _name, _function);
75
75
  }
@@ -98,6 +98,7 @@ Event = {
98
98
  observe: function(_elem, _name, _function, _useCapture) {
99
99
  _useCapture = _useCapture || false;
100
100
  Event._observeAndCache(_elem, _name, _function, _useCapture);
101
+ return _function;
101
102
  },
102
103
 
103
104
  /** Stops observing the named event of the element and
@@ -20,7 +20,7 @@ HCalendar = HControl.extend
20
20
  ## the mouse wheel or equivalent content-scrolling user interface gesture
21
21
  defaultEvents:
22
22
  mouseWheel: true
23
- # click: true
23
+ keyDown: true
24
24
 
25
25
  ## Calls HCalendar#nextMonth or HCalendar#prevMonth based on delta change
26
26
  ## of the mouseWheel event
@@ -29,10 +29,65 @@ HCalendar = HControl.extend
29
29
  @nextMonth()
30
30
  else
31
31
  @prevMonth()
32
+
33
+ ## Draws the next month
34
+ nextMonth: (_set)->
35
+ _dateNext = new Date( @viewMonth[0], @viewMonth[1]+1, 1 )
36
+ _dateMs = _dateNext.getTime() - @tzMs(_dateNext)
37
+ if _set
38
+ @setValue( _dateMs/1000 )
39
+ else
40
+ @drawCalendar( new Date(_dateMs) )
41
+
42
+ ## Draws the prev month
43
+ prevMonth: (_set)->
44
+ _datePrev = new Date( @viewMonth[0], @viewMonth[1]-1, 1 )
45
+ _dateMs = _datePrev.getTime() - @tzMs(_datePrev)
46
+ if _set
47
+ @setValue( _dateMs/1000 )
48
+ else
49
+ @drawCalendar( new Date(_dateMs) )
32
50
 
33
- ## Simple click-through for the themed hyperlinks
34
- click: ->
35
- false
51
+ ## Draws the next year
52
+ nextYear: (_set)->
53
+ _dateNext = new Date( @viewMonth[0]+1, @viewMonth[1], 1 )
54
+ _dateMs = _dateNext.getTime() - @tzMs(_dateNext)
55
+ if _set
56
+ @setValue( _dateMs/1000 )
57
+ else
58
+ @drawCalendar( new Date(_dateMs) )
59
+
60
+ ## Draws the prev year
61
+ prevYear: (_set)->
62
+ _datePrev = new Date( @viewMonth[0]-1, @viewMonth[1], 1 )
63
+ _dateMs = _datePrev.getTime() - @tzMs(_datePrev)
64
+ if _set
65
+ @setValue( _dateMs/1000 )
66
+ else
67
+ @drawCalendar( new Date(_dateMs) )
68
+
69
+ nextDay: -> @setValue( @value + 24*60*60 )
70
+ prevDay: -> @setValue( @value - 24*60*60 )
71
+ nextWeek: -> @setValue( @value + 7*24*60*60 )
72
+ prevWeek: -> @setValue( @value - 7*24*60*60 )
73
+
74
+ ## Keyboard control
75
+ keyDown: (_key)->
76
+ if EVENT.status.shiftKeyDown
77
+ @prevMonth(true) if _key == Event.KEY_LEFT
78
+ @nextMonth(true) if _key == Event.KEY_RIGHT
79
+ @prevYear(true) if _key == Event.KEY_UP
80
+ @nextYear(true) if _key == Event.KEY_DOWN
81
+ else
82
+ @nextDay() if _key == Event.KEY_RIGHT
83
+ @prevDay() if _key == Event.KEY_LEFT
84
+ @nextWeek() if _key == Event.KEY_DOWN
85
+ @prevWeek() if _key == Event.KEY_UP
86
+ @prevMonth(true) if _key == Event.KEY_PAGEUP
87
+ @nextMonth(true) if _key == Event.KEY_PAGEDOWN
88
+ @prevYear(true) if _key == Event.KEY_HOME
89
+ @nextYear(true) if _key == Event.KEY_END
90
+ true
36
91
 
37
92
  drawSubviews: ->
38
93
  _this = @
@@ -128,91 +183,83 @@ HCalendar = HControl.extend
128
183
  }
129
184
  }
130
185
 
186
+ lostActiveStatus: (_obj)->
187
+ if (_obj and @menu and !@menu._killed and !_obj.isChildOf(@menu) and !_obj.isChildOf(@menu.menuItemView))
188
+ @menu.die()
189
+ @base(_obj)
190
+
131
191
  ## Calls #drawCalendar when the value is changed
132
192
  refreshValue: ->
133
193
  @drawCalendar( @date() )
134
194
 
135
- ## Draws the next month
136
- nextMonth: ->
137
- _dateNext = new Date( @viewMonth[0], @viewMonth[1]+1, 1 )
138
- _dateMs = _dateNext.getTime() - @tzMs(_dateNext)
139
- @drawCalendar( new Date(_dateMs) )
140
-
141
- ## Drows the prev month
142
- prevMonth: ->
143
- _datePrev = new Date( @viewMonth[0], @viewMonth[1]-1, 1 )
144
- _dateMs = _datePrev.getTime() - @tzMs(_datePrev)
145
- @drawCalendar( new Date(_dateMs) )
146
-
147
195
  ## Stores the currently viewed year and month
148
196
  viewMonth: [ 1970, 0 ]
149
197
 
150
198
  ## Shows a pulldown menu for month selection
151
199
  monthMenu: ->
152
200
  return unless HMiniMenu?
153
- _calendar = this
201
+ _calendar = @
154
202
  _monthValues = []
155
203
  for _monthName, i in HLocale.dateTime.strings.monthsLong
156
204
  _monthValues.push( [ i, _monthName ] )
157
205
  _rect = ELEM.getBoxCoords( @_monthMenu )
158
206
  _rect[0] += 20
159
207
  _rect[2] = 80 if _rect[2] < 80
160
- HMiniMenu.extend(
161
- _killAfterRefresh: false
208
+ @menu = HMiniMenu.extend(
209
+ click: ->
210
+ console.log('click')
162
211
  menuHide: ->
212
+ return if @_killed?
213
+ @_killed = true
163
214
  @base()
215
+ _calendar.setValue( _calendar.setMonth( @value ) )
216
+ if _calendar.month() != @value
217
+ _calendar.setValue( _calendar.setMday( 30 ) )
218
+ _calendar.setValue( _calendar.setMonth( @value ) )
219
+ if _calendar.month() != @value
220
+ _calendar.setValue( _calendar.setMday( 29 ) )
221
+ _calendar.setValue( _calendar.setMonth( @value ) )
222
+ if _calendar.month() != @value
223
+ _calendar.setValue( _calendar.setMday( 28 ) )
224
+ _calendar.setValue( _calendar.setMonth( @value ) )
164
225
  _menu = @
165
- _menu._killAfterRefresh = true
166
226
  COMM.Queue.push( ->
167
- if _menu._killAfterRefresh
168
- _menu.refreshValue()
227
+ EVENT.changeActiveControl(_calendar)
228
+ _calendar.menu = null
229
+ _menu.die()
169
230
  )
170
- return true;
171
- refreshValue: ->
172
- @base()
173
- if @_killAfterRefresh
174
- @_killAfterRefresh = false
175
- _calendar.setValue( _calendar.setMonth( @value ) )
176
- if _calendar.month() != @value
177
- _calendar.setValue( _calendar.setMday( 30 ) )
178
- _calendar.setValue( _calendar.setMonth( this.value ) )
179
- if _calendar.month() != @value
180
- _calendar.setValue( _calendar.setMday( 29 ) )
181
- _calendar.setValue( _calendar.setMonth( @value ) )
182
- if _calendar.month() != this.value
183
- _calendar.setValue( _calendar.setMday( 28 ) )
184
- _calendar.setValue( _calendar.setMonth( @value ) )
185
- _menu = this
186
- COMM.Queue.push( ->
187
- _menu.die()
188
- )
189
231
  ).new( _rect, @,
190
232
  value: @month()
191
233
  initialVisibility: true
192
- ).setListItems( _monthValues )
234
+ listItems: _monthValues
235
+ )
193
236
 
194
237
  ## Shows a text field for year selection
195
238
  yearMenu: ->
196
239
  _calendar = @
240
+ _calendarEnable = @enabled
197
241
  _rect = ELEM.getBoxCoords( @_yearMenu )
198
242
  _rect[0] += 20
199
243
  _rect[2] = 40 if _rect[2] < 40
200
- _rect[3] = 20
244
+ _rect[3] = 16
245
+ EVENT.changeActiveControl(null)
246
+ @setEnabled(false)
201
247
  HNumericTextControl.extend(
202
248
  refreshValue: ->
203
249
  @base()
204
250
  _calendar.setValue( _calendar.setYear( @value ) )
251
+ gainedActiveStatus: (_obj)->
252
+ @base(_obj)
253
+ _calendar.setEnabled(_calendarEnable)
205
254
  textBlur: ->
206
255
  @base()
207
- _year = this
256
+ _year = @
208
257
  COMM.Queue.push( ->
209
- _year.die() if _year.markupElemIds?
258
+ if _year.markupElemIds?
259
+ _year.die()
210
260
  )
211
- textEnter: ->
212
- @base()
213
- _returnKeyPressed = EVENT.status[ EVENT.keysDown ].indexOf( 13 ) != -1
214
- _noKeysPressed = EVENT.status[ EVENT.keysDown ].length == 0
215
- if _returnKeyPressed or _noKeysPressed
261
+ keyDown: (_key)->
262
+ if _key == Event.KEY_RETURN
216
263
  ELEM.get( @markupElemIds.value ).blur()
217
264
  ).new( _rect, @,
218
265
  value: @year()
@@ -220,6 +267,11 @@ HCalendar = HControl.extend
220
267
  maxValue: 38400
221
268
  focusOnCreate: true
222
269
  refreshOnInput: false
270
+ refreshOnIdle: false
271
+ events:
272
+ keyDown: true
273
+ style:
274
+ fontSize: '11px'
223
275
  )
224
276
 
225
277
  _destroyCalendarElems: ->
@@ -238,7 +290,6 @@ HCalendar = HControl.extend
238
290
  ## Params:
239
291
  ## - _date: The date on which calendar UI is opened at.
240
292
  drawCalendar: (_date)->
241
- @_destroyCalendarElems()
242
293
  _date = @date() unless ( _date instanceof Date )
243
294
  _calendarDateRange = @calendarDateRange( _date )
244
295
  _monthFirst = _calendarDateRange.month.firstDate
@@ -252,7 +303,7 @@ HCalendar = HControl.extend
252
303
  _colWidth = Math.floor( _availWidth / 8 )
253
304
  _rowHeight = Math.floor( _availHeight / 6 )
254
305
  _parentElem = @markupElemIds.value
255
- ELEM.setStyle( _parentElem, 'visibility', 'hidden', true )
306
+ # ELEM.setStyle( _parentElem, 'visibility', 'hidden', true )
256
307
  _elems = []
257
308
  _this = @
258
309
  for _row in [0..5]
@@ -288,9 +339,10 @@ HCalendar = HControl.extend
288
339
  else
289
340
  ELEM.addClassName( _colElem, 'calendar_weeks_week_col_yes' )
290
341
  ELEM.setAttr( _colElem, '_colSecs', _colSecs )
291
- Event.observe( ELEM.get( _colElem ), 'click', ->
292
- _this.setValue( @_colSecs )
293
- )
342
+ if @enabled
343
+ Event.observe( ELEM.get( _colElem ), 'click', ->
344
+ _this.setValue( @_colSecs )
345
+ )
294
346
  # ELEM.setAttr( _colElem, 'href', "javascript:HSystem.views[#{@viewId}].setValue(#{_colSecs})" )
295
347
  _left = (_col*_colWidth+_leftPlus)
296
348
  ELEM.setStyle( _colElem, 'left', _left+'px' )
@@ -298,13 +350,15 @@ HCalendar = HControl.extend
298
350
  ELEM.setStyle( _colElem, 'height', (_rowHeight-1)+'px' )
299
351
  ELEM.setStyle( _colElem, 'line-height', _rowHeight+'px' )
300
352
  ELEM.setHTML( _colElem, @mday( _colDate ) )
301
- ELEM.setStyle( _parentElem, 'visibility', 'inherit' )
353
+ # ELEM.setStyle( _parentElem, 'visibility', 'inherit' )
354
+ ELEM.flush()
302
355
  _stateElem = @markupElemIds.state
303
356
 
304
357
  @_monthMenu = ELEM.make( _stateElem, 'span' )#, 'a' )
305
358
  _elems.push( @_monthMenu )
306
359
  # ELEM.setAttr( @_monthMenu, 'href', "javascript:HSystem.views[#{@viewId}].monthMenu()" )
307
- Event.observe( ELEM.get( @_monthMenu ), 'click', ( -> _this.monthMenu() ), false )
360
+ if @enabled
361
+ Event.observe( ELEM.get( @_monthMenu ), 'click', ( -> _this.monthMenu() ), false )
308
362
  ELEM.setHTML( @_monthMenu, @monthName( _date ) )
309
363
 
310
364
  _spacer = ELEM.make( _stateElem, 'span' )
@@ -313,11 +367,13 @@ HCalendar = HControl.extend
313
367
 
314
368
  @_yearMenu = ELEM.make( _stateElem, 'span' )#, 'a' )
315
369
  _elems.push( @_yearMenu )
316
- Event.observe( ELEM.get( @_yearMenu ), 'click', ( -> _this.yearMenu() ), false )
370
+ if @enabled
371
+ Event.observe( ELEM.get( @_yearMenu ), 'click', ( -> _this.yearMenu() ), false )
317
372
  # ELEM.setAttr( @_yearMenu, 'href', "javascript:HSystem.views[#{@viewId}].yearMenu()" )
318
373
  ELEM.setHTML( @_yearMenu, @year( _date ) )
319
374
 
320
375
  @viewMonth = [ _monthFirst.getUTCFullYear(), _monthFirst.getUTCMonth() ]
376
+ @_destroyCalendarElems()
321
377
  @_drawCalendarElems = _elems
322
378
 
323
379
  HCalendar.implement( HDateTime )
@@ -95,10 +95,12 @@
95
95
  font-weight: bold;
96
96
  border: 1px solid #666;
97
97
  }
98
- .calendar_weeks_week_col_sel,
99
- .calendar_weeks_week_col_yes:hover {
98
+ .calendar_weeks_week_col_sel {
100
99
  background-color: #fff;
101
100
  }
101
+ .calendar_weeks_week_col_yes:hover {
102
+ border: 2px solid black; margin: -1px; z-index: 100; border-radius: 3px;
103
+ }
102
104
  .calendar_bg {
103
105
  position: absolute;
104
106
  left: -1px; right: -1px;
@@ -16,6 +16,8 @@
16
16
  **/
17
17
  var//RSence.Foundation
18
18
  HControl = HView.extend({
19
+
20
+ isCtrl: true,
19
21
 
20
22
  /** A flag: when true, calls the +refreshValue+ method whenever
21
23
  * +self.value+ is changed.
@@ -441,6 +441,11 @@ HDynControl = HControl.extend({
441
441
  x-=_parent.pageX();
442
442
  y-=_parent.pageY();
443
443
  }
444
+ else {
445
+ var _scrollPos = ELEM.getScrollPosition(0);
446
+ x+=_scrollPos[0];
447
+ y+=_scrollPos[1];
448
+ }
444
449
  this._startPoint = new HPoint(x,y);
445
450
  this._startRect = new HRect( this.rect );
446
451
  this._detectActionFlag();
@@ -473,6 +478,11 @@ HDynControl = HControl.extend({
473
478
  x-=_parent.pageX();
474
479
  y-=_parent.pageY();
475
480
  }
481
+ else {
482
+ var _scrollPos = ELEM.getScrollPosition(0);
483
+ x+=_scrollPos[0];
484
+ y+=_scrollPos[1];
485
+ }
476
486
  if(this._actionFlag!==-1){
477
487
  this._actionFns[this._actionFlag](this,x,y);
478
488
  }
@@ -503,6 +513,11 @@ HDynControl = HControl.extend({
503
513
  x-=_parent.pageX();
504
514
  y-=_parent.pageY();
505
515
  }
516
+ else {
517
+ var _scrollPos = ELEM.getScrollPosition(0);
518
+ x+=_scrollPos[0];
519
+ y+=_scrollPos[1];
520
+ }
506
521
  if(this._actionFlag!==-1){
507
522
  this._actionFns[this._actionFlag](this,x,y);
508
523
  }
@@ -28,6 +28,8 @@
28
28
  ** on the droppable.
29
29
  ** +startHover+:: Called when a draggable item is moved
30
30
  ** over the droppable.
31
+ ** +hover+:: Called while a dragged item is moved between
32
+ ** startHover and endHover.
31
33
  ** +endHover+:: Called when a draggable item is moved out
32
34
  ** of the droppable.
33
35
  ** +keyDown+:: Called when the user presses a key, and
@@ -154,10 +156,11 @@ HEventResponder = HClass.extend({
154
156
  click: false,
155
157
  resize: false,
156
158
  doubleClick: false,
157
- contextMenu: false
159
+ contextMenu: false,
160
+ rectHover: false,
161
+ multiDrop: false
158
162
  } ).extend( this.defaultEvents ).extend( _events?_events:{} ).nu();
159
163
  }
160
- this.events.ctrl = this;
161
164
  EVENT.reg( this, this.events );
162
165
  return this;
163
166
  },
@@ -487,7 +490,7 @@ HEventResponder = HClass.extend({
487
490
  if(this.enabled) {
488
491
  this.toggleCSSClass(this.elemId, HControl.CSS_ACTIVE, true);
489
492
  }
490
- this.gainedActiveStatus(_lastActiveControl);
493
+ return this.gainedActiveStatus(_lastActiveControl);
491
494
  },
492
495
 
493
496
 
@@ -644,7 +647,6 @@ HEventResponder = HClass.extend({
644
647
  *
645
648
  **/
646
649
  endDrag: function(x, y) {
647
- this.invalidatePositionCache();
648
650
  },
649
651
 
650
652
  /** = Description
@@ -678,6 +680,10 @@ HEventResponder = HClass.extend({
678
680
  },
679
681
  onHoverStart: function(obj) {},
680
682
 
683
+ hover: function(obj){
684
+
685
+ },
686
+
681
687
  /** = Description
682
688
  * Default endHover event responder method. Does nothing by default.
683
689
  * Extend the endHover method, if you want to do something
@@ -763,21 +769,24 @@ HEventResponder = HClass.extend({
763
769
  EVENT.blur(_this);
764
770
  Event.stop(e);
765
771
  },
766
-
767
-
768
- /** = Description
769
- * Forces retrieving this control's DOM element position directly rather than
770
- * using the cached version when the position is needed by +EVENT+.
771
- * Child controls are invalidated recursively by +HView+.
772
- *
773
- * = Returns
774
- * +self+
775
- *
772
+
773
+ /** Selection handling; currently under construction
776
774
  **/
777
- invalidatePositionCache: function() {
778
- this.base();
779
- EVENT.coordCacheFlush(this.elemId);
780
- return this;
781
- }
782
-
775
+ selected: false,
776
+ select: function(){
777
+ this.selected = true;
778
+ console.warn("HControl#select not supported yet.");
779
+ },
780
+ deSelect: function(){
781
+ this.selected = false;
782
+ console.warn("HControl#deSelect not supported yet.");
783
+ },
784
+ setSelected: function(_state){
785
+ if( _state ){
786
+ this.select();
787
+ }
788
+ else {
789
+ this.deSelect();
790
+ }
791
+ }
783
792
  });