seamless 1.0.0

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 (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
+