rsence 2.0.0.pre → 2.0.0.1.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. data/INSTALL.rdoc +295 -0
  2. data/LICENSE +622 -0
  3. data/README.rdoc +87 -0
  4. data/VERSION +1 -0
  5. data/bin/rsence +5 -101
  6. data/conf/config.yaml +4 -0
  7. data/conf/default_conf.yaml +6 -4
  8. data/conf/{local_conf.yaml → local_conf.yaml.devel} +2 -1
  9. data/js/comm/comm/autosync/autosync.js +0 -1
  10. data/js/comm/comm/queue/queue.js +1 -1
  11. data/js/comm/comm/urlresponder/urlresponder.js +58 -35
  12. data/js/comm/comm/values/values.js +13 -3
  13. data/js/comm/jsloader/jsloader.js +29 -12
  14. data/js/controls/button/themes/default/button_parts1-ie6.gif +0 -0
  15. data/js/controls/checkbox/themes/default/checkbox_parts1-ie6.gif +0 -0
  16. data/js/controls/datetime/timesheet/timesheet.js +2 -2
  17. data/js/controls/dialogs/sheet/themes/default/sheet_bg-ie6.gif +0 -0
  18. data/js/controls/dialogs/sheet/themes/default/sheet_parts1-ie6.gif +0 -0
  19. data/js/controls/dialogs/sheet/themes/default/sheet_parts2-ie6.gif +0 -0
  20. data/js/controls/dialogs/sheet/themes/default/sheet_warning-ie6.gif +0 -0
  21. data/js/controls/passwordcontrol/themes/default/passwordcontrol.html +1 -1
  22. data/js/controls/radiobutton/themes/default/radiobutton_parts1-ie6.gif +0 -0
  23. data/js/controls/sliders/slider/themes/default/hslider_tracks-ie6.gif +0 -0
  24. data/js/controls/sliders/slider/themes/default/slider.css +2 -0
  25. data/js/controls/sliders/slider/themes/default/slider_thumbs-ie6.gif +0 -0
  26. data/js/controls/sliders/vslider/themes/default/vslider.css +2 -0
  27. data/js/controls/sliders/vslider/themes/default/vslider_tracks-ie6.gif +0 -0
  28. data/js/controls/stepper/themes/default/stepper-ie6.gif +0 -0
  29. data/js/controls/tab/tab.js +2 -6
  30. data/js/controls/tab/themes/default/tab.css +1 -0
  31. data/js/controls/tab/themes/default/tab.html +1 -1
  32. data/js/controls/tab/themes/default/tab_border_pattern-ie6.gif +0 -0
  33. data/js/controls/tab/themes/default/tab_parts1-ie6.gif +0 -0
  34. data/js/controls/textarea/themes/default/textarea.css +21 -0
  35. data/js/controls/textarea/themes/default/textarea.html +2 -2
  36. data/js/controls/textcontrol/textcontrol.js +56 -69
  37. data/js/controls/textcontrol/themes/default/textcontrol.css +23 -20
  38. data/js/controls/textcontrol/themes/default/textcontrol.html +1 -1
  39. data/js/controls/window/themes/default/window.css +1 -0
  40. data/js/controls/window/themes/default/window_bg_active-ie6.gif +0 -0
  41. data/js/controls/window/themes/default/window_bg_inactive-ie6.gif +0 -0
  42. data/js/controls/window/themes/default/window_buttons-ie6.gif +0 -0
  43. data/js/controls/window/themes/default/window_parts1-ie6.gif +0 -0
  44. data/js/controls/window/themes/default/window_parts2-ie6.gif +0 -0
  45. data/js/controls/window/window.js +28 -7
  46. data/js/core/class/class.js +31 -30
  47. data/js/core/elem/elem.js +94 -71
  48. data/js/core/event/event.js +34 -26
  49. data/js/core/iefix/iefix.js +46 -31
  50. data/js/debugg/debugg.js +43 -0
  51. data/js/debugg/js.inc +0 -0
  52. data/js/foundation/application/application.js +3 -1
  53. data/js/foundation/control/dyncontrol/dyncontrol.js +1 -0
  54. data/js/foundation/control/eventresponder/eventresponder.js +1 -1
  55. data/js/foundation/json_renderer/json_renderer.js +1 -3
  56. data/js/foundation/system/system.js +4 -4
  57. data/js/foundation/thememanager/thememanager.js +3 -3
  58. data/js/foundation/view/view.js +71 -1
  59. data/lib/conf/argv.rb +664 -0
  60. data/lib/conf/default.rb +51 -52
  61. data/lib/daemon/daemon.rb +281 -195
  62. data/lib/plugins/plugin_plugins.rb +47 -0
  63. data/lib/plugins/pluginmanager.rb +17 -12
  64. data/lib/transporter/transporter.rb +6 -9
  65. data/plugins/client_pkg/client_pkg.rb +12 -9
  66. data/plugins/client_pkg/lib/client_pkg_build.rb +1 -1
  67. data/plugins/index_html/tmpl/index.html +3 -3
  68. data/plugins/main/main.rb +1 -0
  69. metadata +16 -14
  70. data/bin/build_client.rb +0 -254
  71. data/bin/help +0 -6
  72. data/bin/launch.rb +0 -120
  73. data/bin/rdoc.sh +0 -2
  74. data/bin/restart +0 -6
  75. data/bin/run +0 -6
  76. data/bin/run.rb +0 -6
  77. data/bin/save +0 -6
  78. data/bin/start +0 -6
  79. data/bin/status +0 -6
  80. data/bin/stop +0 -6
