rsence 2.0.9.23 → 2.1.0
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/INSTALL.rdoc +61 -49
- data/README.rdoc +20 -4
- data/VERSION +1 -1
- data/conf/default_conf.yaml +8 -0
- data/conf/rsence_command_strings.yaml +31 -20
- data/docs/ExampleGuiPlugin.rdoc +2 -2
- data/js/comm/comm.js +27 -5
- data/js/comm/transporter/transporter.js +1 -1
- data/js/comm/values/values.js +12 -5
- data/js/controls/button/button.js +12 -2
- data/js/controls/dialogs/alert_sheet/alert_sheet.js +13 -1
- data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +13 -2
- data/js/controls/dialogs/sheet/sheet.js +35 -28
- data/js/controls/imageview/imageview.js +13 -13
- data/js/controls/progress/progressindicator/progressindicator.js +5 -5
- data/js/controls/sliders/slider/slider.js +4 -31
- data/js/controls/stepper/stepper.js +12 -19
- data/js/controls/textcontrol/textcontrol.js +0 -50
- data/js/controls/textcontrol/themes/default/textcontrol.html +1 -1
- data/js/controls/window/window.js +1 -1
- data/js/core/elem/elem.js +146 -160
- data/js/core/rsence_ns/rsence_ns.js +7 -0
- data/js/foundation/control/eventresponder/eventresponder.js +8 -7
- data/js/foundation/eventmanager/eventmanager.js +81 -48
- data/js/foundation/geom/rect/rect.js +1 -1
- data/js/foundation/json_renderer/json_renderer.js +4 -1
- data/js/foundation/system/system.js +37 -34
- data/js/foundation/view/morphanimation/morphanimation.js +53 -43
- data/js/foundation/view/view.js +119 -118
- data/js/lists/listitems/listitems.js +10 -10
- data/js/lists/propertylist/js.inc +0 -0
- data/js/lists/propertylist/propertylist.js +574 -0
- data/js/lists/propertylist/propertylisteditor/js.inc +0 -0
- data/js/lists/propertylist/propertylisteditor/propertylisteditor.js +233 -0
- data/js/lists/radiobuttonlist/radiobuttonlist.js +15 -8
- data/js/menus/minimenu/js.inc +0 -0
- data/js/menus/minimenu/minimenu.js +139 -0
- data/js/menus/minimenu/minimenuitem/js.inc +0 -0
- data/js/menus/minimenu/minimenuitem/minimenuitem.js +33 -0
- data/js/menus/minimenu/minimenuitem/themes/default/minimenuitem.css +45 -0
- data/js/menus/minimenu/minimenuitem/themes/default/minimenuitem.html +4 -0
- data/js/menus/minimenu/minimenuitem/themes/default/minimenuitem_checkmark.png +0 -0
- data/js/menus/minimenu/themes/default/minimenu.css +63 -0
- data/js/menus/minimenu/themes/default/minimenu.html +7 -0
- data/js/menus/minimenu/themes/default/minimenu.png +0 -0
- data/js/util/reloadapp/reloadapp.js +1 -1
- data/lib/conf/argv.rb +40 -11
- data/lib/daemon/daemon.rb +63 -22
- data/lib/plugins/gui_plugin.rb +28 -31
- data/lib/plugins/guiparser.rb +37 -7
- data/lib/plugins/plugin.rb +260 -28
- data/lib/plugins/plugin_base.rb +14 -0
- data/lib/plugins/plugin_plugins.rb +11 -1
- data/lib/plugins/pluginmanager.rb +127 -44
- data/lib/plugins/plugins.rb +10 -1
- data/lib/session/msg.rb +25 -1
- data/lib/session/sessionmanager.rb +11 -2
- data/lib/session/sessionstorage.rb +14 -14
- data/lib/transporter/transporter.rb +29 -13
- data/lib/values/hvalue.rb +30 -0
- data/plugins/client_pkg/info.yaml +2 -2
- data/plugins/{index_html → main}/img/loading.gif +0 -0
- data/plugins/{index_html → main}/img/riassence.gif +0 -0
- data/plugins/main/info.yaml +5 -4
- data/plugins/main/main.rb +180 -24
- data/plugins/{index_html → main}/tmpl/index.html +4 -2
- data/plugins/ticket/info.yaml +2 -2
- data/plugins/ticket/lib/upload.rb +57 -5
- data/plugins/ticket/ticket.rb +10 -4
- data/setup/welcome/info.yaml +2 -2
- data/setup/welcome/text/welcome.html +1 -1
- metadata +22 -11
- data/plugins/index_html/index_html.rb +0 -120
- data/plugins/index_html/info.yaml +0 -18
@@ -9,7 +9,9 @@ __SCRIPT_DEPS__
|
|
9
9
|
|
10
10
|
<script>
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
var RSenceInit = function(){
|
13
|
+
/** Runtime configuration: **/
|
14
|
+
RSence.serverConf('__CLIENT_BASE__','__CLIENT_HELLO__');
|
15
|
+
};
|
14
16
|
|
15
17
|
</script></head><body id="body"><noscript>__NOSCRIPT__</noscript></body></html>
|
data/plugins/ticket/info.yaml
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
title: Ticket services
|
4
4
|
|
5
5
|
# The human-readable version of the package
|
6
|
-
version: 2.
|
6
|
+
version: 2.1.0
|
7
7
|
|
8
8
|
# A brief description of the package (rdoc formatting supported)
|
9
9
|
description: |
|
@@ -13,7 +13,7 @@ description: |
|
|
13
13
|
reloadable: false
|
14
14
|
|
15
15
|
# System version requirement.
|
16
|
-
sys_version: '>= 2.
|
16
|
+
sys_version: '>= 2.1.0'
|
17
17
|
|
18
18
|
category: :system
|
19
19
|
|
@@ -10,10 +10,62 @@
|
|
10
10
|
|
11
11
|
require 'sequel'
|
12
12
|
|
13
|
-
#
|
13
|
+
# Inner workings of Ticket
|
14
14
|
module TicketService
|
15
|
+
|
16
|
+
|
17
|
+
=begin
|
18
|
+
|
19
|
+
# Here is an example how to implement "simple" upload value management.
|
20
|
+
#
|
21
|
+
# Define the component in yaml like this:
|
22
|
+
#
|
23
|
+
# - class: HUploader
|
24
|
+
# rect: [ 10, 10, 200, 24 ]
|
25
|
+
# bind: :values.upload
|
26
|
+
# options:
|
27
|
+
# label: Upload
|
28
|
+
# events:
|
29
|
+
# click: true
|
30
|
+
#
|
31
|
+
#
|
32
|
+
# Expects a value named :upload, it is defined like this in values.yaml:
|
33
|
+
#
|
34
|
+
# :upload:
|
35
|
+
# :responders:
|
36
|
+
# - :method: upload
|
37
|
+
#
|
38
|
+
#
|
39
|
+
class UploadPlugin < GUIPlugin
|
40
|
+
def init_ses_values( msg )
|
41
|
+
super
|
42
|
+
upload_id( msg )
|
43
|
+
end
|
44
|
+
def restore_ses_values( msg )
|
45
|
+
super
|
46
|
+
upload_id( msg )
|
47
|
+
end
|
48
|
+
def upload_id( msg )
|
49
|
+
upload_ticket = ticket.upload_key( msg, get_ses( msg, :upload ).value_id )
|
50
|
+
get_ses( msg, :upload ).set( msg, upload_ticket )
|
51
|
+
end
|
52
|
+
def upload( msg, value )
|
53
|
+
if value.data.start_with?('2:::') # upload is completed
|
54
|
+
ticket_id = value.data.split(':::')[1]
|
55
|
+
ticket_data = ticket.get_uploads( ticket_id, true )
|
56
|
+
ticket_data.each do |ticket_item|
|
57
|
+
file_write( bundle_path( ticket_item[:name], 'uploaded' ), ticket_item[:data] )
|
58
|
+
end
|
59
|
+
ticket.del_uploads( msg, ticket_id )
|
60
|
+
value.set( msg, '3:::' + ticket_id ) # upload is processed
|
61
|
+
elsif value.data.start_with?('4:::') # client wants a new id
|
62
|
+
upload_id( msg )
|
63
|
+
end
|
64
|
+
return true
|
65
|
+
end
|
66
|
+
end
|
67
|
+
=end
|
15
68
|
|
16
|
-
# @private Inner workings of Ticket
|
17
69
|
module Upload
|
18
70
|
|
19
71
|
=begin
|
@@ -50,7 +102,7 @@ create table rsence_uploads (
|
|
50
102
|
=end
|
51
103
|
def upload(request,response)
|
52
104
|
|
53
|
-
ticket_id =
|
105
|
+
ticket_id = request.unparsed_uri.match(/^#{::RSence.config[:broker_urls][:u]+'/'}(.*)$/)[1]
|
54
106
|
value_id = request.query['value_id']
|
55
107
|
|
56
108
|
if not @upload_slots[:by_id].has_key?(ticket_id)
|
@@ -144,7 +196,7 @@ create table rsence_uploads (
|
|
144
196
|
else
|
145
197
|
row_datas = @upload_slots[:rsence_uploads][row_id]
|
146
198
|
end
|
147
|
-
if row_datas.
|
199
|
+
if row_datas.count == 1
|
148
200
|
row_data = row_datas.first
|
149
201
|
row_hash = {
|
150
202
|
:date => Time.at(row_data[:upload_date]),
|
@@ -167,7 +219,7 @@ create table rsence_uploads (
|
|
167
219
|
else
|
168
220
|
row_datas = @upload_slots[:rsence_uploads][row_id]
|
169
221
|
end
|
170
|
-
if row_datas.
|
222
|
+
if row_datas.count == 1
|
171
223
|
row_data = row_datas.first
|
172
224
|
row_hash = {
|
173
225
|
:date => Time.at(row_data[:upload_date]),
|
data/plugins/ticket/ticket.rb
CHANGED
@@ -66,7 +66,8 @@ class TicketPlugin < Plugin
|
|
66
66
|
# @private Implements this part of the {RSence::Plugins::Servlet__ Servlet} API on a plugin to match the {#broker_urls}
|
67
67
|
def match( uri, request_type )
|
68
68
|
if request_type == :post
|
69
|
-
|
69
|
+
upload_match = uri.start_with?( broker_urls[:u] + '/')
|
70
|
+
return true if upload_match
|
70
71
|
elsif request_type == :get
|
71
72
|
if uri.match( /^#{broker_urls[:i]}/ )
|
72
73
|
return true
|
@@ -118,7 +119,7 @@ class TicketPlugin < Plugin
|
|
118
119
|
# @private Handles the upload request
|
119
120
|
def post( req, res, ses )
|
120
121
|
uri = req.fullpath
|
121
|
-
if uri
|
122
|
+
if uri.start_with?( broker_urls[:u] + '/')
|
122
123
|
puts "/U: #{uri.inspect}" if RSence.args[:verbose]
|
123
124
|
@ticketserve.upload( req, res )
|
124
125
|
end
|
@@ -178,9 +179,14 @@ class TicketPlugin < Plugin
|
|
178
179
|
@ticketserve.serve( msg, content, format, type )
|
179
180
|
end
|
180
181
|
|
181
|
-
# @private Removes data used by the session
|
182
|
+
# @private Removes data used by the session, takes session id
|
183
|
+
def expire_ses_id( ses_id )
|
184
|
+
@ticketserve.expire_ses( ses_id )
|
185
|
+
end
|
186
|
+
|
187
|
+
# @private Removes data used by the session, takes msg
|
182
188
|
def expire_ses( msg )
|
183
|
-
|
189
|
+
expire_ses_id( msg.ses_id )
|
184
190
|
end
|
185
191
|
|
186
192
|
# Sets a custom favicon for RSence
|
data/setup/welcome/info.yaml
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
title: Welcome message
|
4
4
|
|
5
5
|
# The human-readable version of the package
|
6
|
-
version: 1.0.
|
6
|
+
version: 1.0.2
|
7
7
|
|
8
8
|
# A brief description of the package (rdoc formatting supported)
|
9
9
|
description: |
|
10
10
|
This is a simple welcome message plugin. It's installed in new project
|
11
|
-
environments, when the rsence
|
11
|
+
environments, when the rsence init in executed.
|
12
12
|
You may safely remove this plugin bundle.
|
13
13
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div style="margin-left:40px;margin-top:140px;margin-right:20px">
|
3
3
|
<h1>Congratulations!</h1>
|
4
4
|
<p>This message is served to you by RSence running in your new environment.</p>
|
5
|
-
<p>The next time you create an RSence environment, use the <code>--blank</code> option of the <code>rsence
|
5
|
+
<p>The next time you create an RSence environment, use the <code>--blank</code> option of the <code>rsence init</code> command to avoid this message.</p>
|
6
6
|
<p>Use the <code>rsence help</code> command to learn more about the <code>rsence</code> command-line tool and its various commands and options.</p>
|
7
7
|
<p>You may want to install or write some software to run in your new RSence environment next.</p>
|
8
8
|
<p>Go to <a href="http://rsence.org/">rsence.org</a> to learn more about RSence.</p>
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
- 23
|
11
|
-
version: 2.0.9.23
|
10
|
+
version: 2.1.0
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- Riassence Inc.
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2010-
|
18
|
+
date: 2010-12-01 00:00:00 +02:00
|
20
19
|
default_executable: rsence
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
@@ -93,14 +92,12 @@ files:
|
|
93
92
|
- plugins/client_pkg/lib/client_pkg_build.rb
|
94
93
|
- plugins/client_pkg/lib/client_pkg_cache.rb
|
95
94
|
- plugins/client_pkg/lib/client_pkg_serve.rb
|
96
|
-
- plugins/
|
97
|
-
- plugins/
|
98
|
-
- plugins/index_html/index_html.rb
|
99
|
-
- plugins/index_html/info.yaml
|
100
|
-
- plugins/index_html/tmpl/index.html
|
95
|
+
- plugins/main/img/loading.gif
|
96
|
+
- plugins/main/img/riassence.gif
|
101
97
|
- plugins/main/info.yaml
|
102
98
|
- plugins/main/js/main.js
|
103
99
|
- plugins/main/main.rb
|
100
|
+
- plugins/main/tmpl/index.html
|
104
101
|
- plugins/main/values.yaml
|
105
102
|
- plugins/ticket/info.yaml
|
106
103
|
- plugins/ticket/lib/common.rb
|
@@ -337,8 +334,22 @@ files:
|
|
337
334
|
- js/lists/checkboxlist/js.inc
|
338
335
|
- js/lists/listitems/js.inc
|
339
336
|
- js/lists/listitems/listitems.js
|
337
|
+
- js/lists/propertylist/js.inc
|
338
|
+
- js/lists/propertylist/propertylist.js
|
339
|
+
- js/lists/propertylist/propertylisteditor/js.inc
|
340
|
+
- js/lists/propertylist/propertylisteditor/propertylisteditor.js
|
340
341
|
- js/lists/radiobuttonlist/js.inc
|
341
342
|
- js/lists/radiobuttonlist/radiobuttonlist.js
|
343
|
+
- js/menus/minimenu/js.inc
|
344
|
+
- js/menus/minimenu/minimenu.js
|
345
|
+
- js/menus/minimenu/minimenuitem/js.inc
|
346
|
+
- js/menus/minimenu/minimenuitem/minimenuitem.js
|
347
|
+
- js/menus/minimenu/minimenuitem/themes/default/minimenuitem.css
|
348
|
+
- js/menus/minimenu/minimenuitem/themes/default/minimenuitem.html
|
349
|
+
- js/menus/minimenu/minimenuitem/themes/default/minimenuitem_checkmark.png
|
350
|
+
- js/menus/minimenu/themes/default/minimenu.css
|
351
|
+
- js/menus/minimenu/themes/default/minimenu.html
|
352
|
+
- js/menus/minimenu/themes/default/minimenu.png
|
342
353
|
- js/util/reloadapp/js.inc
|
343
354
|
- js/util/reloadapp/reloadapp.js
|
344
355
|
- js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif
|
@@ -396,6 +407,6 @@ rubyforge_project: rsence-
|
|
396
407
|
rubygems_version: 1.3.7
|
397
408
|
signing_key:
|
398
409
|
specification_version: 3
|
399
|
-
summary: Release 2.
|
410
|
+
summary: Release 2.1 version of the RSence framework.
|
400
411
|
test_files: []
|
401
412
|
|
@@ -1,120 +0,0 @@
|
|
1
|
-
## RSence
|
2
|
-
# Copyright 2009 Riassence Inc.
|
3
|
-
# http://riassence.com/
|
4
|
-
#
|
5
|
-
# You should have received a copy of the GNU General Public License along
|
6
|
-
# with this software package. If not, contact licensing@riassence.com
|
7
|
-
##
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# @private IndexHtmlPlugin is the servlet plugin that is responsible for initializing the "boot-strap page". It's not intended as a part of the public API at this time.
|
12
|
-
class IndexHtmlPlugin < Servlet
|
13
|
-
|
14
|
-
def match( uri, method )
|
15
|
-
if uri == ::RSence.config[:index_html][:respond_address] and method == :get
|
16
|
-
return true
|
17
|
-
else
|
18
|
-
return false
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def score
|
23
|
-
return 1000 # allows overriding with anything with a score below 1000
|
24
|
-
end
|
25
|
-
|
26
|
-
def init
|
27
|
-
@randgen = RandGen.new( 40 )
|
28
|
-
::RSence.config[:index_html][:instance] = self
|
29
|
-
end
|
30
|
-
|
31
|
-
def open
|
32
|
-
@index_html_src = file_read( ::RSence.config[:index_html][:index_tmpl] )
|
33
|
-
render_index_html
|
34
|
-
end
|
35
|
-
|
36
|
-
def close
|
37
|
-
@plugins[:ticket].del_rsrc( @loading_gif_id )
|
38
|
-
end
|
39
|
-
|
40
|
-
def render_index_html
|
41
|
-
|
42
|
-
index_html = @index_html_src.clone
|
43
|
-
|
44
|
-
index_html.gsub!('__DEFAULT_TITLE__',::RSence.config[:index_html][:title])
|
45
|
-
client_rev = @plugins[:client_pkg].client_cache.client_rev
|
46
|
-
index_html.gsub!('__CLIENT_REV__',client_rev)
|
47
|
-
index_html.gsub!('__CLIENT_BASE__',File.join(::RSence.config[:broker_urls][:h],client_rev))
|
48
|
-
index_html.gsub!('__CLIENT_HELLO__',::RSence.config[:broker_urls][:hello])
|
49
|
-
index_html.gsub!('__NOSCRIPT__',::RSence.config[:index_html][:noscript])
|
50
|
-
|
51
|
-
deps_src = ''
|
52
|
-
::RSence.config[:index_html][:deps].each do |dep|
|
53
|
-
deps_src += %{<script src="#{dep}" type="text/javascript"></script>}
|
54
|
-
end
|
55
|
-
index_html.gsub!('__SCRIPT_DEPS__',deps_src)
|
56
|
-
|
57
|
-
return index_html
|
58
|
-
end
|
59
|
-
|
60
|
-
def session_index_html( request, response )
|
61
|
-
ses_key = @randgen.gen
|
62
|
-
sha_key = ''
|
63
|
-
buffer = [
|
64
|
-
"var qP=function(cmd){COMM.Queue.push(cmd);};"
|
65
|
-
]
|
66
|
-
req_num = 0
|
67
|
-
3.times do |req_num|
|
68
|
-
sha_key = Digest::SHA1.hexdigest( ses_key + sha_key )
|
69
|
-
msg = @plugins.transporter.xhr(
|
70
|
-
request, response, {
|
71
|
-
:servlet => true,
|
72
|
-
:cookie => (req_num==0),
|
73
|
-
:query => {
|
74
|
-
'ses_key' => "#{req_num}:.o.:#{sha_key}"
|
75
|
-
}
|
76
|
-
}
|
77
|
-
)
|
78
|
-
buffer += msg.value_buffer
|
79
|
-
msg.buffer.each do |buffer_item|
|
80
|
-
buffer.push( "qP(function(){#{buffer_item};});")
|
81
|
-
end
|
82
|
-
ses_key = msg.ses_key
|
83
|
-
end
|
84
|
-
buffer.unshift( "COMM.Session.newKey(#{ses_key.to_json});" )
|
85
|
-
buffer.unshift( "COMM.Session.sha_key=#{sha_key.to_json};" )
|
86
|
-
buffer.unshift( "COMM.Session.req_num=#{req_num};" )
|
87
|
-
index_html = render_index_html
|
88
|
-
return index_html.gsub('__STARTUP_SEQUENCE__', buffer.join("\n") )
|
89
|
-
end
|
90
|
-
|
91
|
-
## Outputs a static web page.
|
92
|
-
def get( request, response, ses )
|
93
|
-
index_html = render_index_html
|
94
|
-
support_gzip = (request.header.has_key?('accept-encoding') and \
|
95
|
-
request.header['accept-encoding'].include?('gzip')) \
|
96
|
-
and not ::RSence.config[:no_gzip]
|
97
|
-
|
98
|
-
response.status = 200
|
99
|
-
|
100
|
-
response['Content-Type'] = 'text/html; charset=UTF-8'
|
101
|
-
response['Date'] = httime( Time.now )
|
102
|
-
response['Server'] = 'RSence'
|
103
|
-
response['Cache-Control'] = 'no-cache'
|
104
|
-
|
105
|
-
if support_gzip
|
106
|
-
index_gzip = GZString.new('')
|
107
|
-
gzwriter = Zlib::GzipWriter.new( index_gzip, 9 )
|
108
|
-
gzwriter.write( index_html )
|
109
|
-
gzwriter.close
|
110
|
-
response['Content-Length'] = index_gzip.length
|
111
|
-
response['Content-Encoding'] = 'gzip'
|
112
|
-
response.body = index_gzip
|
113
|
-
else
|
114
|
-
response['Content-Length'] = index_html.length
|
115
|
-
response.body = index_html
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
120
|
-
|
@@ -1,18 +0,0 @@
|
|
1
|
-
|
2
|
-
# The human-readable product name of the package
|
3
|
-
title: Index HTML Page
|
4
|
-
|
5
|
-
# The human-readable version of the package
|
6
|
-
version: 2.0.0
|
7
|
-
|
8
|
-
# A brief description of the package (rdoc formatting supported)
|
9
|
-
description: |
|
10
|
-
This plugin serves the initial html page.
|
11
|
-
|
12
|
-
# System version requirement.
|
13
|
-
sys_version: '>= 2.0.0'
|
14
|
-
|
15
|
-
category: :system
|
16
|
-
|
17
|
-
depends_on: :client_pkg
|
18
|
-
|