rails_admin 0.7.0 → 0.8.1

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.

Potentially problematic release.


This version of rails_admin might be problematic. Click here for more details.

Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +13 -2
  3. data/README.md +2 -2
  4. data/app/assets/javascripts/rails_admin/ra.filter-box.js +53 -39
  5. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +50 -32
  6. data/app/assets/javascripts/rails_admin/ra.i18n.coffee +5 -3
  7. data/app/assets/javascripts/rails_admin/ra.widgets.coffee +21 -6
  8. data/app/assets/javascripts/rails_admin/rails_admin.js +2 -3
  9. data/app/assets/stylesheets/rails_admin/base/theming.scss +6 -7
  10. data/app/assets/stylesheets/rails_admin/custom/mixins.scss +3 -4
  11. data/app/assets/stylesheets/rails_admin/custom/theming.scss +4 -4
  12. data/app/assets/stylesheets/rails_admin/custom/variables.scss +4 -4
  13. data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +3 -3
  14. data/app/assets/stylesheets/rails_admin/themes/default/mixins.scss +2 -2
  15. data/app/assets/stylesheets/rails_admin/themes/default/theming.scss +3 -3
  16. data/app/assets/stylesheets/rails_admin/themes/default/variables.scss +3 -3
  17. data/app/controllers/rails_admin/application_controller.rb +0 -2
  18. data/app/controllers/rails_admin/main_controller.rb +6 -5
  19. data/app/helpers/rails_admin/application_helper.rb +3 -3
  20. data/app/helpers/rails_admin/main_helper.rb +45 -0
  21. data/app/views/layouts/rails_admin/application.html.haml +2 -2
  22. data/app/views/layouts/rails_admin/pjax.html.haml +2 -2
  23. data/app/views/rails_admin/main/_form_datetime.html.haml +4 -1
  24. data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +1 -0
  25. data/app/views/rails_admin/main/_submit_buttons.html.haml +1 -1
  26. data/app/views/rails_admin/main/export.html.haml +13 -13
  27. data/app/views/rails_admin/main/index.html.haml +20 -64
  28. data/config/locales/rails_admin.en.yml +0 -1
  29. data/lib/generators/rails_admin/templates/initializer.erb +3 -0
  30. data/lib/rails_admin.rb +2 -1
  31. data/lib/rails_admin/abstract_model.rb +14 -16
  32. data/lib/rails_admin/adapters/active_record.rb +17 -8
  33. data/lib/rails_admin/adapters/active_record/association.rb +5 -0
  34. data/lib/rails_admin/adapters/mongoid.rb +7 -12
  35. data/lib/rails_admin/adapters/mongoid/association.rb +5 -0
  36. data/lib/rails_admin/config/actions/export.rb +1 -1
  37. data/lib/rails_admin/config/fields.rb +1 -0
  38. data/lib/rails_admin/config/fields/association.rb +5 -0
  39. data/lib/rails_admin/config/fields/base.rb +4 -0
  40. data/lib/rails_admin/config/fields/factories/paperclip.rb +1 -1
  41. data/lib/rails_admin/config/fields/factories/refile.rb +25 -0
  42. data/lib/rails_admin/config/fields/types/active_record_enum.rb +5 -5
  43. data/lib/rails_admin/config/fields/types/all.rb +1 -0
  44. data/lib/rails_admin/config/fields/types/bson_object_id.rb +16 -2
  45. data/lib/rails_admin/config/fields/types/date.rb +19 -8
  46. data/lib/rails_admin/config/fields/types/datetime.rb +33 -117
  47. data/lib/rails_admin/config/fields/types/json.rb +5 -2
  48. data/lib/rails_admin/config/fields/types/refile.rb +27 -0
  49. data/lib/rails_admin/config/fields/types/serialized.rb +5 -2
  50. data/lib/rails_admin/config/fields/types/time.rb +6 -18
  51. data/lib/rails_admin/config/has_fields.rb +2 -2
  52. data/lib/rails_admin/config/lazy_model.rb +2 -2
  53. data/lib/rails_admin/config/proxyable/proxy.rb +2 -4
  54. data/lib/rails_admin/extensions/pundit.rb +3 -0
  55. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +63 -0
  56. data/lib/rails_admin/support/datetime.rb +99 -0
  57. data/lib/rails_admin/support/hash_helper.rb +28 -0
  58. data/lib/rails_admin/support/i18n.rb +41 -0
  59. data/lib/rails_admin/version.rb +2 -2
  60. data/vendor/assets/javascripts/rails_admin/bootstrap-datetimepicker.js +2444 -0
  61. data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +9977 -0
  62. data/vendor/assets/stylesheets/rails_admin/_bootstrap-datetimepicker.scss +343 -0
  63. data/vendor/assets/stylesheets/rails_admin/bootstrap-datetimepicker-build.scss +16 -0
  64. metadata +14 -9
  65. data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +0 -1437
  66. data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +0 -83
  67. data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.scss +0 -68
  68. data/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss +0 -45
  69. data/lib/rails_admin/i18n_support.rb +0 -39
  70. data/lib/rails_admin/support/core_extensions.rb +0 -30
