@armyc2.c5isr.renderer/mil-sym-ts-web 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +57 -0
  3. package/buildNode.bat +2 -0
  4. package/buildWeb.bat +2 -0
  5. package/dist/C5Ren.d.ts +6970 -0
  6. package/dist/C5Ren.js +2 -0
  7. package/dist/C5Ren.js.map +1 -0
  8. package/dist/LICENSE +201 -0
  9. package/dist/README.md +57 -0
  10. package/dist/armyc2.c5isr.renderer-mil-sym-ts-web-2.2.0.tgz +0 -0
  11. package/dist/manifest.json +4 -0
  12. package/dist/package.json +16 -0
  13. package/index.ts +169 -0
  14. package/package.bak +50 -0
  15. package/package.json +40 -0
  16. package/package.node.json +43 -0
  17. package/package.pack.json +19 -0
  18. package/package.packWeb.json +16 -0
  19. package/package.web.json +40 -0
  20. package/src/main/ts/android/graphics/Bitmap.ts +7 -0
  21. package/src/main/ts/android/graphics/Paint.ts +26 -0
  22. package/src/main/ts/android/graphics/Path.ts +78 -0
  23. package/src/main/ts/android/graphics/PointF.ts +14 -0
  24. package/src/main/ts/android/graphics/Rect.ts +18 -0
  25. package/src/main/ts/android/graphics/RectF.ts +50 -0
  26. package/src/main/ts/android/graphics/Region.ts +36 -0
  27. package/src/main/ts/android/graphics/Typeface.ts +11 -0
  28. package/src/main/ts/armyc2/c5isr/JavaLineArray/BasicShapes.ts +99 -0
  29. package/src/main/ts/armyc2/c5isr/JavaLineArray/CChannelPoints2.ts +34 -0
  30. package/src/main/ts/armyc2/c5isr/JavaLineArray/CELineArray.ts +193 -0
  31. package/src/main/ts/armyc2/c5isr/JavaLineArray/Channels.ts +2971 -0
  32. package/src/main/ts/armyc2/c5isr/JavaLineArray/DISMSupport.ts +4008 -0
  33. package/src/main/ts/armyc2/c5isr/JavaLineArray/POINT2.ts +93 -0
  34. package/src/main/ts/armyc2/c5isr/JavaLineArray/Shape2.ts +89 -0
  35. package/src/main/ts/armyc2/c5isr/JavaLineArray/TacticalLines.ts +515 -0
  36. package/src/main/ts/armyc2/c5isr/JavaLineArray/arraysupport.ts +5403 -0
  37. package/src/main/ts/armyc2/c5isr/JavaLineArray/countsupport.ts +1084 -0
  38. package/src/main/ts/armyc2/c5isr/JavaLineArray/flot.ts +2173 -0
  39. package/src/main/ts/armyc2/c5isr/JavaLineArray/lineutility.ts +4934 -0
  40. package/src/main/ts/armyc2/c5isr/JavaLineArray/ref.ts +7 -0
  41. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/Modifier2.ts +5601 -0
  42. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/P1.ts +14 -0
  43. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/TGLight.ts +648 -0
  44. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/clsChannelUtility.ts +647 -0
  45. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/clsMETOC.ts +2994 -0
  46. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/clsUtility.ts +2663 -0
  47. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/mdlGeodesic.ts +669 -0
  48. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsClipPolygon2.ts +971 -0
  49. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsClipQuad.ts +871 -0
  50. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsRenderer.ts +3507 -0
  51. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsRenderer2.ts +500 -0
  52. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsUtility.ts +1089 -0
  53. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsUtilityCPOF.ts +2656 -0
  54. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsUtilityGE.ts +1419 -0
  55. package/src/main/ts/armyc2/c5isr/data/genc.json +1407 -0
  56. package/src/main/ts/armyc2/c5isr/data/msd.json +17311 -0
  57. package/src/main/ts/armyc2/c5isr/data/mse.json +18500 -0
  58. package/src/main/ts/armyc2/c5isr/data/svgd.json +31214 -0
  59. package/src/main/ts/armyc2/c5isr/data/svge.json +30558 -0
  60. package/src/main/ts/armyc2/c5isr/graphics2d/AffineTransform.ts +10 -0
  61. package/src/main/ts/armyc2/c5isr/graphics2d/Area.ts +437 -0
  62. package/src/main/ts/armyc2/c5isr/graphics2d/BasicStroke.ts +429 -0
  63. package/src/main/ts/armyc2/c5isr/graphics2d/BasicTypes.ts +7 -0
  64. package/src/main/ts/armyc2/c5isr/graphics2d/BufferedImage.ts +35 -0
  65. package/src/main/ts/armyc2/c5isr/graphics2d/Font.ts +111 -0
  66. package/src/main/ts/armyc2/c5isr/graphics2d/FontMetrics.ts +29 -0
  67. package/src/main/ts/armyc2/c5isr/graphics2d/FontRenderContext.ts +18 -0
  68. package/src/main/ts/armyc2/c5isr/graphics2d/GeneralPath.ts +211 -0
  69. package/src/main/ts/armyc2/c5isr/graphics2d/Graphics2D.ts +80 -0
  70. package/src/main/ts/armyc2/c5isr/graphics2d/IPathIterator.ts +33 -0
  71. package/src/main/ts/armyc2/c5isr/graphics2d/ImageIO.ts +16 -0
  72. package/src/main/ts/armyc2/c5isr/graphics2d/Line2D.ts +726 -0
  73. package/src/main/ts/armyc2/c5isr/graphics2d/PathIterator.ts +141 -0
  74. package/src/main/ts/armyc2/c5isr/graphics2d/Point.ts +112 -0
  75. package/src/main/ts/armyc2/c5isr/graphics2d/Point2D.ts +261 -0
  76. package/src/main/ts/armyc2/c5isr/graphics2d/Polygon.ts +391 -0
  77. package/src/main/ts/armyc2/c5isr/graphics2d/Rectangle.ts +567 -0
  78. package/src/main/ts/armyc2/c5isr/graphics2d/Rectangle2D.ts +445 -0
  79. package/src/main/ts/armyc2/c5isr/graphics2d/Shape.ts +31 -0
  80. package/src/main/ts/armyc2/c5isr/graphics2d/Stroke.ts +18 -0
  81. package/src/main/ts/armyc2/c5isr/graphics2d/TextLayout.ts +45 -0
  82. package/src/main/ts/armyc2/c5isr/graphics2d/TexturePaint.ts +25 -0
  83. package/src/main/ts/armyc2/c5isr/renderer/IIconRenderer.ts +15 -0
  84. package/src/main/ts/armyc2/c5isr/renderer/IconRenderer.ts +22 -0
  85. package/src/main/ts/armyc2/c5isr/renderer/MilStdIconRenderer.ts +269 -0
  86. package/src/main/ts/armyc2/c5isr/renderer/ModifierRenderer.ts +9882 -0
  87. package/src/main/ts/armyc2/c5isr/renderer/PatternFillRenderer.ts +146 -0
  88. package/src/main/ts/armyc2/c5isr/renderer/SinglePointSVGRenderer.ts +1265 -0
  89. package/src/main/ts/armyc2/c5isr/renderer/shapes/arc.ts +64 -0
  90. package/src/main/ts/armyc2/c5isr/renderer/shapes/bcurve.ts +95 -0
  91. package/src/main/ts/armyc2/c5isr/renderer/shapes/ellipse.ts +93 -0
  92. package/src/main/ts/armyc2/c5isr/renderer/shapes/line.ts +114 -0
  93. package/src/main/ts/armyc2/c5isr/renderer/shapes/path.ts +555 -0
  94. package/src/main/ts/armyc2/c5isr/renderer/shapes/pathiterator.ts +62 -0
  95. package/src/main/ts/armyc2/c5isr/renderer/shapes/point.ts +120 -0
  96. package/src/main/ts/armyc2/c5isr/renderer/shapes/rectangle.ts +431 -0
  97. package/src/main/ts/armyc2/c5isr/renderer/shapes/roundedrectangle.ts +99 -0
  98. package/src/main/ts/armyc2/c5isr/renderer/shapes/types.ts +25 -0
  99. package/src/main/ts/armyc2/c5isr/renderer/shapes/utilities.ts +203 -0
  100. package/src/main/ts/armyc2/c5isr/renderer/utilities/AffiliationColors.ts +104 -0
  101. package/src/main/ts/armyc2/c5isr/renderer/utilities/Color.ts +481 -0
  102. package/src/main/ts/armyc2/c5isr/renderer/utilities/DistanceUnit.ts +40 -0
  103. package/src/main/ts/armyc2/c5isr/renderer/utilities/DrawRules.ts +1323 -0
  104. package/src/main/ts/armyc2/c5isr/renderer/utilities/EntityCode.ts +51 -0
  105. package/src/main/ts/armyc2/c5isr/renderer/utilities/ErrorLogger.ts +736 -0
  106. package/src/main/ts/armyc2/c5isr/renderer/utilities/GENCLookup.ts +106 -0
  107. package/src/main/ts/armyc2/c5isr/renderer/utilities/GeoPixelConversion3D.ts +84 -0
  108. package/src/main/ts/armyc2/c5isr/renderer/utilities/IMultiPointRenderer.ts +87 -0
  109. package/src/main/ts/armyc2/c5isr/renderer/utilities/IPointConversion.ts +34 -0
  110. package/src/main/ts/armyc2/c5isr/renderer/utilities/ImageInfo.ts +324 -0
  111. package/src/main/ts/armyc2/c5isr/renderer/utilities/LRUCache.ts +127 -0
  112. package/src/main/ts/armyc2/c5isr/renderer/utilities/LRUEntry.ts +18 -0
  113. package/src/main/ts/armyc2/c5isr/renderer/utilities/LogLevel.ts +111 -0
  114. package/src/main/ts/armyc2/c5isr/renderer/utilities/MODrawRules.ts +219 -0
  115. package/src/main/ts/armyc2/c5isr/renderer/utilities/MSInfo.ts +1008 -0
  116. package/src/main/ts/armyc2/c5isr/renderer/utilities/MSLookup.ts +882 -0
  117. package/src/main/ts/armyc2/c5isr/renderer/utilities/MilStdAttributes.ts +380 -0
  118. package/src/main/ts/armyc2/c5isr/renderer/utilities/MilStdSymbol.ts +797 -0
  119. package/src/main/ts/armyc2/c5isr/renderer/utilities/Modifiers.ts +1699 -0
  120. package/src/main/ts/armyc2/c5isr/renderer/utilities/PointConversion.ts +178 -0
  121. package/src/main/ts/armyc2/c5isr/renderer/utilities/PointConversionDummy.ts +45 -0
  122. package/src/main/ts/armyc2/c5isr/renderer/utilities/PointConverter3D.ts +126 -0
  123. package/src/main/ts/armyc2/c5isr/renderer/utilities/RectUtilities.ts +118 -0
  124. package/src/main/ts/armyc2/c5isr/renderer/utilities/RendererException.ts +11 -0
  125. package/src/main/ts/armyc2/c5isr/renderer/utilities/RendererSettings.ts +1201 -0
  126. package/src/main/ts/armyc2/c5isr/renderer/utilities/RendererUtilities.ts +591 -0
  127. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGInfo.ts +29 -0
  128. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGLookup.ts +753 -0
  129. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGSymbolInfo.ts +137 -0
  130. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGTextInfo.ts +438 -0
  131. package/src/main/ts/armyc2/c5isr/renderer/utilities/SettingsChangedEvent.ts +19 -0
  132. package/src/main/ts/armyc2/c5isr/renderer/utilities/SettingsChangedEventListener.ts +10 -0
  133. package/src/main/ts/armyc2/c5isr/renderer/utilities/SettingsEventListener.ts +5 -0
  134. package/src/main/ts/armyc2/c5isr/renderer/utilities/Shape2SVG.ts +404 -0
  135. package/src/main/ts/armyc2/c5isr/renderer/utilities/ShapeInfo.ts +525 -0
  136. package/src/main/ts/armyc2/c5isr/renderer/utilities/ShapeUtilities.ts +55 -0
  137. package/src/main/ts/armyc2/c5isr/renderer/utilities/SymbolDimensionInfo.ts +36 -0
  138. package/src/main/ts/armyc2/c5isr/renderer/utilities/SymbolID.ts +1055 -0
  139. package/src/main/ts/armyc2/c5isr/renderer/utilities/SymbolUtilities.ts +2085 -0
  140. package/src/main/ts/armyc2/c5isr/renderer/utilities/TextInfo.ts +157 -0
  141. package/src/main/ts/armyc2/c5isr/web/render/GeoPixelConversion.ts +86 -0
  142. package/src/main/ts/armyc2/c5isr/web/render/MultiPointHandler.ts +3798 -0
  143. package/src/main/ts/armyc2/c5isr/web/render/MultiPointHandlerSVG.ts +412 -0
  144. package/src/main/ts/armyc2/c5isr/web/render/PointConverter.ts +124 -0
  145. package/src/main/ts/armyc2/c5isr/web/render/SymbolModifiers.ts +26 -0
  146. package/src/main/ts/armyc2/c5isr/web/render/WebRenderer.ts +677 -0
  147. package/src/main/ts/armyc2/c5isr/web/render/utilities/JavaRendererUtilities.ts +484 -0
  148. package/src/main/ts/armyc2/c5isr/web/render/utilities/LineInfo.ts +62 -0
  149. package/src/main/ts/armyc2/c5isr/web/render/utilities/SymbolInfo.ts +46 -0
  150. package/src/main/ts/armyc2/c5isr/web/render/utilities/TextInfo.ts +51 -0
  151. package/src/main/ts/org/gavaghan/geodesy/Angle.ts +31 -0
  152. package/src/main/ts/org/gavaghan/geodesy/Ellipsoid.ts +71 -0
  153. package/src/main/ts/org/gavaghan/geodesy/GeodeticCalculator.ts +200 -0
  154. package/src/main/ts/org/gavaghan/geodesy/GeodeticCurve.ts +55 -0
  155. package/src/main/ts/org/gavaghan/geodesy/GeodeticMeasurement.ts +68 -0
  156. package/src/main/ts/org/gavaghan/geodesy/GlobalCoordinates.ts +103 -0
  157. package/src/main/ts/org/gavaghan/geodesy/GlobalPosition.ts +90 -0
  158. package/test/ExportSPImages.js +692 -0
  159. package/test/MPWW.html +556 -0
  160. package/test/MPWorker.js +318 -0
  161. package/test/SPWorker.js +233 -0
  162. package/test/SVGWW.html +363 -0
  163. package/test/singlePointTester3.html +751 -0
  164. package/tsconfig.json +54 -0
  165. package/typedoc.json +30 -0
  166. package/updateVersion.js +21 -0
  167. package/webpack.config.js +34 -0
  168. package/webpackn.config.js +28 -0
  169. package/webpackr.config.js +47 -0
  170. package/webpackw.config.js +23 -0
