rademade_admin 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  3. data/app/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  4. data/app/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  5. data/app/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  6. data/app/assets/images/rademade_admin/ico/btn-attach.png +0 -0
  7. data/app/assets/images/rademade_admin/logos/logo.png +0 -0
  8. data/app/assets/javascripts/rademade_admin.coffee +8 -4
  9. data/app/assets/javascripts/rademade_admin/app/app.coffee +2 -1
  10. data/app/assets/javascripts/rademade_admin/app/common/datetime-picker.coffee +7 -0
  11. data/app/assets/javascripts/rademade_admin/app/common/dnd-sort.coffee +23 -32
  12. data/app/assets/javascripts/rademade_admin/app/common/droplist.coffee +8 -0
  13. data/app/assets/javascripts/rademade_admin/app/common/lang-panel.coffee +6 -0
  14. data/app/assets/javascripts/rademade_admin/app/common/related-index.coffee +6 -9
  15. data/app/assets/javascripts/rademade_admin/app/common/sort-list.coffee +10 -14
  16. data/app/assets/javascripts/rademade_admin/app/common/uploader.coffee +3 -3
  17. data/app/assets/javascripts/rademade_admin/app/form-popup/initializer.coffee +24 -37
  18. data/app/assets/javascripts/rademade_admin/app/form-popup/view.coffee +32 -18
  19. data/app/assets/javascripts/rademade_admin/app/forms/remove.coffee +4 -3
  20. data/app/assets/javascripts/rademade_admin/app/select2/model.coffee +7 -0
  21. data/app/assets/javascripts/rademade_admin/app/select2/related/collection-view.coffee +35 -0
  22. data/app/assets/javascripts/rademade_admin/app/select2/related/collection.coffee +28 -0
  23. data/app/assets/javascripts/rademade_admin/app/select2/related/model.coffee +15 -0
  24. data/app/assets/javascripts/rademade_admin/app/select2/related/view.coffee +40 -0
  25. data/app/assets/javascripts/rademade_admin/app/select2/view.coffee +78 -0
  26. data/app/assets/javascripts/rademade_admin/form/form-ajax.coffee +48 -0
  27. data/app/assets/javascripts/rademade_admin/form/form-initializater.coffee +45 -0
  28. data/app/assets/javascripts/rademade_admin/form/form-validation.coffee +42 -0
  29. data/app/assets/javascripts/rademade_admin/form/form.coffee +62 -0
  30. data/app/assets/javascripts/rademade_admin/library/ckeditor/config.js +14 -12
  31. data/app/assets/stylesheets/{rademade_admin/bootstrap → old/-bootstrap}/bootstrap-overrides.css.erb +0 -0
  32. data/app/assets/stylesheets/{rademade_admin/bootstrap → old/-bootstrap}/main.scss.erb +0 -0
  33. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/chart-showcase.scss.erb +0 -0
  34. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/datatables.scss.erb +0 -0
  35. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/elements.scss.erb +0 -0
  36. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/error.scss.erb +0 -0
  37. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/form-showcase.scss.erb +0 -0
  38. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/form-wizard.scss.erb +0 -0
  39. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/gallery.scss.erb +0 -0
  40. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/grids.scss.erb +0 -0
  41. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/icons.scss.erb +0 -0
  42. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/index.scss.erb +0 -0
  43. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/layout.scss.erb +0 -0
  44. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/new-user.scss.erb +0 -0
  45. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/personal-info.scss.erb +0 -0
  46. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/popup.scss.erb +0 -0
  47. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/signin.scss.erb +0 -0
  48. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/tables.scss.erb +0 -0
  49. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/ui-elements.scss.erb +0 -0
  50. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/user-list.scss.erb +0 -0
  51. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/user-profile.scss.erb +0 -0
  52. data/app/assets/stylesheets/{rademade_admin/detail_admin → old/-detail_admin}/web-app-icons.scss.erb +0 -0
  53. data/app/assets/stylesheets/{rademade_admin/lib → old/-lib}/bootstrap.datepicker.css.erb +0 -0
  54. data/app/assets/stylesheets/{rademade_admin/lib → old/-lib}/morris.css.erb +0 -0
  55. data/app/assets/stylesheets/{rademade_admin → old}/base.scss.erb +0 -0
  56. data/app/assets/stylesheets/{rademade_admin → old}/edit.css +0 -0
  57. data/app/assets/stylesheets/{rademade_admin → old}/file-upload.scss.erb +0 -0
  58. data/app/assets/stylesheets/{rademade_admin → old}/notifier.custom.css.erb +0 -0
  59. data/app/assets/stylesheets/{rademade_admin → old}/scaffolds.scss.erb +0 -0
  60. data/app/assets/stylesheets/rademade_admin.sass.erb +96 -0
  61. data/app/assets/stylesheets/rademade_admin/base/main.sass +71 -0
  62. data/app/assets/stylesheets/rademade_admin/blocks/buttons/main.sass +81 -0
  63. data/app/assets/stylesheets/rademade_admin/blocks/form/input.sass +29 -0
  64. data/app/assets/stylesheets/rademade_admin/blocks/form/label.sass +31 -0
  65. data/app/assets/stylesheets/rademade_admin/blocks/form/select.sass +26 -0
  66. data/app/assets/stylesheets/rademade_admin/blocks/form/select2.sass +67 -0
  67. data/app/assets/stylesheets/rademade_admin/blocks/form/table.sass +42 -0
  68. data/app/assets/stylesheets/rademade_admin/blocks/form/texarea.sass +20 -0
  69. data/app/assets/stylesheets/rademade_admin/blocks/header/_logo.sass +7 -0
  70. data/app/assets/stylesheets/rademade_admin/blocks/header/_menu.sass +80 -0
  71. data/app/assets/stylesheets/rademade_admin/blocks/header/_search.sass +37 -0
  72. data/app/assets/stylesheets/rademade_admin/blocks/page/content/_main.sass +11 -0
  73. data/app/assets/stylesheets/rademade_admin/blocks/page/headline/main.sass +44 -0
  74. data/app/assets/stylesheets/rademade_admin/blocks/page/menu/_main.sass +31 -0
  75. data/app/assets/stylesheets/rademade_admin/lib/datepicker.sass +373 -0
  76. data/app/assets/stylesheets/rademade_admin/lib/glyphicon.sass.erb +618 -0
  77. data/app/assets/stylesheets/rademade_admin/lib/notifier.css.erb +661 -0
  78. data/app/assets/stylesheets/rademade_admin/lib/uploader.sass +66 -0
  79. data/app/assets/stylesheets/rademade_admin/mixins/clear.sass +5 -0
  80. data/app/assets/stylesheets/rademade_admin/mixins/fonts.sass +8 -0
  81. data/app/assets/stylesheets/rademade_admin/mixins/sprite.sass +7 -0
  82. data/app/assets/stylesheets/rademade_admin/mixins/text-overflow.sass +6 -0
  83. data/app/assets/stylesheets/rademade_admin/mixins/user-select.sass +5 -0
  84. data/app/assets/stylesheets/rademade_admin/modules/breadcrumbs/main.sass +30 -0
  85. data/app/assets/stylesheets/rademade_admin/modules/errors/error.sass.erb +19 -0
  86. data/app/assets/stylesheets/rademade_admin/modules/form/main.sass +15 -0
  87. data/app/assets/stylesheets/rademade_admin/modules/header/main.sass +6 -0
  88. data/app/assets/stylesheets/rademade_admin/modules/login/_main.sass +79 -0
  89. data/app/assets/stylesheets/rademade_admin/modules/main-menu/main.sass +0 -0
  90. data/app/assets/stylesheets/rademade_admin/modules/page/main.sass +16 -0
  91. data/app/assets/stylesheets/rademade_admin/modules/pagination/main.sass +51 -0
  92. data/app/assets/stylesheets/rademade_admin/modules/popup/new.sass +18 -0
  93. data/app/assets/stylesheets/rademade_admin/var/colors.sass +0 -0
  94. data/app/assets/stylesheets/rademade_admin/var/images.sass +2 -0
  95. data/app/assets/stylesheets/rademade_admin/var/width.sass +13 -0
  96. data/app/controllers/rademade_admin/abstract_controller.rb +18 -2
  97. data/app/controllers/rademade_admin/application_controller.rb +1 -1
  98. data/app/controllers/rademade_admin/dashboard_controller.rb +1 -1
  99. data/app/controllers/rademade_admin/file_controller.rb +25 -0
  100. data/app/controllers/rademade_admin/model_controller.rb +66 -47
  101. data/app/controllers/rademade_admin/sessions_controller.rb +3 -3
  102. data/app/helpers/rademade_admin/field_helper.rb +21 -32
  103. data/app/helpers/rademade_admin/form_helper.rb +57 -27
  104. data/app/helpers/rademade_admin/menu_helper.rb +12 -5
  105. data/app/helpers/rademade_admin/uri_helper.rb +50 -62
  106. data/app/inputs/rademade_admin/date_time_input.rb +13 -0
  107. data/app/inputs/rademade_admin/file_input.rb +72 -0
  108. data/app/inputs/rademade_admin/related_select_input.rb +78 -0
  109. data/app/serializers/autocomplete/link_serializer.rb +6 -4
  110. data/app/services/linker.rb +8 -14
  111. data/app/services/login.rb +5 -3
  112. data/app/services/model_controller/breadcrumbs.rb +36 -0
  113. data/app/services/model_controller/instance_options.rb +7 -5
  114. data/app/services/model_controller/model_options.rb +10 -7
  115. data/app/services/model_controller/notifier.rb +10 -6
  116. data/app/services/model_controller/templates.rb +4 -3
  117. data/app/services/relation_service.rb +11 -0
  118. data/app/services/saver.rb +59 -24
  119. data/app/services/search/conditions/abstract.rb +15 -14
  120. data/app/services/search/conditions/autocomplete.rb +11 -9
  121. data/app/services/search/conditions/list.rb +6 -5
  122. data/app/services/search/conditions/related_list.rb +17 -13
  123. data/app/services/search/{conditions/part/where.rb → part/abstract.rb} +7 -9
  124. data/app/services/search/part/order.rb +17 -0
  125. data/app/services/search/part/where.rb +19 -0
  126. data/app/services/sortable_service.rb +27 -27
  127. data/app/services/template_service.rb +68 -0
  128. data/app/services/upload/preview_service.rb +86 -0
  129. data/app/views/layouts/rademade_admin.html.erb +13 -4
  130. data/app/views/rademade_admin/_blocks/_header.html.erb +35 -28
  131. data/app/views/rademade_admin/_blocks/_menu.html.erb +20 -23
  132. data/app/views/rademade_admin/_blocks/_on_page_select.html.erb +15 -0
  133. data/app/views/rademade_admin/_blocks/_pagination.html.erb +1 -18
  134. data/app/views/rademade_admin/_blocks/_sub_menu.html.erb +3 -3
  135. data/app/views/rademade_admin/_blocks/form/_control.html.erb +3 -0
  136. data/app/views/rademade_admin/_blocks/form/_lang_panel.html.erb +19 -0
  137. data/app/views/rademade_admin/_blocks/sub_menu/_link.html.erb +6 -5
  138. data/app/views/rademade_admin/_blocks/table/_head.html.erb +13 -0
  139. data/app/views/rademade_admin/_layouts/inner.html.erb +21 -33
  140. data/app/views/rademade_admin/_layouts/inner/form.html.erb +6 -13
  141. data/app/views/rademade_admin/_layouts/inner/index_table.html.erb +31 -55
  142. data/app/views/rademade_admin/_layouts/inner/related_index_table.html.erb +26 -54
  143. data/app/views/rademade_admin/abstract/_form.html.erb +6 -9
  144. data/app/views/rademade_admin/abstract/edit.html.erb +3 -8
  145. data/app/views/rademade_admin/abstract/index.html.erb +38 -67
  146. data/app/views/rademade_admin/abstract/new.html.erb +3 -8
  147. data/app/views/rademade_admin/abstract/related.html.erb +48 -0
  148. data/app/views/rademade_admin/dashboard/index.html.erb +4 -5
  149. data/app/views/rademade_admin/dashboard/login.html.erb +19 -30
  150. data/config/initializers/carrier_wave/mongoid.rb +48 -0
  151. data/config/initializers/ckeditor.rb +3 -0
  152. data/config/initializers/kaminari_route_proxy.rb +16 -0
  153. data/config/initializers/simple_form.rb +147 -0
  154. data/config/initializers/simple_form/rademade_component.rb +9 -0
  155. data/config/initializers/simple_form/wrappers.rb +28 -0
  156. data/config/locales/rademade_admin.en.yml +28 -0
  157. data/config/locales/simple_form.en.yml +26 -0
  158. data/config/routes.rb +1 -2
  159. data/lib/rademade_admin.rb +7 -5
  160. data/lib/rademade_admin/bower/performer.rb +1 -1
  161. data/lib/rademade_admin/breadcrumbs/render/rademade.rb +31 -0
  162. data/lib/rademade_admin/engine.rb +2 -2
  163. data/lib/rademade_admin/input/related_select_input/model_data.rb +40 -0
  164. data/lib/rademade_admin/input/related_select_input/related_list.rb +60 -0
  165. data/lib/rademade_admin/model/adapter/data.rb +119 -0
  166. data/lib/rademade_admin/model/adapter/data/active_record.rb +109 -0
  167. data/lib/rademade_admin/model/adapter/data/mongoid.rb +77 -0
  168. data/{app/services/search/query_adapter/abstract.rb → lib/rademade_admin/model/adapter/query.rb} +15 -5
  169. data/lib/rademade_admin/model/adapter/query/active_record.rb +50 -0
  170. data/lib/rademade_admin/model/adapter/query/mongoid.rb +57 -0
  171. data/lib/rademade_admin/model/configuration.rb +43 -16
  172. data/lib/rademade_admin/model/configuration/field_label.rb +16 -0
  173. data/lib/rademade_admin/model/configuration/fields.rb +47 -21
  174. data/lib/rademade_admin/model/configuration/fields_labels.rb +31 -0
  175. data/lib/rademade_admin/model/configuration/form_field.rb +27 -0
  176. data/lib/rademade_admin/model/configuration/form_fields.rb +18 -0
  177. data/lib/rademade_admin/model/configuration/list_field.rb +21 -0
  178. data/lib/rademade_admin/model/configuration/list_fields.rb +18 -0
  179. data/lib/rademade_admin/model/graph.rb +9 -9
  180. data/lib/rademade_admin/model/info.rb +53 -68
  181. data/lib/rademade_admin/model/info/data_item.rb +130 -0
  182. data/lib/rademade_admin/model/info/data_items.rb +130 -0
  183. data/lib/rademade_admin/model/info/field.rb +39 -0
  184. data/lib/rademade_admin/model/info/fields.rb +87 -0
  185. data/lib/rademade_admin/model/info/relation.rb +49 -0
  186. data/lib/rademade_admin/model/info/relations.rb +40 -0
  187. data/lib/rademade_admin/model/info/uploader.rb +16 -0
  188. data/lib/rademade_admin/model/info/uploaders.rb +35 -0
  189. data/lib/rademade_admin/model/reflection.rb +38 -9
  190. data/lib/rademade_admin/routing/mapper.rb +9 -5
  191. data/lib/rademade_admin/search/searcher.rb +22 -0
  192. data/lib/rademade_admin/sortable.rb +1 -0
  193. data/lib/rademade_admin/uploader/photo.rb +1 -0
  194. data/lib/rademade_admin/user.rb +7 -6
  195. data/lib/rademade_admin/version.rb +1 -1
  196. data/lib/tasks/rademade_bower_install.rake +10 -2
  197. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  198. metadata +195 -109
  199. data/app/assets/javascripts/rademade_admin/app/common/relation-list.coffee +0 -109
  200. data/app/assets/javascripts/rademade_admin/app/form-popup/collection.coffee +0 -20
  201. data/app/assets/javascripts/rademade_admin/app/form-popup/model.coffee +0 -4
  202. data/app/assets/javascripts/rademade_admin/detail_admin/theme.js +0 -56
  203. data/app/assets/javascripts/rademade_admin/form/form-ajax-submit.coffee +0 -157
  204. data/app/assets/stylesheets/rademade_admin.scss.erb +0 -19
  205. data/app/helpers/rademade_admin/name_helper.rb +0 -18
  206. data/app/helpers/rademade_admin/upload_preview_helper.rb +0 -60
  207. data/app/inputs/rademade_admin/admin_file_input.rb +0 -71
  208. data/app/inputs/rademade_admin/admin_select_input.rb +0 -82
  209. data/app/inputs/rademade_admin/admin_textarea_input.rb +0 -6
  210. data/app/inputs/rademade_admin/boolean_input.rb +0 -14
  211. data/app/services/form_builder.rb +0 -4
  212. data/app/services/search/query_adapter/active_record.rb +0 -45
  213. data/app/services/search/query_adapter/mongoid.rb +0 -51
  214. data/app/services/search/searcher.rb +0 -20
  215. data/app/views/rademade_admin/_blocks/_form_control.html.erb +0 -5
  216. data/app/views/rademade_admin/abstract/related_index.html.erb +0 -85
  217. data/config/initializers/devise.rb +0 -251
  218. data/config/initializers/formtastic.rb +0 -13
  219. data/lib/rademade_admin/model/data_adapter.rb +0 -64
  220. data/lib/rademade_admin/model/data_adapter/active_record.rb +0 -59
  221. data/lib/rademade_admin/model/data_adapter/mongoid.rb +0 -54
  222. data/lib/rademade_admin/model/reflection/data.rb +0 -48
  223. data/lib/rademade_admin/model/reflection/uploader.rb +0 -18