@@ -4,9 +4,8 @@
4
4
  //= require 'jquery-ui/effect'
5
5
  //= require 'jquery-ui/sortable'
6
6
  //= require 'jquery-ui/autocomplete'
7
- //= require 'jquery-ui/datepicker'
8
- //= require 'rails_admin/jquery.ui.timepicker'
9
- //= require 'rails_admin/ra.datetimepicker'
7
+ //= require 'rails_admin/moment-with-locales'
8
+ //= require 'rails_admin/bootstrap-datetimepicker'
10
9
  //= require 'rails_admin/jquery.colorpicker'
11
10
  //= require 'rails_admin/ra.filter-box'
12
11
  //= require 'rails_admin/ra.filtering-multiselect'
@@ -8,7 +8,7 @@ $avatar-size: 30px;
8
8
  body.rails_admin {
9
9
 
10
10
  .thumbnail {
11
- display:inline-block;
11
+ display: inline-block;
12
12
  }
13
13
 
14
14
  /* room for upper navbar */
@@ -58,6 +58,10 @@ body.rails_admin {
58
58
  }
59
59
  }
60
60
 
61
+ label.input-group-addon {
62
+ cursor: pointer;
63
+ }
64
+
61
65
  /* fat labels in forms */
62
66
  .label.form-label {
63
67
  padding: 7px 7px 8px 7px;
@@ -127,11 +131,6 @@ body.rails_admin {
127
131
  display:block;
128
132
  }
129
133
 
130
- /* Put form controls above siblings to make them accessible */
131
- .controls {
132
- z-index: 1;
133
- }
134
-
135
134
  /* nested forms */
136
135
  .tab-content {
137
136
  clear: both;
@@ -336,7 +335,7 @@ body.rails_admin {
336
335
  position: fixed;
337
336
  top: $navbar-height;
338
337
  bottom: 0;
339
- overflow-y: scroll;
338
+ overflow-y: auto;
340
339
  }
341
340
  }
342
341
  }
@@ -1,12 +1,11 @@
1
1
  /*
2
2
  Customize Sass mixins from Twitter-Bootstrap/RailsAdmin theme or add new ones for your own use.
3
- Copy this file to your app/assets/rails_admin/custom/mixins.css.scss, leave this one untouched
3
+ Copy this file to your app/assets/rails_admin/custom/mixins.scss, leave this one untouched
4
4
  Don't require it in your application.rb
5
5
 
6
6
  Available mixins to use/override:
7
7
 
8
- https://github.com/thomas-mcdonald/bootstrap-sass/blob/master/vendor/assets/stylesheets/bootstrap/mixins.css.scss
9
- https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/mixins.css.scss
8
+ https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins
9
+ https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/mixins.scss
10
10
  Plus the ones from your theme.
11
11
  */
12
-
@@ -1,13 +1,13 @@
1
1
  /*
2
2
  Customize RailsAdmin theme here.
3
- Copy this file to your app/assets/stylesheets/rails_admin/custom/theming.css.scss, leave this one untouched
3
+ Copy this file to your app/assets/stylesheets/rails_admin/custom/theming.scss, leave this one untouched
4
4
  Don't require it in your application.rb
5
5
 
6
6
  Look at the markup in RailsAdmin and go there to get inspiration from:
7
7
 
8
- http://getbootstrap.com/2.3.2/
8
+ http://getbootstrap.com
9
9
 
10
- Test me: (actual color should be the one defined in variables.css.scss if you did)
10
+ Test me: (actual color should be the one defined in variables.scss if you did)
11
11
 
12
- body{ background-color: $linkColor; }
12
+ body { background-color: $link-color; }
13
13
  */
