seamless 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. data/bin/seamless +36 -0
  2. data/lib/seamless.rb +70 -0
  3. data/lib/seamless/active_record_extension.rb +11 -0
  4. data/lib/seamless/dispatcher.rb +45 -0
  5. data/lib/seamless/message_broker.rb +12 -0
  6. data/lib/seamless/message_broker_controller.rb +11 -0
  7. data/lib/seamless/messagebroker/inmemory_message_broker.rb +45 -0
  8. data/lib/seamless/migration.rb +8 -0
  9. data/lib/seamless/model.rb +94 -0
  10. data/lib/seamless/service.rb +186 -0
  11. data/seamless/seamless_generator.rb +181 -0
  12. data/seamless/templates/README +24 -0
  13. data/seamless/templates/admin.html +166 -0
  14. data/seamless/templates/application.rb +7 -0
  15. data/seamless/templates/css/global.css +333 -0
  16. data/seamless/templates/css/seamless-admin.css +281 -0
  17. data/seamless/templates/css/seamless.css +632 -0
  18. data/seamless/templates/environment.rb +65 -0
  19. data/seamless/templates/generate +25 -0
  20. data/seamless/templates/images/arch.png +0 -0
  21. data/seamless/templates/images/arrow_undo.png +0 -0
  22. data/seamless/templates/images/cell_phone.png +0 -0
  23. data/seamless/templates/images/confirm.png +0 -0
  24. data/seamless/templates/images/deny.png +0 -0
  25. data/seamless/templates/images/dialog_close.gif +0 -0
  26. data/seamless/templates/images/dialog_close_hover.gif +0 -0
  27. data/seamless/templates/images/email.png +0 -0
  28. data/seamless/templates/images/exclamation.png +0 -0
  29. data/seamless/templates/images/indicator.gif +0 -0
  30. data/seamless/templates/images/indicator2.gif +0 -0
  31. data/seamless/templates/images/seamless.gif +0 -0
  32. data/seamless/templates/images/shadow.gif +0 -0
  33. data/seamless/templates/images/shadowAlpha.png +0 -0
  34. data/seamless/templates/images/small_star.png +0 -0
  35. data/seamless/templates/images/table_add.png +0 -0
  36. data/seamless/templates/images/table_delete.png +0 -0
  37. data/seamless/templates/images/table_edit.png +0 -0
  38. data/seamless/templates/images/table_go.png +0 -0
  39. data/seamless/templates/images/table_refresh.png +0 -0
  40. data/seamless/templates/images/tag.png +0 -0
  41. data/seamless/templates/images/warning.png +0 -0
  42. data/seamless/templates/images/wizard.gif +0 -0
  43. data/seamless/templates/images/work_phone.png +0 -0
  44. data/seamless/templates/index.html +171 -0
  45. data/seamless/templates/js/seamless-admin.js +255 -0
  46. data/seamless/templates/js/seamless.js +2755 -0
  47. data/seamless/templates/message_broker.rb +6 -0
  48. data/seamless/templates/message_broker_helper.rb +2 -0
  49. data/seamless/templates/robots.txt +2 -0
  50. data/seamless/templates/routes.rb +18 -0
  51. data/seamless/templates/seamless.xml +5 -0
  52. data/seamless/templates/server +4 -0
  53. data/seamless/templates/test_service.rb +13 -0
  54. data/service/USAGE +21 -0
  55. data/service/service_generator.rb +59 -0
  56. data/service/templates/service.rb +14 -0
  57. metadata +122 -0
