fae-railsz 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +5 -0
  3. data/Rakefile +37 -0
  4. data/app/assets/fonts/fae/icons.eot +0 -0
  5. data/app/assets/fonts/fae/icons.svg +56 -0
  6. data/app/assets/fonts/fae/icons.ttf +0 -0
  7. data/app/assets/fonts/fae/icons.woff +0 -0
  8. data/app/assets/fonts/fae/lato-bold-webfont.eot +0 -0
  9. data/app/assets/fonts/fae/lato-bold-webfont.svg +4551 -0
  10. data/app/assets/fonts/fae/lato-bold-webfont.ttf +0 -0
  11. data/app/assets/fonts/fae/lato-bold-webfont.woff +0 -0
  12. data/app/assets/fonts/fae/lato-light-webfont.eot +0 -0
  13. data/app/assets/fonts/fae/lato-light-webfont.svg +4241 -0
  14. data/app/assets/fonts/fae/lato-light-webfont.ttf +0 -0
  15. data/app/assets/fonts/fae/lato-light-webfont.woff +0 -0
  16. data/app/assets/fonts/fae/lato-regular-webfont.eot +0 -0
  17. data/app/assets/fonts/fae/lato-regular-webfont.svg +4241 -0
  18. data/app/assets/fonts/fae/lato-regular-webfont.ttf +0 -0
  19. data/app/assets/fonts/fae/lato-regular-webfont.woff +0 -0
  20. data/app/assets/fonts/fae/selection.json +1334 -0
  21. data/app/assets/images/fae/error_bg.jpg +0 -0
  22. data/app/assets/images/fae/error_sad_face.png +0 -0
  23. data/app/assets/images/fae/icons/alert.svg +9 -0
  24. data/app/assets/images/fae/icons/arrow_down.svg +8 -0
  25. data/app/assets/images/fae/icons/arrow_left.svg +9 -0
  26. data/app/assets/images/fae/icons/arrow_right.svg +9 -0
  27. data/app/assets/images/fae/icons/arrow_stacked.svg +8 -0
  28. data/app/assets/images/fae/icons/arrow_up.svg +8 -0
  29. data/app/assets/images/fae/icons/calendar.svg +17 -0
  30. data/app/assets/images/fae/icons/check.svg +7 -0
  31. data/app/assets/images/fae/icons/checkmark.svg +8 -0
  32. data/app/assets/images/fae/icons/chevron_down.svg +7 -0
  33. data/app/assets/images/fae/icons/chevron_left.svg +10 -0
  34. data/app/assets/images/fae/icons/chevron_right.svg +10 -0
  35. data/app/assets/images/fae/icons/chevron_up.svg +7 -0
  36. data/app/assets/images/fae/icons/delete.svg +8 -0
  37. data/app/assets/images/fae/icons/delete_x.svg +8 -0
  38. data/app/assets/images/fae/icons/edit.svg +11 -0
  39. data/app/assets/images/fae/icons/handle.svg +13 -0
  40. data/app/assets/images/fae/icons/home.svg +10 -0
  41. data/app/assets/images/fae/icons/logout.svg +12 -0
  42. data/app/assets/images/fae/icons/magnifying_glass.svg +10 -0
  43. data/app/assets/images/fae/icons/menu.svg +11 -0
  44. data/app/assets/images/fae/icons/offlink.svg +25 -0
  45. data/app/assets/images/fae/icons/plus.svg +8 -0
  46. data/app/assets/images/fae/icons/pulldown.svg +11 -0
  47. data/app/assets/images/fae/icons/search.svg +11 -0
  48. data/app/assets/images/fae/icons/settings.svg +12 -0
  49. data/app/assets/images/fae/icons/sort.svg +11 -0
  50. data/app/assets/images/fae/icons/support.svg +15 -0
  51. data/app/assets/images/fae/icons/trash.svg +10 -0
  52. data/app/assets/images/fae/icons/trumbowyg.svg +1 -0
  53. data/app/assets/images/fae/icons/user.svg +13 -0
  54. data/app/assets/images/fae/icons/users.svg +19 -0
  55. data/app/assets/images/fae/icons/zoom.svg +12 -0
  56. data/app/assets/images/fae/tutorial_model_location.png +0 -0
  57. data/app/assets/images/fae/youtube_helper.jpg +0 -0
  58. data/app/assets/javascripts/fae/_modals.js +60 -0
  59. data/app/assets/javascripts/fae/_tables.js +403 -0
  60. data/app/assets/javascripts/fae/admin.js.erb +11 -0
  61. data/app/assets/javascripts/fae/application.js +63 -0
  62. data/app/assets/javascripts/fae/fae_init.js +8 -0
  63. data/app/assets/javascripts/fae/form/_ajax.js +380 -0
  64. data/app/assets/javascripts/fae/form/_cancel.js +38 -0
  65. data/app/assets/javascripts/fae/form/_filtering.js +276 -0
  66. data/app/assets/javascripts/fae/form/_form.js +60 -0
  67. data/app/assets/javascripts/fae/form/_slugger.js.erb +100 -0
  68. data/app/assets/javascripts/fae/form/_validator.js +459 -0
  69. data/app/assets/javascripts/fae/form/fae_chosen.js +44 -0
  70. data/app/assets/javascripts/fae/form/fileinputer.js +178 -0
  71. data/app/assets/javascripts/fae/form/hinter.js +111 -0
  72. data/app/assets/javascripts/fae/form/inputs/_checkbox.js +27 -0
  73. data/app/assets/javascripts/fae/form/inputs/_color.js +42 -0
  74. data/app/assets/javascripts/fae/form/inputs/_dates.js +78 -0
  75. data/app/assets/javascripts/fae/form/inputs/_select.js +162 -0
  76. data/app/assets/javascripts/fae/form/inputs/_text.js +118 -0
  77. data/app/assets/javascripts/fae/navigation/_global_search.js +184 -0
  78. data/app/assets/javascripts/fae/navigation/_language.js +89 -0
  79. data/app/assets/javascripts/fae/navigation/_navigation.js +206 -0
  80. data/app/assets/javascripts/fae/navigation/_subnav_highlighter.js +81 -0
  81. data/app/assets/javascripts/fae/navigation/sticky.js +186 -0
  82. data/app/assets/javascripts/fae/vendor/chosen.jquery.min.js +2 -0
  83. data/app/assets/javascripts/fae/vendor/frob_core_helpers.js +587 -0
  84. data/app/assets/javascripts/fae/vendor/fryr.js +437 -0
  85. data/app/assets/javascripts/fae/vendor/jqColorPicker.min.js +4 -0
  86. data/app/assets/javascripts/fae/vendor/jquery.daterangepicker.js +1292 -0
  87. data/app/assets/javascripts/fae/vendor/jquery.multi-select.js +534 -0
  88. data/app/assets/javascripts/fae/vendor/jquery.simplemodal.1.4.4.js +719 -0
  89. data/app/assets/javascripts/fae/vendor/jquery.tablesorter.js +1901 -0
  90. data/app/assets/javascripts/fae/vendor/js.cookie.js +139 -0
  91. data/app/assets/javascripts/fae/vendor/moment.min.js +7 -0
  92. data/app/assets/javascripts/fae/vendor/simplemde.min.js +13 -0
  93. data/app/assets/javascripts/fae/vendor/touch_punch.js +11 -0
  94. data/app/assets/javascripts/fae/vendor/trumbowyg.js.erb +4 -0
  95. data/app/assets/javascripts/fae/vendor/trumbowyg/plugins/upload/trumbowyg.upload.js +223 -0
  96. data/app/assets/javascripts/fae/vendor/trumbowyg/trumbowyg.js +1603 -0
  97. data/app/assets/stylesheets/fae/application.css +8 -0
  98. data/app/assets/stylesheets/fae/base.scss +82 -0
  99. data/app/assets/stylesheets/fae/globals/_fonts.scss +43 -0
  100. data/app/assets/stylesheets/fae/globals/_icons.scss +15 -0
  101. data/app/assets/stylesheets/fae/globals/_plugins.scss +51 -0
  102. data/app/assets/stylesheets/fae/globals/_tags.scss +68 -0
  103. data/app/assets/stylesheets/fae/globals/imports/_extends.scss +53 -0
  104. data/app/assets/stylesheets/fae/globals/imports/_mixins.scss +58 -0
  105. data/app/assets/stylesheets/fae/globals/imports/_variables.scss +165 -0
  106. data/app/assets/stylesheets/fae/globals/imports/finescss/_fine.scss +7 -0
  107. data/app/assets/stylesheets/fae/globals/imports/finescss/_fine_functions.scss +88 -0
  108. data/app/assets/stylesheets/fae/globals/imports/finescss/_fine_mixins.scss +280 -0
  109. data/app/assets/stylesheets/fae/globals/imports/finescss/_fine_variables.scss +30 -0
  110. data/app/assets/stylesheets/fae/globals/layout/_base.scss +48 -0
  111. data/app/assets/stylesheets/fae/globals/layout/_breadcrumbs.scss +45 -0
  112. data/app/assets/stylesheets/fae/globals/layout/_content-header.scss +99 -0
  113. data/app/assets/stylesheets/fae/globals/legacy/_pre-1.3.scss +659 -0
  114. data/app/assets/stylesheets/fae/globals/navigation/_base.scss +22 -0
  115. data/app/assets/stylesheets/fae/globals/navigation/_footer.scss +50 -0
  116. data/app/assets/stylesheets/fae/globals/navigation/_header.scss +149 -0
  117. data/app/assets/stylesheets/fae/globals/navigation/_mobilenav.scss +149 -0
  118. data/app/assets/stylesheets/fae/globals/navigation/_search.scss +76 -0
  119. data/app/assets/stylesheets/fae/globals/navigation/_sidenav.scss +142 -0
  120. data/app/assets/stylesheets/fae/globals/navigation/_utility.scss +95 -0
  121. data/app/assets/stylesheets/fae/modules/_alerts.scss +50 -0
  122. data/app/assets/stylesheets/fae/modules/_buttons.scss +62 -0
  123. data/app/assets/stylesheets/fae/modules/_modal.scss +78 -0
  124. data/app/assets/stylesheets/fae/modules/_toggles.scss +48 -0
  125. data/app/assets/stylesheets/fae/modules/forms/_asset-actions.scss +83 -0
  126. data/app/assets/stylesheets/fae/modules/forms/_base.scss +100 -0
  127. data/app/assets/stylesheets/fae/modules/forms/_checkbox.scss +87 -0
  128. data/app/assets/stylesheets/fae/modules/forms/_colorpicker.scss +57 -0
  129. data/app/assets/stylesheets/fae/modules/forms/_date.scss +335 -0
  130. data/app/assets/stylesheets/fae/modules/forms/_hints.scss +40 -0
  131. data/app/assets/stylesheets/fae/modules/forms/_label.scss +57 -0
  132. data/app/assets/stylesheets/fae/modules/forms/_radio.scss +69 -0
  133. data/app/assets/stylesheets/fae/modules/forms/_select.scss +317 -0
  134. data/app/assets/stylesheets/fae/modules/forms/_simple-mde.scss +29 -0
  135. data/app/assets/stylesheets/fae/modules/forms/_text.scss +62 -0
  136. data/app/assets/stylesheets/fae/modules/forms/_textarea.scss +16 -0
  137. data/app/assets/stylesheets/fae/modules/forms/_validation.scss +63 -0
  138. data/app/assets/stylesheets/fae/modules/tables/_actions.scss +41 -0
  139. data/app/assets/stylesheets/fae/modules/tables/_base.scss +63 -0
  140. data/app/assets/stylesheets/fae/modules/tables/_collapsible.scss +76 -0
  141. data/app/assets/stylesheets/fae/modules/tables/_filters.scss +61 -0
  142. data/app/assets/stylesheets/fae/modules/tables/_image.scss +21 -0
  143. data/app/assets/stylesheets/fae/modules/tables/_pagination.scss +34 -0
  144. data/app/assets/stylesheets/fae/modules/tables/_sorting.scss +58 -0
  145. data/app/assets/stylesheets/fae/modules/tables/_sticky.scss +9 -0
  146. data/app/assets/stylesheets/fae/modules/tables/_tooltips.scss +24 -0
  147. data/app/assets/stylesheets/fae/pages/_error.scss +35 -0
  148. data/app/assets/stylesheets/fae/pages/_help.scss +28 -0
  149. data/app/assets/stylesheets/fae/pages/_home.scss +18 -0
  150. data/app/assets/stylesheets/fae/pages/_login.scss +137 -0
  151. data/app/assets/stylesheets/fae/vendor/chosen.css +377 -0
  152. data/app/assets/stylesheets/fae/vendor/daterangepicker.css +227 -0
  153. data/app/assets/stylesheets/fae/vendor/reset.css +48 -0
  154. data/app/assets/stylesheets/fae/vendor/simplemde.min.css +7 -0
  155. data/app/assets/stylesheets/fae/vendor/trumbowyg.css +584 -0
  156. data/app/controllers/concerns/fae/application_controller_concern.rb +1 -0
  157. data/app/controllers/concerns/fae/asset_cloner.rb +46 -0
  158. data/app/controllers/concerns/fae/cloneable.rb +136 -0
  159. data/app/controllers/fae/application_controller.rb +123 -0
  160. data/app/controllers/fae/base_controller.rb +117 -0
  161. data/app/controllers/fae/files_controller.rb +26 -0
  162. data/app/controllers/fae/images_controller.rb +37 -0
  163. data/app/controllers/fae/nested_base_controller.rb +100 -0
  164. data/app/controllers/fae/options_controller.rb +29 -0
  165. data/app/controllers/fae/pages_controller.rb +44 -0
  166. data/app/controllers/fae/setup_controller.rb +54 -0
  167. data/app/controllers/fae/static_pages_controller.rb +54 -0
  168. data/app/controllers/fae/users_controller.rb +71 -0
  169. data/app/controllers/fae/utilities_controller.rb +61 -0
  170. data/app/helpers/fae/application_helper.rb +114 -0
  171. data/app/helpers/fae/fae_helper.rb +6 -0
  172. data/app/helpers/fae/form_helper.rb +240 -0
  173. data/app/helpers/fae/nested_form_helper.rb +39 -0
  174. data/app/helpers/fae/view_helper.rb +175 -0
  175. data/app/inputs/date_range_input.rb +17 -0
  176. data/app/inputs/radio_collection_input.rb +17 -0
  177. data/app/inputs/symbol_input.rb +5 -0
  178. data/app/models/concerns/fae/assets_validatable.rb +12 -0
  179. data/app/models/concerns/fae/authorization_concern.rb +12 -0
  180. data/app/models/concerns/fae/base_model_concern.rb +105 -0
  181. data/app/models/concerns/fae/change_concern.rb +1 -0
  182. data/app/models/concerns/fae/file_concern.rb +1 -0
  183. data/app/models/concerns/fae/image_concern.rb +1 -0
  184. data/app/models/concerns/fae/navigation_concern.rb +10 -0
  185. data/app/models/concerns/fae/option_concern.rb +1 -0
  186. data/app/models/concerns/fae/page_validatable.rb +26 -0
  187. data/app/models/concerns/fae/paper_trailer.rb +8 -0
  188. data/app/models/concerns/fae/role_concern.rb +1 -0
  189. data/app/models/concerns/fae/sortable.rb +51 -0
  190. data/app/models/concerns/fae/static_page_concern.rb +1 -0
  191. data/app/models/concerns/fae/text_area_concern.rb +1 -0
  192. data/app/models/concerns/fae/text_field_concern.rb +1 -0
  193. data/app/models/concerns/fae/trackable.rb +124 -0
  194. data/app/models/concerns/fae/user_concern.rb +7 -0
  195. data/app/models/fae/authorization.rb +8 -0
  196. data/app/models/fae/change.rb +53 -0
  197. data/app/models/fae/file.rb +24 -0
  198. data/app/models/fae/image.rb +33 -0
  199. data/app/models/fae/navigation.rb +132 -0
  200. data/app/models/fae/option.rb +38 -0
  201. data/app/models/fae/role.rb +18 -0
  202. data/app/models/fae/static_page.rb +109 -0
  203. data/app/models/fae/text_area.rb +14 -0
  204. data/app/models/fae/text_field.rb +14 -0
  205. data/app/models/fae/user.rb +67 -0
  206. data/app/uploaders/fae/file_uploader.rb +26 -0
  207. data/app/uploaders/fae/image_uploader.rb +28 -0
  208. data/app/validators/fae/cross_model_uniqueness_validator.rb +14 -0
  209. data/app/views/devise/confirmations/new.html.slim +13 -0
  210. data/app/views/devise/mailer/confirmation_instructions.html.slim +3 -0
  211. data/app/views/devise/mailer/reset_password_instructions.html.slim +5 -0
  212. data/app/views/devise/mailer/unlock_instructions.html.slim +4 -0
  213. data/app/views/devise/passwords/edit.html.slim +10 -0
  214. data/app/views/devise/passwords/new.html.slim +10 -0
  215. data/app/views/devise/registrations/edit.html.slim +22 -0
  216. data/app/views/devise/registrations/new.html.slim +15 -0
  217. data/app/views/devise/sessions/new.html.slim +7 -0
  218. data/app/views/devise/shared/_links.slim +25 -0
  219. data/app/views/devise/unlocks/new.html.slim +13 -0
  220. data/app/views/fae/application/_breadcrumb.html.slim +19 -0
  221. data/app/views/fae/application/_content_form.html.slim +55 -0
  222. data/app/views/fae/application/_credit.slim +6 -0
  223. data/app/views/fae/application/_file_uploader.html.slim +36 -0
  224. data/app/views/fae/application/_flash_messages.slim +2 -0
  225. data/app/views/fae/application/_global_search_results.html.slim +37 -0
  226. data/app/views/fae/application/_header.slim +50 -0
  227. data/app/views/fae/application/_markdown_helper.slim +41 -0
  228. data/app/views/fae/application/_mobilenav.slim +66 -0
  229. data/app/views/fae/application/_sidenav.slim +23 -0
  230. data/app/views/fae/application/_user_log.html.slim +36 -0
  231. data/app/views/fae/images/_image_uploader.html.slim +66 -0
  232. data/app/views/fae/options/_form.html.slim +16 -0
  233. data/app/views/fae/options/edit.html.slim +1 -0
  234. data/app/views/fae/pages/activity_log.html.slim +32 -0
  235. data/app/views/fae/pages/disabled_environment.html.slim +4 -0
  236. data/app/views/fae/pages/error404.html.slim +7 -0
  237. data/app/views/fae/pages/help.html.slim +35 -0
  238. data/app/views/fae/pages/home.html.slim +36 -0
  239. data/app/views/fae/setup/first_user.html.slim +11 -0
  240. data/app/views/fae/shared/_errors.slim +4 -0
  241. data/app/views/fae/shared/_form_header.html.slim +40 -0
  242. data/app/views/fae/shared/_index_header.html.slim +26 -0
  243. data/app/views/fae/shared/_nested_table.html.slim +49 -0
  244. data/app/views/fae/shared/_recent_changes.html.slim +22 -0
  245. data/app/views/fae/shared/_shared_nested_table.html.slim +46 -0
  246. data/app/views/fae/static_pages/index.html.slim +13 -0
  247. data/app/views/fae/users/_form.html.slim +19 -0
  248. data/app/views/fae/users/edit.html.slim +1 -0
  249. data/app/views/fae/users/index.html.slim +23 -0
  250. data/app/views/fae/users/new.html.slim +1 -0
  251. data/app/views/fae/users/settings.html.slim +1 -0
  252. data/app/views/kaminari/fae/_gap.html.slim +8 -0
  253. data/app/views/kaminari/fae/_next_page.html.slim +9 -0
  254. data/app/views/kaminari/fae/_page.html.slim +15 -0
  255. data/app/views/kaminari/fae/_paginator.html.slim +15 -0
  256. data/app/views/kaminari/fae/_prev_page.html.slim +9 -0
  257. data/app/views/layouts/devise.html.slim +29 -0
  258. data/app/views/layouts/fae/application.html.slim +23 -0
  259. data/app/views/layouts/fae/error.html.slim +11 -0
  260. data/config/deploy.rb +73 -0
  261. data/config/deploy/dev.rb +19 -0
  262. data/config/deploy/prod.rb +19 -0
  263. data/config/deploy/stage.rb +19 -0
  264. data/config/initializers/assets.rb +1 -0
  265. data/config/initializers/carrierwave.rb +3 -0
  266. data/config/initializers/devise.rb +258 -0
  267. data/config/initializers/devise_monkeypatch.rb +11 -0
  268. data/config/initializers/fae_judge.rb +3 -0
  269. data/config/initializers/inflections.rb +16 -0
  270. data/config/initializers/kaminari_config.rb +10 -0
  271. data/config/initializers/simple_form.rb +147 -0
  272. data/config/initializers/time_formats.rb +3 -0
  273. data/config/locales/devise.en.yml +59 -0
  274. data/config/locales/devise.zh-CN.yml +59 -0
  275. data/config/locales/fae.en.yml +10 -0
  276. data/config/locales/fae.zh-CN.yml +10 -0
  277. data/config/locales/simple_form.en.yml +26 -0
  278. data/config/locales/simple_form.zh-CN.yml +26 -0
  279. data/config/routes.rb +46 -0
  280. data/db/migrate/20140809222030_add_user_table.rb +49 -0
  281. data/db/migrate/20140822224029_create_fae_roles.rb +10 -0
  282. data/db/migrate/20141008180718_create_fae_images_table.rb +19 -0
  283. data/db/migrate/20141017194616_create_fae_options.rb +16 -0
  284. data/db/migrate/20141021181327_create_fae_files.rb +17 -0
  285. data/db/migrate/20141021183047_create_fae_text_areas.rb +16 -0
  286. data/db/migrate/20141021184311_create_fae_pages.rb +13 -0
  287. data/db/migrate/20141105214814_create_fae_text_fields.rb +15 -0
  288. data/db/migrate/20150930224821_create_fae_changes.rb +17 -0
  289. data/lib/fae-rails.rb +6 -0
  290. data/lib/fae/concerns/models/base.rb +8 -0
  291. data/lib/fae/engine.rb +37 -0
  292. data/lib/fae/options.rb +35 -0
  293. data/lib/fae/validation_helper_collection.rb +76 -0
  294. data/lib/fae/version.rb +3 -0
  295. data/lib/file_size_validator.rb +71 -0
  296. data/lib/generators/fae/base_generator.rb +156 -0
  297. data/lib/generators/fae/controller_generator.rb +13 -0
  298. data/lib/generators/fae/install_generator.rb +61 -0
  299. data/lib/generators/fae/model_generator.rb +11 -0
  300. data/lib/generators/fae/nested_index_scaffold_generator.rb +36 -0
  301. data/lib/generators/fae/nested_scaffold_generator.rb +51 -0
  302. data/lib/generators/fae/page_generator.rb +65 -0
  303. data/lib/generators/fae/scaffold_generator.rb +15 -0
  304. data/lib/generators/fae/templates/assets/fae.js +6 -0
  305. data/lib/generators/fae/templates/assets/fae.scss +2 -0
  306. data/lib/generators/fae/templates/controllers/nested_index_scaffold_controller.rb +81 -0
  307. data/lib/generators/fae/templates/controllers/nested_scaffold_controller.rb +13 -0
  308. data/lib/generators/fae/templates/controllers/scaffold_controller.rb +13 -0
  309. data/lib/generators/fae/templates/controllers/static_pages_controller.rb +10 -0
  310. data/lib/generators/fae/templates/initializers/fae.rb +63 -0
  311. data/lib/generators/fae/templates/initializers/fae_fine.rb +51 -0
  312. data/lib/generators/fae/templates/initializers/judge.rb +6 -0
  313. data/lib/generators/fae/templates/models/concerns/authorization_concern.rb +27 -0
  314. data/lib/generators/fae/templates/models/concerns/navigation_concern.rb +33 -0
  315. data/lib/generators/fae/templates/models/pages_model.rb +14 -0
  316. data/lib/generators/fae/templates/tasks/fae_tasks.rake +19 -0
  317. data/lib/generators/fae/templates/views/_form.html.slim +18 -0
  318. data/lib/generators/fae/templates/views/_form_index_nested.html.slim +13 -0
  319. data/lib/generators/fae/templates/views/_form_nested.html.slim +17 -0
  320. data/lib/generators/fae/templates/views/edit.html.slim +1 -0
  321. data/lib/generators/fae/templates/views/edit_nested.html.slim +3 -0
  322. data/lib/generators/fae/templates/views/index.html.slim +35 -0
  323. data/lib/generators/fae/templates/views/index_nested.html.slim +8 -0
  324. data/lib/generators/fae/templates/views/new.html.slim +1 -0
  325. data/lib/generators/fae/templates/views/new_nested.html.slim +3 -0
  326. data/lib/generators/fae/templates/views/static_page_form.html.slim +15 -0
  327. data/lib/generators/fae/templates/views/table_nested.html.slim +4 -0
  328. metadata +692 -0
