rsence-pre 3.0.0.8 → 3.0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/client/conf/client_pkg.yaml +6 -2
  4. data/client/js/comm/queue/queue.js +32 -44
  5. data/client/js/comm/transporter/transporter.js +24 -16
  6. data/client/js/comm/values/values.js +27 -15
  7. data/client/js/controls/button/button.coffee +14 -5
  8. data/client/js/controls/button/themes/default/button.css +4 -2
  9. data/client/js/controls/checkbox/checkbox.js +4 -4
  10. data/client/js/controls/dialogs/sheet/sheet.js +11 -11
  11. data/client/js/controls/dialogs/sheet/themes/default/sheet.html +1 -1
  12. data/client/js/controls/imageview/imageview.js +15 -15
  13. data/client/js/controls/numerictextcontrol/numerictextcontrol.coffee +32 -10
  14. data/client/js/controls/onoffbutton/onoffbutton.coffee +5 -5
  15. data/client/js/controls/progress/progressbar/progressbar.js +6 -7
  16. data/client/js/controls/progress/progressbar/themes/default/progressbar.css +4 -4
  17. data/client/js/controls/progress/progressbar/themes/default/progressbar.html +1 -2
  18. data/client/js/controls/sliders/slider/slider.js +74 -79
  19. data/client/js/controls/stepper/stepper.js +31 -31
  20. data/client/js/controls/stringview/stringview.js +20 -8
  21. data/client/js/controls/tab/tab.js +57 -63
  22. data/client/js/controls/tab/themes/default/tab.html +4 -1
  23. data/client/js/controls/textcontrol/textcontrol.coffee +13 -3
  24. data/client/js/controls/validatorview/validatorview.js +4 -4
  25. data/client/js/controls/window/window.js +43 -56
  26. data/client/js/core/class/class.js +25 -23
  27. data/client/js/core/elem/elem.coffee +8 -1
  28. data/client/js/core/rsence_ns/rsence_ns.coffee +6 -2
  29. data/client/js/core/util/util_methods/util_methods.coffee +57 -15
  30. data/client/js/datetime/calendar/calendar.coffee +196 -199
  31. data/client/js/datetime/calendar/themes/default/calendar.css +81 -159
  32. data/client/js/datetime/calendar/themes/default/calendar.html +9 -18
  33. data/client/js/datetime/datepicker/datepicker.coffee +18 -3
  34. data/client/js/datetime/datetimepicker/datetimepicker.coffee +6 -1
  35. data/client/js/datetime/datetimevalue/datetimevalue.coffee +194 -0
  36. data/client/js/datetime/momentjs/momentjs.js +310 -76
  37. data/client/js/datetime/timepicker/timepicker.coffee +6 -1
  38. data/client/js/datetime/timesheet/timesheet.js +59 -61
  39. data/client/js/foundation/control/control.js +45 -44
  40. data/client/js/foundation/control/controldefaults/controldefaults.js +13 -9
  41. data/client/js/foundation/control/dyncontrol/dyncontrol.js +45 -57
  42. data/client/js/foundation/control/eventresponder/eventresponder.js +97 -97
  43. data/client/js/foundation/control/valuematrix/valuematrix.js +13 -13
  44. data/client/js/foundation/eventmanager/eventmanager.coffee +50 -32
  45. data/client/js/foundation/geom/rect/rect.js +43 -32
  46. data/client/js/foundation/locale_settings/locale_settings.js +36 -25
  47. data/client/js/foundation/system/system.js +79 -67
  48. data/client/js/foundation/thememanager/thememanager.coffee +11 -1
  49. data/client/js/foundation/value/pullvalue/pullvalue.coffee +7 -0
  50. data/client/js/foundation/value/pushvalue/pushvalue.coffee +25 -0
  51. data/client/js/foundation/value/value.js +22 -15
  52. data/client/js/foundation/view/view.js +94 -55
  53. data/client/js/foundation/view/viewdefaults/viewdefaults.js +5 -1
  54. data/client/js/lists/listitems/listitems.js +26 -4
  55. data/client/js/menus/combobox/combobox.coffee +55 -0
  56. data/client/js/menus/minimenu/minimenu.js +61 -30
  57. data/client/js/menus/minimenu/themes/default/minimenu.css +1 -6
  58. data/client/js/menus/minimenu/themes/default/minimenu.html +5 -4
  59. data/client/js/menus/minimenuitem/minimenuitem.js +6 -6
  60. data/client/js/menus/popupmenu/themes/default/popupmenu.css +1 -6
  61. data/client/js/menus/popupmenu/themes/default/popupmenu.html +5 -4
  62. data/client/js/tables/table/table.coffee +109 -64
  63. data/client/js/tables/table/themes/default/table.css +4 -0
  64. data/lib/rsence/msg.rb +64 -64
  65. data/lib/rsence/plugins/plugin.rb +68 -52
  66. data/lib/rsence/session/sequel_sessionstorage.rb +5 -5
  67. data/lib/rsence/value.rb +79 -59
  68. data/plugins/client_pkg/lib/client_pkg_build.rb +5 -1
  69. data/plugins/client_pkg/lib/client_pkg_serve.rb +40 -32
  70. data/plugins/main/js/main.js +46 -28
  71. metadata +6 -8
  72. data/client/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
  73. data/client/js/datetime/calendar/themes/default/calendar_bg.png +0 -0
  74. data/client/js/datetime/calendar/themes/default/calendar_parts1.png +0 -0
  75. data/client/js/datetime/calendar/themes/default/calendar_parts2.png +0 -0
  76. data/client/js/datetime/datetimepicker/datetimepicker.js +0 -210
  77. data/client/js/datetime/datetimevalue/datetimevalue.js +0 -265
