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.
- data/.yardopts +10 -0
- data/INSTALL.rdoc +330 -0
- data/LICENSE.txt +622 -0
- data/README.rdoc +98 -0
- data/VERSION +1 -0
- data/bin/rsence +25 -0
- data/bin/rsence-pre +25 -0
- data/conf/default_conf.yaml +346 -0
- data/conf/default_strings.yaml +76 -0
- data/conf/rsence_command_strings.yaml +444 -0
- data/docs/ExampleGuiPlugin.rdoc +193 -0
- data/docs/JavascriptBundles.rdoc +0 -0
- data/docs/PluginBundleInfo.rdoc +173 -0
- data/docs/PluginBundles.rdoc +96 -0
- data/docs/Values.rdoc +163 -0
- data/js/comm/autosync/autosync.js +17 -0
- data/js/comm/autosync/js.inc +0 -0
- data/js/comm/comm.js +203 -0
- data/js/comm/js.inc +0 -0
- data/js/comm/jsloader/js.inc +0 -0
- data/js/comm/jsloader/jsloader.js +112 -0
- data/js/comm/queue/js.inc +0 -0
- data/js/comm/queue/queue.js +184 -0
- data/js/comm/session/js.inc +0 -0
- data/js/comm/session/session.js +52 -0
- data/js/comm/sessionwatcher/js.inc +0 -0
- data/js/comm/sessionwatcher/sessionwatcher.js +44 -0
- data/js/comm/transporter/js.inc +0 -0
- data/js/comm/transporter/transporter.js +261 -0
- data/js/comm/urlresponder/js.inc +0 -0
- data/js/comm/urlresponder/urlresponder.js +149 -0
- data/js/comm/values/js.inc +0 -0
- data/js/comm/values/values.js +433 -0
- data/js/controls/button/button.js +72 -0
- data/js/controls/button/js.inc +0 -0
- data/js/controls/button/themes/bright/button.css +89 -0
- data/js/controls/button/themes/bright/button.html +7 -0
- data/js/controls/button/themes/bright/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/bright/button_parts1.png +0 -0
- data/js/controls/button/themes/default/button.css +89 -0
- data/js/controls/button/themes/default/button.html +7 -0
- data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
- data/js/controls/button/themes/default/button_parts1.png +0 -0
- data/js/controls/checkbox/checkbox.js +49 -0
- data/js/controls/checkbox/js.inc +0 -0
- data/js/controls/checkbox/themes/default/checkbox.css +69 -0
- data/js/controls/checkbox/themes/default/checkbox.html +5 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
- data/js/controls/checkbox/themes/default/checkbox_parts1.png +0 -0
- data/js/controls/dialogs/alert_sheet/alert_sheet.js +63 -0
- data/js/controls/dialogs/alert_sheet/js.inc +0 -0
- data/js/controls/dialogs/confirm_sheet/confirm_sheet.js +37 -0
- data/js/controls/dialogs/confirm_sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/js.inc +0 -0
- data/js/controls/dialogs/sheet/sheet.js +84 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.css +64 -0
- data/js/controls/dialogs/sheet/themes/default/sheet.html +14 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_bg.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_dim.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts1.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_parts2.png +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
- data/js/controls/dialogs/sheet/themes/default/sheet_warning.png +0 -0
- data/js/controls/imageview/imageview.js +109 -0
- data/js/controls/imageview/js.inc +0 -0
- data/js/controls/imageview/themes/default/blank.gif +0 -0
- data/js/controls/passwordcontrol/js.inc +0 -0
- data/js/controls/passwordcontrol/passwordcontrol.js +23 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.css +0 -0
- data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +18 -0
- data/js/controls/progress/progressbar/js.inc +0 -0
- data/js/controls/progress/progressbar/progressbar.js +40 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.css +16 -0
- data/js/controls/progress/progressbar/themes/default/progressbar.html +2 -0
- data/js/controls/progress/progressindicator/js.inc +0 -0
- data/js/controls/progress/progressindicator/progressindicator.js +44 -0
- data/js/controls/radiobutton/js.inc +0 -0
- data/js/controls/radiobutton/radiobutton.js +43 -0
- data/js/controls/radiobutton/themes/default/radiobutton.css +69 -0
- data/js/controls/radiobutton/themes/default/radiobutton.html +5 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
- data/js/controls/radiobutton/themes/default/radiobutton_parts1.png +0 -0
- data/js/controls/sliders/slider/js.inc +0 -0
- data/js/controls/sliders/slider/slider.js +357 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/hslider_tracks.png +0 -0
- data/js/controls/sliders/slider/themes/default/slider.css +108 -0
- data/js/controls/sliders/slider/themes/default/slider.html +5 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
- data/js/controls/sliders/slider/themes/default/slider_thumbs.png +0 -0
- data/js/controls/sliders/vslider/js.inc +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider.css +52 -0
- data/js/controls/sliders/vslider/themes/default/vslider.html +5 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
- data/js/controls/sliders/vslider/themes/default/vslider_tracks.png +0 -0
- data/js/controls/sliders/vslider/vslider.js +41 -0
- data/js/controls/stepper/js.inc +0 -0
- data/js/controls/stepper/stepper.js +213 -0
- data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
- data/js/controls/stepper/themes/default/stepper.css +14 -0
- data/js/controls/stepper/themes/default/stepper.html +2 -0
- data/js/controls/stepper/themes/default/stepper.png +0 -0
- data/js/controls/stringview/js.inc +0 -0
- data/js/controls/stringview/stringview.js +49 -0
- data/js/controls/stringview/themes/default/stringview.css +8 -0
- data/js/controls/stringview/themes/default/stringview.html +1 -0
- data/js/controls/tab/js.inc +0 -0
- data/js/controls/tab/tab.js +280 -0
- data/js/controls/tab/themes/bright/tab.css +76 -0
- data/js/controls/tab/themes/bright/tab.html +6 -0
- data/js/controls/tab/themes/bright/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/bright/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/bright/tab_parts1.png +0 -0
- data/js/controls/tab/themes/default/tab.css +77 -0
- data/js/controls/tab/themes/default/tab.html +6 -0
- data/js/controls/tab/themes/default/tab_bg_color-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_bg_color.png +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_border_pattern.png +0 -0
- data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
- data/js/controls/tab/themes/default/tab_parts1.png +0 -0
- data/js/controls/textarea/js.inc +0 -0
- data/js/controls/textarea/textarea.js +24 -0
- data/js/controls/textarea/themes/default/textarea.css +21 -0
- data/js/controls/textarea/themes/default/textarea.html +18 -0
- data/js/controls/textcontrol/js.inc +0 -0
- data/js/controls/textcontrol/textcontrol.js +374 -0
- data/js/controls/textcontrol/themes/default/textcontrol.css +107 -0
- data/js/controls/textcontrol/themes/default/textcontrol.html +18 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts1.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts2.png +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3-ie6.gif +0 -0
- data/js/controls/textcontrol/themes/default/textcontrol_parts3.png +0 -0
- data/js/controls/uploader/js.inc +0 -0
- data/js/controls/uploader/themes/default/upload_progress.gif +0 -0
- data/js/controls/uploader/themes/default/uploader.css +108 -0
- data/js/controls/uploader/themes/default/uploader.html +27 -0
- data/js/controls/uploader/uploader.js +154 -0
- data/js/controls/validatorview/js.inc +0 -0
- data/js/controls/validatorview/themes/default/validator-ie6.gif +0 -0
- data/js/controls/validatorview/themes/default/validator.png +0 -0
- data/js/controls/validatorview/themes/default/validatorview.css +0 -0
- data/js/controls/validatorview/themes/default/validatorview.html +0 -0
- data/js/controls/validatorview/validatorview.js +62 -0
- data/js/controls/window/js.inc +0 -0
- data/js/controls/window/themes/default/window.css +219 -0
- data/js/controls/window/themes/default/window.html +17 -0
- data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_active.png +0 -0
- data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_bg_inactive.png +0 -0
- data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_buttons.png +0 -0
- data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts1.png +0 -0
- data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
- data/js/controls/window/themes/default/window_parts2.png +0 -0
- data/js/controls/window/window.js +286 -0
- data/js/core/class/class.js +318 -0
- data/js/core/class/js.inc +0 -0
- data/js/core/elem/elem.js +1383 -0
- data/js/core/elem/js.inc +0 -0
- data/js/core/event/event.js +153 -0
- data/js/core/event/js.inc +0 -0
- data/js/core/iefix/ie_css_element.htc +5 -0
- data/js/core/iefix/ie_css_style.htc +5 -0
- data/js/core/iefix/iefix.js +359 -0
- data/js/core/iefix/js.inc +0 -0
- data/js/core/rsence_ns/js.inc +0 -0
- data/js/core/rsence_ns/rsence_ns.js +21 -0
- data/js/datetime/calendar/calendar.js +198 -0
- data/js/datetime/calendar/js.inc +0 -0
- data/js/datetime/calendar/themes/default/calendar.css +108 -0
- data/js/datetime/calendar/themes/default/calendar.html +9 -0
- data/js/datetime/calendar/themes/default/calendar_arrows-ie6.gif +0 -0
- data/js/datetime/calendar/themes/default/calendar_arrows.png +0 -0
- data/js/datetime/datetimevalue/datetimevalue.js +247 -0
- data/js/datetime/datetimevalue/js.inc +0 -0
- data/js/datetime/timesheet/js.inc +0 -0
- data/js/datetime/timesheet/themes/default/timesheet.css +30 -0
- data/js/datetime/timesheet/themes/default/timesheet.html +2 -0
- data/js/datetime/timesheet/timesheet.js +183 -0
- data/js/datetime/timesheet_item/js.inc +0 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.css +42 -0
- data/js/datetime/timesheet_item/themes/default/timesheet_item.html +8 -0
- data/js/datetime/timesheet_item/timesheet_item.js +248 -0
- data/js/datetime/timesheet_item_edit/js.inc +0 -0
- data/js/datetime/timesheet_item_edit/timesheet_item_edit.js +274 -0
- data/js/foundation/application/application.js +208 -0
- data/js/foundation/application/js.inc +0 -0
- data/js/foundation/control/control.js +339 -0
- data/js/foundation/control/controldefaults/controldefaults.js +56 -0
- data/js/foundation/control/controldefaults/js.inc +0 -0
- data/js/foundation/control/dummyvalue/dummyvalue.js +51 -0
- data/js/foundation/control/dummyvalue/js.inc +0 -0
- data/js/foundation/control/dyncontrol/dyncontrol.js +500 -0
- data/js/foundation/control/dyncontrol/js.inc +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.css +0 -0
- data/js/foundation/control/dyncontrol/themes/default/dyncontrol.html +0 -0
- data/js/foundation/control/eventresponder/eventresponder.js +750 -0
- data/js/foundation/control/eventresponder/js.inc +0 -0
- data/js/foundation/control/js.inc +0 -0
- data/js/foundation/control/valuematrix/js.inc +0 -0
- data/js/foundation/control/valuematrix/valuematrix.js +135 -0
- data/js/foundation/control/valueresponder/js.inc +0 -0
- data/js/foundation/control/valueresponder/valueresponder.js +79 -0
- data/js/foundation/eventmanager/eventmanager.js +991 -0
- data/js/foundation/eventmanager/js.inc +0 -0
- data/js/foundation/geom/point/js.inc +0 -0
- data/js/foundation/geom/point/point.js +202 -0
- data/js/foundation/geom/rect/js.inc +0 -0
- data/js/foundation/geom/rect/rect.js +651 -0
- data/js/foundation/json_renderer/js.inc +0 -0
- data/js/foundation/json_renderer/json_renderer.js +246 -0
- data/js/foundation/system/js.inc +0 -0
- data/js/foundation/system/system.js +381 -0
- data/js/foundation/thememanager/js.inc +0 -0
- data/js/foundation/thememanager/thememanager.js +393 -0
- data/js/foundation/value/js.inc +0 -0
- data/js/foundation/value/value.js +183 -0
- data/js/foundation/view/js.inc +0 -0
- data/js/foundation/view/markupview/js.inc +0 -0
- data/js/foundation/view/markupview/markupview.js +114 -0
- data/js/foundation/view/morphanimation/js.inc +0 -0
- data/js/foundation/view/morphanimation/morphanimation.js +237 -0
- data/js/foundation/view/view.js +1812 -0
- data/js/foundation/view/viewdefaults/js.inc +0 -0
- data/js/foundation/view/viewdefaults/viewdefaults.js +26 -0
- data/js/lists/checkboxlist/checkboxlist.js +171 -0
- data/js/lists/checkboxlist/js.inc +0 -0
- data/js/lists/listitems/js.inc +0 -0
- data/js/lists/listitems/listitems.js +88 -0
- data/js/lists/propertylist/js.inc +0 -0
- data/js/lists/propertylist/propertylist.js +326 -0
- data/js/lists/radiobuttonlist/js.inc +0 -0
- data/js/lists/radiobuttonlist/radiobuttonlist.js +116 -0
- data/js/util/reloadapp/js.inc +0 -0
- data/js/util/reloadapp/reloadapp.js +152 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning-ie6.gif +0 -0
- data/js/util/reloadapp/themes/default/reloadapp_warning.png +0 -0
- data/js/util/sha/js.inc +0 -0
- data/js/util/sha/sha.js +426 -0
- data/js/views/centerview/centerview.js +75 -0
- data/js/views/centerview/js.inc +0 -0
- data/js/views/inlineview/inlineview.js +15 -0
- data/js/views/inlineview/js.inc +0 -0
- data/js/views/scrollview/js.inc +0 -0
- data/js/views/scrollview/scrollview.js +40 -0
- data/lib/conf/argv.rb +850 -0
- data/lib/conf/default.rb +219 -0
- data/lib/daemon/daemon.rb +387 -0
- data/lib/daemon/sigcomm.rb +64 -0
- data/lib/http/broker.rb +150 -0
- data/lib/http/rackup.rb +91 -0
- data/lib/http/request.rb +66 -0
- data/lib/http/response.rb +65 -0
- data/lib/plugins/dependencies.rb +285 -0
- data/lib/plugins/gui_plugin.rb +160 -0
- data/lib/plugins/guiparser.rb +123 -0
- data/lib/plugins/plugin.rb +438 -0
- data/lib/plugins/plugin_base.rb +162 -0
- data/lib/plugins/plugin_plugins.rb +81 -0
- data/lib/plugins/plugin_sqlite_db.rb +98 -0
- data/lib/plugins/pluginmanager.rb +635 -0
- data/lib/plugins/plugins.rb +169 -0
- data/lib/plugins/servlet.rb +108 -0
- data/lib/rsence.rb +32 -0
- data/lib/session/msg.rb +327 -0
- data/lib/session/sessionmanager.rb +522 -0
- data/lib/session/sessionstorage.rb +340 -0
- data/lib/transporter/transporter.rb +263 -0
- data/lib/util/gzstring.rb +9 -0
- data/lib/util/ruby19_fixes.rb +18 -0
- data/lib/values/hvalue.rb +378 -0
- data/lib/values/valuemanager.rb +172 -0
- data/plugins/client_pkg/client_pkg.rb +157 -0
- data/plugins/client_pkg/info.yaml +25 -0
- data/plugins/client_pkg/lib/client_pkg_build.rb +561 -0
- data/plugins/client_pkg/lib/client_pkg_cache.rb +50 -0
- data/plugins/client_pkg/lib/client_pkg_serve.rb +218 -0
- data/plugins/index_html/img/loading.gif +0 -0
- data/plugins/index_html/img/riassence.gif +0 -0
- data/plugins/index_html/index_html.rb +120 -0
- data/plugins/index_html/info.yaml +18 -0
- data/plugins/index_html/tmpl/index.html +15 -0
- data/plugins/main/info.yaml +18 -0
- data/plugins/main/js/main.js +84 -0
- data/plugins/main/main.rb +255 -0
- data/plugins/main/values.yaml +8 -0
- data/plugins/ticket/info.yaml +21 -0
- data/plugins/ticket/lib/common.rb +392 -0
- data/plugins/ticket/lib/favicon.rb +39 -0
- data/plugins/ticket/lib/file.rb +58 -0
- data/plugins/ticket/lib/img.rb +50 -0
- data/plugins/ticket/lib/objblob.rb +66 -0
- data/plugins/ticket/lib/rsrc.rb +34 -0
- data/plugins/ticket/lib/upload.rb +236 -0
- data/plugins/ticket/ticket.rb +333 -0
- data/setup/welcome/gui/welcome.yaml +92 -0
- data/setup/welcome/info.yaml +13 -0
- data/setup/welcome/text/welcome.html +9 -0
- data/setup/welcome/values.yaml +9 -0
- data/setup/welcome/welcome.rb +54 -0
- 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
|
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
|
+
|