浏览代码

10.7.8 release

Former-commit-id: 86ce3459e2864246234c7f622baf2deb601c02c2
Gaudenz Alder 6 年之前
父节点
当前提交
6e2a96ab43
共有 100 个文件被更改,包括 3628 次插入1740 次删除
  1. 8 0
      ChangeLog
  2. 1 1
      VERSION
  3. 2 0
      etc/docker/README.md
  4. 11 10
      etc/mxgraph/mxClient.js
  5. 1 1
      src/main/java/com/mxgraph/online/SaveServlet.java
  6. 1 1
      src/main/webapp/cache.manifest
  7. 二进制
      src/main/webapp/images/sidebar-ibm.png
  8. 64 21
      src/main/webapp/img/lib/ibm/devops/collaborative_development.svg
  9. 72 0
      src/main/webapp/img/lib/ibm/vpc/ClassicInfrastructureTag.svg
  10. 75 0
      src/main/webapp/img/lib/ibm/vpc/CloudTag.svg
  11. 66 0
      src/main/webapp/img/lib/ibm/vpc/Enterprise2.svg
  12. 74 0
      src/main/webapp/img/lib/ibm/vpc/EnterpriseTag.svg
  13. 124 0
      src/main/webapp/img/lib/ibm/vpc/ImageService.svg
  14. 58 0
      src/main/webapp/img/lib/ibm/vpc/InternetServices2.svg
  15. 124 0
      src/main/webapp/img/lib/ibm/vpc/LoadBalancerListener.svg
  16. 125 0
      src/main/webapp/img/lib/ibm/vpc/LoadBalancerPool.svg
  17. 109 0
      src/main/webapp/img/lib/ibm/vpc/ObjectStorage.svg
  18. 75 0
      src/main/webapp/img/lib/ibm/vpc/PublicTag.svg
  19. 75 0
      src/main/webapp/img/lib/ibm/vpc/RegionTag.svg
  20. 57 0
      src/main/webapp/img/lib/ibm/vpc/Rules.svg
  21. 108 0
      src/main/webapp/img/lib/ibm/vpc/SubnetTag.svg
  22. 75 0
      src/main/webapp/img/lib/ibm/vpc/VPCTag.svg
  23. 124 0
      src/main/webapp/img/lib/ibm/vpc/VPNConnection.svg
  24. 124 0
      src/main/webapp/img/lib/ibm/vpc/VPNGateway.svg
  25. 57 0
      src/main/webapp/img/lib/ibm/vpc/VPNPolicy.svg
  26. 75 0
      src/main/webapp/img/lib/ibm/vpc/ZoneTag.svg
  27. 735 726
      src/main/webapp/js/app.min.js
  28. 1 3
      src/main/webapp/js/diagramly/App.js
  29. 64 56
      src/main/webapp/js/diagramly/Dialogs.js
  30. 0 110
      src/main/webapp/js/diagramly/Editor.js
  31. 4 20
      src/main/webapp/js/diagramly/EditorUi.js
  32. 19 8
      src/main/webapp/js/diagramly/ElectronApp.js
  33. 12 5
      src/main/webapp/js/diagramly/Extensions.js
  34. 2 1
      src/main/webapp/js/diagramly/GraphViewer.js
  35. 6 1
      src/main/webapp/js/diagramly/Minimal.js
  36. 146 112
      src/main/webapp/js/diagramly/sidebar/Sidebar-AWS4.js
  37. 5 2
      src/main/webapp/js/diagramly/sidebar/Sidebar-Electrical.js
  38. 134 65
      src/main/webapp/js/diagramly/sidebar/Sidebar-IBM.js
  39. 1 1
      src/main/webapp/js/diagramly/sidebar/Sidebar.js
  40. 80 80
      src/main/webapp/js/extensions.min.js
  41. 8 6
      src/main/webapp/js/mxgraph/Dialogs.js
  42. 110 0
      src/main/webapp/js/mxgraph/Editor.js
  43. 46 0
      src/main/webapp/js/mxgraph/EditorUi.js
  44. 4 3
      src/main/webapp/js/mxgraph/Format.js
  45. 20 14
      src/main/webapp/js/shapes.min.js
  46. 1 1
      src/main/webapp/js/stencils.min.js
  47. 493 492
      src/main/webapp/js/viewer.min.js
  48. 1 0
      src/main/webapp/resources/dia.txt
  49. 1 0
      src/main/webapp/resources/dia_am.txt
  50. 1 0
      src/main/webapp/resources/dia_ar.txt
  51. 1 0
      src/main/webapp/resources/dia_bg.txt
  52. 1 0
      src/main/webapp/resources/dia_bn.txt
  53. 1 0
      src/main/webapp/resources/dia_bs.txt
  54. 1 0
      src/main/webapp/resources/dia_ca.txt
  55. 1 0
      src/main/webapp/resources/dia_cs.txt
  56. 1 0
      src/main/webapp/resources/dia_da.txt
  57. 1 0
      src/main/webapp/resources/dia_de.txt
  58. 1 0
      src/main/webapp/resources/dia_el.txt
  59. 1 0
      src/main/webapp/resources/dia_eo.txt
  60. 1 0
      src/main/webapp/resources/dia_es.txt
  61. 1 0
      src/main/webapp/resources/dia_et.txt
  62. 1 0
      src/main/webapp/resources/dia_fa.txt
  63. 1 0
      src/main/webapp/resources/dia_fi.txt
  64. 1 0
      src/main/webapp/resources/dia_fil.txt
  65. 1 0
      src/main/webapp/resources/dia_fr.txt
  66. 1 0
      src/main/webapp/resources/dia_gu.txt
  67. 1 0
      src/main/webapp/resources/dia_he.txt
  68. 1 0
      src/main/webapp/resources/dia_hi.txt
  69. 1 0
      src/main/webapp/resources/dia_hr.txt
  70. 1 0
      src/main/webapp/resources/dia_hu.txt
  71. 1 0
      src/main/webapp/resources/dia_i18n.txt
  72. 1 0
      src/main/webapp/resources/dia_id.txt
  73. 1 0
      src/main/webapp/resources/dia_it.txt
  74. 1 0
      src/main/webapp/resources/dia_ja.txt
  75. 1 0
      src/main/webapp/resources/dia_kn.txt
  76. 1 0
      src/main/webapp/resources/dia_ko.txt
  77. 1 0
      src/main/webapp/resources/dia_lt.txt
  78. 1 0
      src/main/webapp/resources/dia_lv.txt
  79. 1 0
      src/main/webapp/resources/dia_ml.txt
  80. 1 0
      src/main/webapp/resources/dia_mr.txt
  81. 1 0
      src/main/webapp/resources/dia_ms.txt
  82. 1 0
      src/main/webapp/resources/dia_nl.txt
  83. 1 0
      src/main/webapp/resources/dia_no.txt
  84. 1 0
      src/main/webapp/resources/dia_pl.txt
  85. 1 0
      src/main/webapp/resources/dia_pt-br.txt
  86. 1 0
      src/main/webapp/resources/dia_pt.txt
  87. 1 0
      src/main/webapp/resources/dia_ro.txt
  88. 1 0
      src/main/webapp/resources/dia_ru.txt
  89. 1 0
      src/main/webapp/resources/dia_sk.txt
  90. 1 0
      src/main/webapp/resources/dia_sl.txt
  91. 1 0
      src/main/webapp/resources/dia_sr.txt
  92. 1 0
      src/main/webapp/resources/dia_sv.txt
  93. 1 0
      src/main/webapp/resources/dia_sw.txt
  94. 1 0
      src/main/webapp/resources/dia_ta.txt
  95. 1 0
      src/main/webapp/resources/dia_te.txt
  96. 1 0
      src/main/webapp/resources/dia_th.txt
  97. 1 0
      src/main/webapp/resources/dia_tr.txt
  98. 1 0
      src/main/webapp/resources/dia_uk.txt
  99. 1 0
      src/main/webapp/resources/dia_vi.txt
  100. 0 0
      src/main/webapp/resources/dia_zh-tw.txt

+ 8 - 0
ChangeLog

@@ -1,3 +1,11 @@
+19-JUN-2019: 10.7.8
+
+- Fixes double click handling with pen and touch on Windows
+- Fixes ignored transparent background in viewer
+- Adds optional custom labels for IC pins
+- Uses mxGraph 4.0.1 beta 8
+- Fixes UI inconsistencies
+
 12-JUN-2019: 10.7.7
 
 - Adds validation of color picker input to fix XSS vulnerability

+ 1 - 1
VERSION

@@ -1 +1 @@
-10.7.7
+10.7.8

+ 2 - 0
etc/docker/README.md

@@ -9,3 +9,5 @@ docker run -d -p 8888:8080 draw
 ```
 Now the app will be accessible at `http://localhost:8888/draw/?local=1` (the local URL parameter disables
 the cloud integrations as those require some keys to be changed).
+
+We recommend using [this external Docker draw.io project](https://github.com/fjudith/docker-draw.io), it is somewhat more advanced and better maintained.

文件差异内容过多而无法显示
+ 11 - 10
etc/mxgraph/mxClient.js


+ 1 - 1
src/main/java/com/mxgraph/online/SaveServlet.java

@@ -187,7 +187,7 @@ public class SaveServlet extends HttpServlet
 								"attachment; filename=\"" + filename
 										+ "\"; filename*=UTF-8''" + filename);
 					}
-					else if (mime.equals("image/svg+xml"))
+					else if (mime != null && mime.equals("image/svg+xml"))
 					{
 						response.setContentType("image/svg+xml");
 					}

+ 1 - 1
src/main/webapp/cache.manifest

@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 06/12/2019 11:04 am
+# 06/19/2019 01:14 PM
 
 app.html
 index.html?offline=1

二进制
src/main/webapp/images/sidebar-ibm.png


文件差异内容过多而无法显示
+ 64 - 21
src/main/webapp/img/lib/ibm/devops/collaborative_development.svg


+ 72 - 0
src/main/webapp/img/lib/ibm/vpc/ClassicInfrastructureTag.svg

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="196.42876mm"
+   height="196.42876mm"
+   viewBox="0 0 196.42876 196.42876"
+   version="1.1"
+   id="svg1355"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"
+   sodipodi:docname="Classic_tag.svg">
+  <defs
+     id="defs1349" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.5"
+     inkscape:cx="452.51077"
+     inkscape:cy="276.12034"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1017"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata1352">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-7.5486803,-50.007427)">
+    <rect
+       style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.32322836;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:17.00787544;stroke-opacity:1;paint-order:normal"
+       id="rect4609"
+       width="196.39772"
+       height="39.314404"
+       x="7.5797105"
+       y="128.56459" />
+    <path
+       id="rect4609-6"
+       style="opacity:1;vector-effect:none;fill:#b40017;fill-opacity:1;stroke:none;stroke-width:1.32322836;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:17.00787544;stroke-opacity:1;paint-order:normal"
+       d="M 7.5797105,50.007427 H 203.97743 V 89.321831 H 7.5797105 Z m 0,157.114353 H 203.97743 v 39.3144 H 7.5797105 Z" />
+  </g>
+</svg>

文件差异内容过多而无法显示
+ 75 - 0
src/main/webapp/img/lib/ibm/vpc/CloudTag.svg


文件差异内容过多而无法显示
+ 66 - 0
src/main/webapp/img/lib/ibm/vpc/Enterprise2.svg


文件差异内容过多而无法显示
+ 74 - 0
src/main/webapp/img/lib/ibm/vpc/EnterpriseTag.svg


文件差异内容过多而无法显示
+ 124 - 0
src/main/webapp/img/lib/ibm/vpc/ImageService.svg


文件差异内容过多而无法显示
+ 58 - 0
src/main/webapp/img/lib/ibm/vpc/InternetServices2.svg


文件差异内容过多而无法显示
+ 124 - 0
src/main/webapp/img/lib/ibm/vpc/LoadBalancerListener.svg


文件差异内容过多而无法显示
+ 125 - 0
src/main/webapp/img/lib/ibm/vpc/LoadBalancerPool.svg


文件差异内容过多而无法显示
+ 109 - 0
src/main/webapp/img/lib/ibm/vpc/ObjectStorage.svg


文件差异内容过多而无法显示
+ 75 - 0
src/main/webapp/img/lib/ibm/vpc/PublicTag.svg


文件差异内容过多而无法显示
+ 75 - 0
src/main/webapp/img/lib/ibm/vpc/RegionTag.svg


文件差异内容过多而无法显示
+ 57 - 0
src/main/webapp/img/lib/ibm/vpc/Rules.svg


文件差异内容过多而无法显示
+ 108 - 0
src/main/webapp/img/lib/ibm/vpc/SubnetTag.svg


文件差异内容过多而无法显示
+ 75 - 0
src/main/webapp/img/lib/ibm/vpc/VPCTag.svg


文件差异内容过多而无法显示
+ 124 - 0
src/main/webapp/img/lib/ibm/vpc/VPNConnection.svg


文件差异内容过多而无法显示
+ 124 - 0
src/main/webapp/img/lib/ibm/vpc/VPNGateway.svg


文件差异内容过多而无法显示
+ 57 - 0
src/main/webapp/img/lib/ibm/vpc/VPNPolicy.svg


文件差异内容过多而无法显示
+ 75 - 0
src/main/webapp/img/lib/ibm/vpc/ZoneTag.svg


文件差异内容过多而无法显示
+ 735 - 726
src/main/webapp/js/app.min.js


+ 1 - 3
src/main/webapp/js/diagramly/App.js

@@ -3369,9 +3369,7 @@ App.prototype.saveFile = function(forceDialog, success)
 			{
 				this.hideDialog();
 			}), mxResources.get('saveAs'), mxResources.get('download'), null, null, allowTab,
-				(this.isOffline()) ? null :
-				'https://desk.draw.io/support/solutions/articles/16000042485',
-				true, rowLimit, null, null, null, this.editor.fileExtensions);
+				null, true, rowLimit, null, null, null, this.editor.fileExtensions);
 			
 			this.showDialog(dlg.container, 460, (serviceCount > rowLimit) ? 390 : 270, true, true);
 			dlg.init();

+ 64 - 56
src/main/webapp/js/diagramly/Dialogs.js