@@ -0,0 +1,751 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <!-- Meta line required for IE-->
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
+
7
+ <title>single point tester</title>
8
+ <!-- Not necessary as fonts are body fonts set in renderer.css
9
+ <style type="text/css">
10
+ body
11
+ {
12
+ font-family: UnitFont, SinglePoint, TacticalGraphics;
13
+ font-size: 48pt;
14
+ padding: 25px;
15
+ }
16
+ </style> -->
17
+
18
+ <!-- ESBuild -->
19
+ <!-- <script src="dist/C5ISR2525.js" type="text/javascript" ></script> -->
20
+
21
+ <!-- Individual files -->
22
+ <!-- <script src="includes.js" type="text/javascript" ></script> -->
23
+
24
+ <!-- Web Pack -->
25
+ <script src="../dist/C5Ren.js" type="text/javascript" ></script>
26
+
27
+ <!-- modules only load from server, can't access from file system -->
28
+ <!--<script type="module">
29
+ import MilStdIconRenderer from './dist/bundle.js';
30
+ </script> -->
31
+
32
+ <script type = "text/javascript">
33
+
34
+ var fontCheckTimer = null;
35
+ var retries = 15;
36
+ var attempts = 0;
37
+ var _symbolID = null;
38
+ var _symStd = null;
39
+ var _modifiers = null;
40
+ var Modifiers = null;
41
+ //var C5Ren = null;
42
+
43
+
44
+ function populateModifiers()
45
+ {
46
+ var modifiers = new Map();
47
+
48
+
49
+ modifiers.set(C5Ren.Modifiers.H_ADDITIONAL_INFO_1, "H");//"!@#$%^&*()>?,.<\'\"=~`[]{}|\\/");
50
+ modifiers.set(C5Ren.Modifiers.H1_ADDITIONAL_INFO_2,"H1");
51
+ modifiers.set(C5Ren.Modifiers.AP_TARGET_NUMBER,"AP");
52
+ modifiers.set(C5Ren.Modifiers.AP1_TARGET_NUMBER_EXTENSION,"AP1");
53
+ modifiers.set(C5Ren.Modifiers.X_ALTITUDE_DEPTH,"0,10");//X
54
+ modifiers.set(C5Ren.Modifiers.K_COMBAT_EFFECTIVENESS,"100");//K
55
+ modifiers.set(C5Ren.Modifiers.Q_DIRECTION_OF_MOVEMENT,"45");//Q
56
+
57
+ modifiers.set(C5Ren.Modifiers.W_DTG_1,C5Ren.SymbolUtilities.getDateLabel(new Date()));//W
58
+ modifiers.set(C5Ren.Modifiers.W1_DTG_2,C5Ren.SymbolUtilities.getDateLabel(new Date()));//W1
59
+ modifiers.set(C5Ren.Modifiers.J_EVALUATION_RATING,"J");
60
+ modifiers.set(C5Ren.Modifiers.M_HIGHER_FORMATION,"M");
61
+ modifiers.set(C5Ren.Modifiers.N_HOSTILE,"ENY");
62
+ modifiers.set(C5Ren.Modifiers.P_IFF_SIF_AIS,"P");
63
+ modifiers.set(C5Ren.Modifiers.Y_LOCATION,"Y");
64
+
65
+ //if(symbol.getSymbolID().startsWith("G"))
66
+ modifiers.set(C5Ren.Modifiers.C_QUANTITY,"C");
67
+
68
+ modifiers.set(C5Ren.Modifiers.F_REINFORCED_REDUCED,"RD");//"(+)";//"RD";
69
+ modifiers.set(C5Ren.Modifiers.L_SIGNATURE_EQUIP,"!");
70
+ modifiers.set(C5Ren.Modifiers.AA_SPECIAL_C2_HQ,"AA");
71
+ modifiers.set(C5Ren.Modifiers.G_STAFF_COMMENTS,"G");
72
+ //symbol.symbolicon A
73
+ modifiers.set(C5Ren.Modifiers.V_EQUIP_TYPE,"V");
74
+ modifiers.set(C5Ren.Modifiers.T_UNIQUE_DESIGNATION_1,"T");
75
+ modifiers.set(C5Ren.Modifiers.T1_UNIQUE_DESIGNATION_2,"T1");
76
+ modifiers.set(C5Ren.Modifiers.Z_SPEED,"999");//Z
77
+
78
+ modifiers.set(C5Ren.Modifiers.R2_SIGNIT_MOBILITY_INDICATOR, "2");
79
+ modifiers.set(C5Ren.Modifiers.AD_PLATFORM_TYPE,"AD");
80
+ modifiers.set(C5Ren.Modifiers.AE_EQUIPMENT_TEARDOWN_TIME,"AE");
81
+ modifiers.set(C5Ren.Modifiers.AF_COMMON_IDENTIFIER,"AF");
82
+
83
+ modifiers.set(C5Ren.Modifiers.AO_ENGAGEMENT_BAR, "AO:AOA-AO");
84
+ modifiers.set(C5Ren.Modifiers.AR_SPECIAL_DESIGNATOR, "AR");
85
+ modifiers.set(C5Ren.Modifiers.AQ_GUARDED_UNIT, "AQ");
86
+ //modifiers.set(C5Ren.Modifiers.AS_COUNTRY, "USA");
87
+ //*/
88
+ //modifiers.set(C5Ren.Modifiers.CN_CPOF_NAME_LABEL,"~`"; //\"CPOF'D";//Z
89
+
90
+ //attributes
91
+
92
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.LineColor,"#60FFFF00";
93
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.FillColor,"#00FF00";
94
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.Alpha,50;
95
+
96
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.LineColor,"#FF00FF";
97
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.FillColor,"#0000FF00");
98
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.Alpha,50;
99
+
100
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.TextColor,"#FF00FF";
101
+ //modifiers.set(C5Ren.utilities.MilStdAttributes.TextBackgroundColor,"#00FF00";
102
+
103
+ return modifiers;
104
+ }
105
+
106
+ function drawToCanvas(svg,x,y)
107
+ {
108
+ var canvas = document.getElementById('preview');
109
+ var ctx = canvas.getContext('2d');
110
+ var data = svg;
111
+ var DOMURL = window.URL || window.webkitURL || window;
112
+ var img1 = new Image();
113
+ var svg = new Blob([data], {type: 'image/svg+xml'});
114
+ var url = DOMURL.createObjectURL(svg);
115
+ img1.onload = function() {
116
+ ctx.drawImage(img1, x, y);
117
+ DOMURL.revokeObjectURL(url);
118
+ }
119
+ img1.src = url;
120
+ }
121
+
122
+
123
+ function render(symbolID, x, y)
124
+ {
125
+ var size = document.getElementById("tbSize").value;
126
+ var keepUnitRatio = document.getElementById("cbKeepUnitRatio").checked;
127
+ var showLabels = document.getElementById("cbLabels").checked;
128
+ var drawAsIcon = document.getElementById("cbDrawAsIcon").checked;
129
+ var scaleMainIcon = document.getElementById("cbScaleMainIcon").checked;
130
+
131
+ var modifiers = new Map();
132
+
133
+ if(showLabels === true)
134
+ {
135
+ modifiers = populateModifiers();
136
+ }
137
+
138
+ var attributes = new Map();
139
+ attributes.set(C5Ren.MilStdAttributes.PixelSize,new String(size));
140
+ attributes.set(C5Ren.MilStdAttributes.DrawAsIcon,new String(drawAsIcon));
141
+ attributes.set(C5Ren.MilStdAttributes.KeepUnitRatio,new String(keepUnitRatio));
142
+
143
+ RendererSettings.getInstance().setScaleMainIcon(scaleMainIcon);
144
+
145
+ //font change test
146
+ //RendererSettings.getInstance().setLabelFont("serif","bold",24);
147
+
148
+ //OutlineTest
149
+ //attributes.set(C5Ren.MilStdAttributes.OutlineColor]="#FF00FF";
150
+ //attributes.set(C5Ren.MilStdAttributes.OutlineWidth]=4;
151
+ //attributes.set(C5Ren.MilStdAttributes.OutlineAlpha]=0.5;
152
+
153
+ //attributes.set(C5Ren.MilStdAttributes.LineColor,"#00FF00");
154
+ //attributes.set(C5Ren.MilStdAttributes.FillColor,"#0000FF00");
155
+ //attributes.set(C5Ren.MilStdAttributes.IconColor,"#0000FF");
156
+
157
+ var si = C5Ren.MilStdIconRenderer.getInstance().RenderSVG(symbolID,modifiers,attributes);
158
+ //var si2 = C5Ren.MilStdIconRenderer.getInstance().RenderSVG("130310000016570000000000000000",modifiers,attributes);
159
+ var center = si.getSymbolCenterPoint();
160
+
161
+ var preview = document.getElementById("preview");
162
+ var ctx = preview.getContext('2d');
163
+
164
+ //SVG TEST
165
+ var svgImage = document.getElementById("SVGTest");
166
+ svgImage.width = si.getImageBounds().getWidth();
167
+ svgImage.height = si.getImageBounds().getHeight();
168
+ var data = si.getSVGDataURI();
169
+ svgImage.src = data;
170
+ //var si = C5Ren.MilStdIconRenderer.RenderSVG(symbolID,modifiers);
171
+ document.getElementById("contentSpan").innerHTML += si.getSVG();
172
+
173
+
174
+ //test urlEncode vs base64
175
+ //speedTestSVGConversion(si.getSVG());
176
+
177
+ try
178
+ {
179
+
180
+ x = x - center.getX();
181
+ y = y - center.getY();
182
+ //alert(x + " " + y);
183
+ drawToCanvas(si.getSVG(),x,y);
184
+ //ctx.drawImage(ii.getImage(), Math.ceil(x),Math.ceil(y));
185
+ var bounds = si.getImageBounds();
186
+ bounds.setRect(x,y,bounds.getWidth(),bounds.getHeight());
187
+ bounds.stroke(ctx);//*/
188
+ }
189
+ catch(err)
190
+ {
191
+ console.log(err);
192
+ }
193
+ }
194
+
195
+
196
+
197
+ function buildSymbolID(basicID)
198
+ {
199
+ if(basicID == null || basicID.length !== 8)
200
+ {
201
+ if(_symbolID && _symbolID.length === 8)
202
+ basicID = _symbolID;//symbolID is basic code from TF or Unit Picker box
203
+ else
204
+ basicID = "00000000";
205
+ }
206
+
207
+ var id = document.getElementById("lbVersion").value.split("-")[0];
208
+ id += document.getElementById("lbContext").value.split("-")[0];
209
+ id += document.getElementById("lbAffiliation").value.split("-")[0];
210
+ id += basicID.substring(0, 2);
211
+ id += document.getElementById("lbStatus").value.split("-")[0];
212
+ id += document.getElementById("lbHQTFD").value.split("-")[0];
213
+ id += document.getElementById("lbAmp").value.split("-")[0];
214
+ id += basicID.substring(2);
215
+
216
+ var s1m = document.getElementById("tbS1Mod").value;
217
+ if(s1m.length == 2)
218
+ {
219
+ id += s1m;
220
+ }
221
+ else
222
+ id += "00";
223
+
224
+ var s2m = document.getElementById("tbS2Mod").value;
225
+ if(s2m.length == 2)
226
+ {
227
+ id += s2m;
228
+ }
229
+ else
230
+ id += "00";
231
+
232
+ id += document.getElementById("lbS1").value;
233
+ id += document.getElementById("lbS2").value;
234
+
235
+ var fs = document.getElementById("lbFrame").value.split("-")[0];
236
+
237
+ if(parseInt(id.substring(0,2)) >= C5Ren.SymbolID.Version_2525E)
238
+ id += fs + "0000";//2525E has frame shape and 4 reserved positions
239
+ else
240
+ id += "00000";//2525D has 5 reserved positions
241
+
242
+ if(document.getElementById("cbLabels").checked)
243
+ id += "840";//country code USA
244
+ else
245
+ id += "000";//country code
246
+
247
+ document.getElementById("tbSymbolID").value = id;
248
+
249
+ return id;
250
+
251
+ }
252
+
253
+ function renderFE()
254
+ {
255
+ var lb = document.getElementById("lbU");
256
+ var lb2 = document.getElementById("lbTG");
257
+ lb2.selectedIndex = -1;
258
+ var id = lb.value;
259
+ if(id && id !== "")
260
+ {
261
+ _symbolID = id;
262
+
263
+ }
264
+ else
265
+ {
266
+ alert("Pick a symbol from the right list first.");
267
+ }
268
+
269
+ buildSymbolID(_symbolID);
270
+ }
271
+
272
+ function renderTG()
273
+ {
274
+ var lb = document.getElementById("lbTG");
275
+ var lb2 = document.getElementById("lbU");
276
+ lb2.selectedIndex = -1;
277
+ var id = lb.value;
278
+ if(id && id !== "")
279
+ {
280
+ _symbolID = id;
281
+ }
282
+ else
283
+ {
284
+ alert("Pick a symbol from the right list first.");
285
+ }
286
+
287
+ buildSymbolID(_symbolID);
288
+ }
289
+
290
+ function speedTestSVGConversion(svg)
291
+ {
292
+ var start = new Date().getTime();
293
+
294
+ for(var i = 0; i < 10000; i++)
295
+ {
296
+ encodeURIComponent(svg)
297
+ }
298
+
299
+ var end = new Date().getTime();
300
+ var time = end - start;
301
+ alert('encodeURIComponent: ' + (time/1000) + "; length: " + encodeURIComponent(svg).length);//*/
302
+
303
+ start = new Date().getTime();
304
+
305
+ for(var j = 0; j < 10000; j++)
306
+ {
307
+ btoa(svg)
308
+ }
309
+
310
+ end = new Date().getTime();
311
+ time = end - start;
312
+ alert('btoa: ' + (time/1000) + "; length: " + btoa(svg).length);//*/
313
+
314
+ }
315
+ function speedTest(type)
316
+ {
317
+ //PERFORMANCE TEST///////////////////////////
318
+
319
+ var start;
320
+ var end;
321
+ var modifiers;
322
+ //modifiers = populateModifiers();//render time increases with the number of modifiers
323
+ //modifiers["RENDER",false;//dimensions without labels
324
+ var apID = buildSymbolID();//"GFGPGPP---****X";//action point
325
+ var dmID = buildSymbolID();//"SUGDUSAT--MY***";//symbol with display modifiers, will add to render time
326
+ var plainID = buildSymbolID();//"SUGPUSAT----***";//plain symbol with no display modifiers
327
+ var id;
328
+ var msi = C5Ren.MilStdIconRenderer.getInstance();
329
+ if(type === 1)
330
+ {
331
+ id = plainID;
332
+ modifiers = new Map();
333
+ }
334
+ else if(type === 2)
335
+ {
336
+ id = dmID;
337
+ modifiers = new Map();
338
+ }
339
+ else if(type === 3)
340
+ {
341
+ id = dmID;
342
+ modifiers = populateModifiers();
343
+ }
344
+
345
+ //SVG Speed Test
346
+ start = new Date().getTime();
347
+
348
+ var attrib = new Map();
349
+
350
+ var si;
351
+
352
+ for(var j = 0; j < 1000; j++)
353
+ {
354
+ si = msi.RenderSVG(id,modifiers,attrib);
355
+ }
356
+
357
+ end = new Date().getTime();
358
+ time = end - start;
359
+
360
+ var svgImage = document.getElementById("SVGTest");
361
+ svgImage.width = si.getImageBounds().getWidth();
362
+ svgImage.height = si.getImageBounds().getHeight();
363
+ var data = si.getSVGDataURI();
364
+ svgImage.src = data;
365
+
366
+ alert('Render 1k SVG symbols (just SVG generation, not in browser rendering): ' + (time/1000));//*/
367
+
368
+
369
+
370
+ }
371
+
372
+ function versionChange()
373
+ {
374
+ buildSymbolID();
375
+ populateListBox();
376
+ }
377
+
378
+ function populateListBox()
379
+ {
380
+ var lbTG = document.getElementById("lbTG");
381
+ var lbU = document.getElementById("lbU");
382
+
383
+ var lbV = document.getElementById("lbVersion");
384
+ var version = parseInt(lbV.value.split('-')[0]);
385
+
386
+ console.log(lbTG.length);
387
+
388
+ while(lbTG.length > 1)
389
+ {
390
+ lbTG.remove(1);
391
+ }
392
+ while(lbU.length > 1)
393
+ {
394
+ lbU.remove(1);
395
+ }//*/
396
+
397
+
398
+ var tmpArrayTG = new Array();
399
+ var tmpArrayUnit = new Array();
400
+ var option = null;
401
+ var def = null;
402
+ var msi = null;
403
+
404
+ var list = C5Ren.MSLookup.getInstance().getIDList(version);
405
+
406
+ //put values in array and sort
407
+ for(var i=0; i< list.length; i++)//(const symbolID of list)
408
+ {
409
+ var symbolID = list[i];
410
+
411
+ msi = C5Ren.MSLookup.getInstance().getMSLInfo(symbolID,version);
412
+
413
+ if(msi != null && msi.getDrawRule() !== 0)
414
+ {
415
+ var ss = msi.getSymbolSet();
416
+ if(ss < 10)
417
+ ss = "0" + ss;
418
+ if(msi.getSymbolSet() === C5Ren.SymbolID.SymbolSet_ControlMeasure ||
419
+ msi.getSymbolSet() === 45 || msi.getSymbolSet() === 46 || msi.getSymbolSet() === 47)
420
+ tmpArrayTG.push([ss+'-'+msi.getName()+'-'+msi.getBasicSymbolID().substring(2),msi.getBasicSymbolID()]);
421
+ else
422
+ {
423
+ tmpArrayUnit.push([ss+'-'+msi.getName()+'-'+msi.getBasicSymbolID().substring(2),msi.getBasicSymbolID()]);
424
+ }
425
+ }
426
+ else
427
+ {
428
+ //console.log("no MSInfo for: " + symbolID + " version: " + version);
429
+ }
430
+ }
431
+ tmpArrayTG.sort();
432
+ tmpArrayUnit.sort();
433
+
434
+ //add values to list box
435
+ for(var i=0; i<tmpArrayTG.length;i++)
436
+ {
437
+ option = new Option();
438
+ option.text = tmpArrayTG[i][0];
439
+ option.value = tmpArrayTG[i][1];
440
+ lbTG.add(option);
441
+ }
442
+ for(var i=0; i<tmpArrayUnit.length;i++)
443
+ {
444
+ option = new Option();
445
+ option.text = tmpArrayUnit[i][0];
446
+ option.value = tmpArrayUnit[i][1];
447
+ lbU.add(option);
448
+ }
449
+
450
+ lbTG.remove(1);
451
+ lbTG.onselect = renderTG;
452
+ lbTG.onchange = renderTG;
453
+
454
+ lbU.remove(1);
455
+ lbU.onselect = renderFE;
456
+ lbU.onchange = renderFE;
457
+
458
+
459
+ }
460
+ function clearCanvas()
461
+ {
462
+ var preview = document.getElementById("preview");
463
+ preview.onclick = canvasClick;
464
+
465
+ var ctx = preview.getContext('2d');
466
+ //outline the canvas
467
+ ctx.clearRect(0,0,650,300);
468
+ ctx.strokeStyle="#000000";
469
+ ctx.beginPath();
470
+ ctx.moveTo(0,0);
471
+ ctx.lineTo(650,0);
472
+ ctx.lineTo(650,300);
473
+ ctx.lineTo(0,300);
474
+ ctx.lineTo(0,0);
475
+ ctx.stroke();//*/
476
+ }
477
+ function canvasClick(e)
478
+ {
479
+ //alert("clicked");
480
+ //console.dir(e);
481
+ //e.clientX;
482
+ //e.clientY;
483
+ if(_symbolID === null)
484
+ {
485
+ alert("Choose a symbol from one of the lists");
486
+ return;
487
+ }
488
+
489
+ var id = buildSymbolID(_symbolID);
490
+
491
+ var preview = document.getElementById("preview");
492
+ var x = e.pageX - preview.offsetLeft;
493
+ var y = e.pageY - preview.offsetTop;
494
+ render(id,x, y);
495
+
496
+ /*
497
+ var att = new Map();
498
+ att.set("PIXELSIZE","50");
499
+ att.set("FILLCOLOR","#00FF00");
500
+ var LAA = "110325000015110016000000000000";
501
+ var si = C5Ren.SinglePointSVGRenderer.getInstance().RenderModifier(LAA,att);
502
+ console.log(si.getSVG());//*/
503
+ }
504
+
505
+ function setSpeedTestImages()
506
+ {
507
+ var msi = C5Ren.MilStdIconRenderer.getInstance();
508
+
509
+ //set speed test images
510
+ var ii1 = msi.RenderSVG("SUGPUSAT----***",null,null);
511
+ var img = document.getElementById("iST1");
512
+ img.src = ii1.toDataUrl();
513
+ img.width = ii1.getImageBounds().width;
514
+ img.height = ii1.getImageBounds().height;
515
+
516
+ var ii2 = msi.RenderSVG("SUGDUSAT--MY***",populateModifiers(),null);
517
+ var img2 = document.getElementById("iST2");
518
+ img2.src = ii2.toDataUrl();
519
+ img2.width = ii2.getImageBounds().width;
520
+ img2.height = ii2.getImageBounds().height;
521
+
522
+ //enable speed test buttons
523
+ var button = document.getElementById("btnST2");
524
+ button.disabled = false;
525
+ button.innerHTML = "Speed Test With Modifiers";
526
+ var button2 = document.getElementById("btnST1");
527
+ button2.disabled = false;
528
+ button2.innerHTML = "Speed Test";
529
+ }
530
+
531
+ function setup()
532
+ {
533
+ document.getElementById("btnST1").disabled = true;
534
+ //Assumes location page is running in
535
+ //C5Ren.initialize().then(function(results){document.getElementById("btnST1").disabled = false;preload();}).catch(error => {throw error;});
536
+ //Set location where renderer and files are
537
+ //C5Ren.initialize('/dist/').then(function(results){document.getElementById("btnST1").disabled = false;preload();}).catch(error => {throw error;});
538
+ //Tell the renderer specficially where the manifest file is in case the users process renamed it with a hash or something.
539
+ //C5Ren.initialize('/dist/manifest.json').then(function(results){document.getElementById("btnST1").disabled = false;preload();}).catch(error => {throw error;});
540
+
541
+ //no longer using init call
542
+ document.getElementById("btnST1").disabled = false;
543
+ preload();
544
+
545
+ /*if(C5Ren.isReady())
546
+ {
547
+ var mi = new C5Ren.MSInfo(13,"10", "Sustainment","TEST","","165700",null);
548
+ var si = new C5Ren.SVGInfo("10165700", new C5Ren.Rectangle2D(198,365,215,64),"<g id=\"10165700\"><text font-family=\"sans-serif\" stroke=\"red\" font-size=\"89\" x=\"192\" y=\"428\">MWR</text></g>");
549
+ C5Ren.MilStdIconRenderer.getInstance().AddCustomSymbol(mi,si);
550
+ }//*/
551
+ }
552
+
553
+ function preload()
554
+ {
555
+ //Add Custom Symbols
556
+ var miBase = C5Ren.MSLookup.getInstance().getMSLInfo("10160000",13);
557
+ var mi = new C5Ren.MSInfo(13,"10", "Sustainment","TEST","","165700",miBase.getModifiers());
558
+ var si = new C5Ren.SVGInfo("10165700", new C5Ren.Rectangle2D(198,365,215,64),"<g id=\"10165700\"><text font-family=\"sans-serif\" fill=\"red\" font-size=\"89\" x=\"192\" y=\"428\">MWR</text></g>");
559
+ C5Ren.MilStdIconRenderer.getInstance().AddCustomSymbol(mi,si);
560
+
561
+ Modifiers = C5Ren.Modifiers;
562
+ //var Color = new window.Color(255,255,0);
563
+ //testString = Color.toString();
564
+ //console.log(testString);
565
+ var msi = C5Ren.MilStdIconRenderer.getInstance();
566
+ var RendererSettings = C5Ren.RendererSettings.getInstance();
567
+ RendererSettings.setScaleMainIcon(true);
568
+ //populate sybol list boxes
569
+ var lbTG = document.getElementById("lbTG");
570
+ var lbU = document.getElementById("lbU");
571
+ var lbStatus = document.getElementById("lbStatus");
572
+ //lbStatus.selectedIndex = 1;
573
+ lbAffiliation.selectedIndex = 3;
574
+
575
+ populateListBox();
576
+
577
+ var preview = document.getElementById("preview");
578
+ preview.onclick = canvasClick;
579
+
580
+ var ctx = preview.getContext('2d');
581
+ //outline the canvas
582
+ ctx.strokeStyle="#000000";
583
+ ctx.beginPath();
584
+ ctx.moveTo(0,0);
585
+ ctx.lineTo(650,0);
586
+ ctx.lineTo(650,300);
587
+ ctx.lineTo(0,300);
588
+ ctx.lineTo(0,0);
589
+ ctx.stroke();//*/
590
+
591
+ //RendererSettings.setTextBackgroundMethod(RendererSettings.TextBackgroundMethod_NONE);
592
+ //RendererSettings.setTextBackgroundMethod(RendererSettings.TextBackgroundMethod_COLORFILL);
593
+ //RendererSettings.setTextBackgroundMethod(RendererSettings.TextBackgroundMethod_OUTLINE);
594
+ //RendererSettings.setTextBackgroundMethod(RendererSettings.TextBackgroundMethod_OUTLINE_QUICK);
595
+ RendererSettings.setOutlineSPControlMeasures(false);
596
+ //RendererSettings.setOperationalConditionModifierType(RendererSettings.OperationalConditionModifierType_SLASH);
597
+
598
+ }
599
+ </script>
600
+ </head>
601
+
602
+ <BODY bgcolor="#5f95e9" onload="setup();">
603
+ <select id="lbTG" size="10" style="width: 300px;" >
604
+ <option>Single Point Tactical</option>
605
+ <option>Populating Values...</option>
606
+ </select>
607
+ <select id="lbU" size="10" style="width: 300px;" >
608
+ <option>Single Point Warfighting</option>
609
+ <option>Populating Values...</option>
610
+ </select>
611
+ <br/>
612
+ SVG Rendered to HTML5 Canvas:<br/>
613
+ <canvas id="preview" width="650" height="300"></canvas>
614
+ <br/>
615
+ <!-- <button id="btnDrawTG" type='button' onclick='renderTG();'>Draw TG</button>
616
+ <button id="btnDrawFE" type='button' onclick='renderFE();'>Draw FE</button> -->
617
+ SymbolID: <input id="tbSymbolID" type="text" value="" maxlength="30" size="30" readonly>
618
+ <br>
619
+ Version: <select id = lbVersion onchange="versionChange();">
620
+ <option>11-2525D</option>
621
+ <option>13-2525E</option>
622
+ </select>
623
+ Context: <select id = lbContext onchange="buildSymbolID();">
624
+ <option>0-Reality</option>
625
+ <option>1-Exercise</option>
626
+ <option>2-Simulation</option>
627
+ </select>
628
+ Affiliation: <select id = lbAffiliation onchange="buildSymbolID();">
629
+ <option>0-Pending</option>
630
+ <option>1-Unknown</option>
631
+ <option>2-Assumed Friend</option>
632
+ <option>3-Friend</option>
633
+ <option>4-Neutral</option>
634
+ <option>5-Suspect/Joker</option>
635
+ <option>6-Hostile/Faker</option>
636
+ </select>
637
+ Status: <select id = lbStatus onchange="buildSymbolID();">
638
+ <option>0-Present</option>
639
+ <option>1-Planned/Anticipated/Suspect</option>
640
+ <option>2-Fully Capable</option>
641
+ <option>3-Damaged</option>
642
+ <option>4-Destroyed</option>
643
+ <option>5-Full to capacity</option>
644
+ </select>
645
+ S1: <select id = lbS1 onchange="buildSymbolID();">
646
+ <option>0</option>
647
+ <option>1</option>
648
+ <option>2</option>
649
+ <option>3</option>
650
+ <option>4</option>
651
+ <option>5</option>
652
+ <option>6</option>
653
+ <option>7</option>
654
+ <option>8</option>
655
+ <option>9</option>
656
+ </select>
657
+ S2: <select id = lbS2 onchange="buildSymbolID();">
658
+ <option>0</option>
659
+ <option>1</option>
660
+ <option>2</option>
661
+ <option>3</option>
662
+ <option>4</option>
663
+ <option>5</option>
664
+ <option>6</option>
665
+ <option>7</option>
666
+ <option>8</option>
667
+ <option>9</option>
668
+ </select>
669
+ <br>
670
+ HQTFD: <select id = lbHQTFD onchange="buildSymbolID();">
671
+ <option>0-Unknown</option>
672
+ <option>1-Dummy</option>
673
+ <option>2-HQ</option>
674
+ <option>3-D/HQ</option>
675
+ <option>4-TF</option>
676
+ <option>5-D/TF</option>
677
+ <option>6-TF/HQ</option>
678
+ <option>7-D/TF/HQ</option>
679
+ </select>
680
+ Amplifier: <select id = lbAmp onchange="buildSymbolID();">
681
+ <option>00-Unknown</option>
682
+ <option>11-Team/Crew</option>
683
+ <option>12-Squad</option>
684
+ <option>13-Section</option>
685
+ <option>14-Platoon/detachment</option>
686
+ <option>15-Company/battery/troop</option>
687
+ <option>16-Battalion/squadron</option>
688
+ <option>17-Regiment/group</option>
689
+ <option>18-Brigade</option>
690
+ <option>21-Division</option>
691
+ <option>22-Corps/MEF</option>
692
+ <option>23-Army</option>
693
+ <option>24-Army Group/front</option>
694
+ <option>25-Region/Theater</option>
695
+ <option>26-Command</option>
696
+ <option>31-Wheeled Limited Cross County</option>
697
+ <option>32-Wheeled Cross Country</option>
698
+ <option>33-Tracked</option>
699
+ <option>34-Wheeled and Tracked</option>
700
+ <option>35-Towed</option>
701
+ <option>36-Rail</option>
702
+ <option>37-Pack Animals</option>
703
+ <option>41-Over Snow</option>
704
+ <option>42-Sled</option>
705
+ <option>51-Barge</option>
706
+ <option>52-Amphibious</option>
707
+ <option>61-Short Towed Array</option>
708
+ <option>62-Long Towed Array</option>
709
+ <option>71-Leader Individual</option>
710
+ </select>
711
+ S1Mod: <input id="tbS1Mod" type="text" value="00" maxlength="2" size="2" onchange="buildSymbolID();">
712
+ S2Mod: <input id="tbS2Mod" type="text" value="00" maxlength="2" size="2" onchange="buildSymbolID();">
713
+ Frame Shape: <select id = lbFrame>
714
+ <option>0-Unknown</option>
715
+ <option>1-Space</option>
716
+ <option>2-Air</option>
717
+ <option>3-Land Unit</option>
718
+ <option>4-Equip/Sea</option>
719
+ <option>5-Land Inst.</option>
720
+ <option>6-Dis. Ind.</option>
721
+ <option>7-Sea Sub.</option>
722
+ <option>8-Activity</option>
723
+ <option>9-Cyber</option>
724
+ </select>
725
+ Size: <input id="tbSize" type="number" value="100" style="width: 4em"><br/>
726
+ Keep Unit Ratio: <input id="cbKeepUnitRatio" type="checkbox" checked><br/>
727
+ Labels: <input id="cbLabels" type="checkbox"><br/>
728
+ Draw as Icon: <input id="cbDrawAsIcon" type="checkbox"><br/>
729
+ Scale Internal Symbol: <input id="cbScaleMainIcon" type="checkbox" checked><br/>
730
+ <button id="btnClear" type='button' onclick='clearCanvas();' >Clear Canvas</button>
731
+ <br/>
732
+ <!-- <button id="btnRender" type='button' onclick='testRender();' disabled>Loading Page</button>-->
733
+ Speed test is only representative of the time taken to build the SVG string, not render.
734
+ <br/>
735
+ <button id="btnST1" type='button' onclick='speedTest(1);'>Speed Test</button><!-- Speed Test -->
736
+ <button id="btnST2" type='button' onclick='speedTest(3);'>Speed Test with Modifiers</button><!-- Speed Test With Modifiers -->
737
+ <!-- <img id="batch1" src="" alt="batch1" height="35" width="35">
738
+ <img id="batch2" src="" alt="batch2" height="35" width="35"> -->
739
+ <br/>
740
+ <img id="SVGTest" src="" alt="svg from datauri" height="100" width="100">
741
+ <br/>
742
+ <span id='contentSpan'/>
743
+
744
+ <!-- Export single point output to files -->
745
+ <br/>
746
+ <script src="exportspimages.js" type="text/javascript" ></script>
747
+ <script src="../node_modules/jszip/dist/jszip.js"></script>
748
+ <button id="btnExport" type='button' onclick='exportTestImages("SPImageTestJS.zip")'>Export test images</button>
749
+
750
+ </BODY>
751
+ </html>