cardboard_cms 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (360) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +42 -0
  5. data/Gemfile.lock +324 -0
  6. data/Guardfile +23 -0
  7. data/LICENSE.txt +677 -0
  8. data/README.md +370 -0
  9. data/Rakefile +23 -0
  10. data/app/assets/images/cardboard/.gitkeep +0 -0
  11. data/app/assets/images/cardboard/bg.png +0 -0
  12. data/app/assets/images/cardboard/calendar.png +0 -0
  13. data/app/assets/images/cardboard/lorem-ipsum-coffe-mug.jpg +0 -0
  14. data/app/assets/javascripts/cardboard.js +1 -0
  15. data/app/assets/javascripts/cardboard/admin.js +62 -0
  16. data/app/assets/javascripts/cardboard/content_sidebar.js +27 -0
  17. data/app/assets/javascripts/cardboard/datepicker.js +19 -0
  18. data/app/assets/javascripts/cardboard/main_sidebar.js +32 -0
  19. data/app/assets/javascripts/cardboard/rich_text.js +81 -0
  20. data/app/assets/javascripts/cardboard/search_filter.js +28 -0
  21. data/app/assets/stylesheets/cardboard.css.scss +2 -0
  22. data/app/assets/stylesheets/cardboard/_bootstrap-select.css.scss +183 -0
  23. data/app/assets/stylesheets/cardboard/_content.css.scss +35 -0
  24. data/app/assets/stylesheets/cardboard/_content_sidebar.css.scss +96 -0
  25. data/app/assets/stylesheets/cardboard/_framework.css.scss +129 -0
  26. data/app/assets/stylesheets/cardboard/_main_sidebar.css.scss +38 -0
  27. data/app/assets/stylesheets/cardboard/_main_topbar.css.scss +62 -0
  28. data/app/assets/stylesheets/cardboard/_resources.css.scss +28 -0
  29. data/app/assets/stylesheets/cardboard/_rich_text.css.scss +6 -0
  30. data/app/assets/stylesheets/cardboard/_variables.scss +326 -0
  31. data/app/assets/stylesheets/cardboard/admin.css.scss +63 -0
  32. data/app/controllers/cardboard/application_controller.rb +45 -0
  33. data/app/controllers/cardboard/dashboard_controller.rb +9 -0
  34. data/app/controllers/cardboard/my_account_controller.rb +27 -0
  35. data/app/controllers/cardboard/pages_controller.rb +34 -0
  36. data/app/controllers/cardboard/resource_controller.rb +61 -0
  37. data/app/controllers/cardboard/settings_controller.rb +28 -0
  38. data/app/controllers/cardboard/super_user_controller.rb +8 -0
  39. data/app/controllers/pages_controller.rb +29 -0
  40. data/app/decorators/controllers/application_controller_decorator.rb +9 -0
  41. data/app/decorators/lib/cardboard/user_class_decorator.rb +32 -0
  42. data/app/helpers/cardboard/application_helper.rb +4 -0
  43. data/app/helpers/cardboard/public_helper.rb +53 -0
  44. data/app/helpers/cardboard/resource_helper.rb +80 -0
  45. data/app/inputs/date_picker_input.rb +10 -0
  46. data/app/inputs/date_time_input.rb +7 -0
  47. data/app/inputs/image_input.rb +3 -0
  48. data/app/inputs/rich_text_input.rb +6 -0
  49. data/app/models/cardboard/field.rb +67 -0
  50. data/app/models/cardboard/field/boolean.rb +29 -0
  51. data/app/models/cardboard/field/date.rb +24 -0
  52. data/app/models/cardboard/field/decimal.rb +25 -0
  53. data/app/models/cardboard/field/external_link.rb +4 -0
  54. data/app/models/cardboard/field/file.rb +19 -0
  55. data/app/models/cardboard/field/image.rb +33 -0
  56. data/app/models/cardboard/field/integer.rb +26 -0
  57. data/app/models/cardboard/field/resource_link.rb +4 -0
  58. data/app/models/cardboard/field/rich_text.rb +21 -0
  59. data/app/models/cardboard/field/string.rb +16 -0
  60. data/app/models/cardboard/field/text.rb +15 -0
  61. data/app/models/cardboard/page.rb +253 -0
  62. data/app/models/cardboard/page_part.rb +79 -0
  63. data/app/models/cardboard/setting.rb +46 -0
  64. data/app/views/cardboard/dashboard/index.html.slim +1 -0
  65. data/app/views/cardboard/fields/_base_input.html.slim +1 -0
  66. data/app/views/cardboard/fields/_boolean.html.slim +4 -0
  67. data/app/views/cardboard/fields/_date.html.slim +1 -0
  68. data/app/views/cardboard/fields/_external_link.html.slim +2 -0
  69. data/app/views/cardboard/fields/_file.html.slim +12 -0
  70. data/app/views/cardboard/fields/_image.html.slim +11 -0
  71. data/app/views/cardboard/fields/_resource_link.html.slim +2 -0
  72. data/app/views/cardboard/fields/_rich_text.html.slim +3 -0
  73. data/app/views/cardboard/fields/_string.html.slim +1 -0
  74. data/app/views/cardboard/my_account/edit.html.slim +29 -0
  75. data/app/views/cardboard/pages/_error.html.slim +7 -0
  76. data/app/views/cardboard/pages/_seo.html.slim +6 -0
  77. data/app/views/cardboard/pages/_sidebar.html.slim +17 -0
  78. data/app/views/cardboard/pages/_subpart_fields.html.slim +20 -0
  79. data/app/views/cardboard/pages/_url_field.html.slim +20 -0
  80. data/app/views/cardboard/pages/edit.html.slim +43 -0
  81. data/app/views/cardboard/pages/index.html.slim +2 -0
  82. data/app/views/cardboard/pages/show.html.slim +9 -0
  83. data/app/views/cardboard/resources/_advanced_search.html.slim +40 -0
  84. data/app/views/cardboard/resources/_search_button.html.slim +2 -0
  85. data/app/views/cardboard/resources/_search_helper.html.slim +17 -0
  86. data/app/views/cardboard/resources/_simple_search.html.slim +6 -0
  87. data/app/views/cardboard/rich_editor/_links_modal.html.slim +39 -0
  88. data/app/views/cardboard/settings/index.html.slim +8 -0
  89. data/app/views/cardboard/super_user/index.html.slim +10 -0
  90. data/app/views/layouts/cardboard/_flash_message.html.slim +6 -0
  91. data/app/views/layouts/cardboard/_head.html.slim +16 -0
  92. data/app/views/layouts/cardboard/_main_sidebar.html.slim +12 -0
  93. data/app/views/layouts/cardboard/_main_topbar.html.slim +32 -0
  94. data/app/views/layouts/cardboard/application.html.slim +28 -0
  95. data/cardboard.gemspec +57 -0
  96. data/config/initializers/dragonfly.rb +27 -0
  97. data/config/initializers/ranker_mapper_finder_bugfix.rb +43 -0
  98. data/config/initializers/simple_form.rb +142 -0
  99. data/config/initializers/simple_form_bootstrap.rb +45 -0
  100. data/config/locales/simple_form.en.yml +26 -0
  101. data/config/routes.rb +53 -0
  102. data/doc/apple-touch-icon.png +0 -0
  103. data/doc/classes/Cardboard.html +190 -0
  104. data/doc/classes/Cardboard/AdminController.html +134 -0
  105. data/doc/classes/Cardboard/AdminHelper.html +307 -0
  106. data/doc/classes/Cardboard/ApplicationController.html +76 -0
  107. data/doc/classes/Cardboard/ApplicationHelper.html +70 -0
  108. data/doc/classes/Cardboard/DashboardController.html +131 -0
  109. data/doc/classes/Cardboard/Field.html +283 -0
  110. data/doc/classes/Cardboard/Field/Boolean.html +218 -0
  111. data/doc/classes/Cardboard/Field/Date.html +218 -0
  112. data/doc/classes/Cardboard/Field/Decimal.html +218 -0
  113. data/doc/classes/Cardboard/Field/ExternalLink.html +76 -0
  114. data/doc/classes/Cardboard/Field/File.html +131 -0
  115. data/doc/classes/Cardboard/Field/Image.html +181 -0
  116. data/doc/classes/Cardboard/Field/Integer.html +218 -0
  117. data/doc/classes/Cardboard/Field/ResourceLink.html +76 -0
  118. data/doc/classes/Cardboard/Field/RichText.html +131 -0
  119. data/doc/classes/Cardboard/Field/String.html +131 -0
  120. data/doc/classes/Cardboard/Page.html +1184 -0
  121. data/doc/classes/Cardboard/PagePart.html +304 -0
  122. data/doc/classes/Cardboard/PagesController.html +186 -0
  123. data/doc/classes/Cardboard/PublicHelper.html +252 -0
  124. data/doc/classes/Cardboard/Setting.html +240 -0
  125. data/doc/classes/Cardboard/SettingsController.html +184 -0
  126. data/doc/classes/Cardboard/SuperUserController.html +130 -0
  127. data/doc/classes/Cardboard/UsersController.html +191 -0
  128. data/doc/classes/DatePickerInput.html +132 -0
  129. data/doc/classes/ImageInput.html +76 -0
  130. data/doc/classes/Object.html +211 -0
  131. data/doc/classes/PagesController.html +145 -0
  132. data/doc/classes/RichTextInput.html +132 -0
  133. data/doc/created.rid +31 -0
  134. data/doc/css/github.css +129 -0
  135. data/doc/css/main.css +333 -0
  136. data/doc/css/panel.css +384 -0
  137. data/doc/css/reset.css +48 -0
  138. data/doc/favicon.ico +0 -0
  139. data/doc/files/app/controllers/cardboard/admin_controller_rb.html +79 -0
  140. data/doc/files/app/controllers/cardboard/application_controller_rb.html +84 -0
  141. data/doc/files/app/controllers/cardboard/dashboard_controller_rb.html +84 -0
  142. data/doc/files/app/controllers/cardboard/pages_controller_rb.html +84 -0
  143. data/doc/files/app/controllers/cardboard/settings_controller_rb.html +84 -0
  144. data/doc/files/app/controllers/cardboard/super_user_controller_rb.html +84 -0
  145. data/doc/files/app/controllers/cardboard/users_controller_rb.html +84 -0
  146. data/doc/files/app/controllers/pages_controller_rb.html +79 -0
  147. data/doc/files/app/decorators/controllers/application_controller_decorator_rb.html +68 -0
  148. data/doc/files/app/decorators/lib/cardboard/user_class_decorator_rb.html +68 -0
  149. data/doc/files/app/helpers/cardboard/admin_helper_rb.html +84 -0
  150. data/doc/files/app/helpers/cardboard/application_helper_rb.html +84 -0
  151. data/doc/files/app/helpers/cardboard/public_helper_rb.html +84 -0
  152. data/doc/files/app/inputs/date_picker_input_rb.html +79 -0
  153. data/doc/files/app/inputs/image_input_rb.html +79 -0
  154. data/doc/files/app/inputs/rich_text_input_rb.html +79 -0
  155. data/doc/files/app/models/cardboard/field/boolean_rb.html +84 -0
  156. data/doc/files/app/models/cardboard/field/date_rb.html +84 -0
  157. data/doc/files/app/models/cardboard/field/decimal_rb.html +84 -0
  158. data/doc/files/app/models/cardboard/field/external_link_rb.html +84 -0
  159. data/doc/files/app/models/cardboard/field/file_rb.html +84 -0
  160. data/doc/files/app/models/cardboard/field/image_rb.html +84 -0
  161. data/doc/files/app/models/cardboard/field/integer_rb.html +84 -0
  162. data/doc/files/app/models/cardboard/field/resource_link_rb.html +84 -0
  163. data/doc/files/app/models/cardboard/field/rich_text_rb.html +84 -0
  164. data/doc/files/app/models/cardboard/field/string_rb.html +84 -0
  165. data/doc/files/app/models/cardboard/field_rb.html +84 -0
  166. data/doc/files/app/models/cardboard/page_part_rb.html +84 -0
  167. data/doc/files/app/models/cardboard/page_rb.html +84 -0
  168. data/doc/files/app/models/cardboard/setting_rb.html +84 -0
  169. data/doc/i/arrows.png +0 -0
  170. data/doc/i/results_bg.png +0 -0
  171. data/doc/i/tree_bg.png +0 -0
  172. data/doc/index.html +13 -0
  173. data/doc/js/highlight.pack.js +1 -0
  174. data/doc/js/jquery-1.3.2.min.js +19 -0
  175. data/doc/js/jquery-effect.js +593 -0
  176. data/doc/js/main.js +24 -0
  177. data/doc/js/navigation.js +142 -0
  178. data/doc/js/search_index.js +1 -0
  179. data/doc/js/searchdoc.js +449 -0
  180. data/doc/js/searcher.js +228 -0
  181. data/doc/panel/index.html +73 -0
  182. data/doc/panel/links.html +66 -0
  183. data/doc/panel/tree.js +1 -0
  184. data/lib/cardboard/application.rb +67 -0
  185. data/lib/cardboard/engine.rb +83 -0
  186. data/lib/cardboard/helpers/seed.rb +80 -0
  187. data/lib/cardboard/helpers/settings.rb +58 -0
  188. data/lib/cardboard/version.rb +3 -0
  189. data/lib/cardboard_cms.rb +34 -0
  190. data/lib/generators/cardboard/assets/assets_generator.rb +18 -0
  191. data/lib/generators/cardboard/install/install_generator.rb +96 -0
  192. data/lib/generators/cardboard/install/templates/cardboard.rb.erb +53 -0
  193. data/lib/generators/cardboard/install/templates/cardboard.yml +29 -0
  194. data/lib/generators/cardboard/install/templates/index.html.erb +0 -0
  195. data/lib/generators/cardboard/install/templates/migrations/1_create_cardboard_fields.rb +21 -0
  196. data/lib/generators/cardboard/install/templates/migrations/2_create_cardboard_page_parts.rb +17 -0
  197. data/lib/generators/cardboard/install/templates/migrations/3_create_cardboard_pages.rb +18 -0
  198. data/lib/generators/cardboard/install/templates/migrations/4_create_cardboard_settings.rb +14 -0
  199. data/lib/generators/cardboard/resource/resource_generator.rb +52 -0
  200. data/lib/generators/cardboard/resource/templates/admin_controller.rb +9 -0
  201. data/lib/generators/cardboard/resource/templates/slim/_fields.html.slim +5 -0
  202. data/lib/generators/cardboard/resource/templates/slim/edit.html.slim +4 -0
  203. data/lib/generators/cardboard/resource/templates/slim/index.html.slim +18 -0
  204. data/lib/generators/cardboard/resource/templates/slim/new.html.slim +4 -0
  205. data/lib/tasks/cardboard_tasks.rake +22 -0
  206. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  207. data/script/rails +8 -0
  208. data/test/dummy/README.rdoc +261 -0
  209. data/test/dummy/Rakefile +7 -0
  210. data/test/dummy/app/assets/images/defaults/CrashTest.jpg +0 -0
  211. data/test/dummy/app/assets/javascripts/admins.js +2 -0
  212. data/test/dummy/app/assets/javascripts/application.js +5 -0
  213. data/test/dummy/app/assets/javascripts/beans.js +2 -0
  214. data/test/dummy/app/assets/javascripts/cardboard.js +1 -0
  215. data/test/dummy/app/assets/javascripts/icescreams.js +2 -0
  216. data/test/dummy/app/assets/javascripts/main.js +2 -0
  217. data/test/dummy/app/assets/javascripts/news_posts.js +2 -0
  218. data/test/dummy/app/assets/javascripts/pianos.js +2 -0
  219. data/test/dummy/app/assets/stylesheets/admins.css.scss +3 -0
  220. data/test/dummy/app/assets/stylesheets/application.css.scss +9 -0
  221. data/test/dummy/app/assets/stylesheets/beans.css.scss +3 -0
  222. data/test/dummy/app/assets/stylesheets/cardboard.css.scss +5 -0
  223. data/test/dummy/app/assets/stylesheets/icescreams.css.scss +3 -0
  224. data/test/dummy/app/assets/stylesheets/main.css +4 -0
  225. data/test/dummy/app/assets/stylesheets/news_posts.css.scss +3 -0
  226. data/test/dummy/app/assets/stylesheets/pianos.css.scss +3 -0
  227. data/test/dummy/app/assets/stylesheets/scaffolds.css.scss +69 -0
  228. data/test/dummy/app/controllers/application_controller.rb +3 -0
  229. data/test/dummy/app/controllers/cardboard/pianos_controller.rb +6 -0
  230. data/test/dummy/app/controllers/pianos_controller.rb +83 -0
  231. data/test/dummy/app/helpers/application_helper.rb +9 -0
  232. data/test/dummy/app/helpers/cardboard/pianos_helper.rb +7 -0
  233. data/test/dummy/app/mailers/.gitkeep +0 -0
  234. data/test/dummy/app/models/.gitkeep +0 -0
  235. data/test/dummy/app/models/admin_user.rb +28 -0
  236. data/test/dummy/app/models/piano.rb +3 -0
  237. data/test/dummy/app/views/cardboard/pianos/_fields.html.slim +5 -0
  238. data/test/dummy/app/views/cardboard/pianos/edit.html.slim +6 -0
  239. data/test/dummy/app/views/cardboard/pianos/index.html.slim +18 -0
  240. data/test/dummy/app/views/cardboard/pianos/new.html.slim +6 -0
  241. data/test/dummy/app/views/cardboard/pianos/show.html.slim +11 -0
  242. data/test/dummy/app/views/layouts/application.html.slim +24 -0
  243. data/test/dummy/app/views/main/index.html.slim +1 -0
  244. data/test/dummy/app/views/pages/about-us.html.slim +1 -0
  245. data/test/dummy/app/views/pages/home.html.slim +3 -0
  246. data/test/dummy/app/views/pianos/_form.html.erb +25 -0
  247. data/test/dummy/app/views/pianos/edit.html.erb +6 -0
  248. data/test/dummy/app/views/pianos/index.html.erb +25 -0
  249. data/test/dummy/app/views/pianos/new.html.erb +5 -0
  250. data/test/dummy/app/views/pianos/show.html.erb +15 -0
  251. data/test/dummy/config.ru +4 -0
  252. data/test/dummy/config/application.rb +50 -0
  253. data/test/dummy/config/boot.rb +10 -0
  254. data/test/dummy/config/cardboard.yml +126 -0
  255. data/test/dummy/config/database.yml +17 -0
  256. data/test/dummy/config/environment.rb +5 -0
  257. data/test/dummy/config/environments/development.rb +24 -0
  258. data/test/dummy/config/environments/production.rb +70 -0
  259. data/test/dummy/config/environments/test.rb +33 -0
  260. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  261. data/test/dummy/config/initializers/cardboard.rb +53 -0
  262. data/test/dummy/config/initializers/devise.rb +240 -0
  263. data/test/dummy/config/initializers/inflections.rb +15 -0
  264. data/test/dummy/config/initializers/mime_types.rb +5 -0
  265. data/test/dummy/config/initializers/secret_token.rb +8 -0
  266. data/test/dummy/config/initializers/session_store.rb +8 -0
  267. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  268. data/test/dummy/config/locales/devise.en.yml +59 -0
  269. data/test/dummy/config/locales/en.yml +5 -0
  270. data/test/dummy/config/routes.rb +16 -0
  271. data/test/dummy/db/migrate/20130403142235_create_pianos.rb +10 -0
  272. data/test/dummy/db/migrate/20130417134832_add_devise_to_admin_users.rb +53 -0
  273. data/test/dummy/db/migrate/20130426021522_create_news_posts.rb +10 -0
  274. data/test/dummy/db/migrate/20130501195423_create_icescreams.rb +10 -0
  275. data/test/dummy/db/migrate/20130502165540_create_beans.rb +12 -0
  276. data/test/dummy/db/migrate/20130522151358_create_cardboard_fields.rb +21 -0
  277. data/test/dummy/db/migrate/20130522151359_create_cardboard_page_parts.rb +17 -0
  278. data/test/dummy/db/migrate/20130522151400_create_cardboard_pages.rb +18 -0
  279. data/test/dummy/db/migrate/20130522151401_create_cardboard_settings.rb +14 -0
  280. data/test/dummy/db/migrate/20130607132558_create_admins.rb +9 -0
  281. data/test/dummy/db/schema.rb +129 -0
  282. data/test/dummy/db/seeds.rb +2 -0
  283. data/test/dummy/lib/assets/.gitkeep +0 -0
  284. data/test/dummy/log/.gitkeep +0 -0
  285. data/test/dummy/public/404.html +26 -0
  286. data/test/dummy/public/422.html +26 -0
  287. data/test/dummy/public/500.html +25 -0
  288. data/test/dummy/public/favicon.ico +0 -0
  289. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_39_10_816_404_no_file.png +0 -0
  290. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_39_10_816_404_no_file.png.meta +2 -0
  291. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_39_17_87_404_no_file.png +0 -0
  292. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_39_17_87_404_no_file.png.meta +2 -0
  293. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_39_34_680_404_no_file.png +0 -0
  294. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_39_34_680_404_no_file.png.meta +2 -0
  295. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_44_00_698_404_no_file.png +0 -0
  296. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_44_00_698_404_no_file.png.meta +2 -0
  297. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_46_49_55_6152message_in_a_bottle.jpeg +0 -0
  298. data/test/dummy/public/system/dragonfly/development/2013/04/16/10_46_49_55_6152message_in_a_bottle.jpeg.meta +2 -0
  299. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_10_30_773_404_no_file.png +0 -0
  300. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_10_30_773_404_no_file.png.meta +2 -0
  301. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_10_38_856_airport_shuttles_20130207_1647.csv +8 -0
  302. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_10_38_856_airport_shuttles_20130207_1647.csv.meta +2 -0
  303. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_12_12_144_1361696555_GMail_Android_R.png +0 -0
  304. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_12_12_144_1361696555_GMail_Android_R.png.meta +2 -0
  305. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_16_40_989_404_no_file.png +0 -0
  306. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_16_40_989_404_no_file.png.meta +2 -0
  307. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_19_19_40_6152message_in_a_bottle.jpeg +0 -0
  308. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_19_19_40_6152message_in_a_bottle.jpeg.meta +2 -0
  309. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_21_21_825_6152message_in_a_bottle.jpeg +0 -0
  310. data/test/dummy/public/system/dragonfly/development/2013/04/16/14_21_21_825_6152message_in_a_bottle.jpeg.meta +2 -0
  311. data/test/dummy/public/system/dragonfly/development/2013/04/16/15_46_33_341_bio.jpg +0 -0
  312. data/test/dummy/public/system/dragonfly/development/2013/04/16/15_46_33_341_bio.jpg.meta +2 -0
  313. data/test/dummy/public/system/dragonfly/development/2013/04/16/15_52_55_892_404_no_file.png +0 -0
  314. data/test/dummy/public/system/dragonfly/development/2013/04/16/15_52_55_892_404_no_file.png.meta +2 -0
  315. data/test/dummy/public/system/dragonfly/development/2013/04/16/15_52_56_30_404_no_file.png +0 -0
  316. data/test/dummy/public/system/dragonfly/development/2013/04/16/15_52_56_30_404_no_file.png.meta +2 -0
  317. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_24_04_585_Sky_3920445.jpg +0 -0
  318. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_24_04_585_Sky_3920445.jpg.meta +2 -0
  319. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_25_41_111_Sky_3920445.jpg +0 -0
  320. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_25_41_111_Sky_3920445.jpg.meta +2 -0
  321. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_27_16_937_Sky_3920445.jpg +0 -0
  322. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_27_16_937_Sky_3920445.jpg.meta +2 -0
  323. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_27_57_585_Sky_3920445.jpg +0 -0
  324. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_27_57_585_Sky_3920445.jpg.meta +2 -0
  325. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_28_24_991_Sky_3920445.jpg +0 -0
  326. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_28_24_991_Sky_3920445.jpg.meta +2 -0
  327. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_33_30_610_Sky_3920445.jpg +0 -0
  328. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_33_30_610_Sky_3920445.jpg.meta +2 -0
  329. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_35_18_437_Sky_3920445.jpg +0 -0
  330. data/test/dummy/public/system/dragonfly/development/2013/04/17/15_35_18_437_Sky_3920445.jpg.meta +2 -0
  331. data/test/dummy/public/system/dragonfly/development/2013/04/17/16_45_07_162_Vehicle_Types.jpg +0 -0
  332. data/test/dummy/public/system/dragonfly/development/2013/04/17/16_45_07_162_Vehicle_Types.jpg.meta +2 -0
  333. data/test/dummy/public/system/dragonfly/development/2013/04/18/22_27_35_733_hall.jpg +0 -0
  334. data/test/dummy/public/system/dragonfly/development/2013/04/18/22_27_35_733_hall.jpg.meta +2 -0
  335. data/test/dummy/public/system/dragonfly/development/2013/04/18/22_29_15_808_fluidicon.png +0 -0
  336. data/test/dummy/public/system/dragonfly/development/2013/04/18/22_29_15_808_fluidicon.png.meta +2 -0
  337. data/test/dummy/public/system/dragonfly/development/2013/04/18/22_29_15_989_fluidicon.png +0 -0
  338. data/test/dummy/public/system/dragonfly/development/2013/04/18/22_29_15_989_fluidicon.png.meta +2 -0
  339. data/test/dummy/public/system/dragonfly/development/2013/04/19/09_54_44_881_hall3.jpg +0 -0
  340. data/test/dummy/public/system/dragonfly/development/2013/04/19/09_54_44_881_hall3.jpg.meta +2 -0
  341. data/test/dummy/public/system/dragonfly/development/2013/04/19/09_54_45_450_hall3.jpg +0 -0
  342. data/test/dummy/public/system/dragonfly/development/2013/04/19/09_54_45_450_hall3.jpg.meta +2 -0
  343. data/test/dummy/script/rails +6 -0
  344. data/test/dummy/test/fixtures/admins.yml +7 -0
  345. data/test/dummy/test/functional/admins_controller_test.rb +49 -0
  346. data/test/dummy/test/unit/admin_test.rb +7 -0
  347. data/test/dummy/test/unit/helpers/admins_helper_test.rb +4 -0
  348. data/test/factories.rb +47 -0
  349. data/test/integration/page_editing_test.rb +77 -0
  350. data/test/integration/seeding_test.rb +96 -0
  351. data/test/models/field_test.rb +102 -0
  352. data/test/models/page_test.rb +105 -0
  353. data/test/test_helper.rb +40 -0
  354. data/vendor/assets/javascripts/cardboard/bootstrap-select.js +590 -0
  355. data/vendor/assets/javascripts/cardboard/jquery.livesearch.js +48 -0
  356. data/vendor/assets/javascripts/cardboard/jquery.pjax.js +822 -0
  357. data/vendor/assets/javascripts/cardboard/jquery.wysihtml5_size_matters.js.coffee +44 -0
  358. data/vendor/assets/javascripts/cardboard/jquery.wysihtml5imgresizer.js +320 -0
  359. data/vendor/assets/javascripts/cardboard/wysihtml5-0.4.0pre.js +9579 -0
  360. metadata +1011 -0
