rademade_admin 0.1.3 → 0.1.4

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/rademade_admin/app/common/location.coffee.erb +5 -1
  3. data/app/assets/javascripts/rademade_admin/app/common/status-toggler.coffee +25 -0
  4. data/app/assets/javascripts/rademade_admin/app/common/turboform.coffee +8 -0
  5. data/app/assets/javascripts/rademade_admin/app/form-popup/view.coffee +3 -3
  6. data/app/assets/javascripts/rademade_admin/app/gallery/image/collection-view.coffee +35 -0
  7. data/app/assets/javascripts/rademade_admin/app/gallery/image/collection.coffee +19 -0
  8. data/app/assets/javascripts/rademade_admin/app/gallery/image/model.coffee +25 -0
  9. data/app/assets/javascripts/rademade_admin/app/gallery/image/view.coffee +58 -0
  10. data/app/assets/javascripts/rademade_admin/app/gallery/view.coffee +40 -0
  11. data/app/assets/javascripts/rademade_admin/app/select2/related/view.coffee +1 -1
  12. data/app/assets/javascripts/rademade_admin/app/select2/view.coffee +11 -2
  13. data/app/assets/javascripts/rademade_admin/app/templates/crop.jst.ejs +2 -2
  14. data/app/assets/javascripts/rademade_admin/app/templates/related-item.jst.ejs +2 -2
  15. data/app/assets/javascripts/rademade_admin/form/form.coffee +4 -1
  16. data/app/assets/stylesheets/rademade_admin.sass.erb +2 -1
  17. data/app/assets/stylesheets/rademade_admin/blocks/form/input.sass +56 -27
  18. data/app/assets/stylesheets/rademade_admin/blocks/gallery/_main.sass +67 -0
  19. data/app/assets/stylesheets/rademade_admin/modules/pagination/main.sass +19 -2
  20. data/app/cells/menu/item.slim +2 -0
  21. data/app/cells/menu_cell.rb +8 -2
  22. data/app/controllers/rademade_admin/abstract_controller.rb +6 -2
  23. data/app/controllers/rademade_admin/dashboard_controller.rb +1 -1
  24. data/app/controllers/rademade_admin/file_controller.rb +14 -5
  25. data/app/controllers/rademade_admin/gallery_controller.rb +48 -0
  26. data/app/controllers/rademade_admin/model_controller.rb +37 -29
  27. data/app/controllers/rademade_admin/sessions_controller.rb +7 -6
  28. data/app/controllers/rademade_admin/status_controller.rb +16 -0
  29. data/app/helpers/rademade_admin/field_helper.rb +3 -4
  30. data/app/helpers/rademade_admin/form_helper.rb +35 -25
  31. data/app/helpers/rademade_admin/uri_helper.rb +6 -14
  32. data/app/inputs/rademade_admin/file_input.rb +24 -8
  33. data/app/inputs/rademade_admin/gallery_input.rb +77 -0
  34. data/app/inputs/rademade_admin/related_select_input.rb +13 -4
  35. data/app/serializers/autocomplete/base_serializer.rb +1 -1
  36. data/app/services/gallery/manager.rb +81 -0
  37. data/app/services/login.rb +3 -3
  38. data/app/services/menu_service.rb +1 -1
  39. data/app/services/menu_service/menu_item.rb +4 -0
  40. data/app/services/model_controller/model_options.rb +1 -0
  41. data/app/services/model_controller/notifier.rb +24 -10
  42. data/app/services/search/conditions/autocomplete.rb +4 -11
  43. data/app/services/search/conditions/list.rb +22 -10
  44. data/app/services/search/conditions/related_list.rb +8 -4
  45. data/app/services/search/where.rb +20 -0
  46. data/app/services/sortable_service.rb +1 -4
  47. data/app/services/status/toggler.rb +27 -0
  48. data/app/services/template_service.rb +33 -1
  49. data/app/services/upload/gallery_preview_service.rb +64 -0
  50. data/app/views/layouts/rademade_admin.html.erb +1 -22
  51. data/app/views/rademade_admin/_blocks/_form.html.erb +10 -0
  52. data/app/views/rademade_admin/_blocks/_header.html.erb +0 -12
  53. data/app/views/rademade_admin/_blocks/_search.html.erb +11 -0
  54. data/app/views/rademade_admin/_blocks/_sort_reset.html.erb +5 -0
  55. data/app/views/rademade_admin/_blocks/button/_cancel.html.erb +7 -0
  56. data/app/views/rademade_admin/_blocks/button/_destroy.html.erb +12 -0
  57. data/app/views/rademade_admin/_blocks/button/_edit.html.erb +4 -2
  58. data/app/views/rademade_admin/_blocks/button/_hide.html.erb +13 -0
  59. data/app/views/rademade_admin/_blocks/button/_preview.html.erb +3 -0
  60. data/app/views/rademade_admin/_blocks/form/_control.html.erb +9 -3
  61. data/app/views/rademade_admin/_blocks/form/_separator.html.erb +1 -0
  62. data/app/views/rademade_admin/_blocks/table/_head.html.erb +8 -2
  63. data/app/views/rademade_admin/_layouts/inner/index_table.html.erb +1 -3
  64. data/app/views/rademade_admin/_layouts/main.html.erb +26 -0
  65. data/app/views/rademade_admin/abstract/_form.html.erb +1 -7
  66. data/app/views/rademade_admin/abstract/index.html.erb +7 -13
  67. data/config/locales/rademade_admin.en.yml +16 -1
  68. data/config/locales/rademade_admin.ru.yml +22 -2
  69. data/config/routes.rb +9 -1
  70. data/lib/rademade_admin.rb +5 -0
  71. data/lib/rademade_admin/configuration.rb +6 -1
  72. data/lib/rademade_admin/engine.rb +4 -0
  73. data/lib/rademade_admin/gallery.rb +13 -0
  74. data/lib/rademade_admin/hideable.rb +37 -0
  75. data/lib/rademade_admin/input/related_select_input/related_list.rb +2 -2
  76. data/lib/rademade_admin/model/adapter/data.rb +8 -0
  77. data/lib/rademade_admin/model/adapter/data/active_record.rb +12 -2
  78. data/lib/rademade_admin/model/adapter/data/mongoid.rb +10 -8
  79. data/lib/rademade_admin/model/adapter/query/active_record.rb +8 -3
  80. data/lib/rademade_admin/model/configuration.rb +10 -8
  81. data/lib/rademade_admin/model/info.rb +13 -2
  82. data/lib/rademade_admin/model/info/data_item.rb +8 -3
  83. data/lib/rademade_admin/model/info/fields.rb +12 -2
  84. data/lib/rademade_admin/model/info/relation.rb +5 -0
  85. data/lib/rademade_admin/model/info/relation/gallery.rb +12 -0
  86. data/lib/rademade_admin/model/reflection.rb +4 -0
  87. data/lib/rademade_admin/routing/mapper.rb +1 -1
  88. data/lib/rademade_admin/routing/resource.rb +4 -0
  89. data/lib/rademade_admin/uploader/crop_photo.rb +3 -2
  90. data/lib/rademade_admin/version.rb +1 -1
  91. metadata +83 -8
