rademade_admin 0.1.5 → 0.1.6

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/rademade_admin.coffee +1 -0
  3. data/app/assets/javascripts/rademade_admin/app/common/cropper.coffee +0 -4
  4. data/app/assets/javascripts/rademade_admin/app/common/image-preview.coffee +33 -0
  5. data/app/assets/javascripts/rademade_admin/app/templates/image-preview-popup.jst.ejs +3 -0
  6. data/app/assets/javascripts/rademade_admin/app/templates/related-item.jst.ejs +2 -2
  7. data/app/assets/javascripts/rademade_admin/library/ckeditor/config.js +1 -0
  8. data/app/assets/stylesheets/edit.css +15 -0
  9. data/app/assets/stylesheets/rademade_admin/base/main.sass +45 -39
  10. data/app/assets/stylesheets/rademade_admin/blocks/buttons/main.sass +6 -1
  11. data/app/assets/stylesheets/rademade_admin/blocks/form/select2.sass +85 -60
  12. data/app/controllers/rademade_admin/model_controller.rb +3 -0
  13. data/app/helpers/rademade_admin/field_helper.rb +25 -13
  14. data/app/helpers/rademade_admin/form_helper.rb +4 -6
  15. data/app/helpers/rademade_admin/uri_helper.rb +3 -3
  16. data/app/services/csv_service.rb +38 -0
  17. data/app/services/linker.rb +3 -1
  18. data/app/services/model_controller/instance_options.rb +7 -2
  19. data/app/services/model_controller/notifier.rb +15 -19
  20. data/app/services/model_controller/templates.rb +1 -0
  21. data/app/services/saver.rb +6 -1
  22. data/app/services/template_service.rb +38 -19
  23. data/app/services/upload/preview_service.rb +2 -1
  24. data/app/views/rademade_admin/_blocks/_form.html.erb +6 -5
  25. data/app/views/rademade_admin/_blocks/button/_hide.html.erb +2 -2
  26. data/app/views/rademade_admin/_layouts/main.html.erb +3 -6
  27. data/app/views/rademade_admin/abstract/index.html.erb +4 -2
  28. data/config/locales/rademade_admin.en.yml +2 -1
  29. data/config/locales/rademade_admin.ru.yml +2 -1
  30. data/lib/rademade_admin/{hrml_buffer.rb → html_buffer.rb} +0 -0
  31. data/lib/rademade_admin/input/related_select_input/related_list.rb +8 -5
  32. data/lib/rademade_admin/model/adapter/data/mongoid.rb +1 -1
  33. data/lib/rademade_admin/model/adapter/query/active_record.rb +1 -1
  34. data/lib/rademade_admin/model/configuration.rb +17 -1
  35. data/lib/rademade_admin/model/configuration/csv_fields.rb +12 -0
  36. data/lib/rademade_admin/model/configuration/list_field.rb +5 -1
  37. data/lib/rademade_admin/model/info.rb +10 -1
  38. data/lib/rademade_admin/model/info/data_item.rb +31 -13
  39. data/lib/rademade_admin/model/info/data_item/initializer.rb +37 -0
  40. data/lib/rademade_admin/model/info/data_items.rb +11 -1
  41. data/lib/rademade_admin/model/info/fields.rb +39 -26
  42. data/lib/rademade_admin/version.rb +1 -1
  43. metadata +22 -4
  44. data/app/assets/javascripts/rademade_admin/library/jquery/jquery.tablednd.js +0 -1
@@ -65,12 +65,10 @@ module RademadeAdmin::FormHelper
65
65
  end
66
66
 
67
67
  def default_field_type(data_item)
68
- if data_item.has_relation?
69
- if data_item.gallery_relation?
70
- :'rademade_admin/gallery'
71
- else
72
- :'rademade_admin/related_select'
73
- end
68
+ if data_item.gallery_relation?
69
+ :'rademade_admin/gallery'
70
+ elsif data_item.has_relation?
71
+ :'rademade_admin/related_select'
74
72
  elsif data_item.has_uploader?
