Commit 17a3a771f4d5bdcfc6df72ce716493b25680c86b

Authored by 黄 x
1 parent 004c2367

feat: add build properties

No preview for this file type
  1 +import java.io.BufferedReader;
  2 +import java.io.ByteArrayOutputStream;
  3 +import java.io.File;
  4 +import java.io.FileInputStream;
  5 +import java.io.FileWriter;
  6 +import java.io.IOException;
  7 +import java.io.InputStream;
  8 +import java.io.InputStreamReader;
  9 +import java.io.UnsupportedEncodingException;
  10 +import java.net.URLEncoder;
  11 +import java.util.Arrays;
  12 +import java.util.HashSet;
  13 +import java.util.Iterator;
  14 +import java.util.LinkedList;
  15 +import java.util.List;
  16 +import java.util.Set;
  17 +import java.util.zip.Deflater;
  18 +
  19 +public class Xml2Js
  20 +{
  21 + /**
  22 + *
  23 + */
  24 + protected static final int IO_BUFFER_SIZE = 4 * 1024;
  25 +
  26 + /**
  27 + *
  28 + */
  29 + public static String CHARSET_FOR_URL_ENCODING = "UTF-8";
  30 +
  31 + /**
  32 + *
  33 + * @param path
  34 + * @return
  35 + */
  36 + public List<String> walk(File base, File root) throws IOException
  37 + {
  38 + if (root == null)
  39 + {
  40 + root = base;
  41 + }
  42 +
  43 + List<String> result = new LinkedList<String>();
  44 + String basePath = base.getCanonicalPath();
  45 + File[] list = root.listFiles();
  46 +
  47 + if (list != null)
  48 + {
  49 + for (File f : list)
  50 + {
  51 + if (f.isDirectory())
  52 + {
  53 + result.addAll(walk(base, f));
  54 + }
  55 + else if (f.getCanonicalPath().toLowerCase().endsWith(".xml"))
  56 + {
  57 + String name = f.getCanonicalPath()
  58 + .substring(basePath.length() + 1);
  59 + result.add(
  60 + "f['" + name + "'] = '" + processFile(f) + "';\n");
  61 + }
  62 + }
  63 + }
  64 +
  65 + return result;
  66 + }
  67 +
  68 + /**
  69 + *
  70 + * @param file
  71 + * @return
  72 + * @throws IOException
  73 + */
  74 + public static String processFile(File file) throws IOException
  75 + {
  76 + System.out.println("Processing " + file.getCanonicalPath() + "...");
  77 +
  78 + Deflater deflater = new Deflater(Deflater.DEFAULT_COMPRESSION, true);
  79 + byte[] inBytes = encodeURIComponent(
  80 + readInputStream(new FileInputStream(file)),
  81 + CHARSET_FOR_URL_ENCODING).getBytes("UTF-8");
  82 + deflater.setInput(inBytes);
  83 +
  84 + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
  85 + inBytes.length);
  86 + deflater.finish();
  87 + byte[] buffer = new byte[IO_BUFFER_SIZE];
  88 +
  89 + while (!deflater.finished())
  90 + {
  91 + int count = deflater.deflate(buffer); // returns the generated code... index
  92 + outputStream.write(buffer, 0, count);
  93 + }
  94 +
  95 + outputStream.close();
  96 +
  97 + return encodeToString(outputStream.toByteArray(), false);
  98 + }
  99 +
  100 + /**
  101 + *
  102 + * @param stream
  103 + * @return
  104 + * @throws IOException
  105 + */
  106 + public static String readInputStream(InputStream stream) throws IOException
  107 + {
  108 + BufferedReader reader = new BufferedReader(
  109 + new InputStreamReader(stream));
  110 + StringBuffer result = new StringBuffer();
  111 + String tmp = reader.readLine();
  112 +
  113 + while (tmp != null)
  114 + {
  115 + result.append(tmp.trim());
  116 + tmp = reader.readLine();
  117 + }
  118 +
  119 + reader.close();
  120 +
  121 + return result.toString();
  122 + }
  123 +
  124 + public static String encodeURIComponent(String s, String charset)
  125 + {
  126 + if (s == null)
  127 + {
  128 + return null;
  129 + }
  130 + else
  131 + {
  132 + String result;
  133 +
  134 + try
  135 + {
  136 + result = URLEncoder.encode(s, charset).replaceAll("\\+", "%20")
  137 + .replaceAll("\\%21", "!").replaceAll("\\%27", "'")
  138 + .replaceAll("\\%28", "(").replaceAll("\\%29", ")")
  139 + .replaceAll("\\%7E", "~");
  140 + }
  141 + catch (UnsupportedEncodingException e)
  142 + {
  143 + // This exception should never occur
  144 + result = s;
  145 + }
  146 +
  147 + return result;
  148 + }
  149 + }
  150 +
  151 + private static final char[] CA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  152 + .toCharArray();
  153 +
  154 + private static final int[] IA = new int[256];
  155 + static
  156 + {
  157 + Arrays.fill(IA, -1);
  158 + for (int i = 0, iS = CA.length; i < iS; i++)
  159 + IA[CA[i]] = i;
  160 + IA['='] = 0;
  161 + }
  162 +
  163 + // ****************************************************************************************
  164 + // * char[] version
  165 + // ****************************************************************************************
  166 +
  167 + /** Encodes a raw byte array into a BASE64 <code>char[]</code> representation i accordance with RFC 2045.
  168 + * @param sArr The bytes to convert. If <code>null</code> or length 0 an empty array will be returned.
  169 + * @param lineSep Optional "\r\n" after 76 characters, unless end of file.<br>
  170 + * No line separator will be in breach of RFC 2045 which specifies max 76 per line but will be a
  171 + * little faster.
  172 + * @return A BASE64 encoded array. Never <code>null</code>.
  173 + */
  174 + public final static char[] encodeToChar(byte[] sArr, boolean lineSep)
  175 + {
  176 + // Check special case
  177 + int sLen = sArr != null ? sArr.length : 0;
  178 + if (sLen == 0)
  179 + return new char[0];
  180 +
  181 + int eLen = (sLen / 3) * 3; // Length of even 24-bits.
  182 + int cCnt = ((sLen - 1) / 3 + 1) << 2; // Returned character count
  183 + int dLen = cCnt + (lineSep ? (cCnt - 1) / 76 << 1 : 0); // Length of returned array
  184 + char[] dArr = new char[dLen];
  185 +
  186 + // Encode even 24-bits
  187 + for (int s = 0, d = 0, cc = 0; s < eLen;)
  188 + {
  189 + // Copy next three bytes into lower 24 bits of int, paying attension to sign.
  190 + int i = (sArr[s++] & 0xff) << 16 | (sArr[s++] & 0xff) << 8
  191 + | (sArr[s++] & 0xff);
  192 +
  193 + // Encode the int into four chars
  194 + dArr[d++] = CA[(i >>> 18) & 0x3f];
  195 + dArr[d++] = CA[(i >>> 12) & 0x3f];
  196 + dArr[d++] = CA[(i >>> 6) & 0x3f];
  197 + dArr[d++] = CA[i & 0x3f];
  198 +
  199 + // Add optional line separator
  200 + if (lineSep && ++cc == 19 && d < dLen - 2)
  201 + {
  202 + dArr[d++] = '\r';
  203 + dArr[d++] = '\n';
  204 + cc = 0;
  205 + }
  206 + }
  207 +
  208 + // Pad and encode last bits if source isn't even 24 bits.
  209 + int left = sLen - eLen; // 0 - 2.
  210 + if (left > 0)
  211 + {
  212 + // Prepare the int
  213 + int i = ((sArr[eLen] & 0xff) << 10)
  214 + | (left == 2 ? ((sArr[sLen - 1] & 0xff) << 2) : 0);
  215 +
  216 + // Set last four chars
  217 + dArr[dLen - 4] = CA[i >> 12];
  218 + dArr[dLen - 3] = CA[(i >>> 6) & 0x3f];
  219 + dArr[dLen - 2] = left == 2 ? CA[i & 0x3f] : '=';
  220 + dArr[dLen - 1] = '=';
  221 + }
  222 + return dArr;
  223 + }
  224 +
  225 + // ****************************************************************************************
  226 + // * String version
  227 + // ****************************************************************************************
  228 +
  229 + /** Encodes a raw byte array into a BASE64 <code>String</code> representation i accordance with RFC 2045.
  230 + * @param sArr The bytes to convert. If <code>null</code> or length 0 an empty array will be returned.
  231 + * @param lineSep Optional "\r\n" after 76 characters, unless end of file.<br>
  232 + * No line separator will be in breach of RFC 2045 which specifies max 76 per line but will be a
  233 + * little faster.
  234 + * @return A BASE64 encoded array. Never <code>null</code>.
  235 + */
  236 + public final static String encodeToString(byte[] sArr, boolean lineSep)
  237 + {
  238 + // Reuse char[] since we can't create a String incrementally anyway and StringBuffer/Builder would be slower.
  239 + return new String(encodeToChar(sArr, lineSep));
  240 + }
  241 +
  242 + /**
  243 + * Main
  244 + */
  245 + public static void main(String[] args)
  246 + {
  247 + if (args.length < 2)
  248 + {
  249 + System.out.println("Usage: xml2js path file");
  250 + }
  251 + else
  252 + {
  253 + try
  254 + {
  255 + Xml2Js fw = new Xml2Js();
  256 +
  257 + // Generates result
  258 + StringBuffer result = new StringBuffer();
  259 + result.append("(function() {\nvar f = {};\n");
  260 +
  261 + List<String> files = fw
  262 + .walk(new File(new File(".").getCanonicalPath()
  263 + + File.separator + args[0]), null);
  264 + Iterator<String> it = files.iterator();
  265 +
  266 + while (it.hasNext())
  267 + {
  268 + result.append(it.next());
  269 + }
  270 +
  271 + result.append("\n");
  272 + result.append("var l = mxStencilRegistry.loadStencil;\n\n");
  273 + result.append(
  274 + "mxStencilRegistry.loadStencil = function(filename, fn)\n{\n");
  275 + result.append(" var t = f[filename.substring(STENCIL_PATH.length + 1)];\n");
  276 + result.append(" var s = null;\n");
  277 + result.append(" if (t != null) {\n");
  278 + result.append(" t = pako.inflateRaw(Uint8Array.from(atob(t), function (c) {\n");
  279 + result.append(" return c.charCodeAt(0);\n");
  280 + result.append(" }), {to: 'string'});\n");
  281 + result.append(" s = decodeURIComponent(t);\n");
  282 + result.append(" }\n");
  283 + result.append(" if (fn != null && s != null) {\n");
  284 + result.append(
  285 + " window.setTimeout(function(){fn(mxUtils.parseXml(s))}, 0);\n");
  286 + result.append(" } else {\n");
  287 + result.append(
  288 + " return (s != null) ? mxUtils.parseXml(s) : l.apply(this, arguments)\n");
  289 + result.append(" }\n");
  290 + result.append("};\n");
  291 + result.append("})();\n");
  292 +
  293 + FileWriter writer = new FileWriter(
  294 + new File(new File(".").getCanonicalPath()
  295 + + File.separator + args[1]));
  296 + writer.write(result.toString());
  297 + writer.flush();
  298 + writer.close();
  299 + }
  300 + catch (IOException ex)
  301 + {
  302 + ex.printStackTrace();
  303 + }
  304 + }
  305 + }
  306 +}
