From 90f9311b8f92d84533860e374c2a38c16f8a6e7d Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 30 Aug 2022 18:01:27 +0800
Subject: [PATCH] fix
---
src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java | 81 ++++++++++++++--------------------------
1 files changed, 28 insertions(+), 53 deletions(-)
diff --git a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
index 7d9cd18..8748eef 100644
--- a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
+++ b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
@@ -2,20 +2,28 @@
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.xcong.farmer.cms.core.handler.DataParserHandler;
import com.xcong.farmer.cms.core.tag.TagsEnum;
+import com.xcong.farmer.cms.core.tag.model.TimeTag;
import com.xcong.farmer.cms.core.template.Configuration;
import com.xcong.farmer.cms.core.template.TemplateConfiguration;
+import com.xcong.farmer.cms.utils.GroovySingleton;
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
+import groovy.lang.Script;
import org.apache.commons.text.StringSubstitutor;
import org.jsoup.nodes.Attribute;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
@@ -72,32 +80,7 @@
return false;
}
- public void staticPath() {
- // 设置img的链接访问
- if ("img".equals(this.element.tagName())) {
- String src = this.element.attr("src");
- if (StrUtil.isNotBlank(STATIC_URL)) {
- this.element.attr("src", STATIC_URL + src);
- }
- }
-
- if ("link".equals(this.element.tagName())) {
- String src = this.element.attr("href");
- if (StrUtil.isNotBlank(STATIC_URL)) {
- this.element.attr("href", STATIC_URL + src);
- }
- }
-
- if ("script".equals(this.element.tagName())) {
- String src = this.element.attr("src");
- if (StrUtil.isNotBlank(STATIC_URL)) {
- this.element.attr("src", STATIC_URL + src);
- }
- }
- }
-
public void parser() {
- staticPath();
// 判断是否为最小节点,如果是且没有特殊标签,则跳过清空
if (!isNeedEmpty()) {
return;
@@ -123,7 +106,6 @@
i++;
try {
- Template.TAGS.add(tagsEnum.getName());
// {id=${col.id}, page=1, limit=5, field=art} ${col.id} 形式需先设置值
String tagValue = attributes.get(tagsEnum.getName());
tagValue = attrValueFormat(tagValue);
@@ -145,16 +127,13 @@
}
}
+
runDataInject();
}
public void runDataInject() {
Attributes attributes = this.element.attributes();
for (Attribute attribute : attributes) {
- if (attribute.getKey().startsWith("\\$")) {
- Template.TAGS.add(attribute.getKey());
- }
-
String key = attribute.getKey().replaceAll("\\$", "");
String value = attribute.getValue();
@@ -180,6 +159,10 @@
this.element.text(result);
} else if ("html".equals(key)) {
this.element.html(result);
+ } else if ("time".equals(key)) {
+ TimeTag time = parserTag(result, TimeTag.class);
+ String timeStr = DateUtil.format(DateUtil.parse(time.getDate(), DatePattern.NORM_DATETIME_PATTERN), time.getFormat());
+ this.element.text(timeStr);
} else {
this.element.attr(key, result);
}
@@ -194,24 +177,8 @@
Map<String, String> targetData = new HashMap<>();
while (matcher.find()) {
String group = matcher.group();
-// String splitValue = group.replaceAll("\\$\\{", "").replaceAll("}", "");
-// String[] split = splitValue.split("\\.");
-// if (split.length == 0) {
-// continue;
-// }
-//
-// for (Map.Entry<String, Object> entry : this.parserData.entrySet()) {
-// String fieldKey = entry.getKey();
-// Map<String, Object> data = (Map<String, Object>) entry.getValue();
-// JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(data.get("state")));
-//
-// for (Map.Entry<String, Object> map : jsonObject.entrySet()) {
-// if (map.getValue() instanceof String) {
-// targetData.put(fieldKey + "." + map.getKey(), (String) map.getValue());
-// }
-// }
-// }
+ GroovyShell groovyShell = GroovySingleton.getSingleton();
Binding binding = new Binding();
for (Map.Entry<String, Object> entry : this.parserData.entrySet()) {
String fieldKey = entry.getKey();
@@ -223,12 +190,20 @@
binding.setProperty("system", systemData);
}
- GroovyShell shell = new GroovyShell(binding);
- Object evaluate = shell.evaluate(group);
- if (evaluate == null) {
- targetData.put(group, "");
- } else {
- targetData.put(group, evaluate.toString());
+ synchronized (this) {
+ Script parse = groovyShell.parse(group);
+ parse.setBinding(binding);
+ Object evaluate = parse.run();
+ if (evaluate instanceof Date) {
+ evaluate = DateUtil.format((Date) evaluate, DatePattern.NORM_DATETIME_PATTERN);
+ }
+
+ if (evaluate == null) {
+ targetData.put(group, "");
+ } else {
+ targetData.put(group, evaluate.toString());
+ }
+ groovyShell.getClassLoader().clearCache();
}
}
--
Gitblit v1.9.1