@@ -1,15 +1,15 @@
1
1
  /*
2
2
  Customize Sass variables from Twitter-Bootstrap/RailsAdmin theme or add new ones for your own use.
3
- Copy this file to your app/assets/rails_admin/custom/variables.css.scss, leave this one untouched
3
+ Copy this file to your app/assets/rails_admin/custom/variables.scss, leave this one untouched
4
4
  Don't require it in your application.rb
5
5
 
6
6
  Available variables to use/override:
7
7
 
8
- https://github.com/thomas-mcdonald/bootstrap-sass/blob/master/vendor/assets/stylesheets/bootstrap/_variables.scss
9
- https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/variables.css.scss
8
+ https://github.com/twbs/bootstrap-sass/blob/master/assets/stylesheets/bootstrap/_variables.scss
9
+ https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/variables.scss
10
10
  Plus the ones from your themes.
11
11
 
12
12
  Test me: pink links
13
13
 
14
- $linkColor: #F0F;
14
+ $link-color: #F0F;
15
15
  */
@@ -35,10 +35,10 @@
35
35
 
36
36
  /*** Variables ***/
37
37
 
38
+ @import "rails_admin/custom/variables";
38
39
  @import "rails_admin/bootstrap/variables";
39
40
  @import "rails_admin/base/variables";
40
41
  @import "rails_admin/themes/<%= theme %>/variables";
41
- @import "rails_admin/custom/variables";
42
42
 
43
43
  /*** Mixins ***/
44
44
 
@@ -52,12 +52,12 @@
52
52
  /*** Libraries ***/
53
53
 
54
54
  @import "rails_admin/aristo/jquery-ui-1.8.7.custom";
55
- @import "rails_admin/jquery.ui.timepicker";
56
- @import "rails_admin/ra.calendar-additions";
55
+ @import "rails_admin/bootstrap-datetimepicker-build";
57
56
  @import "rails_admin/ra.filtering-multiselect";
58
57
  @import "rails_admin/ra.widgets";
59
58
  @import "rails_admin/jquery.colorpicker";
60
59
 
60
+
61
61
  /*** Font-awesome ***/
62
62
 
63
63
  @import 'font-awesome';
@@ -3,6 +3,6 @@
3
3
 
4
4
  Available mixins to use/override:
5
5
 
6
- https://github.com/thomas-mcdonald/bootstrap-sass/blob/master/vendor/assets/stylesheets/bootstrap/mixins.css.scss
7
- https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/mixins.css.scss
6
+ https://github.com/twbs/bootstrap-sass/tree/master/assets/stylesheets/bootstrap/mixins
7
+ https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/mixins.scss
8
8
  */
@@ -3,9 +3,9 @@
3
3
 
4
4
  Look at the markup in RailsAdmin and go there to get inspiration from:
5
5
 
6
- http://getbootstrap.com/2.3.2/
6
+ http://getbootstrap.com
7
7
 
8
- Test me: (actual color should be the one defined in variables.css.scss if you did)
8
+ Test me: (actual color should be the one defined in variables.scss if you did)
9
9
 
10
- body{ background-color: $linkColor; }
10
+ body { background-color: $link-color; }
11
11
  */
@@ -3,10 +3,10 @@
3
3
 
4
4
  Available variables to use/override:
5
5
 
6
- https://github.com/thomas-mcdonald/bootstrap-sass/blob/master/vendor/assets/stylesheets/bootstrap/variables.css.scss
7
- https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/variables.css.scss
6
+ https://github.com/twbs/bootstrap-sass/blob/master/assets/stylesheets/bootstrap/_variables.scss
7
+ https://github.com/sferik/rails_admin/blob/master/app/assets/stylesheets/rails_admin/base/variables.scss
8
8
 
9
9
  Test me: pink links
10
10
 
11
- $linkColor: #F0F;
11
+ $link-color: #F0F;
12
12
  */