@@ -3354,6 +3354,17 @@ var NewDialog = function(editorUi, compact, showName, callback, createOnly, canc
 	btns.style.left = '40px';
 	btns.style.bottom = '24px';
 	btns.style.right = '40px';
+	
+	if (!compact && !editorUi.isOffline() && showName && callback == null && !createOnly)
+	{
+		var helpBtn = mxUtils.button(mxResources.get('help'), function()
+		{
+			editorUi.openLink('https://support.draw.io/display/DO/Creating+and+Opening+Files');
+		});
+		
+		helpBtn.className = 'geBtn';	
+		btns.appendChild(helpBtn);
+	}
 
 	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
@@ -3371,17 +3382,6 @@ var NewDialog = function(editorUi, compact, showName, callback, createOnly, canc
 	{
 		btns.appendChild(cancelBtn);
 	}
-	
-	if (!compact && !editorUi.isOffline() && showName && callback == null && !createOnly)
-	{
-		var helpBtn = mxUtils.button(mxResources.get('help'), function()
-		{
-			editorUi.openLink('https://support.draw.io/display/DO/Creating+and+Opening+Files');
-		});
-		
-		helpBtn.className = 'geBtn';	
-		btns.appendChild(helpBtn);
-	}
 
 	if (!compact && urlParams['embed'] != '1' && !createOnly)
 	{
@@ -3461,7 +3461,10 @@ var CreateDialog = function(editorUi, title, createFn, cancelFn, dlgTitle, btnLa
 	overrideExtension = (overrideExtension != null) ? overrideExtension : true;
 	allowBrowser = (allowBrowser != null) ? allowBrowser : true;
 	rowLimit = (rowLimit != null) ? rowLimit : 4;
+
 	var div = document.createElement('div');
+	div.style.whiteSpace = 'nowrap';
+	
 	var showButtons = true;
 	
 	if (cancelFn == null)
@@ -3482,6 +3485,7 @@ var CreateDialog = function(editorUi, title, createFn, cancelFn, dlgTitle, btnLa
 	nameInput.style.width = '280px';
 	nameInput.style.marginLeft = '10px';
 	nameInput.style.marginBottom = '20px';
+	nameInput.style.maxWidth = '70%';
 		
 	this.init = function()
 	{
@@ -3857,7 +3861,7 @@ var CreateDialog = function(editorUi, title, createFn, cancelFn, dlgTitle, btnLa
 	{
 		btns.appendChild(cancelBtn);
 	}
-	
+
 	function create(mode)
 	{
 		var title = nameInput.value;
@@ -4662,25 +4666,13 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn, showPages)
 	btns.style.marginTop = '20px';
 	btns.style.textAlign = 'right';
 	
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
-	{
-		editorUi.hideDialog();
-	});
-	cancelBtn.style.verticalAlign = 'middle';
-	cancelBtn.className = 'geBtn';
-	
-	if (editorUi.editor.cancelFirst)
-	{
-		btns.appendChild(cancelBtn);
-	}
-	
 	var helpBtn = mxUtils.button(mxResources.get('help'), function()
 	{
 		editorUi.openLink('https://desk.draw.io/solution/articles/16000080137');
 	});
+
 	helpBtn.style.verticalAlign = 'middle';
 	helpBtn.className = 'geBtn';
-	
 	btns.appendChild(helpBtn);
 
 	if (editorUi.isOffline() && !mxClient.IS_CHROMEAPP)
@@ -4688,6 +4680,18 @@ var LinkDialog = function(editorUi, initialValue, btnLabel, fn, showPages)
 		helpBtn.style.display = 'none';
 	}
 	
+	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	{
+		editorUi.hideDialog();
+	});
+	cancelBtn.style.verticalAlign = 'middle';
+	cancelBtn.className = 'geBtn';
+	
+	if (editorUi.editor.cancelFirst)
+	{
+		btns.appendChild(cancelBtn);
+	}
+	
 	LinkDialog.selectedDocs = null;
 	
 	LinkDialog.filePicked = function(data)
@@ -7191,12 +7195,14 @@ var PluginsDialog = function(editorUi)
 		editorUi.showDialog(dlg.container, 300, 80, true, true);
 		dlg.init();
 	});
+	
 	addBtn.className = 'geBtn';
 	
 	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
 	});
+	
 	cancelBtn.className = 'geBtn';
 	
 	var applyBtn = mxUtils.button(mxResources.get('apply'), function()
@@ -7206,8 +7212,14 @@ var PluginsDialog = function(editorUi)
 		editorUi.hideDialog();
 		editorUi.alert(mxResources.get('restartForChangeRequired'));
 	});
+	
 	applyBtn.className = 'geBtn gePrimaryBtn';
 