75
73
  :'rademade_admin/file'
76
74
  elsif data_item.date_time?
@@ -10,10 +10,10 @@ module RademadeAdmin::UriHelper
10
10
  RademadeAdmin::Engine.routes.url_helpers.send(route_url, opts)
11
11
  end
12
12
 
13
- def admin_list_uri(model)
14
- admin_model_url_for(model, {
13
+ def admin_list_uri(model, opts = {})
14
+ admin_model_url_for(model, opts.merge({
15
15
  :action => :index
16
- })
16
+ }))
17
17
  end
18
18
 
19
19
  def admin_autocomplete_uri(model, opts = {})
@@ -0,0 +1,38 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'csv'
3
+
4
+ module RademadeAdmin
5
+ class CsvService
6
+
7
+ def initialize(model_info, items)
8
+ @model_info = model_info
9
+ @items = items
10
+ end
11
+
12
+ def to_csv
13
+ ::CSV.generate(col_sep: ',', encoding: 'utf-8') do |csv|
14
+ csv << column_names
15
+ @items.each do |item|
16
+ csv << item_data(item)
17
+ end
18
+ end
19
+ end
20
+
21
+ def column_names
22
+ @model_info.data_items.csv_fields.map(&:label)
23
+ end
24
+
25
+ def item_data(item)
26
+ data = []
27
+ @model_info.data_items.csv_fields.each do |field|
28
+ data << field_value(field, item)
29
+ end
30
+ data
31
+ end
32
+
33
+ def field_value(field, item)
34
+ return field.csv_preview_handler.call(item) unless field.csv_preview_handler.nil?
35
+ item.send(field.csv_preview_accessor).to_s
36
+ end
37
+ end
38
+ end
@@ -13,7 +13,9 @@ module RademadeAdmin
13
13
  end
14
14
 
15
15
  def unlink(id)
16
- process_link { |old_data| old_data - [@related_data_item.relation.related_entities(id)] }
16
+ process_link { |old_data|
17
+ old_data.delete_if { |data_item| data_item.id.to_s == id.to_s }
18
+ }
17
19
  end
18
20
 
19
21
  private
@@ -2,9 +2,14 @@
2
2
  module RademadeAdmin
3
3
  module InstanceOptions
4
4
 
5
- attr_reader :model_info, :model_class, :model_name, :item_name,
5
+ attr_reader :model_info,
6
+ :model_class,
7
+ :model_name,
8
+ :item_name,
6
9
  :list_fields,
7
- :form_fields_without_locale, :form_fields_with_locale
10
+ # TODO form_fields refactor
11
+ :form_fields_without_locale,
12
+ :form_fields_with_locale
8
13
 
9
14
  def load_model_options
10
15
  @model_info = self.class.model_info
@@ -2,6 +2,8 @@
2
2
  module RademadeAdmin
3
3
  module Notifier
4
4
 
5
+ # TODO use responder (respond with)
6
+
5
7
  def success_action
