|
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