rsence 2.0.0.pre → 2.0.0.1.pre

Sign up to get free protection for your applications and to get access to all the features.
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
  }