Jelajahi Sumber

8.6.0 release

Gaudenz Alder 7 tahun lalu
induk
melakukan
ea23fcc3ec
86 mengubah file dengan 6106 tambahan dan 4015 penghapusan
  1. 7 0
      ChangeLog
  2. 1 1
      VERSION
  3. 4 1
      etc/build/build.xml
  4. 8 7
      etc/mxgraph/mxClient.js
  5. 19 3
      src/main/java/com/mxgraph/online/ProxyServlet.java
  6. 1 1
      src/main/webapp/cache.manifest
  7. 270 0
      src/main/webapp/connect/confluence/connect-dev.json
  8. 93 0
      src/main/webapp/connect/jira/connect-dev.json
  9. 1176 1110
      src/main/webapp/js/app.min.js
  10. 787 726
      src/main/webapp/js/atlas-viewer.min.js
  11. 1333 1267
      src/main/webapp/js/atlas.min.js
  12. 17 15
      src/main/webapp/js/diagramly/App.js
  13. 1 0
      src/main/webapp/js/diagramly/Devel.js
  14. 3 7
      src/main/webapp/js/diagramly/Dialogs.js
  15. 1 1
      src/main/webapp/js/diagramly/DrawioFile.js
  16. 1 1
      src/main/webapp/js/diagramly/DriveClient.js
  17. 2 1
      src/main/webapp/js/diagramly/Editor.js
  18. 69 56
      src/main/webapp/js/diagramly/EditorUi.js
  19. 7 1
      src/main/webapp/js/diagramly/Init.js
  20. 44 21
      src/main/webapp/js/diagramly/Menus.js
  21. 1287 0
      src/main/webapp/js/diagramly/Minimal.js
  22. 7 7
      src/main/webapp/js/diagramly/Pages.js
  23. 2 2
      src/main/webapp/js/diagramly/sidebar/Sidebar-BPMN.js
  24. 4 4
      src/main/webapp/js/embed-static.min.js
  25. 16 3
      src/main/webapp/js/mxgraph/Editor.js
  26. 5 5
      src/main/webapp/js/mxgraph/EditorUi.js
  27. 5 3
      src/main/webapp/js/mxgraph/Format.js
  28. 19 2
      src/main/webapp/js/mxgraph/Graph.js
  29. 8 6
      src/main/webapp/js/mxgraph/Menus.js
  30. 63 33
      src/main/webapp/js/mxgraph/Sidebar.js
  31. 4 4
      src/main/webapp/js/reader.min.js
  32. 787 726
      src/main/webapp/js/viewer.min.js
  33. 1 0
      src/main/webapp/resources/dia.txt
  34. 1 0
      src/main/webapp/resources/dia_am.txt
  35. 1 0
      src/main/webapp/resources/dia_ar.txt
  36. 1 0
      src/main/webapp/resources/dia_bg.txt
  37. 1 0
      src/main/webapp/resources/dia_bn.txt
  38. 1 0
      src/main/webapp/resources/dia_bs.txt
  39. 1 0
      src/main/webapp/resources/dia_ca.txt
  40. 1 0
      src/main/webapp/resources/dia_cs.txt
  41. 1 0
      src/main/webapp/resources/dia_da.txt
  42. 2 1
      src/main/webapp/resources/dia_de.txt
  43. 1 0
      src/main/webapp/resources/dia_el.txt
  44. 1 0
      src/main/webapp/resources/dia_eo.txt
  45. 1 0
      src/main/webapp/resources/dia_es.txt
  46. 1 0
      src/main/webapp/resources/dia_et.txt
  47. 1 0
      src/main/webapp/resources/dia_fa.txt
  48. 1 0
      src/main/webapp/resources/dia_fi.txt
  49. 1 0
      src/main/webapp/resources/dia_fil.txt
  50. 1 0
      src/main/webapp/resources/dia_fr.txt
  51. 1 0
      src/main/webapp/resources/dia_gu.txt
  52. 1 0
      src/main/webapp/resources/dia_he.txt
  53. 1 0
      src/main/webapp/resources/dia_hi.txt
  54. 1 0
      src/main/webapp/resources/dia_hr.txt
  55. 1 0
      src/main/webapp/resources/dia_hu.txt
  56. 1 0
      src/main/webapp/resources/dia_i18n.txt
  57. 1 0
      src/main/webapp/resources/dia_id.txt
  58. 1 0
      src/main/webapp/resources/dia_it.txt
  59. 1 0
      src/main/webapp/resources/dia_ja.txt
  60. 1 0
      src/main/webapp/resources/dia_kn.txt
  61. 1 0
      src/main/webapp/resources/dia_ko.txt
  62. 1 0
      src/main/webapp/resources/dia_lt.txt
  63. 1 0
      src/main/webapp/resources/dia_lv.txt
  64. 1 0
      src/main/webapp/resources/dia_ml.txt
  65. 1 0
      src/main/webapp/resources/dia_mr.txt
  66. 1 0
      src/main/webapp/resources/dia_ms.txt
  67. 1 0
      src/main/webapp/resources/dia_nl.txt
  68. 1 0
      src/main/webapp/resources/dia_no.txt
  69. 1 0
      src/main/webapp/resources/dia_pl.txt
  70. 1 0
      src/main/webapp/resources/dia_pt-br.txt
  71. 1 0
      src/main/webapp/resources/dia_pt.txt
  72. 1 0
      src/main/webapp/resources/dia_ro.txt
  73. 1 0
      src/main/webapp/resources/dia_ru.txt
  74. 1 0
      src/main/webapp/resources/dia_sk.txt
  75. 1 0
      src/main/webapp/resources/dia_sl.txt
  76. 1 0
      src/main/webapp/resources/dia_sr.txt
  77. 1 0
      src/main/webapp/resources/dia_sv.txt
  78. 1 0
      src/main/webapp/resources/dia_sw.txt
  79. 1 0
      src/main/webapp/resources/dia_ta.txt
  80. 1 0
      src/main/webapp/resources/dia_te.txt
  81. 1 0
      src/main/webapp/resources/dia_th.txt
  82. 1 0
      src/main/webapp/resources/dia_tr.txt
  83. 1 0
      src/main/webapp/resources/dia_uk.txt
  84. 1 0
      src/main/webapp/resources/dia_vi.txt
  85. 1 0
      src/main/webapp/resources/dia_zh-tw.txt
  86. 1 0
      src/main/webapp/resources/dia_zh.txt

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+06-MAY-2018: 8.6.0
+
+- Fixes outline connect for BPMN shapes
+- Adds opacity to default style
+- Uses mxGraph 3.9.4 beta 5
+- Adds minimal UI
+
 01-MAY-2018: 8.5.15
 
 - Fixes showing device when no other storage options available

+ 1 - 1
VERSION

@@ -1 +1 @@
-8.5.15
+8.6.0

+ 4 - 1
etc/build/build.xml

@@ -186,6 +186,7 @@
 				<file name="EditorUi.js" />
 				<file name="Pages.js" />
 				<file name="Trees.js" />
+				<file name="Minimal.js" />
 			</sources>
 					
 			<sources dir="${basedir}">
@@ -258,6 +259,7 @@
 				<file name="Menus.js" />
 				<file name="Pages.js" />
 				<file name="Trees.js" />
+				<file name="Minimal.js" />
 			</sources>
 				
 			<sources dir="${basedir}">
@@ -270,7 +272,7 @@
 			<filelist dir="${war.dir}/js/sanitizer" files="sanitizer.min.js"/>
 			<filelist dir="${war.dir}/js/deflate" files="pako.min.js"/>
 			<filelist dir="${basedir}" files="client.min.js,grapheditor.min.js,sidebar.min.js,.tmp1.js"/>
-    		</concat>
+    	</concat>
 
 		<loadfile property="version" srcFile="../../VERSION"/>
 		<replace file="${basedir}/base.min.js" token="@DRAWIO-VERSION@" value="${version}"/>
@@ -343,6 +345,7 @@
 				<file name="Menus.js" />
 				<file name="Pages.js" />
 				<file name="Trees.js" />
+				<file name="Minimal.js" />
 			</sources>
 		</jscomp>
 

File diff ditekan karena terlalu besar
+ 8 - 7
etc/mxgraph/mxClient.js


+ 19 - 3
src/main/java/com/mxgraph/online/ProxyServlet.java

@@ -6,7 +6,6 @@ package com.mxgraph.online;
 
 import java.io.BufferedInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -73,13 +72,30 @@ public class ProxyServlet extends HttpServlet
 				response.setHeader("Expires", "0");
 				response.addHeader("Access-Control-Allow-Origin", dom);
 				
-				// Status code pass-through
+				// Status code pass-through and follow redirects
 				if (connection instanceof HttpURLConnection)
 				{
+					((HttpURLConnection) connection).setInstanceFollowRedirects(true);
+					
 					// Workaround for 451 response from Iconfinder CDN
 					((HttpURLConnection) connection).setRequestProperty("User-Agent", "draw.io");
+					int status = ((HttpURLConnection) connection).getResponseCode();
+					int counter = 0;
+					
+					// Follows a maximum of 2 redirects 
+					while (counter++ < 2 && (status == HttpURLConnection.HTTP_MOVED_PERM ||
+						   status == HttpURLConnection.HTTP_MOVED_TEMP))
+					{
+						url = new URL(connection.getHeaderField("Location"));
+						connection = url.openConnection();
+						((HttpURLConnection) connection).setInstanceFollowRedirects(true);
+						
+						// Workaround for 451 response from Iconfinder CDN
+						((HttpURLConnection) connection).setRequestProperty("User-Agent", "draw.io");
+						status = ((HttpURLConnection) connection).getResponseCode();
+					}
 					
-					response.setStatus(((HttpURLConnection) connection).getResponseCode());
+					response.setStatus(status);
 				}
 				
 				String base64 = request.getParameter("base64");

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

