Did you know ... | Search Documentation: |
![]() | library(http/htmx): Support htmx.org |
Quoted from htmx.org:
htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypertext
The idea behind htmx is to allow adding attributes to any HTML element that cause an HTTP request. The HTTP response is typically a (short) HTML fragment that extends or replaces an element on the page. This allows us to program a most functionality interactive seen in modern web applications using the powerful SWI-Prolog HTML generation framework rather than having to write a JSON backend and accompanying JavaScript frontend that runs in the browser.
Below is a minimalistic, yet fully functional application that replaces a button after a click in two ways, using either a direct hx-swap our an out-of-band hx-swap command.
:- use_module(library(http/http_server)). :- use_module(library(http/htmx)). :- use_module(library(main)). :- initialization(main, main). main(_Argv) :- http_server([port(8080)]), thread_get_message(quit). http:location(htmx, root(htmx), []). :- http_handler(root(.), home, []). home(_Request) :- reply_html_page( [ title('HTMX demo'), script(src('https://unpkg.com/htmx.org'), []) ], [ button([ id(button1), 'hx-post'('/htmx/clicked1'), 'hx-swap'('outerHTML') ], 'Click me (1)'), button([ id(button2), 'hx-post'('/htmx/clicked2') ], 'Click me (2)') ]). :- http_handler(htmx(clicked1), reply_htmx(\clicked1), []). :- http_handler(htmx(clicked2), reply_htmx(\clicked2), []). clicked1 --> html('Thanks for clicking me! (1)'). clicked2 --> htmx_oob(button2, html('Thanks for clicking me! (2)')).
HTMX requires no dedicated support from the server. This library provides reply_htmx/1,2 to reply with a single HTML element rather than an entire page. Future versions of this library may provide some additional utility predicates.
//