@@ -0,0 +1,13 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class DateTimeInput < SimpleForm::Inputs::DateTimeInput
4
+
5
+ def input
6
+ @builder.text_field(attribute_name, input_html_options.merge({
7
+ :data => { 'date-time-picker' => '' },
8
+ :value => object.send(attribute_name).try(:strftime, '%d.%m.%Y %R')
9
+ }))
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,72 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class FileInput < SimpleForm::Inputs::FileInput
4
+
5
+ include UriHelper
6
+
7
+ def input
8
+ template.content_tag(
9
+ :div,
10
+ HtmlBuffer.new([file_html]),
11
+ { :class => 'uploader-block' }
12
+ )
13
+ end
14
+
15
+ private
16
+
17
+ def file_html
18
+ template.content_tag(
19
+ :div,
20
+ HtmlBuffer.new([
21
+ upload_preview_service.preview_html, input_file_html,
22
+ upload_progress_html, upload_button_html, input_hidden_html
23
+ ]),
24
+ { :class => 'uploader-wrapper' }
25
+ )
26
+ end
27
+
28
+ def input_file_html
29
+ @builder.file_field(uploader.mounted_as, {
30
+ :id => nil,
31
+ :class => 'btn yellow-btn uploader-input-file',
32
+ :name => uploader.mounted_as,
33
+ :data => {
34
+ :column => uploader.mounted_as,
35
+ :id => object.id.to_s,
36
+ :saved => object.new_record? ? 0 : 1,
37
+ :model => object.class.to_s,
38
+ :uploader => uploader.class.to_s,
39
+ :url => admin_url_for(:controller => 'file', :action => 'upload')
40
+ }
41
+ })
42
+ end
43
+
44
+ def input_hidden_html
45
+ @builder.hidden_field(attribute_name, {
46
+ :class => 'uploader-input-hidden hidden'
47
+ }.merge(input_html_options))
48
+ end
49
+
50
+ def upload_progress_html
51
+ progress_slider = template.content_tag(:div, '', { :class => 'upload-progress' })
52
+ template.content_tag(:div, progress_slider, {
53
+ :class => 'upload-progress-wrapper'
54
+ })
55
+ end
56
+
57
+ def upload_button_html
58
+ template.content_tag(:span, I18n.t('rademade_admin.upload_file'), {
59
+ :class => 'btn green-btn upload-btn'
60
+ })
61
+ end
62
+
63
+ def upload_preview_service
64
+ @upload_preview_service ||= RademadeAdmin::Upload::PreviewService.new(uploader)
65
+ end
66
+
67
+ def uploader
68
+ @uploader ||= input_html_options[:value] || object.send(attribute_name)
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,78 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rademade_admin/input/related_select_input/model_data'
3
+ require 'rademade_admin/input/related_select_input/related_list'
4
+
5
+ module RademadeAdmin
6
+ class RelatedSelectInput < SimpleForm::Inputs::CollectionSelectInput
7
+
8
+ include ::RademadeAdmin::UriHelper
9
+ include ::RademadeAdmin::Input::RelatedSelectInput::ModelData
10
+ include ::RademadeAdmin::Input::RelatedSelectInput::RelatedList
11
+
12
+ def input
13
+ template.content_tag(
14
+ :div,
15
+ RademadeAdmin::HtmlBuffer.new([select_ui_html, add_button_html]),
16
+ html_attributes
17
+ ) + related_html
18
+ end
19
+
20
+ private
21
+
22
+ def select_ui_html
23
+ template.text_field_tag(input_html_options_name, '', html_attributes)
24
+ end
25
+
26
+ def related_html
27
+ if multiple?
28
+ related_list_html
29
+ else
30
+ related_item_html
31
+ end
32
+ end
33
+
34
+ def input_html_options_name
35
+ name = "#{object_name}[#{relation_getter}]"
36
+ name += '[]' if multiple?
37
+ name
38
+ end
39
+
40
+ def html_attributes
41
+ {
42
+ :class => 'select-wrapper',
43
+ :data => reflection_data.merge(:'owner-class' => model.class.to_s),
44
+ :type => 'hidden'
45
+ }
46
+ end
47
+
48
+ def add_button_html
49
+ url = admin_new_form_uri(related_to)
50
+ template.content_tag(:button, I18n.t('rademade_admin.add_new'), {
51
+ :class => 'btn green-btn relation-add-button r-margin fl-l',
52
+ :'data-new' => url,
53
+ :'data-class' => related_to.to_s
54
+ }) if url
55
+ end
56
+
57
+ def reflection_data
58
+ {
59
+ :'rel-multiple' => multiple?,
60
+ :'rel-class' => related_to.to_s,
61
+ :'search-url' => admin_autocomplete_uri(related_to, :format => :json)
62
+ }
63
+ end
64
+
65
+ def related_item_html
66
+ if related_value.nil?
67
+ nil
68
+ else
69
+ serialized_data = Autocomplete::BaseSerializer.new([related_value]).as_json.first
70
+ template.content_tag(:input, '', {
71
+ :type => 'hidden',
72
+ :data => serialized_data
73
+ })
74
+ end
75
+ end
76
+
77
+ end
78
+ end
@@ -2,17 +2,19 @@
2
2
  module Autocomplete
3
3
  class LinkSerializer < BaseSerializer
4
4
 
5
- def initialize(collection, parent, parent_id)
5
+ def initialize(collection, item, relation)
6
6
  super(collection)
7
- @parent = parent
8
- @parent_id = parent_id
7
+ @item = item
8
+ @relation = relation
9
9
  end
10
10
 
11
11
  protected
12
12
 
13
13
  def item_to_json(item)
14
14
  super(item).merge({
15
- :link_url => admin_link_uri(item, @parent, @parent_id)
15
+ :link_url => admin_link_uri(@item, @relation, {
16
+ :related_id => item.id
17
+ })
16
18
  })
17
19
  end
18
20
 
@@ -2,32 +2,26 @@
2
2
  module RademadeAdmin
3
3
  class Linker
4
4
 
5
- def initialize(model_info, parent_model, parent_id)
5
+ def initialize(model_info, item, relation)
6
6
  @model_info = model_info
7
- @parent_model_info = RademadeAdmin::Model::Graph.instance.model_info(parent_model)
8
- @parent = @parent_model_info.model.find(parent_id)
7
+ @item = item
8
+ @related_data_item = model_info.data_items.data_item(relation)
9
9
  end
10
10
 
11
11
  def link(id)
12
- process_link { |old_data| old_data << parse_id(id) }
12
+ process_link { |old_data| old_data << @related_data_item.relation.related_entities(id) }
13
13
  end