6
8
  render :json => {
7
9
  :message => I18n.t('rademade_admin.success_message')
@@ -11,43 +13,28 @@ module RademadeAdmin
11
13
  def success_insert(item)
12
14
  respond_to do |format|
13
15
  format.html { redirect_to admin_edit_uri(item) }
14
- format.json {
15
- if params.has_key?(:create_and_return)
16
- data = { :redirect_to => admin_list_uri(item.class) }
17
- else
18
- data = { :form_action => admin_update_uri(item) }
19
- end
20
- success_message(item, I18n.t('rademade_admin.success_insert_message'), data)
21
- }
16
+ format.json { success_message(item, I18n.t('rademade_admin.success_insert_message'), success_data(item)) }
22
17
  end
23
18
  end
24
19
 
25
20
  def success_update(item)
26
21
  respond_to do |format|
27
22
  format.html { redirect_to admin_edit_uri(item) }
28
- format.json {
29
- data = {}
30
- data[:redirect_to] = admin_list_uri(item.class) if params.has_key?(:create_and_return)
31
- success_message(item, I18n.t('rademade_admin.success_update_message'), data)
32
- }
23
+ format.json { success_message(item, I18n.t('rademade_admin.success_update_message'), success_data(item)) }
33
24
  end
34
25
  end
35
26
 
36
27
  def success_delete(item)
37
28
  respond_to do |format|
38
29
  format.html { redirect_to admin_list_uri(item) }
39
- format.json {
40
- success_message(item, I18n.t('rademade_admin.success_delete_message'))
41
- }
30
+ format.json { success_message(item, I18n.t('rademade_admin.success_delete_message')) }
42
31
  end
43
32
  end
44
33
 
45
34
  def success_status_change(item)
46
35
  respond_to do |format|
47
36
  format.html { redirect_to admin_list_uri(item) }
48
- format.json {
49
- success_message(item, t('rademade_admin.success_status_update_message'))
50
- }
37
+ format.json { success_message(item, t('rademade_admin.success_status_update_message')) }
51
38
  end
52
39
  end
53
40
 
@@ -70,5 +57,14 @@ module RademadeAdmin
70
57
  }.merge(additional_data)
71
58
  end
72
59
 
60
+ def success_data(item)
61
+ data = {}
62
+ if params.has_key?(:create_and_return)
63
+ data[:redirect_to] = admin_list_uri(item.class)
64
+ else
65
+ data[:form_action] = admin_update_uri(item) # TODO check JS. Rename for update
66
+ end
67
+ data
68
+ end
73
69
  end
74
70
  end
@@ -14,6 +14,7 @@ module RademadeAdmin
14
14
  end
15
15
 
16
16
  def abstract_template(template)
17
+ # TODO make with rails native controller extending
17
18
  if template_exists?(template, @template_service.template_path(native_template_folder))
18
19
  folder = native_template_folder
19
20
  else
@@ -68,7 +68,12 @@ module RademadeAdmin
68
68
  unless image_path.blank?
69
69
  full_image_path = "#{CarrierWave.root}#{image_path}"
70
70
  begin
71
- (item.try(:translation) || item).send(data_item.setter, File.open(full_image_path))
71
+ if item.try(:translation).respond_to? data_item.setter
72
+ entity = item.translation
73
+ else
74
+ entity = item
75
+ end
76
+ entity.send(data_item.setter, File.open(full_image_path))
72
77
  rescue
73
78
  # rm_todo clear image
74
79
  end
@@ -2,6 +2,25 @@
2
2
  module RademadeAdmin
3
3
  class TemplateService
4
4
 
5
+ attr_accessor :index_template,
6
+ :inner_layout,
7
+ :main_layout,
8
+ :inner_form_layout,
9
+ :form_block,
10
+ :form_control_block,
11
+ :form_lang_panel_block,
12
+ :form_separator_block,
13
+ :pagination_block ,
14
+ :on_page_select_block,
15
+ :sort_reset_block,
16
+ :search_block,
17
+ :header_block,
18
+ :menu_block,
19
+ :sub_menu_block,
20
+ :sub_menu_link_block,
21
+ :table_head_block,
22
+ :cancel_button
23
+
5
24
  def initialize(root_dir)
6
25
  @root_dir = root_dir
7
26
  end
@@ -11,75 +30,75 @@ module RademadeAdmin
11
30
  end
12
31
 
13
32
  def index_template
14
- abstract_template 'index'
33
+ @index_template ||= abstract_template 'index'
15
34
  end
16
35
 
17
36
  def inner_layout
18
- layout_path 'inner'
37
+ @inner_layout ||= layout_path 'inner'
19
38
  end
20
39
 
21
40
  def main_layout
22
- layout_path 'main'
41
+ @main_layout ||= layout_path 'main'
23
42
  end
24
43
 
25
44
  def inner_form_layout
26
- layout_path 'inner/form'
45
+ @inner_form_layout ||= layout_path 'inner/form'
27
46
  end
28
47
 
29
48
  def form_block
30
- block_path 'form'
49
+ @form_block ||= block_path 'form'
31
50
  end
