slash_admin 0.1.0 → 1.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -12
  3. data/app/assets/images/slash_admin/favicon.png +0 -0
  4. data/app/assets/images/slash_admin/logo.png +0 -0
  5. data/app/assets/javascripts/slash_admin/application.js +33 -25
  6. data/app/assets/stylesheets/slash_admin/application.scss +271 -146
  7. data/app/assets/stylesheets/slash_admin/colors.scss +16 -13
  8. data/app/controllers/slash_admin/models_controller.rb +166 -32
  9. data/app/controllers/slash_admin/security/sessions_controller.rb +1 -1
  10. data/app/controllers/slash_admin/selectize_controller.rb +21 -1
  11. data/app/helpers/slash_admin/application_helper.rb +45 -4
  12. data/app/helpers/slash_admin/widgets_helper.rb +1 -0
  13. data/app/views/layouts/slash_admin/application.html.erb +1 -1
  14. data/app/views/slash_admin/base/_data_belongs_to.html.erb +14 -16
  15. data/app/views/slash_admin/base/_data_list.html.erb +118 -121
  16. data/app/views/slash_admin/base/_data_nestable.html.erb +2 -2
  17. data/app/views/slash_admin/base/_data_new.html.erb +4 -1
  18. data/app/views/slash_admin/base/_filters.html.erb +63 -55
  19. data/app/views/slash_admin/base/index.html.erb +3 -3
  20. data/app/views/slash_admin/custom_fields/_google_map.html.erb +14 -11
  21. data/app/views/slash_admin/custom_fields/_select.html.erb +5 -1
  22. data/app/views/slash_admin/custom_fields/_timezone.html.erb +2 -0
  23. data/app/views/slash_admin/dashboard/widgets/_statistic_progress_tile.html.erb +1 -1
  24. data/app/views/slash_admin/fields/_belongs_to.html.erb +2 -2
  25. data/app/views/slash_admin/fields/_carrierwave.html.erb +107 -10
  26. data/app/views/slash_admin/fields/_has_many.html.erb +2 -2
  27. data/app/views/slash_admin/fields/_has_one.html.erb +9 -24
  28. data/app/views/slash_admin/fields/_json.html.erb +1 -1
  29. data/app/views/slash_admin/fields/_jsonb.html.erb +14 -0
  30. data/app/views/slash_admin/{custom_fields → fields}/_nested_belongs_to.html.erb +11 -10
  31. data/app/views/slash_admin/fields/_nested_has_one.html.erb +23 -0
  32. data/app/views/slash_admin/security/sessions/new.html.erb +6 -3
  33. data/app/views/slash_admin/shared/_batch_actions.html.erb +1 -1
  34. data/app/views/slash_admin/shared/_header.html.erb +2 -3
  35. data/app/views/slash_admin/shared/_menu.html.erb +33 -30
  36. data/app/views/slash_admin/shared/_new_form_buttons.html.erb +2 -2
  37. data/config/initializers/validators.rb +4 -0
  38. data/config/locales/{slash_admin.en.yml → en.yml} +3 -0
  39. data/config/locales/{slash_admin.fr.yml → fr.yml} +4 -1
  40. data/lib/batch_translation.rb +1 -1
  41. data/lib/generators/slash_admin/override_admin/override_admin_generator.rb +1 -0
  42. data/lib/generators/slash_admin/override_session/templates/session.erb +2 -2
  43. data/lib/slash_admin.rb +1 -3
  44. data/lib/slash_admin/version.rb +1 -1
  45. data/vendor/assets/javascripts/bootstrap-datepicker.fr.min.js +1 -0
  46. data/vendor/assets/javascripts/bootstrap-datepicker.min.js +8 -0
  47. data/vendor/assets/stylesheets/bootstrap-datepicker.min.css +7 -0
  48. metadata +19 -69
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1f1eb8776c07ec77415ce20ceea1075b36554d5ddd7e3b8591206c0b562dbf2a
4
- data.tar.gz: fd7d4b221829064885b86a0c2e96588faa006648b41855386da5d3efd706a988
3
+ metadata.gz: 0c90c097781b6d4de18232be80a73c746c0a635306f09583518dc579fc080f7c
4
+ data.tar.gz: 3b557ba04b67537b1bff365b4ac7021b09952be5ba659f6f4172da94e70ab309
5
5
  SHA512:
