tribeca_cms 0.1.1

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 (565) hide show
  1. data/Gemfile +58 -0
  2. data/LICENSE +1 -0
  3. data/README.textile +0 -0
  4. data/app/assets/images/locomotive/background/body.png +0 -0
  5. data/app/assets/images/locomotive/datepicker/ui-widget-content-top.png +0 -0
  6. data/app/assets/images/locomotive/form/error-arrow.png +0 -0
  7. data/app/assets/images/locomotive/form/input-sep.png +0 -0
  8. data/app/assets/images/locomotive/icons/flags/de.png +0 -0
  9. data/app/assets/images/locomotive/icons/flags/en.png +0 -0
  10. data/app/assets/images/locomotive/icons/flags/es.png +0 -0
  11. data/app/assets/images/locomotive/icons/flags/et.png +0 -0
  12. data/app/assets/images/locomotive/icons/flags/fr.png +0 -0
  13. data/app/assets/images/locomotive/icons/flags/it.png +0 -0
  14. data/app/assets/images/locomotive/icons/flags/nb.png +0 -0
  15. data/app/assets/images/locomotive/icons/flags/nl.png +0 -0
  16. data/app/assets/images/locomotive/icons/flags/pl.png +0 -0
  17. data/app/assets/images/locomotive/icons/flags/pt-BR.png +0 -0
  18. data/app/assets/images/locomotive/icons/flags/ru.png +0 -0
  19. data/app/assets/images/locomotive/icons/start.png +0 -0
  20. data/app/assets/images/locomotive/list/empty.png +0 -0
  21. data/app/assets/images/locomotive/list/item-left.png +0 -0
  22. data/app/assets/images/locomotive/nocoffee.png +0 -0
  23. data/app/assets/images/locomotive/plugins/sites_picker_top_arrow.png +0 -0
  24. data/app/assets/images/locomotive/rails.png +0 -0
  25. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/css/image.css +3 -0
  26. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/img/image.gif +0 -0
  27. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/lib/locomotive_media-plugin.js +96 -0
  28. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/nls/fr/i18n.js +1 -0
  29. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/nls/i18n.js +4 -0
  30. data/app/assets/javascripts/aloha/plugins/custom/locomotive_media/package.json +1 -0
  31. data/app/assets/javascripts/locomotive.js +25 -0
  32. data/app/assets/javascripts/locomotive/aloha.js.coffee +2 -0
  33. data/app/assets/javascripts/locomotive/application.js.coffee +12 -0
  34. data/app/assets/javascripts/locomotive/inline_editor.js.coffee +22 -0
  35. data/app/assets/javascripts/locomotive/models/account.js.coffee +11 -0
  36. data/app/assets/javascripts/locomotive/models/content_asset.js.coffee +20 -0
  37. data/app/assets/javascripts/locomotive/models/content_entry.js.coffee +61 -0
  38. data/app/assets/javascripts/locomotive/models/content_type.js.coffee +26 -0
  39. data/app/assets/javascripts/locomotive/models/custom_field.js.coffee +38 -0
  40. data/app/assets/javascripts/locomotive/models/custom_field_select_option.js.coffee +16 -0
  41. data/app/assets/javascripts/locomotive/models/domain.js.coffee +3 -0
  42. data/app/assets/javascripts/locomotive/models/editable_element.js.coffee +27 -0
  43. data/app/assets/javascripts/locomotive/models/membership.js.coffee +13 -0
  44. data/app/assets/javascripts/locomotive/models/page.js.coffee +27 -0
  45. data/app/assets/javascripts/locomotive/models/site.js.coffee +34 -0
  46. data/app/assets/javascripts/locomotive/models/snippet.js.coffee +11 -0
  47. data/app/assets/javascripts/locomotive/models/theme_asset.js.coffee +11 -0
  48. data/app/assets/javascripts/locomotive/models/translation.js.coffee +5 -0
  49. data/app/assets/javascripts/locomotive/not_logged_in.js.coffee +1 -0
  50. data/app/assets/javascripts/locomotive/utils/aloha_settings.js.coffee +37 -0
  51. data/app/assets/javascripts/locomotive/utils/core_ext.js +75 -0
  52. data/app/assets/javascripts/locomotive/utils/growl.js +14 -0
  53. data/app/assets/javascripts/locomotive/utils/handlebar_helpers.js.coffee +9 -0
  54. data/app/assets/javascripts/locomotive/utils/tinymce_settings.js.coffee +48 -0
  55. data/app/assets/javascripts/locomotive/views/application_view.js.coffee +92 -0
  56. data/app/assets/javascripts/locomotive/views/content_assets/picker_item_view.js.coffee +30 -0
  57. data/app/assets/javascripts/locomotive/views/content_assets/picker_view.js.coffee +58 -0
  58. data/app/assets/javascripts/locomotive/views/content_entries/_form_view.js.coffee +144 -0
  59. data/app/assets/javascripts/locomotive/views/content_entries/_popup_form_view.js.coffee +90 -0
  60. data/app/assets/javascripts/locomotive/views/content_entries/edit_view.js.coffee +9 -0
  61. data/app/assets/javascripts/locomotive/views/content_entries/index_view.js.coffee +36 -0
  62. data/app/assets/javascripts/locomotive/views/content_entries/new_view.js.coffee +8 -0
  63. data/app/assets/javascripts/locomotive/views/content_types/_form_view.js.coffee +86 -0
  64. data/app/assets/javascripts/locomotive/views/content_types/custom_field_entry_view.js.coffee +104 -0
  65. data/app/assets/javascripts/locomotive/views/content_types/custom_fields_view.coffee +94 -0
  66. data/app/assets/javascripts/locomotive/views/content_types/edit_view.coffee +14 -0
  67. data/app/assets/javascripts/locomotive/views/content_types/new_view.js.coffee +11 -0
  68. data/app/assets/javascripts/locomotive/views/content_types/select_options_view.js.coffee +89 -0
  69. data/app/assets/javascripts/locomotive/views/current_site/edit_view.js.coffee +86 -0
  70. data/app/assets/javascripts/locomotive/views/editable_elements/control_view.js.coffee +24 -0
  71. data/app/assets/javascripts/locomotive/views/editable_elements/edit_all_view.js.coffee +83 -0
  72. data/app/assets/javascripts/locomotive/views/editable_elements/file_view.js.coffee +74 -0
  73. data/app/assets/javascripts/locomotive/views/editable_elements/long_text_view.js.coffee +36 -0
  74. data/app/assets/javascripts/locomotive/views/editable_elements/short_text_view.js.coffee +22 -0
  75. data/app/assets/javascripts/locomotive/views/inline_editor/application_view.js.coffee +124 -0
  76. data/app/assets/javascripts/locomotive/views/inline_editor/toolbar_view.js.coffee +145 -0
  77. data/app/assets/javascripts/locomotive/views/my_account/edit_view.js.coffee +24 -0
  78. data/app/assets/javascripts/locomotive/views/pages/_form_view.js.coffee +162 -0
  79. data/app/assets/javascripts/locomotive/views/pages/edit_view.js.coffee +31 -0
  80. data/app/assets/javascripts/locomotive/views/pages/index_view.js.coffee +11 -0
  81. data/app/assets/javascripts/locomotive/views/pages/list_view.js.coffee +40 -0
  82. data/app/assets/javascripts/locomotive/views/pages/new_view.js.coffee +8 -0
  83. data/app/assets/javascripts/locomotive/views/shared/asset_picker_view.js.coffee +92 -0
  84. data/app/assets/javascripts/locomotive/views/shared/fields/file_view.js.coffee +88 -0
  85. data/app/assets/javascripts/locomotive/views/shared/fields/has_many_view.js.coffee +125 -0
  86. data/app/assets/javascripts/locomotive/views/shared/fields/many_to_many_view.js.coffee +131 -0
  87. data/app/assets/javascripts/locomotive/views/shared/fields/select_view.js.coffee +83 -0
  88. data/app/assets/javascripts/locomotive/views/shared/form_view.js.coffee +138 -0
  89. data/app/assets/javascripts/locomotive/views/shared/list_item_view.js.coffee +22 -0
  90. data/app/assets/javascripts/locomotive/views/shared/list_view.js.coffee +53 -0
  91. data/app/assets/javascripts/locomotive/views/sites/domain_entry_view.js.coffee +26 -0
  92. data/app/assets/javascripts/locomotive/views/sites/domains_view.js.coffee +84 -0
  93. data/app/assets/javascripts/locomotive/views/sites/membership_entry_view.js.coffee +31 -0
  94. data/app/assets/javascripts/locomotive/views/sites/memberships_view.js.coffee +41 -0
  95. data/app/assets/javascripts/locomotive/views/sites/new_view.js.coffee +43 -0
  96. data/app/assets/javascripts/locomotive/views/snippets/_form_view.js.coffee +75 -0
  97. data/app/assets/javascripts/locomotive/views/snippets/edit_view.js.coffee +6 -0
  98. data/app/assets/javascripts/locomotive/views/snippets/list_item_view.js.coffee +8 -0
  99. data/app/assets/javascripts/locomotive/views/snippets/list_view.js.coffee +17 -0
  100. data/app/assets/javascripts/locomotive/views/snippets/new_view.js.coffee +8 -0
  101. data/app/assets/javascripts/locomotive/views/theme_assets/_form_view.js.coffee +104 -0
  102. data/app/assets/javascripts/locomotive/views/theme_assets/edit_view.js.coffee +16 -0
  103. data/app/assets/javascripts/locomotive/views/theme_assets/image_picker_view.js.coffee +48 -0
  104. data/app/assets/javascripts/locomotive/views/theme_assets/index_view.js.coffee +91 -0
  105. data/app/assets/javascripts/locomotive/views/theme_assets/list_item_view.js.coffee +8 -0
  106. data/app/assets/javascripts/locomotive/views/theme_assets/list_view.js.coffee +17 -0
  107. data/app/assets/javascripts/locomotive/views/theme_assets/new_view.js.coffee +8 -0
  108. data/app/assets/javascripts/locomotive/views/translations/_form_view.js.coffee +20 -0
  109. data/app/assets/javascripts/locomotive/views/translations/edit_view.js.coffee +6 -0
  110. data/app/assets/javascripts/locomotive/views/translations/new_view.js.coffee +8 -0
  111. data/app/assets/javascripts/tinymce/plugins/jqueryinlinepopups/editor_plugin.js +240 -0
  112. data/app/assets/javascripts/tinymce/plugins/locomotive_media/editor_plugin.js +78 -0
  113. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/content.css +66 -0
  114. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/dialog.css.scss +78 -0
  115. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/butt2.png +0 -0
  116. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/button-bg.png +0 -0
  117. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/buttons.png +0 -0
  118. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/down_arrow.gif +0 -0
  119. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/fade-butt.png +0 -0
  120. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/icons.png +0 -0
  121. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/items.gif +0 -0
  122. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/menu-arrow.png +0 -0
  123. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/menu-check.png +0 -0
  124. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/progress.gif +0 -0
  125. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/tabs.gif +0 -0
  126. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/img/toolbarbg.png +0 -0
  127. data/app/assets/javascripts/tinymce/themes/advanced/skins/locomotive/ui.css +1018 -0
  128. data/app/assets/stylesheets/locomotive.css +16 -0
  129. data/app/assets/stylesheets/locomotive/backoffice/_box.css.scss +157 -0
  130. data/app/assets/stylesheets/locomotive/backoffice/_buttons.css.scss +178 -0
  131. data/app/assets/stylesheets/locomotive/backoffice/application.css.scss +332 -0
  132. data/app/assets/stylesheets/locomotive/backoffice/codemirror_changes.css.scss +19 -0
  133. data/app/assets/stylesheets/locomotive/backoffice/content_assets.css.scss +130 -0
  134. data/app/assets/stylesheets/locomotive/backoffice/datepicker.css.scss +178 -0
  135. data/app/assets/stylesheets/locomotive/backoffice/dialog_changes.css.scss +141 -0
  136. data/app/assets/stylesheets/locomotive/backoffice/editable_elements.css.scss +71 -0
  137. data/app/assets/stylesheets/locomotive/backoffice/formtastic_changes.css.scss +735 -0
  138. data/app/assets/stylesheets/locomotive/backoffice/layout.css.scss +205 -0
  139. data/app/assets/stylesheets/locomotive/backoffice/menu.css +8 -0
  140. data/app/assets/stylesheets/locomotive/backoffice/menu/_colors.css.scss +125 -0
  141. data/app/assets/stylesheets/locomotive/backoffice/menu/_helpers.css.scss +6 -0
  142. data/app/assets/stylesheets/locomotive/backoffice/menu/default.css.scss +32 -0
  143. data/app/assets/stylesheets/locomotive/backoffice/menu/main.css.scss +127 -0
  144. data/app/assets/stylesheets/locomotive/backoffice/menu/sub.css.scss +276 -0
  145. data/app/assets/stylesheets/locomotive/backoffice/sites_picker.css.scss +12 -0
  146. data/app/assets/stylesheets/locomotive/inline_editor.css +13 -0
  147. data/app/assets/stylesheets/locomotive/inline_editor/_buttons.css.scss +60 -0
  148. data/app/assets/stylesheets/locomotive/inline_editor/layout.css.scss +22 -0
  149. data/app/assets/stylesheets/locomotive/inline_editor/toolbar.css.scss +114 -0
  150. data/app/assets/stylesheets/locomotive/not_logged_in.css +8 -0
  151. data/app/assets/stylesheets/locomotive/not_logged_in/installation.css.scss +62 -0
  152. data/app/assets/stylesheets/locomotive/not_logged_in/layout.css.scss +185 -0
  153. data/app/assets/stylesheets/locomotive/shared/_helpers.css.scss +150 -0
  154. data/app/assets/stylesheets/locomotive/shared/_picker.css.scss +73 -0
  155. data/app/assets/stylesheets/locomotive/shared/common.css.scss +34 -0
  156. data/app/assets/stylesheets/locomotive/shared/content_locale_picker.css.scss +80 -0
  157. data/app/assets/stylesheets/locomotive/shared/growl.css.scss +29 -0
  158. data/app/cells/locomotive/content_locale_picker/show.html.haml +7 -0
  159. data/app/cells/locomotive/content_locale_picker_cell.rb +21 -0
  160. data/app/cells/locomotive/global_actions/show.html.haml +12 -0
  161. data/app/cells/locomotive/global_actions_cell.rb +36 -0
  162. data/app/cells/locomotive/main_menu/show.html.haml +13 -0
  163. data/app/cells/locomotive/main_menu_cell.rb +12 -0
  164. data/app/cells/locomotive/menu/show.html.haml +1 -0
  165. data/app/cells/locomotive/menu_cell.rb +102 -0
  166. data/app/cells/locomotive/settings_menu_cell.rb +14 -0
  167. data/app/cells/locomotive/sub_menu/show.html.haml +4 -0
  168. data/app/cells/locomotive/sub_menu_cell.rb +13 -0
  169. data/app/controllers/locomotive/accounts_controller.rb +18 -0
  170. data/app/controllers/locomotive/api/accounts_controller.rb +79 -0
  171. data/app/controllers/locomotive/api/base_controller.rb +50 -0
  172. data/app/controllers/locomotive/api/content_assets_controller.rb +39 -0
  173. data/app/controllers/locomotive/api/content_entries_controller.rb +45 -0
  174. data/app/controllers/locomotive/api/content_types_controller.rb +39 -0
  175. data/app/controllers/locomotive/api/current_site_controller.rb +58 -0
  176. data/app/controllers/locomotive/api/documentation_controller.rb +15 -0
  177. data/app/controllers/locomotive/api/memberships_controller.rb +97 -0
  178. data/app/controllers/locomotive/api/my_account_controller.rb +35 -0
  179. data/app/controllers/locomotive/api/pages_controller.rb +41 -0
  180. data/app/controllers/locomotive/api/sites_controller.rb +93 -0
  181. data/app/controllers/locomotive/api/snippets_controller.rb +40 -0
  182. data/app/controllers/locomotive/api/theme_assets_controller.rb +39 -0
  183. data/app/controllers/locomotive/api/tokens_controller.rb +54 -0
  184. data/app/controllers/locomotive/api/translations_controller.rb +31 -0
  185. data/app/controllers/locomotive/base_controller.rb +61 -0
  186. data/app/controllers/locomotive/content_assets_controller.rb +23 -0
  187. data/app/controllers/locomotive/content_entries_controller.rb +71 -0
  188. data/app/controllers/locomotive/content_types_controller.rb +40 -0
  189. data/app/controllers/locomotive/current_site_controller.rb +52 -0
  190. data/app/controllers/locomotive/installation_controller.rb +72 -0
  191. data/app/controllers/locomotive/memberships_controller.rb +29 -0
  192. data/app/controllers/locomotive/my_account_controller.rb +24 -0
  193. data/app/controllers/locomotive/pages_controller.rb +63 -0
  194. data/app/controllers/locomotive/passwords_controller.rb +19 -0
  195. data/app/controllers/locomotive/public/base_controller.rb +22 -0
  196. data/app/controllers/locomotive/public/content_entries_controller.rb +55 -0
  197. data/app/controllers/locomotive/public/pages_controller.rb +50 -0
  198. data/app/controllers/locomotive/public/robots_controller.rb +16 -0
  199. data/app/controllers/locomotive/public/sitemaps_controller.rb +14 -0
  200. data/app/controllers/locomotive/sessions_controller.rb +29 -0
  201. data/app/controllers/locomotive/sites_controller.rb +33 -0
  202. data/app/controllers/locomotive/snippets_controller.rb +47 -0
  203. data/app/controllers/locomotive/theme_assets_controller.rb +52 -0
  204. data/app/controllers/locomotive/translations_controller.rb +32 -0
  205. data/app/helpers/locomotive/accounts_helper.rb +13 -0
  206. data/app/helpers/locomotive/base_helper.rb +182 -0
  207. data/app/helpers/locomotive/content_entries_helper.rb +15 -0
  208. data/app/helpers/locomotive/content_types_helper.rb +72 -0
  209. data/app/helpers/locomotive/custom_fields_helper.rb +70 -0
  210. data/app/helpers/locomotive/installation_helper.rb +9 -0
  211. data/app/helpers/locomotive/pages_helper.rb +95 -0
  212. data/app/helpers/locomotive/sites_helper.rb +15 -0
  213. data/app/helpers/locomotive/snippets_helper.rb +20 -0
  214. data/app/helpers/locomotive/theme_assets_helper.rb +30 -0
  215. data/app/helpers/locomotive/translations_helper.rb +19 -0
  216. data/app/inputs/locomotive/code_input.rb +51 -0
  217. data/app/inputs/locomotive/empty_input.rb +35 -0
  218. data/app/inputs/locomotive/file_input.rb +45 -0
  219. data/app/inputs/locomotive/locale_input.rb +40 -0
  220. data/app/inputs/locomotive/locales_input.rb +60 -0
  221. data/app/inputs/locomotive/rte_input.rb +13 -0
  222. data/app/inputs/locomotive/small_code_input.rb +22 -0
  223. data/app/inputs/locomotive/subdomain_input.rb +22 -0
  224. data/app/inputs/locomotive/toggle_input.rb +13 -0
  225. data/app/mailers/locomotive/devise_mailer.rb +10 -0
  226. data/app/mailers/locomotive/notifications.rb +15 -0
  227. data/app/models/locomotive/ability.rb +89 -0
  228. data/app/models/locomotive/account.rb +117 -0
  229. data/app/models/locomotive/content_asset.rb +40 -0
  230. data/app/models/locomotive/content_entry.rb +197 -0
  231. data/app/models/locomotive/content_type.rb +224 -0
  232. data/app/models/locomotive/editable_control.rb +52 -0
  233. data/app/models/locomotive/editable_element.rb +122 -0
  234. data/app/models/locomotive/editable_file.rb +85 -0
  235. data/app/models/locomotive/editable_long_text.rb +5 -0
  236. data/app/models/locomotive/editable_short_text.rb +66 -0
  237. data/app/models/locomotive/extensions/asset/types.rb +31 -0
  238. data/app/models/locomotive/extensions/asset/vignette.rb +19 -0
  239. data/app/models/locomotive/extensions/content_type/default_values.rb +57 -0
  240. data/app/models/locomotive/extensions/content_type/item_template.rb +49 -0
  241. data/app/models/locomotive/extensions/content_type/sync.rb +62 -0
  242. data/app/models/locomotive/extensions/page/editable_elements.rb +105 -0
  243. data/app/models/locomotive/extensions/page/listed.rb +18 -0
  244. data/app/models/locomotive/extensions/page/parse.rb +125 -0
  245. data/app/models/locomotive/extensions/page/redirect.rb +25 -0
  246. data/app/models/locomotive/extensions/page/render.rb +93 -0
  247. data/app/models/locomotive/extensions/page/templatized.rb +163 -0
  248. data/app/models/locomotive/extensions/page/tree.rb +133 -0
  249. data/app/models/locomotive/extensions/shared/seo.rb +16 -0
  250. data/app/models/locomotive/extensions/site/first_installation.rb +20 -0
  251. data/app/models/locomotive/extensions/site/locales.rb +112 -0
  252. data/app/models/locomotive/extensions/site/subdomain_domains.rb +91 -0
  253. data/app/models/locomotive/membership.rb +75 -0
  254. data/app/models/locomotive/page.rb +130 -0
  255. data/app/models/locomotive/site.rb +79 -0
  256. data/app/models/locomotive/snippet.rb +70 -0
  257. data/app/models/locomotive/theme_asset.rb +175 -0
  258. data/app/models/locomotive/translation.rb +32 -0
  259. data/app/presenters/locomotive/account_presenter.rb +19 -0
  260. data/app/presenters/locomotive/base_presenter.rb +99 -0
  261. data/app/presenters/locomotive/content_asset_presenter.rb +43 -0
  262. data/app/presenters/locomotive/content_entry_presenter.rb +217 -0
  263. data/app/presenters/locomotive/content_field_presenter.rb +71 -0
  264. data/app/presenters/locomotive/content_type_presenter.rb +68 -0
  265. data/app/presenters/locomotive/editable_control_presenter.rb +19 -0
  266. data/app/presenters/locomotive/editable_element_presenter.rb +40 -0
  267. data/app/presenters/locomotive/editable_file_presenter.rb +29 -0
  268. data/app/presenters/locomotive/editable_long_text_presenter.rb +5 -0
  269. data/app/presenters/locomotive/editable_short_text_presenter.rb +27 -0
  270. data/app/presenters/locomotive/membership_presenter.rb +36 -0
  271. data/app/presenters/locomotive/page_presenter.rb +58 -0
  272. data/app/presenters/locomotive/site_presenter.rb +36 -0
  273. data/app/presenters/locomotive/snippet_presenter.rb +22 -0
  274. data/app/presenters/locomotive/theme_asset_presenter.rb +61 -0
  275. data/app/presenters/locomotive/translation_presenter.rb +9 -0
  276. data/app/uploaders/locomotive/content_asset_uploader.rb +13 -0
  277. data/app/uploaders/locomotive/editable_file_uploader.rb +15 -0
  278. data/app/uploaders/locomotive/theme_asset_uploader.rb +28 -0
  279. data/app/views/locomotive/accounts/new.html.haml +21 -0
  280. data/app/views/locomotive/content_assets/_asset.html.haml +5 -0
  281. data/app/views/locomotive/content_assets/_picker.html.haml +33 -0
  282. data/app/views/locomotive/content_entries/_form.html.haml +22 -0
  283. data/app/views/locomotive/content_entries/_list.html.haml +18 -0
  284. data/app/views/locomotive/content_entries/edit.html.haml +21 -0
  285. data/app/views/locomotive/content_entries/index.html.haml +32 -0
  286. data/app/views/locomotive/content_entries/new.html.haml +19 -0
  287. data/app/views/locomotive/content_types/_form.html.haml +39 -0
  288. data/app/views/locomotive/content_types/edit.html.haml +19 -0
  289. data/app/views/locomotive/content_types/new.html.haml +15 -0
  290. data/app/views/locomotive/current_site/_form.html.haml +36 -0
  291. data/app/views/locomotive/current_site/edit.html.haml +19 -0
  292. data/app/views/locomotive/custom_fields/_form.html.haml +61 -0
  293. data/app/views/locomotive/custom_fields/_select_templates.html.haml +16 -0
  294. data/app/views/locomotive/custom_fields/types/_belongs_to.html.haml +5 -0
  295. data/app/views/locomotive/custom_fields/types/_boolean.html.haml +4 -0
  296. data/app/views/locomotive/custom_fields/types/_date.html.haml +5 -0
  297. data/app/views/locomotive/custom_fields/types/_file.html.haml +4 -0
  298. data/app/views/locomotive/custom_fields/types/_has_many.html.haml +70 -0
  299. data/app/views/locomotive/custom_fields/types/_many_to_many.html.haml +41 -0
  300. data/app/views/locomotive/custom_fields/types/_select.html.haml +34 -0
  301. data/app/views/locomotive/custom_fields/types/_string.html.haml +4 -0
  302. data/app/views/locomotive/custom_fields/types/_text.html.haml +5 -0
  303. data/app/views/locomotive/devise_mailer/reset_password_instructions.html.haml +12 -0
  304. data/app/views/locomotive/errors/404.html.haml +7 -0
  305. data/app/views/locomotive/errors/500.html.haml +7 -0
  306. data/app/views/locomotive/errors/no_page.html.haml +1 -0
  307. data/app/views/locomotive/errors/no_site.html.haml +1 -0
  308. data/app/views/locomotive/installation/step_1.html.haml +23 -0
  309. data/app/views/locomotive/installation/step_2.html.haml +24 -0
  310. data/app/views/locomotive/layouts/application.html.haml +34 -0
  311. data/app/views/locomotive/layouts/error.html.haml +1 -0
  312. data/app/views/locomotive/layouts/not_logged_in.html.haml +18 -0
  313. data/app/views/locomotive/memberships/new.html.haml +14 -0
  314. data/app/views/locomotive/my_account/edit.html.haml +40 -0
  315. data/app/views/locomotive/notifications/new_content_entry.html.haml +29 -0
  316. data/app/views/locomotive/pages/_editable_elements.html.haml +64 -0
  317. data/app/views/locomotive/pages/_form.html.haml +61 -0
  318. data/app/views/locomotive/pages/_page.html.haml +42 -0
  319. data/app/views/locomotive/pages/edit.html.haml +18 -0
  320. data/app/views/locomotive/pages/index.html.haml +19 -0
  321. data/app/views/locomotive/pages/new.html.haml +15 -0
  322. data/app/views/locomotive/passwords/edit.html.haml +18 -0
  323. data/app/views/locomotive/passwords/new.html.haml +17 -0
  324. data/app/views/locomotive/public/pages/show_toolbar.html.haml +64 -0
  325. data/app/views/locomotive/public/sitemaps/show.xml.builder +29 -0
  326. data/app/views/locomotive/sessions/new.html.haml +17 -0
  327. data/app/views/locomotive/shared/_footer.html.haml +1 -0
  328. data/app/views/locomotive/shared/_form_actions.html.haml +14 -0
  329. data/app/views/locomotive/shared/_head.html.haml +38 -0
  330. data/app/views/locomotive/shared/_header.html.haml +10 -0
  331. data/app/views/locomotive/shared/_locale_picker_link.html.haml +6 -0
  332. data/app/views/locomotive/shared/_main_app_head.html.haml +1 -0
  333. data/app/views/locomotive/shared/_site_picker.html.haml +10 -0
  334. data/app/views/locomotive/shared/actions/_contents.html.haml +7 -0
  335. data/app/views/locomotive/shared/menu/_contents.html.haml +51 -0
  336. data/app/views/locomotive/sites/_domains.html.haml +22 -0
  337. data/app/views/locomotive/sites/_form.html.haml +12 -0
  338. data/app/views/locomotive/sites/_memberships.html.haml +27 -0
  339. data/app/views/locomotive/sites/new.html.haml +12 -0
  340. data/app/views/locomotive/snippets/_form.html.haml +13 -0
  341. data/app/views/locomotive/snippets/_snippet.html.haml +8 -0
  342. data/app/views/locomotive/snippets/edit.html.haml +18 -0
  343. data/app/views/locomotive/snippets/new.html.haml +15 -0
  344. data/app/views/locomotive/theme_assets/_asset.html.haml +11 -0
  345. data/app/views/locomotive/theme_assets/_form.html.haml +35 -0
  346. data/app/views/locomotive/theme_assets/_list.html.haml +7 -0
  347. data/app/views/locomotive/theme_assets/_picker.html.haml +25 -0
  348. data/app/views/locomotive/theme_assets/edit.html.haml +21 -0
  349. data/app/views/locomotive/theme_assets/index.html.haml +50 -0
  350. data/app/views/locomotive/theme_assets/new.html.haml +12 -0
  351. data/app/views/locomotive/translations/_form.html.haml +12 -0
  352. data/app/views/locomotive/translations/edit.html.haml +15 -0
  353. data/app/views/locomotive/translations/index.html.haml +26 -0
  354. data/app/views/locomotive/translations/new.html.haml +12 -0
  355. data/config/cucumber.yml +8 -0
  356. data/config/initializers/deny_phantomjs_ttf.rb +29 -0
  357. data/config/initializers/devise.rb +15 -0
  358. data/config/initializers/formtastic.rb +4 -0
  359. data/config/initializers/haml.rb +2 -0
  360. data/config/initializers/locomotive_loaded_first.rb +19 -0
  361. data/config/locales/admin_ui.de.yml +316 -0
  362. data/config/locales/admin_ui.en.yml +332 -0
  363. data/config/locales/admin_ui.es.yml +296 -0
  364. data/config/locales/admin_ui.et.yml +315 -0
  365. data/config/locales/admin_ui.fr.yml +326 -0
  366. data/config/locales/admin_ui.it.yml +295 -0
  367. data/config/locales/admin_ui.nb.yml +314 -0
  368. data/config/locales/admin_ui.nl.yml +279 -0
  369. data/config/locales/admin_ui.pl.yml +319 -0
  370. data/config/locales/admin_ui.pt-BR.yml +274 -0
  371. data/config/locales/admin_ui.ru.yml +313 -0
  372. data/config/locales/carrierwave.de.yml +4 -0
  373. data/config/locales/carrierwave.en.yml +4 -0
  374. data/config/locales/carrierwave.es.yml +4 -0
  375. data/config/locales/carrierwave.et.yml +4 -0
  376. data/config/locales/carrierwave.fr.yml +4 -0
  377. data/config/locales/carrierwave.it.yml +4 -0
  378. data/config/locales/carrierwave.nb.yml +4 -0
  379. data/config/locales/carrierwave.nl.yml +4 -0
  380. data/config/locales/carrierwave.pl.yml +4 -0
  381. data/config/locales/carrierwave.pt-BR.yml +4 -0
  382. data/config/locales/carrierwave.ru.yml +4 -0
  383. data/config/locales/default.de.yml +244 -0
  384. data/config/locales/default.en.yml +43 -0
  385. data/config/locales/default.es.yml +216 -0
  386. data/config/locales/default.et.yml +240 -0
  387. data/config/locales/default.fr.yml +224 -0
  388. data/config/locales/default.it.yml +243 -0
  389. data/config/locales/default.nb.yml +313 -0
  390. data/config/locales/default.nl.yml +170 -0
  391. data/config/locales/default.pl.yml +317 -0
  392. data/config/locales/default.pt-BR.yml +211 -0
  393. data/config/locales/default.ru.yml +279 -0
  394. data/config/locales/devise.de.yml +62 -0
  395. data/config/locales/devise.en.yml +63 -0
  396. data/config/locales/devise.es.yml +63 -0
  397. data/config/locales/devise.et.yml +64 -0
  398. data/config/locales/devise.fr.yml +67 -0
  399. data/config/locales/devise.it.yml +63 -0
  400. data/config/locales/devise.nb.yml +63 -0
  401. data/config/locales/devise.nl.yml +63 -0
  402. data/config/locales/devise.pl.yml +63 -0
  403. data/config/locales/devise.pt-BR.yml +61 -0
  404. data/config/locales/devise.ru.yml +63 -0
  405. data/config/locales/flash.de.yml +106 -0
  406. data/config/locales/flash.en.yml +115 -0
  407. data/config/locales/flash.es.yml +106 -0
  408. data/config/locales/flash.et.yml +106 -0
  409. data/config/locales/flash.fr.yml +106 -0
  410. data/config/locales/flash.it.yml +106 -0
  411. data/config/locales/flash.nb.yml +106 -0
  412. data/config/locales/flash.nl.yml +106 -0
  413. data/config/locales/flash.pl.yml +106 -0
  414. data/config/locales/flash.pt-BR.yml +106 -0
  415. data/config/locales/flash.ru.yml +106 -0
  416. data/config/locales/formtastic.de.yml +97 -0
  417. data/config/locales/formtastic.en.yml +105 -0
  418. data/config/locales/formtastic.es.yml +84 -0
  419. data/config/locales/formtastic.et.yml +103 -0
  420. data/config/locales/formtastic.fr.yml +94 -0
  421. data/config/locales/formtastic.it.yml +99 -0
  422. data/config/locales/formtastic.nb.yml +103 -0
  423. data/config/locales/formtastic.nl.yml +85 -0
  424. data/config/locales/formtastic.pl.yml +105 -0
  425. data/config/locales/formtastic.pt-BR.yml +70 -0
  426. data/config/locales/formtastic.ru.yml +103 -0
  427. data/config/routes.rb +116 -0
  428. data/lib/generators/locomotive/install/install_generator.rb +35 -0
  429. data/lib/generators/locomotive/install/templates/README +26 -0
  430. data/lib/generators/locomotive/install/templates/carrierwave.rb +28 -0
  431. data/lib/generators/locomotive/install/templates/dragonfly.rb +22 -0
  432. data/lib/generators/locomotive/install/templates/locomotive.rb +69 -0
  433. data/lib/generators/locomotive/install/templates/mongoid.yml +34 -0
  434. data/lib/locomotive.rb +136 -0
  435. data/lib/locomotive/action_controller.rb +5 -0
  436. data/lib/locomotive/action_controller/locale_helpers.rb +61 -0
  437. data/lib/locomotive/action_controller/public_responder.rb +17 -0
  438. data/lib/locomotive/action_controller/responder.rb +78 -0
  439. data/lib/locomotive/action_controller/section_helpers.rb +29 -0
  440. data/lib/locomotive/action_controller/url_helpers.rb +38 -0
  441. data/lib/locomotive/carrierwave.rb +10 -0
  442. data/lib/locomotive/carrierwave/asset.rb +72 -0
  443. data/lib/locomotive/carrierwave/base.rb +15 -0
  444. data/lib/locomotive/carrierwave/patches.rb +32 -0
  445. data/lib/locomotive/configuration.rb +122 -0
  446. data/lib/locomotive/core_ext.rb +64 -0
  447. data/lib/locomotive/custom_fields.rb +66 -0
  448. data/lib/locomotive/dependencies.rb +30 -0
  449. data/lib/locomotive/devise.rb +1 -0
  450. data/lib/locomotive/dragonfly.rb +38 -0
  451. data/lib/locomotive/engine.rb +37 -0
  452. data/lib/locomotive/formtastic.rb +13 -0
  453. data/lib/locomotive/haml.rb +1 -0
  454. data/lib/locomotive/httparty.rb +2 -0
  455. data/lib/locomotive/httparty/patches.rb +18 -0
  456. data/lib/locomotive/httparty/webservice.rb +42 -0
  457. data/lib/locomotive/kaminari.rb +35 -0
  458. data/lib/locomotive/liquid.rb +7 -0
  459. data/lib/locomotive/liquid/drops/base.rb +42 -0
  460. data/lib/locomotive/liquid/drops/content_entry.rb +76 -0
  461. data/lib/locomotive/liquid/drops/content_types.rb +50 -0
  462. data/lib/locomotive/liquid/drops/current_user.rb +21 -0
  463. data/lib/locomotive/liquid/drops/page.rb +55 -0
  464. data/lib/locomotive/liquid/drops/proxy_collection.rb +56 -0
  465. data/lib/locomotive/liquid/drops/site.rb +19 -0
  466. data/lib/locomotive/liquid/drops/uploader.rb +15 -0
  467. data/lib/locomotive/liquid/errors.rb +7 -0
  468. data/lib/locomotive/liquid/filters/base.rb +47 -0
  469. data/lib/locomotive/liquid/filters/date.rb +54 -0
  470. data/lib/locomotive/liquid/filters/html.rb +115 -0
  471. data/lib/locomotive/liquid/filters/misc.rb +65 -0
  472. data/lib/locomotive/liquid/filters/resize.rb +16 -0
  473. data/lib/locomotive/liquid/filters/text.rb +45 -0
  474. data/lib/locomotive/liquid/filters/translate.rb +16 -0
  475. data/lib/locomotive/liquid/patches.rb +21 -0
  476. data/lib/locomotive/liquid/tags/consume.rb +67 -0
  477. data/lib/locomotive/liquid/tags/csrf.rb +40 -0
  478. data/lib/locomotive/liquid/tags/editable.rb +5 -0
  479. data/lib/locomotive/liquid/tags/editable/base.rb +88 -0
  480. data/lib/locomotive/liquid/tags/editable/control.rb +31 -0
  481. data/lib/locomotive/liquid/tags/editable/file.rb +39 -0
  482. data/lib/locomotive/liquid/tags/editable/long_text.rb +33 -0
  483. data/lib/locomotive/liquid/tags/editable/short_text.rb +41 -0
  484. data/lib/locomotive/liquid/tags/extends.rb +47 -0
  485. data/lib/locomotive/liquid/tags/google_analytics.rb +39 -0
  486. data/lib/locomotive/liquid/tags/inherited_block.rb +31 -0
  487. data/lib/locomotive/liquid/tags/inline_editor.rb +40 -0
  488. data/lib/locomotive/liquid/tags/locale_switcher.rb +83 -0
  489. data/lib/locomotive/liquid/tags/nav.rb +155 -0
  490. data/lib/locomotive/liquid/tags/paginate.rb +111 -0
  491. data/lib/locomotive/liquid/tags/seo.rb +72 -0
  492. data/lib/locomotive/liquid/tags/snippet.rb +75 -0
  493. data/lib/locomotive/liquid/tags/with_scope.rb +47 -0
  494. data/lib/locomotive/logger.rb +11 -0
  495. data/lib/locomotive/middlewares.rb +4 -0
  496. data/lib/locomotive/middlewares/cache.rb +27 -0
  497. data/lib/locomotive/middlewares/fonts.rb +42 -0
  498. data/lib/locomotive/middlewares/inline_editor.rb +36 -0
  499. data/lib/locomotive/middlewares/seo_trailing_slash.rb +24 -0
  500. data/lib/locomotive/misc/api_documentation.rb +96 -0
  501. data/lib/locomotive/misc/api_documentation/bootstrap.html.haml +119 -0
  502. data/lib/locomotive/mongoid.rb +4 -0
  503. data/lib/locomotive/mongoid/document.rb +19 -0
  504. data/lib/locomotive/mongoid/liquid.rb +39 -0
  505. data/lib/locomotive/mongoid/patches.rb +106 -0
  506. data/lib/locomotive/mongoid/presenter.rb +73 -0
  507. data/lib/locomotive/presentable.rb +212 -0
  508. data/lib/locomotive/rails.rb +1 -0
  509. data/lib/locomotive/rails/action_view.rb +9 -0
  510. data/lib/locomotive/regexps.rb +11 -0
  511. data/lib/locomotive/render.rb +177 -0
  512. data/lib/locomotive/routing.rb +2 -0
  513. data/lib/locomotive/routing/default_constraint.rb +42 -0
  514. data/lib/locomotive/routing/site_dispatcher.rb +54 -0
  515. data/lib/locomotive/session_store.rb +64 -0
  516. data/lib/locomotive/version.rb +3 -0
  517. data/lib/locomotive_cms.rb +1 -0
  518. data/lib/tasks/cucumber.rake +66 -0
  519. data/lib/tasks/locomotive.rake +220 -0
  520. data/public/favicon.ico +0 -0
  521. data/vendor/assets/fonts/locomotive/fontawesome-webfont.eot +0 -0
  522. data/vendor/assets/fonts/locomotive/fontawesome-webfont.svg +255 -0
  523. data/vendor/assets/fonts/locomotive/fontawesome-webfont.ttf +0 -0
  524. data/vendor/assets/fonts/locomotive/fontawesome-webfont.woff +0 -0
  525. data/vendor/assets/javascripts/locomotive/ICanHandlebarz.js +88 -0
  526. data/vendor/assets/javascripts/locomotive/backbone.modelbinding.js +565 -0
  527. data/vendor/assets/javascripts/locomotive/backbone.sync.js +113 -0
  528. data/vendor/assets/javascripts/locomotive/cmd.js +31 -0
  529. data/vendor/assets/javascripts/locomotive/cookies.js +96 -0
  530. data/vendor/assets/javascripts/locomotive/datepicker_i18n.js.erb +28 -0
  531. data/vendor/assets/javascripts/locomotive/editable_field.js +50 -0
  532. data/vendor/assets/javascripts/locomotive/form_submit_notification.js +39 -0
  533. data/vendor/assets/javascripts/locomotive/growl.js +143 -0
  534. data/vendor/assets/javascripts/locomotive/handlebars.js +1493 -0
  535. data/vendor/assets/javascripts/locomotive/liquid_mode.js +42 -0
  536. data/vendor/assets/javascripts/locomotive/menu_toggler.js +37 -0
  537. data/vendor/assets/javascripts/locomotive/resize.js +9 -0
  538. data/vendor/assets/javascripts/locomotive/slugify.js +31 -0
  539. data/vendor/assets/javascripts/locomotive/smartupdater.js +296 -0
  540. data/vendor/assets/javascripts/locomotive/subscribe.js +367 -0
  541. data/vendor/assets/javascripts/locomotive/toggle.js +143 -0
  542. data/vendor/assets/javascripts/locomotive/vendor.js +1 -0
  543. data/vendor/assets/stylesheets/locomotive/blueprint/ie.css +26 -0
  544. data/vendor/assets/stylesheets/locomotive/blueprint/print.css +30 -0
  545. data/vendor/assets/stylesheets/locomotive/blueprint/screen.css +253 -0
  546. data/vendor/assets/stylesheets/locomotive/font-awesome.scss +329 -0
  547. data/vendor/assets/stylesheets/locomotive/jquery.css +3 -0
  548. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  549. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  550. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  551. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  552. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  553. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  554. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  555. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  556. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_222222_256x240.png +0 -0
  557. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  558. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_454545_256x240.png +0 -0
  559. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_888888_256x240.png +0 -0
  560. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  561. data/vendor/assets/stylesheets/locomotive/jquery/images/ui-icons_ffffff_256x240.png +0 -0
  562. data/vendor/assets/stylesheets/locomotive/jquery/ui.css +406 -0
  563. data/vendor/assets/stylesheets/locomotive/liquid_mode.css +7 -0
  564. data/vendor/assets/stylesheets/locomotive/toggle.css.scss +75 -0
  565. metadata +1171 -0
