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,26 @@
1
+ # encoding: utf-8
2
+ module Fae
3
+ class FileUploader < CarrierWave::Uploader::Base
4
+
5
+ include CarrierWave::MiniMagick
6
+
7
+ process :save_file_size_in_model
8
+
9
+ def save_file_size_in_model
10
+ model.file_size = file.size
11
+ end
12
+
13
+ # Override the directory where uploaded files will be stored.
14
+ # This is a sensible default for uploaders that are meant to be mounted:
15
+ def store_dir
16
+ "system/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
17
+ end
18
+
19
+ # Add a white list of extensions which are allowed to be uploaded.
20
+ # For images you might use something like this:
21
+ def extension_white_list
22
+ %w(jpg jpeg gif png pdf)
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ module Fae
3
+ class ImageUploader < CarrierWave::Uploader::Base
4
+
5
+ include CarrierWave::MiniMagick
6
+
7
+ # saves file size to DB
8
+ process :save_file_size_in_model
9
+ def save_file_size_in_model
10
+ model.file_size = file.size
11
+ end
12
+
13
+ def extension_white_list
14
+ %w(jpg jpeg gif png ico)
15
+ end
16
+
17
+ # Override the directory where uploaded files will be stored.
18
+ # This is a sensible default for uploaders that are meant to be mounted:
19
+ def store_dir
20
+ "system/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
21
+ end
22
+
23
+ version :thumb do
24
+ process :resize_to_fill => [150,100]
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,14 @@
1
+ module Fae
2
+ class CrossModelUniquenessValidator < ActiveModel::EachValidator
3
+ def validate_each(record, attribute, value)
4
+ if options[:model].where(attribute => value).present?
5
+ record.errors[attribute] << (options[:message] || "has already been taken in #{articlize(options[:model].to_s.downcase)}")
6
+ end
7
+ end
8
+
9
+ private
10
+ def articlize(params_word)
11
+ %w(a e i o u).include?(params_word[0].downcase) ? "an #{params_word}" : "a #{params_word}"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ h2 Resend confirmation instructions
2
+
3
+ = simple_form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f|
4
+ = f.error_notification
5
+ = f.full_error :confirmation_token
6
+
7
+ .form-inputs
8
+ = f.input :email, :required => true, :autofocus => true
9
+
10
+ .form-actions
11
+ = f.button :submit, "Resend confirmation instructions"
12
+
13
+ == render "devise/shared/links"
@@ -0,0 +1,3 @@
1
+ p Welcome #{@email}!
2
+ p You can confirm your account email through the link below:
3
+ p = link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @token)
@@ -0,0 +1,5 @@
1
+ p Hello #{@resource.email}!
2
+ p Someone has requested a link to change your password. You can do this through the link below.
3
+ p = link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @token)
4
+ p If you didn't request this, please ignore this email.
5
+ p Your password won't change until you access the link above and create a new one.
@@ -0,0 +1,4 @@
1
+ p Hello #{@resource.email}!
2
+ p Your account has been locked due to an excessive number of unsuccessful sign in attempts.
3
+ p Click the link below to unlock your account:
4
+ p = link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @token)
@@ -0,0 +1,10 @@
1
+ .login-form-password
2
+ = simple_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f|
3
+ = f.error_notification
4
+ = f.input :reset_password_token, :as => :hidden
5
+ = f.full_error :reset_password_token
6
+ .form-inputs
7
+ = f.input :password, :label => "New password", :required => true, :autofocus => true
8
+ = f.input :password_confirmation, :label => "Confirm your new password", :required => true
9
+ .form-actions
10
+ = f.button :submit, "Change my password"
@@ -0,0 +1,10 @@
1
+ .login-form-password
2
+ = simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f|
3
+ = f.error_notification
4
+ = f.label :email, "We'll Send Your Password."
5
+ = f.label :email, "What Email Do You Use To Sign In?"
6
+ = f.input :email, required: true, autofocus: true, label: false
7
+ .login-form-actions
8
+ = f.button :submit, 'Submit'
9
+ - if controller_name != 'sessions'
10
+ = link_to "Back to Sign In", new_session_path(resource_name)
@@ -0,0 +1,22 @@
1
+ h2 Edit #{resource_name.to_s.titleize}
2
+ = simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f|
3
+ = f.error_notification
4
+ .form-inputs
5
+ = f.input :email, :required => true, :autofocus => true
6
+ - if devise_mapping.confirmable? && resource.pending_reconfirmation?
7
+ p Currently waiting confirmation for: #{resource.unconfirmed_email}
8
+
9
+ = f.input :password, :autocomplete => "off", :hint => "leave it blank if you don't want to change it", :required => false
10
+ = f.input :password_confirmation, :required => false
11
+ = f.input :current_password, :hint => "we need your current password to confirm your changes", :required => true
12
+
13
+ .form-actions
14
+ = f.button :submit, "Update"
15
+
16
+ h3 Cancel my account
17
+
18
+ p
19
+ | Unhappy?
20
+ = link_to "Cancel my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete
21
+
22
+ = link_to "Back", :back
@@ -0,0 +1,15 @@
1
+ h2 Sign up
2
+
3
+ = simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f|
4
+
5
+ = f.error_notification
6
+
7
+ .form-inputs
8
+ = f.input :email, :required => true, :autofocus => true
9
+ = f.input :password, :required => true
10
+ = f.input :password_confirmation, :required => true
11
+
12
+ .form-actions
13
+ = f.button :submit, "Sign up"
14
+
15
+ == render "devise/shared/links"
@@ -0,0 +1,7 @@
1
+ .login-form
2
+ = simple_form_for(resource, as: resource_name, url: session_path(resource_name), html: { id: 'login_form' }) do |f|
3
+ = f.input :email, required: false, autofocus: true
4
+ = f.input :password, required: false
5
+ .login-form-actions
6
+ = f.input :remember_me, as: :boolean if devise_mapping.rememberable?
7
+ = f.button :submit, "Submit", class: "login-form-actions-submit"
@@ -0,0 +1,25 @@
1
+ - if controller_name != 'sessions'
2
+ a href=new_session_path(resource_name) Sign in
3
+ br
4
+
5
+ - if devise_mapping.registerable? && controller_name != 'registrations'
6
+ a href=new_registration_path(resource_name) Sign up
7
+ br
8
+
9
+ - if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations'
10
+ a href=new_password_path(resource_name) Forgot your password?
11
+ br
12
+
13
+ - if devise_mapping.confirmable? && controller_name != 'confirmations'
14
+ a href=new_confirmation_path(resource_name)
15
+ | Didn't receive confirmation instructions?
16
+
17
+ - if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks'
18
+ a href=new_unlock_path(resource_name)
19
+ | Didn't receive unlock instructions?
20
+ br
21
+
22
+ - if devise_mapping.omniauthable?
23
+ - resource_class.omniauth_providers.each do |provider|
24
+ a href=omniauth_authorize_path(resource_name, provider) Sign in with #{provider.to_s.titleize}
25
+ br
@@ -0,0 +1,13 @@
1
+ h2 Resend unlock instructions
2
+
3
+ = simple_form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f|
4
+ = f.error_notification
5
+ = f.full_error :unlock_token
6
+
7
+ .form-inputs
8
+ = f.input :email, :required => true, :autofocus => true
9
+
10
+ .form-actions
11
+ = f.button :submit, "Resend unlock instructions"
12
+
13
+ == render "devise/shared/links"
@@ -0,0 +1,19 @@
1
+ ruby:
2
+ title ||= nil
3
+
4
+ ul.breadcrumbs
5
+ li
6
+ a.-home href=fae.root_path
7
+ i.icon-home
8
+ - fav_nav_array = @fae_navigation.items
9
+ - @fae_navigation.coordinates.each_with_index do |coors, i|
10
+ - link = fav_nav_array[coors][:path]
11
+ - if (i < @fae_navigation.coordinates.length - 1 || title.present?) && fav_nav_array[coors][:nested_path].present?
12
+ li
13
+ a href=fav_nav_array[coors][:nested_path] = fav_nav_array[coors][:text]
14
+ - else
15
+ li = fav_nav_array[coors][:text]
16
+ - fav_nav_array = fav_nav_array[coors][:subitems]
17
+
18
+ - if title.present?
19
+ li = title
@@ -0,0 +1,55 @@
1
+ ruby:
2
+ require_locals ['attribute', 'f'], local_assigns
3
+ has_label = ![false, ''].include?(local_assigns[:label])
4
+ label ||= attribute.to_s.titleize
5
+ required ||= f.object.send(attribute).is_required?(f.object.class)
6
+ helper_text ||= attempt_common_helper_text(attribute)
7
+ markdown ||= false
8
+ markdown_supported ||= false
9
+ hint ||= nil
10
+ options ||= {}
11
+ input_options ||= {}
12
+
13
+ if has_label
14
+ label_adjusted = required ? '<abbr title="required">*</abbr> ' : ''
15
+ label_adjusted += label
16
+ if markdown_supported.present? || helper_text.present?
17
+ label_adjusted += content_tag :h6, class: 'helper_text' do
18
+ concat(helper_text) if helper_text.present?
19
+ concat(content_tag(:span, 'Markdown Supported', class: 'markdown-support')) if markdown_supported.present?
20
+ end
21
+ end
22
+ else
23
+ options[:label] = false
24
+ end
25
+
26
+ options.merge! label: label_adjusted.html_safe if label_adjusted.present?
27
+ options.merge! hint: hint
28
+ options.merge! input_options if (input_options.keys).any?
29
+ options.merge! wrapper_html: {} if input_options[:wrapper_html].blank?
30
+
31
+ if options[:input_html].present? && options[:input_html][:class].present? && markdown.present?
32
+ options[:input_html][:class] = options[:input_html][:class] + ' js-markdown-editor'
33
+ elsif options[:input_html].blank?
34
+ options.merge! input_html: {}
35
+ options[:input_html].merge! class: 'js-markdown-editor' if markdown.present?
36
+ end
37
+
38
+ languages = f.object.class.fae_fields[attribute].try(:[], :languages)
39
+
40
+ - if languages.present?
41
+ / Store original label for later gsub
42
+ - orig_label = options[:label]
43
+
44
+ - languages.each do |lang|
45
+ - options.deep_merge! wrapper_html: { data: { language: lang } }
46
+ - options[:label] = orig_label.gsub(label, "#{label} (#{lang.to_s})").html_safe
47
+
48
+ = f.simple_fields_for "#{attribute}_#{lang}".to_sym, defaults: { wrapper_html: options[:wrapper_html] } do |i|
49
+ - options[:input_html].merge! data: { validate: i.object.validation_json(f.object.class) }
50
+ = i.input :content, options
51
+
52
+ - else
53
+ = f.simple_fields_for attribute.to_sym, defaults: { wrapper_html: options[:wrapper_html] } do |i|
54
+ - options[:input_html].merge! data: { validate: i.object.validation_json(f.object.class) }
55
+ = i.input :content, options
@@ -0,0 +1,6 @@
1
+ .credit
2
+ span a <a href="https://wearefine.com" target="_blank">FINE</a> Admin v#{Fae::VERSION}
3
+
4
+ a href="https://github.com/wearefine/fae" target="_blank" title="a FINE Admin"
5
+ svg width="50" height="51" viewBox="0 0 50 51" xmlns="http://www.w3.org/2000/svg"
6
+ path d="M0 25.808c0 4.6 1.12 8.776 3.36 12.526 2.24 3.872 5.277 6.918 9.114 9.14C16.31 49.698 20.486 50.81 25 50.81c4.53 0 8.724-1.11 12.578-3.333 3.854-2.24 6.888-5.282 9.102-9.128 2.213-3.845 3.32-8.025 3.32-12.54 0-4.582-1.11-8.775-3.333-12.577-2.24-3.854-5.282-6.888-9.128-9.102C33.693 1.915 29.513.808 25 .808c-4.6 0-8.776 1.12-12.526 3.36-3.872 2.24-6.918 5.277-9.14 9.114C1.11 17.12 0 21.294 0 25.808zm4.167 0c0-2.778.547-5.46 1.64-8.047 1.094-2.586 2.587-4.817 4.48-6.692 1.892-1.892 4.123-3.38 6.692-4.466C19.55 5.517 22.22 4.975 25 4.975c2.778 0 5.46.542 8.047 1.627 2.587 1.085 4.826 2.574 6.72 4.466 1.874 1.875 3.354 4.106 4.44 6.693 1.084 2.588 1.626 5.27 1.626 8.048 0 2.986-.612 5.833-1.836 8.542-1.224 2.708-2.942 5.047-5.156 7.018-2.212 1.97-4.743 3.398-7.59 4.284v-7.344c0-1.823-.747-3.247-2.24-4.27 3.664-.33 6.342-1.26 8.034-2.787 1.693-1.527 2.54-3.95 2.54-7.265 0-2.57-.79-4.73-2.37-6.484.312-.937.468-1.84.468-2.708 0-1.284-.295-2.465-.885-3.54-1.163 0-2.205.19-3.125.572-.92.382-2.05 1.04-3.386 1.98-1.614-.366-3.28-.548-5-.548-1.96 0-3.793.2-5.494.6-1.302-.956-2.427-1.63-3.373-2.02-.947-.39-2.02-.585-3.217-.585-.573 1.094-.86 2.275-.86 3.542 0 .903.148 1.815.443 2.735-1.58 1.7-2.37 3.854-2.37 6.458 0 3.316.843 5.73 2.527 7.24 1.684 1.51 4.383 2.44 8.1 2.786-.99.66-1.677 1.624-2.06 2.892-.85.295-1.735.442-2.655.442-.694 0-1.293-.156-1.797-.468-.155-.087-.298-.178-.428-.274-.13-.095-.265-.212-.404-.35-.14-.14-.252-.25-.34-.327-.085-.078-.198-.212-.337-.403-.138-.19-.23-.313-.273-.365-.043-.052-.147-.19-.312-.417-.165-.225-.256-.347-.274-.364-.815-1.077-1.787-1.615-2.915-1.615-.608 0-.912.13-.912.392 0 .104.148.278.443.52.556.487.85.747.885.782.418.33.652.538.705.625.503.624.885 1.31 1.145 2.056.973 2.17 2.64 3.255 5 3.255.382 0 1.13-.085 2.24-.26v5.522c-2.847-.886-5.378-2.314-7.59-4.284-2.215-1.97-3.933-4.31-5.157-7.018-1.224-2.71-1.836-5.556-1.836-8.542z"
@@ -0,0 +1,36 @@
1
+ ruby:
2
+ require_locals ['f'], local_assigns
3
+ item ||= f.object
4
+ file_name ||= :file
5
+ the_file = item.send(file_name)
6
+ label ||= file_name.to_s.titleize
7
+ helper_text ||= ""
8
+ required ||= false
9
+ languages = f.object.class.try(:fae_fields).try(:[], file_name).try(:[], :languages)
10
+ language ||= nil
11
+
12
+ - if languages.present?
13
+ - languages.each do |lang|
14
+ = render 'fae/application/file_uploader', f: f, item: item, file_name: "#{file_name}_#{lang}".to_sym, label: "#{label} (#{lang.to_s})", helper_text: helper_text, required: required, language: lang
15
+
16
+ - else
17
+ - wrapper_html = language.present? ? { data: { language: language } } : {}
18
+ = f.simple_fields_for file_name, defaults: { wrapper_html: wrapper_html } do |i|
19
+ .input.field
20
+ = content_tag :label, class: ('required' if required) do
21
+ - if required
22
+ abbr title="required" *
23
+ = label.html_safe
24
+ - if helper_text.present?
25
+ h6.helper_text = helper_text
26
+
27
+ - if the_file.asset.present?
28
+ .asset-actions.-files
29
+ a.asset-title href=the_file.asset.url target="_blank" = the_file.asset.file.filename
30
+
31
+ = link_to '', fae.delete_file_path(the_file.id), class: 'asset-delete js-asset-delete', remote: true, method: :delete, data: { confirm: t('fae.delete_confirmation') }
32
+
33
+ .asset-inputs style="#{'display: none;' unless the_file.asset.blank?}"
34
+ = i.input :asset, as: :file, label: false, input_html: { data: { limit: Fae.max_file_upload_size, exceeded: t('fae.exceeded_upload_limit') } }
35
+ = i.input :asset_cache, as: :hidden
36
+ = i.hidden_field :required, value: required
@@ -0,0 +1,2 @@
1
+ - flash.each do |name, msg|
2
+ .flash-message class=name = msg
@@ -0,0 +1,37 @@
1
+ ruby:
2
+ show_nav ||= false
3
+ navigation_items ||= []
4
+ records ||= []
5
+
6
+ ul.search-results.js-search-results
7
+
8
+ - if show_nav && @fae_topnav_items.present?
9
+
10
+ - @fae_topnav_items.each do |item|
11
+ li.search-topnav
12
+ a href=item[:nested_path] = item[:text]
13
+ - if item[:subitems]
14
+ ul
15
+ - item[:subitems].each do |subitem|
16
+ li: a href=subitem[:nested_path] = subitem[:text]
17
+
18
+ - elsif navigation_items.present? || records.present?
19
+
20
+ - if navigation_items.present?
21
+ - navigation_items.each do |item|
22
+ li: a.search-nav-item href=item[:nested_path] = item[:text]
23
+
24
+ - if records.present?
25
+ - records.each do |item|
26
+ - begin
27
+ - parent = item.respond_to?(:fae_parent) ? item.fae_parent : nil
28
+ - edit_path = edit_polymorphic_path([main_app, fae_scope, parent, item])
29
+ li
30
+ a href=edit_path
31
+ span.search-record-label = item.class.name
32
+ = item.fae_display_field
33
+ - rescue
34
+
35
+ - else
36
+
37
+ li No results
@@ -0,0 +1,50 @@
1
+ header.main-header#js-main-header
2
+ span.mobilenav-toggle.icon-menu#js-mobilenav-toggle
3
+ h1: a href=fae.root_path = @option.title
4
+
5
+ - if @fae_topnav_items.present?
6
+ nav
7
+ ul.main-header-nav
8
+ - @fae_topnav_items.each_with_index do |item, idx|
9
+ li class=nav_active_class(item[:class_name], 0, idx)
10
+ a href=item[:nested_path] = item[:text]
11
+ - if item[:subitems].present?
12
+ ul
13
+ - item[:subitems].each_with_index do |subitem, sub_idx|
14
+ li: a href=subitem[:nested_path] class=nav_active_class(subitem[:class_name], 1, sub_idx, idx) = subitem[:text]
15
+
16
+ - if user_signed_in?
17
+ ul.utility-nav#js-utility-nav
18
+ li.utility-dropdown.js-utility-dropdown
19
+ a.grabatar-link href="#"
20
+ img.grabatar src=fae_avatar alt=current_user.full_name
21
+ ul
22
+ li: a href=fae.destroy_user_session_path Log Out
23
+ li: a href=fae.settings_path Your Settings
24
+
25
+ li.utility-dropdown.js-utility-dropdown
26
+ a href="#"
27
+ i.icon-settings
28
+ ul
29
+ - if current_user.super_admin_or_admin?
30
+ li: a href=fae.users_path Users
31
+ li: a href=fae.activity_log_path Activity Log
32
+ - if current_user.super_admin?
33
+ li: a href=fae.option_path Root Settings
34
+ - if @option.live_url.present?
35
+ li: a href=@option.live_url target="_blank" Live Site
36
+ - if @option.stage_url.present?
37
+ li: a href=@option.stage_url target="_blank" Stage Site
38
+
39
+ li
40
+ a href=fae.help_path
41
+ i.icon-support
42
+
43
+ li.utility-dropdown.utility-search#js-utility-search
44
+ a href="#": i.icon-search
45
+
46
+ .utility-search-hit-area#js-utility-search-wrapper
47
+ .utility-search-wrapper
48
+ input#js-global-search type="text" placeholder="Jump to..."
49
+
50
+ == render 'global_search_results', show_nav: true
@@ -0,0 +1,41 @@
1
+ .markdown-hint
2
+ .markdown-hint-wrapper
3
+ h3 Markdown Options
4
+
5
+ h4 Links
6
+ p
7
+ | To link text, place a [bracket] around the link title and use a (/url) to house the url.
8
+ br
9
+ | Internal Link: [link to about](/about)
10
+ br
11
+ | External link: [link to about](http://www.google.com/about)
12
+
13
+ h4 Formatting
14
+ p
15
+ | Emphasize text in a variety of ways by placing **asterisks** to bold, _underscores_ to italicize.
16
+ br
17
+ | Bold **bold**
18
+ br
19
+ | Italicize _italic
20
+
21
+ h4 Headers
22
+ p
23
+ | Use up to six hashtags to identify the importance of the section header.
24
+ br
25
+ | Page Header: # Page Header
26
+ br
27
+ | Sub Header: ## Sub Header
28
+
29
+ h4 List
30
+ p
31
+ | Format lists by swapping out the characters that lead the list item.
32
+ br
33
+ span Bulleted List:
34
+ br
35
+ == ['* bullet', '* bullet 2'].join('<br />')
36
+ br
37
+ span Numbered List
38
+ == ['1. line item', '2. line item'].join('<br />')
39
+
40
+ h4 Paragraph break
41
+ p Adding a blank line in between your paragraphs makes a paragraph break.