bandit 0.0.2 → 0.0.3

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 (53) hide show
  1. data/.gitignore +1 -0
  2. data/LICENSE +674 -0
  3. data/README.rdoc +70 -2
  4. data/Rakefile +32 -0
  5. data/bandit.gemspec +2 -0
  6. data/lib/bandit.rb +52 -1
  7. data/lib/bandit/config.rb +33 -0
  8. data/lib/bandit/date_hour.rb +82 -0
  9. data/lib/bandit/exceptions.rb +10 -0
  10. data/lib/bandit/experiment.rb +63 -0
  11. data/lib/bandit/extensions/controller_concerns.rb +24 -0
  12. data/lib/bandit/extensions/string.rb +5 -0
  13. data/lib/bandit/extensions/time.rb +5 -0
  14. data/lib/bandit/extensions/view_concerns.rb +24 -0
  15. data/lib/bandit/memoizable.rb +15 -0
  16. data/lib/bandit/players/base.rb +37 -0
  17. data/lib/bandit/players/epsilon_greedy.rb +32 -0
  18. data/lib/bandit/players/round_robin.rb +7 -0
  19. data/lib/bandit/storage/base.rb +124 -0
  20. data/lib/bandit/storage/memcache.rb +34 -0
  21. data/lib/bandit/storage/memory.rb +31 -0
  22. data/lib/bandit/storage/redis.rb +37 -0
  23. data/lib/bandit/version.rb +1 -1
  24. data/lib/generators/bandit/USAGE +3 -0
  25. data/lib/generators/bandit/dashboard_generator.rb +31 -0
  26. data/lib/generators/bandit/install_generator.rb +22 -0
  27. data/lib/generators/bandit/templates/bandit.rake +20 -0
  28. data/lib/generators/bandit/templates/bandit.rb +18 -0
  29. data/lib/generators/bandit/templates/bandit.yml +16 -0
  30. data/lib/generators/bandit/templates/bandit_controller.rb +28 -0
  31. data/lib/generators/bandit/templates/dashboard/bandit.html.erb +43 -0
  32. data/lib/generators/bandit/templates/dashboard/css/application.css +7 -0
  33. data/lib/generators/bandit/templates/dashboard/css/base.css +22 -0
  34. data/lib/generators/bandit/templates/dashboard/css/toupee/buttons.css +101 -0
  35. data/lib/generators/bandit/templates/dashboard/css/toupee/forms.css +89 -0
  36. data/lib/generators/bandit/templates/dashboard/css/toupee/modules.css +30 -0
  37. data/lib/generators/bandit/templates/dashboard/css/toupee/reset.css +42 -0
  38. data/lib/generators/bandit/templates/dashboard/css/toupee/structure.css +124 -0
  39. data/lib/generators/bandit/templates/dashboard/css/toupee/typography.css +103 -0
  40. data/lib/generators/bandit/templates/dashboard/helpers/bandit_helper.rb +19 -0
  41. data/lib/generators/bandit/templates/dashboard/js/bandit.js +34 -0
  42. data/lib/generators/bandit/templates/dashboard/js/highstock.js +215 -0
  43. data/lib/generators/bandit/templates/dashboard/js/jquery.min.js +154 -0
  44. data/lib/generators/bandit/templates/dashboard/view/index.html.erb +21 -0
  45. data/lib/generators/bandit/templates/dashboard/view/show.html.erb +24 -0
  46. data/players.rdoc +22 -0
  47. data/test/config.yml +7 -0
  48. data/test/helper.rb +18 -0
  49. data/test/memcache_storage_test.rb +17 -0
  50. data/test/memory_storage_test.rb +16 -0
  51. data/test/redis_storage_test.rb +17 -0
  52. data/test/storage_test_base.rb +54 -0
  53. metadata +88 -8
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
3
+ <head>
4
+ <title>Bandit Dashboard</title>
5
+ <%= stylesheet_link_tag "bandit/application.css" %>
6
+ <%= javascript_include_tag "bandit/jquery.min.js" %>
7
+ <%= javascript_include_tag "bandit/highstock.js" %>
8
+ <%= javascript_include_tag "bandit/bandit.js" %>
9
+ </head>
10
+ <body>
11
+ <header>
12
+ <div class="container">
13
+ <div class="span-10 brand">
14
+ <h1><%= link_to "Bandit Dashboard", :controller => 'bandit', :action => 'index' %></h1>
15
+ </div>
16
+ <nav class="span-14 last">
17
+ <ul>
18
+ <li><%= link_to "index", :controller => 'bandit', :action => 'index' %></li>
19
+ </ul>
20
+ </nav>
21
+ </div>
22
+ </header>
23
+ <div class="container">
24
+ <%= yield %>
25
+ <aside class='span-3 last'>
26
+ <section class='mod'>
27
+ <header>
28
+ <h2>Experiments</h2>
29
+ </header>
30
+ <article>
31
+ <ul>
32
+ <% Bandit.experiments.each { |experiment| %>
33
+ <li><%= link_to experiment.name.to_s.titleize, url_for(:action => 'show', :id => experiment.name) %></li>
34
+ <% } %>
35
+ </ul>
36
+ </article>
37
+ </section>
38
+ </aside>
39
+ </div>
40
+ <footer>
41
+ </footer>
42
+ </body>
43
+ </html>
@@ -0,0 +1,7 @@
1
+ @import url(toupee/reset.css);
2
+ @import url(base.css);
3
+ @import url(toupee/buttons.css);
4
+ @import url(toupee/forms.css);
5
+ @import url(toupee/modules.css);
6
+ @import url(toupee/structure.css);
7
+ @import url(toupee/typography.css);
@@ -0,0 +1,22 @@
1
+
2
+ a { text-decoration: none; cursor: pointer; }
3
+ a:hover { text-decoration: underline; }
4
+ p { font-size:1.4em; }
5
+
6
+ /* HEADER
7
+ ---------------------------- */
8
+ header { margin-bottom: 20px; }
9
+ header h1 { padding: 20px 60px 10px 10px; margin: 0; background: #f1f1f1; display: inline-block; }
10
+ header h1 a { color: #aaa; text-decoration: none; }
11
+
12
+ /* NAVIGATION
13
+ ---------------------------- */
14
+ nav { margin-top: 42px; }
15
+ nav ul { display: block; margin: 0; padding: 0 0 0 8px;}
16
+ nav ul li { margin-right: 10px; display: inline; float: left; border-bottom: 5px solid #f1f1f1; }
17
+ nav ul li.current { background-color: #ccc; color: #fff; }
18
+ nav ul li a { display: block; padding: 0 30px 0 0; text-decoration: none; }
19
+
20
+ /* FOOTER
21
+ ---------------------------- */
22
+ footer { border-top: 3px solid #f1f1f1; padding: 15px 0; margin-top: 20px; }
@@ -0,0 +1,101 @@
1
+ /* BUTTONS
2
+ ========================= */
3
+ .button {
4
+ display: inline-block;
5
+ zoom: 1; /* zoom and *display = ie7 hack for display:inline-block */
6
+ *display: inline;
7
+ vertical-align: top;
8
+ margin: 1px 2px 0;
9
+ outline: none;
10
+ cursor: pointer;
11
+ text-align: center;
12
+ text-decoration: none;
13
+ font: 14px/100% Arial, Helvetica, sans-serif;
14
+ padding: .5em 2em .55em;
15
+
16
+ -webkit-border-radius: .5em;
17
+ -moz-border-radius: .5em;
18
+ border-radius: .5em;
19
+
20
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2);
21
+ -moz-box-shadow: 0 1px 2px rgba(0,0,0,.2);
22
+ box-shadow: 0 1px 2px rgba(0,0,0,.2);
23
+
24
+ color: #e9e9e9;
25
+ border: solid 1px #555;
26
+ background: #6e6e6e;
27
+ background: -webkit-gradient(linear, left top, left bottom, from(#888), to(#575757));
28
+ background: -moz-linear-gradient(top, #888, #575757);
29
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#888888', endColorstr='#575757');
30
+ }
31
+
32
+ .button:hover {
33
+ text-decoration: none;
34
+ color: #e9e9e9;
35
+ background: #616161;
36
+ background: -webkit-gradient(linear, left top, left bottom, from(#757575), to(#4b4b4b));
37
+ background: -moz-linear-gradient(top, #757575, #4b4b4b);
38
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#757575', endColorstr='#4b4b4b');
39
+ }
40
+
41
+ .button:active {
42
+ color: #afafaf;
43
+ background: -webkit-gradient(linear, left top, left bottom, from(#575757), to(#888));
44
+ background: -moz-linear-gradient(top, #575757, #888);
45
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#575757', endColorstr='#888888');
46
+ }
47
+
48
+ .button a:hover { border: none; text-decoration: none; }
49
+ .button.rounded { -moz-border-radius: 2em; -webkit-border-radius: 2em; border-radius: 2em; }
50
+ .button.medium { font-size: 12px; padding: .4em 1.5em .42em; }
51
+ .button.small { font-size: 11px; padding: .2em 1em .275em; }
52
+
53
+
54
+ /* BUTTON VARIATIONS
55
+ ========================= */
56
+
57
+ /* Third level button == Black */
58
+ .second {
59
+ color: #e8f0de;
60
+ border: solid 1px #538312;
61
+ background: #64991e;
62
+ background: -webkit-gradient(linear, left top, left bottom, from(#7db72f), to(#4e7d0e));
63
+ background: -moz-linear-gradient(top, #7db72f, #4e7d0e);
64
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7db72f', endColorstr='#4e7d0e');
65
+ }
66
+ .second:hover {
67
+ background: #538018;
68
+ background: -webkit-gradient(linear, left top, left bottom, from(#6b9d28), to(#436b0c));
69
+ background: -moz-linear-gradient(top, #6b9d28, #436b0c);
70
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#6b9d28', endColorstr='#436b0c');
71
+ }
72
+ .second:active {
73
+ color: #a9c08c;
74
+ background: -webkit-gradient(linear, left top, left bottom, from(#4e7d0e), to(#7db72f));
75
+ background: -moz-linear-gradient(top, #4e7d0e, #7db72f);
76
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4e7d0e', endColorstr='#7db72f');
77
+ }
78
+
79
+
80
+ /* Third level button == White */
81
+ .third {
82
+ color: #606060;
83
+ border: solid 1px #b7b7b7;
84
+ background: #fff;
85
+ background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed));
86
+ background: -moz-linear-gradient(top, #fff, #ededed);
87
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
88
+ }
89
+ .third:hover {
90
+ color: #606060;
91
+ background: #ededed;
92
+ background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dcdcdc));
93
+ background: -moz-linear-gradient(top, #fff, #dcdcdc);
94
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dcdcdc');
95
+ }
96
+ .third:active {
97
+ color: #999;
98
+ background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#fff));
99
+ background: -moz-linear-gradient(top, #ededed, #fff);
100
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#ffffff');
101
+ }
@@ -0,0 +1,89 @@
1
+ /* BASIC FORM STRUCTURE
2
+ ======================== */
3
+ form ul { margin: 0; padding: 0; list-style: none; }
4
+ form ul li { margin: 0; padding: 10px 0; min-height: 30px; border-bottom: 1px double #f1f1f1; }
5
+ form ul li.last { border: none; }
6
+ form label { margin: 6px 20px 2px 0; display: block; font-size: 1em; line-height: 1.5em; font-weight: bold; }
7
+ form label span { margin-right: 10px; font-size: .8em; font-weight: normal; color: #777; }
8
+ form label.remember { display: inline; font-size: 1.2em; font-weight: normal; }
9
+ form fieldset { margin-bottom: 20px; border-top: 1px solid #e1e1e1;}
10
+ form fieldset legend { padding: 0 10px 0 0; font-size: 16px; background-color: #fff;}
11
+
12
+ /* DISPLAYING A FORM INLINE */
13
+ form .inline label { float: left; }
14
+ form .inline.center label { width: 150px; text-align: right; }
15
+ form .inline.center li.submit .button { margin-left: 170px; }
16
+
17
+ /* FORM MESSAGING */
18
+ form p.message { margin: 5px 0 0 174px; font-size: .8em; line-height: 1.5em; }
19
+ form p.message strong { font-weight: bold; color: #666; }
20
+
21
+ /* INPUT TEXT
22
+ ======================== */
23
+ form fieldset input.text {
24
+ width: 215px;
25
+ padding: 5px 8px;
26
+ border-top: 1px solid #e1e1e1;
27
+ border-left: none;
28
+ border-bottom: 1px solid #fff;
29
+ border-right: 1px solid #fff;
30
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
31
+ font-size: 1.4em;
32
+ color: #333;
33
+ background-color: #f1f1f1;
34
+ -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px;
35
+ }
36
+
37
+ /* INPUT TYPE FILE
38
+ ======================== */
39
+ form fieldset input.file { padding: 5px 8px; border: 1px solid #e1e1e1; background-color: #f1f1f1; }
40
+ label.file-label { width: 79px; height: 22px; background: url("/images/btn-choose-file.gif") 0 0 no-repeat; display: block; overflow: hidden; cursor: pointer; }
41
+ label.file-label input.file { position: relative; height: 100%; width: auto; opacity: 0; -moz-opacity: 0; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0); }
42
+
43
+ /* TEXTAREA
44
+ ======================== */
45
+
46
+ form fieldset textarea { width: 400px; height: 100px; padding: 5px; border-top: 1px solid #c3c3c3; border-left: none; border-bottom: 1px solid #fff; border-right: 1px solid #fff; background-color: #f1f1f1;
47
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333;
48
+ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
49
+
50
+
51
+ /* SELECT BOX
52
+ ======================== */
53
+ form select { padding: 2px 0 2px 4px; border: 1px solid #e1e1e1; background-color: #f1f1f1; min-width: 230px;
54
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 1.4em; color: #333;
55
+ -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; }
56
+
57
+ form .inline.date select { min-width: inherit; }
58
+
59
+ /* FORM FOCUS STYLES
60
+ ======================== */
61
+ form fieldset input.text:focus,
62
+ form fieldset textarea:focus { border-top-color: #ddd; background: #d0eeff; outline-width: 0; }
63
+
64
+ /* SEARCH FORM
65
+ ======================== */
66
+ .mod ul li.searchform { padding: 5px 5px 3px 5px; }
67
+ .mod.search form fieldset { border: none; }
68
+
69
+ .searchform {
70
+ display: inline-block;
71
+ zoom: 1; /* ie7 hack for display:inline-block */
72
+ *display: inline;
73
+ border: solid 1px #d2d2d2;
74
+ padding: 5px;
75
+
76
+ -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;
77
+ -webkit-box-shadow: 0 1px 0px rgba(0,0,0,.1); -moz-box-shadow: 0 1px 0px rgba(0,0,0,.1); box-shadow: 0 1px 0px rgba(0,0,0,.1);
78
+
79
+ background: #f1f1f1;
80
+ background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed));
81
+ background: -moz-linear-gradient(top, #fff, #ededed);
82
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed'); /* ie7 */
83
+ -ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed'); /* ie8 */
84
+ }
85
+
86
+ .searchform .searchfield { background: #fff; padding: 8px; width: 470px; border: solid 1px #bcbbbb; outline: none;
87
+ -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px;
88
+ -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.2); -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.2); box-shadow: inset 0 1px 2px rgba(0,0,0,.2);
89
+ }
@@ -0,0 +1,30 @@
1
+ /* GENERIC MODULE STYLES
2
+ ============================= */
3
+ section.mod { margin-bottom: 20px; }
4
+ section.mod header { position: relative; margin: 0; padding: 0; }
5
+ section.mod header h2 { margin-bottom: 5px; border-bottom: 1px solid #e1e1e1; position: relative; }
6
+ section.mod header h2 a { border: none; }
7
+ section.mod header h2 .secondary { position: absolute; right: 0; bottom: 7px; font-size: 12px; }
8
+ section.mod article { position: relative; margin: 0; padding: 0; }
9
+ section.mod article ul { list-style: none; margin: 0 0 10px; padding: 0; }
10
+ section.mod article ul li { position: relative; border-bottom: 1px solid #f1f1f1; padding: 5px 0; }
11
+ section.mod article ul li img { float: left; margin-top: 6px; margin-left: 4px;}
12
+ section.mod footer { border: none; margin: 0; padding: 0; }
13
+
14
+ /* PLACES A BOX AROUND MODULE CONTENT */
15
+ .box {
16
+ background: rgba(0, 0, 0, .03);
17
+ border-radius: 3px;
18
+ -webkit-border-radius: 3px;
19
+ -moz-border-radius: 3px;
20
+ boder-radius: 3px;
21
+ -webkit-box-sizing: border-box;
22
+ -moz-box-sizing: border-box;
23
+ -o-box-sizing: border-box;
24
+ box-sizing: border-box;
25
+ border: 1px solid #ccc;
26
+ }
27
+
28
+ .mod.box header,
29
+ .mod.box article,
30
+ .mod.box footer { padding: 0 10px; }
@@ -0,0 +1,42 @@
1
+ /* --------------------------------------------------------------
2
+ RESET // Resets default browser CSS.
3
+ -------------------------------------------------------------- */
4
+
5
+ html, body, div, span, object, iframe,
6
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
7
+ a, abbr, acronym, address, code,
8
+ del, dfn, em, img, q, dl, dt, dd, ol, ul, li,
9
+ fieldset, form, label, legend,
10
+ table, caption, tbody, tfoot, thead, tr, th, td,
11
+ article, aside, dialog, figure, footer, header,
12
+ hgroup, nav, section {
13
+ margin: 0;
14
+ padding: 0;
15
+ border: 0;
16
+ font-weight: inherit;
17
+ font-style: inherit;
18
+ font-size: 100%;
19
+ font-family: inherit;
20
+ vertical-align: baseline;
21
+ }
22
+
23
+ article, aside, dialog, figure, footer, header,
24
+ hgroup, nav, section {
25
+ display:block;
26
+ }
27
+
28
+ body {
29
+ line-height: 1.5;
30
+ }
31
+
32
+ /* Tables still need 'cellspacing="0"' in the markup. */
33
+ table { border-collapse: separate; border-spacing: 0; }
34
+ caption, th, td { text-align: left; font-weight: normal; }
35
+ table, td, th { vertical-align: middle; }
36
+
37
+ /* Remove possible quote marks (") from <q>, <blockquote>. */
38
+ blockquote:before, blockquote:after, q:before, q:after { content: ""; }
39
+ blockquote, q { quotes: "" ""; }
40
+
41
+ /* Remove annoying border on linked images. */
42
+ a img { border: none; }
@@ -0,0 +1,124 @@
1
+ /* A container should group all your columns. */
2
+ .container { width: 950px; margin: 0 auto; }
3
+
4
+ /* Columns
5
+ -------------------------------------------------------------- */
6
+ /* Sets up basic grid floating and margin. */
7
+ .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 {
8
+ float: left;
9
+ margin-right: 10px;
10
+ }
11
+
12
+ /* The last column in a row needs this class. */
13
+ .last { margin-right: 0; }
14
+
15
+ /* Use these classes to set the width of a column. */
16
+ .span-1 {width: 30px;}
17
+ .span-2 {width: 70px;}
18
+ .span-3 {width: 110px;}
19
+ .span-4 {width: 150px;}
20
+ .span-5 {width: 190px;}
21
+ .span-6 {width: 230px;}
22
+ .span-7 {width: 270px;}
23
+ .span-8 {width: 310px;}
24
+ .span-9 {width: 350px;}
25
+ .span-10 {width: 390px;}
26
+ .span-11 {width: 430px;}
27
+ .span-12 {width: 470px;}
28
+ .span-13 {width: 510px;}
29
+ .span-14 {width: 550px;}
30
+ .span-15 {width: 590px;}
31
+ .span-16 {width: 630px;}
32
+ .span-17 {width: 670px;}
33
+ .span-18 {width: 710px;}
34
+ .span-19 {width: 750px;}
35
+ .span-20 {width: 790px;}
36
+ .span-21 {width: 830px;}
37
+ .span-22 {width: 870px;}
38
+ .span-23 {width: 910px;}
39
+ .span-24 {width:950px; margin-right:0;}
40
+
41
+ /* Add these to a column to append empty cols. */
42
+ .append-1 { padding-right: 40px;}
43
+ .append-2 { padding-right: 80px;}
44
+ .append-3 { padding-right: 120px;}
45
+ .append-4 { padding-right: 160px;}
46
+ .append-5 { padding-right: 200px;}
47
+ .append-6 { padding-right: 240px;}
48
+ .append-7 { padding-right: 280px;}
49
+ .append-8 { padding-right: 320px;}
50
+ .append-9 { padding-right: 360px;}
51
+ .append-10 { padding-right: 400px;}
52
+ .append-11 { padding-right: 440px;}
53
+ .append-12 { padding-right: 480px;}
54
+ .append-13 { padding-right: 520px;}
55
+ .append-14 { padding-right: 560px;}
56
+ .append-15 { padding-right: 600px;}
57
+ .append-16 { padding-right: 640px;}
58
+ .append-17 { padding-right: 680px;}
59
+ .append-18 { padding-right: 720px;}
60
+ .append-19 { padding-right: 760px;}
61
+ .append-20 { padding-right: 800px;}
62
+ .append-21 { padding-right: 840px;}
63
+ .append-22 { padding-right: 880px;}
64
+ .append-23 { padding-right: 920px;}
65
+
66
+ /* Add these to a column to prepend empty cols. */
67
+ .prepend-1 { padding-left: 40px;}
68
+ .prepend-2 { padding-left: 80px;}
69
+ .prepend-3 { padding-left: 120px;}
70
+ .prepend-4 { padding-left: 160px;}
71
+ .prepend-5 { padding-left: 200px;}
72
+ .prepend-6 { padding-left: 240px;}
73
+ .prepend-7 { padding-left: 280px;}
74
+ .prepend-8 { padding-left: 320px;}
75
+ .prepend-9 { padding-left: 360px;}
76
+ .prepend-10 { padding-left: 400px;}
77
+ .prepend-11 { padding-left: 440px;}
78
+ .prepend-12 { padding-left: 480px;}
79
+ .prepend-13 { padding-left: 520px;}
80
+ .prepend-14 { padding-left: 560px;}
81
+ .prepend-15 { padding-left: 600px;}
82
+ .prepend-16 { padding-left: 640px;}
83
+ .prepend-17 { padding-left: 680px;}
84
+ .prepend-18 { padding-left: 720px;}
85
+ .prepend-19 { padding-left: 760px;}
86
+ .prepend-20 { padding-left: 800px;}
87
+ .prepend-21 { padding-left: 840px;}
88
+ .prepend-22 { padding-left: 880px;}
89
+ .prepend-23 { padding-left: 920px;}
90
+
91
+ /* Border on right hand side of a column. */
92
+ .border { padding-right: 4px; margin-right: 5px; border-right: 1px solid #eee; }
93
+
94
+ /* Border with more whitespace, spans one column. */
95
+ .colborder { padding-right: 24px; margin-right: 25px; border-right: 1px solid #eee; }
96
+
97
+ /* Use this to create a horizontal ruler across a column. */
98
+ hr {
99
+ background: #ddd;
100
+ color: #ddd;
101
+ clear: both;
102
+ float: none;
103
+ width: 100%;
104
+ height: .1em;
105
+ margin: 0 0 1.45em;
106
+ border: none;
107
+ }
108
+
109
+ /* Clearing floats without extra markup
110
+ Based on How To Clear Floats Without Structural Markup by PiE
111
+ [http://www.positioniseverything.net/easyclearing.html] */
112
+
113
+ .clearfix:after, .container:after {
114
+ content: "\0020";
115
+ display: block;
116
+ height: 0;
117
+ clear: both;
118
+ visibility: hidden;
119
+ overflow:hidden;
120
+ }
121
+ .clearfix, .container {display: block;}
122
+
123
+ .clear { clear:both; }
124
+