+	var buttons = document.createElement('div');
+	buttons.style.marginTop = '14px';
+	buttons.style.textAlign = 'right';
+
+
 	var helpBtn = mxUtils.button(mxResources.get('help'), function()
 	{
 		editorUi.openLink('https://desk.draw.io/support/solutions/articles/16000056430');
@@ -7220,20 +7232,16 @@ var PluginsDialog = function(editorUi)
 		helpBtn.style.display = 'none';
 	}
 	
-	var buttons = document.createElement('div');
-	buttons.style.marginTop = '14px';
-	buttons.style.textAlign = 'right';
-
+	buttons.appendChild(helpBtn);
+	
 	if (editorUi.editor.cancelFirst)
 	{
 		buttons.appendChild(cancelBtn);
-		buttons.appendChild(helpBtn);
 		buttons.appendChild(addBtn);
 		buttons.appendChild(applyBtn);
 	}
 	else
 	{
-		buttons.appendChild(helpBtn);
 		buttons.appendChild(addBtn);
 		buttons.appendChild(applyBtn);
 		buttons.appendChild(cancelBtn);
@@ -8584,17 +8592,6 @@ var EditShapeDialog = function(editorUi, cell, title, w, h)
 	td.style.whiteSpace = 'nowrap';
 	td.setAttribute('align', 'right');
 	
-	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
-	{
-		editorUi.hideDialog();
-	});
-	cancelBtn.className = 'geBtn';
-	
-	if (editorUi.editor.cancelFirst)
-	{
-		td.appendChild(cancelBtn);
-	}
-	
 	if (!editorUi.isOffline())
 	{
 		var helpBtn = mxUtils.button(mxResources.get('help'), function()
@@ -8606,6 +8603,17 @@ var EditShapeDialog = function(editorUi, cell, title, w, h)
 		td.appendChild(helpBtn);
 	}
 	
+	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
+	{
+		editorUi.hideDialog();
+	});
+	cancelBtn.className = 'geBtn';
+	
+	if (editorUi.editor.cancelFirst)
+	{
+		td.appendChild(cancelBtn);
+	}
+
 	var updateShape = function(targetGraph, targetCell, hide)
 	{
 		var newValue = nameInput.value;
@@ -8709,7 +8717,18 @@ var CustomDialog = function(editorUi, content, okFn, cancelFn, okButtonText, hel
 	{
 		btns.appendChild(buttonsContent);
 	}
-
+	
+	if (!editorUi.isOffline() && helpLink != null)
+	{
+		var helpBtn = mxUtils.button(mxResources.get('help'), function()
+		{
+			editorUi.openLink(helpLink);
+		});
+		
+		helpBtn.className = 'geBtn';
+		btns.appendChild(helpBtn);
+	}
+	
 	var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 	{
 		editorUi.hideDialog();
@@ -8719,6 +8738,7 @@ var CustomDialog = function(editorUi, content, okFn, cancelFn, okButtonText, hel
 			cancelFn();
 		}
 	});
+	
 	cancelBtn.className = 'geBtn';
 	
 	if (hideCancel)
@@ -8726,23 +8746,11 @@ var CustomDialog = function(editorUi, content, okFn, cancelFn, okButtonText, hel
 		cancelBtn.style.display = 'none';
 	}
 	
-	
 	if (editorUi.editor.cancelFirst)
 	{
 		btns.appendChild(cancelBtn);
 	}
-	
-	if (!editorUi.isOffline() && helpLink != null)
-	{
-		var helpBtn = mxUtils.button(mxResources.get('help'), function()
-		{
-			editorUi.openLink(helpLink);
-		});
-		
-		helpBtn.className = 'geBtn';	
-		btns.appendChild(helpBtn);
-	}
-	
+
 	var okBtn = mxUtils.button(okButtonText || mxResources.get('ok'), function()
 	{
 		editorUi.hideDialog();

+ 0 - 110
src/main/webapp/js/diagramly/Editor.js

@@ -4900,116 +4900,6 @@
 	
 })();
 
-/**
- * 
- */
-var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, buttonText2, fn2, hide, buttonText3, fn3)
-{
-	hide = (hide != null) ? hide : true;
-	
-	var div = document.createElement('div');
-	div.style.textAlign = 'center';
-
-	if (title != null)
-	{
-		var hd = document.createElement('div');
-		hd.style.padding = '0px';
-		hd.style.margin = '0px';
-		hd.style.fontSize = '18px';
-		hd.style.paddingBottom = '16px';
-		hd.style.marginBottom = '10px';
-		hd.style.borderBottom = '1px solid #c0c0c0';
-		hd.style.color = 'gray';
-		hd.style.whiteSpace = 'nowrap';
-		hd.style.textOverflow = 'ellipsis';
-		hd.style.overflow = 'hidden';
-		mxUtils.write(hd, title);
-		hd.setAttribute('title', title);
-		div.appendChild(hd);
-	}
-
-	var p2 = document.createElement('div');
-	p2.style.lineHeight = '1.2em';
-	p2.style.padding = '6px';
-	p2.innerHTML = message;
-	div.appendChild(p2);
-	
-	var btns = document.createElement('div');
-	btns.style.marginTop = '12px';
-	btns.style.textAlign = 'center';
-	
-	if (retry != null)
-	{
-		var retryBtn = mxUtils.button(mxResources.get('tryAgain'), function()
-		{
-			editorUi.hideDialog();
-			retry();
-		});
-		retryBtn.className = 'geBtn';
-		btns.appendChild(retryBtn);
-		
-		btns.style.textAlign = 'center';
-	}
-	
-	if (buttonText3 != null)
-	{
-		var btn3 = mxUtils.button(buttonText3, function()
-		{
-			if (fn3 != null)
-			{
-				fn3();
-			}
-		});
-		
-		btn3.className = 'geBtn';
-		btns.appendChild(btn3);
-	}
-	
-	var btn = mxUtils.button(buttonText, function()
-	{
-		if (hide)
-		{
-			editorUi.hideDialog();
-		}
-		
-		if (fn != null)
-		{
-			fn();
-		}
-	});
-	
-	btn.className = 'geBtn';
-	btns.appendChild(btn);
-
-	if (buttonText2 != null)
-	{
-		var mainBtn = mxUtils.button(buttonText2, function()
-		{
-			if (hide)
-			{
-				editorUi.hideDialog();
-			}
-			
-			if (fn2 != null)
-			{
-				fn2();
-			}
-		});
-		
-		mainBtn.className = 'geBtn gePrimaryBtn';
-		btns.appendChild(mainBtn);
-	}
-
-	this.init = function()
-	{
-		btn.focus();
-	};
-	
-	div.appendChild(btns);
-
-	this.container = div;
-};
-
 // Extends codec for ChangePageSetup
 (function()
 {

+ 4 - 20
src/main/webapp/js/diagramly/EditorUi.js

@@ -3648,23 +3648,7 @@
 			fn();
 		}
 	};
-	
-	/**
-	 * Translates this point by the given vector.
-	 * 
-	 * @param {number} dx X-coordinate of the translation.
-	 * @param {number} dy Y-coordinate of the translation.
-	 */
-	EditorUi.prototype.showError = function(title, msg, btn, fn, retry, btn2, fn2, btn3, fn3, w, h, hide, onClose)
-	{
-		var height = (msg != null && msg.length > 120) ? 180 : 150;
-		var dlg = new ErrorDialog(this, title, msg, btn || mxResources.get('ok'),
-			fn, retry, btn2, fn2, hide, btn3, fn3);
-		this.showDialog(dlg.container, w || 340, h || ((msg != null && msg.length > 120) ?
-			180 : 150), true, false, onClose);
-		dlg.init();
-	};
-	
+
 	/**
 	 * Translates this point by the given vector.
 	 * 
@@ -6752,8 +6736,6 @@
 	 */
 	EditorUi.prototype.convertLucidChart = function(data, success, error)
 	{
-		console.log(data);
-		
 		var delayed = mxUtils.bind(this, function()
 		{
 			this.loadingExtensions = false;
@@ -7068,7 +7050,9 @@
 	 */
 	EditorUi.prototype.isLucidChartData = function(data)
 	{
-		return data != null && data.substring(0, 26) == '{"state":"{\\"Properties\\":';
+		return data != null && (data.substring(0, 26) ==
+			'{"state":"{\\"Properties\\":' ||
+			data.substring(0, 14) == '{"Properties":');
 	};
 
 	/**

+ 19 - 8
src/main/webapp/js/diagramly/ElectronApp.js

@@ -412,21 +412,30 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
 	{
 		var paths = argsObj.args;
 		
-		// If a file is passed 
-		if (paths !== undefined && paths[0] != null)
+		// If a file is passed
+		if (paths !== undefined && paths[0] != null && this.spinner.spin(document.body, mxResources.get('loading')))
 		{
 			var path = paths[0];
+			this.hideDialog();
 			
-			var success = mxUtils.bind(this, function(fileEntry, data, stat)
+			var success = mxUtils.bind(this, function(fileEntry, data, stat, name)
 			{
-				var file = new LocalFile(this, data, '');
-				file.fileObject = fileEntry;
-				file.stat = stat;
-				this.fileLoaded(file);
+				this.spinner.stop();
+				
+				if (data != null)
+				{
+					var file = new LocalFile(this, data, name || '');
+					file.fileObject = fileEntry;
+					file.stat = stat;
+					
+					this.fileLoaded(file);
+				}
 			});
 			
 			var error = mxUtils.bind(this, function(e)
 			{
+				this.spinner.stop();
+				
 				if (e.code === 'ENOENT')
 				{
 					var title = path.replace(/^.*[\\\/]/, '');
@@ -642,10 +651,12 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
 			    			{
 			    				this.handleError(e, mxResources.get('errorLoadingFile'));
 			    			}
+							
+							fn();
 						}
 						else
 						{
-							this.openLocalFile(xml, name);
+							fn(null, xml, null, name);
 						}
 					}), null, name);
 					

+ 12 - 5
src/main/webapp/js/diagramly/Extensions.js

@@ -4201,13 +4201,11 @@ LucidImporter = {};
 		// Extracts and sorts all pages
 		var pages = [];
 
-		if (state.state != null)
+		function addPages(obj)
 		{
-			state = JSON.parse(state.state);
-			
-			for (var id in state.Pages)
+			for (var id in obj.Pages)
 			{
-				pages.push(state.Pages[id]);
+				pages.push(obj.Pages[id]);
 			}
 			
 			pages.sort(function(a, b)
@@ -4225,6 +4223,15 @@ LucidImporter = {};
 			    	return 0;
 			    }
 			});
+		};
+		
+		if (state.state != null)
+		{
+			addPages(JSON.parse(state.state));
+		}
+		else if (state.Pages != null)
+		{
+			addPages(state);
 		}
 		else
 		{

+ 2 - 1
src/main/webapp/js/diagramly/GraphViewer.js

@@ -115,6 +115,7 @@ GraphViewer.prototype.init = function(container, xmlNode, graphConfig)
 			var render = mxUtils.bind(this, function()
 			{
 				this.graph = new Graph(container);
+				this.graph.defaultPageBackgroundColor = 'transparent';
 				this.graph.transparentBackground = false;
 				
 				if (this.graphConfig.move)
@@ -1434,7 +1435,7 @@ GraphViewer.prototype.showLocalLightbox = function()
 	
 	// Workaround for lost reference with same ID
 	Graph.prototype.shadowId = 'dropShadow';
-	
+
 	// Disables refresh
 	ui.refresh = function() {};
 	

+ 6 - 1
src/main/webapp/js/diagramly/Minimal.js

@@ -392,7 +392,7 @@ EditorUi.initMinimalTheme = function()
 		if (this.userElement != null)
 		{
 			var elt = this.userElement;
-    		elt.style.cssText = 'display:inline-block;position:relative;margin-right:4px;cursor:pointer;';
+    		elt.style.cssText = 'position:relative;margin-right:4px;cursor:pointer;display:' + elt.style.display;
     		elt.className = 'geToolbarButton';
     		elt.innerHTML = '';
 			elt.style.backgroundImage = 'url(' + Editor.userImage + ')';
@@ -403,6 +403,11 @@ EditorUi.initMinimalTheme = function()
         	elt.style.width = '24px';
         	elt.style.cssFloat = 'right';
         	elt.setAttribute('title', mxResources.get('changeUser'));
+        	
+        	if (elt.style.display != 'none')
+        	{
+        		elt.style.display = 'inline-block';
+        	}
 		}
     };
     

+ 146 - 112
src/main/webapp/js/diagramly/sidebar/Sidebar-AWS4.js

@@ -31,8 +31,8 @@
 		this.addAWS4ComputePalette(s, w, h, w2, gn, sb);
 		this.addAWS4CustomerEngagementPalette(s, w, h, w2, gn, sb);
 		this.addAWS4DatabasePalette(s, w, h, w2, gn, sb);
-		this.addAWS4DesktopAppStreamingPalette(s, w, h, w2, gn, sb);
 		this.addAWS4DeveloperToolsPalette(s, w, h, w2, gn, sb);
+		this.addAWS4EndUserComputingPalette(s, w, h, w2, gn, sb);
 		this.addAWS4GameTechPalette(s, w, h, w2, gn, sb);
 		this.addAWS4InternetOfThingsPalette(s, w, h, w2, gn, sb);
 		this.addAWS4MachineLearningPalette(s, w, h, w2, gn, sb);
@@ -85,8 +85,6 @@
 		[
 			 this.createVertexTemplateEntry(n3 + 'resourceIcon;resIcon=' + gn + '.marketplace;',
 					 s * 78, s * 78, '', 'Marketplace', null, null, this.getTagsForStencil(gn, 'marketplace', dt).join(' ')),
-			 this.createVertexTemplateEntry(n + 'aws_cloud;',
-					 s * 78, s * 78, '', 'AWS Cloud', null, null, this.getTagsForStencil(gn, 'cloud', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'client;',
 					 s * 78, s * 76, '', 'Client', null, null, this.getTagsForStencil(gn, 'client', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'corporate_data_center;',
@@ -100,7 +98,7 @@
 			 this.createVertexTemplateEntry(n + 'internet;',
 					 s * 78, s * 48, '', 'Internet', null, null, this.getTagsForStencil(gn, 'internet', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'internet_alt1;',
-					 s * 78, s * 75, '', 'Internet', null, null, this.getTagsForStencil(gn, 'internet', dt).join(' ')),
+					 s * 78, s * 48, '', 'Internet', null, null, this.getTagsForStencil(gn, 'internet', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'internet_alt2;',
 					 s * 78, s * 78, '', 'Internet Gateway', null, null, this.getTagsForStencil(gn, 'internet gateway', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'mobile_client;',
@@ -121,12 +119,10 @@
 					 s * 78, s * 78, '', 'User', null, null, this.getTagsForStencil(gn, 'user', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'users;',
 					 s * 78, s * 78, '', 'Users', null, null, this.getTagsForStencil(gn, 'users', dt).join(' ')),
-			 this.createVertexTemplateEntry(n2 + 'external_toolkit;',
+			 this.createVertexTemplateEntry(n + 'external_toolkit;',
 					 s * 68, s * 78, '', 'Toolkit', null, null, this.getTagsForStencil(gn, 'external toolkit', dt).join(' ')),
-			 this.createVertexTemplateEntry(n2 + 'external_sdk;',
-					 s * 68, s * 78, '', 'SDK', null, null, this.getTagsForStencil(gn, 'external sdk software development kit', dt).join(' ')),
-			 this.createVertexTemplateEntry(n + 'virtual_private_cloud;',
-					 s * 78, s * 48, '', 'Virtual Private Cloud', null, null, this.getTagsForStencil(gn, 'virtual private cloud vpc', dt).join(' '))
+			 this.createVertexTemplateEntry(n + 'external_sdk;',
+					 s * 68, s * 78, '', 'SDK', null, null, this.getTagsForStencil(gn, 'external sdk software development kit', dt).join(' '))
 		]);
 	};
 
@@ -237,7 +233,7 @@
 			 this.createVertexTemplateEntry(n + 'search_documents;',
 					 s * 68, s * 78, '', 'Search Documents', null, null, this.getTagsForStencil(gn, 'search documents', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'cluster;',
-					 s * 78, s * 78, '', 'EMR Cluster', null, null, this.getTagsForStencil(gn, 'emr cluster', dt).join(' ')),
+					 s * 78, s * 78, '', 'HDFS Cluster', null, null, this.getTagsForStencil(gn, 'hdfs cluster', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'emr_engine;',
 					 s * 78, s * 59, '', 'EMR Engine', null, null, this.getTagsForStencil(gn, 'emr engine', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'emr_engine_mapr_m3;',
@@ -247,15 +243,15 @@
 			 this.createVertexTemplateEntry(n + 'emr_engine_mapr_m7;',
 					 s * 78, s * 59, '', 'EMR Engine MapR M7', null, null, this.getTagsForStencil(gn, 'emr engine mapr m7', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'hdfs_cluster;',
-					 s * 78, s * 78, '', 'HDFS Cluster', null, null, this.getTagsForStencil(gn, 'hdfs cluster', dt).join(' ')),
+					 s * 78, s * 78, '', 'Cluster', null, null, this.getTagsForStencil(gn, 'cluster', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'dense_compute_node;',
 					 s * 78, s * 78, '', 'Dense Compute Node', null, null, this.getTagsForStencil(gn, 'dense compute node', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'dense_storage_node;',
 					 s * 78, s * 78, '', 'Dense Storage Node', null, null, this.getTagsForStencil(gn, 'dense storage node', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'glue_crawlers;',
-					 s * 78, s * 78, '', 'Glue Crawlers', null, null, this.getTagsForStencil(gn, 'glue crawlers', dt).join(' ')),
+					 s * 78, s * 78, '', 'Crawler', null, null, this.getTagsForStencil(gn, 'crawler', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'glue_data_catalog;',
-					 s * 72, s * 78, '', 'Glue Data Catalog', null, null, this.getTagsForStencil(gn, 'glue data catalog', dt).join(' '))
+					 s * 72, s * 78, '', 'Data Catalog', null, null, this.getTagsForStencil(gn, 'data catalog', dt).join(' '))
 		]);
 	};
 
@@ -340,7 +336,7 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.managed_blockchain;',
 					 w2, w2, '', 'Managed Blockchain', null, null, this.getTagsForStencil(gn, 'managed blockchain', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.quantum_ledger_database;',
-					 w2, w2, '', 'Quantum Ledger Database', null, null, this.getTagsForStencil(gn, 'quantum ledger database', dt).join(' ')),
+					 w2, w2, '', 'Quantum Ledger Database (QLDB)', null, null, this.getTagsForStencil(gn, 'quantum ledger database', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.blockchain;',
 					 w2, w2, '', 'Blockchain', null, null, this.getTagsForStencil(gn, 'blockchain', dt).join(' '))
 		]);
@@ -352,14 +348,12 @@
 		var n2 = 'outlineConnect=0;fontColor=#232F3E;gradientColor=#F54749;gradientDirection=north;fillColor=#C7131F;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;' + mxConstants.STYLE_SHAPE + "=mxgraph.aws4.";
 		var dt = 'aws amazon web service business applications';
 		
-		this.addPaletteFunctions('aws4Business Applications', 'AWS / Applications', false,
+		this.addPaletteFunctions('aws4Business Applications', 'AWS / Business Applications', false,
 		[
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.alexa_for_business;',
 					 w2, w2, '', 'Alexa for Business', null, null, this.getTagsForStencil(gn, 'alexa for business', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.chime;',
 					 w2, w2, '', 'Chime', null, null, this.getTagsForStencil(gn, 'chime', dt).join(' ')),
-			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.workdocs;',
-					 w2, w2, '', 'WorkDocs', null, null, this.getTagsForStencil(gn, 'workdocs', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.workmail;',
 					 w2, w2, '', 'WorkMail', null, null, this.getTagsForStencil(gn, 'workmail', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.business_application;',
@@ -435,7 +429,7 @@
 			 this.createVertexTemplateEntry(n + 'x1_instance2;',
 					 s * 48, s * 48, '', 'X1 Instance', null, null, this.getTagsForStencil(gn, 'x1', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'z1d_instance;',
-					 s * 48, s * 48, '', 'Z1d Instance', null, null, this.getTagsForStencil(gn, 'z1d', dt).join(' '))
+					 s * 48, s * 48, '', 'z1d Instance', null, null, this.getTagsForStencil(gn, 'z1d', dt).join(' '))
 		]);
 	};
 
@@ -489,21 +483,21 @@
 			 this.createVertexTemplateEntry(n + 'registry;',
 					 s * 78, s * 78, '', 'Registry', null, null, this.getTagsForStencil(gn, 'registry', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'container_1;',
-					 s * 78, s * 50, '', 'ECS Container', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
+					 s * 78, s * 50, '', 'Container', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'container_2;',
-					 s * 78, s * 50, '', 'ECS Container', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
+					 s * 78, s * 50, '', 'Container', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'container_3;',
-					 s * 78, s * 50, '', 'ECS Container', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
+					 s * 78, s * 50, '', 'Container', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'container_registry_image;',
 					 s * 78, s * 78, '', 'Image', null, null, this.getTagsForStencil(gn, 'image', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'ecs_service;',
-					 s * 64, s * 78, '', 'ECS Service', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
+					 s * 64, s * 78, '', 'Service', null, null, this.getTagsForStencil(gn, 'ecs elastic container service', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'ecs_task;',
-					 s * 59, s * 78, '', 'ECS Task', null, null, this.getTagsForStencil(gn, 'ecs elastic container service task', dt).join(' ')),
+					 s * 59, s * 78, '', 'Task', null, null, this.getTagsForStencil(gn, 'ecs elastic container service task', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'application;',
-					 s * 50, s * 78, '', 'Elastic Beanstalk Application', null, null, this.getTagsForStencil(gn, 'elastic beanstalk application', dt).join(' ')),
+					 s * 50, s * 78, '', 'Application', null, null, this.getTagsForStencil(gn, 'elastic beanstalk application', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'deployment;',
-					 s * 78, s * 74, '', 'Elastic Beanstalk Deployment', null, null, this.getTagsForStencil(gn, 'elastic beanstalk deployment', dt).join(' ')),
+					 s * 78, s * 74, '', 'Deployment', null, null, this.getTagsForStencil(gn, 'elastic beanstalk deployment', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'lambda_function;',
 					 s * 78, s * 78, '', 'Lambda Function', null, null, this.getTagsForStencil(gn, 'lambda function', dt).join(' '))
 		]);
@@ -527,7 +521,7 @@
 					 w2, w2, '', 'Customer Engagement', null, null, this.getTagsForStencil(gn, 'customer engagement', dt).join(' ')),
 					 
 			 this.createVertexTemplateEntry(n + 'email;',
-					 s * 78, s * 69, '', 'Simple Email Service', null, null, this.getTagsForStencil(gn, 'simple email service ses', dt).join(' '))
+					 s * 78, s * 69, '', 'Email', null, null, this.getTagsForStencil(gn, 'email', dt).join(' '))
 		]);
 	};
 
@@ -542,7 +536,7 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.aurora;',
 					 w2, w2, '', 'Aurora', null, null, this.getTagsForStencil(gn, 'aurora', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.documentdb_with_mongodb_compatibility;',
-					 w2, w2, '', 'DocumentDB with MongoDB Compatibility', null, null, this.getTagsForStencil(gn, 'documentdb with mongodb compatibility', dt).join(' ')),
+					 w2, w2, '', 'DocumentDB (with MongoDB Compatibility)', null, null, this.getTagsForStencil(gn, 'documentdb with mongodb compatibility', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.dynamodb;',
 					 w2, w2, '', 'DynamoDB', null, null, this.getTagsForStencil(gn, 'dynamodb', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.elasticache;',
@@ -565,19 +559,19 @@
 					 w2, w2, '', 'Database', null, null, this.getTagsForStencil(gn, 'database', dt).join(' ')),
 					 
 			 this.createVertexTemplateEntry(n + 'attribute;',
-					 s * 78, s * 78, '', 'DynamoDB Attribute', null, null, this.getTagsForStencil(gn, 'dynamodb dynamo db database attribute', dt).join(' ')),
+					 s * 78, s * 78, '', 'Attribute', null, null, this.getTagsForStencil(gn, 'dynamodb dynamo db database attribute', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'attributes;',
-					 s * 78, s * 78, '', 'DynamoDB Attributes', null, null, this.getTagsForStencil(gn, 'dynamodb dynamo db database attributes', dt).join(' ')),
+					 s * 78, s * 78, '', 'Attributes', null, null, this.getTagsForStencil(gn, 'dynamodb dynamo db database attributes', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'global_secondary_index;',
-					 s * 78, s * 78, '', 'DynamoDB Global Secondary Index', null, null, this.getTagsForStencil(gn, 'global secondary index', dt).join(' ')),
+					 s * 78, s * 78, '', 'Global Secondary Index', null, null, this.getTagsForStencil(gn, 'global secondary index', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'item;',
-					 s * 78, s * 78, '', 'DynamoDB Item', null, null, this.getTagsForStencil(gn, 'item', dt).join(' ')),
+					 s * 78, s * 78, '', 'Item', null, null, this.getTagsForStencil(gn, 'item', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'items;',
-					 s * 78, s * 78, '', 'DynamoDB Items', null, null, this.getTagsForStencil(gn, 'items', dt).join(' ')),
+					 s * 78, s * 78, '', 'Items', null, null, this.getTagsForStencil(gn, 'items', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'table;',
-					 s * 78, s * 78, '', 'DynamoDB Table', null, null, this.getTagsForStencil(gn, 'table', dt).join(' ')),
+					 s * 78, s * 78, '', 'Table', null, null, this.getTagsForStencil(gn, 'table', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'cache_node;',
-					 s * 78, s * 78, '', 'ElastiCache Cache Node', null, null, this.getTagsForStencil(gn, 'elasticache elastic cache node', dt).join(' ')),
+					 s * 78, s * 78, '', 'Cache Node', null, null, this.getTagsForStencil(gn, 'elasticache elastic cache node', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'elasticache_for_memcached;',
 					 s * 78, s * 69, '', 'ElastiCache for Memcached', null, null, this.getTagsForStencil(gn, 'elasticache for memcached', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'elasticache_for_redis;',
@@ -591,20 +585,24 @@
 		]);
 	};
 
-	Sidebar.prototype.addAWS4DesktopAppStreamingPalette = function(s, w, h, w2, gn, sb)
+	Sidebar.prototype.addAWS4EndUserComputingPalette = function(s, w, h, w2, gn, sb)
 	{
 		var n = 'outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#116D5B;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;' + mxConstants.STYLE_SHAPE + "=mxgraph.aws4.";
 		var n2 = 'outlineConnect=0;fontColor=#232F3E;gradientColor=#4AB29A;gradientDirection=north;fillColor=#116D5B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;' + mxConstants.STYLE_SHAPE + "=mxgraph.aws4.";
 		var dt = 'aws amazon web service db database';
 		
-		this.addPaletteFunctions('aws4Desktop App Streaming', 'AWS / Desktop & App Streaming', false,
+		this.addPaletteFunctions('aws4End User Computing', 'AWS / End User Computing', false,
 		[
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.appstream_20;',
 					 w2, w2, '', 'Appstream 2.0', null, null, this.getTagsForStencil(gn, 'appstream', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.workspaces;',
 					 w2, w2, '', 'Workspaces', null, null, this.getTagsForStencil(gn, 'workspaces', dt).join(' ')),
+			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.worklink;',
+					 w2, w2, '', 'WorkLink', null, null, this.getTagsForStencil(gn, 'worklink', dt).join(' ')),
+			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.workdocs;',
+					 w2, w2, '', 'WorkDocs', null, null, this.getTagsForStencil(gn, 'workdocs', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.desktop_and_app_streaming;',
-					 w2, w2, '', 'Desktop and App Streaming', null, null, this.getTagsForStencil(gn, 'desktop and app streaming', dt).join(' '))
+					 w2, w2, '', 'End User Computing', null, null, this.getTagsForStencil(gn, 'desktop and app streaming', dt).join(' '))
 		]);
 	};
 
@@ -681,18 +679,24 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.greengrass;',
 					 w2, w2, '', 'Greengrass', null, null, this.getTagsForStencil(gn, 'greengrass', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.iot_sitewise;',
-					 w2, w2, '', 'Sitewise', null, null, this.getTagsForStencil(gn, 'sitewise', dt).join(' ')),
+					 w2, w2, '', 'SiteWise', null, null, this.getTagsForStencil(gn, 'sitewise', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.iot_things_graph;',
 					 w2, w2, '', 'Graph', null, null, this.getTagsForStencil(gn, 'graph', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.internet_of_things;',
 					 w2, w2, '', 'Internet of Things', null, null, this.getTagsForStencil(gn, '', dt).join(' ')),
 					 
 			 this.createVertexTemplateEntry(n + 'iot_analytics_channel;',
-					 s * 65, s * 78, '', 'Analytics Channel', null, null, this.getTagsForStencil(gn, 'analytics channel', dt).join(' ')),
+					 s * 65, s * 78, '', 'Channel', null, null, this.getTagsForStencil(gn, 'analytics channel', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'data_set;',
+					 s * 63, s * 78, '', 'Data Set', null, null, this.getTagsForStencil(gn, 'data set', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'iot_analytics_data_store;',
-					 s * 54, s * 78, '', 'Analytics Data Store', null, null, this.getTagsForStencil(gn, 'analytics data store', dt).join(' ')),
+					 s * 54, s * 78, '', 'Data Store', null, null, this.getTagsForStencil(gn, 'analytics data store', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'iot_analytics_pipeline;',
-					 s * 78, s * 42, '', 'Analytics Pipeline', null, null, this.getTagsForStencil(gn, 'analytics pipeline', dt).join(' ')),
+					 s * 78, s * 42, '', 'Pipeline', null, null, this.getTagsForStencil(gn, 'analytics pipeline', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'notebook;',
+					 s * 68, s * 78, '', 'Notebook', null, null, this.getTagsForStencil(gn, 'notebook', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'connector;',
+					 s * 78, s * 29, '', 'Connector', null, null, this.getTagsForStencil(gn, 'notebook', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'action;',
 					 s * 78, s * 78, '', 'Action', null, null, this.getTagsForStencil(gn, 'action', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'actuator;',
@@ -714,7 +718,7 @@
 			 this.createVertexTemplateEntry(n + 'cart;',
 					 s * 78, s * 78, '', 'Cart', null, null, this.getTagsForStencil(gn, 'cart', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'certificate_manager;',
-					 s * 59, s * 78, '', 'Certificate Manager', null, null, this.getTagsForStencil(gn, 'certificate manager', dt).join(' ')),
+					 s * 59, s * 78, '', 'Certificate', null, null, this.getTagsForStencil(gn, 'certificate manager', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'coffee_pot;',
 					 s * 78, s * 78, '', 'Coffee Pot', null, null, this.getTagsForStencil(gn, 'coffee pot', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'desired_state;',
@@ -824,13 +828,19 @@
 					 w2, w2, '', 'Machine Learning', null, null, this.getTagsForStencil(gn, 'machine learning', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.tensorflow_on_aws;',
 					 w2, w2, '', 'TensorFlow on AWS', null, null, this.getTagsForStencil(gn, 'tensorflow on aws', dt).join(' ')),
+			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.deep_learning_containers;',
+					 w2, w2, '', 'Deep Learning Containers', null, null, this.getTagsForStencil(gn, 'deep learning containers', dt).join(' ')),
 					 
+			 this.createVertexTemplateEntry(n + 'rekognition_image;',
+					 s * 77, s * 78, '', 'Rekognition image', null, null, this.getTagsForStencil(gn, 'rekognition image', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'rekognition_video;',
+					 s * 77, s * 78, '', 'Rekognition video', null, null, this.getTagsForStencil(gn, 'rekognition video', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'sagemaker_model;',
-					 s * 78, s * 78, '', 'SageMaker Model', null, null, this.getTagsForStencil(gn, 'sagemaker model', dt).join(' ')),
+					 s * 78, s * 78, '', 'Model', null, null, this.getTagsForStencil(gn, 'sagemaker model', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'sagemaker_notebook;',
-					 s * 68, s * 78, '', 'SageMaker Notebook', null, null, this.getTagsForStencil(gn, 'sagemaker notebook', dt).join(' ')),
+					 s * 68, s * 78, '', 'Notebook', null, null, this.getTagsForStencil(gn, 'sagemaker notebook', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'sagemaker_train;',
-					 s * 78, s * 65, '', 'SageMaker Train', null, null, this.getTagsForStencil(gn, 'sagemaker train', dt).join(' '))
+					 s * 78, s * 65, '', 'Train', null, null, this.getTagsForStencil(gn, 'sagemaker train', dt).join(' '))
 		]);
 	};
 
@@ -845,13 +855,13 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.cloudwatch;',
 					 w2, w2, '', 'CloudWatch', null, null, this.getTagsForStencil(gn, 'cloudwatch', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.autoscaling;',
-					 w2, w2, '', 'Auto-Scaling', null, null, this.getTagsForStencil(gn, 'autoscaling', dt).join(' ')),
+					 w2, w2, '', 'Auto Scaling', null, null, this.getTagsForStencil(gn, 'auto scaling', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.cloudformation;',
 					 w2, w2, '', 'CloudFormation', null, null, this.getTagsForStencil(gn, 'cloudformation', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.cloudtrail;',
 					 w2, w2, '', 'CloudTrail', null, null, this.getTagsForStencil(gn, 'cloudtrail', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.command_line_interface;',
-					 w2, w2, '', 'Command-Line Interface', null, null, this.getTagsForStencil(gn, 'command line interface', dt).join(' ')),
+					 w2, w2, '', 'Command Line Interface', null, null, this.getTagsForStencil(gn, 'command line interface', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.config;',
 					 w2, w2, '', 'Config', null, null, this.getTagsForStencil(gn, 'config', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.license_manager;',
@@ -871,70 +881,70 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.trusted_advisor;',
 					 w2, w2, '', 'Trusted Advisor', null, null, this.getTagsForStencil(gn, 'trusted advisor', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.well_architected_tool;',
-					 w2, w2, '', 'Well Architected Tool', null, null, this.getTagsForStencil(gn, 'well architected tool', dt).join(' ')),
+					 w2, w2, '', 'Well-Architected Tool', null, null, this.getTagsForStencil(gn, 'well architected tool', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.control_tower;',
 					 w2, w2, '', 'Control Tower', null, null, this.getTagsForStencil(gn, 'control tower', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.management_and_governance;',
 					 w2, w2, '', 'Management and Governance', null, null, this.getTagsForStencil(gn, 'management and governance', dt).join(' ')),
 					 
 			 this.createVertexTemplateEntry(n + 'alarm;',
-					 s * 78, s * 78, '', 'CloudWatch Alarm', null, null, this.getTagsForStencil(gn, 'cloudwatch alarm', dt).join(' ')),
+					 s * 78, s * 78, '', 'Alarm', null, null, this.getTagsForStencil(gn, 'cloudwatch alarm', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'event_event_based;',
-					 s * 78, s * 78, '', 'CloudWatch Event Event-Based', null, null, this.getTagsForStencil(gn, 'cloudwatch event based', dt).join(' ')),
+					 s * 78, s * 78, '', 'Event (Event-Based)', null, null, this.getTagsForStencil(gn, 'cloudwatch event based', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'event_time_based;',
-					 s * 78, s * 78, '', 'CloudWatch Event Time-Based', null, null, this.getTagsForStencil(gn, 'cloudwatch event time based', dt).join(' ')),
+					 s * 78, s * 78, '', 'Event (Time-Based)', null, null, this.getTagsForStencil(gn, 'cloudwatch event time based', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'rule_2;',
-					 s * 78, s * 76, '', 'CloudWatch Rule', null, null, this.getTagsForStencil(gn, 'cloudwatch rule', dt).join(' ')),
+					 s * 78, s * 76, '', 'Rule', null, null, this.getTagsForStencil(gn, 'cloudwatch rule', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'change_set;',
-					 s * 65, s * 78, '', 'CloudFormation Change Set', null, null, this.getTagsForStencil(gn, 'cloudformation change set', dt).join(' ')),
+					 s * 65, s * 78, '', 'Change Set', null, null, this.getTagsForStencil(gn, 'cloudformation change set', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'stack;',
-					 s * 78, s * 76, '', 'CloudFormation Stack', null, null, this.getTagsForStencil(gn, 'cloudformation stack', dt).join(' ')),
+					 s * 78, s * 76, '', 'Stack', null, null, this.getTagsForStencil(gn, 'cloudformation stack', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'template;',
-					 s * 65, s * 78, '', 'CloudFormation Template', null, null, this.getTagsForStencil(gn, 'cloudformation template', dt).join(' ')),
+					 s * 65, s * 78, '', 'Template', null, null, this.getTagsForStencil(gn, 'cloudformation template', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'opsworks_apps;',
-					 s * 78, s * 78, '', 'OpsWorks Apps', null, null, this.getTagsForStencil(gn, 'opsworks apps applications', dt).join(' ')),
+					 s * 78, s * 78, '', 'Apps', null, null, this.getTagsForStencil(gn, 'opsworks apps applications', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'deployments;',
-					 s * 65, s * 78, '', 'OpsWorks Deployments', null, null, this.getTagsForStencil(gn, 'opsworks deployments', dt).join(' ')),
+					 s * 65, s * 78, '', 'Deployments', null, null, this.getTagsForStencil(gn, 'opsworks deployments', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'instances_2;',
-					 s * 78, s * 78, '', 'OpsWorks Instances', null, null, this.getTagsForStencil(gn, 'opsworks instances', dt).join(' ')),
+					 s * 78, s * 78, '', 'Instances', null, null, this.getTagsForStencil(gn, 'opsworks instances', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'layers;',
-					 s * 78, s * 78, '', 'OpsWorks Layers', null, null, this.getTagsForStencil(gn, 'opsworks layers', dt).join(' ')),
+					 s * 78, s * 78, '', 'Layers', null, null, this.getTagsForStencil(gn, 'opsworks layers', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'monitoring;',
-					 s * 78, s * 58, '', 'OpsWorks Monitoring', null, null, this.getTagsForStencil(gn, 'opsworks monitoring', dt).join(' ')),
+					 s * 78, s * 58, '', 'Monitoring', null, null, this.getTagsForStencil(gn, 'opsworks monitoring', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'opsworks_permissions;',
-					 s * 54, s * 78, '', 'OpsWorks Permissions', null, null, this.getTagsForStencil(gn, 'opsworks permissions', dt).join(' ')),
+					 s * 54, s * 78, '', 'Permissions', null, null, this.getTagsForStencil(gn, 'opsworks permissions', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'resources;',
-					 s * 68, s * 78, '', 'OpsWorks Resources', null, null, this.getTagsForStencil(gn, 'opsworks resources', dt).join(' ')),
+					 s * 68, s * 78, '', 'Resources', null, null, this.getTagsForStencil(gn, 'opsworks resources', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'stack2;',
 					 s * 78, s * 78, '', 'Stack', null, null, this.getTagsForStencil(gn, 'stack', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'shield_shield_advanced;',
 					 s * 70, s * 78, '', 'Shield Advanced', null, null, this.getTagsForStencil(gn, 'shield advanced', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'automation;',
-					 s * 78, s * 78, '', 'Systems Manager Automation', null, null, this.getTagsForStencil(gn, 'systems manager automation', dt).join(' ')),
+					 s * 78, s * 78, '', 'Automation', null, null, this.getTagsForStencil(gn, 'systems manager automation', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'documents;',
-					 s * 64, s * 78, '', 'Systems Manager Documents', null, null, this.getTagsForStencil(gn, 'systems manager documents', dt).join(' ')),
+					 s * 64, s * 78, '', 'Documents', null, null, this.getTagsForStencil(gn, 'systems manager documents', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'inventory;',
-					 s * 78, s * 78, '', 'Systems Manager Inventory', null, null, this.getTagsForStencil(gn, 'systems manager inventory', dt).join(' ')),
+					 s * 78, s * 78, '', 'Inventory', null, null, this.getTagsForStencil(gn, 'systems manager inventory', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'maintenance_windows;',
-					 s * 78, s * 78, '', 'Systems Manager Maintenance Windows', null, null, this.getTagsForStencil(gn, 'systems manager maintenance windows', dt).join(' ')),
+					 s * 78, s * 78, '', 'Maintenance Windows', null, null, this.getTagsForStencil(gn, 'systems manager maintenance windows', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'parameter_store;',
-					 s * 75, s * 78, '', 'Systems Manager Parameter Store', null, null, this.getTagsForStencil(gn, 'systems manager parameter store', dt).join(' ')),
+					 s * 75, s * 78, '', 'Parameter Store', null, null, this.getTagsForStencil(gn, 'systems manager parameter store', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'patch_manager;',
-					 s * 78, s * 78, '', 'Systems Manager Patch Manager', null, null, this.getTagsForStencil(gn, 'systems manager patch manager', dt).join(' ')),
+					 s * 78, s * 78, '', 'Patch Manager', null, null, this.getTagsForStencil(gn, 'systems manager patch manager', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'run_command;',
-					 s * 78, s * 55, '', 'Systems Manager Run Command', null, null, this.getTagsForStencil(gn, 'systems manager run command', dt).join(' ')),
+					 s * 78, s * 55, '', 'Run Command', null, null, this.getTagsForStencil(gn, 'systems manager run command', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'state_manager;',
-					 s * 78, s * 78, '', 'Systems Manager State Manager', null, null, this.getTagsForStencil(gn, 'systems manager state', dt).join(' ')),
+					 s * 78, s * 78, '', 'State Manager', null, null, this.getTagsForStencil(gn, 'systems manager state', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'checklist;',
-					 s * 66, s * 78, '', 'Trusted Advisor Checklist', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist', dt).join(' ')),
+					 s * 66, s * 78, '', 'Checklist', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'checklist_cost;',
-					 s * 78, s * 78, '', 'Trusted Advisor Checklist Cost', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist cost', dt).join(' ')),
+					 s * 78, s * 78, '', 'Checklist Cost', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist cost', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'checklist_fault_tolerant;',
-					 s * 78, s * 77, '', 'Trusted Advisor Checklist Fault Tolerant', null, null, this.getTagsForStencil(gn, 'trusted advisor fault tolerant', dt).join(' ')),
+					 s * 78, s * 77, '', 'Checklist Fault Tolerant', null, null, this.getTagsForStencil(gn, 'trusted advisor fault tolerant', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'checklist_performance;',
-					 s * 78, s * 78, '', 'Trusted Advisor Checklist Performance', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist performance', dt).join(' ')),
+					 s * 78, s * 78, '', 'Checklist Performance', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist performance', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'checklist_security;',
-					 s * 78, s * 78, '', 'Trusted Advisor Checklist Security', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist security', dt).join(' '))
+					 s * 78, s * 78, '', 'Checklist Security', null, null, this.getTagsForStencil(gn, 'trusted advisor checklist security', dt).join(' '))
 		]);
 	};
 
@@ -994,7 +1004,10 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.transfer_for_sftp;',
 					 w2, w2, '', 'Transfer for SFTP', null, null, this.getTagsForStencil(gn, 'transfer for sftp', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.migration_and_transfer;',
-					 w2, w2, '', 'Migration and Transfer', null, null, this.getTagsForStencil(gn, 'migration and transfer', dt).join(' '))
+					 w2, w2, '', 'Migration and Transfer', null, null, this.getTagsForStencil(gn, 'migration and transfer', dt).join(' ')),
+					 
+			 this.createVertexTemplateEntry(n + 'agent2;',
+					 s * 78, s * 78, '', 'Agent', null, null, this.getTagsForStencil(gn, 'agent', dt).join(' '))
 		]);
 	};
 
@@ -1017,7 +1030,10 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.device_farm;',
 					 w2, w2, '', 'Device Farm', null, null, this.getTagsForStencil(gn, 'device farm', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.mobile;',
-					 w2, w2, '', 'Mobile', null, null, this.getTagsForStencil(gn, 'mobile', dt).join(' '))
+					 w2, w2, '', 'Mobile', null, null, this.getTagsForStencil(gn, 'mobile', dt).join(' ')),
+					 
+			 this.createVertexTemplateEntry(n + 'endpoint;',
+					 s * 78, s * 78, '', 'Endpoint', null, null, this.getTagsForStencil(gn, 'endpoint', dt).join(' '))
 		]);
 	};
 
@@ -1043,6 +1059,10 @@
 					 w2, w2, '', 'App Mesh', null, null, this.getTagsForStencil(gn, 'app application mesh', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.client_vpn;',
 					 w2, w2, '', 'Client VPN', null, null, this.getTagsForStencil(gn, 'client vpn virtual private network', dt).join(' ')),
+			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.site_to_site_vpn;',
+					 w2, w2, '', 'Site-to-Site VPN', null, null, this.getTagsForStencil(gn, 'site to site s2s vpn virtual private network', dt).join(' ')),
+			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.elastic_load_balancing;',
+					 w2, w2, '', 'Elastic Load Balancing', null, null, this.getTagsForStencil(gn, 'elastic load balancing', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.cloud_map;',
 					 w2, w2, '', 'Cloud Map', null, null, this.getTagsForStencil(gn, 'cloud map', dt).join(' ')),
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.direct_connect;',
@@ -1054,6 +1074,8 @@
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.networking_and_content_delivery;',
 					 w2, w2, '', 'Networking and Content Delivery', null, null, this.getTagsForStencil(gn, 'networking and content delivery', dt).join(' ')),
 					 
+			 this.createVertexTemplateEntry(n + 'endpoint;',
+					 s * 78, s * 78, '', 'Endpoint', null, null, this.getTagsForStencil(gn, 'endpoint', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'download_distribution;',
 					 s * 78, s * 78, '', 'Download Distribution', null, null, this.getTagsForStencil(gn, 'download distribution', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'edge_location;',
@@ -1061,33 +1083,39 @@
 			 this.createVertexTemplateEntry(n + 'streaming_distribution;',
 					 s * 78, s * 78, '', 'Streaming Distribution', null, null, this.getTagsForStencil(gn, 'streaming distribution', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'hosted_zone;',
-					 s * 78, s * 77, '', 'Route 53 Hosted Zone', null, null, this.getTagsForStencil(gn, 'hosted zone', dt).join(' ')),
+					 s * 78, s * 77, '', 'Hosted Zone', null, null, this.getTagsForStencil(gn, 'hosted zone', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'route_table;',
-					 s * 78, s * 76, '', 'Route 53 Route Table', null, null, this.getTagsForStencil(gn, 'route table', dt).join(' ')),
+					 s * 78, s * 76, '', 'Route Table', null, null, this.getTagsForStencil(gn, 'route table', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'customer_gateway;',
-					 s * 78, s * 78, '', 'VPC Customer Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud customer gateway', dt).join(' ')),
+					 s * 78, s * 78, '', 'Router', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud customer gateway', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'elastic_network_adapter;',
-					 s * 78, s * 78, '', 'VPC Elastic Network Adapter', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud elastic network adapter', dt).join(' ')),
+					 s * 78, s * 78, '', 'Elastic Network Adapter', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud elastic network adapter', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'elastic_network_interface;',
-					 s * 78, s * 78, '', 'VPC Elastic Network Interface', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud elastic network interface', dt).join(' ')),
+					 s * 78, s * 78, '', 'Elastic Network Interface', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud elastic network interface', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'endpoints;',
-					 s * 78, s * 78, '', 'VPC Endpoints', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud endpoints', dt).join(' ')),
+					 s * 78, s * 78, '', 'Endpoints', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud endpoints', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'flow_logs;',
-					 s * 78, s * 78, '', 'VPC Flow Logs', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud flow logs', dt).join(' ')),
+					 s * 78, s * 78, '', 'Flow Logs', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud flow logs', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'internet_gateway;',
-					 s * 78, s * 78, '', 'VPC Internet Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud internet gateway', dt).join(' ')),
+					 s * 78, s * 78, '', 'Internet Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud internet gateway', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'nat_gateway;',
-					 s * 78, s * 78, '', 'VPC NAT Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud nat gateway', dt).join(' ')),
+					 s * 78, s * 78, '', 'NAT Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud nat gateway', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'network_access_control_list;',
-					 s * 78, s * 78, '', 'VPC Network Access Control List', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud network access control list', dt).join(' ')),
+					 s * 78, s * 78, '', 'Network Access Control List', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud network access control list', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'peering;',
-					 s * 78, s * 78, '', 'VPC Peering', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud network peering', dt).join(' ')),
+					 s * 78, s * 78, '', 'Peering', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud network peering', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'application_load_balancer;',
+					 s * 78, s * 78, '', 'Application Load Balancer', null, null, this.getTagsForStencil(gn, 'application load balancer', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'classic_load_balancer;',
+					 s * 78, s * 78, '', 'Classic Load Balancer', null, null, this.getTagsForStencil(gn, 'classic load balancer', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'network_load_balancer;',
+					 s * 78, s * 78, '', 'Network Load Balancer', null, null, this.getTagsForStencil(gn, 'network load balancer', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'router;',
-					 s * 78, s * 78, '', 'VPC Router', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud network router', dt).join(' ')),
+					 s * 78, s * 78, '', 'Customer Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud network router', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'vpn_connection;',
-					 s * 70, s * 78, '', 'VPC VPN Connection', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud vpn network connection', dt).join(' ')),
+					 s * 70, s * 78, '', 'VPN Connection', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud vpn network connection', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'vpn_gateway;',
-					 s * 78, s * 78, '', 'VPC VPN Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud vpn network gateway', dt).join(' '))
+					 s * 78, s * 78, '', 'VPN Gateway', null, null, this.getTagsForStencil(gn, 'vpc virtual private cloud vpn network gateway', dt).join(' '))
 		]);
 	};
 
@@ -1101,6 +1129,8 @@
 		[
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.robotics;',
 					 w2, w2, '', 'Robotics', null, null, this.getTagsForStencil(gn, 'robotics', dt).join(' ')),
+			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.robomaker;',
+					 w2, w2, '', 'RoboMaker', null, null, this.getTagsForStencil(gn, 'robomaker', dt).join(' ')),
 					 
 			 this.createVertexTemplateEntry(n + 'simulation;',
 					 s * 78, s * 64, '', 'Simulation', null, null, this.getTagsForStencil(gn, 'simulation', dt).join(' ')),
@@ -1109,7 +1139,7 @@
 			 this.createVertexTemplateEntry(n + 'development_environment;',
 					 s * 78, s * 71, '', 'Development Environment', null, null, this.getTagsForStencil(gn, 'development environment', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'cloud_extension_ros;',
-					 s * 78, s * 78, '', 'Cloud Extension ROS', null, null, this.getTagsForStencil(gn, 'cloud extension ros', dt).join(' '))
+					 s * 78, s * 78, '', 'Cloud Extensions ROS', null, null, this.getTagsForStencil(gn, 'cloud extension ros', dt).join(' '))
 		]);
 	};
 	
@@ -1122,7 +1152,9 @@
 		this.addPaletteFunctions('aws4Satellite', 'AWS / Satellite', false,
 		[
 			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.satellite;',
-					 w2, w2, '', 'Satellite', null, null, this.getTagsForStencil(gn, 'satellite', dt).join(' '))
+					 w2, w2, '', 'Satellite', null, null, this.getTagsForStencil(gn, 'satellite', dt).join(' ')),
+			 this.createVertexTemplateEntry(n2 + 'resourceIcon;resIcon=' + gn + '.ground_station;',
+					 w2, w2, '', 'Ground Station', null, null, this.getTagsForStencil(gn, 'ground station', dt).join(' '))
 		]);
 	};
 	
@@ -1178,25 +1210,25 @@
 			 this.createVertexTemplateEntry(n + 'certificate_manager_2;',
 					 s * 78, s * 72, '', 'Certificate Manager', null, null, this.getTagsForStencil(gn, 'certificate manager', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'addon;',
-					 s * 78, s * 40, '', 'Identity and Access Management - IAM Add-on', null, null, this.getTagsForStencil(gn, 'identity and access management iam addon add on', dt).join(' ')),
+					 s * 78, s * 40, '', 'Add-on', null, null, this.getTagsForStencil(gn, 'identity and access management iam addon add on', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'sts;',
-					 s * 78, s * 50, '', 'Identity and Access Management - IAM AWS STS', null, null, this.getTagsForStencil(gn, 'identity and access management iam sts', dt).join(' ')),
+					 s * 78, s * 50, '', 'STS', null, null, this.getTagsForStencil(gn, 'identity and access management iam sts', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'sts_alternate;',
-					 s * 62, s * 78, '', 'Identity and Access Management - IAM AWS STS', null, null, this.getTagsForStencil(gn, 'identity and access management iam sts', dt).join(' ')),
+					 s * 62, s * 78, '', 'STS', null, null, this.getTagsForStencil(gn, 'identity and access management iam sts', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'data_encryption_key;',
-					 s * 62, s * 78, '', 'Identity and Access Management - IAM Data Encryption Key', null, null, this.getTagsForStencil(gn, 'identity and access management iam data encryption key', dt).join(' ')),
+					 s * 62, s * 78, '', 'Data Encryption Key', null, null, this.getTagsForStencil(gn, 'identity and access management iam data encryption key', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'encrypted_data;',
-					 s * 62, s * 78, '', 'Identity and Access Management - IAM Encrypted Data', null, null, this.getTagsForStencil(gn, 'identity and access management iam encrypted data', dt).join(' ')),
+					 s * 62, s * 78, '', 'Encrypted Data', null, null, this.getTagsForStencil(gn, 'identity and access management iam encrypted data', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'long_term_security_credential;',
-					 s * 78, s * 69, '', 'Identity and Access Management - IAM Long Term Security Credential', null, null, this.getTagsForStencil(gn, 'identity and access management iam long term security credential', dt).join(' ')),
+					 s * 78, s * 69, '', 'Long Term Security Credential', null, null, this.getTagsForStencil(gn, 'identity and access management iam long term security credential', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'mfa_token;',
-					 s * 78, s * 78, '', 'Identity and Access Management - IAM MFA Token', null, null, this.getTagsForStencil(gn, 'identity and access management iam mfa token', dt).join(' ')),
+					 s * 78, s * 78, '', 'MFA Token', null, null, this.getTagsForStencil(gn, 'identity and access management iam mfa token', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'permissions;',
-					 s * 62, s * 78, '', 'Identity and Access Management - IAM Permissions', null, null, this.getTagsForStencil(gn, 'identity and access management iam permissions', dt).join(' ')),
+					 s * 62, s * 78, '', 'Permissions', null, null, this.getTagsForStencil(gn, 'identity and access management iam permissions', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'role;',
-					 s * 78, s * 44, '', 'Identity and Access Management - IAM Role', null, null, this.getTagsForStencil(gn, 'identity and access management iam role', dt).join(' ')),
+					 s * 78, s * 44, '', 'Role', null, null, this.getTagsForStencil(gn, 'identity and access management iam role', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'temporary_security_credential;',
-					 s * 77, s * 78, '', 'Identity and Access Management - IAM Temporary Security Credential', null, null, this.getTagsForStencil(gn, 'identity and access management iam temporary security credential', dt).join(' ')),
+					 s * 77, s * 78, '', 'Temporary Security Credential', null, null, this.getTagsForStencil(gn, 'identity and access management iam temporary security credential', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'organizations_account;',
 					 s * 74, s * 78, '', 'Organizations Account', null, null, this.getTagsForStencil(gn, 'organizations account', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'organizations_organizational_unit;',
@@ -1204,7 +1236,7 @@
 			 this.createVertexTemplateEntry(n + 'shield_shield_advanced;',
 					 s * 70, s * 78, '', 'Shield Advanced', null, null, this.getTagsForStencil(gn, 'shield advanced', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'filtering_rule;',
-					 s * 78, s * 78, '', 'WAF Filtering Rule', null, null, this.getTagsForStencil(gn, 'filtering rule', dt).join(' '))
+					 s * 78, s * 78, '', 'Filtering Rule', null, null, this.getTagsForStencil(gn, 'filtering rule', dt).join(' '))
 		]);
 	};
 
@@ -1247,24 +1279,26 @@
 					 s * 56, s * 78, '', 'Snapshot', null, null, this.getTagsForStencil(gn, 'snapshot', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'volume;',
 					 s * 62, s * 78, '', 'Volume', null, null, this.getTagsForStencil(gn, 'volume', dt).join(' ')),
+			 this.createVertexTemplateEntry(n + 'file_system;',
+					 s * 78, s * 73, '', 'File System', null, null, this.getTagsForStencil(gn, 'file system', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'archive;',
-					 s * 63, s * 78, '', 'S3 Glacier Archive', null, null, this.getTagsForStencil(gn, 's3 simple storage service glacier archive', dt).join(' ')),
+					 s * 63, s * 78, '', 'Vault', null, null, this.getTagsForStencil(gn, 's3 simple storage service glacier archive', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'vault;',
-					 s * 62, s * 78, '', 'S3 Glacier Vault', null, null, this.getTagsForStencil(gn, 's3 simple storage service glacier vault', dt).join(' ')),
+					 s * 62, s * 78, '', 'Archive', null, null, this.getTagsForStencil(gn, 's3 simple storage service glacier vault', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'bucket;',
-					 s * 75, s * 78, '', 'S3 Bucket', null, null, this.getTagsForStencil(gn, 's3 simple storage service bucket', dt).join(' ')),
+					 s * 75, s * 78, '', 'Bucket', null, null, this.getTagsForStencil(gn, 's3 simple storage service bucket', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'bucket_with_objects;',
-					 s * 75, s * 78, '', 'S3 Bucket with Objects', null, null, this.getTagsForStencil(gn, 's3 simple storage service bucket with objects', dt).join(' ')),
+					 s * 75, s * 78, '', 'Bucket with Objects', null, null, this.getTagsForStencil(gn, 's3 simple storage service bucket with objects', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'object;',
-					 s * 78, s * 78, '', 'S3 Object', null, null, this.getTagsForStencil(gn, 's3 simple storage service object', dt).join(' ')),
+					 s * 78, s * 78, '', 'Object', null, null, this.getTagsForStencil(gn, 's3 simple storage service object', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'import_export;',
 					 s * 78, s * 61, '', 'Snowball Import Export', null, null, this.getTagsForStencil(gn, 'snowball import export', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'cached_volume;',
-					 s * 62, s * 78, '', 'Storage Gateway Cached Volume', null, null, this.getTagsForStencil(gn, 'storage gateway cached volume', dt).join(' ')),
+					 s * 62, s * 78, '', 'Cached Volume', null, null, this.getTagsForStencil(gn, 'storage gateway cached volume', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'non_cached_volume;',
-					 s * 62, s * 78, '', 'Starge Gateway Non-Cached Volume', null, null, this.getTagsForStencil(gn, 'storage gateway non cached volume', dt).join(' ')),
+					 s * 62, s * 78, '', 'Non-Cached Volume', null, null, this.getTagsForStencil(gn, 'storage gateway non cached volume', dt).join(' ')),
 			 this.createVertexTemplateEntry(n + 'virtual_tape_library;',
-					 s * 62, s * 78, '', 'Starge Gateway Virtual Tape Library', null, null, this.getTagsForStencil(gn, 'storage gateway virtual tape library vtl', dt).join(' '))
+					 s * 62, s * 78, '', 'Virtual Tape Library', null, null, this.getTagsForStencil(gn, 'storage gateway virtual tape library vtl', dt).join(' '))
 		]);
 	};
 })();

+ 5 - 2
src/main/webapp/js/diagramly/sidebar/Sidebar-Electrical.js

@@ -91,9 +91,12 @@
 			this.createVertexTemplateEntry(meiecl + 'nor;', 66, 80, '', 'NOR (IEC)', null, null, this.getTagsForStencil(gnmeiecl, 'nor', dtmeiecl).join(' ')),
 			this.createVertexTemplateEntry(meiecl + 'not;', 66, 80, '', 'NOT (IEC)', null, null, this.getTagsForStencil(gnmeiecl, 'xor', dtmeiecl).join(' ')),
 			this.createVertexTemplateEntry(meiecl + 'xor;', 60, 80, '', 'XOR (IEC)', null, null, this.getTagsForStencil(gnmeiecl, 'xor', dtmeiecl).join(' ')),
-			this.createVertexTemplateEntry('shadow=0;dashed=0;align=center;fillColor=#ffffff;html=1;strokeWidth=1;shape=mxgraph.electrical.logic_gates.dual_inline_ic;', 
+			this.createVertexTemplateEntry(
+					'shadow=0;dashed=0;align=center;fillColor=#ffffff;html=1;strokeWidth=1;shape=mxgraph.electrical.logic_gates.dual_inline_ic;labelNames=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;', 
 					100, 200, 'IC', 'Dual In-Line IC', null, null, this.getTagsForStencil(gnmel, 'dual inline in line ic integrated circuit', dtmel).join(' ')),
-			this.createVertexTemplateEntry('shadow=0;dashed=0;align=center;fillColor=#ffffff;html=1;strokeWidth=1;shape=mxgraph.electrical.logic_gates.qfp_ic;', 
+			this.createVertexTemplateEntry(
+					'shadow=0;dashed=0;align=center;fillColor=#ffffff;html=1;strokeWidth=1;shape=mxgraph.electrical.logic_gates.qfp_ic;' + 
+					'labelNames=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1;', 
 					200, 200, 'IC', 'Quad Flat Package IC', null, null, this.getTagsForStencil(gnmel, 'quad flat package qfp ic integrated circuit', dtmel).join(' '))
 		]);
 

+ 134 - 65
src/main/webapp/js/diagramly/sidebar/Sidebar-IBM.js

@@ -499,99 +499,168 @@
 		var gn = 'vpc virtual private cloud ';
 		
 		var fns = [
-			 this.createVertexTemplateEntry(s + 'ACLrules.svg;',
-					 d, d, '', 'ACL Rules', false, null, this.getTagsForStencil(gn, 'acl rules', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'BareMEtalServer.svg;',
+			 this.createVertexTemplateEntry(s + 'Instance.svg;',
+					 d, d, '', 'Instance', false, null, this.getTagsForStencil(gn, 'instance', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'LoadBalancer.svg;',
+					 d, d, '', 'Load Balancer', false, null, this.getTagsForStencil(gn, 'load balancer', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'BareMetalServer.svg;',
 					 d, d, '', 'Bare Metal Server', false, null, this.getTagsForStencil(gn, 'bare metal server', dt).join(' ')),
 			 this.createVertexTemplateEntry(s + 'BlockStorage.svg;',
 					 d, d, '', 'Block Storage', false, null, this.getTagsForStencil(gn, 'block storage', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Bridge.svg;',
-					 d, d, '', 'Bridge', false, null, this.getTagsForStencil(gn, 'bridge', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'DirectLink.svg;',
-					 d, d, '', 'Direct Link', false, null, this.getTagsForStencil(gn, 'direct link', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Enterprise.svg;',
-					 d, d, '', 'Enterprise', false, null, this.getTagsForStencil(gn, 'enterprise', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Firewall.svg;',
-					 d, d, '', 'Firewall', false, null, this.getTagsForStencil(gn, 'firewall', dt).join(' ')),
 			 this.createVertexTemplateEntry(s + 'FloatingIP.svg;',
 					 d, d, '', 'Floating IP', false, null, this.getTagsForStencil(gn, 'floating ip internet protocol', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'GatewayAppliance.svg;',
-					 d, d, '', 'Gateway Appliance', false, null, this.getTagsForStencil(gn, 'gateway appliance', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Image.svg;',
-					 d, d, '', 'Image', false, null, this.getTagsForStencil(gn, 'image', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Instance.svg;',
-					 d, d, '', 'Instance', false, null, this.getTagsForStencil(gn, 'instance', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Internet.svg;',
-					 d, d, '', 'Internet', false, null, this.getTagsForStencil(gn, 'internet', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'InternetServices.svg;',
-					 d, d, '', 'Internet Services', false, null, this.getTagsForStencil(gn, 'internet services', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Key.svg;',
-					 d, d, '', 'Key', false, null, this.getTagsForStencil(gn, 'key', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'LoadBalancer.svg;',
-					 d, d, '', 'Load Balancer', false, null, this.getTagsForStencil(gn, 'load balancer', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'Marketplace.svg;',
-					 d, d, '', 'Marketplace', false, null, this.getTagsForStencil(gn, 'marketplace', dt).join(' ')),
 			 this.createVertexTemplateEntry(s + 'PublicGateway.svg;',
 					 d, d, '', 'Public Gateway', false, null, this.getTagsForStencil(gn, 'public gateway', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'ObjectStorage.svg;',
+					 d, d, '', 'Object Storage', false, null, this.getTagsForStencil(gn, 'object storage', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'VPNConnection.svg;',
+					 d, d, '', 'VPN Connection', false, null, this.getTagsForStencil(gn, 'connection', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'VPNGateway.svg;',
+					 d, d, '', 'VPN Gateway', false, null, this.getTagsForStencil(gn, 'gateway', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'DirectLink.svg;',
+					 d, d, '', 'Direct Link', false, null, this.getTagsForStencil(gn, 'direct link', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'ImageService.svg;',
+					 d, d, '', 'Image Service', false, null, this.getTagsForStencil(gn, 'image service', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'LoadBalancerPool.svg;',
+					 d, d, '', 'Load Balancer Pool', false, null, this.getTagsForStencil(gn, 'load balancer pool', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'LoadBalancerListener.svg;',
+					 d, d, '', 'Load Balancer Listener', false, null, this.getTagsForStencil(gn, 'load balancer listener', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'Rules.svg;',
+					 d, d, '', 'Rules', false, null, this.getTagsForStencil(gn, 'load balancer listener', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'Key.svg;',
+					 d, d, '', 'Key', false, null, this.getTagsForStencil(gn, 'key', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'VPNPolicy.svg;',
+					 d, d, '', 'VPN Policy', false, null, this.getTagsForStencil(gn, 'policy', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'InternetServices2.svg;',
+					 d, d, '', 'Internet Services', false, null, this.getTagsForStencil(gn, 'internet services', dt).join(' ')),
 			 this.createVertexTemplateEntry(s + 'Router.svg;',
 					 d, d, '', 'Router', false, null, this.getTagsForStencil(gn, 'router', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'SecurityGroupRules.svg;',
-					 d, d, '', 'Security Group Rules', false, null, this.getTagsForStencil(gn, 'security group rules', dt).join(' ')),
-			 this.createVertexTemplateEntry(s + 'VPN.svg;',
-					 d, d, '', 'VPN', false, null, this.getTagsForStencil(gn, 'vpn virtual private network', dt).join(' ')),
-			 this.createVertexTemplateEntry('swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;dashed=0;strokeWidth=2;',
-					 200, 200, 'CLOUD UNIVERSE', 'Cloud Universe', true, null, this.getTagsForStencil(gn, '', dt).join(' ')),
-  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=none;endFill=0;rounded=0;strokeColor=#EEBC25;strokeWidth=2;', 
-  		 			 d, d, '', 'Data Connector', null, dt + 'data connector'),
-  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=classicThin;endFill=1;rounded=0;strokeColor=#0076BE;strokeWidth=2;', 
-  		 			 d, d, '', 'Directional Private Connector', null, dt + 'directional private connector'),
-  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=classicThin;endFill=1;rounded=0;strokeColor=#FD0000;strokeWidth=2;', 
-  		 			 d, d, '', 'Directional Public Connector', null, dt + 'directional public connector'),
+			 this.createVertexTemplateEntry(s + 'Bridge.svg;',
+					 d, d, '', 'Bridge', false, null, this.getTagsForStencil(gn, 'bridge', dt).join(' ')),
+					 
 			 this.addEntry(dt + 'ibm cloud', function()
 			 {
-				var bg1 = new mxCell('IBM CLOUD', new mxGeometry(0, 11, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;spacingTop=5;dashed=0;strokeWidth=2;');
+				var bg1 = new mxCell('IBM Cloud', new mxGeometry(0, 0, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;spacingTop=1;dashed=0;strokeWidth=1;');
 				bg1.vertex = true;
-				var bg2 = new mxCell('', new mxGeometry(20, -11, 30, 22), s + 'IBMCloud.svg;part=1;');
+				var bg2 = new mxCell('', new mxGeometry(0, 0, 30, 30), s + 'CloudTag.svg;part=1;');
 				bg2.vertex = true;
 			    bg1.insert(bg2);
 			    
-			   	return sb.createVertexTemplateFromCells([bg1], 200, 211, 'IBM Cloud');
+			   	return sb.createVertexTemplateFromCells([bg1], 200, 200, 'IBM Cloud');
 			 }),
-			 this.createVertexTemplateEntry('swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;dashed=0;strokeWidth=2;',
-					 200, 200, 'OTHER NETWORK', 'Cloud Universe', true, null, this.getTagsForStencil(gn, '', dt).join(' ')),
-  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=classicThin;endFill=1;rounded=0;strokeColor=#0076BE;strokeWidth=2;startArrow=classicThin;startFill=1;', 
-  		 			 d, d, '', 'Private Connector', null, dt + 'directional private connector'),
-  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=classicThin;endFill=1;rounded=0;strokeColor=#FD0000;strokeWidth=2;startArrow=classicThin;startFill=1;', 
-  		 			 d, d, '', 'Public Connector', null, dt + 'directional private connector'),
-			 this.createVertexTemplateEntry('swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;dashed=1;strokeWidth=2;',
-					 200, 200, 'REGION', 'Region', true, null, this.getTagsForStencil(gn, '', dt).join(' ')),
+					 
+			 this.addEntry(dt + '', function()
+			 {
+				var bg1 = new mxCell('VPC', new mxGeometry(0, 0, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;spacingTop=1;dashed=0;strokeWidth=1;');
+				bg1.vertex = true;
+				var bg2 = new mxCell('', new mxGeometry(0, 0, 30, 30), s + 'VPCTag.svg;part=1;');
+				bg2.vertex = true;
+			    bg1.insert(bg2);
+			    
+			   	return sb.createVertexTemplateFromCells([bg1], 200, 200, 'VPC');
+			 }),
+					 
+			 this.addEntry(dt + '', function()
+			 {
+				var bg1 = new mxCell('Region', new mxGeometry(0, 0, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=0;strokeColor=#00882B;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;dashed=1;strokeWidth=1;container=1;dashPattern=1 1;');
+				bg1.vertex = true;
+				var bg2 = new mxCell('', new mxGeometry(0, 0, 30, 30), s + 'RegionTag.svg;part=1;');
+				bg2.vertex = true;
+			    bg1.insert(bg2);
+			    
+			   	return sb.createVertexTemplateFromCells([bg1], 200, 200, 'Region');
+			 }),
+					 
+			 this.addEntry(dt + '', function()
+			 {
+				var bg1 = new mxCell('Zone', new mxGeometry(0, 0, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=0;strokeColor=#00882B;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;dashed=1;strokeWidth=1;container=1;');
+				bg1.vertex = true;
+				var bg2 = new mxCell('', new mxGeometry(0, 0, 30, 30), s + 'ZoneTag.svg;part=1;');
+				bg2.vertex = true;
+			    bg1.insert(bg2);
+			    
+			   	return sb.createVertexTemplateFromCells([bg1], 200, 200, 'Zone');
+			 }),
+					 
+			 this.addEntry(dt + '', function()
+			 {
+				var bg1 = new mxCell('Subnet', new mxGeometry(0, 0, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#2A8838;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;spacingTop=1;dashed=0;strokeWidth=1;');
+				bg1.vertex = true;
+				var bg2 = new mxCell('', new mxGeometry(0, 0, 30, 40), s + 'SubnetTag.svg;part=1;');
+				bg2.vertex = true;
+			    bg1.insert(bg2);
+			    
+			   	return sb.createVertexTemplateFromCells([bg1], 200, 200, 'Subnet');
+			 }),
+					 
 			 this.createVertexTemplateEntry(
-					 'rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=20;strokeColor=#FD0000;fillColor=none;fontColor=#417CB9;verticalAlign=top;align=center;spacingLeft=5;dashed=1;dashPattern=5 2;labelPosition=center;verticalLabelPosition=bottom;strokeWidth=2;',
-					 200, 200, 'SECURITY GROUP', 'Security Group', true, null, this.getTagsForStencil(gn, '', dt).join(' ')),
-			 this.createVertexTemplateEntry('swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;dashed=0;strokeWidth=2;',
-					 200, 200, 'SERVICES', 'Services', true, null, this.getTagsForStencil(gn, '', dt).join(' ')),
-			 this.addEntry(dt + 'subnet', function()
+					 'rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=0;strokeColor=#FD0000;fillColor=none;fontColor=#000000;verticalAlign=top;align=center;spacingLeft=5;dashed=1;dashPattern=5 2;labelPosition=center;verticalLabelPosition=bottom;strokeWidth=2;',
+					 200, 200, 'Security Group', 'Security Group', true, null, this.getTagsForStencil(gn, '', dt).join(' ')),
+
+			 this.addEntry(dt + '', function()
 			 {
-				var bg1 = new mxCell('SUBNET', new mxGeometry(0, 11, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#FD0000;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;spacingTop=8;dashed=0;strokeWidth=2;');
+				var bg1 = new mxCell('Classic Infrastructure', new mxGeometry(0, 0, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=0;strokeColor=#4376BB;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;dashed=0;strokeWidth=1;container=1;');
 				bg1.vertex = true;
-				var bg2 = new mxCell('', new mxGeometry(20, -11, 19, 26), s + 'Subnet.svg;part=1;');
+				var bg2 = new mxCell('', new mxGeometry(0, 0, 30, 30), s + 'ClassicInfrastructureTag.svg;part=1;');
 				bg2.vertex = true;
-				bg1.insert(bg2);
+			    bg1.insert(bg2);
 			    
-			   	return sb.createVertexTemplateFromCells([bg1], 200, 211, 'Subnet');
+			   	return sb.createVertexTemplateFromCells([bg1], 200, 200, 'Classic Infrastructure');
 			 }),
-			 this.addEntry(dt + 'virtual private cloud', function()
+					 
+			 this.createVertexTemplateEntry('swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=0;strokeColor=#4376BB;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;dashed=0;strokeWidth=1;container=1;',
+					 200, 200, 'Other Group', 'Other Group', true, null, this.getTagsForStencil(gn, '', dt).join(' ')),
+
+			 this.addEntry(dt + '', function()
 			 {
-				var bg1 = new mxCell('VIRTUAL PRIVATE CLOUD', new mxGeometry(0, 11, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;spacingTop=5;dashed=0;strokeWidth=2;');
+				var bg1 = new mxCell('', new mxGeometry(0, 0, 320, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=0;strokeColor=#4376BB;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=5;dashed=0;strokeWidth=1;container=1;');
 				bg1.vertex = true;
-				var bg2 = new mxCell('', new mxGeometry(20, -11, 30, 22), s + 'VirtualPrivateCloud.svg;part=1;');
+				var bg2 = new mxCell('Public', new mxGeometry(15, 0, 30, 30), 'aspect=fixed;perimeter=ellipsePerimeter;html=1;align=center;shadow=0;dashed=0;fontColor=#000000;labelBackgroundColor=none;fontSize=12;spacingTop=-5;image;image=img/lib/ibm/vpc/PublicTag.svg;part=1;');
 				bg2.vertex = true;
 			    bg1.insert(bg2);
+				var bg3 = new mxCell('Enterprise', new mxGeometry(275, 0, 30, 30), 'aspect=fixed;perimeter=ellipsePerimeter;html=1;align=center;shadow=0;dashed=0;fontColor=#000000;labelBackgroundColor=none;fontSize=12;spacingTop=-5;image;image=img/lib/ibm/vpc/EnterpriseTag.svg;part=1;');
+				bg3.vertex = true;
+			    bg1.insert(bg3);
 			    
-			   	return sb.createVertexTemplateFromCells([bg1], 200, 211, 'Virtual Private Cloud');
+				var bg4 = new mxCell('IBM Cloud', new mxGeometry(60, 0, 200, 200), 'swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=0;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fontColor=#000000;verticalAlign=top;align=left;spacingLeft=30;spacingTop=1;dashed=0;strokeWidth=1;');
+				bg4.vertex = true;
+			    bg1.insert(bg4);
+				var bg5 = new mxCell('', new mxGeometry(0, 0, 30, 30), s + 'CloudTag.svg;part=1;');
+				bg5.vertex = true;
+			    bg4.insert(bg5);
+			    
+			   	return sb.createVertexTemplateFromCells([bg1], 320, 200, 'Cloud Universe');
 			 }),
-			 this.createVertexTemplateEntry('swimlane;fontStyle=0;horizontal=1;collapsible=0;startSize=28;swimlaneLine=0;swimlaneFillColor=none;fillColor=none;rounded=1;whiteSpace=wrap;html=1;absoluteArcSize=1;arcSize=12;strokeColor=#417CB9;fillColor=none;fontColor=#417CB9;verticalAlign=top;align=left;spacingLeft=5;dashed=1;strokeWidth=2;',
-					 200, 200, 'ZONE', 'Zone', true, null, this.getTagsForStencil(gn, '', dt).join(' '))
+					 
+
+			 this.createVertexTemplateEntry(s + 'CloudTag.svg;',
+					 d * 0.5, d * 0.5, '', 'IBM Cloud tag', false, null, this.getTagsForStencil(gn, 'cloud tag ibm', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'VPCTag.svg;',
+					 d * 0.5, d * 0.5, '', 'VPC tag', false, null, this.getTagsForStencil(gn, 'tag', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'RegionTag.svg;',
+					 d * 0.5, d * 0.5, '', 'Region tag', false, null, this.getTagsForStencil(gn, 'region tag', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'ZoneTag.svg;',
+					 d * 0.5, d * 0.5, '', 'Zone tag', false, null, this.getTagsForStencil(gn, 'zone tag', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'SubnetTag.svg;',
+					 d * 0.37, d * 0.5, '', 'Subnet tag', false, null, this.getTagsForStencil(gn, 'subnet tag', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'EnterpriseTag.svg;',
+					 d * 0.5, d * 0.5, '', 'Enterprise tag', false, null, this.getTagsForStencil(gn, 'enterprise tag', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'PublicTag.svg;',
+					 d * 0.5, d * 0.5, '', 'Public tag', false, null, this.getTagsForStencil(gn, 'public tag', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'ClassicInfrastructureTag.svg;',
+					 d * 0.5, d * 0.5, '', 'Classic Infrastructure tag', false, null, this.getTagsForStencil(gn, 'classic tag', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'Internet.svg;',
+					 d, d, '', 'Internet', false, null, this.getTagsForStencil(gn, 'internet', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'Enterprise.svg;',
+					 d, d, '', 'Data Center', false, null, this.getTagsForStencil(gn, 'dat acenter', dt).join(' ')),
+			 this.createVertexTemplateEntry(s + 'Enterprise2.svg;',
+					 d, d * 0.8, '', 'Enterprise', false, null, this.getTagsForStencil(gn, 'enterprise', dt).join(' ')),
+  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=classicThin;endFill=1;rounded=0;strokeColor=#000000;strokeWidth=1;startArrow=classicThin;startFill=1;', 
+  		 			 d, d, '', 'Bidirectional Connector', null, dt + 'bidirectional connector'),
+  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=classicThin;endFill=1;rounded=0;strokeColor=#000000;strokeWidth=1;', 
+  		 			 d, d, '', 'Directional Connector', null, dt + 'directional connector'),
+  		 	 this.createEdgeTemplateEntry('edgeStyle=orthogonalEdgeStyle;fontSize=12;html=1;endArrow=none;endFill=0;rounded=0;strokeColor=#000000;strokeWidth=1;', 
+  		 			 d, d, '', 'Nondirectional Connector', null, dt + 'nondirectional connector')
 		];
 			   	
    		this.addPalette('ibmVPC', 'IBM / VPC', false, mxUtils.bind(this, function(content)

+ 1 - 1
src/main/webapp/js/diagramly/sidebar/Sidebar.js

@@ -74,7 +74,7 @@
 	
 	Sidebar.prototype.aws4 = ['Arrows', 'General Resources', 'Illustrations', 'Groups', 'Analytics', 'Application Integration', 'AR VR', 'Cost Management', 'Blockchain', 
 							  'Business Applications', 'EC2 Instance Types', 'Compute', 'Customer Engagement',
-							  'Database', 'Desktop App Streaming', 'Developer Tools', 'Game Tech', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Governance',
+							  'Database', 'End User Computing', 'Developer Tools', 'Game Tech', 'Internet of Things', 'IoT Things', 'IoT Resources', 'Machine Learning', 'Management Governance',
 							  'Media Services', 'Migration Transfer', 'Mobile', 'Network Content Delivery', 'Robotics', 'Satellite', 'Security Identity Compliance', 'Storage'];
 
 	Sidebar.prototype.office = ['Clouds', 'Communications', 'Concepts', 'Databases', 'Devices', 'Security', 'Servers', 'Services', 'Sites', 'Users'];

文件差异内容过多而无法显示
+ 80 - 80
src/main/webapp/js/extensions.min.js


+ 8 - 6
src/main/webapp/js/mxgraph/Dialogs.js

@@ -204,10 +204,9 @@ var ColorDialog = function(editorUi, color, apply, cancelFn)
 	var applyBtn = mxUtils.button(mxResources.get('apply'), function()
 	{
 		var color = input.value;
-		// https://stackoverflow.com/questions/8027423/how-to-check-if-a-string-is-a-valid-hex-color-representation/8027444
-		var colorValid  = /(^#?[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color);
 		
-		if (colorValid)
+		// Blocks any non-alphabetic chars in colors
+		if (/(^#?[a-zA-Z0-9]*$)/.test(color))
 		{
 			ColorDialog.addRecentColor(color, 12);
 			
@@ -216,10 +215,13 @@ var ColorDialog = function(editorUi, color, apply, cancelFn)
 				color = '#' + color;
 			}
 
-			applyFunction(color);			
+			applyFunction(color);
+			editorUi.hideDialog();
+		}
+		else
+		{
+			editorUi.handleError({message: mxResources.get('invalidInput')});	
 		}
-
-		editorUi.hideDialog();
 	});
 	applyBtn.className = 'geBtn gePrimaryBtn';
 	buttons.appendChild(applyBtn);

+ 110 - 0
src/main/webapp/js/mxgraph/Editor.js

@@ -986,6 +986,116 @@ Dialog.prototype.close = function(cancel, isEsc)
 	this.container.parentNode.removeChild(this.container);
 };
 
+/**
+ * 
+ */
+var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, buttonText2, fn2, hide, buttonText3, fn3)
+{
+	hide = (hide != null) ? hide : true;
+	
+	var div = document.createElement('div');
+	div.style.textAlign = 'center';
+
+	if (title != null)
+	{
+		var hd = document.createElement('div');
+		hd.style.padding = '0px';
+		hd.style.margin = '0px';
+		hd.style.fontSize = '18px';
+		hd.style.paddingBottom = '16px';
+		hd.style.marginBottom = '10px';
+		hd.style.borderBottom = '1px solid #c0c0c0';
+		hd.style.color = 'gray';
+		hd.style.whiteSpace = 'nowrap';
+		hd.style.textOverflow = 'ellipsis';
+		hd.style.overflow = 'hidden';
+		mxUtils.write(hd, title);
+		hd.setAttribute('title', title);
+		div.appendChild(hd);
+	}
+
+	var p2 = document.createElement('div');
+	p2.style.lineHeight = '1.2em';
+	p2.style.padding = '6px';
+	p2.innerHTML = message;
+	div.appendChild(p2);
+	
+	var btns = document.createElement('div');
+	btns.style.marginTop = '12px';
+	btns.style.textAlign = 'center';
+	
+	if (retry != null)
+	{
+		var retryBtn = mxUtils.button(mxResources.get('tryAgain'), function()
+		{
+			editorUi.hideDialog();
+			retry();
+		});
+		retryBtn.className = 'geBtn';
+		btns.appendChild(retryBtn);
+		
+		btns.style.textAlign = 'center';
+	}
+	
+	if (buttonText3 != null)
+	{
+		var btn3 = mxUtils.button(buttonText3, function()
+		{
+			if (fn3 != null)
+			{
+				fn3();
+			}
+		});
+		
+		btn3.className = 'geBtn';
+		btns.appendChild(btn3);
+	}
+	
+	var btn = mxUtils.button(buttonText, function()
+	{
+		if (hide)
+		{
+			editorUi.hideDialog();
+		}
+		
+		if (fn != null)
+		{
+			fn();
+		}
+	});
+	
+	btn.className = 'geBtn';
+	btns.appendChild(btn);
+
+	if (buttonText2 != null)
+	{
+		var mainBtn = mxUtils.button(buttonText2, function()
+		{
+			if (hide)
+			{
+				editorUi.hideDialog();
+			}
+			
+			if (fn2 != null)
+			{
+				fn2();
+			}
+		});
+		
+		mainBtn.className = 'geBtn gePrimaryBtn';
+		btns.appendChild(mainBtn);
+	}
+
+	this.init = function()
+	{
+		btn.focus();
+	};
+	
+	div.appendChild(btns);
+
+	this.container = div;
+};
+
 /**
  * Constructs a new print dialog.
  */

+ 46 - 0
src/main/webapp/js/mxgraph/EditorUi.js

@@ -3352,6 +3352,52 @@ EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange)
 	});	
 };
 