@@ -0,0 +1,37 @@
1
+ module Fae
2
+ class ImagesController < ApplicationController
3
+
4
+ #ajax delete action
5
+ #
6
+ #post 'images/:id/delete_image' => 'images#delete_image', as: :delete_image
7
+ #here we just remove the asset from the attached image model, because if we deleted
8
+ #the model itself, re-uploading a new one would break.
9
+ def delete_image
10
+ image = Image.find_by_id(params[:id])
11
+ image.remove_asset = true
12
+ image.save
13
+ CarrierWave.clean_cached_files!
14
+ head :ok
15
+ end
16
+
17
+ # ajax action
18
+ #
19
+ # Called from the Trumbowyg JS wysiwyg editor when embedding images to a
20
+ # HTML field.
21
+ def create_html_embedded
22
+ image = Image.create! asset: params[:image]
23
+ render json: { success: true, file: image.asset.url }
24
+ end
25
+
26
+ private
27
+
28
+ #allow mass assignment
29
+ def image_params
30
+ if params[:image].present?
31
+ params.require(:image).permit!
32
+ else
33
+ nil
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,100 @@
1
+ module Fae
2
+ class NestedBaseController < Fae::ApplicationController
3
+
4
+ before_action :set_class_variables
5
+ before_action :set_item, only: [:show, :edit, :update, :destroy]
6
+
7
+ layout false, except: :index
8
+ helper Fae::ApplicationHelper
9
+
10
+ def new
11
+ @item = @klass.new
12
+ raise_undefined_parent if @item.fae_nested_foreign_key.blank?
13
+
14
+ item_id = params[:item_id].to_i || nil
15
+ @item.send("#{parent_foreign_key}=", item_id)
16
+ build_assets
17
+ end
18
+
19
+ def edit
20
+ build_assets
21
+ end
22
+
23
+ def create
24
+ @item = @klass.new(permitted_params)
25
+ raise_undefined_parent if @item.fae_nested_parent.blank?
26
+
27
+ if @item.save
28
+ @parent_item = @item.send(nested_parent)
29
+ flash[:notice] = t('fae.save_notice')
30
+ render template: table_template_path
31
+ else
32
+ build_assets
33
+ render action: 'new'
34
+ end
35
+ end
36
+
37
+ def update
38
+ raise_undefined_parent if @item.fae_nested_parent.blank?
39
+
40
+ if @item.update(permitted_params)
41
+ @parent_item = @item.send(nested_parent)
42
+ flash[:notice] = t('fae.save_notice')
43
+ render template: table_template_path
44
+ else
45
+ build_assets
46
+ render action: 'edit'
47
+ end
48
+ end
49
+
50
+ def destroy
51
+ raise_undefined_parent if @item.fae_nested_parent.blank?
52
+ @parent_item = @item.send(nested_parent)
53
+
54
+ if @item.destroy
55
+ flash[:notice] = t('fae.delete_notice')
56
+ else
57
+ flash[:alert] = t('fae.delete_error')
58
+ end
59
+ render template: table_template_path
60
+ end
61
+
62
+ private
63
+
64
+ def set_class_variables
65
+ @klass_name = params[:controller].split('/').last
66
+ @klass = @klass_name.classify.constantize
67
+ @klass_singular = @klass_name.singularize
68
+ end
69
+
70
+ def set_item
71
+ @item = @klass.find(params[:id])
72
+ end
73
+
74
+ # only allow trusted parameters, override to white-list
75
+ def permitted_params
76
+ params.require(@klass_singular).permit!
77
+ end
78
+
79
+ # if model has images or files, build them here for nesting
80
+ def build_assets
81
+ end
82
+
83
+ def raise_undefined_parent
84
+ raise "Define `fae_nested_parent` as a instance method of #{@klass.name}"
85
+ end
86
+
87
+ def table_template_path
88
+ "#{fae.root_path.gsub('/', '')}/#{@klass_name}/table"
89
+ end
90
+
91
+ def parent_foreign_key
92
+ @item.fae_nested_foreign_key
93
+ end
94
+
95
+ def nested_parent
96
+ @item.fae_nested_parent
97
+ end
98
+
99
+ end
100
+ end
@@ -0,0 +1,29 @@
1
+ module Fae
2
+ class OptionsController < ApplicationController
3
+
4
+ before_action :super_admin_only
5
+
6
+ def edit
7
+ @option = Option.first || Option.instance
8
+ @option.build_logo if @option.logo.blank?
9
+ @option.build_favicon if @option.favicon.blank?
10
+ end
11
+
12
+ # PATCH/PUT /options/1
13
+ def update
14
+ if @option.update(option_params)
15
+ flash[:notice] = 'Option was successfully updated.'
16
+ redirect_to :action => :edit
17
+ else
18
+ render :edit
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ # Only allow a trusted parameter "white list" through.
25
+ def option_params
26
+ params.require(:option).permit(:title, :time_zone, :colorway, :stage_url, :live_url, logo_attributes: [:id, :asset, :asset_cache, :attached_as, :alt], favicon_attributes: [:id, :asset, :asset_cache, :attached_as, :alt])
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,44 @@
1
+ module Fae
2
+ class PagesController < ApplicationController
3
+
4
+ before_action :authenticate_user!
5
+
6
+ def home
7
+ @list = recently_updated
8
+ @models = all_models
9
+ end
10
+
11
+ def help
12
+ require 'browser'
13
+ @browser = Browser.new(request.user_agent, accept_language: 'en-us')
14
+ end
15
+
16
+ def activity_log
17
+ @items = Fae::Change.order(id: :desc).page(params[:page])
18
+ end
19
+
20
+ def activity_log_filter
21
+ if params[:commit] == "Reset Search"
22
+ @items = Fae::Change.order(id: :desc).page(params[:page])
23
+ else
24
+ @items = Fae::Change.filter(params).fae_sort(params).page(params[:page])
25
+ end
26
+
27
+ render :activity_log, layout: false
28
+ end
29
+
30
+ def error404
31
+ return show_404
32
+ end
33
+
34
+ private
35
+
36
+ def recently_updated(num=25)
37
+ list = []
38
+ all_models.each do |m|
39
+ list << m.all.sort_by(&:updated_at).flatten
40
+ end
41
+ list.flatten.sort_by(&:updated_at).reverse.first(num)
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,54 @@
1
+ module Fae
2
+ class SetupController < ActionController::Base
3
+
4
+ helper Fae::FormHelper
5
+
6
+ before_action :check_roles
7
+
8
+ layout 'devise'
9
+
10
+ def first_user
11
+ @option = Fae::Option.instance
12
+ return show_404 if Fae::User.live_super_admins.present?
13
+
14
+ @user = Fae::User.new
15
+ end
16
+
17
+ def create_first_user
18
+ return show_401 if Fae::User.live_super_admins.present?
19
+
20
+ @user = Fae::User.new(user_params)
21
+ super_admin = Fae::Role.find_by_name('super admin')
22
+ @user.role = super_admin
23
+ @user.active = true
24
+
25
+ if @user.save
26
+ sign_in(@user)
27
+ redirect_to fae.root_path
28
+ else
29
+ @option = Fae::Option.instance
30
+ render action: 'first_user', error: t('fae.save_error')
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def show_404
37
+ render template: 'fae/pages/error404.html.slim', layout: 'fae/error.html.slim', status: :not_found
38
+ end
39
+
40
+ def show_401
41
+ render template: 'fae/pages/error404.html.slim', layout: 'fae/error.html.slim', status: :unauthorized
42
+ end
43
+
44
+ def user_params
45
+ params.require(:user).permit(:email, :first_name, :last_name, :password, :password_confirmation)
46
+ end
47
+
48
+ def check_roles
49
+ if Fae::Role.all.empty?
50
+ raise "Role 'super admin' does not exist in Fae::Role, run rake fae:seed_db"
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ module Fae
2
+ class StaticPagesController < ApplicationController
3
+ before_action :set_class_variables
4
+ before_action :set_item, only: [:edit, :update, :destroy]
5
+ helper FormHelper
6
+
7
+ def index
8
+ raise 'Missing blocks method inside StaticPages\' child controller' unless fae_pages
9
+ @items = fae_pages.map { |b| b.instance }
10
+ end
11
+
12
+ def edit
13
+ build_assocs
14
+ params[:static_page] = true
15
+ render params[:slug]
16
+ end
17
+
18
+ def update
19
+ if @item.update(item_params)
20
+ redirect_to @index_path, notice: t('fae.save_notice')
21
+ else
22
+ build_assocs
23
+ render template: "#{fae.root_path.gsub('/', '')}/content_blocks/#{params[:slug]}", error: t('fae.save_error')
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ # Use callbacks to share common setup or constraints between actions.
30
+ def set_item
31
+ @item = "#{params[:slug]}_page".classify.constantize.instance
32
+ end
33
+
34
+ # set up variables so that fae partial forms work
35
+ def set_class_variables(class_name = nil)
36
+ @klass_name = class_name || 'Pages'
37
+ @klass_singular = @klass_name.singularize
38
+ @klass_humanized = @klass_singular.humanize
39
+ @index_path = "#{Rails.application.routes.url_helpers.fae_path}/#{@klass_name.underscore.downcase}"
40
+ end
41
+
42
+ # Only allow a trusted parameter "white list" through.
43
+ def item_params
44
+ model = @item.class.name.split('::').last.underscore
45
+ params.require(:"#{model}").permit!
46
+ end
47
+
48
+ def build_assocs
49
+ @item.class.reflect_on_all_associations.each do |assoc|
50
+ @item.send(:"create_#{assoc.name}", attached_as: assoc.name.to_s) if assoc.macro == :has_one && @item.send(:"#{assoc.name}").blank?
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,71 @@
1
+ module Fae
2
+ class UsersController < ApplicationController
3
+ before_action :admin_only, except: [:settings, :update]
4
+ before_action :set_user, only: [:show, :edit, :update, :destroy]
5
+ before_action :set_role_collection, except: [:index, :destroy]
6
+
7
+ def index
8
+ @users = current_user.super_admin? ? Fae::User.all : Fae::User.public_users
9
+ end
10
+
11
+ def new
12
+ @user = Fae::User.new
13
+ end
14
+
15
+ def edit
16
+ end
17
+
18
+ def settings
19
+ @user = current_user
20
+ end
21
+
22
+ def create
23
+ @user = Fae::User.new(user_params)
24
+
25
+ if @user.save
26
+ redirect_to users_path, notice: t('fae.save_notice')
27
+ else
28
+ render action: 'new', error: t('fae.save_error')
29
+ end
30
+ end
31
+
32
+ def update
33
+ params[:user].delete(:password) if params[:user][:password].blank?
34
+ params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
35
+
36
+ if @user.update(user_params)
37
+ path = current_user.super_admin? ? users_path : fae.root_path
38
+ redirect_to path, notice: t('fae.save_notice')
39
+ else
40
+ render action: 'edit', error: t('fae.save_error')
41
+ end
42
+ end
43
+
44
+ def destroy
45
+ @user.destroy
46
+ respond_to do |format|
47
+ format.html { redirect_to users_url }
48
+ format.json { head :no_content }
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def set_role_collection
55
+ @role_collection = Role.all if current_user.super_admin?
56
+ @role_collection = Role.public_roles if current_user.admin?
57
+ end
58
+
59
+ def set_user
60
+ @user = Fae::User.find(params[:id])
61
+ end
62
+
63
+ def user_params
64
+ if current_user.super_admin_or_admin?
65
+ params.require(:user).permit!
66
+ elsif @user === current_user
67
+ params.require(:user).permit(:email, :first_name, :last_name, :password, :password_confirmation)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,61 @@
1
+ module Fae
2
+ class UtilitiesController < ApplicationController
3
+
4
+ def toggle
5
+ klass = params[:object].gsub('__', '/').classify.constantize
6
+ if can_toggle(klass)
7
+ klass.find(params[:id]).toggle(params[:attr]).save(validate: false)
8
+ render body: nil
9
+ else
10
+ render body: nil, status: :unauthorized
11
+ end
12
+ end
13
+
14
+ def sort
15
+ if request.xhr?
16
+ ids = params[params[:object]]
17
+ klass = params[:object].gsub('fae_', 'fae/').gsub('__', '/').classify.constantize
18
+ items = klass.find(ids)
19
+ items.each do |item|
20
+ position = ids.index(item.id.to_s) + 1
21
+ item.update_attribute(:position, position)
22
+ end
23
+ end
24
+ render body: nil
25
+ end
26
+
27
+ def language_preference
28
+ if params[:language].present? && (params[:language] == 'all' || Fae.languages.has_key?(params[:language].to_sym))
29
+ current_user.update_column(:language, params[:language])
30
+ end
31
+ render body: nil
32
+ end
33
+
34
+ def global_search
35
+ if params[:query].present? && params[:query].length > 2
36
+ search_locals = { navigation_items: @fae_navigation.search(params[:query]), records: records_by_display_name(params[:query]) }
37
+ else
38
+ search_locals = { show_nav: true }
39
+ end
40
+ render partial: 'global_search_results', locals: search_locals
41
+ end
42
+
43
+ private
44
+
45
+ def can_toggle(klass)
46
+ # restrict models that non-admins aren't allowed to update
47
+ restricted_classes = %w(Fae::User Fae::Role Fae::Option)
48
+ return false if restricted_classes.include?(klass.name.to_s) && !current_user.super_admin_or_admin?
49
+ true
50
+ end
51
+
52
+ def records_by_display_name(query)
53
+ records = []
54
+ all_models.each do |m|
55
+ records += m.fae_search(query)
56
+ end
57
+ records
58
+ end
59
+
60
+ end
61
+ end