rsence-pre 2.2.0.23 → 2.2.0.24
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/tab/tab.js +89 -7
- data/js/foundation/system/system.js +26 -8
- data/js/lists/checkboxlist/checkboxlist.js +15 -6
- data/js/lists/radiobuttonlist/radiobuttonlist.js +15 -3
- data/lib/http/broker.rb +93 -16
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.2.0.
|
1
|
+
2.2.0.24.pre
|
data/js/controls/tab/tab.js
CHANGED
@@ -143,13 +143,20 @@ HTab = HControl.extend({
|
|
143
143
|
* +_doSelect+::
|
144
144
|
*
|
145
145
|
**/
|
146
|
-
addTab: function(_tabLabel,_doSelect,_viewClass){
|
147
|
-
var
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
146
|
+
addTab: function(_tabLabel,_doSelect,_viewClass,_viewClassOptions){
|
147
|
+
var
|
148
|
+
_tabIdx=this.tabs.length,
|
149
|
+
_tabLabelHTML = '',
|
150
|
+
_labelTextWidth = this.stringWidth( _tabLabel, null, 0, this.fontStyle ),
|
151
|
+
_labelWidth = _labelTextWidth+this.tabLabelLeftEdge+this.tabLabelRightEdge,
|
152
|
+
_tabLabelElemId = ELEM.make(this.markupElemIds[this.tabLabelParentElem],this.tabLabelElementTagName),
|
153
|
+
_tab;
|
154
|
+
if( _viewClass === undefined ){
|
155
|
+
_tab = HTabView.nu( [0,this.tabLabelHeight,null,null,0,0], this);
|
156
|
+
}
|
157
|
+
else {
|
158
|
+
_tab = _viewClass.nu( [0,this.tabLabelHeight,null,null,0,0], this, _viewClassOptions );
|
159
|
+
}
|
153
160
|
_tabIdx = this.tabs.length;
|
154
161
|
if(this.tabLabelNoHTMLPrefix){
|
155
162
|
_tabLabelHTML = _tabLabel;
|
@@ -277,4 +284,79 @@ HTabItem = {
|
|
277
284
|
}
|
278
285
|
};
|
279
286
|
|
287
|
+
var//RSence.Controls
|
288
|
+
GUITreeTabView = HControl.extend({
|
289
|
+
controlDefaults: HControlDefaults.extend({
|
290
|
+
visible: false,
|
291
|
+
autoCreate: false,
|
292
|
+
autoDestroy: true
|
293
|
+
}),
|
294
|
+
jsonRenderer: false,
|
295
|
+
createJSONRenderer: function(){
|
296
|
+
var
|
297
|
+
_this = this,
|
298
|
+
_value = _this.value,
|
299
|
+
_progressView = HView.nu( [4,0, 150, 34, 0, null], _this ),
|
300
|
+
// _indicatorPhases = ['/','-','\\','|','/','-','\\','|'], // ascii
|
301
|
+
// _indicatorPhases = ['◴','◷','◶','◵'], // unicode sector ball
|
302
|
+
// _indicatorPhases = ['◑','◒','◐','◓'], // unicode half ball
|
303
|
+
// _indicator = HStringView.nu( [ 2, 2, 32, 32 ], _progressView, { value: _indicatorPhases[0], style: { 'font-size': '24px' } } ),
|
304
|
+
// _indicatorTimeout = setInterval( function(){
|
305
|
+
// _indicatorPhase = _indicatorPhases.shift();
|
306
|
+
// _indicatorPhases.push( _indicatorPhase );
|
307
|
+
// _indicator.setValue( _indicatorPhase );
|
308
|
+
// }, 100 ),
|
309
|
+
_indicatorStr = HStringView.nu( [ 34, 12, 100, 20, 4, null ], _progressView, { value: 'Rendering' } );
|
310
|
+
_this.destroyJSONRenderer();
|
311
|
+
if( _value.type === undefined || _value.version === undefined ){
|
312
|
+
_value = {
|
313
|
+
'type': 'GUITree',
|
314
|
+
'version': 0.9,
|
315
|
+
'class': 'HView',
|
316
|
+
'rect': [0,0, null,null, 0,0],
|
317
|
+
'options': { 'style': { 'overflow': 'auto' } },
|
318
|
+
'subviews': _value
|
319
|
+
};
|
320
|
+
}
|
321
|
+
setTimeout( function(){
|
322
|
+
_this.jsonRenderer = JSONRenderer.nu( _value, _this );
|
323
|
+
// clearTimeout( _indicatorTimeout );
|
324
|
+
_progressView.die();
|
325
|
+
}, 10 );
|
326
|
+
},
|
327
|
+
destroyJSONRenderer: function(){
|
328
|
+
if( this.jsonRenderer ){
|
329
|
+
this.jsonRenderer.die();
|
330
|
+
this.jsonRenderer = false;
|
331
|
+
}
|
332
|
+
},
|
333
|
+
drawSubviews: function(){
|
334
|
+
if( this.options.autoCreate ){
|
335
|
+
this.createJSONRenderer();
|
336
|
+
}
|
337
|
+
},
|
338
|
+
show: function(){
|
339
|
+
this.base();
|
340
|
+
if(!this.jsonRenderer){
|
341
|
+
this.createJSONRenderer();
|
342
|
+
}
|
343
|
+
},
|
344
|
+
hide: function(){
|
345
|
+
this.base();
|
346
|
+
if( this.options.autoDestroy ){
|
347
|
+
this.destroyJSONRenderer();
|
348
|
+
}
|
349
|
+
},
|
350
|
+
die: function(){
|
351
|
+
this.destroyJSONRenderer();
|
352
|
+
this.base();
|
353
|
+
}
|
354
|
+
});
|
355
|
+
|
356
|
+
var//RSence.Controls
|
357
|
+
GUITreeTabItem = {
|
358
|
+
nu: function( _rect, _parent, _options ){
|
359
|
+
return _parent.addTab( _options.label, _options.select, GUITreeTabView, _options );
|
360
|
+
}
|
361
|
+
};
|
280
362
|
|
@@ -204,15 +204,33 @@ HSystem = {
|
|
204
204
|
*
|
205
205
|
**/
|
206
206
|
killApp: function(_appId, _forced){
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
207
|
+
this.reniceApp( _appId, -1 ); // prevent new idle calls to the app
|
208
|
+
if( _forced || ( this.busyApps[ _appId ] === false ) ){
|
209
|
+
this._forceKillApp( _appId );
|
210
|
+
}
|
211
|
+
else {
|
212
|
+
/* Waiting for the app to finish its idle loop before killing it */
|
213
|
+
var
|
214
|
+
_startedWaiting = new Date().getTime(),
|
215
|
+
_this = this,
|
216
|
+
_timeout = setInterval(
|
217
|
+
function(){
|
218
|
+
if( _this.busyApps[ _appId ] === true ) {
|
219
|
+
if (new Date().getTime() > _startedWaiting + _this.maxAppRunTime) {
|
220
|
+
clearTimeout(_timeout);
|
221
|
+
_this._forceKillApp( _appId );
|
222
|
+
}
|
223
|
+
else {
|
224
|
+
clearTimeout(_timeout);
|
225
|
+
_this._forceKillApp( _appId );
|
226
|
+
}
|
227
|
+
}
|
228
|
+
}, 10
|
229
|
+
);
|
215
230
|
}
|
231
|
+
},
|
232
|
+
|
233
|
+
_forceKillApp: function( _appId ){
|
216
234
|
this.busyApps[_appId] = true;
|
217
235
|
|
218
236
|
this.apps[ _appId ].destroyAllViews();
|
@@ -27,10 +27,10 @@ HCheckboxList = HControl.extend({
|
|
27
27
|
listItemViews: [],
|
28
28
|
ListCheckbox: HCheckbox.extend({
|
29
29
|
|
30
|
-
/** = Description
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
/** = Description
|
31
|
+
* Adds listValues to the parent if they are true otherwise deletes them.
|
32
|
+
*
|
33
|
+
**/
|
34
34
|
refreshValue: function(){
|
35
35
|
this.base();
|
36
36
|
if(this.value === true){
|
@@ -40,7 +40,15 @@ HCheckboxList = HControl.extend({
|
|
40
40
|
this.parent.delItem( this.options.listValue );
|
41
41
|
}
|
42
42
|
}
|
43
|
-
}),
|
43
|
+
}), // End ListCheckbox
|
44
|
+
|
45
|
+
setEnabled: function(_state){
|
46
|
+
this.base(_state);
|
47
|
+
if(!this['listItemViews']){ return; }
|
48
|
+
for(var i=0;i<this.listItems.length;i++){
|
49
|
+
this.listItemViews[i].setEnabled(_state)
|
50
|
+
}
|
51
|
+
},
|
44
52
|
|
45
53
|
/** = Description
|
46
54
|
* Checks if +_listValue+ can be found from the values. Adds the value
|
@@ -121,7 +129,8 @@ HCheckboxList = HControl.extend({
|
|
121
129
|
this, {
|
122
130
|
label: _label,
|
123
131
|
value: _checked,
|
124
|
-
listValue: _value
|
132
|
+
listValue: _value,
|
133
|
+
enabled: this.enabled
|
125
134
|
}
|
126
135
|
);
|
127
136
|
this.listItemViews[i] = _checkbox;
|
@@ -61,7 +61,8 @@ HRadioButtonList = HControl.extend({
|
|
61
61
|
return HRadiobutton.nu(
|
62
62
|
[ 4, (i*23)+4, null, 23, 4, null ],
|
63
63
|
this, {
|
64
|
-
label: _label
|
64
|
+
label: _label,
|
65
|
+
enabled: this.enabled
|
65
66
|
}
|
66
67
|
);
|
67
68
|
},
|
@@ -94,6 +95,13 @@ HRadioButtonList = HControl.extend({
|
|
94
95
|
},
|
95
96
|
radioButtonIndexValue: false,
|
96
97
|
radioButtonResponder: false,
|
98
|
+
setEnabled: function(_state){
|
99
|
+
this.base(_state);
|
100
|
+
if(!this['listItemViews']){ return; }
|
101
|
+
for(var i=0;i<this.listItems.length;i++){
|
102
|
+
this.listItemViews[i].setEnabled(_state)
|
103
|
+
}
|
104
|
+
},
|
97
105
|
|
98
106
|
/** = Description
|
99
107
|
*
|
@@ -104,12 +112,15 @@ HRadioButtonList = HControl.extend({
|
|
104
112
|
this.parent = _parent;
|
105
113
|
},
|
106
114
|
refresh: function(){
|
107
|
-
var
|
115
|
+
var
|
116
|
+
_listItems = this.parent.listItems,
|
117
|
+
_value;
|
108
118
|
if(_listItems === undefined || _listItems === null){
|
109
119
|
return;
|
110
120
|
}
|
111
121
|
if(_listItems[ this.value ] !== undefined){
|
112
|
-
|
122
|
+
_value = _listItems[ this.value ];
|
123
|
+
this.parent.setValue( _value[0] );
|
113
124
|
}
|
114
125
|
}
|
115
126
|
}),
|
@@ -119,6 +130,7 @@ HRadioButtonList = HControl.extend({
|
|
119
130
|
refreshValue: function(){
|
120
131
|
var _value = this.value;
|
121
132
|
if ( this.listItems && this.listItems.length !== 0 && this['valueMatrix'] !== undefined ) {
|
133
|
+
// debugger;
|
122
134
|
if ( this.radioButtonResponder === false ){
|
123
135
|
this.radioButtonIndexValue = HValue.nu( false, 0 );
|
124
136
|
this.radioButtonIndexValue.bind( this.valueMatrix );
|
data/lib/http/broker.rb
CHANGED
@@ -15,7 +15,6 @@ require 'http/response'
|
|
15
15
|
## Minimally WEBrick -compatible request object
|
16
16
|
require 'http/request'
|
17
17
|
|
18
|
-
|
19
18
|
module RSence
|
20
19
|
|
21
20
|
|
@@ -41,8 +40,15 @@ class Broker
|
|
41
40
|
response = Response.new
|
42
41
|
request_method = request.request_method.downcase
|
43
42
|
dispatcher = dispatcher_class.new( request, response )
|
44
|
-
dispatcher.
|
45
|
-
|
43
|
+
if dispatcher.respond_to?( request_method )
|
44
|
+
begin
|
45
|
+
dispatcher.send( request_method )
|
46
|
+
rescue => e
|
47
|
+
dispatcher.server_error( e )
|
48
|
+
end
|
49
|
+
else
|
50
|
+
dispatcher.not_implemented( request.request_method )
|
51
|
+
end
|
46
52
|
response_body = response.body
|
47
53
|
response.header['Content-Length'] = response.body_bytes unless response.header.has_key?('Content-Length')
|
48
54
|
return [response.status, response.header, response_body]
|
@@ -55,7 +61,6 @@ class Broker
|
|
55
61
|
# @return [Broker] An instance of Broker with a {Request} instance as +@request+ and a {Response} instance as +@response+
|
56
62
|
def dispatcher_class
|
57
63
|
@dispatcher ||= Class.new(self.class) do
|
58
|
-
attr_accessor :content_type
|
59
64
|
def initialize(request,response)
|
60
65
|
@request = request
|
61
66
|
@response = response
|
@@ -99,7 +104,7 @@ class Broker
|
|
99
104
|
# Loads the selected web-server (default is 'mongrel')
|
100
105
|
rack_require = conf[:rack_require]
|
101
106
|
puts conf.inspect if RSence.args[:debug]
|
102
|
-
|
107
|
+
|
103
108
|
require rack_require
|
104
109
|
|
105
110
|
# Selects the handler for Rack
|
@@ -112,41 +117,113 @@ class Broker
|
|
112
117
|
'unicorn' => lambda { Rack::Handler::Unicorn },
|
113
118
|
'rainbows' => lambda { Rack::Handler::Rainbows }
|
114
119
|
}[rack_require].call
|
115
|
-
|
116
120
|
handler.run( Rack::Lint.new(self.new), :Host => host, :Port => port )
|
117
|
-
|
118
121
|
end
|
119
122
|
|
120
123
|
# Generic 404 error handler. Just sets up response status, headers, body as a small "Page Not Found" html page
|
121
124
|
def not_found
|
122
125
|
puts "/404: #{@request.fullpath.inspect}" if RSence.args[:verbose]
|
123
126
|
@response.status = 404
|
124
|
-
err404 =
|
127
|
+
err404 = "<html><head><title>404 - Page Not Found</title></head><body>404 - Page "#{@request.fullpath}" Not Found</body></html>"
|
125
128
|
@response['Content-Type'] = 'text/html; charset=UTF-8'
|
126
|
-
@response['Content-Length'] = err404.bytesize.to_s
|
127
129
|
@response.body = err404
|
128
130
|
end
|
129
131
|
|
130
132
|
# Routes POST requests to {Transporter#servlet}
|
131
133
|
def post
|
132
|
-
|
133
134
|
puts "post: #{@request.fullpath}" if RSence.args[:verbose]
|
134
|
-
|
135
135
|
not_found unless @@transporter.servlet( :post, @request, @response )
|
136
|
-
|
137
136
|
end
|
138
137
|
|
139
138
|
# Routes GET requests to {Transporter#servlet}
|
140
139
|
def get
|
141
|
-
|
142
140
|
puts "get: #{@request.fullpath}" if RSence.args[:verbose]
|
143
|
-
|
144
141
|
not_found unless @@transporter.servlet( :get, @request, @response )
|
145
|
-
|
146
142
|
end
|
147
143
|
|
148
|
-
|
144
|
+
# Routes HEAD requests to {Transporter#servlet}
|
145
|
+
# Uses GET and removes the response body, if nothing matches HEAD directly.
|
146
|
+
def head
|
147
|
+
puts "head: #{@request.fullpath}" if RSence.args[:verbose]
|
148
|
+
return if @@transporter.servlet( :head, @request, @response )
|
149
|
+
if @@transporter.servlet( :get, @request, @response )
|
150
|
+
@response.body = ''
|
151
|
+
else
|
152
|
+
not_found
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# Generic 405 (method not allowed) handler.
|
157
|
+
def not_allowed( method_name )
|
158
|
+
@response.status = 405
|
159
|
+
body_txt = "Error 405: The method #{method_name} is not allowed on #{@request.fullpath}.\r\n"
|
160
|
+
@response['Content-Type'] = 'text/plain; charset=UTF-8'
|
161
|
+
@response.body = body_txt
|
162
|
+
end
|
163
|
+
|
164
|
+
# Generic 501 (method not implemented) handler.
|
165
|
+
def not_implemented( method_name )
|
166
|
+
@response.status = 501
|
167
|
+
body_txt = "Error 501: The method #{method_name} is not implemented on #{@request.fullpath}.\r\n"
|
168
|
+
@response['Content-Type'] = 'text/plain; charset=UTF-8'
|
169
|
+
@response.body = body_txt
|
170
|
+
end
|
149
171
|
|
172
|
+
# Generic 500 (server error) handler.
|
173
|
+
def server_error( e, custom_name='Broker Exception' )
|
174
|
+
@response.status = 500
|
175
|
+
exception_detail = [
|
176
|
+
custom_name,
|
177
|
+
"Time: #{Time.now.to_s}",
|
178
|
+
"#{'-='*39}-",
|
179
|
+
"#{e.class}: #{e.to_s}",
|
180
|
+
"\t#{e.backtrace.join("\r\n\t")}",
|
181
|
+
"#{'-='*39}-",
|
182
|
+
"Request method: #{@request.request_method}",
|
183
|
+
"Request path: #{@request.fullpath}",
|
184
|
+
"Request headers: #{@request.header.inspect}",
|
185
|
+
"#{'-='*39}-\r\n\r\n"
|
186
|
+
].join("\r\n")
|
187
|
+
$stderr.puts exception_detail
|
188
|
+
if RSence.args[:debug]
|
189
|
+
body_txt = "Error 500: "+ exception_detail
|
190
|
+
else
|
191
|
+
body_txt = "Error 500: General server error.\r\n"
|
192
|
+
end
|
193
|
+
@response['Content-Type'] = 'text/plain; charset=UTF-8'
|
194
|
+
@response.body = body_txt
|
195
|
+
end
|
196
|
+
|
197
|
+
# Routes OPTIONS requests to {Transporter#servlet}
|
198
|
+
def options
|
199
|
+
puts "options: #{@request.fullpath}" if RSence.args[:verbose]
|
200
|
+
not_allowed('OPTIONS') unless @@transporter.servlet( :options, @request, @response )
|
201
|
+
end
|
202
|
+
|
203
|
+
# Routes PUT requests to {Transporter#servlet}
|
204
|
+
def put
|
205
|
+
puts "put: #{@request.fullpath}" if RSence.args[:verbose]
|
206
|
+
not_allowed('PUT') unless @@transporter.servlet( :put, @request, @response )
|
207
|
+
end
|
208
|
+
|
209
|
+
# Routes DELETE requests to {Transporter#servlet}
|
210
|
+
def delete
|
211
|
+
puts "delete: #{@request.fullpath}" if RSence.args[:verbose]
|
212
|
+
not_allowed('DELETE') unless @@transporter.servlet( :delete, @request, @response )
|
213
|
+
end
|
214
|
+
|
215
|
+
# Routes TRACE requests to {Transporter#servlet}
|
216
|
+
def trace
|
217
|
+
puts "trace: #{@request.fullpath}" if RSence.args[:verbose]
|
218
|
+
not_allowed('TRACE') unless @@transporter.servlet( :trace, @request, @response )
|
219
|
+
end
|
220
|
+
|
221
|
+
# Routes CONNECT requests to {Transporter#servlet}
|
222
|
+
def connect
|
223
|
+
puts "connect: #{@request.fullpath}" if RSence.args[:verbose]
|
224
|
+
not_allowed('CONNECT') unless @@transporter.servlet( :connect, @request, @response )
|
225
|
+
end
|
226
|
+
|
150
227
|
end
|
151
228
|
|
152
229
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsence-pre
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 79
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 2
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 2.2.0.
|
10
|
+
- 24
|
11
|
+
version: 2.2.0.24
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Riassence Inc.
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-
|
20
|
+
date: 2011-11-03 00:00:00 Z
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
23
23
|
name: rsence-deps
|
@@ -371,3 +371,4 @@ specification_version: 3
|
|
371
371
|
summary: Pre-Release 2.2 version of RSence.
|
372
372
|
test_files: []
|
373
373
|
|
374
|
+
has_rdoc:
|