ab_admin 0.8.3 → 0.10.0

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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +11 -5
  4. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +0 -25
  5. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -5
  6. data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +33 -25
  7. data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +1 -1
  8. data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +24 -23
  9. data/app/assets/javascripts/ab_admin/core/init.js.coffee +7 -2
  10. data/app/assets/javascripts/ab_admin/core/search_form.js.coffee +1 -7
  11. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +23 -7
  12. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +16 -2
  13. data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -0
  14. data/app/assets/javascripts/ab_admin/main.js +3 -4
  15. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +71 -25
  16. data/app/assets/stylesheets/ab_admin/components/_base.scss +21 -1
  17. data/app/assets/stylesheets/ab_admin/components/_colored_tabs.scss +1 -1
  18. data/app/assets/stylesheets/ab_admin/components/_form.scss +16 -18
  19. data/app/assets/stylesheets/ab_admin/components/_grid_view.scss +2 -2
  20. data/app/assets/stylesheets/ab_admin/components/_locale_tabs.scss +11 -23
  21. data/app/assets/stylesheets/ab_admin/components/_navigation.scss +7 -11
  22. data/app/assets/stylesheets/ab_admin/components/_table_view.scss +85 -11
  23. data/app/assets/stylesheets/ab_admin/components/_tooltip.scss +81 -0
  24. data/app/assets/stylesheets/ab_admin/components/_tree_view.scss +1 -1
  25. data/app/assets/stylesheets/ab_admin/devise.scss +2 -2
  26. data/app/assets/stylesheets/ab_admin/fileupload.scss +2 -9
  27. data/app/assets/stylesheets/ab_admin/main.scss +1 -2
  28. data/app/controllers/admin/assets_controller.rb +1 -1
  29. data/app/controllers/admin/base_controller.rb +133 -149
  30. data/app/controllers/admin/dashboards_controller.rb +2 -2
  31. data/app/controllers/admin/locators_controller.rb +8 -6
  32. data/app/controllers/admin/manager_controller.rb +19 -49
  33. data/app/controllers/admin/static_pages_controller.rb +0 -4
  34. data/app/controllers/admin/structures_controller.rb +2 -2
  35. data/app/views/ab_admin/devise/sessions/new.html.slim +2 -0
  36. data/app/views/admin/assets/batch_edit.html.slim +3 -2
  37. data/app/views/admin/base/_search_layout.html.slim +7 -6
  38. data/app/views/admin/base/create.js.erb +6 -3
  39. data/app/views/admin/base/edit.js.erb +1 -1
  40. data/app/views/admin/base/index.html.slim +4 -4
  41. data/app/views/admin/base/new.js.erb +1 -1
  42. data/app/views/admin/base/update.js.erb +7 -2
  43. data/app/views/admin/fileupload/_asset_templates.html.slim +1 -2
  44. data/app/views/admin/fileupload/_image.html.slim +1 -2
  45. data/app/views/admin/locators/edit.html.slim +7 -6
  46. data/app/views/admin/manager/_map.html.slim +4 -0
  47. data/app/views/admin/manager/_show_table.html.slim +1 -1
  48. data/app/views/admin/manager/_stats.html.slim +4 -0
  49. data/app/views/admin/manager/_table.html.slim +7 -4
  50. data/app/views/admin/shared/_content_actions.html.slim +35 -30
  51. data/app/views/admin/shared/_flash.html.slim +5 -4
  52. data/app/views/admin/shared/_locale_tabs.html.slim +2 -2
  53. data/app/views/admin/shared/_main_menu.html.slim +1 -1
  54. data/app/views/admin/shared/_save_buttons.html.slim +10 -1
  55. data/app/views/admin/structures/_form.html.slim +1 -1
  56. data/app/views/admin/users/_form.html.slim +3 -3
  57. data/app/views/admin/users/_search_form.html.slim +1 -1
  58. data/app/views/layouts/admin/_footer.html.slim +0 -1
  59. data/app/views/layouts/admin/_navigation.html.slim +1 -1
  60. data/app/views/layouts/admin/application.html.slim +2 -2
  61. data/config/locales/de.yml +1 -2
  62. data/config/locales/en.yml +9 -15
  63. data/config/locales/it.yml +1 -0
  64. data/config/locales/ru.yml +0 -1
  65. data/config/locales/uk.yml +0 -1
  66. data/db/migrate/20130101000001_create_users.rb +1 -4
  67. data/db/migrate/20130101000003_create_assets.rb +1 -1
  68. data/db/migrate/20130101000004_create_headers.rb +5 -5
  69. data/db/migrate/20130101000005_create_static_pages.rb +2 -5
  70. data/db/migrate/20130101000006_create_structures.rb +1 -1
  71. data/db/migrate/20130101000007_base_translations.rb +43 -12
  72. data/db/migrate/20130101000008_create_admin_comments.rb +2 -7
  73. data/db/migrate/20130101000009_create_tracks.rb +4 -8
  74. data/lib/ab_admin/abstract_resource.rb +6 -5
  75. data/lib/ab_admin/carrierwave/base_uploader.rb +87 -75
  76. data/lib/ab_admin/carrierwave/glue.rb +0 -5
  77. data/lib/ab_admin/concerns/admin_addition.rb +15 -27
  78. data/lib/ab_admin/concerns/translations_macro.rb +97 -0
  79. data/lib/ab_admin/concerns/utilities.rb +2 -2
  80. data/lib/ab_admin/config/base.rb +27 -4
  81. data/lib/ab_admin/controllers/callbacks.rb +3 -26
  82. data/lib/ab_admin/core_ext/array.rb +1 -50
  83. data/lib/ab_admin/core_ext/hash.rb +2 -31
  84. data/lib/ab_admin/core_ext/other.rb +0 -6
  85. data/lib/ab_admin/core_ext/string.rb +1 -86
  86. data/lib/ab_admin/devise.rb +7 -0
  87. data/lib/ab_admin/engine.rb +2 -1
  88. data/lib/ab_admin/hooks/ckeditor_lazy.rb +13 -0
  89. data/lib/ab_admin/hooks/will_paginate_id_prefetch.rb +8 -6
  90. data/lib/ab_admin/hooks/will_paginate_no_uri.rb +1 -1
  91. data/lib/ab_admin/i18n_tools/google_translate.rb +3 -1
  92. data/lib/ab_admin/i18n_tools/model_translator.rb +1 -1
  93. data/lib/ab_admin/menu/base_group.rb +0 -1
  94. data/lib/ab_admin/menu/group.rb +2 -4
  95. data/lib/ab_admin/menu/item.rb +4 -8
  96. data/lib/ab_admin/models/asset.rb +7 -10
  97. data/lib/ab_admin/models/header.rb +2 -2
  98. data/lib/ab_admin/models/locator.rb +29 -3
  99. data/lib/ab_admin/models/settings.rb +2 -2
  100. data/lib/ab_admin/models/structure.rb +3 -3
  101. data/lib/ab_admin/models/track.rb +15 -3
  102. data/lib/ab_admin/models/user.rb +12 -48
  103. data/lib/ab_admin/utils/csv_document.rb +8 -6
  104. data/lib/ab_admin/utils/eval_helpers.rb +0 -13
  105. data/lib/ab_admin/utils/logger.rb +12 -2
  106. data/lib/ab_admin/utils/mysql.rb +2 -3
  107. data/lib/ab_admin/utils/xls_document.rb +18 -18
  108. data/lib/ab_admin/utils.rb +0 -5
  109. data/lib/ab_admin/version.rb +1 -1
  110. data/lib/ab_admin/views/admin_helpers.rb +43 -28
  111. data/lib/ab_admin/views/admin_navigation_helpers.rb +18 -16
  112. data/lib/ab_admin/views/form_builder.rb +7 -5
  113. data/lib/ab_admin/views/helpers.rb +0 -9
  114. data/lib/ab_admin/views/inputs/ckeditor_input.rb +1 -5
  115. data/lib/ab_admin/views/manager_helpers.rb +15 -6
  116. data/lib/ab_admin/views/search_form_builder.rb +13 -13
  117. data/lib/ab_admin/views/will_paginate_bootstrap_renderer.rb +60 -0
  118. data/lib/ab_admin.rb +44 -32
  119. data/lib/generators/ab_admin/glob/glob_generator.rb +4 -5
  120. data/lib/generators/ab_admin/glob/templates/migration.erb +10 -7
  121. data/lib/generators/ab_admin/install/templates/config/ab_admin.rb.erb +1 -1
  122. data/lib/generators/ab_admin/install/templates/models/user.rb +1 -13
  123. data/lib/generators/ab_admin/install/templates/spec/spec_helper.rb +0 -1
  124. data/lib/generators/ab_admin/install/templates/spec/support/database_cleaner.rb +8 -11
  125. data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
  126. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
  127. data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +16 -3
  128. data/lib/generators/ab_admin/model/model_generator.rb +3 -4
  129. data/lib/generators/ab_admin/model/templates/resource.erb +5 -2
  130. data/lib/generators/ab_admin/resource/resource_generator.rb +0 -4
  131. data/lib/generators/ab_admin/resource/templates/controller.erb +2 -9
  132. data/lib/tasks/assets.rake +5 -5
  133. metadata +45 -85
  134. data/app/assets/images/admin/Jcrop.gif +0 -0
  135. data/app/assets/images/admin/flags/de.png +0 -0
  136. data/app/assets/images/admin/flags/en.png +0 -0
  137. data/app/assets/images/admin/flags/es.png +0 -0
  138. data/app/assets/images/admin/flags/fr.png +0 -0
  139. data/app/assets/images/admin/flags/it.png +0 -0
  140. data/app/assets/images/admin/flags/ja.png +0 -0
  141. data/app/assets/images/admin/flags/pl.png +0 -0
  142. data/app/assets/images/admin/flags/ru.png +0 -0
  143. data/app/assets/images/admin/flags/uk.png +0 -0
  144. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +0 -33
  145. data/app/assets/stylesheets/ab_admin/components/_columns_hider.scss +0 -5
  146. data/app/assets/stylesheets/ab_admin/components/_perms.scss +0 -39
  147. data/app/views/admin/shared/_columns_hider.html.slim +0 -9
  148. data/lib/ab_admin/hooks/globalize_locale_suffix_accessors.rb +0 -25
  149. data/lib/ab_admin/hooks/globalize_valid_locale.rb +0 -9
  150. data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +0 -19
  151. data/lib/generators/template.rb +0 -96