@@ -0,0 +1,52 @@
1
+ module Locomotive
2
+ class EditableControl < EditableElement
3
+
4
+ ## fields ##
5
+ field :content
6
+ field :options, :type => Array, :default => []
7
+
8
+ ## methods ##
9
+
10
+ def options=(value)
11
+ if value.respond_to?(:split)
12
+ value = value.split(/\s*\,\s*/).map do |option|
13
+ first, last = *option.split(/\s*=\s*/)
14
+ last ||= first
15
+ { 'value' => first, 'text' => last }
16
+ end
17
+ end
18
+
19
+ super(value)
20
+ end
21
+
22
+ def default_content?
23
+ false
24
+ end
25
+
26
+ def copy_attributes_from(el)
27
+ super(el)
28
+
29
+ %w(content options).each do |meth|
30
+ self.attributes[meth] = el.attributes[meth]
31
+ end
32
+ end
33
+
34
+ protected
35
+
36
+ def propagate_content
37
+ if self.content_changed?
38
+ operations = {
39
+ '$set' => {
40
+ 'editable_elements.$.content' => self.content,
41
+ 'editable_elements.$.options' => self.options,
42
+ }
43
+ }
44
+
45
+ self.page.collection.update self._selector, operations, :multi => true
46
+ end
47
+ true
48
+ end
49
+
50
+ end
51
+ end
52
+
@@ -0,0 +1,122 @@
1
+ module Locomotive
2
+ class EditableElement
3
+
4
+ # include ::Mongoid::Document
5
+ include Locomotive::Mongoid::Document
6
+
7
+ ## fields ##
8
+ field :slug
9
+ field :block
10
+ field :hint
11
+ field :priority, :type => Integer, :default => 0
12
+ field :fixed, :type => Boolean, :default => false
13
+ field :disabled, :type => Boolean, :default => false, :localize => true
14
+ field :from_parent, :type => Boolean, :default => false
15
+ field :locales, :type => Array, :default => []
16
+
17
+ ## associations ##
18
+ embedded_in :page, :class_name => 'Locomotive::Page', :inverse_of => :editable_elements
19
+
20
+ ## validations ##
21
+ validates_presence_of :slug
22
+
23
+ ## callbacks ##
24
+ after_save :propagate_content, :if => :fixed?
25
+
26
+ ## scopes ##
27
+ scope :by_priority, :order_by => [[:priority, :desc]]
28
+
29
+ ## methods ##
30
+
31
+ def disabled?
32
+ !!self.disabled # the original method does not work quite well with the localization
33
+ end
34
+
35
+ def disabled_in_all_translations?
36
+ self.disabled_translations.all? { |_, v| v == true }
37
+ end
38
+
39
+ # Determines if the current element can be edited in the back-office
40
+ #
41
+ def editable?
42
+ !self.disabled? && self.locales.include?(::Mongoid::Fields::I18n.locale.to_s) && (!self.fixed? || !self.from_parent?)
43
+ end
44
+
45
+ def _run_rearrange_callbacks
46
+ # callback from page/tree. not needed in the editable elements
47
+ end
48
+
49
+ def default_content?
50
+ # needs to be overridden for each kind of elements
51
+ true
52
+ end
53
+
54
+ # Copy attributes extracted from the corresponding Liquid tag
55
+ # Each editable element overrides this method.
56
+ #
57
+ # @param [ Hash ] attributes The up-to-date attributes
58
+ #
59
+ def copy_attributes(attributes)
60
+ self.attributes = attributes
61
+ end
62
+
63
+ # Copy attributes from an existing editable element coming
64
+ # from the parent page. Each editable element may or not
65
+ # override this method. The source element is a new record.
66
+ #
67
+ # @param [ EditableElement] el The source element
68
+ #
69
+ def copy_attributes_from(el)
70
+ self.attributes = el.attributes.reject { |attr| !%w(slug block hint priority fixed disabled locales from_parent).include?(attr) }
71
+ self.from_parent = true
72
+ end
73
+
74
+ # Set the default content from an existing editable element coming
75
+ # from the parent page. Each editable element may or not
76
+ # override this method. The source element is an existing record.
77
+ def set_default_content_from(el)
78
+ self.add_current_locale
79
+ end
80
+
81
+ # Make sure the current locale is added to the list
82
+ # of locales for the current element so that we know
83
+ # in which languages the element was translated.
84
+ #
85
+ def add_current_locale
86
+ locale = ::Mongoid::Fields::I18n.locale.to_s
87
+ self.locales << locale unless self.locales.include?(locale)
88
+ end
89
+
90
+ # Set the content of the editable element with a default value
91
+ # only if the content has not already been modified by the user.
92
+ #
93
+ # @param [ String ] content The default content.
94
+ #
95
+ def content_from_default=(content)
96
+ # needs to be overridden for each kind of elements
97
+ end
98
+
99
+ protected
100
+
101
+ def _selector
102
+ locale = ::Mongoid::Fields::I18n.locale
103
+ {
104
+ 'site_id' => self.page.site_id,
105
+ "template_dependencies.#{locale}" => { '$in' => [self.page._id] },
106
+ 'editable_elements.fixed' => true,
107
+ 'editable_elements.block' => self.block,
108
+ 'editable_elements.slug' => self.slug,
109
+ }
110
+ end
111
+
112
+ # Update the value (or content) of the elements matching the same block/slug
113
+ # as the current element in all the pages inheriting from the current page.
114
+ # This method is called only if the element has the "fixed" property set to true.
115
+ # It also needs to be overridden for each kind of elements (file, short text, ...etc)
116
+ #
117
+ def propagate_content
118
+ true
119
+ end
120
+
121
+ end
122
+ end
@@ -0,0 +1,85 @@
1
+ module Locomotive
2
+ class EditableFile < EditableElement
3
+
4
+ ## behaviours ##
5
+ mount_uploader 'source', EditableFileUploader
6
+
7
+ replace_field 'source', ::String, true
8
+
9
+ ## fields ##
10
+ field :default_source_url, :localize => true
11
+
12
+ ## callbacks ##
13
+ after_save :propagate_content
14
+
15
+ ## methods ##
16
+
17
+ # Returns the url or the path to the uploaded file
18
+ # if it exists. Otherwise returns the default url.
19
+ #
20
+ # @note This method is not used for the rendering, only for the back-office
21
+ #
22
+ # @return [String] The url or path of the file
23
+ #
24
+ def content
25
+ self.source? ? self.source.url : self.default_source_url
26
+ end
27
+
28
+ def default_content?
29
+ !self.source? && self.default_source_url.present?
30
+ end
31
+
32
+ def copy_attributes(attributes)
33
+ unless self.default_content?
34
+ attributes.delete(:default_source_url)
35
+ end
36
+
37
+ super(attributes)
38
+ end
39
+
40
+ def copy_attributes_from(el)
41
+ super(el)
42
+
43
+ if el.source_translations.nil?
44
+ self.attributes['default_source_url'] = el.attributes['default_source_url'] || {}
45
+ else
46
+ el.source_translations.keys.each do |locale|
47
+ ::Mongoid::Fields::I18n.with_locale(locale) do
48
+ self.default_source_url = el.source? ? el.source.url : el.default_source_url
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def set_default_content_from(el)
55
+ super(el)
56
+
57
+ locale = ::Mongoid::Fields::I18n.locale.to_s
58
+
59
+ if self.attributes['default_source_url'][locale].nil?
60
+ self.default_source_url = el.default_source_url
61
+ end
62
+ end
63
+
64
+ def remove_source=(value)
65
+ self.source_will_change! # notify the page to run the callbacks for that element
66
+ self.default_source_url = nil
67
+ super
68
+ end
69
+
70
+ protected
71
+
72
+ def propagate_content
73
+ if self.source_changed?
74
+ operations = {
75
+ '$set' => {
76
+ "editable_elements.$.default_source_url.#{::Mongoid::Fields::I18n.locale}" => self.source.url
77
+ }
78
+ }
79
+
80
+ self.page.collection.update self._selector, operations, :multi => true
81
+ end
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,5 @@
1
+ module Locomotive
2
+ class EditableLongText < EditableShortText
3
+
4
+ end
5
+ end
@@ -0,0 +1,66 @@
1
+ module Locomotive
2
+ class EditableShortText < EditableElement
3
+
4
+ ## fields ##
5
+ field :content, :localize => true
6
+ field :default_content, :type => Boolean, :localize => true, :default => true
7
+
8
+ ## methods ##
9
+
10
+ def content=(value)
11
+ return if value == self.content
12
+ self.add_current_locale
13
+ self.default_content = false unless self.new_record?
14
+ super
15
+ end
16
+
17
+ def default_content?
18
+ !!self.default_content
19
+ end
20
+
21
+ def content_from_default=(content)
22
+ if self.default_content?
23
+ self.content_will_change!
24
+ self.attributes['content'] ||= {}
25
+ self.attributes['content'][::Mongoid::Fields::I18n.locale.to_s] = content
26
+ end
27
+ end
28
+
29
+ def copy_attributes_from(el)
30
+ super(el)
31
+
32
+ self.attributes['content'] = el.content_translations || {}
33
+ self.attributes['default_content'] = el.default_content_translations
34
+ end
35
+
36
+ def set_default_content_from(el)
37
+ super(el)
38
+
39
+ locale = ::Mongoid::Fields::I18n.locale.to_s
40
+
41
+ if self.default_content? || self.attributes['default_content'][locale].nil?
42
+ self.default_content = true
43
+
44
+ self.content_will_change!
45
+ self.attributes['content'][locale] = el.content
46
+ end
47
+ end
48
+
49
+ protected
50
+
51
+ def propagate_content
52
+ if self.content_changed?
53
+ operations = {
54
+ '$set' => {
55
+ "editable_elements.$.content.#{::Mongoid::Fields::I18n.locale}" => self.content,
56
+ "editable_elements.$.default_content.#{::Mongoid::Fields::I18n.locale}" => false,
57
+ }
58
+ }
59
+
60
+ self.page.collection.update self._selector, operations, :multi => true
61
+ end
62
+ true
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,31 @@
1
+ module Locomotive
2
+ module Extensions
3
+ module Asset
4
+ module Types
5
+
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ %w{media image stylesheet javascript font pdf}.each do |type|
10
+ scope :"only_#{type}", where(:content_type => type)
11
+
12
+ define_method("#{type}?") do
13
+ self.content_type.to_s == type
14
+ end
15
+ end
16
+ end
17
+
18
+ module ClassMethods
19
+
20
+ def by_content_type(content_type)
21
+ return self.all if content_type.blank?
22
+
23
+ self.all.where(:content_type => content_type.to_s)
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ module Locomotive
2
+ module Extensions
3
+ module Asset
4
+ module Vignette
5
+
6
+ def vignette_url
7
+ if self.image?
8
+ if self.width < 85 && self.height < 85
9
+ self.source.url
10
+ else
11
+ Locomotive::Dragonfly.resize_url(self.source, '85x85#')
12
+ end
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,57 @@
1
+ module Locomotive
2
+ module Extensions
3
+ module ContentType
4
+ module DefaultValues
5
+
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ before_save :set_order_by
10
+ before_save :set_label_field
11
+ before_save :set_default_order_by_for_has_many_fields
12
+ end
13
+
14
+ protected
15
+
16
+ def set_order_by
17
+ unless self.order_by.nil? || %w(created_at updated_at _position).include?(self.order_by)
18
+ if field = self.find_entries_custom_field(self.order_by)
19
+ self.order_by = field._id
20
+ end
21
+ end
22
+
23
+ self.order_by ||= 'created_at'
24
+ end
25
+
26
+ def set_label_field
27
+ if @new_label_field_name.present?
28
+ self.label_field_id = self.entries_custom_fields.detect { |f| f.name == @new_label_field_name.underscore }.try(:_id)
29
+ end
30
+
31
+ # unknown label_field_name, get the first one instead
32
+ if self.label_field_id.blank?
33
+ self.label_field_id = self.entries_custom_fields.first._id
34
+ end
35
+
36
+ field = self.entries_custom_fields.find(self.label_field_id)
37
+
38
+ # the label field should always be required
39
+ field.required = true
40
+
41
+ self.label_field_name = field.name
42
+ end
43
+
44
+ def set_default_order_by_for_has_many_fields
45
+ self.entries_custom_fields.where(:type.in => %w(has_many many_to_many)).each do |field|
46
+ if field.ui_enabled?
47
+ field.order_by = nil
48
+ else
49
+ field.order_by = field.class_name_to_content_type.order_by_definition
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,49 @@
1
+ module Locomotive
2
+ module Extensions
3
+ module ContentType
4
+ module ItemTemplate
5
+
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ field :raw_item_template
10
+ field :serialized_item_template, :type => Binary
11
+
12
+ before_validation :serialize_item_template
13
+
14
+ validate :item_template_must_be_valid
15
+ end
16
+
17
+ def item_template
18
+ @item_template ||= Marshal.load(read_attribute(:serialized_item_template).to_s) rescue nil
19
+ end
20
+
21
+ protected
22
+
23
+ def serialize_item_template
24
+ if self.new_record? || self.raw_item_template_changed?
25
+ @item_parsing_errors = []
26
+
27
+ begin
28
+ self._parse_and_serialize_item_template
29
+ rescue ::Liquid::SyntaxError => error
30
+ @item_parsing_errors << I18n.t(:liquid_syntax, :error => error.to_s, :scope => [:errors, :messages])
31
+ end
32
+ end
33
+ end
34
+
35
+ def _parse_and_serialize_item_template
36
+ item_template = ::Liquid::Template.parse(self.raw_item_template, {})
37
+ self.serialized_item_template = BSON::Binary.new(Marshal.dump(item_template))
38
+ end
39
+
40
+ def item_template_must_be_valid
41
+ @item_parsing_errors.try(:each) do |msg|
42
+ %w(item_template raw_item_template).each { |field| self.errors.add field.to_sym, msg }
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end