cdd-metric_fu 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. data/.document +7 -0
  2. data/.gitignore +24 -0
  3. data/HISTORY +182 -0
  4. data/MIT-LICENSE +22 -0
  5. data/Manifest.txt +25 -0
  6. data/README.rdoc +20 -0
  7. data/Rakefile +59 -0
  8. data/TODO +9 -0
  9. data/VERSION +1 -0
  10. data/cdd-metric_fu.gemspec +200 -0
  11. data/home_page/back_all.jpg +0 -0
  12. data/home_page/churn.gif +0 -0
  13. data/home_page/flay.gif +0 -0
  14. data/home_page/flog.gif +0 -0
  15. data/home_page/footer.gif +0 -0
  16. data/home_page/header.jpg +0 -0
  17. data/home_page/img09.gif +0 -0
  18. data/home_page/index.html +277 -0
  19. data/home_page/rcov.gif +0 -0
  20. data/home_page/reek.gif +0 -0
  21. data/home_page/roodi.gif +0 -0
  22. data/home_page/saikuro.gif +0 -0
  23. data/home_page/stats.gif +0 -0
  24. data/home_page/styles.css +245 -0
  25. data/home_page/title.gif +0 -0
  26. data/home_page/title_back.gif +0 -0
  27. data/lib/base/base_template.rb +145 -0
  28. data/lib/base/configuration.rb +188 -0
  29. data/lib/base/generator.rb +167 -0
  30. data/lib/base/graph.rb +47 -0
  31. data/lib/base/md5_tracker.rb +52 -0
  32. data/lib/base/report.rb +100 -0
  33. data/lib/generators/churn.rb +34 -0
  34. data/lib/generators/flay.rb +35 -0
  35. data/lib/generators/flog.rb +172 -0
  36. data/lib/generators/rcov.rb +82 -0
  37. data/lib/generators/reek.rb +64 -0
  38. data/lib/generators/roodi.rb +33 -0
  39. data/lib/generators/saikuro.rb +221 -0
  40. data/lib/generators/stats.rb +59 -0
  41. data/lib/graphs/engines/bluff.rb +101 -0
  42. data/lib/graphs/engines/gchart.rb +120 -0
  43. data/lib/graphs/flay_grapher.rb +19 -0
  44. data/lib/graphs/flog_grapher.rb +39 -0
  45. data/lib/graphs/grapher.rb +18 -0
  46. data/lib/graphs/rails_best_practices_grapher.rb +24 -0
  47. data/lib/graphs/rcov_grapher.rb +19 -0
  48. data/lib/graphs/reek_grapher.rb +31 -0
  49. data/lib/graphs/roodi_grapher.rb +19 -0
  50. data/lib/graphs/stats_grapher.rb +22 -0
  51. data/lib/metric_fu.rb +32 -0
  52. data/lib/metric_fu/railtie.rb +10 -0
  53. data/lib/tasks/metric_fu.rake +22 -0
  54. data/lib/templates/awesome/awesome_template.rb +37 -0
  55. data/lib/templates/awesome/churn.html.erb +58 -0
  56. data/lib/templates/awesome/css/buttons.css +82 -0
  57. data/lib/templates/awesome/css/default.css +91 -0
  58. data/lib/templates/awesome/css/integrity.css +335 -0
  59. data/lib/templates/awesome/css/reset.css +7 -0
  60. data/lib/templates/awesome/flay.html.erb +34 -0
  61. data/lib/templates/awesome/flog.html.erb +53 -0
  62. data/lib/templates/awesome/index.html.erb +31 -0
  63. data/lib/templates/awesome/layout.html.erb +30 -0
  64. data/lib/templates/awesome/rcov.html.erb +42 -0
  65. data/lib/templates/awesome/reek.html.erb +40 -0
  66. data/lib/templates/awesome/roodi.html.erb +27 -0
  67. data/lib/templates/awesome/saikuro.html.erb +71 -0
  68. data/lib/templates/awesome/stats.html.erb +51 -0
  69. data/lib/templates/javascripts/bluff-min.js +1 -0
  70. data/lib/templates/javascripts/excanvas.js +35 -0
  71. data/lib/templates/javascripts/js-class.js +1 -0
  72. data/lib/templates/standard/churn.html.erb +31 -0
  73. data/lib/templates/standard/default.css +64 -0
  74. data/lib/templates/standard/flay.html.erb +34 -0
  75. data/lib/templates/standard/flog.html.erb +53 -0
  76. data/lib/templates/standard/index.html.erb +38 -0
  77. data/lib/templates/standard/rcov.html.erb +43 -0
  78. data/lib/templates/standard/reek.html.erb +42 -0
  79. data/lib/templates/standard/roodi.html.erb +29 -0
  80. data/lib/templates/standard/saikuro.html.erb +84 -0
  81. data/lib/templates/standard/standard_template.rb +26 -0
  82. data/lib/templates/standard/stats.html.erb +55 -0
  83. data/spec/base/base_template_spec.rb +161 -0
  84. data/spec/base/configuration_spec.rb +274 -0
  85. data/spec/base/generator_spec.rb +244 -0
  86. data/spec/base/graph_spec.rb +32 -0
  87. data/spec/base/md5_tracker_spec.rb +57 -0
  88. data/spec/base/report_spec.rb +139 -0
  89. data/spec/generators/churn_spec.rb +43 -0
  90. data/spec/generators/flay_spec.rb +110 -0
  91. data/spec/generators/flog_spec.rb +262 -0
  92. data/spec/generators/rcov_spec.rb +159 -0
  93. data/spec/generators/reek_spec.rb +125 -0
  94. data/spec/generators/saikuro_spec.rb +58 -0
  95. data/spec/generators/stats_spec.rb +74 -0
  96. data/spec/graphs/engines/bluff_spec.rb +17 -0
  97. data/spec/graphs/engines/gchart_spec.rb +109 -0
  98. data/spec/graphs/flay_grapher_spec.rb +37 -0
  99. data/spec/graphs/flog_grapher_spec.rb +45 -0
  100. data/spec/graphs/grapher_spec.rb +29 -0
  101. data/spec/graphs/rcov_grapher_spec.rb +37 -0
  102. data/spec/graphs/reek_grapher_spec.rb +47 -0
  103. data/spec/graphs/roodi_grapher_spec.rb +37 -0
  104. data/spec/graphs/stats_grapher_spec.rb +44 -0
  105. data/spec/resources/saikuro/app/controllers/sessions_controller.rb_cyclo.html +10 -0
  106. data/spec/resources/saikuro/app/controllers/users_controller.rb_cyclo.html +16 -0
  107. data/spec/resources/saikuro/index_cyclo.html +155 -0
  108. data/spec/resources/saikuro_sfiles/thing.rb_cyclo.html +11 -0
  109. data/spec/resources/yml/20090630.yml +7913 -0
  110. data/spec/spec.opts +6 -0
  111. data/spec/spec_helper.rb +7 -0
  112. metadata +285 -0
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,277 @@
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">
3
+ <head>
4
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
5
+ <title>metric_fu: A Ruby Gem for Easy Metric Report Generation</title>
6
+ <meta name="keywords" content="metric_fu rails metrics saikuro flog flay roodi reek cyclomatic complexity rcov coverage gem" />
7
+ <meta name="description" content="Ruby Gem for Easy Metric Report Generation" />
8
+ <link href="styles.css" rel="stylesheet" type="text/css" />
9
+ </head>
10
+ <body>
11
+ <div id="main">
12
+ <!-- header begins -->
13
+ <div id="header">
14
+
15
+ <div id="logo"><a href="#">metric_fu</a></div>
16
+ <div id="buttons">
17
+ <ul><li>A Ruby Gem for Easy Metric Report Generation</li></ul>
18
+ </div>
19
+
20
+ </div>
21
+ <!-- header ends -->
22
+ <!-- content begins -->
23
+ <div id="content">
24
+ <div id="right">
25
+ <div id="sidebar">
26
+ <ul>
27
+ <li>
28
+ <h2>Links</h2>
29
+ <ul>
30
+ <li><a href="http://groups.google.com/group/metric_fu">
31
+ Google Group
32
+ </a>
33
+ </li>
34
+ <li><a href="http://github.com/jscruggs/metric_fu">
35
+ SCM
36
+ </a>
37
+ </li>
38
+ <li><a href="http://jakescruggs.blogspot.com/">
39
+ Jake Scruggs' Blog (lead developer)
40
+ </a>
41
+ </li>
42
+ </ul>
43
+ </li>
44
+ </ul>
45
+ </div>
46
+ <!-- end #sidebar -->
47
+ </div>
48
+ <div id="left">
49
+ <h1>About metric_fu 1.3.0</h1>
50
+ <div>
51
+ <p><br/>
52
+ Metric_fu is a set of rake tasks that make it easy to generate metrics reports. It uses
53
+ <a href="http://saikuro.rubyforge.org/">Saikuro</a>,
54
+ <a href="http://ruby.sadi.st/Flog.html">Flog</a>,
55
+ <a href="http://ruby.sadi.st/Flay.html">Flay</a>,
56
+ <a href="http://eigenclass.org/hiki.rb?rcov">Rcov</a>,
57
+ <a href="http://github.com/kevinrutherford/reek">Reek</a>,
58
+ <a href="http://github.com/martinjandrews/roodi">Roodi</a>,
59
+ <a href="http://github.com/danmayer/churn">Churn</a>,
60
+ <a href="http://subversion.tigris.org/">Subversion</a>,
61
+ <a href="http://git.or.cz/">Git</a>, and
62
+ <a href="http://www.rubyonrails.org/">Rails</a>
63
+ built-in stats task to create a series of reports. It's designed to integrate easily with
64
+ <a href="http://cruisecontrolrb.thoughtworks.com/">CruiseControl.rb</a>
65
+ by placing files in the Custom Build Artifacts folder.
66
+ </p>
67
+ <br/>
68
+ <p>
69
+ New in metric_fu 1.3.0 is the ability to configure what RAILS_ENV you what Rcov to run under so it won't clobber any other tests that might be running (in continuous integration). You can also configure the minimum Flay score to record (the default minimum score 100). There's now some cool tooltip hover info in the graphs (thanks Édouard Brière).
70
+ </p>
71
+ <br/>
72
+ <p>
73
+ In metric_fu 1.2.0 the graphing has been overhauled. Now you can use either Bluff (the default) or Google Charts to make your graphs. An upside of moving away from Gruff is that metric_fu no longer depends on ImageMagick/rmagick. Carl Youngblood submitted this feature so thank him if you like it. See the Graphing section below for how to configure.
74
+ </p>
75
+ <br/>
76
+ <h2>Installation:</h2>
77
+ <pre>sudo gem install metric_fu</pre>
78
+ <br/>
79
+ <p>Then in your Rakefile:</p>
80
+ <br/>
81
+ <pre>require 'metric_fu'</pre>
82
+ <br/>
83
+ <p>
84
+ If you like to vendor gems, you can unpack metric_fu into vendor/gems and require it like so:
85
+ </p>
86
+ <br/>
87
+ <pre>require(File.join(RAILS_ROOT, 'vendor', 'gems', 'metric_fu-1.3.0', 'lib', 'metric_fu'))</pre>
88
+ <br/>
89
+ <p>Then you don't have to install it on every box you run it on.</p>
90
+ <br/>
91
+ <p>Later versions of Rails like to manage your gems for you, so you can put this in your test.rb file:</p>
92
+ <br/>
93
+ <pre>config.gem 'metric_fu', :version => '1.3.0', :lib => 'metric_fu'</pre>
94
+ <br/>
95
+ <p>And then issue this command:</p>
96
+ <br/>
97
+ <pre>
98
+ $ rake gems:unpack RAILS_ENV=test
99
+ </pre>
100
+ <br/>
101
+ <p>That way Rails won't yell at you every time you run a Rake task:</p>
102
+ <br/>
103
+ <pre>
104
+ config.gem: Unpacked gem metric_fu-1.3.0 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
105
+ </pre>
106
+ <br/>
107
+ <p>
108
+ I hate being yelled at.
109
+ </p>
110
+
111
+ <h2>Output:</h2>
112
+ <table>
113
+ <tr>
114
+ <td><a href="flog.gif"><img src="flog.gif" width="250"></a></td>
115
+ <td><a href="flay.gif"><img src="flay.gif" width="250"></a></td>
116
+ <tr>
117
+ <td><a href="churn.gif"><img src="churn.gif" width="250"></a></td>
118
+ <td><a href="saikuro.gif"><img src="saikuro.gif" width="250"></a></td>
119
+ </tr>
120
+ <tr>
121
+ <td><a href="reek.gif"><img src="reek.gif" width="250"></a></td>
122
+ <td><a href="roodi.gif"><img src="roodi.gif" width="250"></a></td>
123
+ </tr>
124
+ <tr>
125
+ <td><a href="rcov.gif"><img src="rcov.gif" width="250"></a></td>
126
+ <td><a href="stats.gif"><img src="stats.gif" width="250"></a></td>
127
+ </tr>
128
+ </table>
129
+ <p><br/>
130
+ <h2>Usage:</h2>
131
+ Out of the box metric_fu provides this tasks:
132
+ <ul>
133
+ <li>rake metrics:all # Generate coverage, cyclomatic complexity, flog, flay, reek, roodi, stats... </li>
134
+ </ul>
135
+ <br/>
136
+ I recommend using CruiseControl.rb to set up a metrics build. See the CruiseControl.rb online docs for more info on how to set up cc.rb and, once you've got that figured out, change the cruise_config.rb file inside your project to have these lines:
137
+ <br/><br/>
138
+ <pre>project.rake_task = 'metrics:all'</pre>
139
+ <pre>project.scheduler.polling_interval = 24.hours</pre>
140
+ <br/>
141
+ Which will check for updates every 24 hours and run all the metric_fu rake tasks (migrating your test db first). The output will be visible from an individual build's detail page.
142
+ </p>
143
+ <br/>
144
+
145
+ <h2>Configuration:</h2>
146
+ <p>Metric_fu can be customized to your liking by altering the defaults in your Rakefile:</p>
147
+ <pre>
148
+ MetricFu::Configuration.run do |config|
149
+ #define which metrics you want to use
150
+ config.metrics = [:churn, :saikuro, :stats, :flog, :flay, :reek, :roodi, :rcov]
151
+ config.graphs = [:flog, :flay, :reek, :roodi, :rcov]
152
+ config.flay = { :dirs_to_flay => ['app', 'lib'],
153
+ :minimum_score => 100 }
154
+ config.flog = { :dirs_to_flog => ['app', 'lib'] }
155
+ config.reek = { :dirs_to_reek => ['app', 'lib'] }
156
+ config.roodi = { :dirs_to_roodi => ['app', 'lib'] }
157
+ config.saikuro = { :output_directory => 'scratch_directory/saikuro',
158
+ :input_directory => ['app', 'lib'],
159
+ :cyclo => "",
160
+ :filter_cyclo => "0",
161
+ :warn_cyclo => "5",
162
+ :error_cyclo => "7",
163
+ :formater => "text"} #this needs to be set to "text"
164
+ config.churn = { :start_date => "1 year ago", :minimum_churn_count => 10}
165
+ config.rcov = { :environment => 'test',
166
+ :test_files => ['test/**/*_test.rb',
167
+ 'spec/**/*_spec.rb'],
168
+ :rcov_opts => ["--sort coverage",
169
+ "--no-html",
170
+ "--text-coverage",
171
+ "--no-color",
172
+ "--profile",
173
+ "--rails",
174
+ "--exclude /gems/,/Library/,spec"]}
175
+ config.graph_engine = :bluff
176
+ end
177
+ </pre>
178
+ Note: if you don't want one of the metrics to run (like rcov), make sure you don't try to graph it (which will explode). Set config.graphs to exactly the graphs you want. Set config.graphs to an empty array (config.graphs = []) if you want no graphing at all.
179
+ </p>
180
+
181
+ <p><br/>
182
+ <h2>Graphing</h2>
183
+ MetricFu uses Bluff for graphing (a Javascript library) by default. If you'd rather use Google Charts you can set 'config.graph_engine = :gchart' in the config. You'll have to install the googlecharts gem, of course.
184
+ </p>
185
+
186
+ <p><br/>
187
+ <h2>Notes on metrics:coverage</h2>
188
+ When creating a coverage report, metric_fu runs all the tests in the test folder and specs in spec folder using Rcov. You can configure what files it should run and the RAILS_ENV (by setting 'environment') it runs under. See the configuration section above for details.
189
+ </p>
190
+ <p><br/>
191
+ <h2>Notes on metrics:saikuro</h2>
192
+ Saikuro is bundled with metric_fu so you don't have to install it. Look at the SAIKURO_README (or the internet) for more documentation on Saikuro.
193
+ <br/><br/>
194
+ </p>
195
+ <p><br/>
196
+ <h2>Notes on metrics:flay</h2>
197
+ Flay analyzes ruby code for structural similarities.
198
+ You can configure which directories need to be flayed.
199
+ The defaults are 'lib' for non Rails projects and ['app', 'lib'] for Rails projects.
200
+ By default, metric_fu ignores scores under 100. You can configure the minimum_score (see configuration section above).
201
+ </p>
202
+
203
+ <p><br/>
204
+ <h2>Notes on metrics:flog</h2>
205
+ Note: Flog 2.1.2 has some issues with Ruby 1.8.6 -- try using Flog 2.1.0 (Flog 2.1.2 does, however, work fine with Ruby 1.9.1)
206
+ <br/>
207
+ Flog is another way of measuring complexity (or tortured code as the Flog authors like to put it). You should check out the awesome, and a little scary, <a href="http://ruby.sadi.st/Flog.html">Flog website</a> for more info.
208
+ </p>
209
+ <p><br/>
210
+ <h2>Notes on metrics:reek</h2>
211
+ Reek detects common code smells in ruby code.
212
+ You can configure which directories need to be checked.
213
+ The defaults are 'lib' for non Rails projects and ['app', 'lib'] for Rails projects.
214
+ </p>
215
+
216
+ <p><br/>
217
+ <h2>Notes on metrics:roodi</h2>
218
+ Roodi parses your Ruby code and warns you about design issues you have based on the checks that is has configured.
219
+ You can configure which directories need to be checked.
220
+ The defaults are 'lib' for non Rails projects and ['app', 'lib'] for Rails projects.
221
+ </p>
222
+ <p><br/>
223
+ <h2>Notes on metrics:stats</h2>
224
+ This is just 'rake stats' put into a file. On my projects I like to be able to look at CruiseControl and get stats about the app at different points in time.
225
+ </p>
226
+ <p><br/>
227
+ <h2>Notes on metrics:churn</h2>
228
+ Files that change a lot in your project may be bad a sign. This task uses svn or git's log to identify those files and put them in a report.
229
+ <br/>
230
+ <br/>
231
+ </p>
232
+ <br/>
233
+ <p>Metric_fu began its life as a plugin for Rails that generated code metrics reports. As of version 0.7.0, metric_fu is a gem (owing to the excellent work done by Sean Soper) and is hosted on GitHub at <a href="http://github.com/jscruggs/metric_fu">http://github.com/jscruggs/metric_fu</a>. </p>
234
+ <p><br/>
235
+ <h2>Questions?</h2>
236
+ <p>Use the Google Group: <a href="http://groups.google.com/group/metric_fu">http://groups.google.com/group/metric_fu</a></p>
237
+ <br/>
238
+ <h2>Thanks</h2>
239
+ I'd like to thank the authors of Saikuro, Subversion, Flog, Rcov, CruiseControl.rb, and Rails for creating such excellent open source products. Also many thanks go to
240
+ <a href="http://arko.net/">Andre Arko</a>,
241
+ <a href="http://deheus.net/petrik">Petrik de Heus</a>,
242
+ <a href="http://seansoper.com/">Sean Soper</a>,
243
+ <a href="http://www.perilled.com/">Erik St Martin</a>,
244
+ <a href="http://gregorowicz.blogspot.com/">Andy Gregorowicz</a>,
245
+ <a href="http://github.com/bastien/">Bastien</a>,
246
+ <a href="http://schubert.cx/">Michael Schubert</a>,
247
+ <a href="http://kseebaldt.blogspot.com/">Kurtis Seebaldt</a>,
248
+ <a href="http://www.workingwithrails.com/person/11263-toby-tripp">Toby Tripp</a>,
249
+ <a href="http://www.aliaghareza.com">Ali Aghareza</a>,
250
+ <a href="http://www.pgrs.net/">Paul Gross</a>, and
251
+ <a href="http://chirdeepshetty.net/">Chirdeep Shetty</a>
252
+ for their contributions to metric_fu.
253
+ </p>
254
+ </div>
255
+
256
+ </div>
257
+
258
+ </div>
259
+ </div>
260
+ <!-- content ends -->
261
+ <!-- footer begins -->
262
+ <div id="metamorph2"><div id="footer">
263
+ <p>Copyright &copy; 2008. Designed by <a href="http://www.metamorphozis.com/" title="Free Web Templates">Free Web Templates</a></p>
264
+ </div></div>
265
+ <!-- footer ends -->
266
+
267
+ <script type="text/javascript">
268
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
269
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
270
+ </script>
271
+ <script type="text/javascript">
272
+ var pageTracker = _gat._getTracker("UA-1908573-3");
273
+ pageTracker._initData();
274
+ pageTracker._trackPageview();
275
+ </script>
276
+ </body>
277
+ </html>
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,245 @@
1
+ /*
2
+ Design by Metamorphosis Design
3
+ http://www.metamorphozis.com
4
+ Released for free under a Creative Commons Attribution 2.5 License
5
+ */
6
+
7
+ a:link {
8
+ color: #3886E0;
9
+ }
10
+
11
+ a:hover, {
12
+ text-decoration: underline;
13
+ color: #FF0000;
14
+ }
15
+
16
+ a:visited {
17
+ color: #3886E0;
18
+ }
19
+
20
+ *
21
+ {
22
+ border: 0;
23
+ margin: 0;
24
+ }
25
+
26
+ body
27
+ {
28
+ background: #ffffff url(back_all.jpg) repeat-x top;
29
+ font: 12px Tahoma, Arial, Helvetica, sans-serif;
30
+ color: #666666;
31
+ margin-top: 10px;
32
+ }
33
+
34
+ #main
35
+ {
36
+ margin: 0 auto;
37
+ width: 912px;
38
+ background: url(table_back.jpg) repeat-y;
39
+ }
40
+
41
+ #header
42
+ {
43
+ background: url(header.jpg) no-repeat;
44
+ width: 912px;
45
+ height: 262px;
46
+ }
47
+
48
+ #logo
49
+ {
50
+ padding-left: 40px;
51
+ text-align: left;
52
+ padding-top: 40px;
53
+ height: 40px;
54
+ }
55
+
56
+ #logo a {
57
+ text-decoration: none;
58
+ text-transform: lowercase;
59
+ font-style: italic;
60
+ font-size: 16px;
61
+ color: #000000;
62
+ font-weight: bold;
63
+ }
64
+
65
+
66
+ #logo H2 a
67
+ {
68
+ font-size: 10px;
69
+ }
70
+
71
+ #buttons
72
+ {
73
+ padding-top: 140px;
74
+ height: 40px;
75
+ padding-left: 120px;
76
+ }
77
+
78
+ #buttons li {
79
+ display: inline;
80
+ display: block;
81
+ float: left;
82
+ height: 30px;
83
+ margin-left: 1px;
84
+ text-align: center;
85
+ text-decoration: none;
86
+ color: #000000;
87
+ font-weight: bold;
88
+ font-size: 16px;
89
+ padding-top: 10px;
90
+ }
91
+
92
+ #buttons a {
93
+ display: block;
94
+ float: left;
95
+ width: 120px;
96
+ height: 30px;
97
+ margin-left: 1px;
98
+ text-align: center;
99
+ text-decoration: none;
100
+ color: #000000;
101
+ font-weight: bold;
102
+ font-size: 16px;
103
+ padding-top: 10px;
104
+
105
+ }
106
+
107
+ #buttons a:hover {
108
+ text-decoration: underline;
109
+ color: #FF0000;
110
+ }
111
+
112
+ #content
113
+ {
114
+ width: 870px;
115
+ padding: 15px;
116
+ }
117
+
118
+ #left
119
+ {
120
+ width: 580px;
121
+ padding: 10px;
122
+ }
123
+
124
+ #left H1
125
+ {
126
+ color: #99A067;
127
+ margin: 0;
128
+ padding: 0;
129
+ font-size: 24px;
130
+ }
131
+ #left H2
132
+ {
133
+ color: #99A067;
134
+ margin: 0;
135
+ padding: 0;
136
+ font-size: 18px;
137
+ padding-top: 10px;
138
+ }
139
+
140
+ #left a
141
+ {
142
+ color: #99A067;
143
+ }
144
+
145
+ #left a:hover, {
146
+ text-decoration: none;
147
+ color: #FF0000;
148
+ }
149
+
150
+ #left a:visited {
151
+ color: #99A067;
152
+ }
153
+
154
+ .small
155
+ {
156
+ margin: 15px;
157
+ padding: 5px;
158
+ border: 1px solid #99A067
159
+ }
160
+
161
+ #right
162
+ {
163
+ float: right;
164
+ width: 254px;
165
+ }
166
+
167
+ #sidebar
168
+ {
169
+ width: 254px;
170
+ }
171
+
172
+ #sidebar ul
173
+ {
174
+ margin: 0;
175
+ padding: 0;
176
+ list-style: none;
177
+ background: url(title_back.gif) no-repeat;
178
+ }
179
+
180
+ #sidebar li
181
+ {
182
+ margin-bottom: 15px;
183
+
184
+ }
185
+
186
+ #sidebar li ul {
187
+ padding: 10px;
188
+ border-top: none;
189
+ }
190
+
191
+ #sidebar li li {
192
+ margin: 0;
193
+ padding: 3px 0;
194
+ }
195
+
196
+
197
+ #sidebar li h2 {
198
+ height: 34px;
199
+ margin: 0;
200
+ padding: 10px 0 0 20px;
201
+ background: #ffffff url(title.gif) no-repeat;
202
+ font-size: 18px;
203
+ color: #000000;
204
+ }
205
+
206
+ #sidebar a:link {
207
+ text-decoration: none;
208
+ }
209
+
210
+ #sidebar a:hover {
211
+ text-decoration: underline;
212
+ }
213
+ #sidebar a:visited {
214
+ text-decoration: none;
215
+ }
216
+
217
+ #sidebar li a {
218
+ padding-left: 10px;
219
+ background: url(img09.gif) no-repeat 1px 5px;
220
+ }
221
+
222
+
223
+ #footer
224
+ {
225
+ background: url(footer.gif) repeat-x;
226
+ height: 52px;
227
+ font-size: 10px;
228
+ color: #99A067;
229
+ padding-top: 20px;
230
+ text-align: center;
231
+ border-top: #99A067 solid 5px;
232
+ }
233
+
234
+ #footer a
235
+ {
236
+ color: #99A067;
237
+ font-size: 10px;
238
+ text-decoration: none;
239
+ }
240
+ .padding
241
+ {
242
+ padding: 10px;
243
+ color:#FF0000;
244
+ font-weight: bold;
245
+ }