14
14
 
15
15
  def unlink(id)
16
- process_link { |old_data| old_data - [parse_id(id)] }
16
+ process_link { |old_data| old_data - [@related_data_item.relation.related_entities(id)] }
17
17
  end
18
18
 
19
19
  private
20
20
 
21
21
  def process_link
22
- related_name = @model_info.model_name.tableize.gsub('/', '_').to_sym # todo extract method or better guessing of related name
23
- association = @parent_model_info.reflect_on_association(related_name)
24
- foreign_key = @parent_model_info.association_foreign_key(association)
25
- @parent.send(foreign_key + '=', yield(@parent.send(foreign_key)))
26
- @parent.save
27
- end
28
-
29
- def parse_id(id)
30
- Integer(id) rescue id.to_s
22
+ old_data = @item.send(@related_data_item.getter).to_a
23
+ @item.send(@related_data_item.setter, yield(old_data))
24
+ @item.save
31
25
  end
32
26
 
33
27
  end
@@ -1,9 +1,10 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module RademadeAdmin
3
3
  class Login
4
+
4
5
  def self.admin(params)
5
- params.require( :data ).permit([:email, :password])
6
- user = RademadeAdmin.user_class.where(:email => params[:data][:email]).first
6
+ params.require(:data).permit([:email, :password])
7
+ user = RademadeAdmin.user_class.get_by_email(params[:data][:email])
7
8
 
