coalla-cms 0.5.1.8

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 (290) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +81 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +198 -0
  5. data/Rakefile +29 -0
  6. data/app/assets/fonts/glyphicons/glyphicons-halflings-regular.eot +0 -0
  7. data/app/assets/fonts/glyphicons/glyphicons-halflings-regular.svg +229 -0
  8. data/app/assets/fonts/glyphicons/glyphicons-halflings-regular.ttf +0 -0
  9. data/app/assets/fonts/glyphicons/glyphicons-halflings-regular.woff +0 -0
  10. data/app/assets/images/ajax-loader.gif +0 -0
  11. data/app/assets/images/blank.gif +0 -0
  12. data/app/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  13. data/app/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  14. data/app/assets/javascripts/admin/admin.js +223 -0
  15. data/app/assets/javascripts/admin/custom_admin.js +0 -0
  16. data/app/assets/javascripts/admin/jquery-migrate.min.js +2 -0
  17. data/app/assets/javascripts/admin/photo_uploader.js +58 -0
  18. data/app/assets/javascripts/admin/vendor/bootstrap.min.js +7 -0
  19. data/app/assets/javascripts/admin/vendor/jquery-ui-timepicker-addon-ru.js +42 -0
  20. data/app/assets/javascripts/admin/vendor/jquery.tagsinput.js +365 -0
  21. data/app/assets/javascripts/admin/vendor/jquery.tokeninput.patched.js +875 -0
  22. data/app/assets/javascripts/admin/vendor/underscore-min.js +5 -0
  23. data/app/assets/javascripts/ckeditor/plugins/autogrow/plugin.js +209 -0
  24. data/app/assets/javascripts/ckeditor/plugins/mediaembed/icons/hidpi/mediaembed.png +0 -0
  25. data/app/assets/javascripts/ckeditor/plugins/mediaembed/icons/mediaembed.png +0 -0
  26. data/app/assets/javascripts/ckeditor/plugins/mediaembed/plugin.js +64 -0
  27. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/LICENSE.txt +303 -0
  28. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad-gallery-css-diff.htm +831 -0
  29. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_next.png +0 -0
  30. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_prev.png +0 -0
  31. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_scroll_back.png +0 -0
  32. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_scroll_forward.png +0 -0
  33. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.css +185 -0
  34. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.js +984 -0
  35. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.min - ref.js +10 -0
  36. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.min.js +1 -0
  37. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/loader.gif +0 -0
  38. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/opa75.png +0 -0
  39. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/placeholder.png +0 -0
  40. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/ad-gallery/trans.gif +0 -0
  41. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/blank.gif +0 -0
  42. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_loading.gif +0 -0
  43. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_loading@2x.gif +0 -0
  44. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_overlay.png +0 -0
  45. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_sprite.png +0 -0
  46. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_sprite@2x.png +0 -0
  47. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/fancybox_buttons.png +0 -0
  48. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-buttons.css +97 -0
  49. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-buttons.js +122 -0
  50. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-media.js +199 -0
  51. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-thumbs.css +55 -0
  52. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-thumbs.js +162 -0
  53. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/jquery.fancybox.css +274 -0
  54. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/jquery.fancybox.js +2020 -0
  55. data/app/assets/javascripts/ckeditor/plugins/slideshow/3rdParty/fancybox2/jquery.fancybox.pack.js +46 -0
  56. data/app/assets/javascripts/ckeditor/plugins/slideshow/README.md +66 -0
  57. data/app/assets/javascripts/ckeditor/plugins/slideshow/dialogs/slideshow.js +1396 -0
  58. data/app/assets/javascripts/ckeditor/plugins/slideshow/dialogs/slideshow.min.js +1 -0
  59. data/app/assets/javascripts/ckeditor/plugins/slideshow/icons/placeholder.png +0 -0
  60. data/app/assets/javascripts/ckeditor/plugins/slideshow/icons/slideshow.png +0 -0
  61. data/app/assets/javascripts/ckeditor/plugins/slideshow/lang/Serbian_translation.txt +9 -0
  62. data/app/assets/javascripts/ckeditor/plugins/slideshow/lang/el.js +37 -0
  63. data/app/assets/javascripts/ckeditor/plugins/slideshow/lang/en.js +35 -0
  64. data/app/assets/javascripts/ckeditor/plugins/slideshow/lang/fr.js +35 -0
  65. data/app/assets/javascripts/ckeditor/plugins/slideshow/lang/ru.js +35 -0
  66. data/app/assets/javascripts/ckeditor/plugins/slideshow/lang/sr-latn.js +35 -0
  67. data/app/assets/javascripts/ckeditor/plugins/slideshow/lang/sr.js +35 -0
  68. data/app/assets/javascripts/ckeditor/plugins/slideshow/plugin.js +217 -0
  69. data/app/assets/stylesheets/admin/admin.scss +306 -0
  70. data/app/assets/stylesheets/admin/custom_admin.scss +1 -0
  71. data/app/assets/stylesheets/admin/vendor/bootstrap.min.css +14 -0
  72. data/app/assets/stylesheets/admin/vendor/jquery.tagsinput.css +99 -0
  73. data/app/assets/stylesheets/admin/vendor/token-input-facebook.patched.css +126 -0
  74. data/app/assets/stylesheets/admin/vendor/token-input.patched.css +116 -0
  75. data/app/controllers/admin/autocomplete_controller.rb +14 -0
  76. data/app/controllers/admin/image_upload_controller.rb +27 -0
  77. data/app/controllers/admin/lookups_controller.rb +52 -0
  78. data/app/controllers/admin/notifier_controller.rb +7 -0
  79. data/app/controllers/admin/site_meta_tags_controller.rb +43 -0
  80. data/app/controllers/admin/sortable_controller.rb +26 -0
  81. data/app/controllers/concerns/admin/path_history.rb +39 -0
  82. data/app/controllers/concerns/page_meta_tags.rb +71 -0
  83. data/app/helpers/admin/lookup_helper.rb +23 -0
  84. data/app/helpers/admin/search_helper.rb +59 -0
  85. data/app/helpers/admin_helper.rb +29 -0
  86. data/app/helpers/common_helper.rb +22 -0
  87. data/app/helpers/lookup_helper.rb +72 -0
  88. data/app/helpers/nested_fields_helper.rb +12 -0
  89. data/app/helpers/static_text_formatter.rb +25 -0
  90. data/app/helpers/twitter_builder_helper.rb +253 -0
  91. data/app/helpers/twitter_form_builder.rb +202 -0
  92. data/app/models/file_upload.rb +19 -0
  93. data/app/models/lookup.rb +28 -0
  94. data/app/models/site_meta_tags.rb +16 -0
  95. data/app/uploaders/file_uploader.rb +10 -0
  96. data/app/uploaders/generic_image_uploader.rb +74 -0
  97. data/app/uploaders/meta_tags_image_uploader.rb +5 -0
  98. data/app/utils/admin_structure.rb +82 -0
  99. data/app/utils/bootstrap_link_renderer.rb +40 -0
  100. data/app/utils/table_helpers.rb +196 -0
  101. data/app/views/admin/base/_sort.haml +34 -0
  102. data/app/views/admin/common/_file_upload_template.haml +18 -0
  103. data/app/views/admin/common/_header.html.haml +28 -0
  104. data/app/views/admin/common/_image_upload_template.html.haml +40 -0
  105. data/app/views/admin/common/_menu.html.haml +2 -0
  106. data/app/views/admin/common/_menu_section.haml +10 -0
  107. data/app/views/admin/common/_menu_separator.haml +1 -0
  108. data/app/views/admin/common/_nested_fields_for.html.haml +5 -0
  109. data/app/views/admin/common/_nested_fields_for_element.html.haml +5 -0
  110. data/app/views/admin/common/_slide.haml +41 -0
  111. data/app/views/admin/common/_slides.html.haml +17 -0
  112. data/app/views/admin/common/_table_template.html.haml +14 -0
  113. data/app/views/admin/common/_upload_form.html.haml +5 -0
  114. data/app/views/admin/common/image_uploaded.js.haml +7 -0
  115. data/app/views/admin/common/upload_failed.js.erb +11 -0
  116. data/app/views/admin/common/upload_image.js.erb +6 -0
  117. data/app/views/admin/home/dashboard.html.haml +5 -0
  118. data/app/views/admin/lookups/_form.html.haml +10 -0
  119. data/app/views/admin/lookups/edit.html.haml +5 -0
  120. data/app/views/admin/lookups/index.html.haml +6 -0
  121. data/app/views/admin/lookups/types/_boolean.haml +1 -0
  122. data/app/views/admin/lookups/types/_enum.haml +1 -0
  123. data/app/views/admin/lookups/types/_file.haml +3 -0
  124. data/app/views/admin/lookups/types/_float.haml +1 -0
  125. data/app/views/admin/lookups/types/_integer.haml +1 -0
  126. data/app/views/admin/lookups/types/_memo.haml +1 -0
  127. data/app/views/admin/lookups/types/_string.haml +1 -0
  128. data/app/views/admin/lookups/types/_wysiwyg.haml +1 -0
  129. data/app/views/admin/site_meta_tags/_form.html.haml +22 -0
  130. data/app/views/admin/site_meta_tags/edit.html.haml +5 -0
  131. data/app/views/admin/site_meta_tags/index.html.haml +5 -0
  132. data/app/views/layouts/admin.html.haml +44 -0
  133. data/app/views/structure/_section.haml +17 -0
  134. data/coalla-cms.gemspec +42 -0
  135. data/config/locales/devise.ru.yml +59 -0
  136. data/config/locales/will_paginate.ru.yml +6 -0
  137. data/lib/coalla-cms.rb +17 -0
  138. data/lib/coalla/cms/engine.rb +16 -0
  139. data/lib/coalla/cms/version.rb +5 -0
  140. data/lib/coalla/ext/mapper.rb +14 -0
  141. data/lib/coalla/orm/page_slider.rb +55 -0
  142. data/lib/coalla/orm/relation.rb +35 -0
  143. data/lib/coalla/orm/sanitized.rb +16 -0
  144. data/lib/coalla/sanitize/config/default.rb +526 -0
  145. data/lib/generators/coalla/cms/create_admin_administrators_generator.rb +29 -0
  146. data/lib/generators/coalla/cms/create_admin_generator.rb +50 -0
  147. data/lib/generators/coalla/cms/create_admin_login_view_generator.rb +23 -0
  148. data/lib/generators/coalla/cms/create_markup_generator.rb +30 -0
  149. data/lib/generators/coalla/cms/file_uploads/install_generator.rb +35 -0
  150. data/lib/generators/coalla/cms/file_uploads/mount_generator.rb +34 -0
  151. data/lib/generators/coalla/cms/file_uploads/templates/add_column_migration.rb.erb +5 -0
  152. data/lib/generators/coalla/cms/file_uploads/templates/migration.rb +17 -0
  153. data/lib/generators/coalla/cms/image/install_generator.rb +39 -0
  154. data/lib/generators/coalla/cms/image/mount_generator.rb +50 -0
  155. data/lib/generators/coalla/cms/image/templates/migration.rb.erb +9 -0
  156. data/lib/generators/coalla/cms/image/templates/model.rb.erb +5 -0
  157. data/lib/generators/coalla/cms/image/templates/mount/migration.rb.erb +6 -0
  158. data/lib/generators/coalla/cms/image/templates/mount/uploader.rb.erb +3 -0
  159. data/lib/generators/coalla/cms/image/templates/uploader.rb.erb +3 -0
  160. data/lib/generators/coalla/cms/init_generator.rb +136 -0
  161. data/lib/generators/coalla/cms/lookups/install_generator.rb +54 -0
  162. data/lib/generators/coalla/cms/lookups/templates/migration.rb +17 -0
  163. data/lib/generators/coalla/cms/market/install_generator.rb +71 -0
  164. data/lib/generators/coalla/cms/market/templates/controllers/categories_controller.rb +47 -0
  165. data/lib/generators/coalla/cms/market/templates/controllers/products_controller.rb +50 -0
  166. data/lib/generators/coalla/cms/market/templates/controllers/properties_controller.rb +59 -0
  167. data/lib/generators/coalla/cms/market/templates/market.rb +5 -0
  168. data/lib/generators/coalla/cms/market/templates/market.ru.yml +53 -0
  169. data/lib/generators/coalla/cms/market/templates/migrations/create_categories.rb +15 -0
  170. data/lib/generators/coalla/cms/market/templates/migrations/create_product_properties.rb +18 -0
  171. data/lib/generators/coalla/cms/market/templates/migrations/create_products.rb +18 -0
  172. data/lib/generators/coalla/cms/market/templates/migrations/create_properties.rb +11 -0
  173. data/lib/generators/coalla/cms/market/templates/models/category.rb +36 -0
  174. data/lib/generators/coalla/cms/market/templates/models/product.rb +16 -0
  175. data/lib/generators/coalla/cms/market/templates/models/product_property.rb +14 -0
  176. data/lib/generators/coalla/cms/market/templates/models/property.rb +7 -0
  177. data/lib/generators/coalla/cms/market/templates/views/categories/_form.html.haml +10 -0
  178. data/lib/generators/coalla/cms/market/templates/views/categories/edit.html.haml +5 -0
  179. data/lib/generators/coalla/cms/market/templates/views/categories/index.html.haml +17 -0
  180. data/lib/generators/coalla/cms/market/templates/views/categories/new.html.haml +4 -0
  181. data/lib/generators/coalla/cms/market/templates/views/products/_form.html.haml +17 -0
  182. data/lib/generators/coalla/cms/market/templates/views/products/_product_property_fields.html.haml +13 -0
  183. data/lib/generators/coalla/cms/market/templates/views/products/edit.html.haml +5 -0
  184. data/lib/generators/coalla/cms/market/templates/views/products/index.html.haml +17 -0
  185. data/lib/generators/coalla/cms/market/templates/views/products/new.html.haml +4 -0
  186. data/lib/generators/coalla/cms/market/templates/views/properties/_form.html.haml +9 -0
  187. data/lib/generators/coalla/cms/market/templates/views/properties/edit.html.haml +5 -0
  188. data/lib/generators/coalla/cms/market/templates/views/properties/index.html.haml +15 -0
  189. data/lib/generators/coalla/cms/market/templates/views/properties/new.html.haml +4 -0
  190. data/lib/generators/coalla/cms/meta_tags/install_generator.rb +58 -0
  191. data/lib/generators/coalla/cms/meta_tags/templates/migration.rb +23 -0
  192. data/lib/generators/coalla/cms/news/scaffold_generator.rb +50 -0
  193. data/lib/generators/coalla/cms/news/templates/entity.rb.erb +10 -0
  194. data/lib/generators/coalla/cms/news/templates/entity_controller_template.rb.erb +47 -0
  195. data/lib/generators/coalla/cms/news/templates/entity_image_uploader.rb.erb +7 -0
  196. data/lib/generators/coalla/cms/news/templates/migration.rb.erb +15 -0
  197. data/lib/generators/coalla/cms/news/templates/views/_form.haml.erb +16 -0
  198. data/lib/generators/coalla/cms/news/templates/views/edit.haml.erb +5 -0
  199. data/lib/generators/coalla/cms/news/templates/views/index.haml.erb +18 -0
  200. data/lib/generators/coalla/cms/news/templates/views/new.haml.erb +5 -0
  201. data/lib/generators/coalla/cms/orm_helpers.rb +31 -0
  202. data/lib/generators/coalla/cms/scaffold_generator.rb +53 -0
  203. data/lib/generators/coalla/cms/scaffold_helper.rb +11 -0
  204. data/lib/generators/coalla/cms/setup_admin_generator.rb +63 -0
  205. data/lib/generators/coalla/cms/setup_routes_generator.rb +29 -0
  206. data/lib/generators/coalla/cms/slider/init_generator.rb +41 -0
  207. data/lib/generators/coalla/cms/slider/templates/migration.rb.erb +25 -0
  208. data/lib/generators/coalla/cms/slider/templates/slider_image.rb.erb +10 -0
  209. data/lib/generators/coalla/cms/slider/templates/slider_image_uploader.rb.erb +7 -0
  210. data/lib/generators/coalla/cms/slider/templates/slider_upload_controller.rb.erb +19 -0
  211. data/lib/generators/coalla/cms/templates/.gitattributes +4 -0
  212. data/lib/generators/coalla/cms/templates/.gitignore +86 -0
  213. data/lib/generators/coalla/cms/templates/assets.rb +11 -0
  214. data/lib/generators/coalla/cms/templates/controllers/admin/administrators_controller.rb +55 -0
  215. data/lib/generators/coalla/cms/templates/controllers/admin/base_controller.rb.erb +35 -0
  216. data/lib/generators/coalla/cms/templates/controllers/admin/home_controller.rb.erb +6 -0
  217. data/lib/generators/coalla/cms/templates/controllers/admin/scaffold_controller_template.rb.erb +45 -0
  218. data/lib/generators/coalla/cms/templates/controllers/home_controller.rb.erb +6 -0
  219. data/lib/generators/coalla/cms/templates/controllers/markup_controller.rb.erb +2 -0
  220. data/lib/generators/coalla/cms/templates/database.yml.erb +35 -0
  221. data/lib/generators/coalla/cms/templates/errors/404.html +39 -0
  222. data/lib/generators/coalla/cms/templates/errors/422.html +39 -0
  223. data/lib/generators/coalla/cms/templates/errors/500.html +39 -0
  224. data/lib/generators/coalla/cms/templates/initializers/carrierwave.rb +98 -0
  225. data/lib/generators/coalla/cms/templates/locales/activerecord.en.yml +16 -0
  226. data/lib/generators/coalla/cms/templates/locales/activerecord.ru.yml +29 -0
  227. data/lib/generators/coalla/cms/templates/locales/admin.en.yml +27 -0
  228. data/lib/generators/coalla/cms/templates/locales/admin.ru.yml +27 -0
  229. data/lib/generators/coalla/cms/templates/locales/devise.ru.yml +59 -0
  230. data/lib/generators/coalla/cms/templates/migration.rb +11 -0
  231. data/lib/generators/coalla/cms/templates/migration_existing.rb +15 -0
  232. data/lib/generators/coalla/cms/templates/schedule.rb +3 -0
  233. data/lib/generators/coalla/cms/templates/structure.rb +0 -0
  234. data/lib/generators/coalla/cms/templates/views/admin/administrators/_form.html.haml +9 -0
  235. data/lib/generators/coalla/cms/templates/views/admin/administrators/edit.html.haml +5 -0
  236. data/lib/generators/coalla/cms/templates/views/admin/administrators/index.html.haml +15 -0
  237. data/lib/generators/coalla/cms/templates/views/admin/administrators/new.html.haml +4 -0
  238. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/_form.html.haml.erb +14 -0
  239. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/edit.html.haml.erb +5 -0
  240. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/index.html.haml.erb +15 -0
  241. data/lib/generators/coalla/cms/templates/views/admin/scaffold_template/new.html.haml.erb +4 -0
  242. data/lib/generators/coalla/cms/templates/views/administrators/sessions/new.html.haml +19 -0
  243. data/lib/generators/coalla/cms/templates/views/home/index.html.haml.erb +1 -0
  244. data/lib/generators/coalla/cms/wysiwyg/ckeditor_generator.rb +17 -0
  245. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/mediaembed/icons/hidpi/mediaembed.png +0 -0
  246. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/mediaembed/icons/mediaembed.png +0 -0
  247. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/mediaembed/plugin.js +64 -0
  248. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/LICENSE.txt +303 -0
  249. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad-gallery-css-diff.htm +831 -0
  250. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_next.png +0 -0
  251. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_prev.png +0 -0
  252. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_scroll_back.png +0 -0
  253. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/ad_scroll_forward.png +0 -0
  254. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.css +185 -0
  255. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.js +984 -0
  256. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.min - ref.js +10 -0
  257. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/jquery.ad-gallery.min.js +1 -0
  258. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/loader.gif +0 -0
  259. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/opa75.png +0 -0
  260. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/placeholder.png +0 -0
  261. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/ad-gallery/trans.gif +0 -0
  262. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/blank.gif +0 -0
  263. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_loading.gif +0 -0
  264. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_loading@2x.gif +0 -0
  265. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_overlay.png +0 -0
  266. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_sprite.png +0 -0
  267. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/fancybox_sprite@2x.png +0 -0
  268. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/fancybox_buttons.png +0 -0
  269. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-buttons.css +97 -0
  270. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-buttons.js +122 -0
  271. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-media.js +199 -0
  272. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-thumbs.css +55 -0
  273. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/helpers/jquery.fancybox-thumbs.js +162 -0
  274. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/jquery.fancybox.css +274 -0
  275. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/jquery.fancybox.js +2020 -0
  276. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/3rdParty/fancybox2/jquery.fancybox.pack.js +46 -0
  277. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/README.md +66 -0
  278. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/dialogs/slideshow.js +1396 -0
  279. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/dialogs/slideshow.min.js +1 -0
  280. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/icons/placeholder.png +0 -0
  281. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/icons/slideshow.png +0 -0
  282. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/lang/Serbian_translation.txt +9 -0
  283. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/lang/el.js +37 -0
  284. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/lang/en.js +35 -0
  285. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/lang/fr.js +35 -0
  286. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/lang/ru.js +35 -0
  287. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/lang/sr-latn.js +35 -0
  288. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/lang/sr.js +35 -0
  289. data/lib/generators/coalla/cms/wysiwyg/templates/ckeditor/plugins/slideshow/plugin.js +217 -0
  290. metadata +613 -0
