- Documentation
- Reference manual
- Packages
- SWI-Prolog HTTP support
- The HTTP server libraries
- Creating an HTTP reply
- library(http/http_dispatch): Dispatch requests in the HTTP server
- library(http/http_dirindex): HTTP directory listings
- library(http/http_files): Serve plain files from a hierarchy
- library(http/http_session): HTTP Session management
- library(http/http_cors): Enable CORS: Cross-Origin Resource Sharing
- library(http/http_authenticate): Authenticate HTTP connections using 401 headers
- library(http/http_digest): HTTP Digest authentication
- library(http/http_dyn_workers): Dynamically schedule HTTP workers.
- Custom Error Pages
- library(http/http_openid): OpenID consumer and server library
- Get parameters from HTML forms
- Request format
- Running the server
- The wrapper library
- library(http/http_host): Obtain public server location
- library(http/http_log): HTTP Logging module
- library(http/http_server_health): HTTP Server health statistics
- Debugging HTTP servers
- library(http/http_header): Handling HTTP headers
- The library(http/html_write) library
- library(http/js_write): Utilities for including JavaScript
- library(http/http_path): Abstract specification of HTTP server locations
- library(http/html_head): Automatic inclusion of CSS and scripts links
- library(http/http_pwp): Serve PWP pages through the HTTP server
- library(http/htmx): Support htmx.org
- The HTTP server libraries
- SWI-Prolog HTTP support
3.26 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 accompagnying JavaScript frontend that runs in the browser.
Below is a minimal, yet fully functional application
:- 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([ 'hx-post'('/htmx/clicked'), 'hx-swap'('outerHTML') ], 'Click me') ]). :- http_handler(htmx(clicked), reply_htmx(\clicked), []). clicked --> html('Thanks for clicking me!').
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.
- [det]reply_htmx(+HTML)
- [det]reply_htmx(+HTML, +Request)
- Reply a plain HTML element as opposed to a complete HTML page as created using reply_html_page/2,3. While reply_htmx/1 is to be used in a normal HTTP handler (route), reply_htmx/2 may be registered directly in the http_handler/3 declaration to deal with simple cases where we do not need the Request data.
- [det]htmx_oob(++Target,
:HTML)
//
- Emit an htmx out-of-band element. HTML is used to swap the content of the DOM element with id Target.