@@ -11,8 +11,6 @@ module RailsAdmin
11
11
  end
12
12
 
13
13
  class ApplicationController < Config.parent_controller.constantize
14
- newrelic_ignore if defined?(NewRelic)
15
-
16
14
  before_filter :_authenticate!
17
15
  before_filter :_authorize!
18
16
  before_filter :_audit!
@@ -34,7 +34,6 @@ module RailsAdmin
34
34
  scope = scope.merge(auth_scope)
35
35
  end
36
36
  scope = scope.instance_eval(&additional_scope) if additional_scope
37
-
38
37
  get_collection(model_config, scope, pagination)
39
38
  end
40
39
 
@@ -51,12 +50,10 @@ module RailsAdmin
51
50
  def get_sort_hash(model_config)
52
51
  abstract_model = model_config.abstract_model
53
52
  params[:sort] = params[:sort_reverse] = nil unless model_config.list.fields.collect { |f| f.name.to_s }.include? params[:sort]
54
-
55
53
  params[:sort] ||= model_config.list.sort_by.to_s
56
54
  params[:sort_reverse] ||= 'false'
57
55
 
58
56
  field = model_config.list.fields.detect { |f| f.name.to_s == params[:sort] }
59
-
60
57
  column = begin
61
58
  if field.nil? || field.sortable == true # use params[:sort] on the base table
62
59
  "#{abstract_model.table_name}.#{params[:sort]}"
@@ -88,11 +85,15 @@ module RailsAdmin
88
85
  end
89
86
  end
90
87
 
88
+ def visible_fields(action, model_config = @model_config)
89
+ model_config.send(action).with(controller: self, view: view_context, object: @object).visible_fields
90
+ end
91
+
91
92
  def sanitize_params_for!(action, model_config = @model_config, target_params = params[@abstract_model.param_key])
92
93
  return unless target_params.present?
93
- fields = model_config.send(action).with(controller: self, view: view_context, object: @object).visible_fields
94
+ fields = visible_fields(action, model_config)
94
95
  allowed_methods = fields.collect(&:allowed_methods).flatten.uniq.collect(&:to_s) << 'id' << '_destroy'
95
- fields.each { |f| f.parse_input(target_params) }
96
+ fields.each { |field| field.parse_input(target_params) }
96
97
  target_params.slice!(*allowed_methods)
97
98
  target_params.permit! if target_params.respond_to?(:permit!)
98
99
  fields.select(&:nested_form).each do |association|
@@ -1,8 +1,8 @@
1
- require 'rails_admin/i18n_support'
1
+ require 'rails_admin/support/i18n'
2
2
 
3
3
  module RailsAdmin
4
4
  module ApplicationHelper
5
- include RailsAdmin::I18nSupport
5
+ include RailsAdmin::Support::I18n
6
6
 
7
7
  def capitalize_first_letter(wording)
8
8
  return nil unless wording.present? && wording.is_a?(String)
@@ -156,7 +156,7 @@ module RailsAdmin
156
156
  actions = actions(:bulkable, abstract_model)
157
157
  return '' if actions.empty?
158
158
  content_tag :li, class: 'dropdown', style: 'float:right' do
159
- content_tag(:a, class: 'dropdown-toggle', data: {toggle: 'dropdown'}, href: '#') { t('admin.misc.bulk_menu_title').html_safe + '<b class="caret"></b>'.html_safe } +
159
+ content_tag(:a, class: 'dropdown-toggle', data: {toggle: 'dropdown'}, href: '#') { t('admin.misc.bulk_menu_title').html_safe + ' ' + '<b class="caret"></b>'.html_safe } +
160
160
  content_tag(:ul, class: 'dropdown-menu', style: 'left:auto; right:0;') do
161
161
  actions.collect do |action|
162
162
  content_tag :li do
@@ -35,5 +35,50 @@ module RailsAdmin
35
35
  end
36
36
  sets
37
37
  end
