clapton 0.0.17 → 0.0.18
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/README.md +7 -7
- data/lib/clapton/javascripts/dist/client.js +12 -4
- data/lib/clapton/javascripts/dist/components-for-test.js +49 -45
- data/lib/clapton/javascripts/dist/components.js +49 -45
- data/lib/clapton/javascripts/src/channel/clapton-channel.js +1 -1
- data/lib/clapton/javascripts/src/client.ts +9 -2
- data/lib/clapton/javascripts/src/components/block-quote.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/block-quote.ts +2 -2
- data/lib/clapton/javascripts/src/components/bold.spec.ts +3 -3
- data/lib/clapton/javascripts/src/components/bold.ts +2 -2
- data/lib/clapton/javascripts/src/components/box.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/box.ts +2 -2
- data/lib/clapton/javascripts/src/components/button.spec.ts +5 -5
- data/lib/clapton/javascripts/src/components/button.ts +2 -2
- data/lib/clapton/javascripts/src/components/checkbox.spec.ts +3 -3
- data/lib/clapton/javascripts/src/components/checkbox.ts +1 -1
- data/lib/clapton/javascripts/src/components/code.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/code.ts +2 -2
- data/lib/clapton/javascripts/src/components/component.ts +8 -4
- data/lib/clapton/javascripts/src/components/datetime-field.spec.ts +3 -3
- data/lib/clapton/javascripts/src/components/datetime-field.ts +1 -1
- data/lib/clapton/javascripts/src/components/element.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/element.ts +2 -2
- data/lib/clapton/javascripts/src/components/embed.spec.ts +1 -1
- data/lib/clapton/javascripts/src/components/embed.ts +1 -1
- data/lib/clapton/javascripts/src/components/emphasis.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/emphasis.ts +2 -2
- data/lib/clapton/javascripts/src/components/form.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/form.ts +2 -2
- data/lib/clapton/javascripts/src/components/heading.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/heading.ts +2 -2
- data/lib/clapton/javascripts/src/components/image.spec.ts +2 -2
- data/lib/clapton/javascripts/src/components/image.ts +1 -1
- data/lib/clapton/javascripts/src/components/link.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/link.ts +2 -2
- data/lib/clapton/javascripts/src/components/list-item.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/list-item.ts +2 -2
- data/lib/clapton/javascripts/src/components/list.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/list.ts +2 -2
- data/lib/clapton/javascripts/src/components/ordered-list.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/ordered-list.ts +2 -2
- data/lib/clapton/javascripts/src/components/paragraph.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/paragraph.ts +2 -2
- data/lib/clapton/javascripts/src/components/presets.ts +1 -1
- data/lib/clapton/javascripts/src/components/quote.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/quote.ts +2 -2
- data/lib/clapton/javascripts/src/components/radio-button.spec.ts +3 -3
- data/lib/clapton/javascripts/src/components/radio-button.ts +1 -1
- data/lib/clapton/javascripts/src/components/select.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/select.ts +2 -2
- data/lib/clapton/javascripts/src/components/span.spec.ts +6 -6
- data/lib/clapton/javascripts/src/components/span.ts +2 -2
- data/lib/clapton/javascripts/src/components/text-area.spec.ts +3 -3
- data/lib/clapton/javascripts/src/components/text-area.ts +1 -1
- data/lib/clapton/javascripts/src/components/text-field.spec.ts +3 -3
- data/lib/clapton/javascripts/src/components/text-field.ts +1 -1
- data/lib/clapton/javascripts/src/components/text.spec.ts +2 -2
- data/lib/clapton/javascripts/src/components/text.ts +1 -1
- data/lib/clapton/javascripts/src/dom/update-component.ts +1 -1
- data/lib/clapton/test_helper/base.rb +1 -1
- data/lib/clapton/version.rb +1 -1
- data/lib/rails/generators/clapton_generator.rb +2 -0
- metadata +1 -1
@@ -21,13 +21,20 @@ const initializeComponents = async () => {
|
|
21
21
|
};
|
22
22
|
|
23
23
|
const createAndAppendComponent = async (component: ComponentDefinition, element: HTMLElement) => {
|
24
|
+
if (!element) {
|
25
|
+
return;
|
26
|
+
}
|
24
27
|
const componentDom = document.createElement('div');
|
25
28
|
const module = await import(`${component.component}`);
|
26
29
|
const instance = new (module[component.component] as any)(component.state);
|
27
|
-
componentDom.innerHTML = instance.
|
30
|
+
componentDom.innerHTML = instance.renderWrapper;
|
28
31
|
const firstChild = componentDom.firstChild as HTMLElement;
|
29
32
|
if (firstChild) {
|
30
|
-
element.
|
33
|
+
if (element.children.length > 0) {
|
34
|
+
element.appendChild(firstChild);
|
35
|
+
} else {
|
36
|
+
element.outerHTML = firstChild.outerHTML;
|
37
|
+
}
|
31
38
|
}
|
32
39
|
};
|
33
40
|
|
@@ -4,23 +4,23 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("BlockQuote", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new BlockQuote().
|
7
|
+
expect(new BlockQuote().renderWrapper).toBe("<blockquote ></blockquote>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new BlockQuote({ id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new BlockQuote({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<blockquote id='1' data-foo='bar'></blockquote>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new BlockQuote({ id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new BlockQuote({ id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new BlockQuote({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new BlockQuote({ id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<blockquote id='1' data-foo='bar'></blockquote>`)
|
16
|
+
expect(new BlockQuote({ id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<blockquote id='1' data-foo='bar' data-baz='qux'></blockquote>`)
|
17
|
+
expect(new BlockQuote({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<blockquote id='1' data-foo-baz='qux' data-foo-quux='corge'></blockquote>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
21
|
const text = new Text("Hello")
|
22
22
|
const blockQuote = new BlockQuote()
|
23
23
|
blockQuote.add(text)
|
24
|
-
expect(blockQuote.
|
24
|
+
expect(blockQuote.renderWrapper).toBe(`<blockquote >Hello</blockquote>`)
|
25
25
|
})
|
26
26
|
})
|
@@ -9,8 +9,8 @@ export class BlockQuote {
|
|
9
9
|
this.attributes = attributes;
|
10
10
|
}
|
11
11
|
|
12
|
-
get
|
13
|
-
return `<blockquote ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
12
|
+
get renderWrapper(): string {
|
13
|
+
return `<blockquote ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</blockquote>`;
|
14
14
|
}
|
15
15
|
|
16
16
|
add(child: any): BlockQuote {
|
@@ -4,11 +4,11 @@ import { Bold } from "./bold"
|
|
4
4
|
|
5
5
|
describe("Bold", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new Bold().
|
7
|
+
expect(new Bold().renderWrapper).toBe("<strong ></strong>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new Bold({ id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new Bold({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<strong id='1' data-foo='bar'></strong>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
|
@@ -16,6 +16,6 @@ describe("Bold", () => {
|
|
16
16
|
const text = new Text("Hello")
|
17
17
|
const bold = new Bold()
|
18
18
|
bold.add(text)
|
19
|
-
expect(bold.
|
19
|
+
expect(bold.renderWrapper).toBe(`<strong >Hello</strong>`)
|
20
20
|
})
|
21
21
|
})
|
@@ -9,8 +9,8 @@ export class Bold {
|
|
9
9
|
this.attributes = attributes;
|
10
10
|
}
|
11
11
|
|
12
|
-
get
|
13
|
-
return `<strong ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
12
|
+
get renderWrapper(): string {
|
13
|
+
return `<strong ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</strong>`;
|
14
14
|
}
|
15
15
|
|
16
16
|
add(child: any): Bold {
|
@@ -4,20 +4,20 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("Box", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new Box().
|
7
|
+
expect(new Box().renderWrapper).toBe("<div ></div>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new Box({ id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new Box({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<div id='1' data-foo='bar'></div>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new Box({ id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new Box({ id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new Box({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new Box({ id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<div id='1' data-foo='bar'></div>`)
|
16
|
+
expect(new Box({ id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<div id='1' data-foo='bar' data-baz='qux'></div>`)
|
17
|
+
expect(new Box({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<div id='1' data-foo-baz='qux' data-foo-quux='corge'></div>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
|
-
expect(new Box().add(new Text("Hello, world!")).
|
21
|
+
expect(new Box().add(new Text("Hello, world!")).renderWrapper).toBe(`<div >Hello, world!</div>`)
|
22
22
|
})
|
23
23
|
})
|
@@ -14,8 +14,8 @@ export class Box {
|
|
14
14
|
return this;
|
15
15
|
}
|
16
16
|
|
17
|
-
get
|
18
|
-
return `<div ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
17
|
+
get renderWrapper(): string {
|
18
|
+
return `<div ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</div>`;
|
19
19
|
}
|
20
20
|
|
21
21
|
add_action(eventType: string, stateName: string, fnName: string, options: Record<string, any> = {}): this {
|
@@ -3,16 +3,16 @@ import { Button } from "./button"
|
|
3
3
|
|
4
4
|
describe("Button", () => {
|
5
5
|
it("returns empty string if no params", () => {
|
6
|
-
expect(new Button().
|
6
|
+
expect(new Button().renderWrapper).toBe("<button ></button>")
|
7
7
|
})
|
8
8
|
|
9
9
|
it("returns attributes and data attributes", () => {
|
10
|
-
expect(new Button({ id: "1", "data-foo": "bar" }).
|
10
|
+
expect(new Button({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<button id='1' data-foo='bar'></button>`)
|
11
11
|
})
|
12
12
|
|
13
13
|
it("returns attributes and data attributes with custom data attributes", () => {
|
14
|
-
expect(new Button({ id: "1", data: { foo: "bar" } }).
|
15
|
-
expect(new Button({ id: "1", data: { foo: "bar", baz: "qux" } }).
|
16
|
-
expect(new Button({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
14
|
+
expect(new Button({ id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<button id='1' data-foo='bar'></button>`)
|
15
|
+
expect(new Button({ id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<button id='1' data-foo='bar' data-baz='qux'></button>`)
|
16
|
+
expect(new Button({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<button id='1' data-foo-baz='qux' data-foo-quux='corge'></button>`)
|
17
17
|
})
|
18
18
|
})
|
@@ -14,8 +14,8 @@ export class Button {
|
|
14
14
|
return this;
|
15
15
|
}
|
16
16
|
|
17
|
-
get
|
18
|
-
return `<button ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
17
|
+
get renderWrapper(): string {
|
18
|
+
return `<button ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</button>`;
|
19
19
|
}
|
20
20
|
|
21
21
|
add_action(event: string, klass: string, fn: string, options: Record<string, any> = {}): Button {
|
@@ -3,14 +3,14 @@ import { Checkbox } from "./checkbox"
|
|
3
3
|
|
4
4
|
describe("Checkbox", () => {
|
5
5
|
it("returns empty string if no params", () => {
|
6
|
-
expect(new Checkbox({}, "foo").
|
6
|
+
expect(new Checkbox({}, "foo").renderWrapper).toBe("<input type='checkbox' data-attribute='foo' value=''/>")
|
7
7
|
})
|
8
8
|
|
9
9
|
it("returns attributes and data attributes", () => {
|
10
|
-
expect(new Checkbox({ foo: "bar" }, "foo", { id: "1", "data-foo": "bar" }).
|
10
|
+
expect(new Checkbox({ foo: "bar" }, "foo", { id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<input type='checkbox' id='1' data-foo='bar' data-attribute='foo' value='bar'/>`)
|
11
11
|
})
|
12
12
|
|
13
13
|
it("returns attributes and data attributes with custom data attributes", () => {
|
14
|
-
expect(new Checkbox({ foo: "bar" }, "foo", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
14
|
+
expect(new Checkbox({ foo: "bar" }, "foo", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<input type='checkbox' id='1' data-attribute='foo' data-foo-baz='qux' data-foo-quux='corge' value='bar'/>`)
|
15
15
|
})
|
16
16
|
})
|
@@ -12,7 +12,7 @@ export class Checkbox {
|
|
12
12
|
this.attributes["data-attribute"] = attribute;
|
13
13
|
}
|
14
14
|
|
15
|
-
get
|
15
|
+
get renderWrapper(): string {
|
16
16
|
return `<input type='checkbox' ${htmlAttributes(this.attributes)} value='${this.state[this.attribute] || ""}'/>`;
|
17
17
|
}
|
18
18
|
|
@@ -4,23 +4,23 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("Code", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new Code().
|
7
|
+
expect(new Code().renderWrapper).toBe("<code ></code>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new Code({ id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new Code({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<code id='1' data-foo='bar'></code>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new Code({ id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new Code({ id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new Code({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new Code({ id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<code id='1' data-foo='bar'></code>`)
|
16
|
+
expect(new Code({ id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<code id='1' data-foo='bar' data-baz='qux'></code>`)
|
17
|
+
expect(new Code({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<code id='1' data-foo-baz='qux' data-foo-quux='corge'></code>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
21
|
const text = new Text("Hello")
|
22
22
|
const code = new Code()
|
23
23
|
code.add(text)
|
24
|
-
expect(code.
|
24
|
+
expect(code.renderWrapper).toBe(`<code >Hello</code>`)
|
25
25
|
})
|
26
26
|
})
|
@@ -9,8 +9,8 @@ export class Code {
|
|
9
9
|
this.attributes = attributes;
|
10
10
|
}
|
11
11
|
|
12
|
-
get
|
13
|
-
return `<code ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
12
|
+
get renderWrapper(): string {
|
13
|
+
return `<code ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</code>`;
|
14
14
|
}
|
15
15
|
|
16
16
|
add(child: any): Code {
|
@@ -5,18 +5,22 @@ export class Component {
|
|
5
5
|
id: string;
|
6
6
|
_state: any;
|
7
7
|
_errors: any[];
|
8
|
-
_root: Box;
|
9
8
|
_c: Presets;
|
10
9
|
|
11
10
|
constructor(state: any = {}, id: string = Math.random().toString(36).substring(2, 10), errors: any[] = []) {
|
12
11
|
this._state = state;
|
13
12
|
this.id = id;
|
14
13
|
this._errors = errors;
|
15
|
-
this._root = new Box({ data: { component: this.constructor.name, state: JSON.stringify(this._state), id: this.id, errors: this._errors } });
|
16
14
|
this._c = new Presets()
|
17
15
|
}
|
18
16
|
|
19
|
-
get render():
|
20
|
-
return
|
17
|
+
get render(): any {
|
18
|
+
return new Box({});
|
19
|
+
}
|
20
|
+
|
21
|
+
get renderWrapper(): string {
|
22
|
+
const root = this.render;
|
23
|
+
root.attributes = { ...root.attributes, data: { ...root.attributes.data, component: this.constructor.name, state: JSON.stringify(this._state), id: this.id, errors: this._errors } };
|
24
|
+
return root.renderWrapper;
|
21
25
|
}
|
22
26
|
}
|
@@ -3,14 +3,14 @@ import { DateTimeField } from "./datetime-field"
|
|
3
3
|
|
4
4
|
describe("DateTimeField", () => {
|
5
5
|
it("returns empty string if no params", () => {
|
6
|
-
expect(new DateTimeField({}, "foo").
|
6
|
+
expect(new DateTimeField({}, "foo").renderWrapper).toBe("<input type='datetime-local' data-attribute='foo' value=''/>")
|
7
7
|
})
|
8
8
|
|
9
9
|
it("returns attributes and data attributes", () => {
|
10
|
-
expect(new DateTimeField({ foo: new Date("2024-10-12T12:00") }, "foo", { id: "1", "data-foo": "bar" }).
|
10
|
+
expect(new DateTimeField({ foo: new Date("2024-10-12T12:00") }, "foo", { id: "1", "data-foo": "bar" }).renderWrapper).toMatch(/<input type='datetime-local' id='1' data-foo='bar' data-attribute='foo' value='.+'\/>/)
|
11
11
|
})
|
12
12
|
|
13
13
|
it("returns attributes and data attributes with custom data attributes", () => {
|
14
|
-
expect(new DateTimeField({ foo: new Date("2024-10-12T12:00") }, "foo", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
14
|
+
expect(new DateTimeField({ foo: new Date("2024-10-12T12:00") }, "foo", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toMatch(/<input type='datetime-local' id='1' data-attribute='foo' data-foo-baz='qux' data-foo-quux='corge' value='.+'\/>/)
|
15
15
|
})
|
16
16
|
})
|
@@ -12,7 +12,7 @@ export class DateTimeField {
|
|
12
12
|
this.attributes["data-attribute"] = attribute;
|
13
13
|
}
|
14
14
|
|
15
|
-
get
|
15
|
+
get renderWrapper(): string {
|
16
16
|
const value = this.state[this.attribute] ? this.datetime_local_value(this.state[this.attribute]) : "";
|
17
17
|
return `<input type='datetime-local' ${htmlAttributes(this.attributes)} value='${value}'/>`;
|
18
18
|
}
|
@@ -5,23 +5,23 @@ import { Text } from "./text"
|
|
5
5
|
|
6
6
|
describe("Element", () => {
|
7
7
|
it("returns empty string if no params", () => {
|
8
|
-
expect(new Element("blockquote").
|
8
|
+
expect(new Element("blockquote").renderWrapper).toBe("<blockquote ></blockquote>")
|
9
9
|
})
|
10
10
|
|
11
11
|
it("returns attributes and data attributes", () => {
|
12
|
-
expect(new Element("blockquote", { id: "1", "data-foo": "bar" }).
|
12
|
+
expect(new Element("blockquote", { id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<blockquote id='1' data-foo='bar'></blockquote>`)
|
13
13
|
})
|
14
14
|
|
15
15
|
it("returns attributes and data attributes with custom data attributes", () => {
|
16
|
-
expect(new Element("blockquote", { id: "1", data: { foo: "bar" } }).
|
17
|
-
expect(new Element("blockquote", { id: "1", data: { foo: "bar", baz: "qux" } }).
|
18
|
-
expect(new Element("blockquote", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
16
|
+
expect(new Element("blockquote", { id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<blockquote id='1' data-foo='bar'></blockquote>`)
|
17
|
+
expect(new Element("blockquote", { id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<blockquote id='1' data-foo='bar' data-baz='qux'></blockquote>`)
|
18
|
+
expect(new Element("blockquote", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<blockquote id='1' data-foo-baz='qux' data-foo-quux='corge'></blockquote>`)
|
19
19
|
})
|
20
20
|
|
21
21
|
it("adds children", () => {
|
22
22
|
const text = new Text("Hello")
|
23
23
|
const blockQuote = new Element("blockquote")
|
24
24
|
blockQuote.add(text)
|
25
|
-
expect(blockQuote.
|
25
|
+
expect(blockQuote.renderWrapper).toBe(`<blockquote >Hello</blockquote>`)
|
26
26
|
})
|
27
27
|
})
|
@@ -11,8 +11,8 @@ export class Element {
|
|
11
11
|
this.attributes = attributes;
|
12
12
|
}
|
13
13
|
|
14
|
-
get
|
15
|
-
return `<${this.type} ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
14
|
+
get renderWrapper(): string {
|
15
|
+
return `<${this.type} ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</${this.type}>`;
|
16
16
|
}
|
17
17
|
|
18
18
|
add(child: any): Element {
|
@@ -3,6 +3,6 @@ import { Embed } from "./embed"
|
|
3
3
|
|
4
4
|
describe("Embed", () => {
|
5
5
|
it("returns empty string if no params", () => {
|
6
|
-
expect(new Embed("<blockquote></blockquote>").
|
6
|
+
expect(new Embed("<blockquote></blockquote>").renderWrapper).toBe("<blockquote></blockquote>")
|
7
7
|
})
|
8
8
|
})
|
@@ -4,23 +4,23 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("Emphasis", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new Emphasis().
|
7
|
+
expect(new Emphasis().renderWrapper).toBe("<em ></em>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new Emphasis({ id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new Emphasis({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<em id='1' data-foo='bar'></em>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new Emphasis({ id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new Emphasis({ id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new Emphasis({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new Emphasis({ id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<em id='1' data-foo='bar'></em>`)
|
16
|
+
expect(new Emphasis({ id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<em id='1' data-foo='bar' data-baz='qux'></em>`)
|
17
|
+
expect(new Emphasis({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<em id='1' data-foo-baz='qux' data-foo-quux='corge'></em>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
21
|
const text = new Text("Hello")
|
22
22
|
const emphasis = new Emphasis()
|
23
23
|
emphasis.add(text)
|
24
|
-
expect(emphasis.
|
24
|
+
expect(emphasis.renderWrapper).toBe(`<em >Hello</em>`)
|
25
25
|
})
|
26
26
|
})
|
@@ -9,8 +9,8 @@ export class Emphasis {
|
|
9
9
|
this.attributes = attributes;
|
10
10
|
}
|
11
11
|
|
12
|
-
get
|
13
|
-
return `<em ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
12
|
+
get renderWrapper(): string {
|
13
|
+
return `<em ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</em>`;
|
14
14
|
}
|
15
15
|
|
16
16
|
add(child: any): Emphasis {
|
@@ -4,23 +4,23 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("Form", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new Form().
|
7
|
+
expect(new Form().renderWrapper).toBe("<form ></form>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new Form({ id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new Form({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<form id='1' data-foo='bar'></form>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new Form({ id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new Form({ id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new Form({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new Form({ id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<form id='1' data-foo='bar'></form>`)
|
16
|
+
expect(new Form({ id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<form id='1' data-foo='bar' data-baz='qux'></form>`)
|
17
|
+
expect(new Form({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<form id='1' data-foo-baz='qux' data-foo-quux='corge'></form>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
21
|
const text = new Text("Hello")
|
22
22
|
const form = new Form()
|
23
23
|
form.add(text)
|
24
|
-
expect(form.
|
24
|
+
expect(form.renderWrapper).toBe(`<form >Hello</form>`)
|
25
25
|
})
|
26
26
|
})
|
@@ -9,8 +9,8 @@ export class Form {
|
|
9
9
|
this.attributes = attributes;
|
10
10
|
}
|
11
11
|
|
12
|
-
get
|
13
|
-
return `<form ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
12
|
+
get renderWrapper(): string {
|
13
|
+
return `<form ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</form>`;
|
14
14
|
}
|
15
15
|
|
16
16
|
add(child: any): Form {
|
@@ -4,20 +4,20 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("Heading", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new Heading(1).
|
7
|
+
expect(new Heading(1).renderWrapper).toBe("<h1 ></h1>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new Heading(1, { id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new Heading(1, { id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<h1 id='1' data-foo='bar'></h1>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new Heading(1, { id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new Heading(1, { id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new Heading(1, { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new Heading(1, { id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<h1 id='1' data-foo='bar'></h1>`)
|
16
|
+
expect(new Heading(1, { id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<h1 id='1' data-foo='bar' data-baz='qux'></h1>`)
|
17
|
+
expect(new Heading(1, { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<h1 id='1' data-foo-baz='qux' data-foo-quux='corge'></h1>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
|
-
expect(new Heading(1).add(new Text("Hello")).
|
21
|
+
expect(new Heading(1).add(new Text("Hello")).renderWrapper).toBe(`<h1 >Hello</h1>`)
|
22
22
|
})
|
23
23
|
})
|
@@ -10,8 +10,8 @@ export class Heading {
|
|
10
10
|
this.attributes = attributes;
|
11
11
|
}
|
12
12
|
|
13
|
-
get
|
14
|
-
return `<h${this.level} ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
13
|
+
get renderWrapper(): string {
|
14
|
+
return `<h${this.level} ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</h${this.level}>`;
|
15
15
|
}
|
16
16
|
|
17
17
|
add(child: any): Heading {
|
@@ -3,10 +3,10 @@ import { Image } from "./image"
|
|
3
3
|
|
4
4
|
describe("Image", () => {
|
5
5
|
it("returns empty string if no params", () => {
|
6
|
-
expect(new Image("https://example.com/image.png", "").
|
6
|
+
expect(new Image("https://example.com/image.png", "").renderWrapper).toBe("<img src='https://example.com/image.png' alt='' />")
|
7
7
|
})
|
8
8
|
|
9
9
|
it("returns attributes and data attributes", () => {
|
10
|
-
expect(new Image("https://example.com/image.png", "test", { id: "1", "data-foo": "bar" }).
|
10
|
+
expect(new Image("https://example.com/image.png", "test", { id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<img src='https://example.com/image.png' alt='test' id='1' data-foo='bar'/>`)
|
11
11
|
})
|
12
12
|
})
|
@@ -4,20 +4,20 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("Link", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new Link("").
|
7
|
+
expect(new Link("").renderWrapper).toBe("<a href='' ></a>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new Link("#").add(new Text("")).
|
11
|
+
expect(new Link("#").add(new Text("")).renderWrapper).toBe(`<a href='#' ></a>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new Link("#", { id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new Link("#", { id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new Link("#", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new Link("#", { id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<a href='#' id='1' data-foo='bar'></a>`)
|
16
|
+
expect(new Link("#", { id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<a href='#' id='1' data-foo='bar' data-baz='qux'></a>`)
|
17
|
+
expect(new Link("#", { id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<a href='#' id='1' data-foo-baz='qux' data-foo-quux='corge'></a>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
|
-
expect(new Link("#").add(new Text("Hello")).
|
21
|
+
expect(new Link("#").add(new Text("Hello")).renderWrapper).toBe(`<a href='#' >Hello</a>`)
|
22
22
|
})
|
23
23
|
})
|
@@ -10,8 +10,8 @@ export class Link {
|
|
10
10
|
this.href = href;
|
11
11
|
}
|
12
12
|
|
13
|
-
get
|
14
|
-
return `<a href='${this.href}' ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
13
|
+
get renderWrapper(): string {
|
14
|
+
return `<a href='${this.href}' ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</a>`;
|
15
15
|
}
|
16
16
|
|
17
17
|
add(child: any): Link {
|
@@ -4,21 +4,21 @@ import { Text } from "./text"
|
|
4
4
|
|
5
5
|
describe("ListItem", () => {
|
6
6
|
it("returns empty string if no params", () => {
|
7
|
-
expect(new ListItem().
|
7
|
+
expect(new ListItem().renderWrapper).toBe("<li ></li>")
|
8
8
|
})
|
9
9
|
|
10
10
|
it("returns attributes and data attributes", () => {
|
11
|
-
expect(new ListItem({ id: "1", "data-foo": "bar" }).
|
11
|
+
expect(new ListItem({ id: "1", "data-foo": "bar" }).renderWrapper).toBe(`<li id='1' data-foo='bar'></li>`)
|
12
12
|
})
|
13
13
|
|
14
14
|
it("returns attributes and data attributes with custom data attributes", () => {
|
15
|
-
expect(new ListItem({ id: "1", data: { foo: "bar" } }).
|
16
|
-
expect(new ListItem({ id: "1", data: { foo: "bar", baz: "qux" } }).
|
17
|
-
expect(new ListItem({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).
|
15
|
+
expect(new ListItem({ id: "1", data: { foo: "bar" } }).renderWrapper).toBe(`<li id='1' data-foo='bar'></li>`)
|
16
|
+
expect(new ListItem({ id: "1", data: { foo: "bar", baz: "qux" } }).renderWrapper).toBe(`<li id='1' data-foo='bar' data-baz='qux'></li>`)
|
17
|
+
expect(new ListItem({ id: "1", data: { foo: { baz: "qux", quux: "corge" } } }).renderWrapper).toBe(`<li id='1' data-foo-baz='qux' data-foo-quux='corge'></li>`)
|
18
18
|
})
|
19
19
|
|
20
20
|
it("adds children", () => {
|
21
21
|
const text = new Text("Hello, world!")
|
22
|
-
expect(new ListItem().add(text).
|
22
|
+
expect(new ListItem().add(text).renderWrapper).toBe(`<li >Hello, world!</li>`)
|
23
23
|
})
|
24
24
|
})
|
@@ -14,7 +14,7 @@ export class ListItem {
|
|
14
14
|
return this;
|
15
15
|
}
|
16
16
|
|
17
|
-
get
|
18
|
-
return `<li ${htmlAttributes(this.attributes)}>${this.children.map(child => child.
|
17
|
+
get renderWrapper(): string {
|
18
|
+
return `<li ${htmlAttributes(this.attributes)}>${this.children.map(child => child.renderWrapper).join("")}</li>`;
|
19
19
|
}
|
20
20
|
}
|