@@ -0,0 +1,181 @@
1
+ require 'rbconfig'
2
+
3
+ ################################################################################################
4
+ #
5
+ # Most of this comes straight from the Rails app generator - with the exception some files
6
+ # that aren't needed are removed and others related to seamless are added
7
+ #
8
+ ################################################################################################
9
+
10
+
11
+ class SeamlessGenerator < Rails::Generator::Base
12
+ DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
13
+ Config::CONFIG['ruby_install_name'])
14
+
15
+ DATABASES = %w( mysql oracle postgresql sqlite2 sqlite3 frontbase )
16
+
17
+ default_options :db => "mysql", :shebang => DEFAULT_SHEBANG, :freeze => false
18
+ #mandatory_options :source => "#{File.dirname(__FILE__)}/templates"
19
+
20
+ def initialize(runtime_args, runtime_options = {})
21
+ super
22
+ usage if args.empty?
23
+ usage("Databases supported for preconfiguration are: #{DATABASES.join(", ")}") if (options[:db] && !DATABASES.include?(options[:db]))
24
+ @destination_root = args.shift
25
+ @railspath = runtime_options['railspath']
26
+ @app_name = File.basename(File.expand_path(@destination_root))
27
+ end
28
+
29
+ def manifest
30
+ # Use /usr/bin/env if no special shebang was specified
31
+ script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
32
+ dispatcher_options = { :chmod => 0755, :shebang => options[:shebang] }
33
+
34
+ record do |m|
35
+
36
+ # Root directory and all subdirectories.
37
+ m.directory ''
38
+ BASEDIRS.each { |path| m.directory path }
39
+
40
+ # Root
41
+ m.file "#{@railspath}/fresh_rakefile", "Rakefile"
42
+ m.file "templates/README", "README"
43
+
44
+ # Application
45
+ m.template "templates/application.rb", "app/controllers/application.rb"
46
+ m.template "templates/test_service.rb", "app/services/test_service.rb"
47
+ m.template "#{@railspath}/helpers/application_helper.rb", "app/helpers/application_helper.rb"
48
+ m.template "#{@railspath}/helpers/test_helper.rb", "test/test_helper.rb"
49
+ m.template "templates/message_broker.rb", "app/controllers/message_broker_controller.rb"
50
+ m.template "templates/message_broker_helper.rb", "app/helpers/message_broker_helper.rb"
51
+
52
+ # database.yml and .htaccess
53
+ m.template "#{@railspath}/configs/databases/#{options[:db]}.yml", "config/database.yml", :assigns => {
54
+ :app_name => @appname,
55
+ :socket => options[:db] == "mysql" ? mysql_socket_location : nil
56
+ }
57
+
58
+ m.template "templates/routes.rb", "config/routes.rb"
59
+ m.template "#{@railspath}/configs/apache.conf", "public/.htaccess"
60
+
61
+ # Environments
62
+ m.file "#{@railspath}/environments/boot.rb", "config/boot.rb"
63
+
64
+ m.template "templates/environment.rb", "config/environment.rb", :assigns => { :freeze => options[:freeze] }
65
+
66
+ m.file "#{@railspath}/environments/production.rb", "config/environments/production.rb"
67
+ m.file "#{@railspath}/environments/development.rb", "config/environments/development.rb"
68
+ m.file "#{@railspath}/environments/test.rb", "config/environments/test.rb"
69
+
70
+ # Scripts
71
+ %w( about breakpointer console destroy performance/benchmarker performance/profiler process/reaper process/spawner runner plugin ).each do |file|
72
+ m.file "#{@railspath}/bin/#{file}", "script/#{file}", script_options
73
+ end
74
+
75
+ # Override special scripts
76
+ %w( server generate ).each do |file|
77
+ m.file "templates/#{file}", "script/#{file}", script_options
78
+ end
79
+
80
+ # Dispatches
81
+ m.file "#{@railspath}/dispatches/dispatch.rb", "public/dispatch.rb", dispatcher_options
82
+ m.file "#{@railspath}/dispatches/dispatch.rb", "public/dispatch.cgi", dispatcher_options
83
+ m.file "#{@railspath}/dispatches/dispatch.fcgi", "public/dispatch.fcgi", dispatcher_options
84
+
85
+ mydir = File.dirname(__FILE__)
86
+
87
+ %w(css images js).each do |dir|
88
+ Dir.new(mydir + "/templates/#{dir}").each do |file|
89
+ if file!="." and file!=".."
90
+ m.file "templates/#{dir}/#{file}", "public/#{dir}/#{file}"
91
+ end
92
+ end
93
+ end
94
+
95
+ # HTML files
96
+ %w(index.html admin.html seamless.xml).each do |file|
97
+ m.file "templates/#{file}", "public/#{file}"
98
+ end
99
+
100
+ m.template "#{@railspath}/html/favicon.ico", "public/favicon.ico"
101
+ m.template "#{@railspath}/html/robots.txt", "public/robots.txt"
102
+
103
+ # Docs
104
+ m.file "#{@railspath}/doc/README_FOR_APP", "doc/README_FOR_APP"
105
+
106
+ # Logs
107
+ %w(server production development test).each { |file|
108
+ m.file "#{@railspath}/configs/empty.log", "log/#{file}.log", :chmod => 0666
109
+ }
110
+ end
111
+ end
112
+
113
+ protected
114
+ def banner
115
+ "Usage: #{$0} /path/to/your/app [options]"
116
+ end
117
+
118
+ def add_options!(opt)
119
+ opt.separator ''
120
+ opt.separator 'Options:'
121
+ opt.on("-r", "--ruby=path", String,
122
+ "Path to the Ruby binary of your choice (otherwise scripts use env, dispatchers current path).",
123
+ "Default: #{DEFAULT_SHEBANG}") { |v| options[:shebang] = v }
124
+
125
+ opt.on("-d", "--database=name", String,
126
+ "Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite2/sqlite3).",
127
+ "Default: mysql") { |v| options[:db] = v }
128
+
129
+ opt.on("-f", "--freeze",
130
+ "Freeze Rails in vendor/rails from the gems generating the skeleton",
131
+ "Default: false") { |v| options[:freeze] = v }
132
+ end
133
+
134
+ def mysql_socket_location
135
+ RUBY_PLATFORM =~ /mswin32/ ? MYSQL_SOCKET_LOCATIONS.find { |f| File.exists?(f) } : nil
136
+ end
137
+
138
+
139
+ # Installation skeleton. Intermediate directories are automatically
140
+ # created so don't sweat their absence here.
141
+ BASEDIRS = %w(
142
+ app/controllers
143
+ app/services
144
+ app/helpers
145
+ app/models
146
+ config/environments
147
+ components
148
+ db
149
+ doc
150
+ lib
151
+ lib/tasks
152
+ log
153
+ public/images
154
+ public/js
155
+ public/css
156
+ script/performance
157
+ script/process
158
+ test/fixtures
159
+ test/functional
160
+ test/integration
161
+ test/mocks/development
162
+ test/mocks/test
163
+ test/unit
164
+ vendor
165
+ vendor/plugins
166
+ tmp/sessions
167
+ tmp/sockets
168
+ tmp/cache
169
+ )
170
+
171
+ MYSQL_SOCKET_LOCATIONS = [
172
+ "/tmp/mysql.sock", # default
173
+ "/var/run/mysqld/mysqld.sock", # debian/gentoo
174
+ "/var/tmp/mysql.sock", # freebsd
175
+ "/var/lib/mysql/mysql.sock", # fedora
176
+ "/opt/local/lib/mysql/mysql.sock", # fedora
177
+ "/opt/local/var/run/mysqld/mysqld.sock", # mac + darwinports + mysql
178
+ "/opt/local/var/run/mysql4/mysqld.sock", # mac + darwinports + mysql4
179
+ "/opt/local/var/run/mysql5/mysqld.sock" # mac + darwinports + mysql5
180
+ ]
181
+ end
@@ -0,0 +1,24 @@
1
+ ====================
2
+ Seam(less) on Rails
3
+ ====================
4
+
5
+ Seam(less) on Rails is a web2.0, ajax based web application framework, developed by Hakano. Please see http://www.hakano.org for the latest documentation and information.
6
+
7
+
8
+
9
+
10
+ Seam(less) Web Application Framework
11
+
12
+ Copyright (c) 2006-2007 Hakano, Inc. All Rights Reserved.
13
+
14
+ Licensed under the Apache License, Version 2.0 (the "License");
15
+ you may not use this file except in compliance with the License.
16
+
17
+ You may obtain a copy of the License at
18
+ http://www.apache.org/licenses/LICENSE-2.0
19
+
20
+ Unless required by applicable law or agreed to in writing,
21
+ software distributed under the License is distributed on an "AS IS" BASIS,
22
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ See the License for the specific language governing permissions and
24
+ limitations under the License.
@@ -0,0 +1,166 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:seamless="http://www.hakano.org/seamless">
3
+ <head>
4
+ <title>Seam(less) Admin</title>
5
+ <meta http-equiv="Content-Type" content="UTF-8" />
6
+
7
+ <link rel="stylesheet" href="css/global.css" type="text/css" media="all" />
8
+ <link rel="stylesheet" href="css/seamless.css" type="text/css" media="all" />
9
+ <link rel="stylesheet" href="css/seamless-admin.css" type="text/css" media="all" />
10
+ <script src="js/seamless.js" type="text/javascript" />
11
+ <script src="js/seamless-admin.js" type="text/javascript" />
12
+
13
+ <body>
14
+ <div id="header"></div>
15
+
16
+ <div id="banner">
17
+ <img id="logo" src="images/seamless.gif" alt="seamless"/>
18
+ </div>
19
+
20
+ <div id="form">
21
+ <div id="titlebar">
22
+ <div id="title" class="primary_light_color">Seam(less) Admin</div>
23
+ <div id="search">
24
+ <div id="search_bar">
25
+ <div id="search_bar_title">Search:</div>
26
+ <div id="search_bar_field">
27
+ <seamless:dynamic-search style="display:inline"
28
+ progressId="search_indicator"
29
+ onBindMessageRequest="local:search.request"
30
+ onBindMessageResponse="remote:~.search.response"
31
+ fieldset="search"
32
+ searchKey="query">
33
+ </seamless:dynamic-search>
34
+ </div>
35
+ <img id="search_indicator"
36
+ style="display:none" src="images/indicator.gif"
37
+ onBindMessageHide="remote:~.search.response"/>
38
+ </div>
39
+ </div>
40
+ <div id="table_selector"> Table:
41
+ <select id="table" onBindMessage="remote:seamless.admin.models.response"
42
+ onBindMessageProperty="models"
43
+ onBindMessageOptionTextProperty="name"
44
+ onBindMessageOptionValueProperty="model"
45
+ onChangeMessage="local:table.changed">
46
+ <option>loading...</option>
47
+ </select>
48
+ </div>
49
+ </div>
50
+ <div id="results">
51
+ <div id="search_results" style="display:none"
52
+ onBindMessageHide="remote:~.search.request,local:edit.record,local:display.record"
53
+ onBindMessageShow="remote:~.search.response" onBindMessageShowCond="this.data['success']"
54
+ onBindMessageShow1="local:show.results">
55
+ <span class="large_text" id="table_name"></span>
56
+ <span style="margin-left:40px;">&nbsp;</span>
57
+ <span>Displaying </span>
58
+ <span onBindMessage="remote:~.search.response" onBindMessageProperty="count" id="search_count"></span>
59
+ <span> of </span>
60
+ <span onBindMessage="remote:~.search.response" onBindMessageProperty="total" id="search_total"></span>
61
+ <span> records</span>
62
+ </div>
63
+ <div id="table_operations">
64
+ <a title="return to results">
65
+ <img style="display:none" src="images/arrow_undo.png"
66
+ onBindMessageShow="local:edit.record" onBindMessageHide="local:show.results"
67
+ onClickMessage="local:show.results"/>
68
+ </a>
69
+ <span style="display:none" onBindMessageShow="local:search.table.selected"
70
+ onBindMessageHide="remote:~.search.request,local:search.table.nonselected,local:show.results,local:display.record">
71
+ <a title="display record" onClickMessage="local:display.record"><img src="images/table_go.png"/></a>
72
+ </span>
73
+ <span style="display:none" onBindMessageShow="local:search.table.selected"
74
+ onBindMessageHide="remote:~.search.request,local:search.table.nonselected,local:show.results,local:edit.record">
75
+ <a title="edit record" onClickMessage="local:edit.record"><img src="images/table_edit.png"/></a>
76
+ </span>
77
+ <span style="display:none" onBindMessageShow="local:search.table.selected"
78
+ onBindMessageHide="remote:~.search.request,local:search.table.nonselected,local:show.results">
79
+ <a title="delete record" onClickMessage="local:search.table.delete.confirm"><img src="images/table_delete.png"/></a>
80
+ </span>
81
+ <span style="display:none" onBindMessageShow="remote:sft.user.search.response"
82
+ onBindMessageShowCond="this.data['success']"
83
+ onBindMessageHide="remote:~.search.request,local:show.results">
84
+ <a title="add new record"><img src="images/table_add.png"/></a>
85
+ </span>
86
+ <span style="display:none" onBindMessageShow="remote:sft.user.search.response"
87
+ onBindMessageShowCond="this.data['success']"
88
+ onBindMessageHide="remote:~.search.request">
89
+ <a title="refresh results"><img src="images/table_refresh.png"/></a>
90
+ </span>
91
+ </div>
92
+ </div>
93
+ <div id="search_results_table_container">
94
+ </div>
95
+ </div>
96
+
97
+ <seamless:datamodel message="remote:seamless.admin.models.request">
98
+ </seamless:datamodel>
99
+
100
+ <seamless:script onBindMessage="remote:~.list.response" onBindMessageCond="this.data.success">
101
+ var rows = this.data['rows'];
102
+ var obj = {};
103
+ obj['count']=rows.length;
104
+ obj['total']=this.data['total'];
105
+ obj['success']=true;
106
+ var table = $('table');
107
+ var tableName = table[table.selectedIndex].value;
108
+ var request = 'remote:seamless.' + tableName + '.search.response';
109
+ hakano.util.MessageBroker.queue({type:request,data:obj});
110
+ </seamless:script>
111
+
112
+ <seamless:script onBindMessage="remote:~.delete.response" onBindMessageCond="this.data.success">
113
+ refreshData();
114
+ </seamless:script>
115
+
116
+ <seamless:script onBindMessage="local:show.results">
117
+ restoreTable();
118
+ </seamless:script>
119
+
120
+ <seamless:script onBindMessage="local:display.record">
121
+ displayRecord(false);
122
+ </seamless:script>
123
+
124
+ <seamless:script onBindMessage="local:edit.record">
125
+ displayRecord(true);
126
+ </seamless:script>
127
+
128
+ <seamless:script onBindMessage="local:search.request">
129
+ var table = $('table');
130
+ var tableName = table[table.selectedIndex].value;
131
+ var request = 'remote:seamless.' + tableName + '.search.request';
132
+ hakano.util.MessageBroker.queue({type:request,data:this.data});
133
+ </seamless:script>
134
+
135
+ <seamless:script onBindMessage="remote:seamless.admin.models.response">
136
+ loadModels(this.data);
137
+ </seamless:script>
138
+
139
+ <seamless:script onBindMessage="remote:~.delete.response" onBindMessageCond="this.data['success']">
140
+ updateFromDelete(this.data);
141
+ </seamless:script>
142
+
143
+ <seamless:script onBindMessage="remote:~.assembly.response">
144
+ loadColumns(this.data);
145
+ </seamless:script>
146
+
147
+ <seamless:script onBindMessage="local:table.changed">
148
+ var table = $('table');
149
+ var row = table[table.selectedIndex];
150
+ var tableName = row.value;
151
+ $('table_name').innerHTML = row.text;
152
+ loadTableAssembly(tableName);
153
+ </seamless:script>
154
+
155
+ <seamless:script onBindMessage="remote:~.search.response,remote:~.list.response" onBindMessageCond="this.data['success']">
156
+ loadTable(this.data);
157
+ </seamless:script>
158
+
159
+ <seamless:script onBindMessage="local:search.table.delete.confirm">
160
+ if (confirm('Are you sure you want to delete this record?'))
161
+ {
162
+ deleteRow(this.data);
163
+ }
164
+ </seamless:script>
165
+ </body>
166
+ </html>
@@ -0,0 +1,7 @@
1
+ # Filters added to this controller apply to all controllers in the application.
2
+ # Likewise, all the methods added will be available for all controllers.
3
+
4
+ class ApplicationController < ActionController::Base
5
+ # Pick a unique cookie name to distinguish our session data from others'
6
+ session :session_key => '_session_id'
7
+ end
@@ -0,0 +1,333 @@
1
+ /**
2
+ * =============================================================================
3
+ * THIS FILE CONTAINS ALL NON-POSITIONAL STYLES (e.g., colors, font sizes, etc.)
4
+ * =============================================================================
5
+ */
6
+
7
+ /**
8
+ * =============================================================================
9
+ * GLOBAL RESET OF BROWSER DEFAULT STYLES
10
+ * =============================================================================
11
+ * Copyright (c) 2006, Yahoo! Inc. All rights reserved.
12
+ * Code licensed under the BSD License:
13
+ * http://developer.yahoo.net/yui/license.txt
14
+ * version: 0.11.3
15
+ *
16
+ * This foundational CSS file offers cross-browser normalization of the default
17
+ * rendering of HTML elements. It also removes common default presentation such
18
+ * as bolding of strong elements, helping to ensure that all style is declared
19
+ * intentionally and that elements are always used for their semantic meaning
20
+ * instead of their customary visual presentation.
21
+ */
22
+ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}
23
+ table{border-collapse:collapse;border-spacing:0;}
24
+ fieldset,img{border:0;}
25
+ address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
26
+ ol,ul {list-style:none;}
27
+ caption,th {text-align:left;}
28
+ h1,h2,h3,h4,h5,h6{font-size:100%;}
29
+ q:before,q:after{content:'';}
30
+ /**
31
+ * 84.5% for !IE, keywords for IE
32
+ * Percents could work for IE, but for backCompat purposes, we are using keywords.
33
+ * x-small is for IE < 6 and IE6 quirks mode.
34
+ */
35
+ body {font:13px arial,helvetica,clean,sans-serif;font-size:small;}
36
+ table {font-size:inherit;}
37
+ /**
38
+ * 99% for safari; 100% is too large
39
+ */
40
+ select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}
41
+ /**
42
+ * Bump up !IE to get to 13px equivalent
43
+ */
44
+ pre, code {font:115% monospace;font-size:100%;}
45
+ /**
46
+ * Default line-height based on font-size rather than "computed-value"
47
+ * see: http://www.w3.org/TR/CSS21/visudet.html#line-height
48
+ */
49
+ body * {line-height:1.22em;}
50
+
51
+
52
+ /**
53
+ * Use this table for computing consistent font sizes:
54
+ *
55
+ * point size: use this percent:
56
+ * 10 77%
57
+ * 11 85%
58
+ * 12 92%
59
+ * 13 100%
60
+ * 14 107%
61
+ * 15 114%
62
+ * 16 122%
63
+ * 17 129%
64
+ * 18 136%
65
+ * 19 144%
66
+ * 20 152%
67
+ * 21 159%
68
+ * 22 167%
69
+ * 23 174%
70
+ * 24 182%
71
+ * 25 189%
72
+ * 26 197%
73
+ */
74
+
75
+ /**
76
+ * END YAHOO LICENSED CODE
77
+ */
78
+
79
+ /**
80
+ * =================================================================
81
+ * INPUT DEFINITIONS
82
+ * =================================================================
83
+ */
84
+
85
+ input[type=button]
86
+ {
87
+ border-width:1px;
88
+ padding: 2px 7.5px 2px 7.5px;
89
+ margin: 0;
90
+ }
91
+
92
+ input[type=text]
93
+ {
94
+ padding: 2.5px 4.5px 2.5px 4.5px;
95
+ margin-top: 1px;
96
+ font-size: 107%;
97
+ }
98
+
99
+ input[type=password]
100
+ {
101
+ padding: 2.5px 4.5px 2.5px 4.5px;
102
+ margin-top: 1px;
103
+ font-size: 107%;
104
+ }
105
+
106
+ input[type=file]
107
+ {
108
+ padding: 2.5px 4.5px 2.5px 4.5px;
109
+ margin-top: 1px;
110
+ font-size: 107%;
111
+ }
112
+
113
+ /**
114
+ * =================================================================
115
+ * FONT SIZE DEFINITIONS
116
+ * =================================================================
117
+ */
118
+ .xlarge_text
119
+ {
120
+ font-size:205%;
121
+ }
122
+
123
+ .large_text
124
+ {
125
+ font-size:152%;
126
+ }
127
+
128
+ .medium_text
129
+ {
130
+ font-size:122%;
131
+ }
132
+
133
+ .regular_text
134
+ {
135
+ font-size:92%;
136
+ }
137
+
138
+ .small_text
139
+ {
140
+ font-size: 85%;
141
+ font-family: Arial, Helvetica, sans-serif;
142
+ }
143
+
144
+ .xsmall_text
145
+ {
146
+ font-size: 77%;
147
+ font-family: Arial, Helvetica, sans-serif;
148
+ }
149
+
150
+ strong
151
+ {
152
+ font-weight: bold;
153
+ font-size: 105%;
154
+ border:none;
155
+ border-bottom:1px dotted #eee;
156
+ }
157
+
158
+ /**
159
+ * =================================================================
160
+ * TEXT COLOR DEFINITIONS - BY FUNCTIONAL TYPE
161
+ * =================================================================
162
+ */
163
+
164
+ .info_color
165
+ {
166
+ color:#999999;
167
+ }
168
+
169
+ .fieldlabel_color
170
+ {
171
+ color:#817A71;
172
+ }
173
+
174
+ .error_color
175
+ {
176
+ color:#FF0000;
177
+ }
178
+
179
+ .fieldvalue_color
180
+ {
181
+ color:#000099;
182
+ }
183
+
184
+ /**
185
+ * =================================================================
186
+ * TEXT COLOR DEFINITIONS - BY THEME
187
+ * =================================================================
188
+ */
189
+
190
+ .primary_color
191
+ {
192
+ color:#000099;
193
+ }
194
+
195
+ .secondary_color
196
+ {
197
+ color:#99cc00;
198
+ }
199
+
200
+ .trinary_color
201
+ {
202
+ color:#FF9900;
203
+ }
204
+
205
+ .primary_light_color
206
+ {
207
+ color:#336699;
208
+ }
209
+
210
+ /**
211
+ * =================================================================
212
+ * STYLES BY HTML ELEMENT TYPE
213
+ * =================================================================
214
+ */
215
+
216
+ a
217
+ {
218
+ color:#850001;
219
+ text-decoration:none;
220
+ }
221
+
222
+ a:hover
223
+ {
224
+ color: #000099;
225
+ }
226
+
227
+ body
228
+ {
229
+ font-family:Geneva, Arial, Helvetica, sans-serif;
230
+ padding: 0px;
231
+ margin: 0px;
232
+ }
233
+
234
+
235
+ /**
236
+ * =================================================================
237
+ * EFFECT STYLES
238
+ * =================================================================
239
+ */
240
+
241
+ .shadow
242
+ {
243
+ position: relative;
244
+ background-color: #b2ba9e;
245
+ color: inherit;
246
+ padding:1px;
247
+ }
248
+
249
+ .shadow_box_selected
250
+ {
251
+ position: relative;
252
+ border:1px solid #b2ba9e;
253
+ color: inherit;
254
+ padding:0;
255
+ margin:0;
256
+ border-right:none;
257
+ }
258
+
259
+
260
+ .underline
261
+ {
262
+ border-bottom-width:1px;
263
+ border-bottom-style:dotted;
264
+ border-bottom-color:inherit;
265
+ }
266
+
267
+
268
+ /**
269
+ * common decorative box styles which can be used for displaying
270
+ * important information or prompt the user to do something
271
+ */
272
+
273
+ .noteBox
274
+ {
275
+ margin:0px auto;
276
+ padding: 5px;
277
+ border-style: solid;
278
+ border-width: 1px;
279
+ border-color: #F0C000;
280
+ background-color: #FFFFCE;
281
+ }
282
+
283
+ .warningBox
284
+ {
285
+ margin:0px auto;
286
+ padding: 5px;
287
+ border-style: solid;
288
+ border-width: 1px;
289
+ border-color: #c00;
290
+ background-color: #fcc;
291
+ }
292
+
293
+ .infoBox
294
+ {
295
+ margin:0px auto;
296
+ padding: 5px;
297
+ border-style: solid;
298
+ border-width: 1px;
299
+ border-color: #3c78b5;
300
+ background-color: #D8E4F1;
301
+ }
302
+
303
+ .tipBox
304
+ {
305
+ margin:0px auto;
306
+ padding: 5px;
307
+ border-style: solid;
308
+ border-width: 1px;
309
+ border-color: #090;
310
+ background-color: #dfd;
311
+ }
312
+
313
+ .highlight
314
+ {
315
+ padding:2px;
316
+ background-color:#ffffcc;
317
+ }
318
+
319
+ /**
320
+ * spacer utilities which can be used for a little more finer control
321
+ * of positioning
322
+ */
323
+
324
+ .verticalSpacer
325
+ {
326
+ height:10px;
327
+ }
328
+
329
+ .horizontalSpacer
330
+ {
331
+ width:10px;
332
+ }
333
+