From 97641c088c44dd60f63e697466c73613a1c63262 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Sat, 02 Jul 2022 21:37:01 +0800
Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/farmer-cms

---
 src/main/java/com/xcong/farmer/cms/cms/node/PartNode.java |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 102 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/cms/node/PartNode.java b/src/main/java/com/xcong/farmer/cms/cms/node/PartNode.java
new file mode 100644
index 0000000..3866f09
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/cms/node/PartNode.java
@@ -0,0 +1,102 @@
+package com.xcong.farmer.cms.cms.node;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.xcong.farmer.cms.cms.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;
+
+    public PartNode(Element element) {
+        this.element = element.clone();
+        this.originalElement = element;
+    }
+
+    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.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 (!"@child".equals(attrNode.getTag())) {
+                    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 Map) {
+                    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);
+                    }
+                }
+            }
+        }
+
+        if (attrNode.tagsEnum != null && attrNode.tagsEnum.getType() == 1) {
+            this.put(attrNode.getField(), result.toString());
+        }
+
+        attrNode.getElement().append(result.toString());
+        return attrNode.getElement().toString();
+    }
+
+    public Element getElement() {
+        return element;
+    }
+
+    public String getHtml() {
+        return html;
+    }
+}

--
Gitblit v1.9.1