radiant 0.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of radiant might be problematic. Click here for more details.

Files changed (205) hide show
  1. data/CHANGELOG +1 -0
  2. data/CONTRIBUTORS +12 -0
  3. data/LICENSE +9 -0
  4. data/README +91 -0
  5. data/Rakefile +10 -0
  6. data/app/behaviors/archive_behavior.rb +42 -0
  7. data/app/behaviors/archive_day_index_behavior.rb +30 -0
  8. data/app/behaviors/archive_month_index_behavior.rb +30 -0
  9. data/app/behaviors/archive_year_index_behavior.rb +30 -0
  10. data/app/behaviors/env_behavior.rb +18 -0
  11. data/app/behaviors/page_missing_behavior.rb +31 -0
  12. data/app/controllers/admin/export_controller.rb +8 -0
  13. data/app/controllers/admin/layout_controller.rb +23 -0
  14. data/app/controllers/admin/model_controller.rb +119 -0
  15. data/app/controllers/admin/page_controller.rb +119 -0
  16. data/app/controllers/admin/snippet_controller.rb +6 -0
  17. data/app/controllers/admin/user_controller.rb +45 -0
  18. data/app/controllers/admin/welcome_controller.rb +39 -0
  19. data/app/controllers/application.rb +32 -0
  20. data/app/controllers/site_controller.rb +54 -0
  21. data/app/filters/markdown_filter.rb +9 -0
  22. data/app/filters/textile_filter.rb +9 -0
  23. data/app/helpers/admin/export_helper.rb +2 -0
  24. data/app/helpers/admin/layout_helper.rb +2 -0
  25. data/app/helpers/admin/page_helper.rb +10 -0
  26. data/app/helpers/admin/snippet_helper.rb +2 -0
  27. data/app/helpers/admin/user_helper.rb +2 -0
  28. data/app/helpers/admin/welcome_helper.rb +2 -0
  29. data/app/helpers/application_helper.rb +141 -0
  30. data/app/helpers/site_helper.rb +2 -0
  31. data/app/models/archive_finder.rb +66 -0
  32. data/app/models/behavior.rb +194 -0
  33. data/app/models/layout.rb +13 -0
  34. data/app/models/page.rb +91 -0
  35. data/app/models/page_context.rb +526 -0
  36. data/app/models/page_part.rb +13 -0
  37. data/app/models/radiant/config.rb +53 -0
  38. data/app/models/radiant/exporter.rb +11 -0
  39. data/app/models/response_cache.rb +112 -0
  40. data/app/models/snippet.rb +16 -0
  41. data/app/models/status.rb +31 -0
  42. data/app/models/text_filter.rb +11 -0
  43. data/app/models/user.rb +70 -0
  44. data/app/models/user_action_observer.rb +13 -0
  45. data/app/views/admin/layout/index.rhtml +38 -0
  46. data/app/views/admin/layout/new.rhtml +37 -0
  47. data/app/views/admin/layout/remove.rhtml +17 -0
  48. data/app/views/admin/page/_node.rhtml +51 -0
  49. data/app/views/admin/page/_part.rhtml +17 -0
  50. data/app/views/admin/page/children.rhtml +4 -0
  51. data/app/views/admin/page/index.rhtml +172 -0
  52. data/app/views/admin/page/new.rhtml +164 -0
  53. data/app/views/admin/page/remove.rhtml +14 -0
  54. data/app/views/admin/snippet/index.rhtml +36 -0
  55. data/app/views/admin/snippet/new.rhtml +28 -0
  56. data/app/views/admin/snippet/remove.rhtml +16 -0
  57. data/app/views/admin/user/index.rhtml +43 -0
  58. data/app/views/admin/user/new.rhtml +48 -0
  59. data/app/views/admin/user/preferences.rhtml +29 -0
  60. data/app/views/admin/user/remove.rhtml +16 -0
  61. data/app/views/admin/welcome/login.rhtml +51 -0
  62. data/app/views/layouts/application.rhtml +75 -0
  63. data/app/views/site/not_found.rhtml +3 -0
  64. data/bin/radiant +305 -0
  65. data/config/boot.rb +80 -0
  66. data/config/database.mysql.yml +20 -0
  67. data/config/database.postgresql.yml +20 -0
  68. data/config/database.sqlite.yml +20 -0
  69. data/config/environment.rb +76 -0
  70. data/config/environments/development.rb +20 -0
  71. data/config/environments/production.rb +22 -0
  72. data/config/environments/test.rb +20 -0
  73. data/config/locomotive.yml +6 -0
  74. data/config/routes.rb +64 -0
  75. data/db/development_structure.sql +80 -0
  76. data/db/migrate/001_create_radiant_tables.rb +73 -0
  77. data/db/migrate/002_insert_initial_data.rb +45 -0
  78. data/db/migrate/003_rename_behavior_column.rb +9 -0
  79. data/db/migrate/004_rename_filter_column.rb +11 -0
  80. data/db/migrate/005_add_virtual_column_to_page.rb +9 -0
  81. data/db/migrate/006_integer_columns_to_boolean.rb +11 -0
  82. data/db/migrate/007_remove_virtual_column_from_page.rb +9 -0
  83. data/db/migrate/008_add_virtual_column_to_page_again.rb +9 -0
  84. data/db/migrate/009_add_content_type_field_to_layout.rb +9 -0
  85. data/db/schema.rb +74 -0
  86. data/db/templates/empty.yml +2 -0
  87. data/db/templates/simple-blog.yml +197 -0
  88. data/db/templates/styled-blog.yml +472 -0
  89. data/lib/advanced_delegation.rb +21 -0
  90. data/lib/archive_index_behavior_tags_and_methods.rb +48 -0
  91. data/lib/generators/behavior/USAGE +16 -0
  92. data/lib/generators/behavior/behavior_generator.rb +22 -0
  93. data/lib/generators/behavior/templates/model.rb.template +9 -0
  94. data/lib/generators/behavior/templates/unit_test.rb.template +16 -0
  95. data/lib/generators/filter/USAGE +16 -0
  96. data/lib/generators/filter/filter_generator.rb +22 -0
  97. data/lib/generators/filter/templates/model.rb.template +8 -0
  98. data/lib/generators/filter/templates/unit_test.rb.template +7 -0
  99. data/lib/inheritable_class_attributes.rb +65 -0
  100. data/lib/login_system.rb +80 -0
  101. data/lib/plugins/index_quoting_fix/init.rb +32 -0
  102. data/lib/plugins/string_io/init.rb +2 -0
  103. data/lib/radiant.rb +5 -0
  104. data/lib/registerable.rb +70 -0
  105. data/lib/tasks/release.rake +84 -0
  106. data/public/404.html +8 -0
  107. data/public/500.html +8 -0
  108. data/public/dispatch.cgi +10 -0
  109. data/public/dispatch.fcgi +24 -0
  110. data/public/dispatch.rb +10 -0
  111. data/public/favicon.ico +0 -0
  112. data/public/images/add-child.png +0 -0
  113. data/public/images/brown-bottom-line.gif +0 -0
  114. data/public/images/clear-page-cache.png +0 -0
  115. data/public/images/collapse.png +0 -0
  116. data/public/images/expand.png +0 -0
  117. data/public/images/minus.png +0 -0
  118. data/public/images/new-homepage.png +0 -0
  119. data/public/images/new-layout.png +0 -0
  120. data/public/images/new-snippet.png +0 -0
  121. data/public/images/new-user.png +0 -0
  122. data/public/images/page.png +0 -0
  123. data/public/images/plus.png +0 -0
  124. data/public/images/remove-disabled.png +0 -0
  125. data/public/images/remove.png +0 -0
  126. data/public/images/snippet.png +0 -0
  127. data/public/images/spinner.gif +0 -0
  128. data/public/images/view-site.gif +0 -0
  129. data/public/images/virtual-page.png +0 -0
  130. data/public/javascripts/application.js +2 -0
  131. data/public/javascripts/controls.js +815 -0
  132. data/public/javascripts/dragdrop.js +913 -0
  133. data/public/javascripts/effects.js +958 -0
  134. data/public/javascripts/pngfix.js +78 -0
  135. data/public/javascripts/prototype.js +2006 -0
  136. data/public/javascripts/ruledtable.js +28 -0
  137. data/public/javascripts/string.js +23 -0
  138. data/public/javascripts/tabcontrol.js +140 -0
  139. data/public/robots.txt +1 -0
  140. data/public/stylesheets/admin.css +464 -0
  141. data/script/about +3 -0
  142. data/script/breakpointer +3 -0
  143. data/script/console +3 -0
  144. data/script/destroy +3 -0
  145. data/script/generate +3 -0
  146. data/script/performance/benchmarker +3 -0
  147. data/script/performance/profiler +3 -0
  148. data/script/plugin +3 -0
  149. data/script/process/reaper +3 -0
  150. data/script/process/spawner +3 -0
  151. data/script/process/spinner +3 -0
  152. data/script/runner +3 -0
  153. data/script/server +3 -0
  154. data/script/setup_database +297 -0
  155. data/test/fixtures/layouts.yml +26 -0
  156. data/test/fixtures/page_parts.yml +99 -0
  157. data/test/fixtures/pages.yml +359 -0
  158. data/test/fixtures/pages.yml.rej +28 -0
  159. data/test/fixtures/snippets.yml +18 -0
  160. data/test/fixtures/users.yml +30 -0
  161. data/test/functional/admin/export_controller_test.rb +22 -0
  162. data/test/functional/admin/layout_controller_test.rb +40 -0
  163. data/test/functional/admin/model_controller_test.rb +152 -0
  164. data/test/functional/admin/page_controller_test.rb +179 -0
  165. data/test/functional/admin/snippet_controller_test.rb +11 -0
  166. data/test/functional/admin/user_controller_test.rb +71 -0
  167. data/test/functional/admin/welcome_controller_test.rb +48 -0
  168. data/test/functional/application_controller_test.rb +44 -0
  169. data/test/functional/login_system_test.rb +155 -0
  170. data/test/functional/site_controller_test.rb +172 -0
  171. data/test/helpers/archive_index_test_helper.rb +35 -0
  172. data/test/helpers/behavior_render_test_helper.rb +34 -0
  173. data/test/helpers/behavior_test_helper.rb +47 -0
  174. data/test/helpers/caching_test_helper.rb +41 -0
  175. data/test/helpers/layout_test_helper.rb +35 -0
  176. data/test/helpers/page_part_test_helper.rb +49 -0
  177. data/test/helpers/page_test_helper.rb +36 -0
  178. data/test/helpers/snippet_test_helper.rb +32 -0
  179. data/test/helpers/user_test_helper.rb +34 -0
  180. data/test/helpers/validation_test_helper.rb +42 -0
  181. data/test/test_helper.rb +54 -0
  182. data/test/unit/behavior_test.rb +196 -0
  183. data/test/unit/behaviors/archive_behavior_test.rb +33 -0
  184. data/test/unit/behaviors/archive_day_index_behavior_test.rb +21 -0
  185. data/test/unit/behaviors/archive_month_index_behavior_test.rb +21 -0
  186. data/test/unit/behaviors/archive_year_index_behavior_test.rb +21 -0
  187. data/test/unit/behaviors/page_missing_behavior_test.rb +27 -0
  188. data/test/unit/filters/markdown_filter_test.rb +14 -0
  189. data/test/unit/filters/textile_filter_test.rb +14 -0
  190. data/test/unit/inheritable_class_attributes_test.rb +47 -0
  191. data/test/unit/layout_test.rb +29 -0
  192. data/test/unit/page_context_test.rb +375 -0
  193. data/test/unit/page_context_test.rb.rej +26 -0
  194. data/test/unit/page_part_test.rb +44 -0
  195. data/test/unit/page_test.rb +224 -0
  196. data/test/unit/radiant/config_test.rb +46 -0
  197. data/test/unit/radiant/exporter_test.rb +26 -0
  198. data/test/unit/registerable_test.rb +68 -0
  199. data/test/unit/response_cache_test.rb +133 -0
  200. data/test/unit/snippet_test.rb +47 -0
  201. data/test/unit/status_test.rb +43 -0
  202. data/test/unit/text_filter_test.rb +14 -0
  203. data/test/unit/user_action_observer_test.rb +40 -0
  204. data/test/unit/user_test.rb +138 -0
  205. metadata +355 -0
