radiant 1.0.0.rc3 → 1.0.0.rc4

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 (296) hide show
  1. data/.gitignore +1 -1
  2. data/CHANGELOG.md +172 -4
  3. data/CONTRIBUTORS.md +13 -0
  4. data/Gemfile +6 -4
  5. data/Gemfile.lock +3 -3
  6. data/INSTALL.md +2 -2
  7. data/README.md +1 -1
  8. data/Rakefile +2 -1
  9. data/app/controllers/admin/pages_controller.rb +2 -0
  10. data/app/helpers/admin/node_helper.rb +5 -42
  11. data/app/helpers/admin/resource_helper.rb +2 -0
  12. data/app/models/file_not_found_page.rb +1 -1
  13. data/app/models/menu_renderer.rb +133 -0
  14. data/app/models/page.rb +10 -10
  15. data/app/models/radiant/config.rb +2 -1
  16. data/app/models/standard_tags.rb +15 -3
  17. data/app/views/admin/pages/_node.html.haml +3 -3
  18. data/bin/ci/before_script +13 -0
  19. data/bin/radiant +0 -2
  20. data/config.ru +2 -0
  21. data/config/boot.rb +0 -1
  22. data/config/cucumber.yml +1 -1
  23. data/config/environment.rb +2 -0
  24. data/config/initializers/radiant_config.rb +1 -1
  25. data/config/initializers/rails_patch.rb +2 -0
  26. data/config/locales/en.yml +4 -1
  27. data/config/preinitializer.rb +1 -1
  28. data/db/migrate/20110902203823_add_allowed_children_cache_to_pages.rb +13 -0
  29. data/db/migrate/20111016150725_extend_page_part_content_limit.rb +15 -0
  30. data/db/radiant_dev.db.default +0 -0
  31. data/db/radiant_dev.db.high_five +0 -0
  32. data/db/schema.rb +8 -7
  33. data/features/admin/pages_management.feature +5 -15
  34. data/features/step_definitions/admin/pages_management_steps.rb +17 -0
  35. data/lib/generators/extension/templates/tasks.rake +0 -8
  36. data/lib/generators/instance/instance_generator.rb +2 -3
  37. data/lib/generators/instance/templates/instance_gemfile +22 -22
  38. data/lib/generators/language_extension/language_extension_generator.rb +22 -0
  39. data/lib/generators/language_extension/templates/available_tags.yml +1 -1
  40. data/lib/generators/language_extension/templates/extension.rb +9 -5
  41. data/lib/generators/language_extension/templates/gemspec.rb +24 -0
  42. data/lib/generators/language_extension/templates/lang.yml +1 -1
  43. data/lib/generators/language_extension/templates/lib.rb +8 -0
  44. data/lib/plugins/string_extensions/lib/string_extensions.rb +3 -1
  45. data/lib/radiant.rb +1 -1
  46. data/lib/radiant/admin_ui/region_partials.rb +5 -0
  47. data/lib/radiant/cache.rb +2 -1
  48. data/lib/radiant/extension/script.rb +3 -3
  49. data/lib/radiant/extension_loader.rb +4 -2
  50. data/lib/radiant/extension_path.rb +10 -2
  51. data/lib/radiant/initializer.rb +10 -14
  52. data/lib/radiant/resource_responses.rb +6 -0
  53. data/lib/radiant/setup.rb +5 -2
  54. data/lib/radiant/taggable.rb +7 -1
  55. data/lib/tasks/cucumber.rake +6 -0
  56. data/lib/tasks/database.rake +9 -5
  57. data/lib/tasks/extensions.rake +2 -17
  58. data/lib/tasks/framework.rake +52 -31
  59. data/public/javascripts/admin/assets.js +296 -0
  60. data/public/javascripts/application.js +2 -0
  61. data/public/javascripts/controls.js +963 -0
  62. data/public/javascripts/dragdrop.js +973 -0
  63. data/public/javascripts/effects.js +1128 -0
  64. data/public/javascripts/prototype.js +4320 -0
  65. data/public/stylesheets/admin/main.css +1 -1
  66. data/public/stylesheets/sass/admin/assets.sass +209 -0
  67. data/radiant.gemspec +33 -34
  68. data/spec/ci/database.mysql.yml +7 -0
  69. data/spec/ci/database.postgresql.yml +7 -0
  70. data/spec/ci/database.sqlite.yml +6 -0
  71. data/spec/controllers/site_controller_spec.rb +2 -2
  72. data/spec/datasets/config_dataset.rb +3 -2
  73. data/spec/datasets/home_page_dataset.rb +1 -1
  74. data/spec/datasets/layouts_dataset.rb +1 -1
  75. data/spec/datasets/snippets_dataset.rb +1 -1
  76. data/spec/generators/instance_generator_spec.rb +5 -11
  77. data/spec/helpers/admin/node_helper_spec.rb +1 -50
  78. data/spec/helpers/admin/regions_helper_spec.rb +1 -1
  79. data/spec/lib/radiant/admin_ui/region_partials_spec.rb +1 -1
  80. data/spec/lib/radiant/initializer_spec.rb +2 -7
  81. data/spec/lib/radiant/resource_responses_spec.rb +1 -1
  82. data/spec/lib/radiant/taggable_spec.rb +1 -1
  83. data/spec/lib/task_support_spec.rb +1 -0
  84. data/spec/models/menu_renderer_spec.rb +297 -0
  85. data/spec/models/page_spec.rb +21 -8
  86. data/spec/models/standard_tags_spec.rb +6 -2
  87. data/test/fixtures/extensions/basic/app/helpers/basic_extension_helper.rb +2 -0
  88. data/testthegemgeneration/CHANGELOG.md +721 -0
  89. data/testthegemgeneration/CONTRIBUTORS.md +257 -0
  90. data/testthegemgeneration/Gemfile +57 -0
  91. data/testthegemgeneration/Gemfile.lock +107 -0
  92. data/testthegemgeneration/INSTALL.md +42 -0
  93. data/testthegemgeneration/LICENSE.md +21 -0
  94. data/testthegemgeneration/README.md +84 -0
  95. data/testthegemgeneration/Rakefile +3 -0
  96. data/testthegemgeneration/config.ru +2 -0
  97. data/testthegemgeneration/config/boot.rb +122 -0
  98. data/testthegemgeneration/config/cucumber.yml +7 -0
  99. data/testthegemgeneration/config/database.yml +16 -0
  100. data/testthegemgeneration/config/environment.rb +81 -0
  101. data/testthegemgeneration/config/environments/cucumber.rb +22 -0
  102. data/testthegemgeneration/config/environments/development.rb +17 -0
  103. data/testthegemgeneration/config/environments/production.rb +24 -0
  104. data/testthegemgeneration/config/environments/test.rb +32 -0
  105. data/testthegemgeneration/config/initializers/radiant_config.rb +16 -0
  106. data/testthegemgeneration/config/preinitializer.rb +19 -0
  107. data/testthegemgeneration/config/routes.rb +1 -0
  108. data/testthegemgeneration/db/development.sqlite3.db +0 -0
  109. data/testthegemgeneration/db/schema.rb +142 -0
  110. data/testthegemgeneration/log/development.log +1055 -0
  111. data/testthegemgeneration/public/404.html +8 -0
  112. data/testthegemgeneration/public/500.html +8 -0
  113. data/testthegemgeneration/public/dispatch.cgi +10 -0
  114. data/testthegemgeneration/public/dispatch.fcgi +24 -0
  115. data/testthegemgeneration/public/dispatch.rb +10 -0
  116. data/testthegemgeneration/public/favicon.ico +0 -0
  117. data/testthegemgeneration/public/flash/ZeroClipboard.swf +0 -0
  118. data/testthegemgeneration/public/images/admin/add_tab.png +0 -0
  119. data/testthegemgeneration/public/images/admin/assets/add.png +0 -0
  120. data/testthegemgeneration/public/images/admin/assets/archive_icon.png +0 -0
  121. data/testthegemgeneration/public/images/admin/assets/audio_icon.png +0 -0
  122. data/testthegemgeneration/public/images/admin/assets/audio_thumbnail.png +0 -0
  123. data/testthegemgeneration/public/images/admin/assets/c_icon.png +0 -0
  124. data/testthegemgeneration/public/images/admin/assets/copy.png +0 -0
  125. data/testthegemgeneration/public/images/admin/assets/css_icon.png +0 -0
  126. data/testthegemgeneration/public/images/admin/assets/database_icon.png +0 -0
  127. data/testthegemgeneration/public/images/admin/assets/delete.png +0 -0
  128. data/testthegemgeneration/public/images/admin/assets/document_icon.png +0 -0
  129. data/testthegemgeneration/public/images/admin/assets/document_thumbnail.png +0 -0
  130. data/testthegemgeneration/public/images/admin/assets/flash_icon.png +0 -0
  131. data/testthegemgeneration/public/images/admin/assets/flash_thumbnail.png +0 -0
  132. data/testthegemgeneration/public/images/admin/assets/font_icon.png +0 -0
  133. data/testthegemgeneration/public/images/admin/assets/gzip_icon.png +0 -0
  134. data/testthegemgeneration/public/images/admin/assets/html_icon.png +0 -0
  135. data/testthegemgeneration/public/images/admin/assets/image_icon.png +0 -0
  136. data/testthegemgeneration/public/images/admin/assets/image_thumbnail.png +0 -0
  137. data/testthegemgeneration/public/images/admin/assets/java_icon.png +0 -0
  138. data/testthegemgeneration/public/images/admin/assets/page_edit.png +0 -0
  139. data/testthegemgeneration/public/images/admin/assets/perl_icon.png +0 -0
  140. data/testthegemgeneration/public/images/admin/assets/php_icon.png +0 -0
  141. data/testthegemgeneration/public/images/admin/assets/presentation_icon.png +0 -0
  142. data/testthegemgeneration/public/images/admin/assets/python_icon.png +0 -0
  143. data/testthegemgeneration/public/images/admin/assets/reorder_assets.png +0 -0
  144. data/testthegemgeneration/public/images/admin/assets/ruby_icon.png +0 -0
  145. data/testthegemgeneration/public/images/admin/assets/script_icon.png +0 -0
  146. data/testthegemgeneration/public/images/admin/assets/spreadsheet_icon.png +0 -0
  147. data/testthegemgeneration/public/images/admin/assets/tar_icon.png +0 -0
  148. data/testthegemgeneration/public/images/admin/assets/unknown_icon.png +0 -0
  149. data/testthegemgeneration/public/images/admin/assets/unknown_thumbnail.png +0 -0
  150. data/testthegemgeneration/public/images/admin/assets/video_icon.png +0 -0
  151. data/testthegemgeneration/public/images/admin/assets/video_thumbnail.png +0 -0
  152. data/testthegemgeneration/public/images/admin/assets/xml_icon.png +0 -0
  153. data/testthegemgeneration/public/images/admin/assets/zip_icon.png +0 -0
  154. data/testthegemgeneration/public/images/admin/avatar_32x32.png +0 -0
  155. data/testthegemgeneration/public/images/admin/avatar_64x64.png +0 -0
  156. data/testthegemgeneration/public/images/admin/avatar_96x96.png +0 -0
  157. data/testthegemgeneration/public/images/admin/brown_bottom_line.gif +0 -0
  158. data/testthegemgeneration/public/images/admin/calendar_down.gif +0 -0
  159. data/testthegemgeneration/public/images/admin/collapse.png +0 -0
  160. data/testthegemgeneration/public/images/admin/draft_page.png +0 -0
  161. data/testthegemgeneration/public/images/admin/expand.png +0 -0
  162. data/testthegemgeneration/public/images/admin/image.png +0 -0
  163. data/testthegemgeneration/public/images/admin/javascript.png +0 -0
  164. data/testthegemgeneration/public/images/admin/layout.png +0 -0
  165. data/testthegemgeneration/public/images/admin/metadata_toggle.png +0 -0
  166. data/testthegemgeneration/public/images/admin/minus.png +0 -0
  167. data/testthegemgeneration/public/images/admin/minus_disabled.png +0 -0
  168. data/testthegemgeneration/public/images/admin/minus_grey.png +0 -0
  169. data/testthegemgeneration/public/images/admin/navigation_secondary_separator.gif +0 -0
  170. data/testthegemgeneration/public/images/admin/page.png +0 -0
  171. data/testthegemgeneration/public/images/admin/plus.png +0 -0
  172. data/testthegemgeneration/public/images/admin/plus_disabled.png +0 -0
  173. data/testthegemgeneration/public/images/admin/plus_grey.png +0 -0
  174. data/testthegemgeneration/public/images/admin/popup_border_background.png +0 -0
  175. data/testthegemgeneration/public/images/admin/popup_border_bottom_left.png +0 -0
  176. data/testthegemgeneration/public/images/admin/popup_border_bottom_right.png +0 -0
  177. data/testthegemgeneration/public/images/admin/popup_border_top_left.png +0 -0
  178. data/testthegemgeneration/public/images/admin/popup_border_top_right.png +0 -0
  179. data/testthegemgeneration/public/images/admin/search.png +0 -0
  180. data/testthegemgeneration/public/images/admin/single_form_shadow.png +0 -0
  181. data/testthegemgeneration/public/images/admin/snippet.png +0 -0
  182. data/testthegemgeneration/public/images/admin/spinner.gif +0 -0
  183. data/testthegemgeneration/public/images/admin/status_background.png +0 -0
  184. data/testthegemgeneration/public/images/admin/status_bottom_left.png +0 -0
  185. data/testthegemgeneration/public/images/admin/status_bottom_right.png +0 -0
  186. data/testthegemgeneration/public/images/admin/status_spinner.gif +0 -0
  187. data/testthegemgeneration/public/images/admin/status_top_left.png +0 -0
  188. data/testthegemgeneration/public/images/admin/status_top_right.png +0 -0
  189. data/testthegemgeneration/public/images/admin/stylesheet.png +0 -0
  190. data/testthegemgeneration/public/images/admin/tab_close.png +0 -0
  191. data/testthegemgeneration/public/images/admin/upload.png +0 -0
  192. data/testthegemgeneration/public/images/admin/virtual_page.png +0 -0
  193. data/testthegemgeneration/public/images/radiant/radiant-badge-color.png +0 -0
  194. data/testthegemgeneration/public/images/roasters/banner.jpg +0 -0
  195. data/testthegemgeneration/public/images/roasters/closelabel.gif +0 -0
  196. data/testthegemgeneration/public/images/roasters/comment.png +0 -0
  197. data/testthegemgeneration/public/images/roasters/gallery1.jpg +0 -0
  198. data/testthegemgeneration/public/images/roasters/gallery2.jpg +0 -0
  199. data/testthegemgeneration/public/images/roasters/gallery3.jpg +0 -0
  200. data/testthegemgeneration/public/images/roasters/gallery4.jpg +0 -0
  201. data/testthegemgeneration/public/images/roasters/gift.gif +0 -0
  202. data/testthegemgeneration/public/images/roasters/green.gif +0 -0
  203. data/testthegemgeneration/public/images/roasters/nav-background.gif +0 -0
  204. data/testthegemgeneration/public/images/roasters/nav-divider.gif +0 -0
  205. data/testthegemgeneration/public/images/roasters/nextlabel.gif +0 -0
  206. data/testthegemgeneration/public/images/roasters/open.gif +0 -0
  207. data/testthegemgeneration/public/images/roasters/preview-1.jpg +0 -0
  208. data/testthegemgeneration/public/images/roasters/preview.jpg +0 -0
  209. data/testthegemgeneration/public/images/roasters/prevlabel.gif +0 -0
  210. data/testthegemgeneration/public/images/roasters/prize.gif +0 -0
  211. data/testthegemgeneration/public/images/roasters/recycle.gif +0 -0
  212. data/testthegemgeneration/public/images/roasters/rss.gif +0 -0
  213. data/testthegemgeneration/public/images/roasters/thumb-grinder.jpg +0 -0
  214. data/testthegemgeneration/public/images/roasters/thumb-grower.jpg +0 -0
  215. data/testthegemgeneration/public/images/roasters/thumb-roaster.jpg +0 -0
  216. data/testthegemgeneration/public/images/roasters/truck.gif +0 -0
  217. data/testthegemgeneration/public/javascripts/admin/application.js +94 -0
  218. data/testthegemgeneration/public/javascripts/admin/assets.js +296 -0
  219. data/testthegemgeneration/public/javascripts/admin/codearea.js +165 -0
  220. data/testthegemgeneration/public/javascripts/admin/controls.js +965 -0
  221. data/testthegemgeneration/public/javascripts/admin/cookie.js +80 -0
  222. data/testthegemgeneration/public/javascripts/admin/dateinput.js +402 -0
  223. data/testthegemgeneration/public/javascripts/admin/dragdrop.js +974 -0
  224. data/testthegemgeneration/public/javascripts/admin/dropdown.js +216 -0
  225. data/testthegemgeneration/public/javascripts/admin/effects.js +1122 -0
  226. data/testthegemgeneration/public/javascripts/admin/lowpro.js +340 -0
  227. data/testthegemgeneration/public/javascripts/admin/overrides.js +1 -0
  228. data/testthegemgeneration/public/javascripts/admin/page_preview.js +41 -0
  229. data/testthegemgeneration/public/javascripts/admin/pagefield.js +54 -0
  230. data/testthegemgeneration/public/javascripts/admin/pagestatus.js +17 -0
  231. data/testthegemgeneration/public/javascripts/admin/popup.js +339 -0
  232. data/testthegemgeneration/public/javascripts/admin/prototype.js +4874 -0
  233. data/testthegemgeneration/public/javascripts/admin/ruledtable.js +13 -0
  234. data/testthegemgeneration/public/javascripts/admin/shortcuts.js +27 -0
  235. data/testthegemgeneration/public/javascripts/admin/sitemap.js +149 -0
  236. data/testthegemgeneration/public/javascripts/admin/status.js +233 -0
  237. data/testthegemgeneration/public/javascripts/admin/tabcontrol.js +123 -0
  238. data/testthegemgeneration/public/javascripts/admin/toggle.js +430 -0
  239. data/testthegemgeneration/public/javascripts/admin/utility.js +53 -0
  240. data/testthegemgeneration/public/javascripts/admin/validationerror.js +18 -0
  241. data/testthegemgeneration/public/javascripts/application.js +2 -0
  242. data/testthegemgeneration/public/javascripts/controls.js +963 -0
  243. data/testthegemgeneration/public/javascripts/dragdrop.js +973 -0
  244. data/testthegemgeneration/public/javascripts/effects.js +1128 -0
  245. data/testthegemgeneration/public/javascripts/prototype.js +4320 -0
  246. data/testthegemgeneration/public/loading-iframe.html +11 -0
  247. data/testthegemgeneration/public/robots.txt +1 -0
  248. data/testthegemgeneration/public/stylesheets/admin/assets.css +1 -0
  249. data/testthegemgeneration/public/stylesheets/admin/main.css +1 -0
  250. data/testthegemgeneration/public/stylesheets/admin/overrides.css +0 -0
  251. data/testthegemgeneration/public/stylesheets/sass/admin/_base.sass +17 -0
  252. data/testthegemgeneration/public/stylesheets/sass/admin/assets.sass +209 -0
  253. data/testthegemgeneration/public/stylesheets/sass/admin/main.sass +27 -0
  254. data/testthegemgeneration/public/stylesheets/sass/admin/modules/_boxes.sass +6 -0
  255. data/testthegemgeneration/public/stylesheets/sass/admin/modules/_links.sass +18 -0
  256. data/testthegemgeneration/public/stylesheets/sass/admin/overrides.sass +2 -0
  257. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_actions.sass +96 -0
  258. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_avatars.sass +10 -0
  259. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_content.sass +58 -0
  260. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_dateinput.sass +62 -0
  261. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_deprecated.sass +55 -0
  262. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_dropdown.sass +28 -0
  263. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_footer.sass +12 -0
  264. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_forms.sass +322 -0
  265. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_header.sass +114 -0
  266. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_index.sass +147 -0
  267. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_layout.sass +10 -0
  268. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_messages.sass +10 -0
  269. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_popup.sass +213 -0
  270. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_tabcontrol.sass +72 -0
  271. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_toolbar.sass +31 -0
  272. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_typography.sass +60 -0
  273. data/testthegemgeneration/public/stylesheets/sass/admin/partials/_validations.sass +19 -0
  274. data/testthegemgeneration/script/about +4 -0
  275. data/testthegemgeneration/script/autospec +5 -0
  276. data/testthegemgeneration/script/breakpointer +3 -0
  277. data/testthegemgeneration/script/console +3 -0
  278. data/testthegemgeneration/script/cucumber +10 -0
  279. data/testthegemgeneration/script/dbconsole +3 -0
  280. data/testthegemgeneration/script/extension +5 -0
  281. data/testthegemgeneration/script/generate +6 -0
  282. data/testthegemgeneration/script/performance/benchmarker +3 -0
  283. data/testthegemgeneration/script/performance/profiler +3 -0
  284. data/testthegemgeneration/script/performance/request +3 -0
  285. data/testthegemgeneration/script/process/inspector +3 -0
  286. data/testthegemgeneration/script/process/reaper +3 -0
  287. data/testthegemgeneration/script/process/spawner +3 -0
  288. data/testthegemgeneration/script/process/spinner +3 -0
  289. data/testthegemgeneration/script/runner +3 -0
  290. data/testthegemgeneration/script/server +3 -0
  291. data/testthegemgeneration/script/spec +5 -0
  292. data/testthegemgeneration/script/spec_server +116 -0
  293. data/testthegemgeneration/script/version +5 -0
  294. data/testthegemgeneration/tmp/radiant_config_cache.txt +0 -0
  295. metadata +845 -133
  296. data/public/stylesheets/admin/base.css +0 -1
