ovto 0.6.2 → 0.7.0

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile.lock +15 -16
  4. data/Rakefile +2 -9
  5. data/book/SUMMARY.md +15 -11
  6. data/book/book.toml +10 -0
  7. data/docs/.nojekyll +1 -0
  8. data/docs/404.html +189 -0
  9. data/docs/FontAwesome/css/font-awesome.css +4 -0
  10. data/docs/FontAwesome/fonts/FontAwesome.ttf +0 -0
  11. data/docs/FontAwesome/fonts/fontawesome-webfont.eot +0 -0
  12. data/docs/FontAwesome/fonts/fontawesome-webfont.svg +2671 -0
  13. data/docs/{gitbook/fonts/fontawesome → FontAwesome/fonts}/fontawesome-webfont.ttf +0 -0
  14. data/docs/FontAwesome/fonts/fontawesome-webfont.woff +0 -0
  15. data/docs/FontAwesome/fonts/fontawesome-webfont.woff2 +0 -0
  16. data/docs/api/Array.html +4 -4
  17. data/docs/api/Hash.html +4 -4
  18. data/docs/api/MightyInspect.html +238 -0
  19. data/docs/api/Ovto/Actions.html +4 -4
  20. data/docs/api/Ovto/App.html +4 -4
  21. data/docs/api/Ovto/Component/MoreThanOneNode.html +5 -5
  22. data/docs/api/Ovto/Component.html +4 -4
  23. data/docs/api/Ovto/Middleware/Actions.html +4 -4
  24. data/docs/api/Ovto/Middleware/Base.html +5 -5
  25. data/docs/api/Ovto/Middleware/Component.html +5 -5
  26. data/docs/api/Ovto/Middleware.html +8 -8
  27. data/docs/api/Ovto/PureComponent/StateIsNotAvailable.html +4 -4
  28. data/docs/api/Ovto/PureComponent.html +4 -4
  29. data/docs/api/Ovto/Runtime.html +4 -4
  30. data/docs/api/Ovto/State/MissingValue.html +4 -4
  31. data/docs/api/Ovto/State/UnknownStateKey.html +4 -4
  32. data/docs/api/Ovto/State.html +12 -12
  33. data/docs/api/Ovto/WiredActionSet.html +4 -4
  34. data/docs/api/Ovto/WiredActions.html +4 -4
  35. data/docs/api/Ovto.html +8 -8
  36. data/docs/api/_index.html +5 -5
  37. data/docs/api/actions.html +215 -426
  38. data/docs/api/app.html +226 -432
  39. data/docs/api/component.html +268 -480
  40. data/docs/api/fetch.html +188 -393
  41. data/docs/api/file.README.html +4 -4
  42. data/docs/api/frames.html +1 -1
  43. data/docs/api/index.html +4 -4
  44. data/docs/api/middleware.html +249 -460
  45. data/docs/api/pure_component.html +186 -398
  46. data/docs/api/state.html +226 -438
  47. data/docs/api/top-level-namespace.html +4 -4
  48. data/docs/ayu-highlight.css +78 -0
  49. data/docs/book.js +688 -0
  50. data/docs/book.toml +10 -0
  51. data/docs/clipboard.min.js +7 -0
  52. data/docs/css/chrome.css +545 -0
  53. data/docs/css/general.css +203 -0
  54. data/docs/css/print.css +54 -0
  55. data/docs/css/variables.css +255 -0
  56. data/docs/elasticlunr.min.js +10 -0
  57. data/docs/favicon.png +0 -0
  58. data/docs/favicon.svg +22 -0
  59. data/docs/fonts/OPEN-SANS-LICENSE.txt +202 -0
  60. data/docs/fonts/SOURCE-CODE-PRO-LICENSE.txt +93 -0
  61. data/docs/fonts/fonts.css +100 -0
  62. data/docs/fonts/open-sans-v17-all-charsets-300.woff2 +0 -0
  63. data/docs/fonts/open-sans-v17-all-charsets-300italic.woff2 +0 -0
  64. data/docs/fonts/open-sans-v17-all-charsets-600.woff2 +0 -0
  65. data/docs/fonts/open-sans-v17-all-charsets-600italic.woff2 +0 -0
  66. data/docs/fonts/open-sans-v17-all-charsets-700.woff2 +0 -0
  67. data/docs/fonts/open-sans-v17-all-charsets-700italic.woff2 +0 -0
  68. data/docs/fonts/open-sans-v17-all-charsets-800.woff2 +0 -0
  69. data/docs/fonts/open-sans-v17-all-charsets-800italic.woff2 +0 -0
  70. data/docs/fonts/open-sans-v17-all-charsets-italic.woff2 +0 -0
  71. data/docs/fonts/open-sans-v17-all-charsets-regular.woff2 +0 -0
  72. data/docs/fonts/source-code-pro-v11-all-charsets-500.woff2 +0 -0
  73. data/docs/guides/debugging.html +184 -390
  74. data/docs/guides/development.html +171 -383
  75. data/docs/guides/install.html +206 -409
  76. data/docs/guides/tutorial.html +309 -525
  77. data/docs/highlight.css +82 -0
  78. data/docs/highlight.js +6 -0
  79. data/docs/index.html +390 -391
  80. data/docs/mark.min.js +7 -0
  81. data/docs/print.html +958 -0
  82. data/docs/searcher.js +483 -0
  83. data/docs/searchindex.js +1 -0
  84. data/docs/searchindex.json +1 -0
  85. data/docs/tomorrow-night.css +102 -0
  86. data/examples/sinatra/Gemfile.lock +25 -25
  87. data/examples/static/Gemfile.lock +8 -8
  88. data/lib/ovto/component.rb +2 -3
  89. data/lib/ovto/version.rb +1 -1
  90. metadata +47 -26
  91. data/docs/gitbook/fonts/fontawesome/FontAwesome.otf +0 -0
  92. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.eot +0 -0
  93. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.svg +0 -685
  94. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff +0 -0
  95. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 +0 -0
  96. data/docs/gitbook/gitbook-plugin-fontsettings/fontsettings.js +0 -240
  97. data/docs/gitbook/gitbook-plugin-fontsettings/website.css +0 -291
  98. data/docs/gitbook/gitbook-plugin-highlight/ebook.css +0 -135
  99. data/docs/gitbook/gitbook-plugin-highlight/website.css +0 -434
  100. data/docs/gitbook/gitbook-plugin-lunr/lunr.min.js +0 -7
  101. data/docs/gitbook/gitbook-plugin-lunr/search-lunr.js +0 -59
  102. data/docs/gitbook/gitbook-plugin-search/lunr.min.js +0 -7
  103. data/docs/gitbook/gitbook-plugin-search/search-engine.js +0 -50
  104. data/docs/gitbook/gitbook-plugin-search/search.css +0 -35
  105. data/docs/gitbook/gitbook-plugin-search/search.js +0 -213
  106. data/docs/gitbook/gitbook-plugin-sharing/buttons.js +0 -90
  107. data/docs/gitbook/gitbook.js +0 -4
  108. data/docs/gitbook/images/apple-touch-icon-precomposed-152.png +0 -0
  109. data/docs/gitbook/images/favicon.ico +0 -0
  110. data/docs/gitbook/style.css +0 -9
  111. data/docs/gitbook/theme.js +0 -4
  112. data/docs/search_index.json +0 -1
