formstrap 0.1.3 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -1
  3. data/app/assets/javascripts/formstrap/controllers/file_preview_controller.js +5 -5
  4. data/app/assets/javascripts/formstrap/controllers/media_controller.js +4 -2
  5. data/app/assets/javascripts/formstrap/controllers/media_modal_controller.js +38 -2
  6. data/app/assets/javascripts/formstrap/controllers/popup_controller.js +75 -0
  7. data/app/assets/javascripts/formstrap/controllers/repeater_controller.js +4 -4
  8. data/app/assets/javascripts/formstrap/index.js +2 -0
  9. data/app/assets/javascripts/formstrap.js +1790 -129
  10. data/app/assets/stylesheets/formstrap/{forms/autocomplete.scss → autocomplete.scss} +1 -1
  11. data/app/assets/stylesheets/formstrap/{forms/file.scss → file.scss} +10 -10
  12. data/app/assets/stylesheets/formstrap/general.scss +8 -1
  13. data/app/assets/stylesheets/formstrap/media/_modal.scss +9 -0
  14. data/app/assets/stylesheets/formstrap/{forms/media.scss → media/_validation.scss} +2 -2
  15. data/app/assets/stylesheets/formstrap/media.scss +2 -1
  16. data/app/assets/stylesheets/formstrap/{forms/repeater.scss → repeater.scss} +8 -8
  17. data/app/assets/stylesheets/formstrap/shared/popup.scss +17 -0
  18. data/app/assets/stylesheets/formstrap/shared/thumbnail.scss +23 -0
  19. data/app/assets/stylesheets/formstrap/shared.scss +2 -0
  20. data/app/assets/stylesheets/formstrap/utilities/dropzone.scss +2 -2
  21. data/app/assets/stylesheets/formstrap/utilities.scss +0 -1
  22. data/app/assets/stylesheets/formstrap.css +155 -143
  23. data/app/assets/stylesheets/formstrap.scss +5 -1
  24. data/app/controllers/formstrap/media_controller.rb +6 -12
  25. data/app/helpers/application_helper.rb +20 -0
  26. data/app/models/concerns/formstrap/attachment.rb +16 -0
  27. data/app/models/concerns/formstrap/blob.rb +56 -0
  28. data/app/models/formstrap/file_view.rb +3 -3
  29. data/app/models/formstrap/media_view.rb +12 -1
  30. data/app/models/formstrap/thumbnail_view.rb +108 -0
  31. data/app/views/formstrap/_autocomplete.html.erb +1 -1
  32. data/app/views/formstrap/_file.html.erb +8 -8
  33. data/app/views/formstrap/_media.html.erb +5 -4
  34. data/app/views/formstrap/_repeater.html.erb +3 -3
  35. data/app/views/formstrap/media/_item.html.erb +10 -7
  36. data/app/views/formstrap/media/_modal.html.erb +35 -8
  37. data/app/views/formstrap/media/_thumbnail.html.erb +12 -8
  38. data/app/views/formstrap/media/_validation.html.erb +1 -1
  39. data/app/views/formstrap/media/create.turbo_stream.erb +3 -1
  40. data/app/views/formstrap/media/index.html.erb +1 -1
  41. data/app/views/formstrap/repeater/_row.html.erb +4 -4
  42. data/app/views/formstrap/shared/_popup.html.erb +1 -1
  43. data/app/views/formstrap/shared/_thumbnail.html.erb +5 -3
  44. data/config/locales/formstrap/forms/en.yml +0 -14
  45. data/config/locales/formstrap/forms/nl.yml +1 -15
  46. data/config/locales/formstrap/media/en.yml +2 -10
  47. data/config/locales/formstrap/media/nl.yml +2 -10
  48. data/config/routes.rb +0 -2
  49. data/lib/formstrap/version.rb +1 -1
  50. data/package.json +1 -1
  51. metadata +16 -29
  52. data/app/assets/stylesheets/formstrap/forms.scss +0 -12
  53. data/app/assets/stylesheets/formstrap/media/index.scss +0 -9
  54. data/app/assets/stylesheets/formstrap/utilities/buttons.scss +0 -27
  55. data/app/models/formstrap/blocks_view.rb +0 -43
  56. data/app/views/formstrap/_blocks.html.erb +0 -45
  57. data/app/views/formstrap/_to_ary.html.erb +0 -0
  58. data/app/views/formstrap/blocks/_modal.html.erb +0 -20
  59. data/app/views/formstrap/fields/_base.html.erb +0 -25
  60. data/app/views/formstrap/fields/_file.html.erb +0 -17
  61. data/app/views/formstrap/fields/_files.html.erb +0 -17
  62. data/app/views/formstrap/fields/_group.html.erb +0 -52
  63. data/app/views/formstrap/fields/_list.html.erb +0 -31
  64. data/app/views/formstrap/fields/_text.html.erb +0 -17
  65. data/app/views/formstrap/media/_media_item_modal.html.erb +0 -77
  66. data/app/views/formstrap/media/show.html.erb +0 -9
  67. data/app/views/formstrap/media/update.turbo_stream.erb +0 -3
  68. data/config/locales/activerecord/en.yml +0 -12
  69. data/config/locales/activerecord/nl.yml +0 -13
  70. data/config/locales/defaults/en.yml +0 -215
  71. data/config/locales/defaults/nl.yml +0 -213
  72. data/config/locales/devise/en.yml +0 -65
  73. data/config/locales/devise/nl.yml +0 -85
  74. /data/app/assets/stylesheets/formstrap/{forms/search.scss → search.scss} +0 -0
