@sealcode/sealgen 0.8.14 → 0.8.16

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.
Files changed (49) hide show
  1. package/@types/components/components.d.ts +1 -0
  2. package/@types/components/toggle-modal.d.ts +7 -0
  3. package/@types/forms/controls/controls.d.ts +1 -0
  4. package/@types/forms/controls/multiple-files.d.ts +8 -0
  5. package/@types/forms/controls/multiple-photos.d.ts +18 -0
  6. package/@types/forms/controls/photo.d.ts +1 -0
  7. package/@types/forms/controls/simple-input.d.ts +0 -1
  8. package/@types/forms/controls/tickable.d.ts +1 -1
  9. package/@types/utils/make-slug.d.ts +1 -0
  10. package/@types/utils/render-attributes.d.ts +1 -0
  11. package/@types/utils/utils.d.ts +2 -0
  12. package/lib/components/components.js +1 -0
  13. package/lib/components/components.js.map +1 -1
  14. package/lib/components/toggle-modal.js +50 -0
  15. package/lib/components/toggle-modal.js.map +1 -0
  16. package/lib/forms/controls/controls.js +1 -0
  17. package/lib/forms/controls/controls.js.map +1 -1
  18. package/lib/forms/controls/multiple-files.js +41 -17
  19. package/lib/forms/controls/multiple-files.js.map +1 -1
  20. package/lib/forms/controls/multiple-photos.js +37 -0
  21. package/lib/forms/controls/multiple-photos.js.map +1 -0
  22. package/lib/forms/controls/photo.js +1 -0
  23. package/lib/forms/controls/photo.js.map +1 -1
  24. package/lib/forms/controls/simple-input.js +2 -19
  25. package/lib/forms/controls/simple-input.js.map +1 -1
  26. package/lib/forms/controls/tickable.js +9 -7
  27. package/lib/forms/controls/tickable.js.map +1 -1
  28. package/lib/forms/fields/file.js +2 -3
  29. package/lib/forms/fields/file.js.map +1 -1
  30. package/lib/utils/make-slug.js +10 -0
  31. package/lib/utils/make-slug.js.map +1 -0
  32. package/lib/utils/render-attributes.js +23 -0
  33. package/lib/utils/render-attributes.js.map +1 -0
  34. package/lib/utils/utils.js +12 -0
  35. package/lib/utils/utils.js.map +1 -1
  36. package/package.json +2 -2
  37. package/src/components/components.ts +1 -0
  38. package/src/components/toggle-modal.ts +52 -0
  39. package/src/forms/controls/controls.ts +1 -0
  40. package/src/forms/controls/multiple-files.ts +55 -17
  41. package/src/forms/controls/multiple-photos.ts +44 -0
  42. package/src/forms/controls/photo.ts +1 -0
  43. package/src/forms/controls/simple-input.ts +2 -18
  44. package/src/forms/controls/tickable.ts +16 -8
  45. package/src/forms/fields/file.ts +6 -3
  46. package/src/forms/forms.scss +44 -0
  47. package/src/utils/make-slug.ts +5 -0
  48. package/src/utils/render-attributes.ts +17 -0
  49. package/src/utils/utils.ts +2 -0
@@ -1 +1,2 @@
1
1
  export * from "./tabs";
2
+ export * from "./toggle-modal";
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" />
2
+ import { FlatTemplatable } from "tempstream";
3
+ export declare function toggleModal(options: {
4
+ name: string;
5
+ contentWrapped: (id: string) => FlatTemplatable | Promise<FlatTemplatable>;
6
+ contentUnwrapped: (id: string) => FlatTemplatable | Promise<FlatTemplatable>;
7
+ }): import("stream").Readable;
@@ -24,3 +24,4 @@ export * from "./file";
24
24
  export * from "./photo";
25
25
  export * from "./multiple-files";
26
26
  export * from "./number";
27
+ export * from "./multiple-photos";
@@ -15,6 +15,7 @@ export declare class MultipleFiles extends FormFieldControl {
15
15
  field: MultipleFilesField;
16
16
  options: MultipleFilesOptions;
17
17
  constructor(field: MultipleFilesField, options?: MultipleFilesOptions);
18
+ getClassModifiers(): string[];
18
19
  mount(router: Router): void;
19
20
  deleteFileAssociation(ctx: Context, file_item_id: string): Promise<void>;
20
21
  addFileAssociation(ctx: Context, file: SealiousFile): Promise<void>;
@@ -25,7 +26,14 @@ export declare class MultipleFiles extends FormFieldControl {
25
26
  getReferencingCollection(): Collection;
26
27
  getFileField(): SealiousField | null;
27
28
  extractFileFromItem(item: CollectionItem): Promise<SealiousFile | null>;
29
+ renderFileItemPreview(fileItem: CollectionItem, file: SealiousFile): Promise<FlatTemplatable>;
28
30
  renderFileItem(fileItem: CollectionItem, file: SealiousFile): Promise<FlatTemplatable>;
31
+ renderFileRemoveButton(fileItem: CollectionItem): FlatTemplatable;
29
32
  getFileItems(ctx: Context): Promise<CollectionItem<any>[]>;
33
+ getInputAttributes(): {
34
+ type: string;
35
+ name: string;
36
+ multiple: boolean;
37
+ };
30
38
  renderFrameContent(ctx: Context): Promise<FlatTemplatable>;
31
39
  }
@@ -0,0 +1,18 @@
1
+ import { File as SealiousFile, CollectionItem } from "sealious";
2
+ import { FlatTemplatable } from "tempstream";
3
+ import { MultipleFiles, MultipleFilesOptions } from "./multiple-files";
4
+ import { MultipleFiles as MultipleFilesField } from "../fields/multiple-files";
5
+ import KoaResponsiveImageRouter from "koa-responsive-image-router";
6
+ export declare class MultiplePhotos extends MultipleFiles {
7
+ field: MultipleFilesField;
8
+ imageRouter: KoaResponsiveImageRouter;
9
+ constructor(field: MultipleFilesField, imageRouter: KoaResponsiveImageRouter, options?: MultipleFilesOptions);
10
+ getClassModifiers(): string[];
11
+ getInputAttributes(): {
12
+ accept: string;
13
+ type: string;
14
+ name: string;
15
+ multiple: boolean;
16
+ };
17
+ renderFileItem(fileItem: CollectionItem, file: SealiousFile): Promise<FlatTemplatable>;
18
+ }
@@ -15,6 +15,7 @@ export declare class Photo extends File {
15
15
  filename?: string;
16
16
  }): Promise<FlatTemplatable>;
17
17
  getInputAttributes(ctx: Context, data: Record<string, FormDataValue>, field_prefix: string, form_id: string): Promise<{
18
+ accept: string;
18
19
  onchange: string;
19
20
  }>;
20
21
  }
@@ -24,7 +24,6 @@ export declare class SimpleInput<ParsedValue, Options extends SimpleInputOptions
24
24
  getID(): string;
25
25
  getPlaceholder(): string;
26
26
  getInputAttributes(ctx: Context, data: Record<string, FormDataValue>, field_prefix: string, form_id: string): Promise<Record<string, string | boolean>>;
