formatic 0.2.3 → 0.2.4
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/javascript/declarations/date.d.ts +9 -0
- data/app/assets/javascript/declarations/file.d.ts +14 -0
- data/app/assets/javascript/declarations/select.d.ts +15 -0
- data/app/assets/javascript/declarations/setup.d.ts +3 -0
- data/app/assets/javascript/declarations/stepper.d.ts +12 -0
- data/app/assets/javascript/declarations/string.d.ts +14 -0
- data/app/assets/javascript/declarations/textarea.d.ts +15 -0
- data/app/assets/javascript/declarations/toggle.d.ts +8 -0
- data/app/assets/javascript/formatic/date.js +30 -0
- data/app/assets/javascript/formatic/date.js.map +1 -0
- data/app/assets/javascript/formatic/file.js +83 -0
- data/app/assets/javascript/formatic/file.js.map +1 -0
- data/app/assets/javascript/formatic/select.js +81 -0
- data/app/assets/javascript/formatic/select.js.map +1 -0
- data/app/assets/javascript/formatic/setup.js +42 -0
- data/app/assets/javascript/formatic/setup.js.map +1 -0
- data/app/assets/javascript/formatic/stepper.js +67 -0
- data/app/assets/javascript/formatic/stepper.js.map +1 -0
- data/app/assets/javascript/formatic/string.js +71 -0
- data/app/assets/javascript/formatic/string.js.map +1 -0
- data/app/assets/javascript/formatic/textarea.js +81 -0
- data/app/assets/javascript/formatic/textarea.js.map +1 -0
- data/app/assets/javascript/formatic/toggle.js +63 -0
- data/app/assets/javascript/formatic/toggle.js.map +1 -0
- data/app/assets/javascript/src/date.ts +41 -0
- data/app/assets/javascript/src/file.ts +101 -0
- data/app/assets/javascript/src/select.ts +101 -0
- data/app/assets/javascript/src/setup.js +44 -0
- data/app/assets/javascript/src/stepper.ts +80 -0
- data/app/assets/javascript/src/string.ts +89 -0
- data/app/assets/javascript/src/textarea.ts +101 -0
- data/app/assets/javascript/src/toggle.ts +76 -0
- data/app/assets/stylesheets/formatic/components/checklist.css +1 -0
- data/app/assets/stylesheets/formatic/components/checklist.css.map +1 -0
- data/app/assets/stylesheets/formatic/components/date.css +17 -0
- data/app/assets/stylesheets/formatic/components/date.sass +2 -2
- data/app/assets/stylesheets/formatic/components/select.css +17 -0
- data/app/assets/stylesheets/formatic/components/stepper.css +17 -0
- data/app/assets/stylesheets/formatic/components/string.css +17 -0
- data/app/assets/stylesheets/formatic/components/textarea.css +17 -0
- data/app/assets/stylesheets/formatic/components/time.css +17 -0
- data/app/assets/stylesheets/formatic/components/toggle.css +17 -0
- data/app/assets/stylesheets/formatic/components/wrapper.css +17 -0
- data/app/assets/stylesheets/formatic/formatic.css +450 -0
- data/app/assets/stylesheets/formatic/formatic.css.map +1 -0
- data/app/assets/stylesheets/formatic/generics/flip.css +1 -0
- data/app/assets/stylesheets/formatic/generics/flip.css.map +1 -0
- data/app/assets/stylesheets/formatic/scopes/form.css +17 -0
- data/app/assets/stylesheets/formatic/utilities/container.css +1 -0
- data/app/assets/stylesheets/formatic/utilities/container.css.map +1 -0
- data/app/assets/stylesheets/formatic/vendor.css +1107 -0
- data/app/assets/stylesheets/formatic/vendor.css.map +1 -0
- data/app/assets/stylesheets/formatic.css +18 -0
- data/app/assets/stylesheets/formatic.sass +17 -0
- data/app/assets/stylesheets/vendor.css +5 -0
- data/app/assets/stylesheets/vendor.css.map +1 -0
- data/app/assets/stylesheets/vendor.sass +1 -0
- data/app/components/formatic/base.rb +4 -1
- data/app/components/formatic/date.rb +1 -1
- data/app/components/formatic/file.rb +21 -0
- data/app/components/formatic/files.rb +8 -0
- data/app/components/formatic/select.rb +1 -1
- data/app/components/formatic/time.rb +3 -3
- data/config/importmap.rb +11 -0
- data/lib/formatic/choices/options.rb +1 -1
- data/lib/formatic/choices/records.rb +1 -1
- data/lib/formatic/engine.rb +12 -0
- data/lib/formatic/version.rb +1 -1
- data/lib/formatic/wrappers/required.rb +1 -1
- data/lib/formatic.rb +2 -1
- metadata +77 -17
- data/app/assets/javascript/formatic/components/date.ts +0 -54
- data/app/assets/javascript/formatic/components/select.ts +0 -113
- data/app/assets/javascript/formatic/components/stepper.ts +0 -89
- data/app/assets/javascript/formatic/components/string.ts +0 -103
- data/app/assets/javascript/formatic/components/textarea.ts +0 -112
- data/app/assets/javascript/formatic/components/toggle.ts +0 -89
- data/app/assets/javascript/formatic.js +0 -446
- data/app/assets/javascript/formatic.js.map +0 -1
- data/app/assets/stylesheets/formatic/index.sass +0 -17
- data/app/assets/stylesheets/formatic/package.json +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 997cd7cec3d24e119ab4efa2338da4c24af6cc10a0af49ba868368cb451bb270
|
|
4
|
+
data.tar.gz: 7b92e274989248ab7bd9ab9987424859068cc75bbfdb377f9ce18ef31f858102
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4206b2d92050be2c8acca35c6fd60ce6ead28ed816683b7bbe41b6ad22b9a5842610cc5a93d6aceb17766dea1edf147d1ae29508e43163d308220c125b93fce0
|
|
7
|
+
data.tar.gz: 8b4bf4386ec76f1770548d38c8d9d6d80052a77a19b70639d0b7ce137de613f199ab621fdcd5ecab47e478a60306d8f7205d3c39a00a37effeb1713a11ce1b03
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class FormaticFile {
|
|
2
|
+
private el;
|
|
3
|
+
private url;
|
|
4
|
+
private pond;
|
|
5
|
+
private busyStatuses;
|
|
6
|
+
constructor(el: HTMLElement);
|
|
7
|
+
private setupBindings;
|
|
8
|
+
private updateSubmit;
|
|
9
|
+
private enableSubmit;
|
|
10
|
+
private disableSubmit;
|
|
11
|
+
private get input();
|
|
12
|
+
private get form();
|
|
13
|
+
private get submitButtons();
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class Select {
|
|
2
|
+
private el;
|
|
3
|
+
private timeoutId;
|
|
4
|
+
constructor(el: HTMLElement);
|
|
5
|
+
private setupBindings;
|
|
6
|
+
private actionSave;
|
|
7
|
+
private actionSaveNow;
|
|
8
|
+
private guiWaitingForSave;
|
|
9
|
+
private guiSaved;
|
|
10
|
+
private guiFailed;
|
|
11
|
+
private get autoSubmit();
|
|
12
|
+
private save;
|
|
13
|
+
private debounce;
|
|
14
|
+
private autosize;
|
|
15
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class Stepper {
|
|
2
|
+
private el;
|
|
3
|
+
constructor(el: HTMLElement);
|
|
4
|
+
private setupBindings;
|
|
5
|
+
private increment;
|
|
6
|
+
private decrement;
|
|
7
|
+
private get minimum();
|
|
8
|
+
private get number();
|
|
9
|
+
private get incrementButtons();
|
|
10
|
+
private get decrementButtons();
|
|
11
|
+
private get numberInput();
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class String {
|
|
2
|
+
private el;
|
|
3
|
+
private timeoutId;
|
|
4
|
+
constructor(el: HTMLElement);
|
|
5
|
+
private setupBindings;
|
|
6
|
+
private actionSave;
|
|
7
|
+
private actionSaveNow;
|
|
8
|
+
private guiWaitingForSave;
|
|
9
|
+
private guiSaved;
|
|
10
|
+
private guiFailed;
|
|
11
|
+
private get autoSubmit();
|
|
12
|
+
private save;
|
|
13
|
+
private debounce;
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class Textarea {
|
|
2
|
+
private el;
|
|
3
|
+
private timeoutId;
|
|
4
|
+
constructor(el: HTMLElement);
|
|
5
|
+
private setupBindings;
|
|
6
|
+
private actionSave;
|
|
7
|
+
private actionSaveNow;
|
|
8
|
+
private guiWaitingForSave;
|
|
9
|
+
private guiSaved;
|
|
10
|
+
private guiFailed;
|
|
11
|
+
private get autoSubmit();
|
|
12
|
+
private save;
|
|
13
|
+
private debounce;
|
|
14
|
+
private autosize;
|
|
15
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class Date {
|
|
2
|
+
constructor(el) {
|
|
3
|
+
this.el = el;
|
|
4
|
+
this.setupBindings();
|
|
5
|
+
}
|
|
6
|
+
setupBindings() {
|
|
7
|
+
this.shortcutButtons.forEach((el) => {
|
|
8
|
+
el.addEventListener('click', (event) => {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
const shortcut = event.currentTarget;
|
|
11
|
+
this.dayInput.value = shortcut.dataset.day;
|
|
12
|
+
this.monthInput.value = shortcut.dataset.month;
|
|
13
|
+
this.yearInput.value = shortcut.dataset.year;
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
get dayInput() {
|
|
18
|
+
return this.el.querySelector('.js-formatic-date__day');
|
|
19
|
+
}
|
|
20
|
+
get monthInput() {
|
|
21
|
+
return this.el.querySelector('.js-formatic-date__month');
|
|
22
|
+
}
|
|
23
|
+
get yearInput() {
|
|
24
|
+
return this.el.querySelector('.js-formatic-date__year');
|
|
25
|
+
}
|
|
26
|
+
get shortcutButtons() {
|
|
27
|
+
return this.el.querySelectorAll('.js-formatic-date__shortcut');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,IAAI;IAGf,YAAY,EAAe;QACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAClC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrC,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,MAAM,QAAQ,GAAqB,KAAK,CAAC,aAAa,CAAA;gBAEtD,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAA;gBAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAA;gBAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAA;YAC9C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAMD,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAoB,wBAAwB,CAAC,CAAA;IAC3E,CAAC;IAED,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAoB,0BAA0B,CAAC,CAAA;IAC7E,CAAC;IAED,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAoB,yBAAyB,CAAC,CAAA;IAC5E,CAAC;IAED,IAAY,eAAe;QACzB,OAAO,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,6BAA6B,CAAC,CAAA;IAC7E,CAAC;CACF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as FilePond from "filepond";
|
|
2
|
+
import { DirectUpload } from "@rails/activestorage";
|
|
3
|
+
export class FormaticFile {
|
|
4
|
+
constructor(el) {
|
|
5
|
+
this.busyStatuses = new Set([
|
|
6
|
+
FilePond.FileStatus.LOADING,
|
|
7
|
+
FilePond.FileStatus.PROCESSING_QUEUED,
|
|
8
|
+
FilePond.FileStatus.PROCESSING,
|
|
9
|
+
]);
|
|
10
|
+
this.el = el;
|
|
11
|
+
this.url = this.input.dataset.directUploadUrl;
|
|
12
|
+
this.setupBindings();
|
|
13
|
+
}
|
|
14
|
+
setupBindings() {
|
|
15
|
+
this.pond = FilePond.create(this.input, {
|
|
16
|
+
credits: false,
|
|
17
|
+
onwarning: () => this.updateSubmit(),
|
|
18
|
+
onerror: () => this.updateSubmit(),
|
|
19
|
+
onaddfilestart: () => this.updateSubmit(),
|
|
20
|
+
onaddfileprogress: () => this.updateSubmit(),
|
|
21
|
+
onaddfile: () => this.updateSubmit(),
|
|
22
|
+
onprocessfilestart: () => this.updateSubmit(),
|
|
23
|
+
onprocessfileprogress: () => this.updateSubmit(),
|
|
24
|
+
onprocessfileabort: () => this.updateSubmit(),
|
|
25
|
+
onprocessfilerevert: () => this.updateSubmit(),
|
|
26
|
+
onprocessfile: () => this.updateSubmit(),
|
|
27
|
+
onprocessfiles: () => this.updateSubmit(),
|
|
28
|
+
onremovefile: () => this.updateSubmit(),
|
|
29
|
+
onpreparefile: () => this.updateSubmit(),
|
|
30
|
+
onupdatefiles: () => this.updateSubmit(),
|
|
31
|
+
onactivatefile: () => this.updateSubmit(),
|
|
32
|
+
onreorderfiles: () => this.updateSubmit(),
|
|
33
|
+
server: {
|
|
34
|
+
process: (fieldName, file, _metadata, load, error, progress, abort, transfer, options) => {
|
|
35
|
+
const uploader = new DirectUpload(file, this.url, {
|
|
36
|
+
directUploadWillStoreFileWithXHR: (request) => {
|
|
37
|
+
request.upload.addEventListener('progress', event => progress(event.lengthComputable, event.loaded, event.total));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
uploader.create((errorResponse, blob) => {
|
|
41
|
+
if (errorResponse) {
|
|
42
|
+
error(`Something went wrong: ${errorResponse}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
load(blob.signed_id);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
abort: () => abort()
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
headers: {
|
|
53
|
+
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]')?.content
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
updateSubmit() {
|
|
59
|
+
const files = this.pond.getFiles();
|
|
60
|
+
const busyFiles = files.some(f => this.busyStatuses.has(f.status));
|
|
61
|
+
busyFiles ? this.disableSubmit() : this.enableSubmit();
|
|
62
|
+
}
|
|
63
|
+
enableSubmit() {
|
|
64
|
+
this.submitButtons.forEach((button) => {
|
|
65
|
+
button.disabled = false;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
disableSubmit() {
|
|
69
|
+
this.submitButtons.forEach((button) => {
|
|
70
|
+
button.disabled = true;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
get input() {
|
|
74
|
+
return this.el.querySelector('.js-formatic-file__input');
|
|
75
|
+
}
|
|
76
|
+
get form() {
|
|
77
|
+
return this.el.closest('form');
|
|
78
|
+
}
|
|
79
|
+
get submitButtons() {
|
|
80
|
+
return this.form.querySelectorAll('[type="submit"]');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import autosize from "autosize";
|
|
2
|
+
export class Select {
|
|
3
|
+
constructor(el) {
|
|
4
|
+
this.el = el;
|
|
5
|
+
this.setupBindings();
|
|
6
|
+
}
|
|
7
|
+
setupBindings() {
|
|
8
|
+
this.autosize();
|
|
9
|
+
this.el.addEventListener('input', (event) => {
|
|
10
|
+
event.preventDefault();
|
|
11
|
+
if (this.autoSubmit)
|
|
12
|
+
this.actionSave();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
actionSave() {
|
|
16
|
+
this.guiWaitingForSave();
|
|
17
|
+
this.debounce(this.actionSaveNow.bind(this))();
|
|
18
|
+
}
|
|
19
|
+
actionSaveNow() {
|
|
20
|
+
console.debug("Saving select...");
|
|
21
|
+
this.el.classList.remove('is-loading');
|
|
22
|
+
this.el.classList.add('is-saved');
|
|
23
|
+
this.save();
|
|
24
|
+
}
|
|
25
|
+
guiWaitingForSave() {
|
|
26
|
+
this.el.classList.add('is-loading');
|
|
27
|
+
this.el.classList.remove('is-saved');
|
|
28
|
+
this.el.classList.remove('is-failed');
|
|
29
|
+
}
|
|
30
|
+
guiSaved() {
|
|
31
|
+
this.el.classList.remove('is-loading');
|
|
32
|
+
this.el.classList.add('is-saved');
|
|
33
|
+
this.el.classList.remove('is-failed');
|
|
34
|
+
}
|
|
35
|
+
guiFailed() {
|
|
36
|
+
this.el.classList.remove('is-loading');
|
|
37
|
+
this.el.classList.remove('is-saved');
|
|
38
|
+
this.el.classList.add('is-failed');
|
|
39
|
+
}
|
|
40
|
+
get autoSubmit() {
|
|
41
|
+
return this.el.classList.contains('is-autosubmit');
|
|
42
|
+
}
|
|
43
|
+
save() {
|
|
44
|
+
const form = this.el.closest('form');
|
|
45
|
+
const data = new FormData(form);
|
|
46
|
+
data.set('_method', 'patch');
|
|
47
|
+
fetch(form.action, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: { 'Accept': 'text/javascript' },
|
|
50
|
+
body: data
|
|
51
|
+
})
|
|
52
|
+
.then(response => {
|
|
53
|
+
if (response.status == 201) {
|
|
54
|
+
console.debug('Select content saved');
|
|
55
|
+
this.guiSaved();
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.debug('Select content not saved');
|
|
59
|
+
this.guiFailed();
|
|
60
|
+
}
|
|
61
|
+
}).catch(err => {
|
|
62
|
+
console.warn(err);
|
|
63
|
+
console.debug('Failed badly to save');
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
debounce(fn) {
|
|
67
|
+
return () => {
|
|
68
|
+
clearTimeout(this.timeoutId);
|
|
69
|
+
this.timeoutId = setTimeout(() => fn(), 1000);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
autosize() {
|
|
73
|
+
try {
|
|
74
|
+
autosize(this.el);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.warn(`Formatic is missing the autosize library`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../src/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Date } from 'formatic/date';
|
|
2
|
+
import { Select } from 'formatic/select';
|
|
3
|
+
import { Stepper } from 'formatic/stepper';
|
|
4
|
+
import { String } from 'formatic/string';
|
|
5
|
+
import { Textarea } from 'formatic/textarea';
|
|
6
|
+
import { Toggle } from 'formatic/toggle';
|
|
7
|
+
import { FormaticFile } from 'formatic/file';
|
|
8
|
+
export var Formatic;
|
|
9
|
+
(function (Formatic) {
|
|
10
|
+
function setup() {
|
|
11
|
+
document.querySelectorAll('.js-formatic-file').forEach((el) => {
|
|
12
|
+
console.debug('[Formatic] Instantiating File...');
|
|
13
|
+
new FormaticFile(el);
|
|
14
|
+
});
|
|
15
|
+
document.querySelectorAll('.js-formatic-date').forEach((el) => {
|
|
16
|
+
console.debug('[Formatic] Instantiating Date...');
|
|
17
|
+
new Date(el);
|
|
18
|
+
});
|
|
19
|
+
document.querySelectorAll('.js-formatic-select').forEach((el) => {
|
|
20
|
+
console.debug('[Formatic] Instantiating Select...');
|
|
21
|
+
new Select(el);
|
|
22
|
+
});
|
|
23
|
+
document.querySelectorAll('.js-formatic-stepper').forEach((el) => {
|
|
24
|
+
console.debug('[Formatic] Instantiating Stepper...');
|
|
25
|
+
new Stepper(el);
|
|
26
|
+
});
|
|
27
|
+
document.querySelectorAll('.js-formatic-string').forEach((el) => {
|
|
28
|
+
console.debug('[Formatic] Instantiating String...');
|
|
29
|
+
new String(el);
|
|
30
|
+
});
|
|
31
|
+
document.querySelectorAll('.js-formatic-textarea').forEach((el) => {
|
|
32
|
+
console.debug('[Formatic] Instantiating Textarea...');
|
|
33
|
+
new Textarea(el);
|
|
34
|
+
});
|
|
35
|
+
document.querySelectorAll('.js-formatic-toggle').forEach((el) => {
|
|
36
|
+
console.debug('[Formatic] Instantiating Toggle...');
|
|
37
|
+
new Toggle(el);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
Formatic.setup = setup;
|
|
41
|
+
})(Formatic || (Formatic = {}));
|
|
42
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,KAAW,QAAQ,CAqCxB;AArCD,WAAiB,QAAQ;IACvB,SAAgB,KAAK;QACnB,QAAQ,CAAC,gBAAgB,CAAc,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACzE,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACjD,IAAI,YAAY,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACzE,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;YACjD,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3E,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACnD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC5E,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;YACpD,IAAI,OAAO,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3E,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACnD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC7E,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACrD,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAA;QAClB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAC3E,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACnD,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC;IAnCe,cAAK,QAmCpB,CAAA;AACH,CAAC,EArCgB,QAAQ,KAAR,QAAQ,QAqCxB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export class Stepper {
|
|
2
|
+
constructor(el) {
|
|
3
|
+
this.el = el;
|
|
4
|
+
this.setupBindings();
|
|
5
|
+
}
|
|
6
|
+
setupBindings() {
|
|
7
|
+
this.incrementButtons.forEach((el) => {
|
|
8
|
+
el.addEventListener('click', (event) => {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
this.increment();
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
this.decrementButtons.forEach((el) => {
|
|
14
|
+
el.addEventListener('click', (event) => {
|
|
15
|
+
event.preventDefault();
|
|
16
|
+
this.decrement();
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
this.numberInput.addEventListener('click', (event) => {
|
|
20
|
+
this.numberInput.select();
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
increment() {
|
|
24
|
+
if (!this.number && this.number != 0) {
|
|
25
|
+
this.numberInput.value = Math.max(...[0, this.minimum]).toString();
|
|
26
|
+
}
|
|
27
|
+
else if (isNaN(this.number)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
else if (this.number < this.minimum) {
|
|
31
|
+
this.numberInput.value = this.minimum.toString();
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.numberInput.value = (this.number + 1).toString();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
decrement() {
|
|
38
|
+
if (!this.number && this.number != 0) {
|
|
39
|
+
this.numberInput.value = Math.max(...[-1, this.minimum]).toString();
|
|
40
|
+
}
|
|
41
|
+
else if (isNaN(this.number)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
else if (this.number <= this.minimum) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.numberInput.value = (this.number - 1).toString();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
get minimum() {
|
|
52
|
+
return parseInt(this.numberInput.min);
|
|
53
|
+
}
|
|
54
|
+
get number() {
|
|
55
|
+
return parseInt(this.numberInput.value);
|
|
56
|
+
}
|
|
57
|
+
get incrementButtons() {
|
|
58
|
+
return this.el.querySelectorAll('.js-formatic-stepper__increment');
|
|
59
|
+
}
|
|
60
|
+
get decrementButtons() {
|
|
61
|
+
return this.el.querySelectorAll('.js-formatic-stepper__decrement');
|
|
62
|
+
}
|
|
63
|
+
get numberInput() {
|
|
64
|
+
return this.el.querySelector('.js-formatic-stepper__number');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=stepper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.js","sourceRoot":"","sources":["../src/stepper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export class String {
|
|
2
|
+
constructor(el) {
|
|
3
|
+
this.el = el;
|
|
4
|
+
this.setupBindings();
|
|
5
|
+
}
|
|
6
|
+
setupBindings() {
|
|
7
|
+
this.el.addEventListener('input', (event) => {
|
|
8
|
+
event.preventDefault();
|
|
9
|
+
if (this.autoSubmit)
|
|
10
|
+
this.actionSave();
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
actionSave() {
|
|
14
|
+
this.guiWaitingForSave();
|
|
15
|
+
this.debounce(this.actionSaveNow.bind(this))();
|
|
16
|
+
}
|
|
17
|
+
actionSaveNow() {
|
|
18
|
+
console.debug("Saving text input...");
|
|
19
|
+
this.el.classList.remove('is-loading');
|
|
20
|
+
this.el.classList.add('is-saved');
|
|
21
|
+
this.save();
|
|
22
|
+
}
|
|
23
|
+
guiWaitingForSave() {
|
|
24
|
+
this.el.classList.add('is-loading');
|
|
25
|
+
this.el.classList.remove('is-saved');
|
|
26
|
+
this.el.classList.remove('is-failed');
|
|
27
|
+
}
|
|
28
|
+
guiSaved() {
|
|
29
|
+
this.el.classList.remove('is-loading');
|
|
30
|
+
this.el.classList.add('is-saved');
|
|
31
|
+
this.el.classList.remove('is-failed');
|
|
32
|
+
}
|
|
33
|
+
guiFailed() {
|
|
34
|
+
this.el.classList.remove('is-loading');
|
|
35
|
+
this.el.classList.remove('is-saved');
|
|
36
|
+
this.el.classList.add('is-failed');
|
|
37
|
+
}
|
|
38
|
+
get autoSubmit() {
|
|
39
|
+
return this.el.classList.contains('is-autosubmit');
|
|
40
|
+
}
|
|
41
|
+
save() {
|
|
42
|
+
const form = this.el.closest('form');
|
|
43
|
+
const data = new FormData(form);
|
|
44
|
+
data.set('_method', 'patch');
|
|
45
|
+
fetch(form.action, {
|
|
46
|
+
method: 'POST',
|
|
47
|
+
headers: { 'Accept': 'text/javascript' },
|
|
48
|
+
body: data
|
|
49
|
+
})
|
|
50
|
+
.then(response => {
|
|
51
|
+
if (response.status == 201) {
|
|
52
|
+
console.debug('String content saved');
|
|
53
|
+
this.guiSaved();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.debug('String content not saved');
|
|
57
|
+
this.guiFailed();
|
|
58
|
+
}
|
|
59
|
+
}).catch(err => {
|
|
60
|
+
console.warn(err);
|
|
61
|
+
console.debug('Failed badly to save');
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
debounce(fn) {
|
|
65
|
+
return () => {
|
|
66
|
+
clearTimeout(this.timeoutId);
|
|
67
|
+
this.timeoutId = setTimeout(() => fn(), 1000);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../src/string.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import autosize from "autosize";
|
|
2
|
+
export class Textarea {
|
|
3
|
+
constructor(el) {
|
|
4
|
+
this.el = el;
|
|
5
|
+
this.setupBindings();
|
|
6
|
+
}
|
|
7
|
+
setupBindings() {
|
|
8
|
+
this.autosize();
|
|
9
|
+
this.el.addEventListener('input', (event) => {
|
|
10
|
+
event.preventDefault();
|
|
11
|
+
if (this.autoSubmit)
|
|
12
|
+
this.actionSave();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
actionSave() {
|
|
16
|
+
this.guiWaitingForSave();
|
|
17
|
+
this.debounce(this.actionSaveNow.bind(this))();
|
|
18
|
+
}
|
|
19
|
+
actionSaveNow() {
|
|
20
|
+
console.debug("Saving textarea...");
|
|
21
|
+
this.el.classList.remove('is-loading');
|
|
22
|
+
this.el.classList.add('is-saved');
|
|
23
|
+
this.save();
|
|
24
|
+
}
|
|
25
|
+
guiWaitingForSave() {
|
|
26
|
+
this.el.classList.add('is-loading');
|
|
27
|
+
this.el.classList.remove('is-saved');
|
|
28
|
+
this.el.classList.remove('is-failed');
|
|
29
|
+
}
|
|
30
|
+
guiSaved() {
|
|
31
|
+
this.el.classList.remove('is-loading');
|
|
32
|
+
this.el.classList.add('is-saved');
|
|
33
|
+
this.el.classList.remove('is-failed');
|
|
34
|
+
}
|
|
35
|
+
guiFailed() {
|
|
36
|
+
this.el.classList.remove('is-loading');
|
|
37
|
+
this.el.classList.remove('is-saved');
|
|
38
|
+
this.el.classList.add('is-failed');
|
|
39
|
+
}
|
|
40
|
+
get autoSubmit() {
|
|
41
|
+
return this.el.classList.contains('is-autosubmit');
|
|
42
|
+
}
|
|
43
|
+
save() {
|
|
44
|
+
const form = this.el.closest('form');
|
|
45
|
+
const data = new FormData(form);
|
|
46
|
+
data.set('_method', 'patch');
|
|
47
|
+
fetch(form.action, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: { 'Accept': 'text/javascript' },
|
|
50
|
+
body: data
|
|
51
|
+
})
|
|
52
|
+
.then(response => {
|
|
53
|
+
if (response.status == 201) {
|
|
54
|
+
console.debug('Textarea content saved');
|
|
55
|
+
this.guiSaved();
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
console.debug('Textarea content not saved');
|
|
59
|
+
this.guiFailed();
|
|
60
|
+
}
|
|
61
|
+
}).catch(err => {
|
|
62
|
+
console.warn(err);
|
|
63
|
+
console.debug('Failed badly to save');
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
debounce(fn) {
|
|
67
|
+
return () => {
|
|
68
|
+
clearTimeout(this.timeoutId);
|
|
69
|
+
this.timeoutId = setTimeout(() => fn(), 1000);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
autosize() {
|
|
73
|
+
try {
|
|
74
|
+
autosize(this.el);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.warn(`Formatic is missing the autosize library`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.js","sourceRoot":"","sources":["../src/textarea.ts"],"names":[],"mappings":"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"}
|