seamless 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/seamless +36 -0
- data/lib/seamless.rb +70 -0
- data/lib/seamless/active_record_extension.rb +11 -0
- data/lib/seamless/dispatcher.rb +45 -0
- data/lib/seamless/message_broker.rb +12 -0
- data/lib/seamless/message_broker_controller.rb +11 -0
- data/lib/seamless/messagebroker/inmemory_message_broker.rb +45 -0
- data/lib/seamless/migration.rb +8 -0
- data/lib/seamless/model.rb +94 -0
- data/lib/seamless/service.rb +186 -0
- data/seamless/seamless_generator.rb +181 -0
- data/seamless/templates/README +24 -0
- data/seamless/templates/admin.html +166 -0
- data/seamless/templates/application.rb +7 -0
- data/seamless/templates/css/global.css +333 -0
- data/seamless/templates/css/seamless-admin.css +281 -0
- data/seamless/templates/css/seamless.css +632 -0
- data/seamless/templates/environment.rb +65 -0
- data/seamless/templates/generate +25 -0
- data/seamless/templates/images/arch.png +0 -0
- data/seamless/templates/images/arrow_undo.png +0 -0
- data/seamless/templates/images/cell_phone.png +0 -0
- data/seamless/templates/images/confirm.png +0 -0
- data/seamless/templates/images/deny.png +0 -0
- data/seamless/templates/images/dialog_close.gif +0 -0
- data/seamless/templates/images/dialog_close_hover.gif +0 -0
- data/seamless/templates/images/email.png +0 -0
- data/seamless/templates/images/exclamation.png +0 -0
- data/seamless/templates/images/indicator.gif +0 -0
- data/seamless/templates/images/indicator2.gif +0 -0
- data/seamless/templates/images/seamless.gif +0 -0
- data/seamless/templates/images/shadow.gif +0 -0
- data/seamless/templates/images/shadowAlpha.png +0 -0
- data/seamless/templates/images/small_star.png +0 -0
- data/seamless/templates/images/table_add.png +0 -0
- data/seamless/templates/images/table_delete.png +0 -0
- data/seamless/templates/images/table_edit.png +0 -0
- data/seamless/templates/images/table_go.png +0 -0
- data/seamless/templates/images/table_refresh.png +0 -0
- data/seamless/templates/images/tag.png +0 -0
- data/seamless/templates/images/warning.png +0 -0
- data/seamless/templates/images/wizard.gif +0 -0
- data/seamless/templates/images/work_phone.png +0 -0
- data/seamless/templates/index.html +171 -0
- data/seamless/templates/js/seamless-admin.js +255 -0
- data/seamless/templates/js/seamless.js +2755 -0
- data/seamless/templates/message_broker.rb +6 -0
- data/seamless/templates/message_broker_helper.rb +2 -0
- data/seamless/templates/robots.txt +2 -0
- data/seamless/templates/routes.rb +18 -0
- data/seamless/templates/seamless.xml +5 -0
- data/seamless/templates/server +4 -0
- data/seamless/templates/test_service.rb +13 -0
- data/service/USAGE +21 -0
- data/service/service_generator.rb +59 -0
- data/service/templates/service.rb +14 -0
- 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;"> </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
|
+
|