27
- renderAttributes(attrs: Record<string, string | boolean>): string;
28
27
  postInput(ctx: Context): Promise<FlatTemplatable>;
29
28
  renderInput(ctx: Context, attributes_str: string, data: Record<string, FormDataValue>): Promise<FlatTemplatable>;
30
29
  render<Fields extends Record<string, FormField>>(ctx: Context, data: Record<string, FormDataValue>, _messages: FormMessage[], field_prefix: string, form_id: string, show_errors: boolean): Promise<FlatTemplatable>;
@@ -17,7 +17,7 @@ export declare abstract class Tickable<T extends unknown> extends FormFieldContr
17
17
  type: "checkbox" | "radio";
18
18
  abstract getValueAttribute(ctx: Context, data: Record<string, FormDataValue>, value: T): string;
19
19
  abstract isChecked(ctx: Context, data: Record<string, FormDataValue>, value: T): boolean;
20
- makeInputID(): string;
20
+ makeInputID(ctx: Context, data: Record<string, FormDataValue>, value: T): string;
21
21
  getWrapperClasses(ctx: Context, data: Record<string, FormDataValue>, value: T): string[];
22
22
  render<Fields extends Record<string, FormField>>(ctx: Context, data: Record<string, FormDataValue>, _: unknown[], field_prefix: string, form_id: string, show_field_errors: boolean): Promise<FlatTemplatable>;
23
23
  }
@@ -0,0 +1 @@
1
+ export declare function makeSlug(t: string): string;
@@ -0,0 +1 @@
1
+ export declare function renderAttributes(attrs: Record<string, string | boolean>): string;
@@ -7,3 +7,5 @@ export { exec } from "./exec";
7
7
  export { importPath, curryImportPath } from "./import-path";
8
8
  export { listCollections } from "./list-collections";
9
9
  export { walkDir } from "./walk";
10
+ export * from "./make-slug";
11
+ export * from "./render-attributes";
@@ -11,4 +11,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./tabs"), exports);
14
+ __exportStar(require("./toggle-modal"), exports);
14
15
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/components/components.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAuB"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/components/components.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAuB;AACvB,iDAA+B"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toggleModal = void 0;
4
+ const tempstream_1 = require("tempstream");
5
+ const utils_1 = require("../utils/utils");
6
+ function toggleModal(options) {
7
+ const { contentWrapped, contentUnwrapped, name } = options;
8
+ const id = utils_1.makeSlug(name);
9
+ return tempstream_1.tempstream /* HTML */ `<style>
10
+ .toggle-modal__wrapped {
11
+ display: none;
12
+ }
13
+
14
+ @media (max-width: 960px) {
15
+ .toggle-modal__wrapped {
16
+ display: block;
17
+ }
18
+ .toggle-modal__unwrapped {
19
+ display: none;
20
+ }
21
+
22
+ #${id} {
23
+ display: none;
24
+ }
25
+
26
+ #${id}:checked ~ .toggle-modal__wrapped {
27
+ display: none;
28
+ }
29
+
30
+ #${id}:checked ~ .toggle-modal__unwrapped {
31
+ display: block;
32
+ position: fixed;
33
+ height: 100vh;
34
+ width: 100vw;
35
+ top: 0;
36
+ left: 0;
37
+ background-color: white;
38
+ z-index: 99;
39
+ overflow-y: scroll;
40
+ }
41
+ }
42
+ </style>
43
+ <div class="toggle-modal toggle-modal--${id}">
44
+ <input id="${id}" name="${id}" type="checkbox" autocomplete="off" />
45
+ <div class="toggle-modal__wrapped">${contentWrapped(id)}</div>
46
+ <div class="toggle-modal__unwrapped">${contentUnwrapped(id)}</div>
47
+ </div>`;
48
+ }
49
+ exports.toggleModal = toggleModal;
50
+ //# sourceMappingURL=toggle-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-modal.js","sourceRoot":"","sources":["../../src/components/toggle-modal.ts"],"names":[],"mappings":";;;AAAA,2CAAyD;AACzD,0CAA0C;AAE1C,SAAgB,WAAW,CAAC,OAM3B;IACA,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAC3D,MAAM,EAAE,GAAG,gBAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,uBAAU,CAAA,UAAU,CAAC;;;;;;;;;;;;;OAatB,EAAE;;;;OAIF,EAAE;;;;OAIF,EAAE;;;;;;;;;;;;;2CAakC,EAAE;gBAC7B,EAAE,WAAW,EAAE;wCACS,cAAc,CAAC,EAAE,CAAC;0CAChB,gBAAgB,CAAC,EAAE,CAAC;SACrD,CAAC;AACV,CAAC;AAhDD,kCAgDC"}
@@ -50,4 +50,5 @@ __exportStar(require("./file"), exports);
50
50
  __exportStar(require("./photo"), exports);
51
51
  __exportStar(require("./multiple-files"), exports);
52
52
  __exportStar(require("./number"), exports);
53
+ __exportStar(require("./multiple-photos"), exports);
53
54
  //# sourceMappingURL=controls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../src/forms/controls/controls.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,2EAAwE;AAA/D,sIAAA,wBAAwB,OAAA;AACjC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,4CAA0B;AAC1B,6CAA2B;AAC3B,6CAA2B;AAC3B,0CAAwB;AACxB,oDAAkC;AAClC,mDAAiC;AACjC,4DAA0C;AAC1C,+DAA6C;AAC7C,iDAA+B;AAC/B,yCAAuB;AACvB,0CAAwB;AACxB,mDAAiC;AACjC,2CAAyB"}
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../src/forms/controls/controls.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,2EAAwE;AAA/D,sIAAA,wBAAwB,OAAA;AACjC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,4CAA0B;AAC1B,6CAA2B;AAC3B,6CAA2B;AAC3B,0CAAwB;AACxB,oDAAkC;AAClC,mDAAiC;AACjC,4DAA0C;AAC1C,+DAA6C;AAC7C,iDAA+B;AAC/B,yCAAuB;AACvB,0CAAwB;AACxB,mDAAiC;AACjC,2CAAyB;AACzB,oDAAkC"}
@@ -6,12 +6,16 @@ const input_wrapper_1 = require("../../utils/input-wrapper");
6
6
  const tempstream_1 = require("tempstream");
7
7
  const form_field_control_1 = require("./form-field-control");
8
8
  const ts_predicates_1 = require("@sealcode/ts-predicates");