@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 05/01/2018 05:13 PM
+# 05/06/2018 04:15 PM
 
 app.html
 index.html?offline=1

File diff ditekan karena terlalu besar
+ 270 - 0
src/main/webapp/connect/confluence/connect-dev.json


+ 93 - 0
src/main/webapp/connect/jira/connect-dev.json

@@ -0,0 +1,93 @@
+{
+     "name": "Draw.io gaudenz",
+     "description": "Draw.io add-on for JIRA",
+     "key": "com.mxgraph.jira.plugins.drawio.gaudenz",
+     "baseUrl": "https://0d961297.ngrok.io/",
+     "vendor": {
+         "name": "JGraph Ltd.",
+         "url": "https://www.jgraph.com"
+     },
+     "authentication": 
+     {
+         "type": "none"
+     },
+     "version": "1.0.4",
+     "scopes": 
+     [
+     	"READ",
+     	"WRITE",
+     	"DELETE"
+	 ],
+     "modules": 
+     {
+      "generalPages": 
+      [
+      	{
+			"url":"/connect/jira/editor2.html?issueId=${issue.id}",
+			"key":"drawioEditor",
+			"name":
+			{
+				"value":"Draw.io Editor"
+			},
+			"location":"hidden"
+		},
+		{
+			"url":"/connect/jira/fullScreenViewer2.html?issueId=${issue.id}",
+			"key":"drawioFullScreenViewer",
+			"name":
+			{
+				"value":"Draw.io Full Screen Viewer"
+			},
+			"location":"hidden"
+		}
+      ],
+	  "webItems": [
+	    {
+	      "location": "operations-attachments",
+	      "weight": 50,
+	      "key": "drawioEditorBlank",
+	      "url": "/connect/jira/editor2.html?issueId=${issue.id}",
+	      "name": {
+	        "value": "Add Draw.io Diagram"
+	      },
+	      "target": 
+	      {
+			"type":"dialog",
+			"options": 
+			{
+				"width":"100%",
+				"height":"100%",
+				"chrome":false
+			}
+		  }
+	    }, 
+	    {
+       	   "key": "drawioEditorDialog",
+	        "name": 
+	        {
+	            "value": "Draw.io Editor"
+	        },
+	        "url": "/connect/jira/editor2.html?issueId=${issue.id}",
+	        "location": "none",
+	        "context": "addon"
+	    }
+	  ],
+	  "webPanels": 
+	  [
+      {
+        "url": "/connect/jira/viewerPanel2.html?issueId=${issue.id}",
+        "location": "atl.jira.view.issue.right.context",
+        "layout": 
+        {
+          "width": "300px"
+        },
+        "weight": 50,
+        "key": "drawioViewerPanel",
+        "name": 
+        {
+          "value": "Draw.io Diagrams"
+        }
+      }
+    ] 
+	}
+ }

File diff ditekan karena terlalu besar
+ 1176 - 1110
src/main/webapp/js/app.min.js


File diff ditekan karena terlalu besar
+ 787 - 726
src/main/webapp/js/atlas-viewer.min.js


File diff ditekan karena terlalu besar
+ 1333 - 1267
src/main/webapp/js/atlas.min.js


+ 17 - 15
src/main/webapp/js/diagramly/App.js

@@ -12,8 +12,8 @@
  */
 App = function(editor, container, lightbox)
 {
-	EditorUi.call(this, editor, container, (lightbox != null) ? lightbox : urlParams['lightbox'] == '1');
-
+	EditorUi.call(this, editor, container, (lightbox != null) ? lightbox : (urlParams['lightbox'] == '1' || uiTheme == 'min'));
+	
 	// Pre-fetches images
 	if (mxClient.IS_SVG)
 	{
@@ -572,7 +572,7 @@ App.main = function(callback, createUi)
 		}
 
 		// Main
-		var ui = (createUi != null) ? createUi() : new App(new Editor(urlParams['chrome'] == '0'));
+		var ui = (createUi != null) ? createUi() : new App(new Editor(urlParams['chrome'] == '0' || uiTheme == 'min', null, null, null, urlParams['chrome'] != '0'));
 		
 		if (window.mxscript != null)
 		{
@@ -1177,7 +1177,7 @@ App.prototype.getEditBlankXml = function()
 {
 	var file = this.getCurrentFile();
 	
-	if (file != null && this.editor.chromeless && this.editor.graph.lightbox && file.realtime == null)
+	if (file != null && this.editor.isChromelessView() && this.editor.graph.isLightboxView() && file.realtime == null)
 	{
 		return file.getData();
 	}
@@ -1348,7 +1348,7 @@ App.prototype.onBeforeUnload = function()
 			// KNOWN: Message is ignored by most browsers
 			if (file.constructor == LocalFile && file.getHash() == '' && !file.isModified() &&
 				urlParams['nowarn'] != '1' && !this.isDiagramEmpty() && urlParams['url'] == null &&
-				!this.editor.chromeless)
+				!this.editor.isChromelessView())
 			{
 				return mxResources.get('ensureDataSaved');
 			}
@@ -1373,7 +1373,7 @@ App.prototype.onBeforeUnload = function()
  */
 App.prototype.updateDocumentTitle = function()
 {
-	if (!this.editor.graph.lightbox)
+	if (!this.editor.graph.isLightboxView())
 	{
 		var title = this.editor.appName;
 		var file = this.getCurrentFile();
@@ -2361,7 +2361,7 @@ App.prototype.showSplash = function(force)
 			}), true);
 	});
 	
-	if (this.editor.chromeless)
+	if (this.editor.isChromelessView())
 	{
 		this.handleError({message: mxResources.get('noFileSelected')},
 			mxResources.get('errorLoadingFile'), mxUtils.bind(this, function()
@@ -4844,7 +4844,8 @@ App.prototype.updateUserElement = function()
 								'</td><td valign="top" style="white-space:nowrap;' +
 								((driveUser.pictureUrl != null) ? 'padding-top:14px;' : '') +
 								'"><b>' + mxUtils.htmlEntities(driveUser.displayName) + '</b><br>' +
-								'<small>' + mxUtils.htmlEntities(driveUser.email) + '</small></tr></table>';
+								'<small>' + mxUtils.htmlEntities(driveUser.email) + '</small><br><br>' +
+								'<small>' + mxResources.get('googleDrive') + '</small></tr></table>';
 							var div = document.createElement('div');
 							div.style.textAlign = 'center';
 							div.style.padding = '12px';
@@ -4903,7 +4904,7 @@ App.prototype.updateUserElement = function()
 						}
 					}
 					
-					var addUser = mxUtils.bind(this, function(user, logo, logout)
+					var addUser = mxUtils.bind(this, function(user, logo, logout, label)
 					{
 						if (user != null)
 						{
@@ -4916,8 +4917,9 @@ App.prototype.updateUserElement = function()
 							this.userPanel.innerHTML += '<table style="font-size:10pt;padding:20px 20px 10px 10px;"><tr><td valign="top">' +
 								((logo != null) ? '<img style="margin-right:10px;" src="' + logo + '" width="40" height="40"/></td>' : '') +
 								'<td valign="middle" style="white-space:nowrap;"><b>' + mxUtils.htmlEntities(user.displayName) + '</b>' +
-								((user.email != null) ? '<br><font color="gray">' + mxUtils.htmlEntities(user.email) + '</font></td>' : '') +
-								'</tr></table>';
+								((user.email != null) ? '<br><font color="gray">' + mxUtils.htmlEntities(user.email) + '</font>' : '') +
+								((label != null) ? '<br><br><small>' + mxUtils.htmlEntities(label) + '</small>' : '') +
+								'</td></tr></table>';
 							var div = document.createElement('div');
 							div.style.textAlign = 'center';
 							div.style.padding = '12px';
@@ -4962,7 +4964,7 @@ App.prototype.updateUserElement = function()
 							{
 								this.dropbox.logout();
 							}
-						}));
+						}), mxResources.get('dropbox'));
 					}
 
 					if (this.oneDrive != null)
@@ -4993,7 +4995,7 @@ App.prototype.updateUserElement = function()
 							{
 								this.oneDrive.logout();
 							}
-						}));
+						}), mxResources.get('oneDrive'));
 					}
 
 					if (this.gitHub != null)
@@ -5024,7 +5026,7 @@ App.prototype.updateUserElement = function()
 							{
 								this.gitHub.logout();
 							}
-						}));
+						}), mxResources.get('github'));
 					}
 					
 					//TODO We have no user info from Trello, how we can create a user?
@@ -5056,7 +5058,7 @@ App.prototype.updateUserElement = function()
 							{
 								this.trello.logout();
 							}
-						}));
+						}), mxResources.get('trello'));
 					}
 					
 					if (!connected)

+ 1 - 0
src/main/webapp/js/diagramly/Devel.js

@@ -106,6 +106,7 @@ mxscript(drawDevUrl + 'js/diagramly/App.js');
 mxscript(drawDevUrl + 'js/diagramly/Menus.js');
 mxscript(drawDevUrl + 'js/diagramly/Pages.js');
 mxscript(drawDevUrl + 'js/diagramly/Trees.js');
+mxscript(drawDevUrl + 'js/diagramly/Minimal.js');
 mxscript(drawDevUrl + 'js/diagramly/DevTools.js');
 
 // Vsdx/vssx support

+ 3 - 7
src/main/webapp/js/diagramly/Dialogs.js

@@ -7613,7 +7613,9 @@ var LibraryDialog = function(editorUi, name, library, initialImages, file, mode)
 					rem.setAttribute('title', mxResources.get('delete'));
 					rem.setAttribute('align', 'top');
 					rem.style.paddingTop = '4px';