+/**
+ * Translates this point by the given vector.
+ * 
+ * @param {number} dx X-coordinate of the translation.
+ * @param {number} dy Y-coordinate of the translation.
+ */
+EditorUi.prototype.handleError = function(resp, title, fn, invokeFnOnClose, notFoundMessage)
+{
+	var e = (resp != null && resp.error != null) ? resp.error : resp;
+
+	if (e != null || title != null)
+	{
+		var msg = mxUtils.htmlEntities(mxResources.get('unknownError'));
+		var btn = mxResources.get('ok');
+		title = (title != null) ? title : mxResources.get('error');
+		
+		if (e != null && e.message != null)
+		{
+			msg = mxUtils.htmlEntities(e.message);
+		}
+
+		this.showError(title, msg, btn, fn, null, null, null, null, null,
+			null, null, null, (invokeFnOnClose) ? fn : null);
+	}
+	else if (fn != null)
+	{
+		fn();
+	}
+};
+
+/**
+ * Translates this point by the given vector.
+ * 
+ * @param {number} dx X-coordinate of the translation.
+ * @param {number} dy Y-coordinate of the translation.
+ */
+EditorUi.prototype.showError = function(title, msg, btn, fn, retry, btn2, fn2, btn3, fn3, w, h, hide, onClose)
+{
+	var height = (msg != null && msg.length > 120) ? 180 : 150;
+	var dlg = new ErrorDialog(this, title, msg, btn || mxResources.get('ok'),
+		fn, retry, btn2, fn2, hide, btn3, fn3);
+	this.showDialog(dlg.container, w || 340, h || ((msg != null && msg.length > 120) ?
+		180 : 150), true, false, onClose);
+	dlg.init();
+};
+
 /**
  * Displays a print dialog.
  */