38
+
39
+ def filterable_fields
40
+ @filterable_fields ||= @model_config.list.fields.select(&:filterable?)
41
+ end
42
+
43
+ def ordered_filters
44
+ return @ordered_filters if @ordered_filters.present?
45
+ @index = 0
46
+ @ordered_filters = (params[:f] || @model_config.list.filters).inject({}) do |memo, filter|
47
+ field_name = filter.is_a?(Array) ? filter.first : filter
48
+ (filter.is_a?(Array) ? filter.last : {(@index += 1) => {'v' => ''}}).each do |index, filter_hash|
49
+ if filter_hash['disabled'].blank?
50
+ memo[index] = {field_name => filter_hash}
51
+ else
52
+ params[:f].delete(field_name)
53
+ end
54
+ end
55
+ memo
56
+ end.to_a.sort_by(&:first)
57
+ end
58
+
59
+ def ordered_filter_string
60
+ @ordered_filter_string ||= ordered_filters.map do |duplet|
61
+ options = {index: duplet[0]}
62
+ filter_for_field = duplet[1]
63
+ filter_name = filter_for_field.keys.first
64
+ filter_hash = filter_for_field.values.first
65
+ unless (field = filterable_fields.find { |f| f.name == filter_name.to_sym })
66
+ fail "#{filter_name} is not currently filterable; filterable fields are #{filterable_fields.map(&:name).join(', ')}"
67
+ end
68
+ case field.type
69
+ when :enum
70
+ options[:select_options] = options_for_select(field.with(object: @abstract_model.model.new).enum, filter_hash['v'])
71
+ when :date, :datetime, :time
72
+ options[:datetimepicker_format] = field.parser.to_momentjs
73
+ end
74
+ options[:label] = field.label
75
+ options[:name] = field.name
76
+ options[:type] = field.type
77
+ options[:value] = filter_hash['v']
78
+ options[:label] = field.label
79
+ options[:operator] = filter_hash['o']
80
+ %{$.filters.append(#{options.to_json});}
81
+ end.join("\n").html_safe if ordered_filters
82
+ end
38
83
  end
39
84
  end
@@ -1,5 +1,5 @@
1
1
  !!! 5
2
- %html
2
+ %html{lang: I18n.locale}
3
3
  %head
4
4
  %meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"}
5
5
  %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
@@ -9,7 +9,7 @@
9
9
  = javascript_include_tag "rails_admin/rails_admin.js"
10
10
  -# Initialize JS simple i18n
11
11
  :javascript
12
- RailsAdmin.I18n.init(JSON.parse("#{j I18n.t("admin.js").to_json}"))
12
+ RailsAdmin.I18n.init('#{I18n.locale}', JSON.parse("#{j I18n.t("admin.js").to_json}"))
13
13
  %body.rails_admin
14
14
  #loading.label.label-warning{style: 'display:none; position:fixed; right:20px; bottom:20px; z-index:100000'}= t('admin.loading')
15
15
  %nav.navbar.navbar-default.navbar-fixed-top
@@ -6,8 +6,8 @@
6
6
  .page-header
7
7
  %h1= @page_name
8
8
  - flash && flash.each do |key, value|
9
- .alert{class: flash_alert_class(key)}
10
- %a.close{href: '#', :'data-dismiss' => "alert"} &times;
9
+ .alert.alert-dismissible{class: flash_alert_class(key)}
10
+ %button.close{type: 'button', :'data-dismiss' => "alert"} &times;
11
11
  = value
12
12
  = breadcrumb
13
13
  %ul.nav.nav-tabs
@@ -1,2 +1,5 @@
1
1
  .form-inline
2
- = form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, data: { datetimepicker: true, options: field.js_plugin_options.to_json } })
2
+ .input-group
3
+ = form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({value: field.form_value, class: 'form-control', data: {datetimepicker: true, options: field.datepicker_options.to_json}})
4
+ = form.label(field.method_name, class: 'input-group-addon') do
5
+ %i.fa.fa-fw.fa-calendar
@@ -26,6 +26,7 @@
26
26
  :'edit-url' => (authorized?(:edit, config.abstract_model) ? edit_path(model_name: config.abstract_model.to_param, id: '__ID__') : ''),
27
27
  remote_source: index_path(config.abstract_model, source_object_id: form.object.id, source_abstract_model: source_abstract_model.to_param, associated_collection: field.name, current_action: current_action, compact: true),
28
28
  sortable: !!field.orderable,
