|
382 | 382 | " if v==False: return ''\n",
|
383 | 383 | " if isinstance(v,str): v = escape(v, quote=False)\n",
|
384 | 384 | " elif isinstance(v, Mapping): v = json.dumps(v)\n",
|
| 385 | + " elif hasattr(v, '__html__'): v = v.__html__()\n", |
385 | 386 | " else: v = str(v)\n",
|
386 | 387 | " qt = '\"'\n",
|
387 | 388 | " if qt in v:\n",
|
|
460 | 461 | {
|
461 | 462 | "cell_type": "code",
|
462 | 463 | "execution_count": null,
|
463 |
| - "id": "dd054392", |
| 464 | + "id": "7a3655e9", |
464 | 465 | "metadata": {},
|
465 | 466 | "outputs": [],
|
466 | 467 | "source": [
|
467 | 468 | "#| export\n",
|
468 | 469 | "def to_xml(elm, lvl=0, indent=True, do_escape=True):\n",
|
469 | 470 | " \"Convert `ft` element tree into an XML string\"\n",
|
470 |
| - " return Safe(_to_xml(elm, lvl, indent, do_escape=do_escape))\n", |
471 |
| - "\n", |
472 |
| - "FT.__html__ = to_xml" |
| 471 | + " return Safe(_to_xml(elm, lvl, indent, do_escape=do_escape))" |
| 472 | + ] |
| 473 | + }, |
| 474 | + { |
| 475 | + "cell_type": "code", |
| 476 | + "execution_count": null, |
| 477 | + "id": "dd054392", |
| 478 | + "metadata": {}, |
| 479 | + "outputs": [], |
| 480 | + "source": [ |
| 481 | + "#| export\n", |
| 482 | + "@patch\n", |
| 483 | + "def __html__(self:FT): return to_xml(self, indent=False)" |
473 | 484 | ]
|
474 | 485 | },
|
475 | 486 | {
|
|
640 | 651 | "text": [
|
641 | 652 | "<div><b>Hello from Django</b></div>\n",
|
642 | 653 | "\n",
|
643 |
| - "<div>\n", |
644 |
| - " <p>Hello from fastcore <3</p>\n", |
645 |
| - "</div>\n", |
646 |
| - "\n" |
| 654 | + "<div><p>Hello from fastcore <3</p></div>\n" |
647 | 655 | ]
|
648 | 656 | }
|
649 | 657 | ],
|
|
655 | 663 | "print(_esc(Div(P('Hello from fastcore <3'))))"
|
656 | 664 | ]
|
657 | 665 | },
|
| 666 | + { |
| 667 | + "cell_type": "markdown", |
| 668 | + "id": "d7ff740e", |
| 669 | + "metadata": {}, |
| 670 | + "source": [ |
| 671 | + "FT attributes are rendered with `to_xml`:" |
| 672 | + ] |
| 673 | + }, |
| 674 | + { |
| 675 | + "cell_type": "code", |
| 676 | + "execution_count": null, |
| 677 | + "id": "180074af", |
| 678 | + "metadata": {}, |
| 679 | + "outputs": [ |
| 680 | + { |
| 681 | + "name": "stdout", |
| 682 | + "output_type": "stream", |
| 683 | + "text": [ |
| 684 | + "<p value=\"<div>ho</div>\">hi</p>\n", |
| 685 | + "\n" |
| 686 | + ] |
| 687 | + } |
| 688 | + ], |
| 689 | + "source": [ |
| 690 | + "print(to_xml(P('hi', value=Div('ho'))))" |
| 691 | + ] |
| 692 | + }, |
658 | 693 | {
|
659 | 694 | "cell_type": "markdown",
|
660 | 695 | "id": "5ad30d7c",
|
|
0 commit comments