formstrap 0.4.1 → 0.4.2
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/formstrap/controllers/media_controller.js +39 -20
- data/app/assets/javascripts/formstrap/controllers/select_controller.js +1 -1
- data/app/assets/javascripts/formstrap.js +35 -17
- data/app/assets/stylesheets/formstrap/vendor/overrides/redactor.scss +0 -1
- data/app/assets/stylesheets/formstrap.css +0 -1
- data/app/models/formstrap/media_view.rb +1 -2
- data/app/models/formstrap/redactor_view.rb +0 -2
- data/app/models/formstrap/wysiwyg_view.rb +5 -2
- data/lib/formstrap/version.rb +1 -1
- data/package.json +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee49a6e7a9f068d3403b4ebfd46c19cf07b6c293e8893f1e561e8ae20ed0af77
|
4
|
+
data.tar.gz: f85517d919e6c9360ac31c7f1aa7b8f2ff3705ea31a2a6a76f0b72ae82f58c30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab80f8fd25603f0c9ce6f5ea6c92dc025b62f7b932f0b0e7bd7867bd4432845f902a6f5f7ba6492a6455ae9f3eb93fe411497a9dc2cf346538e3a610a05fd253
|
7
|
+
data.tar.gz: a5db302d1730c5f0cb801ddf248d24a0c5111ec0f8ae6d7aaa24d5a36c0e50913f1939a71df275c47429016162b59e47024a4be0e186e23b661c3393321cb9e4
|
@@ -3,22 +3,20 @@ import { Controller } from '@hotwired/stimulus'
|
|
3
3
|
import Sortable from 'sortablejs'
|
4
4
|
|
5
5
|
export default class extends Controller {
|
6
|
+
static get values () {
|
7
|
+
return {
|
8
|
+
name: String
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
6
12
|
static get targets () {
|
7
13
|
return ['item', 'template', 'thumbnails', 'modalButton', 'placeholder', 'count', 'editButton', 'validationInput']
|
8
14
|
}
|
9
15
|
|
10
16
|
connect () {
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
}
|
15
|
-
})
|
16
|
-
|
17
|
-
// Init sorting
|
18
|
-
if (this.hasSorting()) {
|
19
|
-
this.initSortable()
|
20
|
-
}
|
21
|
-
|
17
|
+
this.randomizeName()
|
18
|
+
this.listenForMediaSelection()
|
19
|
+
this.initializeSorting()
|
22
20
|
this.validate()
|
23
21
|
}
|
24
22
|
|
@@ -48,6 +46,34 @@ export default class extends Controller {
|
|
48
46
|
}
|
49
47
|
|
50
48
|
// Methods
|
49
|
+
randomizeName () {
|
50
|
+
this.nameValue = crypto.randomUUID().substring(0, 8)
|
51
|
+
this.updateModalButtonUrls()
|
52
|
+
}
|
53
|
+
|
54
|
+
updateModalButtonUrls () {
|
55
|
+
this.modalButtonTargets.forEach((button) => {
|
56
|
+
const url = new URL(button.getAttribute('href'))
|
57
|
+
url.searchParams.set('name', this.nameValue)
|
58
|
+
button.setAttribute('href', url.toString())
|
59
|
+
})
|
60
|
+
}
|
61
|
+
|
62
|
+
listenForMediaSelection () {
|
63
|
+
document.addEventListener('mediaSelectionSubmitted', (event) => {
|
64
|
+
if (event.detail.name === this.nameValue) {
|
65
|
+
this.selectItems(event.detail.items)
|
66
|
+
this.updateModalButtonUrls()
|
67
|
+
}
|
68
|
+
})
|
69
|
+
}
|
70
|
+
|
71
|
+
initializeSorting () {
|
72
|
+
if (this.hasSorting()) {
|
73
|
+
this.initSortable()
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
51
77
|
initSortable () {
|
52
78
|
Sortable.create(this.thumbnailsTarget, {
|
53
79
|
handle: '.media-drag-sort-handle',
|
@@ -171,9 +197,8 @@ export default class extends Controller {
|
|
171
197
|
|
172
198
|
createItem (item) {
|
173
199
|
// Copy template
|
174
|
-
const
|
175
|
-
|
176
|
-
this.thumbnailsTarget.insertAdjacentHTML('beforeend', html)
|
200
|
+
const templateHtml = this.templateTarget.innerHTML
|
201
|
+
this.thumbnailsTarget.insertAdjacentHTML('beforeend', templateHtml)
|
177
202
|
|
178
203
|
// Set new values
|
179
204
|
const newItem = this.itemTargets.pop()
|
@@ -192,12 +217,6 @@ export default class extends Controller {
|
|
192
217
|
oldThumbnail.parentNode.replaceChild(newThumbnail, oldThumbnail)
|
193
218
|
}
|
194
219
|
|
195
|
-
randomizeIds (template) {
|
196
|
-
const regex = new RegExp(template.dataset.templateIdRegex, 'g')
|
197
|
-
const randomNumber = crypto.randomUUID().substring(0, 8)
|
198
|
-
return template.innerHTML.replace(regex, randomNumber)
|
199
|
-
}
|
200
|
-
|
201
220
|
removeAllDeselectedItems (items) {
|
202
221
|
this.removeDeselectedItems(items, this.itemTargets)
|
203
222
|
}
|
@@ -11076,18 +11076,18 @@ var sortable_esm_default = Sortable;
|
|
11076
11076
|
|
11077
11077
|
// app/assets/javascripts/formstrap/controllers/media_controller.js
|
11078
11078
|
var media_controller_default = class extends Controller {
|
11079
|
+
static get values() {
|
11080
|
+
return {
|
11081
|
+
name: String
|
11082
|
+
};
|
11083
|
+
}
|
11079
11084
|
static get targets() {
|
11080
11085
|
return ["item", "template", "thumbnails", "modalButton", "placeholder", "count", "editButton", "validationInput"];
|
11081
11086
|
}
|
11082
11087
|
connect() {
|
11083
|
-
|
11084
|
-
|
11085
|
-
|
11086
|
-
}
|
11087
|
-
});
|
11088
|
-
if (this.hasSorting()) {
|
11089
|
-
this.initSortable();
|
11090
|
-
}
|
11088
|
+
this.randomizeName();
|
11089
|
+
this.listenForMediaSelection();
|
11090
|
+
this.initializeSorting();
|
11091
11091
|
this.validate();
|
11092
11092
|
}
|
11093
11093
|
destroy(event) {
|
@@ -11106,6 +11106,30 @@ var media_controller_default = class extends Controller {
|
|
11106
11106
|
button.setAttribute("href", url.toString());
|
11107
11107
|
});
|
11108
11108
|
}
|
11109
|
+
randomizeName() {
|
11110
|
+
this.nameValue = crypto.randomUUID().substring(0, 8);
|
11111
|
+
this.updateModalButtonUrls();
|
11112
|
+
}
|
11113
|
+
updateModalButtonUrls() {
|
11114
|
+
this.modalButtonTargets.forEach((button) => {
|
11115
|
+
const url = new URL(button.getAttribute("href"));
|
11116
|
+
url.searchParams.set("name", this.nameValue);
|
11117
|
+
button.setAttribute("href", url.toString());
|
11118
|
+
});
|
11119
|
+
}
|
11120
|
+
listenForMediaSelection() {
|
11121
|
+
document.addEventListener("mediaSelectionSubmitted", (event) => {
|
11122
|
+
if (event.detail.name === this.nameValue) {
|
11123
|
+
this.selectItems(event.detail.items);
|
11124
|
+
this.updateModalButtonUrls();
|
11125
|
+
}
|
11126
|
+
});
|
11127
|
+
}
|
11128
|
+
initializeSorting() {
|
11129
|
+
if (this.hasSorting()) {
|
11130
|
+
this.initSortable();
|
11131
|
+
}
|
11132
|
+
}
|
11109
11133
|
initSortable() {
|
11110
11134
|
sortable_esm_default.create(this.thumbnailsTarget, {
|
11111
11135
|
handle: ".media-drag-sort-handle",
|
@@ -11197,9 +11221,8 @@ var media_controller_default = class extends Controller {
|
|
11197
11221
|
item.classList.remove("d-none");
|
11198
11222
|
}
|
11199
11223
|
createItem(item) {
|
11200
|
-
const
|
11201
|
-
|
11202
|
-
this.thumbnailsTarget.insertAdjacentHTML("beforeend", html);
|
11224
|
+
const templateHtml = this.templateTarget.innerHTML;
|
11225
|
+
this.thumbnailsTarget.insertAdjacentHTML("beforeend", templateHtml);
|
11203
11226
|
const newItem = this.itemTargets.pop();
|
11204
11227
|
newItem.querySelector('input[name*="[blob_id]"]').value = item.blobId;
|
11205
11228
|
newItem.querySelector('input[name*="[_destroy]"]').value = false;
|
@@ -11211,11 +11234,6 @@ var media_controller_default = class extends Controller {
|
|
11211
11234
|
const newThumbnail = item.thumbnail.cloneNode(true);
|
11212
11235
|
oldThumbnail.parentNode.replaceChild(newThumbnail, oldThumbnail);
|
11213
11236
|
}
|
11214
|
-
randomizeIds(template) {
|
11215
|
-
const regex = new RegExp(template.dataset.templateIdRegex, "g");
|
11216
|
-
const randomNumber = crypto.randomUUID().substring(0, 8);
|
11217
|
-
return template.innerHTML.replace(regex, randomNumber);
|
11218
|
-
}
|
11219
11237
|
removeAllDeselectedItems(items) {
|
11220
11238
|
this.removeDeselectedItems(items, this.itemTargets);
|
11221
11239
|
}
|
@@ -13374,7 +13392,7 @@ var repeater_controller_default = class extends Controller {
|
|
13374
13392
|
var import_tom_select = __toESM(require_tom_select_complete());
|
13375
13393
|
var select_controller_default = class extends Controller {
|
13376
13394
|
connect() {
|
13377
|
-
if (this.element.hasAttribute("multiple")) {
|
13395
|
+
if (this.element.hasAttribute("multiple") || this.element.dataset.tomSelect === "true") {
|
13378
13396
|
this.initTomSelect();
|
13379
13397
|
}
|
13380
13398
|
}
|
@@ -1299,7 +1299,6 @@ span.flatpickr-weekday {
|
|
1299
1299
|
--bs-input-focus-color: var(--bs-body-color);
|
1300
1300
|
}
|
1301
1301
|
.rx-container {
|
1302
|
-
overflow: hidden;
|
1303
1302
|
padding: 0 !important;
|
1304
1303
|
border: var(--bs-border-width) solid var(--bs-border-color);
|
1305
1304
|
border-radius: var(--bs-border-radius);
|
@@ -18,7 +18,6 @@ module Formstrap
|
|
18
18
|
class: ["mb-3", ("form-floating" if float)],
|
19
19
|
data: {
|
20
20
|
controller: "media",
|
21
|
-
name: name,
|
22
21
|
sort: sort,
|
23
22
|
accept: accept,
|
24
23
|
required: required.nil? ? 0 : required
|
@@ -122,7 +121,7 @@ module Formstrap
|
|
122
121
|
end
|
123
122
|
|
124
123
|
def modal_url
|
125
|
-
|
124
|
+
formstrap_media_url(
|
126
125
|
name: name,
|
127
126
|
ids: blob_ids,
|
128
127
|
min: min,
|
@@ -11,13 +11,16 @@ module Formstrap
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def default_options
|
14
|
-
{
|
14
|
+
options = {
|
15
15
|
redactor: {
|
16
16
|
context: !toolbar,
|
17
17
|
extrabar: toolbar,
|
18
|
-
toolbar: toolbar
|
19
18
|
}
|
20
19
|
}
|
20
|
+
|
21
|
+
options[:redactor][:toolbar] = false if @toolbar == false
|
22
|
+
|
23
|
+
options
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
data/lib/formstrap/version.rb
CHANGED
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jef Vlamings
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: An extensive Bootstrap form library to power your Ruby On Rails application.
|
14
14
|
email:
|