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,246 @@
|
|
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
|
+
/*** Constructs nodes from JSON structures as GUI
|
11
|
+
** tree structures. Lowers the learning curve of GUI
|
12
|
+
** development, because Javascript knowledge is not
|
13
|
+
** required to define user interfaces.
|
14
|
+
** The main purpose is to ease the development of
|
15
|
+
** user interfaces by defining them as data on the
|
16
|
+
** server, converting the data to JSON GUI trees and
|
17
|
+
** letting the client handle the rest. The end result
|
18
|
+
** is the same as defining the structures in
|
19
|
+
** JavaScript code.
|
20
|
+
**
|
21
|
+
** This class is still in development, so expect more
|
22
|
+
** features and documentation as it matures.
|
23
|
+
***/
|
24
|
+
//var//RSence.Foundation
|
25
|
+
COMM.JSONRenderer = HClass.extend({
|
26
|
+
|
27
|
+
version: 0.6,
|
28
|
+
|
29
|
+
/** = Description
|
30
|
+
* Renders JSON structured data, see some of the demos for usage examples.
|
31
|
+
*
|
32
|
+
* = Parameters:
|
33
|
+
* +_data+: The data structure used for building.
|
34
|
+
* +_parent+: The parent view (or app) (Optional)
|
35
|
+
**/
|
36
|
+
constructor: function(_data, _parent){
|
37
|
+
if((_data['type'] === 'GUITree') && (this.version >= _data['version'])){
|
38
|
+
this.data = _data;
|
39
|
+
this.parent = _parent;
|
40
|
+
this.render();
|
41
|
+
}
|
42
|
+
else{
|
43
|
+
throw("JSONRenderer: Only GUITree version "+this.version+" or older data can be handled.");
|
44
|
+
}
|
45
|
+
},
|
46
|
+
render: function(){
|
47
|
+
this.scopes = [window];
|
48
|
+
this.scopeDepth = 0;
|
49
|
+
this.view = this.renderNode( this.data, this.parent );
|
50
|
+
},
|
51
|
+
defineInScope: function( _definition ){
|
52
|
+
var _isArr = (_definition instanceof Array),
|
53
|
+
_isObj = (_definition instanceof Object);
|
54
|
+
if( _isArr || !_isObj ){
|
55
|
+
console.log("JSONRenderer; definition must be an Object, got: '"+(typeof _definition)+"'. Definition: ",_definition);
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
var _extension = {},
|
59
|
+
_reserved = ['class','extend','implement'],
|
60
|
+
_className = _definition[_reserved[0]],
|
61
|
+
_extendName = _definition[_reserved[1]],
|
62
|
+
_implementName = _definition[_reserved[2]],
|
63
|
+
_extend = _extendName?this.findInScope(_extendName):false,
|
64
|
+
_implement = _implementName?this.findInScope(_implementName):false,
|
65
|
+
_scope = this.scopes[ this.scopeDepth ],
|
66
|
+
_key, _value;
|
67
|
+
if( _className === undefined ) {
|
68
|
+
console.log("JSONRenderer; class name missing in definition scope.");
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
if( !_extend ){
|
72
|
+
_extend = HClass;
|
73
|
+
}
|
74
|
+
for( _key in _definition ){
|
75
|
+
if( _reserved.indexOf( _key ) === -1 ){
|
76
|
+
_value = _definition[_key];
|
77
|
+
_extension[_key] = this.extEval( _value );
|
78
|
+
}
|
79
|
+
}
|
80
|
+
_scope[ _className ] = _extend.extend( _extension );
|
81
|
+
if( _implement ){
|
82
|
+
_scope[ _className ].implement( _implement );
|
83
|
+
}
|
84
|
+
},
|
85
|
+
undefineInScope: function( ){
|
86
|
+
|
87
|
+
},
|
88
|
+
findInScope: function( _className ){
|
89
|
+
if(_className === undefined){
|
90
|
+
return false;
|
91
|
+
}
|
92
|
+
if(_className.indexOf('.') !== -1){
|
93
|
+
var _splitClass = _className.split('.'),
|
94
|
+
j = 1,
|
95
|
+
_classPart = _splitClass[0],
|
96
|
+
_classFull = this.findInScope( _classPart );
|
97
|
+
if( !_classFull ){
|
98
|
+
return false;
|
99
|
+
}
|
100
|
+
for( ; j < _splitClass.length ; j++ ){
|
101
|
+
_classPart = _splitClass[j];
|
102
|
+
_classFull = _classFull[ _classPart ];
|
103
|
+
if( !_classFull ){
|
104
|
+
return false;
|
105
|
+
}
|
106
|
+
}
|
107
|
+
return _classFull;
|
108
|
+
}
|
109
|
+
var _class = false,
|
110
|
+
_scopes = this.scopes,
|
111
|
+
i = _scopes.length-1,
|
112
|
+
_scope;
|
113
|
+
for( ; i > -1 ; i-- ){
|
114
|
+
_scope = _scopes[i];
|
115
|
+
if( _scope[ _className ] !== undefined ){
|
116
|
+
return _scope[ _className ];
|
117
|
+
}
|
118
|
+
}
|
119
|
+
return _class;
|
120
|
+
},
|
121
|
+
extEval: function(_block){
|
122
|
+
if( _block.indexOf("function(") === 0 ){
|
123
|
+
eval( '_block = '+_block );
|
124
|
+
}
|
125
|
+
return _block;
|
126
|
+
},
|
127
|
+
renderNode: function( _dataNode, _parent ){
|
128
|
+
var // Currently only window-level classes are supported
|
129
|
+
_className = _dataNode['class'],
|
130
|
+
_class = this.findInScope( _className ),
|
131
|
+
|
132
|
+
// Currently only HView -derived classes are supported, so
|
133
|
+
// the rect is mandatory.
|
134
|
+
_rect = _dataNode['rect'],
|
135
|
+
_hasRect = (_rect !== undefined) && (_rect instanceof Array || typeof _rect === 'string'),
|
136
|
+
|
137
|
+
// Checks, if any sub-views are defined.
|
138
|
+
_hasSubviews = _dataNode['subviews'] !== undefined,
|
139
|
+
_subViews = _hasSubviews?_dataNode['subviews']:null,
|
140
|
+
|
141
|
+
// Checks, if any options are defined.
|
142
|
+
_hasOptions = _dataNode['options'] !== undefined,
|
143
|
+
_options = _hasOptions?_dataNode['options']:null,
|
144
|
+
|
145
|
+
// JS Extension block
|
146
|
+
_hasExtension = _dataNode['extend'] !== undefined,
|
147
|
+
_extension = _hasExtension?_dataNode['extend']:null,
|
148
|
+
|
149
|
+
// JS Extension block
|
150
|
+
_hasBind = _dataNode['bind'] !== undefined,
|
151
|
+
_bind = _hasBind?_dataNode['bind']:null,
|
152
|
+
|
153
|
+
// JS Definition block
|
154
|
+
_hasDefinition = _dataNode['define'] !== undefined,
|
155
|
+
_definitions = _hasDefinition?_dataNode['define']:null,
|
156
|
+
|
157
|
+
// The HView-derived class instance, instance is by default the parent
|
158
|
+
_instance = _parent,
|
159
|
+
|
160
|
+
i,
|
161
|
+
|
162
|
+
_subView;
|
163
|
+
this.scopeDepth ++;
|
164
|
+
this.scopes.push({});
|
165
|
+
try{
|
166
|
+
if(_hasDefinition){
|
167
|
+
if(_definitions instanceof Array){
|
168
|
+
for( i = 0; i < _definitions.length; i++ ){
|
169
|
+
this.defineInScope( _definitions[i] );
|
170
|
+
}
|
171
|
+
}
|
172
|
+
else {
|
173
|
+
console.log('renderNode definitions not Array, definitions:',_definitions);
|
174
|
+
}
|
175
|
+
}
|
176
|
+
if(_class){
|
177
|
+
if(_hasExtension){
|
178
|
+
var _extBlock = {},
|
179
|
+
_name,
|
180
|
+
_block;
|
181
|
+
for(_name in _extension){
|
182
|
+
_block = _extension[_name];
|
183
|
+
if( typeof _block === 'string' ){
|
184
|
+
try {
|
185
|
+
_block = this.extEval( _block );
|
186
|
+
}
|
187
|
+
catch(e){
|
188
|
+
console.log('renderNode ext eval error:',e,', name:',_name,', block:',_block);
|
189
|
+
}
|
190
|
+
}
|
191
|
+
_extBlock[_name] = _block;
|
192
|
+
}
|
193
|
+
_class = _class.extend( _extBlock );
|
194
|
+
}
|
195
|
+
if(_hasOptions){
|
196
|
+
if(_hasBind){
|
197
|
+
_options.valueObj = COMM.Values.values[_bind];
|
198
|
+
}
|
199
|
+
else{
|
200
|
+
if(_options['valueObjId'] !== undefined){
|
201
|
+
var _valueObjId = _options['valueObjId'];
|
202
|
+
_options['valueObj'] = COMM.Values.values[_options['valueObjId']];
|
203
|
+
}
|
204
|
+
}
|
205
|
+
}
|
206
|
+
// For HApplication -derived classes
|
207
|
+
if(!_hasRect && _hasOptions){
|
208
|
+
_instance = _class.nu(_options);
|
209
|
+
}
|
210
|
+
// For HView and HControl -derived classes
|
211
|
+
else if(_hasRect){
|
212
|
+
_instance = _class.nu(_rect,_parent,_options);
|
213
|
+
}
|
214
|
+
if(!_hasOptions){
|
215
|
+
if(_hasBind){
|
216
|
+
COMM.Values.values[_bind].bind(_instance);
|
217
|
+
}
|
218
|
+
}
|
219
|
+
}
|
220
|
+
else if(!(!_class && _hasSubviews)) {
|
221
|
+
console.log('renderNode warning; No such class: '+_className+', node: ',_dataNode);
|
222
|
+
}
|
223
|
+
}
|
224
|
+
catch(e){
|
225
|
+
console.log('renderNode error:',e,', rect:',_rect,', class:',_dataNode['class'],', options:', _options);
|
226
|
+
}
|
227
|
+
// Iterates recursively through all subviews, if specified.
|
228
|
+
if(_hasSubviews){
|
229
|
+
for( i = 0; i < _subViews.length; i++ ){
|
230
|
+
_subView = this.renderNode( _subViews[i], _instance );
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
this.scopes.pop();
|
235
|
+
this.scopeDepth --;
|
236
|
+
|
237
|
+
// Returns the main view (or subview when recursively called).
|
238
|
+
return _instance;
|
239
|
+
}
|
240
|
+
});
|
241
|
+
|
242
|
+
/** -- Global reference ++ **/
|
243
|
+
var//RSence.Foundation
|
244
|
+
JSONRenderer = COMM.JSONRenderer;
|
245
|
+
|
246
|
+
|
File without changes
|
@@ -0,0 +1,381 @@
|
|
1
|
+
/* RSence
|
2
|
+
* Copyright 2006 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
|
+
/*** = Description
|
11
|
+
** Main container of global operations on +HView+ and
|
12
|
+
** +HApplication+ -derived classes.
|
13
|
+
**
|
14
|
+
** HSystem is used to keep +HApplication+ and +HView+ instances
|
15
|
+
** globally managed. The managed classes themself calls +HSystem+ methods,
|
16
|
+
** so there is no real need to access +HSystem+ directly from user-level code.
|
17
|
+
**
|
18
|
+
***/
|
19
|
+
var//RSence.Foundation
|
20
|
+
HSystem = {
|
21
|
+
|
22
|
+
/** When the focus behaviour is 1, clicking on any subview brings
|
23
|
+
* the window to front, if attached to a HWindow instance.
|
24
|
+
* If the behaviour is 0, only direct clicks on the HWindow controls
|
25
|
+
* brings the window to front.
|
26
|
+
*
|
27
|
+
**/
|
28
|
+
windowFocusMode: 1,
|
29
|
+
|
30
|
+
/** Singleton class; has no constructor **/
|
31
|
+
// constructor: null,
|
32
|
+
|
33
|
+
/** An array of HApplication instances, index is the appId **/
|
34
|
+
apps: [],
|
35
|
+
|
36
|
+
/** An array (in the same order as apps): holds priority values **/
|
37
|
+
appPriorities: [],
|
38
|
+
|
39
|
+
/** An array (in the same order as apps): holds busy status **/
|
40
|
+
busyApps: [],
|
41
|
+
|
42
|
+
/** This array holds free app id:s **/
|
43
|
+
freeAppIds: [],
|
44
|
+
|
45
|
+
/** The default HSystem ticker interval. Unit is milliseconds. **/
|
46
|
+
defaultInterval: 10,
|
47
|
+
|
48
|
+
/** The default HApplication priority. Unit is "On the n:th tick: poll". **/
|
49
|
+
defaultPriority: 20,
|
50
|
+
|
51
|
+
/** The z-index of root-level +HView+ instances. All the array operations
|
52
|
+
* are done by the inner logic of +HApplication+ and +HView+ instances.
|
53
|
+
**/
|
54
|
+
viewsZOrder: [],
|
55
|
+
|
56
|
+
/** This is the internal "clock" counter. Gets updated on every tick. **/
|
57
|
+
ticks: 0,
|
58
|
+
|
59
|
+
/** Time in milliseconds for the timeout of a poll to finish before
|
60
|
+
* being classified as stuck and thus forcibly terminated.
|
61
|
+
**/
|
62
|
+
maxAppRunTime: 5000,
|
63
|
+
|
64
|
+
/** Calls applications, uses the prority as a prioritizer.
|
65
|
+
**/
|
66
|
+
scheduler: function(){
|
67
|
+
|
68
|
+
// Loop through all applications:
|
69
|
+
for( var _appId=0; _appId<this.apps.length; _appId++ ){
|
70
|
+
// Check, if the application exists:
|
71
|
+
if( this.apps[ _appId ] ){
|
72
|
+
// Check, if the application is busy:
|
73
|
+
if( !this.busyApps[ _appId ] ){
|
74
|
+
// Check, if the tick count matches the priority of the app:
|
75
|
+
if( (this.ticks % this.appPriorities[ _appId ]) === 0 ){
|
76
|
+
// Set the app busy, the app itself should "unbusy" itself, when the idle call is done.
|
77
|
+
// That happens in <HApplication._startIdle>
|
78
|
+
|
79
|
+
// If the app is not busy, then make a idle call:
|
80
|
+
if(HSystem.apps[_appId]){
|
81
|
+
HSystem.apps[_appId]._startIdle();
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
if(this._updateZIndexOfChildrenBuffer.length!==0){
|
89
|
+
this._flushUpdateZIndexOfChilden();
|
90
|
+
}
|
91
|
+
|
92
|
+
},
|
93
|
+
|
94
|
+
_updateFlexibleRects: function(){
|
95
|
+
var
|
96
|
+
_view,
|
97
|
+
i = 0;
|
98
|
+
for( ; i < this.views.length; i++ ){
|
99
|
+
_view = this.views[i];
|
100
|
+
if(_view.flexRight || _view.flexBottom){
|
101
|
+
_view.rect._updateFlexibleDimensions();
|
102
|
+
}
|
103
|
+
}
|
104
|
+
},
|
105
|
+
|
106
|
+
/** Calls the scheduler and then calls itself after a timeout to keep
|
107
|
+
* the loop going on.
|
108
|
+
**/
|
109
|
+
ticker: function(){
|
110
|
+
// Increment the tick counter:
|
111
|
+
this.ticks++;
|
112
|
+
this.scheduler();
|
113
|
+
this._tickTimeout = setTimeout( function(){HSystem.ticker();},this.defaultInterval);
|
114
|
+
},
|
115
|
+
|
116
|
+
|
117
|
+
/** = Description
|
118
|
+
* Adds the structures needed for a new +HApplication+ instance.
|
119
|
+
*
|
120
|
+
* Called from inside the +HApplication+ constructor.
|
121
|
+
* Binds an app and gives it a unique id.
|
122
|
+
*
|
123
|
+
* = Parameters
|
124
|
+
* +_app+:: The reference to the +HApplication+ instance object.
|
125
|
+
* +_priority+:: The app priority.
|
126
|
+
*
|
127
|
+
* = Returns
|
128
|
+
* The app id.
|
129
|
+
*
|
130
|
+
**/
|
131
|
+
addApp: function(_app, _priority){
|
132
|
+
var _appId;
|
133
|
+
if(this.freeAppIds.length !== 0){
|
134
|
+
_appId = this.freeAppIds.unshift();
|
135
|
+
this.apps[_appId] = _app;
|
136
|
+
} else {
|
137
|
+
this.apps.push(_app);
|
138
|
+
_appId = this.apps.length-1;
|
139
|
+
}
|
140
|
+
|
141
|
+
// sets self as parent
|
142
|
+
_app.parent = this;
|
143
|
+
_app.parents = [this];
|
144
|
+
|
145
|
+
_app.appId = _appId;
|
146
|
+
|
147
|
+
this.startApp(_appId, _priority);
|
148
|
+
|
149
|
+
return _appId;
|
150
|
+
},
|
151
|
+
|
152
|
+
/** = Description
|
153
|
+
* Starts polling an app instance (and its components).
|
154
|
+
*
|
155
|
+
* = Parameters
|
156
|
+
* +_appId+:: The unique id of the app.
|
157
|
+
* +_priority+:: The app priority.
|
158
|
+
*
|
159
|
+
**/
|
160
|
+
startApp: function(_appId,_priority){
|
161
|
+
if(_priority===undefined){
|
162
|
+
_priority = this.defaultInterval;
|
163
|
+
}
|
164
|
+
this.appPriorities[ _appId ] = _priority;
|
165
|
+
this.busyApps[_appId] = false;
|
166
|
+
},
|
167
|
+
|
168
|
+
/** = Description
|
169
|
+
* Stops polling an app instance (and its components).
|
170
|
+
*
|
171
|
+
* = Parameters
|
172
|
+
* +_appId+:: The id of the app.
|
173
|
+
*
|
174
|
+
**/
|
175
|
+
stopApp: function(_appId){
|
176
|
+
this.busyApps[_appId] = true;
|
177
|
+
},
|
178
|
+
|
179
|
+
/** = Description
|
180
|
+
* Changes the priority of the app. Calls +stopApp+ and +startApp+.
|
181
|
+
*
|
182
|
+
* = Parameters
|
183
|
+
* +_appId+:: The id of the app.
|
184
|
+
* +_priority+:: The app priority.
|
185
|
+
*
|
186
|
+
**/
|
187
|
+
reniceApp: function(_appId,_priority){
|
188
|
+
this.appPriorities[ _appId ] = _priority;
|
189
|
+
},
|
190
|
+
|
191
|
+
/** = Description
|
192
|
+
* Stops polling and deletes an app instance (and its components).
|
193
|
+
*
|
194
|
+
* = Parameters
|
195
|
+
* +_appId+:: The unique id of the app.
|
196
|
+
* +_forced+:: (Optional) The doesn't wait for the last poll to finish.
|
197
|
+
*
|
198
|
+
**/
|
199
|
+
killApp: function(_appId, _forced){
|
200
|
+
if( !_forced ){
|
201
|
+
var _startedWaiting = new Date().getTime();
|
202
|
+
while( this.busyApps[ _appId ] === true ) {
|
203
|
+
/* Waiting for the app to finish its idle loop... */
|
204
|
+
if (new Date().getTime() > _startedWaiting + this.maxAppRunTime) {
|
205
|
+
break;
|
206
|
+
}
|
207
|
+
}
|
208
|
+
}
|
209
|
+
this.busyApps[_appId] = true;
|
210
|
+
|
211
|
+
this.apps[ _appId ].destroyAllViews();
|
212
|
+
this.apps[ _appId ] = null;
|
213
|
+
|
214
|
+
this.freeAppIds.push( _appId );
|
215
|
+
},
|
216
|
+
|
217
|
+
/** All +HView+ instances that are defined **/
|
218
|
+
views: [],
|
219
|
+
|
220
|
+
/** List of free +viwes+ indexes **/
|
221
|
+
_freeViewIds: [],
|
222
|
+
|
223
|
+
/** = Description
|
224
|
+
* Adds a view and assigns it an id.
|
225
|
+
*
|
226
|
+
* = Parameters
|
227
|
+
* +_view+:: The +HView+ instance.
|
228
|
+
*
|
229
|
+
* = Returns
|
230
|
+
* The new view id.
|
231
|
+
*
|
232
|
+
**/
|
233
|
+
addView: function(_view){
|
234
|
+
var _newId;
|
235
|
+
if(this._freeViewIds.length===0){
|
236
|
+
_newId = this.views.length;
|
237
|
+
this.views.push(_view);
|
238
|
+
}
|
239
|
+
else {
|
240
|
+
_newId = this._freeViewIds.pop();
|
241
|
+
this.views[_newId] = _view;
|
242
|
+
}
|
243
|
+
return _newId;
|
244
|
+
},
|
245
|
+
|
246
|
+
/** = Description
|
247
|
+
* Removes a view and recycles its id.
|
248
|
+
*
|
249
|
+
* = Parameters
|
250
|
+
* +_viewId+:: The view id to delete.
|
251
|
+
*
|
252
|
+
**/
|
253
|
+
delView: function(_viewId){
|
254
|
+
this.views[_viewId] = null;
|
255
|
+
this._freeViewIds.push(_viewId);
|
256
|
+
},
|
257
|
+
|
258
|
+
/** The view id of the active window. 0 means none. **/
|
259
|
+
activeWindowId: 0,
|
260
|
+
|
261
|
+
/** = Description
|
262
|
+
* Focuses the window given and blurs the previous one.
|
263
|
+
*
|
264
|
+
* = Parameters
|
265
|
+
* +_view+:: The +HView+ instance, this is almost always a
|
266
|
+
* +HWindow+ instance.
|
267
|
+
*
|
268
|
+
**/
|
269
|
+
windowFocus: function(_view){
|
270
|
+
if(!_view){
|
271
|
+
this.activeWindowId=0;
|
272
|
+
return;
|
273
|
+
}
|
274
|
+
var _activeWindowId = this.activeWindowId,
|
275
|
+
_views = this.views,
|
276
|
+
_viewId = _view.viewId;
|
277
|
+
if(_views[_activeWindowId]){
|
278
|
+
if (_views[_activeWindowId]["windowBlur"]) {
|
279
|
+
_views[_activeWindowId].windowBlur();
|
280
|
+
}
|
281
|
+
}
|
282
|
+
this.activeWindowId=_viewId;
|
283
|
+
_view.bringToFront();
|
284
|
+
_view.windowFocus();
|
285
|
+
},
|
286
|
+
|
287
|
+
/** optimization of zindex buffer, see +HView+ **/
|
288
|
+
_updateZIndexOfChildrenBuffer: [],
|
289
|
+
|
290
|
+
/** Updates the z-indexes of the children of the given +_viewId+. **/
|
291
|
+
updateZIndexOfChildren: function(_viewId) {
|
292
|
+
if(this._updateZIndexOfChildrenBuffer.indexOf(_viewId)===-1){
|
293
|
+
this._updateZIndexOfChildrenBuffer.push(_viewId);
|
294
|
+
}
|
295
|
+
},
|
296
|
+
|
297
|
+
/** Flushes the z-indexes. This is a fairly expensive operation,
|
298
|
+
* thas's why the info is buffered.
|
299
|
+
**/
|
300
|
+
_flushUpdateZIndexOfChilden: function() {
|
301
|
+
|
302
|
+
var j=0, // buffer index
|
303
|
+
|
304
|
+
// reference to the HSystem namespace
|
305
|
+
_this = HSystem,
|
306
|
+
|
307
|
+
// reference to the buffer
|
308
|
+
_buffer = this._updateZIndexOfChildrenBuffer,
|
309
|
+
|
310
|
+
// the length of the buffer
|
311
|
+
_bufLen = _buffer.length;
|
312
|
+
|
313
|
+
// loop buffer length times to get the items
|
314
|
+
for ( ; j < _bufLen; j++ ) {
|
315
|
+
|
316
|
+
|
317
|
+
// get and remove view the view id from the z-index flush status buffer:
|
318
|
+
var _viewId = _buffer.shift(),
|
319
|
+
|
320
|
+
// reference to the view's z-index array or the system root-level views if _viewId is 0
|
321
|
+
_views = ((_viewId === null)?(_this.viewsZOrder):(_this.views[ _viewId ].viewsZOrder)),
|
322
|
+
|
323
|
+
// the length of the view's z-index array
|
324
|
+
_viewLen = _views.length,
|
325
|
+
|
326
|
+
// reference to the setStyle method of the element manager
|
327
|
+
_setStyl = ELEM.setStyle,
|
328
|
+
|
329
|
+
// reference to HSystem.views (collection of all views, by index)
|
330
|
+
_sysViews = _this.views,
|
331
|
+
|
332
|
+
|
333
|
+
// assign variables for use inside the inner loop:
|
334
|
+
|
335
|
+
// the viewId of the view to be updated
|
336
|
+
_subViewId,
|
337
|
+
|
338
|
+
// the view itself with the viewId above
|
339
|
+
_view,
|
340
|
+
|
341
|
+
// the elemId property, used as a [] -lookup in the loop
|
342
|
+
_elemIdStr = 'elemId',
|
343
|
+
|
344
|
+
// the css property name
|
345
|
+
_zIdxStr = 'z-index',
|
346
|
+
|
347
|
+
// the loop index
|
348
|
+
i=0,
|
349
|
+
|
350
|
+
// the element id of the view
|
351
|
+
_elemId;
|
352
|
+
|
353
|
+
// end of var declarations
|
354
|
+
|
355
|
+
// loop through all subviews and update the indexes:
|
356
|
+
for ( ; i < _viewLen; i++ ) {
|
357
|
+
|
358
|
+
// get the viewId to be updated based on the z-index array
|
359
|
+
_subViewId = _views[ i ];
|
360
|
+
|
361
|
+
// reference to the view itself
|
362
|
+
_view = _sysViews[ _subViewId ];
|
363
|
+
|
364
|
+
// the element id of the view
|
365
|
+
_elemId = _view[ _elemIdStr ];
|
366
|
+
|
367
|
+
// do the element manager call itself to update the dom property
|
368
|
+
_setStyl( _elemId, _zIdxStr, i );
|
369
|
+
}
|
370
|
+
}
|
371
|
+
}
|
372
|
+
};
|
373
|
+
|
374
|
+
// });
|
375
|
+
|
376
|
+
// Starts the ticking, when the document is loaded:
|
377
|
+
LOAD(
|
378
|
+
function(){
|
379
|
+
HSystem.ticker();
|
380
|
+
}
|
381
|
+
);
|
File without changes
|