rsence-pre 3.0.0.8 → 3.0.0.9

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 (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
  ##