@@ -1,7 +1,7 @@
1
1
  module AbAdmin
2
2
  module Views
3
3
  class SearchFormBuilder < ::Ransack::Helpers::FormBuilder
4
- delegate :content_tag, :tag, :params,
4
+ delegate :content_tag, :tag, :query_params,
5
5
  :text_field_tag, :check_box_tag, :radio_button_tag, :label_tag, :select_tag,
6
6
  :options_for_select, :options_from_collection_for_select, :hidden_field_tag, to: :@template
7
7
 
@@ -43,14 +43,14 @@ module AbAdmin
43
43
  else
44
44
  options[:input_html][:include_blank] = true
45
45
  end
46
- select_tag("q[#{param}]", options_for_select(collection, params[:q][param]), options[:input_html])
46
+ select_tag("q[#{param}]", options_for_select(collection, query_params[param]), options[:input_html])
47
47
  end
48
48
  end
49
49
 
50
50
  def ac_select_field(attr, options={})
51
51
  klass = options[:klass]
52
52
  options[:param] ||= "#{options[:value_attr] || attr}_eq"
53
- pre_select = params[:q].try!(:[], options[:param]) ? klass.where(id: params[:q][options[:param]]).map(&:for_input_token) : []
53
+ pre_select = query_params.try!(:[], options[:param]) ? klass.where(id: query_params[options[:param]]).map(&:for_input_token) : []
54
54
  options[:input_html] ||= {}