@@ -1,532 +1,320 @@
1
-
2
1
  <!DOCTYPE HTML>
3
- <html lang="" >
2
+ <html lang="en" class="sidebar-visible no-js light">
4
3
  <head>
4
+ <!-- Book generated using mdBook -->
5
5
  <meta charset="UTF-8">
6
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
7
- <title>Ovto::Component · GitBook</title>
8
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
9
- <meta name="description" content="">
10
- <meta name="generator" content="GitBook 3.2.2">
11
-
12
-
13
-
14
-
15
- <link rel="stylesheet" href="../gitbook/style.css">
16
-
17
-
18
-
19
-
20
- <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
21
-
22
-
23
-
24
- <link rel="stylesheet" href="../gitbook/gitbook-plugin-search/search.css">
25
-
26
-
27
-
28
- <link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
29
-
30
-
31
-
6
+ <title>Ovto::Component - Ovto Reference Manual</title>
32
7
 
33
-
34
8
 
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
- <meta name="HandheldFriendly" content="true"/>
53
- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
54
- <meta name="apple-mobile-web-app-capable" content="yes">
55
- <meta name="apple-mobile-web-app-status-bar-style" content="black">
56
- <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
57
- <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
58
-
59
-
60
- <link rel="next" href="pure_component.html" />
61
-
62
-
63
- <link rel="prev" href="actions.html" />
64
-
65
-
66
- </head>
67
- <body>
9
+ <!-- Custom HTML head -->
68
10
 
69
- <div class="book">
70
- <div class="book-summary">
71
-
72
-
73
- <div id="book-search-input" role="search">
74
- <input type="text" placeholder="Type to search" />
75
- </div>
76
-
77
-
78
- <nav role="navigation">
79
-
11
+ <meta name="description" content="">
12
+ <meta name="viewport" content="width=device-width, initial-scale=1">
13
+ <meta name="theme-color" content="#ffffff" />
80
14
 
15
+ <link rel="icon" href="../favicon.svg">
16
+ <link rel="shortcut icon" href="../favicon.png">
17
+ <link rel="stylesheet" href="../css/variables.css">
18
+ <link rel="stylesheet" href="../css/general.css">
19
+ <link rel="stylesheet" href="../css/chrome.css">
20
+ <link rel="stylesheet" href="../css/print.css" media="print">
81
21
 
