rsence-pre 2.1.0.21 → 2.1.8.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 -46
- data/README.rdoc +17 -1
- data/VERSION +1 -1
- data/conf/rsence_command_strings.yaml +16 -16
- data/js/comm/sessionwatcher/sessionwatcher.js +5 -4
- data/js/comm/transporter/transporter.js +62 -4
- data/js/comm/values/values.js +62 -0
- data/js/controls/button/themes/default/button.css +7 -7
- data/js/controls/imageview/imageview.js +15 -6
- data/js/controls/stringview/stringview.js +16 -2
- data/js/controls/textcontrol/textcontrol.js +56 -3
- data/js/core/elem/elem.js +38 -12
- data/js/datetime/timesheet/timesheet.js +141 -32
- data/js/datetime/timesheet_item/timesheet_item.js +82 -22
- data/js/foundation/application/application.js +10 -4
- data/js/foundation/control/control.js +5 -3
- data/js/foundation/control/dyncontrol/dyncontrol.js +17 -3
- data/js/foundation/control/eventresponder/eventresponder.js +31 -2
- data/js/foundation/eventmanager/eventmanager.js +202 -74
- data/js/foundation/json_renderer/json_renderer.js +5 -2
- data/js/foundation/system/system.js +13 -11
- data/js/foundation/view/morphanimation/morphanimation.js +9 -5
- data/js/foundation/view/view.js +22 -10
- data/js/lists/propertylist/propertylist.js +5 -0
- data/js/menus/minimenu/minimenu.js +3 -8
- data/lib/conf/default.rb +0 -3
- data/lib/http/broker.rb +6 -5
- data/lib/http/rackup.rb +3 -3
- data/lib/http/response.rb +28 -2
- data/lib/session/msg.rb +30 -18
- data/lib/transporter/transporter.rb +4 -0
- data/lib/values/hvalue.rb +4 -134
- data/lib/values/valuemanager.rb +36 -22
- data/plugins/client_pkg/lib/client_pkg_serve.rb +195 -152
- data/plugins/main/main.rb +8 -10
- data/plugins/ticket/lib/common.rb +4 -4
- data/plugins/ticket/lib/favicon.rb +1 -1
- data/plugins/ticket/lib/rsrc.rb +1 -1
- data/plugins/ticket/lib/upload.rb +2 -2
- data/plugins/ticket/ticket.rb +3 -3
- data/setup/welcome/gui/welcome.yaml +1 -1
- metadata +10 -11
- data/lib/util/ruby19_fixes.rb +0 -18
@@ -21,195 +21,238 @@ module ClientPkgServe
|
|
21
21
|
return time.gmtime.strftime('%a, %d %b %Y %H:%M:%S %Z')
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
def build_busy_wait
|
25
|
+
while @build_busy
|
26
|
+
puts "-- build not finished, waiting.. --"
|
27
|
+
sleep 0.1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_headers( response )
|
27
32
|
# Sets the response date header to the current time:
|
28
33
|
response['Date'] = httime( Time.now )
|
29
34
|
|
30
35
|
# Controls caching with headers based on the configuration
|
31
36
|
if ::RSence.config[:cache_maximize]
|
32
37
|
response['Expires'] = httime(Time.now+::RSence.config[:cache_expire])
|
33
|
-
|
34
38
|
else
|
35
39
|
response['Cache-Control'] = 'no-cache'
|
36
40
|
end
|
37
|
-
|
38
|
-
|
41
|
+
end
|
42
|
+
|
43
|
+
def check_ua( request )
|
44
|
+
support_gzip = (request.header.has_key?('Accept-Encoding') and request.header['Accept-Encoding'].include?('gzip'))
|
39
45
|
support_gzip = false if ::RSence.config[:no_gzip]
|
40
|
-
if request.header.has_key?('
|
41
|
-
ua = request.header['
|
46
|
+
if request.header.has_key?('User-Agent')
|
47
|
+
ua = request.header['User-Agent']
|
42
48
|
is_symbian = ua.include?("SymbianOS")
|
43
49
|
is_safari = ((not is_symbian) and ua.include?("WebKit"))
|
44
50
|
is_msie = ((not ua.include?("Opera")) and ua.include?("MSIE"))
|
45
51
|
is_msie6 = ((not ua.include?("Opera")) and ua.include?("MSIE 6.0"))
|
46
52
|
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
request_path = request_uri.split( '/' )
|
52
|
-
|
53
|
-
## Requested type of client resource (js/themes)
|
54
|
-
req_type = request_path[2]
|
55
|
-
|
56
|
-
if not ['js','themes'].include? req_type
|
57
|
-
req_rev = req_type
|
58
|
-
req_type = request_path[3]
|
59
|
-
request_path.delete_at(2)
|
53
|
+
if is_safari
|
54
|
+
version = ua.split( 'WebKit/' )[1].split('.')[0].to_i
|
55
|
+
else
|
56
|
+
version = 0 # not used for others
|
60
57
|
end
|
58
|
+
return {
|
59
|
+
:symbian => is_symbian,
|
60
|
+
:safari => is_safari,
|
61
|
+
:msie => is_msie,
|
62
|
+
:msie6 => is_msie6,
|
63
|
+
:version => version
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
def support_gzip?( ua )
|
68
|
+
doesnt_support = ( ua[:msie6] or ua[:symbian] or (ua[:safari] and ua[:version] < 533) )
|
69
|
+
return ( not doesnt_support )
|
70
|
+
end
|
71
|
+
|
72
|
+
def serve_htc( request, response, request_path )
|
73
|
+
req_file = request_path[3]
|
61
74
|
|
62
|
-
|
63
|
-
|
64
|
-
|
75
|
+
# this file is a part of iefix, it injects calls to
|
76
|
+
# the ie rendering engine to override stupid behavior
|
77
|
+
# when changing element properties
|
78
|
+
if request_path.include?('ie_css_element.htc')
|
79
|
+
response.status = 200
|
80
|
+
response['Content-Type'] = 'text/x-component'
|
81
|
+
## Usually, we don't need it, because the client framework does calls when needed
|
82
|
+
response.body = %{<PUBLIC:COMPONENT lightWeight="true"></PUBLIC:COMPONENT>}
|
65
83
|
|
66
|
-
|
67
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
## Enable it to call iefix automatically whenever element properties are changed
|
76
|
-
#response.body = %{<PUBLIC:COMPONENT lightWeight="true">\r\n<script type="text/javascript">\r\ntry{element.attachEvent("onpropertychange",iefix.htcElementEntry);}catch(e){}\r\n</script>\r\n</PUBLIC:COMPONENT>}
|
84
|
+
## Enable it to call iefix automatically whenever element properties are changed
|
85
|
+
#response.body = %{<PUBLIC:COMPONENT lightWeight="true">\r\n<script type="text/javascript">\r\ntry{element.attachEvent("onpropertychange",iefix.htcElementEntry);}catch(e){}\r\n</script>\r\n</PUBLIC:COMPONENT>}
|
86
|
+
|
87
|
+
# this file is a part of iefix, it injects calls to
|
88
|
+
# the ie rendering engine to override stupid behavior
|
89
|
+
# when changing style properties
|
90
|
+
elsif request_path.include?('ie_css_style.htc')
|
91
|
+
response.status = 200
|
92
|
+
response['Content-Type'] = 'text/x-component'
|
77
93
|
|
78
|
-
|
79
|
-
|
80
|
-
# when changing style properties
|
81
|
-
elsif request_path.include?('ie_css_style.htc')
|
82
|
-
response.status = 200
|
83
|
-
response['Content-Type'] = 'text/x-component'
|
84
|
-
|
85
|
-
## Usually, we don't need it, because the client framework does calls when needed
|
86
|
-
response.body = %{<PUBLIC:COMPONENT lightWeight="true"></PUBLIC:COMPONENT>}
|
87
|
-
|
88
|
-
## Enable it to call iefix automatically whenever element properties are changed
|
89
|
-
#response.body = %{<PUBLIC:COMPONENT lightWeight="true">\r\n<script type="text/javascript">\r\ntry{element.attachEvent("onreadystatechange",iefix.htcStyleEntry);}catch(e){}\r\n</script>\r\n</PUBLIC:COMPONENT>}
|
94
|
+
## Usually, we don't need it, because the client framework does calls when needed
|
95
|
+
response.body = %{<PUBLIC:COMPONENT lightWeight="true"></PUBLIC:COMPONENT>}
|
90
96
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
97
|
+
## Enable it to call iefix automatically whenever element properties are changed
|
98
|
+
#response.body = %{<PUBLIC:COMPONENT lightWeight="true">\r\n<script type="text/javascript">\r\ntry{element.attachEvent("onreadystatechange",iefix.htcStyleEntry);}catch(e){}\r\n</script>\r\n</PUBLIC:COMPONENT>}
|
99
|
+
|
100
|
+
# Other htc requests are invalid
|
101
|
+
else
|
102
|
+
response.status = 503
|
103
|
+
response.body = '503 - Invalid Request'
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def serve_js( request, response, request_path, ua )
|
108
|
+
# the file-specific identifier ('core', 'basic' etc)
|
109
|
+
req_file = request_path[3][0..-4]
|
110
|
+
|
111
|
+
if not @client_cache.js_cache.has_key?( req_file )
|
112
|
+
response.status = 404
|
113
|
+
response.body = '/* 404 - Not Found */'
|
114
|
+
else
|
99
115
|
|
116
|
+
response.status = 200
|
117
|
+
response['Content-Type'] = 'text/javascript; charset=utf-8'
|
100
118
|
|
101
|
-
#
|
102
|
-
|
119
|
+
# these browsers have issues with gzipped js content
|
120
|
+
support_gzip = support_gzip?( ua )
|
103
121
|
|
104
|
-
if
|
105
|
-
response
|
106
|
-
response
|
122
|
+
if support_gzip
|
123
|
+
#response['Transfer-Encoding'] = 'chunked,gzip'
|
124
|
+
response['Last-Modified'] = @client_cache.last_modified
|
125
|
+
body = @client_cache.gz_cache[ req_file ]+"\r\n\r\n"
|
126
|
+
response['Content-Length'] = body.bytesize.to_s
|
127
|
+
response['Content-Encoding'] = 'gzip'
|
128
|
+
response.body = body
|
107
129
|
else
|
108
130
|
|
109
|
-
response
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
support_gzip = false if (is_safari or is_msie or is_symbian)
|
131
|
+
response['Last-Modified'] = @client_cache.last_modified
|
132
|
+
body = @client_cache.js_cache[ req_file ]
|
133
|
+
response['Content-Length'] = body.bytesize.to_s
|
134
|
+
response.body = body
|
114
135
|
|
115
|
-
if support_gzip
|
116
|
-
#response['Transfer-Encoding'] = 'chunked,gzip'
|
117
|
-
response['Last-Modified'] = @client_cache.last_modified
|
118
|
-
body = @client_cache.gz_cache[ req_file ]+"\r\n\r\n"
|
119
|
-
response['Content-Length'] = body.length.to_s
|
120
|
-
response['Content-Encoding'] = 'gzip'
|
121
|
-
response.body = body
|
122
|
-
else
|
123
|
-
|
124
|
-
response['Last-Modified'] = @client_cache.last_modified
|
125
|
-
body = @client_cache.js_cache[ req_file ]
|
126
|
-
response['Content-Length'] = body.length.to_s
|
127
|
-
response.body = body
|
128
|
-
|
129
|
-
end
|
130
136
|
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def serve_theme( request, response, request_path, ua )
|
141
|
+
# Get the name of the theme
|
142
|
+
theme_name = request_path[3]
|
131
143
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
144
|
+
# Get the theme resource type (html/css/gfx)
|
145
|
+
theme_part = request_path[4].to_sym
|
146
|
+
|
147
|
+
# Get the theme resource identifier
|
148
|
+
req_file = request_path[5]
|
149
|
+
|
150
|
+
# checks for theme name
|
151
|
+
has_theme = @client_cache.theme_cache.has_key?( theme_name )
|
152
|
+
|
153
|
+
# checks for theme part (css/html/gfx)
|
154
|
+
has_theme_part = ( has_theme and @client_cache.theme_cache[theme_name].has_key?( theme_part ) )
|
155
|
+
|
156
|
+
# checks for theme file
|
157
|
+
has_theme_file = ( has_theme_part and @client_cache.theme_cache[theme_name][theme_part].has_key?( req_file ) )
|
158
|
+
|
159
|
+
if not has_theme_file and req_file == 'common.css'
|
160
|
+
response.status = 200
|
161
|
+
response['Content-Type'] = 'text/css'
|
162
|
+
response.body = ''
|
163
|
+
end
|
164
|
+
|
165
|
+
if not has_theme
|
166
|
+
response.status = 404
|
167
|
+
response.body = '404 - Theme Not Found'
|
168
|
+
puts "Theme #{theme_name} not found, avail: #{@client_cache.theme_cache.keys.join(', ')}" if RSence.args[:verbose]
|
169
|
+
elsif not has_theme_part
|
170
|
+
response.status = 503
|
171
|
+
response.body = '503 - Invalid Theme Part Request'
|
172
|
+
elsif not has_theme_file
|
173
|
+
response.status = 404
|
174
|
+
response.body = '404 - Theme Resource Not Found'
|
175
|
+
puts "File not found, avail: #{@client_cache.theme_cache[theme_name][theme_part].keys.join(', ')}" if RSence.args[:verbose]
|
176
|
+
else
|
150
177
|
|
151
|
-
|
152
|
-
# checks for theme file
|
153
|
-
has_theme_file = has_theme_part and @client_cache.theme_cache[theme_name][theme_part].has_key?( req_file )
|
178
|
+
response.status = 200
|
154
179
|
|
180
|
+
file_ext = req_file.split('.')[-1]
|
181
|
+
response['Content-Type'] = {
|
182
|
+
'html' => 'text/html; charset=utf-8',
|
183
|
+
'css' => 'text/css; charset=utf-8',
|
184
|
+
'png' => 'image/png',
|
185
|
+
'jpg' => 'image/jpeg',
|
186
|
+
'gif' => 'image/gif',
|
187
|
+
'swf' => 'application/x-shockwave-flash'
|
188
|
+
}[file_ext]
|
155
189
|
|
156
|
-
if
|
157
|
-
|
158
|
-
|
159
|
-
|
190
|
+
if theme_part == :gfx
|
191
|
+
support_gzip = false
|
192
|
+
else
|
193
|
+
support_gzip = support_gzip?( ua )
|
160
194
|
end
|
161
195
|
|
162
|
-
if
|
163
|
-
response
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
response.
|
168
|
-
response.body = '503 - Invalid Theme Part Request'
|
169
|
-
elsif not has_theme_file
|
170
|
-
response.status = 404
|
171
|
-
response.body = '404 - Theme Resource Not Found'
|
172
|
-
puts "File not found, avail: #{@client_cache.theme_cache[theme_name][theme_part].keys.join(', ')}" if RSence.args[:verbose]
|
196
|
+
if support_gzip
|
197
|
+
response['Last-Modified'] = @client_cache.last_modified
|
198
|
+
body = @client_cache.theme_cache[theme_name][theme_part][ req_file+'.gz' ]
|
199
|
+
response['Content-Length'] = body.bytesize.to_s
|
200
|
+
response['Content-Encoding'] = 'gzip'
|
201
|
+
response.body = body
|
173
202
|
else
|
174
203
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
'css' => 'text/css; charset=utf-8',
|
181
|
-
'png' => 'image/png',
|
182
|
-
'jpg' => 'image/jpeg',
|
183
|
-
'gif' => 'image/gif',
|
184
|
-
'swf' => 'application/x-shockwave-flash'
|
185
|
-
}[file_ext]
|
186
|
-
|
187
|
-
support_gzip = false if theme_part == :gfx
|
188
|
-
support_gzip = false if (is_safari or is_msie or is_symbian)
|
189
|
-
|
190
|
-
if support_gzip
|
191
|
-
response['Last-Modified'] = @client_cache.last_modified
|
192
|
-
body = @client_cache.theme_cache[theme_name][theme_part][ req_file+'.gz' ]
|
193
|
-
response['Content-Length'] = body.length.to_s
|
194
|
-
response['Content-Encoding'] = 'gzip'
|
195
|
-
response.body = body
|
196
|
-
else
|
197
|
-
|
198
|
-
# Special IE6 condition to serve gifs instead of png's, because it works much better
|
199
|
-
# than using the ActiveX alpha filter hack
|
200
|
-
if is_msie6 and req_file[-4..-1] == '.png'
|
201
|
-
ie6_req_png2gif = req_file.gsub('.png','-ie6.gif')
|
202
|
-
req_file = ie6_req_png2gif if @client_cache.theme_cache[theme_name][theme_part].include?(ie6_req_png2gif)
|
203
|
-
end
|
204
|
-
|
205
|
-
response['Last-Modified'] = @client_cache.last_modified
|
206
|
-
body = @client_cache.theme_cache[theme_name][theme_part][ req_file ]
|
207
|
-
response['Content-Length'] = body.length.to_s
|
208
|
-
response.body = body
|
209
|
-
|
204
|
+
# Special IE6 condition to serve gifs instead of png's, because it works much better
|
205
|
+
# than using the ActiveX alpha filter hack
|
206
|
+
if ua[:msie6] and req_file[-4..-1] == '.png'
|
207
|
+
ie6_req_png2gif = req_file.gsub('.png','-ie6.gif')
|
208
|
+
req_file = ie6_req_png2gif if @client_cache.theme_cache[theme_name][theme_part].include?(ie6_req_png2gif)
|
210
209
|
end
|
211
|
-
end
|
212
210
|
|
211
|
+
response['Last-Modified'] = @client_cache.last_modified
|
212
|
+
body = @client_cache.theme_cache[theme_name][theme_part][ req_file ]
|
213
|
+
if body.nil?
|
214
|
+
warn "ClientPkgServe#get: empty body for #{request.path}"
|
215
|
+
body = ''
|
216
|
+
end
|
217
|
+
response['Content-Length'] = body.bytesize.to_s
|
218
|
+
response.body = body
|
219
|
+
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
## Responds to get-requests
|
225
|
+
def get( request, response, session )
|
226
|
+
|
227
|
+
build_busy_wait
|
228
|
+
|
229
|
+
ua = check_ua( request )
|
230
|
+
|
231
|
+
set_headers( response )
|
232
|
+
|
233
|
+
## Split path into an array for determining what to serve
|
234
|
+
request_uri = '/'+request.path.match( /^#{::RSence.config[:broker_urls][:h]}(.*)$/ )[1]
|
235
|
+
|
236
|
+
request_path = request_uri.split( '/' )
|
237
|
+
|
238
|
+
## Requested type of client resource (js/themes)
|
239
|
+
req_type = request_path[2]
|
240
|
+
|
241
|
+
unless ['js','themes'].include? req_type
|
242
|
+
req_rev = req_type
|
243
|
+
req_type = request_path[3]
|
244
|
+
request_path.delete_at(2)
|
245
|
+
end
|
246
|
+
|
247
|
+
## Special rules for the special browser
|
248
|
+
if request.path.end_with?('.htc')
|
249
|
+
serve_htc( request, response, request_path )
|
250
|
+
## Serve compiled client javascript component files:
|
251
|
+
elsif req_type == 'js'
|
252
|
+
serve_js( request, response, request_path, ua )
|
253
|
+
## Serve client theme files
|
254
|
+
elsif req_type == 'themes'
|
255
|
+
serve_theme( request, response, request_path, ua )
|
213
256
|
end
|
214
257
|
|
215
258
|
end
|
data/plugins/main/main.rb
CHANGED
@@ -154,11 +154,11 @@ class MainPlugin < Plugin
|
|
154
154
|
gzwriter = Zlib::GzipWriter.new( index_gzip, 9 )
|
155
155
|
gzwriter.write( index_html )
|
156
156
|
gzwriter.close
|
157
|
-
response['Content-Length'] = index_gzip.
|
157
|
+
response['Content-Length'] = index_gzip.bytesize.to_s
|
158
158
|
response['Content-Encoding'] = 'gzip'
|
159
159
|
response.body = index_gzip
|
160
160
|
else
|
161
|
-
response['Content-Length'] = index_html.
|
161
|
+
response['Content-Length'] = index_html.bytesize.to_s
|
162
162
|
response.body = index_html
|
163
163
|
end
|
164
164
|
end
|
@@ -229,14 +229,14 @@ class MainPlugin < Plugin
|
|
229
229
|
|
230
230
|
|
231
231
|
# New session initialization, called just once per session.
|
232
|
-
def init_ses(msg)
|
232
|
+
def init_ses( msg )
|
233
233
|
super
|
234
234
|
restore_ses( msg )
|
235
235
|
end
|
236
236
|
|
237
237
|
|
238
238
|
# Called once when a session is restored or cloned using the cookie's ses_key
|
239
|
-
def restore_ses(msg)
|
239
|
+
def restore_ses( msg )
|
240
240
|
super
|
241
241
|
## Resets session data to defaults
|
242
242
|
ses = get_ses( msg )
|
@@ -282,16 +282,15 @@ class MainPlugin < Plugin
|
|
282
282
|
## url_responder is bound in the client-space
|
283
283
|
## to tell the server its status by updating its value
|
284
284
|
location_href_id = ses[:location_href].val_id.to_json
|
285
|
-
msg.reply "COMM.Values.values[#{location_href_id}].bind(COMM.urlResponder);"
|
285
|
+
msg.reply "try{COMM.Values.values[#{location_href_id}].bind(COMM.urlResponder);}catch(e){console.log('urlResponder failed, reason:',e);}"
|
286
286
|
|
287
|
-
## This enables SesWatcher that changes :client_time every
|
288
|
-
## It makes the client to poll the server on regular intervals, when polling mode
|
289
|
-
## is disabled.
|
287
|
+
## This enables SesWatcher that changes :client_time every n seconds, which depends on the server_poll_interval configuration setting.
|
288
|
+
## It makes the client to poll the server on regular intervals, when polling mode is disabled.
|
290
289
|
# 5000ms = 5secs
|
291
290
|
|
292
291
|
client_time_id = ses[:client_time].val_id.to_json
|
293
292
|
poll_interval = ::RSence.config[:main_plugin][:server_poll_interval]
|
294
|
-
msg.reply "sesWatcher
|
293
|
+
msg.reply "try{window.sesWatcher=COMM.SessionWatcher.nu(#{poll_interval},#{client_time_id});}catch(e){console.log('sesWatcher failed, reason:',e);}"
|
295
294
|
|
296
295
|
end
|
297
296
|
|
@@ -392,7 +391,6 @@ class MainPlugin < Plugin
|
|
392
391
|
def idle(msg)
|
393
392
|
|
394
393
|
ses = get_ses( msg )
|
395
|
-
|
396
394
|
if ses[:boot] == 0
|
397
395
|
boot0( msg, ses )
|
398
396
|
elsif ses[:boot] == 1
|
@@ -156,7 +156,7 @@ module Common
|
|
156
156
|
(content_type, filename) = format
|
157
157
|
|
158
158
|
# content size for the header
|
159
|
-
content_size = content.
|
159
|
+
content_size = content.bytesize.to_s
|
160
160
|
|
161
161
|
storage_hash = @files
|
162
162
|
storage_arr = [content_type,content_size,content,msg.ses_id,filename]
|
@@ -270,7 +270,7 @@ module Common
|
|
270
270
|
}
|
271
271
|
|
272
272
|
# content size for the header
|
273
|
-
content_size = content.
|
273
|
+
content_size = content.bytesize.to_s
|
274
274
|
|
275
275
|
# content type for the header
|
276
276
|
content_type = @content_types[format]
|
@@ -335,12 +335,12 @@ module Common
|
|
335
335
|
end
|
336
336
|
if @raw_uris.include?(blobobj_id)
|
337
337
|
content_type = @raw_uris[blobobj_id].mime
|
338
|
-
content_size = @raw_uris[blobobj_id].
|
338
|
+
content_size = @raw_uris[blobobj_id].bytesize
|
339
339
|
content = @raw_uris[blobobj_id].data
|
340
340
|
elsif @blob_objs[:by_id].include?(blobobj_id)
|
341
341
|
(ses_id, blobobj) = @blob_objs[:by_id][blobobj_id]
|
342
342
|
content_type = blobobj.mime
|
343
|
-
content_size = blobobj.
|
343
|
+
content_size = blobobj.bytesize
|
344
344
|
content = blobobj.data
|
345
345
|
if req.header.has_key?('keep-alive') and req.header['keep-alive'].size > 0
|
346
346
|
keep_alive = req.header['keep-alive'][0].to_i
|
@@ -30,7 +30,7 @@ module Favicon
|
|
30
30
|
# Sets favicon. First parameter is favicon data and the second one is content type which defaults to false.
|
31
31
|
def set_favicon( ico_data, content_type=false )
|
32
32
|
@raw_uris['favicon.ico'][0] = content_type if content_type
|
33
|
-
@raw_uris['favicon.ico'][1] = ico_data.
|
33
|
+
@raw_uris['favicon.ico'][1] = ico_data.bytesize.to_s
|
34
34
|
@raw_uris['favicon.ico'][2] = ico_data
|
35
35
|
|
36
36
|
end
|
data/plugins/ticket/lib/rsrc.rb
CHANGED
@@ -176,8 +176,8 @@ create table rsence_uploads (
|
|
176
176
|
}
|
177
177
|
|
178
178
|
response.status = 200
|
179
|
-
response['
|
180
|
-
response['
|
179
|
+
response['Content-Type'] = 'text/html; charset=UTF-8'
|
180
|
+
response['Content-Length'] = response_body.bytesize.to_s
|
181
181
|
response.body = response_body
|
182
182
|
end
|
183
183
|
|
data/plugins/ticket/ticket.rb
CHANGED
@@ -110,8 +110,8 @@ class TicketPlugin < Plugin
|
|
110
110
|
puts "/U/iframe_html: #{uri.inspect}" if RSence.args[:verbose]
|
111
111
|
res.status = 200
|
112
112
|
http_body = '<html><head><title>Empty Iframe for Uploading</title></head><body></body></html>'
|
113
|
-
res['
|
114
|
-
res['
|
113
|
+
res['Content-Type'] = 'text/html; charset=UTF-8'
|
114
|
+
res['Content-Length'] = http_body.bytesize.to_s
|
115
115
|
res.body = http_body
|
116
116
|
end
|
117
117
|
end
|
@@ -158,7 +158,7 @@ class TicketPlugin < Plugin
|
|
158
158
|
|
159
159
|
# @return [Number] The size (in bytes) of the data
|
160
160
|
def size
|
161
|
-
return @data.
|
161
|
+
return @data.bytesize
|
162
162
|
end
|
163
163
|
|
164
164
|
# Implement, if you need to do cleanup before destructing
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
class: RSence.GUIApp
|
19
19
|
# Each class takes a number of options for its constructor.
|
20
20
|
options:
|
21
|
-
|
21
|
+
label: Welcome App
|
22
22
|
# The subviews use the class defined above as their parent component.
|
23
23
|
subviews:
|
24
24
|
# The sheet is used as the main visual container for the gui in this app.
|
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:
|
5
|
-
prerelease:
|
4
|
+
hash: 71
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 1
|
9
|
+
- 8
|
9
10
|
- 0
|
10
|
-
|
11
|
-
version: 2.1.0.21
|
11
|
+
version: 2.1.8.0
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Riassence Inc.
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2011-01-18 00:00:00 +02:00
|
20
20
|
default_executable: rsence-pre
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -27,14 +27,14 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - "="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
hash:
|
30
|
+
hash: 1925
|
31
31
|
segments:
|
32
|
-
-
|
33
|
-
version: "
|
32
|
+
- 963
|
33
|
+
version: "963"
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
36
|
description: |
|
37
|
-
RSence is a RIA framework designed for responsive GUI applications on the web.
|
37
|
+
RSence is a RIA ("HTML5" or "Ajax" if you like those terms better) framework designed for responsive GUI applications on the web.
|
38
38
|
|
39
39
|
RSence is a flexible and high-performance RIA framework aimed on building responsive, scalable and over-all as high-performance GUI Applications as possible with the chosen technologies.
|
40
40
|
|
@@ -77,7 +77,6 @@ files:
|
|
77
77
|
- lib/session/sessionstorage.rb
|
78
78
|
- lib/transporter/transporter.rb
|
79
79
|
- lib/util/gzstring.rb
|
80
|
-
- lib/util/ruby19_fixes.rb
|
81
80
|
- lib/values/hvalue.rb
|
82
81
|
- lib/values/valuemanager.rb
|
83
82
|
- setup/welcome/gui/welcome.yaml
|
@@ -408,7 +407,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
408
407
|
requirements: []
|
409
408
|
|
410
409
|
rubyforge_project: rsence-
|
411
|
-
rubygems_version: 1.
|
410
|
+
rubygems_version: 1.4.1
|
412
411
|
signing_key:
|
413
412
|
specification_version: 3
|
414
413
|
summary: Pre-Release 2.1 version of the RSence framework.
|
data/lib/util/ruby19_fixes.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
|
2
|
-
# NOTE: Ruby 1.9 isn't fully supported yet.
|
3
|
-
# There are some encoding handlers and some of the dependencies are not fully working yet.
|
4
|
-
# One should wait for Ruby 2.0 for production use anyway.
|
5
|
-
|
6
|
-
# Ruby 1.9 encoding defaults.
|
7
|
-
# This is clearly not enough but a good start for fixing the encoding madness.
|
8
|
-
Encoding.default_external = Encoding::BINARY
|
9
|
-
Encoding.default_internal = Encoding::BINARY
|
10
|
-
|
11
|
-
# Ruby 1.9 doesn't have String#each anymore.
|
12
|
-
# This is a backwards-compatible work-around.
|
13
|
-
class String
|
14
|
-
def each
|
15
|
-
self.split($/).each { |e| yield e }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|