@@ -0,0 +1,8 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <body>
5
+ <h1>File not found</h1>
6
+ <p>Change this error message for pages not found in public/404.html</p>
7
+ </body>
8
+ </html>
@@ -0,0 +1,8 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <body>
5
+ <h1>Application error</h1>
6
+ <p>Change this error message for exceptions thrown outside of an action (like in Dispatcher setups or broken Ruby code) in public/500.html</p>
7
+ </body>
8
+ </html>
@@ -0,0 +1,10 @@
1
+ #!/Users/jim/Developer/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
4
+
5
+ # If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
6
+ # "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
7
+ require "dispatcher"
8
+
9
+ ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
10
+ Dispatcher.dispatch
@@ -0,0 +1,24 @@
1
+ #!/Users/jim/Developer/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby
2
+ #
3
+ # You may specify the path to the FastCGI crash log (a log of unhandled
4
+ # exceptions which forced the FastCGI instance to exit, great for debugging)
5
+ # and the number of requests to process before running garbage collection.
6
+ #
7
+ # By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
8
+ # and the GC period is nil (turned off). A reasonable number of requests
9
+ # could range from 10-100 depending on the memory footprint of your app.
10
+ #
11
+ # Example:
12
+ # # Default log path, normal GC behavior.
13
+ # RailsFCGIHandler.process!
14
+ #
15
+ # # Default log path, 50 requests between GC.
16
+ # RailsFCGIHandler.process! nil, 50
17
+ #
18
+ # # Custom log path, normal GC behavior.
19
+ # RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
20
+ #
21
+ require File.dirname(__FILE__) + "/../config/environment"
22
+ require 'fcgi_handler'
23
+
24
+ RailsFCGIHandler.process!
@@ -0,0 +1,10 @@
1
+ #!/Users/jim/Developer/.rvm/rubies/ree-1.8.7-2011.03/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
4
+
5
+ # If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
6
+ # "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
7
+ require "dispatcher"
8
+
9
+ ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
10
+ Dispatcher.dispatch
@@ -0,0 +1,94 @@
1
+ // Ensure that relative_url_root is defined
2
+ if(typeof(relative_url_root) === 'undefined'){ relative_url_root = '';}
3
+
4
+ // Popup Images
5
+ Popup.BorderImage = relative_url_root + '/images/admin/popup_border_background.png';
6
+ Popup.BorderTopLeftImage = relative_url_root + '/images/admin/popup_border_top_left.png';
7
+ Popup.BorderTopRightImage = relative_url_root + '/images/admin/popup_border_top_right.png';
8
+ Popup.BorderBottomLeftImage = relative_url_root + '/images/admin/popup_border_bottom_left.png';
9
+ Popup.BorderBottomRightImage = relative_url_root + '/images/admin/popup_border_bottom_right.png';
10
+
11
+ // Popup Buttons
12
+ Popup.ButtonsClass = 'buttons';
13
+
14
+ // Make all popups draggable
15
+ Popup.Draggable = true;
16
+
17
+ // Make all popups singular (on opening they close other open popups)
18
+ Popup.Singular = true;
19
+
20
+ // Status Images
21
+ Status.SpinnerImage = relative_url_root + '/images/admin/status_spinner.gif';
22
+ Status.BackgroundImage = relative_url_root + '/images/admin/status_background.png';
23
+ Status.TopLeftImage = relative_url_root + '/images/admin/status_top_left.png';
24
+ Status.TopRightImage = relative_url_root + '/images/admin/status_top_right.png';
25
+ Status.BottomLeftImage = relative_url_root + '/images/admin/status_bottom_left.png';
26
+ Status.BottomRightImage = relative_url_root + '/images/admin/status_bottom_right.png';
27
+
28
+ // Status Message Styles
29
+ Status.MessageColor = '#e5e5e5';
30
+ Status.MessageFontFamily = '"Lucida Grande", "Bitstream Vera Sans", Helvetica, Verdana, Arial, sans-serif';
31
+ Status.MessageFontSize = '90%';
32
+
33
+ // Use Modal Status Windows
34
+ Status.Modal = true;
35
+ Status.ModalOverlayColor = 'black';
36
+ Status.ModalOverlayOpacity = 0.2;
37
+
38
+ // Reload behaviors for Ajax Requests
39
+ Event.addBehavior.reassignAfterAjax = true;
40
+
41
+ // Wire in Behaviors
42
+ Event.addBehavior({
43
+ 'body': ShortcutKeysBehavior(),
44
+
45
+ 'a.popup': Popup.TriggerBehavior(),
46
+
47
+ 'table#pages': SiteMapBehavior(),
48
+
49
+ 'input#page_title': function() {
50
+ var title = this;
51
+ var slug = $('page_slug');
52
+ var breadcrumb = $('page_breadcrumb');
53
+ var oldTitle = title.value;
54
+
55
+ if (!slug || !breadcrumb) return;
56
+
57
+ new Form.Element.Observer(title, 0.15, function() {
58
+ if (oldTitle.toSlug() == slug.value) slug.value = title.value.toSlug();
59
+ if (oldTitle == breadcrumb.value) breadcrumb.value = title.value;
60
+ oldTitle = title.value;
61
+ });
62
+ },
63
+
64
+ 'a.toggle': Toggle.LinkBehavior({
65
+ onLoad: function(link) {
66
+ if (/less/i.match(link.innerHTML)) Toggle.toggle(this.toggleWrappers, this.effect);
67
+ },
68
+ afterToggle: function(link) {
69
+ link.toggleClassName('more');
70
+ link.toggleClassName('less');
71
+ if (/more/i.match(link.innerHTML)) { link.innerHTML = 'Less'; return; }
72
+ if (/less/i.match(link.innerHTML)) { link.innerHTML = 'More'; return; }
73
+ }
74
+ }),
75
+
76
+ 'div#tab_control': TabControlBehavior(),
77
+
78
+ 'table.index': RuledTableBehavior(),
79
+
80
+ 'form': Status.FormBehavior(),
81
+
82
+ 'form input.activate': function() {
83
+ this.activate();
84
+ },
85
+
86
+ 'form textarea': CodeAreaBehavior(),
87
+
88
+ 'input.date': DateInputBehavior(),
89
+
90
+ 'select#page_status_id': PageStatusBehavior(),
91
+
92
+ 'span.error': ValidationErrorBehavior()
93
+
94
+ });
@@ -0,0 +1,296 @@
1
+ var Asset = {};
2
+
3
+ Asset.Upload = Behavior.create({
4
+ onsubmit: function (e) {
5
+ if (e) e.stop();
6
+ var uuid = Asset.GenerateUUID();
7
+ var ulframe = document.createElement('iframe');
8
+ ulframe.setAttribute('name', uuid); // this doesn't work on ie7: will need bodging
9
+ $('upload_holders').insert(ulframe);
10
+
11
+ var form = this.element;
12
+ var title = form.down('input.textbox').value || form.down('input.file').value;
13
+ var placeholder = Asset.AddPlaceholder(title);
14
+
15
+ form.setAttribute('target', uuid);
16
+ ulframe.observe('load', function (e) {
17
+ if (e) e.stop();
18
+ var response = ulframe.contentDocument.body.innerHTML;
19
+ if (response && response != "") {
20
+ placeholder.remove();
21
+ Asset.AddToList(response);
22
+ ulframe.remove();
23
+ }
24
+ });
25
+
26
+ form.submit();
27
+ $('upload_asset').closePopup();
28
+
29
+ // Small delay is required here to let safari assemble the payload
30
+ // form.down('input').clear().defer();
31
+ // form.down('input.file').clear().defer();
32
+ }
33
+ });
34
+
35
+
36
+ // this local attachment method works and is much quicker, but it's fragile and doesn't notice radiant configuration changes
37
+ // better to bounce off the server, provided it can be made responsive enough.
38
+
39
+ // Asset.Attach = Behavior.create({
40
+ // onclick: function (e) {
41
+ // if (e) e.stop();
42
+ // var container = this.element.up('li.asset');
43
+ // container.addClassName('waiting');
44
+ // var title = container.down('div.title').innerHTML;
45
+ // var image = container.down('img');
46
+ // var uuid = Asset.GenerateUUID();
47
+ // var asset_id = this.element.getAttribute('rel').split('_').last();
48
+ // var attachment_field = document.createElement('input');
49
+ // attachment_field.setAttribute('type', 'hidden');
50
+ // attachment_field.setAttribute('id', 'page_page_attachments_attributes_' + uuid + '_asset_id');
51
+ // attachment_field.setAttribute('name', 'page[page_attachments_attributes][' + uuid + '][asset_id]');
52
+ // attachment_field.value = asset_id;
53
+ // var placeholder = Asset.AddPlaceholder(title, image, attachment_field);
54
+ // container.removeClassName('waiting');
55
+ // placeholder.removeClassName('waiting');
56
+ // }
57
+ // });
58
+
59
+ // ajax-based page attachment is a slightly slower but probably more robust option
60
+ //
61
+ Asset.Attach = Behavior.create({
62
+ onclick: function (e) {
63
+ if (e) e.stop();
64
+ var container = this.element.up('li.asset');
65
+ var title = container.down('div.title').innerHTML;
66
+ var image = container.down('img');
67
+ var placeholder = Asset.AddPlaceholder(title, image);
68
+ container.addClassName('waiting');
69
+ new Ajax.Request(this.element.href, {
70
+ asynchronous: true,
71
+ evalScripts: false,
72
+ method: 'get',
73
+ onSuccess: function(transport) {
74
+ container.removeClassName('waiting');
75
+ placeholder.remove();
76
+ Asset.AddToList(transport.responseText);
77
+ }
78
+ });
79
+ }
80
+ });
81
+
82
+ Asset.Detach = Behavior.create({
83
+ onclick: function (e) {
84
+ if (e) e.stop();
85
+ Asset.RemoveFromList(this.element.up('li.asset'));
86
+ }
87
+ });
88
+
89
+ Asset.Insert = Behavior.create({
90
+ onclick: function(e) {
91
+ if (e) e.stop();
92
+ var part_name = TabControlBehavior.instances[0].controller.selected.caption;
93
+ var textbox = $('part_' + part_name + '_content');
94
+ var tag_parts = this.element.getAttribute('rel').split('_');
95
+ var tag_name = tag_parts[0];
96
+ var asset_size = tag_parts[1];
97
+ var asset_id = tag_parts[2];
98
+ var radius_tag = '<r:asset:' + tag_name;
99
+ if (asset_size != '') radius_tag = radius_tag + ' size="' + asset_size + '"';
100
+ radius_tag = radius_tag +' id="' + asset_id + '" />';
101
+ Asset.InsertAtCursor(textbox, radius_tag);
102
+ }
103
+ });
104
+
105
+ Asset.Sortable = Behavior.create({
106
+ initialize: function (e) {
107
+ this.sorter = Asset.MakeSortable(this.element);
108
+ }
109
+ });
110
+
111
+ // Asset-filter and search functions are available wherever the asset_table partial is displayed
112
+
113
+ Asset.DeselectFileTypes = Behavior.create({
114
+ onclick: function(e){
115
+ e.stop();
116
+ var element = this.element;
117
+ if(!element.hasClassName('pressed')) {
118
+ $$('a.selective').each(function(el) { el.removeClassName('pressed'); });
119
+ $$('input.selective').each(function(el) { el.removeAttribute('checked'); });
120
+ element.addClassName('pressed');
121
+ Asset.UpdateTable(true);
122
+ }
123
+ }
124
+ });
125
+
126
+ Asset.SelectFileType = Behavior.create({
127
+ onclick: function(e){
128
+ e.stop();
129
+ var element = this.element;
130
+ var type_id = element.readAttribute("rel");
131
+ var type_check = $(type_id + '-check');
132
+ if(element.hasClassName('pressed')) {
133
+ element.removeClassName('pressed');
134
+ type_check.removeAttribute('checked');
135
+ if ($$('a.selective.pressed').length == 0) $('select_all').addClassName('pressed');
136
+ } else {
137
+ element.addClassName('pressed');
138
+ $$('a.deselective').each(function(el) { el.removeClassName('pressed'); });
139
+ type_check.setAttribute('checked', 'checked');
140
+ }
141
+ Asset.UpdateTable(true);
142
+ }
143
+ });
144
+
145
+ Asset.SearchForm = Behavior.create({
146
+ initialize: function () {
147
+ this.observer = new Form.Element.Observer(this.element.down('input.search'), 2, Asset.UpdateTable);
148
+ },
149
+ onsubmit: function (e) {
150
+ if (e) e.stop();
151
+ Asset.UpdateTable(true);
152
+ }
153
+ });
154
+
155
+ Asset.Pagination = Behavior.create({
156
+ onclick: function (e) {
157
+ if (e) e.stop();
158
+ var url = this.element.readAttribute('href');
159
+ var pagination = url.toQueryParams();
160
+ var search_form = $('filesearchform');
161
+ search_form.down('#p').value = pagination['p'];
162
+ Asset.UpdateTable(false);
163
+ }
164
+ });
165
+
166
+ Asset.MakeSortable = function (element) {
167
+ var sorter = Sortable.create(element, {
168
+ overlap: 'horizontal',
169
+ constraint: false,
170
+ handle: 'title',
171
+ onChange: function (e) {
172
+ Asset.SetPositions();
173
+ Asset.Notify('Assets reordered. Save page to commit changes.');
174
+ }
175
+ });
176
+ element.addClassName('sortable');
177
+ Asset.SetPositions();
178
+ return sorter;
179
+ }
180
+
181
+ Asset.SetPositions = function () {
182
+ $('attachment_fields').select('input.pos').each(function (input, index) {
183
+ input.value = index;
184
+ });
185
+ }
186
+
187
+ // originally taken from phpMyAdmin
188
+ Asset.InsertAtCursor = function(field, insertion) {
189
+ if (document.selection) { // ie
190
+ field.focus();
191
+ var sel = document.selection.createRange();
192
+ sel.text = insertion;
193
+ }
194
+ else if (field.selectionStart || field.selectionStart == '0') { // moz
195
+ var startPos = field.selectionStart;
196
+ var endPos = field.selectionEnd;
197
+ field.value = field.value.substring(0, startPos) + insertion + field.value.substring(endPos, field.value.length);
198
+ field.selectionStart = field.selectionEnd = startPos + insertion.length;
199
+ } else {
200
+ field.value += value;
201
+ }
202
+ }
203
+
204
+ Asset.GenerateUUID = function () {
205
+ // http://www.ietf.org/rfc/rfc4122.txt
206
+ var s = [];
207
+ var hexDigits = "0123456789ABCDEF";
208
+ for (var i = 0; i < 32; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); }
209
+ s[12] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
210
+ s[16] = hexDigits.substr((s[16] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
211
+ return s.join('');
212
+ };
213
+
214
+ Asset.UpdateTable = function (depaginate) {
215
+ var search_form = $('filesearchform');
216
+ if (depaginate && search_form.down('#p')) search_form.down('#p').value = 1;
217
+ Asset.AllWaiting();
218
+ new Ajax.Updater('assets_table', search_form.action, {
219
+ asynchronous: true,
220
+ evalScripts: false,
221
+ parameters: Form.serialize(search_form),
222
+ method: 'get'
223
+ });
224
+ }
225
+
226
+ Asset.AddToList = function (html) {
227
+ var list = $('attachment_fields');
228
+ list.insert(html);
229
+ Asset.ShowListIfHidden();
230
+ Asset.Notify('Save page to commit changes');
231
+ Event.addBehavior.reload(); // #TODO something a bit more specific would be nice here
232
+ Asset.MakeSortable(list);
233
+ }
234
+
235
+ Asset.RemoveFromList = function (container) {
236
+ var el = null;
237
+ if (!!(el = container.down('input.attacher'))) el.remove();
238
+ if (!!(el = container.down('input.pos'))) el.remove();
239
+ if (!!(el = container.down('input.destroyer'))) el.value = 1;
240
+ container.dropOut({afterFinish: Asset.HideListIfEmpty});
241
+ container.addClassName('detached');
242
+ }
243
+
244
+ Asset.AddPlaceholder = function (title, image, contents) {
245
+ var placeholder = document.createElement('li').addClassName('asset').addClassName('waiting');
246
+ if (contents) placeholder.insert(contents);
247
+ var front = document.createElement('div').addClassName('front');
248
+ if (image) front.insert(document.createElement('div').addClassName('thumbnail').insert(image.clone()));
249
+ placeholder.insert(front);
250
+ if (!title) title = 'please wait';
251
+ var back = document.createElement('div').addClassName('back').insert(document.createElement('div').addClassName('title').update(title));
252
+ placeholder.insert(back);
253
+ $('attachment_fields').insert(placeholder);
254
+ Asset.ShowListIfHidden();
255
+ return placeholder;
256
+ }
257
+
258
+ Asset.AllWaiting = function (container) {
259
+ if (!container) container = $('assets_table');
260
+ container.select('li.asset').each(function (el) { el.addClassName('waiting'); });
261
+ }
262
+
263
+ Asset.Notify = function (message) {
264
+ $('attachment_list').down('span.message').update(message).addClassName('important');
265
+ }
266
+
267
+ Asset.ShowListIfHidden = function () {
268
+ var list = $('attachment_fields');
269
+ if (list.hasClassName('empty')) {
270
+ list.removeClassName('empty');
271
+ // list.slideDown();
272
+ }
273
+ }
274
+
275
+ Asset.HideListIfEmpty = function () {
276
+ var list = $('attachment_fields');
277
+ if (!list.down('li.asset:not(.detached)')) {
278
+ list.addClassName('empty');
279
+ // list.slideUp();
280
+ Asset.Notify('All assets detached. Save page to commit changes');
281
+ } else {
282
+ Asset.Notify('Assets detached. Save page to commit changes');
283
+ }
284
+ }
285
+
286
+ Event.addBehavior({
287
+ 'ul#attachment_fields': Asset.Sortable,
288
+ 'form.upload_asset': Asset.Upload,
289
+ 'a.attach_asset': Asset.Attach,
290
+ 'a.detach_asset': Asset.Detach,
291
+ 'a.insert_asset': Asset.Insert,
292
+ 'a.deselective': Asset.DeselectFileTypes,
293
+ 'a.selective': Asset.SelectFileType,
294
+ 'form.search': Asset.SearchForm,
295
+ '#assets_table .pagination a': Asset.Pagination
296
+ });