82
- <ul class="summary">
83
-
84
-
22
+ <!-- Fonts -->
23
+ <link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
24
+ <link rel="stylesheet" href="../fonts/fonts.css">
85
25
 
86
-
26
+ <!-- Highlight.js Stylesheets -->
27
+ <link rel="stylesheet" href="../highlight.css">
28
+ <link rel="stylesheet" href="../tomorrow-night.css">
29
+ <link rel="stylesheet" href="../ayu-highlight.css">
87
30
 
88
-
89
-
90
-
91
-
92
- <li class="chapter " data-level="1.1" data-path="../">
93
-
94
- <a href="../">
95
-
96
-
97
- Introduction
98
-
99
- </a>
100
-
101
-
102
-
103
- </li>
104
-
105
- <li class="chapter " data-level="1.2" data-path="../guides/tutorial.html">
106
-
107
- <a href="../guides/tutorial.html">
108
-
109
-
110
- Getting Started
111
-
112
- </a>
113
-
114
-
115
-
116
- </li>
117
-
118
- <li class="chapter " data-level="1.3" data-path="../guides/install.html">
119
-
120
- <a href="../guides/install.html">
121
-
122
-
123
- Install
124
-
125
- </a>
126
-
127
-
128
-
129
- </li>
130
-
131
- <li class="chapter " data-level="1.4" >
132
-
133
- <span>
134
-
135
-
136
- API
137
-
138
- </span>
139
-
140
-
141
-
142
- <ul class="articles">
143
-
144
-
145
- <li class="chapter " data-level="1.4.1" data-path="app.html">
146
-
147
- <a href="app.html">
148
-
149
-
150
- Ovto::App
151
-
152
- </a>
153
-
154
-
155
-
156
- </li>
157
-
158
- <li class="chapter " data-level="1.4.2" data-path="state.html">
159
-
160
- <a href="state.html">
161
-
162
-
163
- Ovto::State
164
-
165
- </a>
166
-
167
-
168
-
169
- </li>
170
-
171
- <li class="chapter " data-level="1.4.3" data-path="actions.html">
172
-
173
- <a href="actions.html">
174
-
175
-
176
- Ovto::Actions
177
-
178
- </a>
179
-
180
-
181
-
182
- </li>
183
-
184
- <li class="chapter active" data-level="1.4.4" data-path="component.html">
185
-
186
- <a href="component.html">
187
-
188
-
189
- Ovto::Component
190
-
191
- </a>
192
-
193
-
194
-
195
- </li>
196
-
197
- <li class="chapter " data-level="1.4.5" data-path="pure_component.html">
198
-
199
- <a href="pure_component.html">
200
-
201
-
202
- Ovto::PureComponent
203
-
204
- </a>
205
-
206
-
207
-
208
- </li>
209
-
210
- <li class="chapter " data-level="1.4.6" data-path="middleware.html">
211
-
212
- <a href="middleware.html">
213
-
214
-
215
- Ovto::Middleware
216
-
217
- </a>
218
-
219
-
220
-
221
- </li>
222
-
223
- <li class="chapter " data-level="1.4.7" data-path="fetch.html">
224
-
225
- <a href="fetch.html">
226
-
227
-
228
- Ovto.fetch
229
-
230
- </a>
231
-
232
-
233
-
234
- </li>
235
-
236
-
237
- </ul>
238
-
239
- </li>
240
-
241
- <li class="chapter " data-level="1.5" >
242
-
243
- <span>
244
-
245
-
246
- Guides
247
-
248
- </span>
249
-
250
-
251
-
252
- <ul class="articles">
253
-
254
-
255
- <li class="chapter " data-level="1.5.1" data-path="../guides/debugging.html">
256
-
257
- <a href="../guides/debugging.html">
258
-
259
-
260
- Debugging
261
-
262
- </a>
263
-
264
-
265
-
266
- </li>
267
-
268
- <li class="chapter " data-level="1.5.2" data-path="../guides/development.html">
269
-
270
- <a href="../guides/development.html">
271
-
272
-
273
- Development
274
-
275
- </a>
276
-
277
-
278
-
279
- </li>
280
-
281
-
282
- </ul>
283
-
284
- </li>
285
-
286
-
287
-
288
-
289
- <li class="divider"></li>
290
-
291
- <li>
292
- <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
293
- Published with GitBook
294
- </a>
295
- </li>
296
- </ul>
297
-
298
-
299
- </nav>
300
-
301
-
302
- </div>
303
-
304
- <div class="book-body">
305
-
306
- <div class="body-inner">
307
-
308
-
309
-
310
- <div class="book-header" role="navigation">
311
-
312
-
313
- <!-- Title -->
314
- <h1>
315
- <i class="fa fa-circle-o-notch fa-spin"></i>
316
- <a href=".." >Ovto::Component</a>
317
- </h1>
318
- </div>
31
+ <!-- Custom theme stylesheets -->
319
32
 
