slash_admin 1.3.1 → 1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -11
  3. data/app/assets/config/slash_admin_manifest.js +2 -2
  4. data/app/assets/javascripts/slash_admin/application.js +6 -5
  5. data/app/assets/stylesheets/slash_admin/application.scss +58 -59
  6. data/app/controllers/slash_admin/models_controller.rb +6 -2
  7. data/app/helpers/slash_admin/application_helper.rb +2 -0
  8. data/app/views/slash_admin/base/_translatable_fields.html.erb +4 -4
  9. data/app/views/slash_admin/custom_fields/_select.html.erb +9 -3
  10. data/app/views/slash_admin/custom_fields/_timezone.html.erb +4 -1
  11. data/app/views/slash_admin/fields/_belongs_to.html.erb +1 -1
  12. data/app/views/slash_admin/fields/_has_one.html.erb +1 -1
  13. data/app/views/slash_admin/fields/_nested_belongs_to.html.erb +1 -1
  14. data/app/views/slash_admin/security/sessions/new.html.erb +1 -1
  15. data/app/views/slash_admin/shared/_header.html.erb +2 -2
  16. data/app/views/slash_admin/shared/_menu.html.erb +2 -2
  17. data/lib/generators/slash_admin/install/install_generator.rb +2 -0
  18. data/lib/generators/slash_admin/install/templates/initializer.rb +6 -0
  19. data/lib/slash_admin.rb +16 -0
  20. data/lib/slash_admin/engine.rb +7 -1
  21. data/lib/slash_admin/version.rb +1 -1
  22. data/vendor/assets/javascripts/select2/i18n/en.js +3 -0
  23. data/vendor/assets/javascripts/select2/i18n/fr.js +3 -0
  24. data/vendor/assets/javascripts/{select2.min.js → select2/select2.min.js} +0 -0
  25. data/vendor/assets/stylesheets/{select2-bootstrap4.css → select2/select2-bootstrap4.css} +0 -0
  26. data/vendor/assets/stylesheets/{select2.min.css → select2/select2.min.css} +0 -0
  27. metadata +11 -9
  28. data/config/initializers/pagy.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47c492084c28af99b79339457415f1c9cabb8dfc933b5d768b4a456521118abe
4
- data.tar.gz: 3b499b584c19cae24461b73d64e239196f5dd2f52b18d22f9e529e456850ac87
3
+ metadata.gz: aa8f3a52be4da9f7ddc2f3a4888ed7affa7a49aeeeecca3b54b6413d92fad5f5
4
+ data.tar.gz: 10bda4bc75d87a697aedb1d5f8ee48d0f5203892aeebb9d7d985a2dc8a509897
5
5
  SHA512:
6
- metadata.gz: 7dbf6990a0a0f70213a37f6340721f0be1a8d2db55fb7820f54055170e741e01d5fd6a4d4c7fad043ef6667b816a47ec712bc232683c6b741c8eb9219562aece
7
- data.tar.gz: fe6fcdf161dcd72a63b69a155764cc7630cc235f24141676d2d987dd61bf25cc753d604b2d6d85907b960834679d2853fd36a1c96b30bc471dea14c57bcd97ca
6
+ metadata.gz: a057c62b96bc937e332365d5b1277e598f4839af757ca616000e5f06da51a1c043087ab4ed20e18b1071f1881c2639306c0c319a74d8ba5c7a9df2e152e229ff
7
+ data.tar.gz: 054aee793717a4df3bcb2aeccc26fea5e21286e7a1e2bd25d5a3e97b0be11b1962356f380bfa7e7a7342066f51a7001ba22cc10b54c43a912cc6fcb3e33fd8a7
data/README.md CHANGED
@@ -1,15 +1,14 @@
1
1
  <p align="center">
2
- <img width="250" src="https://i.imgur.com/Rok5Ocf.png" />
2
+ <img width="250" src="https://i.imgur.com/mm9gXtL.png" />
3
3
  </p>
4
4
 
5
5
  # SlashAdmin
6
6
 
