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,333 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2008 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
|
+
require 'rubygems'
|
12
|
+
begin
|
13
|
+
require 'RMagick'
|
14
|
+
rescue LoadError
|
15
|
+
warn "Warning: RMagick not installed, ticketserve images will not be supported." if RSence.args[:verbose]
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'randgen'
|
19
|
+
|
20
|
+
# the library path of this plugin
|
21
|
+
lib_path = File.join( bundle_path, 'lib' )
|
22
|
+
|
23
|
+
# common functionality
|
24
|
+
require File.join(lib_path,'common')
|
25
|
+
|
26
|
+
# rsrc-related functionality
|
27
|
+
require File.join(lib_path,'rsrc')
|
28
|
+
|
29
|
+
# file-related functionality
|
30
|
+
require File.join(lib_path,'file')
|
31
|
+
|
32
|
+
# upload-related functionality
|
33
|
+
require File.join(lib_path,'upload')
|
34
|
+
|
35
|
+
# img-related functionality
|
36
|
+
require File.join(lib_path,'img')
|
37
|
+
|
38
|
+
# favicon-related functionality
|
39
|
+
require File.join(lib_path,'favicon')
|
40
|
+
|
41
|
+
# smart object wrapper
|
42
|
+
require File.join(lib_path,'objblob')
|
43
|
+
|
44
|
+
# TicketPlugin serves static and disposable data and images. It accepts Magick::Image objects too to render them only when really needed. Each serve-call returns an unique uri to pass to the client.
|
45
|
+
# It performs clean-ups based on session and request time-outs.
|
46
|
+
#
|
47
|
+
# It's available to other plugins as +@plugins.ticket+
|
48
|
+
class TicketPlugin < Plugin
|
49
|
+
|
50
|
+
# @private No user-addressable code inside
|
51
|
+
class TicketServe
|
52
|
+
include TicketService::Common
|
53
|
+
include TicketService::Rsrc
|
54
|
+
include TicketService::TicketFile
|
55
|
+
include TicketService::Upload
|
56
|
+
include TicketService::Img
|
57
|
+
include TicketService::Favicon
|
58
|
+
include TicketService::ObjBlob
|
59
|
+
end
|
60
|
+
|
61
|
+
# @private Returns the broker's url's. Used in {#match}
|
62
|
+
def broker_urls
|
63
|
+
::RSence.config[:broker_urls]
|
64
|
+
end
|
65
|
+
|
66
|
+
# @private Implements this part of the {RSence::Plugins::Servlet__ Servlet} API on a plugin to match the {#broker_urls}
|
67
|
+
def match( uri, request_type )
|
68
|
+
if request_type == :post
|
69
|
+
return true if uri[0..2] == broker_urls[:u]
|
70
|
+
elsif request_type == :get
|
71
|
+
if uri.match( /^#{broker_urls[:i]}/ )
|
72
|
+
return true
|
73
|
+
elsif uri.match( /^#{broker_urls[:d]}/ )
|
74
|
+
return true
|
75
|
+
elsif uri.match( /^#{broker_urls[:f]}/ )
|
76
|
+
return true
|
77
|
+
elsif uri.match( /^#{broker_urls[:b]}/ )
|
78
|
+
return true
|
79
|
+
elsif uri == broker_urls[:favicon]
|
80
|
+
return true
|
81
|
+
elsif uri == broker_urls[:uploader_iframe]
|
82
|
+
return true
|
83
|
+
end
|
84
|
+
end
|
85
|
+
return false
|
86
|
+
end
|
87
|
+
|
88
|
+
# @private Override with a lower score, if you want to match some parts in alternative ways.
|
89
|
+
def score; 200; end
|
90
|
+
|
91
|
+
# @private Implements this part of the {RSence::Plugins::Servlet__ Servlet} API on a plugin to respond to get requests matched by the {#match}
|
92
|
+
def get( req, res, ses )
|
93
|
+
uri = req.fullpath
|
94
|
+
if uri.match( /^#{broker_urls[:i]}/ )
|
95
|
+
puts "/i: #{uri.inspect}" if RSence.args[:verbose]
|
96
|
+
@ticketserve.get_ticket( req, res, :img )
|
97
|
+
elsif uri.match( /^#{broker_urls[:d]}/ )
|
98
|
+
puts "/d: #{uri.inspect}" if RSence.args[:verbose]
|
99
|
+
@ticketserve.get_ticket( req, res, :rsrc )
|
100
|
+
elsif uri.match( /^#{broker_urls[:f]}/ )
|
101
|
+
puts "/f: #{uri.inspect}" if RSence.args[:verbose]
|
102
|
+
@ticketserve.get_ticket( req, res, :file )
|
103
|
+
elsif uri.match( /^#{broker_urls[:b]}/ )
|
104
|
+
puts "/b: #{uri.inspect}" if RSence.args[:verbose]
|
105
|
+
@ticketserve.get_ticket( req, res, :blobobj )
|
106
|
+
elsif uri == broker_urls[:favicon]
|
107
|
+
@ticketserve.favicon( req, res )
|
108
|
+
elsif uri == broker_urls[:uploader_iframe]
|
109
|
+
puts "/U/iframe_html: #{uri.inspect}" if RSence.args[:verbose]
|
110
|
+
res.status = 200
|
111
|
+
http_body = '<html><head><title>Empty Iframe for Uploading</title></head><body></body></html>'
|
112
|
+
res['content-type'] = 'text/html; charset=UTF-8'
|
113
|
+
res['content-length'] = http_body.size.to_s
|
114
|
+
res.body = http_body
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# @private Handles the upload request
|
119
|
+
def post( req, res, ses )
|
120
|
+
uri = req.fullpath
|
121
|
+
if uri[0..2] == broker_urls[:u]
|
122
|
+
puts "/U: #{uri.inspect}" if RSence.args[:verbose]
|
123
|
+
@ticketserve.upload( req, res )
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# @private Initializes storage.
|
128
|
+
def init # :nodoc:
|
129
|
+
super
|
130
|
+
@ticketserve = TicketServe.new
|
131
|
+
end
|
132
|
+
|
133
|
+
# @private Shuts down TicketServe
|
134
|
+
def shutdown
|
135
|
+
@ticketserve.shutdown
|
136
|
+
end
|
137
|
+
|
138
|
+
# API for BlobObj's
|
139
|
+
class BlobObj
|
140
|
+
|
141
|
+
# @param [String] data The data to serve
|
142
|
+
# @param [String] mime The content-type of the data to serve
|
143
|
+
def initialize(data,mime)
|
144
|
+
@data = data
|
145
|
+
@mime = mime
|
146
|
+
end
|
147
|
+
|
148
|
+
# @return [String] The content-type served
|
149
|
+
def mime
|
150
|
+
return @mime
|
151
|
+
end
|
152
|
+
|
153
|
+
# @return [String] The data served
|
154
|
+
def data
|
155
|
+
return @data
|
156
|
+
end
|
157
|
+
|
158
|
+
# @return [Number] The size (in bytes) of the data
|
159
|
+
def size
|
160
|
+
return @data.size
|
161
|
+
end
|
162
|
+
|
163
|
+
# Implement, if you need to do cleanup before destructing
|
164
|
+
def close
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
# Serves an RMagick::Image object accessible by a disposable ticket URL.
|
170
|
+
#
|
171
|
+
# @param [Message] msg The message instance.
|
172
|
+
# @param [#to_blob] content Image data to serve
|
173
|
+
# @param [String] format To pass on as a +{ self.format = format }+ block of +content#to_blob+
|
174
|
+
# @param [Symbol] type The type of the object.
|
175
|
+
#
|
176
|
+
# @return [String] Disposable URL. Destroyed after being requested.
|
177
|
+
def serve( msg, content, format='PNG', type=:img )
|
178
|
+
@ticketserve.serve( msg, content, format, type )
|
179
|
+
end
|
180
|
+
|
181
|
+
# @private Removes data used by the session
|
182
|
+
def expire_ses( msg )
|
183
|
+
@ticketserve.expire_ses( msg.ses_id )
|
184
|
+
end
|
185
|
+
|
186
|
+
# Sets a custom favicon for RSence
|
187
|
+
#
|
188
|
+
# @param [String] ico_data Favicon-compatible image data in binary.
|
189
|
+
# @param [String] content_type The content-type of the favicon image data.
|
190
|
+
#
|
191
|
+
# @return [nil]
|
192
|
+
def set_favicon( ico_data, content_type=false )
|
193
|
+
@ticketserve.set_favicon( ico_data, content_type )
|
194
|
+
end
|
195
|
+
|
196
|
+
# Removes a downloadable file resource served from memory.
|
197
|
+
#
|
198
|
+
# Does not delete any files from the file system.
|
199
|
+
#
|
200
|
+
# @param [Message] msg The message instance.
|
201
|
+
# @param [String] file_id The file url returned by {#serve_file}
|
202
|
+
#
|
203
|
+
# @return [nil]
|
204
|
+
def del_file( msg, file_id )
|
205
|
+
@ticketserve.del_file( file_id, msg.ses_id )
|
206
|
+
end
|
207
|
+
|
208
|
+
# Serves a downloadable file resource to be served from memory using a generated url.
|
209
|
+
#
|
210
|
+
# @param [Message] msg The message instance.
|
211
|
+
# @param [String] content The file attachment file data in binary.
|
212
|
+
# @param [String] content_type The content-type of the file attachment.
|
213
|
+
# @param [String] filename The filename of the download (not the url)
|
214
|
+
#
|
215
|
+
# @return [String] Disposable URL. Destroyed after being requested.
|
216
|
+
def serve_file( msg, content='', content_type='text/plain', filename='' )
|
217
|
+
@ticketserve.serve_file( msg, content, content_type, filename )
|
218
|
+
end
|
219
|
+
|
220
|
+
# Removes a downloadable file resource served from memory.
|
221
|
+
#
|
222
|
+
# Does not delete any files from the file system.
|
223
|
+
#
|
224
|
+
# @param [Message] msg The message instance.
|
225
|
+
# @param [String] img_id The image url returned by {#serve_img}
|
226
|
+
#
|
227
|
+
# @return [nil]
|
228
|
+
def del_img( msg, img_id )
|
229
|
+
@ticketserve.del_img( img_id, msg.ses_id )
|
230
|
+
end
|
231
|
+
|
232
|
+
# Serves a downloadable file resource to be served from memory using a generated url.
|
233
|
+
#
|
234
|
+
# @param [Message] msg The message instance.
|
235
|
+
# @param [#to_blob] content Image data to serve
|
236
|
+
# @param [String] format To pass on as a +{ self.format = format }+ block of +content#to_blob+
|
237
|
+
# @param [Symbol] type The type of the object.
|
238
|
+
#
|
239
|
+
# @return [String] Disposable URL. Destroyed after being requested.
|
240
|
+
def serve_img( msg, content, format='PNG', type=:img )
|
241
|
+
@ticketserve.serve_img( msg, content, format, type )
|
242
|
+
end
|
243
|
+
|
244
|
+
# @return [BlobObj] to be used for custom objects served by {#serve_obj}
|
245
|
+
def proto_obj
|
246
|
+
return BlobObj
|
247
|
+
end
|
248
|
+
|
249
|
+
# Serves custom object using the {BlobObj} API (Binary Large Object)
|
250
|
+
#
|
251
|
+
# @param [Message] msg The message instance.
|
252
|
+
# @param [BlobObj] blob_obj The custom object to serve.
|
253
|
+
# @param [Boolean] no_expire When true, keeps in memory until {#del_obj} is called manually.
|
254
|
+
#
|
255
|
+
# @return [String] URL. Destroyed after being requested, unless +no_expire+ is +true+.
|
256
|
+
def serve_obj( msg, blob_obj, no_expire=false )
|
257
|
+
@ticketserve.serve_blobobj( msg, blob_obj, no_expire )
|
258
|
+
end
|
259
|
+
|
260
|
+
# Deletes a custom object served by {#serve_obj}
|
261
|
+
#
|
262
|
+
# @param [Message] msg The message instance.
|
263
|
+
# @param [String] ticket_id The object url returned by {#serve_img}
|
264
|
+
#
|
265
|
+
# @return [nil]
|
266
|
+
def del_obj( msg, ticket_id )
|
267
|
+
@ticketserve.del_blobobj( ticket_id, msg.ses_id )
|
268
|
+
end
|
269
|
+
|
270
|
+
# Removes static resource served by {#serve_rsrc}
|
271
|
+
#
|
272
|
+
# @param [String] rsrc_id The object url returned by {#serve_rsrc}
|
273
|
+
#
|
274
|
+
# @return [nil]
|
275
|
+
def del_rsrc( rsrc_id )
|
276
|
+
@ticketserve.del_rsrc( rsrc_id )
|
277
|
+
end
|
278
|
+
|
279
|
+
# Serves static resource as from raw binary data.
|
280
|
+
#
|
281
|
+
# @param [String] content Any binary data to serve
|
282
|
+
# @param [String] content_type The content-type to serve the +content+ as.
|
283
|
+
#
|
284
|
+
# @return [String] A static url. Use {#del_rsrc} manually to free the memory occupied by the content.
|
285
|
+
def serve_rsrc( content, content_type )
|
286
|
+
@ticketserve.serve_rsrc( content, content_type )
|
287
|
+
end
|
288
|
+
|
289
|
+
# Returns a list of uploads matching the ticket id.
|
290
|
+
#
|
291
|
+
# @param [String] ticket_id The key for the upload, returned by {#upload_key}
|
292
|
+
# @param [Boolean] with_data Return data also
|
293
|
+
#
|
294
|
+
# @return [Array] List of uploaded data matching the ticket_id
|
295
|
+
def get_uploads( ticket_id, with_data=false )
|
296
|
+
@ticketserve.get_uploads( ticket_id, with_data )
|
297
|
+
end
|
298
|
+
|
299
|
+
# Removes the uploaded data matching both ticket id as well as row id.
|
300
|
+
#
|
301
|
+
# @param [String] ticket_id The key for the upload, returned by {#upload_key}
|
302
|
+
# @param [Number] row_id The row id returned by {#get_uploads}
|
303
|
+
#
|
304
|
+
# @return [nil]
|
305
|
+
def del_upload( ticket_id, row_id )
|
306
|
+
@ticketserve.del_upload( ticket_id, row_id )
|
307
|
+
end
|
308
|
+
|
309
|
+
# Removes all uploaded data matching the ticket id
|
310
|
+
#
|
311
|
+
# @param [Message] msg The message instance.
|
312
|
+
# @param [String] ticket_id The key for the upload, returned by {#upload_key}
|
313
|
+
#
|
314
|
+
# @return [nil]
|
315
|
+
def del_uploads( msg, ticket_id )
|
316
|
+
@ticketserve.del_uploads( ticket_id, msg.ses_id )
|
317
|
+
end
|
318
|
+
|
319
|
+
# Allocates an upload slot and returns the ticket id to use for {#get_uploads}, {#del_upload} and {#del_uploads}
|
320
|
+
#
|
321
|
+
# @param [Message] msg The message instance.
|
322
|
+
# @param [String] value_key The key for the value associated with the upload. See {RSence::HValue#value_id}
|
323
|
+
# @param [Number] max_size The maximum size allowed to upload.
|
324
|
+
# @param [RegExp] mime_allow A regular expression to match what types of data are allowed to be uploaded
|
325
|
+
# @param [Boolean] allow_multi When false, allows uploading only once per key.
|
326
|
+
#
|
327
|
+
# @return [String] The ticket id. Use for the {RSence::HValue HValue} used with the client HUploader component. Also use with {#get_uploads}, {#del_upload} and {#del_uploads}
|
328
|
+
def upload_key( msg, value_key, max_size=1000000, mime_allow=/(.*?)\/(.*?)/, allow_multi=true )
|
329
|
+
@ticketserve.upload_key( msg, value_key, max_size, mime_allow, allow_multi )
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# RSence user interfaces can be defined as YAML files.
|
2
|
+
# The structure is converted to JSON for the client and "special" variables are processed by the server.
|
3
|
+
# The server tries to find a match in its gui_params for all values that begin with a colon (they are parsed as symbols on ruby).
|
4
|
+
|
5
|
+
# Read more about YAML on http://yaml.org/
|
6
|
+
|
7
|
+
# GUITree is used as the type identifier for user interface definition structures.
|
8
|
+
type: GUITree
|
9
|
+
# The version defines what version of the structure is used. New features are added constantly, each incrementing the version by 0.1
|
10
|
+
version: 0.6
|
11
|
+
|
12
|
+
# List of javascript packages the user interface needs. These are automatically loaded once per session.
|
13
|
+
dependencies:
|
14
|
+
- default_theme # The default_theme package contains all the theme resources needed when using the default theme.
|
15
|
+
- controls # The controls package contains the basic set of widget components.
|
16
|
+
|
17
|
+
# The root level class for user interfaces must be an instance of HApplication (RSence.GUIApp is extended from the HApplication class).
|
18
|
+
class: RSence.GUIApp
|
19
|
+
# Each class takes a number of options for its constructor.
|
20
|
+
options:
|
21
|
+
title: Welcome App
|
22
|
+
# The subviews use the class defined above as their parent component.
|
23
|
+
subviews:
|
24
|
+
# The sheet is used as the main visual container for the gui in this app.
|
25
|
+
# HSheet is an component that dims the background and shows a dialog sheet while its value is 0.
|
26
|
+
- class: HSheet
|
27
|
+
rect: [ 0, 0, 600, 500 ] # For HSheet, the rect defines the inner dialog size (it's always centered).
|
28
|
+
bind: :values.close # Values are bound to their component responders using the bind keyword.
|
29
|
+
extend: # The extend keyword takes a dictionary of properties to extend the class with.
|
30
|
+
# Extending refreshValue with a javascript function that terminates its application,
|
31
|
+
# including all the subviews. It's triggered when the value becomes 1, when the Close button is clicked.
|
32
|
+
refreshValue: |
|
33
|
+
function(){
|
34
|
+
this.base();
|
35
|
+
if ( this.value==1 ) {
|
36
|
+
this.app.die();
|
37
|
+
}
|
38
|
+
}
|
39
|
+
# Subviews of the HSheet, nested visual-logical structure.
|
40
|
+
subviews:
|
41
|
+
# A button in the lower right corner of the HSheet that triggers destruction of this GUITree (see the extension of HSheet above)
|
42
|
+
- class: HClickButton
|
43
|
+
rect: [ null, null, 60, 24, 8, 8 ]
|
44
|
+
bind: :values.close
|
45
|
+
options:
|
46
|
+
label: Close
|
47
|
+
# A checkbox in the lower right corner of the HSheet that triggers an server action to disable the whole plugin when combined with the close button's value.
|
48
|
+
- class: HCheckbox
|
49
|
+
rect: [ null, null, 130, 24, 74, 8 ]
|
50
|
+
bind: :values.dont_show_again
|
51
|
+
options:
|
52
|
+
label: Don't show again
|
53
|
+
# The HScrollView contains a number of subviews that are inside its scrollbars (if the inner content area is bigger than the outer dimensions of HScrollView itself).
|
54
|
+
- class: HScrollView
|
55
|
+
rect: [ 0, 0, 550, 300, 0, 42 ] # This rectangle stretches the component to contain all of the parent's space except the bottom-most 42 pixels.
|
56
|
+
options:
|
57
|
+
scrollX: false # Disables horizontal scroll bars.
|
58
|
+
scrollY: auto # Makes vertical scroll bars appear automatically when needed.
|
59
|
+
style: # Custom styling using style properties. There are several ways to display nested arrays. This is one:
|
60
|
+
- [ 'background-color', 'white' ]
|
61
|
+
- [ 'border-bottom', '1px solid black' ]
|
62
|
+
# Subviews of the HScrollView; items inside are displayed inside the scrollbars.
|
63
|
+
subviews:
|
64
|
+
# The RSence logo image:
|
65
|
+
- class: HImageView
|
66
|
+
rect: [ 18, 10, 559, 110 ]
|
67
|
+
options:
|
68
|
+
# Images use the value as the URL of the image.
|
69
|
+
value: http://rsence.org/rsence_org_logo.gif
|
70
|
+
# A plain view containing a hyperlink, positioned in the right bottom corner of the logo image.
|
71
|
+
- class: HView
|
72
|
+
rect: [ null, 95, 310, 25, 35, null ]
|
73
|
+
options:
|
74
|
+
html: |
|
75
|
+
<i style="font-family:Helvetica,Arial,sans-serif;font-size:16px;">
|
76
|
+
<a style="color:#28c;font-weight:bold" href="http://rsence.org/">http://www.rsence.org/</a>
|
77
|
+
</i>
|
78
|
+
style: # Another way to define nested arrays for the style:
|
79
|
+
- - text-align
|
80
|
+
- right
|
81
|
+
# The HInlineView is a simple HTML container, designed to contain "flowing layout" html.
|
82
|
+
- class: HInlineView
|
83
|
+
rect: [ 0, 0, null, null, 0, 0 ]
|
84
|
+
options:
|
85
|
+
html: :text.welcome # See the gui_params method of welcome.rb to understand how the contents of the text/welcome.html files is linked like this.
|
86
|
+
style:
|
87
|
+
- - font-family
|
88
|
+
- 'Helvetica, Arial, sans-serif'
|
89
|
+
- - font-size
|
90
|
+
- 16px
|
91
|
+
- - line-height
|
92
|
+
- 20px
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
# The human-readable product name of the package
|
3
|
+
title: Welcome message
|
4
|
+
|
5
|
+
# The human-readable version of the package
|
6
|
+
version: 1.0.1
|
7
|
+
|
8
|
+
# A brief description of the package (rdoc formatting supported)
|
9
|
+
description: |
|
10
|
+
This is a simple welcome message plugin. It's installed in new project
|
11
|
+
environments, when the rsence initenv in executed.
|
12
|
+
You may safely remove this plugin bundle.
|
13
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<!-- This data is included in the gui/welcome.yaml via the gui_params method in the welcome.rb file. -->
|
2
|
+
<div style="margin-left:40px;margin-top:140px;margin-right:20px">
|
3
|
+
<h1>Congratulations!</h1>
|
4
|
+
<p>This message is served to you by RSence running in your new environment.</p>
|
5
|
+
<p>The next time you create an RSence environment, use the <code>--blank</code> option of the <code>rsence initenv</code> command to avoid this message.</p>
|
6
|
+
<p>Use the <code>rsence help</code> command to learn more about the <code>rsence</code> command-line tool and its various commands and options.</p>
|
7
|
+
<p>You may want to install or write some software to run in your new RSence environment next.</p>
|
8
|
+
<p>Go to <a href="http://rsence.org/">rsence.org</a> to learn more about RSence.</p>
|
9
|
+
</span>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# Value for the checkbox. When true combined with 1 of the close value, disables the plugin. See welcome.rb
|
2
|
+
:dont_show_again:
|
3
|
+
:value: false
|
4
|
+
|
5
|
+
# Value for the close button.
|
6
|
+
:close:
|
7
|
+
:value: 0
|
8
|
+
:responders: # See the 'close_button' method of welcome.rb to see what a responder is.
|
9
|
+
- :method: close_button
|
@@ -0,0 +1,54 @@
|
|
1
|
+
## RSence
|
2
|
+
# Copyright 2010 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
|
+
# RSence 'Welcome' plugin.
|
11
|
+
# An instance of a class extended from GUIPlugin includes basic functionality
|
12
|
+
# to initialize their user interface from YAML files without extra code.
|
13
|
+
class WelcomePlugin < GUIPlugin
|
14
|
+
|
15
|
+
def gui_params( msg )
|
16
|
+
params = super
|
17
|
+
params[:text] = {
|
18
|
+
:welcome => file_read('text/welcome.html')
|
19
|
+
}
|
20
|
+
return params
|
21
|
+
end
|
22
|
+
|
23
|
+
# Responder for the value defined as `:close` in values.yaml
|
24
|
+
# A responder is called whenever its value is changed on the client.
|
25
|
+
def close_button( msg, value )
|
26
|
+
|
27
|
+
# Gets the value of the checkbox
|
28
|
+
dont_show_again = get_ses(msg)[:dont_show_again]
|
29
|
+
|
30
|
+
# If both the checkbox is checked (true) and the button clicked,
|
31
|
+
# calls the disable_self method defined below.
|
32
|
+
if (value.data == 1) and (dont_show_again.data == true)
|
33
|
+
disable_self
|
34
|
+
end
|
35
|
+
|
36
|
+
# For most uses of HClickButton combined with a value, resetting the data
|
37
|
+
# to 0 (to make the button clickable again) is done like this:
|
38
|
+
# value.set( msg, 0 )
|
39
|
+
|
40
|
+
# Responders should always return true, until more specific return
|
41
|
+
# values are defined in a future version of RSence.
|
42
|
+
# Returning false causes the responder to be called on every request
|
43
|
+
# the client makes until the responder returns true.
|
44
|
+
return true
|
45
|
+
end
|
46
|
+
|
47
|
+
# Called by close_button, when the checkbox is checked (true) and the Close-button is clicked (1).
|
48
|
+
def disable_self
|
49
|
+
file_write( 'disabled', 'This plugin is disabled. Remove this file to re-enable.' )
|
50
|
+
@plugins.unload_bundle( @name )
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|