33
+ </head>
34
+ <body>
35
+ <div id="body-container">
36
+ <!-- Provide site root to javascript -->
37
+ <script>
38
+ var path_to_root = "../";
39
+ var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
40
+ </script>
41
+
42
+ <!-- Work around some values being stored in localStorage wrapped in quotes -->
43
+ <script>
44
+ try {
45
+ var theme = localStorage.getItem('mdbook-theme');
46
+ var sidebar = localStorage.getItem('mdbook-sidebar');
47
+
48
+ if (theme.startsWith('"') && theme.endsWith('"')) {
49
+ localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
50
+ }
51
+
52
+ if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
53
+ localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
54
+ }
55
+ } catch (e) { }
56
+ </script>
57
+
58
+ <!-- Set the theme before any content is loaded, prevents flash -->
59
+ <script>
60
+ var theme;
61
+ try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
62
+ if (theme === null || theme === undefined) { theme = default_theme; }
63
+ var html = document.querySelector('html');
64
+ html.classList.remove('no-js')
65
+ html.classList.remove('light')
66
+ html.classList.add(theme);
67
+ html.classList.add('js');
68
+ </script>
69
+
70
+ <!-- Hide / unhide sidebar before it is displayed -->
71
+ <script>
72
+ var html = document.querySelector('html');
73
+ var sidebar = null;
74
+ if (document.body.clientWidth >= 1080) {
75
+ try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
76
+ sidebar = sidebar || 'visible';
77
+ } else {
78
+ sidebar = 'hidden';
79
+ }
80
+ html.classList.remove('sidebar-visible');
81
+ html.classList.add("sidebar-" + sidebar);
82
+ </script>
83
+
84
+ <nav id="sidebar" class="sidebar" aria-label="Table of contents">
85
+ <div class="sidebar-scrollbox">
86
+ <ol class="chapter"><li class="chapter-item expanded "><a href="../guides/tutorial.html"><strong aria-hidden="true">1.</strong> Getting Started</a></li><li class="chapter-item expanded "><a href="../guides/install.html"><strong aria-hidden="true">2.</strong> Install</a></li><li class="chapter-item expanded affix "><li class="part-title">API</li><li class="chapter-item expanded "><a href="../api/app.html"><strong aria-hidden="true">3.</strong> Ovto::App</a></li><li class="chapter-item expanded "><a href="../api/state.html"><strong aria-hidden="true">4.</strong> Ovto::State</a></li><li class="chapter-item expanded "><a href="../api/actions.html"><strong aria-hidden="true">5.</strong> Ovto::Actions</a></li><li class="chapter-item expanded "><a href="../api/component.html" class="active"><strong aria-hidden="true">6.</strong> Ovto::Component</a></li><li class="chapter-item expanded "><a href="../api/pure_component.html"><strong aria-hidden="true">7.</strong> Ovto::PureComponent</a></li><li class="chapter-item expanded "><a href="../api/middleware.html"><strong aria-hidden="true">8.</strong> Ovto::Middleware</a></li><li class="chapter-item expanded "><a href="../api/fetch.html"><strong aria-hidden="true">9.</strong> Ovto.fetch</a></li><li class="chapter-item expanded affix "><li class="part-title">Guides</li><li class="chapter-item expanded "><a href="../guides/debugging.html"><strong aria-hidden="true">10.</strong> Debugging</a></li><li class="chapter-item expanded "><a href="../guides/development.html"><strong aria-hidden="true">11.</strong> Development</a></li></ol>
87
+ </div>
88
+ <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>
89
+ </nav>
90
+
91
+ <div id="page-wrapper" class="page-wrapper">
92
+
93
+ <div class="page">
94
+ <div id="menu-bar-hover-placeholder"></div>
95
+ <div id="menu-bar" class="menu-bar sticky bordered">
96
+ <div class="left-buttons">
97
+ <button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
98
+ <i class="fa fa-bars"></i>
99
+ </button>
100
+ <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
101
+ <i class="fa fa-paint-brush"></i>
102
+ </button>
103
+ <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
104
+ <li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
105
+ <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
106
+ <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
107
+ <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
108
+ <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
109
+ </ul>
110
+ <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
111
+ <i class="fa fa-search"></i>
112
+ </button>
113
+ </div>
320
114
 
115
+ <h1 class="menu-title">Ovto Reference Manual</h1>
321
116
 
117
+ <div class="right-buttons">
118
+ <a href="../print.html" title="Print this book" aria-label="Print this book">
119
+ <i id="print-button" class="fa fa-print"></i>
120
+ </a>
322
121
 