@@ -9,13 +9,13 @@
9
9
  ***/
10
10
  var//RSence.Controls
11
11
  HWindow = HDynControl.extend({
12
-
12
+
13
13
  componentName: 'window',
14
-
14
+
15
15
  /** = Description
16
16
  * In addition to the standard HControl#constructor options,
17
17
  * the following properties can be set:
18
- *
18
+ *
19
19
  * Key:: Description
20
20
  * +minX+:: The minimum X-coordinate allowed to be dragged or resized to.
21
21
  * Defaults to +0+.
@@ -45,7 +45,7 @@ HWindow = HDynControl.extend({
45
45
  * Defaults to +[ 16, 16 ]+
46
46
  * +noResize+:: A flag (when true) disables all resizing and only allows
47
47
  * moving. Does not disable the (-) and (+) buttons.
48
- * +fullWindowMove+:: A flag (when true) enables the full HWindow area
48
+ * +fullWindowMove+:: A flag (when true) enables the full HWindow area
49
49
  * responds to drag events. By default it's false,
50
50
  * meaning only the title bar is draggable.
51
51
  * +closeButton+:: A flag (when true) enables the close button of HWindow.
@@ -54,13 +54,13 @@ HWindow = HDynControl.extend({
54
54
  * the HWindow instance.
55
55
  * +collapseButton+:: A flag (when true) enables the collapse (or minimize)
56
56
  * button of the HWindow instance. By default it's
57
- * disabled. When enabled, extend the
57
+ * disabled. When enabled, extend the
58
58
  * HWindow#windowCollapse method, which by default
59
59
  * zooms the window to its +minSize+.
60
60
  * +minimizeButton+:: An alias for +collapseButton+
61
61
  * +zoomButton+:: A flag (when true) enables the zoom (or maximize)
62
62
  * button of the HWindow instance. By default it's
63
- * disabled. When enabled, extend the
63
+ * disabled. When enabled, extend the
64
64
  * HWindow#windowZoom method, which by default zooms the
65
65
  * contents of the HWindow to fit or the +maxSize+ depending
66
66
  * on which is smaller.
@@ -68,41 +68,7 @@ HWindow = HDynControl.extend({
68
68
  * +maximizeButton+:: An alias for +zoomButton+
69
69
  *
70
70
  **/
71
- controlDefaults: (HDynControl.prototype.controlDefaults.extend({
72
- constructor: function(_ctrl){
73
- var _winSize = ELEM.windowSize(),
74
- _winWidth = _winSize[0],
75
- _winHeight = _winSize[1];
76
- if(!this.minSize){
77
- this.minSize = [96,54];
78
- }
79
- if(!this.maxSize){
80
- this.maxSize = _winSize;
81
- }
82
- if(!this.maxX){
83
- this.maxX = _winWidth-this.minSize[0];
84
- }
85
- if(!this.maxY){
86
- this.maxY = _winHeight-this.minSize[1];
87
- }
88
- if(!this.events){
89
- this.events = {
90
- draggable: true
91
- };
92
- }
93
- if(!this.resizeNW){
94
- this.resizeNW = [ 6, 6 ];
95
- }
96
- if(!this.resizeNE){
97
- this.resizeNE = [ 6, 6 ];
98
- }
99
- if(!this.resizeSW){
100
- this.resizeSW = [ 6, 6 ];
101
- }
102
- if(!this.resizeSE){
103
- this.resizeSE = [ 25, 25 ];
104
- }
105
- },
71
+ controlDefaults: HDynControl.prototype.controlDefaults.extend({
106
72
  maxX: 'auto',
107
73
  maxY: 'auto',
108
74
  maxSize: 'auto',
@@ -117,8 +83,29 @@ HWindow = HDynControl.extend({
117
83
  zoomButton: false,
118
84
  resizeButton: false,
119
85
  maximizeButton: false
120
- })),
121
-
86
+ }),
87
+
88
+ customOptions: function(_options){
89
+ var
90
+ _winSize = ELEM.windowSize(),
91
+ _winWidth = _winSize[0],
92
+ _winHeight = _winSize[1];
93
+ if(!_options.minSize){ _options.minSize = [96,54]; }
94
+
95
+ if(!_options.maxSize){ _options.maxSize = _winSize; }
96
+ if(!_options.maxX ){ _options.maxX = _winWidth-_options.minSize[0]; }
97
+ if(!_options.maxY ){ _options.maxY = _winHeight-_options.minSize[1]; }
98
+
99
+ if(!_options.resizeNW){ _options.resizeNW = [ 6, 6 ]; }
100
+ if(!_options.resizeNE){ _options.resizeNE = [ 6, 6 ]; }
101
+ if(!_options.resizeSW){ _options.resizeSW = [ 6, 6 ]; }
102
+ if(!_options.resizeSE){ _options.resizeSE = [ 25, 25 ]; }
103
+ },
104
+
105
+ defaultEvents: {
106
+ draggable: true
107
+ },
108
+
122
109
  draw: function(){
123
110
  var _drawn = this.drawn;
124
111
  this.base();
@@ -181,7 +168,7 @@ HWindow = HDynControl.extend({
181
168
  this.base(_state);
182
169
  this.refreshWidgetStates();
183
170
  },
184
-
171
+
185
172
  // -- overrides the drag rules to adapt to the !fullWindowMove as well
186
173
  // as disabling draggability in window button areas. ++
187
174
 
@@ -210,7 +197,7 @@ HWindow = HDynControl.extend({
210
197
  }
211
198
  return _rectRules;
212
199
  },
213
-
200
+
214
201
  maxRect: function(){
215
202
  var _rect = this.base(), _opts = this.options;
216
203
  if(_rect[2]<_opts.minSize[0]){
@@ -230,29 +217,29 @@ HWindow = HDynControl.extend({
230
217
 
231
218
  hasWindowFocus: false,
232
219
 
233
- /** Reports to HSystem that this window has the focus and the
234
- * previously active window needs to blur
220
+ /** Reports to HSystem that this window has the focus and the
221
+ * previously active window needs to blur
235
222
  **/
236
223
  gainedActiveStatus: function(){
237
224
  HSystem.windowFocus(this);
238
225
  },
239
-
226
+
240
227
  /** HSystem calls this method, whenever this window is allowed to be focused
241
228
  **/
242
229
  windowFocus: function(){
243
230
  this.hasWindowFocus = true;
244
231
  this.toggleCSSClass(this.elemId, 'inactive', false);
245
232
  },
246
-
247
- /** HSystem calls this method, whenever this window needs to lose its
248
- * focus (another window focused)
233
+
234
+ /** HSystem calls this method, whenever this window needs to lose its
235
+ * focus (another window focused)
249
236
  **/
250
237
  windowBlur: function(){
251
238
  this.hasWindowFocus = false;
252
239
  this.toggleCSSClass(this.elemId, 'inactive', true);
253
240
  this.setStyle('cursor','default');
254
241
  },
255
-
242
+
256
243
  /** This method gets called, whenever the close button has been clicked
257
244
  **/
258
245
  windowClose: function(){
@@ -274,8 +261,8 @@ HWindow = HDynControl.extend({
274
261
  }
275
262
  this.makeRectRules();
276
263
  },
277
-
278
- /** This method gets called, whenever the collapse (minimize) button has
264
+
265
+ /** This method gets called, whenever the collapse (minimize) button has
279
266
  * been clicked
280
267
  **/
281
268
  windowCollapse: function(_rectOnly){
@@ -308,8 +295,8 @@ HWindow = HDynControl.extend({
308
295
  }
309
296
  this.makeRectRules();
310
297
  },
311
-
312
- /** This method gets called, whenever the zoom (maximize/restore)
298
+
299
+ /** This method gets called, whenever the zoom (maximize/restore)
313
300
  * button has been clicked
314
301
  **/
315
302
  windowZoom: function(){
@@ -18,7 +18,7 @@
18
18
  * * To achieve the above without resorting to global functions to build prototype chains
19
19
  * * To achieve the above without affecting Object.prototype
20
20
  *
21
- * The HClass class extends the 'Object' object by adding one instance method (base)
21
+ * The HClass class extends the 'Object' object by adding one instance method (base)
22
22
  * and two class methods (extend, implement). Instance method extend can be also called directly.
23
23
  *
24
24
  * == Example:
@@ -30,10 +30,10 @@
30
30
  * this.foo = foo;
31
31
  * }
32
32
  * });
33
- *
33
+ *
34
34
  * myClassInstance1 = MyClass.nu( 'rabbids' );
35
35
  * myClassInstance2 = new MyClass( 'ribbit' );
36
- *
36
+ *
37
37
  * MyEqualsClass = MyClass.extend({
38
38
  * testFoo: function( that ){
39
39
  * return this.foo === that.foo;
@@ -68,10 +68,10 @@ HClass.prototype = {
68
68
  for (prop in e) {
69
69
  err[prop] = e[prop];
70
70
  }
71
- err['string'] = e.toString();
71
+ err.string = e.toString();
72
72
  return err;
73
73
  },
74
-
74
+
75
75
  /* The property copying method. */
76
76
  extend: function(_source, _value) {
77
77
  var _extend = HClass.prototype.extend,
@@ -79,7 +79,7 @@ HClass.prototype = {
79
79
  if (arguments.length === 2) {
80
80
  _ancestor = this[_source];
81
81
  // only methods are inherited
82
- if ((_ancestor instanceof Function) && (_value instanceof Function) &&
82
+ if ((typeof _ancestor === 'function') && (typeof _value === 'function') &&
83
83
  _ancestor.valueOf() !== _value.valueOf() && (/\bbase\b/).test(_value)) {
84
84
  _method = _value;
85
85
  _value = function() {
@@ -96,7 +96,7 @@ HClass.prototype = {
96
96
  _returnValue = _method.apply(this, arguments);
97
97
  }
98
98
  catch(e){
99
- !this.isProduction && console.warn("An exception occurred while calling base: ",HClass.prototype._exceptionProperties(e)," object: ",_ancestor);
99
+ !this.isProduction && console.warn("An exception occurred while calling base: ",HClass.prototype._exceptionProperties(e)," object: ",_method);
100
100
  _returnValue = null;
101
101
  }
102
102
  // then because event this function can be called from child method
@@ -133,21 +133,23 @@ HClass.prototype = {
133
133
  }
134
134
  }
135
135
  }
136
-
136
+
137
137
  // alternative constructor (use instead of the new keywoard)
138
- this.nu = function() {
139
- return new (
140
- this.extend( {
141
- constructor: function( args ){
142
- this.base.apply( this, args );
143
- }
144
- } )
145
- )( arguments );
138
+ var
139
+ _nu = function(){
140
+ try{
141
+ return new (this.extend({ constructor: function( _args ){ this.base.apply( this, _args ); } } ))( arguments );
142
+ }
143
+ catch(e){
144
+ console.log(e,this);
145
+ return {};
146
+ }
146
147
  };
148
+ this.nu = _nu;
149
+ this['new'] = _nu;
147
150
  this.hasAncestor = function( _obj ){
148
151
  return !!~this.ancestors.indexOf( _obj );
149
152
  };
150
- this['new'] = this.nu;
151
153
  return this;
152
154
  },
153
155
  /** = Description
@@ -224,7 +226,7 @@ HClass.extend = function(_instance, _static) {
224
226
  _constructor = _prototype.constructor;
225
227
  _prototype.constructor = this;
226
228
  delete HClass._prototyping;
227
-
229
+
228
230
  _ancestors = [];
229
231
  _klass = function() {
230
232
  if (!HClass._prototyping) {
@@ -268,7 +270,7 @@ HClass.ancestors = [ HClass ];
268
270
  *
269
271
  * = Usage:
270
272
  * Defines an interface:
271
- *
273
+ *
272
274
  * AreaInterface = HClass.extend({
273
275
  * constructor: null,
274
276
  * // implement
@@ -279,7 +281,7 @@ HClass.ancestors = [ HClass ];
279
281
  * return this.getWidth() * this.getHeight();
280
282
  * }
281
283
  * });
282
- *
284
+ *
283
285
  * Rectangle = HClass.extend({
284
286
  * constructor: function(x, y, width, height) {
285
287
  * this.x = x;
@@ -294,7 +296,7 @@ HClass.ancestors = [ HClass ];
294
296
  * return this.height;
295
297
  * }
296
298
  * });
297
- *
299
+ *
298
300
  * Rectangle.implement(AreaInterface);
299
301
  *
300
302
  **/
@@ -353,8 +355,8 @@ if (!Function.prototype.bind) {
353
355
  // closest thing possible to the ECMAScript 5 internal IsCallable function
354
356
  throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
355
357
  }
356
- var aArgs = Array.prototype.slice.call(arguments, 1),
357
- fToBind = this,
358
+ var aArgs = Array.prototype.slice.call(arguments, 1),
359
+ fToBind = this,
358
360
  fNOP = function () {},
359
361
  fBound = function () {
360
362
  return fToBind.apply(
@@ -435,6 +435,13 @@ ELEM = HClass.extend
435
435
  flush: ->
436
436
  @flushLoop()
437
437
 
438
+ flushElem: (_elemIds)->
439
+ _elemIds = [_elemIds] if typeof _elemIds == 'number'
440
+ for _id in _elemIds
441
+ continue unless @_elemTodoH[_id]
442
+ @_elemTodoH[_id] = false
443
+ @_flushStyleCache(_id)
444
+ @_flushAttrCache(_id)
438
445
  ###
439
446
  Performs the flush of flushLoop
440
447
  ###
@@ -932,7 +939,7 @@ ELEM = HClass.extend
932
939
  @_init()
933
940
  else
934
941
  ELEM._domLoadTimer = setTimeout( =>
935
- ELEM._domWaiter()
942
+ @._domWaiter()
936
943
  , 10 )
937
944
  null
938
945
  ELEM.reset()
@@ -22,7 +22,7 @@ RSence =
22
22
  user-select: text;
23
23
  }
24
24
  ''')
25
-
25
+
26
26
  # Call this method from the index page for
27
27
  # client-only features
28
28
  clientConf: (_clientPrefix)->
@@ -38,7 +38,7 @@ RSence =
38
38
  RSence.clientConf( _clientPrefix )
39
39
  COMM.AutoSyncStarter.start()
40
40
  null
41
-
41
+
42
42
  # Storage for guiTrees, cantains
43
43
  # JSONRenderer instances by plugin name.
44
44
  guiTrees: {}
@@ -50,3 +50,7 @@ RSence =
50
50
  _guiTree.die()
51
51
  _guiTrees[_guiName] = null
52
52
  delete _guiTrees[_guiName]
53
+
54
+ # Passthrough hook for setting locale data
55
+ setLocaleData: (_localeData)->
56
+ HLocale.setData(_localeData)
@@ -10,9 +10,28 @@ UtilMethods = (->
10
10
  's' # string
11
11
  ]
12
12
 
13
+ pushTask: (_fn)->
14
+ COMM.Queue.push(_fn)
15
+
16
+ unshiftTask: (_fn)->
17
+ COMM.Queue.unshift(_fn)
18
+
19
+ msNow: ->
20
+ new Date().getTime()
21
+
13
22
  getValueById: (_id)->
14
23
  COMM.Values.values[_id]
15
24
 
25
+ isFloat: (_num)-> ( Math.round(_num) != _num )
26
+
27
+ moment: (_date,_format)->
28
+ if @options
29
+ if @options.useUTC == true or (@options.useUTC == null and HLocale.dateTime.defaultOptions.useUTC == true)
30
+ return moment.utc(_date,_format)
31
+ else if HLocale.dateTime.defaultOptions.useUTC == true
32
+ return moment.utc(_date,_format)
33
+ moment(_date,_format)
34
+
16
35
  ###
17
36
  # Returns object type as a single-char string.
18
37
  # Use this method to detect the type of the object given.
@@ -26,8 +45,9 @@ UtilMethods = (->
26
45
  # - 'h': Hash (Generic Object)
27
46
  # - 'd': Date
28
47
  # - 'b': Boolean (true/false)
29
- # - 'n': Number (integers and floats)
48
+ # - 'n': Number (integer or float, use #isFloat to see whether it's a float or integer )
30
49
  # - 's': String
50
+ # - '>': Function
31
51
  # - '~': Null
32
52
  # - '-': Undefined
33
53
  # - false: unknown
@@ -35,12 +55,13 @@ UtilMethods = (->
35
55
  typeChr: (_obj)->
36
56
  return '~' if _obj == null
37
57
  return '-' unless _obj?
58
+ return '>' if _obj instanceof Function
38
59
  _typeChr = (typeof _obj).slice(0,1)
39
60
  return _typeChr if @arrIncludes(@_builtinTypeChr,_typeChr)
40
61
  if _typeChr == 'o'
41
- return 'a' if _obj.constructor == Array
62
+ return 'a' if _obj instanceof Array
63
+ return 'd' if _obj instanceof Date
42
64
  return 'h' if _obj.constructor == Object
43
- return 'd' if _obj.constructor == Date
44
65
  return false
45
66
 
46
67
  baseStrToNum: (_str, _base)->
@@ -61,10 +82,10 @@ UtilMethods = (->
61
82
 
62
83
  base36ToNum: (_base36)->
63
84
  @baseStrToNum(_base36,36)
64
-
85
+
65
86
  numToBase36: (_num)->
66
87
  @baseIntToStr(_num,36)
67
-
88
+
68
89
  _hexColorLengths: [3,4,6,7]
69
90
  _hexCharacters: ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
70
91
  _hex3To6Ratio: 4097 # parseInt('1001',16)
@@ -132,6 +153,27 @@ UtilMethods = (->
132
153
  catch e
133
154
  console.log('_'+'decodeString failed for _'+'str: ',_str)
134
155
  return _str
156
+ # Recursively merges two objects of identical structure (array or object)
157
+ updateObject: (_src,_dst)->
158
+ _typeSrc = @typeChr(_src)
159
+ _typeDst = @typeChr(_dst)
160
+ _merge = (_item,_src,_dst,i)=>
161
+ _itemType = @typeChr(_item)
162
+ if _itemType == @typeChr(_dst[i])
163
+ if _itemType == 'a' or _itemType == 'h'
164
+ @updateObjects( _item, _dst[i] )
165
+ else
166
+ _dst[i] = _item
167
+ else if !@isProduction
168
+ console.warn('updateObject; mismatching item type: ', _itemType, ' (', _item, ') vs ', @_typeChr(_dst[i]), ' (',_dst[i], ')')
169
+ if _typeSrc == _typeDst
170
+ if _typeSrc == 'a'
171
+ for _item, i in _src
172
+ _merge(_item,_src,_dst,i)
173
+ else if _typeSrc == 'h'
174
+ for i, _item of _src
175
+ _itemType = @typeChr(_item)
176
+ _merge(_itemType,_src,_dst,i)
135
177
  # Returns a decoded Array with the decoded content of Array _arr
136
178
  _decodeArr: (_arr)->
137
179
  _output = []
@@ -146,13 +188,13 @@ UtilMethods = (->
146
188
  _output
147
189
  ## = Description
148
190
  # Decodes a JSON object. Decodes the url-encoded strings within.
149
- #
191
+ #
150
192
  # = Parameters
151
193
  # +_ibj+:: A raw object with special characters contained.
152
- #
194
+ #
153
195
  # = Returns
154
196
  # A version of the object with the contained strings decoded to unicode.
155
- #
197
+ #
156
198
  ##
157
199
  decodeObject: (_obj)->
158
200
  return null unless _obj?
@@ -178,7 +220,7 @@ UtilMethods = (->
178
220
  catch e
179
221
  console.log('invalid json:',_obj)
180
222
  return "{}"
181
-
223
+
182
224
  # decodeObject: (_obj)->
183
225
  # return null unless _obj?
184
226
  # _type = @typeChr(_obj)
@@ -192,7 +234,7 @@ UtilMethods = (->
192
234
  # catch e
193
235
  # console.log e, _obj
194
236
  # _obj
195
-
237
+
196
238
  cloneObject: ( _obj )->
197
239
  unless _obj?
198
240
  console.log 'WARNING: clone of undefined returns null.' if _obj == undefined
@@ -217,10 +259,10 @@ UtilMethods = (->
217
259
  '{'+_output.join(',')+'}'
218
260
  ## = Description
219
261
  # Encodes any object into an ASCII string. Special characters are url-encoded.
220
- #
262
+ #
221
263
  # = Parameters
222
264
  # +_obj+:: Any object (including primary types)
223
- #
265
+ #
224
266
  # = Returns
225
267
  # A +String+ representation of +_obj+
226
268
  ##
@@ -240,14 +282,14 @@ UtilMethods = (->
240
282
  'null'
241
283
  ## = Description
242
284
  # Makes a deep copy of the object.
243
- #
285
+ #
244
286
  # When you use assignment of a js object, only primitive object
245
287
  # types (strings, numbers and booleans) are copied. This method
246
288
  # makes a deep (nested) clone of the input object.
247
- #
289
+ #
248
290
  # = Parameters
249
291
  # +_obj+:: Any object
250
- #
292
+ #
251
293
  # = Returns
252
294
  # A copy of the object
253
295
  ##