trusty-cms 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (388) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +23 -0
  3. data/CHANGELOG.md +754 -0
  4. data/CONTRIBUTORS.md +263 -0
  5. data/Gemfile +40 -0
  6. data/Gemfile.lock +177 -0
  7. data/INSTALL.md +10 -0
  8. data/LICENSE.md +21 -0
  9. data/README.md +85 -0
  10. data/Rakefile +7 -0
  11. data/app/controllers/admin/configuration_controller.rb +50 -0
  12. data/app/controllers/admin/extensions_controller.rb +11 -0
  13. data/app/controllers/admin/layouts_controller.rb +8 -0
  14. data/app/controllers/admin/page_fields_controller.rb +9 -0
  15. data/app/controllers/admin/page_parts_controller.rb +9 -0
  16. data/app/controllers/admin/pages_controller.rb +89 -0
  17. data/app/controllers/admin/preferences_controller.rb +46 -0
  18. data/app/controllers/admin/references_controller.rb +7 -0
  19. data/app/controllers/admin/resource_controller.rb +245 -0
  20. data/app/controllers/admin/users_controller.rb +40 -0
  21. data/app/controllers/admin/welcome_controller.rb +48 -0
  22. data/app/controllers/application_controller.rb +114 -0
  23. data/app/controllers/site_controller.rb +97 -0
  24. data/app/helpers/admin/configuration_helper.rb +80 -0
  25. data/app/helpers/admin/export_helper.rb +2 -0
  26. data/app/helpers/admin/extensions_helper.rb +2 -0
  27. data/app/helpers/admin/layouts_helper.rb +21 -0
  28. data/app/helpers/admin/node_helper.rb +96 -0
  29. data/app/helpers/admin/pages_helper.rb +117 -0
  30. data/app/helpers/admin/preferences_helper.rb +3 -0
  31. data/app/helpers/admin/references_helper.rb +46 -0
  32. data/app/helpers/admin/regions_helper.rb +28 -0
  33. data/app/helpers/admin/resource_helper.rb +2 -0
  34. data/app/helpers/admin/users_helper.rb +8 -0
  35. data/app/helpers/admin/welcome_helper.rb +2 -0
  36. data/app/helpers/application_helper.rb +241 -0
  37. data/app/helpers/site_helper.rb +2 -0
  38. data/app/models/deprecated_tags.rb +42 -0
  39. data/app/models/file_not_found_page.rb +32 -0
  40. data/app/models/layout.rb +15 -0
  41. data/app/models/menu_renderer.rb +140 -0
  42. data/app/models/page.rb +377 -0
  43. data/app/models/page_context.rb +53 -0
  44. data/app/models/page_field.rb +3 -0
  45. data/app/models/page_part.rb +20 -0
  46. data/app/models/standard_tags.rb +1318 -0
  47. data/app/models/status.rb +41 -0
  48. data/app/models/text_filter.rb +36 -0
  49. data/app/models/trusty_cms/config.rb +313 -0
  50. data/app/models/trusty_cms/page_response_cache_director.rb +43 -0
  51. data/app/models/user.rb +96 -0
  52. data/app/models/user_action_observer.rb +25 -0
  53. data/app/views/admin/configuration/edit.html.haml +38 -0
  54. data/app/views/admin/configuration/show.html.haml +58 -0
  55. data/app/views/admin/extensions/index.html.haml +41 -0
  56. data/app/views/admin/layouts/_form.html.haml +39 -0
  57. data/app/views/admin/layouts/edit.html.haml +9 -0
  58. data/app/views/admin/layouts/index.html.haml +35 -0
  59. data/app/views/admin/layouts/new.html.haml +7 -0
  60. data/app/views/admin/layouts/remove.html.haml +16 -0
  61. data/app/views/admin/page_fields/_page_field.html.haml +12 -0
  62. data/app/views/admin/page_parts/_page_part.html.haml +18 -0
  63. data/app/views/admin/pages/_fields.html.haml +71 -0
  64. data/app/views/admin/pages/_meta_row.html.haml +8 -0
  65. data/app/views/admin/pages/_node.html.haml +26 -0
  66. data/app/views/admin/pages/_popups.html.haml +27 -0
  67. data/app/views/admin/pages/children.html.haml +2 -0
  68. data/app/views/admin/pages/edit.html.haml +12 -0
  69. data/app/views/admin/pages/index.html.haml +26 -0
  70. data/app/views/admin/pages/new.html.haml +10 -0
  71. data/app/views/admin/pages/remove.html.haml +18 -0
  72. data/app/views/admin/preferences/edit.html.haml +44 -0
  73. data/app/views/admin/references/_tag_reference.haml +3 -0
  74. data/app/views/admin/references/filters.haml +6 -0
  75. data/app/views/admin/references/tags.haml +30 -0
  76. data/app/views/admin/users/_avatar.html.haml +5 -0
  77. data/app/views/admin/users/_form.html.haml +53 -0
  78. data/app/views/admin/users/_password_fields.html.haml +18 -0
  79. data/app/views/admin/users/edit.html.haml +9 -0
  80. data/app/views/admin/users/index.html.haml +39 -0
  81. data/app/views/admin/users/new.html.haml +6 -0
  82. data/app/views/admin/users/remove.html.haml +16 -0
  83. data/app/views/admin/welcome/login.html.haml +23 -0
  84. data/app/views/layouts/application.html.haml +50 -0
  85. data/app/views/site/not_found.html.haml +3 -0
  86. data/bin/ci/before_script +15 -0
  87. data/bin/trusty_cms +53 -0
  88. data/config/application.rb +124 -0
  89. data/config/boot.rb +9 -0
  90. data/config/compass.config +15 -0
  91. data/config/database.db2.yml +20 -0
  92. data/config/database.mysql.yml +25 -0
  93. data/config/database.postgresql.yml +25 -0
  94. data/config/database.sqlite.yml +16 -0
  95. data/config/database.sqlserver.yml +20 -0
  96. data/config/environment.rb +5 -0
  97. data/config/environments/development.rb +19 -0
  98. data/config/environments/production.rb +27 -0
  99. data/config/environments/test.rb +35 -0
  100. data/config/initializers/active_record_extensions.rb +1 -0
  101. data/config/initializers/configuration_extensions.rb +0 -0
  102. data/config/initializers/haml.rb +2 -0
  103. data/config/initializers/object_extensions.rb +1 -0
  104. data/config/initializers/radiant_config.rb +16 -0
  105. data/config/initializers/rails_patch.rb +2 -0
  106. data/config/initializers/response_cache_timeout.rb +3 -0
  107. data/config/initializers/string_extensions.rb +1 -0
  108. data/config/initializers/symbol_extensions.rb +1 -0
  109. data/config/initializers/tmp.rb +2 -0
  110. data/config/locales/en.yml +230 -0
  111. data/config/locales/en_available_tags.yml +625 -0
  112. data/config/preinitializer.rb +18 -0
  113. data/config/routes.rb +30 -0
  114. data/db/migrate/001_create_radiant_tables.rb +75 -0
  115. data/db/migrate/002_insert_initial_data.rb +12 -0
  116. data/db/migrate/003_rename_behavior_column.rb +9 -0
  117. data/db/migrate/004_rename_filter_column.rb +11 -0
  118. data/db/migrate/005_add_virtual_column_to_page.rb +9 -0
  119. data/db/migrate/006_integer_columns_to_boolean.rb +36 -0
  120. data/db/migrate/007_remove_virtual_column_from_page.rb +9 -0
  121. data/db/migrate/008_add_virtual_column_to_page_again.rb +9 -0
  122. data/db/migrate/009_add_content_type_field_to_layout.rb +9 -0
  123. data/db/migrate/010_merge_behaviors_and_pages.rb +57 -0
  124. data/db/migrate/011_rename_type_column_on_page_to_class_name.rb +9 -0
  125. data/db/migrate/012_create_extension_meta.rb +13 -0
  126. data/db/migrate/013_add_notes_field_to_user.rb +9 -0
  127. data/db/migrate/014_rename_config_default_parts_key.rb +17 -0
  128. data/db/migrate/015_add_optimistic_locking.rb +15 -0
  129. data/db/migrate/016_add_sessions.rb +16 -0
  130. data/db/migrate/017_rename_created_by_updated_by_columns.rb +15 -0
  131. data/db/migrate/018_add_description_and_keywords_to_pages.rb +11 -0
  132. data/db/migrate/019_add_salt_to_users.rb +11 -0
  133. data/db/migrate/020_add_session_info_to_users.rb +11 -0
  134. data/db/migrate/021_remove_session_expire_from_users.rb +9 -0
  135. data/db/migrate/20081203140407_add_indexes.rb +19 -0
  136. data/db/migrate/20090226140109_add_user_language.rb +9 -0
  137. data/db/migrate/20090929164633_rename_developer_role_to_designer.rb +9 -0
  138. data/db/migrate/20091003095744_change_user_language_to_locale.rb +9 -0
  139. data/db/migrate/20100805154952_add_page_fields.rb +15 -0
  140. data/db/migrate/20100805155020_convert_page_metas.rb +24 -0
  141. data/db/migrate/20100810151922_add_field_name_index.rb +11 -0
  142. data/db/migrate/20110902203823_add_allowed_children_cache_to_pages.rb +13 -0
  143. data/db/migrate/20111016150725_extend_page_part_content_limit.rb +15 -0
  144. data/db/migrate/20120209231801_change_pages_allowed_children_cache_to_text.rb +11 -0
  145. data/db/schema.rb +128 -0
  146. data/lib/active_record_extensions/active_record_extensions.rb +27 -0
  147. data/lib/annotatable.rb +68 -0
  148. data/lib/configuration_extensions/configuration_extensions.rb +357 -0
  149. data/lib/generators/extension/USAGE +30 -0
  150. data/lib/generators/extension/extension_generator.rb +97 -0
  151. data/lib/generators/extension/templates/README.md +6 -0
  152. data/lib/generators/extension/templates/RSpecRakefile +109 -0
  153. data/lib/generators/extension/templates/Rakefile +25 -0
  154. data/lib/generators/extension/templates/cucumber.yml +1 -0
  155. data/lib/generators/extension/templates/cucumber_env.rb +11 -0
  156. data/lib/generators/extension/templates/cucumber_paths.rb +22 -0
  157. data/lib/generators/extension/templates/en.yml +3 -0
  158. data/lib/generators/extension/templates/extension.rb +21 -0
  159. data/lib/generators/extension/templates/functional_test.rb +15 -0
  160. data/lib/generators/extension/templates/gemspec.rb +29 -0
  161. data/lib/generators/extension/templates/lib.rb +8 -0
  162. data/lib/generators/extension/templates/migration.rb +9 -0
  163. data/lib/generators/extension/templates/radiant_config.rb +3 -0
  164. data/lib/generators/extension/templates/routes.rb +5 -0
  165. data/lib/generators/extension/templates/spec.opts +6 -0
  166. data/lib/generators/extension/templates/spec_helper.rb +42 -0
  167. data/lib/generators/extension/templates/tasks.rake +47 -0
  168. data/lib/generators/extension/templates/test_helper.rb +26 -0
  169. data/lib/generators/extension_controller/USAGE +36 -0
  170. data/lib/generators/extension_controller/extension_controller_generator.rb +84 -0
  171. data/lib/generators/extension_controller/templates/controller.rb +10 -0
  172. data/lib/generators/extension_controller/templates/controller_spec.rb +23 -0
  173. data/lib/generators/extension_controller/templates/functional_test.rb +11 -0
  174. data/lib/generators/extension_controller/templates/helper.rb +2 -0
  175. data/lib/generators/extension_controller/templates/helper_spec.rb +11 -0
  176. data/lib/generators/extension_controller/templates/helper_test.rb +4 -0
  177. data/lib/generators/extension_controller/templates/view.html.erb +2 -0
  178. data/lib/generators/extension_controller/templates/view_spec.rb +12 -0
  179. data/lib/generators/extension_mailer/USAGE +17 -0
  180. data/lib/generators/extension_mailer/extension_mailer_generator.rb +68 -0
  181. data/lib/generators/extension_mailer/templates/fixture.erb +3 -0
  182. data/lib/generators/extension_mailer/templates/mailer.rb +15 -0
  183. data/lib/generators/extension_mailer/templates/unit_test.rb +21 -0
  184. data/lib/generators/extension_mailer/templates/view.erb +3 -0
  185. data/lib/generators/extension_migration/USAGE +34 -0
  186. data/lib/generators/extension_migration/extension_migration_generator.rb +25 -0
  187. data/lib/generators/extension_migration/templates/migration.rb +11 -0
  188. data/lib/generators/extension_model/USAGE +35 -0
  189. data/lib/generators/extension_model/extension_model_generator.rb +68 -0
  190. data/lib/generators/extension_model/templates/fixtures.yml +19 -0
  191. data/lib/generators/extension_model/templates/migration.rb +16 -0
  192. data/lib/generators/extension_model/templates/model.rb +2 -0
  193. data/lib/generators/extension_model/templates/model_spec.rb +11 -0
  194. data/lib/generators/extension_model/templates/unit_test.rb +8 -0
  195. data/lib/generators/generator_base_extension.rb +16 -0
  196. data/lib/generators/instance/instance_generator.rb +148 -0
  197. data/lib/generators/instance/templates/databases/db2.yml +40 -0
  198. data/lib/generators/instance/templates/databases/mysql.yml +47 -0
  199. data/lib/generators/instance/templates/databases/postgresql.yml +44 -0
  200. data/lib/generators/instance/templates/databases/sqlite3.yml +16 -0
  201. data/lib/generators/instance/templates/databases/sqlserver.yml +21 -0
  202. data/lib/generators/instance/templates/instance_boot.rb +122 -0
  203. data/lib/generators/instance/templates/instance_config.ru +2 -0
  204. data/lib/generators/instance/templates/instance_environment.rb +83 -0
  205. data/lib/generators/instance/templates/instance_gemfile +81 -0
  206. data/lib/generators/instance/templates/instance_generate +6 -0
  207. data/lib/generators/instance/templates/instance_radiant_config.rb +16 -0
  208. data/lib/generators/instance/templates/instance_rakefile +3 -0
  209. data/lib/generators/instance/templates/instance_routes.rb +1 -0
  210. data/lib/generators/language_extension/USAGE +27 -0
  211. data/lib/generators/language_extension/language_extension_generator.rb +71 -0
  212. data/lib/generators/language_extension/templates/README +3 -0
  213. data/lib/generators/language_extension/templates/RSpecRakefile +123 -0
  214. data/lib/generators/language_extension/templates/Rakefile +25 -0
  215. data/lib/generators/language_extension/templates/available_tags.yml +553 -0
  216. data/lib/generators/language_extension/templates/cucumber.yml +1 -0
  217. data/lib/generators/language_extension/templates/cucumber_env.rb +16 -0
  218. data/lib/generators/language_extension/templates/cucumber_paths.rb +14 -0
  219. data/lib/generators/language_extension/templates/extension.rb +12 -0
  220. data/lib/generators/language_extension/templates/functional_test.rb +15 -0
  221. data/lib/generators/language_extension/templates/gemspec.rb +24 -0
  222. data/lib/generators/language_extension/templates/lang.yml +181 -0
  223. data/lib/generators/language_extension/templates/lib.rb +8 -0
  224. data/lib/generators/language_extension/templates/spec.opts +6 -0
  225. data/lib/generators/language_extension/templates/spec_helper.rb +36 -0
  226. data/lib/generators/language_extension/templates/tasks.rake +28 -0
  227. data/lib/generators/language_extension/templates/test_helper.rb +26 -0
  228. data/lib/inheritable_class_attributes.rb +65 -0
  229. data/lib/local_time.rb +6 -0
  230. data/lib/login_system.rb +132 -0
  231. data/lib/method_observer.rb +50 -0
  232. data/lib/object_extensions/object_extensions.rb +5 -0
  233. data/lib/simpleton.rb +21 -0
  234. data/lib/string_extensions/string_extensions.rb +25 -0
  235. data/lib/symbol_extensions/symbol_extensions.rb +5 -0
  236. data/lib/tasks/database.rake +85 -0
  237. data/lib/tasks/environments.rake +11 -0
  238. data/lib/tasks/extensions.rake +85 -0
  239. data/lib/tasks/framework.rake +255 -0
  240. data/lib/tasks/instance.rake +23 -0
  241. data/lib/tasks/prototype.rake +31 -0
  242. data/lib/tasks/radiant_config.rake +18 -0
  243. data/lib/tasks/release.rake +131 -0
  244. data/lib/tasks/translate.rake +59 -0
  245. data/lib/tasks/undefine.rake +28 -0
  246. data/lib/translation_support.rb +54 -0
  247. data/lib/trusty_cms/admin_ui/region_partials.rb +23 -0
  248. data/lib/trusty_cms/admin_ui/region_set.rb +35 -0
  249. data/lib/trusty_cms/admin_ui.rb +244 -0
  250. data/lib/trusty_cms/available_locales.rb +19 -0
  251. data/lib/trusty_cms/cache.rb +100 -0
  252. data/lib/trusty_cms/config/definition.rb +142 -0
  253. data/lib/trusty_cms/engine.rb +10 -0
  254. data/lib/trusty_cms/extension/script.rb +395 -0
  255. data/lib/trusty_cms/extension.rb +146 -0
  256. data/lib/trusty_cms/extension_loader.rb +130 -0
  257. data/lib/trusty_cms/extension_migrator.rb +98 -0
  258. data/lib/trusty_cms/extension_path.rb +200 -0
  259. data/lib/trusty_cms/initializer.rb +162 -0
  260. data/lib/trusty_cms/pagination/controller.rb +41 -0
  261. data/lib/trusty_cms/pagination/link_renderer.rb +34 -0
  262. data/lib/trusty_cms/resource_responses.rb +121 -0
  263. data/lib/trusty_cms/setup.rb +227 -0
  264. data/lib/trusty_cms/taggable.rb +138 -0
  265. data/lib/trusty_cms/task_support.rb +66 -0
  266. data/lib/trusty_cms.rb +19 -0
  267. data/log/.keep +0 -0
  268. data/public/.htaccess +40 -0
  269. data/public/404.html +8 -0
  270. data/public/500.html +8 -0
  271. data/public/dispatch.cgi +10 -0
  272. data/public/dispatch.fcgi +24 -0
  273. data/public/dispatch.rb +10 -0
  274. data/public/favicon.ico +0 -0
  275. data/public/images/admin/add_tab.png +0 -0
  276. data/public/images/admin/avatar_32x32.png +0 -0
  277. data/public/images/admin/avatar_64x64.png +0 -0
  278. data/public/images/admin/avatar_96x96.png +0 -0
  279. data/public/images/admin/brown_bottom_line.gif +0 -0
  280. data/public/images/admin/calendar_down.gif +0 -0
  281. data/public/images/admin/collapse.png +0 -0
  282. data/public/images/admin/draft_page.png +0 -0
  283. data/public/images/admin/expand.png +0 -0
  284. data/public/images/admin/image.png +0 -0
  285. data/public/images/admin/javascript.png +0 -0
  286. data/public/images/admin/layout.png +0 -0
  287. data/public/images/admin/metadata_toggle.png +0 -0
  288. data/public/images/admin/minus.png +0 -0
  289. data/public/images/admin/minus_disabled.png +0 -0
  290. data/public/images/admin/minus_grey.png +0 -0
  291. data/public/images/admin/navigation_secondary_separator.gif +0 -0
  292. data/public/images/admin/page.png +0 -0
  293. data/public/images/admin/plus.png +0 -0
  294. data/public/images/admin/plus_disabled.png +0 -0
  295. data/public/images/admin/plus_grey.png +0 -0
  296. data/public/images/admin/popup_border_background.png +0 -0
  297. data/public/images/admin/popup_border_bottom_left.png +0 -0
  298. data/public/images/admin/popup_border_bottom_right.png +0 -0
  299. data/public/images/admin/popup_border_top_left.png +0 -0
  300. data/public/images/admin/popup_border_top_right.png +0 -0
  301. data/public/images/admin/search.png +0 -0
  302. data/public/images/admin/single_form_shadow.png +0 -0
  303. data/public/images/admin/snippet.png +0 -0
  304. data/public/images/admin/spinner.gif +0 -0
  305. data/public/images/admin/status_background.png +0 -0
  306. data/public/images/admin/status_bottom_left.png +0 -0
  307. data/public/images/admin/status_bottom_right.png +0 -0
  308. data/public/images/admin/status_spinner.gif +0 -0
  309. data/public/images/admin/status_top_left.png +0 -0
  310. data/public/images/admin/status_top_right.png +0 -0
  311. data/public/images/admin/stylesheet.png +0 -0
  312. data/public/images/admin/tab_close.png +0 -0
  313. data/public/images/admin/upload.png +0 -0
  314. data/public/images/admin/virtual_page.png +0 -0
  315. data/public/images/radiant/radiant-badge-color.png +0 -0
  316. data/public/javascripts/admin/application.js +94 -0
  317. data/public/javascripts/admin/codearea.js +165 -0
  318. data/public/javascripts/admin/controls.js +965 -0
  319. data/public/javascripts/admin/cookie.js +80 -0
  320. data/public/javascripts/admin/dateinput.js +402 -0
  321. data/public/javascripts/admin/dragdrop.js +974 -0
  322. data/public/javascripts/admin/dropdown.js +216 -0
  323. data/public/javascripts/admin/effects.js +1122 -0
  324. data/public/javascripts/admin/lowpro.js +340 -0
  325. data/public/javascripts/admin/overrides.js +1 -0
  326. data/public/javascripts/admin/page_preview.js +41 -0
  327. data/public/javascripts/admin/pagefield.js +54 -0
  328. data/public/javascripts/admin/pagestatus.js +17 -0
  329. data/public/javascripts/admin/popup.js +339 -0
  330. data/public/javascripts/admin/prototype.js +4874 -0
  331. data/public/javascripts/admin/ruledtable.js +13 -0
  332. data/public/javascripts/admin/shortcuts.js +33 -0
  333. data/public/javascripts/admin/sitemap.js +149 -0
  334. data/public/javascripts/admin/status.js +233 -0
  335. data/public/javascripts/admin/tabcontrol.js +123 -0
  336. data/public/javascripts/admin/toggle.js +430 -0
  337. data/public/javascripts/admin/utility.js +53 -0
  338. data/public/javascripts/admin/validationerror.js +18 -0
  339. data/public/loading-iframe.html +11 -0
  340. data/public/robots.txt +1 -0
  341. data/public/stylesheets/sass/admin/_base.sass +18 -0
  342. data/public/stylesheets/sass/admin/main.sass +27 -0
  343. data/public/stylesheets/sass/admin/modules/_boxes.sass +6 -0
  344. data/public/stylesheets/sass/admin/modules/_gradients.sass +4 -0
  345. data/public/stylesheets/sass/admin/modules/_links.sass +18 -0
  346. data/public/stylesheets/sass/admin/overrides.sass +2 -0
  347. data/public/stylesheets/sass/admin/partials/_actions.sass +96 -0
  348. data/public/stylesheets/sass/admin/partials/_avatars.sass +10 -0
  349. data/public/stylesheets/sass/admin/partials/_content.sass +58 -0
  350. data/public/stylesheets/sass/admin/partials/_dateinput.sass +62 -0
  351. data/public/stylesheets/sass/admin/partials/_deprecated.sass +55 -0
  352. data/public/stylesheets/sass/admin/partials/_dropdown.sass +28 -0
  353. data/public/stylesheets/sass/admin/partials/_footer.sass +12 -0
  354. data/public/stylesheets/sass/admin/partials/_forms.sass +322 -0
  355. data/public/stylesheets/sass/admin/partials/_header.sass +114 -0
  356. data/public/stylesheets/sass/admin/partials/_index.sass +147 -0
  357. data/public/stylesheets/sass/admin/partials/_layout.sass +10 -0
  358. data/public/stylesheets/sass/admin/partials/_messages.sass +10 -0
  359. data/public/stylesheets/sass/admin/partials/_popup.sass +213 -0
  360. data/public/stylesheets/sass/admin/partials/_tabcontrol.sass +72 -0
  361. data/public/stylesheets/sass/admin/partials/_toolbar.sass +31 -0
  362. data/public/stylesheets/sass/admin/partials/_typography.sass +60 -0
  363. data/public/stylesheets/sass/admin/partials/_validations.sass +19 -0
  364. data/rails/init.rb +1 -0
  365. data/script/about +4 -0
  366. data/script/breakpointer +3 -0
  367. data/script/console +3 -0
  368. data/script/dbconsole +3 -0
  369. data/script/destroy +3 -0
  370. data/script/extension +5 -0
  371. data/script/generate +3 -0
  372. data/script/performance/benchmarker +3 -0
  373. data/script/performance/profiler +3 -0
  374. data/script/performance/request +3 -0
  375. data/script/plugin +3 -0
  376. data/script/process/inspector +3 -0
  377. data/script/process/reaper +3 -0
  378. data/script/process/spawner +3 -0
  379. data/script/process/spinner +3 -0
  380. data/script/rails +6 -0
  381. data/script/runner +3 -0
  382. data/script/server +3 -0
  383. data/script/version +5 -0
  384. data/spec/ci/database.mysql.yml +4 -0
  385. data/spec/ci/database.postgresql.yml +4 -0
  386. data/spec/ci/database.sqlite.yml +3 -0
  387. data/trusty_cms.gemspec +50 -0
  388. metadata +781 -0