-					rem.style.marginLeft = '-22px';
+					rem.style.position = 'absolute';
+					rem.style.marginLeft = '-12px';
+					rem.style.zIndex = '1';
 					rem.style.cursor = 'pointer';
 					
 					// Blocks dragging of remove icon
@@ -7622,12 +7624,6 @@ var LibraryDialog = function(editorUi, name, library, initialImages, file, mode)
 						mxEvent.consume(evt);
 					});
 					
-					// Seems to bring remove icon on top of graph
-					if (data == null && img != null)
-					{
-						rem.style.position = 'relative';
-					}
-					
 					(function(wrapperDiv, dataParam, imgParam)
 					{
 						mxEvent.addListener(rem, 'click', function(evt)

+ 1 - 1
src/main/webapp/js/diagramly/DrawioFile.js

@@ -248,7 +248,7 @@ DrawioFile.prototype.getId = function()
  */
 DrawioFile.prototype.isEditable = function()
 {
-	return !this.ui.editor.chromeless || this.ui.editor.editable;
+	return !this.ui.editor.isChromelessView() || this.ui.editor.editable;
 };
 
 /**

+ 1 - 1
src/main/webapp/js/diagramly/DriveClient.js

@@ -11,7 +11,7 @@ DriveClient = function(editorUi)
 	 */
 	this.ui = editorUi;
 
-	if (this.ui.editor.chromeless && urlParams['rt'] != '1')
+	if (this.ui.editor.isChromelessView() && urlParams['rt'] != '1')
 	{
 		// Workaround for Google Drive requiring the user to click on the file in the
 		// drive UI when not using this scope (user other scope with rt=1 URL param)

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

@@ -740,8 +740,9 @@
 		DiagramFormatPanel.prototype.addView = function(div)
 		{
 			var div = diagramFormatPanelAddView.apply(this, arguments);
+			var file = this.editorUi.getCurrentFile();
 			
-			if (mxClient.IS_SVG)
+			if (mxClient.IS_SVG && (urlParams['embed'] == '1' || (file != null && file.isEditable())))
 			{
 				var ui = this.editorUi;
 				var editor = ui.editor;

+ 69 - 56
src/main/webapp/js/diagramly/EditorUi.js

@@ -117,6 +117,16 @@
 	 */
 	EditorUi.prototype.formatEnabled = urlParams['format'] != '0';
 
+	/**
+	 * Restores app defaults for UI
+	 */
+	EditorUi.prototype.closableScratchpad = true;
+	
+	/**
+	 * Specifies if PDF export with pages is enabled.
+	 */
+	EditorUi.prototype.showCsvImport = true;
+
 	/**
 	 * Capability check for canvas export
 	 */
@@ -1264,6 +1274,7 @@
 			// File might have been loaded halfway
 			this.editor.graph.model.clear();
 			this.editor.undoManager.clear();
+			this.setBackgroundImage(null);
 					
 			// Avoids empty hash with no value
 			if (window.location.hash != null && window.location.hash.length > 0)
@@ -1314,7 +1325,7 @@
 					}
 				}
 	
-				if (!this.editor.chromeless || this.editor.editable)
+				if (!this.editor.isChromelessView() || this.editor.editable)
 				{
 					this.editor.graph.selectUnlockedLayer();
 					this.showLayersDialog();
@@ -1326,7 +1337,7 @@
 						window.focus();
 					}
 				}
-				else if (this.editor.graph.lightbox)
+				else if (this.editor.graph.isLightboxView())
 				{
 					this.lightboxFit();
 				}
@@ -1775,7 +1786,8 @@
 	    var buttons = document.createElement('div');
 	    buttons.style.position = 'absolute';
 	    buttons.style.right = '0px';
-	    buttons.style.top = '5px';
+	    buttons.style.top = '0px';
+	    buttons.style.padding = '8px'
 	    
 	    // Workaround for CSS error in IE8 (standards and quirks)
 	    if (!mxClient.IS_QUIRKS && document.documentMode != 8)
@@ -1789,38 +1801,40 @@
 		var btn = document.createElement('img');
 		btn.setAttribute('src', Dialog.prototype.closeImage);
 		btn.setAttribute('title', mxResources.get('close'));
-		btn.setAttribute('align', 'top');
+		btn.setAttribute('valign', 'absmiddle');
 		btn.setAttribute('border', '0');
-		btn.className = 'geButton';
-		btn.style.marginRight = '1px';
-		btn.style.marginTop = '-1px';
-		buttons.appendChild(btn);
+		btn.style.margin = '0 3px';
 		
 		var saveBtn = null;
 		
-		mxEvent.addListener(btn, 'click', mxUtils.bind(this, function(evt)
-		{
-			// Workaround for close after any button click in IE8/quirks
-			if (!mxEvent.isConsumed(evt))
+	    if (file.title != '.scratchpad' || this.closableScratchpad)
+	    {
+			buttons.appendChild(btn);
+			
+			mxEvent.addListener(btn, 'click', mxUtils.bind(this, function(evt)
 			{
-				var fn = mxUtils.bind(this, function()
-				{
-					this.closeLibrary(file);
-				});
-				
-				if (saveBtn != null)
-				{
-					this.confirm(mxResources.get('allChangesLost'), null, fn,
-						mxResources.get('cancel'), mxResources.get('discardChanges'));
-				}
-				else
+				// Workaround for close after any button click in IE8/quirks
+				if (!mxEvent.isConsumed(evt))
 				{
-					fn();
+					var fn = mxUtils.bind(this, function()
+					{
+						this.closeLibrary(file);
+					});
+					
+					if (saveBtn != null)
+					{
+						this.confirm(mxResources.get('allChangesLost'), null, fn,
+							mxResources.get('cancel'), mxResources.get('discardChanges'));
+					}
+					else
+					{
+						fn();
+					}
+			
+					mxEvent.consume(evt);
 				}
-		
-				mxEvent.consume(evt);
-			}
-		}));
+			}));
+	    }
 		
 		if (file.isEditable())
 		{
@@ -2237,8 +2251,7 @@
 			{
 				var link = document.createElement('span');
 				link.setAttribute('title', mxResources.get('help'));
-				link.style.cssText = 'color:gray;text-decoration:none;';
-				link.className = 'geButton';
+				link.style.cssText = 'color:#a3a3a3;text-decoration:none;margin-right:2px;';
 				mxUtils.write(link, '?');
 				
 				mxEvent.addGestureListeners(link, mxUtils.bind(this, function(evt)
@@ -2309,28 +2322,28 @@
     
     EditorUi.initTheme = function()
     {
-	    	if (uiTheme == 'atlas')
-	    	{
-	    		mxClient.link('stylesheet', STYLE_PATH + '/atlas.css');
-
-	    		if (typeof Toolbar !== 'undefined')
-	    		{
-	    			Toolbar.prototype.unselectedBackground = (mxClient.IS_QUIRKS) ? 'none' : 'linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)';
-	    			Toolbar.prototype.selectedBackground = 'rgb(242, 242, 242)';
-	    		}
-	    		
-	    		Editor.prototype.initialTopSpacing = 3;
-	    		EditorUi.prototype.menubarHeight = 41;
-	    		EditorUi.prototype.toolbarHeight = 38;
-	    		EditorUi.prototype.hsplitPosition = 188;
-	    		Sidebar.prototype.thumbWidth = 46;
-	    		Sidebar.prototype.thumbHeight = 46;
-	    		Sidebar.prototype.thumbPadding = (document.documentMode >= 5) ? 0 : 1;
-	    		Sidebar.prototype.thumbBorder = 2;
-	    	}
-	    	else if (uiTheme == 'dark')
-	    	{
-	    		mxClient.link('stylesheet', STYLE_PATH + '/dark.css');
+    	if (uiTheme == 'atlas')
+    	{
+    		mxClient.link('stylesheet', STYLE_PATH + '/atlas.css');
+
+    		if (typeof Toolbar !== 'undefined')
+    		{
+    			Toolbar.prototype.unselectedBackground = (mxClient.IS_QUIRKS) ? 'none' : 'linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%)';
+    			Toolbar.prototype.selectedBackground = 'rgb(242, 242, 242)';
+    		}
+    		
+    		Editor.prototype.initialTopSpacing = 3;
+    		EditorUi.prototype.menubarHeight = 41;
+    		EditorUi.prototype.toolbarHeight = 38;
+    		EditorUi.prototype.hsplitPosition = 188;
+    		Sidebar.prototype.thumbWidth = 46;
+    		Sidebar.prototype.thumbHeight = 46;
+    		Sidebar.prototype.thumbPadding = (document.documentMode >= 5) ? 0 : 1;
+    		Sidebar.prototype.thumbBorder = 2;
+    	}
+    	else if (uiTheme == 'dark')
+    	{
+    		mxClient.link('stylesheet', STYLE_PATH + '/dark.css');
 
 			Dialog.backdropColor = '#2a2a2a';
 	    		Graph.prototype.defaultThemeName = 'darkTheme';
@@ -2352,7 +2365,7 @@
 				Editor.helpImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAP1BMVEUAAAD///////////////////////////////////////////////////////////////////////////////9Du/pqAAAAFXRSTlMAT30qCJRBboyDZyCgRzUUdF46MJlgXETgAAAAeklEQVQY022O2w4DIQhEQUURda/9/28tUO2+7CQS5sgQ4F1RapX78YUwRqQjTU8ILqQfKerTKTvACJ4nLX3krt+8aS82oI8aQC4KavRgtvEW/mDvsICgA03PSGRr79MqX1YPNIxzjyqtw8ZnnRo4t5a5undtJYRywau+ds4Cyza3E6YAAAAASUVORK5CYII=';
 				Editor.checkmarkImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAMAAACeyVWkAAAARVBMVEUAAACZmZkICAgEBASNjY2Dg4MYGBiTk5N5eXl1dXVmZmZQUFBCQkI3NzceHh4MDAykpKSJiYl+fn5sbGxaWlo/Pz8SEhK96uPlAAAAAXRSTlMAQObYZgAAAE5JREFUGNPFzTcSgDAQQ1HJGUfy/Y9K7V1qeOUfzQifCQZai1XHaz11LFysbDbzgDSSWMZiETz3+b8yNUc/MMsktxuC8XQBSncdLwz+8gCCggGXzBcozAAAAABJRU5ErkJggg==';
 			}
-		}
+    	}
     };
     
     EditorUi.initTheme();
@@ -8420,11 +8433,11 @@
 					{
 						this.setFileData(xml);
 						
-						if (!this.editor.chromeless)
+						if (!this.editor.isChromelessView())
 						{
 							this.showLayersDialog();
 						}
-						else if (this.editor.graph.lightbox)
+						else if (this.editor.graph.isLightboxView())
 						{
 							this.lightboxFit();
 						}
@@ -8992,7 +9005,7 @@
 							this.buttonContainer.style.paddingRight = '12px';
 							this.buttonContainer.style.paddingTop = '12px';
 						}
-						else
+						else if (uiTheme != 'min')
 						{
 							this.buttonContainer.style.paddingRight = '38px';
 							this.buttonContainer.style.paddingTop = '6px';

+ 7 - 1
src/main/webapp/js/diagramly/Init.js

@@ -259,8 +259,14 @@ if (urlParams['offline'] == '1' || urlParams['local'] == '1')
 	urlParams['math'] = '0';
 }
 
-// Lightbox enabled chromeless mode
+// Lightbox enables chromeless mode
 if (urlParams['lightbox'] == '1')
 {
 	urlParams['chrome'] = '0';
 }
+
+// Minimal UI disables chromeless toolbar
+if (uiTheme == 'min')
+{
+	urlParams['toolbar'] = '0';
+}

+ 44 - 21
src/main/webapp/js/diagramly/Menus.js

@@ -798,7 +798,7 @@
 		{
 			if (!mxClient.IS_CHROMEAPP && editorUi.isOffline())
 			{
-				this.addMenuItems(menu, ['about']);
+				this.addMenuItems(menu, ['about'], parent);
 			}
 			else
 			{
@@ -822,10 +822,13 @@
 							encodeURIComponent(term));
 						this.editorUi.logEvent({category: 'Help', action: 'search', label: term});
 						
-						window.setTimeout(mxUtils.bind(this, function()
+						if (this.editorUi.menubar != null)
 						{
-							this.editorUi.menubar.hideMenu();
-						}), 0);
+							window.setTimeout(mxUtils.bind(this, function()
+							{
+								this.editorUi.menubar.hideMenu();
+							}), 0);
+						}
 					}
 				}));
 				
@@ -852,14 +855,14 @@
 					input.focus();
 				}, 0);
 				