29
+ removable: !!field.removable,
29
30
  cacheAll: !!field.associated_collection_cache_all,
30
31
  regional: {
31
32
  chooseAll: t("admin.misc.chose_all"),
@@ -11,6 +11,6 @@
11
11
  - if authorized? :edit, @abstract_model
12
12
  %button.btn.btn-info{type: "submit", name: "_add_edit", :'data-disable-with' => t("admin.form.save_and_edit")}
13
13
  = t("admin.form.save_and_edit")
14
- %button.btn{type: "submit", name: "_continue", :'data-disable-with' => t("admin.form.cancel"), :formnovalidate => true}
14
+ %button.btn.btn-default{type: "submit", name: "_continue", :'data-disable-with' => t("admin.form.cancel"), :formnovalidate => true}
15
15
  %i.icon-remove
16
16
  = t("admin.form.cancel")
@@ -8,38 +8,38 @@
8
8
  %legend
9
9
  %i.icon-chevron-down
10
10
  = t('admin.export.select')
11
- .form-group.control-group
11
+ .form-group.control-group.col-sm-12
12
12
  .controls
13
- .col-sm-2
14
- %label.col-sm-10.checkbox{for: 'check_all'}
13
+ .col-sm-12
14
+ %label.col-sm-12.checkbox{for: 'check_all'}
15
15
  = check_box_tag 'all', 'all', true, { id: 'check_all' }
16
16
  = t('admin.export.select_all_fields')
17
- .form-group.control-group
18
- %label.col-sm-2.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', name: @model_config.label_plural.downcase)
19
- .col-sm-10.controls
17
+ .form-group.control-group.col-sm-12
18
+ %label.col-sm-12.well.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', name: @model_config.label_plural.downcase)
19
+ .col-sm-11.col-sm-offset-1.controls
20
20
  - visible_fields.select{ |f| !f.association? || f.association.polymorphic? }.each do |field|
21
21
  - list = field.virtual? ? 'methods' : 'only'
22
22
  - if field.association? && field.association.polymorphic?
23
- %label.checkbox{for: "schema_#{list}_#{field.method_name}"}
23
+ %label.checkbox.col-sm-3{for: "schema_#{list}_#{field.method_name}"}
24
24
  = check_box_tag "schema[#{list}][]", field.method_name, true, { id: "schema_#{list}_#{field.method_name}" }
25
25
  = field.label + " [id]"
26
26
  - polymorphic_type_column_name = @abstract_model.properties.detect {|p| field.association.foreign_type == p.name }.name
27
- %label.checkbox{for: "schema_#{list}_#{polymorphic_type_column_name}"}
27
+ %label.checkbox.col-sm-3{for: "schema_#{list}_#{polymorphic_type_column_name}"}
28
28
  = check_box_tag "schema[#{list}][]", polymorphic_type_column_name, true, { id: "schema_#{list}_#{polymorphic_type_column_name}" }
29
29
  = capitalize_first_letter(field.label) + " [type]"
30
30
  - else
31
- %label.checkbox{for: "schema_#{list}_#{field.name}"}
31
+ %label.checkbox.col-sm-3{for: "schema_#{list}_#{field.name}"}
32
32
  = check_box_tag "schema[#{list}][]", field.name, true, { id: "schema_#{list}_#{field.name}" }
33
33
  = capitalize_first_letter(field.label)
34
34
 
35
35
  - visible_fields.select{ |f| f.association? && !f.association.polymorphic? }.each do |field|
36
36
  - fields = field.associated_model_config.export.with(controller: self.controller, view: self, object: (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? }
37
- .form-group.control-group
38
- %label.col-sm-2.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', name: field.label.downcase)
39
- .col-sm-10.controls
37
+ .form-group.control-group.col-sm-12
38
+ %label.col-sm-12.well.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', name: field.label.downcase)
39
+ .col-sm-11.col-sm-offset-1.controls
40
40
  - fields.each do |associated_model_field|
41
41
  - list = associated_model_field.virtual? ? 'methods' : 'only'
42
- %label.checkbox{for: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}"}
42
+ %label.checkbox.col-sm-3{for: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}"}
43
43
  = check_box_tag "schema[include][#{field.name}][#{list}][]", associated_model_field.name, true, { id: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}" }
44
44
  = capitalize_first_letter(associated_model_field.label)
45
45
 
@@ -1,5 +1,4 @@
1
1
  :ruby
2
- require 'rails_admin/config/fields/types/datetime.rb'
3
2
  query = params[:query]
4
3
  params = request.params.except(:authenticity_token, :action, :controller, :utf8, :bulk_export, :_pjax)
5
4
  params.delete(:query) if params[:query].blank?
@@ -7,95 +6,48 @@
7
6
  sort_reverse = params[:sort_reverse]
8
7
  sort = params[:sort]
9
8
  params.delete(:sort) if params[:sort] == @model_config.list.sort_by.to_s
10
-
11
9
  export_action = RailsAdmin::Config::Actions.find(:export, { controller: self.controller, abstract_model: @abstract_model })
12
10
  export_action = nil unless export_action && authorized?(export_action.authorization_key, @abstract_model)
13
-
14
11
  description = RailsAdmin.config(@abstract_model.model_name).description
15
12
  properties = @model_config.list.with(controller: self.controller, view: self, object: @abstract_model.model.new).visible_fields
16
13
  # columns paginate
17
- @filterable_fields = @model_config.list.fields.select(&:filterable?)
18
14
  sets = get_column_sets(properties)
19
15
  properties = sets[params[:set].to_i] || []
20
16
  other_left = ((params[:set].to_i - 1) >= 0) && sets[params[:set].to_i - 1].present?
21
17
  other_right = sets[params[:set].to_i + 1].present?
22
- @index = 0
23
- @ordered_filters = (params[:f] || @model_config.list.filters).inject({}) { |memo, filter|
24
- field_name = filter.is_a?(Array) ? filter.first : filter
25
- (filter.is_a?(Array) ? filter.last : { (@index += 1) => { "v" => '' } }) .each do |index, filter_hash|
26
- unless filter_hash['disabled']
27
- memo[index] = { field_name => filter_hash }
28
- else
29
- params[:f].delete(field_name)
30
- end
31
- end
32
- memo
33
- }.to_a.sort_by(&:first)
34
-
35
- @ordered_filter_string = @ordered_filters.map do |duplet|
36
- filter_index = duplet[0]
37
- filter_for_field = duplet[1]
38
- filter_name = filter_for_field.keys.first
39
- filter_hash = filter_for_field.values.first
40
- field = @filterable_fields.find{ |field| field.name == filter_name.to_sym }
41
- unless field
42
- fail "#{filter_name} is not currently filterable; filterable fields are #{@filterable_fields.map(&:name).join(', ')}"
43
- end
44
- field_options = case field.type
45
- when :enum
46
- options_for_select(field.with(object: @abstract_model.model.new).enum, filter_hash['v'])
47
- else
48
- ''
49
- end
50
- %{
51
- $.filters.append(#{field.label.to_json}, #{field.name.to_json}, #{field.type.to_json}, #{filter_hash['v'].to_json}, #{filter_hash['o'].to_json}, #{field_options.to_json}, #{filter_index.to_json});
52
- }
53
- end.join.html_safe if @ordered_filters
54
18
 
55
-
56
- = content_for :contextual_tabs do
19
+ - content_for :contextual_tabs do
57
20
  = bulk_menu
58
- - if @filterable_fields.present?
21
+ - if filterable_fields.present?
59
22
  %li.dropdown{style: 'float:right'}
60
23
  %a.dropdown-toggle{href: '#', :'data-toggle' => "dropdown"}
61
24
  = t('admin.misc.add_filter')
62
25
  %b.caret
63
26
  %ul.dropdown-menu#filters{style: 'left:auto; right:0;'}
64
- - @filterable_fields.each do |field|
27
+ - filterable_fields.each do |field|
65
28
  - field_options = case field.type
66
29
  - when :enum
67
30
  - options_for_select(field.with(object: @abstract_model.model.new).enum)
68
31
  - else
69
32
  - ''
70
33
  %li
71
- %a{href: '#', :"data-field-label" => field.label, :"data-field-name" => field.name, :"data-field-options" => field_options.html_safe, :"data-field-type" => field.type, :"data-field-value" => ""}= capitalize_first_letter(field.label)
34
+ %a{href: '#', :"data-field-label" => field.label, :"data-field-name" => field.name, :"data-field-options" => field_options.html_safe, :"data-field-type" => field.type, :"data-field-value" => "", :"data-field-datetimepicker-format" => (field.try(:parser) && field.parser.to_momentjs)}= capitalize_first_letter(field.label)
72
35
 
73
- #list
74
- %script
75
- jQuery(function($) {
76
- $.filters.options.regional = {
77
- datePicker: {
78
- dateFormat: #{raw I18n.t("admin.misc.filter_date_format", default: I18n.t("admin.misc.filter_date_format", locale: :en)).to_json},
79
- dayNames: #{raw RailsAdmin::Config::Fields::Types::Datetime.day_names.to_json},
80
- dayNamesShort: #{raw RailsAdmin::Config::Fields::Types::Datetime.abbr_day_names.to_json},
81
- dayNamesMin: #{raw RailsAdmin::Config::Fields::Types::Datetime.abbr_day_names.to_json},
82
- firstDay: "1",
83
- monthNames: #{raw RailsAdmin::Config::Fields::Types::Datetime.month_names.to_json},
84
- monthNamesShort: #{raw RailsAdmin::Config::Fields::Types::Datetime.abbr_month_names.to_json}
85
- }
86
- }
36
+ :javascript
37
+ jQuery(function($) {
38
+ #{ordered_filter_string}
39
+ });
87
40
 
88
- = @ordered_filter_string
41
+ %style
42
+ - properties.select{ |p| p.column_width.present? }.each do |property|
43
+ = "#list th.#{property.css_class} { width: #{property.column_width}px; min-width: #{property.column_width}px; }"
44
+ = "#list td.#{property.css_class} { max-width: #{property.column_width}px; }"
89
45
 
90
- });
91
- %style
92
- - properties.select{ |p| p.column_width.present? }.each do |property|
93
- = "#list th.#{property.css_class} { width: #{property.column_width}px; min-width: #{property.column_width}px; }"
94
- = "#list td.#{property.css_class} { max-width: #{property.column_width}px; }"
46
+ #list
95
47
  = form_tag(index_path(params.except(*%w[page f query])), method: :get, class: "pjax-form form-inline") do
96
48
  .well
97
49
  %span#filters_box
98
- %hr.filters_box{style: "display:#{@ordered_filters.empty? ? 'none' : 'block'}"}
50
+ %hr.filters_box{style: "display:#{ordered_filters.empty? ? 'none' : 'block'}"}
99
51
  .input-group
100
52
  %input.form-control.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")}
101
53
  %span.input-group-btn
@@ -103,7 +55,7 @@
103
55
  %i.icon-white.icon-refresh
104
56
  = t("admin.misc.refresh")
105
57
  %button#remove_filter.btn.btn-info{title: "Reset filters"}
106
- %i.icon-white.icon-remove
58
+ %i.icon-white.icon-remove
107
59
  - if export_action
108
60
  %span{style: 'float:right'}= link_to wording_for(:link, export_action), export_path(params.except('set').except('page')), class: 'btn btn-info'
109
61
 
@@ -117,7 +69,9 @@
117
69
  = form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: "form" do
118
70
  = hidden_field_tag :bulk_action
119
71
  - if description.present?
120
- <b>#{description}</b>
72
+ %p
73
+ %strong= description
74
+
121
75
  %table.table.table-condensed.table-striped
122
76
  %thead
123
77
  %tr
@@ -148,6 +102,7 @@
148
102
  %td.other.right= link_to "...", @other_right_link, class: 'pjax'
149
103
  %td.last.links
150
104
  %ul.inline.list-inline= menu_for :member, @abstract_model, object, true
105
+
151
106
  - if @objects.respond_to?(:total_count)
152
107
  - total_count = @objects.total_count.to_i
153
108
  .row
@@ -155,5 +110,6 @@
155
110
  .row
156
111
  .col-md-6= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn btn-default clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size
157
112
  .clearfix.total-count= "#{total_count} #{@model_config.pluralize(total_count).downcase}"
113
+
158
114
  - else
159
115
  .clearfix.total-count= "#{@objects.size} #{@model_config.pluralize(@objects.size).downcase}"