ab_admin 0.8.3 → 0.9.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 +5 -1
- data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +24 -23
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +6 -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 +2 -6
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +8 -2
- data/app/assets/javascripts/ab_admin/main.js +2 -2
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +35 -10
- data/app/assets/stylesheets/ab_admin/components/_base.scss +21 -1
- data/app/assets/stylesheets/ab_admin/components/_form.scss +13 -17
- 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 +0 -9
- data/app/assets/stylesheets/ab_admin/components/_table_view.scss +10 -2
- data/app/assets/stylesheets/ab_admin/components/_tooltip.scss +80 -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 +0 -1
- data/app/controllers/admin/base_controller.rb +67 -63
- 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 +2 -2
- data/app/controllers/admin/static_pages_controller.rb +0 -4
- data/app/controllers/admin/structures_controller.rb +2 -2
- data/app/views/admin/assets/batch_edit.html.slim +1 -1
- data/app/views/admin/base/_search_layout.html.slim +6 -5
- data/app/views/admin/base/create.js.erb +5 -2
- data/app/views/admin/base/index.html.slim +4 -4
- data/app/views/admin/base/update.js.erb +5 -0
- 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/_table.html.slim +1 -1
- data/app/views/admin/shared/_content_actions.html.slim +19 -21
- 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/structures/_form.html.slim +1 -1
- data/app/views/admin/users/_form.html.slim +1 -1
- 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 +1 -2
- data/config/locales/ru.yml +0 -1
- data/config/locales/uk.yml +0 -1
- data/lib/ab_admin.rb +34 -33
- data/lib/ab_admin/abstract_resource.rb +1 -1
- data/lib/ab_admin/carrierwave/base_uploader.rb +1 -2
- data/lib/ab_admin/concerns/admin_addition.rb +0 -30
- data/lib/ab_admin/concerns/translations_macro.rb +97 -0
- data/lib/ab_admin/concerns/utilities.rb +1 -1
- data/lib/ab_admin/config/base.rb +7 -0
- data/lib/ab_admin/controllers/callbacks.rb +3 -26
- data/lib/ab_admin/core_ext/array.rb +4 -48
- 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 +0 -80
- data/lib/ab_admin/engine.rb +1 -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/models/header.rb +2 -2
- data/lib/ab_admin/models/locator.rb +28 -2
- data/lib/ab_admin/models/user.rb +12 -48
- data/lib/ab_admin/utils/csv_document.rb +5 -3
- data/lib/ab_admin/utils/eval_helpers.rb +6 -3
- data/lib/ab_admin/utils/xls_document.rb +18 -16
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +10 -12
- data/lib/ab_admin/views/admin_navigation_helpers.rb +7 -8
- 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 +4 -4
- data/lib/ab_admin/views/manager_helpers.rb +8 -5
- data/lib/ab_admin/views/search_form_builder.rb +2 -2
- data/lib/ab_admin/views/will_paginate_bootstrap_renderer.rb +60 -0
- 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 +0 -11
- 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/model/model_generator.rb +3 -4
- data/lib/generators/ab_admin/model/templates/resource.erb +5 -2
- data/lib/generators/ab_admin/resource/templates/controller.erb +2 -2
- metadata +37 -79
- 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
data/lib/ab_admin/version.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
module AbAdmin
|
|
2
2
|
module Views
|
|
3
3
|
module AdminHelpers
|
|
4
|
-
|
|
5
4
|
def admin_form_for(object, *args, &block)
|
|
6
5
|
record = Array(object).last
|
|
7
6
|
record.fallbacks_for_empty_translations = false if record.respond_to?(:fallbacks_for_empty_translations)
|
|
@@ -21,11 +20,11 @@ module AbAdmin
|
|
|
21
20
|
end
|
|
22
21
|
end
|
|
23
22
|
|
|
24
|
-
def editable_bool(item, attr, label: nil)
|
|
23
|
+
def editable_bool(item, attr, label: nil, wrapper_class: nil)
|
|
25
24
|
url = "/admin/#{item.class.model_name.plural}/#{item.id}.json"
|
|
26
25
|
html = check_box_tag("#{item.class.model_name.singular}[#{attr}]", '1', item.send(attr), class: 'js-auto-submit-checkbox', data: {url: url})
|
|
27
26
|
html = content_tag(:label, "#{label} #{html}".html_safe) if label
|
|
28
|
-
content_tag :div, html, class: 'auto-submit-checkbox-wrap white-space-nowrap'
|
|
27
|
+
content_tag :div, html, class: ['auto-submit-checkbox-wrap', 'white-space-nowrap', ('tool' unless label), wrapper_class], title: attr
|
|
29
28
|
end
|
|
30
29
|
|
|
31
30
|
def admin_editable(item, attr, opts=nil)
|
|
@@ -82,7 +81,7 @@ module AbAdmin
|
|
|
82
81
|
end
|
|
83
82
|
|
|
84
83
|
def options_for_ckeditor(options = {})
|
|
85
|
-
{width: 930, height: 200,
|
|
84
|
+
{width: 930, height: 200, namespace: ''}.update(options)
|
|
86
85
|
end
|
|
87
86
|
|
|
88
87
|
def admin_tree_item(item)
|
|
@@ -97,13 +96,13 @@ module AbAdmin
|
|
|
97
96
|
def admin_layout_css
|
|
98
97
|
css = []
|
|
99
98
|
css << 'content_with_sidebar' if settings[:sidebar] || content_for?(:sidebar)
|
|
100
|
-
css << 'well' if settings[:well] && current_index_view !=
|
|
101
|
-
css << "#{current_index_view}_view"
|
|
99
|
+
css << 'well' if !@settings[:well].is_a?(FalseClass) && (collection_action? || %w(show history).include?(action_name)) && @settings[:current_index_view] != :tree
|
|
100
|
+
css << "#{settings[:current_index_view]}_view"
|
|
102
101
|
css
|
|
103
102
|
end
|
|
104
103
|
|
|
105
104
|
def admin_title
|
|
106
|
-
base = @breadcrumbs ? @breadcrumbs.
|
|
105
|
+
base = @breadcrumbs ? @breadcrumbs.map{|b| b[:name] }.reverse : []
|
|
107
106
|
base << @page_title || 'Ab Admin'
|
|
108
107
|
base.join(' - ')
|
|
109
108
|
end
|
|
@@ -127,6 +126,10 @@ module AbAdmin
|
|
|
127
126
|
"<i class='icon-#{name} #{'icon-white' if white}'></i> ".html_safe
|
|
128
127
|
end
|
|
129
128
|
|
|
129
|
+
def locale_flag(code)
|
|
130
|
+
(AbAdmin.locale_to_country_code[code] || code).to_s[0..1].upcase.tr('A-Z', '🇦-🇿')
|
|
131
|
+
end
|
|
132
|
+
|
|
130
133
|
def admin_pretty_data(object)
|
|
131
134
|
case object
|
|
132
135
|
when String, Integer, BigDecimal, Float
|
|
@@ -167,10 +170,6 @@ module AbAdmin
|
|
|
167
170
|
image_tag_if(item.send(assoc).try(:url, size))
|
|
168
171
|
end
|
|
169
172
|
|
|
170
|
-
def per_page_variants
|
|
171
|
-
AbAdmin.per_page_variants.map{|variant| [variant, max_per_page].min }.uniq
|
|
172
|
-
end
|
|
173
|
-
|
|
174
173
|
# input_set 'title', legend_class: 'do_sort', label_class: 'label-info' do
|
|
175
174
|
def input_set(title, options={}, &block)
|
|
176
175
|
options.reverse_merge!(class: "inputs well well-small clearfix #{options.delete(:legend_class) || 'do_sort'}", id: options.delete(:legend_id))
|
|
@@ -191,7 +190,6 @@ module AbAdmin
|
|
|
191
190
|
exec = options[:exec].nil? ? true : options[:exec]
|
|
192
191
|
case symbol_or_proc
|
|
193
192
|
when String
|
|
194
|
-
ActiveSupport::Deprecation.warn('`call_method_or_proc_on` don\'t accept method name as String, use Symbol instead') if symbol_or_proc =~ /\A\w+\z/
|
|
195
193
|
symbol_or_proc
|
|
196
194
|
when Symbol
|
|
197
195
|
obj.send(symbol_or_proc.to_sym)
|
|
@@ -16,7 +16,7 @@ module AbAdmin
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def list_sort_link(attribute, options={})
|
|
19
|
-
adapter = options[:adapter] ||
|
|
19
|
+
adapter = options[:adapter] || ransack_collection
|
|
20
20
|
if adapter && adapter.klass == resource_class
|
|
21
21
|
sort_link(adapter, attribute, options)
|
|
22
22
|
else
|
|
@@ -25,7 +25,7 @@ module AbAdmin
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def sort_link(adapter, attribute, options={})
|
|
28
|
-
name = options
|
|
28
|
+
name = options.delete(:title) || (attribute.is_a?(Symbol) ? ha(attribute) : attribute)
|
|
29
29
|
return name unless adapter
|
|
30
30
|
search_params = (params[:q] || {}).to_h.with_indifferent_access
|
|
31
31
|
attr_name = (options.delete(:column) || attribute).to_s
|
|
@@ -48,7 +48,7 @@ module AbAdmin
|
|
|
48
48
|
html_options = options.delete(:html_options) || {}
|
|
49
49
|
html_options[:class] = ['sort_link', current_dir, html_options[:class]].compact.join(' ')
|
|
50
50
|
|
|
51
|
-
options.merge!(q: search_params.merge(s: "#{attr_name} #{new_dir}"), **
|
|
51
|
+
options.merge!(q: search_params.merge(s: "#{attr_name} #{new_dir}"), **collection_params)
|
|
52
52
|
link_to [name, order_indicator_for(current_dir)].join(' ').html_safe, url_for(options), html_options
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -62,8 +62,8 @@ module AbAdmin
|
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
def
|
|
66
|
-
params.slice(*button_scopes.map(&:first)).permit!.to_h.symbolize_keys
|
|
65
|
+
def collection_params
|
|
66
|
+
params.slice(:index_view, *button_scopes.map(&:first)).permit!.to_h.symbolize_keys
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def short_action_link(action, item)
|
|
@@ -167,8 +167,7 @@ module AbAdmin
|
|
|
167
167
|
if total_entries.zero?
|
|
168
168
|
t('will_paginate.pagination_info_empty')
|
|
169
169
|
else
|
|
170
|
-
|
|
171
|
-
t('will_paginate.pagination_info', from: offset + 1, to: [offset + per_page, total_entries].min, count: total_entries).html_safe
|
|
170
|
+
t('will_paginate.pagination_info', from: offset + 1, to: [offset + settings[:per_page], total_entries].min, count: total_entries).html_safe
|
|
172
171
|
end
|
|
173
172
|
end
|
|
174
173
|
|
|
@@ -192,7 +191,7 @@ module AbAdmin
|
|
|
192
191
|
end
|
|
193
192
|
|
|
194
193
|
def admin_comments_button(item)
|
|
195
|
-
title = [icon('comment', true), item.
|
|
194
|
+
title = [icon('comment', true), (item.admin_comments_count unless item.admin_comments_count.zero?)].compact.join(' ').html_safe
|
|
196
195
|
link_to title, admin_admin_comments_path(resource_type: item.class.name, resource_id: item.id), remote: true,
|
|
197
196
|
class: 'btn btn-info list_admin_comments_link'
|
|
198
197
|
end
|
|
@@ -93,21 +93,23 @@ module AbAdmin
|
|
|
93
93
|
return if @disable_all
|
|
94
94
|
model = @object.class.reflect_on_association(assoc).klass
|
|
95
95
|
title = [@template.icon('plus', true), I18n.t('admin.add'), options[:title] || model.model_name.human].join(' ').html_safe
|
|
96
|
-
|
|
96
|
+
options[:class] = "btn btn-primary #{options[:class]}"
|
|
97
|
+
link_to_add title, assoc, options
|
|
97
98
|
end
|
|
98
99
|
|
|
99
|
-
def link_to_remove_assoc
|
|
100
|
+
def link_to_remove_assoc(options={})
|
|
100
101
|
return if @disable_all
|
|
101
|
-
|
|
102
|
+
options[:class] ||= 'btn btn-danger btn-mini pull-right'
|
|
103
|
+
link_to_remove @template.icon('trash', true) + I18n.t('admin.delete'), options
|
|
102
104
|
end
|
|
103
105
|
|
|
104
106
|
def locale_tabs(options={}, &block)
|
|
105
107
|
locale_html = {}
|
|
106
|
-
options[:locales] ||=
|
|
108
|
+
options[:locales] ||= AbAdmin.translated_locales
|
|
107
109
|
options[:locales].each do |l|
|
|
108
110
|
locale_html[l] = template.capture { block.call(l) }
|
|
109
111
|
end
|
|
110
|
-
template.render 'admin/shared/locale_tabs', locale_html: locale_html, locales: options[:locales]
|
|
112
|
+
template.render 'admin/shared/locale_tabs', locale_html: locale_html, locales: options[:locales], tab_nav: options[:tab_nav]
|
|
111
113
|
end
|
|
112
114
|
|
|
113
115
|
def save_buttons
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
module AbAdmin
|
|
2
2
|
module Views
|
|
3
3
|
module Helpers
|
|
4
|
-
|
|
5
|
-
def admin?
|
|
6
|
-
user_signed_in? && current_user.admin?
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def moderator?
|
|
10
|
-
user_signed_in? && current_user.moderator?
|
|
11
|
-
end
|
|
12
|
-
|
|
13
4
|
def as_html(text)
|
|
14
5
|
return ''.html_safe if text.nil?
|
|
15
6
|
Nokogiri::HTML.fragment(text).to_html.html_safe
|
|
@@ -3,11 +3,11 @@ module AbAdmin
|
|
|
3
3
|
module Inputs
|
|
4
4
|
class CkeditorInput < ::SimpleForm::Inputs::Base
|
|
5
5
|
def input(wrapper_options=nil)
|
|
6
|
-
unless @builder.template.instance_variable_get(:@
|
|
7
|
-
@builder.template.concat @builder.template.javascript_include_tag(
|
|
8
|
-
@builder.template.instance_variable_set(:@
|
|
6
|
+
unless @builder.template.instance_variable_get(:@ckeditor_loaded)
|
|
7
|
+
@builder.template.concat @builder.template.javascript_include_tag(Ckeditor.cdn_url)
|
|
8
|
+
@builder.template.instance_variable_set(:@ckeditor_loaded, true)
|
|
9
9
|
end
|
|
10
|
-
input_html_options.reverse_merge!({width: 800, height: 200
|
|
10
|
+
input_html_options.reverse_merge!({width: 800, height: 200})
|
|
11
11
|
@builder.cktext_area(attribute_name, input_html_options)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
module AbAdmin
|
|
2
2
|
module Views
|
|
3
3
|
module ManagerHelpers
|
|
4
|
-
|
|
5
|
-
INDEX_VIEW_ICONS = {table: 'list', tree: 'move', grid: 'th', chart: 'signal'}
|
|
6
|
-
|
|
7
4
|
def table_builder
|
|
8
5
|
manager.table ||= ::AbAdmin::Config::Table.default_for_model(resource_class)
|
|
9
6
|
end
|
|
@@ -20,6 +17,10 @@ module AbAdmin
|
|
|
20
17
|
manager.chart ||= ::AbAdmin::Config::Chart.default_for_model(resource_class)
|
|
21
18
|
end
|
|
22
19
|
|
|
20
|
+
def map_builder
|
|
21
|
+
manager.map ||= ::AbAdmin::Config::Map.default_for_model(resource_class)
|
|
22
|
+
end
|
|
23
|
+
|
|
23
24
|
def modal_form_builder
|
|
24
25
|
manager.modal_form ||= ::AbAdmin::Config::ModalForm.default_for_model(resource_class, skip: [:id, :created_at, :updated_at, :lft, :rgt, :depth])
|
|
25
26
|
end
|
|
@@ -52,10 +53,12 @@ module AbAdmin
|
|
|
52
53
|
end
|
|
53
54
|
end
|
|
54
55
|
|
|
56
|
+
INDEX_VIEW_ICONS = {table: 'list', tree: 'move', grid: 'th', chart: 'signal', map: 'map-marker', stats: 'eye-open'}
|
|
55
57
|
def index_view_link(index_view)
|
|
56
|
-
options = {class: "btn #{('active' if current_index_view == index_view)}", title: t("admin.index_view.#{index_view}", default: index_view.to_s)}
|
|
58
|
+
options = {class: "btn tool tool-bottom #{('active' if settings[:current_index_view] == index_view)}", title: t("admin.index_view.#{index_view}", default: index_view.to_s)}
|
|
57
59
|
url = url_for({index_view: index_view, q: params[:q]}.reject_blank)
|
|
58
|
-
|
|
60
|
+
title = INDEX_VIEW_ICONS[index_view.to_sym] ? icon(INDEX_VIEW_ICONS[index_view.to_sym]) : index_view
|
|
61
|
+
link_to title, url, options
|
|
59
62
|
end
|
|
60
63
|
end
|
|
61
64
|
end
|
|
@@ -59,7 +59,7 @@ 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') +
|
|
62
|
+
text_field_tag("q[#{gt_param}]", params[:q][gt_param], class: 'input-small datepicker', autocomplete: 'off') +
|
|
63
63
|
text_field_tag("q[#{lt_param}]", params[:q][lt_param], class: 'input-small datepicker', autocomplete: 'off', id: "q_#{attr}")
|
|
64
64
|
end
|
|
65
65
|
end
|
|
@@ -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)
|
|
@@ -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
|
|
@@ -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
|
|
@@ -8,15 +8,4 @@ class User < ApplicationRecord
|
|
|
8
8
|
|
|
9
9
|
fileuploads :avatar
|
|
10
10
|
|
|
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
11
|
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
|
|
@@ -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
|