-				this.addMenuItems(menu, ['-', 'quickStart', 'userManual', 'keyboardShortcuts', '-']);
+				this.addMenuItems(menu, ['-', 'quickStart', 'userManual', 'keyboardShortcuts', '-'], parent);
 				
 				if (!mxClient.IS_CHROMEAPP)
 				{
-					this.addMenuItems(menu, ['feedback']);
+					this.addMenuItems(menu, ['feedback'], parent);
 				}
 
-				this.addMenuItems(menu, ['support', '-', 'about']);
+				this.addMenuItems(menu, ['support', '-', 'about'], parent);
 			}
 
 			if (urlParams['ruler'] == '1')
@@ -1732,11 +1735,14 @@
 					dlg.init();
 				}, parent);
 			}
-			
-			menu.addItem(mxResources.get('csv') + '...', null, function()
+
+			if (editorUi.showCsvImport)
 			{
-				editorUi.showImportCsvDialog();
-			}, parent);
+				menu.addItem(mxResources.get('csv') + '...', null, function()
+				{
+					editorUi.showImportCsvDialog();
+				}, parent);
+			}
 		})).isEnabled = isGraphEnabled;
 
 		this.put('theme', new Menu(mxUtils.bind(this, function(menu, parent)
@@ -1748,7 +1754,19 @@
 				editorUi.alert(mxResources.get('restartForChangeRequired'));
 			}, parent);
 
-			if (uiTheme != 'atlas' && uiTheme != 'dark')
+			if (uiTheme != 'atlas' && uiTheme != 'dark' && uiTheme != 'min')
+			{
+				menu.addCheckmark(item, Editor.checkmarkImage);
+			}
+
+			item = menu.addItem(mxResources.get('minimal'), null, function()
+			{
+				mxSettings.setUi('min');
+				mxSettings.save();
+				editorUi.alert(mxResources.get('restartForChangeRequired'));
+			}, parent);
+			
+			if (uiTheme == 'min')
 			{
 				menu.addCheckmark(item, Editor.checkmarkImage);
 			}
@@ -2006,19 +2024,24 @@
         			graph.getModel().endUpdate();
         		}
 			
-        		graph.container.focus();
-        		graph.setSelectionCell(cell);
         		graph.scrollCellToVisible(cell);
-    	    		
-    	    		return cell;
+        		graph.setSelectionCell(cell);
+        		graph.container.focus();
+
+        		if (graph.editAfterInsert)
+        		{
+        	        graph.startEditing(cell);
+        		}
+        		
+    	    	return cell;
 		};
 		
 		editorUi.actions.addAction('insertText', function()
 		{
 			if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()))
 			{
-    	    			graph.startEditingAtCell(insertVertex('Text', 40, 20, 'text;html=1;resizable=0;autosize=1;' +
-    	    				'align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;'));
+    			graph.startEditingAtCell(insertVertex('Text', 40, 20, 'text;html=1;resizable=0;autosize=1;' +
+    				'align=center;verticalAlign=middle;points=[];fillColor=none;strokeColor=none;rounded=0;'));
 			}
 		}, null, null, Editor.ctrlKey + '+Shift+X').isEnabled = isGraphEnabled;
 		
@@ -2026,7 +2049,7 @@
 		{
 			if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()))
 			{
-    	    			insertVertex('', 120, 60, 'whiteSpace=wrap;html=1;');
+    	    	insertVertex('', 120, 60, 'whiteSpace=wrap;html=1;');
 			}
 		}, null, null, Editor.ctrlKey + '+K').isEnabled = isGraphEnabled;
 		
@@ -2034,7 +2057,7 @@
 		{
 			if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()))
 			{
-    	    			insertVertex('', 80, 80, 'ellipse;whiteSpace=wrap;html=1;');
+    	    	insertVertex('', 80, 80, 'ellipse;whiteSpace=wrap;html=1;');
 			}
 		}, null, null, Editor.ctrlKey + '+Shift+K').isEnabled = isGraphEnabled;
 		
@@ -2042,7 +2065,7 @@
 		{
 			if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()))
 			{
-    	    			insertVertex('', 80, 80, 'rhombus;whiteSpace=wrap;html=1;');
+    	    	insertVertex('', 80, 80, 'rhombus;whiteSpace=wrap;html=1;');
 			}
 		}).isEnabled = isGraphEnabled;
 		

File diff ditekan karena terlalu besar
+ 1287 - 0
src/main/webapp/js/diagramly/Minimal.js


+ 7 - 7
src/main/webapp/js/diagramly/Pages.js

@@ -200,7 +200,7 @@ SelectPage.prototype.execute = function()
 		editor.fireEvent(new mxEventObject('setViewState', 'change', this));
 		
 		// Handles grid state in chromeless mode which is stored in Editor instance
