georgia 0.7.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 (366) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +27 -0
  4. data/Rakefile +27 -0
  5. data/app/assets/fonts/georgia/signika-bold-webfont.eot +0 -0
  6. data/app/assets/fonts/georgia/signika-bold-webfont.svg +1711 -0
  7. data/app/assets/fonts/georgia/signika-bold-webfont.ttf +0 -0
  8. data/app/assets/fonts/georgia/signika-bold-webfont.woff +0 -0
  9. data/app/assets/fonts/georgia/signika-light-webfont.eot +0 -0
  10. data/app/assets/fonts/georgia/signika-light-webfont.svg +1680 -0
  11. data/app/assets/fonts/georgia/signika-light-webfont.ttf +0 -0
  12. data/app/assets/fonts/georgia/signika-light-webfont.woff +0 -0
  13. data/app/assets/fonts/georgia/signika-regular-webfont.eot +0 -0
  14. data/app/assets/fonts/georgia/signika-regular-webfont.svg +1746 -0
  15. data/app/assets/fonts/georgia/signika-regular-webfont.ttf +0 -0
  16. data/app/assets/fonts/georgia/signika-regular-webfont.woff +0 -0
  17. data/app/assets/images/georgia/bg-body-bar.jpg +0 -0
  18. data/app/assets/images/georgia/checkmark.png +0 -0
  19. data/app/assets/images/georgia/content-types/avi.jpg +0 -0
  20. data/app/assets/images/georgia/content-types/css.jpg +0 -0
  21. data/app/assets/images/georgia/content-types/csv.jpg +0 -0
  22. data/app/assets/images/georgia/content-types/doc.jpg +0 -0
  23. data/app/assets/images/georgia/content-types/docx.jpg +0 -0
  24. data/app/assets/images/georgia/content-types/eps.jpg +0 -0
  25. data/app/assets/images/georgia/content-types/gif.jpg +0 -0
  26. data/app/assets/images/georgia/content-types/gz.jpg +0 -0
  27. data/app/assets/images/georgia/content-types/html.jpg +0 -0
  28. data/app/assets/images/georgia/content-types/jpg.jpg +0 -0
  29. data/app/assets/images/georgia/content-types/mp3.jpg +0 -0
  30. data/app/assets/images/georgia/content-types/ods.jpg +0 -0
  31. data/app/assets/images/georgia/content-types/odt.jpg +0 -0
  32. data/app/assets/images/georgia/content-types/pdf.jpg +0 -0
  33. data/app/assets/images/georgia/content-types/png.jpg +0 -0
  34. data/app/assets/images/georgia/content-types/ppt.jpg +0 -0
  35. data/app/assets/images/georgia/content-types/pptx.jpg +0 -0
  36. data/app/assets/images/georgia/content-types/rar.jpg +0 -0
  37. data/app/assets/images/georgia/content-types/tar.jpg +0 -0
  38. data/app/assets/images/georgia/content-types/txt.jpg +0 -0
  39. data/app/assets/images/georgia/content-types/wav.jpg +0 -0
  40. data/app/assets/images/georgia/content-types/xls.jpg +0 -0
  41. data/app/assets/images/georgia/content-types/zip.jpg +0 -0
  42. data/app/assets/images/georgia/down_arrow.gif +0 -0
  43. data/app/assets/images/georgia/grippy_large.png +0 -0
  44. data/app/assets/images/georgia/indeterminate.png +0 -0
  45. data/app/assets/images/georgia/logo.png +0 -0
  46. data/app/assets/images/georgia/select2-spinner.gif +0 -0
  47. data/app/assets/images/georgia/select2.png +0 -0
  48. data/app/assets/images/georgia/select2x2.png +0 -0
  49. data/app/assets/images/georgia/transparent.jpg +0 -0
  50. data/app/assets/images/georgia/up_arrow.gif +0 -0
  51. data/app/assets/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
  52. data/app/assets/javascripts/georgia/application.js +20 -0
  53. data/app/assets/javascripts/georgia/bootstrap-vendor.js.coffee +13 -0
  54. data/app/assets/javascripts/georgia/ckeditor/config.js +22 -0
  55. data/app/assets/javascripts/georgia/components/asset-replacer.js.coffee +25 -0
  56. data/app/assets/javascripts/georgia/components/asset-uploader.js.coffee +44 -0
  57. data/app/assets/javascripts/georgia/components/flash.js.coffee +15 -0
  58. data/app/assets/javascripts/georgia/components/forms/menu.js.coffee +66 -0
  59. data/app/assets/javascripts/georgia/components/forms/revision.js.coffee +22 -0
  60. data/app/assets/javascripts/georgia/components/forms/spinning.js.coffee +51 -0
  61. data/app/assets/javascripts/georgia/components/media-library.js.coffee +57 -0
  62. data/app/assets/javascripts/georgia/components/portlets/link.js.coffee +14 -0
  63. data/app/assets/javascripts/georgia/components/portlets/slide.js.coffee +38 -0
  64. data/app/assets/javascripts/georgia/components/portlets/widget.js.coffee +47 -0
  65. data/app/assets/javascripts/georgia/components/position_sort.js.coffee +20 -0
  66. data/app/assets/javascripts/georgia/components/tables/checkbox.js.coffee +123 -0
  67. data/app/assets/javascripts/georgia/components/tables/media.js.coffee +59 -0
  68. data/app/assets/javascripts/georgia/components/tables/messages.js.coffee +59 -0
  69. data/app/assets/javascripts/georgia/components/tables/pages.js.coffee +93 -0
  70. data/app/assets/javascripts/georgia/components/tags.js.coffee +36 -0
  71. data/app/assets/javascripts/georgia/components/widget.js.coffee +32 -0
  72. data/app/assets/javascripts/georgia/featured-image.js.coffee +8 -0
  73. data/app/assets/javascripts/georgia/keybindings.js.coffee +42 -0
  74. data/app/assets/javascripts/georgia/toggle.js.coffee +4 -0
  75. data/app/assets/javascripts/georgia/vendor/bootstrap-datetimepicker.js +28 -0
  76. data/app/assets/javascripts/georgia/vendor/jquery.mjs.nestedSortable.js +608 -0
  77. data/app/assets/javascripts/georgia/vendor/jquery.ui.touch-punch.js +160 -0
  78. data/app/assets/javascripts/georgia/vendor/moment.js +6 -0
  79. data/app/assets/stylesheets/georgia/application.css.scss +16 -0
  80. data/app/assets/stylesheets/georgia/components/_box.scss +29 -0
  81. data/app/assets/stylesheets/georgia/components/_button.scss +60 -0
  82. data/app/assets/stylesheets/georgia/components/_checkbox.scss +48 -0
  83. data/app/assets/stylesheets/georgia/components/_form.scss +8 -0
  84. data/app/assets/stylesheets/georgia/components/_help.scss +4 -0
  85. data/app/assets/stylesheets/georgia/components/_icon.scss +7 -0
  86. data/app/assets/stylesheets/georgia/components/_input.scss +48 -0
  87. data/app/assets/stylesheets/georgia/components/_label.scss +4 -0
  88. data/app/assets/stylesheets/georgia/components/_modal.scss +14 -0
  89. data/app/assets/stylesheets/georgia/components/_nav-list.scss +13 -0
  90. data/app/assets/stylesheets/georgia/components/_note.scss +31 -0
  91. data/app/assets/stylesheets/georgia/components/_portlet.scss +57 -0
  92. data/app/assets/stylesheets/georgia/components/_progress.scss +4 -0
  93. data/app/assets/stylesheets/georgia/components/_state.scss +17 -0
  94. data/app/assets/stylesheets/georgia/components/_table.scss +8 -0
  95. data/app/assets/stylesheets/georgia/components/_transparent.scss +3 -0
  96. data/app/assets/stylesheets/georgia/layout/_base.scss +94 -0
  97. data/app/assets/stylesheets/georgia/layout/_devise.scss +5 -0
  98. data/app/assets/stylesheets/georgia/mixins/_clearfix.scss +12 -0
  99. data/app/assets/stylesheets/georgia/mixins/_ellipsis.scss +8 -0
  100. data/app/assets/stylesheets/georgia/mixins/_inflectors.scss +1 -0
  101. data/app/assets/stylesheets/georgia/mixins/_opacity.scss +6 -0
  102. data/app/assets/stylesheets/georgia/mixins/_utilities.scss +13 -0
  103. data/app/assets/stylesheets/georgia/modules/_facets.scss +4 -0
  104. data/app/assets/stylesheets/georgia/modules/_footer.scss +9 -0
  105. data/app/assets/stylesheets/georgia/modules/_form_with_helpers.scss +17 -0
  106. data/app/assets/stylesheets/georgia/modules/_header.scss +66 -0
  107. data/app/assets/stylesheets/georgia/modules/_link.scss +51 -0
  108. data/app/assets/stylesheets/georgia/modules/_login.scss +7 -0
  109. data/app/assets/stylesheets/georgia/modules/_media.scss +55 -0
  110. data/app/assets/stylesheets/georgia/modules/_menu.scss +7 -0
  111. data/app/assets/stylesheets/georgia/modules/_message.scss +53 -0
  112. data/app/assets/stylesheets/georgia/modules/_notifications.scss +26 -0
  113. data/app/assets/stylesheets/georgia/modules/_pages.scss +7 -0
  114. data/app/assets/stylesheets/georgia/modules/_pagination.scss +41 -0
  115. data/app/assets/stylesheets/georgia/modules/_results.scss +46 -0
  116. data/app/assets/stylesheets/georgia/modules/_revision.scss +18 -0
  117. data/app/assets/stylesheets/georgia/modules/_sidebar.scss +71 -0
  118. data/app/assets/stylesheets/georgia/modules/_slide.scss +11 -0
  119. data/app/assets/stylesheets/georgia/modules/_subpage.scss +25 -0
  120. data/app/assets/stylesheets/georgia/modules/_users.scss +3 -0
  121. data/app/assets/stylesheets/georgia/modules/_widget.scss +45 -0
  122. data/app/assets/stylesheets/georgia/overrides/_select2.scss +5 -0
  123. data/app/assets/stylesheets/georgia/settings/_base.scss +6 -0
  124. data/app/assets/stylesheets/georgia/settings/_colors.scss +41 -0
  125. data/app/assets/stylesheets/georgia/settings/_fonts.scss +3 -0
  126. data/app/assets/stylesheets/georgia/settings/_z-index.scss +7 -0
  127. data/app/assets/stylesheets/georgia/vendor/_autocomplete.scss +50 -0
  128. data/app/assets/stylesheets/georgia/vendor/_bootstrap-datetimepicker.scss +174 -0
  129. data/app/assets/stylesheets/georgia/vendor/_select2.scss +18 -0
  130. data/app/assets/stylesheets/georgia/vendor/_tooltip.scss +98 -0
  131. data/app/controllers/georgia/api/media_controller.rb +18 -0
  132. data/app/controllers/georgia/api/tags_controller.rb +22 -0
  133. data/app/controllers/georgia/application_controller.rb +25 -0
  134. data/app/controllers/georgia/concerns/frontendable.rb +45 -0
  135. data/app/controllers/georgia/concerns/helpers.rb +28 -0
  136. data/app/controllers/georgia/dashboard_controller.rb +14 -0
  137. data/app/controllers/georgia/links_controller.rb +13 -0
  138. data/app/controllers/georgia/media_controller.rb +101 -0
  139. data/app/controllers/georgia/menus_controller.rb +80 -0
  140. data/app/controllers/georgia/messages_controller.rb +74 -0
  141. data/app/controllers/georgia/pages_controller.rb +180 -0
  142. data/app/controllers/georgia/revisions_controller.rb +89 -0
  143. data/app/controllers/georgia/slides_controller.rb +13 -0
  144. data/app/controllers/georgia/ui_associations_controller.rb +12 -0
  145. data/app/controllers/georgia/users/sessions_controller.rb +7 -0
  146. data/app/controllers/georgia/users_controller.rb +51 -0
  147. data/app/controllers/georgia/widgets_controller.rb +67 -0
  148. data/app/controllers/messages_controller.rb +29 -0
  149. data/app/decorators/ckeditor/asset_decorator.rb +13 -0
  150. data/app/decorators/ckeditor/assets_decorator.rb +4 -0
  151. data/app/decorators/ckeditor/picture_decorator.rb +9 -0
  152. data/app/decorators/ckeditor/pictures_decorator.rb +4 -0
  153. data/app/decorators/georgia/application_decorator.rb +6 -0
  154. data/app/decorators/georgia/link_decorator.rb +9 -0
  155. data/app/decorators/georgia/links_decorator.rb +4 -0
  156. data/app/decorators/georgia/message_decorator.rb +21 -0
  157. data/app/decorators/georgia/messages_decorator.rb +4 -0
  158. data/app/decorators/georgia/page_decorator.rb +31 -0
  159. data/app/decorators/georgia/pages_decorator.rb +4 -0
  160. data/app/decorators/georgia/revision_decorator.rb +28 -0
  161. data/app/decorators/georgia/slide_decorator.rb +4 -0
  162. data/app/decorators/georgia/widget_decorator.rb +4 -0
  163. data/app/decorators/pagination_decorator.rb +3 -0
  164. data/app/decorators/sunspot/highlighted_hit_decorator.rb +29 -0
  165. data/app/helpers/georgia/checkboxes_helper.rb +13 -0
  166. data/app/helpers/georgia/devise_helper.rb +15 -0
  167. data/app/helpers/georgia/facets_helper.rb +35 -0
  168. data/app/helpers/georgia/forms_helper.rb +68 -0
  169. data/app/helpers/georgia/header_helper.rb +10 -0
  170. data/app/helpers/georgia/internationalization_helper.rb +32 -0
  171. data/app/helpers/georgia/menus_helper.rb +20 -0
  172. data/app/helpers/georgia/messages_helper.rb +9 -0
  173. data/app/helpers/georgia/meta_tags_helper.rb +22 -0
  174. data/app/helpers/georgia/modals_helper.rb +7 -0
  175. data/app/helpers/georgia/pages_helper.rb +22 -0
  176. data/app/helpers/georgia/pagination_helper.rb +10 -0
  177. data/app/helpers/georgia/routes_helper.rb +25 -0
  178. data/app/helpers/georgia/sidebar_helper.rb +13 -0
  179. data/app/helpers/georgia/states_helper.rb +17 -0
  180. data/app/helpers/georgia/twitter_helper.rb +24 -0
  181. data/app/helpers/georgia/ui_helper.rb +51 -0
  182. data/app/mailers/georgia/notifier.rb +33 -0
  183. data/app/models/ability.rb +19 -0
  184. data/app/models/ckeditor/asset.rb +61 -0
  185. data/app/models/ckeditor/attachment_file.rb +7 -0
  186. data/app/models/ckeditor/picture.rb +15 -0
  187. data/app/models/georgia/clone.rb +101 -0
  188. data/app/models/georgia/concerns/cacheable.rb +18 -0
  189. data/app/models/georgia/concerns/contentable.rb +22 -0
  190. data/app/models/georgia/concerns/indexable.rb +67 -0
  191. data/app/models/georgia/concerns/orderable.rb +21 -0
  192. data/app/models/georgia/concerns/publishable.rb +35 -0
  193. data/app/models/georgia/concerns/revisionable.rb +38 -0
  194. data/app/models/georgia/concerns/slugable.rb +46 -0
  195. data/app/models/georgia/concerns/statable.rb +64 -0
  196. data/app/models/georgia/concerns/taggable.rb +19 -0
  197. data/app/models/georgia/concerns/templatable.rb +20 -0
  198. data/app/models/georgia/concerns/treeable.rb +26 -0
  199. data/app/models/georgia/content.rb +15 -0
  200. data/app/models/georgia/link.rb +27 -0
  201. data/app/models/georgia/menu.rb +13 -0
  202. data/app/models/georgia/message.rb +47 -0
  203. data/app/models/georgia/page.rb +20 -0
  204. data/app/models/georgia/revision.rb +22 -0
  205. data/app/models/georgia/role.rb +10 -0
  206. data/app/models/georgia/slide.rb +13 -0
  207. data/app/models/georgia/status.rb +29 -0
  208. data/app/models/georgia/ui_association.rb +27 -0
  209. data/app/models/georgia/ui_section.rb +12 -0
  210. data/app/models/georgia/user.rb +27 -0
  211. data/app/models/georgia/widget.rb +32 -0
  212. data/app/parsers/georgia/menu_ancestry_parser.rb +41 -0
  213. data/app/policies/georgia/policy.rb +17 -0
  214. data/app/policies/georgia/revision_policy.rb +53 -0
  215. data/app/presenters/georgia/active_facet_presenter.rb +25 -0
  216. data/app/presenters/georgia/facet_presenter.rb +26 -0
  217. data/app/presenters/georgia/link_portlet.rb +101 -0
  218. data/app/presenters/georgia/list_facet_presenter.rb +32 -0
  219. data/app/presenters/georgia/media_library_presenter.rb +44 -0
  220. data/app/presenters/georgia/message_actions_presenter.rb +51 -0
  221. data/app/presenters/georgia/page_actions_presenter.rb +94 -0
  222. data/app/presenters/georgia/pagination_presenter.rb +58 -0
  223. data/app/presenters/georgia/portlet.rb +30 -0
  224. data/app/presenters/georgia/presenter.rb +17 -0
  225. data/app/presenters/georgia/sidebar_link_presenter.rb +55 -0
  226. data/app/presenters/georgia/single_active_facet_presenter.rb +10 -0
  227. data/app/presenters/georgia/slide_portlet.rb +79 -0
  228. data/app/presenters/georgia/subpage_portlet.rb +36 -0
  229. data/app/presenters/georgia/warning_message.rb +55 -0
  230. data/app/presenters/georgia/widget_portlet.rb +75 -0
  231. data/app/sweepers/navigation_sweeper.rb +12 -0
  232. data/app/uploaders/ckeditor_attachment_file_uploader.rb +16 -0
  233. data/app/uploaders/ckeditor_picture_uploader.rb +36 -0
  234. data/app/uploaders/georgia/attachment_uploader.rb +16 -0
  235. data/app/views/georgia/api/media/pictures.html.erb +17 -0
  236. data/app/views/georgia/ckeditor/assets/_asset.html.erb +23 -0
  237. data/app/views/georgia/ckeditor/attachment_files/_attachment_file.html.erb +1 -0
  238. data/app/views/georgia/ckeditor/pictures/_picture.html.erb +26 -0
  239. data/app/views/georgia/dashboard/panels/_messages.html.erb +30 -0
  240. data/app/views/georgia/dashboard/panels/_reviews.html.erb +24 -0
  241. data/app/views/georgia/dashboard/show.html.erb +18 -0
  242. data/app/views/georgia/header/_dashboard.html.erb +1 -0
  243. data/app/views/georgia/header/_media.html.erb +3 -0
  244. data/app/views/georgia/header/_messages.html.erb +3 -0
  245. data/app/views/georgia/header/_navigation.html.erb +3 -0
  246. data/app/views/georgia/header/_pages.html.erb +3 -0
  247. data/app/views/georgia/header/_users.html.erb +3 -0
  248. data/app/views/georgia/header/_widgets.html.erb +3 -0
  249. data/app/views/georgia/links/show.html.erb +1 -0
  250. data/app/views/georgia/media/_header.html.erb +27 -0
  251. data/app/views/georgia/media/create.js.erb +1 -0
  252. data/app/views/georgia/media/edit.html.erb +74 -0
  253. data/app/views/georgia/media/search.html.erb +36 -0
  254. data/app/views/georgia/media/sidebar/_facets.html.erb +12 -0
  255. data/app/views/georgia/menus/_menu.html.erb +7 -0
  256. data/app/views/georgia/menus/create.js.erb +5 -0
  257. data/app/views/georgia/menus/edit.html.erb +37 -0
  258. data/app/views/georgia/menus/index.html.erb +36 -0
  259. data/app/views/georgia/messages/_message.html.erb +26 -0
  260. data/app/views/georgia/messages/destroy.js.erb +3 -0
  261. data/app/views/georgia/messages/search.html.erb +58 -0
  262. data/app/views/georgia/messages/show.html.erb +46 -0
  263. data/app/views/georgia/notifier/notify_admins.html.erb +10 -0
  264. data/app/views/georgia/notifier/notify_editors.html.erb +10 -0
  265. data/app/views/georgia/notifier/notify_support.html.erb +9 -0
  266. data/app/views/georgia/pages/_header.html.erb +22 -0
  267. data/app/views/georgia/pages/_page.html.erb +19 -0
  268. data/app/views/georgia/pages/_subpage.html.erb +1 -0
  269. data/app/views/georgia/pages/create.js.erb +6 -0
  270. data/app/views/georgia/pages/search.html.erb +32 -0
  271. data/app/views/georgia/pages/settings.html.erb +79 -0
  272. data/app/views/georgia/pages/templates/_custom.html.erb +7 -0
  273. data/app/views/georgia/pages/templates/_default.html.erb +7 -0
  274. data/app/views/georgia/pages/templates/_one-column.html.erb +7 -0
  275. data/app/views/georgia/pages/templates/_sidebar-left.html.erb +10 -0
  276. data/app/views/georgia/pages/templates/_sidebar-right.html.erb +10 -0
  277. data/app/views/georgia/revisions/_revision.html.erb +11 -0
  278. data/app/views/georgia/revisions/edit.html.erb +36 -0
  279. data/app/views/georgia/revisions/fields/_content.html.erb +43 -0
  280. data/app/views/georgia/revisions/fields/_slides.html.erb +19 -0
  281. data/app/views/georgia/revisions/fields/_template.html.erb +8 -0
  282. data/app/views/georgia/revisions/fields/_ui_section.html.erb +14 -0
  283. data/app/views/georgia/revisions/fields/_widgets.html.erb +11 -0
  284. data/app/views/georgia/revisions/index.html.erb +25 -0
  285. data/app/views/georgia/shared/_messages.html.erb +11 -0
  286. data/app/views/georgia/shared/modals/_media_library.html.erb +35 -0
  287. data/app/views/georgia/shared/modals/_menu.html.erb +20 -0
  288. data/app/views/georgia/shared/modals/_page.html.erb +20 -0
  289. data/app/views/georgia/shared/modals/_progress.html.erb +15 -0
  290. data/app/views/georgia/shared/modals/_widget.html.erb +24 -0
  291. data/app/views/georgia/shared/search/_messages.html.erb +4 -0
  292. data/app/views/georgia/slides/new.html.erb +1 -0
  293. data/app/views/georgia/ui_associations/new.html.erb +1 -0
  294. data/app/views/georgia/users/_form.html.erb +27 -0
  295. data/app/views/georgia/users/_user.html.erb +9 -0
  296. data/app/views/georgia/users/edit.html.erb +22 -0
  297. data/app/views/georgia/users/index.html.erb +25 -0
  298. data/app/views/georgia/users/new.html.erb +19 -0
  299. data/app/views/georgia/users/registrations/new.html.erb +20 -0
  300. data/app/views/georgia/users/sessions/new.html.erb +17 -0
  301. data/app/views/georgia/widgets/_widget.html.erb +35 -0
  302. data/app/views/georgia/widgets/create.js.erb +5 -0
  303. data/app/views/georgia/widgets/index.html.erb +31 -0
  304. data/app/views/layouts/georgia/_footer.html.erb +7 -0
  305. data/app/views/layouts/georgia/_head.html.erb +15 -0
  306. data/app/views/layouts/georgia/_header.html.erb +40 -0
  307. data/app/views/layouts/georgia/_messages.html.erb +7 -0
  308. data/app/views/layouts/georgia/_sidebar.html.erb +9 -0
  309. data/app/views/layouts/georgia/application.html.erb +16 -0
  310. data/app/views/layouts/georgia/devise.html.erb +11 -0
  311. data/app/views/menus/_dropdown_group.html.erb +10 -0
  312. data/app/views/menus/_dropdown_link.html.erb +3 -0
  313. data/app/views/menus/_dropdown_menu.html.erb +11 -0
  314. data/app/views/menus/_link.html.erb +1 -0
  315. data/app/views/menus/_menu.html.erb +7 -0
  316. data/app/views/messages/create.js.erb +0 -0
  317. data/app/workers/spam_worker.rb +12 -0
  318. data/config/initializers/acts_as_taggable_on.rb +19 -0
  319. data/config/initializers/ckeditor.rb +18 -0
  320. data/config/initializers/devise.rb +254 -0
  321. data/config/initializers/inflections.rb +3 -0
  322. data/config/initializers/revisions.rb +5 -0
  323. data/config/initializers/simple_form.rb +79 -0
  324. data/config/locales/georgia.en.yml +4 -0
  325. data/config/routes.rb +79 -0
  326. data/db/migrate/001_create_ckeditor_assets.rb +25 -0
  327. data/db/migrate/002_create_georgia_contents.rb +18 -0
  328. data/db/migrate/003_create_georgia_links.rb +12 -0
  329. data/db/migrate/004_create_georgia_menus.rb +10 -0
  330. data/db/migrate/005_create_georgia_messages.rb +21 -0
  331. data/db/migrate/006_create_georgia_pages.rb +21 -0
  332. data/db/migrate/007_create_georgia_revisions.rb +12 -0
  333. data/db/migrate/008_create_georgia_roles.rb +10 -0
  334. data/db/migrate/009_create_georgia_slides.rb +11 -0
  335. data/db/migrate/010_create_georgia_ui_associations.rb +13 -0
  336. data/db/migrate/011_create_georgia_ui_sections.rb +9 -0
  337. data/db/migrate/012_create_georgia_users.rb +24 -0
  338. data/db/migrate/013_create_georgia_widgets.rb +9 -0
  339. data/db/migrate/014_create_roles_users.rb +11 -0
  340. data/db/migrate/015_create_tags.rb +20 -0
  341. data/lib/generators/georgia/install/install_generator.rb +60 -0
  342. data/lib/generators/georgia/install/templates/Procfile +1 -0
  343. data/lib/generators/georgia/install/templates/README +14 -0
  344. data/lib/generators/georgia/install/templates/app/controllers/pages_controller.rb +13 -0
  345. data/lib/generators/georgia/install/templates/config/initializers/georgia.rb +15 -0
  346. data/lib/generators/georgia/upgrade/templates/add_anti_spam_to_messages.rb +12 -0
  347. data/lib/generators/georgia/upgrade/templates/add_contents_counter_cache_to_images.rb +15 -0
  348. data/lib/generators/georgia/upgrade/templates/add_public_to_georgia_pages.rb +8 -0
  349. data/lib/generators/georgia/upgrade/templates/add_state_to_georgia_pages.rb +13 -0
  350. data/lib/generators/georgia/upgrade/templates/create_georgia_revisions.rb +12 -0
  351. data/lib/generators/georgia/upgrade/upgrade_generator.rb +34 -0
  352. data/lib/georgia.rb +23 -0
  353. data/lib/georgia/assets.rb +8 -0
  354. data/lib/georgia/assets/cloud_files_connection.rb +22 -0
  355. data/lib/georgia/assets/transferable_picture.rb +51 -0
  356. data/lib/georgia/engine.rb +58 -0
  357. data/lib/georgia/paths.rb +22 -0
  358. data/lib/georgia/version.rb +3 -0
  359. data/lib/tasks/assets.rake +106 -0
  360. data/lib/tasks/georgia.rake +61 -0
  361. data/lib/tasks/install.rake +19 -0
  362. data/lib/tasks/sidekiq.rake +8 -0
  363. data/lib/tasks/solr.rake +30 -0
  364. data/lib/tasks/upgrade.rake +39 -0
  365. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  366. metadata +857 -0
