ab_admin 0.1.2 → 0.2.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 (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