323
- <div class="page-wrapper" tabindex="-1" role="main">
324
- <div class="page-inner">
325
-
326
- <div id="book-search-results">
327
- <div class="search-noresults">
328
-
329
- <section class="normal markdown-section">
330
-
331
- <h1 id="ovtocomponent">Ovto::Component</h1>
122
+ </div>
123
+ </div>
124
+
125
+ <div id="search-wrapper" class="hidden">
126
+ <form id="searchbar-outer" class="searchbar-outer">
127
+ <input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
128
+ </form>
129
+ <div id="searchresults-outer" class="searchresults-outer hidden">
130
+ <div id="searchresults-header" class="searchresults-header"></div>
131
+ <ul id="searchresults">
132
+ </ul>
133
+ </div>
134
+ </div>
135
+
136
+ <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
137
+ <script>
138
+ document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
139
+ document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
140
+ Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
141
+ link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
142
+ });
143
+ </script>
144
+
145
+ <div id="content" class="content">
146
+ <main>
147
+ <h1 id="ovtocomponent"><a class="header" href="#ovtocomponent">Ovto::Component</a></h1>
332
148
  <p>An Ovto app must have <code>MainComponent</code> class, a subclass of <code>Ovto::Component</code>.</p>
333
- <h2 id="render-method">&apos;render&apos; method</h2>
149
+ <h2 id="render-method"><a class="header" href="#render-method">'render' method</a></h2>
334
150
  <p><code>render</code> is the only method you need to define in the <code>MainComponent</code> class.
335
151
  You can get the global app state by calling <code>state</code> method.</p>
336
- <pre><code class="lang-rb"> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MainComponent</span> &lt; Ovto::Component</span>
337
- <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">render</span></span>
338
- o <span class="hljs-string">&apos;div&apos;</span> <span class="hljs-keyword">do</span>
339
- o <span class="hljs-string">&apos;h1&apos;</span>, <span class="hljs-string">&apos;Your todos&apos;</span>
340
- o <span class="hljs-string">&apos;ul&apos;</span> <span class="hljs-keyword">do</span>
341
- state.todos.each <span class="hljs-keyword">do</span> |todo|
342
- o <span class="hljs-string">&apos;li&apos;</span>, todo.title
343
- <span class="hljs-keyword">end</span>
344
- <span class="hljs-keyword">end</span>
345
- <span class="hljs-keyword">end</span>
346
- <span class="hljs-keyword">end</span>
347
- <span class="hljs-keyword">end</span>
152
+ <pre><code class="language-rb"> class MainComponent &lt; Ovto::Component
153
+ def render
154
+ o 'div' do
155
+ o 'h1', 'Your todos'
156
+ o 'ul' do
157
+ state.todos.each do |todo|
158
+ o 'li', todo.title
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
348
164
  </code></pre>
349
- <h3 id="morethanonenode-error">MoreThanOneNode error</h3>
350
- <p>If you missed the surrounding &apos;div&apos; tag, Ovto raises an <code>MoreThanOneNode</code> error. <code>render</code> must create a single DOM node.</p>
351
- <pre><code class="lang-rb"> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">render</span></span>
352
- o <span class="hljs-string">&apos;h1&apos;</span>, <span class="hljs-string">&apos;Your todos&apos;</span>
353
- o <span class="hljs-string">&apos;ul&apos;</span> <span class="hljs-keyword">do</span>
354
- state.todos.each <span class="hljs-keyword">do</span> |todo|
355
- o <span class="hljs-string">&apos;li&apos;</span>, todo.title
356
- <span class="hljs-keyword">end</span>
357
- <span class="hljs-keyword">end</span>
358
- <span class="hljs-keyword">end</span>
359
-
360
- <span class="hljs-comment">#=&gt; $MoreThanOneNode {name: &quot;MoreThanOneNode&quot;, ...}</span>
165
+ <h3 id="morethanonenode-error"><a class="header" href="#morethanonenode-error">MoreThanOneNode error</a></h3>
166
+ <p>If you missed the surrounding 'div' tag, Ovto raises an <code>MoreThanOneNode</code> error. <code>render</code> must create a single DOM node.</p>
167
+ <pre><code class="language-rb"> def render
168
+ o 'h1', 'Your todos'
169
+ o 'ul' do
170
+ state.todos.each do |todo|
171
+ o 'li', todo.title
172
+ end
173
+ end
174
+ end
175
+
176
+ #=&gt; $MoreThanOneNode {name: &quot;MoreThanOneNode&quot;, ...}
361
177
  </code></pre>
362
- <h2 id="the-o-method">The &apos;o&apos; method</h2>
363
- <p><a name="the-o-method"></a></p>
364
- <p><code>Ovto::Component#o</code> describes your app&apos;s view. For example:</p>
365
- <pre><code class="lang-rb">o <span class="hljs-string">&apos;div&apos;</span>
366
- <span class="hljs-comment">#=&gt; &lt;div&gt;&lt;/div&gt;</span>
367
-
368
- o <span class="hljs-string">&apos;div&apos;</span>, <span class="hljs-string">&apos;Hello.&apos;</span>
369
- <span class="hljs-comment">#=&gt; &lt;div&gt;Hello.&lt;/div&gt;</span>
178
+ <h2 id="the-o-method"><a class="header" href="#the-o-method">The 'o' method</a></h2>
179
+ <a name='the-o-method' />
180
+ <p><code>Ovto::Component#o</code> describes your app's view. For example:</p>
181
+ <pre><code class="language-rb">o 'div'
182
+ #=&gt; &lt;div&gt;&lt;/div&gt;
183
+
184
+ o 'div', 'Hello.'
185
+ #=&gt; &lt;div&gt;Hello.&lt;/div&gt;
370
186
  </code></pre>
