| 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 | } |