rsence-pre 2.1.0.1.pre

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.
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
+