data/README.md ADDED
@@ -0,0 +1,370 @@
1
+ # Cardboard
2
+ [![Code Climate](https://codeclimate.com/github/smashingboxes/cardboard.png)](https://codeclimate.com/github/smashingboxes/cardboard)
3
+
4
+ Cardboard is a simple CMS Engine for your Rails 4 applications.
5
+
6
+ ## Features
7
+
8
+ * Build for Rails 4
9
+ * Make your site and your admin area the standard rails way (no complex engines)
10
+ * Create pages and site settings in seconds
11
+ * Repeatable page parts
12
+ * Write your views in haml/slim/erb...! (no restrictive DSL or templating language)
13
+ * Your customers will love the UI/UX
14
+ * Super easy to extend and customize
15
+ * It's like your favorite admin interface gem just had a baby with a CMS
16
+
17
+ ![alt text](https://github.com/smashingboxes/cardboard/wiki/images/2a.jpg "screenshot1")
18
+
19
+ ## Requirements
20
+ * An authentication solution. For example, [here is what you need to do](https://github.com/plataformatec/devise#getting-started) to get `Devise` installed.
21
+ * `imagemagick` (on mac do `brew install imagemagick`)
22
+ * `Rails 4` and `Ruby 2.0`
23
+
24
+ ## Installation
25
+ Add the gem to the `Gemfile`
26
+
27
+ ```ruby
28
+ gem "cardboard_cms", github: "smashingboxes/cardboard"
29
+ ```
30
+
31
+ And run `bundle install`.
32
+
33
+ Run the generator to install cardboard and it's migrations:
34
+ ```sh
35
+ rails g cardboard:install
36
+ rake db:migrate
37
+ ```
38
+
39
+ Edit your `config/cardboard.yml` file then run
40
+
41
+ ```sh
42
+ rake cardboard:seed
43
+ ```
44
+
45
+
46
+ ## Usage
47
+ ### Get a page
48
+ Add a file in your `app/views/pages` with filename matching the identifier of the page. Inside this file you can access the page with:
49
+ ```ruby
50
+ current_page
51
+ ```
52
+ ### Fetch a page part
53
+ ```ruby
54
+ current_page.get('slideshow')
55
+ ```
56
+
57
+ ### Fetch a repeatable page part
58
+ Repeatable parts returns an active record collection. This means that regular Rails methods such as `where`, `limit`, `first`, `each`, etc can be used on page parts
59
+ ```slim
60
+ - current_page.get('slideshow').each do |slide|
61
+ p= image_tag slide.attr('image1').thumb('600x300').url, alt: slide.attr('description') if slide.attr('image1')
62
+ ```
63
+ ### Fetch a single field
64
+ If this part is **not repeatable** you can use both
65
+ ```ruby
66
+ current_page.get('intro').attr('text1')
67
+ # Or
68
+ current_page.get('intro.text1')
69
+ ```
70
+ ### Image Fields methods
71
+ Images returned by `image` type fields are [Dragonfly](http://markevans.github.io/dragonfly/) objects. As such, it's possible to edit them directly from the view.
72
+
73
+ ```ruby
74
+ if image = current_page.get('intro.image1')
75
+ image.url # URL of the modified image
76
+ image.thumb('40x30#').url # resize, crop if necessary to maintain aspect ratio (centre gravity)
77
+ image.process(:greyscale).thumb('40x30#').url
78
+ end # Hint: remember to check if image is not nil before calling methods on it
79
+ ```
80
+ More options and methods are available at [Dragonfly's Documentation](http://markevans.github.io/dragonfly/file.ImageMagick.html)
81
+
82
+ ### File field methods
83
+ Similarly to images, files are also Dragonfly objects. This allows such methods as:
84
+
85
+ ```ruby
86
+ file.format # => :pdf
87
+ file.name # => "some.pdf"
88
+ number_to_human_size(file.size) # => "486 KB"
89
+ ```
90
+
91
+
92
+ ## Create Pages
93
+ To add pages to cardboard edit `config/cardboard.yml`. See an sample `cardboard.yml` in [https://github.com/smashingboxes/cardboard/blob/master/test/dummy/config/cardboard.yml](https://github.com/smashingboxes/cardboard/blob/master/test/dummy/config/cardboard.yml)
94
+
95
+ ```yml
96
+ pages:
97
+ home_page:
98
+ title: Default page title
99
+ parts:
100
+ slideshow:
101
+ repeatable: true
102
+ fields:
103
+ image1:
104
+ type: image
105
+ required: true
106
+ default: CrashTest.jpg
107
+ position: 0
108
+ ```
109
+
110
+ pages, parts and fields take identifiers (home_page, slideshow and image1) used to reference the data form the views. Choose these names carefully!
111
+
112
+ #### Pages
113
+ Each page section starts with the name of it's unique identifier. This name is used to reference the page in the code an thus should not change throughout the life of the project.
114
+
115
+ Key | Type | Default | Definition
116
+ ---|--- | ---|---
117
+ [parts](#parts) | hash | nil |a list of page parts
118
+ title | string | identifier | name of the page as shown in the nav bar
119
+ position | integer | auto-increment | position of the page on the nav bar (the lowest position is the home page!)
120
+ parent_id | string | nil | identifier of the parent page (used for nested pages)
121
+
122
+
123
+ #### Parts
124
+ Each part sub-section starts with the name of it's unique identifier. This name is used to reference the part in the code an thus should not change throughout the life of the project.
125
+
126
+ Key | Type | Default | Definition
127
+ ---|--- | ---|---
128
+ [fields](#fields) | hash | nil | list of fields that make this part's form
129
+ position | integer | auto-increment | position of the part on the admin page
130
+ repeatable | boolean | false | can the client add multiple of these parts (example a slide in a slideshow)
131
+
132
+
133
+ ####fields
134
+ Each field sub-section starts with the name of it's unique identifier. This name is used to reference the field in the code an thus should not change throughout the life of the project.
135
+
136
+ Key | Type | Default | Definition
137
+ ---|--- | ---|---
138
+ label | string | identifier | form field label
139
+ hint | string | nil | form field hint
140
+ placeholder | string | nil | form field placeholder
141
+ position | integer | auto-increment | position of the field within the part (only for the admin area)
142
+ required | boolean | true | must this field have a value for the form to save
143
+ type | string | `string` | choose between: `boolean`, `date`, `decimal`, `file`, `image`, `integer`, `rich_text`, `text`, `string`, `resource_link` (needs value: resource_linked (same as the controller name ex: pianos)), `external_link` (needs value: http://site.com)
144
+ default | string | nil | set the value but don't overwrite (only set if nil). Put default images in /assets/images/defaults and default files in /assets/files/defaults
145
+ value | string | nil | USE ONLY FOR types `resource_link` and `external_link` (this will overwrite user input, in most cases use the `default` key instead)
146
+
147
+
148
+ ## Create Resources
149
+ To add an admin area for a model simply type (make sure the model exists first and migrations have been run)
150
+
151
+ ```sh
152
+ rails g cardboard:resource model_name
153
+ ```
154
+
155
+ Then customize the `controllers/cardboard/model_name_controller.rb` and associated views to your heart's desire.
156
+
157
+
158
+ The default cardboard resource scaffold help you quickly get started by making the most of the following gems.
159
+
160
+ Gem | Description
161
+ --- | ---
162
+ [InheritedResources](https://github.com/josevalim/inherited_resources) | Inherited Resources speeds up development by making your controllers inherit all restful actions so you just have to focus on what is important.
163
+ [Simple Form](https://github.com/plataformatec/simple_form) | Forms made easy! It's tied to a simple DSL, with no opinion on markup.
164
+ [Kaminari](https://github.com/amatsuda/kaminari) | A Scope & Engine based, clean, powerful, customizable and sophisticated paginator
165
+ [Ransack](https://github.com/ernie/ransack) | Object-based searching and filtering
166
+ [Dragonfly](https://github.com/markevans/dragonfly) | On-the-fly image processing and file uploading
167
+
168
+
169
+ ### Menu options
170
+ ```ruby
171
+ menu label: "Test", priority: 1
172
+ ```
173
+ You can also choose to remove a resource from the menu
174
+ ```ruby
175
+ menu false
176
+ ```
177
+
178
+ ### Sorting
179
+ ```ruby
180
+ default_order "name DESC" # default: 'updated_at desc'
181
+ ```
182
+ You can pass any `ransack` sort order, which includes associations. Example:
183
+ ```ruby
184
+ default_order "user_name" # belongs to a user
185
+ ```
186
+
187
+ #### Filter helper
188
+ You can show filters on your resource index page simply by adding `cardboard_filters`, with the model class, the main field to search (has to be a text or string field), and options.
189
+
190
+ ```ruby
191
+ = cardboard_filters User, :name
192
+ ```
193
+
194
+ `title`: change the page's title (optional)
195
+
196
+ `new_button`: Options for the button used to create a new resource element. Can be `false` to remove it, or `label` and `url` can be modified (optional).
197
+
198
+ `predicate`: defaults to `cont` (contains). Note: On non text fields, this field is required
199
+
200
+ Example:
201
+ ```ruby
202
+ = cardboard_filters User, :name, title: "Employees", new_button: {label: "Add an employee"}
203
+ ```
204
+
205
+ #### Pagination Helper
206
+ We use kaminari, so all you need to do is add to your index view:
207
+ ```ruby
208
+ = paginate @users
209
+ ```
210
+
211
+
212
+ #### Column sorting helper
213
+ Cardboard's controllers inherit from a `@q` variable which gives access to the ransack gem.
214
+ ```
215
+ = sort_link @q, :name, "Product Name"
216
+ ```
217
+
218
+ #### Custom resource helpers
219
+ To add custom helpers for your resource simply create a helper with the same name.
220
+ Example:
221
+ ```ruby
222
+ module Cardboard
223
+ module PianosHelper
224
+ end
225
+ end
226
+ ```
227
+ Make sure this file is located under `app/helpers/cardboard`
228
+
229
+ #### Custom CSS/JS
230
+ The css/js for the resources is the same as the cardboard admin interface. If you'd like to extend or overwrite some of these, simply edit the `cardboard.css.scss` or `cardboard.js` files located in your assets folder. These files were generated during the cardboard installation.
231
+
232
+ Note: Make sure to remove `*= require_tree .` from your application.css, you don't want your cardboard css and js to leak into your main app!
233
+
234
+ ## Create Settings
235
+ You can create new settings that will be editable from the admin panel.
236
+
237
+ In your `config/cardboard.yml`
238
+
239
+ ```yml
240
+ settings:
241
+ my_custom_setting:
242
+ type: boolean
243
+ default: true
244
+ ```
245
+ all options/types from fields are available
246
+
247
+ Then you can use this setting in your views or controllers like so:
248
+
249
+ ```ruby
250
+ Cardboard::Setting.my_custom_setting
251
+ ```
252
+
253
+ ## View Helpers
254
+ ### Access Pages
255
+ ```ruby
256
+ current_page
257
+ ```
258
+
259
+ you can put your controller instance variables at the top of your view or in a decorator
260
+ ```
261
+ app
262
+ |- decorators
263
+ |- controllers
264
+ |- pages_decorator
265
+ ```
266
+ ```ruby
267
+ PagesController.class_eval do
268
+ def page_identifier
269
+ @example = "cool"
270
+ end
271
+ end
272
+ ```
273
+ ### Page Path
274
+ In your controllers you may want to redirect to a specific page. You can do so with the following:
275
+ ```ruby
276
+ page_path("identifier_for_this_page")
277
+ page_url("identifier_for_this_page")
278
+ ```
279
+
280
+
281
+ ### Meta tags (SEO)
282
+ To add SEO meta tags simply add a yield as follows to your layout file:
283
+ ```slim
284
+ head
285
+ = yield(:seo)
286
+ ```
287
+ ### Show edit link
288
+ Feel free to make it fit as you want in your site design
289
+ ```slim
290
+ - if current_admin_user && current_page
291
+ div style="float:right"
292
+ = link_to "Edit this page", cardboard.edit_page_path(current_page)
293
+ ```
294
+ ### Page navigation
295
+ ```slim
296
+ = nested_pages do |page, subpages|
297
+ .indent
298
+ = link_to(page.title, page.url) if page.in_menu?
299
+ = subpages
300
+ ```
301
+ or similarly with UL and LI tags
302
+
303
+ ```slim
304
+ ul
305
+ = nested_pages do |page, subpages|
306
+ li
307
+ = link_to(page.title, page.url) if page.in_menu?
308
+ - if subpages
309
+ ul= subpages
310
+ ```
311
+
312
+ ### Link to a page
313
+ Use the page identifier defined in the cardboard.yml file (or see yoda)
314
+ ```ruby
315
+ = link_to_page "page_identifier", class: "btn" do |page|
316
+ "hello #{page.title}"
317
+ end
318
+
319
+ # or, to simply use the page title
320
+
321
+ = link_to_page "page_identifier", class: "btn"
322
+ ```
323
+
324
+ ## Abilities
325
+ You can (and should) add a `can_manage_cardboard` method to your user model. By default users can manage all areas of the admin panel.
326
+ ```ruby
327
+ def can_manage_cardboard?(area)
328
+ case area
329
+ when :pages
330
+ self.admin?
331
+ when :settings
332
+ self.admin?
333
+ when :resource_identifier #should be plural
334
+ true
335
+ else
336
+ true
337
+ end
338
+ end
339
+ ```
340
+
341
+ ## Dashboard
342
+ You can add whatever you want on the dashboard by simply adding
343
+ ```
344
+ views
345
+ |- cardboard
346
+ |- dashboard
347
+ |- index.html.slim
348
+ ```
349
+
350
+ ## Customizing Cardboard
351
+
352
+ ### Overwrite views
353
+ You can easily change the default behavior of the app by overwriting the views. For example say you'd like to change the my account page. Simply add a `views/cardboard/my_account/edit.html.slim` and edit it at will.
354
+
355
+ ## Deploy with capistrano
356
+
357
+ ```ruby
358
+ namespace :cardboard do
359
+ desc "seed the database"
360
+ task :seed do
361
+ run "cd #{current_path}; bundle exec rake cardboard:seed RAILS_ENV=#{rails_env}"
362
+ end
363
+ end
364
+ after "deploy", "cardboard:seed"
365
+ ```
366
+
367
+ ## License
368
+ Copyright (c) 2013 by SmashingBoxes
369
+
370
+ See LICENSE.txt
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+
8
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
9
+ load 'rails/tasks/engine.rake'
10
+ Bundler::GemHelper.install_tasks
11
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
12
+
13
+ # require 'rspec/core'
14
+ # require 'rspec/core/rake_task'
15
+ # desc "Run all specs in spec directory (excluding plugin specs)"
16
+ # RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
17
+ # task :default => :spec
18
+
19
+ Rake::TestTask.new(:test) do |t|
20
+ t.libs << 'test'
21
+ t.test_files = FileList['test/**/*_test.rb']
22
+ t.verbose = true
23
+ end
File without changes
Binary file
@@ -0,0 +1 @@
1
+ //= require cardboard/admin
@@ -0,0 +1,62 @@
1
+ // Only for Cardboard Admin Area
2
+ // see lib/cardboard/generators/cardboard/assets/templates for helpers
3
+ //
4
+ //= require jquery
5
+ //= require jquery_ujs
6
+ //= require jquery.ui.sortable
7
+ //= require cardboard/jquery.livesearch
8
+ //= require cardboard/jquery.pjax
9
+ //= require bootstrap-button
10
+ //= require bootstrap-dropdown
11
+ //= require bootstrap-modal
12
+ //= require bootstrap-alert
13
+ //= require bootstrap-tab
14
+ //= require cardboard/bootstrap-select
15
+ //= require bootstrap-datepicker/core
16
+ //= require cardboard/datepicker
17
+ //= require cardboard/rich_text
18
+ //= require cardboard/jquery.wysihtml5_size_matters
19
+ //= require cocoon
20
+ //= require cardboard/main_sidebar
21
+ //= require cardboard/content_sidebar
22
+ //= require cardboard/search_filter
23
+ //= require select2
24
+
25
+ // require cardboard/jquery.wysihtml5imgresizer
26
+
27
+
28
+ $(document).pjax('a:not([data-remote]):not([data-behavior]):not([data-skip-pjax]):not([href="#"]):not([href=""]):not([data-method])', '[data-pjax-container]');
29
+
30
+ $(document).on('submit', 'form[data-pjax]', function(event) {
31
+ $.pjax.submit(event, '[data-pjax-container]');
32
+ });
33
+
34
+ $(document).on('click', '.nav-tabs a', function(e){
35
+ e.preventDefault();
36
+ $(this).tab('show');
37
+ });
38
+
39
+ $(document).on("pjax:end ready cocoon:after-insert", function(e){
40
+ $('select:not([data-search-select])').selectpicker();
41
+ $('select[data-search-select]').select2({allowClear: true, width: "resolve"});
42
+
43
+
44
+ $('.nav-tabs a:first').tab('show');
45
+ });
46
+
47
+ $(function(){
48
+ $('.page_link .link_wrap a').click(function(){
49
+ $('.nav_resource_link.active').removeClass('active');
50
+ $('#nav_dashboard_link').addClass('active');
51
+ });
52
+
53
+ $('.nav_resource_link').click(function(){
54
+ $('.nav_resource_link.active, #nav_dashboard_link').removeClass('active');
55
+ $(this).addClass('active');
56
+ $("#content_sidebar").removeClass('toggle');
57
+ $('#content').removeClass('toggle');
58
+ });
59
+
60
+ window.setTimeout(function() { $(".alert:not(.alert-error)").alert('close'); }, 2000);
61
+ })
62
+