8
9
  error('There is no users with such email', :email) unless user.is_a? RademadeAdmin.user_class
9
10
  error('Incorrect password', :password) unless user.valid_password? params[:data][:password]
@@ -13,7 +14,8 @@ module RademadeAdmin
13
14
  end
14
15
 
15
16
  def self.error(message, field)
16
- raise Error.new( message, field )
17
+ raise Error.new(message, field)
17
18
  end
19
+
18
20
  end
19
21
  end
@@ -0,0 +1,36 @@
1
+ module RademadeAdmin
2
+ module Breadcrumbs
3
+
4
+ def root_breadcrumbs
5
+ breadcrumbs.add t('rademade_admin.dashboard'), root_path
6
+ end
7
+
8
+ def list_breadcrumbs(with_url = false)
9
+ breadcrumbs.add model_info.item_name, with_url ? admin_list_uri(model) : nil
10
+ end
11
+
12
+ def new_breadcrumbs
13
+ list_breadcrumbs(true)
14
+ breadcrumbs.add t('rademade_admin.new_record')
15
+ end
16
+
17
+ def edit_breadcrumbs
18
+ list_breadcrumbs(true)
19
+ breadcrumbs.add edit_name
20
+ end
21
+
22
+ def related_breadcrumbs
23
+ list_breadcrumbs(true)
24
+ breadcrumbs.add @item.to_s, admin_edit_uri(@item)
25
+ breadcrumbs.add @related_model_info.item_name
26
+ end
27
+
28
+ private
29
+
30
+ def edit_name
31
+ item_name = @item.to_s
32
+ item_name.empty? ? t('rademade_admin.edit_record') : item_name
33
+ end
34
+
35
+ end
36
+ end
@@ -3,7 +3,8 @@ module RademadeAdmin
3
3
  module InstanceOptions