55
55
  options[:input_html].deep_merge! class: 'fancy_select', data: {class: klass.name, pre: pre_select.to_json}
56
56
  string_field attr, options
@@ -59,8 +59,8 @@ module AbAdmin
59
59
  def date_field(attr, options={})
60
60
  label(attr, options[:label]) + content_tag(:div, class: 'controls') do
61
61
  gt_param, lt_param = "#{attr}_gteq", "#{attr}_lteq"
62
- text_field_tag("q[#{gt_param}]", params[:q][gt_param], class: 'input-small datepicker', autocomplete: 'off') + ' - ' +
63
- text_field_tag("q[#{lt_param}]", params[:q][lt_param], class: 'input-small datepicker', autocomplete: 'off', id: "q_#{attr}")
62
+ text_field_tag("q[#{gt_param}]", query_params[gt_param], class: 'input-small datepicker', autocomplete: 'off') +
63
+ text_field_tag("q[#{lt_param}]", query_params[lt_param], class: 'input-small datepicker', autocomplete: 'off', id: "q_#{attr}")
64
64
  end
65
65
  end
66
66
 
@@ -68,7 +68,7 @@ module AbAdmin
68
68
  if builder_options[:compact_labels]
69
69
  options[:input_html] ||= {}
70
70
  options[:input_html][:placeholder] ||= extract_label(attr, options)
71
- wrapper_html = {'class' => 'controls js-tooltip', 'data-placement' => 'left', 'title' => options[:input_html][:placeholder]}
71
+ wrapper_html = {'class' => 'controls tool tool-left', 'data-placement' => 'left', 'title' => options[:input_html][:placeholder]}
72
72
  content_tag(:div, wrapper_html, &block)
73
73
  else
74
74
  label(attr, options[:label]) + content_tag(:div, class: 'controls', &block)
@@ -80,7 +80,7 @@ module AbAdmin
80
80
  param = options[:param] || "#{options[:value_attr] || attr}_cont"
81
81
  options[:input_html] ||= {}
82
82
  options[:input_html][:id] = "q_#{attr}"
83
- text_field_tag("q[#{param}]", params[:q][param], options[:input_html])
83
+ text_field_tag("q[#{param}]", query_params[param], options[:input_html])
84
84
  end
85
85
  end
86
86
 
@@ -92,9 +92,9 @@ module AbAdmin
92
92
  def number_field(attr, options={})