32
51
 
33
52
  def form_control_block
34
- block_path 'form/control'
53
+ @form_control_block ||= block_path 'form/control'
35
54
  end
36
55
 
37
56
  def form_lang_panel_block
38
- block_path 'form/lang_panel'
57
+ @form_lang_panel_block ||= block_path 'form/lang_panel'
39
58
  end
40
59
 
41
60
  def form_separator_block
42
- block_path 'form/separator'
61
+ @form_separator_block ||= block_path 'form/separator'
43
62
  end
44
63
 
45
64
  def pagination_block
46
- block_path 'pagination'
65
+ @pagination_block ||= block_path 'pagination'
47
66
  end
48
67
 
49
68
  def on_page_select_block
50
- block_path 'on_page_select'
69
+ @on_page_select_block ||= block_path 'on_page_select'
51
70
  end
52
71
 
53
72
  def sort_reset_block
54
- block_path 'sort_reset'
73
+ @sort_reset_block ||= block_path 'sort_reset'
55
74
  end
56
75
 
57
76
  def search_block
58
- block_path 'search'
77
+ @search_block ||= block_path 'search'
59
78
  end
60
79
 
61
80
  def header_block
62
- block_path 'header'
81
+ @header_block ||= block_path 'header'
63
82
  end
64
83
 
65
84
  def menu_block
66
- block_path 'menu'
85
+ @menu_block ||= block_path 'menu'
67
86
  end
68
87
 
69
88
  def sub_menu_block
70
- block_path 'sub_menu'
89
+ @sub_menu_block ||= block_path 'sub_menu'
71
90
  end
72
91
 
73
92
  def sub_menu_link_block
74
- block_path 'sub_menu/link'
93
+ @sub_menu_link_block ||= block_path 'sub_menu/link'
75
94
  end
76
95
 
77
96
  def table_head_block
78
- block_path 'table/head'
97
+ @table_head_block ||= block_path 'table/head'
79
98
  end
80
99
 
81
100
  def cancel_button
82
- block_path 'button/cancel'
101
+ @cancel_button ||= block_path 'button/cancel'
83
102
  end
84
103
 
85
104
  private
@@ -97,4 +116,4 @@ module RademadeAdmin
97
116
  end
98
117
 
99
118
  end
100
- end
119
+ end
@@ -12,7 +12,7 @@ module RademadeAdmin
12
12
 
13
13
  def preview_html
14
14
  content_tag(:div, :class => ['preview-wrapper', preview_style_class].join(' ')) do
15
- if @uploader.blank?
15
+ if @uploader.blank? || @uploader.size.zero?
16
16
  empty_file_html
17
17
  else
18
18
  uploaded_file_html
@@ -63,6 +63,7 @@ module RademadeAdmin
63
63
  def uploaded_image_preview