4
4
 
5
5
  attr_reader :model_info, :model_class, :model_name, :item_name,
6
- :list_fields, :semantic_form_fields
6
+ :list_fields,
7
+ :form_fields_without_locale, :form_fields_with_locale
7
8
 
8
9
  def load_model_options
9
10
  @model_info = self.class.model_info
@@ -13,16 +14,17 @@ module RademadeAdmin
13
14
  end
14
15
 
15
16
  def load_field_options
16
- @list_fields = @model_info.list_fields
17
- @semantic_form_fields = @model_info.semantic_form_fields
17
+ @list_fields = @model_info.data_items.list_fields
18
+ @form_fields_without_locale = @model_info.data_items.form_fields_without_locale
19
+ @form_fields_with_locale = @model_info.data_items.form_fields_with_locale
18
20
  end
19
21
 
20
22
  def origin_fields
21
- @model_info.origin_fields
23
+ @model_info.data_items.origin_fields
22
24
  end
23
25
 
24
26
  def filter_fields
25
- @model_info.filter_fields
27
+ @model_info.data_items.filter_fields
26
28
  end
27
29
 
28
30
  def load_template_options
@@ -2,6 +2,15 @@
2
2
  module RademadeAdmin
3
3
  module ModelOptions
4
4
 
5
+ # Configure admin part of model
6
+ # Support options
7
+ # - model
8
+ # - name
9
+ # - parent_menu (todo extract to menu method)
10
+ # - list
11
+ # - form
12
+ # - labels
13
+ #
5
14
  def options(&options_block)
