Просмотр исходного кода

更新XML文件预览UI风格,调整类文本预览架构,更方便扩展

kl 4 лет назад
Родитель
Сommit
656c6748e9

+ 2 - 0
server/src/main/config/freemarker_implicit.ftl

@@ -1,5 +1,7 @@
 [#ftl]
 [#-- @implicitly included --]
+[#-- @ftlvariable name="file" type="cn.keking.model.FileAttribute" --]
+[#-- @ftlvariable name="fileName" type="java.lang.String" --]
 [#-- @ftlvariable name="fileTree" type="java.lang.String" --]
 [#-- @ftlvariable name="baseUrl" type="java.lang.String" --]
 [#-- @ftlvariable name="imgUrls" type="String" --]

+ 2 - 0
server/src/main/java/cn/keking/service/FilePreview.java

@@ -17,6 +17,8 @@ public interface FilePreview {
     String OFFICE_PICTURE_FILE_PREVIEW_PAGE = "officePicture";
     String TXT_FILE_PREVIEW_PAGE = "txt";
     String EXEL_FILE_PREVIEW_PAGE = "html";
+    String XML_FILE_PREVIEW_PAGE = "xml";
+    String MARKDOWN_FILE_PREVIEW_PAGE = "markdown";
     String NOT_SUPPORTED_FILE_PAGE = "fileNotSupported";
 
     String filePreviewHandle(String url, Model model, FileAttribute fileAttribute);

+ 2 - 4
server/src/main/java/cn/keking/service/impl/MarkdownFilePreviewImpl.java

@@ -5,8 +5,6 @@ import cn.keking.service.FilePreview;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.Model;
 
-import static cn.keking.service.impl.SimTextFilePreviewImpl.TEXT_TYPE;
-
 /**
  * @author kl (http://kailing.pub)
  * @since 2020/12/25
@@ -23,7 +21,7 @@ public class MarkdownFilePreviewImpl implements FilePreview {
 
     @Override
     public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
-        model.addAttribute(TEXT_TYPE,"markdown");
-        return simTextFilePreview.filePreviewHandle(url, model, fileAttribute);
+         simTextFilePreview.filePreviewHandle(url, model, fileAttribute);
+         return MARKDOWN_FILE_PREVIEW_PAGE;
     }
 }

+ 0 - 6
server/src/main/java/cn/keking/service/impl/SimTextFilePreviewImpl.java

@@ -20,9 +20,6 @@ import java.nio.charset.StandardCharsets;
 @Service
 public class SimTextFilePreviewImpl implements FilePreview {
 
-    public static final String TEXT_TYPE = "textType";
-    public static final String DEFAULT_TEXT_TYPE = "simText";
-
     private final OtherFilePreviewImpl otherFilePreview;
 
     public SimTextFilePreviewImpl(OtherFilePreviewImpl otherFilePreview) {
@@ -43,9 +40,6 @@ public class SimTextFilePreviewImpl implements FilePreview {
         } catch (IOException e) {
             return otherFilePreview.notSupportedFile(model, fileAttribute, e.getLocalizedMessage());
         }
-        if (!model.containsAttribute(TEXT_TYPE)) {
-            model.addAttribute(TEXT_TYPE, DEFAULT_TEXT_TYPE);
-        }
         return TXT_FILE_PREVIEW_PAGE;
     }
 

+ 2 - 4
server/src/main/java/cn/keking/service/impl/XmlFilePreviewImpl.java

@@ -5,8 +5,6 @@ import cn.keking.service.FilePreview;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.Model;
 
-import static cn.keking.service.impl.SimTextFilePreviewImpl.TEXT_TYPE;
-
 /**
  * @author kl (http://kailing.pub)
  * @since 2020/12/25
@@ -22,7 +20,7 @@ public class XmlFilePreviewImpl implements FilePreview {
 
     @Override
     public String filePreviewHandle(String url, Model model, FileAttribute fileAttribute) {
-        model.addAttribute(TEXT_TYPE,"xml");
-        return simTextFilePreview.filePreviewHandle(url, model, fileAttribute);
+        simTextFilePreview.filePreviewHandle(url, model, fileAttribute);
+        return XML_FILE_PREVIEW_PAGE;
     }
 }

+ 1 - 0
server/src/main/java/cn/keking/web/controller/OnlinePreviewController.java

@@ -57,6 +57,7 @@ public class OnlinePreviewController {
             return otherFilePreview.notSupportedFile(model, errorMsg);
         }
         FileAttribute fileAttribute = fileHandlerService.getFileAttribute(fileUrl, req);
+        model.addAttribute("file", fileAttribute);
         FilePreview filePreview = previewFactory.get(fileAttribute);
         logger.info("预览文件url:{},previewType:{}", fileUrl, fileAttribute.getType());
         return filePreview.filePreviewHandle(fileUrl, model, fileAttribute);

+ 1 - 1
server/src/main/resources/web/index.ftl

@@ -61,7 +61,7 @@
             <div style="padding: 10px">
                 <form enctype="multipart/form-data" id="fileUpload">
                     <input type="file" name="file"/>
-                    <input type="button" id="btnubmit" value=" 上 传 "/>
+                    <input type="button" id="btnSubmit" value=" 上 传 "/>
                 </form>
             </div>
             <div>

+ 118 - 0
server/src/main/resources/web/markdown.ftl

@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0">
+    <title>普通文本预览</title>
+</head>
+<body>
+<input hidden id="textData" value="${textData}"/>
+
+<div class="container">
+    <div class="panel panel-default">
+        <div id="markdown_btn" class="panel-heading">
+            <h4 class="panel-title">
+                <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+                    ${file.name}
+                </a>
+            </h4>
+        </div>
+        <div id="text_btn" class="panel-heading">
+            <h4 class="panel-title">
+                <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+                    ${file.name}
+                </a>
+            </h4>
+        </div>
+        <div class="panel-body">
+            <div id="markdown"></div>
+        </div>
+    </div>
+</div>
+
+<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"/>
+
+<script src="js/jquery-3.0.0.min.js" type="text/javascript"></script>
+<script src="js/jquery.form.min.js" type="text/javascript"></script>
+<script src="bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
+<script src="js/watermark.js" type="text/javascript"></script>
+<script src="js/marked.min.js" type="text/javascript"></script>
+<script src="js/base64.min.js" type="text/javascript"></script>
+
+<script>
+    /**
+     * 初始化
+     */
+    window.onload = function () {
+        $("#markdown_btn").hide()
+        initWaterMark();
+        loadMarkdown();
+    }
+
+    /**
+     * 初始化水印
+     */
+    function initWaterMark() {
+        let watermarkTxt = '${watermarkTxt}';
+        if (watermarkTxt !== '') {
+            watermark.init({
+                watermark_txt: '${watermarkTxt}',
+                watermark_x: 0,
+                watermark_y: 0,
+                watermark_rows: 0,
+                watermark_cols: 0,
+                watermark_x_space: ${watermarkXSpace},
+                watermark_y_space: ${watermarkYSpace},
+                watermark_font: '${watermarkFont}',
+                watermark_fontsize: '${watermarkFontsize}',
+                watermark_color: '${watermarkColor}',
+                watermark_alpha: ${watermarkAlpha},
+                watermark_width: ${watermarkWidth},
+                watermark_height: ${watermarkHeight},
+                watermark_angle: ${watermarkAngle},
+            });
+        }
+    }
+
+
+    /**
+     * 加载markdown
+     */
+    function loadMarkdown() {
+        var textData = Base64.decode($("#textData").val())
+        window.textPreData = "<pre style='background-color: #FFFFFF;border:none'>" + textData + "</pre>";
+        window.textMarkdownData = marked(textData);
+        $("#markdown").html(window.textMarkdownData);
+    }
+
+
+    $(function () {
+        $("#markdown_btn").click(function () {
+            $("#markdown").html(window.textMarkdownData);
+            $("#text_btn").show()
+            $("#markdown_btn").hide()
+        });
+
+        $("#text_btn").click(function () {
+            $("#markdown_btn").show()
+            $("#text_btn").hide();
+            $("#markdown").html(window.textPreData);
+        });
+    });
+
+</script>
+<style>
+    * {
+        margin: 0;
+        padding: 0;
+    }
+
+    html, body {
+        height: 100%;
+        width: 100%;
+    }
+
+</style>
+</body>
+
+</html>

+ 4 - 76
server/src/main/resources/web/txt.ftl

@@ -6,46 +6,18 @@
     <title>普通文本预览</title>
 </head>
 <body>
-<input hidden id="textType" value="${textType}"/>
 <input hidden id="textData" value="${textData}"/>
 
 <div class="container">
-    <#if textType?? && textType == "markdown">
-        <div class="panel panel-default">
-            <div id="markdown_btn" class="panel-heading">
-                <h4 class="panel-title">
-                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
-                        切换markdown
-                    </a>
-                </h4>
-            </div>
-            <div id="text_btn" class="panel-heading">
-                <h4 class="panel-title">
-                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
-                        切换text
-                    </a>
-                </h4>
-            </div>
-            <div class="panel-body">
-                <div id="markdown"></div>
-            </div>
-        </div>
-    <#elseif textType?? && textType == "xml" >
-        <div id="xml" style="padding: 18px;"></div>
-    <#else>
-        <div id="text"></div>
-    </#if>
+    <div id="text"></div>
 </div>
 
-<link rel="stylesheet" href="css/xmlTreeViewer.css"/>
 <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"/>
 
 <script src="js/jquery-3.0.0.min.js" type="text/javascript"></script>
 <script src="js/jquery.form.min.js" type="text/javascript"></script>
 <script src="bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
 <script src="js/watermark.js" type="text/javascript"></script>
-<script src="js/marked.min.js" type="text/javascript"></script>
-<script src="js/xmlTreeViewer.js" type="text/javascript"></script>
 <script src="js/base64.min.js" type="text/javascript"></script>
 
 <script>
@@ -53,12 +25,8 @@
      * 初始化
      */
     window.onload = function () {
-        $("#markdown_btn").hide()
         initWaterMark();
-        fetchData();
         loadText();
-        loadXmlData()
-        loadMarkdown();
     }
 
     /**
@@ -86,56 +54,16 @@
         }
     }
 
-    /**
-     * 获取文本数据
-     */
-    function fetchData() {
-        window.textData = Base64.decode($("#textData").val())
-        window.textPreData = "<pre style='background-color: #FFFFFF;border:none'>" + window.textData + "</pre>";
-    }
-
     /**
      *加载普通文本
      */
     function loadText() {
-        $("#text").html(window.textPreData);
-    }
+        var textData = Base64.decode($("#textData").val())
+        var textPreData = "<pre style='background-color: #FFFFFF;border:none'>" + textData + "</pre>";
 
-    /**
-     * 加载markdown
-     */
-    function loadMarkdown() {
-        if ($("#textType").val() === "markdown") {
-            window.textMarkdownData = marked(window.textData);
-            $("#markdown").html(window.textMarkdownData);
-        }
+        $("#text").html(textPreData);
     }
 
-    /**
-     * 加载xml数据
-     */
-    function loadXmlData() {
-        if ($("#textType").val() === "xml") {
-            var xmlNode = xmlTreeViewer.parseXML(window.textData);
-            var retNode = xmlTreeViewer.getXMLViewerNode(xmlNode.xml);
-            $("#xml").html(retNode);
-        }
-    }
-
-    $(function () {
-        $("#markdown_btn").click(function () {
-            $("#markdown").html(window.textMarkdownData);
-            $("#text_btn").show()
-            $("#markdown_btn").hide()
-        });
-
-        $("#text_btn").click(function () {
-            $("#markdown_btn").show()
-            $("#text_btn").hide();
-            $("#markdown").html(window.textPreData);
-        });
-    });
-
 </script>
 <style>
     * {

+ 97 - 0
server/src/main/resources/web/xml.ftl

@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0">
+    <title>普通文本预览</title>
+</head>
+<body>
+<input hidden id="textData" value="${textData}"/>
+<div class="container">
+    <div class="panel panel-default">
+        <div class="panel-heading">
+            <h4 class="panel-title">
+                <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+                     ${file.name}
+                </a>
+            </h4>
+        </div>
+        <div class="panel-body">
+            <div id="xml"></div>
+        </div>
+    </div>
+</div>
+
+<link rel="stylesheet" href="css/xmlTreeViewer.css"/>
+<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"/>
+
+<script src="js/jquery-3.0.0.min.js" type="text/javascript"></script>
+<script src="js/jquery.form.min.js" type="text/javascript"></script>
+<script src="bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
+<script src="js/watermark.js" type="text/javascript"></script>
+<script src="js/marked.min.js" type="text/javascript"></script>
+<script src="js/xmlTreeViewer.js" type="text/javascript"></script>
+<script src="js/base64.min.js" type="text/javascript"></script>
+
+<script>
+    /**
+     * 初始化
+     */
+    window.onload = function () {
+        initWaterMark();
+        loadXmlData()
+    }
+
+    /**
+     * 初始化水印
+     */
+    function initWaterMark() {
+        let watermarkTxt = '${watermarkTxt}';
+        if (watermarkTxt !== '') {
+            watermark.init({
+                watermark_txt: '${watermarkTxt}',
+                watermark_x: 0,
+                watermark_y: 0,
+                watermark_rows: 0,
+                watermark_cols: 0,
+                watermark_x_space: ${watermarkXSpace},
+                watermark_y_space: ${watermarkYSpace},
+                watermark_font: '${watermarkFont}',
+                watermark_fontsize: '${watermarkFontsize}',
+                watermark_color: '${watermarkColor}',
+                watermark_alpha: ${watermarkAlpha},
+                watermark_width: ${watermarkWidth},
+                watermark_height: ${watermarkHeight},
+                watermark_angle: ${watermarkAngle},
+            });
+        }
+    }
+
+
+    /**
+     * 加载xml数据
+     */
+    function loadXmlData() {
+        var textData = Base64.decode($("#textData").val())
+        var xmlNode = xmlTreeViewer.parseXML(textData);
+        var retNode = xmlTreeViewer.getXMLViewerNode(xmlNode.xml);
+        $("#xml").html(retNode);
+
+    }
+
+</script>
+<style>
+    * {
+        margin: 0;
+        padding: 0;
+    }
+
+    html, body {
+        height: 100%;
+        width: 100%;
+    }
+
+</style>
+</body>
+
+</html>