rademade_admin 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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 %>