93
93
  label(attr, options[:label]) + content_tag(:div, class: 'controls') do
94
94
  opts = [['=', 'eq'], ['>', 'gt'], ['<', 'lt']].map { |m| [m[0], "#{attr}_#{m[1]}"] }
95
- current_filter = (opts.detect { |m| params[:q][m[1]].present? } || opts.first)[1]
95
+ current_filter = (opts.detect { |m| query_params[m[1]].present? } || opts.first)[1]
96
96
  select_tag('', options_for_select(opts, current_filter), class: 'input-small predicate-select') +
97
- text_field_tag("q[#{current_filter}]", params[:q][current_filter], class: 'input-small', type: :number)
97
+ text_field_tag("q[#{current_filter}]", query_params[current_filter], class: 'input-small', type: :number, step: 0.01)
98
98
  end
99
99
  end
100
100
 
@@ -102,10 +102,10 @@ module AbAdmin
102
102
  content_tag(:div, class: 'pull-left') do
103
103
  param = options[:param] || "#{attr}_eq"
104
104
  content_tag(:label, class: 'checkbox inline') do
105
- check_box_tag("q[#{param}]", 1, params[:q][param].to_i == 1, class: 'inline', id: "q_#{attr}") + I18n.t('simple_form.yes')
105
+ check_box_tag("q[#{param}]", 1, query_params[param].to_i == 1, class: 'inline', id: "q_#{attr}") + I18n.t('simple_form.yes')
106
106
  end +
107
107
  content_tag(:label, class: 'checkbox inline') do
108
- check_box_tag("q[#{param}]", 0, params[:q][param] && params[:q][param].to_i == 0, class: 'inline') + I18n.t('simple_form.no')
108
+ check_box_tag("q[#{param}]", 0, query_params[param] && query_params[param].to_i == 0, class: 'inline') + I18n.t('simple_form.no')
109
109
  end
110
110
  end + label(attr, options[:label], class: 'right-label')
111
111
  end
@@ -165,11 +165,11 @@ module AbAdmin
165
165
  content_tag(:div, class: 'pull-left') do
166
166
  content_tag(:label, class: 'checkbox inline') do
167
167
  param = "#{attr}_#{predicates[:yes][0]}"
168
- check_box_tag("q[#{param}]", predicates[:yes][1], params[:q][param] == predicates[:yes][1], class: 'inline', id: "q_#{attr}") + I18n.t('simple_form.yes')
168
+ check_box_tag("q[#{param}]", predicates[:yes][1], query_params[param] == predicates[:yes][1], class: 'inline', id: "q_#{attr}") + I18n.t('simple_form.yes')
169
169
  end +
170
170
  content_tag(:label, class: 'checkbox inline') do
171
171
  param = "#{attr}_#{predicates[:no][0]}"
172
- check_box_tag("q[#{param}]", predicates[:no][1], params[:q][param] == predicates[:no][1], class: 'inline') + I18n.t('simple_form.no')
172
+ check_box_tag("q[#{param}]", predicates[:no][1], query_params[param] == predicates[:no][1], class: 'inline') + I18n.t('simple_form.no')
173
173
  end
174
174
  end + label(attr, options[:label], class: 'right-label')
175
175
  end
@@ -0,0 +1,60 @@
1
+ # Extracted from `will_paginate-bootstrap` (v0.2.5 written by Nicholas Dainty) because of some deprecated staff
2
+ require "will_paginate/view_helpers/action_view"
3
+ module AbAdmin
4
+ module Views
5
+ class WillPaginateBootstrapRenderer < WillPaginate::ActionView::LinkRenderer
6
+ # Contains functionality shared by all renderer classes.
7
+ ELLIPSIS = "&hellip;"
8
+
9
+ def to_html
10
+ list_items = pagination.map do |item|
11
+ item.is_a?(Integer) ? page_number(item) : send(item)
12
+ end.join(@options[:link_separator])
13
+
14
+ if @options[:bootstrap].to_i >= 3
15
+ tag("ul", list_items, class: "pagination")
16
+ else
17
+ html_container(tag("ul", list_items))
18
+ end
19
+ end
20
+
21
+ def container_attributes
22
+ @container_attributes ||= @options.except(*(WillPaginate::ViewHelpers.pagination_options.keys + [:renderer, :link_options] - [:class]))
23
+ end
24
+
25
+ protected
26
+
27
+ def page_number(page)
28
+ link_options = @options[:link_options] || {}
29
+ if page == current_page
30
+ tag("li", tag("span", page), class: "active")
31
+ else
32
+ tag("li", link(page, page, link_options.merge(rel: rel_value(page))))
33
+ end
34
+ end
35
+
36
+ def gap
37
+ tag("li", link(ELLIPSIS, "#"), class: "disabled")
38
+ end
39
+
40
+ def previous_page
41
+ num = @collection.current_page > 1 && @collection.current_page - 1
42
+ previous_or_next_page(num, @options[:previous_label], "prev")
43
+ end
44
+
45
+ def next_page
46
+ num = @collection.current_page < @collection.total_pages && @collection.current_page + 1
47
+ previous_or_next_page(num, @options[:next_label], "next")
48
+ end
49
+
50
+ def previous_or_next_page(page, text, classname)
51
+ link_options = @options[:link_options] || {}
52
+ if page
53
+ tag("li", link(text, page, link_options), class: classname)
54
+ else
55
+ tag("li", tag("span", text), class: "%s disabled" % classname)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
data/lib/ab_admin.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'inherited_resources'
2
2
  require 'rack-pjax'
