ab_admin 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/Gemfile +1 -0
  2. data/Guardfile +1 -1
  3. data/app/assets/images/admin/flags/b_uk.png +0 -0
  4. data/app/assets/images/admin/preloader.gif +0 -0
  5. data/app/assets/javascripts/ab_admin/application.js +1 -28
  6. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +29 -6
  7. data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +120 -91
  8. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -2
  9. data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +4 -7
  10. data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -10
  11. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +53 -24
  12. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +7 -0
  13. data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -2
  14. data/app/assets/javascripts/ab_admin/main.js +28 -0
  15. data/app/assets/stylesheets/ab_admin/application.css.scss +1 -10
  16. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +4 -0
  17. data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -1
  18. data/app/assets/stylesheets/ab_admin/components/_form.css.scss +10 -13
  19. data/app/assets/stylesheets/ab_admin/components/_geo_input.css.scss +5 -9
  20. data/app/assets/stylesheets/ab_admin/fileupload.css.scss +68 -102
  21. data/app/assets/stylesheets/ab_admin/main.css.scss +8 -0
  22. data/app/controllers/admin/base_controller.rb +18 -14
  23. data/app/controllers/admin/manager_controller.rb +51 -6
  24. data/app/controllers/admin/users_controller.rb +23 -0
  25. data/app/views/admin/fileupload/_asset.html.slim +8 -0
  26. data/app/views/admin/fileupload/_container.html.slim +10 -0
  27. data/app/views/admin/fileupload/_file.html.slim +5 -0
  28. data/app/views/admin/fileupload/_ftmpl.html.slim +6 -0
  29. data/app/views/admin/fileupload/_tmpl.html.slim +9 -0
  30. data/app/views/admin/users/_form.html.slim +1 -0
  31. data/config/locales/en.yml +5 -60
  32. data/config/locales/ru.yml +14 -63
  33. data/config/routes.rb +7 -4
  34. data/features/dsl/custom_actions.feature +62 -0
  35. data/features/dsl/parent_resource.feature +18 -0
  36. data/features/step_definitions/configuration_steps.rb +6 -0
  37. data/features/step_definitions/dsl/parent_resource_steps.rb +8 -0
  38. data/features/step_definitions/settings_steps.rb +1 -1
  39. data/features/step_definitions/web_steps/transforms_steps.rb +3 -0
  40. data/features/support/paths.rb +3 -0
  41. data/lib/ab_admin.rb +5 -0
  42. data/lib/ab_admin/abstract_resource.rb +28 -4
  43. data/lib/ab_admin/carrierwave/base_uploader.rb +22 -22
  44. data/lib/ab_admin/concerns/admin_addition.rb +2 -2
  45. data/lib/ab_admin/concerns/utilities.rb +4 -4
  46. data/lib/ab_admin/config/base.rb +18 -0
  47. data/lib/ab_admin/controllers/head_options.rb +1 -1
  48. data/lib/ab_admin/core_ext/array.rb +4 -0
  49. data/lib/ab_admin/core_ext/string.rb +9 -10
  50. data/lib/ab_admin/hooks/quiet_scope_page.rb +16 -16
  51. data/lib/ab_admin/hooks/simple_form_hooks.rb +13 -13
  52. data/lib/ab_admin/i18n_tools/model_translator.rb +67 -0
  53. data/lib/ab_admin/models/asset.rb +32 -1
  54. data/lib/ab_admin/models/attachment_file.rb +1 -1
  55. data/lib/ab_admin/models/locator.rb +7 -0
  56. data/lib/ab_admin/models/settings.rb +7 -0
  57. data/lib/ab_admin/models/structure.rb +4 -0
  58. data/lib/ab_admin/utils.rb +2 -2
  59. data/lib/ab_admin/version.rb +1 -1
  60. data/lib/ab_admin/views/admin_helpers.rb +3 -3
  61. data/lib/ab_admin/views/admin_navigation_helpers.rb +1 -1
  62. data/lib/ab_admin/views/form_builder.rb +42 -39
  63. data/lib/ab_admin/views/helpers.rb +5 -0
  64. data/lib/ab_admin/views/manager_helpers.rb +10 -0
  65. data/lib/ab_admin/views/search_form_builder.rb +12 -5
  66. data/lib/generators/ab_admin/install/install_generator.rb +1 -1
  67. data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -2
  68. data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -1
  69. data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +2 -0
  70. data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
  71. data/lib/generators/ab_admin/install/templates/models/settings.rb +0 -1
  72. data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -0
  73. data/lib/generators/ab_admin/install/templates/{scripts → script}/unicorn.sh +0 -0
  74. data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +4 -0
  75. data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
  76. data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
  77. data/lib/generators/ab_admin/resource/templates/_table.haml.erb +1 -2
  78. data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -2
  79. data/lib/generators/template.rb +1 -0
  80. data/lib/tasks/i18n.rake +7 -0
  81. data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +35 -0
  82. data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +2 -0
  83. data/spec/dummy/app/models/admin_menu.rb +4 -2
  84. data/spec/dummy/app/models/collection.rb +3 -1
  85. data/spec/generators/install_generator_spec.rb +1 -1
  86. data/spec/generators/resource_generator_spec.rb +1 -1
  87. data/spec/models/avatar_spec.rb +29 -2
  88. metadata +25 -12
  89. data/app/views/admin/fileupload/_asset.html.erb +0 -5
  90. data/app/views/admin/fileupload/_container.html.erb +0 -28
  91. data/app/views/admin/fileupload/_fcontainer.html.erb +0 -25
  92. data/app/views/admin/fileupload/_file.html.erb +0 -5
  93. data/app/views/admin/fileupload/_ftmpl.html.erb +0 -7
  94. data/app/views/admin/fileupload/_tmpl.html.erb +0 -9
  95. data/lib/ab_admin/utils/csv_builder.rb +0 -52