@@ -0,0 +1,29 @@
1
+ module AdminHelper
2
+
3
+ def admin_paginate(collection, options={})
4
+ will_paginate collection, {renderer: BootstrapLinkRenderer, inner_window: 2}.merge(options)
5
+ end
6
+
7
+ def render_slides(form, title, collection_name, options = {})
8
+ slider_class = options.delete(:slider_class_name) || SliderImage
9
+ multiple = options.has_key?(:multiple) ? options.delete(:multiple) : true
10
+ edit_allowed = options.has_key?(:edit_allowed) ? options.delete(:edit_allowed) : true
11
+ render 'admin/common/slides', form: form, title: title, slides: collection_name, slider_class: slider_class, multiple: multiple, edit_allowed: edit_allowed
12
+ end
13
+
14
+ def generate_slider_template(form_builder, options = {})
15
+ escape_javascript(generate_slider_html(form_builder, options))
16
+ end
17
+
18
+ def generate_slider_html(form_builder, options = {})
19
+ options[:object] ||= options[:class].new
20
+ options[:form_builder_local] ||= :lb
21
+ options[:locals] ||= {}
22
+
23
+ collection_name = options[:collection]
24
+ form_builder.fields_for(collection_name, options[:object], child_index: 'NEW_RECORD') do |f|
25
+ render(partial: options[:partial], locals: options[:locals].merge({options[:form_builder_local] => f}))
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,22 @@
1
+ require 'standalone_typograf'
2
+
3
+ module CommonHelper
4
+
5
+ def copyright(start_year)
6
+ current_year = Date.today.year
7
+ if current_year > start_year
8
+ "#{start_year} - #{current_year}".html_safe
9
+ else
10
+ "#{current_year}"
11
+ end
12
+ end
13
+
14
+ def hide_style(style)
15
+ 'display: none;' + style
16
+ end
17
+
18
+ def ty(text)
19
+ ::StandaloneTypograf::Typograf.new(text, mode: :html).prepare.html_safe
20
+ end
21
+
22
+ end
@@ -0,0 +1,72 @@
1
+ module LookupHelper
2
+
3
+ def lookup(code, default = nil, &block)
4
+ _lookup(code, 'string', default, &block)
5
+ end
6
+
7
+ def integer_lookup(code, default = nil, &block)
8
+ _lookup(code, 'integer', default, &block).to_i
9
+ end
10
+
11
+ def float_lookup(code, default = nil, &block)
12
+ _lookup(code, 'float', default, &block).to_f
13
+ end
14
+
15
+ def boolean_lookup(code, default = nil, &block)
16
+ _lookup(code, 'boolean', default, &block) == '1'
17
+ end
18
+
19
+ def enum_lookup_value(code, default = nil, &block)
20
+ _lookup(code, 'enum', default, &block).to_sym
21
+ end
22
+
23
+ def file_lookup(code)
24
+ Lookup.find_by(code: code, type_code: 'file')
25
+ end
26
+
27
+ def enum_lookup_text(code)
28
+ value = enum_lookup_value(code)
29
+ return if value.blank?
30
+ l = Lookup.where(code: code, type_code: 'enum').first
31
+ l.value_options[value]
32
+ end
33
+
34
+ def memo_lookup(code, default = nil, &block)
35
+ sf(unsafe_memo_lookup(code, default, &block))
36
+ end
37
+
38
+ def unsafe_memo_lookup(code, default = nil, &block)
39
+ _lookup(code, 'memo', default, &block)
40
+ end
41
+
42
+ def wysiwyg_lookup(code, default = nil, &block)
43
+ raw(_lookup(code, 'wysiwyg', default, &block))
44
+ end
45
+
46
+ def lookup_name(code)
47
+ t("lookups.#{code}")
48
+ end
49
+
50
+ def sf(text)
51
+ h(text).gsub("\n", "<br/>").html_safe
52
+ end
53
+
54
+ private
55
+
56
+ def _lookup(code, type, default, &block)
57
+ l = Lookup.where(code: code, type_code: type).first
58
+ return l.value if l
59
+
60
+ value = if block.present?
61
+ capture(self, &block)
62
+ else
63
+ default
64
+ end
65
+ value = value.strip if value
66
+
67
+ l = Lookup.create!(code: code, value: value, type_code: type)
68
+
69
+ l.reload.value
70
+ end
71
+
72
+ end
@@ -0,0 +1,12 @@
1
+ module NestedFieldsHelper
2
+
3
+ def link_to_add_fields(name, builder, association)
4
+ new_object = builder.object.send(association).klass.new
5
+ id = new_object.object_id
6
+ fields = builder.fields_for(association, new_object, child_index: id) do |builder|
7
+ render 'admin/common/nested_fields_for_element', builder: builder, partial: "#{association.to_s.singularize}_fields"
8
+ end
9
+ link_to(name, '#', class: 'add_fields btn btn-success', data: {id: id, fields: fields.gsub("\n", '')})
10
+ end
11
+
12
+ end
@@ -0,0 +1,25 @@
1
+ class StaticTextFormatter
2
+
3
+ def initialize(object)
4
+ @object = object
5
+ @columns = @object.class.columns.index_by(&:name).with_indifferent_access
6
+ end
7
+
8
+ def format(method)
9
+ method_value = @object.send(method)
10
+ if method_value
11
+ if @columns[method]
12
+ method_type = @columns[method].type
13
+ if method_type == :datetime
14
+ method_value = method_value.localtime if method_value.respond_to?(:localtime)
15
+ Russian.strftime(method_value, '%d.%m.%Y %H:%M')
16
+ else
17
+ method_value
18
+ end
19
+ else
20
+ method_value
21
+ end
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,253 @@
1
+ #encoding: utf-8
2
+ module TwitterBuilderHelper
3
+
4
+ ALIGN_CLASSES = {left: 't-left', center: 't-center', right: 't-right'}
5
+
6
+ class ColumnDefinition
7
+ attr_accessor :title, :cols, :col_class, :value_extractor, :align
8
+
9
+ def value(item, context = self)
10
+ self.value_extractor.call(item)
11
+ end
12
+
13
+ end
14
+
15
+ class ActionsColumnDefinition < ColumnDefinition
16
+
17
+ def initialize
18
+ self.title = I18n.t('admin.common.actions')
19
+ @actions = []
20
+ end
21
+
22
+ def cols
23
+ @cols || @actions.size % 2 + @actions.size / 2
24
+ end
25
+
26
+ def col_class
27
+ "col-xs-#{cols}"
28
+ end
29
+
30
+ def cols=(value)
31
+ @cols = value
32
+ end
33
+
34
+ def value(item, context = self)
35
+ @actions.collect do |action|
36
+ options = action.second
37
+ if options[:if]
38
+ context.instance_exec(item, &action.first) if options[:if].call(item)
39
+ else
40
+ context.instance_exec(item, &action.first)
41
+ end
42
+ end.compact.join(' ').html_safe
43
+ end
44
+
45
+ def action(method, options = {})
46
+ @actions << case method
47
+ when :edit
48
+ [->(item) { edit_link(send("edit_admin_#{item.class.name.underscore.sub('/', '_')}_path", item)) }, options]
49
+ when :delete
50
+ [->(item) { delete_link([:admin, item]) }, options]
51
+ when Proc
52
+ [method, options]
53
+ else
54
+ raise "unsupported method: #{method.inspect}"
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ class TableBuilder
61
+
62
+ def initialize(parent, model_class)
63
+ @parent, @model_class = parent, model_class
64
+ @columns = []
65
+ @actions_column = ActionsColumnDefinition.new
66
+ @action_column_on_left = false
67
+ @table_helpers = TableHelpers.for(@model_class, @parent)
68
+ end
69
+
70
+ def content collection, &block
71
+ @collection = collection
72
+ block.call(self) if block_given?
73
+ create_content
74
+ end
75
+
76
+ # Метод добавляет столбец к таблице
77
+ def column(method, options = {})
78
+ helper = @table_helpers[method]
79
+ cd = ColumnDefinition.new
80
+ cd.title = options[:title] || I18n.t("activerecord.attributes.#{@model_class.model_name.singular}.#{method}")
81
+ cd.cols = options[:cols]
82
+ cd.col_class = options[:class]
83
+ cd.value_extractor = ->(item) { helper.format_value(item, options[:format]) }
84
+ cd.align = options[:align] || helper.respond_to?(:align) && "t-#{helper.align}"
85
+ @columns << cd
86
+ end
87
+
88
+ # Метод позволяет передать блок, который должен вычислять класс для строки. В этот блок передается объект,
89
+ # по которому данная строка рендерится. Таким образом, можно управлять, например, цветом строки в зависимости
90
+ # от состояния объекта (статусы заказов и прочее).
91
+ def row_class lmb
92
+ @row_class = lmb
93
+ end
94
+
95
+ # Метод добавляет кнопку в столбец действий
96
+ def action(value, options = {})
97
+ add_action(value, options)
98
+ end
99
+
100
+ # Метод добавляет кнопку редактирования сущности в столбец действий
101
+ def edit(options = {})
102
+ add_action(:edit, options)
103
+ end
104
+
105
+ # Метод добавляет кнопку удаления сущности в столбец действий
106
+ def delete(options = {})
107
+ add_action(:delete, options)
108
+ end
109
+
110
+ # Метод добавляет кнопки добавления и удаления сущностей в столбец действий
111
+ def edit_and_delete(options = {})
112
+ self.edit(options)
113
+ self.delete(options)
114
+ end
115
+
116
+ private
117
+
118
+ def add_action(value, options)
119
+ @action_column_on_left = true if @columns.empty?
120
+ @actions_column.action(value, options)
121
+ end
122
+
123
+ def all_columns
124
+ @action_column_on_left ? [@actions_column] + @columns : @columns + [@actions_column]
125
+ end
126
+
127
+ def create_content
128
+ @parent.render(partial: '/admin/common/table_template', locals: {definitions: all_columns, items: @collection, row_class: @row_class})
129
+ end
130
+ end
131
+
132
+ def twitter_form_for(name, *args, &block)
133
+ options = args.extract_options!
134
+ form_for(name, *(args << options.deep_merge(builder: TwitterFormBuilder, html: {class: 'form-horizontal'})), &block)
135
+ end
136
+
137
+ def field_set title = nil, &block
138
+ content = capture(self, &block)
139
+ content = content_tag(:legend, title) + content if title
140
+ content_tag :fieldset, content
141
+ end
142
+
143
+ def actions &block
144
+ content = capture(self, &block)
145
+ content_tag :div, content, class: 'well'
146
+ end
147
+
148
+ def standard_actions(form)
149
+ fixed_actions { form.save + form.apply + form.cancel }
150
+ end
151
+
152
+ def fixed_actions &block
153
+ panel_tag = actions(&block)
154
+ content_tag :div, panel_tag, class: 'action-bar'
155
+ end
156
+
157
+ def flash_warning_messages
158
+ r = if flash[:admin_warning]
159
+ "<div class='row'>
160
+ <div class='col-md-8 col-md-offset-2'>
161
+ <div class='alert alert-danger'>
162
+ <button data-dismiss='alert' class='close' type='button'>&times;</button>
163
+ <p>#{h(flash[:admin_warning])}</p>
164
+ </div>
165
+ </div>
166
+ </div>"
167
+ end
168
+ r && r.html_safe
169
+ end
170
+
171
+ def flash_alert_messages
172
+ r = if flash[:alert]
173
+ "<div class='row'>
174
+ <div class='col-md-8 col-md-offset-2'>
175
+ <div class='alert alert-danger'>
176
+ <button data-dismiss='alert' class='close' type='button'>&times;</button>
177
+ <p>#{h(flash[:alert])}</p>
178
+ </div>
179
+ </div>
180
+ </div>"
181
+ end
182
+ r && r.html_safe
183
+ end
184
+
185
+ def flash_success_messages
186
+ r = if flash[:admin_success]
187
+ "<div class='row'>
188
+ <div class='col-md-8 col-md-offset-2'>
189
+ <div class='alert alert-success'>
190
+ <button data-dismiss='alert' class='close' type='button'>&times;</button>
191
+ <p>#{h(flash[:admin_success])}</p>
192
+ </div>
193
+ </div>
194
+ </div>"
195
+ end
196
+ r && r.html_safe
197
+ end
198
+
199
+ def flash_messages
200
+ [flash_warning_messages, flash_success_messages].compact.join.html_safe
201
+ end
202
+
203
+ def create_link path
204
+ content = "<i class='glyphicon glyphicon-plus'></i>&nbsp;&nbsp;#{I18n.t('admin.common.new')}".html_safe
205
+ link_to content, path, class: 'btn btn-success'
206
+ end
207
+
208
+ def sort_link path
209
+ content = "<i class='glyphicon glyphicon-random'></i>&nbsp;&nbsp;#{I18n.t('admin.common.sort')}".html_safe
210
+ link_to content, path, class: 'btn btn-primary'
211
+ end
212
+
213
+ def edit_link path
214
+ content = "<i class='glyphicon glyphicon-pencil'></i>".html_safe
215
+ link_to content, path, class: 'btn btn-default btn-xs', title: I18n.t('admin.common.edit')
216
+ end
217
+
218
+ def delete_link path
219
+ content = "<i class='glyphicon glyphicon-trash'></i>".html_safe
220
+ link_to content, path, data: {confirm: I18n.t('admin.common.sure')}, method: :delete, class: 'btn btn-danger btn-xs', title: I18n.t('admin.common.delete')
221
+ end
222
+
223
+ def cancel_action path, name = I18n.t('admin.common.cancel')
224
+ link_to name, path, class: 'btn btn-default'
225
+ end
226
+
227
+ def back_action name = I18n.t('admin.common.return'), path = back_uri
228
+ link_to name, path, class: 'btn btn-default'
229
+ end
230
+
231
+ def table_for a_class
232
+ TableBuilder.new(self, a_class)
233
+ end
234
+
235
+ def th_class(column)
236
+ klass = []
237
+ klass << "col-xs-#{column.cols}" if column.cols
238
+ klass << ALIGN_CLASSES[column.align] if column.align
239
+ klass.join(' ')
240
+ end
241
+
242
+ def tr_class(row_class, item)
243
+ row_class && row_class.call(item)
244
+ end
245
+
246
+ def td_class(column)
247
+ klass = []
248
+ klass << column.col_class
249
+ klass << ALIGN_CLASSES[column.align] if column.align
250
+ klass.join(' ')
251
+ end
252
+
253
+ end
@@ -0,0 +1,202 @@
1
+ #encoding: utf-8
2
+ class TwitterFormBuilder < ActionView::Helpers::FormBuilder
3
+ include ActionView::Helpers::FormTagHelper
4
+
5
+ COLS_CLASS = 'col-md-8'
6
+
7
+ def errors
8
+ return nil unless @object.errors.any?
9
+
10
+ messages = @object.errors.full_messages.collect do |msg|
11
+ "<p>#{ERB::Util.h(msg)}</p>".html_safe
12
+ end
13
+
14
+ content_tag(:div,
15
+ content_tag(:div,
16
+ content_tag(:div,
17
+ content_tag(:button, '&times;'.html_safe, class: 'close', type: 'button', :'data-dismiss' => 'alert') + messages.join('').html_safe,
18
+ class: 'alert alert-danger'),
19
+ class: 'col-md-8 col-md-offset-2'),
20
+ class: 'row')
21
+ end
22
+
23
+ def static_text(method, options = {})
24
+ row method, content_tag(:p, static_text_formatter.format(method), class: 'form-control-static'), options
25
+ end
26
+
27
+ # Displays multi-line static text in form
28
+ def static_memo_text(method, options = {})
29
+ row method, simple_format(@object.send(method), class: 'form-control-static'), options
30
+ end
31
+
32
+ def string method, options = {}
33
+ row method, text_field(method, with_default_options(options)), options
34
+ end
35
+
36
+ def combobox method, choices, options = {}, html_options = {}
37
+ row method, select(method, choices, options, with_default_options(html_options)), div_class: options.delete(:div_class) || 'col-md-6'
38
+ end
39
+
40
+ def enum(method, options = {}, html_options = {})
41
+ combobox method, object.class.send(method.to_s.pluralize).collect { |s| [s[0].humanize, s[0]] }, options, html_options
42
+ end
43
+
44
+ def enumerize(method, options = {}, html_options = {})
45
+ combobox method, object.class.send(method).values.collect { |s| [s.text, s] }, options, html_options
46
+ end
47
+
48
+ def list_all_combobox(association_name, options = {}, html_options = {})
49
+ collection_class = object.class.reflect_on_association(association_name).klass
50
+ combobox("#{association_name}_id", collection_class.all.sort_by(&:name).map { |element| [element.name, element.id] }, {include_blank: true}.merge(options), html_options)
51
+ end
52
+
53
+ def textarea method, options = {}
54
+ row method, text_area(method, with_default_options(options)), options
55
+ end
56
+
57
+ def checkbox method, options = {}
58
+ row method, content_tag(:div, check_box(method, options), class: 'checkbox'), options
59
+ end
60
+
61
+ def wysiwyg method, options = {}
62
+ textarea method, with_default_options(merge_classes(options, 'wymeditor'))
63
+ end
64
+
65
+ def ckeditor(method, options = {})
66
+ row method, cktext_area(method, with_default_options(options))
67
+ end
68
+
69
+ def password method, options = {}
70
+ row method, password_field(method, with_default_options(options)), options
71
+ end
72
+
73
+ def date method, options = {}
74
+ string(method, merge_options({data: {'calendar-date' => true}, div_class: 'col-md-2'}, options))
75
+ end
76
+
77
+ def datetime(method, options = {})
78
+ value = object.try(method).try(:strftime, '%Y-%m-%d %H:%M')
79
+ string(method, merge_options({data: {'calendar-datetime' => true}, div_class: 'col-md-3', value: value}, options))
80
+ end
81
+
82
+ def time(method, options = {})
83
+ value = object.try(method).try(:strftime, '%H:%M')
84
+ string(method, merge_options({data: {'calendar-time' => true}, div_class: 'col-md-2', value: value}, options))
85
+ end
86
+
87
+ def save text = I18n.t('admin.common.save')
88
+ submit text, name: :save, class: 'btn btn-success wymupdate'
89
+ end
90
+
91
+ def apply text = I18n.t('admin.common.apply')
92
+ submit text, name: :apply, class: 'btn btn-default wymupdate'
93
+ end
94
+
95
+ def cancel
96
+ @template.back_action
97
+ end
98
+
99
+ # Editing has_many collection
100
+ # parameters: association - name of has_many association
101
+ # association should be defined as accepts_nested_attributes with allow_destroy = true in model
102
+ # You should create partial with name #{association)_fields
103
+ def nested_fields_for(association)
104
+ @template.render 'admin/common/nested_fields_for', f: self, section_name: @object.class.human_attribute_name(association), collection: association
105
+ end
106
+
107
+ def image_upload method, options = {}
108
+ version = options[:version]
109
+
110
+ uri = if version.present?
111
+ @object.send("#{method}_url", version)
112
+ else
113
+ @object.send("#{method}_url")
114
+ end
115
+
116
+ if options[:size]
117
+ url = uri || 'placeholder'
118
+ else
119
+ url = uri
120
+ end
121
+
122
+ upload_uri = options[:upload_path]
123
+ unless upload_uri
124
+ upload_uri = @template.admin_upload_image_path(image_class: @object.class.name.underscore, field: method)
125
+ end
126
+ @template.render partial: '/admin/common/image_upload_template', locals: {
127
+ f: self, url: url, size: options[:size],
128
+ version: version || '',
129
+ title: options[:title] || '',
130
+ text: options[:text],
131
+ field: method, upload_uri: upload_uri,
132
+ container: options[:parent_id] || upload_container_id(method),
133
+ options: options.delete(:options) || {},
134
+ image_style: options.delete(:image_style) || ''
135
+ }
136
+ end
137
+
138
+ def file_upload method
139
+ @template.render partial: '/admin/common/file_upload_template', locals: {
140
+ f: self,
141
+ field: method
142
+ }
143
+ end
144
+
145
+ def multi_field(relation_name, options = {})
146
+ reflection = self.object.class.reflections[relation_name] || self.object.class.reflections[relation_name.to_s]
147
+ options = {search_field_name: :name,
148
+ show_all_on_focus: false,
149
+ use_cache: true,
150
+ relation_model_name: reflection.klass.model_name.singular}.merge!(options)
151
+ options[:source] ||= @template.admin_autocomplete_path(options[:relation_model_name], options[:search_field_name])
152
+ string "#{relation_name}_tokens", title: self.object.class.human_attribute_name(relation_name),
153
+ data: {
154
+ multi_field: true,
155
+ source: options[:source],
156
+ pre: self.object.send("#{relation_name}_json", options[:search_field_name]),
157
+ show_all_on_focus: options[:show_all_on_focus],
158
+ use_cache: options[:use_cache],
159
+ object_url_name: options[:object_url_name]}
160
+ end
161
+
162
+ def row(method, controls, options = {})
163
+ label_class = options[:label_class] || 'control-label col-md-4 col-lg-2'
164
+ label_tag = label(method, options[:title], class: label_class) unless options[:hide_label]
165
+ options[:div_class] ||= COLS_CLASS
166
+ div_tag = content_tag :div, controls.html_safe, class: options[:div_class]
167
+ content_tag :div, "#{label_tag}#{div_tag}".html_safe, class: 'form-group'
168
+ end
169
+
170
+ private
171
+
172
+ def upload_container_id(method)
173
+ fake_method = "#{method}_upload"
174
+ ActionView::Helpers::Tags::Base.new(@object_name, fake_method, @template).send(:tag_id)
175
+ end
176
+
177
+ def with_default_options(options)
178
+ merge_classes(options, 'form-control')
179
+ options
180
+ end
181
+
182
+ def merge_classes(options, *clazz)
183
+ classes = [options[:class]].compact
184
+ classes.push(*clazz)
185
+ options[:class] = classes.uniq.join(' ')
186
+ options
187
+ end
188
+
189
+ def merge_options(default_options, options)
190
+ return default_options if options.blank?
191
+ new_options = default_options.merge(options)
192
+ if default_options.has_key?(:data) && options.has_key?(:data)
193
+ new_options[:data] = default_options[:data].merge(options[:data])
194
+ end
195
+ new_options
196
+ end
197
+
198
+ def static_text_formatter
199
+ @static_text_formatter ||= StaticTextFormatter.new(@object)
200
+ end
201
+
202
+ end