package com.xcong.farmer.cms.core.node;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.xcong.farmer.cms.core.template.Configuration;
|
import org.jsoup.nodes.Element;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
public class PartNode extends Configuration {
|
|
private Element element;
|
private Element originalElement;
|
private String html;
|
private Map<String, Object> system;
|
|
public PartNode(Element element, Map<String, Object> data) {
|
this.element = element.clone();
|
this.originalElement = element;
|
this.system = data;
|
}
|
|
public void parser() {
|
this.html = parser(this.element, null);
|
}
|
|
public String parser(Element element, Map<String, Object> tagDataMap) {
|
AttrNode attrNode = new AttrNode(element, tagDataMap);
|
attrNode.systemData(this.system);
|
attrNode.parser();
|
// attrNode.runDataInject();
|
|
StringBuilder result = new StringBuilder();
|
if (CollUtil.isNotEmpty(element.children())) {
|
Object parseData = attrNode.getData();
|
if (tagDataMap == null) {
|
tagDataMap = new HashMap<>();
|
}
|
|
if (parseData == null) {
|
// 特殊处理。 如果有子节点标签@child,但数据中没有子节点数据,则将该子节点直接删除即直接返回空字符串
|
if (attrNode.processContinue()) {
|
for (Element children : element.children()) {
|
String html = parser(children, tagDataMap);
|
result.append(html);
|
}
|
} else {
|
return "";
|
}
|
} else {
|
if (parseData instanceof List) {
|
List list = (List) parseData;
|
|
int i = 1;
|
for (Object o : list) {
|
if (StrUtil.isNotBlank(attrNode.getField())) {
|
Map<String, Object> data = new HashMap<>();
|
data.put("index", i);
|
data.put("state", o);
|
tagDataMap.put(attrNode.getField(), data);
|
}
|
|
StringBuilder listHtml = new StringBuilder();
|
for (Element children : element.children()) {
|
String html = parser(children, tagDataMap);
|
listHtml.append(html);
|
}
|
result.append(listHtml);
|
i++;
|
}
|
|
} else if (parseData instanceof Object) {
|
if (StrUtil.isNotBlank(attrNode.getField())) {
|
Map<String, Object> data = new HashMap<>();
|
data.put("index", 1);
|
data.put("state", parseData);
|
tagDataMap.put(attrNode.getField(), data);
|
}
|
|
for (Element children : element.children()) {
|
String html = parser(children, tagDataMap);
|
result.append(html);
|
}
|
}
|
}
|
}
|
|
attrNode.getElement().append(result.toString());
|
return attrNode.getElement().toString();
|
}
|
|
public Element getElement() {
|
return element;
|
}
|
|
public String getHtml() {
|
return html;
|
}
|
}
|