rsence-pre 2.1.0.1.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. data/.yardopts +10 -0
  2. data/INSTALL.rdoc +330 -0
  3. data/LICENSE.txt +622 -0
  4. data/README.rdoc +98 -0
  5. data/VERSION +1 -0
  6. data/bin/rsence +25 -0
  7. data/bin/rsence-pre +25 -0
  8. data/conf/default_conf.yaml +346 -0
  9. data/conf/default_strings.yaml +76 -0
  10. data/conf/rsence_command_strings.yaml +444 -0
  11. data/docs/ExampleGuiPlugin.rdoc +193 -0
  12. data/docs/JavascriptBundles.rdoc +0 -0
  13. data/docs/PluginBundleInfo.rdoc +173 -0
  14. data/docs/PluginBundles.rdoc +96 -0
  15. data/docs/Values.rdoc +163 -0
  16. data/js/comm/autosync/autosync.js +17 -0
  17. data/js/comm/autosync/js.inc +0 -0
  18. data/js/comm/comm.js +203 -0
  19. data/js/comm/js.inc +0 -0
  20. data/js/comm/jsloader/js.inc +0 -0
  21. data/js/comm/jsloader/jsloader.js +112 -0
  22. data/js/comm/queue/js.inc +0 -0
  23. data/js/comm/queue/queue.js +184 -0
  24. data/js/comm/session/js.inc +0 -0
  25. data/js/comm/session/session.js +52 -0
  26. data/js/comm/sessionwatcher/js.inc +0 -0
  27. data/js/comm/sessionwatcher/sessionwatcher.js +44 -0
  28. data/js/comm/transporter/js.inc +0 -0
  29. data/js/comm/transporter/transporter.js +261 -0
  30. data/js/comm/urlresponder/js.inc +0 -0
  31. data/js/comm/urlresponder/urlresponder.js +149 -0
  32. data/js/comm/values/js.inc +0 -0
  33. data/js/comm/values/values.js +433 -0
  34. data/js/controls/button/button.js +72 -0
  35. data/js/controls/button/js.inc +0 -0
  36. data/js/controls/button/themes/bright/button.css +89 -0
  37. data/js/controls/button/themes/bright/button.html +7 -0
  38. data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
  39. data/js/controls/button/themes/bright/button_parts1.png +0 -0
  40. data/js/controls/button/themes/default/button.css +89 -0
  41. data/js/controls/button/themes/default/button.html +7 -0
  42. data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
  43. data/js/controls/button/themes/default/button_parts1.png +0 -0
  44. data/js/controls/checkbox/checkbox.js +49 -0
  45. data/js/controls/checkbox/js.inc +0 -0
  46. data/js/controls/checkbox/themes/default/checkbox.css +69 -0
  47. data/js/controls/checkbox/themes/default/checkbox.html +5 -0
  48. data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
  49. data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
  50. data/js/controls/dialogs/alert_sheet/alert_sheet.js +63 -0
  51. data/js/controls/dialogs/alert_sheet/js.inc +0 -0
  52. data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +37 -0
  53. data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
  54. data/js/controls/dialogs/sheet/js.inc +0 -0
  55. data/js/controls/dialogs/sheet/sheet.js +84 -0
  56. data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
  57. data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
  58. data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
  59. data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
  60. data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
  61. data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
  62. data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
  63. data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
  64. data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
  65. data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
  66. data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
  67. data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
  68. data/js/controls/imageview/imageview.js +109 -0
  69. data/js/controls/imageview/js.inc +0 -0
  70. data/js/controls/imageview/themes/default/blank.gif +0 -0
  71. data/js/controls/passwordcontrol/js.inc +0 -0
  72. data/js/controls/passwordcontrol/passwordcontrol.js +23 -0
  73. data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
  74. data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
  75. data/js/controls/progress/progressbar/js.inc +0 -0
  76. data/js/controls/progress/progressbar/progressbar.js +40 -0
  77. data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
  78. data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
  79. data/js/controls/progress/progressindicator/js.inc +0 -0
  80. data/js/controls/progress/progressindicator/progressindicator.js +44 -0
  81. data/js/controls/radiobutton/js.inc +0 -0
  82. data/js/controls/radiobutton/radiobutton.js +43 -0
  83. data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
  84. data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
  85. data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
  86. data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
  87. data/js/controls/sliders/slider/js.inc +0 -0
  88. data/js/controls/sliders/slider/slider.js +357 -0
  89. data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
  90. data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
  91. data/js/controls/sliders/slider/themes/default/slider.css +108 -0
  92. data/js/controls/sliders/slider/themes/default/slider.html +5 -0
  93. data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
  94. data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
  95. data/js/controls/sliders/vslider/js.inc +0 -0
  96. data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
  97. data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
  98. data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
  99. data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
  100. data/js/controls/sliders/vslider/vslider.js +41 -0
  101. data/js/controls/stepper/js.inc +0 -0
  102. data/js/controls/stepper/stepper.js +213 -0
  103. data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
  104. data/js/controls/stepper/themes/default/stepper.css +14 -0
  105. data/js/controls/stepper/themes/default/stepper.html +2 -0
  106. data/js/controls/stepper/themes/default/stepper.png +0 -0
  107. data/js/controls/stringview/js.inc +0 -0
  108. data/js/controls/stringview/stringview.js +49 -0
  109. data/js/controls/stringview/themes/default/stringview.css +8 -0
  110. data/js/controls/stringview/themes/default/stringview.html +1 -0
  111. data/js/controls/tab/js.inc +0 -0
  112. data/js/controls/tab/tab.js +280 -0
  113. data/js/controls/tab/themes/bright/tab.css +76 -0
  114. data/js/controls/tab/themes/bright/tab.html +6 -0
  115. data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
  116. data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
  117. data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
  118. data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
  119. data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
  120. data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
  121. data/js/controls/tab/themes/default/tab.css +77 -0
  122. data/js/controls/tab/themes/default/tab.html +6 -0
  123. data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
  124. data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
  125. data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
  126. data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
  127. data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
  128. data/js/controls/tab/themes/default/tab_parts1.png +0 -0
  129. data/js/controls/textarea/js.inc +0 -0
  130. data/js/controls/textarea/textarea.js +24 -0
  131. data/js/controls/textarea/themes/default/textarea.css +21 -0
  132. data/js/controls/textarea/themes/default/textarea.html +18 -0
  133. data/js/controls/textcontrol/js.inc +0 -0
  134. data/js/controls/textcontrol/textcontrol.js +374 -0
  135. data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
  136. data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
  137. data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
  138. data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
  139. data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
  140. data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
  141. data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
  142. data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
  143. data/js/controls/uploader/js.inc +0 -0
  144. data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
  145. data/js/controls/uploader/themes/default/uploader.css +108 -0
  146. data/js/controls/uploader/themes/default/uploader.html +27 -0
  147. data/js/controls/uploader/uploader.js +154 -0
  148. data/js/controls/validatorview/js.inc +0 -0
  149. data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
  150. data/js/controls/validatorview/themes/default/validator.png +0 -0
  151. data/js/controls/validatorview/themes/default/validatorview.css +0 -0
  152. data/js/controls/validatorview/themes/default/validatorview.html +0 -0
  153. data/js/controls/validatorview/validatorview.js +62 -0
  154. data/js/controls/window/js.inc +0 -0
  155. data/js/controls/window/themes/default/window.css +219 -0
  156. data/js/controls/window/themes/default/window.html +17 -0
  157. data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
  158. data/js/controls/window/themes/default/window_bg_active.png +0 -0
  159. data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
  160. data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
  161. data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
  162. data/js/controls/window/themes/default/window_buttons.png +0 -0
  163. data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
  164. data/js/controls/window/themes/default/window_parts1.png +0 -0
  165. data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
  166. data/js/controls/window/themes/default/window_parts2.png +0 -0
  167. data/js/controls/window/window.js +286 -0
  168. data/js/core/class/class.js +318 -0
  169. data/js/core/class/js.inc +0 -0
  170. data/js/core/elem/elem.js +1383 -0
  171. data/js/core/elem/js.inc +0 -0
  172. data/js/core/event/event.js +153 -0
  173. data/js/core/event/js.inc +0 -0
  174. data/js/core/iefix/ie_css_element.htc +5 -0
  175. data/js/core/iefix/ie_css_style.htc +5 -0
  176. data/js/core/iefix/iefix.js +359 -0
  177. data/js/core/iefix/js.inc +0 -0
  178. data/js/core/rsence_ns/js.inc +0 -0
  179. data/js/core/rsence_ns/rsence_ns.js +21 -0
  180. data/js/datetime/calendar/calendar.js +198 -0
  181. data/js/datetime/calendar/js.inc +0 -0
  182. data/js/datetime/calendar/themes/default/calendar.css +108 -0
  183. data/js/datetime/calendar/themes/default/calendar.html +9 -0
  184. data/js/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
  185. data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
  186. data/js/datetime/datetimevalue/datetimevalue.js +247 -0
  187. data/js/datetime/datetimevalue/js.inc +0 -0
  188. data/js/datetime/timesheet/js.inc +0 -0
  189. data/js/datetime/timesheet/themes/default/timesheet.css +30 -0
  190. data/js/datetime/timesheet/themes/default/timesheet.html +2 -0
  191. data/js/datetime/timesheet/timesheet.js +183 -0
  192. data/js/datetime/timesheet_item/js.inc +0 -0
  193. data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
  194. data/js/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
  195. data/js/datetime/timesheet_item/timesheet_item.js +248 -0
  196. data/js/datetime/timesheet_item_edit/js.inc +0 -0
  197. data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
  198. data/js/foundation/application/application.js +208 -0
  199. data/js/foundation/application/js.inc +0 -0
  200. data/js/foundation/control/control.js +339 -0
  201. data/js/foundation/control/controldefaults/controldefaults.js +56 -0
  202. data/js/foundation/control/controldefaults/js.inc +0 -0
  203. data/js/foundation/control/dummyvalue/dummyvalue.js +51 -0
  204. data/js/foundation/control/dummyvalue/js.inc +0 -0
  205. data/js/foundation/control/dyncontrol/dyncontrol.js +500 -0
  206. data/js/foundation/control/dyncontrol/js.inc +0 -0
  207. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
  208. data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
  209. data/js/foundation/control/eventresponder/eventresponder.js +750 -0
  210. data/js/foundation/control/eventresponder/js.inc +0 -0
  211. data/js/foundation/control/js.inc +0 -0
  212. data/js/foundation/control/valuematrix/js.inc +0 -0
  213. data/js/foundation/control/valuematrix/valuematrix.js +135 -0
  214. data/js/foundation/control/valueresponder/js.inc +0 -0
  215. data/js/foundation/control/valueresponder/valueresponder.js +79 -0
  216. data/js/foundation/eventmanager/eventmanager.js +991 -0
  217. data/js/foundation/eventmanager/js.inc +0 -0
  218. data/js/foundation/geom/point/js.inc +0 -0
  219. data/js/foundation/geom/point/point.js +202 -0
  220. data/js/foundation/geom/rect/js.inc +0 -0
  221. data/js/foundation/geom/rect/rect.js +651 -0
  222. data/js/foundation/json_renderer/js.inc +0 -0
  223. data/js/foundation/json_renderer/json_renderer.js +246 -0
  224. data/js/foundation/system/js.inc +0 -0
  225. data/js/foundation/system/system.js +381 -0
  226. data/js/foundation/thememanager/js.inc +0 -0
  227. data/js/foundation/thememanager/thememanager.js +393 -0
  228. data/js/foundation/value/js.inc +0 -0
  229. data/js/foundation/value/value.js +183 -0
  230. data/js/foundation/view/js.inc +0 -0
  231. data/js/foundation/view/markupview/js.inc +0 -0
  232. data/js/foundation/view/markupview/markupview.js +114 -0
  233. data/js/foundation/view/morphanimation/js.inc +0 -0
  234. data/js/foundation/view/morphanimation/morphanimation.js +237 -0
  235. data/js/foundation/view/view.js +1812 -0
  236. data/js/foundation/view/viewdefaults/js.inc +0 -0
  237. data/js/foundation/view/viewdefaults/viewdefaults.js +26 -0
  238. data/js/lists/checkboxlist/checkboxlist.js +171 -0
  239. data/js/lists/checkboxlist/js.inc +0 -0
  240. data/js/lists/listitems/js.inc +0 -0
  241. data/js/lists/listitems/listitems.js +88 -0
  242. data/js/lists/propertylist/js.inc +0 -0
  243. data/js/lists/propertylist/propertylist.js +326 -0
  244. data/js/lists/radiobuttonlist/js.inc +0 -0
  245. data/js/lists/radiobuttonlist/radiobuttonlist.js +116 -0
  246. data/js/util/reloadapp/js.inc +0 -0
  247. data/js/util/reloadapp/reloadapp.js +152 -0
  248. data/js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
  249. data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
  250. data/js/util/sha/js.inc +0 -0
  251. data/js/util/sha/sha.js +426 -0
  252. data/js/views/centerview/centerview.js +75 -0
  253. data/js/views/centerview/js.inc +0 -0
  254. data/js/views/inlineview/inlineview.js +15 -0
  255. data/js/views/inlineview/js.inc +0 -0
  256. data/js/views/scrollview/js.inc +0 -0
  257. data/js/views/scrollview/scrollview.js +40 -0
  258. data/lib/conf/argv.rb +850 -0
  259. data/lib/conf/default.rb +219 -0
  260. data/lib/daemon/daemon.rb +387 -0
  261. data/lib/daemon/sigcomm.rb +64 -0
  262. data/lib/http/broker.rb +150 -0
  263. data/lib/http/rackup.rb +91 -0
  264. data/lib/http/request.rb +66 -0
  265. data/lib/http/response.rb +65 -0
  266. data/lib/plugins/dependencies.rb +285 -0
  267. data/lib/plugins/gui_plugin.rb +160 -0
  268. data/lib/plugins/guiparser.rb +123 -0
  269. data/lib/plugins/plugin.rb +438 -0
  270. data/lib/plugins/plugin_base.rb +162 -0
  271. data/lib/plugins/plugin_plugins.rb +81 -0
  272. data/lib/plugins/plugin_sqlite_db.rb +98 -0
  273. data/lib/plugins/pluginmanager.rb +635 -0
  274. data/lib/plugins/plugins.rb +169 -0
  275. data/lib/plugins/servlet.rb +108 -0
  276. data/lib/rsence.rb +32 -0
  277. data/lib/session/msg.rb +327 -0
  278. data/lib/session/sessionmanager.rb +522 -0
  279. data/lib/session/sessionstorage.rb +340 -0
  280. data/lib/transporter/transporter.rb +263 -0
  281. data/lib/util/gzstring.rb +9 -0
  282. data/lib/util/ruby19_fixes.rb +18 -0
  283. data/lib/values/hvalue.rb +378 -0
  284. data/lib/values/valuemanager.rb +172 -0
  285. data/plugins/client_pkg/client_pkg.rb +157 -0
  286. data/plugins/client_pkg/info.yaml +25 -0
  287. data/plugins/client_pkg/lib/client_pkg_build.rb +561 -0
  288. data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
  289. data/plugins/client_pkg/lib/client_pkg_serve.rb +218 -0
  290. data/plugins/index_html/img/loading.gif +0 -0
  291. data/plugins/index_html/img/riassence.gif +0 -0
  292. data/plugins/index_html/index_html.rb +120 -0
  293. data/plugins/index_html/info.yaml +18 -0
  294. data/plugins/index_html/tmpl/index.html +15 -0
  295. data/plugins/main/info.yaml +18 -0
  296. data/plugins/main/js/main.js +84 -0
  297. data/plugins/main/main.rb +255 -0
  298. data/plugins/main/values.yaml +8 -0
  299. data/plugins/ticket/info.yaml +21 -0
  300. data/plugins/ticket/lib/common.rb +392 -0
  301. data/plugins/ticket/lib/favicon.rb +39 -0
  302. data/plugins/ticket/lib/file.rb +58 -0
  303. data/plugins/ticket/lib/img.rb +50 -0
  304. data/plugins/ticket/lib/objblob.rb +66 -0
  305. data/plugins/ticket/lib/rsrc.rb +34 -0
  306. data/plugins/ticket/lib/upload.rb +236 -0
  307. data/plugins/ticket/ticket.rb +333 -0
  308. data/setup/welcome/gui/welcome.yaml +92 -0
  309. data/setup/welcome/info.yaml +13 -0
  310. data/setup/welcome/text/welcome.html +9 -0
  311. data/setup/welcome/values.yaml +9 -0
  312. data/setup/welcome/welcome.rb +54 -0
  313. metadata +407 -0