6
15
  configuration.instance_eval &options_block
7
16
  end
@@ -26,14 +35,8 @@ module RademadeAdmin
26
35
  @model_info ||= Model::Graph.instance.model_info(model_class)
27
36
  end
28
37
 
29
- def init_model_info(model_reflection)
30
- Model::Info.new(model_reflection, configuration)
31
- end
32
-
33
- private
34
-
35
38
  def configuration
36
- @configuration ||= Model::Configuration.new(controller_name)
39
+ @configuration ||= Model::Configuration.new(self)
37
40
  end
38
41
 
39
42
  end
@@ -22,18 +22,22 @@ module RademadeAdmin
22
22
  success_message(item, 'was deleted!')
23
23
  end
24
24
 
25
- def success_unlink(item)
26
- success_message(item, 'was unlinked from entity!')
25
+ def success_unlink
26
+ render :json => {
27
+ :message => 'Entity was unlinked!'
28
+ }
27
29
  end
28
30
 
29
- def success_link(item)
30
- success_message(item, 'was linked to entity!')
31
+ def success_link
32
+ render :json => {
33
+ :message => 'Entity was linked!'
34
+ }
31
35
  end
32
36
 
33
37
  def success_message(item, action_message, additional_data = {})
34
38
  render :json => {
35
- :data => item,
36
- :message => "#{item_name.capitalize} #{action_message}"
39
+ :data => Autocomplete::BaseSerializer.new([item]).as_json.first,
40
+ :message => "#{model_info.singular_name.capitalize} #{action_message}"
37
41
  }.merge(additional_data)
38
42
  end
39
43
 
@@ -14,11 +14,12 @@ module RademadeAdmin
14
14
  end
15
15
 
16
16
  def abstract_template(template)
17
- if template_exists?(template, "rademade_admin/#{native_template_folder}")
18
- "rademade_admin/#{native_template_folder}/#{template}"
17
+ if template_exists?(template, @template_service.template_path(native_template_folder))
18
+ folder = native_template_folder
19
19
  else
20
- "rademade_admin/abstract/#{template}"
20
+ folder = 'abstract'
21
21
  end
22
+ @template_service.template_path(folder, template)
22
23
  end