7
7
  [![Gem Version](https://badge.fury.io/rb/slash_admin.svg)](https://badge.fury.io/rb/slash_admin)
8
- [![Code Climate](https://codeclimate.com/github/nicovak/slash_admin/badges/gpa.svg)](https://codeclimate.com/github/nicovak/slash_admin)
9
8
  [![CircleCI](https://circleci.com/gh/nicovak/slash_admin/tree/master.svg?style=svg&circle-token=6e9ebd7fef3ebc881c75a769b0970808024a2ae9)](https://circleci.com/gh/nicovak/slash_admin/tree/master)
10
9
 
11
- A modern and fully overridable admin, just the rails way.
12
- Embeded admin user and authentication system, devise is not needed.
10
+ A modern and fully customizable admin, just the rails way.
11
+ Embedded admin user and authentication system, devise is not needded.
13
12
 
14
13
  ❤️ [Demo repository](https://github.com/nicovak/slash_admin_demo)
15
14
  🚀 [Live running](https://slashadmin.herokuapp.com/admin)
@@ -21,7 +20,7 @@ Password
21
20
  `admin@admin`
22
21
 
23
22
  #### Motivation:
24
- - Provide to rails the admin it deserves without DSL or obscure logic.
23
+ - Provide to Ruby On Rails the admin it deserves without DSL or obscure logic.
25
24
  - Provide an easy to use and modern experience to final users.
26
25
 
27
26
  I tried to take the best from two greats existing gem:
@@ -34,37 +33,42 @@ Design inspired from the awesome metronic admin theme:
34
33
  #### Screenshots
35
34
 
36
35
  ##### Login
37
- ![Image of Login screen](https://i.imgur.com/MJerQSR.jpg)
36
+ ![Image of Login screen](https://i.imgur.com/ftwC0rF.png)
38
37
  ##### Dashboard
39
- ![Image of Dashboard](https://i.imgur.com/0g3wSjw.png)
38
+ ![Image of Dashboard](https://i.imgur.com/3JzkvoT.png)
40
39
  ##### List
41
- ![Image of List](https://i.imgur.com/s1egSS3.png)
40
+ ![Image of List](https://i.imgur.com/y6Vz6S1.png)
42
41
  ##### Edit / Create
43
- ![Image of Create / Edit](https://i.imgur.com/wf72pZz.png)
42
+ ![Image of Create / Edit](https://i.imgur.com/S2QqHWF.png)
44
43
 
45
44
  ### Installation
46
45
 
47
46
  Add this line to your application's Gemfile:
47
+
48
48
  ```ruby
49
49
  gem 'slash_admin'
50
50
  ```
51
51
 
52
- And then execute:
52
+ Then execute:
53
+
53
54
  ```bash
54
55
  $ bundle install
55
56
  ```
56
57
 
57
58
  Or install it yourself as:
59
+
58
60
  ```bash
59
61
  $ gem install slash_admin
60
62
  ```
61
63
 
62
64
  Gemfile
65
+
63
66
  ```
64
67
  gem 'carrierwave'
65
68
  ```
66
69
 
67
70
  Then:
71
+
68
72
  ```bash
69
73
  $ rails g slash_admin:install
70
74
  $ rails slash_admin:install:migrations
@@ -77,13 +81,36 @@ $ rails db:migrate
77
81
  Mime::Type.register "application/xls", :xls
78
82
  ```
79
83
 
84
+ If your apps uses Sprockets 4+, you'll need to add SlashAdmin assets to your `manifest.js` file. To do this, add these two lines to the file:
85
+
86
+ `app/assets/config/manifest.js`
87
+
88
+ ```
89
+ //= link administrate/application.css
90
+ //= link administrate/application.js
91
+ ```
92
+
93
+ `config/routes.rb`
94
+
80
95
  ```ruby
81
96
  Rails.application.routes.draw do
82
97
  mount SlashAdmin::Engine => "/"
83
98
  end
84
99
  ```
85
100
 
86
- Mounted as '/' but prefixed in the gem and in routes definition of models admin. See above.
101
+ Mounted as '/' but prefixed in the gem and in routes definition of models admin. See the full example above.
102
+
103
+ ```ruby
104
+ Rails.application.routes.draw do
105
+ mount SlashAdmin::Engine => "/"
106
+
107
+ namespace :slash_admin, path: "/admin" do
108
+ scope module: 'models' do
109
+ resources :pages # assume Page model
110
+ end
111
+ end
112
+ end
113
+ ```
87
114
 
88
115
  ### Important
89
116
 
@@ -1,3 +1,3 @@
1
1
  //= link_tree ../images
2
- //= link_directory ../javascripts/slash_admin .js
3
- //= link_directory ../stylesheets/slash_admin scss
2
+ //= link_tree ../javascripts
3
+ //= link_tree ../stylesheets
@@ -5,7 +5,9 @@
5
5
  //= require jquery_ujs
6
6
  //= require popper
7
7
  //= require bootstrap
8
- //= require select2.min
8
+ //= require select2/select2.min
9
+ //= require select2/i18n/fr
10
+ //= require select2/i18n/en
9
11
  //= require moment
10
12
  //= require moment/fr
11
13
  //= require bootstrap-material-datetimepicker
@@ -205,12 +207,12 @@ function init() {
205
207
 
206
208
 
207
209
  $(".select2-single, .select2-multiple").each (function() {
208
- let initialPlaceholder = $(this).attr('placeholder');
210
+ var initialPlaceholder = $(this).attr('data-placeholder') || I18n.t('slash_admin.view.select');
211
+
209
212
  $(this).select2({
210
213
  placeholder: initialPlaceholder,
211
214
  allowClear: true,
212
215
  theme: 'bootstrap4',
213
- debug: true,
214
216
  }).on("select2:unselecting", function (e) {
215
217
  $(this).data('state', 'unselected');
216
218
  }).on("select2:open", function (e) {
@@ -226,13 +228,12 @@ function init() {
226
228
  });
227
229
 
228
230
  $(".select2-model-multiple, .select2-model-single").each(function() {
229
- let initialPlaceholder = $(this).attr('data-placeholder') || I18n.t('slash_admin.view.select');
231
+ var initialPlaceholder = $(this).attr('data-placeholder') || I18n.t('slash_admin.view.select');
230
232
 
231
233
  $(this).select2({
232
234
  placeholder: initialPlaceholder,
233
235
  allowClear: true,
234
236
  theme: 'bootstrap4',
235
- debug: true,
236
237
  ajax: {
237
238
  url: Routes.slash_admin_remote_select_path({
238
239
  format: "json"
@@ -1,37 +1,21 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
- * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
- * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
- * files in this directory. Styles in this file should be added after the last require_* statement.
11
- * It is generally better to create a new file per style scope.
12
- *
13
- *= require animate
14
- *= require toastr
15
- *= require jquery.nestable
16
- *= require sweetalert
17
- *= require select2.min
18
- *= require select2-bootstrap4
19
- *= require bootstrap-datepicker.min
20
- *= require bootstrap-material-datetimepicker
21
- *= require jquery.tagsinput-revisited.min
22
- *= require jquery.minicolors
23
- *= require slash_admin/colors
24
- *= require slash_admin/alert
25
- *= require codemirror/codemirror
26
- *= require codemirror/theme/relax-seti
27
- *= require codemirror/lint/lint
28
- *= require_self
29
- *= require slash_admin/custom
30
- *= require_tree .
31
- */
32
-
33
- @import "./colors";
34
- @import "./alert";
1
+ @import "animate";
2
+ @import "toastr";
3
+ @import "jquery.nestable";
4
+ @import "sweetalert";
5
+ @import "select2/select2.min";
6
+ @import "select2/select2-bootstrap4";
7
+ @import "bootstrap-datepicker.min";
8
+ @import "bootstrap-material-datetimepicker";
9
+ @import "jquery.tagsinput-revisited.min";
10
+ @import "jquery.minicolors";
11
+ @import "slash_admin/colors";
12
+ @import "slash_admin/alert";
13
+ @import "slash_admin/custom";
14
+ @import "codemirror/codemirror";
15
+ @import "codemirror/theme/relax-seti";
16
+ @import "codemirror/lint/lint";
17
+ @import "colors";
18
+ @import "alert";
35
19
 
36
20
  $pagination-padding-y: 0.4rem !default;
37
21
  $pagination-border-width: 0 !default;
@@ -155,7 +139,8 @@ p[data-f-id="pbf"] {
155
139
  }
156
140
 
157
141
  .select2-container--bootstrap4 .select2-results__option--highlighted,
158
- .select2-container--bootstrap4 .select2-results__option--highlighted.select2-results__option[aria-selected=true] {
142
+ .select2-container--bootstrap4
143
+ .select2-results__option--highlighted.select2-results__option[aria-selected="true"] {
159
144
  background-color: $primary;
160
145
  color: white;
161
146
  }
@@ -178,20 +163,27 @@ p[data-f-id="pbf"] {
178
163
  background: $input;
179
164
  }
180
165
 
181
- .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
166
+ .select2-container--bootstrap4
167
+ .select2-selection--multiple
168
+ .select2-selection__choice {
182
169
  word-break: break-all;
183
170
  background: white;
184
171
  }
185
172
 
186
173
  .select2-container .select2-results__option--highlighted,
187
- .select2-container .select2-results__option--highlighted.select2-results__option[aria-selected=true],
188
- .select2-container--bootstrap4 .select2-dropdown .select2-results__option[aria-selected=true] {
174
+ .select2-container
175
+ .select2-results__option--highlighted.select2-results__option[aria-selected="true"],
176
+ .select2-container--bootstrap4
177
+ .select2-dropdown
178
+ .select2-results__option[aria-selected="true"] {
189
179
  background-color: $primary;
190
180
  color: white;
191
181
  }
192
182
 
193
- .select2-container--bootstrap4.select2-container--focus .select2-selection--multiple,
194
- .select2-container--bootstrap4.select2-container--focus .select2-selection--single {
183
+ .select2-container--bootstrap4.select2-container--focus
184
+ .select2-selection--multiple,
185
+ .select2-container--bootstrap4.select2-container--focus
186
+ .select2-selection--single {
195
187
  border: 1px solid $border;
196
188
  background: $input;
197
189
  }
@@ -211,7 +203,9 @@ p[data-f-id="pbf"] {
211
203
  background: none;
212
204
  }
213
205
 
214
- .select2-container--bootstrap4 .select2-search--dropdown .select2-search__field {
206
+ .select2-container--bootstrap4
207
+ .select2-search--dropdown
208
+ .select2-search__field {
215
209
  border-color: $border;
216
210
  }
217
211
 
@@ -397,18 +391,18 @@ p[data-f-id="pbf"] {
397
391
  position: relative;
398
392
  height: 80px;
399
393
  width: 100%;
400
- transition: all ease .6s;
394
+ transition: all ease 0.6s;
401
395
  }
402
396
 
403
397
  .image-overlay {
404
- transition: all ease .6s;
398
+ transition: all ease 0.6s;
405
399
  position: absolute;
406
400
  width: 100%;
407
401
  height: 100%;
408
- background: rgba($primary, .0);
402
+ background: rgba($primary, 0);
409
403
 
410
404
  .icon-zoom-image {
411
- transition: all ease .6s;
405
+ transition: all ease 0.6s;
412
406
  position: absolute;
413
407
  top: 50%;
414
408
  left: 50%;
@@ -418,7 +412,7 @@ p[data-f-id="pbf"] {
418
412
  }
419
413
 
420
414
  &:hover {
421
- background: rgba($primary, .4);
415
+ background: rgba($primary, 0.4);
422
416
 
423
417
  .icon-zoom-image {
424
418
  opacity: 1;
@@ -589,10 +583,6 @@ p[data-f-id="pbf"] {
589
583
  display: flex;
590
584
  align-items: center;
591
585
 
592
- &:hover {
593
- background: #f9fafc;
594
- }
595
-
596
586
  &.active {
597
587
  color: $textColorHover;
598
588
  }
@@ -869,9 +859,10 @@ p[data-f-id="pbf"] {
869
859
  display: none;
870
860
  padding: 9px 15px;
871
861
 
872
- tr, a {
862
+ tr,
863
+ a {
873
864
  color: $textColor;
874
- transition: all .6s ease;
865
+ transition: all 0.6s ease;
875
866
  cursor: pointer;
876
867
 
877
868
  &.active {
@@ -1051,7 +1042,7 @@ p[data-f-id="pbf"] {
1051
1042
  border-color: rgba(121, 133, 166, 0.1) !important;
1052
1043
  margin-top: 1rem;
1053
1044
  background: #fff;
1054
- font-size: .9em;
1045
+ font-size: 0.9em;
1055
1046
 
1056
1047
  .fit {
1057
1048
  white-space: nowrap;
@@ -1085,8 +1076,12 @@ p[data-f-id="pbf"] {
1085
1076
  margin-top: 0.5rem;
1086
1077
  }
1087
1078
 
1088
- .select2-container--bootstrap4 .select2-selection--single .select2-selection__choice,
1089
- .select2-container--bootstrap4 .select2-selection--multiple .select2-selection__choice {
1079
+ .select2-container--bootstrap4
1080
+ .select2-selection--single
1081
+ .select2-selection__choice,
1082
+ .select2-container--bootstrap4
1083
+ .select2-selection--multiple
1084
+ .select2-selection__choice {
1090
1085
  display: flex;
1091
1086
  clear: both;
1092
1087
  }
@@ -1350,7 +1345,9 @@ p[data-f-id="pbf"] {
1350
1345
  height: 45px;
1351
1346
  }
1352
1347
 
1353
- .cookies-eu, .cookies-eu-button-holder, .cookies-eu-content-holder {
1348
+ .cookies-eu,
1349
+ .cookies-eu-button-holder,
1350
+ .cookies-eu-content-holder {
1354
1351
  display: flex;
1355
1352
  line-height: normal;
1356
1353
  }
@@ -1397,7 +1394,7 @@ p[data-f-id="pbf"] {
1397
1394
  }
1398
1395
 
1399
1396
  label {
1400
- font-size: .85em;
1397
+ font-size: 0.85em;
1401
1398
  color: $textColor;
1402
1399
  text-transform: uppercase;
1403
1400
  margin-bottom: 0.25rem;
@@ -1411,7 +1408,9 @@ p[data-f-id="pbf"] {
1411
1408
  a {
1412
1409
  color: $textColor;
1413
1410
 
1414
- &:hover, &:focus, &:active {
1411
+ &:hover,
1412
+ &:focus,
1413
+ &:active {
1415
1414
  color: $primary;
1416
1415
  }
1417
1416
  }
@@ -1439,7 +1438,7 @@ p[data-f-id="pbf"] {
1439
1438
  }
1440
1439
 
1441
1440
  .sub-title {
1442
- font-size: .9em;
1441
+ font-size: 0.9em;
1443
1442
  color: $textColor;
1444
1443
  }
1445
1444
 
@@ -11,7 +11,7 @@ module SlashAdmin
11
11
  before_action :handle_default_params
12
12
  before_action :handle_assocations
13
13
 
14
- helper_method :list_params, :export_params, :create_params, :update_params, :show_params, :nested_params, :should_add_translatable?, :translatable_params, :tooltips
14
+ helper_method :list_params, :export_params, :create_params, :update_params, :show_params, :nested_params, :should_add_translatable?, :translatable_params, :available_locales, :tooltips
15
15
 
16
16
  def index
17
17
  authorize! :index, @model_class
@@ -386,7 +386,7 @@ module SlashAdmin
386
386
  end
387
387
 
388
388
  def handle_default_translations
389
- I18n.available_locales.reject { |key| key == :root }.each do |locale|
389
+ available_locales.reject { |key| key == :root }.each do |locale|
390
390
  translation = @model.translations.find_by_locale locale.to_s
391
391
  if translation.nil?
392
392
  @model.translations.build locale: locale
@@ -402,6 +402,10 @@ module SlashAdmin
402
402
  params[:filters] ||= []
403
403
  end
404
404
 
405
+ def available_locales
406
+ SlashAdmin.configuration.available_locales
407
+ end
408
+
405
409
  def handle_assocations
406
410
  @belongs_to_fields = @model_class.reflect_on_all_associations(:belongs_to).map(&:name)
407
411
  @has_many_fields = @model_class.reflect_on_all_associations(:has_many).map(&:name)
@@ -2,6 +2,8 @@
2
2
 
3
3
  module SlashAdmin
4
4
  module ApplicationHelper
5
+ include Pagy::Frontend
6
+
5
7
  def page_title(content)
6
8
  content_for :page_title, content
7
9
  end
@@ -1,15 +1,15 @@
1
1
  <% if should_add_translatable? %>
2
2
  <h3 class="translations"><%= t('slash_admin.view.translations') %></h3>
3
3
  <nav class="nav nav-tabs" id="language-tabs" role="tablist">
4
- <% I18n.available_locales.each do |locale| %>
5
- <a class="nav-item nav-link <%= I18n.available_locales.first == locale ? 'active' : '' %>" id="nav-language-<%= locale %>" data-toggle="tab" href="#language-<%= locale %>" role="tab" aria-controls="language-<%= locale %>">
4
+ <% available_locales.each do |locale| %>
5
+ <a class="nav-item nav-link <%= available_locales.first == locale ? 'active' : '' %>" id="nav-language-<%= locale %>" data-toggle="tab" href="#language-<%= locale %>" role="tab" aria-controls="language-<%= locale %>">
6
6
  <img src='<%= image_path("slash_admin/#{locale.to_s}.png") %>' style="margin-right: 5px; max-width: 25px;">
7
7
  </a>
8
8
  <% end %>
9
9
  </nav>
10
10
  <div class="tab-content">
11
- <% I18n.available_locales.each do |locale| %>
12
- <div class="tab-pane fade <%= I18n.available_locales.first == locale ? 'show active' : '' %>" id="language-<%= locale %>" role="tabpanel" aria-labelledby="language-<%= locale %>-tab">
11
+ <% available_locales.each do |locale| %>
12
+ <div class="tab-pane fade <%= available_locales.first == locale ? 'show active' : '' %>" id="language-<%= locale %>" role="tabpanel" aria-labelledby="language-<%= locale %>-tab">
13
13
  <%= f.globalize_fields_for locale do |g| %>
14
14
  <% translatable_params.each do |a| %>
15
15
  <%= render 'slash_admin/fields/form_group', f: g, a: a %>
@@ -1,7 +1,13 @@
1
1
  <%= f.label a.keys.first, class: "form-control-label #{required?(f.object, a) ? 'required' : ''}" %>
2
2
  <%= render 'slash_admin/shared/tooltip', a: a %>
3
- <% if a[a.keys.first][:multiple].present? && a[a.keys.first][:multiple] == true %>
4
- <%= f.select(a.keys.first, a[a.keys.first][:choices], { include_blank: a[a.keys.first][:include_blank], required: required?(f.object, a) }, class: 'form-control select2-multiple', multiple: true) %>
3
+ <% if a[a.keys.first][:multiple].present? %>
4
+ <%= f.select(a.keys.first, a[a.keys.first][:choices],
5
+ { include_blank: a[a.keys.first][:include_blank], required: required?(f.object, a) },
6
+ 'data-placeholder': t('slash_admin.view.select_model', model_name: @model_class.human_attribute_name(a.keys.first).singularize.downcase),
7
+ class: 'form-control select2-multiple', multiple: true) %>
5
8
  <% else %>
6
- <%= f.select(a.keys.first, a[a.keys.first][:choices], { include_blank: a[a.keys.first][:include_blank], required: required?(f.object, a) }, class: 'form-control select2-single') %>
9
+ <%= f.select(a.keys.first, a[a.keys.first][:choices],
10
+ { include_blank: a[a.keys.first][:include_blank], required: required?(f.object, a) },
11
+ 'data-placeholder': t('slash_admin.view.select_model', model_name: @model_class.human_attribute_name(a.keys.first).singularize.downcase),
12
+ class: 'form-control select2-single') %>
7
13
  <% end %>
@@ -1,3 +1,6 @@
1
1
  <%= f.label a.keys.first, class: "form-control-label #{required?(f.object, a) ? 'required' : ''}" %>
2
2
  <%= render 'slash_admin/shared/tooltip', a: a %>
3
- <%= f.select(a.keys.first, ActiveSupport::TimeZone::MAPPING.values, { include_blank: true, required: required?(f.object, a) }, class: 'form-control select2-single') %>
3
+ <%= f.select(a.keys.first, ActiveSupport::TimeZone::MAPPING.values,
4
+ { include_blank: true, required: required?(f.object, a) },
5
+ 'data-placeholder': t('slash_admin.view.select_model', model_name: @model_class.human_attribute_name(a.keys.first).singularize.downcase),
6
+ class: 'form-control select2-single') %>
@@ -3,7 +3,7 @@
3
3
  <%= f.collection_select a.to_s + '_id',
4
4
  class_name_from_association(f.object, a).constantize.all.order(f.object.send(a).present? ? "CASE WHEN id = #{f.object.send(a).try(:id)} THEN 1 ELSE 0 END DESC" : "id DESC").limit(20), :id, object_label(class_name_from_association(f.object, a)),
5
5
  {
6
- prompt: "",
6
+ include_blank: true,
7
7
  },
8
8
  'data-placeholder': t('slash_admin.view.select_model', model_name: class_name_from_association(f.object, a).constantize.model_name.human.downcase),
9
9
  'data-model': class_name_from_association(f.object, a).constantize.model_name.to_s.underscore,
@@ -3,7 +3,7 @@
3
3
  <%= f.select a.to_s,
4
4
  class_name_from_association(f.object, a).constantize.all.order(f.object.send(a).present? ? "CASE WHEN id = #{f.object.send(a).try(:id)} THEN 1 ELSE 0 END DESC" : "id DESC").limit(20).collect { |assoc| [assoc.send(object_label(class_name_from_association(f.object, a))), assoc.id] },
5
5
  {
6
- prompt: "",
6
+ include_blank: true,
7
7
  },
8
8
  'data-placeholder': t('slash_admin.view.select_model', model_name: class_name_from_association(f.object, a).constantize.model_name.human.downcase),
9
9
  'data-model': class_name_from_association(f.object, a).constantize.model_name.to_s.underscore,
@@ -4,7 +4,7 @@
4
4
  <%= f.collection_select a.to_s + '_id',
5
5
  class_name_from_association.constantize.all.order(f.object.send(a).present? ? "CASE WHEN id = #{f.object.send(a).try(:id)} THEN 1 ELSE 0 END DESC" : "id DESC").limit(20), :id, object_label(a),
6
6
  {
7
- prompt: "",
7
+ include_blank: true,
8
8
  },
9
9
  'data-placeholder': t('slash_admin.view.select_model', model_name: class_name_from_association.constantize.model_name.human.downcase),
10
10
  'data-model': class_name_from_association.constantize.model_name.to_s.underscore,
@@ -27,7 +27,7 @@
27
27
  </div>
28
28
  </div>
29
29
  <div class="col-lg-6 col-md-4 d-none d-sm-none d-md-flex ">
30
- <div class="container-fluid container-fluid-devise bckg-login" align="center" style="background: url(https://source.unsplash.com/1920x1080/?nature) no-repeat; background-size: cover;">
30
+ <div class="container-fluid container-fluid-devise bckg-login" align="center" style="background: url(https://source.unsplash.com/collection/827743/960x1080) no-repeat; background-size: cover;">
31
31
  </div>
32
32
  </div>
33
33
  </div>
@@ -10,8 +10,8 @@
10
10
  <div class="navbar-nav mr-auto mt-2 mt-lg-0">
11
11
  </div>
12
12
  <ul class="nav right-nav-fix">
13
- <li class="nav-item dropdown">
14
- <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
13
+ <li class="nav-item">
14
+ <a class="nav-link">
15
15
  <% if current_admin.avatar.present? %>
16
16
  <img src="<%= current_admin.avatar.url %>" class="rounded-circle"/>
17
17
  <% else %>
@@ -74,8 +74,8 @@
74
74
  <script type="text/javascript">
75
75
  $(function() {
76
76
  $(".clickable-row").click(function() {
77
- let href = $(this).data("href");
78
- let blank = $(this).data("blank");
77
+ var href = $(this).data("href");
78
+ var blank = $(this).data("blank");
79
79
 
80
80
  if (blank === true) {
81
81
  window.open = href;
@@ -8,6 +8,8 @@ module SlashAdmin
8
8
  def install
9
9
  template "install.erb",
10
10
  "app/helpers/slash_admin/menu_helper.rb"
11
+ template "initializer.erb",
12
+ "config/initializers/slash_admin.rb"
11
13
  end
12
14
  end
13
15
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ SlashAdmin.configure do |config|
4
+ # Do some config
5
+ # config.available_locales = I18n.available_locales
6
+ end
@@ -23,4 +23,20 @@ require "http_accept_language"
23
23
  require "batch_translation"
24
24
 
25
25
  module SlashAdmin
26
+ class << self
27
+ attr_accessor :configuration
28
+ end
29
+
30
+ def self.configure
31
+ self.configuration ||= Configuration.new
32
+ yield(configuration)
33
+ end
34
+
35
+ class Configuration
36
+ attr_accessor :available_locales
37
+
38
+ def initialize
39
+ @available_locales = I18n.available_locales
40
+ end
41
+ end
26
42
  end
@@ -1,9 +1,15 @@
1
+ require "pagy"
2
+ require "pagy/extras/bootstrap"
3
+ require "pagy/extras/i18n"
4
+ require "pagy/extras/array"
5
+
1
6
  module SlashAdmin
2
7
  class Engine < ::Rails::Engine
3
8
  isolate_namespace SlashAdmin
4
9
 
5
10
  initializer "slash_admin.assets.precompile" do |app|
6
- app.config.assets.precompile += %w[slash_admin/*]
11
+ app.config.assets.precompile += %w(slash_admin slash_admin_manifest.js)
12
+ app.config.assets.paths << Pagy.root.join("javascripts")
7
13
  end
8
14
  end
9
15
  end
@@ -1,3 +1,3 @@
1
1
  module SlashAdmin
2
- VERSION = "1.3.1"
2
+ VERSION = "1.4"
3
3
  end
@@ -0,0 +1,3 @@
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}();
@@ -0,0 +1,3 @@
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}();
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slash_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: '1.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - KOVACS Nicolas
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-07 00:00:00.000000000 Z
11
+ date: 2020-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -389,7 +389,6 @@ files:
389
389
  - app/views/slash_admin/shared/_new_form_buttons.html.erb
390
390
  - app/views/slash_admin/shared/_sub_header.html.erb
391
391
  - app/views/slash_admin/shared/_tooltip.html.erb
392
- - config/initializers/pagy.rb
393
392
  - config/initializers/validators.rb
394
393
  - config/locales/en.yml
395
394
  - config/locales/fr.yml
@@ -399,6 +398,7 @@ files:
399
398
  - lib/generators/slash_admin/controllers/controllers_generator.rb
400
399
  - lib/generators/slash_admin/controllers/templates/controllers.erb
401
400
  - lib/generators/slash_admin/install/install_generator.rb
401
+ - lib/generators/slash_admin/install/templates/initializer.rb
402
402
  - lib/generators/slash_admin/install/templates/install.erb
403
403
  - lib/generators/slash_admin/override_admin/override_admin_generator.rb
404
404
  - lib/generators/slash_admin/override_admin/templates/admin.erb
@@ -420,7 +420,9 @@ files:
420
420
  - vendor/assets/javascripts/codemirror/mode/javascript.js
421
421
  - vendor/assets/javascripts/jquery.nestable.js
422
422
  - vendor/assets/javascripts/jquery.tagsinput-revisited.min.js
423
- - vendor/assets/javascripts/select2.min.js
423
+ - vendor/assets/javascripts/select2/i18n/en.js
424
+ - vendor/assets/javascripts/select2/i18n/fr.js
425
+ - vendor/assets/javascripts/select2/select2.min.js
424
426
  - vendor/assets/javascripts/toastr.js
425
427
  - vendor/assets/stylesheets/animate.css
426
428
  - vendor/assets/stylesheets/bootstrap-datepicker.min.css
@@ -430,15 +432,15 @@ files:
430
432
  - vendor/assets/stylesheets/codemirror/theme/relax-seti.css
431
433
  - vendor/assets/stylesheets/jquery.nestable.css
432
434
  - vendor/assets/stylesheets/jquery.tagsinput-revisited.min.css
433
- - vendor/assets/stylesheets/select2-bootstrap4.css
434
- - vendor/assets/stylesheets/select2.min.css
435
+ - vendor/assets/stylesheets/select2/select2-bootstrap4.css
436
+ - vendor/assets/stylesheets/select2/select2.min.css
435
437
  - vendor/assets/stylesheets/sweetalert.css
436
438
  - vendor/assets/stylesheets/toastr.css
437
439
  homepage: https://github.com/nicovak/slash_admin
438
440
  licenses:
439
441
  - MIT
440
442
  metadata: {}
441
- post_install_message:
443
+ post_install_message:
442
444
  rdoc_options: []
443
445
  require_paths:
444
446
  - lib
@@ -454,7 +456,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
454
456
  version: '0'
455
457
  requirements: []
456
458
  rubygems_version: 3.1.2
457
- signing_key:
459
+ signing_key:
458
460
  specification_version: 4
459
461
  summary: A modern and overridable admin gem, just the rails way.
460
462
  test_files: []
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "pagy/extras/bootstrap"
4
- require "pagy/extras/i18n"
5
- require "pagy/extras/array"
6
- require "pagy/extras/searchkick"
7
-
8
- Rails.application.config.assets.paths << Pagy.root.join("javascripts")