64
64
  content_tag(:img, '', {
65
65
  :src => @uploader.resize(230, 130),
66
+ :'full-url' => @uploader.url,
66
67
  :class => 'image-preview',
67
68
  :width => 230,
68
69
  :height => 130,
@@ -1,10 +1,11 @@
1
1
  <%
2
2
  show_buttons = show_buttons.nil? ? true : show_buttons
3
3
  buttons_template ||= @template_service.form_control_block
4
- %><%= admin_form(@item, @model_class) do |f| %><%
4
+ %><%= admin_form(@item, @model_class) do |form| %><%
5
5
  @form_fields_without_locale.each do |form_field|
6
- admin_field(f, form_field, @model_info)
6
+ admin_field(form, form_field, @model_info)
7
7
  end
8
- concat render @template_service.form_lang_panel_block, { :f => f }
9
- concat render buttons_template, { :f => f } if show_buttons
10
- end %>
8
+ concat yield(:additional_fields) if content_for?(:additional_fields)
9
+ concat render @template_service.form_lang_panel_block, { :f => form }
10
+ concat render buttons_template, { :f => form } if show_buttons
11
+ end %>
@@ -2,11 +2,11 @@
2
2
  if @model_info.hideable? && can?(:edit, @model)
3
3
  element_id = "hide_#{item.id}"
4
4
  toggle_url = admin_url_for(
5
- :controller => :status,
5
+ :controller => :"rademade_admin/status",
6
6
  :action => :toggle,
7
7
  :model => @model,
8
8
  :id => item.id
9
- ) #todo via native method. Add route resourse
9
+ ) #todo via native method. Add route resource
10
10
 
11
11
  %><div class="view-option">
12
12
  <input id="<%=element_id%>" data-toggle-url="<%= toggle_url %>" type="checkbox"<%
@@ -1,13 +1,10 @@
1
- <% content_for :head do %>
2
- <%= stylesheet_link_tag(:rademade_admin, :media => 'all', 'data-turbolinks-track' => true) %>
3
- <%= javascript_include_tag(:rademade_admin, 'data-turbolinks-track' => true) %>
4
- <% end %>
5
-
6
1
  <!DOCTYPE html>
7
2
  <html>
8
3
  <head>
9
4
  <title>Rademade Admin</title>
10
- <%= yield(:head) %>
5
+ <%= javascript_include_tag(:rademade_admin, 'data-turbolinks-track' => true) %>
6
+ <%= yield(:head) if content_for?(:head) %>
7
+ <%= stylesheet_link_tag(:rademade_admin, :media => 'all', 'data-turbolinks-track' => true) %>
11
8
  <%= csrf_meta_tags %>
12
9
  </head>
13
10
 
@@ -4,8 +4,10 @@
4
4
 
5
5
  <% content_for :nav_buttons do %><%
6
6
  new_uri = admin_new_uri(@model_info)
7
- if new_uri
8
- concat link_to t('rademade_admin.new_record') + '+', new_uri, :class => 'btn yellow-btn fl-l'
7
+ concat link_to(t('rademade_admin.new_record') + '+', new_uri, :class => 'btn yellow-btn fl-l') if new_uri
8
+ if @model_info.has_csv?
9
+ csv_uri = admin_list_uri(@model_info, :format => :csv)
10
+ concat link_to(t('rademade_admin.export_to_csv'), csv_uri, :class => 'btn green-btn fl-l l-margin') if csv_uri
9
11
  end
10
12
  end %>
11
13
 
@@ -45,4 +45,5 @@ en:
45
45
  success_unlink_message: "Entity was unlinked!"
46
46
  success_link_message: "Entity was linked!"
47
47
  success_status_update_message: "Status was updated!"
48
- clear_search: "Clear"
48
+ clear_search: "Clear"
49
+ export_to_csv: "Export to csv"
@@ -45,4 +45,5 @@ ru:
45
45
  success_unlink_message: "Запись отсоединена!"
46
46
  success_link_message: "Запись соединена!"
47
47
  success_status_update_message: "Статус обновлен!"
48
- clear_search: "Очистить"
48
+ clear_search: "Очистить"
49
+ export_to_csv: "Экспортировать в csv"
@@ -37,17 +37,20 @@ module RademadeAdmin
37
37
 
38
38
  def related_list_item_edit_html(serialized_value)
39
39
  if serialized_value[:editurl]
40
- template.content_tag(
41
- :button, I18n.t('rademade_admin.edit_related_item'),
42
- :'data-edit' => serialized_value[:editurl]
43
- )
40
+ template.content_tag(:button, I18n.t('rademade_admin.edit_related_item'), {
41
+ :'data-edit' => serialized_value[:editurl],
42
+ :class => 'select2-item-edit'
43
+ })
44
44
  else
45
45
  ''
46
46
  end
47
47
  end
48
48
 
49
49
  def related_list_item_remove_html
50
- template.content_tag(:button, I18n.t('rademade_admin.destroy'), :'data-remove' => '')
50
+ template.content_tag(:button, I18n.t('rademade_admin.destroy'), {
51
+ :'data-remove' => '',
52
+ :class => 'select2-item-remove'
53
+ })
51
54
  end
52
55
 
53
56
  def related_list_link_html