data/README.rdoc ADDED
@@ -0,0 +1,87 @@
1
+
2
+ = RSence 2.0.0.1.pre 2010-??-??
3
+
4
+ http://rsence.org/
5
+
6
+ == Introduction
7
+
8
+ RSence is primarily a flexible and high-performance RIA framework aimed on building responsive, scalable and over-all as high-performance GUI Applications as possible with the chosen technologies. RSence uses the server for backend tasks and the client to provide responsive user interfaces. The server is a highly optimized Ruby framework for writing applications as plugin bundles containing all resources needed per plugin. The client is a highly optimized Javascript framework with an API similar to many object-oriented desktop frameworks. RSence is not primarily targeted for creating html web sites, there are plenty of other tools for that purpose.
9
+
10
+
11
+ == Installation (pre-release):
12
+
13
+ gem install rsence --pre
14
+
15
+ == Setting up a project (TODO; needs to be done manually still)
16
+
17
+ rsence initenv /path/of/project
18
+
19
+ == Project anatomy:
20
+
21
+ The expected structure of a project environment (where 'project_directory'
22
+ is the directory of your project) is:
23
+
24
+ [dir] project_directory :: The directory of your project.
25
+ [dir] conf :: The directory of config files.
26
+ [file] config.yaml :: The config file to load by defult.
27
+ [dir] var :: Directory containing various runtime files.
28
+ [dir] run :: Directory containing PID files.
29
+ [dir] log :: Directory containing log files.
30
+ [dir] db :: Directory containing database files.
31
+ [dir] plugins :: Directory containing installed plugins.
32
+
33
+ The 'config.yaml' file contains patches specific to your project.
34
+
35
+ The configuration files are loaded and applied in this order:
36
+ 1: [rsence_install_path]/conf/default_conf.yaml
37
+ 2: [rsence_install_path]/conf/local_conf.yaml
38
+ 3: /etc/rsence/config.yaml
39
+ 4: ~/.rsence/config.yaml
40
+ 5: [project_directory]/conf/config.yaml
41
+ 6: Any files given using --conf parameters, in order of occurrence.
42
+
43
+ The plugins directory contains the plugins installed in the project.
44
+
45
+ == Running a project
46
+
47
+ Each command-line tool command takes a number of options, the path defaults to the current working directory.
48
+
49
+ === Running in foregrond
50
+ rsence run /path/of/project
51
+
52
+ === Running in background
53
+ rsence start /path/of/project
54
+
55
+ === Stopiing from background
56
+ rsence stop /path/of/project
57
+
58
+ === Restarting in background
59
+ rsence restart /path/of/project
60
+
61
+ === Checking if project is running
62
+ rsence status /path/of/project
63
+
64
+ == RSence command-line tool help
65
+
66
+ === Lists all available commands
67
+ rsence help
68
+
69
+ === Getting detailed instructions of a command
70
+ rsence help <command>
71
+
72
+ eg:
73
+
74
+ rsence help run
75
+
76
+
77
+ For more detailed installation and usage instructions, read the INSTALL.rdoc document.
78
+
79
+ === Licensing:
80
+ * Free: *GPL*
81
+ * Alternative licensing queries available via http://riassence.com/ and sales@riassence.com
82
+
83
+ === Community support:
84
+ * Web: http://rsence.org/
85
+ * IRC: #rsence on the IRCNet and FreeNode networks
86
+
87
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 2.0.0.1.pre
data/bin/rsence CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #--
3
3
  ## Riassence Framework