-		graph.gridEnabled = graph.gridEnabled && (!this.ui.editor.chromeless ||
+		graph.gridEnabled = graph.gridEnabled && (!this.ui.editor.isChromelessView() ||
 			urlParams['grid'] == '1');
 
 		// Updates the display
@@ -345,7 +345,7 @@ EditorUi.prototype.initPages = function()
 			{
 				this.resetScrollbars();
 
-				if (graph.lightbox)
+				if (graph.isLightboxView())
 				{
 					this.lightboxFit();
 				}
@@ -448,7 +448,7 @@ Graph.prototype.createViewState = function(node)
 		guidesEnabled: node.getAttribute('guides') != '0',
 		foldingEnabled: node.getAttribute('fold') != '0',
 		shadowVisible: node.getAttribute('shadow') == '1',
-		pageVisible: (this.lightbox) ? false : ((pv != null) ? (pv != '0') : this.defaultPageVisible),
+		pageVisible: (this.isLightboxView()) ? false : ((pv != null) ? (pv != '0') : this.defaultPageVisible),
 		background: (bg != null && bg.length > 0) ? bg : this.defaultGraphBackground,
 		backgroundImage: (bgImg != null) ? new mxImage(bgImg.src, bgImg.width, bgImg.height) : null,
 		pageScale: (ps != null) ? ps : mxGraph.prototype.pageScale,
@@ -869,7 +869,7 @@ EditorUi.prototype.updateTabContainer = function()
 		
 		// Automatic tab width to match available width
 		// TODO: Fix tabWidth in chromeless mode
-		var btnWidth = (this.editor.chromeless) ? 29 : 59;
+		var btnWidth = (this.editor.isChromelessView()) ? 29 : 59;
 		var tabWidth = Math.min(140, Math.max(20, (this.tabContainer.clientWidth - btnWidth) / this.pages.length) + 1);
 		var startIndex = null;
 
@@ -1331,7 +1331,7 @@ EditorUi.prototype.createPageMenu = function(page, label)
 //Registers codec for MovePage
 (function()
 {
-	var codec = new mxObjectCodec(new MovePage(),  ['ui']);
+	var codec = new mxObjectCodec(new MovePage(), ['ui']);
 	
 	codec.beforeDecode = function(dec, node, obj)
 	{
@@ -1346,7 +1346,7 @@ EditorUi.prototype.createPageMenu = function(page, label)
 //Registers codec for RenamePage
 (function()
 {
-	var codec = new mxObjectCodec(new RenamePage(),  ['ui', 'page', 'previous']);
+	var codec = new mxObjectCodec(new RenamePage(), ['ui', 'page', 'previous']);
 	
 	codec.afterEncode = function(enc, obj, node)
 	{
@@ -1376,7 +1376,7 @@ EditorUi.prototype.createPageMenu = function(page, label)
 //Registers codec for ChangePage
 (function()
 {
-	var codec = new mxObjectCodec(new ChangePage(),  ['ui', 'relatedPage', 'index', 'neverShown']);
+	var codec = new mxObjectCodec(new ChangePage(), ['ui', 'relatedPage', 'index', 'neverShown']);
 	
 	codec.afterEncode = function(enc, obj, node)
 	{

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

@@ -10,7 +10,7 @@
 		var w = 50;
 		var h = 50;
 
-		var s = 'shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;perimeter=rhombusPerimeter;background=gateway;';
+		var s = 'shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;perimeter=rhombusPerimeter;background=gateway;outlineConnect=0;';
 		//default tags
 		var dt = 'bpmn business process model gateway ';
 		
@@ -100,7 +100,7 @@
 			this.createVertexTemplateEntry(s + 'outline=end;symbol=terminate;', w, h, '', 'Terminate Gateway', null, null, dt + 'terminate')
 		]);
 		
-		s = 'shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;perimeter=ellipsePerimeter;';
+		s = 'shape=mxgraph.bpmn.shape;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;perimeter=ellipsePerimeter;outlineConnect=0;';
 		var dt = 'bpmn business process model event ';
 		
 		this.addPaletteFunctions('bpmnEvents', 'BPMN Events', false,

File diff ditekan karena terlalu besar
+ 4 - 4
src/main/webapp/js/embed-static.min.js


+ 16 - 3
src/main/webapp/js/mxgraph/Editor.js

@@ -269,6 +269,14 @@ Editor.prototype.editBlankUrl = window.location.protocol + '//' + window.locatio
  */
 Editor.prototype.init = function() { };
 
+/**
+ * Sets the XML node for the current diagram.
+ */
+Editor.prototype.isChromelessView = function()
+{
+	return this.chromeless;
+};
+
 /**
  * Sets the XML node for the current diagram.
  */
@@ -293,6 +301,11 @@ Editor.prototype.editAsNew = function(xml, title)
 {
 	var p = (title != null) ? '?title=' + encodeURIComponent(title) : '';
 	
+	if (urlParams['ui'] != null)
+	{
+		p += ((p.length > 0) ? '&' : '?') + 'ui=' + urlParams['ui'];
+	}
+	
 	if (this.editorWindow != null && !this.editorWindow.closed)
 	{
 		this.editorWindow.focus();
@@ -348,7 +361,7 @@ Editor.prototype.createGraph = function(themes, model)
  */
 Editor.prototype.resetGraph = function()
 {
-	this.graph.gridEnabled = !this.chromeless || urlParams['grid'] == '1';
+	this.graph.gridEnabled = !this.isChromelessView() || urlParams['grid'] == '1';
 	this.graph.graphHandler.guidesEnabled = true;
 	this.graph.setTooltips(true);
 	this.graph.setConnectable(true);
@@ -369,7 +382,7 @@ Editor.prototype.resetGraph = function()
  */
 Editor.prototype.readGraphState = function(node)
 {
-	this.graph.gridEnabled = node.getAttribute('grid') != '0' && (!this.chromeless || urlParams['grid'] == '1');
+	this.graph.gridEnabled = node.getAttribute('grid') != '0' && (!this.isChromelessView() || urlParams['grid'] == '1');
 	this.graph.gridSize = parseFloat(node.getAttribute('gridSize')) || mxGraph.prototype.gridSize;
 	this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0';
 	this.graph.setTooltips(node.getAttribute('tooltips') != '0');
@@ -394,7 +407,7 @@ Editor.prototype.readGraphState = function(node)
 		this.graph.pageScale = mxGraph.prototype.pageScale;
 	}
 
-	if (!this.graph.lightbox)
+	if (!this.graph.isLightboxView())
 	{
 		var pv = node.getAttribute('page');
 	

+ 5 - 5
src/main/webapp/js/mxgraph/EditorUi.js

@@ -487,6 +487,7 @@ EditorUi = function(editor, container, lightbox)
 	                 ['strokeColor', 'strokeWidth'],
 	                 ['fillColor', 'gradientColor'],
 	                 valueStyles,
+	                 ['opacity'],
 	                 ['align'],
 	                 ['html']];
 	
@@ -1361,7 +1362,7 @@ EditorUi.prototype.initCanvas = function()
 	var resize = null;
 	var ui = this;
 	
-	if (this.editor.chromeless)
+	if (this.editor.isChromelessView())
 	{
         resize = mxUtils.bind(this, function(autoscale, maxScale, cx, cy)
         {
@@ -1518,7 +1519,6 @@ EditorUi.prototype.initCanvas = function()
 				mxEvent.consume(evt);
 			}), Editor.previousLargeImage, mxResources.get('previousPage'));
 			
-			
 			var pageInfo = document.createElement('div');
 			pageInfo.style.display = 'inline-block';
 			pageInfo.style.verticalAlign = 'top';
@@ -1582,7 +1582,7 @@ EditorUi.prototype.initCanvas = function()
 			
 			addButton(mxUtils.bind(this, function(evt)
 			{
-				if (graph.lightbox)
+				if (graph.isLightboxView())
 				{
 					if (graph.view.scale == 1)
 					{
@@ -2152,7 +2152,7 @@ EditorUi.prototype.addBeforeUnloadListener = function()
 	// This must be disabled during save and image export
 	window.onbeforeunload = mxUtils.bind(this, function()
 	{
-		if (!this.editor.chromeless)
+		if (!this.editor.isChromelessView())
 		{
 			return this.onBeforeUnload();
 		}
@@ -2442,7 +2442,7 @@ EditorUi.prototype.resetScrollbars = function()
 			graph.view.setTranslate(0, 0);
 		}
 	}
-	else if (!this.editor.chromeless)
+	else if (!this.editor.isChromelessView())
 	{
 		if (mxUtils.hasScrollbars(graph.container))
 		{

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

@@ -1274,7 +1274,7 @@ BaseFormatPanel.prototype.createRelativeOption = function(label, key, width, han
 	mxUtils.write(div, label);
 	div.style.fontWeight = 'bold';
 	
-	function update(evt)
+	var update = mxUtils.bind(this, function(evt)
 	{
 		if (handler != null)
 		{
@@ -1295,13 +1295,15 @@ BaseFormatPanel.prototype.createRelativeOption = function(label, key, width, han
 				}
 				
 				graph.setCellStyles(key, value, graph.getSelectionCells());
+				this.editorUi.fireEvent(new mxEventObject('styleChanged', 'keys', [key],
+					'values', [value], 'cells', graph.getSelectionCells()));
 			}
 	
 			input.value = ((value != null) ? value : '100') + ' %';
 		}
 		
 		mxEvent.consume(evt);
-	};
+	});
 
 	var input = this.addUnitInput(div, '%', 20, width, update, 10, -15, handler != null);
 
@@ -5089,7 +5091,6 @@ DiagramFormatPanel.prototype.addGridOption = function(container)
 			if (color == mxConstants.NONE)
 			{
 				graph.setGridEnabled(false);
-				ui.fireEvent(new mxEventObject('gridEnabledChanged'));
 			}
 			else
 			{
@@ -5099,6 +5100,7 @@ DiagramFormatPanel.prototype.addGridOption = function(container)
 
 			input.style.display = (graph.isGridEnabled()) ? '' : 'none';
 			stepper.style.display = input.style.display;
+			ui.fireEvent(new mxEventObject('gridEnabledChanged'));
 		}, '#e0e0e0',
 		{
 			install: function(apply)

+ 19 - 2
src/main/webapp/js/mxgraph/Graph.js

@@ -1035,6 +1035,11 @@ Graph.prototype.defaultThemes = {};
  */
 Graph.prototype.baseUrl = ((window != window.top) ? document.referrer : document.location.toString()).split('#')[0];
 
+/**
+ * Specifies if the label should be edited after an insert.
+ */
+Graph.prototype.editAfterInsert = false;
+
 /**
  * Installs child layout styles.
  */
@@ -1094,6 +1099,14 @@ Graph.prototype.init = function(container)
 	this.initLayoutManager();
 };
 
+/**
+ * Sets the XML node for the current diagram.
+ */
+Graph.prototype.isLightboxView = function()
+{
+	return this.lightbox;
+};
+
 /**
  * Installs automatic layout via styles
  */
@@ -1938,6 +1951,7 @@ Graph.prototype.connectVertex = function(source, direction, length, evt, forceCl
 //			var elbowValue = (direction == mxConstants.DIRECTION_NORTH || direction == mxConstants.DIRECTION_SOUTH) ? 'vertical' : 'horizontal';
 //			edge.style = mxUtils.setStyle(edge.style, 'edgeStyle', 'elbowEdgeStyle');
 //			edge.style = mxUtils.setStyle(edge.style, 'elbow', elbowValue);
+//			edge.style = mxUtils.setStyle(edge.style, 'sourcePortConstraint', direction);
 			result.push(edge);
 		}
 		
@@ -3071,6 +3085,9 @@ HoverIcons.prototype.drag = function(evt, x, y)
 		
 		// Uses elbow edges with vertical or horizontal direction
 //		var direction = this.getDirection();
+//		var es = this.graph.connectionHandler.edgeState;
+//		es.cell.style = mxUtils.setStyle(es.cell.style, 'sourcePortConstraint', direction);
+//		es.style['sourcePortConstraint'] = direction;
 //		var elbowValue = (direction == mxConstants.DIRECTION_NORTH || direction == mxConstants.DIRECTION_SOUTH) ? 'vertical' : 'horizontal';
 //		
 //		var es = this.graph.connectionHandler.edgeState;
@@ -5113,9 +5130,9 @@ if (typeof mxVertexHandler != 'undefined')
 			
 			// Places at same x-coord and 2 grid sizes below existing graph
 			var x = this.snap(Math.round(Math.max(pt.x, bds.x / view.scale - view.translate.x +
-				((bds.width == 0) ? this.gridSize : 0))));
+				((bds.width == 0) ? 2 * this.gridSize : 0))));
 			var y = this.snap(Math.round(Math.max(pt.y, (bds.y + bds.height) / view.scale - view.translate.y +
-				((bds.height == 0) ? 1 : 2) * this.gridSize)));
+				2 * this.gridSize)));
 			
 			return new mxPoint(x, y);
 		};

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

@@ -510,13 +510,13 @@ Menus.prototype.get = function(name)
 /**
  * Adds the given submenu.
  */
-Menus.prototype.addSubmenu = function(name, menu, parent)
+Menus.prototype.addSubmenu = function(name, menu, parent, label)
 {
 	var enabled = this.get(name).isEnabled();
-	
+
 	if (menu.showDisabled || enabled)
 	{
-		var submenu = menu.addItem(mxResources.get(name), null, null, parent, null, enabled);
+		var submenu = menu.addItem(label || mxResources.get(name), null, null, parent, null, enabled);
 		this.addMenu(name, menu, submenu);
 	}
 };
@@ -1118,17 +1118,19 @@ Menus.prototype.createMenubar = function(container)
 /**
  * Creates the keyboard event handler for the current graph and history.
  */
-Menus.prototype.menuCreated = function(menu, elt)
+Menus.prototype.menuCreated = function(menu, elt, className)
 {
 	if (elt != null)
 	{
+		className = (className != null) ? className : 'geItem';
+		
 		menu.addListener('stateChanged', function()
 		{
 			elt.enabled = menu.enabled;
 			
 			if (!menu.enabled)
 			{
-				elt.className = 'geItem mxDisabled';
+				elt.className = className + ' mxDisabled';
 				
 				if (document.documentMode == 8)
 				{
@@ -1137,7 +1139,7 @@ Menus.prototype.menuCreated = function(menu, elt)
 			}
 			else
 			{
-				elt.className = 'geItem';
+				elt.className = className;
 				
 				if (document.documentMode == 8)
 				{

+ 63 - 33
src/main/webapp/js/mxgraph/Sidebar.js

@@ -1610,7 +1610,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			var cell = new mxCell('Sub-Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;');
 			cell.vertex = true;
 			
-			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=plus;');
+			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=plus;outlineConnect=0;');
 			cell1.vertex = true;
 			cell1.geometry.relative = true;
 			cell1.geometry.offset = new mxPoint(-7, -14);
@@ -1623,7 +1623,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			var cell = new mxCell('Looped\nSub-Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1');
 			cell.vertex = true;
 			
-			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=mxgraph.bpmn.loop;');
+			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=mxgraph.bpmn.loop;outlineConnect=0;');
 			cell1.vertex = true;
 			cell1.geometry.relative = true;
 			cell1.geometry.offset = new mxPoint(-15, -14);
@@ -1642,7 +1642,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			var cell = new mxCell('Receive', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;');
 			cell.vertex = true;
 			
-			var cell1 = new mxCell('', new mxGeometry(0, 0, 20, 14), 'html=1;shape=message;');
+			var cell1 = new mxCell('', new mxGeometry(0, 0, 20, 14), 'html=1;shape=message;outlineConnect=0;');
 			cell1.vertex = true;
 			cell1.geometry.relative = true;
 			cell1.geometry.offset = new mxPoint(7, 7);
@@ -1655,13 +1655,13 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			var cell = new mxCell('User', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;');
 			cell.vertex = true;
 			
-			var cell1 = new mxCell('', new mxGeometry(0, 0, 14, 14), 'html=1;shape=mxgraph.bpmn.user_task;');
+			var cell1 = new mxCell('', new mxGeometry(0, 0, 14, 14), 'html=1;shape=mxgraph.bpmn.user_task;outlineConnect=0;');
 			cell1.vertex = true;
 			cell1.geometry.relative = true;
 			cell1.geometry.offset = new mxPoint(7, 7);
 			cell.insert(cell1);
 			
-			var cell2 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=plus;');
+			var cell2 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=plus;outlineConnect=0;');
 			cell2.vertex = true;
 			cell2.geometry.relative = true;
 			cell2.geometry.offset = new mxPoint(-7, -14);
@@ -1674,7 +1674,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			var cell = new mxCell('Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;');
 			cell.vertex = true;
 
-			var cell1 = new mxCell('', new mxGeometry(1, 1, 30, 30), 'shape=mxgraph.bpmn.timer_start;perimeter=ellipsePerimeter;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;');
+			var cell1 = new mxCell('', new mxGeometry(1, 1, 30, 30), 'shape=mxgraph.bpmn.timer_start;perimeter=ellipsePerimeter;html=1;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;outlineConnect=0;');
 			cell1.vertex = true;
 			cell1.geometry.relative = true;
 			cell1.geometry.offset = new mxPoint(-40, -15);
@@ -1687,7 +1687,7 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			var cell = new mxCell('Process', new mxGeometry(0, 0, 120, 80), 'html=1;whiteSpace=wrap;rounded=1;');
 			cell.vertex = true;
 
-			var cell1 = new mxCell('', new mxGeometry(1, 0, 30, 30), 'shape=mxgraph.bpmn.timer_start;perimeter=ellipsePerimeter;html=1;labelPosition=right;labelBackgroundColor=#ffffff;align=left;');
+			var cell1 = new mxCell('', new mxGeometry(1, 0, 30, 30), 'shape=mxgraph.bpmn.timer_start;perimeter=ellipsePerimeter;html=1;labelPosition=right;labelBackgroundColor=#ffffff;align=left;outlineConnect=0;');
 			cell1.vertex = true;
 			cell1.geometry.relative = true;
 			cell1.geometry.offset = new mxPoint(-15, 10);
@@ -1697,11 +1697,11 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 		}),
 		this.createVertexTemplateEntry('swimlane;html=1;horizontal=0;startSize=20;', 320, 240, 'Pool', 'Pool', null, null, 'bpmn pool'),
 		this.createVertexTemplateEntry('swimlane;html=1;horizontal=0;swimlaneFillColor=white;swimlaneLine=0;', 300, 120, 'Lane', 'Lane', null, null, 'bpmn lane'),
-	 	this.createVertexTemplateEntry('shape=hexagon;html=1;whiteSpace=wrap;perimeter=hexagonPerimeter;', 60, 50, '', 'Conversation', null, null, 'bpmn conversation'),
-	 	this.createVertexTemplateEntry('shape=hexagon;html=1;whiteSpace=wrap;perimeter=hexagonPerimeter;strokeWidth=4', 60, 50, '', 'Call Conversation', null, null, 'bpmn call conversation'),
+	 	this.createVertexTemplateEntry('shape=hexagon;html=1;whiteSpace=wrap;perimeter=hexagonPerimeter;rounded=0;', 60, 50, '', 'Conversation', null, null, 'bpmn conversation'),
+	 	this.createVertexTemplateEntry('shape=hexagon;html=1;whiteSpace=wrap;perimeter=hexagonPerimeter;strokeWidth=4;rounded=0;', 60, 50, '', 'Call Conversation', null, null, 'bpmn call conversation'),
 		this.addEntry('bpmn subconversation sub conversation sub-conversation', function()
 		{
-			var cell = new mxCell('', new mxGeometry(0, 0, 60, 50), 'shape=hexagon;whiteSpace=wrap;html=1;perimeter=hexagonPerimeter;');
+			var cell = new mxCell('', new mxGeometry(0, 0, 60, 50), 'shape=hexagon;whiteSpace=wrap;html=1;perimeter=hexagonPerimeter;rounded=0;');
 			cell.vertex = true;
 			
 			var cell1 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;shape=plus;');
@@ -1717,13 +1717,13 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			var cell = new mxCell('', new mxGeometry(0, 0, 40, 60), 'shape=note;whiteSpace=wrap;size=16;html=1;');
 			cell.vertex = true;
 			
-			var cell1 = new mxCell('', new mxGeometry(0, 0, 14, 14), 'html=1;shape=singleArrow;arrowWidth=0.4;arrowSize=0.4;');
+			var cell1 = new mxCell('', new mxGeometry(0, 0, 14, 14), 'html=1;shape=singleArrow;arrowWidth=0.4;arrowSize=0.4;outlineConnect=0;');
 			cell1.vertex = true;
 			cell1.geometry.relative = true;
 			cell1.geometry.offset = new mxPoint(2, 2);
 			cell.insert(cell1);
 			
-			var cell2 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;whiteSpace=wrap;shape=parallelMarker;');
+			var cell2 = new mxCell('', new mxGeometry(0.5, 1, 14, 14), 'html=1;whiteSpace=wrap;shape=parallelMarker;outlineConnect=0;');
 			cell2.vertex = true;
 			cell2.geometry.relative = true;
 			cell2.geometry.offset = new mxPoint(-7, -14);
@@ -1732,19 +1732,19 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			return sb.createVertexTemplateFromCells([cell], cell.geometry.width, cell.geometry.height, 'Data Object');
 		}),
 		this.createVertexTemplateEntry('shape=datastore;whiteSpace=wrap;html=1;', 60, 60, '', 'Data Store', null, null, 'bpmn data store'),
-	 	this.createVertexTemplateEntry('shape=plus;html=1;', 14, 14, '', 'Sub-Process Marker', null, null, 'bpmn subprocess sub process sub-process marker'),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.loop;html=1;', 14, 14, '', 'Loop Marker', null, null, 'bpmn loop marker'),
-	 	this.createVertexTemplateEntry('shape=parallelMarker;html=1;', 14, 14, '', 'Parallel MI Marker', null, null, 'bpmn parallel mi marker'),
-	 	this.createVertexTemplateEntry('shape=parallelMarker;direction=south;html=1;', 14, 14, '', 'Sequential MI Marker', null, null, 'bpmn sequential mi marker'),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.ad_hoc;fillColor=#000000;html=1;', 14, 14, '', 'Ad Hoc Marker', null, null, 'bpmn ad hoc marker'),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.compensation;html=1;', 14, 14, '', 'Compensation Marker', null, null, 'bpmn compensation marker'),
-	 	this.createVertexTemplateEntry('shape=message;whiteSpace=wrap;html=1;fillColor=#000000;strokeColor=#ffffff;strokeWidth=2;', 40, 30, '', 'Send Task', null, null, 'bpmn send task'),
-	 	this.createVertexTemplateEntry('shape=message;whiteSpace=wrap;html=1;', 40, 30, '', 'Receive Task', null, null, 'bpmn receive task'),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.user_task;html=1;', 14, 14, '', 'User Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'user_task').join(' ')),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.manual_task;html=1;', 14, 14, '', 'Manual Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'user_task').join(' ')),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.business_rule_task;html=1;', 14, 14, '', 'Business Rule Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'business_rule_task').join(' ')),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.service_task;html=1;', 14, 14, '', 'Service Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'service_task').join(' ')),
-	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.script_task;html=1;', 14, 14, '', 'Script Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'script_task').join(' ')),
+	 	this.createVertexTemplateEntry('shape=plus;html=1;outlineConnect=0;', 14, 14, '', 'Sub-Process Marker', null, null, 'bpmn subprocess sub process sub-process marker'),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.loop;html=1;outlineConnect=0;', 14, 14, '', 'Loop Marker', null, null, 'bpmn loop marker'),
+	 	this.createVertexTemplateEntry('shape=parallelMarker;html=1;outlineConnect=0;', 14, 14, '', 'Parallel MI Marker', null, null, 'bpmn parallel mi marker'),
+	 	this.createVertexTemplateEntry('shape=parallelMarker;direction=south;html=1;outlineConnect=0;', 14, 14, '', 'Sequential MI Marker', null, null, 'bpmn sequential mi marker'),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.ad_hoc;fillColor=#000000;html=1;outlineConnect=0;', 14, 14, '', 'Ad Hoc Marker', null, null, 'bpmn ad hoc marker'),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.compensation;html=1;outlineConnect=0;', 14, 14, '', 'Compensation Marker', null, null, 'bpmn compensation marker'),
+	 	this.createVertexTemplateEntry('shape=message;whiteSpace=wrap;html=1;outlineConnect=0;fillColor=#000000;strokeColor=#ffffff;strokeWidth=2;', 40, 30, '', 'Send Task', null, null, 'bpmn send task'),
+	 	this.createVertexTemplateEntry('shape=message;whiteSpace=wrap;html=1;outlineConnect=0;', 40, 30, '', 'Receive Task', null, null, 'bpmn receive task'),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.user_task;html=1;outlineConnect=0;', 14, 14, '', 'User Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'user_task').join(' ')),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.manual_task;html=1;outlineConnect=0;', 14, 14, '', 'Manual Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'user_task').join(' ')),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.business_rule_task;html=1;outlineConnect=0;', 14, 14, '', 'Business Rule Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'business_rule_task').join(' ')),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.service_task;html=1;outlineConnect=0;', 14, 14, '', 'Service Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'service_task').join(' ')),
+	 	this.createVertexTemplateEntry('shape=mxgraph.bpmn.script_task;html=1;outlineConnect=0;', 14, 14, '', 'Script Task', null, null, this.getTagsForStencil('mxgraph.bpmn', 'script_task').join(' ')),
 		this.createVertexTemplateEntry('html=1;shape=mxgraph.flowchart.annotation_2;align=left;', 50, 100, '', 'Annotation', null, null, this.getTagsForStencil('bpmn', 'annotation_1', 'bpmn business process model ').join(' ')),
 		this.createVertexTemplateEntry('rounded=1;arcSize=10;dashed=1;strokeColor=#000000;fillColor=none;gradientColor=none;dashPattern=8 3 1 3;strokeWidth=2;',
 				 200, 200, '', 'Group', null, null, this.getTagsForStencil('bpmn', 'group', 'bpmn business process model ').join(' ')),
@@ -1760,9 +1760,8 @@ Sidebar.prototype.addBpmnPalette = function(dir, expand)
 			edge.geometry.relative = true;
 			edge.edge = true;
 			
-	    	var cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'shape=message;html=1;');
+	    	var cell = new mxCell('', new mxGeometry(0, 0, 20, 14), 'shape=message;html=1;outlineConnect=0;');
 	    	cell.geometry.relative = true;
