ovto 0.2.1 → 0.2.2
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/CHANGELOG.md +4 -0
- data/Gemfile +3 -3
- data/Gemfile.lock +12 -22
- data/Rakefile +1 -0
- data/docs/api/Ovto.html +231 -24
- data/docs/api/Ovto/Actions.html +173 -5
- data/docs/api/Ovto/App.html +136 -47
- data/docs/api/Ovto/Component.html +3 -3
- data/docs/api/Ovto/Component/MoreThanOneNode.html +3 -3
- data/docs/api/Ovto/Runtime.html +3 -3
- data/docs/api/Ovto/State.html +165 -18
- data/docs/api/Ovto/State/MissingValue.html +3 -3
- data/docs/api/Ovto/State/UnknownKey.html +3 -3
- data/docs/api/Ovto/WiredActions.html +15 -15
- data/docs/api/_index.html +6 -4
- data/docs/api/actions.html +44 -9
- data/docs/api/app.html +34 -8
- data/docs/api/component.html +60 -35
- data/docs/api/css/style.css +4 -7
- data/docs/api/file.README.html +5 -6
- data/docs/api/frames.html +1 -1
- data/docs/api/index.html +5 -6
- data/docs/api/js/app.js +44 -0
- data/docs/api/method_list.html +77 -13
- data/docs/api/state.html +22 -9
- data/docs/api/top-level-namespace.html +68 -3
- data/docs/guides/debugging.html +28 -5
- data/docs/guides/development.html +18 -5
- data/docs/guides/tutorial.html +18 -5
- data/docs/index.html +19 -7
- data/docs/search_index.json +1 -1
- data/example/sinatra/Gemfile.lock +4 -4
- data/example/static/Gemfile.lock +3 -3
- data/lib/ovto/version.rb +1 -1
- metadata +2 -2
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
Exception: Ovto::State::MissingValue
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.16
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -125,9 +125,9 @@
|
|
125
125
|
</div>
|
126
126
|
|
127
127
|
<div id="footer">
|
128
|
-
Generated on
|
128
|
+
Generated on Wed Nov 7 18:02:02 2018 by
|
129
129
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
130
|
-
0.9.
|
130
|
+
0.9.16 (ruby-2.5.3).
|
131
131
|
</div>
|
132
132
|
|
133
133
|
</div>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
Exception: Ovto::State::UnknownKey
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.16
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -125,9 +125,9 @@
|
|
125
125
|
</div>
|
126
126
|
|
127
127
|
<div id="footer">
|
128
|
-
Generated on
|
128
|
+
Generated on Wed Nov 7 18:02:02 2018 by
|
129
129
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
130
|
-
0.9.
|
130
|
+
0.9.16 (ruby-2.5.3).
|
131
131
|
</div>
|
132
132
|
|
133
133
|
</div>
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>
|
7
7
|
Class: Ovto::WiredActions
|
8
8
|
|
9
|
-
— Documentation by YARD 0.9.
|
9
|
+
— Documentation by YARD 0.9.16
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -216,12 +216,12 @@
|
|
216
216
|
<pre class="lines">
|
217
217
|
|
218
218
|
|
219
|
-
|
220
|
-
|
221
|
-
|
219
|
+
5
|
220
|
+
6
|
221
|
+
7</pre>
|
222
222
|
</td>
|
223
223
|
<td>
|
224
|
-
<pre class="code"><span class="info file"># File 'lib/ovto/wired_actions.rb', line
|
224
|
+
<pre class="code"><span class="info file"># File 'lib/ovto/wired_actions.rb', line 5</span>
|
225
225
|
|
226
226
|
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_actions'>actions</span><span class='comma'>,</span> <span class='id identifier rubyid_app'>app</span><span class='comma'>,</span> <span class='id identifier rubyid_runtime'>runtime</span><span class='rparen'>)</span>
|
227
227
|
<span class='ivar'>@actions</span><span class='comma'>,</span> <span class='ivar'>@app</span><span class='comma'>,</span> <span class='ivar'>@runtime</span> <span class='op'>=</span> <span class='id identifier rubyid_actions'>actions</span><span class='comma'>,</span> <span class='id identifier rubyid_app'>app</span><span class='comma'>,</span> <span class='id identifier rubyid_runtime'>runtime</span>
|
@@ -254,12 +254,12 @@
|
|
254
254
|
<pre class="lines">
|
255
255
|
|
256
256
|
|
257
|
-
|
258
|
-
|
259
|
-
|
257
|
+
9
|
258
|
+
10
|
259
|
+
11</pre>
|
260
260
|
</td>
|
261
261
|
<td>
|
262
|
-
<pre class="code"><span class="info file"># File 'lib/ovto/wired_actions.rb', line
|
262
|
+
<pre class="code"><span class="info file"># File 'lib/ovto/wired_actions.rb', line 9</span>
|
263
263
|
|
264
264
|
<span class='kw'>def</span> <span class='id identifier rubyid_method_missing'>method_missing</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_args_hash'>args_hash</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
|
265
265
|
<span class='id identifier rubyid_invoke_action'>invoke_action</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_args_hash'>args_hash</span><span class='rparen'>)</span>
|
@@ -313,12 +313,12 @@
|
|
313
313
|
<pre class="lines">
|
314
314
|
|
315
315
|
|
316
|
-
|
317
|
-
|
318
|
-
|
316
|
+
13
|
317
|
+
14
|
318
|
+
15</pre>
|
319
319
|
</td>
|
320
320
|
<td>
|
321
|
-
<pre class="code"><span class="info file"># File 'lib/ovto/wired_actions.rb', line
|
321
|
+
<pre class="code"><span class="info file"># File 'lib/ovto/wired_actions.rb', line 13</span>
|
322
322
|
|
323
323
|
<span class='kw'>def</span> <span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
324
324
|
<span class='ivar'>@actions</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
|
@@ -333,9 +333,9 @@
|
|
333
333
|
</div>
|
334
334
|
|
335
335
|
<div id="footer">
|
336
|
-
Generated on
|
336
|
+
Generated on Wed Nov 7 18:02:02 2018 by
|
337
337
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
338
|
-
0.9.
|
338
|
+
0.9.16 (ruby-2.5.3).
|
339
339
|
</div>
|
340
340
|
|
341
341
|
</div>
|
data/docs/api/_index.html
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<meta charset="utf-8">
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
6
|
<title>
|
7
|
-
Documentation by YARD 0.9.
|
7
|
+
Documentation by YARD 0.9.16
|
8
8
|
|
9
9
|
</title>
|
10
10
|
|
@@ -52,7 +52,7 @@
|
|
52
52
|
<div class="clear"></div>
|
53
53
|
</div>
|
54
54
|
|
55
|
-
<div id="content"><h1 class="noborder title">Documentation by YARD 0.9.
|
55
|
+
<div id="content"><h1 class="noborder title">Documentation by YARD 0.9.16</h1>
|
56
56
|
<div id="listing">
|
57
57
|
<h1 class="alphaindex">Alphabetic Index</h1>
|
58
58
|
|
@@ -69,6 +69,8 @@
|
|
69
69
|
<h2>Namespace Listing A-Z</h2>
|
70
70
|
|
71
71
|
|
72
|
+
<ul class="toplevel"><li><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></li></ul>
|
73
|
+
|
72
74
|
|
73
75
|
|
74
76
|
<table>
|
@@ -219,9 +221,9 @@
|
|
219
221
|
</div>
|
220
222
|
|
221
223
|
<div id="footer">
|
222
|
-
Generated on
|
224
|
+
Generated on Wed Nov 7 18:02:01 2018 by
|
223
225
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
224
|
-
0.9.
|
226
|
+
0.9.16 (ruby-2.5.3).
|
225
227
|
</div>
|
226
228
|
|
227
229
|
</div>
|
data/docs/api/actions.html
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<head>
|
5
5
|
<meta charset="UTF-8">
|
6
6
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
7
|
-
<title>Actions · GitBook</title>
|
7
|
+
<title>Ovto::Actions · GitBook</title>
|
8
8
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
9
9
|
<meta name="description" content="">
|
10
10
|
<meta name="generator" content="GitBook 3.2.3">
|
@@ -134,7 +134,7 @@
|
|
134
134
|
<a href="app.html">
|
135
135
|
|
136
136
|
|
137
|
-
App
|
137
|
+
Ovto::App
|
138
138
|
|
139
139
|
</a>
|
140
140
|
|
@@ -147,7 +147,7 @@
|
|
147
147
|
<a href="state.html">
|
148
148
|
|
149
149
|
|
150
|
-
State
|
150
|
+
Ovto::State
|
151
151
|
|
152
152
|
</a>
|
153
153
|
|
@@ -160,7 +160,7 @@
|
|
160
160
|
<a href="actions.html">
|
161
161
|
|
162
162
|
|
163
|
-
Actions
|
163
|
+
Ovto::Actions
|
164
164
|
|
165
165
|
</a>
|
166
166
|
|
@@ -173,7 +173,20 @@
|
|
173
173
|
<a href="component.html">
|
174
174
|
|
175
175
|
|
176
|
-
Component
|
176
|
+
Ovto::Component
|
177
|
+
|
178
|
+
</a>
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
</li>
|
183
|
+
|
184
|
+
<li class="chapter " data-level="1.3.5" data-path="fetch.html">
|
185
|
+
|
186
|
+
<a href="fetch.html">
|
187
|
+
|
188
|
+
|
189
|
+
Ovto.fetch
|
177
190
|
|
178
191
|
</a>
|
179
192
|
|
@@ -261,7 +274,7 @@
|
|
261
274
|
<!-- Title -->
|
262
275
|
<h1>
|
263
276
|
<i class="fa fa-circle-o-notch fa-spin"></i>
|
264
|
-
<a href=".." >Actions</a>
|
277
|
+
<a href=".." >Ovto::Actions</a>
|
265
278
|
</h1>
|
266
279
|
</div>
|
267
280
|
|
@@ -316,6 +329,28 @@ MyApp.run(<span class="hljs-symbol">id:</span> <span class="hljs-string">'o
|
|
316
329
|
</code></pre><p>Arguments are almost the same as the original but you don't need to provide <code>state</code>;
|
317
330
|
it is automatically passed by <code>Ovto::WiredActions</code> class. It also updates the app
|
318
331
|
state with the return value of the action, and schedules rendering the view.</p>
|
332
|
+
<h2 id="skipping-state-update">Skipping state update</h2>
|
333
|
+
<p>An action may return <code>nil</code> when no app state changes are needed.</p>
|
334
|
+
<p>Promises are also special values which does not cause state changes (see the next section).</p>
|
335
|
+
<h2 id="async-actions">Async actions</h2>
|
336
|
+
<p>When calling server apis, you cannot tell how the app state will change until the server responds.
|
337
|
+
In such cases, you can call another action via <code>actions</code> to tell Ovto to reflect the api result to the app state.</p>
|
338
|
+
<p>Example:</p>
|
339
|
+
<pre><code class="lang-rb"> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Actions</span> < Ovto::Actions</span>
|
340
|
+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">fetch_tasks</span><span class="hljs-params">(<span class="hljs-symbol">state:</span>)</span></span>
|
341
|
+
Ovto.fetch(<span class="hljs-string">'/tasks.json'</span>).<span class="hljs-keyword">then</span> {|tasks_json|
|
342
|
+
actions.receive_tasks(<span class="hljs-symbol">tasks:</span> tasks_json)
|
343
|
+
}.fail {|e|
|
344
|
+
console.log(<span class="hljs-string">"failed:"</span>, e)
|
345
|
+
}
|
346
|
+
<span class="hljs-keyword">end</span>
|
347
|
+
|
348
|
+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">receive_tasks</span><span class="hljs-params">(<span class="hljs-symbol">state:</span>, <span class="hljs-symbol">tasks_json:</span>)</span></span>
|
349
|
+
tasks = tasks_json.map{|item| Task.new(**item)}
|
350
|
+
<span class="hljs-keyword">return</span> {<span class="hljs-symbol">tasks:</span> tasks}
|
351
|
+
<span class="hljs-keyword">end</span>
|
352
|
+
<span class="hljs-keyword">end</span>
|
353
|
+
</code></pre>
|
319
354
|
|
320
355
|
|
321
356
|
</section>
|
@@ -343,12 +378,12 @@ state with the return value of the action, and schedules rendering the view.</p>
|
|
343
378
|
|
344
379
|
|
345
380
|
|
346
|
-
<a href="state.html" class="navigation navigation-prev " aria-label="Previous page: State">
|
381
|
+
<a href="state.html" class="navigation navigation-prev " aria-label="Previous page: Ovto::State">
|
347
382
|
<i class="fa fa-angle-left"></i>
|
348
383
|
</a>
|
349
384
|
|
350
385
|
|
351
|
-
<a href="component.html" class="navigation navigation-next " aria-label="Next page: Component">
|
386
|
+
<a href="component.html" class="navigation navigation-next " aria-label="Next page: Ovto::Component">
|
352
387
|
<i class="fa fa-angle-right"></i>
|
353
388
|
</a>
|
354
389
|
|
@@ -359,7 +394,7 @@ state with the return value of the action, and schedules rendering the view.</p>
|
|
359
394
|
<script>
|
360
395
|
var gitbook = gitbook || [];
|
361
396
|
gitbook.push(function() {
|
362
|
-
gitbook.page.hasChanged({"page":{"title":"Actions","level":"1.3.3","depth":2,"next":{"title":"Component","level":"1.3.4","depth":2,"path":"api/component.md","ref":"api/component.md","articles":[]},"previous":{"title":"State","level":"1.3.2","depth":2,"path":"api/state.md","ref":"api/state.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/actions.md","mtime":"2018-
|
397
|
+
gitbook.page.hasChanged({"page":{"title":"Ovto::Actions","level":"1.3.3","depth":2,"next":{"title":"Ovto::Component","level":"1.3.4","depth":2,"path":"api/component.md","ref":"api/component.md","articles":[]},"previous":{"title":"Ovto::State","level":"1.3.2","depth":2,"path":"api/state.md","ref":"api/state.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/actions.md","mtime":"2018-10-27T08:57:46.000Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-11-07T09:01:58.704Z"},"basePath":"..","book":{"language":""}});
|
363
398
|
});
|
364
399
|
</script>
|
365
400
|
</div>
|
data/docs/api/app.html
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<head>
|
5
5
|
<meta charset="UTF-8">
|
6
6
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
7
|
-
<title>App · GitBook</title>
|
7
|
+
<title>Ovto::App · GitBook</title>
|
8
8
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
9
9
|
<meta name="description" content="">
|
10
10
|
<meta name="generator" content="GitBook 3.2.3">
|
@@ -132,7 +132,7 @@
|
|
132
132
|
<a href="app.html">
|
133
133
|
|
134
134
|
|
135
|
-
App
|
135
|
+
Ovto::App
|
136
136
|
|
137
137
|
</a>
|
138
138
|
|
@@ -145,7 +145,7 @@
|
|
145
145
|
<a href="state.html">
|
146
146
|
|
147
147
|
|
148
|
-
State
|
148
|
+
Ovto::State
|
149
149
|
|
150
150
|
</a>
|
151
151
|
|
@@ -158,7 +158,7 @@
|
|
158
158
|
<a href="actions.html">
|
159
159
|
|
160
160
|
|
161
|
-
Actions
|
161
|
+
Ovto::Actions
|
162
162
|
|
163
163
|
</a>
|
164
164
|
|
@@ -171,7 +171,20 @@
|
|
171
171
|
<a href="component.html">
|
172
172
|
|
173
173
|
|
174
|
-
Component
|
174
|
+
Ovto::Component
|
175
|
+
|
176
|
+
</a>
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
</li>
|
181
|
+
|
182
|
+
<li class="chapter " data-level="1.3.5" data-path="fetch.html">
|
183
|
+
|
184
|
+
<a href="fetch.html">
|
185
|
+
|
186
|
+
|
187
|
+
Ovto.fetch
|
175
188
|
|
176
189
|
</a>
|
177
190
|
|
@@ -259,7 +272,7 @@
|
|
259
272
|
<!-- Title -->
|
260
273
|
<h1>
|
261
274
|
<i class="fa fa-circle-o-notch fa-spin"></i>
|
262
|
-
<a href=".." >App</a>
|
275
|
+
<a href=".." >Ovto::App</a>
|
263
276
|
</h1>
|
264
277
|
</div>
|
265
278
|
|
@@ -333,6 +346,19 @@ MyApp.run(<span class="hljs-symbol">id:</span> <span class="hljs-string">'o
|
|
333
346
|
<p>Here we added <code>color_idx</code> to app state and <code>update_color</code> action to change it.
|
334
347
|
The button is updated to have the color indicated by <code>color_idx</code> and
|
335
348
|
now has <code>onclick</code> event handler which executes the action.</p>
|
349
|
+
<h2 id="calling-actions-on-startup">Calling actions on startup</h2>
|
350
|
+
<p>To invoke certain actions on app startup, define <code>MyApp#setup</code> and use <code>MyApp#actions</code>.</p>
|
351
|
+
<p>Example:</p>
|
352
|
+
<pre><code class="lang-rb"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyApp</span> < Ovto::App</span>
|
353
|
+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">setup</span></span>
|
354
|
+
actions.fetch_data()
|
355
|
+
<span class="hljs-keyword">end</span>
|
356
|
+
|
357
|
+
...
|
358
|
+
<span class="hljs-keyword">end</span>
|
359
|
+
|
360
|
+
MyApp.run(<span class="hljs-symbol">id:</span> <span class="hljs-string">'ovto-view'</span>)
|
361
|
+
</code></pre>
|
336
362
|
|
337
363
|
|
338
364
|
</section>
|
@@ -361,7 +387,7 @@ now has <code>onclick</code> event handler which executes the action.</p>
|
|
361
387
|
|
362
388
|
|
363
389
|
|
364
|
-
<a href="state.html" class="navigation navigation-next navigation-unique" aria-label="Next page: State">
|
390
|
+
<a href="state.html" class="navigation navigation-next navigation-unique" aria-label="Next page: Ovto::State">
|
365
391
|
<i class="fa fa-angle-right"></i>
|
366
392
|
</a>
|
367
393
|
|
@@ -372,7 +398,7 @@ now has <code>onclick</code> event handler which executes the action.</p>
|
|
372
398
|
<script>
|
373
399
|
var gitbook = gitbook || [];
|
374
400
|
gitbook.push(function() {
|
375
|
-
gitbook.page.hasChanged({"page":{"title":"App","level":"1.3.1","depth":2,"next":{"title":"State","level":"1.3.2","depth":2,"path":"api/state.md","ref":"api/state.md","articles":[]},"previous":{"title":"API","level":"1.3","depth":1,"ref":"","articles":[{"title":"App","level":"1.3.1","depth":2,"path":"api/app.md","ref":"api/app.md","articles":[]},{"title":"State","level":"1.3.2","depth":2,"path":"api/state.md","ref":"api/state.md","articles":[]},{"title":"Actions","level":"1.3.3","depth":2,"path":"api/actions.md","ref":"api/actions.md","articles":[]},{"title":"Component","level":"1.3.4","depth":2,"path":"api/component.md","ref":"api/component.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/app.md","mtime":"2018-
|
401
|
+
gitbook.page.hasChanged({"page":{"title":"Ovto::App","level":"1.3.1","depth":2,"next":{"title":"Ovto::State","level":"1.3.2","depth":2,"path":"api/state.md","ref":"api/state.md","articles":[]},"previous":{"title":"API","level":"1.3","depth":1,"ref":"","articles":[{"title":"Ovto::App","level":"1.3.1","depth":2,"path":"api/app.md","ref":"api/app.md","articles":[]},{"title":"Ovto::State","level":"1.3.2","depth":2,"path":"api/state.md","ref":"api/state.md","articles":[]},{"title":"Ovto::Actions","level":"1.3.3","depth":2,"path":"api/actions.md","ref":"api/actions.md","articles":[]},{"title":"Ovto::Component","level":"1.3.4","depth":2,"path":"api/component.md","ref":"api/component.md","articles":[]},{"title":"Ovto.fetch","level":"1.3.5","depth":2,"path":"api/fetch.md","ref":"api/fetch.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/app.md","mtime":"2018-10-27T08:04:24.000Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-11-07T09:01:58.704Z"},"basePath":"..","book":{"language":""}});
|
376
402
|
});
|
377
403
|
</script>
|
378
404
|
</div>
|
data/docs/api/component.html
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
<head>
|
5
5
|
<meta charset="UTF-8">
|
6
6
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
7
|
-
<title>Component · GitBook</title>
|
7
|
+
<title>Ovto::Component · GitBook</title>
|
8
8
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
9
9
|
<meta name="description" content="">
|
10
10
|
<meta name="generator" content="GitBook 3.2.3">
|
@@ -57,6 +57,8 @@
|
|
57
57
|
<link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
|
58
58
|
|
59
59
|
|
60
|
+
<link rel="next" href="fetch.html" />
|
61
|
+
|
60
62
|
|
61
63
|
<link rel="prev" href="actions.html" />
|
62
64
|
|
@@ -132,7 +134,7 @@
|
|
132
134
|
<a href="app.html">
|
133
135
|
|
134
136
|
|
135
|
-
App
|
137
|
+
Ovto::App
|
136
138
|
|
137
139
|
</a>
|
138
140
|
|
@@ -145,7 +147,7 @@
|
|
145
147
|
<a href="state.html">
|
146
148
|
|
147
149
|
|
148
|
-
State
|
150
|
+
Ovto::State
|
149
151
|
|
150
152
|
</a>
|
151
153
|
|
@@ -158,7 +160,7 @@
|
|
158
160
|
<a href="actions.html">
|
159
161
|
|
160
162
|
|
161
|
-
Actions
|
163
|
+
Ovto::Actions
|
162
164
|
|
163
165
|
</a>
|
164
166
|
|
@@ -171,7 +173,20 @@
|
|
171
173
|
<a href="component.html">
|
172
174
|
|
173
175
|
|
174
|
-
Component
|
176
|
+
Ovto::Component
|
177
|
+
|
178
|
+
</a>
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
</li>
|
183
|
+
|
184
|
+
<li class="chapter " data-level="1.3.5" data-path="fetch.html">
|
185
|
+
|
186
|
+
<a href="fetch.html">
|
187
|
+
|
188
|
+
|
189
|
+
Ovto.fetch
|
175
190
|
|
176
191
|
</a>
|
177
192
|
|
@@ -259,7 +274,7 @@
|
|
259
274
|
<!-- Title -->
|
260
275
|
<h1>
|
261
276
|
<i class="fa fa-circle-o-notch fa-spin"></i>
|
262
|
-
<a href=".." >Component</a>
|
277
|
+
<a href=".." >Ovto::Component</a>
|
263
278
|
</h1>
|
264
279
|
</div>
|
265
280
|
|
@@ -279,31 +294,33 @@
|
|
279
294
|
<h2 id="render-method">'render' method</h2>
|
280
295
|
<p><code>render</code> is the only method you need to define in the <code>View</code> class.
|
281
296
|
It must take the global app state as a keyword argument <code>state:</code>.</p>
|
282
|
-
<pre><code> class View < Ovto::Component
|
283
|
-
def render(state
|
284
|
-
o
|
285
|
-
o
|
286
|
-
o
|
287
|
-
state.todos.each do |todo|
|
288
|
-
o
|
289
|
-
end
|
290
|
-
end
|
291
|
-
end
|
292
|
-
end
|
293
|
-
end
|
294
|
-
</code></pre
|
297
|
+
<pre><code class="lang-rb"> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">View</span> < Ovto::Component</span>
|
298
|
+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">render</span><span class="hljs-params">(<span class="hljs-symbol">state:</span>)</span></span>
|
299
|
+
o <span class="hljs-string">'div'</span> <span class="hljs-keyword">do</span>
|
300
|
+
o <span class="hljs-string">'h1'</span>, <span class="hljs-string">'Your todos'</span>
|
301
|
+
o <span class="hljs-string">'ul'</span> <span class="hljs-keyword">do</span>
|
302
|
+
state.todos.each <span class="hljs-keyword">do</span> |todo|
|
303
|
+
o <span class="hljs-string">'li'</span>, todo.title
|
304
|
+
<span class="hljs-keyword">end</span>
|
305
|
+
<span class="hljs-keyword">end</span>
|
306
|
+
<span class="hljs-keyword">end</span>
|
307
|
+
<span class="hljs-keyword">end</span>
|
308
|
+
<span class="hljs-keyword">end</span>
|
309
|
+
</code></pre>
|
310
|
+
<h3 id="morethanonenode-error">MoreThanOneNode error</h3>
|
295
311
|
<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>
|
296
|
-
<pre><code> def render(state
|
297
|
-
o
|
298
|
-
o
|
299
|
-
state.todos.each do |todo|
|
300
|
-
o
|
301
|
-
end
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
|
-
|
306
|
-
</code></pre
|
312
|
+
<pre><code class="lang-rb"> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">render</span><span class="hljs-params">(<span class="hljs-symbol">state:</span>)</span></span>
|
313
|
+
o <span class="hljs-string">'h1'</span>, <span class="hljs-string">'Your todos'</span>
|
314
|
+
o <span class="hljs-string">'ul'</span> <span class="hljs-keyword">do</span>
|
315
|
+
state.todos.each <span class="hljs-keyword">do</span> |todo|
|
316
|
+
o <span class="hljs-string">'li'</span>, todo.title
|
317
|
+
<span class="hljs-keyword">end</span>
|
318
|
+
<span class="hljs-keyword">end</span>
|
319
|
+
<span class="hljs-keyword">end</span>
|
320
|
+
|
321
|
+
<span class="hljs-comment">#=> $MoreThanOneNode {name: "MoreThanOneNode", message: "MyApp::View#render must generate a single DOM node. Please wrap the tags with a 'div' or something.", stack: "MoreThanOneNode: MyApp::View#render must generate …opbox/proj/ovto/example/tutorial/app.js:22887:18)"}</span>
|
322
|
+
</code></pre>
|
323
|
+
<h2 id="the-o-method">The 'o' method</h2>
|
307
324
|
<p><a name="the-o-method"></a></p>
|
308
325
|
<p><code>Ovto::Component#o</code> describes your app's view. For example:</p>
|
309
326
|
<pre><code class="lang-rb">o <span class="hljs-string">'div'</span>
|
@@ -359,7 +376,8 @@ You can get the input value with <code>e.target.value</code> here.</p>
|
|
359
376
|
<p><a href="https://github.com/hyperapp/hyperapp#keys" target="_blank">https://github.com/hyperapp/hyperapp#keys</a></p>
|
360
377
|
<h2 id="sub-components">Sub components</h2>
|
361
378
|
<p><code>o</code> can take another component class to render.</p>
|
362
|
-
<pre><code class="lang-rb"> <span class="hljs-
|
379
|
+
<pre><code class="lang-rb"> <span class="hljs-comment"># Sub component</span>
|
380
|
+
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TodoList</span> < Ovto::Component</span>
|
363
381
|
<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>
|
364
382
|
o <span class="hljs-string">'ul'</span> <span class="hljs-keyword">do</span>
|
365
383
|
todos.each <span class="hljs-keyword">do</span> |todo|
|
@@ -369,6 +387,7 @@ You can get the input value with <code>e.target.value</code> here.</p>
|
|
369
387
|
<span class="hljs-keyword">end</span>
|
370
388
|
<span class="hljs-keyword">end</span>
|
371
389
|
|
390
|
+
<span class="hljs-comment"># Main View class</span>
|
372
391
|
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">View</span> < Ovto::Component</span>
|
373
392
|
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">render</span><span class="hljs-params">(<span class="hljs-symbol">state:</span>)</span></span>
|
374
393
|
o <span class="hljs-string">'div'</span> <span class="hljs-keyword">do</span>
|
@@ -378,11 +397,13 @@ You can get the input value with <code>e.target.value</code> here.</p>
|
|
378
397
|
<span class="hljs-keyword">end</span>
|
379
398
|
<span class="hljs-keyword">end</span>
|
380
399
|
</code></pre>
|
381
|
-
<p>
|
382
|
-
In other words, sub component must yield a single DOM element.</p>
|
400
|
+
<p>For sub components, the <code>state:</code> keyword of <code>render</code> method is optional. </p>
|
383
401
|
<h2 id="text-node">Text node</h2>
|
384
402
|
<p>Sometimes you may want to create a text node.</p>
|
385
403
|
<pre><code class="lang-rb"><span class="hljs-comment">#=> <div>Age: <span class='age'>12</a></div></span>
|
404
|
+
<span class="hljs-comment"># ~~~~~</span>
|
405
|
+
<span class="hljs-comment"># |</span>
|
406
|
+
<span class="hljs-comment"># +--Raw text (not enclosed by an inner tag)</span>
|
386
407
|
</code></pre>
|
387
408
|
<p><code>o</code> generates a text node when <code>'text'</code> is specified as tag name. The above
|
388
409
|
HTML could be described like this.</p>
|
@@ -418,11 +439,15 @@ HTML could be described like this.</p>
|
|
418
439
|
|
419
440
|
|
420
441
|
|
421
|
-
<a href="actions.html" class="navigation navigation-prev
|
442
|
+
<a href="actions.html" class="navigation navigation-prev " aria-label="Previous page: Ovto::Actions">
|
422
443
|
<i class="fa fa-angle-left"></i>
|
423
444
|
</a>
|
424
445
|
|
425
446
|
|
447
|
+
<a href="fetch.html" class="navigation navigation-next " aria-label="Next page: Ovto.fetch">
|
448
|
+
<i class="fa fa-angle-right"></i>
|
449
|
+
</a>
|
450
|
+
|
426
451
|
|
427
452
|
|
428
453
|
</div>
|
@@ -430,7 +455,7 @@ HTML could be described like this.</p>
|
|
430
455
|
<script>
|
431
456
|
var gitbook = gitbook || [];
|
432
457
|
gitbook.push(function() {
|
433
|
-
gitbook.page.hasChanged({"page":{"title":"Component","level":"1.3.4","depth":2,"next":{"title":"
|
458
|
+
gitbook.page.hasChanged({"page":{"title":"Ovto::Component","level":"1.3.4","depth":2,"next":{"title":"Ovto.fetch","level":"1.3.5","depth":2,"path":"api/fetch.md","ref":"api/fetch.md","articles":[]},"previous":{"title":"Ovto::Actions","level":"1.3.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":"2018-10-27T07:15:05.000Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-11-07T09:01:58.704Z"},"basePath":"..","book":{"language":""}});
|
434
459
|
});
|
435
460
|
</script>
|
436
461
|
</div>
|