@@ -0,0 +1,28 @@
1
+ var RuledTable = Class.create();
2
+ RuledTable.prototype = {
3
+
4
+ initialize: function(element_id) {
5
+ var table = $(element_id);
6
+ var rows = table.getElementsByTagName('tr');
7
+ for (var i = 0; i < rows.length; i++) {
8
+ this.setupRow(rows[i]);
9
+ }
10
+ },
11
+
12
+ onMouseOverRow: function(event) {
13
+ // Element.addClassName(this, 'highlight');
14
+ this.className = this.className.replace(/\s*\bhighlight\b|$/, ' highlight'); // faster than the above
15
+ },
16
+
17
+ onMouseOutRow: function(event) {
18
+ // Element.removeClassName(this, 'highlight');
19
+ this.className = this.className.replace(/\s*\bhighlight\b\s*/, ' '); // faster than the above
20
+ },
21
+
22
+ setupRow: function(row) {
23
+ Event.observe(row, 'mouseover', this.onMouseOverRow.bindAsEventListener(row));
24
+ Event.observe(row, 'mouseout', this.onMouseOutRow.bindAsEventListener(row));
25
+ if (this.onRowSetup) this.onRowSetup(row);
26
+ }
27
+
28
+ };
@@ -0,0 +1,23 @@
1
+ Object.extend(String.prototype, {
2
+
3
+ upcase: function() {
4
+ return this.toUpperCase();
5
+ },
6
+
7
+ downcase: function() {
8
+ return this.toLowerCase();
9
+ },
10
+
11
+ strip: function() {
12
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
13
+ },
14
+
15
+ toInteger: function() {
16
+ return parseInt(this);
17
+ },
18
+
19
+ toSlug: function() {
20
+ return this.strip().downcase().replace(/[^-a-z0-9~\s\.:;+=_]/g, '').replace(/[\s\.:;=+]+/g, '-');
21
+ }
22
+
23
+ });
@@ -0,0 +1,140 @@
1
+ var TabControl = Class.create();
2
+
3
+ TabControl.controls = $H();
4
+ TabControl.BadTabError = new Error('TabControl: Invalid tab.');
5
+
6
+ TabControl.prototype = {
7
+ /*
8
+ Initializes a tab control. The variable +element_id+ must be the id of an HTML element
9
+ containing one element with it's class name set to 'tabs' and another element with it's
10
+ class name set to 'pages'.
11
+ */
12
+ initialize: function(element_id) {
13
+ TabControl.controls[element_id] = this;
14
+ this.control_id = element_id;
15
+ this.element = $(element_id);
16
+ this.tab_container = document.getElementsByClassName('tabs', this.element).first();
17
+ this.tabs = $H();
18
+ },
19
+
20
+ /*
21
+ Creates a new tab. The variable +tab_id+ is a unique string used to identify the tab
22
+ when calling other methods. The variable +caption+ is a string containing the caption
23
+ of the tab. The variable +page+ is the ID of an HTML element, or the HTML element
24
+ itself. When a tab is initially added the page element is hidden.
25
+ */
26
+ addTab: function(tab_id, caption, page) {
27
+ new Insertion.Bottom(
28
+ this.tab_container,
29
+ '<a class="tab" href="javascript:TabControl.controls[\''
30
+ + this.control_id
31
+ + '\'].select(\'' + tab_id + '\');">' + caption + '</a>'
32
+ );
33
+ var tab = this.tab_container.lastChild;
34
+ tab.tab_id = tab_id;
35
+ tab.caption = caption;
36
+ tab.page = $(page);
37
+ this.tabs[tab_id] = tab;
38
+ this._setNotHere(tab);
39
+ return tab;
40
+ },
41
+
42
+ /*
43
+ Removes +tab+. The variable +tab+ may be either a tab ID or a tab element.
44
+ */
45
+ removeTab: function(tab) {
46
+ var t = this._tabify(tab);
47
+ var id = t.tab_id;
48
+ Element.remove(t.page);
49
+ Element.remove(t);
50
+ new_tabs = $H();
51
+ this.tabs.each(function(pair) {
52
+ if (pair.key != id) new_tabs[pair.key] = pair.value;
53
+ });
54
+ this.tabs = new_tabs;
55
+ if (this.selected.tab_id == id) {
56
+ var first = this.firstTab();
57
+ if (typeof first != 'undefined') this.select(first.tab_id);
58
+ }
59
+ },
60
+
61
+ /*
62
+ Selects +tab+ updating the control. The variable +tab+ may be either a tab ID or a
63
+ tab element.
64
+ */
65
+ select: function(tab) {
66
+ var t = this._tabify(tab);
67
+ this.tabs.each(function(pair) {
68
+ if (pair.key == t.tab_id) {
69
+ if (this.selected) this.selected.selected = false;
70
+ this.selected = t;
71
+ t.selected = true;
72
+ this._setHere(pair.key);
73
+ } else {
74
+ this._setNotHere(pair.key);
75
+ }
76
+ }.bind(this));
77
+ false;
78
+ },
79
+
80
+ /*
81
+ Returns the first tab element that was added using #addTab().
82
+ */
83
+ firstTab: function() {
84
+ return this.tabs[this.tabs.keys().first()];
85
+ },
86
+
87
+ /*
88
+ Returns the the last tab element that was added using #addTab().
89
+ */
90
+ lastTab: function() {
91
+ return this.tabs[this.tabs.keys().last()];
92
+ },
93
+
94
+ /*
95
+ Returns the total number of tab elements managed by the control.
96
+ */
97
+ tabCount: function() {
98
+ return this.tabs.keys().length;
99
+ },
100
+
101
+ /*
102
+ Private Methods
103
+ */
104
+
105
+ /*
106
+ Shows the page for +tab+ and adds the class 'here' to tab. The variable +tab+ may
107
+ be either a tab ID or a tab element.
108
+ */
109
+ _setHere: function(tab) {
110
+ var t = this._tabify(tab);
111
+ Element.show(t.page);
112
+ Element.addClassName(t, 'here');
113
+ },
114
+
115
+ /*
116
+ Hides the page for +tab+ and removes the class 'here' from tab. The variable +tab+
117
+ may be either a tab ID or a tab element.
118
+ */
119
+ _setNotHere: function(tab) {
120
+ var t = this._tabify(tab);
121
+ Element.hide(t.page);
122
+ Element.removeClassName(t, 'here');
123
+ },
124
+
125
+ /*
126
+ Returns a tab when passed a string or tab element. Throws a BadTabError otherwise.
127
+ */
128
+ _tabify: function(something) {
129
+ if (typeof something == 'string') {
130
+ var object = this.tabs[something];
131
+ } else {
132
+ var object = something;
133
+ }
134
+ if ((typeof object != 'undefined') && (object.tab_id)) {
135
+ return object;
136
+ } else {
137
+ throw TabControl.BadTabError;
138
+ }
139
+ }
140
+ };
@@ -0,0 +1 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
@@ -0,0 +1,464 @@
1
+ body {
2
+ font-size: 95%;
3
+ font-family: "Lucida Grande", "Bitstream Vera Sans", Helvetica, Verdana, Arial, sans-serif;
4
+ margin: 0;
5
+ padding: 0;
6
+ }
7
+ img { border: 0; }
8
+ h3 {
9
+ font-size: 130%;
10
+ margin-top: 1.25em;
11
+ margin-bottom: .5em;
12
+ }
13
+ .hidden {
14
+ display: none;
15
+ }
16
+ .clear {
17
+ font-size: 1px;
18
+ clear: both;
19
+ }
20
+ .warning {
21
+ color: red;
22
+ }
23
+
24
+ /* main layout */
25
+
26
+ #header {
27
+ background-color: #c00;
28
+ color: white;
29
+ width: 100%;
30
+ padding-top: 1px;
31
+ padding-bottom: 20px;
32
+ }
33
+ #header a, #header a:visited {
34
+ color: white;
35
+ text-decoration: none;
36
+ }
37
+ #header a:hover, #header a:visited:hover {
38
+ text-decoration: underline;
39
+ }
40
+ #site-title {
41
+ font-size: 150%;
42
+ font-weight: bold;
43
+ margin-top: 19px;
44
+ margin-left: 20px;
45
+ }
46
+ #site-subtitle {
47
+ color: #fc6;
48
+ font-size: 90%;
49
+ font-style: italic;
50
+ margin-left: 20px;
51
+ }
52
+ #navigation {
53
+ font-size: 90%;
54
+ margin-top: -5px;
55
+ margin-bottom: -20px;
56
+ line-height: 100%;
57
+ padding: .5em;
58
+ padding-right: 20px;
59
+ border-bottom: 2px solid #c00;
60
+ _border-bottom: 0; /* IE only */
61
+ text-align: right;
62
+ }
63
+ #navigation a, #navigation a:visited {
64
+ background-color: #eae3c5;
65
+ color: black;
66
+ display: inline;
67
+ padding: .5em;
68
+ padding-left: .9em;
69
+ padding-right: .9em;
70
+ text-decoration: none;
71
+ }
72
+ #navigation a:hover, #navigation a:visited:hover {
73
+ text-decoration: underline;
74
+ }
75
+ #navigation strong a, #navigation strong a:visited {
76
+ background-color: white;
77
+ }
78
+ #navigation .separator {
79
+ display: none;
80
+ }
81
+ #main {
82
+ float: left;
83
+ width: 100%;
84
+ }
85
+ #content {
86
+ font-size: 95%;
87
+ padding: 20px;
88
+ }
89
+ #footer {
90
+ color: #999;
91
+ background-color: #f7f7f7;
92
+ border-top: 1px solid #eaeaea;
93
+ font-size: 80%;
94
+ float: left;
95
+ padding-top: 20px;
96
+ padding-bottom: 20px;
97
+ width: 100%;
98
+ }
99
+ #footer p {
100
+ padding-left: 20px;
101
+ padding-right: 20px;
102
+ }
103
+ #site-links {
104
+ color: #f5cbcb;
105
+ font-size: 90%;
106
+ margin: 0;
107
+ position: absolute;
108
+ right: 0;
109
+ top: 20px;
110
+ }
111
+ #site-links a, #site-links a:visited {
112
+ color: white;
113
+ }
114
+ #site-links a:hover, #site-links a:visited:hover {
115
+ text-decoration: none;
116
+ }
117
+ #site-links strong a, #site-links strong a:visited {
118
+ text-decoration: none;
119
+ }
120
+
121
+
122
+ /* messages */
123
+
124
+ #notice, #error {
125
+ color: white;
126
+ margin-top: 25px;
127
+ margin-left: 20px;
128
+ margin-right: 20px;
129
+ padding: .75em;
130
+ padding-top: 0;
131
+ padding-bottom: 0;
132
+ }
133
+ #notice {
134
+ background-color: #0c3;
135
+ border: 3px solid #7FE699;
136
+ }
137
+ #error {
138
+ background-color: #c00;
139
+ border: 3px solid #e67f00;
140
+ }
141
+ h1 {
142
+ margin-top: 0;
143
+ }
144
+
145
+
146
+ /* index table */
147
+
148
+ #content table.index {
149
+ font-size: 90%;
150
+ width: 100%;
151
+ margin-bottom: 2em;
152
+ border-bottom: 1px solid #eaeaea;
153
+ }
154
+ #content table.index td, table.index th {
155
+ text-align: left;
156
+ }
157
+ #content table.index th {
158
+ background-color: #f5f5f5;
159
+ font-size: 90%;
160
+ font-weight: normal;
161
+ padding: 4px;
162
+ padding-top: 2px;
163
+ padding-bottom: 2px;
164
+ }
165
+ #content table.index td {
166
+ border-top: 1px solid #eaeaea;
167
+ padding: 4px;
168
+ }
169
+ #content table.index .status {
170
+ width: 8em;
171
+ }
172
+ #content table.index td.status {
173
+ color: #9eb3bf;
174
+ }
175
+ #content table.index td.status.draft-status {
176
+ color: #c00;
177
+ }
178
+ #content table.index td.status.published-status {
179
+ color: black;
180
+ }
181
+ #content table.index td.status.hidden-stats {
182
+ color: #0c0;
183
+ }
184
+ #content table.index .add-child {
185
+ width: 100px;
186
+ padding-left: 0;
187
+ }
188
+ #content table.index .remove {
189
+ width: 100px;
190
+ padding-left: 0;
191
+ }
192
+ #content table.index .node .layout,
193
+ #content table.index .node .snippet,
194
+ #content table.index .node .user {
195
+ font-size: 115%;
196
+ font-weight: bold;
197
+ }
198
+ #content table.index .node .user small {
199
+ color: #666;
200
+ font-size: 90%;
201
+ font-style: italic;
202
+ font-weight: normal;
203
+ margin-left: .5em;
204
+ }
205
+ #content table.index .node.level-0 .page {
206
+ font-size: 120%;
207
+ font-weight: bold;
208
+ }
209
+ #content table.index .node.level-1 .page{
210
+ font-size: 115%;
211
+ font-weight: bold;
212
+ }
213
+ #content table.index .node.level-2 .page {
214
+ font-size: 115%;
215
+ }
216
+ #content table.index .node.level-3 .page{
217
+ font-size: 105%;
218
+ }
219
+ #content table.index .node .page a {
220
+ text-decoration: none;
221
+ }
222
+ #content table.index .node .page a .title, #content table.index .node .page a:visited .title,
223
+ #content table.index .node .snippet a, #content table.index .node .snippet a:visited,
224
+ #content table.index .node .layout a, #content table.index .node .layout a:visited,
225
+ #content table.index .node .user a, #content table.index .node .user a:visited {
226
+ color: black;
227
+ text-decoration: none;
228
+ }
229
+
230
+ #content table.index .node.virtual .page a .title, #content table.index .node.virtual .page a:visited .title {
231
+ color: #9eb3bf;
232
+ }
233
+
234
+ #content table.index .node .page a:hover .title, #content table.index .node .page a:visited:hover .title,
235
+ #content table.index .node .snippet a:hover, #content table.index .node .snippet a:visited:hover,
236
+ #content table.index .node .layout a:hover, #content table.index .node .layout a:visited:hover,
237
+ #content table.index .node .user a:hover, #content table.index .node .user a:visited:hover {
238
+ color: blue;
239
+ text-decoration: underline;
240
+ }
241
+ #content table.index td.note {
242
+ color: silver;
243
+ font-size: 85%;
244
+ font-style: italic;
245
+ padding: 3em;
246
+ text-align: center;
247
+ }
248
+ #content table.index .node .page .info {
249
+ color: #9eb3bf;
250
+ font-style: italic;
251
+ font-weight: normal;
252
+ }
253
+ #content table.index tr.highlight {
254
+ background-color: #ffffb3;
255
+ }
256
+ #content table.index .no-children .w1 {
257
+ padding-left: 23px;
258
+ }
259
+ #content table.index .page .title,
260
+ #content table.index .page .info {
261
+ position: relative;
262
+ top: 2px;
263
+ }
264
+ #content table.index .page img.expander {
265
+ padding: 3px;
266
+ padding-top: 6px;
267
+ padding-bottom: 6px;
268
+ }
269
+
270
+ /* form elements */
271
+
272
+ #content .form-area {
273
+ background-color: #f5f1e2;
274
+ margin-left: -20px;
275
+ margin-right: -20px;
276
+ padding: 20px;
277
+ padding-top: 15px;
278
+ padding-bottom: 10px;
279
+ }
280
+ #content .form-area h3 {
281
+ font-size: 100%;
282
+ margin-bottom: 0;
283
+ }
284
+ #content .form-area p {
285
+ margin-top: 0;
286
+ }
287
+ #content .form-area small {
288
+ font-size: 75%;
289
+ }
290
+ #content .form-area label {
291
+ font-weight: bold;
292
+ }
293
+ #content .form-area .textbox {
294
+ font-size: 100%;
295
+ }
296
+ #content .form-area .title {
297
+ margin-bottom: 0;
298
+ }
299
+ #content .form-area .title label {
300
+ display: block;
301
+ }
302
+ #content .form-area .title .textbox {
303
+ font-family: Georgia, Palatino, "Times New Roman", Times, serif;
304
+ font-size: 200%;
305
+ width: 100%;
306
+ }
307
+ #content .form-area .content {
308
+ margin-top: 1em;
309
+ margin-bottom: 1em;
310
+ }
311
+ #content .form-area .row {
312
+ clear: both;
313
+ margin-top: 1em;
314
+ }
315
+ #content .form-area .row p,
316
+ #content .form-area .row .fieldset {
317
+ float: left;
318
+ margin-right: 2em;
319
+ margin-bottom: 1em;
320
+ }
321
+ #content .form-area .more-or-less {
322
+ float: left;
323
+ margin-top: 0;
324
+ margin-bottom: 1em;
325
+ width: 100%;
326
+ }
327
+ #content .form-area .fieldset {
328
+ margin-right: .5em;
329
+ }
330
+ #content .form-area .fieldset td {
331
+ padding-right: .5em;
332
+ }
333
+ #content .form-area .error-with-field .error {
334
+ color: #f00;
335
+ display: block;
336
+ padding: 2px;
337
+ padding-top: 0;
338
+ }
339
+ #content .buttons {
340
+ font-size: 80%;
341
+ margin-top: 2.5em;
342
+ }
343
+ #content .button {
344
+ font-size: 150%;
345
+ }
346
+ #content table.fieldset {
347
+ border-bottom: 1px solid #DFD3C3;
348
+ margin-bottom: 1.5em;
349
+ width: 100%;
350
+ }
351
+ #content table.fieldset td {
352
+ background-color: white;
353
+ border-top: 1px solid #DFD3C3;
354
+ padding: 6px;
355
+ }
356
+ #content table.fieldset td.label {
357
+ padding-top: 10px;
358
+ vertical-align: top;
359
+ text-align: right;
360
+ width: 20%;
361
+ }
362
+ #content table.fieldset td.label .optional {
363
+ color: #929488;
364
+ }
365
+ #content table.fieldset td.field .textbox {
366
+ width: 100%;
367
+ }
368
+ #content table.fieldset td.help {
369
+ background-color: #F5F1E2;
370
+ font-size: 80%;
371
+ padding-left: 10px;
372
+ width: 40%;
373
+ }
374
+ #content table.fieldset input {
375
+ font-size: 100%;
376
+ }
377
+ #content table.fieldset .checkbox {
378
+ display: block;
379
+ float: left;
380
+ padding-top: 4px;
381
+ width: 10em;
382
+ }
383
+ #content table.fieldset .error-with-field small {
384
+ color: red;
385
+ }
386
+
387
+ /* tabs */
388
+
389
+ #content #tabs {
390
+ background-image: url(/images/brown-bottom-line.gif);
391
+ background-position: bottom;
392
+ background-repeat: repeat-x;
393
+ float: left;
394
+ width: 100%;
395
+ margin-right: -4px;
396
+ }
397
+ #content #tabs .tab {
398
+ background-color: #eae3c5;
399
+ border-bottom: 1px solid #cdc295;
400
+ color: black;
401
+ display: inline-block;
402
+ font-size: 100%;
403
+ text-align: left;
404
+ margin-right: 3px;
405
+ padding: 15px;
406
+ padding-top: 7px;
407
+ padding-bottom: 4px;
408
+ text-decoration: none;
409
+ text-transform: titlecase;
410
+ }
411
+ #content #tabs .tab.here {
412
+ background-color: white;
413
+ border: 1px solid #cdc295;
414
+ border-bottom: 1px solid white;
415
+ font-weight: bold;
416
+ padding-left: 13px;
417
+ padding-right: 13px;
418
+ padding-top: 6px;
419
+ }
420
+ #content #tab-toolbar {
421
+ float: right;
422
+ margin-top: .35em;
423
+ }
424
+ #content #pages {
425
+ background: white;
426
+ width: 100%;
427
+ clear: both;
428
+ }
429
+ #content #pages .page {
430
+ padding: 20px;
431
+ border: 1px solid #cdc295;
432
+ border-top-width: 0;
433
+ }
434
+ #content textarea {
435
+ height: 280px;
436
+ border: 1px solid #cdc295;
437
+ font-family: Monaco, "Courier New", Courier, monospace;
438
+ font-size: 85%;
439
+ }
440
+ #content #pages label {
441
+ font-size: 85%;
442
+ font-weight: normal !important;
443
+ }
444
+
445
+
446
+ /* popups */
447
+
448
+ #content .popup {
449
+ background-color: white;
450
+ border: 5px solid silver;
451
+ padding: 2em;
452
+ padding-top: 1em;
453
+ padding-bottom: .5em;
454
+ }
455
+ #content .popup .busy {
456
+ float: right;
457
+ }
458
+ #content .popup h3 {
459
+ margin-top: 0;
460
+ }
461
+ #content .popup .close-link {
462
+ font-size: 85%;
463
+ color: #999;
464
+ }