@@ -9,6 +9,10 @@ module RademadeAdmin
9
9
  @model_info.item_name
10
10
  end
11
11
 
12
+ def count
13
+ @model_info.menu_count
14
+ end
15
+
12
16
  def model
13
17
  @model_info.model
14
18
  end
@@ -7,6 +7,7 @@ module RademadeAdmin
7
7
  # - model
8
8
  # - name
9
9
  # - parent_menu (todo extract to menu method)
10
+ # - menu_count
10
11
  # - list
11
12
  # - form
12
13
  # - labels
@@ -4,7 +4,7 @@ module RademadeAdmin
4
4
 
5
5
  def success_action
6
6
  render :json => {
7
- :message => 'ok'
7
+ :message => I18n.t('rademade_admin.success_message')
8
8
  }
9
9
  end
10
10
 
@@ -12,9 +12,12 @@ module RademadeAdmin
12
12
  respond_to do |format|
13
13
  format.html { redirect_to admin_edit_uri(item) }
14
14
  format.json {
15
- success_message(item, 'was inserted!', {
16
- :form_action => admin_update_uri(item)
17
- })
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)
18
21
  }
19
22
  end
20
23
  end
@@ -23,7 +26,9 @@ module RademadeAdmin
23
26
  respond_to do |format|
24
27
  format.html { redirect_to admin_edit_uri(item) }