23
24
 
24
25
  end
@@ -0,0 +1,11 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ class RelationService
4
+
5
+ def related_model_info(model_info, relation)
6
+ related_model = model_info.data_items.data_item(relation).relation.to
7
+ RademadeAdmin::Model::Graph.instance.model_info(related_model)
8
+ end
9
+
10
+ end
11
+ end
@@ -4,22 +4,28 @@ module RademadeAdmin
4
4
 
5
5
  attr_reader :item
6
6
 
7
+ # Initialization of model saver class
8
+ #
9
+ # @param model_info [RademadeAdmin::Model::Info]
10
+ # @param params [Hash]
11
+ #
7
12
  def initialize(model_info, params)
8
- @model_info = model_info
9
- @params = params
13
+ @model_info, @params = model_info, params
10
14
  end
11
15
 
12
16
  def create_model
13
- @item = @model_info.model.new filter_data_params
17
+ @item = @model_info.model.new
14
18
  end
15
19
 
16
20
  def update_model
17
21
  @item = @model_info.model.find(@params[:id])
18
- item.update filter_data_params
22
+ save_model
19
23
  end
20
24
 
21
25
  def save_model
22
- item.save @params
26
+ item.assign_attributes simple_field_params
27
+ save_localizable_fields
28
+ item.save
23
29
  end
24
30
 
25
31
  def save_aggregated_data
@@ -34,36 +40,65 @@ module RademadeAdmin
34
40
 
35
41
  private
36
42
 
37
- def save_model_relations
43
+ def save_localizable_fields
44
+ current_locale = I18n.locale
45
+ @model_info.data_items.localizable_fields.each do |_, data_item|
46
+ values = @params[:data].try(:[], data_item.getter)
47
+ values.each do |locale, value|
48
+ I18n.locale = locale
49
+ if data_item.has_uploader?
50
+ save_model_upload(data_item, value)
51
+ else
52
+ item.send(data_item.setter, value)
53
+ end
54
+ end if values
55
+ end
56
+ I18n.locale = current_locale
57
+ end
58
+
59
+ def save_model_relations
38
60
  data = @params[:data]
39
- model_reflection = @model_info.model_reflection
40
- model_reflection.relations.each do |name, rel|
41
- assoc_key = model_reflection.association_foreign_key(rel)
42
- if data.has_key? assoc_key
43
- ids = data[assoc_key]
44
- ids.reject! { |id| id.empty? } if ids.kind_of?(Array)
45
- item.send(assoc_key + '=', ids)
61
+ @model_info.data_items.related_fields.each do |_, data_item|
62
+ if data.has_key? data_item.getter
63
+ item.send(data_item.setter, find_entities(data_item, data[data_item.getter]))
46
64
  end
47
65
  end
48
66
  end
49
67
 
50
68
  def save_model_uploads
51
69
  data = @params[:data]
52
- @model_info.model_reflection.uploaders.each do |name, _|
53
- if data.has_key?(name) and not data[name].blank?
54
- image_path = CarrierWave.root + data[name].to_s
55
- setter_method = (name.to_s + '=').to_sym
56
- begin
57
- item.send(setter_method, File.open(image_path))
58
- rescue
59
- #rm_todo clear image
60
- end
70
+ @model_info.data_items.uploader_fields.each do |_, data_item|
71
+ name = data_item.name
72
+ save_model_upload(data_item, data[name]) if data.has_key?(name)
73
+ end
74
+ end
75
+
76
+ def save_model_upload(data_item, image_path)
77
+ unless image_path.blank?
78
+ full_image_path = "#{CarrierWave.root}#{image_path}"
79
+ begin
80
+ (item.try(:translation) || item).send(data_item.setter, File.open(full_image_path))
81
+ rescue
82
+ # rm_todo clear image
61
83
  end
62
84
  end
63
85
  end
64
86
 
65
- def filter_data_params
66
- @params.require(:data).permit(@model_info.save_form_fields)
87
+ def find_entities(data_item, ids)
88
+ if ids.kind_of? Array
89
+ ids.reject! { |id| id.empty? }
90
+ related_entities(data_item, ids)
91
+ else
92
+ ids.empty? ? nil : data_item.relation.related_entities(ids)
93
+ end
94
+ end
95
+
96
+ def simple_field_params
97
+ @params.require(:data).permit(@model_info.data_items.save_form_fields)
98
+ end
99
+
100
+ def related_entities(data_item, ids)
101
+ ids.map { |id| data_item.relation.related_entities(id) }
67
102
  end
68
103
 
69
104
  end