slash_admin 0.1.0 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }