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.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +11 -5
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +0 -25
- data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -5
- data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +33 -25
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +1 -1
- data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +24 -23
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +7 -2
- data/app/assets/javascripts/ab_admin/core/search_form.js.coffee +1 -7
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +23 -7
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +16 -2
- data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -0
- data/app/assets/javascripts/ab_admin/main.js +3 -4
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +71 -25
- data/app/assets/stylesheets/ab_admin/components/_base.scss +21 -1
- data/app/assets/stylesheets/ab_admin/components/_colored_tabs.scss +1 -1
- data/app/assets/stylesheets/ab_admin/components/_form.scss +16 -18
- data/app/assets/stylesheets/ab_admin/components/_grid_view.scss +2 -2
- data/app/assets/stylesheets/ab_admin/components/_locale_tabs.scss +11 -23
- data/app/assets/stylesheets/ab_admin/components/_navigation.scss +7 -11
- data/app/assets/stylesheets/ab_admin/components/_table_view.scss +85 -11
- data/app/assets/stylesheets/ab_admin/components/_tooltip.scss +81 -0
- data/app/assets/stylesheets/ab_admin/components/_tree_view.scss +1 -1
- data/app/assets/stylesheets/ab_admin/devise.scss +2 -2
- data/app/assets/stylesheets/ab_admin/fileupload.scss +2 -9
- data/app/assets/stylesheets/ab_admin/main.scss +1 -2
- data/app/controllers/admin/assets_controller.rb +1 -1
- data/app/controllers/admin/base_controller.rb +133 -149
- data/app/controllers/admin/dashboards_controller.rb +2 -2
- data/app/controllers/admin/locators_controller.rb +8 -6
- data/app/controllers/admin/manager_controller.rb +19 -49
- data/app/controllers/admin/static_pages_controller.rb +0 -4
- data/app/controllers/admin/structures_controller.rb +2 -2
- data/app/views/ab_admin/devise/sessions/new.html.slim +2 -0
- data/app/views/admin/assets/batch_edit.html.slim +3 -2
- data/app/views/admin/base/_search_layout.html.slim +7 -6
- data/app/views/admin/base/create.js.erb +6 -3
- data/app/views/admin/base/edit.js.erb +1 -1
- data/app/views/admin/base/index.html.slim +4 -4
- data/app/views/admin/base/new.js.erb +1 -1
- data/app/views/admin/base/update.js.erb +7 -2
- data/app/views/admin/fileupload/_asset_templates.html.slim +1 -2
- data/app/views/admin/fileupload/_image.html.slim +1 -2
- data/app/views/admin/locators/edit.html.slim +7 -6
- data/app/views/admin/manager/_map.html.slim +4 -0
- data/app/views/admin/manager/_show_table.html.slim +1 -1
- data/app/views/admin/manager/_stats.html.slim +4 -0
- data/app/views/admin/manager/_table.html.slim +7 -4
- data/app/views/admin/shared/_content_actions.html.slim +35 -30
- data/app/views/admin/shared/_flash.html.slim +5 -4
- data/app/views/admin/shared/_locale_tabs.html.slim +2 -2
- data/app/views/admin/shared/_main_menu.html.slim +1 -1
- data/app/views/admin/shared/_save_buttons.html.slim +10 -1
- data/app/views/admin/structures/_form.html.slim +1 -1
- data/app/views/admin/users/_form.html.slim +3 -3
- data/app/views/admin/users/_search_form.html.slim +1 -1
- data/app/views/layouts/admin/_footer.html.slim +0 -1
- data/app/views/layouts/admin/_navigation.html.slim +1 -1
- data/app/views/layouts/admin/application.html.slim +2 -2
- data/config/locales/de.yml +1 -2
- data/config/locales/en.yml +9 -15
- data/config/locales/it.yml +1 -0
- data/config/locales/ru.yml +0 -1
- data/config/locales/uk.yml +0 -1
- data/db/migrate/20130101000001_create_users.rb +1 -4
- data/db/migrate/20130101000003_create_assets.rb +1 -1
- data/db/migrate/20130101000004_create_headers.rb +5 -5
- data/db/migrate/20130101000005_create_static_pages.rb +2 -5
- data/db/migrate/20130101000006_create_structures.rb +1 -1
- data/db/migrate/20130101000007_base_translations.rb +43 -12
- data/db/migrate/20130101000008_create_admin_comments.rb +2 -7
- data/db/migrate/20130101000009_create_tracks.rb +4 -8
- data/lib/ab_admin/abstract_resource.rb +6 -5
- data/lib/ab_admin/carrierwave/base_uploader.rb +87 -75
- data/lib/ab_admin/carrierwave/glue.rb +0 -5
- data/lib/ab_admin/concerns/admin_addition.rb +15 -27
- data/lib/ab_admin/concerns/translations_macro.rb +97 -0
- data/lib/ab_admin/concerns/utilities.rb +2 -2
- data/lib/ab_admin/config/base.rb +27 -4
- data/lib/ab_admin/controllers/callbacks.rb +3 -26
- data/lib/ab_admin/core_ext/array.rb +1 -50
- data/lib/ab_admin/core_ext/hash.rb +2 -31
- data/lib/ab_admin/core_ext/other.rb +0 -6
- data/lib/ab_admin/core_ext/string.rb +1 -86
- data/lib/ab_admin/devise.rb +7 -0
- data/lib/ab_admin/engine.rb +2 -1
- data/lib/ab_admin/hooks/ckeditor_lazy.rb +13 -0
- data/lib/ab_admin/hooks/will_paginate_id_prefetch.rb +8 -6
- data/lib/ab_admin/hooks/will_paginate_no_uri.rb +1 -1
- data/lib/ab_admin/i18n_tools/google_translate.rb +3 -1
- data/lib/ab_admin/i18n_tools/model_translator.rb +1 -1
- data/lib/ab_admin/menu/base_group.rb +0 -1
- data/lib/ab_admin/menu/group.rb +2 -4
- data/lib/ab_admin/menu/item.rb +4 -8
- data/lib/ab_admin/models/asset.rb +7 -10
- data/lib/ab_admin/models/header.rb +2 -2
- data/lib/ab_admin/models/locator.rb +29 -3
- data/lib/ab_admin/models/settings.rb +2 -2
- data/lib/ab_admin/models/structure.rb +3 -3
- data/lib/ab_admin/models/track.rb +15 -3
- data/lib/ab_admin/models/user.rb +12 -48
- data/lib/ab_admin/utils/csv_document.rb +8 -6
- data/lib/ab_admin/utils/eval_helpers.rb +0 -13
- data/lib/ab_admin/utils/logger.rb +12 -2
- data/lib/ab_admin/utils/mysql.rb +2 -3
- data/lib/ab_admin/utils/xls_document.rb +18 -18
- data/lib/ab_admin/utils.rb +0 -5
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +43 -28
- data/lib/ab_admin/views/admin_navigation_helpers.rb +18 -16
- data/lib/ab_admin/views/form_builder.rb +7 -5
- data/lib/ab_admin/views/helpers.rb +0 -9
- data/lib/ab_admin/views/inputs/ckeditor_input.rb +1 -5
- data/lib/ab_admin/views/manager_helpers.rb +15 -6
- data/lib/ab_admin/views/search_form_builder.rb +13 -13
- data/lib/ab_admin/views/will_paginate_bootstrap_renderer.rb +60 -0
- data/lib/ab_admin.rb +44 -32
- data/lib/generators/ab_admin/glob/glob_generator.rb +4 -5
- data/lib/generators/ab_admin/glob/templates/migration.erb +10 -7
- data/lib/generators/ab_admin/install/templates/config/ab_admin.rb.erb +1 -1
- data/lib/generators/ab_admin/install/templates/models/user.rb +1 -13
- data/lib/generators/ab_admin/install/templates/spec/spec_helper.rb +0 -1
- data/lib/generators/ab_admin/install/templates/spec/support/database_cleaner.rb +8 -11
- data/lib/generators/ab_admin/install/templates/uploaders/attachment_file_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +1 -1
- data/lib/generators/ab_admin/install/templates/uploaders/picture_uploader.rb +16 -3
- data/lib/generators/ab_admin/model/model_generator.rb +3 -4
- data/lib/generators/ab_admin/model/templates/resource.erb +5 -2
- data/lib/generators/ab_admin/resource/resource_generator.rb +0 -4
- data/lib/generators/ab_admin/resource/templates/controller.erb +2 -9
- data/lib/tasks/assets.rake +5 -5
- metadata +45 -85
- data/app/assets/images/admin/Jcrop.gif +0 -0
- data/app/assets/images/admin/flags/de.png +0 -0
- data/app/assets/images/admin/flags/en.png +0 -0
- data/app/assets/images/admin/flags/es.png +0 -0
- data/app/assets/images/admin/flags/fr.png +0 -0
- data/app/assets/images/admin/flags/it.png +0 -0
- data/app/assets/images/admin/flags/ja.png +0 -0
- data/app/assets/images/admin/flags/pl.png +0 -0
- data/app/assets/images/admin/flags/ru.png +0 -0
- data/app/assets/images/admin/flags/uk.png +0 -0
- data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +0 -33
- data/app/assets/stylesheets/ab_admin/components/_columns_hider.scss +0 -5
- data/app/assets/stylesheets/ab_admin/components/_perms.scss +0 -39
- data/app/views/admin/shared/_columns_hider.html.slim +0 -9
- data/lib/ab_admin/hooks/globalize_locale_suffix_accessors.rb +0 -25
- data/lib/ab_admin/hooks/globalize_valid_locale.rb +0 -9
- data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +0 -19
- 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, :
|
|
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,
|
|
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 =
|
|
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}]",
|
|
63
|
-
text_field_tag("q[#{lt_param}]",
|
|
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
|
|
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}]",
|
|
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|
|
|
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}]",
|
|
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,
|
|
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,
|
|
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],
|
|
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],
|
|
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 = "…"
|
|
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
|
|
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 :
|
|
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
|
|
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 :
|
|
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 :
|
|
183
|
-
@@
|
|
180
|
+
mattr_accessor :datetime_format
|
|
181
|
+
@@datetime_format = '%d.%m.%y %H:%M'
|
|
184
182
|
|
|
185
|
-
mattr_accessor :
|
|
186
|
-
@@
|
|
187
|
-
@@view_default_per_page[:tree] = 1000
|
|
183
|
+
mattr_accessor :default_permitted_params
|
|
184
|
+
@@default_permitted_params = [:fileupload_guid]
|
|
188
185
|
|
|
189
|
-
mattr_accessor :
|
|
190
|
-
@@
|
|
186
|
+
mattr_accessor :translated_locales
|
|
187
|
+
@@translated_locales = []
|
|
191
188
|
|
|
192
|
-
mattr_accessor :
|
|
193
|
-
@@
|
|
189
|
+
mattr_accessor :locale_to_country_code
|
|
190
|
+
@@locale_to_country_code = {ja: :jp, en: :gb, uk: :ua}
|
|
194
191
|
|
|
195
|
-
mattr_accessor :
|
|
196
|
-
@@
|
|
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
|
|
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|
|
|
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
|
-
"
|
|
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.
|
|
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
|
|
2
|
+
def change
|
|
3
3
|
<%- models.each do |m| -%>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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,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
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
config.use_transactional_fixtures = false
|
|
1
|
+
require 'database_cleaner'
|
|
3
2
|
|
|
4
|
-
|
|
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.
|
|
10
|
-
DatabaseCleaner.
|
|
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,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
|
-
|
|
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
|
-
|
|
34
|
+
model.new
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def translated_columns
|
|
38
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
19
|
-
|
|
11
|
+
def build_settings
|
|
12
|
+
super.merge!(index_views: 'tree')
|
|
20
13
|
end
|
|
21
14
|
<% end -%>
|
|
22
15
|
end
|
data/lib/tasks/assets.rake
CHANGED
|
@@ -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
|
-
|
|
12
|
-
|
|
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 = '='
|