@@ -67,7 +67,38 @@ module AbAdmin
67
67
 
68
68
  def main!
69
69
  self.class.update_all('is_main=0', ['assetable_type=? AND assetable_id=? AND type=?', assetable_type, assetable_id, type])
70
- update_column(:is_main, true) and self
70
+ update_column(:is_main, true)
71
+ refresh_assetable
72
+ self
73
+ end
74
+
75
+ def rotate!
76
+ rename!
77
+ self.rotate_degrees = 90
78
+ save!
79
+ refresh_assetable
80
+ self
81
+ end
82
+
83
+ def rename!
84
+ rename
85
+ save!
86
+ end
87
+
88
+ def rename
89
+ file = data.file
90
+ path = data.path
91
+ ext = File.extname(path)
92
+ new_path = File.join(File.dirname(path), "#{File.basename(path).chomp(ext)}_#{rand(99)}#{ext}")
93
+ new_file = ::CarrierWave::SanitizedFile.new file.move_to(new_path)
94
+ data.cache!(new_file)
95
+ end
96
+
97
+ def refresh_assetable
98
+ return unless assetable.try(:persisted?)
99
+ assetable.touch
100
+ assetable.tire.update_index if assetable.respond_to?(:tire)
101
+ true
71
102
  end
72
103
 
73
104
  def full_url(*args)
@@ -21,7 +21,7 @@ module AbAdmin
21
21
  end
22
22
 
23
23
  def human_date
24
- I18n.l(created_at, :format => "%d %B %Y")
24
+ I18n.l(created_at, :format => '%d %B %Y')
25
25
  end
26
26
 
27
27
  def as_json(options={})
@@ -3,6 +3,13 @@ module AbAdmin
3
3
  module Locator
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ included do
7
+ extend ActiveModel::Naming
8
+ extend ActiveRecord::Translation
9
+ class_attribute :base_class
10
+ self.base_class = self
11
+ end
12
+
6
13
  module ClassMethods
7
14
  def find_files
8
15
  Dir[Rails.root.join('config', 'locales', '*.yml')]
@@ -3,6 +3,13 @@ module AbAdmin
3
3
  module Settings
4
4
  extend ActiveSupport::Concern
5
5
 
6
+ included do
7
+ extend ActiveModel::Naming
8
+ extend ActiveRecord::Translation
9
+ class_attribute :base_class
10
+ self.base_class = self
11
+ end
12
+
6
13
  module ClassMethods
