clapton 0.0.17 → 0.0.18
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|