Added basic HTML generation and response handling.
[jrw.git] / src / jrw / resp / Skeleton.java
1 package jrw.resp;
2
3 import jrw.*;
4 import jrw.sp.*;
5 import java.util.*;
6 import java.util.function.*;
7 import static jrw.sp.cons.*;
8 import static jrw.sp.xhtml.cons.*;
9
10 public class Skeleton {
11     public static Environment.Variable<Supplier<? extends Skeleton>> defskel = new Environment.Variable<>(() -> Skeleton::new);
12     public List<String> styles = new ArrayList<>();
13     public Element body = xhtml.cons.body();
14     public String title;
15
16     public Skeleton(String title, Object... contents) {
17         this.title = title;
18         populate(body, contents);
19     }
20
21     public Skeleton() {
22         this("");
23     }
24
25     public Skeleton title(String title) {this.title = title; return(this);}
26     public Skeleton style(String... styles) {this.styles.addAll(Arrays.asList(styles)); return(this);}
27     public Skeleton body(Object... data) {populate(body, data); return(this);}
28
29     public Element head(Request req) {
30         Element head = xhtml.cons.head(xhtml.cons.title(title));
31         for(String style : styles)
32             populate(head, link($("rel", "stylesheet"), $("type", "text/css"), $("href", style)));
33         return(head);
34     }
35
36     public Element body(Request req) {
37         return(body);
38     }
39
40     public Element message(Request req) {
41         return(html(head(req), body(req)));
42     }
43
44     public Element error(Request req) {
45         return(message(req));
46     }
47 }