Documentation
¶
Overview ¶
Example ¶
package main
import (
"embed"
"log/slog"
"net/http"
"sync"
"github.com/linkdata/jaws"
"github.com/linkdata/jaws/jawsboot"
"github.com/linkdata/jaws/jawstree"
"github.com/linkdata/jaws/lib/bind"
"github.com/linkdata/jaws/lib/templatereloader"
"github.com/linkdata/jaws/lib/ui"
"github.com/linkdata/staticserve"
)
// This example assumes an 'assets' directory:
//
//. assets/
//. static/
//. images/
//. favicon.png
//. ui/
//. index.html
//go:embed assets
var assetsFS embed.FS
func setupJaws(jw *jaws.Jaws, mux *http.ServeMux) (err error) {
mux.Handle("GET /jaws/", jw) // Ensure the JaWS routes are handled
var tmpl jaws.TemplateLookuper
if tmpl, err = templatereloader.New(assetsFS, "assets/ui/*.html", ""); err == nil {
jw.AddTemplateLookuper(tmpl)
// Initialize jawsboot, we will serve the Javascript and CSS from /static/*.[js|css]
// All files under assets/static will be available under /static. Any favicon loaded
// this way will have it's URL available using jaws.FaviconURL().
if err = jw.Setup(mux.Handle, "/static",
jawsboot.Setup,
jawstree.Setup,
staticserve.MustNewFS(assetsFS, "assets/static", "images/favicon.png"),
); err == nil {
// Add a route to our index template with a bound variable accessible as '.Dot' in the template
var mu sync.Mutex
var f float64
mux.Handle("GET /", ui.Handler(jw, "index.html", bind.New(&mu, &f)))
}
}
return
}
func main() {
jw, err := jaws.New()
if err == nil {
jw.Logger = slog.Default()
if err = setupJaws(jw, http.DefaultServeMux); err == nil {
// start the JaWS processing loop and the HTTP server
go jw.Serve()
slog.Error(http.ListenAndServe("localhost:8080", nil).Error())
}
}
if err != nil {
panic(err)
}
}
Output:
Index ¶
- func Setup(jw *jaws.Jaws, handleFn jaws.HandleFunc, prefix string) (urls []*url.URL, err error)
- type Node
- func (n *Node) GetNames() (names []string)
- func (n *Node) GetSelected() (nameslist [][]string)
- func (n *Node) HasNames(names []string) (yes bool)
- func (n *Node) JawsPathSet(elem *jaws.Element, jspath string, value any)
- func (n *Node) MarshalJSON() (b []byte, err error)
- func (n *Node) SetSelected(nameslist [][]string) (changed []*Node)
- func (n *Node) Walk(jspath string, fn func(jspath string, node *Node))
- type Option
- type Tree
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Node ¶
type Node struct {
Tree *Tree `json:"-"`
Parent *Node `json:"-"`
Name string `json:"name"`
ID string `json:"id,omitzero"`
Selected bool `json:"selected,omitzero"`
Disabled bool `json:"disabled,omitzero"` // !selectable
Children []*Node `json:"children,omitzero"`
}
func Root ¶
func Root(r *os.Root, filterfn func(dirpath string, ent fs.DirEntry) (include bool)) (rootnode *Node, err error)
Root builds a root node from a os.Root. If filterfn is not nil, it must return true for a directory entry to be included in the tree.
func (*Node) GetSelected ¶
func (*Node) MarshalJSON ¶ added in v0.300.0
func (*Node) SetSelected ¶
Click to show internal directories.
Click to hide internal directories.