9
+ const render_attributes_1 = require("../../utils/render-attributes");
9
10
  class MultipleFiles extends form_field_control_1.FormFieldControl {
10
11
  constructor(field, options) {
11
12
  super([field]);
12
13
  this.field = field;
13
14
  this.options = options || {};
14
15
  }
16
+ getClassModifiers() {
17
+ return [];
18
+ }
15
19
  mount(router) {
16
20
  router.get(this.getFrameRelativeURL(), async (ctx) => {
17
21
  ctx.body = this.renderFrame(ctx, await this.renderFrameContent(ctx));
@@ -21,12 +25,15 @@ class MultipleFiles extends form_field_control_1.FormFieldControl {
21
25
  ctx.body = this.renderFrame(ctx, await this.renderFrameContent(ctx));
22
26
  });
23
27
  router.post(this.getFrameRelativeURL() + "/add", async (ctx) => {
24
- const file = ctx.$body.file;
25
- if (!file || !ts_predicates_1.is(file, ts_predicates_1.predicates.object)) {
26
- ctx.body = "Missing file";
28
+ let files = ctx.$body.files;
29
+ if (!files || !ts_predicates_1.is(files, ts_predicates_1.predicates.object)) {
30
+ ctx.body = "Missing files";
27
31
  return;
28
32
  }
29
- await this.addFileAssociation(ctx, file);
33
+ if (!Array.isArray(files)) {
34
+ files = [files];
35
+ }
36
+ await Promise.all(files.map((file) => this.addFileAssociation(ctx, file)));
30
37
  ctx.body = this.renderFrame(ctx, await this.renderFrameContent(ctx));
31
38
  });
32
39
  }
@@ -82,20 +89,34 @@ class MultipleFiles extends form_field_control_1.FormFieldControl {
82
89
  }
83
90
  return await sealious_1.File.fromID(item.collection.app, item.get(sealious_field.name).id);
84
91
  }
92
+ async renderFileItemPreview(fileItem, file) {
93
+ return file.filename || "no filename";
94
+ }
85
95
  async renderFileItem(fileItem, file) {
86
- return /* HTML */ `<li>
87
- <a href="${file.getURL()}" data-turbo="false">
88
- ${file.filename || "no filename"}
89
- </a>
90
- <form
91
- data-turbo-frame="${this.getFrameID()}"
92
- action="${this.getFrameRelativeURL()}/delete/${fileItem.id}"
93
- method="POST"
96
+ return /* HTML */ `<li class="file-list-item">
97
+ <a
98
+ class="file-list-item__preview"
99
+ href="${file.getURL()}"
100
+ data-turbo="false"
94
101
  >
95
- <input type="submit" value="X" class="file-list-action" />
96
- </form>
102
+ ${this.renderFileItemPreview(fileItem, file)}
103
+ </a>
104
+ ${this.renderFileRemoveButton(fileItem)}
97
105
  </li>`;
98
106
  }
107
+ renderFileRemoveButton(fileItem) {
108
+ return /* HTML */ ` <form
109
+ data-turbo-frame="${this.getFrameID()}"
110
+ action="${this.getFrameRelativeURL()}/delete/${fileItem.id}"
111
+ method="POST"
112
+ >
113
+ <input
114
+ type="submit"
115
+ value="X"
116
+ class="file-list-action file-list-item__button file-list-item__button--delete"
117
+ />
118
+ </form>`;
119
+ }
99
120
  async getFileItems(ctx) {
100
121
  const item_id = await this.field.getItemId(ctx);
101
122
  const { items: [item], } = await this.field.collection_field.collection
@@ -107,14 +128,17 @@ class MultipleFiles extends form_field_control_1.FormFieldControl {
107
128
  .getAttachments(this.field.collection_field.name)
108
129
  .filter((f) => f);
109
130
  }
131
+ getInputAttributes() {
132
+ return { type: "file", name: "files", multiple: true };
133
+ }
110
134
  async renderFrameContent(ctx) {
111
135
  const files = (await Promise.all((await this.getFileItems(ctx)).map(async (item) => [
112
136
  item,
113
137
  await this.extractFileFromItem(item),
114
138
  ]))).filter(([_, f]) => f !== null);
115
- return input_wrapper_1.inputWrapper(["multiple-files", this.field.name], tempstream_1.tempstream /* HTML */ `
139
+ return input_wrapper_1.inputWrapper(["multiple-files", this.field.name, ...this.getClassModifiers()], tempstream_1.tempstream /* HTML */ `
116
140
  <label>${this.options.label || this.field.name}</label>
117
- <ul>
141
+ <ul class="multiple-files__list">
118
142
  ${files.map(([item, file]) => this.renderFileItem(item, file))}
119
143
  </ul>
120
144
  <form
@@ -123,7 +147,7 @@ class MultipleFiles extends form_field_control_1.FormFieldControl {
123
147
  enctype="multipart/form-data"
124
148
  data-turbo-frame="${this.getFrameID()}"
125
149
  >
126
- <input type="file" name="file" />
150
+ <input ${render_attributes_1.renderAttributes(this.getInputAttributes())} />
127
151
  <input
128
152
  type="submit"
129
153
  value="${this.options.uploadLabel || "Upload"}"
@@ -1 +1 @@
1
- {"version":3,"file":"multiple-files.js","sourceRoot":"","sources":["../../../src/forms/controls/multiple-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multiple-files.js","sourceRoot":"","sources":["../../../src/forms/controls/multiple-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiplePhotos = void 0;
4
+ const tempstream_1 = require("tempstream");
5
+ const multiple_files_1 = require("./multiple-files");
6
+ class MultiplePhotos extends multiple_files_1.MultipleFiles {
7
+ constructor(field, imageRouter, options) {
8
+ super(field, options);
9
+ this.field = field;
10
+ this.imageRouter = imageRouter;
11
+ }
12
+ getClassModifiers() {
13
+ return ["multiple-files--photos"];
14
+ }
15
+ getInputAttributes() {
16
+ return { ...super.getInputAttributes(), accept: "image/*" };
17
+ }
18
+ async renderFileItem(fileItem, file) {
19
+ const path = file.getDataPath();
20
+ if (!path) {
21
+ return "missing file";
22
+ }
23
+ return tempstream_1.tempstream /* HTML */ `<li>
24
+ <a href="${file.getURL()}" data-turbo="false">
25
+ ${this.imageRouter.image({
26
+ path,
27
+ resolutions: [150, 300],
28
+ sizes_attr: "150px",
29
+ })}
30
+ </a>
31
+ <span class="filename"> ${file.filename || "no filename"}</span>
32
+ ${this.renderFileRemoveButton(fileItem)}
33
+ </li>`;
34
+ }
35
+ }
36
+ exports.MultiplePhotos = MultiplePhotos;
37
+ //# sourceMappingURL=multiple-photos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiple-photos.js","sourceRoot":"","sources":["../../../src/forms/controls/multiple-photos.ts"],"names":[],"mappings":";;;AACA,2CAAyD;AACzD,qDAAuE;AAIvE,MAAa,cAAe,SAAQ,8BAAa;IAChD,YACQ,KAAyB,EACzB,WAAqC,EAC5C,OAA8B;QAE9B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAJf,UAAK,GAAL,KAAK,CAAoB;QACzB,gBAAW,GAAX,WAAW,CAA0B;IAI7C,CAAC;IAED,iBAAiB;QAChB,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB;QACjB,OAAO,EAAE,GAAG,KAAK,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,cAAc,CACnB,QAAwB,EACxB,IAAkB;QAElB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,EAAE;YACV,OAAO,cAAc,CAAC;SACtB;QACD,OAAO,uBAAU,CAAA,UAAU,CAAC;cAChB,IAAI,CAAC,MAAM,EAAE;MACrB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACxB,IAAI;YACJ,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACvB,UAAU,EAAE,OAAO;SACnB,CAAC;;6BAEuB,IAAI,CAAC,QAAQ,IAAI,aAAa;KACtD,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;QAClC,CAAC;IACR,CAAC;CACD;AArCD,wCAqCC"}
@@ -34,6 +34,7 @@ class Photo extends file_1.File {
34
34
  const { parsed } = await this.field.getValue(ctx, data);
35
35
  return {
36
36
  ...original,
37
+ accept: "image/*",
37
38
  onchange: (original.onchange || "") +
38
39
  ";" +
39
40
  `
@@ -1 +1 @@
1
- {"version":3,"file":"photo.js","sourceRoot":"","sources":["../../../src/forms/controls/photo.ts"],"names":[],"mappings":";;;AACA,2CAAyD;AACzD,iCAA8B;AAC9B,uCAAgD;AAMhD,MAAa,KAAM,SAAQ,WAAI;IAC9B,YACQ,KAAwC,EACxC,WAAqC,EAC5C,OAA4B;QAE5B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAJf,UAAK,GAAL,KAAK,CAAmC;QACxC,gBAAW,GAAX,WAAW,CAA0B;IAI7C,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,OAAO,kDAAkD,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,iBAAiB,CACtB,GAAY,EACZ,SAA6C;QAE7C,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;QACnC,MAAM,UAAU,GAAG,cAAc,CAAC;QAClC,IAAI,CAAC,EAAE,EAAE;YACR,OAAO,eAAe,UAAU,UAAU,CAAC;SAC3C;QACD,MAAM,IAAI,GAAG,MAAM,eAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,uBAAU,CAAA,UAAU,CAAC,eAAe,UAAU;KAClD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACxB,WAAW,EAAE,CAAC,GAAG,CAAC;YAClB,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;SACnC,CAAC;SACI,CAAC;IACT,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,GAAY,EACZ,IAAmC,EACnC,YAAoB,EACpB,OAAe;QAEf,MAAM,QAAQ,GAAG,CAAC,MAAM,KAAK,CAAC,kBAAkB,CAC/C,GAAG,EACH,IAAI,EACJ,YAAY,EACZ,OAAO,CACP,CAAqC,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO;YACN,GAAG,QAAQ;YACX,QAAQ,EACP,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACzB,GAAG;gBACH;;;;;;;;4EAQwE,MAAM,IAAI,CAAC,WAAW,EAAE;;EAElG;qBACI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;qBACrB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACvB,CAAC;IACH,CAAC;CACD;AAlED,sBAkEC"}
1
+ {"version":3,"file":"photo.js","sourceRoot":"","sources":["../../../src/forms/controls/photo.ts"],"names":[],"mappings":";;;AACA,2CAAyD;AACzD,iCAA8B;AAC9B,uCAAgD;AAMhD,MAAa,KAAM,SAAQ,WAAI;IAC9B,YACQ,KAAwC,EACxC,WAAqC,EAC5C,OAA4B;QAE5B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAJf,UAAK,GAAL,KAAK,CAAmC;QACxC,gBAAW,GAAX,WAAW,CAA0B;IAI7C,CAAC;IAED,KAAK,CAAC,WAAW;QAChB,OAAO,kDAAkD,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,iBAAiB,CACtB,GAAY,EACZ,SAA6C;QAE7C,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;QACnC,MAAM,UAAU,GAAG,cAAc,CAAC;QAClC,IAAI,CAAC,EAAE,EAAE;YACR,OAAO,eAAe,UAAU,UAAU,CAAC;SAC3C;QACD,MAAM,IAAI,GAAG,MAAM,eAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrD,OAAO,uBAAU,CAAA,UAAU,CAAC,eAAe,UAAU;KAClD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACxB,WAAW,EAAE,CAAC,GAAG,CAAC;YAClB,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;YACxB,SAAS,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;SACnC,CAAC;SACI,CAAC;IACT,CAAC;IAED,KAAK,CAAC,kBAAkB,CACvB,GAAY,EACZ,IAAmC,EACnC,YAAoB,EACpB,OAAe;QAEf,MAAM,QAAQ,GAAG,CAAC,MAAM,KAAK,CAAC,kBAAkB,CAC/C,GAAG,EACH,IAAI,EACJ,YAAY,EACZ,OAAO,CACP,CAAqC,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO;YACN,GAAG,QAAQ;YACX,MAAM,EAAE,SAAS;YACjB,QAAQ,EACP,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACzB,GAAG;gBACH;;;;;;;;4EAQwE,MAAM,IAAI,CAAC,WAAW,EAAE;;EAElG;qBACI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;qBACrB,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;SACvB,CAAC;IACH,CAAC;CACD;AAnED,sBAmEC"}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SimpleInput = void 0;
4
4
  const tempstream_1 = require("tempstream");
5
- const sanitize_1 = require("../../sanitize");
6
5
  const input_wrapper_1 = require("../../utils/input-wrapper");
6
+ const render_attributes_1 = require("../../utils/render-attributes");
7
7
  const controls_1 = require("./controls");
8
8
  class SimpleInput extends controls_1.FormFieldControl {
9
9
  constructor(field, options) {
@@ -54,23 +54,6 @@ class SimpleInput extends controls_1.FormFieldControl {
54
54
  ...(this.options.step ? [["step", this.options.step]] : []),
55
55
  ]);
56
56
  }
57
- renderAttributes(attrs) {
58
- return Object.entries(attrs)
59
- .map(([key, value]) => {
60
- if (typeof value === "boolean") {
61
- if (value) {
62
- return key;
63
- }
64
- else {
65
- return "";
66
- }
67
- }
68
- else {
69
- return `${key}="${sanitize_1.attribute(value)}"`;
70
- }
71
- })
72
- .join(" ");
73
- }
74
57
  async postInput(ctx) {
75
58
  return "";
76
59
  }
@@ -86,7 +69,7 @@ class SimpleInput extends controls_1.FormFieldControl {
86
69
  return input_wrapper_1.inputWrapper([id, type, input_wrapper_1.getRequiredClass(this.field.required)], tempstream_1.tempstream /* HTML */ `
87
70
  ${label ? `<label for="${id}">${label}</label>` : ""}
88
71
  ${await this.preInput(ctx, data)}
89
- ${this.renderInput(ctx, this.renderAttributes(await this.getInputAttributes(ctx, data, field_prefix, form_id)), data)}
72
+ ${this.renderInput(ctx, render_attributes_1.renderAttributes(await this.getInputAttributes(ctx, data, field_prefix, form_id)), data)}
90
73
  ${this.postInput(ctx)}
91
74
  ${~valid && !this.options.hide_errors && show_errors
92
75
  ? `<div class="input__error">${message}</div>`
@@ -1 +1 @@
1
- {"version":3,"file":"simple-input.js","sourceRoot":"","sources":["../../../src/forms/controls/simple-input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simple-input.js","sourceRoot":"","sources":["../../../src/forms/controls/simple-input.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,14 @@ class Tickable extends controls_1.FormFieldControl {
10
10
  this.field = field;
11
11
  this.options = options;
12
12
  }
13
- makeInputID() {
14
- return this.options.id || this.field.name;
13
+ makeInputID(ctx, data, value) {
14
+ const value_attr = this.getValueAttribute(ctx, data, value);
15
+ return (this.options.id ||
16
+ this.field.name + (value_attr ? "--" + value_attr : ""));
15
17
  }
16
18
  getWrapperClasses(ctx, data, value) {
17
19
  return [
18
- this.makeInputID(),
20
+ this.makeInputID(ctx, data, value),
19
21
  this.type,
20
22
  this.field.name.replaceAll(/\W/g, "-"),
21
23
  input_wrapper_1.getRequiredClass(this.field.required),
@@ -23,16 +25,16 @@ class Tickable extends controls_1.FormFieldControl {
23
25
  ];
24
26
  }
25
27
  async render(ctx, data, _, field_prefix, form_id, show_field_errors) {
26
- const id = this.makeInputID();
28
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
29
+ const { parsed, valid, message } = await this.field.getValue(ctx, data);
30
+ const value = this.getValueAttribute(ctx, data, parsed);
31
+ const id = this.makeInputID(ctx, data, parsed);
27
32
  const label = this.options.label != undefined
28
33
  ? this.options.label
29
34
  : this.field.name;
30
35
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
31
- const { parsed, valid, message } = await this.field.getValue(ctx, data);
32
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
33
36
  const readonly = this.options.readonly || false;
34
37
  const required = this.field.required;
35
- const value = this.getValueAttribute(ctx, data, parsed);
36
38
  return input_wrapper_1.inputWrapper(this.getWrapperClasses(ctx, data, parsed),
37
39
  /* HTML */ `
38
40
  <input
@@ -1 +1 @@
1
- {"version":3,"file":"tickable.js","sourceRoot":"","sources":["../../../src/forms/controls/tickable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tickable.js","sourceRoot":"","sources":["../../../src/forms/controls/tickable.ts"],"names":[],"mappings":"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"}
@@ -34,9 +34,8 @@ class File extends field_1.FormField {
34
34
  raw_value.old.id
35
35
  ? await sealious_1.File.fromID(ctx.$app, raw_value.old.id)
36
36
  : null;
37
- const new_file = ts_predicates_1.hasField("new", raw_value) &&
38
- raw_value.new instanceof sealious_1.File
39
- ? raw_value.new
37
+ const new_file = ts_predicates_1.hasFieldOfType(raw_value, "new", ts_predicates_1.predicates.array(ts_predicates_1.predicates.object)) && raw_value.new[0] instanceof sealious_1.File
38
+ ? raw_value.new[0]
40
39
  : null;
41
40
  result = {
42
41
  parsable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/forms/fields/file.ts"],"names":[],"mappings":";;;AAAA,2DAMiC;AAEjC,uCAAgD;AAEhD,mCAAsD;AAOtD,MAAa,IAA+B,SAAQ,iBAGnD;IACA,KAAK,CAAC,KAAK,CACV,GAAY,EACZ,SAAwB;QAExB,IAAI,MAAM,CAAC;QACX,IACC,SAAS,YAAY,eAAY;YACjC,CAAC,kBAAE,CAAC,SAAS,EAAE,0BAAU,CAAC,MAAM,CAAC;gBAChC,wBAAQ,CACP;oBACC,QAAQ,EAAE,0BAAU,CAAC,MAAM;oBAC3B,EAAE,EAAE,0BAAU,CAAC,MAAM;iBACrB,EACD,SAAS,CACT;gBACD,SAAS,CAAC,EAAE,CAAC,EACb;YACD,MAAM,IAAI,GAAG,MAAM,eAAY,CAAC,MAAM,CACrC,GAAG,CAAC,IAAI,EACR,SAAS,CAAC,EAAY,CACtB,CAAC;YACF,MAAM,GAAG;gBACR,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;gBACtC,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAY;aACtB,CAAC;SACF;aAAM,IAAI,CAAC,kBAAE,CAAC,SAAS,EAAE,0BAAU,CAAC,MAAM,CAAC,EAAE;YAC7C,MAAM,GAAG;gBACR,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,wEAAwE;gBAC/E,QAAQ,EAAE,KAAc;aACxB,CAAC;SACF;aAAM;YACN,MAAM,QAAQ,GACb,8BAAc,CAAC,SAAS,EAAE,KAAK,EAAE,0BAAU,CAAC,MAAM,CAAC;gBACnD,wBAAQ,CACP,EAAE,EAAE,EAAE,0BAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,0BAAU,CAAC,MAAM,EAAE,EACtD,SAAS,CAAC,GAAG,CACb;gBACD,SAAS,CAAC,GAAG,CAAC,EAAE;gBACf,CAAC,CAAC,MAAM,eAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,QAAQ,GACb,wBAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;gBAC1B,SAAS,CAAC,GAAG,YAAY,eAAY;gBACpC,CAAC,CAAC,SAAS,CAAC,GAAG;gBACf,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,GAAG;gBACR,QAAQ,EAAE,IAAY;gBACtB,KAAK,EAAE,IAAI;gBACX,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;aAC9C,CAAC;SACF;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAY,EAAE,IAAmC;QACvE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;IAChC,CAAC;IAED,aAAa;QACZ,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;CACD;AApED,oBAoEC"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/forms/fields/file.ts"],"names":[],"mappings":";;;AAAA,2DAMiC;AAEjC,uCAAgD;AAEhD,mCAAsD;AAOtD,MAAa,IAA+B,SAAQ,iBAGnD;IACA,KAAK,CAAC,KAAK,CACV,GAAY,EACZ,SAAwB;QAExB,IAAI,MAAM,CAAC;QACX,IACC,SAAS,YAAY,eAAY;YACjC,CAAC,kBAAE,CAAC,SAAS,EAAE,0BAAU,CAAC,MAAM,CAAC;gBAChC,wBAAQ,CACP;oBACC,QAAQ,EAAE,0BAAU,CAAC,MAAM;oBAC3B,EAAE,EAAE,0BAAU,CAAC,MAAM;iBACrB,EACD,SAAS,CACT;gBACD,SAAS,CAAC,EAAE,CAAC,EACb;YACD,MAAM,IAAI,GAAG,MAAM,eAAY,CAAC,MAAM,CACrC,GAAG,CAAC,IAAI,EACR,SAAS,CAAC,EAAY,CACtB,CAAC;YACF,MAAM,GAAG;gBACR,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;gBACtC,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,IAAY;aACtB,CAAC;SACF;aAAM,IAAI,CAAC,kBAAE,CAAC,SAAS,EAAE,0BAAU,CAAC,MAAM,CAAC,EAAE;YAC7C,MAAM,GAAG;gBACR,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,wEAAwE;gBAC/E,QAAQ,EAAE,KAAc;aACxB,CAAC;SACF;aAAM;YACN,MAAM,QAAQ,GACb,8BAAc,CAAC,SAAS,EAAE,KAAK,EAAE,0BAAU,CAAC,MAAM,CAAC;gBACnD,wBAAQ,CACP,EAAE,EAAE,EAAE,0BAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,0BAAU,CAAC,MAAM,EAAE,EACtD,SAAS,CAAC,GAAG,CACb;gBACD,SAAS,CAAC,GAAG,CAAC,EAAE;gBACf,CAAC,CAAC,MAAM,eAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,QAAQ,GACb,8BAAc,CACb,SAAS,EACT,KAAK,EACL,0BAAU,CAAC,KAAK,CAAC,0BAAU,CAAC,MAAM,CAAC,CACnC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,eAAY;gBAC5C,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,GAAG;gBACR,QAAQ,EAAE,IAAY;gBACtB,KAAK,EAAE,IAAI;gBACX,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;aAC9C,CAAC;SACF;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAY,EAAE,IAAmC;QACvE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;IAChC,CAAC;IAED,aAAa;QACZ,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;CACD;AAvED,oBAuEC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeSlug = void 0;
4
+ function makeSlug(t) {
5
+ return t
6
+ .replaceAll(/\P{General_Category=Letter}/g, "-")
7
+ .replaceAll(/-+/g, "-");
8
+ }
9
+ exports.makeSlug = makeSlug;
10
+ //# sourceMappingURL=make-slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-slug.js","sourceRoot":"","sources":["../../src/utils/make-slug.ts"],"names":[],"mappings":";;;AAAA,SAAgB,QAAQ,CAAC,CAAS;IACjC,OAAO,CAAC;SACN,UAAU,CAAC,8BAA8B,EAAE,GAAG,CAAC;SAC/C,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAJD,4BAIC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderAttributes = void 0;
4
+ const sanitize_1 = require("../sanitize");
5
+ function renderAttributes(attrs) {
6
+ return Object.entries(attrs)
7
+ .map(([key, value]) => {
8
+ if (typeof value === "boolean") {
9
+ if (value) {
10
+ return key;
11
+ }
12
+ else {
13
+ return "";
14
+ }
15
+ }
16
+ else {
17
+ return `${key}="${sanitize_1.attribute(value)}"`;
18
+ }
19
+ })
20
+ .join(" ");
21
+ }
22
+ exports.renderAttributes = renderAttributes;
23
+ //# sourceMappingURL=render-attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-attributes.js","sourceRoot":"","sources":["../../src/utils/render-attributes.ts"],"names":[],"mappings":";;;AAAA,0CAAwC;AAExC,SAAgB,gBAAgB,CAAC,KAAuC;IACvE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrB,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YAC/B,IAAI,KAAK,EAAE;gBACV,OAAO,GAAG,CAAC;aACX;iBAAM;gBACN,OAAO,EAAE,CAAC;aACV;SACD;aAAM;YACN,OAAO,GAAG,GAAG,KAAK,oBAAS,CAAC,KAAK,CAAC,GAAG,CAAC;SACtC;IACF,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC;AAdD,4CAcC"}
@@ -1,4 +1,14 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
2
12
  Object.defineProperty(exports, "__esModule", { value: true });
3
13
  exports.walkDir = exports.listCollections = exports.curryImportPath = exports.importPath = exports.exec = exports.UrlWithNewParams = exports.naturalNumbers = exports.sleep = void 0;
4
14
  var sleep_1 = require("./sleep");
@@ -16,4 +26,6 @@ var list_collections_1 = require("./list-collections");
16
26
  Object.defineProperty(exports, "listCollections", { enumerable: true, get: function () { return list_collections_1.listCollections; } });
17
27
  var walk_1 = require("./walk");
18
28
  Object.defineProperty(exports, "walkDir", { enumerable: true, get: function () { return walk_1.walkDir; } });
29
+ __exportStar(require("./make-slug"), exports);
30
+ __exportStar(require("./render-attributes"), exports);
19
31
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;AAGA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AACzB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,6CAA4D;AAAnD,yGAAA,UAAU,OAAA;AAAE,8GAAA,eAAe,OAAA;AACpC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,+BAAiC;AAAxB,+FAAA,OAAO,OAAA"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAGA,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AACzB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,6CAA4D;AAAnD,yGAAA,UAAU,OAAA;AAAE,8GAAA,eAAe,OAAA;AACpC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,+BAAiC;AAAxB,+FAAA,OAAO,OAAA;AAChB,8CAA4B;AAC5B,sDAAoC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sealcode/sealgen",
3
- "version": "0.8.14",
3
+ "version": "0.8.16",
4
4
  "description": "Module to automate adding routes and collections to a sealious application",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -53,6 +53,6 @@
53
53
  "@koa/router": "^10.1.1",
54
54
  "koa": "^2.13.0",
55
55
  "koa-responsive-image-router": "^0.2.2",
56
- "sealious": "^0.17.9"
56
+ "sealious": "^0.17.15"
57
57
  }
58
58
  }
@@ -1 +1,2 @@
1
1
  export * from "./tabs";
2
+ export * from "./toggle-modal";
@@ -0,0 +1,52 @@
1
+ import { FlatTemplatable, tempstream } from "tempstream";
2
+ import { makeSlug } from "../utils/utils";
3
+
4
+ export function toggleModal(options: {
5
+ name: string;
6
+ contentWrapped: (id: string) => FlatTemplatable | Promise<FlatTemplatable>;
7
+ contentUnwrapped: (
8
+ id: string
9
+ ) => FlatTemplatable | Promise<FlatTemplatable>;
10
+ }) {
11
+ const { contentWrapped, contentUnwrapped, name } = options;
12
+ const id = makeSlug(name);
13
+ return tempstream/* HTML */ `<style>
14
+ .toggle-modal__wrapped {
15
+ display: none;
16
+ }
17
+
18
+ @media (max-width: 960px) {
19
+ .toggle-modal__wrapped {
20
+ display: block;
21
+ }
22
+ .toggle-modal__unwrapped {
23
+ display: none;
24
+ }
25
+
26
+ #${id} {
27
+ display: none;
28
+ }
29
+
30
+ #${id}:checked ~ .toggle-modal__wrapped {
31
+ display: none;
32
+ }
33
+
34
+ #${id}:checked ~ .toggle-modal__unwrapped {
35
+ display: block;
36
+ position: fixed;
37
+ height: 100vh;
38
+ width: 100vw;
39
+ top: 0;
40
+ left: 0;
41
+ background-color: white;
42
+ z-index: 99;
43
+ overflow-y: scroll;
44
+ }
45
+ }
46
+ </style>
47
+ <div class="toggle-modal toggle-modal--${id}">
48
+ <input id="${id}" name="${id}" type="checkbox" autocomplete="off" />
49
+ <div class="toggle-modal__wrapped">${contentWrapped(id)}</div>
50
+ <div class="toggle-modal__unwrapped">${contentUnwrapped(id)}</div>
51
+ </div>`;
52
+ }
@@ -24,3 +24,4 @@ export * from "./file";
24
24
  export * from "./photo";
25
25
  export * from "./multiple-files";
26
26
  export * from "./number";
27
+ export * from "./multiple-photos";
@@ -12,6 +12,7 @@ import { MultipleFiles as MultipleFilesField } from "../fields/multiple-files";
12
12
  import { FormDataValue } from "../form";
13
13
  import { FormFieldControl } from "./form-field-control";
14
14
  import { is, predicates } from "@sealcode/ts-predicates";
15
+ import { renderAttributes } from "../../utils/render-attributes";
15
16
 
16
17
  export type MultipleFilesOptions = { label?: string; uploadLabel?: string };
17
18
 
@@ -25,6 +26,10 @@ export class MultipleFiles extends FormFieldControl {
25
26
  this.options = options || {};
26
27
  }
27
28
 
29
+ getClassModifiers(): string[] {
30
+ return [];
31
+ }
32
+
28
33
  mount(router: Router) {
29
34
  router.get(this.getFrameRelativeURL(), async (ctx) => {
30
35
  ctx.body = this.renderFrame(
@@ -45,12 +50,22 @@ export class MultipleFiles extends FormFieldControl {
45
50
  );
46
51
 
47
52
  router.post(this.getFrameRelativeURL() + "/add", async (ctx) => {
48
- const file = ctx.$body.file;
49
- if (!file || !is(file, predicates.object)) {
50
- ctx.body = "Missing file";
53
+ let files = ctx.$body.files as SealiousFile | SealiousFile[];
54
+ if (!files || !is(files, predicates.object)) {
55
+ ctx.body = "Missing files";
51
56
  return;
52
57
  }
53
- await this.addFileAssociation(ctx, file as unknown as SealiousFile);
58
+ if (!Array.isArray(files)) {
59
+ files = [files];
60
+ }
61
+ await Promise.all(
62
+ files.map((file) =>
63
+ this.addFileAssociation(
64
+ ctx,
65
+ file as unknown as SealiousFile
66
+ )
67
+ )
68
+ );
54
69
  ctx.body = this.renderFrame(
55
70
  ctx,
56
71
  await this.renderFrameContent(ctx)
@@ -141,24 +156,43 @@ export class MultipleFiles extends FormFieldControl {
141
156
  );
142
157
  }
143
158
 
159
+ async renderFileItemPreview(
160
+ fileItem: CollectionItem,
161
+ file: SealiousFile
162
+ ): Promise<FlatTemplatable> {
163
+ return file.filename || "no filename";
164
+ }
165
+
144
166
  async renderFileItem(
145
167
  fileItem: CollectionItem,
146
168
  file: SealiousFile
147
169
  ): Promise<FlatTemplatable> {
148
- return /* HTML */ `<li>
149
- <a href="${file.getURL()}" data-turbo="false">
150
- ${file.filename || "no filename"}
151
- </a>
152
- <form
153
- data-turbo-frame="${this.getFrameID()}"
154
- action="${this.getFrameRelativeURL()}/delete/${fileItem.id}"
155
- method="POST"
170
+ return /* HTML */ `<li class="file-list-item">
171
+ <a
172
+ class="file-list-item__preview"
173
+ href="${file.getURL()}"
174
+ data-turbo="false"
156
175
  >
157
- <input type="submit" value="X" class="file-list-action" />
158
- </form>
176
+ ${this.renderFileItemPreview(fileItem, file)}
177
+ </a>
178
+ ${this.renderFileRemoveButton(fileItem)}
159
179
  </li>`;
160
180
  }
161
181
 
182
+ renderFileRemoveButton(fileItem: CollectionItem): FlatTemplatable {
183
+ return /* HTML */ ` <form
184
+ data-turbo-frame="${this.getFrameID()}"
185
+ action="${this.getFrameRelativeURL()}/delete/${fileItem.id}"
186
+ method="POST"
187
+ >
188
+ <input
189
+ type="submit"
190
+ value="X"
191
+ class="file-list-action file-list-item__button file-list-item__button--delete"
192
+ />
193
+ </form>`;
194
+ }
195
+
162
196
  async getFileItems(ctx: Context) {
163
197
  const item_id = await this.field.getItemId(ctx);
164
198
  const {
@@ -173,6 +207,10 @@ export class MultipleFiles extends FormFieldControl {
173
207
  .filter((f) => f);
174
208
  }
175
209
 
210
+ getInputAttributes() {
211
+ return { type: "file", name: "files", multiple: true };
212
+ }
213
+
176
214
  async renderFrameContent(ctx: Context): Promise<FlatTemplatable> {
177
215
  const files = (
178
216
  await Promise.all(
@@ -186,10 +224,10 @@ export class MultipleFiles extends FormFieldControl {
186
224
  ).filter(([_, f]) => f !== null) as [CollectionItem, SealiousFile][];
187
225
 
188
226
  return inputWrapper(
189
- ["multiple-files", this.field.name],
227
+ ["multiple-files", this.field.name, ...this.getClassModifiers()],
190
228
  tempstream/* HTML */ `
191
229
  <label>${this.options.label || this.field.name}</label>
192
- <ul>
230
+ <ul class="multiple-files__list">
193
231
  ${files.map(([item, file]) =>
194
232
  this.renderFileItem(item, file)
195
233
  )}
@@ -200,7 +238,7 @@ export class MultipleFiles extends FormFieldControl {
200
238
  enctype="multipart/form-data"
201
239
  data-turbo-frame="${this.getFrameID()}"
202
240
  >
203
- <input type="file" name="file" />
241
+ <input ${renderAttributes(this.getInputAttributes())} />
204
242
  <input
205
243
  type="submit"
206
244
  value="${this.options.uploadLabel || "Upload"}"
@@ -0,0 +1,44 @@
1
+ import { File as SealiousFile, CollectionItem } from "sealious";
2
+ import { FlatTemplatable, tempstream } from "tempstream";
3
+ import { MultipleFiles, MultipleFilesOptions } from "./multiple-files";
4
+ import { MultipleFiles as MultipleFilesField } from "../fields/multiple-files";
5
+ import KoaResponsiveImageRouter from "koa-responsive-image-router";
6
+
7
+ export class MultiplePhotos extends MultipleFiles {
8
+ constructor(
9
+ public field: MultipleFilesField,
10
+ public imageRouter: KoaResponsiveImageRouter,
11
+ options?: MultipleFilesOptions
12
+ ) {
13
+ super(field, options);
14
+ }
15
+
16
+ getClassModifiers() {
17
+ return ["multiple-files--photos"];
18
+ }
19
+
20
+ getInputAttributes() {
21
+ return { ...super.getInputAttributes(), accept: "image/*" };
22
+ }
23
+
24
+ async renderFileItem(
25
+ fileItem: CollectionItem,
26
+ file: SealiousFile
27
+ ): Promise<FlatTemplatable> {
28
+ const path = file.getDataPath();
29
+ if (!path) {
30
+ return "missing file";
31
+ }
32
+ return tempstream/* HTML */ `<li>
33
+ <a href="${file.getURL()}" data-turbo="false">
34
+ ${this.imageRouter.image({
35
+ path,
36
+ resolutions: [150, 300],
37
+ sizes_attr: "150px",
38
+ })}
39
+ </a>
40
+ <span class="filename"> ${file.filename || "no filename"}</span>
41
+ ${this.renderFileRemoveButton(fileItem)}
42
+ </li>`;
43
+ }
44
+ }
@@ -55,6 +55,7 @@ export class Photo extends File {
55
55
  const { parsed } = await this.field.getValue(ctx, data);
56
56
  return {
57
57
  ...original,
58
+ accept: "image/*",
58
59
  onchange:
59
60
  (original.onchange || "") +
60
61
  ";" +
@@ -1,7 +1,7 @@
1
1
  import { Context } from "koa";
2
2
  import { FlatTemplatable, tempstream } from "tempstream";
3
- import { attribute } from "../../sanitize";
4
3
  import { getRequiredClass, inputWrapper } from "../../utils/input-wrapper";
4
+ import { renderAttributes } from "../../utils/render-attributes";
5
5
  import { FormField } from "../fields/field";
6
6
  import { FormDataValue, FormMessage } from "../form";
7
7
  import { FormFieldControl } from "./controls";
@@ -101,22 +101,6 @@ export class SimpleInput<
101
101
  ]);
102
102
  }
103
103
 
104
- renderAttributes(attrs: Record<string, string | boolean>) {
105
- return Object.entries(attrs)
106
- .map(([key, value]) => {
107
- if (typeof value === "boolean") {
108
- if (value) {
109
- return key;
110
- } else {
111
- return "";
112
- }
113
- } else {
114
- return `${key}="${attribute(value)}"`;
115
- }
116
- })
117
- .join(" ");
118
- }
119
-
120
104
  async postInput(ctx: Context): Promise<FlatTemplatable> {
121
105
  return "";
122
106
  }
@@ -154,7 +138,7 @@ export class SimpleInput<
154
138
  ${await this.preInput(ctx, data)}
155
139
  ${this.renderInput(
156
140
  ctx,
157
- this.renderAttributes(
141
+ renderAttributes(
158
142
  await this.getInputAttributes(
159
143
  ctx,
160
144
  data,
@@ -36,8 +36,16 @@ export abstract class Tickable<T extends unknown> extends FormFieldControl {
36
36
  value: T
37
37
  ): boolean;
38
38
 
39
- makeInputID(): string {
40
- return this.options.id || this.field.name;
39
+ makeInputID(
40
+ ctx: Context,
41
+ data: Record<string, FormDataValue>,
42
+ value: T
43
+ ): string {
44
+ const value_attr = this.getValueAttribute(ctx, data, value);
45
+ return (
46
+ this.options.id ||
47
+ this.field.name + (value_attr ? "--" + value_attr : "")
48
+ );
41
49
  }
42
50
 
43
51
  getWrapperClasses(
@@ -46,7 +54,7 @@ export abstract class Tickable<T extends unknown> extends FormFieldControl {
46
54
  value: T
47
55
  ): string[] {
48
56
  return [
49
- this.makeInputID(),
57
+ this.makeInputID(ctx, data, value),
50
58
  this.type,
51
59
  this.field.name.replaceAll(/\W/g, "-"),
52
60
  getRequiredClass(this.field.required),
@@ -62,19 +70,19 @@ export abstract class Tickable<T extends unknown> extends FormFieldControl {
62
70
  form_id: string,
63
71
  show_field_errors: boolean
64
72
  ): Promise<FlatTemplatable> {
65
- const id = this.makeInputID();
73
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
74
+ const { parsed, valid, message } = await this.field.getValue(ctx, data);
75
+ const value = this.getValueAttribute(ctx, data, parsed);
76
+ const id = this.makeInputID(ctx, data, parsed);
66
77
  const label =
67
78
  this.options.label != undefined
68
79
  ? this.options.label
69
80
  : this.field.name;
70
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
71
- const { parsed, valid, message } = await this.field.getValue(ctx, data);
81
+
72
82
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
73
83
  const readonly = this.options.readonly || false;
74
84
  const required = this.field.required;
75
85
 
76
- const value = this.getValueAttribute(ctx, data, parsed);
77
-
78
86
  return inputWrapper(
79
87
  this.getWrapperClasses(ctx, data, parsed),
80
88
 
@@ -62,9 +62,12 @@ export class File<Required extends boolean> extends FormField<
62
62
  ? await SealiousFile.fromID(ctx.$app, raw_value.old.id)
63
63
  : null;
64
64
  const new_file =
65
- hasField("new", raw_value) &&
66
- raw_value.new instanceof SealiousFile
67
- ? raw_value.new
65
+ hasFieldOfType(
66
+ raw_value,
67
+ "new",
68
+ predicates.array(predicates.object)
69
+ ) && raw_value.new[0] instanceof SealiousFile
70
+ ? raw_value.new[0]
68
71
  : null;
69
72
  result = {
70
73
  parsable: true as true,
@@ -30,3 +30,47 @@
30
30
  }
31
31
  }
32
32
  }
33
+
34
+ .form-input__wrapper--multiple-files--photos {
35
+ ul {
36
+ list-style: none;
37
+ display: grid;
38
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
39
+ grid-gap: 10px;
40
+ margin-bottom: 20px;
41
+
42
+ li {
43
+ background-color: white;
44
+ box-shadow: 1px 1px 6px 0px #00000038;
45
+ padding: 10px;
46
+ display: grid;
47
+ grid-template-columns: 1fr 20px;
48
+ grid-template-rows: 20px auto min-content;
49
+ grid-row-gap: 10px;
50
+
51
+ a {
52
+ grid-row: 1/3;
53
+ grid-column: 1/3;
54
+
55
+ picture,
56
+ img {
57
+ width: 100%;
58
+ height: 150px;
59
+ object-fit: contain;
60
+ }
61
+ }
62
+
63
+ .filename {
64
+ grid-row: 3/4;
65
+ grid-column: 1/3;
66
+ }
67
+
68
+ form {
69
+ grid-row: 1/2;
70
+ grid-column: 2/3;
71
+ position: relative;
72
+ z-index: 2;
73
+ }
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,5 @@
1
+ export function makeSlug(t: string) {
2
+ return t
3
+ .replaceAll(/\P{General_Category=Letter}/g, "-")
4
+ .replaceAll(/-+/g, "-");
5
+ }
@@ -0,0 +1,17 @@
1
+ import { attribute } from "../sanitize";
2
+
3
+ export function renderAttributes(attrs: Record<string, string | boolean>) {
4
+ return Object.entries(attrs)
5
+ .map(([key, value]) => {
6
+ if (typeof value === "boolean") {
7
+ if (value) {
8
+ return key;
9
+ } else {
10
+ return "";
11
+ }
12
+ } else {
13
+ return `${key}="${attribute(value)}"`;
14
+ }
15
+ })
16
+ .join(" ");
17
+ }
@@ -8,3 +8,5 @@ export { exec } from "./exec";
8
8
  export { importPath, curryImportPath } from "./import-path";
9
9
  export { listCollections } from "./list-collections";
10
10
  export { walkDir } from "./walk";
11
+ export * from "./make-slug";
12
+ export * from "./render-attributes";