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.
- checksums.yaml +4 -4
- data/Gemfile +13 -2
- data/README.md +2 -2
- data/app/assets/javascripts/rails_admin/ra.filter-box.js +53 -39
- data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +50 -32
- data/app/assets/javascripts/rails_admin/ra.i18n.coffee +5 -3
- data/app/assets/javascripts/rails_admin/ra.widgets.coffee +21 -6
- data/app/assets/javascripts/rails_admin/rails_admin.js +2 -3
- data/app/assets/stylesheets/rails_admin/base/theming.scss +6 -7
- data/app/assets/stylesheets/rails_admin/custom/mixins.scss +3 -4
- data/app/assets/stylesheets/rails_admin/custom/theming.scss +4 -4
- data/app/assets/stylesheets/rails_admin/custom/variables.scss +4 -4
- data/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +3 -3
- data/app/assets/stylesheets/rails_admin/themes/default/mixins.scss +2 -2
- data/app/assets/stylesheets/rails_admin/themes/default/theming.scss +3 -3
- data/app/assets/stylesheets/rails_admin/themes/default/variables.scss +3 -3
- data/app/controllers/rails_admin/application_controller.rb +0 -2
- data/app/controllers/rails_admin/main_controller.rb +6 -5
- data/app/helpers/rails_admin/application_helper.rb +3 -3
- data/app/helpers/rails_admin/main_helper.rb +45 -0
- data/app/views/layouts/rails_admin/application.html.haml +2 -2
- data/app/views/layouts/rails_admin/pjax.html.haml +2 -2
- data/app/views/rails_admin/main/_form_datetime.html.haml +4 -1
- data/app/views/rails_admin/main/_form_filtering_multiselect.html.haml +1 -0
- data/app/views/rails_admin/main/_submit_buttons.html.haml +1 -1
- data/app/views/rails_admin/main/export.html.haml +13 -13
- data/app/views/rails_admin/main/index.html.haml +20 -64
- data/config/locales/rails_admin.en.yml +0 -1
- data/lib/generators/rails_admin/templates/initializer.erb +3 -0
- data/lib/rails_admin.rb +2 -1
- data/lib/rails_admin/abstract_model.rb +14 -16
- data/lib/rails_admin/adapters/active_record.rb +17 -8
- data/lib/rails_admin/adapters/active_record/association.rb +5 -0
- data/lib/rails_admin/adapters/mongoid.rb +7 -12
- data/lib/rails_admin/adapters/mongoid/association.rb +5 -0
- data/lib/rails_admin/config/actions/export.rb +1 -1
- data/lib/rails_admin/config/fields.rb +1 -0
- data/lib/rails_admin/config/fields/association.rb +5 -0
- data/lib/rails_admin/config/fields/base.rb +4 -0
- data/lib/rails_admin/config/fields/factories/paperclip.rb +1 -1
- data/lib/rails_admin/config/fields/factories/refile.rb +25 -0
- data/lib/rails_admin/config/fields/types/active_record_enum.rb +5 -5
- data/lib/rails_admin/config/fields/types/all.rb +1 -0
- data/lib/rails_admin/config/fields/types/bson_object_id.rb +16 -2
- data/lib/rails_admin/config/fields/types/date.rb +19 -8
- data/lib/rails_admin/config/fields/types/datetime.rb +33 -117
- data/lib/rails_admin/config/fields/types/json.rb +5 -2
- data/lib/rails_admin/config/fields/types/refile.rb +27 -0
- data/lib/rails_admin/config/fields/types/serialized.rb +5 -2
- data/lib/rails_admin/config/fields/types/time.rb +6 -18
- data/lib/rails_admin/config/has_fields.rb +2 -2
- data/lib/rails_admin/config/lazy_model.rb +2 -2
- data/lib/rails_admin/config/proxyable/proxy.rb +2 -4
- data/lib/rails_admin/extensions/pundit.rb +3 -0
- data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +63 -0
- data/lib/rails_admin/support/datetime.rb +99 -0
- data/lib/rails_admin/support/hash_helper.rb +28 -0
- data/lib/rails_admin/support/i18n.rb +41 -0
- data/lib/rails_admin/version.rb +2 -2
- data/vendor/assets/javascripts/rails_admin/bootstrap-datetimepicker.js +2444 -0
- data/vendor/assets/javascripts/rails_admin/moment-with-locales.js +9977 -0
- data/vendor/assets/stylesheets/rails_admin/_bootstrap-datetimepicker.scss +343 -0
- data/vendor/assets/stylesheets/rails_admin/bootstrap-datetimepicker-build.scss +16 -0
- metadata +14 -9
- data/app/assets/javascripts/rails_admin/jquery.ui.timepicker.js +0 -1437
- data/app/assets/javascripts/rails_admin/ra.datetimepicker.js +0 -83
- data/app/assets/stylesheets/rails_admin/jquery.ui.timepicker.scss +0 -68
- data/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss +0 -45
- data/lib/rails_admin/i18n_support.rb +0 -39
- data/lib/rails_admin/support/core_extensions.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e491a0735ca200d0e74ad5dcb6bd299919da52b
|
4
|
+
data.tar.gz: 5a96d44742b0029c1d7554c532e7fa6ae6ed6853
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51af7b94bb6eb226489fdd111ba81bd17a16f32910c44c97876b427396d48c8b972c7b3ea288f3d850157c12bb1fa628351b878e6e2d1bcb1683ec6d402d7349
|
7
|
+
data.tar.gz: 99bedb21db9884f4f58c0ed3069e15961aad70209d75e1cd8dcbff99b6e5fa39a3ca02f90eb82593f0b8d44e9cccf2b2cd15ccefec1bcd4402b999acba041916
|
data/Gemfile
CHANGED
@@ -7,6 +7,7 @@ group :mongoid do
|
|
7
7
|
gem 'mongoid', '~> 4.0.0'
|
8
8
|
gem 'mongoid-paperclip', '>= 0.0.8', require: 'mongoid_paperclip'
|
9
9
|
gem 'carrierwave-mongoid', '>= 0.6.3', require: 'carrierwave/mongoid'
|
10
|
+
gem 'refile-mongoid', '>= 0.0.1', platforms: [:ruby_21, :ruby_22]
|
10
11
|
end
|
11
12
|
|
12
13
|
group :active_record do
|
@@ -34,11 +35,11 @@ end
|
|
34
35
|
|
35
36
|
group :test do
|
36
37
|
gem 'cancan', '>= 1.6'
|
37
|
-
gem 'cancancan', '~> 1.
|
38
|
+
gem 'cancancan', '~> 1.12.0'
|
38
39
|
gem 'capybara', '>= 2.1'
|
39
40
|
gem 'carrierwave', '>= 0.8'
|
40
41
|
gem 'coveralls'
|
41
|
-
gem 'database_cleaner', ['>= 1.2', '!= 1.4.0']
|
42
|
+
gem 'database_cleaner', ['>= 1.2', '!= 1.4.0', '!= 1.5.0']
|
42
43
|
gem 'dragonfly', '~> 1.0'
|
43
44
|
gem 'factory_girl', '>= 4.2'
|
44
45
|
gem 'generator_spec', '>= 0.8'
|
@@ -46,11 +47,21 @@ group :test do
|
|
46
47
|
gem 'mini_magick', '>= 3.4'
|
47
48
|
gem 'paperclip', ['>= 3.4', '!= 4.3.0']
|
48
49
|
gem 'poltergeist', '~> 1.5'
|
50
|
+
gem 'pundit'
|
49
51
|
gem 'rack-cache', require: 'rack/cache'
|
50
52
|
gem 'rspec-rails', '>= 2.14'
|
51
53
|
gem 'rubocop', '~> 0.31.0'
|
52
54
|
gem 'simplecov', '>= 0.9', require: false
|
53
55
|
gem 'timecop', '>= 0.5'
|
56
|
+
|
57
|
+
platforms :ruby_19 do
|
58
|
+
gem 'tins', '~> 1.6.0'
|
59
|
+
end
|
60
|
+
|
61
|
+
platforms :ruby_21, :ruby_22 do
|
62
|
+
gem 'refile', '~> 0.5', require: 'refile/rails'
|
63
|
+
gem 'refile-mini_magick', '>= 0.1.0'
|
64
|
+
end
|
54
65
|
end
|
55
66
|
|
56
67
|
gemspec
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ RailsAdmin is a Rails engine that provides an easy-to-use interface for managing
|
|
23
23
|
* Search and filtering
|
24
24
|
* Export data to CSV/JSON/XML
|
25
25
|
* Authentication (via [Devise](https://github.com/plataformatec/devise) or other)
|
26
|
-
* Authorization (via [
|
26
|
+
* Authorization (via [CanCanCan](https://github.com/CanCanCommunity/cancancan) or [Pundit](https://github.com/elabs/pundit))
|
27
27
|
* User action history (via [PaperTrail](https://github.com/airblade/paper_trail))
|
28
28
|
* Supported ORMs
|
29
29
|
* ActiveRecord
|
@@ -44,7 +44,7 @@ In `config/initializers/rails_admin`:
|
|
44
44
|
|
45
45
|
[Details](https://github.com/sferik/rails_admin/wiki/Base-configuration)
|
46
46
|
|
47
|
-
To begin with, you may be interested in setting up [Devise](https://github.com/sferik/rails_admin/wiki/Devise), [
|
47
|
+
To begin with, you may be interested in setting up [Devise](https://github.com/sferik/rails_admin/wiki/Devise), [CanCanCan](https://github.com/sferik/rails_admin/wiki/Cancancan) or [Papertrail](https://github.com/sferik/rails_admin/wiki/Papertrail)!
|
48
48
|
|
49
49
|
### Per model
|
50
50
|
```ruby
|
@@ -3,17 +3,20 @@
|
|
3
3
|
var filters;
|
4
4
|
|
5
5
|
$.filters = filters = {
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
var value_name
|
6
|
+
append: function(options) {
|
7
|
+
options = options || {};
|
8
|
+
var field_label = options['label'];
|
9
|
+
var field_name = options['name'];
|
10
|
+
var field_type = options['type'];
|
11
|
+
var field_value = options['value'];
|
12
|
+
var field_operator = options['operator'];
|
13
|
+
var select_options = options['select_options'];
|
14
|
+
var index = options['index'];
|
15
|
+
var value_name = 'f[' + field_name + '][' + index + '][v]';
|
16
16
|
var operator_name = 'f[' + field_name + '][' + index + '][o]';
|
17
|
+
var control = null;
|
18
|
+
var additional_control = null;
|
19
|
+
|
17
20
|
switch(field_type) {
|
18
21
|
case 'boolean':
|
19
22
|
var control = '<select class="input-sm form-control" name="' + value_name + '">' +
|
@@ -26,9 +29,13 @@
|
|
26
29
|
'</select>';
|
27
30
|
break;
|
28
31
|
case 'date':
|
32
|
+
additional_control =
|
33
|
+
'<input size="20" class="date additional-fieldset default input-sm form-control" style="display:' + ((!field_operator || field_operator == "default") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[0] || '') + '" /> ' +
|
34
|
+
'<input size="20" placeholder="-∞" class="date additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[1] || '') + '" /> ' +
|
35
|
+
'<input size="20" placeholder="∞" class="date additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[2] || '') + '" />';
|
29
36
|
case 'datetime':
|
30
37
|
case 'timestamp':
|
31
|
-
|
38
|
+
control = control || '<select class="switch-additionnal-fieldsets input-sm form-control" name="' + operator_name + '">' +
|
32
39
|
'<option ' + (field_operator == "default" ? 'selected="selected"' : '') + ' data-additional-fieldset="default" value="default">' + RailsAdmin.I18n.t("date") + '</option>' +
|
33
40
|
'<option ' + (field_operator == "between" ? 'selected="selected"' : '') + ' data-additional-fieldset="between" value="between">' + RailsAdmin.I18n.t("between_and_") + '</option>' +
|
34
41
|
'<option ' + (field_operator == "today" ? 'selected="selected"' : '') + ' value="today">' + RailsAdmin.I18n.t("today") + '</option>' +
|
@@ -39,29 +46,29 @@
|
|
39
46
|
'<option ' + (field_operator == "_not_null" ? 'selected="selected"' : '') + ' value="_not_null">' + RailsAdmin.I18n.t("is_present") + '</option>' +
|
40
47
|
'<option ' + (field_operator == "_null" ? 'selected="selected"' : '') + ' value="_null" >' + RailsAdmin.I18n.t("is_blank") + '</option>' +
|
41
48
|
'</select>'
|
42
|
-
|
43
|
-
'<input class="
|
44
|
-
'<input placeholder="-∞" class="
|
45
|
-
'<input placeholder="∞" class="
|
49
|
+
additional_control = additional_control ||
|
50
|
+
'<input size="25" class="datetime additional-fieldset default input-sm form-control" style="display:' + ((!field_operator || field_operator == "default") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[0] || '') + '" /> ' +
|
51
|
+
'<input size="25" placeholder="-∞" class="datetime additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[1] || '') + '" /> ' +
|
52
|
+
'<input size="25" placeholder="∞" class="datetime additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="text" name="' + value_name + '[]" value="' + (field_value[2] || '') + '" />';
|
46
53
|
break;
|
47
54
|
case 'enum':
|
48
55
|
var multiple_values = ((field_value instanceof Array) ? true : false)
|
49
|
-
|
56
|
+
control = '<select style="display:' + (multiple_values ? 'none' : 'inline-block') + '" ' + (multiple_values ? '' : 'name="' + value_name + '"') + ' data-name="' + value_name + '" class="select-single input-sm form-control">' +
|
50
57
|
'<option value="_discard">...</option>' +
|
51
58
|
'<option ' + (field_value == "_present" ? 'selected="selected"' : '') + ' value="_present">' + RailsAdmin.I18n.t("is_present") + '</option>' +
|
52
59
|
'<option ' + (field_value == "_blank" ? 'selected="selected"' : '') + ' value="_blank">' + RailsAdmin.I18n.t("is_blank") + '</option>' +
|
53
60
|
'<option disabled="disabled">---------</option>' +
|
54
|
-
|
61
|
+
select_options +
|
55
62
|
'</select>' +
|
56
63
|
'<select multiple="multiple" style="display:' + (multiple_values ? 'inline-block' : 'none') + '" ' + (multiple_values ? 'name="' + value_name + '[]"' : '') + ' data-name="' + value_name + '[]" class="select-multiple input-sm form-control">' +
|
57
|
-
|
64
|
+
select_options +
|
58
65
|
'</select> ' +
|
59
66
|
'<a href="#" class="switch-select"><i class="icon-' + (multiple_values ? 'minus' : 'plus') + '"></i></a>';
|
60
67
|
break;
|
61
68
|
case 'string':
|
62
69
|
case 'text':
|
63
70
|
case 'belongs_to_association':
|
64
|
-
|
71
|
+
control = '<select class="switch-additionnal-fieldsets input-sm form-control" value="' + field_operator + '" name="' + operator_name + '">' +
|
65
72
|
'<option data-additional-fieldset="additional-fieldset"' + (field_operator == "like" ? 'selected="selected"' : '') + ' value="like">' + RailsAdmin.I18n.t("contains") + '</option>' +
|
66
73
|
'<option data-additional-fieldset="additional-fieldset"' + (field_operator == "is" ? 'selected="selected"' : '') + ' value="is">' + RailsAdmin.I18n.t("is_exactly") + '</option>' +
|
67
74
|
'<option data-additional-fieldset="additional-fieldset"' + (field_operator == "starts_with" ? 'selected="selected"' : '') + ' value="starts_with">' + RailsAdmin.I18n.t("starts_with") + '</option>' +
|
@@ -70,50 +77,57 @@
|
|
70
77
|
'<option ' + (field_operator == "_not_null" ? 'selected="selected"' : '') + ' value="_not_null">' + RailsAdmin.I18n.t("is_present") + '</option>' +
|
71
78
|
'<option ' + (field_operator == "_null" ? 'selected="selected"' : '') + ' value="_null">' + RailsAdmin.I18n.t("is_blank") + '</option>' +
|
72
79
|
'</select>'
|
73
|
-
|
80
|
+
additional_control = '<input class="additional-fieldset input-sm form-control" style="display:' + (field_operator == "_blank" || field_operator == "_present" ? 'none' : 'inline-block') + ';" type="text" name="' + value_name + '" value="' + field_value + '" /> ';
|
74
81
|
break;
|
75
82
|
case 'integer':
|
76
83
|
case 'decimal':
|
77
84
|
case 'float':
|
78
|
-
|
85
|
+
control = '<select class="switch-additionnal-fieldsets input-sm form-control" name="' + operator_name + '">' +
|
79
86
|
'<option ' + (field_operator == "default" ? 'selected="selected"' : '') + ' data-additional-fieldset="default" value="default">' + RailsAdmin.I18n.t("number") + '</option>' +
|
80
87
|
'<option ' + (field_operator == "between" ? 'selected="selected"' : '') + ' data-additional-fieldset="between" value="between">' + RailsAdmin.I18n.t("between_and_") + '</option>' +
|
81
88
|
'<option disabled="disabled">---------</option>' +
|
82
89
|
'<option ' + (field_operator == "_not_null" ? 'selected="selected"' : '') + ' value="_not_null">' + RailsAdmin.I18n.t("is_present") +'</option>' +
|
83
90
|
'<option ' + (field_operator == "_null" ? 'selected="selected"' : '') + ' value="_null" >' + RailsAdmin.I18n.t("is_blank") + '</option>' +
|
84
91
|
'</select>'
|
85
|
-
|
92
|
+
additional_control =
|
86
93
|
'<input class="additional-fieldset default input-sm form-control" style="display:' + ((!field_operator || field_operator == "default") ? 'inline-block' : 'none') + ';" type="' + field_type + '" name="' + value_name + '[]" value="' + (field_value[0] || '') + '" /> ' +
|
87
94
|
'<input placeholder="-∞" class="additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="' + field_type + '" name="' + value_name + '[]" value="' + (field_value[1] || '') + '" /> ' +
|
88
95
|
'<input placeholder="∞" class="additional-fieldset between input-sm form-control" style="display:' + ((field_operator == "between") ? 'inline-block' : 'none') + ';" type="' + field_type + '" name="' + value_name + '[]" value="' + (field_value[2] || '') + '" />';
|
89
96
|
break;
|
90
97
|
default:
|
91
|
-
|
98
|
+
control = '<input type="text" class="input-sm form-control" name="' + value_name + '" value="' + field_value + '"/> ';
|
92
99
|
break;
|
93
100
|
}
|
94
101
|
|
95
|
-
var content = '<p
|
96
|
-
'
|
97
|
-
|
98
|
-
(additional_control || '')
|
99
|
-
|
100
|
-
$('#filters_box').append(content);
|
101
|
-
|
102
|
+
var $content = $('<p>')
|
103
|
+
.addClass('filter form-search')
|
104
|
+
.append('<span class="label label-info form-label"><a href="#delete" class="delete"><i class="fa fa-trash-o fa-fw icon-white"></i></a> ' + field_label + '</span>')
|
105
|
+
.append(' ' + control + ' ' + (additional_control || ''));
|
106
|
+
|
107
|
+
$('#filters_box').append($content);
|
108
|
+
|
109
|
+
$content.find('.date, .datetime').datetimepicker({
|
110
|
+
locale: RailsAdmin.I18n.locale,
|
111
|
+
showTodayButton: true,
|
112
|
+
format: options['datetimepicker_format']
|
113
|
+
});
|
114
|
+
|
102
115
|
$("hr.filters_box:hidden").show('slow');
|
103
116
|
}
|
104
117
|
}
|
105
118
|
|
106
119
|
$(document).on('click', "#filters a", function(e) {
|
107
120
|
e.preventDefault();
|
108
|
-
$.filters.append(
|
109
|
-
$(this).data('field-label'),
|
110
|
-
$(this).data('field-name'),
|
111
|
-
$(this).data('field-type'),
|
112
|
-
$(this).data('field-value'),
|
113
|
-
$(this).data('field-operator'),
|
114
|
-
$(this).data('field-options'),
|
115
|
-
$.now().toString().slice(6,11)
|
116
|
-
|
121
|
+
$.filters.append({
|
122
|
+
label: $(this).data('field-label'),
|
123
|
+
name: $(this).data('field-name'),
|
124
|
+
type: $(this).data('field-type'),
|
125
|
+
value: $(this).data('field-value'),
|
126
|
+
operator: $(this).data('field-operator'),
|
127
|
+
select_options: $(this).data('field-options'),
|
128
|
+
index: $.now().toString().slice(6,11),
|
129
|
+
datetimepicker_format: $(this).data('field-datetimepicker-format')
|
130
|
+
});
|
117
131
|
});
|
118
132
|
|
119
133
|
$(document).on('click', "#filters_box .delete", function(e) {
|
@@ -17,6 +17,7 @@
|
|
17
17
|
return { query: query };
|
18
18
|
},
|
19
19
|
sortable: false,
|
20
|
+
removable: true,
|
20
21
|
regional: {
|
21
22
|
up: "Up",
|
22
23
|
down: "Down",
|
@@ -68,20 +69,23 @@
|
|
68
69
|
this.collection = $('<select multiple="multiple"></select>');
|
69
70
|
|
70
71
|
this.collection.addClass("form-control ra-multiselect-collection");
|
71
|
-
|
72
|
+
|
72
73
|
this.addAll = $('<a href="#" class="ra-multiselect-item-add-all"><span class="ui-icon ui-icon-circle-triangle-e"></span>' + this.options.regional.chooseAll + '</a>');
|
73
|
-
|
74
|
+
|
74
75
|
this.columns.left.html(this.collection)
|
75
76
|
.append(this.addAll);
|
76
|
-
|
77
|
+
|
77
78
|
this.collection.wrap('<div class="wrapper"/>');
|
78
|
-
|
79
|
-
|
79
|
+
|
80
|
+
|
80
81
|
this.add = $('<a href="#" class="ui-icon ui-icon-circle-triangle-e ra-multiselect-item-add">' + this.options.regional.add + '</a>');
|
82
|
+
this.columns.center.append(this.add);
|
81
83
|
|
82
|
-
|
84
|
+
if (this.options.removable) {
|
85
|
+
this.remove = $('<a href="#" class="ui-icon ui-icon-circle-triangle-w ra-multiselect-item-remove">' + this.options.regional.remove + '</a>');
|
86
|
+
this.columns.center.append(this.remove);
|
87
|
+
}
|
83
88
|
|
84
|
-
this.columns.center.append(this.add).append(this.remove)
|
85
89
|
if (this.options.sortable) {
|
86
90
|
this.up = $('<a href="#" class="ui-icon ui-icon-circle-triangle-n ra-multiselect-item-up">' + this.options.regional.up + '</a>');
|
87
91
|
this.down = $('<a href="#" class="ui-icon ui-icon-circle-triangle-s ra-multiselect-item-down">' + this.options.regional.down + '</a>');
|
@@ -89,14 +93,14 @@
|
|
89
93
|
}
|
90
94
|
|
91
95
|
this.selection = $('<select class="form-control ra-multiselect-selection" multiple="multiple"></select>');
|
92
|
-
|
93
|
-
|
96
|
+
this.columns.right.append(this.selection);
|
97
|
+
|
94
98
|
|
95
|
-
|
99
|
+
if (this.options.removable) {
|
100
|
+
this.removeAll = $('<a href="#" class="ra-multiselect-item-remove-all"><span class="ui-icon ui-icon-circle-triangle-w"></span>' + this.options.regional.clearAll + '</a>');
|
101
|
+
this.columns.right.append(this.removeAll);
|
102
|
+
}
|
96
103
|
|
97
|
-
this.columns.right.append(this.selection)
|
98
|
-
.append(this.removeAll);
|
99
|
-
|
100
104
|
this.selection.wrap('<div class="wrapper"/>');
|
101
105
|
|
102
106
|
this.element.css({display: "none"});
|
@@ -122,24 +126,26 @@
|
|
122
126
|
/* Add to selection */
|
123
127
|
this.add.click(function(e){
|
124
128
|
widget._select($(':selected', widget.collection));
|
125
|
-
|
126
|
-
e.preventDefault();
|
127
|
-
widget.selection.trigger('change');
|
128
|
-
});
|
129
129
|
|
130
|
-
/* Remove all from selection */
|
131
|
-
this.removeAll.click(function(e){
|
132
|
-
widget._deSelect($('option', widget.selection));
|
133
130
|
e.preventDefault();
|
134
131
|
widget.selection.trigger('change');
|
135
132
|
});
|
136
133
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
134
|
+
if (this.options.removable) {
|
135
|
+
/* Remove all from selection */
|
136
|
+
this.removeAll.click(function(e){
|
137
|
+
widget._deSelect($('option', widget.selection));
|
138
|
+
e.preventDefault();
|
139
|
+
widget.selection.trigger('change');
|
140
|
+
});
|
141
|
+
|
142
|
+
/* Remove from selection */
|
143
|
+
this.remove.click(function(e){
|
144
|
+
widget._deSelect($(':selected', widget.selection));
|
145
|
+
e.preventDefault();
|
146
|
+
widget.selection.trigger('change');
|
147
|
+
});
|
148
|
+
}
|
143
149
|
|
144
150
|
var timeout = null;
|
145
151
|
if(this.options.sortable) {
|
@@ -180,7 +186,7 @@
|
|
180
186
|
widget.collection.html('');
|
181
187
|
for (i in filtered) {
|
182
188
|
widget.collection.append(
|
183
|
-
$('<option></option>').attr('value', matches[i].id).attr('title', matches[i].label).text(matches[i].label)
|
189
|
+
$('<option></option>').attr('value', matches[filtered[i]].id).attr('title', matches[filtered[i]].label).text(matches[filtered[i]].label)
|
184
190
|
);
|
185
191
|
}
|
186
192
|
} else {
|
@@ -189,15 +195,25 @@
|
|
189
195
|
});
|
190
196
|
},
|
191
197
|
|
198
|
+
/*
|
199
|
+
* Cache key is stored in the format `o_<option value>` to avoid JS
|
200
|
+
* engine coercing string keys to int keys, and thereby preserving
|
201
|
+
* the insertion order. The value for each key is in turn an object
|
202
|
+
* that stores the option tag's HTML text and the value. Example:
|
203
|
+
* cache = {
|
204
|
+
* 'o_271': { id: 271, value: 'CartItem #271'},
|
205
|
+
* 'o_270': { id: 270, value: 'CartItem #270'}
|
206
|
+
* }
|
207
|
+
*/
|
192
208
|
_buildCache: function(options) {
|
193
209
|
var widget = this;
|
194
210
|
|
195
211
|
this.element.find("option").each(function(i, option) {
|
196
212
|
if (option.selected) {
|
197
|
-
widget._cache[option.value] = option.innerHTML;
|
213
|
+
widget._cache['o_' + option.value] = {id: option.value, value: option.innerHTML};
|
198
214
|
$(option).clone().appendTo(widget.selection).attr("selected", false).attr("title", $(option).text());
|
199
215
|
} else {
|
200
|
-
widget._cache[option.value] = option.innerHTML;
|
216
|
+
widget._cache['o_' + option.value] = {id: option.value, value: option.innerHTML};
|
201
217
|
$(option).clone().appendTo(widget.collection).attr("selected", false).attr("title", $(option).text());
|
202
218
|
}
|
203
219
|
});
|
@@ -220,7 +236,8 @@
|
|
220
236
|
if (!this.options.xhr) {
|
221
237
|
for (i in this._cache) {
|
222
238
|
if (this._cache.hasOwnProperty(i)) {
|
223
|
-
|
239
|
+
option = this._cache[i];
|
240
|
+
matches.push({id: option.id, label: option.value});
|
224
241
|
}
|
225
242
|
}
|
226
243
|
success.apply(this, [matches]);
|
@@ -246,8 +263,9 @@
|
|
246
263
|
query = new RegExp(query + '.*', 'i');
|
247
264
|
|
248
265
|
for (i in this._cache) {
|
249
|
-
if (this._cache.hasOwnProperty(i) && query.test(this._cache[i])) {
|
250
|
-
|
266
|
+
if (this._cache.hasOwnProperty(i) && query.test(this._cache[i]['value'])) {
|
267
|
+
option = this._cache[i];
|
268
|
+
matches.push({id: option.id, label: option.value});
|
251
269
|
}
|
252
270
|
}
|
253
271
|
|
@@ -1,6 +1,8 @@
|
|
1
|
-
|
1
|
+
@RailsAdmin ||= {}
|
2
2
|
@RailsAdmin.I18n = class Locale
|
3
|
-
@init: (@locale)->
|
3
|
+
@init: (@locale, @translations)->
|
4
|
+
moment.locale(@locale)
|
5
|
+
|
4
6
|
@t:(key) ->
|
5
7
|
humanize = key.charAt(0).toUpperCase() + key.replace(/_/g, " ").slice(1)
|
6
|
-
@
|
8
|
+
@translations[key] || humanize
|
@@ -20,10 +20,22 @@ $(document).on 'rails_admin.dom_ready', (e, content) ->
|
|
20
20
|
$(that).val(hex)
|
21
21
|
$(that).css('backgroundColor', '#' + hex)
|
22
22
|
|
23
|
-
# datetime
|
23
|
+
# datetime picker
|
24
|
+
$.fn.datetimepicker.defaults.icons =
|
25
|
+
time: 'fa fa-clock-o'
|
26
|
+
date: 'fa fa-calendar'
|
27
|
+
up: 'fa fa-chevron-up'
|
28
|
+
down: 'fa fa-chevron-down'
|
29
|
+
previous: 'fa fa-angle-double-left'
|
30
|
+
next: 'fa fa-angle-double-right'
|
31
|
+
today: 'fa fa-dot-circle-o'
|
32
|
+
clear: 'fa fa-trash'
|
33
|
+
close: 'fa fa-times'
|
24
34
|
|
25
35
|
content.find('[data-datetimepicker]').each ->
|
26
|
-
|
36
|
+
options = $(this).data('options')
|
37
|
+
$.extend(options, {locale: RailsAdmin.I18n.locale})
|
38
|
+
$(this).datetimepicker options
|
27
39
|
|
28
40
|
# enumeration
|
29
41
|
|
@@ -63,7 +75,7 @@ $(document).on 'rails_admin.dom_ready', (e, content) ->
|
|
63
75
|
content.find('[data-filteringmultiselect]').each ->
|
64
76
|
$(this).filteringMultiselect $(this).data('options')
|
65
77
|
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
66
|
-
$(this).
|
78
|
+
$(this).siblings('.btn').remove()
|
67
79
|
else
|
68
80
|
$(this).parents('.control-group').first().remoteForm()
|
69
81
|
|
@@ -72,7 +84,7 @@ $(document).on 'rails_admin.dom_ready', (e, content) ->
|
|
72
84
|
content.find('[data-filteringselect]').each ->
|
73
85
|
$(this).filteringSelect $(this).data('options')
|
74
86
|
if $(this).parents("#modal").length # hide link if we already are inside a dialog (endless issues on nested dialogs with JS)
|
75
|
-
$(this).
|
87
|
+
$(this).siblings('.btn').remove()
|
76
88
|
else
|
77
89
|
$(this).parents('.control-group').first().remoteForm()
|
78
90
|
|
@@ -151,9 +163,12 @@ $(document).on 'rails_admin.dom_ready', (e, content) ->
|
|
151
163
|
beforeSend: (xhr) ->
|
152
164
|
xhr.setRequestHeader("Accept", "application/json")
|
153
165
|
success: (data, status, xhr) ->
|
154
|
-
html = '<option></option>'
|
166
|
+
html = $('<option></option>')
|
155
167
|
$(data).each (i, el) ->
|
156
|
-
|
168
|
+
option = $('<option></option>')
|
169
|
+
option.attr('value', el.id)
|
170
|
+
option.text(el.label)
|
171
|
+
html = html.add(option)
|
157
172
|
object_select.html(html)
|
158
173
|
|
159
174
|
# ckeditor
|