@@ -0,0 +1,218 @@
1
+ ## RSence
2
+ # Copyright 2007 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
+ module ClientPkgServe
11
+ def broker_urls
12
+ ::RSence.config[:broker_urls]
13
+ end
14
+
15
+ def match( uri, request_type )
16
+ uri.match( /^#{broker_urls[:h]}/ )
17
+ end
18
+
19
+ # Helper method to return the time formatted according to the HTTP RFC
20
+ def httime(time)
21
+ return time.gmtime.strftime('%a, %d %b %Y %H:%M:%S %Z')
22
+ end
23
+
24
+ ## Responds to get-requests
25
+ def get( request, response, session )
26
+
27
+ # Sets the response date header to the current time:
28
+ response['Date'] = httime( Time.now )
29
+
30
+ # Controls caching with headers based on the configuration
31
+ if ::RSence.config[:cache_maximize]
32
+ response['Expires'] = httime(Time.now+::RSence.config[:cache_expire])
33
+
34
+ else
35
+ response['Cache-Control'] = 'no-cache'
36
+ end
37
+
38
+ support_gzip = (request.header.has_key?('accept-encoding') and request.header['accept-encoding'].include?('gzip'))
39
+ support_gzip = false if ::RSence.config[:no_gzip]
40
+ if request.header.has_key?('user-agent')
41
+ ua = request.header['user-agent']
42
+ is_symbian = ua.include?("SymbianOS")
43
+ is_safari = ((not is_symbian) and ua.include?("WebKit"))
44
+ is_msie = ((not ua.include?("Opera")) and ua.include?("MSIE"))
45
+ is_msie6 = ((not ua.include?("Opera")) and ua.include?("MSIE 6.0"))
46
+ end
47
+
48
+ ## Split path into an array for determining what to serve
49
+ request_uri = '/'+request.path.match( /^#{::RSence.config[:broker_urls][:h]}(.*)$/ )[1]
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)
60
+ end
61
+
62
+ ## Special rules for the special browser
63
+ if request.path.include?('.htc')
64
+ req_file = request_path[3]
65
+
66
+ # this file is a part of iefix, it injects calls to
67
+ # the ie rendering engine to override stupid behavior
68
+ # when changing element properties
69
+ if request_path.include?('ie_css_element.htc')
70
+ response.status = 200
71
+ response['Content-Type'] = 'text/x-component'
72
+ ## Usually, we don't need it, because the client framework does calls when needed
73
+ response.body = %{<PUBLIC:COMPONENT lightWeight="true"></PUBLIC:COMPONENT>}
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>}
77
+
78
+ # this file is a part of iefix, it injects calls to
79
+ # the ie rendering engine to override stupid behavior
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>}
90
+
91
+ # Other htc requests are invalid
92
+ else
93
+ response.status = 503
94
+ response.body = '503 - Invalid Request'
95
+ end
96
+
97
+ ## Serve compiled client javascript component files:
98
+ elsif req_type == 'js'
99
+
100
+
101
+ # the file-specific identifier ('core', 'basic' etc)
102
+ req_file = request_path[3][0..-4]
103
+
104
+ if not @client_cache.js_cache.has_key?( req_file )
105
+ response.status = 404
106
+ response.body = '/* 404 - Not Found */'
107
+ else
108
+
109
+ response.status = 200
110
+ response.content_type = 'text/javascript; charset=utf-8'
111
+
112
+ # these browsers have issues with gzipped js content
113
+ support_gzip = false if (is_safari or is_msie or is_symbian)
114
+
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
+ end
131
+
132
+ ## Serve client theme files
133
+ elsif req_type == 'themes'
134
+
135
+ # Get the name of the theme
136
+ theme_name = request_path[3]
137
+
138
+ # Get the theme resource type (html/css/gfx)
139
+ theme_part = request_path[4].to_sym
140
+
141
+ # Get the theme resource identifier
142
+ req_file = request_path[5]
143
+
144
+ # checks for theme name
145
+ has_theme = @client_cache.theme_cache.has_key?( theme_name )
146
+
147
+ # checks for theme part (css/html/gfx)
148
+ has_theme_part = has_theme and @client_cache.theme_cache[theme_name].has_key?( theme_part )
149
+
150
+
151
+ # puts "has_theme_part: #{@client_cache.theme_cache[theme_name][theme_part.to_sym].inspect}"
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 )
154
+
155
+
156
+ if not has_theme_file and req_file == 'common.css'
157
+ response.status = 200
158
+ response.content_type = 'text/css'
159
+ response.body = ''
160
+ end
161
+
162
+ if not has_theme
163
+ response.status = 404
164
+ response.body = '404 - Theme Not Found'
165
+ puts "Theme #{theme_name} not found, avail: #{@client_cache.theme_cache.keys.join(', ')}" if RSence.args[:verbose]
166
+ elsif not has_theme_part
167
+ response.status = 503
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]
173
+ else
174
+
175
+ response.status = 200
176
+
177
+ file_ext = req_file.split('.')[-1]
178
+ response.content_type = {
179
+ 'html' => 'text/html; charset=utf-8',
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
+
210
+ end
211
+ end
212
+
213
+ end
214
+
215
+ end
216
+ end
217
+
218
+
Binary file
@@ -0,0 +1,120 @@
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
+
@@ -0,0 +1,18 @@
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
+
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html><head>
3
+ <!-- This page is served to you by RSence - http://rsence.org/ -->
4
+ <title>__DEFAULT_TITLE__</title>
5
+ <style type="text/css">body{margin:0;padding:0;background-color:#ddd;font-family:Arial,sans-serif;}</style>
6
+ __SCRIPT_DEPS__
7
+ <script src="__CLIENT_BASE__/js/core.js"></script>
8
+ <!--[if lt IE 7]><script src="__CLIENT_BASE__/js/iefix.js"></script><![endif]-->
9
+
10
+ <script>
11
+
12
+ /** Runtime configuration: **/
13
+ RSence.serverConf('__CLIENT_BASE__','__CLIENT_HELLO__');
14
+
15
+ </script></head><body id="body"><noscript>__NOSCRIPT__</noscript></body></html>
@@ -0,0 +1,18 @@
1
+
2
+ # The human-readable product name of the package
3
+ title: Main Plugin
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
+ The main plugin manages the flow of communication between client and server.
11
+
12
+ # System version requirement.
13
+ sys_version: '>= 2.0.0'
14
+
15
+ category: :system
16
+
17
+ depends_on: :index_html
18
+
@@ -0,0 +1,84 @@
1
+ // List of apps initialized utilizing GUITrees, by GUIPlugin name
2
+ RSence.apps = { };
3
+
4
+ // Subview that utilizes GUITrees
5
+ RSence.GUIView = HControl.extend({
6
+
7
+ });
8
+
9
+ // Application that handles GUITrees, populates its values dynamically
10
+ RSence.GUIApp = HApplication.extend({
11
+ constructor: function(_options){
12
+
13
+ var
14
+ _this = this,
15
+
16
+ // Application priority
17
+ _priority = _options.priority?_options.priority:100,
18
+
19
+ // Application label / title
20
+ _label = _options.label?_options.label:'Untitled Application',
21
+
22
+ // Application description (multiline)
23
+ _descr = _options.descr?_options.descr:'No Description',
24
+
25
+ // Allow multiple instances?
26
+ _allowMulti = _options.allowMulti?_options.allowMulti:false,
27
+
28
+ // The GUI Tree
29
+ _valueObj = _options.valueObj?_options.valueObj:false,
30
+
31
+ // Signal input (from server to client)
32
+ _sigInput = _options.sigInput?COMM.Values.values[_options.sigInput]:false,
33
+
34
+ // Signal output (from client to server)
35
+ _sigOutput = _options.sigOutput?COMM.Values.values[_options.sigOutput]:false,
36
+
37
+ // Icon image url.
38
+ // Minimum size is 16x16 and multiple sizes are stacked on top of each other,
39
+ // largest topmost, smaller versions aligned left below in size order.
40
+ // Image formats supported are: SVG (except for IE), PNG (all), GIF (all), JPG (all).
41
+ // Recommended formats are: SVG and PNG24 with transparency / translucency.
42
+ // Size has to be a factor of two; 16,32,64,128,256,512 are valid dimensions:
43
+ // 32x32 -> 32x32 single icon
44
+ // 32x48 -> 32x32 and 16x16
45
+ // 512x512 -> 512x512 single icon
46
+ // 512x768 -> 512x512, 256x256
47
+ // 512x640 -> 512x512, 128x128
48
+ // 512x896 -> 512x512, 256x256 and 128x128
49
+ // etc..
50
+ _iconUrl = _options.iconUrl?COMM.Values.values[_options.iconUrl]:false;
51
+
52
+ // Construct the application base:
53
+ _this.base( _priority, _label );
54
+
55
+ // Options combined from vars above
56
+ _this.options = HClass.extend(_options).extend({
57
+ label: _label,
58
+ descr: _descr,
59
+ allowMulti: _allowMulti,
60
+ sigInput: _sigInput,
61
+ sigOutput: _sigOutput,
62
+ icon: { url: _iconUrl, width: null, height: null },
63
+ pid: this.appId,
64
+ views: []
65
+ }).nu();
66
+
67
+ _this.valueObj = _valueObj;
68
+ _this.value = _valueObj.value;
69
+
70
+ // _this.app = _this;
71
+
72
+ //
73
+ // _this.renderer = COMM.JSONRenderer.extend({
74
+ //
75
+ // }).nu( _this.value, _this );
76
+ },
77
+
78
+ die: function(){
79
+ this.base();
80
+
81
+ }
82
+
83
+ });
84
+