|
2 | 2 | "cells": [ |
3 | 3 | { |
4 | 4 | "cell_type": "code", |
5 | | - "execution_count": 1, |
| 5 | + "execution_count": null, |
6 | 6 | "id": "d0c84aa5", |
7 | 7 | "metadata": {}, |
8 | 8 | "outputs": [], |
|
22 | 22 | }, |
23 | 23 | { |
24 | 24 | "cell_type": "code", |
25 | | - "execution_count": 2, |
| 25 | + "execution_count": null, |
26 | 26 | "id": "55944805", |
27 | 27 | "metadata": {}, |
28 | 28 | "outputs": [], |
|
40 | 40 | }, |
41 | 41 | { |
42 | 42 | "cell_type": "code", |
43 | | - "execution_count": 3, |
| 43 | + "execution_count": null, |
44 | 44 | "id": "42d18e5c", |
45 | 45 | "metadata": {}, |
46 | 46 | "outputs": [], |
|
51 | 51 | }, |
52 | 52 | { |
53 | 53 | "cell_type": "code", |
54 | | - "execution_count": 4, |
| 54 | + "execution_count": null, |
55 | 55 | "id": "b06c10f6", |
56 | 56 | "metadata": {}, |
57 | 57 | "outputs": [], |
|
82 | 82 | }, |
83 | 83 | { |
84 | 84 | "cell_type": "code", |
85 | | - "execution_count": 5, |
| 85 | + "execution_count": null, |
86 | 86 | "id": "d6069e01", |
87 | 87 | "metadata": {}, |
88 | 88 | "outputs": [], |
|
97 | 97 | }, |
98 | 98 | { |
99 | 99 | "cell_type": "code", |
100 | | - "execution_count": 6, |
| 100 | + "execution_count": null, |
| 101 | + "id": "9b2adafa", |
| 102 | + "metadata": {}, |
| 103 | + "outputs": [], |
| 104 | + "source": [ |
| 105 | + "#| export\n", |
| 106 | + "def valmap(o):\n", |
| 107 | + " if is_listy(o): return ' '.join(o)\n", |
| 108 | + " if isinstance(o, dict): return '; '.join(f\"{k}:{v}\" for k,v in o.items())\n", |
| 109 | + " return o" |
| 110 | + ] |
| 111 | + }, |
| 112 | + { |
| 113 | + "cell_type": "code", |
| 114 | + "execution_count": null, |
101 | 115 | "id": "149067dd", |
102 | 116 | "metadata": {}, |
103 | 117 | "outputs": [], |
104 | 118 | "source": [ |
105 | 119 | "#|export\n", |
106 | | - "def _preproc(c, kw, attrmap=attrmap):\n", |
| 120 | + "def _preproc(c, kw, attrmap=attrmap, valmap=valmap):\n", |
107 | 121 | " if len(c)==1 and isinstance(c[0], (types.GeneratorType, map, filter)): c = tuple(c[0])\n", |
108 | | - " return c,{attrmap(k.lower()):v for k,v in kw.items() if v is not None}" |
| 122 | + " return c,{attrmap(k.lower()):valmap(v) for k,v in kw.items() if v is not None}" |
109 | 123 | ] |
110 | 124 | }, |
111 | 125 | { |
112 | 126 | "cell_type": "code", |
113 | | - "execution_count": 7, |
| 127 | + "execution_count": null, |
114 | 128 | "id": "06718948", |
115 | 129 | "metadata": {}, |
116 | 130 | "outputs": [], |
117 | 131 | "source": [ |
118 | 132 | "#| export\n", |
119 | | - "def ft(tag:str, *c, void_=False, attrmap=attrmap, **kw):\n", |
| 133 | + "def ft(tag:str, *c, void_=False, attrmap=attrmap, valmap=valmap, **kw):\n", |
120 | 134 | " \"Create an `FT` structure for `to_xml()`\"\n", |
121 | | - " return FT(tag.lower(),*_preproc(c,kw,attrmap=attrmap), void_=void_)" |
| 135 | + " return FT(tag.lower(),*_preproc(c,kw,attrmap=attrmap, valmap=valmap), void_=void_)" |
122 | 136 | ] |
123 | 137 | }, |
124 | 138 | { |
125 | 139 | "cell_type": "code", |
126 | | - "execution_count": 8, |
| 140 | + "execution_count": null, |
127 | 141 | "id": "45489975", |
128 | 142 | "metadata": {}, |
129 | 143 | "outputs": [], |
|
156 | 170 | }, |
157 | 171 | { |
158 | 172 | "cell_type": "code", |
159 | | - "execution_count": 9, |
| 173 | + "execution_count": null, |
160 | 174 | "id": "39834fcb", |
161 | 175 | "metadata": {}, |
162 | 176 | "outputs": [], |
|
171 | 185 | }, |
172 | 186 | { |
173 | 187 | "cell_type": "code", |
174 | | - "execution_count": 10, |
| 188 | + "execution_count": null, |
175 | 189 | "id": "9a8b4ddb", |
176 | 190 | "metadata": {}, |
177 | 191 | "outputs": [ |
|
187 | 201 | " ('Some text',\n", |
188 | 202 | " ['input', (), {'name': 'me'}],\n", |
189 | 203 | " ['img', (), {'data': 1, 'src': 'filename'}]),\n", |
190 | | - " {'class': 'myclass'}],),\n", |
| 204 | + " {'class': 'myclass another', 'style': 'padding:1; margin:2'}],),\n", |
191 | 205 | " {}]),\n", |
192 | 206 | " {}])\n" |
193 | 207 | ] |
|
196 | 210 | "source": [ |
197 | 211 | "samp = Html(\n", |
198 | 212 | " Head(Title('Some page')),\n", |
199 | | - " Body(Div('Some text', Input(name='me'), Img(src=\"filename\", data=1), klass='myclass'))\n", |
| 213 | + " Body(Div('Some text', Input(name='me'), Img(src=\"filename\", data=1),\n", |
| 214 | + " cls=['myclass', 'another'],\n", |
| 215 | + " style={'padding':1, 'margin':2}))\n", |
200 | 216 | ")\n", |
201 | 217 | "pprint(samp)" |
202 | 218 | ] |
|
211 | 227 | }, |
212 | 228 | { |
213 | 229 | "cell_type": "code", |
214 | | - "execution_count": 11, |
| 230 | + "execution_count": null, |
215 | 231 | "id": "5c6c57e9", |
216 | 232 | "metadata": {}, |
217 | 233 | "outputs": [ |
|
242 | 258 | }, |
243 | 259 | { |
244 | 260 | "cell_type": "code", |
245 | | - "execution_count": 12, |
| 261 | + "execution_count": null, |
246 | 262 | "id": "5c7f175d", |
247 | 263 | "metadata": {}, |
248 | 264 | "outputs": [ |
|
259 | 275 | "['p', ('Some text',), {'id': 'newid'}]" |
260 | 276 | ] |
261 | 277 | }, |
262 | | - "execution_count": 12, |
| 278 | + "execution_count": null, |
263 | 279 | "metadata": {}, |
264 | 280 | "output_type": "execute_result" |
265 | 281 | } |
|
272 | 288 | }, |
273 | 289 | { |
274 | 290 | "cell_type": "code", |
275 | | - "execution_count": 13, |
| 291 | + "execution_count": null, |
276 | 292 | "id": "254c8ff3", |
277 | 293 | "metadata": {}, |
278 | 294 | "outputs": [], |
|
283 | 299 | }, |
284 | 300 | { |
285 | 301 | "cell_type": "code", |
286 | | - "execution_count": 14, |
| 302 | + "execution_count": null, |
287 | 303 | "id": "0255b96f", |
288 | 304 | "metadata": {}, |
289 | 305 | "outputs": [], |
|
303 | 319 | }, |
304 | 320 | { |
305 | 321 | "cell_type": "code", |
306 | | - "execution_count": 15, |
| 322 | + "execution_count": null, |
307 | 323 | "id": "b89d088a", |
308 | 324 | "metadata": {}, |
309 | 325 | "outputs": [], |
|
338 | 354 | }, |
339 | 355 | { |
340 | 356 | "cell_type": "code", |
341 | | - "execution_count": 16, |
| 357 | + "execution_count": null, |
342 | 358 | "id": "d3d23c48", |
343 | 359 | "metadata": {}, |
344 | 360 | "outputs": [ |
|
353 | 369 | " <title>Some page</title>\n", |
354 | 370 | " </head>\n", |
355 | 371 | " <body>\n", |
356 | | - " <div class=\"myclass\">\n", |
| 372 | + " <div class=\"myclass another\" style=\"padding:1; margin:2\">\n", |
357 | 373 | "Some text\n", |
358 | 374 | " <input name=\"me\">\n", |
359 | 375 | " <img src=\"filename\" data=\"1\">\n", |
|
379 | 395 | }, |
380 | 396 | { |
381 | 397 | "cell_type": "code", |
382 | | - "execution_count": 17, |
| 398 | + "execution_count": null, |
383 | 399 | "id": "798ae1d2", |
384 | 400 | "metadata": {}, |
385 | 401 | "outputs": [ |
|
397 | 413 | } |
398 | 414 | ], |
399 | 415 | "source": [ |
400 | | - "class MockDjangoSafeString(str):\n", |
401 | | - " def __html__(self):\n", |
402 | | - " return self\n", |
| 416 | + "class _SafeString(str):\n", |
| 417 | + " def __html__(self): return self\n", |
403 | 418 | "\n", |
404 | | - "def mock_django_conditional_escape(s):\n", |
405 | | - " return s.__html__() if hasattr(s, '__html__') else MockDjangoSafeString(escape(s))\n", |
| 419 | + "def _escape(s): return s.__html__() if hasattr(s, '__html__') else _SafeString(escape(s))\n", |
406 | 420 | "\n", |
407 | | - "html_string_coming_from_django = MockDjangoSafeString('<b>Hello from Django</b>')\n", |
408 | | - "print(to_xml(Div(html_string_coming_from_django)))\n", |
| 421 | + "r = _SafeString('<b>Hello from Django</b>')\n", |
| 422 | + "print(to_xml(Div(r)))\n", |
409 | 423 | "\n", |
410 | | - "print(mock_django_conditional_escape(Div(P('Hello from fastcore <3'))))" |
| 424 | + "print(_escape(Div(P('Hello from fastcore <3'))))" |
411 | 425 | ] |
412 | 426 | }, |
413 | 427 | { |
414 | 428 | "cell_type": "code", |
415 | | - "execution_count": 18, |
| 429 | + "execution_count": null, |
416 | 430 | "id": "5f0e91e0", |
417 | 431 | "metadata": {}, |
418 | 432 | "outputs": [], |
|
425 | 439 | }, |
426 | 440 | { |
427 | 441 | "cell_type": "code", |
428 | | - "execution_count": 19, |
| 442 | + "execution_count": null, |
429 | 443 | "id": "39fab735", |
430 | 444 | "metadata": {}, |
431 | 445 | "outputs": [], |
|
441 | 455 | }, |
442 | 456 | { |
443 | 457 | "cell_type": "code", |
444 | | - "execution_count": 20, |
| 458 | + "execution_count": null, |
445 | 459 | "id": "530666f8", |
446 | 460 | "metadata": {}, |
447 | 461 | "outputs": [], |
|
455 | 469 | }, |
456 | 470 | { |
457 | 471 | "cell_type": "code", |
458 | | - "execution_count": 21, |
| 472 | + "execution_count": null, |
459 | 473 | "id": "204c3900", |
460 | 474 | "metadata": {}, |
461 | 475 | "outputs": [], |
|
479 | 493 | }, |
480 | 494 | { |
481 | 495 | "cell_type": "code", |
482 | | - "execution_count": 22, |
| 496 | + "execution_count": null, |
483 | 497 | "id": "efd647f8", |
484 | 498 | "metadata": {}, |
485 | 499 | "outputs": [ |
|
509 | 523 | " {'class': 'myclass'}]" |
510 | 524 | ] |
511 | 525 | }, |
512 | | - "execution_count": 22, |
| 526 | + "execution_count": null, |
513 | 527 | "metadata": {}, |
514 | 528 | "output_type": "execute_result" |
515 | 529 | } |
|
535 | 549 | }, |
536 | 550 | { |
537 | 551 | "cell_type": "code", |
538 | | - "execution_count": 23, |
| 552 | + "execution_count": null, |
539 | 553 | "id": "ad32b076", |
540 | 554 | "metadata": {}, |
541 | 555 | "outputs": [], |
|
555 | 569 | ], |
556 | 570 | "metadata": { |
557 | 571 | "kernelspec": { |
558 | | - "display_name": "Python 3 (ipykernel)", |
| 572 | + "display_name": "python3", |
559 | 573 | "language": "python", |
560 | 574 | "name": "python3" |
561 | | - }, |
562 | | - "language_info": { |
563 | | - "codemirror_mode": { |
564 | | - "name": "ipython", |
565 | | - "version": 3 |
566 | | - }, |
567 | | - "file_extension": ".py", |
568 | | - "mimetype": "text/x-python", |
569 | | - "name": "python", |
570 | | - "nbconvert_exporter": "python", |
571 | | - "pygments_lexer": "ipython3", |
572 | | - "version": "3.11.8" |
573 | 575 | } |
574 | 576 | }, |
575 | 577 | "nbformat": 4, |
|
0 commit comments