6
- metadata.gz: 55167cf3a304061acb8b693ea52717d7dda264ee09bc4f90dc8438bed7decc3a0abf75a1881340069539a58736d504b0c684afade373d9ecf3aaf8398bb659e7
7
- data.tar.gz: 4db31680e5d862e6810eb46c0172e1e7d3b4b64f25c33911907524d71d44be751765fc82450e4a9551352d21da5f920e35117481c965a95e0bc35a0e03c2dda8
6
+ metadata.gz: cdf0e1651f829df415e7d0c176645df9556472198817eb1c2de67f423eae9b57bba1fde9674e0da1ea0fff930d615865811327fc03209959a84963b93af81e6d
7
+ data.tar.gz: 9239fa0a4b215c8b65bad862601d5e305a480851c3dd6223557c0c2c80fc5a4ffc5a80f985b154e3bd3ff788b8bdc0a9bf13ff9b551ac784d15caf0ace9ee3fd
data/README.md CHANGED
@@ -1,11 +1,25 @@
1
+ <p align="center">
2
+ <img width="250" src="https://i.imgur.com/Rok5Ocf.png" />
3
+ </p>
4
+
5
+ # SlashAdmin
6
+
7
+ [![Gem Version](https://badge.fury.io/rb/slash_admin.svg)](https://badge.fury.io/rb/slash_admin)
1
8
  [![Code Climate](https://codeclimate.com/github/nicovak/slash_admin/badges/gpa.svg)](https://codeclimate.com/github/nicovak/slash_admin)
2
9
  [![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)
3
10
 
4
- # [W.I.P] SlashAdmin
5
-
6
- A modern and overridable admin, just the rails way.
11
+ A modern and fully overridable admin, just the rails way.
7
12
  Embeded admin user and authentication system, devise is not needed.
8
13
 
14
+ ❤️ [Demo repository](https://github.com/nicovak/slash_admin_demo)
15
+ 🚀 [Live running](https://slashadmin.herokuapp.com/admin)
16
+
17
+ User
18
+ `admin`
19
+
20
+ Password
21
+ `admin@admin`
22
+
9
23
  #### Motivation:
10
24
  - Provide to rails the admin it deserves without DSL or obscure logic.
11
25
  - Provide an easy to use and modern experience to final users.
@@ -19,20 +33,25 @@ Design inspired from the awesome metronic admin theme:
19
33
 
20
34
  #### Screenshots
21
35
 
22
- ![Image of Login screen](http://i.imgur.com/HFQ9hfw.jpg)
23
- ![Image of List](http://i.imgur.com/p34HUU5.png)
24
- ![Image of Create / Edit](http://i.imgur.com/TzOx3i8.png)
36
+ ##### Login
37
+ ![Image of Login screen](https://i.imgur.com/MJerQSR.jpg)
38
+ ##### Dashboard
39
+ ![Image of Dashboard](https://i.imgur.com/0g3wSjw.png)
40
+ ##### List
41
+ ![Image of List](https://i.imgur.com/s1egSS3.png)
42
+ ##### Edit / Create
43
+ ![Image of Create / Edit](https://i.imgur.com/wf72pZz.png)
25
44
 
26
45
  ### Installation
27
- Add this line to your application's Gemfile:
28
46
 
47
+ Add this line to your application's Gemfile:
29
48
  ```ruby
30
49
  gem 'slash_admin'
31
50
  ```
32
51
 
33
52
  And then execute:
34
53
  ```bash
35
- $ bundle
54
+ $ bundle install
36
55
  ```
37
56
 
38
57
  Or install it yourself as:
@@ -47,12 +66,13 @@ gem 'carrierwave'
47
66
 
48
67
  Then:
49
68
  ```bash
50
- rails g slash_admin:install
51
- rails slash_admin:install:migrations
52
- rails db:migrate
69
+ $ rails g slash_admin:install
70
+ $ rails slash_admin:install:migrations
71
+ $ rails db:migrate
53
72
  ```
54
73
 
55
74
  `config/initializers/mime_types.rb`
75
+
56
76
  ```ruby
57
77
  Mime::Type.register "application/xls", :xls
58
78
  ```
@@ -89,7 +109,13 @@ SlashAdmin::Admin.create!(
89
109
  [Read the docs](https://github.com/nicovak/slash_admin/tree/master/docs/index.md)
90
110
 
91
111
  ## Contributing
92
- Coming soon.
112
+
113
+ Bug reports and pull requests are welcome on GitHub at https://github.com/nicovak/slash_admin. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
93
114
 
94
115
  ## License
116
+
95
117
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
118
+
119
+ ## Code of Conduct
120
+
121
+ Everyone interacting in the slash_admin project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/nicovak/slash_admin/tree/master/CODE_OF_CONDUCT.md).
@@ -13,7 +13,8 @@
13
13
  //= require Chart.min
14
14
  //= require highcharts
15
15
  //= require chartkick
16
- //= require bootstrap-datepicker
16
+ //= require bootstrap-datepicker.min
17
+ //= require bootstrap-datepicker.fr.min
17
18
  //= require sweetalert
18
19
  //= require cocoon
19
20
  //= require toastr
@@ -33,12 +34,12 @@ $(document).on("turbolinks:load", init);
33
34
  function init() {
34
35
  Turbolinks.clearCache();
35
36
 
36
- $('.page-sidebar a[href$="#"]').on('click', function(e) {
37
- e.preventDefault()
37
+ $('.page-sidebar a[href$="#"]').on("click", function(e) {
38
+ e.preventDefault();
38
39
  });
39
40
 
40
41
  $(".tags").tagsInput({
41
- placeholder: I18n.t('slash_admin.view.add_tag'),
42
+ placeholder: I18n.t("slash_admin.view.add_tag"),
42
43
  delimiter: [",", ";", " "]
43
44
  });
44
45
 
@@ -58,9 +59,11 @@ function init() {
58
59
 
59
60
  // Automatic hide alert
60
61
  window.setTimeout(function() {
61
- $(".alert").fadeTo(500, 0).slideUp(500, function() {
62
- $(this).remove();
63
- });
62
+ $(".alert")
63
+ .fadeTo(500, 0)
64
+ .slideUp(500, function() {
65
+ $(this).remove();
66
+ });
64
67
  }, 1500);
65
68
 
66
69
  // clearForm
@@ -98,7 +101,10 @@ function init() {
98
101
  });
99
102
 
100
103
  // MENU
101
- $(".sub-menu").has(".active").parent().addClass("active");
104
+ $(".sub-menu")
105
+ .has(".active")
106
+ .parent()
107
+ .addClass("active");
102
108
 
103
109
  // BULK ACTIONS
104
110
  $(".toggle-all").on("change", function() {
@@ -125,15 +131,16 @@ function init() {
125
131
 
126
132
  swal(
127
133
  {
128
- title: I18n.t('slash_admin.view.confirm'),
129
- text: I18n.t('slash_admin.view.no_back'),
134
+ title: I18n.t("slash_admin.view.confirm"),
135
+ text: I18n.t("slash_admin.view.no_back"),
130
136
  type: "warning",
131
137
  showCancelButton: true,
132
138
  confirmButtonClass: "btn-danger",
133
139
  cancelButtonClass: "btn-primary",
134
- confirmButtonText: I18n.t('slash_admin.view.yes_delete'),
135
- cancelButtonText: I18n.t('slash_admin.view.cancel'),
136
- closeOnConfirm: false
140
+ confirmButtonText: I18n.t("slash_admin.view.yes_delete"),
141
+ cancelButtonText: I18n.t("slash_admin.view.cancel"),
142
+ closeOnConfirm: false,
143
+ showLoaderOnConfirm: true
137
144
  },
138
145
  function() {
139
146
  $.ajax({
@@ -164,15 +171,16 @@ function init() {
164
171
  if (ids.length > 0) {
165
172
  swal(
166
173
  {
167
- title: I18n.t('slash_admin.view.confirm'),
174
+ title: I18n.t("slash_admin.view.confirm"),
168
175
  text: message,
169
176
  type: "warning",
170
177
  showCancelButton: true,
171
178
  confirmButtonClass: "btn-danger",
172
179
  cancelButtonClass: "btn-primary",
173
- confirmButtonText: I18n.t('slash_admin.view.yes_delete'),
174
- cancelButtonText: I18n.t('slash_admin.view.cancel'),
175
- closeOnConfirm: false
180
+ confirmButtonText: I18n.t("slash_admin.view.yes_delete"),
181
+ cancelButtonText: I18n.t("slash_admin.view.cancel"),
182
+ closeOnConfirm: false,
183
+ showLoaderOnConfirm: true
176
184
  },
177
185
  function() {
178
186
  $.ajax({
@@ -190,19 +198,19 @@ function init() {
190
198
  });
191
199
 
192
200
  $(".selectize-single").selectize({
201
+ plugins: ['remove_button'],
193
202
  allowEmptyOption: true
194
203
  });
195
204
 
196
205
  $(".selectize-multiple").selectize({
197
206
  allowEmptyOption: true,
198
207
  persist: false,
199
- plugins: {
200
- remove_button: {}
201
- }
208
+ plugins: ['remove_button']
202
209
  });
203
210
 
204
211
  $(".selectize-model-single").selectize({
205
212
  allowEmptyOption: true,
213
+ plugins: ['remove_button'],
206
214
  valueField: "id",
207
215
  labelField: "name",
208
216
  searchField: "name",
@@ -238,10 +246,8 @@ function init() {
238
246
 
239
247
  $(".selectize-model-multiple").selectize({
240
248
  allowEmptyOption: true,
249
+ plugins: ['remove_button'],
241
250
  persist: false,
242
- plugins: {
243
- remove_button: {}
244
- },
245
251
  valueField: "id",
246
252
  labelField: "name",
247
253
  searchField: "name",
@@ -277,7 +283,7 @@ function init() {
277
283
 
278
284
  $(".bootstrap-datepicker").datepicker({
279
285
  language: I18n.currentLocale(),
280
- format: "YYYY-MM-DD"
286
+ format: "yyyy-mm-dd"
281
287
  });
282
288
 
283
289
  $(".bootstrap-material-date").bootstrapMaterialDatePicker({
@@ -315,7 +321,9 @@ function init() {
315
321
  var url = window.location.href.split("?")[0];
316
322
 
317
323
  var filtersParams = $("#filters").serialize();
318
- var paginationParams = $(".admin-pagination").first().serialize();
324
+ var paginationParams = $(".admin-pagination")
325
+ .first()
326
+ .serialize();
319
327
  var orderParams = $("#order").serialize();
320
328
 
321
329
  parameters = "";
@@ -10,13 +10,12 @@
10
10
  * files in this directory. Styles in this file should be added after the last require_* statement.
11
11
  * It is generally better to create a new file per style scope.
12
12
  *
13
- *= require font-awesome
14
13
  *= require animate
15
14
  *= require toastr
16
15
  *= require jquery.nestable
17
16
  *= require sweetalert
18
17
  *= require selectize
19
- *= require bootstrap-datepicker
18
+ *= require bootstrap-datepicker.min
20
19
  *= require bootstrap-material-datetimepicker
21
20
  *= require jquery.tagsinput-revisited.min
22
21
  *= require jquery.minicolors
@@ -30,25 +29,27 @@
30
29
  *= require_tree .
31
30
  */
32
31
 
33
- @import 'slash_admin/colors';
34
- @import 'slash_admin/alert';
32
+ @import "slash_admin/colors";
33
+ @import "slash_admin/alert";
35
34
 
36
- $pagination-padding-y: .4rem !default;
35
+ $pagination-padding-y: 0.4rem !default;
37
36
  $pagination-border-width: 0 !default;
38
- $border-radius: .15rem !default;
37
+ $border-radius: 0.15rem !default;
39
38
 
40
- @import 'bootstrap';
41
- @import 'font-awesome';
39
+ @import "bootstrap";
42
40
 
43
- @import 'https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.6.0/css/froala_editor.pkgd.min.css';
44
- @import 'https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.6.0/css/froala_style.min.css';
41
+ @import url("https://use.fontawesome.com/releases/v5.6.3/css/all.css");
45
42
 
46
- @import url('https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all');
47
- @import url('https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.css');
48
- @import url('https://fonts.googleapis.com/icon?family=Material+Icons');
43
+ @import url("https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.9.3/css/froala_editor.pkgd.min.css");
44
+ @import url("https://cdnjs.cloudflare.com/ajax/libs/froala-editor/2.9.3/css/froala_style.min.css");
45
+
46
+ @import url("https://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all");
47
+ @import url("https://cdnjs.cloudflare.com/ajax/libs/simple-line-icons/2.4.1/css/simple-line-icons.css");
48
+ @import url("https://fonts.googleapis.com/icon?family=Material+Icons");
49
49
 
50
50
  body {
51
- font-family: 'Open Sans', sans-serif;
51
+ font-family: "Open Sans", sans-serif;
52
+ transition: all ease 0.6s;
52
53
  }
53
54
 
54
55
  h1,
@@ -61,10 +62,23 @@ h6 {
61
62
  }
62
63
 
63
64
  .turbolinks-progress-bar {
64
- background-color: $primary;
65
+ background-color: $pink;
65
66
  height: 3px;
66
67
  }
67
68
 
69
+ a {
70
+ transition: all ease 0.6s;
71
+ color: $pink;
72
+
73
+ &:hover {
74
+ color: darken($primary, 5%);
75
+ }
76
+ }
77
+
78
+ i {
79
+ transition: all ease 0.6s;
80
+ }
81
+
68
82
  .btn {
69
83
  cursor: pointer;
70
84
  }
@@ -83,7 +97,7 @@ h6 {
83
97
  }
84
98
 
85
99
  #admin-dashboard {
86
- background: $secondary;
100
+ background: $tertiary;
87
101
  padding-top: 68px;
88
102
  margin: 0;
89
103
 
@@ -93,7 +107,7 @@ h6 {
93
107
  }
94
108
 
95
109
  label.required::after {
96
- content: '*';
110
+ content: "*";
97
111
  margin-left: 5px;
98
112
  }
99
113
 
@@ -105,13 +119,21 @@ h6 {
105
119
  }
106
120
  }
107
121
 
108
- .grey-block-form > {
122
+ .no-break {
123
+ word-break: normal;
124
+ }
125
+
126
+ .grey-block-form > {
109
127
  .form-group {
110
128
  background: #f9f9f9;
111
129
  padding: 15px;
112
130
  }
113
131
  }
114
132
 
133
+ .remote-asset-link {
134
+ word-break: break-all;
135
+ }
136
+
115
137
  .btn-add-assoc {
116
138
  border-radius: 0;
117
139
  padding: 8px 10px;
@@ -155,6 +177,10 @@ h6 {
155
177
  background: $red;
156
178
  }
157
179
 
180
+ .errors-json {
181
+ color: $red;
182
+ }
183
+
158
184
  .tag-boolean {
159
185
  width: 45px;
160
186
  text-align: center;
@@ -202,14 +228,16 @@ h6 {
202
228
  }
203
229
 
204
230
  .navbar .page-logo {
205
- width: 54px;
231
+ width: 58px;
206
232
  }
207
233
 
208
234
  .page-container {
209
235
  .page-sidebar {
210
- width: 54px;
236
+ width: 58px;
211
237
 
212
238
  ul.nav {
239
+ display: flex;
240
+
213
241
  li.nav-item {
214
242
  &.active::after,
215
243
  &:hover::after {
@@ -217,9 +245,9 @@ h6 {
217
245
  }
218
246
 
219
247
  a.nav-link {
220
- min-height: 54px;
248
+ min-height: 58px;
221
249
 
222
- [class^=icon-] {
250
+ [class^="icon-"] {
223
251
  margin: 0;
224
252
  }
225
253
 
@@ -229,20 +257,16 @@ h6 {
229
257
  }
230
258
 
231
259
  ul.sub-menu {
232
- margin-left: 54px;
260
+ margin-left: 58px;
233
261
  }
234
262
  }
235
263
  }
236
264
  }
237
-
238
- .page-content {
239
- margin-left: 54px;
240
- }
241
265
  }
242
266
  }
243
267
 
244
268
  .form-control {
245
- transition: all ease .6s;
269
+ transition: all ease 0.6s;
246
270
  border: 1px solid #c2cad8;
247
271
 
248
272
  &:focus {
@@ -255,7 +279,7 @@ h6 {
255
279
  overflow: hidden;
256
280
  margin: 0;
257
281
 
258
- input[type='file'] {
282
+ input[type="file"] {
259
283
  position: absolute;
260
284
  top: 0;
261
285
  right: 0;
@@ -278,17 +302,50 @@ h6 {
278
302
  outline: 0;
279
303
  }
280
304
 
281
- input[type='text'] {
305
+ input[type="text"] {
282
306
  color: #9e9e9e;
283
307
  }
284
308
  }
285
309
 
286
- .image {
287
- width: 300px;
288
- min-width: 300px;
289
- display: inline-block;
290
- margin-right: 25px;
291
- background: #fff;
310
+ .row-end {
311
+ align-items: flex-end;
312
+ }
313
+
314
+ .image-delete {
315
+ margin-top: 5px;
316
+ }
317
+
318
+ .cover-image {
319
+ background-size: cover;
320
+ position: relative;
321
+ height: 80px;
322
+ width: 100%;
323
+ transition: all ease .6s;
324
+ }
325
+
326
+ .image-overlay {
327
+ transition: all ease .6s;
328
+ position: absolute;
329
+ width: 100%;
330
+ height: 100%;
331
+ background: rgba($primary, .0);
332
+
333
+ .icon-zoom-image {
334
+ transition: all ease .6s;
335
+ position: absolute;
336
+ top: 50%;
337
+ left: 50%;
338
+ transform: translate(-50%, -50%);
339
+ color: #fff;
340
+ opacity: 0;
341
+ }
342
+
343
+ &:hover {
344
+ background: rgba($primary, .4);
345
+ .icon-zoom-image {
346
+ opacity: 1;
347
+ }
348
+ }
292
349
  }
293
350
 
294
351
  .image-field {
@@ -317,13 +374,13 @@ h6 {
317
374
  border-radius: 50%;
318
375
  padding: 2px 6px;
319
376
  display: none;
320
- transition: all ease .6s;
377
+ transition: all ease 0.6s;
321
378
  cursor: pointer;
322
379
 
323
380
  i {
324
381
  display: inline-block;
325
382
  color: #687991;
326
- opacity: .7;
383
+ opacity: 0.7;
327
384
  }
328
385
 
329
386
  &:hover {
@@ -371,18 +428,18 @@ h6 {
371
428
  }
372
429
 
373
430
  a.menu-toggler {
374
- color: #eee !important;
375
- transition: all .6s;
431
+ color: $pink !important;
432
+ transition: all 0.6s;
376
433
  float: right;
377
434
  margin: 23px 0 0;
378
435
 
379
436
  &:hover {
380
- opacity: .5;
437
+ opacity: 0.5;
381
438
  }
382
439
  }
383
440
 
384
441
  .dropdown-toggle {
385
- font-size: .95em;
442
+ font-size: 0.95em;
386
443
  white-space: normal;
387
444
 
388
445
  &::after {
@@ -395,7 +452,7 @@ h6 {
395
452
  width: 195px;
396
453
  padding: 0;
397
454
  border-radius: 0;
398
- box-shadow: 5px 5px rgba(102, 102, 102, .1);
455
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
399
456
  border: 1px solid #eee;
400
457
  right: 0;
401
458
  margin-top: -6px;
@@ -408,7 +465,7 @@ h6 {
408
465
  a.dropdown-item {
409
466
  padding: 8px 16px;
410
467
  color: #555;
411
- font-size: .95em;
468
+ font-size: 0.95em;
412
469
 
413
470
  &:hover {
414
471
  background: #f6f6f6;
@@ -421,9 +478,9 @@ h6 {
421
478
  right: 9px;
422
479
  display: inline-block;
423
480
  border-right: 7px solid transparent;
424
- border-bottom: 7px solid rgba(0, 0, 0, .2);
481
+ border-bottom: 7px solid rgba(0, 0, 0, 0.2);
425
482
  border-left: 7px solid transparent;
426
- content: '';
483
+ content: "";
427
484
  }
428
485
 
429
486
  &::after {
@@ -434,7 +491,7 @@ h6 {
434
491
  border-right: 6px solid transparent;
435
492
  border-bottom: 6px solid #fff;
436
493
  border-left: 6px solid transparent;
437
- content: '';
494
+ content: "";
438
495
  }
439
496
  }
440
497
  }
@@ -442,9 +499,8 @@ h6 {
442
499
  .navbar {
443
500
  padding: 0;
444
501
  margin: 0;
445
- box-shadow: 0 1px 10px 0 rgba(50, 50, 50, .2);
446
- color: #7f96ac;
447
- transition: all .6s ease;
502
+ background: #fff;
503
+ transition: all 0.6s ease;
448
504
 
449
505
  .right-nav-fix {
450
506
  img {
@@ -502,8 +558,8 @@ h6 {
502
558
  color: #7f96ac;
503
559
  }
504
560
 
505
- input[type='text'] {
506
- transition: all .6s ease;
561
+ input[type="text"] {
562
+ transition: all 0.6s ease;
507
563
  width: 150px;
508
564
 
509
565
  &:focus {
@@ -526,6 +582,7 @@ h6 {
526
582
  }
527
583
 
528
584
  .navbar-collapse {
585
+ background: #fff;
529
586
  width: auto;
530
587
  flex: 1;
531
588
  padding: 0 15px;
@@ -538,6 +595,10 @@ h6 {
538
595
  top: 50%;
539
596
  font-weight: 200;
540
597
 
598
+ .icon-menu {
599
+ color: $pink;
600
+ }
601
+
541
602
  &:hover {
542
603
  color: #fff;
543
604
  }
@@ -545,7 +606,7 @@ h6 {
545
606
 
546
607
  .page-logo {
547
608
  position: relative;
548
- background: $primary;
609
+ background: $sidebar;
549
610
  float: left;
550
611
  display: block;
551
612
  width: 195px;
@@ -557,8 +618,9 @@ h6 {
557
618
 
558
619
  .dashboard-panel {
559
620
  background: #fff;
560
- border: 1px solid #e7ecf1;
621
+ border-radius: 10px;
561
622
  padding: 15px 15px 30px;
623
+ box-shadow: 0px 1px 15px 1px rgba(69,65,78,0.08);
562
624
  }
563
625
 
564
626
  .line-show {
@@ -604,7 +666,6 @@ h6 {
604
666
  float: left;
605
667
 
606
668
  small {
607
- font-size: 14px;
608
669
  color: #aab5bc;
609
670
  font-weight: 600;
610
671
  text-transform: uppercase;
@@ -631,34 +692,48 @@ h6 {
631
692
  .selectize-input {
632
693
  box-shadow: none;
633
694
  border: 1px solid #c2cad8;
695
+ display: flex;
696
+ flex-wrap: wrap;
697
+
698
+ > input {
699
+ width: auto !important;
700
+ flex: 1;
701
+ }
634
702
  }
635
703
 
636
704
  .page-container {
637
- display: block;
705
+ display: flex;
706
+ table-layout: fixed;
707
+ overflow: hidden;
708
+ width: 100%;
638
709
 
639
710
  .page-sidebar {
640
711
  width: 195px;
641
- float: left;
712
+ background: $sidebar;
642
713
  position: relative;
643
- margin-right: -100%;
714
+ display: flex;
644
715
 
645
- ul.nav > {
716
+ ul {
717
+ flex: 1;
718
+ }
719
+
720
+ ul.nav > {
646
721
  li.nav-item {
647
722
  position: relative;
648
723
 
649
724
  &.active {
650
- background: #1f2b3d;
725
+ background: darken($sidebar, 8%);
651
726
 
652
- a.nav-link {
727
+ > a.nav-link {
653
728
  color: #fff;
654
729
 
655
730
  i {
656
- color: $primary;
731
+ color: $pink !important;
657
732
  }
658
733
  }
659
734
 
660
735
  &::after {
661
- content: '';
736
+ content: "";
662
737
  float: right;
663
738
  position: absolute;
664
739
  top: 30px;
@@ -675,18 +750,34 @@ h6 {
675
750
  }
676
751
 
677
752
  &:hover {
678
- background: #232f44;
753
+ a.nav-link {
754
+ color: #fff;
755
+
756
+ i {
757
+ color: $pink;
758
+ }
759
+ }
679
760
 
680
761
  > ul.sub-menu {
681
762
  display: inline-block;
763
+
764
+ a.nav-link {
765
+ &:hover {
766
+ color: #fff;
767
+
768
+ i {
769
+ color: $pink;
770
+ }
771
+ }
772
+ }
682
773
  }
683
774
 
684
775
  &::after {
685
- content: '';
776
+ content: "";
686
777
  float: right;
687
778
  position: absolute;
779
+ top: 30px;
688
780
  right: 0;
689
- top: 26px;
690
781
  background: 0 0;
691
782
  width: 0;
692
783
  height: 0;
@@ -694,7 +785,7 @@ h6 {
694
785
  border-top: 12px double transparent;
695
786
  border-bottom: 12px double transparent;
696
787
  border-left: 0;
697
- border-right: 8px solid #1c2637;
788
+ border-right: 8px solid $pink;
698
789
  }
699
790
  }
700
791
 
@@ -709,8 +800,7 @@ h6 {
709
800
  font-size: 13px;
710
801
  font-weight: 300;
711
802
  text-align: center;
712
- color: #c3cee0;
713
- border-top: 1px solid #2b3b55;
803
+ color: $textColor;
714
804
  overflow: hidden;
715
805
  border-radius: 0;
716
806
 
@@ -724,48 +814,49 @@ h6 {
724
814
  top: 2px;
725
815
  font-size: 24px;
726
816
  text-shadow: none;
727
- font-weight: 300;
728
817
  text-align: center;
729
- color: #4d5d7c;
818
+ color: $blueIcon;
730
819
  }
731
820
  }
732
821
 
733
822
  ul.sub-menu {
734
- width: 194px;
823
+ width: 195px;
735
824
  margin-left: 195px;
736
- background: #1c2637;
825
+ background: darken($sidebar, 8%);
737
826
  top: 0;
738
827
  z-index: 9999;
739
828
  position: absolute;
740
829
  padding: 0;
741
830
  list-style: none;
742
831
  display: none;
743
- box-shadow: 5px 5px rgba(48, 48, 48, .2);
744
832
 
745
833
  li.nav-item {
746
834
  background: none;
747
- color: #c3cee0;
835
+ color: $textColor;
748
836
 
749
837
  &::after {
750
838
  border: 0;
751
839
  }
752
840
 
753
841
  a.nav-link.active {
754
- background: #212d41;
842
+ background: darken($sidebar, 8%);
843
+
844
+ i {
845
+ color: $pink !important;
846
+ }
755
847
  }
756
848
 
757
849
  &:hover {
758
850
  a.nav-link {
759
- background: #212d41;
851
+ background: darken($sidebar, 8%);
760
852
  }
761
853
  }
762
854
 
763
855
  a.nav-link {
764
856
  min-height: inherit;
765
857
  padding: 9px 15px;
766
- margin: 3px;
767
858
  border: 0;
768
- color: #c3cee0;
859
+ color: $textColor;
769
860
 
770
861
  &.active {
771
862
  color: #fff;
@@ -776,9 +867,8 @@ h6 {
776
867
  font-size: 16px;
777
868
  line-height: 16px;
778
869
  text-shadow: none;
779
- font-weight: 300;
780
870
  text-align: center;
781
- color: #5d7bad;
871
+ color: $blueIcon;
782
872
  float: left;
783
873
  }
784
874
 
@@ -792,6 +882,7 @@ h6 {
792
882
  margin-top: 0;
793
883
  font-size: 13px;
794
884
  float: left;
885
+ display: block;
795
886
  }
796
887
  }
797
888
  }
@@ -801,17 +892,18 @@ h6 {
801
892
  }
802
893
 
803
894
  .page-content {
804
- margin-left: 195px;
895
+ flex: 1;
805
896
  margin-top: 0;
806
- min-height: calc(100vh - 68px);
897
+ min-height: 100vh;
807
898
  padding: 25px 20px 10px;
808
- background: $tertiary;
899
+ overflow: auto;
809
900
  }
810
901
  }
811
902
 
812
903
  .breadcrumb {
813
904
  padding: 10px 15px;
814
- border: 1px solid #e7ecf1;
905
+ border: 1px solid rgba(121,133,166,0.1);
906
+ box-shadow: 0px 1px 15px 1px rgba(69,65,78,0.08);
815
907
  background-color: #fff;
816
908
  margin: 20px 0;
817
909
  border-radius: 0;
@@ -832,7 +924,8 @@ h6 {
832
924
  .portlet {
833
925
  background: #fff;
834
926
  margin-bottom: 25px;
835
- border: 1px solid #e7ecf1;
927
+ border: 1px solid rgba(121,133,166,0.1);
928
+ box-shadow: 0px 1px 15px 1px rgba(69,65,78,0.08);
836
929
  }
837
930
 
838
931
  .btn-circle {
@@ -854,7 +947,7 @@ h6 {
854
947
  }
855
948
 
856
949
  .portlet-title {
857
- border-bottom: 1px solid #eee;
950
+ border-bottom: 1px solid rgba(121,133,166,0.1);
858
951
  padding: 10px 20px;
859
952
  margin-bottom: 10px;
860
953
  display: flex;
@@ -862,7 +955,7 @@ h6 {
862
955
  justify-content: space-between;
863
956
 
864
957
  .caption {
865
- color: $primary;
958
+ color: $pink;
866
959
  text-transform: uppercase;
867
960
  font-weight: bold;
868
961
  padding: 10px 0;
@@ -884,7 +977,7 @@ h6 {
884
977
 
885
978
  a {
886
979
  padding: 4px 10px;
887
- font-size: .9em;
980
+ font-size: 0.9em;
888
981
  line-height: 1.5;
889
982
  }
890
983
  }
@@ -905,7 +998,7 @@ h6 {
905
998
 
906
999
  .datepicker {
907
1000
  border-radius: 0;
908
- box-shadow: 5px 5px rgba(102, 102, 102, .1);
1001
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
909
1002
  border: 1px solid #efefef;
910
1003
 
911
1004
  table {
@@ -933,7 +1026,6 @@ h6 {
933
1026
  * {
934
1027
  border-radius: 0 !important;
935
1028
  margin: 0 5px;
936
- font-size: 14px;
937
1029
  text-transform: capitalize;
938
1030
  }
939
1031
 
@@ -952,26 +1044,36 @@ h6 {
952
1044
  margin-bottom: 3px;
953
1045
  }
954
1046
 
955
- .selectize-dropdown [data-selectable], .selectize-dropdown .optgroup-header {
1047
+ .selectize-dropdown {
1048
+ padding: 5px 8px;
1049
+ }
1050
+
1051
+ .selectize-dropdown [data-selectable],
1052
+ .selectize-dropdown .optgroup-header {
956
1053
  min-height: 28px;
957
1054
  }
958
1055
 
959
1056
  .selectize-control.plugin-remove_button [data-value] .remove {
960
1057
  border-color: #d4d4d4;
1058
+ display: flex;
1059
+ align-items: center;
1060
+ justify-content: center;
961
1061
  }
962
1062
 
963
1063
  .selectize-control.multi .selectize-input > div {
964
1064
  margin-bottom: 0;
965
1065
  }
966
1066
 
967
- .selectize-dropdown [data-selectable], .selectize-dropdown .optgroup-header {
1067
+ .selectize-dropdown [data-selectable],
1068
+ .selectize-dropdown .optgroup-header {
968
1069
  min-height: 28px;
969
1070
  }
970
1071
 
971
1072
  .table-data-list {
972
- border-color: #e7ecf1 !important;
1073
+ border-color: rgba(121,133,166,0.1) !important;
973
1074
  margin-top: 1rem;
974
- font-size: .95em;
1075
+ background: #fff;
1076
+ font-size: .9em;
975
1077
 
976
1078
  .fit {
977
1079
  white-space: nowrap;
@@ -1005,19 +1107,13 @@ h6 {
1005
1107
  font-weight: 300;
1006
1108
  }
1007
1109
 
1008
- th,
1009
- td {
1010
- border-bottom-width: 3px;
1011
- }
1012
-
1013
1110
  .selectize-input {
1014
- margin-top: 5px;
1015
1111
  padding: 5px 8px;
1016
1112
  border-radius: 0;
1017
1113
  }
1018
1114
 
1019
1115
  .input-group + .input-group {
1020
- margin-top: .5rem;
1116
+ margin-top: 0.5rem;
1021
1117
  }
1022
1118
 
1023
1119
  .form-control {
@@ -1031,7 +1127,7 @@ h6 {
1031
1127
  }
1032
1128
 
1033
1129
  + .form-control {
1034
- margin-top: .5rem;
1130
+ margin-top: 0.5rem;
1035
1131
  }
1036
1132
  }
1037
1133
 
@@ -1045,7 +1141,7 @@ h6 {
1045
1141
  height: auto;
1046
1142
  }
1047
1143
 
1048
- .input-group-addon {
1144
+ .input-group-prepend {
1049
1145
  height: 30px;
1050
1146
  border-radius: 0;
1051
1147
  background: #ececec;
@@ -1060,7 +1156,6 @@ h6 {
1060
1156
  td {
1061
1157
  padding: 8px 10px;
1062
1158
  vertical-align: middle;
1063
- font-size: 14px;
1064
1159
  border-color: #e7ecf1;
1065
1160
  }
1066
1161
 
@@ -1074,7 +1169,6 @@ h6 {
1074
1169
 
1075
1170
  tr.heading th {
1076
1171
  background: #fbfcfd;
1077
- font-size: 14px;
1078
1172
  font-weight: 600;
1079
1173
  border-bottom: 0;
1080
1174
  }
@@ -1091,8 +1185,8 @@ h6 {
1091
1185
  cursor: pointer;
1092
1186
 
1093
1187
  &::after {
1094
- content: '\f0dc';
1095
- font-family: 'FontAwesome';
1188
+ content: "\f0dc";
1189
+ font-family: "Font Awesome 5 Free";
1096
1190
  color: $lightgrey;
1097
1191
  float: right;
1098
1192
  }
@@ -1100,8 +1194,8 @@ h6 {
1100
1194
 
1101
1195
  .asc {
1102
1196
  &::after {
1103
- content: '\f0dd';
1104
- font-family: 'FontAwesome';
1197
+ content: "\f0dd";
1198
+ font-family: "Font Awesome 5 Free";
1105
1199
  color: $blue;
1106
1200
  float: right;
1107
1201
  }
@@ -1109,8 +1203,8 @@ h6 {
1109
1203
 
1110
1204
  .desc {
1111
1205
  &::after {
1112
- content: '\f0de';
1113
- font-family: 'FontAwesome';
1206
+ content: "\f0de";
1207
+ font-family: "Font Awesome 5 Free";
1114
1208
  color: $blue;
1115
1209
  float: right;
1116
1210
  }
@@ -1118,7 +1212,7 @@ h6 {
1118
1212
  }
1119
1213
 
1120
1214
  .pagination-panel {
1121
- font-size: .9em;
1215
+ font-size: 0.9em;
1122
1216
  display: flex;
1123
1217
  align-items: center;
1124
1218
 
@@ -1189,15 +1283,13 @@ h6 {
1189
1283
  }
1190
1284
 
1191
1285
  .head-data-list {
1286
+ display: flex;
1287
+ justify-content: space-between;
1192
1288
  overflow: visible;
1193
1289
  }
1194
1290
 
1195
- .fix-block-head {
1196
- display: inline-block;
1197
- }
1198
-
1199
1291
  .block-batch {
1200
- font-size: .9em;
1292
+ font-size: 0.9em;
1201
1293
  display: flex;
1202
1294
  align-items: center;
1203
1295
 
@@ -1238,7 +1330,6 @@ h6 {
1238
1330
  border-radius: 2px;
1239
1331
 
1240
1332
  .btn {
1241
- font-size: 14px;
1242
1333
  padding: 8px 14px;
1243
1334
  border-radius: 2px;
1244
1335
  }
@@ -1264,8 +1355,11 @@ h6 {
1264
1355
  }
1265
1356
 
1266
1357
  #toast-container {
1358
+ box-shadow: none;
1359
+
1267
1360
  > div {
1268
1361
  opacity: 1;
1362
+ box-shadow: none;
1269
1363
 
1270
1364
  &hover {
1271
1365
  box-shadow: none;
@@ -1273,19 +1367,19 @@ h6 {
1273
1367
  }
1274
1368
 
1275
1369
  > .toast-success {
1276
- background-color: rgba($success, .9);
1370
+ background-color: rgba($success, 0.9);
1277
1371
  }
1278
1372
 
1279
1373
  > .toast-error {
1280
- background-color: rgba($error, .9);
1374
+ background-color: rgba($error, 0.9);
1281
1375
  }
1282
1376
 
1283
1377
  > .toast-info {
1284
- background-color: rgba($info, .9);
1378
+ background-color: rgba($info, 0.9);
1285
1379
  }
1286
1380
 
1287
1381
  > .toast-warning {
1288
- background-color: rgba($notice, .9);
1382
+ background-color: rgba($notice, 0.9);
1289
1383
  }
1290
1384
  }
1291
1385
 
@@ -1333,11 +1427,11 @@ h6 {
1333
1427
  color: $red;
1334
1428
  text-align: center;
1335
1429
  display: block;
1336
- font-size: .9em;
1430
+ font-size: 0.9em;
1337
1431
  }
1338
1432
 
1339
1433
  .container-fluid-admin {
1340
- height: 100vh;
1434
+ min-height: 100vh;
1341
1435
  }
1342
1436
 
1343
1437
  .bckg-dark {
@@ -1358,28 +1452,33 @@ h6 {
1358
1452
  }
1359
1453
 
1360
1454
  .login-form {
1361
- background: #1c2c41;
1455
+ background: $sidebar;
1362
1456
  color: #fff;
1363
- width: 45%;
1457
+ width: 25%;
1458
+ margin: 0 auto 25px;
1459
+ position: absolute;
1460
+ top: 50%;
1461
+ left: 50%;
1462
+ transform: translate(-50%, -50%);
1364
1463
 
1365
1464
  h2 {
1366
- margin-bottom: 25px;
1465
+ color: #fff;
1367
1466
  }
1368
1467
 
1369
1468
  .links-form {
1370
1469
  a {
1371
- color: #47566c;
1470
+ color: $blueIcon;
1372
1471
  text-decoration: none;
1373
1472
 
1374
1473
  &:hover {
1375
- color: #47566c;
1474
+ color: darken($blueIcon, 5%);
1376
1475
  }
1377
1476
  }
1378
1477
  }
1379
1478
 
1380
1479
  i {
1381
1480
  font-size: 1.5em;
1382
- color: $primary;
1481
+ color: $blueIcon;
1383
1482
  }
1384
1483
 
1385
1484
  .form-control {
@@ -1387,7 +1486,7 @@ h6 {
1387
1486
  }
1388
1487
 
1389
1488
  .input-group {
1390
- margin-bottom: 20px;
1489
+ margin-bottom: 40px;
1391
1490
  }
1392
1491
 
1393
1492
  .content {
@@ -1398,14 +1497,14 @@ h6 {
1398
1497
  padding: inherit;
1399
1498
  }
1400
1499
 
1401
- .input-group-addon {
1500
+ .input-group-prepend {
1402
1501
  border-radius: 0;
1403
1502
  padding-bottom: 15px;
1404
1503
  }
1405
1504
 
1406
1505
  input[type="submit"] {
1407
1506
  cursor: pointer;
1408
- background: #304158;
1507
+ background: $pink;
1409
1508
  color: #fff;
1410
1509
  border-radius: 3px;
1411
1510
  border: 0;
@@ -1415,7 +1514,7 @@ h6 {
1415
1514
  margin-top: 35px;
1416
1515
 
1417
1516
  &:hover {
1418
- background: darken(#304158, 5%);
1517
+ background: darken($pink, 5%);
1419
1518
  }
1420
1519
  }
1421
1520
 
@@ -1424,6 +1523,7 @@ h6 {
1424
1523
  input[type="password"] {
1425
1524
  background-color: transparent;
1426
1525
  border: 0;
1526
+ border-radius: 0;
1427
1527
  border-bottom: 1px solid #47566c;
1428
1528
  color: #fff;
1429
1529
  padding: 8px 12px 8px 35px;
@@ -1433,37 +1533,62 @@ h6 {
1433
1533
  caret-color: $primary;
1434
1534
  }
1435
1535
 
1436
- .input-group-addon {
1536
+ .input-group-prepend {
1437
1537
  background-color: transparent;
1438
1538
  border: 0;
1439
- border-bottom: 1px solid #47566c;
1440
1539
  color: #fff;
1441
- padding-bottom: 15px;
1442
- padding-top: 12px;
1540
+ padding-top: 5px;
1443
1541
  }
1444
1542
  }
1445
1543
  }
1446
1544
 
1545
+ /* Small devices (tablets, 768px and up) */
1447
1546
  @media (max-width: 768px) {
1448
1547
  #admin-user {
1449
1548
  .login-form {
1450
- width: 85%;
1549
+ width: 80%;
1550
+ }
1551
+ }
1552
+ }
1553
+
1554
+ /* Medium devices (desktops, 992px and up) */
1555
+ @media (min-width: 992px) {
1556
+ #admin-user {
1557
+ .login-form {
1558
+ width: 45%;
1451
1559
  }
1452
1560
  }
1453
1561
  }
1454
1562
 
1455
- @media (min-width: 769px) and (max-width: 992px) {
1563
+ /* Large devices (large desktops, 1200px and up) */
1564
+ @media (min-width: 1200px) {
1456
1565
  #admin-user {
1457
1566
  .login-form {
1458
- width: 35%;
1567
+ width: 26%;
1568
+
1569
+ input[type="submit"] {
1570
+ width: 100%;
1571
+ }
1572
+ }
1573
+
1574
+ .app-logo {
1575
+ margin: 0 0 25px;
1459
1576
  }
1460
1577
  }
1461
1578
  }
1462
1579
 
1463
- @media (min-width: 993px) {
1464
- #admin-user {
1580
+ @media (min-width: 1600px) {
1581
+ #admin-user {
1465
1582
  .login-form {
1466
- width: 30%;
1583
+ width: 20%;
1584
+
1585
+ input[type="submit"] {
1586
+ width: 100%;
1587
+ }
1588
+ }
1589
+
1590
+ .app-logo {
1591
+ margin: 0 0 25px;
1467
1592
  }
1468
1593
  }
1469
- }
1594
+ }