rsence-pre 2.2.0.36 → 2.2.0.37
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.
- data/VERSION +1 -1
- data/js/controls/stringview/stringview.js +50 -39
- data/js/controls/tab/tab.js +14 -0
- data/js/controls/tab/themes/default/tab.css +2 -0
- data/js/controls/uploader/uploader.coffee +0 -1
- data/js/core/class/class.js +13 -1
- data/js/foundation/json_renderer/json_renderer.js +151 -13
- data/js/lists/checkboxlist/checkboxlist.js +3 -1
- data/js/lists/listitems/listitems.js +50 -36
- data/js/lists/radiobuttonlist/radiobuttonlist.js +4 -2
- data/js/menus/minimenu/minimenu.js +2 -2
- data/lib/rsence/pluginmanager.rb +1 -1
- data/lib/rsence/plugins/plugin.rb +6 -0
- data/lib/rsence.rb +3 -1
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.2.0.
|
1
|
+
2.2.0.37.pre
|
@@ -17,47 +17,58 @@
|
|
17
17
|
** +type+:: '[HStringView]'
|
18
18
|
** +value+:: The string that this string view displays when drawn.
|
19
19
|
***/
|
20
|
-
var
|
21
|
-
HStringView = HControl.extend({
|
20
|
+
var HStringView, HLabel;
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
* The setStyle method of HStringView applies only to the value
|
39
|
-
* element (not the whole component).
|
40
|
-
*
|
41
|
-
**/
|
42
|
-
setStyle: function(_name, _value, _cacheOverride) {
|
43
|
-
if (!this['markupElemIds']||!this.markupElemIds['value']) {
|
22
|
+
(function(){
|
23
|
+
var _HStringViewInterface = {
|
24
|
+
|
25
|
+
componentName: "stringview",
|
26
|
+
|
27
|
+
/** = Description
|
28
|
+
* The setStyle method of HStringView applies only to the value
|
29
|
+
* element (not the whole component).
|
30
|
+
*
|
31
|
+
**/
|
32
|
+
setStyle: function(_name, _value, _cacheOverride) {
|
33
|
+
if (!this['markupElemIds']||!this.markupElemIds['value']) {
|
34
|
+
return this;
|
35
|
+
}
|
36
|
+
this.setStyleOfPart( 'value', _name, _value, _cacheOverride);
|
44
37
|
return this;
|
45
|
-
}
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
38
|
+
},
|
39
|
+
|
40
|
+
/** = Description
|
41
|
+
* The refreshLabel of HStringView sets a tool tip.
|
42
|
+
* Applied by the setLabel method and the label attribute of options.
|
43
|
+
*
|
44
|
+
**/
|
45
|
+
refreshLabel: function() {
|
46
|
+
if(this.markupElemIds) {
|
47
|
+
if(this.markupElemIds.value) {
|
48
|
+
if( this.value !== undefined ){
|
49
|
+
this.setAttrOfPart( 'value', 'title', this.label );
|
50
|
+
}
|
51
|
+
else {
|
52
|
+
this.setMarkupOfPart( 'value', this.label );
|
53
|
+
}
|
54
|
+
}
|
59
55
|
}
|
60
56
|
}
|
61
|
-
}
|
62
|
-
|
57
|
+
};
|
58
|
+
|
59
|
+
HLabel = HView.extend( _HStringViewInterface );
|
60
|
+
HStringView = HControl.extend( _HStringViewInterface ).extend({
|
61
|
+
defaultEvents: {
|
62
|
+
contextMenu: true
|
63
|
+
},
|
64
|
+
|
65
|
+
/** = Description
|
66
|
+
* HStringView allows the default contextMenu action.
|
67
|
+
*
|
68
|
+
**/
|
69
|
+
contextMenu: function(){
|
70
|
+
return true;
|
71
|
+
}
|
72
|
+
});
|
63
73
|
|
74
|
+
})();
|
data/js/controls/tab/tab.js
CHANGED
@@ -280,6 +280,13 @@ HTab = HControl.extend({
|
|
280
280
|
var//RSence.Controls
|
281
281
|
HTabItem = {
|
282
282
|
nu: function(_rect, _parent, _options){
|
283
|
+
if( _rect.hasAncestor && _rect.hasAncestor( HView ) ){
|
284
|
+
_options = _parent;
|
285
|
+
_parent = _rect;
|
286
|
+
}
|
287
|
+
else {
|
288
|
+
console.warn && console.warn( "Warning: the rect constructor argument of HTabItem is deprecated." );
|
289
|
+
}
|
283
290
|
return _parent.addTab( _options.label, _options.select );
|
284
291
|
}
|
285
292
|
};
|
@@ -356,6 +363,13 @@ GUITreeTabView = HControl.extend({
|
|
356
363
|
var//RSence.Controls
|
357
364
|
GUITreeTabItem = {
|
358
365
|
nu: function( _rect, _parent, _options ){
|
366
|
+
if( _rect.hasAncestor && _rect.hasAncestor( HView ) ){
|
367
|
+
_options = _parent;
|
368
|
+
_parent = _rect;
|
369
|
+
}
|
370
|
+
else {
|
371
|
+
console.warn && console.warn( "Warning: the rect constructor argument of GUITreeTabItem is deprecated." );
|
372
|
+
}
|
359
373
|
return _parent.addTab( _options.label, _options.select, GUITreeTabView, _options );
|
360
374
|
}
|
361
375
|
};
|
@@ -68,10 +68,12 @@
|
|
68
68
|
.tab_bg {
|
69
69
|
position: absolute;
|
70
70
|
top: 24px; left: 0px; right: 0px; bottom: 0px;
|
71
|
+
border-radius: 0 0 3px 3px;
|
71
72
|
background-image: #{this.getCssFilePath('tab_border_pattern.png')};
|
72
73
|
}
|
73
74
|
.tab_fg {
|
74
75
|
position: absolute;
|
75
76
|
top: 0px; left: 1px; right: 1px; bottom: 1px;
|
77
|
+
border-radius: 0 0 3px 3px;
|
76
78
|
background-image: #{this.getCssFilePath('tab_bg_color.png')};
|
77
79
|
}
|
@@ -77,7 +77,6 @@ HUploader = HControl.extend
|
|
77
77
|
@setStyleOfPart( 'form', 'visibility', 'hidden' )
|
78
78
|
|
79
79
|
setUploadState: (_state, _uploadKey)->
|
80
|
-
console.log('state:',_state,', uploadKey:',_uploadKey)
|
81
80
|
if _state != @uploadState
|
82
81
|
@uploadState = _state
|
83
82
|
_stateKey = _state.toString()
|
data/js/core/class/class.js
CHANGED
@@ -129,6 +129,9 @@ HClass.prototype = {
|
|
129
129
|
} )
|
130
130
|
)( arguments );
|
131
131
|
};
|
132
|
+
this.hasAncestor = function( _obj ){
|
133
|
+
return this.ancestors.indexOf( _obj ) !== -1;
|
134
|
+
};
|
132
135
|
this['new'] = this.nu;
|
133
136
|
return this;
|
134
137
|
},
|
@@ -190,7 +193,8 @@ HClass.prototype = {
|
|
190
193
|
HClass.extend = function(_instance, _static) {
|
191
194
|
// reference to HClass's prototype extend method (HClass's class structure extend method)
|
192
195
|
var _extend = HClass.prototype.extend,
|
193
|
-
_prototype, _constructor, _klass, _object
|
196
|
+
_prototype, _constructor, _klass, _object,
|
197
|
+
_ancestors, i=0;
|
194
198
|
// if _instance is undefined,null,"" etc. creates object so that code below works
|
195
199
|
if (!_instance) {
|
196
200
|
_instance = {};
|
@@ -206,11 +210,13 @@ HClass.extend = function(_instance, _static) {
|
|
206
210
|
_prototype.constructor = this;
|
207
211
|
delete HClass._prototyping;
|
208
212
|
|
213
|
+
_ancestors = [];
|
209
214
|
_klass = function() {
|
210
215
|
if (!HClass._prototyping) {
|
211
216
|
_constructor.apply(this, arguments);
|
212
217
|
}
|
213
218
|
this.constructor = _klass;
|
219
|
+
this.ancestors = _ancestors;
|
214
220
|
};
|
215
221
|
// this is the new class's prototype (class structure)
|
216
222
|
_klass.prototype = _prototype;
|
@@ -232,8 +238,14 @@ HClass.extend = function(_instance, _static) {
|
|
232
238
|
if (_object.init instanceof Function) {
|
233
239
|
_object.init();
|
234
240
|
}
|
241
|
+
_ancestors.push( _object );
|
242
|
+
for( ; i < this.ancestors.length; i++ ){
|
243
|
+
_ancestors.push( this.ancestors[i] );
|
244
|
+
}
|
245
|
+
_object.ancestors = _ancestors;
|
235
246
|
return _object;
|
236
247
|
};
|
248
|
+
HClass.ancestors = [ HClass ];
|
237
249
|
|
238
250
|
/** = Description
|
239
251
|
* Copies the prototype properties and methods from _interface or if it is an object it's properties and functions
|
@@ -24,7 +24,7 @@
|
|
24
24
|
//var//RSence.Foundation
|
25
25
|
COMM.JSONRenderer = HClass.extend({
|
26
26
|
|
27
|
-
version: 0
|
27
|
+
version: 1.0,
|
28
28
|
|
29
29
|
/** = Description
|
30
30
|
* Renders JSON structured data, see some of the demos for usage examples.
|
@@ -37,12 +37,49 @@ COMM.JSONRenderer = HClass.extend({
|
|
37
37
|
if((_data['type'] === 'GUITree') && (this.version >= _data['version'])){
|
38
38
|
this.data = _data;
|
39
39
|
this.parent = _parent;
|
40
|
+
this.byId = {};
|
41
|
+
this.byName = {};
|
40
42
|
this.render();
|
43
|
+
var _rndr = this;
|
44
|
+
if( this.view.hasAncestor( HApplication ) ){
|
45
|
+
this.view.getViewbyId = function(_id){ return _rndr.getViewById(_id); };
|
46
|
+
this.view.getViewsbyName = function(_id){ return _rndr.getViewsByName(_id); };
|
47
|
+
}
|
48
|
+
else if ( this.view.hasAncestor( HView ) ){
|
49
|
+
this.view.app.getViewbyId = function(_id){ return _rndr.getViewById(_id); };
|
50
|
+
this.view.app.getViewsbyName = function(_id){ return _rndr.getViewsByName(_id); };
|
51
|
+
}
|
41
52
|
}
|
42
53
|
else{
|
43
54
|
throw("JSONRenderer: Only GUITree version "+this.version+" or older data can be handled.");
|
44
55
|
}
|
45
56
|
},
|
57
|
+
getViewById: function(_id){
|
58
|
+
if( this.byId[_id] !== undefined ){
|
59
|
+
return this.byId[_id];
|
60
|
+
}
|
61
|
+
console.log('JSONRenderer; no such view Id: '+_id);
|
62
|
+
return null;
|
63
|
+
},
|
64
|
+
addViewId: function(_id, _view){
|
65
|
+
if( this.byId[_id] !== undefined ){
|
66
|
+
console.log('JSONRenderer; already has id: '+_id+' (replacing)');
|
67
|
+
}
|
68
|
+
this.byId[_id] = _view;
|
69
|
+
},
|
70
|
+
getViewsByName: function(_name){
|
71
|
+
if( this.byName[_id] !== undefined ){
|
72
|
+
return this.byName[_name];
|
73
|
+
}
|
74
|
+
console.log('JSONRenderer; no views named: '+_name);
|
75
|
+
return [];
|
76
|
+
},
|
77
|
+
addViewName: function(_name, _view){
|
78
|
+
if( this.byName[_name] === undefined ){
|
79
|
+
this.byName[_name] = [];
|
80
|
+
}
|
81
|
+
this.byName[_name].push(_view);
|
82
|
+
},
|
46
83
|
render: function(){
|
47
84
|
this.scopes = [window];
|
48
85
|
this.scopeDepth = 0;
|
@@ -141,11 +178,41 @@ COMM.JSONRenderer = HClass.extend({
|
|
141
178
|
return (new _class(_args));
|
142
179
|
}
|
143
180
|
},
|
181
|
+
_handleCall: function( _instance, _call ){
|
182
|
+
if( _call instanceof Object ){
|
183
|
+
var
|
184
|
+
_methodName, _arguments;
|
185
|
+
for( _methodName in _call ){
|
186
|
+
// console.log('methodName:',_methodName);
|
187
|
+
if( typeof _instance[_methodName] === 'function' ){
|
188
|
+
// console.log('callArguments:',_call[_methodName]);
|
189
|
+
try{
|
190
|
+
_instance[_methodName].apply( _instance, _call[_methodName] );
|
191
|
+
}
|
192
|
+
catch(e){
|
193
|
+
console.log('JSONRenderer handleCall error:',e.toString()+', method:',_instance[_methodName],', call args:', _call[_methodName],', e:',e);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
else {
|
197
|
+
console.log('JSONRenderer handleCall error; undefined method: ',_methodName);
|
198
|
+
}
|
199
|
+
}
|
200
|
+
}
|
201
|
+
else {
|
202
|
+
console.log('JSONRenderer handleCall error, unable to handle call format: ',_call);
|
203
|
+
}
|
204
|
+
},
|
144
205
|
renderNode: function( _dataNode, _parent ){
|
145
206
|
var
|
146
207
|
_reserved = [ 'type', 'args', 'version', 'class', 'rect', 'bind', 'extend', 'options', 'subviews', 'define' ],
|
147
208
|
_className, _class, _origNode, _straightParams = false, _rect, _hasRect, _hasSubviews, _subViews,
|
148
209
|
_hasOptions, _options, _hasExtension, _extension, _hasBind, _bind,
|
210
|
+
_hasName, _hasId,
|
211
|
+
_isAppClass = false, _isViewClass = false,
|
212
|
+
_autoOptionItems = [
|
213
|
+
'label', 'style', 'visible', 'theme', 'html',
|
214
|
+
'value', 'enabled', 'events', 'active', 'minValue', 'maxValue'
|
215
|
+
], _autoOptionItem, _hasCall, _call,
|
149
216
|
_hasDefinition, _definition, _instance, i, _subView = null;
|
150
217
|
|
151
218
|
// The name of the class:
|
@@ -166,18 +233,35 @@ COMM.JSONRenderer = HClass.extend({
|
|
166
233
|
}
|
167
234
|
|
168
235
|
_class = this.findInScope( _className );
|
236
|
+
|
237
|
+
if (_class['hasAncestor'] !== undefined){
|
238
|
+
_isAppClass = _class.hasAncestor( HApplication );
|
239
|
+
_isViewClass = _class.hasAncestor( HView );
|
240
|
+
}
|
241
|
+
|
242
|
+
_hasId = ( _dataNode['id'] !== undefined ) && ( typeof _dataNode['id'] === 'string' );
|
243
|
+
_hasName = ( _dataNode['name'] !== undefined ) && ( typeof _dataNode['name'] === 'string' );
|
169
244
|
|
170
245
|
if( _straightParams ){
|
171
|
-
|
246
|
+
_instance = this.initStraight( _class, _dataNode );
|
172
247
|
}
|
173
248
|
else if( _dataNode['args'] !== undefined ){
|
174
|
-
|
249
|
+
_instance = this.initStraight( _class, _dataNode['args'] );
|
175
250
|
}
|
176
251
|
else if( _origNode && _origNode['args'] !== undefined ){
|
177
|
-
|
252
|
+
_instance = this.initStraight( _class, _origNode['args'] );
|
253
|
+
}
|
254
|
+
if( _instance ){
|
255
|
+
if( _hasId ){
|
256
|
+
this.addViewId( _dataNode.id, _instance );
|
257
|
+
}
|
258
|
+
if( _hasName ){
|
259
|
+
this.addViewName( _dataNode.id, _instance );
|
260
|
+
}
|
261
|
+
return _instance;
|
178
262
|
}
|
179
263
|
|
180
|
-
// Currently only HView -derived classes are supported, so
|
264
|
+
// Currently only HView -derived classes are supported, so
|
181
265
|
// the rect is mandatory.
|
182
266
|
_rect = _dataNode['rect'];
|
183
267
|
_hasRect = (_rect !== undefined) && (_rect instanceof Array || typeof _rect === 'string');
|
@@ -185,7 +269,12 @@ COMM.JSONRenderer = HClass.extend({
|
|
185
269
|
_hasRect = _origNode['rect'] !== undefined;
|
186
270
|
_rect = _hasRect?_origNode['rect']:null;
|
187
271
|
}
|
188
|
-
|
272
|
+
if( !_isViewClass ){
|
273
|
+
if( _hasRect ){
|
274
|
+
console.log( "renderNode warning; Supposedly rect-incompatible class supplied: "+_className );
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
189
278
|
// Checks, if any sub-views are defined.
|
190
279
|
_hasSubviews = _dataNode['subviews'] !== undefined;
|
191
280
|
_subViews = _hasSubviews?_dataNode['subviews']:null;
|
@@ -201,6 +290,16 @@ COMM.JSONRenderer = HClass.extend({
|
|
201
290
|
_hasOptions = _origNode['options'] !== undefined;
|
202
291
|
_options = _hasOptions?_origNode['options']:null;
|
203
292
|
}
|
293
|
+
for( i=0; i < _autoOptionItems.length; i++ ){
|
294
|
+
_autoOptionItem = _autoOptionItems[i];
|
295
|
+
if( _dataNode[ _autoOptionItem ] !== undefined ){
|
296
|
+
if( !_hasOptions ){
|
297
|
+
_hasOptions = true;
|
298
|
+
_options = {};
|
299
|
+
}
|
300
|
+
_options[_autoOptionItem] = _dataNode[ _autoOptionItem ];
|
301
|
+
}
|
302
|
+
}
|
204
303
|
|
205
304
|
// JS Extension block
|
206
305
|
_hasExtension = _dataNode['extend'] !== undefined;
|
@@ -217,6 +316,11 @@ COMM.JSONRenderer = HClass.extend({
|
|
217
316
|
_hasBind = _origNode['bind'] !== undefined;
|
218
317
|
_bind = _hasBind?_origNode['bind']:null;
|
219
318
|
}
|
319
|
+
|
320
|
+
_hasCall = _dataNode['call'] !== undefined;
|
321
|
+
if( _hasCall ){
|
322
|
+
_call = _dataNode['call'];
|
323
|
+
}
|
220
324
|
|
221
325
|
// JS Definition block
|
222
326
|
_hasDefinition = _dataNode['define'] !== undefined;
|
@@ -225,7 +329,10 @@ COMM.JSONRenderer = HClass.extend({
|
|
225
329
|
_hasDefinition = _origNode['define'] !== undefined;
|
226
330
|
_definitions = _hasDefinition?_origNode['define']:null;
|
227
331
|
}
|
228
|
-
|
332
|
+
if( _rect === null && _class['hasAncestor'] && _class.hasAncestor( HView ) ) {
|
333
|
+
console.log( 'Ancestors include HView, but no rect defined!' );
|
334
|
+
}
|
335
|
+
|
229
336
|
// The HView-derived class instance, instance is by default the parent
|
230
337
|
_instance = _parent;
|
231
338
|
|
@@ -280,12 +387,34 @@ COMM.JSONRenderer = HClass.extend({
|
|
280
387
|
}
|
281
388
|
}
|
282
389
|
// For HApplication -derived classes
|
283
|
-
if(
|
284
|
-
|
390
|
+
if( _isAppClass ){
|
391
|
+
if( _hasOptions ){
|
392
|
+
_instance = _class.nu( _options );
|
393
|
+
}
|
394
|
+
else {
|
395
|
+
_instance = _class.nu();
|
396
|
+
}
|
285
397
|
}
|
286
|
-
|
287
|
-
|
288
|
-
|
398
|
+
else if ( _isViewClass ){
|
399
|
+
_instance = _class.nu( _rect, _parent, _options );
|
400
|
+
}
|
401
|
+
else {
|
402
|
+
if( _hasRect ){
|
403
|
+
if( _hasOptions ){
|
404
|
+
_instance = _class.nu(_rect,_parent,_options);
|
405
|
+
}
|
406
|
+
else {
|
407
|
+
_instance = _class.nu(_rect,_parent);
|
408
|
+
}
|
409
|
+
}
|
410
|
+
else if ( _hasOptions ){
|
411
|
+
// console.log(_className,_parent,_options);
|
412
|
+
_instance = _class.nu( _parent, _options );
|
413
|
+
}
|
414
|
+
else {
|
415
|
+
// console.log('renderNode warning; unsure how to construct: '+_className+', rect:',_rect,', options:',_options);
|
416
|
+
_instance = _class.nu( _parent );
|
417
|
+
}
|
289
418
|
}
|
290
419
|
if(!_hasOptions){
|
291
420
|
if(_hasBind){
|
@@ -304,8 +433,17 @@ COMM.JSONRenderer = HClass.extend({
|
|
304
433
|
else if(!(!_class && _hasSubviews)) {
|
305
434
|
console.log('renderNode warning; No such class: '+_className+', node: ',_dataNode);
|
306
435
|
}
|
436
|
+
if( _hasId ){
|
437
|
+
this.addViewId( _dataNode.id, _instance );
|
438
|
+
}
|
439
|
+
if( _hasName ){
|
440
|
+
this.addViewName( _dataNode.id, _instance );
|
441
|
+
}
|
442
|
+
if(_hasCall){
|
443
|
+
this._handleCall(_instance,_call);
|
444
|
+
}
|
307
445
|
}
|
308
|
-
catch(e){
|
446
|
+
catch (e){
|
309
447
|
console.log('renderNode error:',e.toString()+', rect:',_rect,', class:',_dataNode['class'],', options:', _options,', e:',e);
|
310
448
|
}
|
311
449
|
// Iterates recursively through all subviews, if specified.
|
@@ -13,7 +13,7 @@
|
|
13
13
|
**
|
14
14
|
***/
|
15
15
|
var//RSence.Lists
|
16
|
-
HCheckboxList =
|
16
|
+
HCheckboxList = HListItemControl.extend({
|
17
17
|
|
18
18
|
/** = Description
|
19
19
|
* Draws borders with 1px and sets 'overflow' to 'auto'.
|
@@ -21,6 +21,7 @@ HCheckboxList = HControl.extend({
|
|
21
21
|
**/
|
22
22
|
drawSubviews: function(){
|
23
23
|
this.setStyle('border','1px solid #999');
|
24
|
+
this.setStyle('border-radius','3px');
|
24
25
|
this.setStyle('overflow','auto');
|
25
26
|
},
|
26
27
|
listItems: [],
|
@@ -103,6 +104,7 @@ HCheckboxList = HControl.extend({
|
|
103
104
|
*
|
104
105
|
**/
|
105
106
|
setListItems: function(_listItems){
|
107
|
+
_listItems = this._cleanListItems(_listItems);
|
106
108
|
var _listItem,
|
107
109
|
_value,
|
108
110
|
_label,
|
@@ -27,6 +27,13 @@ var//RSence.Lists
|
|
27
27
|
HListItems = HValueResponder.extend({
|
28
28
|
|
29
29
|
constructor: function( _rect, _parent, _options ){
|
30
|
+
if( _rect.hasAncestor && _rect.hasAncestor( HView ) ){
|
31
|
+
_options = _parent;
|
32
|
+
_parent = _rect;
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
console.warn && console.warn( "Warning: the rect constructor argument of HListItems is deprecated." );
|
36
|
+
}
|
30
37
|
this.parent = _parent;
|
31
38
|
if ( this.parent.setListItemResponder ){
|
32
39
|
this.parent.setListItemResponder( this );
|
@@ -54,10 +61,6 @@ HListItems = HValueResponder.extend({
|
|
54
61
|
_this.value = null;
|
55
62
|
},
|
56
63
|
|
57
|
-
_warningMessage: function(_messageText){
|
58
|
-
console.log("Warning; HListItems: "+_messageText);
|
59
|
-
},
|
60
|
-
|
61
64
|
/** = Description
|
62
65
|
* Iterates through this.value array and calls
|
63
66
|
* the setListItems function of the parent class.
|
@@ -65,40 +68,51 @@ HListItems = HValueResponder.extend({
|
|
65
68
|
**/
|
66
69
|
refresh: function(){
|
67
70
|
if ( this.value instanceof Array ) {
|
68
|
-
|
69
|
-
_row, _rowType,
|
70
|
-
_label, _value,
|
71
|
-
i = 0;
|
72
|
-
for ( ; i < this.value.length ; i++ ){
|
73
|
-
_row = this.value[i];
|
74
|
-
_rowType = COMM.Values.type( _row );
|
75
|
-
// console.log('row:',_row,' rowType:',_rowType);
|
76
|
-
// hashes
|
77
|
-
if ( _rowType === 'h' ) {
|
78
|
-
_label = _row.label;
|
79
|
-
_value = _row.value;
|
80
|
-
if ( _label === undefined || _value === undefined ){
|
81
|
-
this._warningMessage( "The value or label of row "+_row+" is undefined (ignored)" );
|
82
|
-
}
|
83
|
-
_listItems.push( [_value, _label] );
|
84
|
-
}
|
85
|
-
// Arrays as-is
|
86
|
-
else if ( _rowType == 'a' ){
|
87
|
-
_listItems.push( _row );
|
88
|
-
}
|
89
|
-
// strings and integers
|
90
|
-
else if ( ['s','n'].indexOf(_rowType) !== -1 ){
|
91
|
-
_label = _row.toString();
|
92
|
-
_value = _row;
|
93
|
-
_listItems.push( [_value, _label] );
|
94
|
-
}
|
95
|
-
else {
|
96
|
-
this._warningMessage( "The row "+_row+" is has unsupported row type: '"+_rowType+"' (ignored)" );
|
97
|
-
}
|
98
|
-
}
|
99
|
-
this.parent.setListItems( _listItems );
|
71
|
+
this.parent.setListItems( this.value );
|
100
72
|
}
|
101
73
|
}
|
102
74
|
});
|
103
75
|
|
76
|
+
var
|
77
|
+
HListItemControl = HControl.extend({
|
104
78
|
|
79
|
+
_cleanListItems: function(_listItemsIn){
|
80
|
+
var _listItems = [],
|
81
|
+
_row, _rowType,
|
82
|
+
_label, _value,
|
83
|
+
i = 0;
|
84
|
+
for ( ; i < _listItemsIn.length ; i++ ){
|
85
|
+
_row = _listItemsIn[i];
|
86
|
+
_rowType = COMM.Values.type( _row );
|
87
|
+
// console.log('row:',_row,' rowType:',_rowType);
|
88
|
+
// hashes
|
89
|
+
if ( _rowType === 'h' ) {
|
90
|
+
_label = _row.label;
|
91
|
+
_value = _row.value;
|
92
|
+
if ( _label === undefined || _value === undefined ){
|
93
|
+
console.log( "The value or label of row "+_row+" is undefined (ignored)" );
|
94
|
+
}
|
95
|
+
_listItems.push( [_value, _label] );
|
96
|
+
}
|
97
|
+
// Arrays as-is
|
98
|
+
else if ( _rowType == 'a' ){
|
99
|
+
_listItems.push( _row );
|
100
|
+
}
|
101
|
+
// strings and integers
|
102
|
+
else if ( ['s','n'].indexOf(_rowType) !== -1 ){
|
103
|
+
_label = _row.toString();
|
104
|
+
_value = _row;
|
105
|
+
_listItems.push( [_value, _label] );
|
106
|
+
}
|
107
|
+
else {
|
108
|
+
console.log( "The row "+_row+" has an unsupported row type: '"+_rowType+"' (ignored)" );
|
109
|
+
}
|
110
|
+
}
|
111
|
+
return _listItems;
|
112
|
+
},
|
113
|
+
|
114
|
+
setListItems: function( _listItems ){
|
115
|
+
_listItems = this._cleanListItems(_listItems);
|
116
|
+
}
|
117
|
+
|
118
|
+
});
|
@@ -11,9 +11,10 @@
|
|
11
11
|
** The value of the instance is the selected key in the listItems.
|
12
12
|
***/
|
13
13
|
var//RSence.Lists
|
14
|
-
HRadioButtonList =
|
14
|
+
HRadioButtonList = HListItemControl.extend({
|
15
15
|
drawSubviews: function(){
|
16
|
-
this.setStyle('border','1px solid #
|
16
|
+
this.setStyle('border','1px solid #999999');
|
17
|
+
this.setStyle('border-radius','3px');
|
17
18
|
this.setStyle('overflow-y','auto');
|
18
19
|
},
|
19
20
|
listItems: [],
|
@@ -32,6 +33,7 @@ HRadioButtonList = HControl.extend({
|
|
32
33
|
*
|
33
34
|
**/
|
34
35
|
setListItems: function(_listItems){
|
36
|
+
_listItems = this._cleanListItems(_listItems);
|
35
37
|
var _listItem,
|
36
38
|
_value,
|
37
39
|
_label,
|
@@ -132,8 +132,8 @@ HMiniMenu = HRadioButtonList.extend({
|
|
132
132
|
);
|
133
133
|
},
|
134
134
|
|
135
|
-
setListItems: function(
|
136
|
-
this.base(
|
135
|
+
setListItems: function(_listItems){
|
136
|
+
this.base(_listItems);
|
137
137
|
this.valueMatrix = this.menuItemView.valueMatrix;
|
138
138
|
this.refreshValue();
|
139
139
|
if( this.options.initialVisibility ){
|
data/lib/rsence/pluginmanager.rb
CHANGED
@@ -306,7 +306,7 @@ module RSence
|
|
306
306
|
|
307
307
|
# System version requirement.
|
308
308
|
# NOTE: Has no effect yet!
|
309
|
-
:sys_version => '>= 2.
|
309
|
+
:sys_version => '>= 2.2.0',
|
310
310
|
|
311
311
|
# Dependency, by default the system category (built-in plugins).
|
312
312
|
# A nil ( "~" in yaml ) value means no dependencies.
|
@@ -380,6 +380,12 @@ module RSence
|
|
380
380
|
|
381
381
|
# @private Returns a sanitized copy of a single value item.
|
382
382
|
def sanitize_value_item( value_item_dirty )
|
383
|
+
unless value_item_dirty.class == Hash
|
384
|
+
value_item_dirty = {
|
385
|
+
:value => value_item_dirty,
|
386
|
+
:restore_default => false
|
387
|
+
}
|
388
|
+
end
|
383
389
|
value_item_clean = {}
|
384
390
|
value_item_dirty.each do | key, value |
|
385
391
|
if key.to_sym == :value or key.to_sym == :data
|
data/lib/rsence.rb
CHANGED
@@ -74,7 +74,9 @@ module RSence
|
|
74
74
|
# +:autoupdate+:: (true or false) True, if the +-a+ or +--auto-update+ command-line option was given. Default is false.
|
75
75
|
# +:latency+:: (Number) Amount of milliseconds to sleep in each request given with the +--latency+ command-line option. Default is 0.
|
76
76
|
# +:say+:: (true or false) True, if the +-S+ or +--say+ command-line option was given. Default is false.
|
77
|
-
def self.args;
|
77
|
+
def self.args; @@argv_parser.args; end
|
78
|
+
|
79
|
+
def self.env_path; @@argv_parser.args[:env_path]; end
|
78
80
|
|
79
81
|
# @private This accessor enables RSence.startable? method, which returns true if a start-type command was given.
|
80
82
|
def self.startable?; @@argv_parser.startable?; end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsence-pre
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.0.
|
4
|
+
version: 2.2.0.37
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2012-01-27 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rsence-deps
|
17
|
-
requirement: &
|
17
|
+
requirement: &70324729769980 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - =
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: '966'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70324729769980
|
26
26
|
description: ! 'RSence is a different and unique development model and software frameworks
|
27
27
|
designed first-hand for real-time web applications. RSence consists of separate,
|
28
28
|
but tigtly integrated data- and user interface frameworks.
|