-	    	cell.setConnectable(false);
 	    	cell.vertex = true;
 	    	cell.geometry.offset = new mxPoint(-10, -7);
 	    	edge.insert(cell);
@@ -2015,9 +2014,18 @@ Sidebar.prototype.createDropHandler = function(cells, allowSplit, allowCellsInse
 {
 	allowCellsInserted = (allowCellsInserted != null) ? allowCellsInserted : true;
 	
-	return mxUtils.bind(this, function(graph, evt, target, x, y)
+	return mxUtils.bind(this, function(graph, evt, target, x, y, force)
 	{
-		if (graph.isEnabled())
+		var elt = (force) ? null : ((mxEvent.isTouchEvent(evt) || mxEvent.isPenEvent(evt)) ?
+			document.elementFromPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)) :
+			mxEvent.getSource(evt));
+		
+		while (elt != null && elt != this.container)
+		{
+			elt = elt.parentNode;
+		}
+		
+		if (elt == null && graph.isEnabled())
 		{
 			cells = graph.getImportableCells(cells);
 			
@@ -2090,6 +2098,15 @@ Sidebar.prototype.createDropHandler = function(cells, allowSplit, allowCellsInse
 						graph.scrollCellToVisible(select[0]);
 						graph.setSelectionCells(select);
 					}
+
+					if (graph.editAfterInsert && evt != null && mxEvent.isMouseEvent(evt) &&
+						select != null && select.length == 1)
+					{
+						window.setTimeout(function()
+						{
+							graph.startEditing(select[0]);
+						}, 0);
+					}
 				}
 			}
 			
@@ -2114,7 +2131,7 @@ Sidebar.prototype.createDragPreview = function(width, height)
 /**
  * Creates a drag source for the given element.
  */
-Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCellIndex)
+Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCellIndex, evt)
 {
 	var geo = this.getDropAndConnectGeometry(source, targets[dropCellIndex], direction, targets);
 	
@@ -2124,6 +2141,7 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
 	if (geo != null)
 	{
 		var graph = this.editorUi.editor.graph;
+		var editingCell = null;
 
 		graph.model.beginUpdate();
 		try
@@ -2218,6 +2236,7 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
 				graph.model.setGeometry(targets[dropCellIndex], geo);
 				graph.cellsMoved(targets, dx, dy, null, null, true);
 				tmp = targets.slice();
+				editingCell = (tmp.length == 1) ? tmp[0] : null;
 				targets.push(graph.insertEdge(null, null, '', source, targets[dropCellIndex],
 					graph.createCurrentEdgeStyle()));
 			}
@@ -2228,6 +2247,15 @@ Sidebar.prototype.dropAndConnect = function(source, targets, direction, dropCell
 		{
 			graph.model.endUpdate();
 		}
+		
+		if (graph.editAfterInsert && evt != null && mxEvent.isMouseEvent(evt) &&
+			editingCell != null)
+		{
+			window.setTimeout(function()
+			{
+				graph.startEditing(editingCell);
+			}, 0);
+		}
 	}
 	
 	return tmp;
@@ -2431,7 +2459,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 		else if (cells != null && activeArrow != null && currentTargetState != null && activeArrow != styleTarget)
 		{
 			var index = (graph.model.isEdge(currentTargetState.cell) || freeSourceEdge == null) ? firstVertex : freeSourceEdge;
-			graph.setSelectionCells(this.dropAndConnect(currentTargetState.cell, cells, direction, index));
+			graph.setSelectionCells(this.dropAndConnect(currentTargetState.cell, cells, direction, index, evt));
 		}
 		else
 		{
@@ -3081,6 +3109,7 @@ Sidebar.prototype.createDragSource = function(elt, dropHandler, preview, cells,
 Sidebar.prototype.itemClicked = function(cells, ds, evt, elt)
 {
 	var graph = this.editorUi.editor.graph;
+	graph.container.focus();
 	
 	// Alt+Click inserts and connects
 	if (mxEvent.isAltDown(evt))
@@ -3101,7 +3130,8 @@ Sidebar.prototype.itemClicked = function(cells, ds, evt, elt)
 			{
 				graph.setSelectionCells(this.dropAndConnect(graph.getSelectionCell(), cells, (mxEvent.isMetaDown(evt) || mxEvent.isControlDown(evt)) ?
 					(mxEvent.isShiftDown(evt) ? mxConstants.DIRECTION_WEST : mxConstants.DIRECTION_NORTH) : 
-					(mxEvent.isShiftDown(evt) ? mxConstants.DIRECTION_EAST : mxConstants.DIRECTION_SOUTH), firstVertex));
+					(mxEvent.isShiftDown(evt) ? mxConstants.DIRECTION_EAST : mxConstants.DIRECTION_SOUTH),
+					firstVertex, evt));
 				graph.scrollCellToVisible(graph.getSelectionCell());
 			}
 		}
@@ -3115,7 +3145,7 @@ Sidebar.prototype.itemClicked = function(cells, ds, evt, elt)
 	else
 	{
 		var pt = graph.getFreeInsertPoint();
-		ds.drop(graph, evt, null, pt.x, pt.y);
+		ds.drop(graph, evt, null, pt.x, pt.y, true);
 		
 		if (this.editorUi.hoverIcons != null && (mxEvent.isTouchEvent(evt) || mxEvent.isPenEvent(evt)))
 		{

File diff ditekan karena terlalu besar
+ 4 - 4
src/main/webapp/js/reader.min.js


File diff ditekan karena terlalu besar
+ 787 - 726
src/main/webapp/js/viewer.min.js


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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=‫خيارات الإدخال الرياضي‬
 makeCopy=‫إنشاء نسخة‬
 manual=‫يدوي‬
 middle=‫وسط‬
+minimal=Minimal
 misc=‫متفرقات‬
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Математическа текстообработк
 makeCopy=Направи копие
 manual=Ръководство
 middle=Среден
+minimal=Minimal
 misc=Разни
 mockups=Макети
 modificationDate=Дата на модификация

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematičke postavke pisanja
 makeCopy=Napravi kopiju
 manual=Ručno
 middle=Sredina
+minimal=Minimal
 misc=Mješavina
 mockups=Model
 modificationDate=Datim uređivanja

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Composició tipogràfica matemàtica
 makeCopy=Fes una còpia
 manual=Manual
 middle=Mig
+minimal=Minimal
 misc=Diversos
 mockups=Esbossos
 modificationDate=Data de modificació

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematické nastavení písma
 makeCopy=Udělat kopii
 manual=Manuál
 middle=Střed
+minimal=Minimal
 misc=Různé
 mockups=Mockup prototypy
 modificationDate=Datum změny

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematisk tegnsætning
 makeCopy=Opret en kopi
 manual=Manual
 middle=Midte
+minimal=Minimal
 misc=Div.
 mockups=Mockups
 modificationDate=Ændringsdato

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematischer Formelsatz
 makeCopy=Kopie erstellen
 manual=Manuell
 middle=Mitte
+minimal=Minimal
 misc=Verschiedenes
 mockups=Mockups
 modificationDate=Änderungsdatum
@@ -477,7 +478,7 @@ openLink=Verknüpfung öffnen
 openInNewWindow=In neuem Fenster öffnen
 openInThisWindow=In diesem Fenster öffnen
 openIt={1} öffnen
-openRecent=Zuletzt geöffnet
+openRecent=Kürzlich geöffnet
 openSupported=Unterstützte Formate sind mit dieser Anwendung erstellte Dateien (.xml), .vsdx und .gliffy
 options=Optionen
 organic=Organisch

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Μαθηματική ρύθμιση κειμένου π
 makeCopy=Δημιουργία αντιγράφου
 manual=Χειροκίνητα
 middle=Μέσο
+minimal=Minimal
 misc=Misc
 mockups=Προσχέδια
 modificationDate=Ημερομηνία τροποποίησης

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Composición tipográfica matemática
 makeCopy=Hacer una copia
 manual=Manual
 middle=Medio
+minimal=Minimal
 misc=Miscelánea
 mockups=Bosquejos
 modificationDate=Fecha de modificación

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matemaatiline vormistus
 makeCopy=Tee koopia
 manual=Manuaalne
 middle=Keskel
+minimal=Minimal
 misc=Erinevad
 mockups=Mallid
 modificationDate=Muutmise kuupäev

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=‫حروف چینی ریاضی‬
 makeCopy=‫ایجاد یک کپی‬
 manual=‫دَستی‬
 middle=‫وسط‬
+minimal=Minimal
 misc=‫متفرقه‬
 mockups=‫ماکت ها‬
 modificationDate=‫تاریخ اصلاح‬

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matemaattiset näppäilyasetukset
 makeCopy=Luo kopio
 manual=Manuaalinen
 middle=Keskellä
+minimal=Minimal
 misc=Sekalaiset
 mockups=Mallit
 modificationDate=Muokkauspäivämäärä

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematikong Typesetting
 makeCopy=Gumawa ng kopya
 manual=De-Mano
 middle=Gitna
+minimal=Minimal
 misc=Sari-sari
 mockups=Mga Mockup
 modificationDate=Petsa ng pagbago

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Paramètres d'entrée mathématique
 makeCopy=Faire une copie
 manual=Manuel
 middle=Au milieu
+minimal=Minimal
 misc=Divers
 mockups=Maquettes
 modificationDate=Date de modification

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=‫סידור דפוס מתמטי‬
 makeCopy=‫צור עותק‬
 manual=‫ידני‬
 middle=‫אמצע‬
+minimal=Minimal
 misc=‫שונות‬
 mockups=‫סקיצות‬
 modificationDate=‫השתנה בתאריך‬

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematikai betűszedés
 makeCopy=Másolatot készít
 manual=Kézi
 middle=Közép
+minimal=Minimal
 misc=Vegyes
 mockups=Makett
 modificationDate=Módosítási dátum

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=mathematicalTypesetting
 makeCopy=makeCopy
 manual=manual
 middle=middle
+minimal=minimal
 misc=misc
 mockups=mockups
 modificationDate=modificationDate

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Tata Cetak Matematis
 makeCopy=Buat Salinan
 manual=Manual
 middle=Tengah
+minimal=Minimal
 misc=Lain-lain
 mockups=Maket
 modificationDate=Tanggal ubah

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Parametri di scrittura matematica
 makeCopy=Fai una copia
 manual=Manuale
 middle=Al centro
+minimal=Minimal
 misc=Miscellanea
 mockups=Modello
 modificationDate=Data di modifica

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=数式組版
 makeCopy=複製する
 manual=マニュアル
 middle=中央揃え
+minimal=Minimal
 misc=その他
 mockups=実物大
 modificationDate=変更日

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=수학 공식 입력
 makeCopy=복사본 만들기
 manual=수동
 middle=중간
+minimal=Minimal
 misc=기타
 mockups=모형
 modificationDate=변경일

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Atur Huruf Matematik
 makeCopy=Buat satu Salinan
 manual=Manual
 middle=Tengah
+minimal=Minimal
 misc=Pelbagai
 mockups=Latihan
 modificationDate=Tarikh diubahsuai

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Wiskundige notatie
 makeCopy=Een kopie maken
 manual=Handleiding
 middle=Midden
+minimal=Minimal
 misc=Overige
 mockups=Modellen
 modificationDate=Aanpassingsdatum

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematisk tegnsetting
 makeCopy=Lag en kopi
 manual=Manual
 middle=Midten
+minimal=Minimal
 misc=Øvrig
 mockups=Testmodeller
 modificationDate=Endringsdato

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematyczny zestaw znaków
 makeCopy=Zrób kopię 
 manual=Ręczny
 middle=Środek
+minimal=Minimal
 misc=Różne
 mockups=Modele
 modificationDate=Data zmiany

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Sistema tipográfico matemático
 makeCopy=Fazer uma cópia
 manual=Manual
 middle=Meio
+minimal=Minimal
 misc=Miscelânea
 mockups=Protótipos
 modificationDate=Data da alteração

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Composição tipográfica matemática
 makeCopy=Fazer uma cópia
 manual=Manual
 middle=Meio
+minimal=Minimal
 misc=Diversos
 mockups=Maquetas
 modificationDate=Data de modificação

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Sistem tipografic matematic
 makeCopy=Fă o copie
 manual=Manual
 middle=Mijloc
+minimal=Minimal
 misc=Diverse
 mockups=Mockups
 modificationDate=Data modificării

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Математический набор
 makeCopy=Создать копию
 manual=Вручную
 middle=Середина
+minimal=Minimal
 misc=Прочее
 mockups=Макеты
 modificationDate=Дата изменения

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematički slog
 makeCopy=Kreiraj kopiju
 manual=Ručno
 middle=Sredina
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematisk typsättning
 makeCopy=Gör en kopia
 manual=Manual
 middle=Mitten
+minimal=Minimal
 misc=Övrigt
 mockups=Prototyper
 modificationDate=Ändringsdatum

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Mathematical Typesetting
 makeCopy=Make a Copy
 manual=Manual
 middle=Middle
+minimal=Minimal
 misc=Misc
 mockups=Mockups
 modificationDate=Modification date

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=การตั้งค่าการพิมพ์
 makeCopy=สร้างฉบับคัดลอก
 manual=คู่มือ
 middle=กลาง
+minimal=Minimal
 misc=เบ็ดเตล็ด
 mockups=แบบจำลอง
 modificationDate=วันที่แก้ไข

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Matematiksel dizgi
 makeCopy=Kopyasını yap
 manual=Elle
 middle=Orta
+minimal=Minimal
 misc=Çeşitli 
 mockups=Test modelleri
 modificationDate=Modifikasyon tarihi

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Математична верстка
 makeCopy=Зробити копію
 manual=Вручну
 middle=Посередині
+minimal=Minimal
 misc=Різне
 mockups=Макети
 modificationDate=Дата зміни

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=Sắp chữ kiểu toán học
 makeCopy=Tạo bản sao
 manual=Hướng dẫn
 middle=Giữa
+minimal=Minimal
 misc=Linh tinh
 mockups=Bản mẫu
 modificationDate=Ngày chỉnh sửa

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=數學排版
 makeCopy=建立副本
 manual=手冊
 middle=垂直置中
+minimal=Minimal
 misc=其他
 mockups=實物模型
 modificationDate=修改日期

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

@@ -418,6 +418,7 @@ mathematicalTypesetting=数学排版
 makeCopy=创建副本
 manual=手册
 middle=垂直居中
+minimal=Minimal
 misc=杂项
 mockups=实体模型
 modificationDate=修改日期