+ 4 - 3
src/main/webapp/js/mxgraph/Format.js

@@ -1034,9 +1034,8 @@ BaseFormatPanel.prototype.createColorOption = function(label, getColorFn, setCol
 	mxUtils.write(span, label);
 	div.appendChild(span);
 	
-	var applying = false;
 	var value = getColorFn();
-
+	var applying = false;
 	var btn = null;
 
 	var apply = function(color, disableUpdate, forceUpdate)
@@ -1044,9 +1043,11 @@ BaseFormatPanel.prototype.createColorOption = function(label, getColorFn, setCol
 		if (!applying)
 		{
 			applying = true;
+			color = (/(^#?[a-zA-Z0-9]*$)/.test(color)) ? color : defaultColor;
 			btn.innerHTML = '<div style="width:' + ((mxClient.IS_QUIRKS) ? '30' : '36') +
 				'px;height:12px;margin:3px;border:1px solid black;background-color:' +
-				((color != null && color != mxConstants.NONE) ? color : defaultColor) + ';"></div>';
+				mxUtils.htmlEntities((color != null && color != mxConstants.NONE) ?
+				color : defaultColor) + ';"></div>';
 			
 			// Fine-tuning in Firefox, quirks mode and IE8 standards
 			if (mxClient.IS_QUIRKS || document.documentMode == 8)

文件差异内容过多而无法显示
+ 20 - 14
src/main/webapp/js/shapes.min.js


文件差异内容过多而无法显示
+ 1 - 1
src/main/webapp/js/stencils.min.js


文件差异内容过多而无法显示
+ 493 - 492
src/main/webapp/js/viewer.min.js


+ 1 - 0
src/main/webapp/resources/dia.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_am.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_ar.txt

@@ -388,6 +388,7 @@ insertText=‫إضافة نص‬
 inserting=‫إضافة‬
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=‫اسم غير صالح‬
 invalidOrMissingFile=‫ملف غير صالح أو غير موجود‬
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_bg.txt

@@ -388,6 +388,7 @@ insertText=Вмъкване на текст
 inserting=Вмъкване 
 invalidFilename=Диаграмата не трябва да съдържа следните символи: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Вашият лиценз не е валиден. Моля вижте тук <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Невалидно име
 invalidOrMissingFile=Невалиден или липсващ файл
 invalidPublicUrl=Невалиден публичен URL

+ 1 - 0
src/main/webapp/resources/dia_bn.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_bs.txt

@@ -388,6 +388,7 @@ insertText=Umetni tekst
 inserting=Umetanje
 invalidFilename=Imena dijagrama ne smiju sadržavati sljedeće znakove: \ / | : ; { < & + ? = "
 invalidLicenseSeeThisPage=Vaša licenca nije validna, molimo pogledajte ovo <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Netačan naziv
 invalidOrMissingFile=Neispravan ili nepostojeći fajl
 invalidPublicUrl=Neispravan javni URL

+ 1 - 0
src/main/webapp/resources/dia_ca.txt

@@ -388,6 +388,7 @@ insertText=Afegeix text
 inserting=Afegint
 invalidFilename=Els noms dels diagrames no poden contenir els següents caràcters: \ / | : ; { < & + ? = "
 invalidLicenseSeeThisPage=La teva llicència no és vàlida, si us plau mira això <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nom invàlid
 invalidOrMissingFile=Fitxer  no vàlid o desconegut
 invalidPublicUrl=URL públic no vàlid

+ 1 - 0
src/main/webapp/resources/dia_cs.txt

@@ -388,6 +388,7 @@ insertText=Vložit text
 inserting=Vkládání
 invalidFilename=Jména diagramů nesmí obsahovat tyto znaky: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Vaše licence je neplatná, podívejte se prosím na tuto <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">stránku</a>.
+invalidInput=Invalid input
 invalidName=Neplatný název
 invalidOrMissingFile=Neplatný nebo chybějící soubor
 invalidPublicUrl=neplatné veřejné URL

+ 1 - 0
src/main/webapp/resources/dia_da.txt

@@ -388,6 +388,7 @@ insertText=Indsæt tekst
 inserting=Indsætter
 invalidFilename=Diagramnavn må ikke indeholde de følgende tegn: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Din licens er ugyldig, se venligst <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">side</a>.
+invalidInput=Invalid input
 invalidName=Ugyldigt navn
 invalidOrMissingFile=Ugyldig eller manglende fil
 invalidPublicUrl=Ugyldig offentlig URL

+ 1 - 0
src/main/webapp/resources/dia_de.txt

@@ -388,6 +388,7 @@ insertText=Text einfügen
 inserting=Wird eingefügt
 invalidFilename=Diagramm Namen dürfen keine der folgenden Zeichen enthalten\ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Ihre Lizenz ist ungültig, bitte besuchen Sie diese <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">Seite</a>.
+invalidInput=Ungültige Eingabe
 invalidName=Ungültiger Name
 invalidOrMissingFile=Ungültige oder fehlende Datei
 invalidPublicUrl=Ungültige öffentliche URL

+ 1 - 0
src/main/webapp/resources/dia_el.txt

@@ -388,6 +388,7 @@ insertText=Εισαγωγή κειμένου
 inserting=Εισάγοντας
 invalidFilename=Το όνομα του διαγράμματος δεν πρέπει να περιέχει τους παρακάτω χρακτήρες: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Η άδεια χρήσης σας δεν είναι έγκυρη, παρακαλώ δείτε αυτό  <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Μη έγκυρο όνομα
 invalidOrMissingFile=Μη έγκυρο ή ανύπαρκτο αρχείο
 invalidPublicUrl=Μη έγκυρο δημόσιο URL

+ 1 - 0
src/main/webapp/resources/dia_eo.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_es.txt

@@ -388,6 +388,7 @@ insertText=Insertar texto
 inserting=Insertando
 invalidFilename=Los nombres de los diagramas no deben contener los siguientes caracteres: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Su licencia es inválida, por favor vea esta <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">página</a>.
+invalidInput=Invalid input
 invalidName=Nombre inválido
 invalidOrMissingFile=Archivo inválido o no encontrado
 invalidPublicUrl=URL pública inválida

+ 1 - 0
src/main/webapp/resources/dia_et.txt

@@ -388,6 +388,7 @@ insertText=Sisesta tekst
 inserting=Sisestamine
 invalidFilename=Diagrammi nimed ei tohi sisaldada järgnevaid tähemärke:  \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Sinu litsents on kehtete, palun vaata seda <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">lehte</a>.
+invalidInput=Invalid input
 invalidName=Kehtetu nimi
 invalidOrMissingFile=Kehtetu või puuduv fail
 invalidPublicUrl=Kehtetu avalik URL

+ 1 - 0
src/main/webapp/resources/dia_fa.txt

@@ -388,6 +388,7 @@ insertText=‫وارد کردن متن‬
 inserting=‫وارد کردن‬
 invalidFilename=‫نامهای نمودارها نباید شامل کاراکترهای زیر باشد:  \ / | : ; { } < > & + ? = "‬
 invalidLicenseSeeThisPage=‫مجوز شما نامعتبر است. لطفا این بخش را ببینید <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">صفحه</a>.‬
+invalidInput=Invalid input
 invalidName=‫نام نامعتبر‬
 invalidOrMissingFile=‫فایل یا غیرمعتبر است یا وجود ندارد‬
 invalidPublicUrl=‫URL عمومی غیرمعتبر است‬

+ 1 - 0
src/main/webapp/resources/dia_fi.txt

@@ -388,6 +388,7 @@ insertText=Lisää tekstiä
 inserting=Lisätään
 invalidFilename=Kaavioiden nimet eivät saa sisältää seuraavia merkkejä : \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Lisenssi on virheellinen, ole hyvä ja katso tämä <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Virheellinen nimi
 invalidOrMissingFile=Epäkelvollinen tai puuttuva tiedosto
 invalidPublicUrl=Epäkelvollinen julkinen URL

+ 1 - 0
src/main/webapp/resources/dia_fil.txt

@@ -388,6 +388,7 @@ insertText=Magsingit ng teksto
 inserting=Nagsisingit
 invalidFilename=Ang pangalan ng mga Dayagram ay hindi maaaring magtaglay ng sumusunod na mga simbolo: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Ang iyong lisensya ay di wasto. Pki-tingnan ito <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Di wastong pangalan
 invalidOrMissingFile=Di wasto o nawawalang File
 invalidPublicUrl=Di wastong pampublikong File

+ 1 - 0
src/main/webapp/resources/dia_fr.txt

@@ -388,6 +388,7 @@ insertText=Insérer du texte
 inserting=Insertion
 invalidFilename=Le nom des diagrammes ne doit pas contenir les caractères suivants : \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Votre licence n'est pas valide, veuillez vous rendre sur la page suivante <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nom invalide
 invalidOrMissingFile=Fichier invalide ou manquant
 invalidPublicUrl=URL public invalide

+ 1 - 0
src/main/webapp/resources/dia_gu.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_he.txt

@@ -388,6 +388,7 @@ insertText=‫הוספת טקסט‬
 inserting=‫מוסיף‬
 invalidFilename=‫שם הדיאגרמה אינו יכול לכלול את התווים הבאים:  \ / | : ; { } < > & + ? = "‬
 invalidLicenseSeeThisPage=‫הרשיון שלך אינו תקף. בדוק ב <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>‬
+invalidInput=Invalid input
 invalidName=‫שם לא תקין‬
 invalidOrMissingFile=‫קובץ חסר או לא תקין‬
 invalidPublicUrl=‫כתובת URL ציבורית לא תקינה‬

+ 1 - 0
src/main/webapp/resources/dia_hi.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_hr.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_hu.txt

@@ -388,6 +388,7 @@ insertText=Szöveget beszúr
 inserting=Beszúrás
 invalidFilename=A diagram nem tartalmazhatja a következő betűket: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Az engedélye érvénytelen, kérjük tekintse meg ezt <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Érvénytelen név
 invalidOrMissingFile=Érvénytelen vagy hiányzó fájl
 invalidPublicUrl=Érvénytelen nyilvános URL

+ 1 - 0
src/main/webapp/resources/dia_i18n.txt

@@ -388,6 +388,7 @@ insertText=insertText
 inserting=inserting
 invalidFilename=invalidFilename
 invalidLicenseSeeThisPage=invalidLicenseSeeThisPage
+invalidInput=invalidInput
 invalidName=invalidName
 invalidOrMissingFile=invalidOrMissingFile
 invalidPublicUrl=invalidPublicUrl

+ 1 - 0
src/main/webapp/resources/dia_id.txt

@@ -388,6 +388,7 @@ insertText=Sisipkan Teks
 inserting=Menyisipkan
 invalidFilename=Nama diagram tidak boleh mengandung karakter berikut: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Lisensi Anda tidak valid, harap baca tautan ini <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nama tidak valid
 invalidOrMissingFile=Berkas tidak valid atau hilang
 invalidPublicUrl=URL publik tidak valid

+ 1 - 0
src/main/webapp/resources/dia_it.txt

@@ -388,6 +388,7 @@ insertText=Inserisci testo
 inserting=Inserimento in corso
 invalidFilename=Il nome del diagramma non può contenere i seguenti caratteri:  \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=La tua licenza è invalida. Perfavore leggi questo <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nome non valido
 invalidOrMissingFile=File mancante o non valido
 invalidPublicUrl=URL pubblico invalido

+ 1 - 0
src/main/webapp/resources/dia_ja.txt

@@ -388,6 +388,7 @@ insertText=テキスト
 inserting=挿入中
 invalidFilename=ダイアグラム名に次の文字を含めることはできません。 \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=あなたの免許証が有効ではない、これを参照してください<a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=無効な名前です
 invalidOrMissingFile=無効または不明なファイル
 invalidPublicUrl=無効なパブリック URL

+ 1 - 0
src/main/webapp/resources/dia_kn.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_ko.txt

@@ -388,6 +388,7 @@ insertText=텍스트 삽입
 inserting=삽입중
 invalidFilename=다이어그램 이름에 다음 문자들은 사용될 수 없습니다. \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=라이선스가 유효하지 않습니다. <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">페이지</a>를 확인해 주시기 바랍니다.
+invalidInput=Invalid input
 invalidName=유효하지 않은 이름
 invalidOrMissingFile=유효하지 않거나 분실된 파일
 invalidPublicUrl=유효하지 않은 공개 URL

+ 1 - 0
src/main/webapp/resources/dia_lt.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_lv.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_ml.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_mr.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_ms.txt

@@ -388,6 +388,7 @@ insertText=Masukkan Teks
 inserting=Memasukkan
 invalidFilename=Nama gambarajah tidak boleh mengandungi aksara yang berikut: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Lesen anda tidak sah, sila lihat ini <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nama tidak sah
 invalidOrMissingFile=Fail tidak sah atau hilang
 invalidPublicUrl=URL umum tidak sah

+ 1 - 0
src/main/webapp/resources/dia_nl.txt

@@ -388,6 +388,7 @@ insertText=Tekst invoegen
 inserting=Invoegen
 invalidFilename=Een Diagramnaam mag niet de volgende tekens bevatten: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Uw licentie is ongeldig, bekijk deze <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">pagina</a>.
+invalidInput=Invalid input
 invalidName=Ongeldige naam
 invalidOrMissingFile=Ongeldig of ontbrekend bestand
 invalidPublicUrl=Ongeldige publieke URL

+ 1 - 0
src/main/webapp/resources/dia_no.txt

@@ -388,6 +388,7 @@ insertText=Legg til tekst
 inserting=Legger til
 invalidFilename=Diagrammet kan ikke inneholde de følgende tegnene: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Du har en ugyldig lisens, vennligst se her <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>
+invalidInput=Invalid input
 invalidName=Ugyldig navn
 invalidOrMissingFile=Ugyldig eller manglende fil
 invalidPublicUrl=Ugyldig offentlig URL

+ 1 - 0
src/main/webapp/resources/dia_pl.txt

@@ -388,6 +388,7 @@ insertText=Wstaw tekst
 inserting=Wstawianie
 invalidFilename=Nazwy diagramów nie mogą zawierać następujących znaków: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Twoja licencja jest nieważna, sprawdź <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nieprawidłowa nazwa
 invalidOrMissingFile=Nieprawidłowy lub brakujący plik
 invalidPublicUrl=Nieprawidłowe publiczne hiperłącze

+ 1 - 0
src/main/webapp/resources/dia_pt-br.txt

@@ -388,6 +388,7 @@ insertText=Inserir texto
 inserting=Inserindo
 invalidFilename=Nomes de diagramas não podem conter os seguintes caracteres: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Sua licença é inválida, por favor veja <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nome inválido
 invalidOrMissingFile=Arquivo inválido ou em falta
 invalidPublicUrl=URL pública inválida

+ 1 - 0
src/main/webapp/resources/dia_pt.txt

@@ -388,6 +388,7 @@ insertText=Inserir texto
 inserting=A inserir
 invalidFilename=Nomes de diagramas não podem conter os seguintes caracteres:\ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=A sua carta não é válida, por favor veja <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nome inválido
 invalidOrMissingFile=Ficheiro inválido ou em falta
 invalidPublicUrl=URL pública inválida

+ 1 - 0
src/main/webapp/resources/dia_ro.txt

@@ -388,6 +388,7 @@ insertText=Inserează text
 inserting=Se inserează
 invalidFilename=Numele diagramelor nu pot să contină următoarele caractere: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Licența dumneavoastră este invalida, vedeți <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Nume invalid
 invalidOrMissingFile=Fișier invalid sau inexistent
 invalidPublicUrl=URL public invalid

+ 1 - 0
src/main/webapp/resources/dia_ru.txt

@@ -388,6 +388,7 @@ insertText=Добавить текст
 inserting=Вставка
 invalidFilename=Название диаграммы не может содержать следующие символы: \ / | : ; { < & + ? = "
 invalidLicenseSeeThisPage=Ваша лицензия недействительна. Пожалуйста, посетите эту<a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">страницу</a>.
+invalidInput=Invalid input
 invalidName=Некорректное имя
 invalidOrMissingFile=Файл поврежден или отсутствует
 invalidPublicUrl=Некорректная ссылка

+ 1 - 0
src/main/webapp/resources/dia_sk.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_sl.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_sr.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Umetanje
 invalidFilename=Imena dijagrama ne smeju sadržati sledeće znake : \ / | : ; { < & + ? =
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Neispravno ime
 invalidOrMissingFile=Neispravan ili nepostojeći dokument
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_sv.txt

@@ -388,6 +388,7 @@ insertText=Infoga text
 inserting=Infogar
 invalidFilename=Diagrammet får inte innehålla följande tecken: \ / | : ; { } < > & + ? = 
 invalidLicenseSeeThisPage=Din licens är ogiltig, vänligen se <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>
+invalidInput=Invalid input
 invalidName=Ogiltigt namn 
 invalidOrMissingFile=Ogiltigt eller saknad fil
 invalidPublicUrl=Ogiltigt publik URL

+ 1 - 0
src/main/webapp/resources/dia_sw.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_ta.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_te.txt

@@ -388,6 +388,7 @@ insertText=Insert Text
 inserting=Inserting
 invalidFilename=Diagram names must not contain the following characters: \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Your license is invalid, please see this <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Invalid name
 invalidOrMissingFile=Invalid or missing file
 invalidPublicUrl=Invalid public URL

+ 1 - 0
src/main/webapp/resources/dia_th.txt

@@ -388,6 +388,7 @@ insertText=แทรกข้อความ
 inserting=การแทรก
 invalidFilename=ชื่อแผนภาพจะต้องไม่มีเครื่องหมายเหล่านี้  \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=ใบอนุญาตของคุณไม่ถูกต้อง  โปรดดู <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=ชื่อที่ใช้ไม่ได้
 invalidOrMissingFile=ไฟล์ไม่ถูกต้องหรือไฟล์สูญหาย
 invalidPublicUrl=URL สาธารณะไม่ถูกต้อง

+ 1 - 0
src/main/webapp/resources/dia_tr.txt

@@ -388,6 +388,7 @@ insertText=Metin ekle
 inserting=Ekleniyor
 invalidFilename=Diyagram adları şu karakterleri içermelidir : \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Lisansınız geçersiz, lütfen <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a> a bakınız
+invalidInput=Invalid input
 invalidName=Geçersiz isim
 invalidOrMissingFile=Geçersiz veya olmayan dosya
 invalidPublicUrl=Geçersiz herkese açık URL

+ 1 - 0
src/main/webapp/resources/dia_uk.txt

@@ -388,6 +388,7 @@ insertText=Вставити текст
 inserting=Вставляю
 invalidFilename=Назва діаграма не повинна мати наступні символи:  \ / | : ; { } < > & + ? = "
 invalidLicenseSeeThisPage=Ваша ліцензія недійсна, будь ласка,прочитайте це <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">page</a>.
+invalidInput=Invalid input
 invalidName=Недійсне ім'я
 invalidOrMissingFile=Файл недійсний або відсутній
 invalidPublicUrl=Недійсний публічний URL

+ 1 - 0
src/main/webapp/resources/dia_vi.txt

@@ -388,6 +388,7 @@ insertText=Chèn văn bản
 inserting=Đang chèn
 invalidFilename=Tên biểu đồ không được chứa những kí tự sau: \ / | : ' { } < > & + ? = "
 invalidLicenseSeeThisPage=Giấy phép của bạn không hợp lệ, vui lòng xem tại <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">trang này</a>.
+invalidInput=Invalid input
 invalidName=Tên không hợp lệ
 invalidOrMissingFile=Tập tin bị thiếu hoặc không hợp lệ
 invalidPublicUrl=Đường dẫn không hợp lệ

+ 0 - 0
src/main/webapp/resources/dia_zh-tw.txt


部分文件因为文件数量过多而无法显示