... ...
  1 +jscompiler=${basedir}/compiler.jar
  2 +src.dir=${basedir}/../../src/main/java
  3 +war.dir=${basedir}/../../src/main/webapp
  4 +grapheditor.dir=${war.dir}/js/grapheditor
  5 +javac.dir=${war.dir}/WEB-INF/classes
  6 +build.dir=${basedir}/../../build
  7 +war.name=draw.war
... ...
  1 +<?xml version="1.0"?>
  2 +<project basedir="." default="all">
  3 +
  4 + <property file="build.properties.local" />
  5 + <property file="build.properties" />
  6 + <taskdef name="jscomp" classname="com.google.javascript.jscomp.ant.CompileTask" classpath="${jscompiler}" />
  7 +
  8 + <target name="merge">
  9 + <concat destfile="${basedir}/../../build/shapes.js" fixlastline="yes" append="no">
  10 + <fileset dir="${war.dir}/shapes" includes="**/*.js"/>
  11 + <fileset dir="${war.dir}/stencils" includes="**/*.js"/>
  12 + </concat>
  13 +
  14 + <java fork="false" classname="Xml2Js" classpath=".">
  15 + <arg value="../../src/main/webapp/stencils"/>
  16 + <arg value="../../src/main/webapp/js/stencils.min.js"/>
  17 + </java>
  18 +
  19 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${war.dir}/js/shapes-14-6-5.min.js">
  20 + <sources dir="${basedir}/../../build">
  21 + <file name="shapes.js" />
  22 + </sources>
  23 + </jscomp>
  24 +
  25 + <tstamp>
  26 + <format property="time.stamp" pattern="MM/dd/yyyy hh:mm aa" unit="hour"/>
  27 + </tstamp>
  28 +
  29 + <delete dir="${basedir}/../../build"/>
  30 + </target>
  31 +
  32 + <target name="app" depends="merge">
  33 + <delete file="${basedir}/.tmp0.js"/>
  34 + <echo file="${basedir}/.tmp0.js">
  35 + window.PROXY_URL = window.PROXY_URL || 'https://viewer.diagrams.net/proxy';
  36 + window.SHAPES_PATH = window.SHAPES_PATH || 'https://viewer.diagrams.net/shapes';
  37 + window.STENCIL_PATH = window.STENCIL_PATH || 'https://viewer.diagrams.net/stencils';
  38 + window.GRAPH_IMAGE_PATH = window.GRAPH_IMAGE_PATH || 'https://viewer.diagrams.net/img';
  39 + window.mxImageBasePath = window.mxImageBasePath || 'https://viewer.diagrams.net/mxgraph/images';
  40 + window.mxBasePath = window.mxBasePath || 'https://viewer.diagrams.net/mxgraph/';
  41 + window.mxLoadStylesheets = window.mxLoadStylesheets || false;
  42 + </echo>
  43 +
  44 + <delete file="${basedir}/.tmp1.js"/>
  45 + <copy file="${war.dir}/styles/default.xml" tofile="${basedir}/.tmp1.xml" overwrite="true"/>
  46 + <replaceregexp file="${basedir}/.tmp1.xml" match="${line.separator}" flags="g" replace=""/>
  47 + <replaceregexp file="${basedir}/.tmp1.xml" match="\t" flags="g" replace=""/>
  48 + <replaceregexp file="${basedir}/.tmp1.xml" match="'" flags="g" replace="\\\\'" byline="true"/>
  49 +
  50 + <delete file="${basedir}/Graph-Stylesheet.js"/>
  51 + <echo file="${basedir}/Graph-Stylesheet.js">Graph.prototype.defaultThemes['default-style2'] = mxUtils.parseXml(`</echo>
  52 + <concat destfile="${basedir}/Graph-Stylesheet.js" fixlastline="no" append="true">
  53 + <filelist dir="${basedir}" files=".tmp1.xml"/>
  54 + </concat>
  55 + <echo file="${basedir}/Graph-Stylesheet.js" append="true">`).documentElement;</echo>
  56 + <echo file="${basedir}/Graph-Stylesheet.js" append="true">Graph.prototype.defaultThemes['darkTheme'] = Graph.prototype.defaultThemes['default-style2'];</echo>
  57 +
  58 + <delete file="${basedir}/.tmp2.xml"/>
  59 + <copy file="${war.dir}/resources/dia.txt" tofile="${basedir}/.tmp2.xml" overwrite="true"/>
  60 + <replaceregexp file="${basedir}/.tmp2.xml" match="${line.separator}" flags="g" replace="\\\\n"/>
  61 + <replaceregexp file="${basedir}/.tmp2.xml" match="'" flags="g" replace="\\\\'" byline="true"/>
  62 +
  63 + <delete file="${basedir}/Graph-Resources.js"/>
  64 + <echo file="${basedir}/Graph-Resources.js">mxResources.parse(`</echo>
  65 + <concat destfile="${basedir}/Graph-Resources.js" fixlastline="no" append="true">
  66 + <filelist dir="${basedir}" files=".tmp2.xml"/>
  67 + </concat>
  68 + <echo file="${basedir}/Graph-Resources.js" append="true">`);</echo>
  69 +
  70 + <jscomp compilationLevel="simple" forceRecompile="true" debug="false" output="${basedir}/grapheditor.min.js">
  71 + <sources dir="${grapheditor.dir}">
  72 + <file name="Editor.js" />
  73 + <file name="EditorUi.js" />
  74 + <file name="Sidebar.js" />
  75 + <file name="Graph.js" />
  76 + <file name="Format.js" />
  77 + <file name="Shapes.js" />
  78 + <file name="Actions.js" />
  79 + <file name="Menus.js" />
  80 + <file name="Toolbar.js" />
  81 + <file name="Dialogs.js" />
  82 + </sources>
  83 + </jscomp>
  84 +
  85 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${basedir}/sidebar.min.js">
  86 + <sources dir="${war.dir}/js/diagramly/sidebar">
  87 + <file name="Sidebar.js" />
  88 + <file name="Sidebar-ActiveDirectory.js" />
  89 + <file name="Sidebar-Advanced.js" />
  90 + <file name="Sidebar-AlliedTelesis.js" />
  91 + <file name="Sidebar-Android.js" />
  92 + <file name="Sidebar-ArchiMate.js" />
  93 + <file name="Sidebar-ArchiMate3.js" />
  94 + <file name="Sidebar-Arrows2.js" />
  95 + <file name="Sidebar-Atlassian.js" />
  96 + <file name="Sidebar-AWS.js" />
  97 + <file name="Sidebar-AWS3.js" />
  98 + <file name="Sidebar-AWS3D.js" />
  99 + <file name="Sidebar-AWS4.js" />
  100 + <file name="Sidebar-AWS4b.js" />
  101 + <file name="Sidebar-Azure.js" />
  102 + <file name="Sidebar-Azure2.js" />
  103 + <file name="Sidebar-Basic.js" />
  104 + <file name="Sidebar-Bootstrap.js" />
  105 + <file name="Sidebar-BPMN.js" />
  106 + <file name="Sidebar-C4.js" />
  107 + <file name="Sidebar-Cabinet.js" />
  108 + <file name="Sidebar-Cisco.js" />
  109 + <file name="Sidebar-Cisco19.js" />
  110 + <file name="Sidebar-CiscoSafe.js" />
  111 + <file name="Sidebar-Citrix.js" />
  112 + <file name="Sidebar-Cumulus.js" />
  113 + <file name="Sidebar-DFD.js" />
  114 + <file name="Sidebar-EIP.js" />
  115 + <file name="Sidebar-Electrical.js" />
  116 + <file name="Sidebar-ER.js" />
  117 + <file name="Sidebar-Floorplan.js" />
  118 + <file name="Sidebar-Flowchart.js" />
  119 + <file name="Sidebar-FluidPower.js" />
  120 + <file name="Sidebar-GCP.js" />
  121 + <file name="Sidebar-GCP2.js" />
  122 + <file name="Sidebar-GCPIcons.js" />
  123 + <file name="Sidebar-Gmdl.js" />
  124 + <file name="Sidebar-IBM.js" />
  125 + <file name="Sidebar-Infographic.js" />
  126 + <file name="Sidebar-Ios.js" />
  127 + <file name="Sidebar-Ios7.js" />
  128 + <file name="Sidebar-Kubernetes.js" />
  129 + <file name="Sidebar-LeanMapping.js" />
  130 + <file name="Sidebar-Mockup.js" />
  131 + <file name="Sidebar-MSCAE.js" />
  132 + <file name="Sidebar-Network.js" />
  133 + <file name="Sidebar-Office.js" />
  134 + <file name="Sidebar-PID.js" />
  135 + <file name="Sidebar-Rack.js" />
  136 + <file name="Sidebar-Signs.js" />
  137 + <file name="Sidebar-Sitemap.js" />
  138 + <file name="Sidebar-Sysml.js" />
  139 + <file name="Sidebar-ThreatModeling.js" />
  140 + <file name="Sidebar-UML25.js" />
  141 + <file name="Sidebar-Veeam.js" />
  142 + <file name="Sidebar-Veeam2.js" />
  143 + <file name="Sidebar-VVD.js" />
  144 + <file name="Sidebar-WebIcons.js" />
  145 + </sources>
  146 + </jscomp>
  147 +
  148 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${basedir}/client.min.js">
  149 + <sources dir="${war.dir}/js/deflate">
  150 + <file name="base64.js" />
  151 + </sources>
  152 +
  153 + <sources dir="${war.dir}/js/diagramly">
  154 + <file name="Init.js" />
  155 + </sources>
  156 +
  157 + <sources dir="${grapheditor.dir}">
  158 + <file name="Init.js" />
  159 + </sources>
  160 +
  161 + <sources dir="${war.dir}/mxgraph">
  162 + <file name="mxClient.js" />
  163 + </sources>
  164 +
  165 + <sources dir="${war.dir}/js/jscolor">
  166 + <file name="jscolor.js" />
  167 + </sources>
  168 + </jscomp>
  169 +
  170 + <jscomp compilationLevel="simple" forceRecompile="true" debug="false" output="${basedir}/.tmp0.min.js">
  171 + <sources dir="${basedir}">
  172 + <file name=".tmp0.js"/>
  173 + </sources>
  174 + </jscomp>
  175 +
  176 + <jscomp compilationLevel="simple" forceRecompile="true" debug="false" output="${basedir}/.tmp1.js">
  177 + <sources dir="${grapheditor.dir}">
  178 + <file name="Editor.js" />
  179 + <file name="EditorUi.js" />
  180 + <file name="Graph.js" />
  181 + <file name="Shapes.js" />
  182 + <file name="Actions.js" />
  183 + </sources>
  184 +
  185 + <sources dir="${war.dir}/js/diagramly">
  186 + <file name="DrawioFile.js" />
  187 + <file name="LocalFile.js" />
  188 + <file name="Editor.js" />
  189 + <file name="EditorUi.js" />
  190 + <file name="Pages.js" />
  191 + <file name="Trees.js" />
  192 + <file name="Minimal.js" />
  193 + <file name="DrawioComment.js" />
  194 + <file name="DrawioUser.js" />
  195 + </sources>
  196 +
  197 + <sources dir="${basedir}">
  198 + <file name="Graph-Resources.js" />
  199 + <file name="Graph-Stylesheet.js" />
  200 + </sources>
  201 +
  202 + <sources dir="${war.dir}/js/diagramly">
  203 + <file name="GraphViewer.js" />
  204 + </sources>
  205 + </jscomp>
  206 +
  207 + <concat destfile="${basedir}/base-viewer.min.js" fixlastline="yes" append="no">
  208 + <filelist dir="${basedir}" files=".tmp0.min.js"/>
  209 + <filelist dir="${war.dir}/js/spin" files="spin.min.js"/>
  210 + <filelist dir="${war.dir}/js/sanitizer" files="sanitizer.min.js"/>
  211 + <filelist dir="${war.dir}/js/deflate" files="pako.min.js"/>
  212 + <filelist dir="${war.dir}/js/rough" files="rough.min.js"/>
  213 + <filelist dir="${basedir}" files="client.min.js,.tmp1.js"/>
  214 + </concat>
  215 +
  216 + <loadfile property="version" srcFile="../../VERSION"/>
  217 + <replace file="${basedir}/base-viewer.min.js" token="@DRAWIO-VERSION@" value="${version}"/>
  218 +
  219 + <echo file="${basedir}/.tmp2.js">
  220 + (function()
  221 + {
  222 + Editor.initMath();
  223 + GraphViewer.initCss();
  224 +
  225 + if (window.onDrawioViewerLoad != null)
  226 + {
  227 + window.onDrawioViewerLoad();
  228 + }
  229 + else
  230 + {
  231 + GraphViewer.processElements();
  232 + }
  233 + })();
  234 + </echo>
  235 +
  236 + <jscomp compilationLevel="simple" forceRecompile="true" debug="false" output="${basedir}/.tmp2.min.js">
  237 + <sources dir="${basedir}">
  238 + <file name=".tmp2.js"/>
  239 + </sources>
  240 + </jscomp>
  241 +
  242 + <concat destfile="${war.dir}/js/viewer.min.js" fixlastline="yes" append="no">
  243 + <filelist dir="${basedir}" files="base-viewer.min.js,.tmp2.min.js"/>
  244 + </concat>
  245 +
  246 + <!-- Disables eval for JS (uses shapes-14-6-5.min.js) and registers PWA -->
  247 + <echo file="${basedir}/.tmp3.js">
  248 + mxStencilRegistry.allowEval = false;
  249 +
  250 + (function()
  251 + {
  252 + try
  253 + {
  254 + if (Editor.enableServiceWorker)
  255 + {
  256 + navigator.serviceWorker.register('/service-worker.js');
  257 + }
  258 + }
  259 + catch (e)
  260 + {
  261 + if (window.console != null)
  262 + {
  263 + console.error(e);
  264 + }
  265 + }
  266 + })();
  267 + </echo>
  268 +
  269 + <concat destfile="${war.dir}/js/viewer-static.min.js" fixlastline="yes" append="no">
  270 + <filelist dir="${basedir}" files="base-viewer.min.js"/>
  271 + <filelist dir="${war.dir}/js" files="shapes-14-6-5.min.js"/>
  272 + <filelist dir="${basedir}" files=".tmp3.js,.tmp2.min.js"/>
  273 + </concat>
  274 +
  275 + <delete file="${war.dir}/js/extensions.min.js"/>
  276 + <delete file="${basedir}/.tmp0.js"/>
  277 + <delete file="${basedir}/.tmp0.min.js"/>
  278 + <delete file="${basedir}/.tmp1.js"/>
  279 + <delete file="${basedir}/.tmp2.js"/>
  280 + <delete file="${basedir}/.tmp2.min.js"/>
  281 + <delete file="${basedir}/.tmp3.js"/>
  282 + <delete file="${basedir}/.tmp1.xml"/>
  283 + <delete file="${basedir}/.tmp2.xml"/>
  284 +
  285 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${basedir}/.tmp1.js">
  286 + <sources dir="${war.dir}/js/diagramly">
  287 + <file name="DrawioFile.js" />
  288 + <file name="LocalFile.js" />
  289 + <file name="LocalLibrary.js" />
  290 + <file name="StorageFile.js" />
  291 + <file name="StorageLibrary.js" />
  292 + <file name="RemoteFile.js" />
  293 + <file name="RemoteLibrary.js" />
  294 + <file name="UrlLibrary.js" />
  295 + <file name="EmbedFile.js" />
  296 + <file name="Dialogs.js" />
  297 + <file name="Editor.js" />
  298 + <file name="EditorUi.js" />
  299 + <file name="DiffSync.js" />
  300 + <file name="Settings.js" />
  301 + <file name="DrawioFileSync.js" />
  302 + <file name="App.js" />
  303 + <file name="Menus.js" />
  304 + <file name="Pages.js" />
  305 + <file name="Trees.js" />
  306 + <file name="Minimal.js" />
  307 + <file name="DistanceGuides.js" />
  308 + <file name="mxRuler.js" />
  309 + <file name="mxFreehand.js" />
  310 + <file name="DrawioUser.js" />
  311 + <file name="DrawioComment.js" />
  312 + </sources>
  313 +
  314 + <sources dir="${basedir}">
  315 + <file name="Graph-Stylesheet.js" />
  316 + </sources>
  317 + </jscomp>
  318 +
  319 + <concat destfile="${basedir}/base.min.js" fixlastline="yes" append="no">
  320 + <filelist dir="${war.dir}/js/spin" files="spin.min.js"/>
  321 + <filelist dir="${war.dir}/js/sanitizer" files="sanitizer.min.js"/>
  322 + <filelist dir="${war.dir}/js/cryptojs" files="aes.min.js"/>
  323 + <filelist dir="${war.dir}/js/deflate" files="pako.min.js"/>
  324 + <filelist dir="${war.dir}/js/rough" files="rough.min.js"/>
  325 + <filelist dir="${war.dir}/js/freehand" files="perfect-freehand.js"/>
  326 + <filelist dir="${basedir}" files="client.min.js,grapheditor.min.js,sidebar.min.js,.tmp1.js"/>
  327 + </concat>
  328 +
  329 + <replace file="${basedir}/base.min.js" token="@DRAWIO-VERSION@" value="${version}"/>
  330 +
  331 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${war.dir}/js/extensions.min.js">
  332 + <sources dir="${war.dir}/js/diagramly">
  333 + <file name="Extensions.js" />
  334 + </sources>
  335 + <sources dir="${war.dir}/js/diagramly/vsdx">
  336 + <file name="VsdxExport.js" />
  337 + <file name="mxVsdxCanvas2D.js" />
  338 + <file name="bmpDecoder.js" />
  339 + <file name="importer.js" />
  340 + </sources>
  341 + <sources dir="${war.dir}/js/diagramly/graphml">
  342 + <file name="mxGraphMlCodec.js" />
  343 + </sources>
  344 + </jscomp>
  345 +
  346 + <delete file="${war.dir}/js/orgchart.min.js"/>
  347 + <concat destfile="${war.dir}/js/orgchart.min.js" fixlastline="yes" append="no">
  348 + <filelist dir="${war.dir}/js/orgchart" files="bridge.min.js,bridge.collections.min.js,OrgChart.Layout.min.js"/>
  349 + </concat>
  350 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${basedir}/.tmp3.js">
  351 + <sources dir="${war.dir}/js/orgchart">
  352 + <file name="mxOrgChartLayout.js" />
  353 + </sources>
  354 + </jscomp>
  355 + <concat destfile="${war.dir}/js/orgchart.min.js" fixlastline="yes" append="yes">
  356 + <filelist dir="${basedir}" files=".tmp3.js"/>
  357 + </concat>
  358 + <delete file="${basedir}/.tmp3.js"/>
  359 +
  360 + <concat destfile="${war.dir}/js/extensions.min.js" fixlastline="yes" append="yes">
  361 + <fileset file="${war.dir}/js/jszip/jszip.min.js"/>
  362 + <fileset file="${war.dir}/js/mermaid/mermaid.min.js"/>
  363 + <fileset file="${war.dir}/js/orgchart.min.js"/>
  364 + </concat>
  365 +
  366 + <delete file="${basedir}/.tmp1.js"/>
  367 +
  368 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${basedir}/.tmp1.js">
  369 + <sources dir="${war.dir}/js/diagramly">
  370 + <file name="DrawioFile.js" />
  371 + <file name="LocalFile.js" />
  372 + <file name="LocalLibrary.js" />
  373 + <file name="StorageFile.js" />
  374 + <file name="StorageLibrary.js" />
  375 + <file name="RemoteFile.js" />
  376 + <file name="RemoteLibrary.js" />
  377 + <file name="UrlLibrary.js" />
  378 + <file name="EmbedFile.js" />
  379 + <file name="Dialogs.js" />
  380 + <file name="Editor.js" />
  381 + <file name="EditorUi.js" />
  382 + <file name="DiffSync.js" />
  383 + <file name="Settings.js" />
  384 + <file name="DrawioFileSync.js" />
  385 + </sources>
  386 +
  387 + <sources dir="${basedir}">
  388 + <file name="Graph-Stylesheet.js" />
  389 + </sources>
  390 +
  391 + <sources dir="${war.dir}/js/diagramly/util">
  392 + <file name="mxAsyncCanvas.js" />
  393 + <file name="mxJsCanvas.js" />
  394 + </sources>
  395 +
  396 + <sources dir="${war.dir}/js/diagramly">
  397 + <file name="DrawioClient.js" />
  398 + <file name="DrawioUser.js" />
  399 + <file name="DriveFile.js" />
  400 + <file name="DriveLibrary.js" />
  401 + <file name="DriveClient.js" />
  402 + <file name="DropboxFile.js" />
  403 + <file name="DropboxLibrary.js" />
  404 + <file name="DropboxClient.js" />
  405 + <file name="OneDriveFile.js" />
  406 + <file name="OneDriveLibrary.js" />
  407 + <file name="OneDriveClient.js" />
  408 + <file name="GitHubFile.js" />
  409 + <file name="GitHubLibrary.js" />
  410 + <file name="GitHubClient.js" />
  411 + <file name="TrelloFile.js" />
  412 + <file name="TrelloLibrary.js" />
  413 + <file name="TrelloClient.js" />
  414 + <file name="GitLabFile.js" />
  415 + <file name="GitLabLibrary.js" />
  416 + <file name="GitLabClient.js" />
  417 + <file name="DrawioComment.js" />
  418 + <file name="DriveComment.js" />
  419 + </sources>
  420 +
  421 + <sources dir="${war.dir}/js/onedrive">
  422 + <file name="mxODPicker.js" />
  423 + </sources>
  424 +
  425 + <sources dir="${war.dir}/js/diagramly">
  426 + <file name="App.js" />
  427 + <file name="Menus.js" />
  428 + <file name="Pages.js" />
  429 + <file name="Trees.js" />
  430 + <file name="Minimal.js" />
  431 + <file name="DistanceGuides.js" />
  432 + <file name="mxRuler.js" />
  433 + <file name="mxFreehand.js" />
  434 + <file name="P2PCollab.js" />
  435 + </sources>
  436 + </jscomp>
  437 +
  438 + <concat destfile="${war.dir}/js/app.min.js" fixlastline="yes" append="no">
  439 + <filelist dir="${war.dir}/js/spin" files="spin.min.js"/>
  440 + <filelist dir="${war.dir}/js/sanitizer" files="sanitizer.min.js"/>
  441 + <filelist dir="${war.dir}/js/cryptojs" files="aes.min.js"/>
  442 + <filelist dir="${war.dir}/js/deflate" files="pako.min.js"/>
  443 + <filelist dir="${war.dir}/js/rough" files="rough.min.js"/>
  444 + <filelist dir="${war.dir}/js/freehand" files="perfect-freehand.js"/>
  445 + <filelist dir="${basedir}" files="client.min.js,grapheditor.min.js,sidebar.min.js,.tmp1.js"/>
  446 + </concat>
  447 +
  448 + <replace file="${war.dir}/js/app.min.js" token="@DRAWIO-VERSION@" value="${version}"/>
  449 +
  450 + <delete file="${basedir}/Graph-Stylesheet.js"/>
  451 + <delete file="${basedir}/Graph-Resources.js"/>
  452 + <delete file="${basedir}/grapheditor.min.js"/>
  453 + <delete file="${basedir}/sidebar.min.js"/>
  454 + <delete file="${basedir}/client.min.js"/>
  455 + <delete file="${basedir}/.tmp1.js"/>
  456 + </target>
  457 +
  458 + <target name="atlas" depends="app">
  459 + <copy file="${basedir}/base-viewer.min.js" tofile="${war.dir}/js/atlas-viewer.min.js" overwrite="true"/>
  460 +
  461 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${basedir}/.tmp0.js">
  462 + <sources dir="${war.dir}/connect/common/js">
  463 + <file name="mxReader.js" />
  464 + </sources>
  465 + </jscomp>
  466 +
  467 + <concat destfile="${war.dir}/js/atlas.min.js" fixlastline="yes" append="no">
  468 + <file name="${basedir}/base.min.js" />
  469 + <file name="${war.dir}/js/extensions.min.js" />
  470 + <file name="${basedir}/.tmp0.js" />
  471 + </concat>
  472 +
  473 + <delete file="${basedir}/.tmp0.js"/>
  474 + </target>
  475 +
  476 + <target name="integrate" depends="atlas">
  477 + <copy file="${war.dir}/js/atlas.min.js" tofile="${war.dir}/js/integrate.min.js" overwrite="true"/>
  478 +
  479 + <jscomp compilationLevel="simple" debug="false" forceRecompile="true" output="${basedir}/.tmp0.js">
  480 + <sources dir="${basedir}/../integrate">
  481 + <file name="Integrate.js" />
  482 + </sources>
  483 + </jscomp>
  484 +
  485 + <concat destfile="${war.dir}/js/integrate.min.js" fixlastline="yes" append="yes">
  486 + <file name="${war.dir}/js/shapes-14-6-5.min.js" />
  487 + <file name="${war.dir}/js/stencils.min.js" />
  488 + <file name="${basedir}/.tmp0.js" />
  489 + </concat>
  490 +
  491 + <delete file="${basedir}/.tmp0.js"/>
  492 + </target>
  493 +
  494 + <target name="all" depends="app, integrate">
  495 + <delete file="${war.dir}/js/atlas-viewer.min.js"/>
  496 + <delete file="${war.dir}/js/atlas.min.js"/>
  497 + </target>
  498 +
  499 + <!-- ================== Stand-alone war creation ============================= -->
  500 +
  501 + <path id="javac.class.path">
  502 + <fileset dir="${war.dir}/WEB-INF/lib" />
  503 + </path>
  504 +
  505 + <target name="javac" description="Java compilation">
  506 + <mkdir dir="${javac.dir}"/>
  507 + <javac includeantruntime="false" srcdir="${src.dir}" excludes="**/EmbedServlet2.java" destdir="${javac.dir}">
  508 + <classpath refid="javac.class.path" />
  509 + </javac>
  510 + <copy todir="${javac.dir}" file="${src.dir}/log4j.properties" />
  511 + </target>
  512 +
  513 + <target name="clean" description="Cleans build directories">
  514 + <delete dir="${javac.dir}"/>
  515 + <delete dir="${build.dir}"/>
  516 + <delete file="${basedir}/base.min.js"/>
  517 + <delete file="${basedir}/base-viewer.min.js"/>
  518 + </target>
  519 +
  520 + <target name="war" depends="app, javac" description="Create the stand-alone war file">
  521 + <zip destfile="${build.dir}/${war.name}" basedir="${war.dir}" >
  522 + </zip>
  523 + </target>
  524 +
  525 +</project>
... ...
No preview for this file type