4
- # Copyright 2008 Riassence Inc.
4
+ # Copyright 2010 Riassence Inc.
5
5
  # http://riassence.com/
6
6
  #
7
7
  # You should have received a copy of the GNU General Public License along
@@ -9,112 +9,16 @@
9
9
  ##
10
10
  #++
11
11
 
12
- if RUBY_VERSION.to_f >= 1.9
13
- Encoding.default_external = Encoding::ASCII_8BIT
14
- end
15
-
16
- is_win = ['i386-mingw32','x86-mingw32'].include? RUBY_PLATFORM
17
-
18
- if is_win
19
- commands = %w[help run]
20
- else
21
- commands = %w[help start stop restart status run]
22
- end
23
-
24
- if ARGV.include?('--help') or ARGV.include?('-h') or
25
- ARGV.include?('help') or not (
26
- commands.include?(ARGV[0])
27
- )
28
-
29
- if is_win
30
- extra_cmd_help = ''
31
- extra_cmd_examples = %{
32
- #{__FILE__} run --log-fg
33
- #{__FILE__} run -d
34
- #{__FILE__} run --latency 150
35
- #{__FILE__} run --server mongrel --port 8080 --addr 127.0.0.1
36
- }
37
- else
38
- extra_cmd_help = %{\
39
- status Tells if Riassence Framework Server is running or not
40
- start Starts Riassence Framework Server
41
- stop Stops Riassence Framework Server
42
- restart Restarts Riassence Framework Server
43
- save Saves Riassence Framework Server session data
44
- }
45
- extra_cmd_examples = %{\
46
- #{__FILE__} status
47
- #{__FILE__} start
48
- #{__FILE__} stop
49
- #{__FILE__} save
50
- #{__FILE__} restart
51
- #{__FILE__} restart -d --reset-sessions
52
- #{__FILE__} restart --latency 150
53
- #{__FILE__} restart --server mongrel --port 8080 --addr 127.0.0.1
54
- }
55
- end
56
-
57
- puts %{
58
-
59
- Riassence Framework is RIA client and server. This help message contains
60
- hints about how to control the server startup/shutdown.
61
-
62
- Usage:
63
- #{__FILE__} command [params]
64
-
65
- Command is one of:
66
- run Run in foreground (exit with ctrl-c)
67
- #{extra_cmd_help} help This message
68
-
69
- Params:
70
- --log-fg Don't write log into file (writes to foreground)
71
- -d Debug/Development mode
72
- --trace-js Write content of msg.reply calls to stdout
73
- --trace-delegate Traces plugin method delegation to stdout
74
- --root-path <PATH> Define the PATH to rsence server
75
- Defaults to 'bin'
76
- --port PORT Define the http PORT to use, defaults to '8001'
77
- --latency MS Simulate network latency, value in milliseconds
78
- --addr <ADDRESS> Define the IPv4 ADDRESS to bind to.
79
- Defaults to '0.0.0.0' (any)
80
- --server <SERVER> Choose http SERVER, valid choices:
81
- - webrick
82
- - mongrel
83
- - ebb
84
- - thin
85
- Defaults to thin
86
- --reset-sessions Deletes all old sessions on startup
87
- --config <PATH> Optional config override file
88
- --run-config-wizard Runs configuration wizard
89
- Runs by default, if no local
90
- configuration files were found.
91
- --no-rescan Doesn't rescan the plugins even when in debug mode.
92
- --profile Turns on profiling
93
- - Runs everything considerable slower!
94
- - Shown a table displaying the results on stop.
95
- --help This message
96
- -h This message
97
-
98
- Examples:
99
- #{__FILE__} run
100
- #{extra_cmd_examples}
101
- Further information:
102
- http://riassence.org/
103
-
104
- }
105
- exit
106
- end
107
-
108
12
  require 'profile' if ARGV.include?('--profile')