@@ -0,0 +1,430 @@
1
+ /*
2
+ * toggle.js
3
+ *
4
+ * dependencies: prototype.js, lowpro.js, effect.js
5
+ *
6
+ * --------------------------------------------------------------------------
7
+ *
8
+ * A LowPro and Prototype-based library with a collection of behaviors for
9
+ * unobtrusively toggling the visibility of other elements via links,
10
+ * checkboxes, radio buttons, and selects.
11
+ *
12
+ * To use you will need to install the following LowPro behaviors. If you are
13
+ * using Rails, put this in "application.js":
14
+ *
15
+ * Event.addBehavior({
16
+ * 'a.toggle': Toggle.LinkBehavior(),
17
+ * 'input.checkbox.toggle': Toggle.CheckboxBehavior(),
18
+ * 'div.radio_group.toggle': Toggle.RadioGroupBehavior(),
19
+ * 'select.toggle': Toggle.SelectBehavior()
20
+ * });
21
+ *
22
+ * Once the hooks are installed correctly, you should add a "rel" attribute
23
+ * to each element that you want to use as a toggle trigger. Set the value
24
+ * of the "rel" attribute to "toggle[id]" where id is equal to the ID of
25
+ * the element that you want to toggle. You can toggle multiple elements by
26
+ * separating the IDs with commas (like this: "toggle[id1,id2,id3]").
27
+ *
28
+ * For example, a link with a class of "toggle":
29
+ *
30
+ * <a class="toggle" href="#more" rel="toggle[more]">More</a>
31
+ *
32
+ * will become a trigger for a div with an ID of "more". Checkboxes work in
33
+ * the exact same manner. To use with a group of radio buttons, make sure
34
+ * that all of the radio buttons are inside of a div with a class of
35
+ * "radio_group toggle". Then set the "rel" attribute on each radio button
36
+ * that should act as a toggle trigger. Selects work in a similar manner,
37
+ * but the "rel" attribute should be set on each option element that should
38
+ * toggle the visibility of an element or array of elements.
39
+ *
40
+ * Each of the included LowPro behaviors can be customized in various ways.
41
+ * Check out the inline documentation for detailed usage information.
42
+ *
43
+ * Project Homepage: http://github.com/fivepointssolutions/togglejs
44
+ *
45
+ * --------------------------------------------------------------------------
46
+ *
47
+ * Copyright (c) 2007-2010, Five Points Solutions, Inc.
48
+ * Copyright (c) 2010, John W. Long
49
+ *
50
+ * Permission is hereby granted, free of charge, to any person obtaining a
51
+ * copy of this software and associated documentation files (the "Software"),
52
+ * to deal in the Software without restriction, including without limitation
53
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
54
+ * and/or sell copies of the Software, and to permit persons to whom the
55
+ * Software is furnished to do so, subject to the following conditions:
56
+ *
57
+ * The above copyright notice and this permission notice shall be included in
58
+ * all copies or substantial portions of the Software.
59
+ *
60
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
61
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
62
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
63
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
64
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
65
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
66
+ * DEALINGS IN THE SOFTWARE.
67
+ *
68
+ */
69
+
70
+ var Toggle = {
71
+
72
+ DefaultEffect: 'slide',
73
+ DefaultEffectDuration: 0.25,
74
+
75
+ EffectPairs: {
76
+ 'slide' : ['SlideDown','SlideUp'],
77
+ 'blind' : ['BlindDown','BlindUp'],
78
+ 'appear': ['Appear','Fade']
79
+ },
80
+
81
+ /**
82
+ * Toggle.extractAnchor(url) -> String
83
+ *
84
+ * Utility function. Returns everything after the first "#" character in a
85
+ * string. Used to extract the anchor from a URL.
86
+ **/
87
+ extractAnchor: function(url) {
88
+ var matches = String(url).match(/\#(.+)$/);
89
+ if (matches) return matches[1];
90
+ },
91
+
92
+ /**
93
+ * Toggle.extractToggleObjects(string) -> Array
94
+ *
95
+ * Utility function. Returns the associated toggle elements in a string. For
96
+ * string "toggle[one,two,three]" it will return the elements with IDs of
97
+ * "one", "two", and "three".
98
+ **/
99
+ extractToggleObjects: function(string) {
100
+ var matches = String(string).match(/^toggle\[(.+)\]$/);
101
+ if (matches) {
102
+ var ids = matches[1].split(',');
103
+ var elements = [];
104
+ ids.each(function(id) { elements.push($(id)); });
105
+ return elements;
106
+ } else {
107
+ return [];
108
+ }
109
+ },
110
+
111
+ /**
112
+ * Toggle.toggle(elements, effect, options)
113
+ *
114
+ * Utility function. Toggles an element or array of elements with effect
115
+ * and options. Similar to `Effect.toggle()`, but works with multiple
116
+ * elements and also supports setting effect to "none".
117
+ *
118
+ * Parameters
119
+ * - elements: An element or array of elements to toggle
120
+ * - effect: This option specifies the effect that should be used when
121
+ * toggling. The default is "slide", but it can also be set to
122
+ * "blind", "appear", or "none".
123
+ * - options: The standard Effect options hash with the addition of
124
+ * beforeToggle and afterToggle events.
125
+ **/
126
+ toggle: function(elements, effect, options) {
127
+ var elements = $A([elements]).flatten();
128
+ var effect = (effect || Toggle.DefaultEffect).toLowerCase();
129
+ var options = options || {};
130
+
131
+ if (effect == 'none') {
132
+ if (options.beforeStart) options.beforeStart();
133
+ elements.invoke("toggle");
134
+ if (options.afterFinish) options.afterFinish();
135
+ } else {
136
+ options.duration = options.duration || Toggle.DefaultEffectDuration;
137
+
138
+ var effects = elements.map(function(e) {
139
+ var element = $(e);
140
+ var inOrOut = element.visible() ? 1 : 0;
141
+ var name = Toggle.EffectPairs[effect][inOrOut];
142
+ return new Effect[name](element, { sync: true });
143
+ });
144
+
145
+ new Effect.Parallel(effects, options);
146
+ }
147
+ },
148
+
149
+ /**
150
+ * Toggle.show(elements, effect, options)
151
+ *
152
+ * Utility function. Shows an element or array of elements with effect
153
+ * and options.
154
+ **/
155
+ show: function(elements, effect, options) {
156
+ var elements = $([elements]).flatten();
157
+ elements = elements.map(function(element) { return $(element); });
158
+ elements = elements.reject(function(element) { return element.visible(); });
159
+ Toggle.toggle(elements, effect, options);
160
+ },
161
+
162
+ /**
163
+ * Toggle.hide(elements, effect, options)
164
+ *
165
+ * Utility function. Hides an element or array of elements with effect
166
+ * and options.
167
+ **/
168
+ hide: function(elements, effect, options) {
169
+ var elements = $([elements]).flatten();
170
+ elements = elements.map(function(element) { return $(element); });
171
+ elements = elements.reject(function(element) { return !element.visible(); });
172
+ Toggle.toggle(elements, effect, options);
173
+ },
174
+
175
+ /**
176
+ * Toggle.wrapElement(element)
177
+ *
178
+ * Utility function. Wraps element with a div of class "toggle_wrapper"
179
+ * unless one already exists. Returns the "toggle_wrapper" for given
180
+ * element. This is necessary because effects only work properly on
181
+ * elements that do not have padding, borders, or margin.
182
+ **/
183
+ wrapElement: function(element) {
184
+ var element = $(element);
185
+ var parent = $(element.parentNode);
186
+ if (parent.hasClassName('toggle_wrapper')) {
187
+ return parent;
188
+ } else {
189
+ return element.wrap($div({'class': 'toggle_wrapper', 'style': 'display: none'}));
190
+ }
191
+ }
192
+ };
193
+
194
+ /**
195
+ * class Toggle.LinkBehavior < Behavior
196
+ *
197
+ * Allows a link to toggle the display of another element or array of
198
+ * elements on and off. Just set the <tt>rel</tt> attribute to
199
+ * "toggle[id1,id2,...]" on the link and the href of the link to the
200
+ * ID of the first element ("#id1").
201
+ *
202
+ * Options
203
+ * - effect: This option specifies the effect that should be used when
204
+ * toggling. The default is "slide", but it can also be set to
205
+ * "blind", "appear", or "none".
206
+ * - onLoad: Called after the behavior is initialized. The function is
207
+ * automatically bound to the behavior (so "this" referes to the
208
+ * behavior).
209
+ * - beforeToggle: Called after the link is clicked, but before the effect is
210
+ * started. The link is passed as the first parameter and the
211
+ * function is automatically bound to the behavior (so "this"
212
+ * refers to the behavior).
213
+ * - afterToggle: Called after the effect is complete. The link is passed as
214
+ * the first parameter and the function is automatically bound
215
+ * to the behavior (so "this" refers to the behavior).
216
+ **/
217
+ Toggle.LinkBehavior = Behavior.create({
218
+ initialize: function(options) {
219
+ var options = options || {};
220
+
221
+ this.effect = options.effect || Toggle.DefaultEffect;
222
+
223
+ this.onLoad = options.onLoad || Prototype.emptyFunction;
224
+ this.onLoad.bind(this);
225
+
226
+ this.beforeToggle = options.beforeToggle || Prototype.emptyFunction;
227
+ this.beforeToggle.bind(this);
228
+
229
+ this.afterToggle = options.afterToggle || Prototype.emptyFunction;
230
+ this.afterToggle.bind(this);
231
+
232
+ var elements = Toggle.extractToggleObjects(this.element.readAttribute('rel'));
233
+ this.toggleWrappers = elements.map(function(e) { return Toggle.wrapElement(e); });
234
+
235
+ this.toggleID = Toggle.extractAnchor(this.element.href);
236
+ this.element.behavior = this; // a bit of a hack
237
+ Toggle.addLink(this.toggleID, this.element);
238
+
239
+ this.onLoad(this.element);
240
+ },
241
+
242
+ onclick: function() {
243
+ this.toggle();
244
+ return false;
245
+ },
246
+
247
+ toggle: function() {
248
+ Toggle.toggle(
249
+ this.toggleWrappers,
250
+ this.effect,
251
+ {
252
+ beforeStart: function() { this.beforeToggle(this.element); }.bind(this),
253
+ afterFinish: function() { this.afterToggle(this.element); }.bind(this)
254
+ }
255
+ );
256
+ }
257
+ });
258
+ Toggle.links = {};
259
+ Toggle.addLink = function(id, element) {
260
+ this.links[id] = this.links[id] || $A();
261
+ this.links[id].push(element);
262
+ };
263
+
264
+
265
+ // Automatically toggle associated element if anchor is equal to the ID of the
266
+ // link's associated element.
267
+ Event.observe(window, 'dom:loaded', function() {
268
+ var anchor = Toggle.extractAnchor(window.location);
269
+ var links = Toggle.links[anchor];
270
+ if (links) {
271
+ var behavior = links.first().behavior;
272
+ behavior.onclick();
273
+ }
274
+ });
275
+
276
+ /**
277
+ * class Toggle.CheckboxBehavior < Behavior
278
+ *
279
+ * Allows a the selection of a checkbox to toggle an element or group of
280
+ * elements on and off. Just set the `rel` attribute to "toggle[id1,id2,...]"
281
+ * on the checkbox.
282
+ *
283
+ * Options
284
+ * - invert: When set to true the associated element is hidden when checked.
285
+ * - effect: This option specifies the effect that should be used when
286
+ * toggling. The default is "slide", but it can also be set to
287
+ * "blind", "appear", or "none".
288
+ **/
289
+ Toggle.CheckboxBehavior = Behavior.create({
290
+ initialize: function(options) {
291
+ var options = options || {};
292
+ this.invert = options.invert;
293
+
294
+ var elements = Toggle.extractToggleObjects(this.element.readAttribute('rel'));
295
+ this.toggleWrappers = elements.map(function(e) { return Toggle.wrapElement(e); });
296
+
297
+ this.effect = 'none';
298
+ this.toggle();
299
+
300
+ this.effect = options.effect || Toggle.DefaultEffect;
301
+ },
302
+
303
+ onclick: function(event) {
304
+ this.toggle();
305
+ },
306
+
307
+ toggle: function() {
308
+ var method, formElementMethod;
309
+
310
+ if (this.invert) {
311
+ method = this.element.checked ? 'hide' : 'show';
312
+ formElementMethod = this.element.checked ? 'disable' : 'enable';
313
+ } else {
314
+ method = this.element.checked ? 'show' : 'hide';
315
+ formElementMethod = this.element.checked ? 'enable' : 'disable';
316
+ }
317
+
318
+ Toggle[method](this.toggleWrappers, this.effect);
319
+
320
+ // Disable/enable form elements based on whether the container is
321
+ // visible or not.
322
+ this.toggleWrappers.each(function(wrapper) {
323
+ Form.getElements(wrapper).invoke(formElementMethod);
324
+ });
325
+ }
326
+ });
327
+
328
+ /**
329
+ * class Toggle.RadioGroupBehavior < Behavior
330
+ *
331
+ * Allows you to toggle elements based on the selection of a group of radio
332
+ * buttons. Just set the <tt>rel</tt> attribute to "toggle[id1,id2,...]" on
333
+ * each radio button. Radio buttons must be grouped inside a containing
334
+ * element to which the behavior is applied.
335
+ *
336
+ * Options
337
+ * - effect: This option specifies the effect that should be used when
338
+ * toggling. The default is "slide", but it can also be set to
339
+ * "blind", "appear", or "none".
340
+ **/
341
+ Toggle.RadioGroupBehavior = Behavior.create({
342
+ initialize: function(options) {
343
+ var options = options || {};
344
+
345
+ this.radioButtons = this.element.select('input[type=radio]');
346
+
347
+ this.toggleWrapperIDs = $A();
348
+ this.toggleWrapperIDsFor = {};
349
+
350
+ this.radioButtons.each(function(radioButton) {
351
+ var elements = Toggle.extractToggleObjects(radioButton.readAttribute('rel'));
352
+ var ids = elements.invoke('identify');
353
+ var wrapperIDs = elements.map(function(e) { return Toggle.wrapElement(e); }).invoke('identify');
354
+ this.toggleWrapperIDsFor[radioButton.identify()] = wrapperIDs;
355
+ this.toggleWrapperIDs.push(wrapperIDs);
356
+ radioButton.observe('click', this.onRadioButtonClick.bind(this));
357
+ }.bind(this));
358
+
359
+ this.toggleWrapperIDs = this.toggleWrapperIDs.flatten().uniq();
360
+
361
+ this.effect = "none";
362
+ this.toggle();
363
+
364
+ this.effect = options.effect || Toggle.DefaultEffect;
365
+ },
366
+
367
+ onRadioButtonClick: function(event) {
368
+ this.toggle();
369
+ },
370
+
371
+ toggle: function() {
372
+ var group = this.element;
373
+ var radioButton = this.radioButtons.find(function(b) { return b.checked; });
374
+ var wrapperIDs = this.toggleWrapperIDsFor[radioButton.identify()];
375
+ var partitioned = this.toggleWrapperIDs.partition(function(id) { return wrapperIDs.include(id); });
376
+ Toggle.show(partitioned[0], this.effect);
377
+ Toggle.hide(partitioned[1], this.effect);
378
+ }
379
+ });
380
+
381
+
382
+ /**
383
+ * class Toggle.SelectBehavior < Behavior
384
+ *
385
+ * Allows you to toggle elements based on the selection of a combo box. Just
386
+ * set the <tt>rel</tt> attribute to "toggle[id1,id2,...]" on the each select
387
+ * option.
388
+ *
389
+ * Options
390
+ * - effect: This option specifies the effect that should be used when
391
+ * toggling. The default is "slide", but it can also be set to
392
+ * "blind", "appear", or "none".
393
+ **/
394
+ Toggle.SelectBehavior = Behavior.create({
395
+ initialize: function(options) {
396
+ var options = options || {};
397
+
398
+ var optionElements = this.element.select('option');
399
+
400
+ this.toggleWrapperIDs = $A();
401
+ this.toggleWrapperIDsFor = {};
402
+
403
+ optionElements.each(function(optionElement) {
404
+ var elements = Toggle.extractToggleObjects(optionElement.readAttribute('rel'));
405
+ var wrapperIDs = elements.map(function(e) { return Toggle.wrapElement(e); }).invoke('identify');
406
+ this.toggleWrapperIDsFor[optionElement.identify()] = wrapperIDs;
407
+ this.toggleWrapperIDs.push(wrapperIDs);
408
+ }.bind(this));
409
+
410
+ this.toggleWrapperIDs = this.toggleWrapperIDs.flatten().uniq();
411
+
412
+ this.effect = "none";
413
+ this.toggle();
414
+
415
+ this.effect = options.effect || Toggle.DefaultEffect;
416
+ },
417
+
418
+ onchange: function(event) {
419
+ this.toggle();
420
+ },
421
+
422
+ toggle: function() {
423
+ var combo = this.element;
424
+ var option = $(combo.options[combo.selectedIndex]);
425
+ var wrapperIDs = this.toggleWrapperIDsFor[option.identify()];
426
+ var partitioned = this.toggleWrapperIDs.partition(function(id) { return wrapperIDs.include(id); });
427
+ Toggle.show(partitioned[0], this.effect);
428
+ Toggle.hide(partitioned[1], this.effect);
429
+ }
430
+ });
@@ -0,0 +1,53 @@
1
+ // String extensions
2
+ Object.extend(String.prototype, {
3
+ upcase: function() {
4
+ return this.toUpperCase();
5
+ },
6
+
7
+ downcase: function() {
8
+ return this.toLowerCase();
9
+ },
10
+
11
+ toInteger: function() {
12
+ return parseInt(this, 10);
13
+ },
14
+
15
+ toSlug: function(allow_periods) {
16
+ replacement_regex = allow_periods ? /[\s:;=+]+/g : /[\s\.:;=+]+/g;
17
+ return this.strip().downcase().replace(/[^-a-z0-9~\s\.:;+=_]/g, '').replace(replacement_regex, '-');
18
+ }
19
+ });
20
+
21
+ // Element extensions
22
+ Element.addMethods({
23
+ hasWord: function(element, word) {
24
+ element = $(element);
25
+ if (element.nodeType == Node.TEXT_NODE) {
26
+ return element.nodeValue.include(word);
27
+ } else {
28
+ return $A(element.childNodes).any(function(child) {
29
+ return Element.hasWord(child, word);
30
+ });
31
+ }
32
+ },
33
+
34
+ centerInViewport: function(element) {
35
+ var header = $('header');
36
+ var headerBottom = header.getHeight();
37
+ var viewport = document.viewport.getScrollOffsets();
38
+ viewport.height = document.viewport.getHeight();
39
+ viewport.width = document.viewport.getWidth();
40
+ viewport.bottom = viewport.top + viewport.height;
41
+ viewport.top = Math.max(viewport.top, headerBottom);
42
+ viewport.height = viewport.bottom - viewport.top;
43
+ element.style.position = 'absolute';
44
+ element.style.top = (viewport.top + (viewport.height - element.getHeight()) / 2.5) + 'px';
45
+ element.style.left = (viewport.left + (viewport.width - element.getWidth()) / 2) + 'px';
46
+ }
47
+ });
48
+
49
+ Popup.AbstractWindow.addMethods({
50
+ centerWindowInView: function() {
51
+ this.element.centerInViewport();
52
+ }
53
+ });
@@ -0,0 +1,18 @@
1
+ var ValidationErrorBehavior = Behavior.create({
2
+ initialize: function() {
3
+ new ValidationError(this.element);
4
+ }
5
+ });
6
+
7
+ var ValidationError = Class.create({
8
+ initialize: function(element) {
9
+ this.element = $(element);
10
+ this.closer = new Element('a', {'href' : '#', 'class' : 'closer' }).update("x");
11
+ this.closer.observe('click', this.hide.bindAsEventListener(this));
12
+ this.element.insert(this.closer, {position : 'top'});
13
+ },
14
+ hide: function (event) {
15
+ event.stop();
16
+ this.element.fade();
17
+ }
18
+ });
@@ -0,0 +1,11 @@
1
+ <html>
2
+ <head>
3
+ <meta http-Equiv="Cache-Control" Content="no-cache">
4
+ <meta http-Equiv="Pragma" Content="no-cache">
5
+ <meta http-Equiv="Expires" Content="0">
6
+ <title>Loading...</title>
7
+ </head>
8
+ <body>
9
+ <p>Loading Preview...</p>
10
+ </body>
11
+ </html>
data/public/robots.txt ADDED
@@ -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,18 @@
1
+ // Fonts
2
+ $base-font-family: "Lucida Grande", "Bitstream Vera Sans", Helvetica, Verdana, Arial, sans-serif
3
+ $base-font-size: 15px
4
+
5
+ // Links
6
+ $base-link-color: #0066cc
7
+ $alt-link-color: red
8
+
9
+ // Header
10
+ $header: #ca0000 !default
11
+ $primary-tab: rgba(white, 0.3)
12
+ $primary-tab-current: white
13
+
14
+ // Modules
15
+ @import "compass"
16
+ @import "modules/links"
17
+ @import "modules/boxes"
18
+ @import "modules/gradients"
@@ -0,0 +1,27 @@
1
+ // main.css - main stylesheet for the TrustyCms admin interface
2
+
3
+ // Common Variables and Modules
4
+ @import "base"
5
+
6
+ +global-reset
7
+
8
+ // Partials
9
+ @import "partials/typography"
10
+ @import "partials/layout"
11
+ @import "partials/header"
12
+ @import "partials/avatars"
13
+ @import "partials/dropdown"
14
+ @import "partials/messages"
15
+ @import "partials/forms"
16
+ @import "partials/index"
17
+ @import "partials/content"
18
+ @import "partials/actions"
19
+ @import "partials/footer"
20
+ @import "partials/popup"
21
+ @import "partials/tabcontrol"
22
+ @import "partials/dateinput"
23
+ @import "partials/toolbar"
24
+ @import "partials/validations"
25
+
26
+ // Deprecated
27
+ @import "partials/deprecated"
@@ -0,0 +1,6 @@
1
+ =alt-box
2
+ background: #d8d8d8
3
+ +linear-gradient(color-stops(#fff, #ccc))
4
+ +border-radius(8px)
5
+ +single-box-shadow(rgba(0,0,0,0.15), 2px, 2px, 3px)
6
+ padding: 12px 10px
@@ -0,0 +1,4 @@
1
+ // Reproduce the deprecated Compass linear-gradient mixin
2
+
3
+ =linear-gradient($color-stops, $start: top, $image: false)
4
+ +background-image($image, linear-gradient($start, $color-stops))
@@ -0,0 +1,18 @@
1
+ =default-link
2
+ color: $base-link-color
3
+ text-decoration: underline
4
+ &:hover
5
+ text-decoration: none
6
+
7
+ =alt-link
8
+ color: $alt-link-color
9
+ text-decoration: underline
10
+ &:hover
11
+ text-decoration: none
12
+
13
+ =plain-link
14
+ color: #333
15
+ text-decoration: none
16
+ &:hover
17
+ text-decoration: underline
18
+ color: $base-link-color
@@ -0,0 +1,2 @@
1
+ // File to hold custom overrides
2
+ /* Make your custom overrides here. This file will not be updated by TrustyCms */
@@ -0,0 +1,96 @@
1
+ =button-shadow
2
+ +single-box-shadow(#555, 1px, 2px, 3px)
3
+ =no-button-shadow
4
+ +single-box-shadow(#555,0,0,0)
5
+
6
+ #actions
7
+ position: fixed
8
+ left: 0
9
+ right: 0
10
+ bottom: 0
11
+ background: #777
12
+ +linear-gradient(color-stops(#555, #666, #777, #777))
13
+ ul
14
+ padding: 14px 8px
15
+ li
16
+ display: inline
17
+ margin-right: 5px
18
+
19
+ .pagination
20
+ position: relative
21
+ overflow: hidden
22
+ float: right
23
+ margin-right: 24px
24
+ padding: 0 5px 5px 0
25
+ a, span.current, span.disabled
26
+ display: block
27
+ float: left
28
+ padding: 6px 12px 6px 12px
29
+ margin-right: 1px
30
+ background: #ddd
31
+ +linear-gradient(color-stops(#c5c5c5, #f0f0f0 20%, #fff 35%, #fff))
32
+ color: #999
33
+ font-size: 80%
34
+ text-decoration: none
35
+ +border-bottom-radius(5px)
36
+ +border-top-radius(0)
37
+ a
38
+ text-shadow: 1px 1px 1px #eee
39
+ &:hover
40
+ background: #d8d8d8
41
+ +linear-gradient(color-stops(#fff, #fff, #ddd))
42
+ color: #0076a3
43
+ +button-shadow
44
+ &:active
45
+ color: #000
46
+ +no-button-shadow
47
+ span.disabled
48
+ color: #666
49
+ background-color: #999
50
+ +linear-gradient(color-stops(#888, #999, #999, #999))
51
+ span.current
52
+ color: #000
53
+ background: white
54
+ font-weight: bold
55
+ background-image: none
56
+ +button-shadow
57
+ span.gap
58
+ display: block
59
+ float: left
60
+ padding: 6px
61
+ color: #ccc
62
+ .depaginate
63
+ float: right
64
+ padding: 6px 12px
65
+ a
66
+ +no-button-shadow
67
+ background: none
68
+ font-size: 80%
69
+ color: #ccc
70
+ text-shadow: none
71
+ text-decoration: none
72
+ &:hover
73
+ color: #fff
74
+
75
+ .button_form
76
+ display: inline
77
+ .action_button
78
+ display: inline
79
+ background: #d8d8d8
80
+ +linear-gradient(color-stops(#fff, #ccc))
81
+ color: #333
82
+ font-size: 80%
83
+ padding: 8px 12px
84
+ text-decoration: none
85
+ text-shadow: 1px 1px 1px #eee
86
+ +border-radius(5px)
87
+ +button-shadow
88
+ &:hover
89
+ color: #0076a3
90
+ text-shadow: 1px 1px 1px #fff
91
+ &:active
92
+ background: #fff
93
+ +no-button-shadow
94
+ color: black
95
+ img
96
+ vertical-align: -20%