/** * replace target with children of replacement */ default void replace(Node target, Node replacement) { if (target == null) return; List<Node> nodes = target.parent().children(); int i = nodes.indexOf(target); nodes.remove(i); if (replacement != null) nodes.addAll(i, replacement.children()); }
@Override public void decorate(Node from, Node to) { Node title = from.get("html/head/title"); if (title != null) title.parent().children().remove(title); Node layoutTitle = to.find("g:layoutTitle"); String defaultTitle = layoutTitle.attr("default"); if (defaultTitle == null) defaultTitle = ""; replace(layoutTitle, title != null ? title : new Node("title").addText(defaultTitle)); }
protected RenderableList prepareView(String view, String offset) { String template = resourceTools.getResourceAsString(view); if (template == null) throw new IllegalArgumentException("view '" + view + "' not found"); String dir = view.substring(0, view.lastIndexOf("/") + 1); RenderableList l = new RenderableList(); Node html = new GspParser().parse(template); Set<String> imports = new HashSet<>(); readImports(html, imports); Node layoutTag = html.get("html/head/meta[@name=layout]"); if (layoutTag != null) { layoutTag.parent().children().remove(layoutTag); String layoutContent = resourceTools.getResourceAsString("views/layouts/" + layoutTag.attr("content") + ".gsp"); if (layoutContent == null) throw new IllegalArgumentException("Layout '" + layoutTag.attr("content") + "' not found"); Node layout = new GspParser().parse(layoutContent); readImports(layout, imports); for (Decorator decorator : DependencyFactory.get(DecoratorLib.class).list()) { decorator.decorate(html, layout); } html = layout; } prepare(html.children(), l, dir, offset, imports); return l; }