formstrap 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|