371
187
  <p>You can pass attributes with a Hash.</p>
372
- <pre><code class="lang-rb">o <span class="hljs-string">&apos;div&apos;</span>, <span class="hljs-class"><span class="hljs-keyword">class</span>: &apos;<span class="hljs-title">main</span>&apos;, &apos;<span class="hljs-title">Hello</span>.&apos;</span>
373
- <span class="hljs-comment">#=&gt; &lt;div class=&apos;main&apos;&gt;Hello.&lt;/div&gt;</span>
188
+ <pre><code class="language-rb">o 'div', class: 'main', 'Hello.'
189
+ #=&gt; &lt;div class='main'&gt;Hello.&lt;/div&gt;
374
190
  </code></pre>
375
191
  <p>There are shorthand notations for classes and ids.</p>
376
- <pre><code class="lang-rb">o <span class="hljs-string">&apos;div.main&apos;</span>
377
- <span class="hljs-comment">#=&gt; &lt;div class=&apos;main&apos;&gt;Hello.&lt;/div&gt;</span>
192
+ <pre><code class="language-rb">o 'div.main'
193
+ #=&gt; &lt;div class='main'&gt;Hello.&lt;/div&gt;
378
194
 
379
- o <span class="hljs-string">&apos;div#main&apos;</span>
380
- <span class="hljs-comment">#=&gt; &lt;div id=&apos;main&apos;&gt;Hello.&lt;/div&gt;</span>
195
+ o 'div#main'
196
+ #=&gt; &lt;div id='main'&gt;Hello.&lt;/div&gt;
381
197
  </code></pre>
382
198
  <p>You can also give a block to specify its content.</p>
383
- <pre><code class="lang-rb">o <span class="hljs-string">&apos;div&apos;</span> <span class="hljs-keyword">do</span>
384
- <span class="hljs-string">&apos;Hello.&apos;</span>
385
- <span class="hljs-keyword">end</span>
386
- <span class="hljs-comment">#=&gt; &lt;div&gt;Hello.&lt;/div&gt;</span>
387
-
388
- o <span class="hljs-string">&apos;div&apos;</span> <span class="hljs-keyword">do</span>
389
- o <span class="hljs-string">&apos;h1&apos;</span>, <span class="hljs-string">&apos;Hello.&apos;</span>
390
- <span class="hljs-keyword">end</span>
391
- <span class="hljs-comment">#=&gt; &lt;div&gt;&lt;h1&gt;Hello.&lt;/h1&gt;&lt;/div&gt;</span>
199
+ <pre><code class="language-rb">o 'div' do
200
+ 'Hello.'
201
+ end
202
+ #=&gt; &lt;div&gt;Hello.&lt;/div&gt;
203
+
204
+ o 'div' do
205
+ o 'h1', 'Hello.'
206
+ end
207
+ #=&gt; &lt;div&gt;&lt;h1&gt;Hello.&lt;/h1&gt;&lt;/div&gt;
392
208
  </code></pre>
393
- <h3 id="special-attribute-style">Special attribute: <code>style</code></h3>
394
- <p><a name="special-attributes"></a></p>
209
+ <h3 id="special-attribute-style"><a class="header" href="#special-attribute-style">Special attribute: <code>style</code></a></h3>
210
+ <a name='special-attributes' />
395
211
  <p>There are some special keys for the attributes Hash. <code>style:</code> key takes a hash as
396
212
  its value and specifies styles of the tag.</p>
397
- <pre><code class="lang-rb">o <span class="hljs-string">&apos;div&apos;</span>, <span class="hljs-symbol">style:</span> {<span class="hljs-symbol">color:</span> <span class="hljs-string">&apos;red&apos;</span>}, <span class="hljs-string">&apos;Hello.&apos;</span>
398
- <span class="hljs-comment">#=&gt; &lt;div style=&apos;color: red;&apos;&gt;Hello.&lt;/div&gt;</span>
213
+ <pre><code class="language-rb">o 'div', style: {color: 'red'}, 'Hello.'
214
+ #=&gt; &lt;div style='color: red;'&gt;Hello.&lt;/div&gt;
399
215
  </code></pre>
400
- <h3 id="special-attribute-onxx">Special attribute: <code>onxx</code></h3>
216
+ <h3 id="special-attribute-onxx"><a class="header" href="#special-attribute-onxx">Special attribute: <code>onxx</code></a></h3>
401
217
  <p>An attribute starts with <code>&quot;on&quot;</code> specifies an event handler.</p>
