clapton 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/app/helpers/clapton/clapton_helper.rb +16 -1
  4. data/lib/clapton/engine.rb +14 -10
  5. data/lib/clapton/javascripts/dist/client.js +31 -19
  6. data/lib/clapton/javascripts/dist/components-for-test.js +439 -0
  7. data/lib/clapton/javascripts/dist/components.js +356 -382
  8. data/lib/clapton/javascripts/node_modules/diff-dom/LICENSE.txt +165 -0
  9. data/lib/clapton/javascripts/node_modules/diff-dom/README.md +224 -0
  10. data/lib/clapton/javascripts/node_modules/diff-dom/browser/diffDOM.js +2 -0
  11. data/lib/clapton/javascripts/node_modules/diff-dom/browser/diffDOM.js.map +1 -0
  12. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/TraceLogger.d.ts +28 -0
  13. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/apply.d.ts +4 -0
  14. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/fromVirtual.d.ts +2 -0
  15. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/index.d.ts +2 -0
  16. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/undo.d.ts +3 -0
  17. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/helpers.d.ts +11 -0
  18. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/index.d.ts +10 -0
  19. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/types.d.ts +104 -0
  20. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/apply.d.ts +3 -0
  21. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/diff.d.ts +22 -0
  22. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/fromDOM.d.ts +2 -0
  23. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/fromString.d.ts +2 -0
  24. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/helpers.d.ts +40 -0
  25. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/index.d.ts +3 -0
  26. data/lib/clapton/javascripts/node_modules/diff-dom/dist/dts/index.d.ts +2 -0
  27. data/lib/clapton/javascripts/node_modules/diff-dom/dist/index.d.ts +136 -0
  28. data/lib/clapton/javascripts/node_modules/diff-dom/dist/index.js +1996 -0
  29. data/lib/clapton/javascripts/node_modules/diff-dom/dist/index.js.map +1 -0
  30. data/lib/clapton/javascripts/node_modules/diff-dom/dist/index.min.js +2 -0
  31. data/lib/clapton/javascripts/node_modules/diff-dom/dist/index.min.js.map +1 -0
  32. data/lib/clapton/javascripts/node_modules/diff-dom/dist/module.js +1991 -0
  33. data/lib/clapton/javascripts/node_modules/diff-dom/dist/module.js.map +1 -0
  34. data/lib/clapton/javascripts/node_modules/diff-dom/index.html +62 -0
  35. data/lib/clapton/javascripts/node_modules/diff-dom/package.json +54 -0
  36. data/lib/clapton/javascripts/node_modules/diff-dom/rollup.config.mjs +67 -0
  37. data/lib/clapton/javascripts/node_modules/diff-dom/src/TraceLogger.ts +143 -0
  38. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/apply.ts +227 -0
  39. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/fromVirtual.ts +83 -0
  40. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/index.ts +2 -0
  41. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/undo.ts +90 -0
  42. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/helpers.ts +40 -0
  43. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/index.ts +121 -0
  44. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/types.ts +154 -0
  45. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/apply.ts +349 -0
  46. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/diff.ts +855 -0
  47. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/fromDOM.ts +74 -0
  48. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/fromString.ts +239 -0
  49. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/helpers.ts +461 -0
  50. data/lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/index.ts +3 -0
  51. data/lib/clapton/javascripts/node_modules/diff-dom/src/index.ts +2 -0
  52. data/lib/clapton/javascripts/node_modules/diff-dom/tsconfig.json +103 -0
  53. data/lib/clapton/javascripts/rollup.config.mjs +17 -2
  54. data/lib/clapton/javascripts/src/actions/initialize-actions.ts +6 -3
  55. data/lib/clapton/javascripts/src/channel/clapton-channel.js +6 -3
  56. data/lib/clapton/javascripts/src/client.ts +15 -15
  57. data/lib/clapton/javascripts/src/components-for-test.ts +29 -0
  58. data/lib/clapton/javascripts/src/components.ts +4 -1
  59. data/lib/clapton/javascripts/src/dom/update-component.ts +3 -2
  60. data/lib/clapton/javascripts/src/inputs/initialize-inputs.ts +2 -2
  61. data/lib/clapton/test_helper/base.rb +1 -1
  62. data/lib/clapton/version.rb +1 -1
  63. metadata +49 -3
  64. data/lib/clapton/javascripts/src/dom/update-component.spec.ts +0 -32