3
- require 'has_scope'
4
3
  require 'cancan'
5
4
 
6
5
  require 'ab_admin/version'
@@ -9,7 +8,7 @@ require 'ab_admin/engine'
9
8
 
10
9
  module AbAdmin
11
10
  DOMAINNAME_REGEXP = /\A(?:[0-9a-z]\.|[0-9a-z][0-9a-z\-]*[0-9a-z]+\.)+[a-z]{2,6}\z/
12
- EMAIL_REGEXP = /\A[_A-Za-z0-9\-\+]+(?:\.[_A-Za-z0-9\-\+]+)*@(?:[0-9a-z]\.|[0-9a-z][0-9a-z\-]*[0-9a-z]+\.)+[a-z]{2,6}\z/
11
+ EMAIL_REGEXP = /\A(?#Local part)[_A-Za-z0-9\-+]+(?:\.[_A-Za-z0-9\-+]+)*@(?#Subdomains)(?:[0-9a-z]\.|[0-9a-z][0-9a-z\-]*[0-9a-z]+\.)+(?#TopLevel Domains)[a-z]{2,18}\z/
13
12
 
14
13
  autoload :Utils, 'ab_admin/utils'
15
14
  autoload :Devise, 'ab_admin/devise'
@@ -20,6 +19,7 @@ module AbAdmin
20
19
  autoload :Search, 'ab_admin/config/base'
21
20
  autoload :Export, 'ab_admin/config/base'
22
21
  autoload :Form, 'ab_admin/config/base'
22
+ autoload :Scope, 'ab_admin/config/base'
23
23
  autoload :BaseBuilder, 'ab_admin/config/base'
24
24
  autoload :FieldGroup, 'ab_admin/config/base'
25
25
  autoload :Field, 'ab_admin/config/base'
@@ -63,6 +63,7 @@ module AbAdmin
63
63
  autoload :HasTracking, 'ab_admin/concerns/has_tracking'
64
64
  autoload :AssetHumanNames, 'ab_admin/concerns/asset_human_names'
65
65
  autoload :Fileuploads, 'ab_admin/concerns/fileuploads'
66
+ autoload :TranslationsMacro, 'ab_admin/concerns/translations_macro'
66
67
  end
67
68
 
68
69
  module Controllers
@@ -100,6 +101,7 @@ module AbAdmin
100
101
  autoload :SearchFormBuilder, 'ab_admin/views/search_form_builder'
101
102
  autoload :UrlForRoutes, 'ab_admin/views/url_for_routes'
102
103
  autoload :ContentOnlyWrapper, 'ab_admin/views/content_only_wrapper'
104
+ autoload :WillPaginateBootstrapRenderer, 'ab_admin/views/will_paginate_bootstrap_renderer'
103
105
 
104
106
  module Inputs
105
107
  autoload :CkeditorInput, 'ab_admin/views/inputs/ckeditor_input'
@@ -125,6 +127,13 @@ module AbAdmin
125
127
  end
126
128
 
127
129
  mattr_accessor :menu
130
+ mattr_accessor :body_css_class
131
+ mattr_accessor :favicon_path
132
+ mattr_accessor :footer_notes
133
+ mattr_accessor :default_url_options
134
+ mattr_accessor :locale
135
+ mattr_accessor :root_path
136
+ mattr_accessor :base_url
128
137
 
129
138
  mattr_accessor :flash_keys
130
139
  @@flash_keys = [:notice, :error]
@@ -135,15 +144,15 @@ module AbAdmin
135
144
  mattr_accessor :site_name
136
145
  @@site_name = 'AbAdmin'
137
146
 
138
- mattr_accessor :root_path
139
-
140
- mattr_accessor :body_css_class
141
-
142
- mattr_accessor :favicon_path
147
+ mattr_accessor :footer
148
+ @@footer = true
143
149
 
144
150
  mattr_accessor :devise_layout
145
151
  @@devise_layout = 'admin/devise'
146
152
 
153
+ mattr_accessor :render_unauthorized
154
+ @@render_unauthorized = true
155
+
147
156
  mattr_accessor :image_types
148
157
  @@image_types = %w(image/jpeg image/png image/gif image/jpg image/pjpeg image/tiff image/x-png)
149
158
 
@@ -154,46 +163,49 @@ module AbAdmin
154
163
  @@translate_models = %w(User Asset Structure StaticPage Header AdminComment)
155
164
 
156
165
  mattr_accessor :assets
157
- @@assets = %w(ab_admin/devise.css bootstrap.js ab_admin/loading.gif ab_admin/clear.png ab_admin/clear.png admin/flags/*.png)
166
+ @@assets = %w(ab_admin/devise.css bootstrap.js ab_admin/loading.gif ab_admin/clear.png ab_admin/clear.png)
158
167
 
159
168
  mattr_accessor :test_settings
160
169
  @@test_settings = {}
161
170
 
162
- mattr_accessor :footer
163
- @@footer = true
164
-
165
- mattr_accessor :footer_notes
166
-
167
- mattr_accessor :default_url_options
168
-
169
- mattr_accessor :locale
170
-
171
171
  mattr_accessor :fileupload_url
172
172
  @@fileupload_url = '/admin/assets'
173
173
 
174
174
  mattr_accessor :uploads_dir
175
175
  @@uploads_dir = 'uploads'
176
176
 
177
- mattr_accessor :base_url
178
-
179
- mattr_accessor :default_resource_settings
180
- @@default_resource_settings = {index_view: 'table', search: true, batch: true, hotkeys: true, list_dblclick: true}
177
+ mattr_accessor :date_format
178
+ @@date_format = '%d.%m.%y'
181
179
 
182
- mattr_accessor :default_per_page
183
- @@default_per_page = 50
180
+ mattr_accessor :datetime_format
181
+ @@datetime_format = '%d.%m.%y %H:%M'
184
182
 
185
- mattr_accessor :view_default_per_page
186
- @@view_default_per_page = Hash.new { AbAdmin.default_per_page }
187
- @@view_default_per_page[:tree] = 1000
183
+ mattr_accessor :default_permitted_params
184
+ @@default_permitted_params = [:fileupload_guid]
188
185
 
189
- mattr_accessor :max_per_page
190
- @@max_per_page = Float::INFINITY
186
+ mattr_accessor :translated_locales
187
+ @@translated_locales = []
191
188
 
192
- mattr_accessor :per_page_variants
193
- @@per_page_variants = [50, 100, 500, 1000]
189
+ mattr_accessor :locale_to_country_code
190
+ @@locale_to_country_code = {ja: :jp, en: :gb, uk: :ua}
194
191
 
195
- mattr_accessor :default_permitted_params
196
- @@default_permitted_params = [:fileupload_guid]
192
+ mattr_accessor :default_resource_settings
193
+ @@default_resource_settings = {
194
+ index_views: [:table],
195
+ search: true,
196
+ export: true,
197
+ batch: true,
198
+ hotkeys: true,
199
+ button_scopes: true,
200
+ list_dblclick: true,
201
+ max_per_page: 10_000,
202
+ per_page_variants: [50, 100, 500, 1000],
203
+ default_per_page: 50,
204
+ view_default_per_page: Hash.new { 50 }.update(table: 50, tree: 1000, map: 1000),
205
+ pagination_index_views: [:table, :grid],
206
+ collection_actions: %w(index search batch rebuild),
207
+ id_column_with_created_at: true
208
+ }
197
209
 
198
210
  extend Utils
199
211
 
@@ -2,7 +2,7 @@ require 'rails/generators/active_record'
2
2
  module AbAdmin
3
3
  module Generators
4
4
  class GlobGenerator < ActiveRecord::Generators::Base
5
- desc 'Generates migration for models without globalize tables'
5
+ desc 'Generates migration for models without translations tables'
6
6
 
7
7
  source_root File.expand_path('../templates', __FILE__)
8
8
 
@@ -17,18 +17,18 @@ module AbAdmin
17
17
  def model_attrs
18
18
  @model_attrs ||= begin
19
19
  models.each_with_object({}) do |m, h|
20
- h[m.name] = m.translated_attribute_names.map { |attr| "#{attr}: :#{get_type(attr)}" }.join(', ')
20
+ h[m.name] = m.translated_attribute_names.map { |attr| [attr, get_type(attr)] }
21
21
  end
22
22
  end
23
23
  end
24
24
 
25
25
  def migration_name
26
- "create_globalize_#{models.map { |m| m.model_name.singular }.join('_')}"
26
+ "create_translations_#{models.map { |m| m.model_name.singular }.join('_')}"
27
27
  end
28
28
 
29
29
  def models
30
30
  @models ||= begin
31
- all_translated.reject { |m| conn.data_source_exists? m.translations_table_name }
31
+ all_translated.reject { |m| conn.data_source_exists? m.translation_class.table_name }
32
32
  end
33
33
  end
34
34
 
@@ -53,7 +53,6 @@ module AbAdmin
53
53
  :string
54
54
  end
55
55
  end
56
-
57
56
  end
58
57
  end
59
58
  end
@@ -1,13 +1,16 @@
1
1
  class <%= migration_class_name %> < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
2
- def up
2
+ def change
3
3
  <%- models.each do |m| -%>
4
- <%= m.name %>.create_translation_table! <%= model_attrs[m.name] %>
5
- <%- end -%>
6
- end
4
+ create_table :<%= m.model_name.singular %>_translations do |t|
5
+ t.references :<%= m.model_name.singular %>, null: false
6
+ t.string :locale, limit: 5, null: false
7
+ <%- model_attrs[m.name].each do |attr, type| -%>
8
+ t.<%= type %> :<%= attr %>
9
+ <%- end -%>
7
10
 
8
- def down
9
- <%- models.each do |m| -%>
10
- <%= m.name %>.drop_translation_table!
11
+ t.timestamps
12
+ end
13
+ add_index :<%= m.model_name.singular %>_translations, [:<%= m.model_name.singular %>_id, :locale], unique: true, name: '<%= m.table_name %>_ts_<%= m.model_name.singular %>_id_locale'
11
14
  <%- end -%>
12
15
  end
13
16
  end
@@ -1,6 +1,6 @@
1
1
  require 'ab_admin/hooks'
2
2
 
3
- I18n.available_locales = Globalize.available_locales = [:ru, :en]
3
+ I18n.available_locales = AbAdmin.translated_locales = [:en]
4
4
 
5
5
  AbAdmin.setup do |config|
6
6
  config.site_name = '<%= app_const_base.titleize %>'
@@ -1,22 +1,10 @@
1
1
  class User < ApplicationRecord
2
2
  devise :database_authenticatable, :confirmable, :lockable,
3
- :recoverable, :rememberable, :trackable, :validatable, :registerable,
4
- :encryptable, encryptor: :sha512
3
+ :recoverable, :rememberable, :trackable, :validatable, :registerable
5
4
 
6
5
  include AbAdmin::Concerns::AdminAddition
7
6
  include AbAdmin::Models::User
8
7
 
9
8
  fileuploads :avatar
10
9
 
11
- def init
12
- set_default_role
13
- self.locale ||= 'ru'
14
- self.time_zone ||= 'Kiev'
15
- end
16
-
17
- def password_required?
18
- return true if password.present?
19
- return false if persisted? && password.blank?
20
- super
21
- end
22
10
  end
@@ -15,5 +15,4 @@ RSpec.configure do |config|
15
15
  config.include Devise::TestHelpers, type: :controller
16
16
  config.include MailerMacros
17
17
  config.before(:each) { reset_email }
18
-
19
18
  end
@@ -1,17 +1,14 @@
1
- RSpec.configure do |config|
2
- config.use_transactional_fixtures = false
1
+ require 'database_cleaner'
3
2
 
4
- config.before :all do
3
+ RSpec.configure do |config|
4
+ config.before(:suite) do
5
5
  DatabaseCleaner.strategy = :transaction
6
- DatabaseCleaner.clean_with(:truncation)
6
+ DatabaseCleaner.clean_with(:truncation, except: %w(ar_internal_metadata countries country_translations))
7
7
  end
8
8
 
9
- config.before :each do
10
- DatabaseCleaner.start
9
+ config.around(:each) do |example|
10
+ DatabaseCleaner.cleaning do
11
+ example.run
12
+ end
11
13
  end
12
-
13
- config.after :each do
14
- DatabaseCleaner.clean
15
- end
16
-
17
14
  end
@@ -1,5 +1,5 @@
1
1
  class AttachmentFileUploader < AbAdmin::CarrierWave::BaseUploader
2
- def extension_whitelist
2
+ def extension_allowlist
3
3
  %w(pdf doc docx xls xlsx ppt pptx jpg jpeg gif png zip rar csv)
4
4
  end
5
5
  end
@@ -6,7 +6,7 @@ class AvatarUploader < AbAdmin::CarrierWave::BaseUploader
6
6
  process resize_to_fill: [80, 80, 'North']
7
7
  end
8
8
 
9
- def extension_whitelist
9
+ def extension_allowlist
10
10
  %w(jpg jpeg gif png)
11
11
  end
12
12
 
@@ -1,13 +1,26 @@
1
1
  class PictureUploader < AbAdmin::CarrierWave::BaseUploader
2
2
 
3
- process quality: 80
4
- process cropper: :cropper_geometry
3
+ # process quality: 80
4
+ # process cropper: :cropper_geometry
5
5
 
6
6
  version :thumb do
7
7
  process resize_to_fill: [80, 80]
8
8
  end
9
9
 
10
- def extension_whitelist
10
+ version :content do
11
+ process quality: 80
12
+ process resize_to_fill: [800, 800]
13
+ end
14
+
15
+ version :content_webp do
16
+ process convert_to_webp: [{quality: 90, method: 5, resize_to_fill: [800, 800]}]
17
+ end
18
+
19
+ # version :content_webp do
20
+ # process convert_to_webp: [{quality: 80, method: 5, resize_w: 800, resize_h: 800}]
21
+ # end
22
+
23
+ def extension_allowlist
11
24
  %w(jpg jpeg gif png)
12
25
  end
13
26
  end
@@ -31,17 +31,16 @@ module AbAdmin
31
31
  protected
32
32
 
33
33
  def model_instance
34
- @model_instance ||= model.new
34
+ model.new
35
35
  end
36
36
 
37
37
  def translated_columns
38
- @translated_columns ||= model.respond_to?(:translated_attribute_names) ? model.translated_attribute_names.map(&:to_s) : []
38
+ model.respond_to?(:translated_attribute_names) ? model.translated_attribute_names.map(&:to_s) : []
39
39
  end
40
40
 
41
41
  def index_attrs
42
- @attrs ||= model_instance.attributes.keys.map(&:to_s)
42
+ model_instance.attributes.keys.map(&:to_s)
43
43
  end
44
-
45
44
  end
46
45
  end
47
46
  end
@@ -2,11 +2,14 @@ class AbAdmin<%= model.name %> < AbAdmin::AbstractResource
2
2
  permitted_params :all
3
3
 
4
4
  <% if model.respond_to?(:acts_as_nested_set_options) -%>
5
- settings index_view: 'tree'
5
+ settings index_views: [:tree]
6
6
  <% else -%>
7
7
  table do
8
8
  <% index_attrs.without('id', 'updated_at').each do |attr| -%>
9
- field :<%= attr -%><%= ', sortable: false' if translated_columns.include?(attr) %>
9
+ field :<%= attr -%><%= ', sortable: false' if translated_columns.include?(attr.to_s) %>
10
+ <% end -%>
11
+ <% translated_columns.each do |attr| -%>
12
+ field :<%= attr -%>, sortable: false
10
13
  <% end -%>
11
14
  end
12
15
 
@@ -13,10 +13,6 @@ module AbAdmin
13
13
  class_option :skip_table, type: :boolean, default: false, description: 'Don\'t create table template'
14
14
  class_option :skip_search_form, type: :boolean, default: false, description: 'Don\'t create search_form template'
15
15
 
16
- hook_for :helper, in: :rails do |instance, helper|
17
- instance.invoke helper, ["admin/#{instance.send(:plural_name)}"]
18
- end
19
-
20
16
  def create_controller_files
21
17
  template 'controller.erb', File.join('app/controllers/admin', "#{controller_file_name}_controller.rb")
22
18
  end
@@ -5,18 +5,11 @@ class Admin::<%= controller_class_name %>Controller < Admin::BaseController
5
5
  <% end -%>
6
6
  load_and_authorize_resource
7
7
 
8
- <% if model.respond_to?(:visible) -%>
9
- has_scope :visible
10
- <% end -%>
11
- <% if model.respond_to?(:un_visible) -%>
12
- has_scope :un_visible
13
- <% end -%>
14
-
15
8
  <% if model.respond_to?(:acts_as_nested_set_options) -%>
16
9
  protected
17
10
 
18
- def settings
19
- {index_view: 'tree'}
11
+ def build_settings
12
+ super.merge!(index_views: 'tree')
20
13
  end
21
14
  <% end -%>
22
15
  end
@@ -6,14 +6,14 @@ namespace :assets do
6
6
  task reprocess: :environment do
7
7
  name = (ENV['CLASS'] || ENV['class'] || 'Asset').to_s
8
8
  klass = name.safe_constantize
9
+ raise "Cannot find a constant with the #{name} specified in the argument string" if klass.nil?
9
10
 
11
+ versions = []
10
12
  if ENV['VERSIONS']
11
- versions = ENV['VERSIONS'].split(',').map(&:to_sym)
12
- else
13
- versions = []
13
+ all_versions = klass.uploaders[:data].versions.keys.map(&:to_s)
14
+ versions = ENV['VERSIONS'].split(',').flat_map{|v| all_versions.find_all {|vv| vv =~ Regexp.new("^#{v.gsub('*', '.*')}$") } }.map(&:to_sym).uniq
14
15
  end
15
-
16
- raise "Cannot find a constant with the #{name} specified in the argument string" if klass.nil?
16
+ puts "Model: #{klass.name}, versions: #{versions.presence || 'ALL'}"
17
17
 
18
18
  bar = ProgressBar.create(title: name, total: klass.count, format: '%c of %C - %a %e |%b>>%i| %p%% %t')
19
19
  bar.progress_mark = '='