7
14
  def load
8
15
  configatron.configure_from_hash instance.all
@@ -21,6 +21,10 @@ module AbAdmin
21
21
  scope :with_position, proc {|position_type| where(:position => position_type.id).order('lft DESC') }
22
22
  end
23
23
 
24
+ def redirect?
25
+ kind == StructureType.redirect.id
26
+ end
27
+
24
28
  end
25
29
  end
26
30
  end
@@ -109,7 +109,7 @@ module AbAdmin
109
109
 
110
110
  def pretty_data(object)
111
111
  case object
112
- when String, Integer
112
+ when String, Integer, BigDecimal, Float
113
113
  object
114
114
  when TrueClass
115
115
  '+'
@@ -120,7 +120,7 @@ module AbAdmin
120
120
  when NilClass
121
121
  ''
122
122
  else
123
- AbAdmin.safe_display_name(object)
123
+ AbAdmin.safe_display_name(object) || object
124
124
  end
125
125
  end
126
126
 
@@ -1,3 +1,3 @@
1
1
  module AbAdmin
2
- VERSION = '0.1.2'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -55,7 +55,7 @@ module AbAdmin
55
55
 
56
56
  def layout_css
57
57
  css = []
58
- css << 'content_with_sidebar' if settings[:sidebar]
58
+ css << 'content_with_sidebar' if settings[:sidebar] || content_for?(:sidebar)
59
59
  css << 'well' if settings[:well]
60
60
  css << "#{settings[:index_view]}_view"
61
61
  css
@@ -75,7 +75,7 @@ module AbAdmin
75
75
 
76
76
  def admin_pretty_data(object)
77
77
  case object
78
- when String, Integer
78
+ when String, Integer, BigDecimal, Float
79
79
  object
80
80
  when TrueClass, FalseClass
81
81
  color_bool(object)
@@ -86,7 +86,7 @@ module AbAdmin
86
86
  when ActiveRecord::Base
87
87
  admin_show_link(object)
88
88
  else
89
- AbAdmin.safe_display_name(object)
89
+ AbAdmin.safe_display_name(object) || object
90
90
  end
91
91
  end
92
92
 
@@ -68,7 +68,7 @@ module AbAdmin
68
68
  link_to icon('eye-open', true), path, :class => 'btn btn-small btn-inverse', :title => t('admin.actions.preview.link'), :target => '_blank'
69
69
  end
70
70
  when AbAdmin::Config::ActionItem
71
- instance_exec(&action.data) if action.for_context?(self)
71
+ instance_exec(item, &action.data) if action.for_context?(self)
72
72
  else
73
73
  meth = "#{resource_instance_name}_short_action_link"
74
74
  send(meth, action, item) if respond_to? meth
@@ -24,12 +24,12 @@ module AbAdmin
24
24
  case options[:as]
25
25
  when :uploader
26
26
  title = options[:title] || I18n.t("admin.#{attribute_name}", :default => object.class.han(attribute_name))
27
- return template.input_set(title) { attach_file_field(attribute_name, options = {}) }
27
+ return template.input_set(title) { attach_file_field(attribute_name, options) }
28
28
  when :map
29
29
  title = options[:title] || I18n.t("admin.#{attribute_name}", :default => object.class.han(attribute_name))
30
30
  prefix = options[:prefix] || object.class.model_name.singular
31
31
  data_fields = [:lat, :lon, :zoom].map { |attr| hidden_field(attr) }.join.html_safe
32
- return template.input_set(title) { data_fields + geo_input(prefix) }
32
+ return template.input_set(title) { data_fields + geo_input(prefix, options[:js_options]) }
33
33
  end
34
34
 
35
35
  attribute_name = "#{attribute_name}_#{options[:locale]}" if options[:locale]
@@ -59,17 +59,23 @@ module AbAdmin
59
59
  template.render 'admin/shared/save_buttons'
60
60
  end
61
61
 
