Metadata-Version: 2.1
Name: pyhtmx-lib
Version: 0.0.1
Summary: A simple wrapper/generator for HTMX pages
Author-email: Flávio De Melo <flavio.eler@gmail.com>
Project-URL: Homepage, https://github.com/femelo/pyhtmx
Project-URL: Issues, https://github.com/femelo/pyhtmx/issues
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE

# PyHTMX


PyHTMX is a dead simple library to generate HTMX code in Python.

Inspired by this StackOverflow thread on [how to generate HTML with XML](https://stackoverflow.com/questions/70408116/generate-html-xml-in-python).


## Features

- Outputs indented code
- Outputs subtrees for the generated DOM
- Children elements and content can be provided as lists
- Building based on nested constructors or `with` statements


## Installing

```bash
  $ python3 -m pip install pyhtmx
```

## Examples

First, an example based on nesting constructors:

```python

    from pyhtmx import *

    html = Html(
      [
        Head(
          [
            Title('My Website'),
            Script(src="https://unpkg.com/htmx.org@2.0.3"),
          ]
        ),
        Body(
          [
            Header(
              [
                Img(src='/path/to/logo.png'),
                Nav(
                  Ul(
                    [
                      Li(
                        "First item.",
                        hx_post="/first-item-clicked",
                        hx_trigger="click",
                        hx_target="#container-div",
                        hx_swap="innerHTML",
                      ),
                      Li("Second item."),
                      Li("Third item.")
                    ]
                  ),
                ),
              ]
            ),
            Div(
              'Content here',
              _id="container-div",
            ),
            Footer([Hr(), 'Copyright 2024']),
          ]
        ),
      ]
    )

  html.dump()

```

The example results in the following output:

```html

  <html>
    <head>
      <title>My Website</title>
      <script src="https://unpkg.com/htmx.org@2.0.3" />
    </head>
    <body>
      <header>
        <img src="/path/to/logo.png" />
        <nav>
          <ul>
            <li hx-post="/first-item-clicked" hx-trigger="click" hx-target="#container-div" hx-swap="innerHTML">First item.</li>
            <li>Second item.</li>
            <li>Third item.</li>
          </ul>
        </nav>
      </header>
      <div id="container-div">Content here</div>
      <footer>
        <hr />
        <span>Copyright 2024</span>
      </footer>
    </body>
  </html>
```

Now an example based on contexts defined with the `with` statement,

```python
  with Div(_class="btn-primary") as div:
      with A(href="/link/to/another/site"):
          with P("This is the first paragraph.", style="color: blue"):
              pass
          with P("Yet another paragraph.", style="color: red"):
              pass

  div.dump()

```

which results in

```html
  <div class="btn-primary">
    <a href="/link/to/another/site">
      <p style="color: blue">This is the first paragraph.</p>
      <p style="color: red">Yet another paragraph.</p>
    </a>
  </div>

```

Related projects
----------------

* https://github.com/cenkalti/pyhtml
* https://github.com/COMP1010UNSW/pyhtml-enhanced