@@ -1,4 +1,4 @@
1
- .h-autocomplete {
1
+ .formstrap-autocomplete {
2
2
  --fs-dropdown-z-index: 1000;
3
3
  --fs-dropdown-font-size: 1rem;
4
4
  --fs-dropdown-border-radius: 0.375rem;
@@ -1,20 +1,20 @@
1
- .h-form-file {
1
+ .formstrap-file {
2
2
  --fs-file-spacer-2: calc(1rem * .5);
3
3
 
4
- .h-form-file-thumbnails {
4
+ .formstrap-file-thumbnails {
5
5
  margin-bottom: var(--fs-file-spacer-2);
6
6
  }
7
7
 
8
- &.h-dropzone {
8
+ &.formstrap-dropzone {
9
9
  padding: var(--fs-file-spacer-2);
10
10
 
11
- .h-form-file-thumbnails {
11
+ .formstrap-file-thumbnails {
12
12
  margin-bottom: 0;
13
13
  }
14
14
  }
15
15
  }
16
16
 
17
- .h-form-file-thumbnails {
17
+ .formstrap-file-thumbnails {
18
18
  --fs-file-spacer-2: calc(1rem * .5);
19
19
  position: relative;
20
20
  display: flex;
@@ -27,23 +27,23 @@
27
27
  }
28
28
  }
29
29
 
30
- .h-form-file-thumbnail {
30
+ .formstrap-file-thumbnail {
31
31
  position: relative;
32
32
  pointer-events: initial !important;
33
33
  display: flex;
34
34
 
35
35
  &:hover {
36
- .h-form-file-thumbnail-actions {
36
+ .formstrap-file-thumbnail-actions {
37
37
  display: block;
38
38
  }
39
39
  }
40
40
  }
41
41
 
42
- .h-form-file-thumbnail-actions {
42
+ .formstrap-file-thumbnail-actions {
43
43
  display: none;
44
44
  }
45
45
 
46
- .h-form-file-thumbnail-remove {
46
+ .formstrap-file-thumbnail-remove {
47
47
  position: absolute;
48
48
  top: 5px;
49
49
  right: 5px;
@@ -63,7 +63,7 @@
63
63
  }
64
64
  }
65
65
 
66
- .h-form-file-thumbnail-edit {
66
+ .formstrap-file-thumbnail-edit {
67
67
  position: absolute;
68
68
  top: 5px;
69
69
  right: 35px;
@@ -15,4 +15,11 @@ mark {
15
15
  --fs-mark-padding: .1875em;
16
16
  padding: 0;
17
17
  box-shadow: 0 var(--fs-mark-padding) 0 var(--bs-yellow), 0 calc(-1 * #{var(--fs-mark-padding)}) 0 var(--bs-yellow);
18
- }
18
+ }
19
+
20
+ .form-label[required="required"], .form-check-label[required="required"] {
21
+ &:after {
22
+ content: ' *';
23
+ color: var(--bs-danger-rgb);
24
+ }
25
+ }
@@ -0,0 +1,9 @@
1
+ .formstrap-media-modal {
2
+ .formstrap-thumbnail {
3
+ cursor: pointer;
4
+ }
5
+
6
+ input[type="checkbox"]:checked + label .formstrap-thumbnail {
7
+ background-color: #0d6efd;
8
+ }
9
+ }
@@ -1,4 +1,4 @@
1
- .h-form-media-validation {
1
+ .formstrap-media-validation {
2
2
  opacity: 0;
3
3
  width: 100px;
4
4
  height: 0;
@@ -7,4 +7,4 @@
7
7
  position: absolute;
8
8
  bottom: 0;
9
9
  left: 0;
10
- }
10
+ }
@@ -1 +1,2 @@
1
- @import "media/index";
1
+ @import "media/modal";
2
+ @import "media/validation";
@@ -1,26 +1,26 @@
1
- .repeater {
1
+ .formstrap-repeater {
2
2
  position: relative;
3
3
  }
4
4
 
5
- .repeater-row {
5
+ .formstrap-repeater-row {
6
6
  position: relative;
7
7
 
8
8
  &:hover {
9
- .repeater-row-remove {
9
+ .formstrap-repeater-row-remove {
10
10
  visibility: visible;
11
11
  }
12
12
 
13
- .repeater-row-add {
13
+ .formstrap-repeater-row-add {
14
14
  visibility: visible;
15
15
  }
16
16
 
17
- .repeater-row-handle {
17
+ .formstrap-repeater-row-handle {
18
18
  visibility: visible;
19
19
  }
20
20
  }
21
21
  }
22
22
 
23
- .repeater-row-remove {
23
+ .formstrap-repeater-row-remove {
24
24
  position: absolute;
25
25
  top: calc(50% - 17px);
26
26
  right: -22px;
@@ -33,7 +33,7 @@
33
33
  }
34
34
  }
35
35
 
36
- .repeater-row-add {
36
+ .formstrap-repeater-row-add {
37
37
  position: absolute;
38
38
  top: calc(100% - 18px);
39
39
  right: calc(50% - 17px);
@@ -46,7 +46,7 @@
46
46
  }
47
47
  }
48
48
 
49
- .repeater-row-handle {
49
+ .formstrap-repeater-row-handle {
50
50
  position: absolute;
51
51
  top: 0;
52
52
  left: 0;
@@ -0,0 +1,17 @@
1
+ .formstrap-popup {
2
+ padding: 10px;
3
+ background: var(--bs-white);
4
+ z-index: 1070;
5
+ //@include reset-text();
6
+ font-size: var(--bs-popover-font-size);
7
+ word-wrap: break-word;
8
+ background-color: var(--bs-body-bg);
9
+ background-clip: padding-box;
10
+ border-radius: var(--bs-popover-border-radius);
11
+ box-shadow: 0 .5rem 1rem rgba(var(--bs-body-color-rgb), .15);
12
+ border: var(--bs-border-width) solid var(--bs-border-color-translucent);
13
+
14
+ &.closed {
15
+ display: none;
16
+ }
17
+ }
@@ -0,0 +1,23 @@
1
+ .formstrap-thumbnail {
2
+ display: inline-block;
3
+ position: relative;
4
+ }
5
+
6
+ .formstrap-thumbnail-bg {
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ background-color: var(--bs-gray-100);
11
+ background-size: cover;
12
+ background-position: center center;
13
+ width: 100%;
14
+ height: 100%;
15
+ position: relative;
16
+ }
17
+
18
+ .formstrap-thumbnail-icon {
19
+ position: absolute;
20
+ top: calc(50% - 20px);
21
+ left: calc(50% - 14px);
22
+ font-size: 28px;
23
+ }
@@ -0,0 +1,2 @@
1
+ @import "shared/thumbnail";
2
+ @import "shared/popup";
@@ -1,4 +1,4 @@
1
- .h-dropzone {
1
+ .formstrap-dropzone {
2
2
  --fs-input-btn-focus-blur: 0;
3
3
  --fs-input-btn-focus-width: .25rem;
4
4
  --fs-input-btn-focus-color-opacity: .25;
@@ -63,7 +63,7 @@
63
63
  }
64
64
  }
65
65
 
66
- .h-dropzone-placeholder {
66
+ .formstrap-dropzone-placeholder {
67
67
  color: var(--bs-gray-600);
68
68
  display: flex;
69
69
  align-items: center;
@@ -1,2 +1 @@
1
- @import "utilities/buttons";
2
1
  @import "utilities/dropzone";
@@ -1283,12 +1283,140 @@ span.flatpickr-weekday {
1283
1283
  transform: translate3d(0, 0, 0);
1284
1284
  }
1285
1285
  }
1286
+ html {
1287
+ height: 100%;
1288
+ }
1289
+ .list-group-item {
1290
+ --fs-list-group-active-color: #fff;
1291
+ }
1292
+ .list-group-item.active .text-muted {
1293
+ color: var(--fs-list-group-active-color) !important;
1294
+ }
1295
+ mark {
1296
+ --fs-mark-padding: .1875em;
1297
+ padding: 0;
1298
+ box-shadow: 0 var(--fs-mark-padding) 0 var(--bs-yellow), 0 calc(-1 * var(--fs-mark-padding)) 0 var(--bs-yellow);
1299
+ }
1286
1300
  .form-label[required=required]:after,
1287
1301
  .form-check-label[required=required]:after {
1288
1302
  content: " *";
1289
1303
  color: var(--bs-danger-rgb);
1290
1304
  }
1291
- .h-autocomplete {
1305
+ .formstrap-dropzone {
1306
+ --fs-input-btn-focus-blur: 0;
1307
+ --fs-input-btn-focus-width: .25rem;
1308
+ --fs-input-btn-focus-color-opacity: .25;
1309
+ position: relative;
1310
+ border: 2px dashed var(--bs-gray-400);
1311
+ border-radius: var(--bs-border-radius);
1312
+ }
1313
+ .formstrap-dropzone > *:not(.form-control) {
1314
+ margin: 0.5rem;
1315
+ pointer-events: none;
1316
+ z-index: 2;
1317
+ }
1318
+ .formstrap-dropzone.dragover,
1319
+ .formstrap-dropzone:hover {
1320
+ border-color: var(--bs-gray-400);
1321
+ }
1322
+ .formstrap-dropzone.dragover input[type=file] {
1323
+ z-index: 3;
1324
+ }
1325
+ .formstrap-dropzone.focus,
1326
+ .formstrap-dropzone.dragover {
1327
+ border-color: var(--bs-primary-border-subtle);
1328
+ outline: 0;
1329
+ box-shadow: var(--bs-box-shadow);
1330
+ }
1331
+ .formstrap-dropzone.focus.is-valid,
1332
+ .formstrap-dropzone.dragover.is-valid {
1333
+ border-color: var(--bs-success);
1334
+ box-shadow: 0 0 var(--fs-input-btn-focus-blur) var(--fs-input-btn-focus-width) rgba(var(--bs-success), var(--fs-input-btn-focus-color-opacity));
1335
+ }
1336
+ .formstrap-dropzone.focus.is-invalid,
1337
+ .formstrap-dropzone.dragover.is-invalid {
1338
+ border-color: var(--bs-danger);
1339
+ box-shadow: 0 0 var(--fs-input-btn-focus-blur) var(--fs-input-btn-focus-width) rgba(var(--bs-danger), var(--fs-input-btn-focus-color-opacity));
1340
+ }
1341
+ .formstrap-dropzone .form-control {
1342
+ position: absolute;
1343
+ top: 0;
1344
+ left: 0;
1345
+ width: 100%;
1346
+ height: 100%;
1347
+ z-index: 1;
1348
+ border: none;
1349
+ box-shadow: none;
1350
+ text-indent: -100vw;
1351
+ color: transparent;
1352
+ background: none;
1353
+ }
1354
+ .formstrap-dropzone.is-invalid {
1355
+ border-color: var(--bs-danger);
1356
+ }
1357
+ .formstrap-dropzone.is-valid {
1358
+ border-color: var(--bs-success);
1359
+ }
1360
+ .formstrap-dropzone-placeholder {
1361
+ color: var(--bs-gray-600);
1362
+ display: flex;
1363
+ align-items: center;
1364
+ justify-content: center;
1365
+ width: 100%;
1366
+ }
1367
+ .formstrap-thumbnail {
1368
+ display: inline-block;
1369
+ position: relative;
1370
+ }
1371
+ .formstrap-thumbnail-bg {
1372
+ display: flex;
1373
+ align-items: center;
1374
+ justify-content: center;
1375
+ background-color: var(--bs-gray-100);
1376
+ background-size: cover;
1377
+ background-position: center center;
1378
+ width: 100%;
1379
+ height: 100%;
1380
+ position: relative;
1381
+ }
1382
+ .formstrap-thumbnail-icon {
1383
+ position: absolute;
1384
+ top: calc(50% - 20px);
1385
+ left: calc(50% - 14px);
1386
+ font-size: 28px;
1387
+ }
1388
+ .formstrap-popup {
1389
+ padding: 10px;
1390
+ background: var(--bs-white);
1391
+ z-index: 1070;
1392
+ font-size: var(--bs-popover-font-size);
1393
+ word-wrap: break-word;
1394
+ background-color: var(--bs-body-bg);
1395
+ background-clip: padding-box;
1396
+ border-radius: var(--bs-popover-border-radius);
1397
+ box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
1398
+ border: var(--bs-border-width) solid var(--bs-border-color-translucent);
1399
+ }
1400
+ .formstrap-popup.closed {
1401
+ display: none;
1402
+ }
1403
+ .formstrap-media-modal .formstrap-thumbnail {
1404
+ cursor: pointer;
1405
+ }
1406
+ .formstrap-media-modal input[type=checkbox]:checked + label .formstrap-thumbnail {
1407
+ background-color: #0d6efd;
1408
+ }
1409
+ .formstrap-media-validation {
1410
+ opacity: 0;
1411
+ width: 100px;
1412
+ height: 0;
1413
+ padding: 0;
1414
+ margin: 0;
1415
+ position: absolute;
1416
+ bottom: 0;
1417
+ left: 0;
1418
+ }
1419
+ .formstrap-autocomplete {
1292
1420
  --fs-dropdown-z-index: 1000;
1293
1421
  --fs-dropdown-font-size: 1rem;
1294
1422
  --fs-dropdown-border-radius: 0.375rem;
@@ -1307,47 +1435,47 @@ span.flatpickr-weekday {
1307
1435
  border: var(--bs-border-width) solid var(--bs-border-color-translucent);
1308
1436
  overflow: hidden;
1309
1437
  }
1310
- .h-autocomplete .list-group-flush {
1438
+ .formstrap-autocomplete .list-group-flush {
1311
1439
  margin: 0;
1312
1440
  padding: 0;
1313
1441
  }
1314
- .h-form-file {
1442
+ .formstrap-file {
1315
1443
  --fs-file-spacer-2: calc(1rem * .5);
1316
1444
  }
1317
- .h-form-file .h-form-file-thumbnails {
1445
+ .formstrap-file .formstrap-file-thumbnails {
1318
1446
  margin-bottom: var(--fs-file-spacer-2);
1319
1447
  }
1320
- .h-form-file.h-dropzone {
1448
+ .formstrap-file.formstrap-dropzone {
1321
1449
  padding: var(--fs-file-spacer-2);
1322
1450
  }
1323
- .h-form-file.h-dropzone .h-form-file-thumbnails {
1451
+ .formstrap-file.formstrap-dropzone .formstrap-file-thumbnails {
1324
1452
  margin-bottom: 0;
1325
1453
  }
1326
- .h-form-file-thumbnails {
1454
+ .formstrap-file-thumbnails {
1327
1455
  --fs-file-spacer-2: calc(1rem * .5);
1328
1456
  position: relative;
1329
1457
  display: flex;
1330
1458
  flex-wrap: wrap;
1331
1459
  gap: var(--fs-file-spacer-2);
1332
1460
  }
1333
- .h-form-file-thumbnails a,
1334
- .h-form-file-thumbnails a:link,
1335
- .h-form-file-thumbnails a:hover {
1461
+ .formstrap-file-thumbnails a,
1462
+ .formstrap-file-thumbnails a:link,
1463
+ .formstrap-file-thumbnails a:hover {
1336
1464
  color: inherit;
1337
1465
  text-decoration: inherit;
1338
1466
  }
1339
- .h-form-file-thumbnail {
1467
+ .formstrap-file-thumbnail {
1340
1468
  position: relative;
1341
1469
  pointer-events: initial !important;
1342
1470
  display: flex;
1343
1471
  }
1344
- .h-form-file-thumbnail:hover .h-form-file-thumbnail-actions {
1472
+ .formstrap-file-thumbnail:hover .formstrap-file-thumbnail-actions {
1345
1473
  display: block;
1346
1474
  }
1347
- .h-form-file-thumbnail-actions {
1475
+ .formstrap-file-thumbnail-actions {
1348
1476
  display: none;
1349
1477
  }
1350
- .h-form-file-thumbnail-remove {
1478
+ .formstrap-file-thumbnail-remove {
1351
1479
  position: absolute;
1352
1480
  top: 5px;
1353
1481
  right: 5px;
@@ -1362,10 +1490,10 @@ span.flatpickr-weekday {
1362
1490
  z-index: 3;
1363
1491
  cursor: pointer;
1364
1492
  }
1365
- .h-form-file-thumbnail-remove:hover {
1493
+ .formstrap-file-thumbnail-remove:hover {
1366
1494
  opacity: 0.9;
1367
1495
  }
1368
- .h-form-file-thumbnail-edit {
1496
+ .formstrap-file-thumbnail-edit {
1369
1497
  position: absolute;
1370
1498
  top: 5px;
1371
1499
  right: 35px;
@@ -1380,57 +1508,47 @@ span.flatpickr-weekday {
1380
1508
  cursor: pointer;
1381
1509
  color: white !important;
1382
1510
  }
1383
- .h-form-file-thumbnail-edit:hover {
1511
+ .formstrap-file-thumbnail-edit:hover {
1384
1512
  background-color: rgb(0, 0, 0);
1385
1513
  }
1386
- .h-form-media-validation {
1387
- opacity: 0;
1388
- width: 100px;
1389
- height: 0;
1390
- padding: 0;
1391
- margin: 0;
1392
- position: absolute;
1393
- bottom: 0;
1394
- left: 0;
1395
- }
1396
- .repeater {
1514
+ .formstrap-repeater {
1397
1515
  position: relative;
1398
1516
  }
1399
- .repeater-row {
1517
+ .formstrap-repeater-row {
1400
1518
  position: relative;
1401
1519
  }
1402
- .repeater-row:hover .repeater-row-remove {
1520
+ .formstrap-repeater-row:hover .formstrap-repeater-row-remove {
1403
1521
  visibility: visible;
1404
1522
  }
1405
- .repeater-row:hover .repeater-row-add {
1523
+ .formstrap-repeater-row:hover .formstrap-repeater-row-add {
1406
1524
  visibility: visible;
1407
1525
  }
1408
- .repeater-row:hover .repeater-row-handle {
1526
+ .formstrap-repeater-row:hover .formstrap-repeater-row-handle {
1409
1527
  visibility: visible;
1410
1528
  }
1411
- .repeater-row-remove {
1529
+ .formstrap-repeater-row-remove {
1412
1530
  position: absolute;
1413
1531
  top: calc(50% - 17px);
1414
1532
  right: -22px;
1415
1533
  z-index: 2;
1416
1534
  visibility: hidden;
1417
1535
  }
1418
- .repeater-row-remove i.bi {
1536
+ .formstrap-repeater-row-remove i.bi {
1419
1537
  background: white;
1420
1538
  border-radius: 50%;
1421
1539
  }
1422
- .repeater-row-add {
1540
+ .formstrap-repeater-row-add {
1423
1541
  position: absolute;
1424
1542
  top: calc(100% - 18px);
1425
1543
  right: calc(50% - 17px);
1426
1544
  z-index: 2;
1427
1545
  visibility: hidden;
1428
1546
  }
1429
- .repeater-row-add i.bi {
1547
+ .formstrap-repeater-row-add i.bi {
1430
1548
  background: white;
1431
1549
  border-radius: 50%;
1432
1550
  }
1433
- .repeater-row-handle {
1551
+ .formstrap-repeater-row-handle {
1434
1552
  position: absolute;
1435
1553
  top: 0;
1436
1554
  left: 0;
@@ -1452,109 +1570,3 @@ input[type=search] {
1452
1570
  .form-floating input[type=search] ~ label {
1453
1571
  padding-left: 35px;
1454
1572
  }
1455
- html {
1456
- height: 100%;
1457
- }
1458
- .list-group-item {
1459
- --fs-list-group-active-color: #fff;
1460
- }
1461
- .list-group-item.active .text-muted {
1462
- color: var(--fs-list-group-active-color) !important;
1463
- }
1464
- mark {
1465
- --fs-mark-padding: .1875em;
1466
- padding: 0;
1467
- box-shadow: 0 var(--fs-mark-padding) 0 var(--bs-yellow), 0 calc(-1 * var(--fs-mark-padding)) 0 var(--bs-yellow);
1468
- }
1469
- .btn-link {
1470
- text-decoration: none;
1471
- }
1472
- .h-btn-light {
1473
- color: var(--bs-gray-600);
1474
- background-color: var(--bs-gray-200);
1475
- box-shadow: none;
1476
- }
1477
- .h-btn-outline-light {
1478
- background-color: var(--bs-white);
1479
- color: var(--bs-gray-600);
1480
- border-color: var(--bs-gray-300);
1481
- box-shadow: none;
1482
- }
1483
- .h-btn-outline-light:hover,
1484
- .h-btn-outline-light:focus {
1485
- background-color: var(--bs-white);
1486
- border-color: var(--bs-gray-300);
1487
- }
1488
- .h-btn-outline-transparent {
1489
- color: var(--bs-gray-600);
1490
- border: 1px solid var(--bs-gray-300);
1491
- box-shadow: none;
1492
- }
1493
- .h-dropzone {
1494
- --fs-input-btn-focus-blur: 0;
1495
- --fs-input-btn-focus-width: .25rem;
1496
- --fs-input-btn-focus-color-opacity: .25;
1497
- position: relative;
1498
- border: 2px dashed var(--bs-gray-400);
1499
- border-radius: var(--bs-border-radius);
1500
- }
1501
- .h-dropzone > *:not(.form-control) {
1502
- margin: 0.5rem;
1503
- pointer-events: none;
1504
- z-index: 2;
1505
- }
1506
- .h-dropzone.dragover,
1507
- .h-dropzone:hover {
1508
- border-color: var(--bs-gray-400);
1509
- }
1510
- .h-dropzone.dragover input[type=file] {
1511
- z-index: 3;
1512
- }
1513
- .h-dropzone.focus,
1514
- .h-dropzone.dragover {
1515
- border-color: var(--bs-primary-border-subtle);
1516
- outline: 0;
1517
- box-shadow: var(--bs-box-shadow);
1518
- }
1519
- .h-dropzone.focus.is-valid,
1520
- .h-dropzone.dragover.is-valid {
1521
- border-color: var(--bs-success);
1522
- box-shadow: 0 0 var(--fs-input-btn-focus-blur) var(--fs-input-btn-focus-width) rgba(var(--bs-success), var(--fs-input-btn-focus-color-opacity));
1523
- }
1524
- .h-dropzone.focus.is-invalid,
1525
- .h-dropzone.dragover.is-invalid {
1526
- border-color: var(--bs-danger);
1527
- box-shadow: 0 0 var(--fs-input-btn-focus-blur) var(--fs-input-btn-focus-width) rgba(var(--bs-danger), var(--fs-input-btn-focus-color-opacity));
1528
- }
1529
- .h-dropzone .form-control {
1530
- position: absolute;
1531
- top: 0;
1532
- left: 0;
1533
- width: 100%;
1534
- height: 100%;
1535
- z-index: 1;
1536
- border: none;
1537
- box-shadow: none;
1538
- text-indent: -100vw;
1539
- color: transparent;
1540
- background: none;
1541
- }
1542
- .h-dropzone.is-invalid {
1543
- border-color: var(--bs-danger);
1544
- }
1545
- .h-dropzone.is-valid {
1546
- border-color: var(--bs-success);
1547
- }
1548
- .h-dropzone-placeholder {
1549
- color: var(--bs-gray-600);
1550
- display: flex;
1551
- align-items: center;
1552
- justify-content: center;
1553
- width: 100%;
1554
- }
1555
- .media-modal .h-thumbnail {
1556
- cursor: pointer;
1557
- }
1558
- .media-modal input[type=checkbox]:checked + label .h-thumbnail {
1559
- background-color: #0d6efd;
1560
- }
@@ -5,7 +5,11 @@
5
5
  @import "formstrap/vendor/flatpickr";
6
6
 
7
7
  // Formstrap
8
- @import "formstrap/forms";
9
8
  @import "formstrap/general";
10
9
  @import "formstrap/utilities";
10
+ @import "formstrap/shared";
11
11
  @import "formstrap/media";
12
+ @import "formstrap/autocomplete";
13
+ @import "formstrap/file";
14
+ @import "formstrap/repeater";
15
+ @import "formstrap/search";
@@ -34,14 +34,6 @@ class Formstrap::MediaController < FormstrapController
34
34
  @blob = ActiveStorage::Blob.find(params[:id])
35
35
  end
36
36
 
37
- def update
38
- @blob = ActiveStorage::Blob.find(params[:id])
39
- media_item_params[:filename] = media_item_params[:filename] + "." + @blob.filename.to_s.rpartition(".").last
40
- if @blob.update(media_item_params)
41
- flash.now[:notice] = t("admin.flash.updated", name: @blob.filename)
42
- end
43
- end
44
-
45
37
  def thumbnail
46
38
  @blob = ActiveStorage::Blob.find(params[:id])
47
39
  end
@@ -52,6 +44,7 @@ class Formstrap::MediaController < FormstrapController
52
44
  blobs = filter_unattached(blobs)
53
45
  blobs = filter_by_mimetype(blobs, media_params[:mimetype]) if media_params[:mimetype].present?
54
46
  blobs = filter_excluded_models(blobs, media_params[:exclude_models]) if media_params[:exclude_models].present?
47
+ blobs = filter_search(blobs, media_params[:search]) if media_params[:search].present?
55
48
  blobs
56
49
  end
57
50
 
@@ -67,6 +60,10 @@ class Formstrap::MediaController < FormstrapController
67
60
  blobs.not_attached_to(model_names)
68
61
  end
69
62
 
63
+ def filter_search(blobs, string)
64
+ blobs.search(string)
65
+ end
66
+
70
67
  def sort(blobs)
71
68
  blobs.order(created_at: :desc)
72
69
  end
@@ -77,6 +74,7 @@ class Formstrap::MediaController < FormstrapController
77
74
  :mimetype,
78
75
  :min,
79
76
  :name,
77
+ :search,
80
78
  :page,
81
79
  :page_start,
82
80
  :per_page,
@@ -85,8 +83,4 @@ class Formstrap::MediaController < FormstrapController
85
83
  exclude_models: []
86
84
  )
87
85
  end
88
-
89
- def media_item_params
90
- params.require(:blob).permit!
91
- end
92
86
  end