62
- def geo_input(prefix, &block)
63
- template.content_tag :div, :class => 'geo_input' do
64
- ''.tap do |out|
65
- out << template.javascript_include_tag("//maps.googleapis.com/maps/api/js?sensor=false&libraries=places&language=#{I18n.locale}")
66
- out << template.label_tag(:geo_autocomplete, I18n.t('admin.geo_autocomplete'))
67
- out << template.text_field_tag("#{prefix}_geo_autocomplete")
68
- out.concat(capture(&block)) if block_given?
69
- out << template.content_tag(:div, '', :class => 'admin_map', :id => "#{prefix}_map")
70
- out << template.init_js("initGeoInput(#{prefix.inspect})")
71
- end.html_safe
72
- end
62
+ def geo_input(prefix, js_options={}, &block)
63
+ input_name = "#{prefix}_geo_ac"
64
+ js = %Q[$("##{prefix}_geo_input").geoInput(#{js_options.to_json})]
65
+ <<-HTML.html_safe
66
+ <script src="//maps.googleapis.com/maps/api/js?sensor=false&libraries=places&language=#{I18n.locale}" type="text/javascript"></script>
67
+ <div class="geo_input" id="#{prefix}_geo_input">
68
+ <div class="control-group">
69
+ <label class="control-label" for="#{input_name}">#{I18n.t('admin.geo_autocomplete')}</label>
70
+ <div class="controls">
71
+ <input type="text" name="#{input_name}" id="#{input_name}" class="geo_ac string">
72
+ </div>
73
+ </div>
74
+ #{template.capture(&block) if block_given?}
75
+ <div class="controls"><div id="#{prefix}_map" class="admin_map thumbnail"></div></div>
76
+ #{template.init_js(js)}
77
+ </div>
78
+ HTML
73
79
  end
74
80
 
75
81
  def attach_file_field(attribute_name, options = {})
@@ -100,8 +106,7 @@ module AbAdmin
100
106
  script_options['allowedExtensions'] ||= %w(pdf doc docx xls xlsx ppt pptx zip rar csv jpg jpeg gif png)
101
107
  script_options['template_id'] = '#fileupload_ftmpl'
102
108
  options[:asset_render_template] = 'file'
103
- end
104
- if options[:video]
109
+ elsif options[:video]
105
110
  script_options['allowedExtensions'] ||= %w(mp4 flv)
106
111
  script_options['template_id'] = '#fileupload_vtmpl'
107
112
  options[:asset_render_template] = 'video_file'
@@ -111,39 +116,37 @@ module AbAdmin
111
116
  script_options['element'] ||= element_id
112
117
  script_options['sizeLimit'] = max_size.megabytes.to_i
113
118
 
114
- label ||= if object && object.class.respond_to?(:human_attribute_name)
115
- object.class.human_attribute_name(attribute_name)
116
- end
117
-
118
119
  locals = {
119
- :element_id => element_id,
120
- :file_title => (options[:file_title] || "JPEG, GIF, PNG or TIFF"),
121
- :file_max_size => max_size,
122
- :label => (label || attribute_name.to_s.humanize),
123
- :object => object,
124
- :attribute_name => attribute_name,
125
- :assets => [value].flatten.delete_if { |v| v.nil? || v.new_record? },
126
- :script_options => script_options.inspect.gsub('=>', ':'),
127
- :multiple => script_options['multiple'],
128
- :asset_klass => params[:klass],
129
- :asset_render_template => (options[:asset_render_template] || 'asset'),
130
- :container_data => {klass: params[:assetable_type], assoc: params[:method], multiple: script_options['multiple']}
120
+ element_id: element_id,
121
+ file_title: (options[:file_title] || script_options['allowedExtensions'].join(', ')),
122
+ file_max_size: max_size,
123
+ assets: [value].flatten.delete_if { |v| v.nil? || v.new_record? },
124
+ multiple: script_options['multiple'],
125
+ asset_render_template: (options[:asset_render_template] || 'asset'),
126
+ container_data: {
127
+ klass: params[:assetable_type],
128
+ asset: asset_klass.to_s,
129
+ assoc: params[:method],
130
+ multiple: script_options['multiple']
131
+ }
131
132
  }
132
133
 
133
- if options[:file1]
134
- container_tmpl = 'fcontainer'
135
- elsif options[:container]
136
- container_tmpl = options[:container]
137
- else
138
- container_tmpl = 'container'
139
- end
134
+ locals[:css_class] = ['fileupload', "#{locals[:asset_render_template]}_asset_type"]
135
+ locals[:css_class] << (script_options['multiple'] ? 'many_assets' : 'one_asset')
136
+
137
+ js_opts = [locals[:element_id], template.sort_admin_assets_path(:klass => asset_klass), locals[:multiple]].map(&:inspect).join(', ')
138
+ locals[:js] = <<-JAVASCRIPT
139
+ var upl = new qq.FileUploaderInput(#{script_options.to_json});
140
+ upl._setupDragDrop();
141
+ new AdminAssets(#{js_opts});
142
+ JAVASCRIPT
140
143
 
141
144
  if options[:description]
142
145
  opts = [attribute_name, object.class.name, object.id, object.fileupload_guid].map { |i| i.to_s.inspect }.join(', ')
143
146
  template.concat javascript_tag("$(function(){new AssetDescription(#{opts})})")
144
147
  end
145
148
 
146
- template.render(:partial => "admin/fileupload/#{container_tmpl}", :locals => locals)
149
+ template.render(:partial => "admin/fileupload/#{options[:container] || 'container'}", :locals => locals)
147
150
  end
148
151
 
149
152
  protected
@@ -54,6 +54,11 @@ module AbAdmin
54
54
  %Q[<script type='text/javascript'>$(function(){#{js}})</script>].html_safe
55
55
  end
56
56
 
57
+ def image_tag_if(image, options={})
58
+ return unless image
59
+ image_tag image, options
60
+ end
61
+
57
62
  def render_title
58
63
  @page_title || I18n.t("page.title")
59
64
  end
@@ -17,6 +17,16 @@ module AbAdmin
17
17
  def show_builder
18
18
  manager.show ||= ::AbAdmin::Config::Show.default_for_model(resource_class)
19
19
  end
20
+
21
+ def action_item_admin_path(name, record=nil)
22
+ custom_action = manager.custom_action_for(name, self)
23
+ if custom_action.collection?
24
+ admin_collection_action_path(:model_name => resource_collection_name, :custom_action => custom_action.name)
25
+ else
26
+ record ||= resource
27
+ admin_member_action_path(:model_name => resource_collection_name, :id => record.id, :custom_action => custom_action.name)
28
+ end
29
+ end
20
30
  end
21
31
  end
22
32
  end
@@ -15,17 +15,24 @@ module AbAdmin
15
15
  def select_field(attr, options={})
16
16
  label(attr, options[:label]) + content_tag(:div, :class => 'controls') do
17
17
  param = "#{options[:value_attr] || attr}_eq"
18
- options[:collection] ||= []
19
- if options[:collection].first.try(:respond_to?, :id)
20
- opts = options_from_collection_for_select(options[:collection], :id, :title, params[:q][param])
18
+
19
+ if options[:collection].is_a?(Proc)
20
+ collection = options[:collection].call
21
21
  else
22
- opts = options_for_select(options[:collection], params[:q][param])
22
+ collection = options[:collection] || []
23
+ end
24
+
25
+ if collection.first.try(:respond_to?, :id)
26
+ collection.map!{|r| [AbAdmin.display_name(r), r.id] }
23
27
  end
28
+
24
29
  options[:html_options] ||= {}
25
30
  if options[:fancy] || !options.has_key?(:fancy)
26
31
  options[:html_options][:class] = [options[:html_options][:class], 'fancy_select'].join(' ')
27
32
  end
28
- select_tag("q[#{param}]", opts, options[:html_options].merge(:include_blank => true, :id => "q_#{attr}"))
33
+
34
+ html_options = options[:html_options].merge(:include_blank => true, :id => "q_#{attr}")
35
+ select_tag("q[#{param}]", options_for_select(collection, params[:q][param]), html_options)
29
36
  end
30
37
  end
31
38
 
@@ -21,7 +21,7 @@ module AbAdmin
21
21
 
22
22
  template('config/logrotate-config', 'config/logrotate-config')
23
23
  template('config/nginx.conf', 'config/nginx.conf')
24
- template('scripts/unicorn.sh', 'scripts/unicorn.sh')
24
+ template('script/unicorn.sh', 'script/unicorn.sh')
25
25
  template('config/settings.yml', 'config/settings/settings.yml')
26
26
  template('config/settings.yml', 'config/settings/settings.local.yml')
27
27
  copy_file('config/unicorn_config.rb', 'config/unicorn_config.rb')
@@ -3,8 +3,8 @@ class AdminMenu < AbAdmin::MenuBuilder
3
3
  model User
4
4
  group :system do
5
5
  model Structure
6
- model Locator
7
- model Settings, :url => edit_admin_settings_path
6
+ link Locator.model_name.human, '/admin/locators'
7
+ link Settings.model_name.human, edit_admin_settings_path
8
8
  end
9
9
  end
10
10
  end
@@ -13,7 +13,7 @@ module Admin::StructuresHelper
13
13
  when StructureType.main
14
14
  '#'
15
15
  when StructureType.redirect
16
- edit_admin_structure_path(item)
16
+ edit_admin_structure_path(structure)
17
17
  when StructureType.group
18
18
  '#'
19
19
  else
@@ -3,4 +3,6 @@ class AttachmentFile < Asset
3
3
 
4
4
  sunrise_uploader AttachmentFileUploader
5
5
  validates_filesize_of :data, :maximum => 150.megabytes
6
+
7
+ self.max_size = 150
6
8
  end
@@ -3,7 +3,6 @@ require 'ostruct'
3
3
 
4
4
  class Locator
5
5
  include Singleton
6
- extend ActiveModel::Naming
7
6
  include AbAdmin::Models::Locator
8
7
 
9
8
  attr_accessor :files, :data
@@ -2,7 +2,6 @@ require 'configatron'
2
2
 
3
3
  class Settings
4
4
  include Singleton
5
- extend ActiveModel::Naming
6
5
  include AbAdmin::Models::Settings
7
6
 
8
7
  attr_accessor :paths, :data
@@ -10,6 +10,7 @@ class StaticPage < ActiveRecord::Base
10
10
 
11
11
  enumerated_attribute :static_page_type, :id_attribute => :kind
12
12
 
13
+ fileuploads :pictures, :attachment_files
13
14
  translates :title, :content
14
15
  attr_accessible *all_translated_attribute_names
15
16
 
@@ -9,4 +9,8 @@ class AvatarUploader < AbAdmin::CarrierWave::BaseUploader
9
9
  def extension_white_list
10
10
  %w(jpg jpeg gif png)
11
11
  end
12
+
13
+ #def move_to_cache
14
+ # true
15
+ #end
12
16
  end
@@ -28,7 +28,7 @@
28
28
  -%>
29
29
  <% translated_columns.each do |col| -%>
30
30
  <% next if [:description].include?(col.to_sym) -%>
31
- = f.input :translations_<%= col -%>, :label => ha(:<%= col -%>)
31
+ = f.input :<%= col %>
32
32
  <% end -%>
33
33
  <% model.columns_hash.except('id', 'slug').each do |key, col| -%>
34
34
  <%= input_by_col(key, col) %>
@@ -28,7 +28,7 @@
28
28
  -%>
29
29
  <% translated_columns.each do |col| -%>
30
30
  <% next if [:description].include?(col.to_sym) -%>
31
- = f.input :translations_<%= col -%>, :label => ha(:<%= col -%>)
31
+ = f.input :<%= col %>
32
32
  <% end -%>
33
33
  <% model.columns_hash.except('id', 'slug').each do |key, col| -%>
34
34
  <%= input_by_col(key, col) %>
@@ -11,8 +11,7 @@
11
11
  "item.#{attribute}"
12
12
  end
13
13
  end
14
-
15
- %>
14
+ -%>
16
15
  %table.table.table-striped.index_table#list
17
16
  %thead
18
17
  %tr.pjax_links
@@ -11,8 +11,7 @@
11
11
  "item.#{attribute}"
12
12
  end
13
13
  end
14
-
15
- %>
14
+ -%>
16
15
  table.table.table-striped.index_table#list
17
16
  thead
18
17
  tr.pjax_links