25
28
  format.json {
26
- success_message(item, 'data was updated!')
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)
27
32
  }
28
33
  end
29
34
  end
@@ -32,27 +37,36 @@ module RademadeAdmin
32
37
  respond_to do |format|
33
38
  format.html { redirect_to admin_list_uri(item) }
34
39
  format.json {
35
- success_message(item, 'was deleted!')
40
+ success_message(item, I18n.t('rademade_admin.success_delete_message'))
41
+ }
42
+ end
43
+ end
44
+
45
+ def success_status_change(item)
46
+ respond_to do |format|
47
+ format.html { redirect_to admin_list_uri(item) }
48
+ format.json {
49
+ success_message(item, t('rademade_admin.success_status_update_message'))
36
50
  }
37
51
  end
38
52
  end
39
53
 
40
54
  def success_unlink
41
55
  render :json => {
42
- :message => 'Entity was unlinked!'
56
+ :message => I18n.t('rademade_admin.success_unlink_message')
43
57
  }
44
58
  end
45
59
 
46
60
  def success_link
47
61
  render :json => {
48
- :message => 'Entity was linked!'
62
+ :message => I18n.t('rademade_admin.success_link_message')
49
63
  }
50
64
  end
51
65
 
52
- def success_message(item, action_message, additional_data = {})
66
+ def success_message(item, message, additional_data = {})
53
67
  render :json => {
54
68
  :data => Autocomplete::BaseSerializer.new([item]).as_json.first,
55
- :message => "#{model_info.singular_name.capitalize} #{action_message}"
69
+ :message => message
56
70
  }.merge(additional_data)
57
71
  end
58
72
 
@@ -1,16 +1,19 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'search/conditions/abstract'
3
+ require 'search/where'
3
4
 
4
5
  module RademadeAdmin
5
6
  module Search
6
7
  module Conditions
7
8
  class Autocomplete < Abstract
8
9
 
10
+ include RademadeAdmin::Search::Where
11
+
9
12
  protected
10
13
 
11
14
  def where
12
15
  @where_conditions = RademadeAdmin::Search::Part::Where.new(:and)
13
- append_query_condition
16
+ regex_filter(@where_conditions, @params[:q])
14
17
  append_search_params
15
18
  append_ids_params
16
19
  @where_conditions
@@ -22,16 +25,6 @@ module RademadeAdmin
22
25
 
23
26
  private
24
27
 