@@ -0,0 +1,33 @@
1
+ module Georgia
2
+ class Notifier < ActionMailer::Base
3
+
4
+ include SendGrid
5
+
6
+ def notify_admins(message, url)
7
+ @message = message
8
+ @url = url
9
+ emails_to = Georgia::User.admins.map(&:email)
10
+ unless emails_to.empty?
11
+ mail(
12
+ from: "georgia@motioneleven.com",
13
+ to: emails_to,
14
+ subject: @message
15
+ )
16
+ end
17
+ end
18
+
19
+ def notify_editors(message, url)
20
+ @message = message
21
+ @url = url
22
+ emails_to = Georgia::User.editors.map(&:email)
23
+ unless emails_to.empty?
24
+ mail(
25
+ from: "georgia@motioneleven.com",
26
+ to: emails_to,
27
+ subject: @message
28
+ )
29
+ end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ require 'cancan'
2
+
3
+ class Ability
4
+ include CanCan::Ability
5
+
6
+ def initialize(user)
7
+ user ||= Georgia::User.new
8
+
9
+ if user.has_role? 'Admin'
10
+ can :manage, :all
11
+ elsif user.has_role? 'Editor'
12
+ can :manage, :all
13
+ cannot :manage, Georgia::User
14
+ else # or if user is Guest
15
+ can [:read, :edit, :update, :search, :draft, :review], :all
16
+ cannot :manage, Georgia::User
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,61 @@
1
+ class Ckeditor::Asset < ActiveRecord::Base
2
+
3
+ # to allow media_path in to_jq_upload
4
+ include Georgia::Engine.routes.url_helpers
5
+
6
+ include Ckeditor::Orm::ActiveRecord::AssetBase
7
+ include Georgia::Concerns::Taggable
8
+
9
+ delegate :url, :current_path, :content_type, to: :data
10
+
11
+ mount_uploader :data, CkeditorAttachmentFileUploader, mount_on: :data_file_name
12
+
13
+ validates :data, presence: true
14
+ attr_accessible :data
15
+
16
+ paginates_per 15
17
+
18
+ scope :latest, order('created_at DESC')
19
+
20
+ def to_jq_upload
21
+ {
22
+ "name" => read_attribute(:data),
23
+ "size" => data.size,
24
+ "url" => data.url,
25
+ "delete_url" => media_path(id: id),
26
+ "delete_type" => "DELETE"
27
+ }
28
+ end
29
+
30
+ def extension
31
+ @extension ||= data_content_type.gsub(/.*\/(.*)/, '\1')
32
+ end
33
+
34
+ searchable do
35
+ text :filename, stored: true
36
+ text :tags do
37
+ tag_list.join(', ')
38
+ end
39
+ string :tags, stored: true, multiple: true do
40
+ tag_list
41
+ end
42
+ string :extension, stored: true do
43
+ extension.try(:downcase)
44
+ end
45
+ time :updated_at
46
+ integer :size, stored: true do
47
+ size / 1024 # gives size in KB
48
+ end
49
+ end
50
+
51
+ SIZE_RANGE = {
52
+ '< 25 KB' => 0..25,
53
+ '25 KB to 100 KB' => 25..100,
54
+ '100 KB to 500 KB' => 100..500,
55
+ '500 KB to 1 MB' => 500..1000,
56
+ '> 1 MB' => 1000..999999
57
+ }
58
+
59
+
60
+
61
+ end
@@ -0,0 +1,7 @@
1
+ class Ckeditor::AttachmentFile < Ckeditor::Asset
2
+ mount_uploader :data, CkeditorAttachmentFileUploader, :mount_on => :data_file_name
3
+
4
+ def url_thumb
5
+ @url_thumb ||= Ckeditor::Utils.filethumb(filename)
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ class Ckeditor::Picture < Ckeditor::Asset
2
+
3
+ mount_uploader :data, CkeditorPictureUploader, mount_on: :data_file_name
4
+
5
+ has_many :contents, foreign_key: :image_id, class_name: Georgia::Content
6
+
7
+ def featured?
8
+ @featured ||= !contents_count.zero?
9
+ end
10
+
11
+ def pages
12
+ @pages ||= contents.map(&:contentable).map(&:page).compact.uniq
13
+ end
14
+
15
+ end
@@ -0,0 +1,101 @@
1
+ module Georgia
2
+ class Clone
3
+
4
+ attr_accessor :instance, :duplicate
5
+
6
+ def initialize instance
7
+ raise 'Instance must be persisted to be copied' if instance.new_record?
8
+ @instance = instance
9
+ @duplicate = instance.class.new
10
+ end
11
+
12
+ # Returns an exact persisted version of itself with all Georgia::Page associations
13
+ # The resulting instance has a '(Copy)' title and '-copy' slug
14
+ def copy
15
+ copy_page
16
+ duplicate.current_revision = clone_current_revision
17
+ alter_slug
18
+ alter_title
19
+ duplicate.save!
20
+ duplicate
21
+ end
22
+
23
+ # Returns a copy of the current revision in 'draft' state
24
+ def draft
25
+ clone_current_revision(state: 'draft')
26
+ end
27
+
28
+ # Returns a copy of the current revision in 'revision' state
29
+ def store
30
+ @instance.revisions << clone_current_revision(state: 'revision')
31
+ @instance.save
32
+ end
33
+
34
+ private
35
+
36
+ def copy_page
37
+ duplicate.ancestry = instance.ancestry
38
+ duplicate.tag_list = instance.tag_list
39
+ end
40
+
41
+ def clone_current_revision options={}
42
+ state = options.fetch(:state, 'draft')
43
+ @duplicate_revision = Georgia::Revision.new(template: instance.current_revision.template, state: state) do |r|
44
+ r.contents = clone_contents
45
+ r.ui_associations = clone_ui_associations
46
+ r.slides = clone_slides
47
+ end
48
+ @duplicate_revision
49
+ end
50
+
51
+ def clone_contents
52
+ instance.current_revision.contents.map{|c| clone_content(c)}
53
+ end
54
+
55
+ def clone_ui_associations
56
+ instance.current_revision.ui_associations.map{|ui_assoc| clone_ui_association(ui_assoc)}
57
+ end
58
+
59
+ def clone_slides
60
+ instance.current_revision.slides.map do |slide|
61
+ new_slide = Georgia::Slide.new(page_id: slide.page_id)
62
+ slide.contents.each do |content|
63
+ new_slide.contents << clone_content(content)
64
+ end
65
+ new_slide
66
+ end
67
+ end
68
+
69
+ def clone_content(content)
70
+ Georgia::Content.new(
71
+ locale: content.locale,
72
+ text: content.text,
73
+ title: content.title,
74
+ excerpt: content.excerpt,
75
+ image_id: content.image_id,
76
+ keyword_list: content.keyword_list
77
+ )
78
+ end
79
+
80
+ def clone_ui_association(ui_assoc)
81
+ Georgia::UiAssociation.new(
82
+ page_id: ui_assoc.page_id,
83
+ widget_id: ui_assoc.widget_id,
84
+ ui_section_id: ui_assoc.ui_section_id
85
+ )
86
+ end
87
+
88
+ # alter the slug to add '-copy' at the end and keep url unique
89
+ def alter_slug
90
+ duplicate.slug = "#{instance.slug}-copy"
91
+ end
92
+
93
+ # alter the title to keep original title unique
94
+ def alter_title
95
+ duplicate.current_revision.contents.each do |content|
96
+ content.update_attribute(:title, "#{content.title} (Copy)")
97
+ end
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,18 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Cacheable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ def cache_key
11
+ [self.url, self.updated_at.to_i].join('/')
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Contentable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ has_many :contents, as: :contentable, dependent: :destroy, class_name: Georgia::Content
10
+ accepts_nested_attributes_for :contents
11
+ attr_accessible :contents_attributes
12
+
13
+ def content
14
+ @content ||= contents.select{|c| c.locale == I18n.locale.to_s}.first || Georgia::Content.new
15
+ end
16
+
17
+ delegate :title, :text, :excerpt, :keywords, :keyword_list, :image, :locale, to: :content
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,67 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Indexable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ class << self
11
+
12
+ # Default fields to be include in searchable block
13
+ # Children of Georgia::Page can use this to extend their own searchable block
14
+ def indexable_fields
15
+ Proc.new {
16
+ text :title, stored: true do
17
+ revisions.map{|r| r.contents.map(&:title)}.flatten.uniq.join(', ')
18
+ end
19
+ text :excerpt, stored: true do
20
+ revisions.map{|r| r.contents.map(&:excerpt)}.flatten.uniq.join(', ')
21
+ end
22
+ text :text do
23
+ revisions.map{|r| r.contents.map(&:text)}.flatten.uniq.join(', ')
24
+ end
25
+ text :keywords do
26
+ revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq.join(', ')
27
+ end
28
+ text :template do
29
+ revisions.map(&:template).uniq.join(', ')
30
+ end
31
+ text :tags do
32
+ tag_list.join(', ')
33
+ end
34
+ text :url
35
+ string :class_name do
36
+ self.class.name
37
+ end
38
+ string :title
39
+ string :excerpt
40
+ string :text
41
+ string :url
42
+ string :template
43
+ string :state do
44
+ publish_state
45
+ end
46
+ string :keywords, stored: true, multiple: true do
47
+ revisions.map{|r| r.contents.map(&:keyword_list)}.flatten.uniq
48
+ end
49
+ string :tag_list, stored: true, multiple: true #Facets (multiple)
50
+ string :tags do #Ordering (single list)
51
+ tag_list.join(', ')
52
+ end
53
+ time :updated_at # default for ordering
54
+ }
55
+ end
56
+
57
+ end
58
+
59
+ searchable do
60
+ instance_eval &self.indexable_fields
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,21 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Orderable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ acts_as_list
11
+ attr_accessible :position
12
+
13
+ scope :ordered, order(:position)
14
+
15
+ end
16
+
17
+ module ClassMethods
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Publishable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ scope :published, where(public: true)
11
+
12
+ def publish
13
+ self.update_attribute(:public, true)
14
+ end
15
+
16
+ def unpublish
17
+ self.update_attribute(:public, false)
18
+ end
19
+
20
+ def public?
21
+ self.public
22
+ end
23
+ alias_method :published?, :public?
24
+
25
+ def publish_state
26
+ public? ? 'public' : 'private'
27
+ end
28
+
29
+ end
30
+
31
+ module ClassMethods
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,38 @@
1
+ require 'active_support/concern'
2
+
3
+ module Georgia
4
+ module Concerns
5
+ module Revisionable
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+
10
+ has_many :revisions, as: :revisionable, dependent: :destroy
11
+ belongs_to :current_revision, class_name: Georgia::Revision, foreign_key: :revision_id
12
+
13
+ delegate :title, :text, :excerpt, :keywords, :keyword_list, :image, to: :current_revision, allow_nil: true
14
+ delegate :template, :content, :slides, :widgets, to: :current_revision, allow_nil: true
15
+ delegate :draft?, :review?, :revision?, to: :current_revision, allow_nil: true
16
+
17
+ def draft
18
+ Georgia::Clone.new(self).draft
19
+ end
20
+
21
+ def store
22
+ Georgia::Clone.new(self).store
23
+ end
24
+
25
+ def copy
26
+ Georgia::Clone.new(self).copy
27
+ end
28
+
29
+ def approve_revision revision
30
+ current_revision.store if current_revision
31
+ self.update_attribute(:revision_id, revision.id)
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
38
+ end