402
218
  <p>For example:</p>
403
- <pre><code class="lang-rb">o <span class="hljs-string">&apos;input&apos;</span>, {
404
- <span class="hljs-symbol">type:</span> <span class="hljs-string">&apos;button&apos;</span>,
405
- <span class="hljs-symbol">onclick:</span> -&gt;(e){ p e.target.value },
406
- <span class="hljs-symbol">value:</span> <span class="hljs-string">&apos;Hello.&apos;</span>
219
+ <pre><code class="language-rb">o 'input', {
220
+ type: 'button',
221
+ onclick: -&gt;(e){ p e.target.value },
222
+ value: 'Hello.'
407
223
  }
408
224
  </code></pre>
409
225
  <p>The argument <code>e</code> is an instance of Opal::Native and wraps the JavaScript event object.
410
226
  You can get the input value with <code>e.target.value</code> here.</p>
411
- <h4 id="lifecycle-events">Lifecycle events</h4>
227
+ <h4 id="lifecycle-events"><a class="header" href="#lifecycle-events">Lifecycle events</a></h4>
412
228
  <p>There are special events <code>oncreate</code>, <code>onupdate</code>, <code>onremove</code>, <code>ondestroy</code>.</p>
413
- <p><a href="https://github.com/hyperapp/hyperapp#lifecycle-events" target="_blank">https://github.com/hyperapp/hyperapp#lifecycle-events</a></p>
414
- <h3 id="special-attribute-key">Special attribute: <code>key</code></h3>
415
- <p><a href="https://github.com/hyperapp/hyperapp#keys" target="_blank">https://github.com/hyperapp/hyperapp#keys</a></p>
416
- <h2 id="sub-components">Sub components</h2>
229
+ <p>https://github.com/hyperapp/hyperapp#lifecycle-events</p>
230
+ <h3 id="special-attribute-key"><a class="header" href="#special-attribute-key">Special attribute: <code>key</code></a></h3>
231
+ <p>https://github.com/hyperapp/hyperapp#keys</p>
232
+ <h2 id="sub-components"><a class="header" href="#sub-components">Sub components</a></h2>
417
233
  <p><code>o</code> can take another component class to render.</p>
418
- <pre><code class="lang-rb"> <span class="hljs-comment"># Sub component</span>
419
- <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TodoList</span> &lt; Ovto::Component</span>
420
- <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">render</span><span class="hljs-params">(<span class="hljs-symbol">todos:</span>)</span></span>
421
- o <span class="hljs-string">&apos;ul&apos;</span> <span class="hljs-keyword">do</span>
422
- todos.each <span class="hljs-keyword">do</span> |todo|
423
- o <span class="hljs-string">&apos;li&apos;</span>, todo.title
424
- <span class="hljs-keyword">end</span>
425
- <span class="hljs-keyword">end</span>
426
- <span class="hljs-keyword">end</span>
427
- <span class="hljs-keyword">end</span>
428
-
429
- <span class="hljs-comment"># Main component</span>
430
- <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MainComponent</span> &lt; Ovto::Component</span>
431
- <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">render</span></span>
432
- o <span class="hljs-string">&apos;div&apos;</span> <span class="hljs-keyword">do</span>
433
- o <span class="hljs-string">&apos;h1&apos;</span>, <span class="hljs-string">&apos;Your todos&apos;</span>
434
- o TodoList, <span class="hljs-symbol">todos:</span> state.todos
435
- <span class="hljs-keyword">end</span>
436
- <span class="hljs-keyword">end</span>
437
- <span class="hljs-keyword">end</span>
234
+ <pre><code class="language-rb"> # Sub component
235
+ class TodoList &lt; Ovto::Component
236
+ def render(todos:)
237
+ o 'ul' do
238
+ todos.each do |todo|
239
+ o 'li', todo.title
240
+ end
241
+ end
242
+ end
243
+ end
244
+
245
+ # Main component
246
+ class MainComponent &lt; Ovto::Component
247
+ def render
248
+ o 'div' do
249
+ o 'h1', 'Your todos'
250
+ o TodoList, todos: state.todos
251
+ end
252
+ end
253
+ end
438
254
  </code></pre>
439
- <h2 id="text-node">Text node</h2>
255
+ <h2 id="text-node"><a class="header" href="#text-node">Text node</a></h2>
440
256
  <p>Sometimes you may want to create a text node.</p>
441
- <pre><code class="lang-rb"><span class="hljs-comment">#=&gt; &lt;div&gt;Age: &lt;span class=&apos;age&apos;&gt;12&lt;/a&gt;&lt;/div&gt;</span>
442
- <span class="hljs-comment"># ~~~~~</span>
443
- <span class="hljs-comment"># |</span>
444
- <span class="hljs-comment"># +--Raw text (not enclosed by an inner tag)</span>
257
+ <pre><code class="language-rb">#=&gt; &lt;div&gt;Age: &lt;span class='age'&gt;12&lt;/a&gt;&lt;/div&gt;
258
+ # ~~~~~
259
+ # |
260
+ # +--Raw text (not enclosed by an inner tag)
445
261
  </code></pre>
446
- <p><code>o</code> generates a text node when <code>&apos;text&apos;</code> is specified as tag name. The above
262
+ <p><code>o</code> generates a text node when <code>'text'</code> is specified as tag name. The above
447
263
  HTML could be described like this.</p>
448
- <pre><code class="lang-rb">o <span class="hljs-string">&apos;div&apos;</span> <span class="hljs-keyword">do</span>
449
- o <span class="hljs-string">&apos;text&apos;</span>, <span class="hljs-string">&apos;Age:&apos;</span>
450
- o <span class="hljs-string">&apos;span&apos;</span>, <span class="hljs-string">&apos;12&apos;</span>
451
- <span class="hljs-keyword">end</span>
264
+ <pre><code class="language-rb">o 'div' do
265
+ o 'text', 'Age:'
266
+ o 'span', '12'
267
+ end
452
268
  </code></pre>
453
269
 
454
-
455
- </section>
456
-
457
- </div>
458
- <div class="search-results">
459
- <div class="has-results">
460
-
461
- <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
462
- <ul class="search-results-list"></ul>
463
-
464
- </div>
465
- <div class="no-results">
466
-
467
- <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
468
-
469
- </div>
470
- </div>
471
- </div>
270
+ </main>
472
271
 
473
- </div>
474
- </div>
475
-
272
+ <nav class="nav-wrapper" aria-label="Page navigation">
273
+ <!-- Mobile navigation buttons -->
274
+ <a rel="prev" href="../api/actions.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
275
+ <i class="fa fa-angle-left"></i>
276
+ </a>
277
+
278
+ <a rel="next" href="../api/pure_component.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
279
+ <i class="fa fa-angle-right"></i>
280
+ </a>
281
+
282
+ <div style="clear: both"></div>
283
+ </nav>
284
+ </div>
476
285
  </div>
477
286
 
478
-
479
-
480
- <a href="actions.html" class="navigation navigation-prev " aria-label="Previous page: Ovto::Actions">
481
- <i class="fa fa-angle-left"></i>
482
- </a>
483
-
484
-
485
- <a href="pure_component.html" class="navigation navigation-next " aria-label="Next page: Ovto::PureComponent">
486
- <i class="fa fa-angle-right"></i>
487
- </a>
488
-
489
-
490
-
491
- </div>
287
+ <nav class="nav-wide-wrapper" aria-label="Page navigation">
288
+ <a rel="prev" href="../api/actions.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
289
+ <i class="fa fa-angle-left"></i>
290
+ </a>
291
+
292
+ <a rel="next" href="../api/pure_component.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
293
+ <i class="fa fa-angle-right"></i>
294
+ </a>
295
+ </nav>
296
+
297
+ </div>
298
+
492
299
 
493
- <script>
494
- var gitbook = gitbook || [];
495
- gitbook.push(function() {
496
- gitbook.page.hasChanged({"page":{"title":"Ovto::Component","level":"1.4.4","depth":2,"next":{"title":"Ovto::PureComponent","level":"1.4.5","depth":2,"path":"api/pure_component.md","ref":"api/pure_component.md","articles":[]},"previous":{"title":"Ovto::Actions","level":"1.4.3","depth":2,"path":"api/actions.md","ref":"api/actions.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"api/component.md","mtime":"2019-04-18T08:50:59.000Z","type":"markdown"},"gitbook":{"version":"3.2.2","time":"2021-10-21T23:18:11.678Z"},"basePath":"..","book":{"language":""}});
497
- });
498
- </script>
499
- </div>
500
300
 
501
-
502
- <script src="../gitbook/gitbook.js"></script>
503
- <script src="../gitbook/theme.js"></script>
504
-
505
-
506
- <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
507
-
508
-
509
-
510
- <script src="../gitbook/gitbook-plugin-search/search.js"></script>
511
-
512
-
513
-
514
- <script src="../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
515
-
516
-
517
-
518
- <script src="../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
519
-
520
-
521
-
522
- <script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
523
-
524
-
525
-
526
- <script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
527
-
528
-
529
301
 
302
+ <script>
303
+ window.playground_copyable = true;
304
+ </script>
305
+
306
+
307
+ <script src="../elasticlunr.min.js"></script>
308
+ <script src="../mark.min.js"></script>
309
+ <script src="../searcher.js"></script>
310
+
311
+ <script src="../clipboard.min.js"></script>
312
+ <script src="../highlight.js"></script>
313
+ <script src="../book.js"></script>
314
+
315
+ <!-- Custom JS scripts -->
316
+
317
+
318
+ </div>
530
319
  </body>
531
320
  </html>
532
-