25
- def append_query_condition
26
- if @params[:q].present? and not @data_items.filter_fields.empty?
27
- query_where = RademadeAdmin::Search::Part::Where.new(:or)
28
- @data_items.filter_fields.each do |field|
29
- query_where.add(field, /#{@params[:q]}/i)
30
- end
31
- @where_conditions.sub_add(query_where)
32
- end
33
- end
34
-
35
28
  def append_search_params
36
29
  if @params[:search].present?
37
30
  @params[:search].each do |key, value|
@@ -1,25 +1,27 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'search/conditions/abstract'
3
+ require 'search/where'
3
4
 
4
5
  module RademadeAdmin
5
6
  module Search
6
7
  module Conditions
7
8
  class List < Abstract
8
9
 
10
+ include RademadeAdmin::Search::Where
11
+
9
12
  protected
10
13
 
11
14
  def where
12
- where_conditions = RademadeAdmin::Search::Part::Where.new(:and)
13
- @params.slice(*@data_items.origin_fields).each do |field, value|
14
- where_conditions.add(field, value)
15
- end
16
- where_conditions
15
+ @where_conditions = RademadeAdmin::Search::Part::Where.new(:and)
16
+ search_by_fields
17
+ regex_filter(@where_conditions, @params[:q])
18
+ @where_conditions
17
19
  end
18
20
 
19
21
  def order
20
22
  order_conditions = super
21
- field = @params[:sort] || default_order_field
22
- order_conditions.unshift(field, @params[:direction])
23
+ list_order_field = order_field
24
+ order_conditions.unshift(list_order_field, @params[:direction]) unless list_order_field.nil?
23
25
  order_conditions
24
26
  end
25
27
 
@@ -33,11 +35,21 @@ module RademadeAdmin
33
35
 
34
36
  private
35
37
 
36
- def default_order_field
37
- @data_items.has_field?(:position) ? :position : :id
38
+ def order_field
39
+ if @params[:sort]
40
+ @params[:sort]
41
+ else
42
+ @data_items.has_field?(:position) ? :position : nil
43
+ end
44
+ end
45
+
46
+ def search_by_fields
47
+ @params.slice(*@data_items.origin_fields).each do |field, value|
48
+ @where_conditions.add(field, value)
49
+ end
38
50
  end
39
51
 
40
52
  end
41
53
  end
42
54
  end
43
- end
55
+ end
@@ -26,8 +26,8 @@ module RademadeAdmin
26
26
 
27
27
  def order
28
28
  order_conditions = super
29
- field = @params[:sort] || default_order_field
30
- order_conditions.unshift(field, @params[:direction])
29
+ related_order_field = order_field
30
+ order_conditions.unshift(related_order_field, @params[:direction]) unless related_order_field.nil?
31
31
  order_conditions
32
32
  end
33
33
 
@@ -41,8 +41,12 @@ module RademadeAdmin
41
41
 
42
42
  private
43
43
 
44
- def default_order_field
45
- @data_items.has_field?(:position) ? :position : :id
44
+ def order_field
45
+ if @params[:sort]
46
+ @params[:sort]
47
+ else
48
+ @data_items.has_field?(:position) ? :position : nil
49
+ end
46
50
  end
47
51
 
48
52
  def related_item_ids
@@ -0,0 +1,20 @@
1
+ module RademadeAdmin
2
+ module Search
3
+ module Where
4
+
5
+ protected
6
+
7
+ def regex_filter(where_conditions, search)
8
+ if search.present? and not @data_items.filter_fields.empty?
9
+ query_where = RademadeAdmin::Search::Part::Where.new(:or)
10
+ @data_items.filter_fields.each do |field|
11
+ query_where.add(field, /#{search}/i)
12
+ end
13
+ where_conditions.sub_add(query_where)
14
+ end
15
+ where_conditions
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -19,11 +19,8 @@ module RademadeAdmin
19
19
  @params[:sort].present?
20
20
  end
21
21
 
22
- #
23
- # @return [RademadeAdmin::Model::Info::DataItem]
24
- #
25
22
  def sorting_sign(field)
26
- if field.name.to_s == @params[:sort]
23
+ if field.order_column.to_s == @params[:sort]
27
24
  return '⬇' if @params[:direction] == 'asc'
28
25
  return '⬆' if @params[:direction] == 'desc'
29
26
  end
@@ -0,0 +1,27 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ module Status
4
+ class Toggler
5
+
6
+ attr_reader :item
7
+
8
+ def initialize(model, id)
9
+ @model = model
10
+ @id = id
11
+ end
12
+
13
+ def init_item
14
+ @model_info = RademadeAdmin::Model::Graph.instance.model_info @model
15
+ @item = @model_info.model.find @id
16
+ end
17
+
18
+ def toggle
19
+ if @model_info.hideable?
20
+ @item.toggle
21
+ @item.save
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -9,23 +9,39 @@ module RademadeAdmin
9
9
  def template_path(*directories)
10
10
  "#{@root_dir}/#{directories.join('/')}"
11
11
  end
12
+
13
+ def index_template
14
+ abstract_template 'index'
15
+ end
12
16
 
13
17
  def inner_layout
14
18
  layout_path 'inner'
15
19
  end
16
20
 
21
+ def main_layout
22
+ layout_path 'main'
23
+ end
24
+
17
25
  def inner_form_layout
18
26
  layout_path 'inner/form'
19
27
  end
20
28
 
29
+ def form_block
30
+ block_path 'form'
31
+ end
32
+
21
33
  def form_control_block
22
34
  block_path 'form/control'
23
35
  end
24
36
 
25
- def form_lang_panel
37
+ def form_lang_panel_block
26
38
  block_path 'form/lang_panel'
27
39
  end
28
40
 
41
+ def form_separator_block
42
+ block_path 'form/separator'
43
+ end
44
+
29
45
  def pagination_block
30
46
  block_path 'pagination'
31
47
  end
@@ -34,6 +50,14 @@ module RademadeAdmin
34
50
  block_path 'on_page_select'
35
51
  end
36
52
 
53
+ def sort_reset_block
54
+ block_path 'sort_reset'
55
+ end
56
+
57
+ def search_block
58
+ block_path 'search'
59
+ end
60
+
37
61
  def header_block
38
62
  block_path 'header'
39
63
  end
@@ -54,8 +78,16 @@ module RademadeAdmin
54
78
  block_path 'table/head'
55
79
  end
56
80
 
81
+ def cancel_button
82
+ block_path 'button/cancel'
83
+ end
84
+
57
85
  private
58
86
 
87
+ def abstract_template(path)
88
+ template_path 'abstract', path
89
+ end
90
+
59
91
  def layout_path(layout)
60
92
  template_path '_layouts', layout
61
93
  end
@@ -0,0 +1,64 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module RademadeAdmin
3
+ module Upload
4
+ class GalleryPreviewService
5
+
6
+ include ActionView::Helpers::TagHelper
7
+ include ActionView::Context
8
+ include UriHelper
9
+
10
+ def preview_html(uploader)
11
+ content_tag(:div, HtmlBuffer.new([
12
+ gallery_image_html(uploader),
13
+ remove_ico_html(uploader),
14
+ crop_button_html(uploader)
15
+ ]), {
16
+ :class => 'gallery-image',
17
+ :data => {
18
+ :id => uploader.model.id.to_s
19
+ }
20
+ })
21
+ end
22
+
23
+ def crop_button_html(uploader)
24
+ content_tag(:span, I18n.translate('rademade_admin.crop'), {
25
+ :class => 'btn red-btn crop-btn',
26
+ :data => {
27
+ :crop => true,
28
+ :url => admin_url_for(:controller => 'gallery', :action => 'crop'),
29
+ :full_url => uploader.url,
30
+ :original_dimensions => uploader.original_dimensions.join(',')
31
+ }
32
+ }) if uploader.class.ancestors.include? RademadeAdmin::Uploader::CropPhoto
33
+ end
34
+
35
+ def gallery_image_preview(uploader)
36
+ uploader.resize(150, 100)
37
+ end
38
+
39
+ private
40
+
41
+ def gallery_image_html(uploader)
42
+ content_tag(:img, '', {
43
+ :src => gallery_image_preview(uploader),
44
+ :width => 150,
45
+ :height => 100
46
+ })
47
+ end
48
+
49
+ def remove_ico_html(uploader)
50
+ content_tag(:span, 'x', {
51
+ :class => 'remove-ico',
52
+ :data => {
53
+ :url => admin_url_for(
54
+ :controller => 'gallery',
55
+ :action => 'remove',
56
+ :id => uploader.model.id.to_s
57
+ )
58
+ }
59
+ })
60
+ end
61
+
62
+ end
63
+ end
64
+ end
@@ -1,22 +1 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Rademade Admin</title>
5
- <%= stylesheet_link_tag(:rademade_admin, :media => 'all', 'data-turbolinks-track' => true) %>
6
- <%= javascript_include_tag(:rademade_admin, 'data-turbolinks-track' => true) %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
-
10
- <body>
11
- <div class="wrapper">
12
- <%= yield %>
13
- </div>
14
- </body>
15
-
16
- <%= javascript_tag do %>
17
- I18n.defaultLocale = "<%= I18n.default_locale %>";
18
- I18n.locale = "<%= I18n.locale %>";
19
- I18n.fallbacks = true;
20
- <% end %>
21
-
22
- </html>
1
+ <%= render :template => @template_service.main_layout %>