@@ -2,28 +2,28 @@ import { initializeActions } from "actions/initialize-actions";
2
2
  import { initializeInputs } from "inputs/initialize-inputs";
3
3
 
4
4
  interface ComponentDefinition {
5
- component: new (state: any) => ComponentInstance;
5
+ component: string;
6
6
  state: any;
7
7
  id: string;
8
8
  }
9
9
 
10
- interface ComponentInstance {
11
- render: string;
12
- [key: string]: any;
13
- }
14
-
15
- const initializeComponents = () => {
10
+ const initializeComponents = async () => {
16
11
  const components = document.querySelector("#clapton")?.getAttribute("data-clapton") || "[]";
17
- JSON.parse(components).forEach((component: ComponentDefinition) => createAndAppendComponent(component, document.querySelector("#clapton")!));
18
- document.querySelectorAll(".clapton-component").forEach((element) => {
12
+ const componentArray = JSON.parse(components);
13
+ for (const component of componentArray) {
14
+ await createAndAppendComponent(component, document.querySelector("#clapton")!);
15
+ }
16
+ const elements = document.querySelectorAll(".clapton-component");
17
+ for (const element of elements) {
19
18
  const component = JSON.parse(element.getAttribute("data-clapton") || "{}");
20
- createAndAppendComponent(component, element as HTMLElement);
21
- });
19
+ await createAndAppendComponent(component, element as HTMLElement);
20
+ }
22
21
  };
23
22
 
24
- const createAndAppendComponent = (component: ComponentDefinition, element: HTMLElement) => {
23
+ const createAndAppendComponent = async (component: ComponentDefinition, element: HTMLElement) => {
25
24
  const componentDom = document.createElement('div');
26
- const instance = new (window[component.component as any] as any)(component.state);
25
+ const module = await import(`${component.component}`);
26
+ const instance = new (module[component.component] as any)(component.state);
27
27
  componentDom.innerHTML = instance.render;
28
28
  const firstChild = componentDom.firstChild as HTMLElement;
29
29
  if (firstChild) {
@@ -31,8 +31,8 @@ const createAndAppendComponent = (component: ComponentDefinition, element: HTMLE
31
31
  }
32
32
  };
33
33
 
34
- document.addEventListener("DOMContentLoaded", () => {
35
- initializeComponents();
34
+ document.addEventListener("DOMContentLoaded", async () => {
35
+ await initializeComponents();
36
36
  initializeActions();
37
37
  initializeInputs();
38
38
  });
@@ -0,0 +1,29 @@
1
+ import { BlockQuote } from "./components/block-quote"
2
+ import { Box } from "./components/box"
3
+ import { Button } from "./components/button"
4
+ import { Checkbox } from "./components/checkbox"
5
+ import { Code } from "./components/code"
6
+ import { DateTimeField } from "./components/datetime-field"
7
+ import { Element } from "./components/element"
8
+ import { Embed } from "./components/embed"
9
+ import { Emphasis } from "./components/emphasis"
10
+ import { Form } from "./components/form"
11
+ import { Heading } from "./components/heading"
12
+ import { Image } from "./components/image"
13
+ import { Link } from "./components/link"
14
+ import { ListItem } from "./components/list-item"
15
+ import { List } from "./components/list"
16
+ import { OrderedList } from "./components/ordered-list"
17
+ import { Paragraph } from "./components/paragraph"
18
+ import { Quote } from "./components/quote"
19
+ import { RadioButton } from "./components/radio-button"
20
+ import { Select } from "./components/select"
21
+ import { Span } from "./components/span"
22
+ import { Component } from "./components/component"
23
+ import { TextField } from "./components/text-field"
24
+ import { Text } from "./components/text"
25
+
26
+
27
+ export {
28
+ Box, Component, Text, TextField, Button, DateTimeField, BlockQuote, Checkbox, Code, Element, Emphasis, Form, Heading, Image, Link, List, ListItem, OrderedList, Paragraph, Quote, RadioButton, Select, Span, Embed
29
+ };
@@ -23,4 +23,7 @@ import { Component } from "./components/component"
23
23
  import { TextField } from "./components/text-field"
24
24
  import { Text } from "./components/text"
25
25
 
26
- export { Box, Component, Text, TextField, Button, DateTimeField, BlockQuote, Checkbox, Code, Element, Emphasis, Form, Heading, Image, Link, List, ListItem, OrderedList, Paragraph, Quote, RadioButton, Select, Span, Embed };
26
+
27
+ export const Clapton = {
28
+ Box, Component, Text, TextField, Button, DateTimeField, BlockQuote, Checkbox, Code, Element, Emphasis, Form, Heading, Image, Link, List, ListItem, OrderedList, Paragraph, Quote, RadioButton, Select, Span, Embed
29
+ };
@@ -1,10 +1,11 @@
1
1
  import morphdom from "morphdom";
2
2
 
3
- export const updateComponent = (component: HTMLElement, state: any, property: string, target: HTMLInputElement) => {
3
+ export const updateComponent = async (component: HTMLElement, state: any, property: string, target: HTMLInputElement) => {
4
4
  state[property] = target.value;
5
5
  component.setAttribute("data-state", JSON.stringify(state));
6
6
  const componentName = component.getAttribute("data-component") as string;
7
- const ComponentClass = window[componentName as any] as any;
7
+ const module = await import(`${componentName}`);
8
+ const ComponentClass = module[componentName] as any;
8
9
  const instance = new ComponentClass(state, component.dataset.id);
9
10
  morphdom(component, instance.render);
10
11
  };
@@ -8,8 +8,8 @@ export const initializeInputs = () => {
8
8
  const state = JSON.parse(component.getAttribute("data-state") || "{}");
9
9
  if (!attribute || !component) return;
10
10
  if (element.tagName === "INPUT") {
11
- element.addEventListener("input", (event: Event) => {
12
- updateComponent(component, state, attribute, event.target as HTMLInputElement);
11
+ element.addEventListener("input", async (event: Event) => {
12
+ await updateComponent(component, state, attribute, event.target as HTMLInputElement);
13
13
  });
14
14
  }
15
15
  });
@@ -4,7 +4,7 @@ module Clapton
4
4
  require "execjs"
5
5
 
6
6
  def render_component(component, **kwargs)
7
- js = File.read(File.join(__dir__, "..", "javascripts", "dist", "components.js"))
7
+ js = File.read(File.join(__dir__, "..", "javascripts", "dist", "components-for-test.js"))
8
8
  Dir.glob(Rails.root.join("app", "components", "**", "*.rb")).each do |file|
9
9
  js += Ruby2JS.convert(File.read(file), preset: true)
10
10
  js += "\n"
@@ -1,4 +1,4 @@
1
1
  module Clapton
2
- VERSION = '0.0.13'
2
+ VERSION = '0.0.14'
3
3
  end
4
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clapton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Moeki Kawakami
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-14 00:00:00.000000000 Z
11
+ date: 2024-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -131,6 +131,7 @@ files:
131
131
  - lib/clapton.rb
132
132
  - lib/clapton/engine.rb
133
133
  - lib/clapton/javascripts/dist/client.js
134
+ - lib/clapton/javascripts/dist/components-for-test.js
134
135
  - lib/clapton/javascripts/dist/components.js
135
136
  - lib/clapton/javascripts/node_modules/@adobe/css-tools/LICENSE
136
137
  - lib/clapton/javascripts/node_modules/@adobe/css-tools/Readme.md
@@ -2168,6 +2169,51 @@ files:
2168
2169
  - lib/clapton/javascripts/node_modules/dequal/lite/index.mjs
2169
2170
  - lib/clapton/javascripts/node_modules/dequal/package.json
2170
2171
  - lib/clapton/javascripts/node_modules/dequal/readme.md
2172
+ - lib/clapton/javascripts/node_modules/diff-dom/LICENSE.txt
2173
+ - lib/clapton/javascripts/node_modules/diff-dom/README.md
2174
+ - lib/clapton/javascripts/node_modules/diff-dom/browser/diffDOM.js
2175
+ - lib/clapton/javascripts/node_modules/diff-dom/browser/diffDOM.js.map
2176
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/TraceLogger.d.ts
2177
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/apply.d.ts
2178
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/fromVirtual.d.ts
2179
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/index.d.ts
2180
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/dom/undo.d.ts
2181
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/helpers.d.ts
2182
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/index.d.ts
2183
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/types.d.ts
2184
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/apply.d.ts
2185
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/diff.d.ts
2186
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/fromDOM.d.ts
2187
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/fromString.d.ts
2188
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/helpers.d.ts
2189
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/diffDOM/virtual/index.d.ts
2190
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/dts/index.d.ts
2191
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/index.d.ts
2192
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/index.js
2193
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/index.js.map
2194
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/index.min.js
2195
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/index.min.js.map
2196
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/module.js
2197
+ - lib/clapton/javascripts/node_modules/diff-dom/dist/module.js.map
2198
+ - lib/clapton/javascripts/node_modules/diff-dom/index.html
2199
+ - lib/clapton/javascripts/node_modules/diff-dom/package.json
2200
+ - lib/clapton/javascripts/node_modules/diff-dom/rollup.config.mjs
2201
+ - lib/clapton/javascripts/node_modules/diff-dom/src/TraceLogger.ts
2202
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/apply.ts
2203
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/fromVirtual.ts
2204
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/index.ts
2205
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/dom/undo.ts
2206
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/helpers.ts
2207
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/index.ts
2208
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/types.ts
2209
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/apply.ts
2210
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/diff.ts
2211
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/fromDOM.ts
2212
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/fromString.ts
2213
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/helpers.ts
2214
+ - lib/clapton/javascripts/node_modules/diff-dom/src/diffDOM/virtual/index.ts
2215
+ - lib/clapton/javascripts/node_modules/diff-dom/src/index.ts
2216
+ - lib/clapton/javascripts/node_modules/diff-dom/tsconfig.json
2171
2217
  - lib/clapton/javascripts/node_modules/dom-accessibility-api/LICENSE.md
2172
2218
  - lib/clapton/javascripts/node_modules/dom-accessibility-api/README.md
2173
2219
  - lib/clapton/javascripts/node_modules/dom-accessibility-api/dist/accessible-description.d.ts
@@ -6658,6 +6704,7 @@ files:
6658
6704
  - lib/clapton/javascripts/src/actions/initialize-actions.ts
6659
6705
  - lib/clapton/javascripts/src/channel/clapton-channel.js
6660
6706
  - lib/clapton/javascripts/src/client.ts
6707
+ - lib/clapton/javascripts/src/components-for-test.ts
6661
6708
  - lib/clapton/javascripts/src/components.ts
6662
6709
  - lib/clapton/javascripts/src/components/block-quote.spec.ts
6663
6710
  - lib/clapton/javascripts/src/components/block-quote.ts
@@ -6709,7 +6756,6 @@ files:
6709
6756
  - lib/clapton/javascripts/src/components/text-field.ts
6710
6757
  - lib/clapton/javascripts/src/components/text.spec.ts
6711
6758
  - lib/clapton/javascripts/src/components/text.ts
6712
- - lib/clapton/javascripts/src/dom/update-component.spec.ts
6713
6759
  - lib/clapton/javascripts/src/dom/update-component.ts
6714
6760
  - lib/clapton/javascripts/src/html/html-attributes.spec.ts
6715
6761
  - lib/clapton/javascripts/src/html/html-attributes.ts
@@ -1,32 +0,0 @@
1
- import { updateComponent } from "./update-component";
2
- import { describe, it, expect } from "vitest";
3
-
4
- describe("updateComponent", () => {
5
- it("updates the component", () => {
6
- const component = document.createElement("div");
7
- component.innerHTML = `<div data-component="TestComponent" data-state='{"testAttribute": "initial"}'></div>`;
8
-
9
- const input = document.createElement("div");
10
- input.innerHTML = `<input value="updated" data-attribute="testAttribute">`;
11
-
12
- class TestComponent {
13
- state: any;
14
- constructor(state: any) {
15
- this.state = state;
16
- }
17
- get render() {
18
- return `<div>${this.state.testAttribute}</div>`;
19
- }
20
- };
21
- (window as any).TestComponent = TestComponent;
22
-
23
- updateComponent(
24
- component.firstChild as HTMLElement,
25
- JSON.parse(component.getAttribute("data-state") || "{}"),
26
- "testAttribute",
27
- input.firstChild as HTMLInputElement
28
- );
29
-
30
- expect(component.textContent).toBe("updated");
31
- });
32
- });