109
13
 
110
14
  ## Auto-construct paths using this file as the waypoint
111
- SERVER_PATH = ARGV.include?('--root-path')?(ARGV[ARGV.index('--root-path')+1]):File.split(File.expand_path(File.dirname(__FILE__)))[0]
15
+ SERVER_PATH = File.split( File.expand_path(File.dirname(__FILE__)) )[0]
112
16
 
113
17
  ## Include server & lib in the search path
114
18
  $LOAD_PATH << SERVER_PATH
115
19
  $LOAD_PATH << File.join( SERVER_PATH, 'lib' )
116
20
 
117
- ## Riassence Daemon controls
118
- require 'daemon/daemon'
119
- RSence::HTTPDaemon.daemonize
21
+ require 'conf/argv'
22
+
23
+ RSence.startup if RSence.startable?
120
24
 
data/conf/config.yaml ADDED
@@ -0,0 +1,4 @@
1
+ :http_server:
2
+ :port: 8002
3
+ :index_html:
4
+ :title: "Hellou"
@@ -151,7 +151,7 @@
151
151
  # Database configuration
152
152
  :database:
153
153
  # Session database storage string. Leave empty here to enable the wizard for storage.
154
- :ses_db: 'sqlite://var/lib/rsence/db/ses.db'
154
+ :ses_db: 'sqlite://db/ses.db'
155
155
 
156
156
  #
157
157
  # ValueManager settings
@@ -178,10 +178,10 @@
178
178
  :client_pkg:
179
179
 
180
180
  # Source directories to scan
181
- :src_dirs:
181
+ :src_dirs: []
182
182
 
183
183
  # RSence Client Framework
184
- - js
184
+ #- js
185
185
 
186
186
  # How to include your own custom js package directory:
187
187
  # - /home/me/code/extra_components
@@ -201,6 +201,7 @@
201
201
  - event # EVENT
202
202
  - sha # SHAClass
203
203
  - system # HSystem
204
+ - valueresponder # HValueResponder
204
205
  - application # HApplication
205
206
  - comm # COMM
206
207
  - queue # COMM.Queue
@@ -222,7 +223,6 @@
222
223
  - viewdefaults # HViewDefaults
223
224
  - view # HView
224
225
  - eventresponder # HEventResponder
225
- - valueresponder # HValueResponder
226
226
  - dummyvalue # HDummyValue
227
227
  - controldefaults # HControlDefaults
228
228
  - control # HControl
@@ -308,6 +308,8 @@
308
308
  - .gif
309
309
  - .png
310
310
  - .swf
311
+ - .svg
312
+ - .pdf
311
313
 
312
314
  # The name of the include file
313
315
  :js_inc: js.inc
@@ -10,4 +10,5 @@
10
10
  :database:
11
11
  :ses_db: sqlite://var/db/rsence_ses.db
12
12
  :client_pkg:
13
- :no_obfuscation: true
13
+ :no_obfuscation: true
14
+ :no_whitespace_removal: true
@@ -9,7 +9,6 @@
9
9
  // Starts the synchronization upon page load.
10
10
  LOAD(
11
11
  function(){
12
- COMM.URLResponder.implement(HValueResponder);
13
12
  COMM.urlResponder=COMM.URLResponder.nu();
14
13
  urlResponder=COMM.urlResponder; // backwards compatibility
15
14
  COMM.Transporter.url=HCLIENT_HELLO;
@@ -105,7 +105,7 @@ COMM.Queue = HApplication.extend({
105
105
  else {
106
106
  _function = _item[0];
107
107
  _arguments = _item[1];
108
- _function.call(_arg);
108
+ _function.apply(this,_arguments);
109
109
  }
110
110
  }
111
111
 
@@ -20,21 +20,29 @@
20
20
  COMM.URLResponder = HApplication.extend({
21
21
  constructor: function(){
22
22
  this.urlMatchers = [];
23
- this.urlCallBack = [];
24
- this.defaultCallBack = null;
25
- this.prevCallBack = false;
26
- this.prevMatchStr = '';
23
+ this.urlCallBacks = [];
24
+ this.defaultCallBacks = [];
25
+ this.prevCallBacks = [];
26
+ this.prevMatchStrs = [];
27
27
  this.base(1, 'URLResponder');
28
28
  this.value = 0;
29
- this.clientValue = HValue.nu( false, '' );
30
- this.clientValue.bind( this );
31
- this.serverValue = false;
32
29
  },
33
30
 
34
31
  // sets the view to show when there is
35
32
  // no matches (like a virtual 404)
36
33
  setDefaultResponder: function(_callBack){
37
- this.defaultCallBack = _callBack;
34
+ this.defaultCallBacks = [ _callBack ];
35
+ this.refresh();
36
+ },
37
+
38
+ addDefaultResponder: function(_callBack){
39
+ this.defaultCallBacks.push( _callBack );
40
+ this.refresh();
41
+ },
42
+
43
+ delDefaultResponder: function(_callBack){
44
+ this.defaultCallBacks.splice(this.defaultCallbacks.indexOf(_callBack),1);
45
+ this.refresh();
38
46
  },
39
47
 
40
48
  // Removes responder
@@ -43,19 +51,20 @@ COMM.URLResponder = HApplication.extend({
43
51
  // - callBack is the component registered
44
52
  delResponder: function(_matchStr,_callBack){
45
53
  _callBack.hide();
46
- if(_callBack === this.prevCallBack){
47
- this.prevCallBack = false;
48
- this.prevMatchStr = '';
54
+ if(this.prevCallBacks.indexOf(_callBack) !== -1){
55
+ this.prevCallBacks.splice(this.prevCallBacks.indexOf(_callBack),1);
56
+ this.prevMatchStrs.splice(this.prevMatchStrs.indexOf(_matchStr),1);
49
57
  }
50
58
  var i=0, _urlMatch, _urlCallBack;
51
59
  for(;i<this.urlMatchers.length;i++){
52
60
  _urlMatch = this.urlMatchers[i].test(_matchStr);
53
61
  if(_urlMatch){
54
62
  this.urlMatchers.splice(i,1);
55
- this.urlCallBack.splice(i,1);
63
+ this.urlCallBacks.splice(i,1);
56
64
  return 1;
57
65
  }
58
66
  }
67
+ this.refresh();
59
68
  return 0;
60
69
  },
61
70
 
@@ -67,38 +76,55 @@ COMM.URLResponder = HApplication.extend({
67
76
  // activate (and the previous one to deactivate)
68
77
  addResponder: function(_matchRegExp,_callBack,_activate){
69
78
  this.urlMatchers.push(new RegExp(_matchRegExp));
70
- this.urlCallBack.push(_callBack);
79
+ this.urlCallBacks.push(_callBack);
71
80
  this.checkMatch(this.value);
72
81
  if(_activate!==undefined){
73
- location.href=_activate;
82
+ window.location.href=_activate;
74
83
  }
84
+ this.refresh();
75
85
  },
76
86
 
77
87
  // Checks the matchStr agains regular expressions
78
88
  checkMatch: function(_matchStr){
79
- if(_matchStr === this.prevMatchStr){
89
+ if(this.prevMatchStrs.indexOf( _matchStr ) !== -1 ){
80
90
  return 0;
81
91
  }
82
- var i=0, _urlMatch, _urlCallBack;
92
+ var i=0, _urlMatch, _urlCallBacks=[], _urlCallBack;
83
93
  for(;i<this.urlMatchers.length;i++){
84
94
  _urlMatch = this.urlMatchers[i].test(_matchStr);
85
95
  if(_urlMatch){
86
- _urlCallBack = this.urlCallBack[i];
87
- if(this.prevCallBack){
88
- this.prevCallBack.hide();
89
- }
96
+ _urlCallBacks.push(this.urlCallBacks[i]);
97
+ }
98
+ }
99
+ if(_urlCallBacks.length !== 0){
100
+ for(i=0;i<_urlCallBacks.length;i++){
101
+ _urlCallBack = _urlCallBacks[i];
90
102
  _urlCallBack.show();
91
- this.prevCallBack = _urlCallBack;
92
- this.prevmatchStr = _matchStr;
93
- return 1;
103
+ if(this.prevMatchStrs.indexOf(_matchStr)!==-1){
104
+ this.prevMatchStrs.push( _matchStr );
105
+ }
106
+ }
107
+ var _prevCallBack;
108
+ for(i=0;i<this.prevCallBacks.length;i++){
109
+ _prevCallBack = this.prevCallBacks[i];
110
+ if(_urlCallBacks.indexOf(_prevCallBack) === -1){
111
+ this.prevCallBacks[i].hide();
112
+ }
94
113
  }
114
+ this.prevCallBacks = _urlCallBacks;
115
+ return 1;
95
116
  }
96
- if(this.defaultCallBack){
97
- if(this.prevCallBack){
98
- this.prevCallBack.hide();
117
+ if(this.defaultCallBacks.length !== 0){
118
+ if(this.prevCallBacks.length !== 0){
119
+ for(i=0;i<this.prevCallBacks.length;i++){
120
+ this.prevCallBacks[i].hide();
121
+ }
122
+ }
123
+ this.prevCallBacks = [];
124
+ for(i=0;i<this.defaultCallBacks.length;i++){
125
+ this.defaultCallBacks[i].show();
126
+ this.prevCallBacks.push( this.defaultCallBacks[i] );
99
127
  }
100
- this.defaultCallBack.show();
101
- this.prevCallBack = this.defaultCallBack;
102
128
  }
103
129
  return -1;
104
130
  },
@@ -106,19 +132,16 @@ COMM.URLResponder = HApplication.extend({
106
132
  refresh: function(){
107
133
  var _value = this.value;
108
134
  if(_value.length === 0){ return; }
109
- if (!this.serverValue && this.valueObj.id !== this.clientValue.id) {
110
- this.clientValue.die();
111
- }
112
- if(location.href !== _value){
113
- location.href = _value;
135
+ if(window.location.href !== _value){
136
+ window.location.href = _value;
114
137
  }
115
138
  this.checkMatch( _value );
116
139
  },
117
140
 
118
141
  onIdle: function(){
119
142
  if(!this['valueObj']){return;}
120
- var _href = location.href;
121
- if(_href!==this.valueObj.value){
143
+ var _href = window.location.href;
144
+ if(_href!==this.value){
122
145
  this.setValue(_href);
123
146
  }
124
147
  }