David Benson 4 лет назад
Родитель
Сommit
d8601ce593
80 измененных файлов с 2377 добавлено и 2250 удалено
  1. 19 0
      ChangeLog
  2. 1 1
      VERSION
  3. 30 76
      etc/propgen/package-lock.json
  4. 1 1
      etc/propgen/package.json
  5. 5 0
      package.json
  6. 47 25
      src/main/java/com/mxgraph/online/AbsAuthServlet.java
  7. 0 256
      src/main/java/com/mxgraph/online/GoogleGadgetServlet.java
  8. 868 858
      src/main/webapp/js/app.min.js
  9. 3 2
      src/main/webapp/js/diagramly/App.js
  10. 1 1
      src/main/webapp/js/diagramly/Devel.js
  11. 362 35
      src/main/webapp/js/diagramly/Dialogs.js
  12. 11 8
      src/main/webapp/js/diagramly/Editor.js
  13. 3 3
      src/main/webapp/js/diagramly/Menus.js
  14. 0 16
      src/main/webapp/js/diagramly/Minimal.js
  15. 5 2
      src/main/webapp/js/grapheditor/Actions.js
  16. 1 4
      src/main/webapp/js/grapheditor/Menus.js
  17. 383 384
      src/main/webapp/js/viewer-static.min.js
  18. 383 384
      src/main/webapp/js/viewer.min.js
  19. 3 3
      src/main/webapp/mxgraph/mxClient.js
  20. 1 0
      src/main/webapp/resources/dia.txt
  21. 1 0
      src/main/webapp/resources/dia_am.txt
  22. 1 0
      src/main/webapp/resources/dia_ar.txt
  23. 1 0
      src/main/webapp/resources/dia_bg.txt
  24. 1 0
      src/main/webapp/resources/dia_bn.txt
  25. 1 0
      src/main/webapp/resources/dia_bs.txt
  26. 1 0
      src/main/webapp/resources/dia_ca.txt
  27. 1 0
      src/main/webapp/resources/dia_cs.txt
  28. 1 0
      src/main/webapp/resources/dia_da.txt
  29. 1 0
      src/main/webapp/resources/dia_de.txt
  30. 1 0
      src/main/webapp/resources/dia_el.txt
  31. 1 0
      src/main/webapp/resources/dia_eo.txt
  32. 1 0
      src/main/webapp/resources/dia_es.txt
  33. 1 0
      src/main/webapp/resources/dia_et.txt
  34. 1 0
      src/main/webapp/resources/dia_eu.txt
  35. 1 0
      src/main/webapp/resources/dia_fa.txt
  36. 1 0
      src/main/webapp/resources/dia_fi.txt
  37. 1 0
      src/main/webapp/resources/dia_fil.txt
  38. 1 0
      src/main/webapp/resources/dia_fr.txt
  39. 1 0
      src/main/webapp/resources/dia_gl.txt
  40. 1 0
      src/main/webapp/resources/dia_gu.txt
  41. 1 0
      src/main/webapp/resources/dia_he.txt
  42. 1 0
      src/main/webapp/resources/dia_hi.txt
  43. 1 0
      src/main/webapp/resources/dia_hr.txt
  44. 1 0
      src/main/webapp/resources/dia_hu.txt
  45. 1 0
      src/main/webapp/resources/dia_i18n.txt
  46. 1 0
      src/main/webapp/resources/dia_id.txt
  47. 1 0
      src/main/webapp/resources/dia_it.txt
  48. 1 0
      src/main/webapp/resources/dia_ja.txt
  49. 1 0
      src/main/webapp/resources/dia_kn.txt
  50. 1 0
      src/main/webapp/resources/dia_ko.txt
  51. 1 0
      src/main/webapp/resources/dia_lt.txt
  52. 1 0
      src/main/webapp/resources/dia_lv.txt
  53. 1 0
      src/main/webapp/resources/dia_ml.txt
  54. 1 0
      src/main/webapp/resources/dia_mr.txt
  55. 1 0
      src/main/webapp/resources/dia_ms.txt
  56. 1 0
      src/main/webapp/resources/dia_my.txt
  57. 1 0
      src/main/webapp/resources/dia_nl.txt
  58. 1 0
      src/main/webapp/resources/dia_no.txt
  59. 177 176
      src/main/webapp/resources/dia_pl.txt
  60. 13 12
      src/main/webapp/resources/dia_pt-br.txt
  61. 1 0
      src/main/webapp/resources/dia_pt.txt
  62. 1 0
      src/main/webapp/resources/dia_ro.txt
  63. 1 0
      src/main/webapp/resources/dia_ru.txt
  64. 1 0
      src/main/webapp/resources/dia_si.txt
  65. 1 0
      src/main/webapp/resources/dia_sk.txt
  66. 1 0
      src/main/webapp/resources/dia_sl.txt
  67. 1 0
      src/main/webapp/resources/dia_sr.txt
  68. 1 0
      src/main/webapp/resources/dia_sv.txt
  69. 1 0
      src/main/webapp/resources/dia_sw.txt
  70. 1 0
      src/main/webapp/resources/dia_ta.txt
  71. 1 0
      src/main/webapp/resources/dia_te.txt
  72. 1 0
      src/main/webapp/resources/dia_th.txt
  73. 1 0
      src/main/webapp/resources/dia_tr.txt
  74. 1 0
      src/main/webapp/resources/dia_uk.txt
  75. 1 0
      src/main/webapp/resources/dia_vi.txt
  76. 1 0
      src/main/webapp/resources/dia_zh-tw.txt
  77. 1 0
      src/main/webapp/resources/dia_zh.txt
  78. 1 1
      src/main/webapp/service-worker.js
  79. 1 1
      src/main/webapp/service-worker.js.map
  80. 3 1
      src/main/webapp/teams.html

+ 19 - 0
ChangeLog

@@ -1,3 +1,22 @@
+25-JAN-2022: 16.4.7
+
+- Improves output validation of AbsAuthServlet [DND-371]
+- Improves redirect url validation [DND-370]
+- Changes child-src from none to self
+- Fixes two windows with disabled start screen https://github.com/jgraph/drawio-desktop/issues/883
+- Fixes handling of hidden stroke in RoughCanvas
+- Fixes order and start point for circle layout
+- Removes tags and layers icon in sketch footer
+- [conf cloud] Replaces deprecated dialog.on('close', ...)
+- [conf cloud] Forces sketch mode even when config sets ui
+- Improves connection points dialog
+
+24-JAN-2022: 16.4.6
+
+- Fixes border for waypoint shape with sketch style
+- [conf cloud] Added support for "new line" in page name in PageIds Export
+- Fixes configurations not saving https://github.com/jgraph/drawio-desktop/issues/873
+
 21-JAN-2022: 16.4.5
 21-JAN-2022: 16.4.5
 
 
 - Corrects SHA for bootstrap
 - Corrects SHA for bootstrap

+ 1 - 1
VERSION

@@ -1 +1 @@
-16.4.5
+16.4.7

+ 30 - 76
etc/propgen/package-lock.json

@@ -9,7 +9,7 @@
       "license": "ISC",
       "license": "ISC",
       "dependencies": {
       "dependencies": {
         "bidi-js": "^1.0.2",
         "bidi-js": "^1.0.2",
-        "node-fetch": "^3.1.1"
+        "node-fetch": "^3.0.0"
       }
       }
     },
     },
     "node_modules/bidi-js": {
     "node_modules/bidi-js": {
@@ -21,17 +21,17 @@
       }
       }
     },
     },
     "node_modules/data-uri-to-buffer": {
     "node_modules/data-uri-to-buffer": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz",
-      "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
+      "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==",
       "engines": {
       "engines": {
-        "node": ">= 12"
+        "node": ">= 6"
       }
       }
     },
     },
     "node_modules/fetch-blob": {
     "node_modules/fetch-blob": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz",
-      "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz",
+      "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==",
       "funding": [
       "funding": [
         {
         {
           "type": "github",
           "type": "github",
@@ -43,50 +43,19 @@
         }
         }
       ],
       ],
       "dependencies": {
       "dependencies": {
-        "node-domexception": "^1.0.0",
         "web-streams-polyfill": "^3.0.3"
         "web-streams-polyfill": "^3.0.3"
       },
       },
       "engines": {
       "engines": {
         "node": "^12.20 || >= 14.13"
         "node": "^12.20 || >= 14.13"
       }
       }
     },
     },
-    "node_modules/formdata-polyfill": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
-      "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
-      "dependencies": {
-        "fetch-blob": "^3.1.2"
-      },
-      "engines": {
-        "node": ">=12.20.0"
-      }
-    },
-    "node_modules/node-domexception": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
-      "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/jimmywarting"
-        },
-        {
-          "type": "github",
-          "url": "https://paypal.me/jimmywarting"
-        }
-      ],
-      "engines": {
-        "node": ">=10.5.0"
-      }
-    },
     "node_modules/node-fetch": {
     "node_modules/node-fetch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.1.1.tgz",
-      "integrity": "sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz",
+      "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==",
       "dependencies": {
       "dependencies": {
-        "data-uri-to-buffer": "^4.0.0",
-        "fetch-blob": "^3.1.3",
-        "formdata-polyfill": "^4.0.10"
+        "data-uri-to-buffer": "^3.0.1",
+        "fetch-blob": "^3.1.2"
       },
       },
       "engines": {
       "engines": {
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
@@ -105,9 +74,9 @@
       }
       }
     },
     },
     "node_modules/web-streams-polyfill": {
     "node_modules/web-streams-polyfill": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
-      "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.1.tgz",
+      "integrity": "sha512-Czi3fG883e96T4DLEPRvufrF2ydhOOW1+1a6c3gNjH2aIh50DNFBdfwh2AKoOf1rXvpvavAoA11Qdq9+BKjE0Q==",
       "engines": {
       "engines": {
         "node": ">= 8"
         "node": ">= 8"
       }
       }
@@ -123,40 +92,25 @@
       }
       }
     },
     },
     "data-uri-to-buffer": {
     "data-uri-to-buffer": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz",
-      "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA=="
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz",
+      "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og=="
     },
     },
     "fetch-blob": {
     "fetch-blob": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz",
-      "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz",
+      "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==",
       "requires": {
       "requires": {
-        "node-domexception": "^1.0.0",
         "web-streams-polyfill": "^3.0.3"
         "web-streams-polyfill": "^3.0.3"
       }
       }
     },
     },
-    "formdata-polyfill": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
-      "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
-      "requires": {
-        "fetch-blob": "^3.1.2"
-      }
-    },
-    "node-domexception": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
-      "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
-    },
     "node-fetch": {
     "node-fetch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.1.1.tgz",
-      "integrity": "sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz",
+      "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==",
       "requires": {
       "requires": {
-        "data-uri-to-buffer": "^4.0.0",
-        "fetch-blob": "^3.1.3",
-        "formdata-polyfill": "^4.0.10"
+        "data-uri-to-buffer": "^3.0.1",
+        "fetch-blob": "^3.1.2"
       }
       }
     },
     },
     "require-from-string": {
     "require-from-string": {
@@ -165,9 +119,9 @@
       "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
       "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
     },
     },
     "web-streams-polyfill": {
     "web-streams-polyfill": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz",
-      "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA=="
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.1.tgz",
+      "integrity": "sha512-Czi3fG883e96T4DLEPRvufrF2ydhOOW1+1a6c3gNjH2aIh50DNFBdfwh2AKoOf1rXvpvavAoA11Qdq9+BKjE0Q=="
     }
     }
   }
   }
 }
 }

+ 1 - 1
etc/propgen/package.json

@@ -10,6 +10,6 @@
   "license": "ISC",
   "license": "ISC",
   "dependencies": {
   "dependencies": {
     "bidi-js": "^1.0.2",
     "bidi-js": "^1.0.2",
-    "node-fetch": "^3.1.1"
+    "node-fetch": "^3.0.0"
   }
   }
 }
 }

+ 5 - 0
package.json

@@ -0,0 +1,5 @@
+{
+  "devDependencies": {
+    "eslint": "^8.7.0"
+  }
+}

+ 47 - 25
src/main/java/com/mxgraph/online/AbsAuthServlet.java

@@ -13,6 +13,8 @@ import java.io.StringWriter;
 import java.math.BigInteger;
 import java.math.BigInteger;
 import java.net.HttpURLConnection;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URL;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.security.SecureRandom;
 import java.security.SecureRandom;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.logging.Level;
 import java.util.logging.Level;
@@ -197,6 +199,31 @@ abstract public class AbsAuthServlet extends HttpServlet
 		deleteCookie(tokenCookieName, response);
 		deleteCookie(tokenCookieName, response);
 	}
 	}
 	
 	
+	//https://stackoverflow.com/questions/4390800/determine-if-a-string-is-absolute-url-or-relative-url-in-java
+	public static boolean isAbsolute(String url)
+	{
+		if (url.startsWith("//"))  // //www.domain.com/start
+		{
+			return true;
+		}
+	
+		if (url.startsWith("/")) // /somePage.html
+		{
+			return false;
+		}
+	
+		boolean result = false;
+	
+		try 
+		{
+			URI uri = new URI(url);
+			result = uri.isAbsolute();
+		}
+		catch (URISyntaxException e) {} //Ignore
+	
+		return result;
+	}
+
 	/**
 	/**
 	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 	 */
 	 */
@@ -210,7 +237,6 @@ abstract public class AbsAuthServlet extends HttpServlet
 			String state = new BigInteger(256, random).toString(32);
 			String state = new BigInteger(256, random).toString(32);
 			String key = new BigInteger(256, random).toString(32);
 			String key = new BigInteger(256, random).toString(32);
 			putCacheValue(key, state);
 			putCacheValue(key, state);
-			log.log(Level.INFO, "AUTH-SERVLET: [" + request.getRemoteAddr() + "] Added state (" + key + " -> " + state + ")");
 			response.setStatus(HttpServletResponse.SC_OK);
 			response.setStatus(HttpServletResponse.SC_OK);
 			//Chrome blocks this cookie when draw.io is running in an iframe. The cookie is added to parent frame. TODO FIXME
 			//Chrome blocks this cookie when draw.io is running in an iframe. The cookie is added to parent frame. TODO FIXME
 			addCookie(STATE_COOKIE, key, STATE_COOKIE_AGE, response); //10 min to finish auth
 			addCookie(STATE_COOKIE, key, STATE_COOKIE_AGE, response); //10 min to finish auth
@@ -250,8 +276,8 @@ abstract public class AbsAuthServlet extends HttpServlet
 				version = stateVars.get("ver");
 				version = stateVars.get("ver");
 				successRedirect = stateVars.get("redirect");
 				successRedirect = stateVars.get("redirect");
 
 
-				//Redirect to a page on the same domain only (relative path) TODO Is this enough?
-				if (successRedirect != null && successRedirect.toLowerCase().startsWith("http"))
+				//Redirect to a page on the same domain only (relative path)
+				if (successRedirect != null && isAbsolute(successRedirect))
 				{
 				{
 					successRedirect = null;
 					successRedirect = null;
 				}
 				}
@@ -262,7 +288,6 @@ abstract public class AbsAuthServlet extends HttpServlet
 				if (cacheKey != null)
 				if (cacheKey != null)
 				{
 				{
 					cookieToken = (String) tokenCache.get(cacheKey);
 					cookieToken = (String) tokenCache.get(cacheKey);
-					log.log(Level.INFO, "AUTH-SERVLET: [" + request.getRemoteAddr() + "] Found cookie state (" + cacheKey + " -> " + cookieToken + ")");
 					//Delete cookie & cache after being used since it is a single use
 					//Delete cookie & cache after being used since it is a single use
 					tokenCache.remove(cacheKey);
 					tokenCache.remove(cacheKey);
 					deleteCookie(STATE_COOKIE, response);
 					deleteCookie(STATE_COOKIE, response);
@@ -318,7 +343,6 @@ abstract public class AbsAuthServlet extends HttpServlet
 			//Non GAE runtimes are excluded from state check. TODO Change GAE stub to return null from CacheFactory
 			//Non GAE runtimes are excluded from state check. TODO Change GAE stub to return null from CacheFactory
 			else if (IS_GAE && (stateToken == null || !stateToken.equals(cookieToken)))
 			else if (IS_GAE && (stateToken == null || !stateToken.equals(cookieToken)))
 			{
 			{
-				log.log(Level.WARNING, "AUTH-SERVLET: [" + request.getRemoteAddr() + "] STATE MISMATCH (state: " + stateToken + " != cookie: " + cookieToken + ")");
 				response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
 				response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
 			}
 			}
 			else
 			else
@@ -336,6 +360,7 @@ abstract public class AbsAuthServlet extends HttpServlet
 				{
 				{
 					if (successRedirect != null)
 					if (successRedirect != null)
 					{
 					{
+						//successRedirect is validated above
 						response.sendRedirect(successRedirect + "#" + Utils.encodeURIComponent(authResp.content, "UTF-8"));
 						response.sendRedirect(successRedirect + "#" + Utils.encodeURIComponent(authResp.content, "UTF-8"));
 					}
 					}
 					else
 					else
@@ -424,20 +449,20 @@ abstract public class AbsAuthServlet extends HttpServlet
 				}
 				}
 				
 				
 				urlParameters.append("client_id=");
 				urlParameters.append("client_id=");
-				urlParameters.append(client);
+				urlParameters.append(Utils.encodeURIComponent(client, "UTF-8"));
 				urlParameters.append("&client_secret=");
 				urlParameters.append("&client_secret=");
-				urlParameters.append(secret);
+				urlParameters.append(Utils.encodeURIComponent(secret, "UTF-8"));
 			
 			
 				if (code != null)
 				if (code != null)
 				{
 				{
 					if (withRedirectUrl)
 					if (withRedirectUrl)
 					{
 					{
 						urlParameters.append("&redirect_uri=");
 						urlParameters.append("&redirect_uri=");
-						urlParameters.append(redirectUri);
+						urlParameters.append(Utils.encodeURIComponent(redirectUri, "UTF-8"));
 					}
 					}
 
 
 					urlParameters.append("&code=");
 					urlParameters.append("&code=");
-					urlParameters.append(code);
+					urlParameters.append(Utils.encodeURIComponent(code, "UTF-8"));
 					urlParameters.append("&grant_type=authorization_code");
 					urlParameters.append("&grant_type=authorization_code");
 				}
 				}
 				else
 				else
@@ -445,11 +470,11 @@ abstract public class AbsAuthServlet extends HttpServlet
 					if (withRedirectUrlInRefresh)
 					if (withRedirectUrlInRefresh)
 					{
 					{
 						urlParameters.append("&redirect_uri=");
 						urlParameters.append("&redirect_uri=");
-						urlParameters.append(redirectUri);
+						urlParameters.append(Utils.encodeURIComponent(redirectUri, "UTF-8"));
 					}
 					}
 					
 					
 					urlParameters.append("&refresh_token=");
 					urlParameters.append("&refresh_token=");
-					urlParameters.append(refreshToken);
+					urlParameters.append(Utils.encodeURIComponent(refreshToken, "UTF-8"));
 					urlParameters.append("&grant_type=refresh_token");
 					urlParameters.append("&grant_type=refresh_token");
 					jsonResponse = true;
 					jsonResponse = true;
 				}
 				}
@@ -458,27 +483,25 @@ abstract public class AbsAuthServlet extends HttpServlet
 			{
 			{
 				con.setRequestProperty("Content-Type", "application/json");
 				con.setRequestProperty("Content-Type", "application/json");
 				
 				
-				urlParameters.append("{");
-				urlParameters.append("\"client_id\": \"");
-				urlParameters.append(client);
-				urlParameters.append("\", \"redirect_uri\": \"");
-				urlParameters.append(redirectUri);
-				urlParameters.append("\", \"client_secret\": \"");
-				urlParameters.append(secret);
+				JsonObject urlParamsObj = new JsonObject();
+
+				urlParamsObj.addProperty("client_id", client);
+				urlParamsObj.addProperty("redirect_uri", redirectUri);
+				urlParamsObj.addProperty("client_secret", secret);
 			
 			
 				if (code != null)
 				if (code != null)
 				{
 				{
-					urlParameters.append("\", \"code\": \"");
-					urlParameters.append(code);
-					urlParameters.append("\", \"grant_type\": \"authorization_code\"}");
+					urlParamsObj.addProperty("code", code);
+					urlParamsObj.addProperty("grant_type", "authorization_code");
 				}
 				}
 				else
 				else
 				{
 				{
-					urlParameters.append("\", \"refresh_token\": \"");
-					urlParameters.append(refreshToken);
-					urlParameters.append("\", \"grant_type\": \"refresh_token\"}");
+					urlParamsObj.addProperty("refresh_token", refreshToken);
+					urlParamsObj.addProperty("grant_type", "refresh_token");
 					jsonResponse = true;
 					jsonResponse = true;
 				}
 				}
+
+				urlParameters.append(urlParamsObj.toString());
 			}
 			}
 			
 			
 			// Send post request
 			// Send post request
@@ -567,7 +590,6 @@ abstract public class AbsAuthServlet extends HttpServlet
 			{
 			{
 				response.status = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
 				response.status = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
 				e.printStackTrace();
 				e.printStackTrace();
-				System.err.println(details);
 				log.log(Level.SEVERE, "AUTH-SERVLET: [" + authSrvUrl+ "] ERROR: " + e.getMessage() + " -> " + details.toString());
 				log.log(Level.SEVERE, "AUTH-SERVLET: [" + authSrvUrl+ "] ERROR: " + e.getMessage() + " -> " + details.toString());
 			}
 			}
 			
 			

+ 0 - 256
src/main/java/com/mxgraph/online/GoogleGadgetServlet.java

@@ -1,256 +0,0 @@
-/**
- * $Id: GoogleSitesServlet.java,v 1.4 2014/01/27 21:51:26 gaudenz Exp $
- * Copyright (c) 2011-2012, JGraph Ltd
- * 
- * TODO
- * 
- * We could split the static part and the stencils into two separate requests
- * in order for multiple graphs in the pages to not load the static part
- * multiple times. This is only relevant if the embed arguments are different,
- * in which case there is a problem with parsin the graph model too soon, ie.
- * before certain stencils become available.
- * 
- * Easier solution is for the user to move the embed script to after the last
- * graph in the page and merge the stencil arguments.
- * 
- * Note: The static part is roundly 105K, the stencils are much smaller in size.
- * This means if the embed function is widely used, it will make sense to factor
- * out the static part because only stencils will change between pages.
- */
-package com.mxgraph.online;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;
-
-/**
- * Servlet implementation class OpenServlet
- */
-public class GoogleGadgetServlet extends HttpServlet
-{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * @see HttpServlet#HttpServlet()
-	 */
-	public GoogleGadgetServlet()
-	{
-
-	}
-
-	/**
-	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
-	 */
-	protected void doGet(HttpServletRequest request,
-			HttpServletResponse response) throws ServletException, IOException
-	{
-		String diagram = escapeHtml4(request.getParameter("diagram"));
-		String type = escapeHtml4(request.getParameter("type"));
-		String title = escapeHtml4(request.getParameter("title"));
-		String edit = escapeHtml4(request.getParameter("edit"));
-		String embed = escapeHtml4(request.getParameter("embed"));
-		String b = escapeHtml4(request.getParameter("border"));
-		String zoom = escapeHtml4(request.getParameter("zoom"));
-		String pan = escapeHtml4(request.getParameter("pan"));
-		String fit = escapeHtml4(request.getParameter("fit"));
-		String resize = escapeHtml4(request.getParameter("resize"));
-		String height = escapeHtml4(request.getParameter("height"));
-		String math = escapeHtml4(request.getParameter("math"));
-		String x0 = escapeHtml4(request.getParameter("x0"));
-		String y0 = escapeHtml4(request.getParameter("y0"));
-		String s = escapeHtml4(request.getParameter("s"));
-		boolean showEmbed = (embed != null) ? embed.equals("1") : true;
-		
-		if (diagram == null)
-		{
-			diagram = "";
-		}
-		
-		if (type == null)
-		{
-			type = "1";
-		}
-
-		if (title == null)
-		{
-			title = "Draw.io diagram";
-		}
-		
-		if (height == null)
-		{
-			height = "400";
-		}
-		
-		if (edit == null)
-		{
-			edit = "";
-		}
-		
-		if (s == null)
-		{
-			s = "";
-		}
-		
-		if (x0 == null)
-		{
-			x0 = "0";
-		}
-		
-		if (y0 == null)
-		{
-			y0 = "0";
-		}
-
-		if (b == null)
-		{
-			b = "0";
-		}
-
-		if (zoom == null)
-		{
-			zoom = "1";
-		}
-
-		if (resize == null)
-		{
-			resize = "0";
-		}
-
-		if (pan == null)
-		{
-			pan = "1";
-		}
-		
-		if (fit == null)
-		{
-			fit = "1";
-		}
-
-		if (math == null)
-		{
-			math = "0";
-		}
-		
-		response.setCharacterEncoding("UTF-8");
-		response.setContentType("application/xml");
-		response.setStatus(HttpServletResponse.SC_OK);
-		
-		// Could use makeRequest with lower refreshInterval for getting data from
-		// URLs and possibly, using OAUTH, for getting Drive file contents without
-		// requiring to handle auth in the draw.io app again (pass XML in via
-		// postMessage for example with a message to request the XML for solving
-		// the timing issue when loading cross-domain iframe contents).
-		OutputStream out = response.getOutputStream();
-		out.write(("<Module>\n"+
-				"<ModulePrefs title=\"" + title + "\" height=\"" + height + "\"\n"+
-				" screenshot=\"https://www.draw.io/images/gadget-screenshot.png\"\n"+
-				" thumbnail=\"https://www.draw.io/images/gadget-thumb.png\"/>\n"+
-				"<UserPref name=\"diagram\" display_name=\"Diagram ID or URL\" datatype=\"string\"\n"+
-				" default_value=\"" + diagram + "\" required=\"true\">\n"+
-				"</UserPref>\n"+
-				"<UserPref name=\"type\" display_name=\"Location\" datatype=\"enum\"\n"+
-				" default_value=\"" + type + "\">\n"+
-				" <EnumValue value=\"1\" display_value=\"Google Drive\"/>\n"+
-				" <EnumValue value=\"2\" display_value=\"Dropbox\"/>\n"+
-				" <EnumValue value=\"3\" display_value=\"Public\"/>\n"+
-				((showEmbed) ? " <EnumValue value=\"4\" display_value=\"Public (Embed)\"/>\n" : "")+
-				"</UserPref>\n"+
-				((showEmbed) ?
-				"<UserPref name=\"x0\" display_name=\"Left (Embed)\" datatype=\"string\" default_value=\"" + x0 + "\"></UserPref>\n"+
-				"<UserPref name=\"y0\" display_name=\"Top (Embed)\" datatype=\"string\" default_value=\"" + y0 + "\"></UserPref>\n"+
-				"<UserPref name=\"border\" display_name=\"Border (Embed)\" datatype=\"string\" default_value=\"" + b + "\"></UserPref>\n"+
-				"<UserPref name=\"zoom\" display_name=\"Zoom enabled (Embed)\" datatype=\"bool\" default_value=\"" + ((zoom.equals("1")) ? "true" : "false") + "\"></UserPref>\n"+
-				"<UserPref name=\"pan\" display_name=\"Panning enabled (Embed)\" datatype=\"bool\" default_value=\"" + ((pan.equals("1")) ? "true" : "false") + "\"></UserPref>\n"+
-				"<UserPref name=\"fit\" display_name=\"Fit diagram to gadget (Embed)\" datatype=\"bool\" default_value=\"" + ((fit.equals("1")) ? "true" : "false") + "\"></UserPref>\n"+
-				"<UserPref name=\"resize\" display_name=\"Resize container (Embed)\" datatype=\"bool\" default_value=\"" + ((resize.equals("1")) ? "true" : "false") + "\"></UserPref>\n"+
-				"<UserPref name=\"math\" display_name=\"Mathematical typesetting (Embed)\" datatype=\"bool\" default_value=\"" + ((math.equals("1")) ? "true" : "false") + "\"></UserPref>\n"+
-				"<UserPref name=\"edit\" display_name=\"Edit URL (Embed)\" datatype=\"string\" default_value=\"" + edit + "\"></UserPref>\n"+
-				"<UserPref name=\"stencils\" display_name=\"Stencils (Embed)\" datatype=\"string\" default_value=\"" + s + "\"></UserPref>\n"
-				: "")+
-				"<Content type=\"html\">\n"+
-				"<![CDATA[\n"+
-				" <script type=\"text/javascript\">\n"+
-				" var prefs = new _IG_Prefs();\n"+
-				" var type = prefs.getString(\'type\');\n"+
-				" var diagram = prefs.getString(\'diagram\');\n"+
-				" \n"+
-				" if (diagram != null && diagram.length > 0)\n"+
-				" {\n"+
-				" if (type <= 3)\n"+
-				" {\n"+
-				" var file = (type == 3) ? \'&gapi=0&db=0&url=\' + encodeURIComponent(diagram) :\n"+
-				" (((type == 2) ? \'&gapi=0\' : \'&db=0\') +\n"+
-				" \'#\' + ((type == 2) ? \'D\' : \'G\') + diagram);\n"+
-				"\n"+
-				" var iframe = document.createElement(\'iframe\');\n"+
-				" iframe.setAttribute(\'frameborder\', \'0\');\n"+
-				" iframe.style.width = \'100%\';\n"+
-				" iframe.style.height = \'100%\';\n"+
-				" iframe.setAttribute(\'src\', \'https://www.draw.io/?chrome=0\' + file);\n"+
-				" document.body.appendChild(iframe);\n"+
-				" }\n"+
-				" else\n"+
-				" {\n"+
-				" var x0 = prefs.getString(\'x0\');\n"+
-				" var y0 = prefs.getString(\'y0\');\n"+
-				" var b = prefs.getString(\'border\');\n"+
-				" var zoom = (prefs.getBool(\'zoom\') == true) ? \'1\' : \'0\';\n"+
-				" var pan = (prefs.getBool(\'pan\') == true) ? \'1\' : \'0\';\n"+
-				" var fit = (prefs.getBool(\'fit\') == true) ? \'1\' : \'0\';\n"+
-				" var resize = (prefs.getBool(\'resize\') == true) ? \'1\' : \'0\';\n"+
-				" var math = (prefs.getBool(\'math\') == true) ? \'1\' : \'0\';\n"+
-				" var edit = prefs.getString(\'edit\');\n"+
-				" var s = prefs.getString(\'stencils\');\n"+
-				"\n"+
-				" var div = document.createElement(\'div\');\n"+
-				" div.className = \'mxgraph\';\n"+
-				" div.style.position = \'relative\';\n"+
-				" div.style.overflow = \'hidden\';\n"+
-				" div.style.width = \'100%\';\n"+
-				" div.style.height = \'100%\';\n"+
-				" \n"+
-				" var inner = document.createElement(\'div\');\n"+
-				" inner.style.width = \'1px\';\n"+
-				" inner.style.height = \'1px\';\n"+
-				" inner.style.overflow = \'hidden\';\n"+
-				" \n"+
-				" var model = \'<mxGraphModel style=\"default-style2\" x0=\"\' + x0 +\n"+
-				" \'\" y0=\"\' + y0 + \'\" pan=\"\' + pan + \'\" zoom=\"\' + zoom +\n"+
-				" ((edit.length > 0) ? \'\" edit=\"\' + edit : \'\') +\n"+
-				" \'\" resize=\"\' + resize + \'\" fit=\"\' + fit + \'\" border=\"\' + b +\n"+
-				" \'\" math=\"\' + math + \'\" links=\"1\" url=\"\' + diagram + \'\"/>\';\n"+
-				" \n"+
-				" inner.innerHTML = encodeURIComponent(model);\n"+
-				" \n"+
-				" var src = \'https://www.draw.io/embed.js\';\n"+
-				" \n"+
-				" if (s.length > 0)\n"+
-				" {\n"+
-				" src += \'?s=\' + s;\n"+
-				" }\n"+
-				" \n"+
-				" div.appendChild(inner);\n"+
-				" document.body.appendChild(div);\n"+
-				" \n"+
-				" document.write(\'<script src=\"\' + src + \'\"></scr\' + \'ipt>\');\n"+
-				" }\n"+
-				" }\n"+
-				"\t</script>\n"+
-				"]]>\n"+
-				"</Content>\n"+
-				"</Module>\n"+
-				"").getBytes());
-		out.flush();
-		out.close();
-	}
-
-}

Разница между файлами не показана из-за своего большого размера
+ 868 - 858
src/main/webapp/js/app.min.js


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

@@ -635,7 +635,8 @@ App.main = function(callback, createUi)
 	if (window.mxscript != null)
 	if (window.mxscript != null)
 	{
 	{
 		// Checks for script content changes to avoid CSP errors in production
 		// Checks for script content changes to avoid CSP errors in production
-		if (urlParams['dev'] == '1' && CryptoJS != null && App.mode != App.MODE_DROPBOX && App.mode != App.MODE_TRELLO)
+		if (urlParams['dev'] == '1' && !mxClient.IS_CHROMEAPP && !EditorUi.isElectronApp &&
+			CryptoJS != null && App.mode != App.MODE_DROPBOX && App.mode != App.MODE_TRELLO)
 		{
 		{
 			var scripts = document.getElementsByTagName('script');
 			var scripts = document.getElementsByTagName('script');
 			
 			
@@ -3297,7 +3298,7 @@ App.prototype.start = function()
 							{
 							{
 								this.loadFile();
 								this.loadFile();
 							}
 							}
-							else
+							else if (!EditorUi.isElectronApp)
 							{
 							{
 								this.createFile(this.defaultFilename, this.getFileData(), null, null, null, null, null, true);
 								this.createFile(this.defaultFilename, this.getFileData(), null, null, null, null, null, true);
 							}
 							}

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

@@ -67,7 +67,7 @@ if (!mxIsElectron && location.protocol !== 'http:')
 			// Replaces unsafe-inline style-src with hashes with safe-style-src URL parameter
 			// Replaces unsafe-inline style-src with hashes with safe-style-src URL parameter
 			((urlParams['safe-style-src'] == '1') ? styleHashes : '\'unsafe-inline\'; ') +
 			((urlParams['safe-style-src'] == '1') ? styleHashes : '\'unsafe-inline\'; ') +
 			'base-uri \'none\';' +
 			'base-uri \'none\';' +
-			'child-src \'none\';' +
+			'child-src \'self\';' +
 			'object-src \'none\';';
 			'object-src \'none\';';
 			
 			
 		var csp = hashes + directives;
 		var csp = hashes + directives;

+ 362 - 35
src/main/webapp/js/diagramly/Dialogs.js

@@ -12704,9 +12704,10 @@ var FilePropertiesDialog = function(editorUi)
 
 
 var ConnectionPointsDialog = function(editorUi, cell) 
 var ConnectionPointsDialog = function(editorUi, cell) 
 {
 {
-	var GRAPH_SIZE = 300, CP_SIZE = 6, CP_HLF_SIZE = 3;
+	var GRAPH_SIZE = 350, CP_SIZE = 6, CP_HLF_SIZE = 3;
 	var div = document.createElement('div');
 	var div = document.createElement('div');
 	div.style.userSelect = 'none';
 	div.style.userSelect = 'none';
+	var keyHandler = null;
 
 
 	this.init = function() 
 	this.init = function() 
 	{
 	{
@@ -12716,22 +12717,31 @@ var ConnectionPointsDialog = function(editorUi, cell)
 		graphDiv.style.overflow = 'hidden';
 		graphDiv.style.overflow = 'hidden';
 		graphDiv.style.border = '1px solid lightGray';
 		graphDiv.style.border = '1px solid lightGray';
 		graphDiv.style.boxSizing = 'border-box';
 		graphDiv.style.boxSizing = 'border-box';
+		mxEvent.disableContextMenu(graphDiv);
 		div.appendChild(graphDiv);
 		div.appendChild(graphDiv);
 
 
-		var cPointStyle = 'ellipse;fillColor=#000000;strokeColor=#000000;points=[];rotatable=0;resizable=0;connectable=0;editable=0;';
 		var editingGraph = new Graph(graphDiv);
 		var editingGraph = new Graph(graphDiv);
 		editingGraph.autoExtend = false;
 		editingGraph.autoExtend = false;
 		editingGraph.autoScroll = false;
 		editingGraph.autoScroll = false;
 		editingGraph.setGridEnabled(false);
 		editingGraph.setGridEnabled(false);
 		editingGraph.setEnabled(true);
 		editingGraph.setEnabled(true);
-		editingGraph.setPanning(false);
+		editingGraph.setPanning(true);
 		editingGraph.setConnectable(false);
 		editingGraph.setConnectable(false);
-		editingGraph.getRubberband().setEnabled(false);
 		editingGraph.setTooltips(false);
 		editingGraph.setTooltips(false);
 		editingGraph.minFitScale = null;
 		editingGraph.minFitScale = null;
 		editingGraph.maxFitScale = null;
 		editingGraph.maxFitScale = null;
 		editingGraph.centerZoom = true;
 		editingGraph.centerZoom = true;
 		editingGraph.maxFitScale = 2;
 		editingGraph.maxFitScale = 2;
+
+		function createCPoint(x, y)
+		{
+			var cPointStyle = 'shape=mxgraph.basic.x;fillColor=#29b6f2;strokeColor=#29b6f2;points=[];rotatable=0;resizable=0;connectable=0;editable=0;';
+			var cPoint = new mxCell('', new mxGeometry(x, y, CP_SIZE, CP_SIZE), cPointStyle);
+			cPoint.vertex = true;
+			cPoint.cp = true;
+			editingGraph.addCell(cPoint);
+		};
+	
 		//Adding a point via double click
 		//Adding a point via double click
 		editingGraph.dblClick = function(evt, cell)
 		editingGraph.dblClick = function(evt, cell)
 		{
 		{
@@ -12739,18 +12749,38 @@ var ConnectionPointsDialog = function(editorUi, cell)
 			mxEvent.consume(evt);
 			mxEvent.consume(evt);
 			var scale = editingGraph.view.scale;
 			var scale = editingGraph.view.scale;
 			var tr = editingGraph.view.translate;
 			var tr = editingGraph.view.translate;
-			var cPoint = new mxCell('', new mxGeometry((pt.x - CP_HLF_SIZE) / scale - tr.x, (pt.y - CP_HLF_SIZE) / scale - tr.y, CP_SIZE, CP_SIZE), cPointStyle);
-			cPoint.vertex = true;
-			cPoint.cp = true;
-			editingGraph.addCell(cPoint);
+			createCPoint((pt.x - CP_HLF_SIZE * scale) / scale - tr.x, (pt.y - CP_HLF_SIZE * scale) / scale - tr.y);
 		}
 		}
 
 
+		keyHandler = new mxKeyHandler(editingGraph);
+		
+		function removeCPoints(evt)
+		{
+			var cells = editingGraph.getSelectionCells();
+			editingGraph.deleteCells(cells);
+		};
+
+		keyHandler.bindKey(46, removeCPoints);
+		keyHandler.bindKey(8, removeCPoints);
+
 		//Add cell and current connection points on it
 		//Add cell and current connection points on it
 		var geo = cell.geometry;
 		var geo = cell.geometry;
 		var mainCell = new mxCell('', new mxGeometry(0, 0, geo.width, geo.height),
 		var mainCell = new mxCell('', new mxGeometry(0, 0, geo.width, geo.height),
 							cell.style + ';rotatable=0;resizable=0;connectable=0;editable=0;movable=0;');
 							cell.style + ';rotatable=0;resizable=0;connectable=0;editable=0;movable=0;');
 		mainCell.vertex = true;
 		mainCell.vertex = true;
 		editingGraph.addCell(mainCell);
 		editingGraph.addCell(mainCell);
+		//Force rubberband inside the cell
+		editingGraph.getRubberband().isForceRubberbandEvent = function(event)
+		{
+			//Left click and not a click on a connection point
+			return event.evt.button == 0 
+					&& (event.getCell() == null || event.getCell() == mainCell);
+		};
+		//Force panning inside the cell
+		editingGraph.panningHandler.isForcePanningEvent = function(event)
+		{
+			return event.evt.button == 2;
+		};
 
 
 		var origIsCellSelectable = editingGraph.isCellSelectable;
 		var origIsCellSelectable = editingGraph.isCellSelectable;
 		editingGraph.isCellSelectable = function(cell)
 		editingGraph.isCellSelectable = function(cell)
@@ -12765,23 +12795,314 @@ var ConnectionPointsDialog = function(editorUi, cell)
 			}
 			}
 		};
 		};
 
 
+		// Disables hyperlinks
+		editingGraph.getLinkForCell = function()
+		{
+			return null;
+		};
+
 		var state = editingGraph.view.getState(mainCell);
 		var state = editingGraph.view.getState(mainCell);
 		var constraints = editingGraph.getAllConnectionConstraints(state);
 		var constraints = editingGraph.getAllConnectionConstraints(state);
 		
 		
 		for (var i = 0; constraints != null && i < constraints.length; i++)
 		for (var i = 0; constraints != null && i < constraints.length; i++)
 		{
 		{
 			var cp = editingGraph.getConnectionPoint(state, constraints[i]);
 			var cp = editingGraph.getConnectionPoint(state, constraints[i]);
-			var cPoint = new mxCell('', new mxGeometry(cp.x - CP_HLF_SIZE, cp.y - CP_HLF_SIZE, CP_SIZE, CP_SIZE), cPointStyle);
-			cPoint.vertex = true;
-			cPoint.cp = true;
-			editingGraph.addCell(cPoint);
+			createCPoint(cp.x - CP_HLF_SIZE, cp.y - CP_HLF_SIZE);
 		}
 		}
 
 
 		editingGraph.fit(8);
 		editingGraph.fit(8);
 		editingGraph.center();
 		editingGraph.center();
 
 
+		var zoomInBtn = mxUtils.button('', function()
+		{
+			editingGraph.zoomIn();
+		});
+		zoomInBtn.className = 'geSprite geSprite-zoomin';
+		zoomInBtn.setAttribute('title', mxResources.get('zoomIn'));
+		zoomInBtn.style.outline = 'none';
+		zoomInBtn.style.border = 'none';
+		zoomInBtn.style.margin = '2px';
+		zoomInBtn.style.cursor = 'pointer';
+		mxUtils.setOpacity(zoomInBtn, 60);
+		
+		var zoomOutBtn = mxUtils.button('', function()
+		{
+			editingGraph.zoomOut();
+		});
+		zoomOutBtn.className = 'geSprite geSprite-zoomout';
+		zoomOutBtn.setAttribute('title', mxResources.get('zoomOut'));
+		zoomOutBtn.style.outline = 'none';
+		zoomOutBtn.style.border = 'none';
+		zoomOutBtn.style.margin = '2px';
+		zoomOutBtn.style.cursor = 'pointer';
+		mxUtils.setOpacity(zoomOutBtn, 60);
+
+		var zoomFitBtn = mxUtils.button('', function()
+		{
+			editingGraph.fit(8);
+			editingGraph.center();
+		});
+		zoomFitBtn.className = 'geSprite geSprite-fit';
+		zoomFitBtn.setAttribute('title', mxResources.get('fit'));
+		zoomFitBtn.style.outline = 'none';
+		zoomFitBtn.style.border = 'none';
+		zoomFitBtn.style.margin = '2px';
+		zoomFitBtn.style.cursor = 'pointer';
+		mxUtils.setOpacity(zoomFitBtn, 60);
+		
+		var zoomActualBtn = mxUtils.button('', function()
+		{
+			editingGraph.zoomActual();
+			editingGraph.center();
+		});
+		zoomActualBtn.className = 'geSprite geSprite-actualsize';
+		zoomActualBtn.setAttribute('title', mxResources.get('actualSize'));
+		zoomActualBtn.style.outline = 'none';
+		zoomActualBtn.style.border = 'none';
+		zoomActualBtn.style.margin = '2px';
+		zoomActualBtn.style.cursor = 'pointer';
+		mxUtils.setOpacity(zoomActualBtn, 60);
+
+		var deleteBtn = mxUtils.button('', removeCPoints);
+		deleteBtn.className = 'geSprite geSprite-delete';
+		deleteBtn.setAttribute('title', mxResources.get('delete'));
+		deleteBtn.style.outline = 'none';
+		deleteBtn.style.border = 'none';
+		deleteBtn.style.margin = '2px';
+		deleteBtn.style.float = 'right';
+		deleteBtn.style.cursor = 'pointer';
+		mxUtils.setOpacity(deleteBtn, 10); //Disabled
+
+		var zoomBtns = document.createElement('div');
+		zoomBtns.appendChild(zoomInBtn);
+		zoomBtns.appendChild(zoomOutBtn);
+		zoomBtns.appendChild(zoomActualBtn);
+		zoomBtns.appendChild(zoomFitBtn);
+		zoomBtns.appendChild(deleteBtn);
+
+		div.appendChild(zoomBtns);
+
+		//Auto add point to a side
+		var autoAddDiv = document.createElement('div');
+		autoAddDiv.style.marginTop = '8px';
+		var addSpan = document.createElement('span');
+		mxUtils.write(addSpan, mxResources.get('add'));
+		autoAddDiv.appendChild(addSpan);
+		var pCount = document.createElement('input');
+		pCount.setAttribute('type', 'number');
+		pCount.setAttribute('min', '1');
+		pCount.setAttribute('value', '1');
+		pCount.style.width = '45px';
+		pCount.style.margin = '0 4px 0 4px';
+		autoAddDiv.appendChild(pCount);
+		var pointsSpan = document.createElement('span');
+		mxUtils.write(pointsSpan, mxResources.get('points') + '->');
+		autoAddDiv.appendChild(pointsSpan);
+		var sideSelect = document.createElement('select');
+		sideSelect.style.margin = '0 4px 0 4px';
+		var sides = ['left', 'right', 'top', 'bottom'];
+
+		for (var i = 0; i < sides.length; i++)
+		{
+			var side = sides[i];
+			var option = document.createElement('option');
+			mxUtils.write(option, mxResources.get(side));
+			option.value = side;
+			sideSelect.appendChild(option);
+		}
+
+		autoAddDiv.appendChild(sideSelect);
+
+		var addBtn = mxUtils.button(mxResources.get('add'), function()
+		{
+			var count = parseInt(pCount.value);
+			count = count < 1? 1 : (count > 100? 100 : count);
+			pCount.value = count;
+			var side = sideSelect.value;
+			var geo = mainCell.geometry;
+
+			for (var i = 0; i < count; i++)
+			{
+				var x, y;
+
+				switch(side)
+				{
+					case 'left':
+						x = geo.x;
+						y = geo.y + (i + 1) * geo.height / (count + 1);
+						break;
+					case 'right':
+						x = geo.x + geo.width;
+						y = geo.y + (i + 1) * geo.height / (count + 1);
+						break;
+					case 'top':
+						x = geo.x + (i + 1) * geo.width / (count + 1);
+						y = geo.y;
+						break;
+					case 'bottom':
+						x = geo.x + (i + 1) * geo.width / (count + 1);
+						y = geo.y + geo.height;
+						break;
+				}
+
+				createCPoint(x - CP_HLF_SIZE, y - CP_HLF_SIZE);
+			}
+		});
+		
+		autoAddDiv.appendChild(addBtn);
+		div.appendChild(autoAddDiv);
+		
+		//Point properties
+		var pointPropsDiv = document.createElement('div');
+		pointPropsDiv.style.marginTop = '8px';
+		pointPropsDiv.style.display = 'none';
+		var xSpan = document.createElement('span');
+		mxUtils.write(xSpan, 'x');
+		pointPropsDiv.appendChild(xSpan);
+		var xInput = document.createElement('input');
+		xInput.setAttribute('type', 'number');
+		xInput.setAttribute('min', '0');
+		xInput.setAttribute('max', '100');
+		xInput.style.width = '45px';
+		xInput.style.margin = '0 4px 0 4px';
+		pointPropsDiv.appendChild(xInput);
+		var perSpan = document.createElement('span');
+		mxUtils.write(perSpan, '%, ');
+		pointPropsDiv.appendChild(perSpan);
+		var ySpan = document.createElement('span');
+		mxUtils.write(ySpan, 'y');
+		pointPropsDiv.appendChild(ySpan);
+		var yInput = document.createElement('input');
+		yInput.setAttribute('type', 'number');
+		yInput.setAttribute('min', '0');
+		yInput.setAttribute('max', '100');
+		yInput.style.width = '45px';
+		yInput.style.margin = '0 4px 0 4px';
+		pointPropsDiv.appendChild(yInput);
+		perSpan = document.createElement('span');
+		mxUtils.write(perSpan, '% - ');
+		pointPropsDiv.appendChild(perSpan);
+		var dxSpan = document.createElement('span');
+		mxUtils.write(dxSpan, 'dx');
+		pointPropsDiv.appendChild(dxSpan);
+		var dxInput = document.createElement('input');
+		dxInput.setAttribute('type', 'number');
+		dxInput.style.width = '45px';
+		dxInput.style.margin = '0 4px 0 4px';
+		pointPropsDiv.appendChild(dxInput);
+		var dySpan = document.createElement('span');
+		mxUtils.write(dySpan, 'dy');
+		pointPropsDiv.appendChild(dySpan);
+		var dyInput = document.createElement('input');
+		dyInput.setAttribute('type', 'number');
+		dyInput.style.width = '45px';
+		dyInput.style.margin = '0 4px 0 4px';
+		pointPropsDiv.appendChild(dyInput);
+		div.appendChild(pointPropsDiv);
+
+		function applyPointProp()
+		{
+			var x = parseInt(xInput.value) || 0;
+			x = x < 0? 0 : (x > 100? 100 : x);
+			xInput.value = x;
+
+			var y = parseInt(yInput.value) || 0;
+			y = y < 0? 0 : (y > 100? 100 : y);
+			yInput.value = y;
+
+			var dx = parseInt(dxInput.value) || 0;
+			var dy = parseInt(dyInput.value) || 0;
+
+			var cp = editingGraph.getConnectionPoint(state, 
+						new mxConnectionConstraint(new mxPoint(x/100, y/100), false, null, dx, dy));
+
+			var cell = editingGraph.getSelectionCell();
+
+			if (cell != null)
+			{
+				var geo = cell.geometry.clone();
+				var scale = editingGraph.view.scale;
+				var tr = editingGraph.view.translate;
+				geo.x = (cp.x - CP_HLF_SIZE * scale) / scale - tr.x;
+				geo.y = (cp.y - CP_HLF_SIZE * scale) / scale - tr.y;
+				editingGraph.model.setGeometry(cell, geo);
+			}
+		};
+
+		function getConstraintFromCPoint(cp)
+		{
+			var dx = 0, dy = 0, mGeo = mainCell.geometry;
+			var x = mxUtils.format((cp.geometry.x + CP_HLF_SIZE - mGeo.x) / mGeo.width);
+			var y = mxUtils.format((cp.geometry.y + CP_HLF_SIZE - mGeo.y) / mGeo.height);
+
+			if (x < 0)
+			{
+				dx = x * mGeo.width;
+				x = 0;
+			}
+			else if (x > 1)
+			{
+				dx = (x - 1) * mGeo.width;
+				x = 1;
+			}
+
+			if (y < 0)
+			{
+				dy = y * mGeo.height;
+				y = 0;
+			}
+			else if (y > 1)
+			{
+				dy = (y - 1) * mGeo.height;
+				y = 1;
+			}
+
+			return {x: x, y: y, dx: parseInt(dx), dy: parseInt(dy)};
+		};
+
+		function fillCPointProp()
+		{
+			if (editingGraph.getSelectionCount() == 1)
+			{
+				var cell = editingGraph.getSelectionCell();
+				var constraint = getConstraintFromCPoint(cell);
+				xInput.value = constraint.x * 100;
+				yInput.value = constraint.y * 100;
+				dxInput.value = constraint.dx;
+				dyInput.value = constraint.dy;
+				pointPropsDiv.style.display = '';
+				autoAddDiv.style.display = 'none';
+			}
+			else
+			{
+				pointPropsDiv.style.display = 'none';
+				autoAddDiv.style.display = '';
+			}
+		};
+
+		editingGraph.getSelectionModel().addListener(mxEvent.CHANGE, function()
+		{
+			if (editingGraph.getSelectionCount() > 0)
+			{
+				mxUtils.setOpacity(deleteBtn, 60); //Enabled
+			}
+			else
+			{
+				mxUtils.setOpacity(deleteBtn, 10); //Disabled
+			}
+
+			fillCPointProp();
+		}); 
+		editingGraph.addListener(mxEvent.CELLS_MOVED, fillCPointProp);
+
+		mxEvent.addListener(xInput, 'change', applyPointProp);
+		mxEvent.addListener(yInput, 'change', applyPointProp);
+		mxEvent.addListener(dxInput, 'change', applyPointProp);
+		mxEvent.addListener(dyInput, 'change', applyPointProp);
+
 		var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 		var cancelBtn = mxUtils.button(mxResources.get('cancel'), function()
 		{
 		{
+			destroy();
 			editorUi.hideDialog();
 			editorUi.hideDialog();
 		});
 		});
 
 
@@ -12789,7 +13110,7 @@ var ConnectionPointsDialog = function(editorUi, cell)
 		
 		
 		var applyBtn = mxUtils.button(mxResources.get('apply'), function()
 		var applyBtn = mxUtils.button(mxResources.get('apply'), function()
 		{
 		{
-			var cells = editingGraph.model.cells, points = [], mGeo = mainCell.geometry;
+			var cells = editingGraph.model.cells, points = [], constraints = [];
 
 
 			for (var id in cells)
 			for (var id in cells)
 			{
 			{
@@ -12797,36 +13118,30 @@ var ConnectionPointsDialog = function(editorUi, cell)
 
 
 				if (!cp.cp) continue;
 				if (!cp.cp) continue;
 
 
-				var dx = 0, dy = 0;
-				var x = mxUtils.format((cp.geometry.x + CP_HLF_SIZE - mGeo.x) / mGeo.width);
-				var y = mxUtils.format((cp.geometry.y + CP_HLF_SIZE - mGeo.y) / mGeo.height);
+				constraints.push(getConstraintFromCPoint(cp));
+			}
 
 
-				if (x < 0)
-				{
-					dx = x * mGeo.width;
-					x = 0;
-				}
-				else if (x > 1)
-				{
-					dx = (x - 1) * mGeo.width;
-					x = 1;
-				}
+			//Find and remove identical points
+			constraints.sort(function(a, b) 
+			{
+				return (a.x != b.x) ? a.x - b.x : ((a.y != b.y) ? a.y - b.y : 
+						((a.dx != b.dx) ? a.dx - b.dx : a.dy - b.dy)); //Sort based on x then y, dx and dy
+			});
 
 
-				if (y < 0)
-				{
-					dy = y * mGeo.height;
-					y = 0;
-				}
-				else if (y > 1)
+			for (var i = 0; i < constraints.length; i++)
+			{
+				if (i > 0 && constraints[i].x == constraints[i - 1].x && constraints[i].y == constraints[i - 1].y 
+						  && constraints[i].dx == constraints[i - 1].dx && constraints[i].dy == constraints[i - 1].dy)
 				{
 				{
-					dy = (y - 1) * mGeo.height;
-					y = 1;
+					continue; //Skip this identical point
 				}
 				}
 
 
-				points.push('[' + x + ',' + y + ',0,' + dx + ',' + dy + ']');
+				points.push('[' + constraints[i].x + ',' + constraints[i].y + ',0,' + 
+					constraints[i].dx + ',' + constraints[i].dy + ']');
 			}
 			}
 
 
 			editorUi.editor.graph.setCellStyles('points', '[' + points.join(',') + ']', [cell]);
 			editorUi.editor.graph.setCellStyles('points', '[' + points.join(',') + ']', [cell]);
+			destroy();
 			editorUi.hideDialog();
 			editorUi.hideDialog();
 		});
 		});
 		
 		
@@ -12835,6 +13150,7 @@ var ConnectionPointsDialog = function(editorUi, cell)
 		var resetBtn = mxUtils.button(mxResources.get('reset'), function()
 		var resetBtn = mxUtils.button(mxResources.get('reset'), function()
 		{
 		{
 			editorUi.editor.graph.setCellStyles('points', null, [cell]);
 			editorUi.editor.graph.setCellStyles('points', null, [cell]);
+			destroy();
 			editorUi.hideDialog();
 			editorUi.hideDialog();
 		});
 		});
 		
 		
@@ -12859,5 +13175,16 @@ var ConnectionPointsDialog = function(editorUi, cell)
 
 
 		div.appendChild(buttons);
 		div.appendChild(buttons);
 	};
 	};
+	
+	function destroy()
+	{
+		if (keyHandler != null)
+		{
+			keyHandler.destroy();
+		}
+	};
+
+	this.destroy = destroy;
+
 	this.container = div;
 	this.container = div;
 };
 };

+ 11 - 8
src/main/webapp/js/diagramly/Editor.js

@@ -913,11 +913,12 @@
 			
 			
 			if (stroke)
 			if (stroke)
 			{
 			{
-				style.stroke = this.canvas.state.strokeColor === 'none' ? 'transparent' : this.canvas.state.strokeColor;
+				style.stroke = this.canvas.state.strokeColor === mxConstants.NONE ?
+					'transparent' : this.canvas.state.strokeColor;
 			}
 			}
 			else
 			else
 			{
 			{
-				style.stroke = 'none';
+				style.stroke = mxConstants.NONE;
 			}
 			}
 			
 			
 			var gradient = null;
 			var gradient = null;
@@ -925,8 +926,10 @@
 			
 			
 			if (fill)
 			if (fill)
 			{
 			{
-				style.fill = this.canvas.state.fillColor === 'none' ? '' : this.canvas.state.fillColor;
-				gradient = this.canvas.state.gradientColor === 'none' ? null : this.canvas.state.gradientColor;
+				style.fill = this.canvas.state.fillColor === mxConstants.NONE ?
+					'' : this.canvas.state.fillColor;
+				gradient = this.canvas.state.gradientColor === mxConstants.NONE ?
+					null : this.canvas.state.gradientColor;
 			}
 			}
 			else
 			else
 			{
 			{
@@ -1176,7 +1179,8 @@
 					this.nextShape.options[key] = style[key];
 					this.nextShape.options[key] = style[key];
 				}
 				}
 				
 				
-				if (style['stroke'] == null)
+				if (style['stroke'] == mxConstants.NONE ||
+					style['stroke'] == null)
 				{
 				{
 					delete this.nextShape.options['stroke'];
 					delete this.nextShape.options['stroke'];
 				}
 				}
@@ -1257,9 +1261,8 @@
 		var shapeCreateHandJiggle = mxShape.prototype.createHandJiggle;
 		var shapeCreateHandJiggle = mxShape.prototype.createHandJiggle;
 		mxShape.prototype.createHandJiggle = function(c)
 		mxShape.prototype.createHandJiggle = function(c)
 		{
 		{
-			if (!this.outline && this.style != null && mxUtils.getValue(this.style,
-					'sketch', /*(urlParams['sketch'] != '1' && urlParams['rough'] == '1') ?
-						'1' : */'0') != '0')
+			if (!this.outline && this.style != null &&
+				mxUtils.getValue(this.style, 'sketch', '0') != '0')
 			{
 			{
 				if (mxUtils.getValue(this.style, 'sketchStyle', 'rough') == 'comic')
 				if (mxUtils.getValue(this.style, 'sketchStyle', 'rough') == 'comic')
 				{
 				{

+ 3 - 3
src/main/webapp/js/diagramly/Menus.js

@@ -1091,7 +1091,7 @@
 
 
 				var pluginsAction = editorUi.actions.get('plugins');
 				var pluginsAction = editorUi.actions.get('plugins');
 
 
-				if (pluginsAction != null)
+				if (pluginsAction != null && urlParams['sketch'] == '1')
 				{
 				{
 					// TODO: Show change message only when plugins have changed
 					// TODO: Show change message only when plugins have changed
 					buttons.push([mxResources.get('plugins'), pluginsAction.funct]);
 					buttons.push([mxResources.get('plugins'), pluginsAction.funct]);
@@ -1138,7 +1138,7 @@
 								mxSettings.save();
 								mxSettings.save();
 							}
 							}
 							
 							
-							if (newValue != value)
+							if (newValue == value)
 							{
 							{
 								editorUi.hideDialog();
 								editorUi.hideDialog();
 							}
 							}
@@ -1155,8 +1155,8 @@
 									localStorage.removeItem(Editor.configurationKey);
 									localStorage.removeItem(Editor.configurationKey);
 								}
 								}
 
 
-								editorUi.alert(mxResources.get('restartForChangeRequired'));
 								editorUi.hideDialog();
 								editorUi.hideDialog();
+								editorUi.alert(mxResources.get('restartForChangeRequired'));
 							}
 							}
 						}
 						}
 						catch (e)
 						catch (e)

+ 0 - 16
src/main/webapp/js/diagramly/Minimal.js

@@ -2528,22 +2528,6 @@ EditorUi.initMinimalTheme = function()
 				undoAction.addListener('stateChanged', undoListener);
 				undoAction.addListener('stateChanged', undoListener);
 				redoAction.addListener('stateChanged', undoListener);
 				redoAction.addListener('stateChanged', undoListener);
 				undoListener();
 				undoListener();
-
-				if (urlParams['layers'] != null)
-				{
-					var layersAction = ui.actions.get('layers');
-					var layersElt = addMenuItem('', layersAction.funct, null, mxResources.get('layers'), layersAction, Editor.layersImage);
-					layersElt.style.opacity = '0.4';
-					footer.appendChild(layersElt);
-				}
-				
-				if (urlParams['tags'] != null)
-				{
-					var tagsAction = ui.actions.get('tags');
-					var tagsElt = addMenuItem('', tagsAction.funct, null, mxResources.get('tags'), tagsAction, Editor.tagsImage);
-					tagsElt.style.opacity = '0.4';
-					footer.appendChild(tagsElt);
-				}
 				
 				
 				var pageMenu = this.createPageMenuTab(false, true);
 				var pageMenu = this.createPageMenuTab(false, true);
 				pageMenu.style.display = 'none';
 				pageMenu.style.display = 'none';

+ 5 - 2
src/main/webapp/js/grapheditor/Actions.js

@@ -1852,14 +1852,17 @@ Actions.prototype.init = function()
 	action.setToggleAction(true);
 	action.setToggleAction(true);
 	action.setSelectedCallback(mxUtils.bind(this, function() { return this.outlineWindow != null && this.outlineWindow.window.isVisible(); }));
 	action.setSelectedCallback(mxUtils.bind(this, function() { return this.outlineWindow != null && this.outlineWindow.window.isVisible(); }));
 
 
-	this.addAction('connectionPoints...', function()
+	this.addAction('editConnectionPoints...', function()
 	{
 	{
 		var cell = graph.getSelectionCell();
 		var cell = graph.getSelectionCell();
 
 
 		if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()) && cell != null)
 		if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()) && cell != null)
 		{
 		{
 			var dlg = new ConnectionPointsDialog(ui, cell);
 			var dlg = new ConnectionPointsDialog(ui, cell);
-	    	ui.showDialog(dlg.container, 300, 390, true, true);
+	    	ui.showDialog(dlg.container, 350, 450, true, true, function() 
+			{
+				dlg.destroy();
+			});
 			dlg.init();
 			dlg.init();
 		}
 		}
 	}).isEnabled = isGraphEnabled;
 	}).isEnabled = isGraphEnabled;

+ 1 - 4
src/main/webapp/js/grapheditor/Menus.js

@@ -1598,10 +1598,7 @@ Menus.prototype.addPopupMenuCellEditItems = function(menu, cell, evt, parent)
 		this.addMenuItem(menu, 'crop', parent, evt);
 		this.addMenuItem(menu, 'crop', parent, evt);
 	}
 	}
 
 
-	if (urlParams['dev'] == '1')
-	{
-		this.addMenuItem(menu, 'connectionPoints', parent, evt);
-	}
+	this.addMenuItem(menu, 'editConnectionPoints', parent, evt);
 };
 };
  
  
 /**
 /**

Разница между файлами не показана из-за своего большого размера
+ 383 - 384
src/main/webapp/js/viewer-static.min.js


Разница между файлами не показана из-за своего большого размера
+ 383 - 384
src/main/webapp/js/viewer.min.js


Разница между файлами не показана из-за своего большого размера
+ 3 - 3
src/main/webapp/mxgraph/mxClient.js


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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=lblToSvg
 txtSettings=txtSettings
 txtSettings=txtSettings
 LinksLost=LinksLost
 LinksLost=LinksLost
 arcSize=arcSize
 arcSize=arcSize
+editConnectionPoints=editConnectionPoints

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

+ 177 - 176
src/main/webapp/resources/dia_pl.txt

@@ -3,10 +3,10 @@
 about=O aplikacji
 about=O aplikacji
 aboutDrawio=O aplikacji draw.io
 aboutDrawio=O aplikacji draw.io
 accessDenied=Brak dostępu
 accessDenied=Brak dostępu
-action=Action
+action=Akcja
 actualSize=Rozmiar rzeczywisty
 actualSize=Rozmiar rzeczywisty
 add=Dodaj
 add=Dodaj
-addAccount=Add account
+addAccount=Dodaj konto
 addedFile=Dodano {1}
 addedFile=Dodano {1}
 addImages=Dodaj obrazy
 addImages=Dodaj obrazy
 addImageUrl=Dodaj adres URL obrazu
 addImageUrl=Dodaj adres URL obrazu
@@ -27,13 +27,13 @@ allTags=Wszystkie znaczniki
 anchor=Kotwica
 anchor=Kotwica
 android=Android
 android=Android
 angle=Kąt
 angle=Kąt
-arc=Arc
+arc=Łuk
 areYouSure=Czy jesteś pewny?
 areYouSure=Czy jesteś pewny?
 ensureDataSaved=Przed zamknięciem upewnij się, czy dane zostały zapisane.
 ensureDataSaved=Przed zamknięciem upewnij się, czy dane zostały zapisane.
 allChangesSaved=Zapisano wszystkie zmiany
 allChangesSaved=Zapisano wszystkie zmiany
 allChangesSavedInDrive=Wszystkie zmiany zapisano na dysku Drive
 allChangesSavedInDrive=Wszystkie zmiany zapisano na dysku Drive
 allowPopups=Zezwalaj na wyskakiwanie okienek, aby zapobiec pojawianiu się tego okna.
 allowPopups=Zezwalaj na wyskakiwanie okienek, aby zapobiec pojawianiu się tego okna.
-allowRelativeUrl=Allow relative URL
+allowRelativeUrl=Zezwól na względny adres URL
 alreadyConnected=Węzły zostały już połączone
 alreadyConnected=Węzły zostały już połączone
 apply=Zastosuj
 apply=Zastosuj
 archiMate21=ArchiMate 2.1
 archiMate21=ArchiMate 2.1
@@ -54,7 +54,7 @@ attachments=Załączniki
 aws=AWS
 aws=AWS
 aws3d=AWS 3D
 aws3d=AWS 3D
 azure=Azure
 azure=Azure
-back=Back
+back=Wróć
 background=Tło
 background=Tło
 backgroundColor=Kolor tła
 backgroundColor=Kolor tła
 backgroundImage=Zdjęcie w tle
 backgroundImage=Zdjęcie w tle
@@ -66,7 +66,7 @@ blockquote=Cytat
 blog=Blog
 blog=Blog
 bold=Pogrubienie
 bold=Pogrubienie
 bootstrap=Bootstrap
 bootstrap=Bootstrap
-border=Border
+border=Granica
 borderColor=Kolor ramki
 borderColor=Kolor ramki
 borderWidth=Szerokość ramki
 borderWidth=Szerokość ramki
 bottom=Dół
 bottom=Dół
@@ -74,7 +74,7 @@ bottomAlign=Wyrównanie do dołu
 bottomLeft=Lewy dół
 bottomLeft=Lewy dół
 bottomRight=Prawy dół
 bottomRight=Prawy dół
 bpmn=BMPN
 bpmn=BMPN
-bringForward=Bring Forward
+bringForward=Do przodu
 browser=Przeglądarka
 browser=Przeglądarka
 bulletedList=Lista wypunktowana
 bulletedList=Lista wypunktowana
 business=Biznesowe
 business=Biznesowe
@@ -83,36 +83,36 @@ cabinets=Skrzynka
 cancel=Anuluj
 cancel=Anuluj
 center=Do środka
 center=Do środka
 cannotLoad=Próba załadowania zakończona niepowodzeniem. Spróbuj później.
 cannotLoad=Próba załadowania zakończona niepowodzeniem. Spróbuj później.
-cannotLogin=Próba logowania zakończona niepowodzeniem. Spróbuj później.
+cannotLogin=Próba zalogowania nie powiodła się. Proszę spróbować ponownie później.
 cannotOpenFile=Nie można otworzyć pliku
 cannotOpenFile=Nie można otworzyć pliku
 change=Zmień
 change=Zmień
 changeOrientation=Zmień orientację
 changeOrientation=Zmień orientację
 changeUser=Zmień użytkownika
 changeUser=Zmień użytkownika
-changeStorage=Change storage
+changeStorage=Zmienić magazyn
 changesNotSaved=Zmiany nie zostały zapisanie
 changesNotSaved=Zmiany nie zostały zapisanie
-classDiagram=Class Diagram
+classDiagram=Diagram klas
 userJoined={1} dołączył
 userJoined={1} dołączył
 userLeft={1} opuścił
 userLeft={1} opuścił
 chatWindowTitle=Chat
 chatWindowTitle=Chat
 chooseAnOption=Wybierz opcję
 chooseAnOption=Wybierz opcję
 chromeApp=Aplikacja Chrome
 chromeApp=Aplikacja Chrome
-collaborativeEditingNotice=Important Notice for Collaborative Editing
-compare=Compare
+collaborativeEditingNotice=Ważna informacja dotycząca wspólnego edytowania
+compare=Porównaj
 compressed=Skompresowany
 compressed=Skompresowany
 commitMessage=commit Wiadomość
 commitMessage=commit Wiadomość
-configLinkWarn=This link configures draw.io. Only click OK if you trust whoever gave you it!
-configLinkConfirm=Click OK to configure and restart draw.io.
-container=Container
+configLinkWarn=Ten link konfiguruje draw.io. Jeśli ufasz temu, kto ci go przekazał link, kliknij OK!
+configLinkConfirm=Kliknij OK, aby skonfigurować i ponownie uruchomić draw.io.
+container=Kontener
 csv=CSV
 csv=CSV
-dark=Dark
-diagramXmlDesc=XML File
-diagramHtmlDesc=HTML File
-diagramPngDesc=Editable Bitmap Image
-diagramSvgDesc=Editable Vector Image
-didYouMeanToExportToPdf=Did you mean to export to PDF?
+dark=Ciemny
+diagramXmlDesc=Plik XML
+diagramHtmlDesc=Plik HTML
+diagramPngDesc=Edytowalny obraz bitmapowy
+diagramSvgDesc=Edytowalny obraz wektorowy
+didYouMeanToExportToPdf=Czy chodziło Ci o eksport do PDF?
 draftFound=Znaleziono wersję roboczą {1}. Załaduj ją do edytora lub odrzuć, by kontynuować.
 draftFound=Znaleziono wersję roboczą {1}. Załaduj ją do edytora lub odrzuć, by kontynuować.
-draftRevisionMismatch=There is a different version of this diagram on a shared draft of this page. Please edit the diagram from the draft to ensure you are working with the latest version.
-selectDraft=Select a draft to continue editing:
+draftRevisionMismatch=Na współdzielonej wersji roboczej tej strony znajduje się inna wersja tego diagramu. Prosimy o edycję diagramu z wersji roboczej, aby upewnić się, że pracujesz z najnowszą wersją.
+selectDraft=Wybierz wersję roboczą, aby kontynuować edycję:
 dragAndDropNotSupported=Przeciągnij i upuść dla obrazów nie jest wspierane. Czy chcesz zamiast tego użyć importowania?
 dragAndDropNotSupported=Przeciągnij i upuść dla obrazów nie jest wspierane. Czy chcesz zamiast tego użyć importowania?
 dropboxCharsNotAllowed=Następujące znaki są niedozwolone: \ / : ? * " |
 dropboxCharsNotAllowed=Następujące znaki są niedozwolone: \ / : ? * " |
 check=Sprawdź
 check=Sprawdź
@@ -124,7 +124,7 @@ clearDefaultStyle=Wyczyść styl domyślny
 clearWaypoints=Wyczyść punkty trasy
 clearWaypoints=Wyczyść punkty trasy
 clipart=Clipart
 clipart=Clipart
 close=Zamknij
 close=Zamknij
-closingFile=Closing file
+closingFile=Zamykanie pliku
 collaborator=Współuczestnik
 collaborator=Współuczestnik
 collaborators=Współuczestnicy
 collaborators=Współuczestnicy
 collapse=Zwiń
 collapse=Zwiń
@@ -134,8 +134,8 @@ collapsible=Zwijalny
 comic=Komiksowy
 comic=Komiksowy
 comment=Komentarz
 comment=Komentarz
 commentsNotes=Komentarze/uwagi
 commentsNotes=Komentarze/uwagi
-compress=Compress
-configuration=Configuration
+compress=Kompresja
+configuration=Konfiguracja
 connect=Połącz
 connect=Połącz
 connecting=Łączenie
 connecting=Łączenie
 connectWithDrive=Połącz z Dyskiem Google
 connectWithDrive=Połącz z Dyskiem Google
@@ -147,11 +147,11 @@ containsValidationErrors=Zawiera błędy potwierdzenia
 copiedToClipboard=Skopiowano do schowka
 copiedToClipboard=Skopiowano do schowka
 copy=Kopiuj
 copy=Kopiuj
 copyConnect=Kopiuj przy połączeniu
 copyConnect=Kopiuj przy połączeniu
-copyCreated=A copy of the file was created.
-copyData=Copy Data
+copyCreated=Utworzono kopię pliku.
+copyData=Kopiuj Dane
 copyOf=Kopia {1}
 copyOf=Kopia {1}
 copyOfDrawing=Kopia rysunku
 copyOfDrawing=Kopia rysunku
-copySize=Copy Size
+copySize=Kopiuj rozmiar
 copyStyle=Kopiuj styl
 copyStyle=Kopiuj styl
 create=Utwórz
 create=Utwórz
 createNewDiagram=Utwórz nowy diagram
 createNewDiagram=Utwórz nowy diagram
@@ -161,7 +161,7 @@ crop=Przytnij
 curved=Zakrzywiony
 curved=Zakrzywiony
 custom=Dostosuj
 custom=Dostosuj
 current=Aktualny
 current=Aktualny
-currentPage=Current page
+currentPage=Aktualna strona
 cut=Wytnij
 cut=Wytnij
 dashed=Przerywana
 dashed=Przerywana
 decideLater=Zdecyduj później
 decideLater=Zdecyduj później
@@ -178,7 +178,7 @@ device=Urządzenie
 diagram=Diagram
 diagram=Diagram
 diagramContent=Zawartość diagramu
 diagramContent=Zawartość diagramu
 diagramLocked=Diagram został zablokowany w celu zabezpieczenia go przed dalszą utratą danych.
 diagramLocked=Diagram został zablokowany w celu zabezpieczenia go przed dalszą utratą danych.
-diagramLockedBySince=The diagram is locked by {1} since {2} ago
+diagramLockedBySince=Diagram jest zablokowany przez {1}, od {2}
 diagramName=Nazwa diagramu
 diagramName=Nazwa diagramu
 diagramIsPublic=Diagram jest publiczny
 diagramIsPublic=Diagram jest publiczny
 diagramIsNotPublic=Diagram nie jest publiczny
 diagramIsNotPublic=Diagram nie jest publiczny
@@ -193,13 +193,13 @@ discardChanges=Odrzuć zmiany i połącz ponownie
 disconnected=Rozłączony
 disconnected=Rozłączony
 distribute=Rozprowadź
 distribute=Rozprowadź
 done=Gotowe
 done=Gotowe
-doNotShowAgain=Do not show again
+doNotShowAgain=Nie wyświetlaj ponownie
 dotted=Kropkowany
 dotted=Kropkowany
 doubleClickOrientation=Kliknij dwukrotnie, aby zmienić położenie
 doubleClickOrientation=Kliknij dwukrotnie, aby zmienić położenie
 doubleClickTooltip=Kliknij dwukrotnie, aby wstawić tekst
 doubleClickTooltip=Kliknij dwukrotnie, aby wstawić tekst
 doubleClickChangeProperty=Kliknij dwukrotnie, aby zmienić nazwę atrybutu
 doubleClickChangeProperty=Kliknij dwukrotnie, aby zmienić nazwę atrybutu
 download=Pobierz
 download=Pobierz
-downloadDesktop=Get Desktop
+downloadDesktop=Pobierz na komputer
 downloadAs=Pobierz jako
 downloadAs=Pobierz jako
 clickHereToSave=Kliknij tutaj, aby zapisać
 clickHereToSave=Kliknij tutaj, aby zapisać
 dpi=DPI
 dpi=DPI
@@ -236,18 +236,18 @@ googleImages=Obrazy Google
 imageSearch=Wyszukiwanie obrazów
 imageSearch=Wyszukiwanie obrazów
 eip=EIP
 eip=EIP
 embed=Osadź
 embed=Osadź
-embedFonts=Embed Fonts
+embedFonts=Osadzanie czcionek
 embedImages=Obrazy osadzone
 embedImages=Obrazy osadzone
 mainEmbedNotice=Wklej na stronie
 mainEmbedNotice=Wklej na stronie
 electrical=Elektryczne
 electrical=Elektryczne
-ellipse=Ellipse
+ellipse=Elipsa
 embedNotice=Wklej na końcu strony
 embedNotice=Wklej na końcu strony
 enterGroup=Wprowadź grupę
 enterGroup=Wprowadź grupę
 enterName=Wprowadź nazwę
 enterName=Wprowadź nazwę
 enterPropertyName=Wprowadź nazwę atrybutu
 enterPropertyName=Wprowadź nazwę atrybutu
 enterValue=Wprowadź wartość
 enterValue=Wprowadź wartość
 entityRelation=Związek encji
 entityRelation=Związek encji
-entityRelationshipDiagram=Entity Relationship Diagram
+entityRelationshipDiagram=Diagram relacji między encjami
 error=Błąd
 error=Błąd
 errorDeletingFile=Błąd podczas usuwania pliku
 errorDeletingFile=Błąd podczas usuwania pliku
 errorLoadingFile=Błąd podczas ładowania pliku
 errorLoadingFile=Błąd podczas ładowania pliku
@@ -260,7 +260,7 @@ errorSavingFileUnknown=Błąd podczas autoryzacji z serwerami Google. Proszę od
 errorSavingFileForbidden=Błąd podczas zapisywania pliku. Brak wystarczających praw dostępu.
 errorSavingFileForbidden=Błąd podczas zapisywania pliku. Brak wystarczających praw dostępu.
 errorSavingFileNameConflict=Nie można zapisać diagramu. Aktualna strona zawiera już plik '{1}'
 errorSavingFileNameConflict=Nie można zapisać diagramu. Aktualna strona zawiera już plik '{1}'
 errorSavingFileNotFound=Błąd podczas zapisywania pliku. Plik nie został odnaleziony.
 errorSavingFileNotFound=Błąd podczas zapisywania pliku. Plik nie został odnaleziony.
-errorSavingFileReadOnlyMode=Could not save diagram while read-only mode is active.
+errorSavingFileReadOnlyMode=Nie można zapisać schematu, gdy jest aktywny tryb tylko do odczytu.
 errorSavingFileSessionTimeout=Twoja sesja wygasła. <a target='_blank' href='{1}'>{2}</a> i wróć do tej karty, by spróbować zapisać ponownie.
 errorSavingFileSessionTimeout=Twoja sesja wygasła. <a target='_blank' href='{1}'>{2}</a> i wróć do tej karty, by spróbować zapisać ponownie.
 errorSendingFeedback=Błąd podczas przesyłania opinii.
 errorSendingFeedback=Błąd podczas przesyłania opinii.
 errorUpdatingPreview=Błąd podczas aktualizowania podglądu.
 errorUpdatingPreview=Błąd podczas aktualizowania podglądu.
@@ -272,7 +272,7 @@ exporting=Eksportowanie
 exportAs=Eksportuj jako
 exportAs=Eksportuj jako
 exportOptionsDisabled=Opcja eksporu została zablokowana
 exportOptionsDisabled=Opcja eksporu została zablokowana
 exportOptionsDisabledDetails=Właściciel zablokował możliwość pobierania, drukowania i kopiowania dla przeglądających i komentujących.
 exportOptionsDisabledDetails=Właściciel zablokował możliwość pobierania, drukowania i kopiowania dla przeglądających i komentujących.
-externalChanges=External Changes
+externalChanges=Zmiany zewnętrzne
 extras=Dodatki
 extras=Dodatki
 facebook=Facebook
 facebook=Facebook
 failedToSaveTryReconnect=Błąd zapisu, próbuję połączyć ponownie
 failedToSaveTryReconnect=Błąd zapisu, próbuję połączyć ponownie
@@ -282,13 +282,13 @@ feedbackSent=Przesyłanie opinii powiodło się.
 floorplans=Rzuty pomieszczeń
 floorplans=Rzuty pomieszczeń
 file=Plik
 file=Plik
 fileChangedOverwriteDialog=Plik został zmieniony. Nadpisać zmiany?
 fileChangedOverwriteDialog=Plik został zmieniony. Nadpisać zmiany?
-fileChangedSyncDialog=The file has been modified.
-fileChangedSync=The file has been modified. Click here to synchronize.
+fileChangedSyncDialog=Plik został zmieniony.
+fileChangedSync=Plik został zmieniony. Kliknij tutaj, aby dokonać synchronizacji.
 overwrite=Nadpisz
 overwrite=Nadpisz
-synchronize=Synchronize
+synchronize=Synchronizuj
 filename=Nazwa pliku
 filename=Nazwa pliku
 fileExists=Plik już istnieje
 fileExists=Plik już istnieje
-fileMovedToTrash=File was moved to trash
+fileMovedToTrash=Plik przeniesiono do kosza
 fileNearlyFullSeeFaq=Plik prawie pełen, sprawdź FAQ
 fileNearlyFullSeeFaq=Plik prawie pełen, sprawdź FAQ
 fileNotFound=Plik nie został odnaleziony
 fileNotFound=Plik nie został odnaleziony
 repositoryNotFound=Repozytorium nie zostało odnalezione
 repositoryNotFound=Repozytorium nie zostało odnalezione
@@ -296,13 +296,13 @@ fileNotFoundOrDenied=Plik nie został odnaleziony. Plik nie istnieje lub nie pos
 fileNotLoaded=Plik niezaładowany
 fileNotLoaded=Plik niezaładowany
 fileNotSaved=Plik niezapisany
 fileNotSaved=Plik niezapisany
 fileOpenLocation=W jaki sposób chcesz otworzyć ten/te plik(i)?
 fileOpenLocation=W jaki sposób chcesz otworzyć ten/te plik(i)?
-filetypeHtml=.html causes file to save as HTML with redirect to cloud URL
-filetypePng=.png causes file to save as PNG with embedded data
-filetypeSvg=.svg causes file to save as SVG with embedded data
+filetypeHtml=.html powoduje, że plik zostanie zapisany jako HTML z przekierowaniem na adres URL chmury
+filetypePng=.png powoduje zapisanie pliku jako PNG z umieszczonymi w nim danymi
+filetypeSvg=.svg powoduje, że plik zapisuje się jako SVG z umieszczonymi danymi
 fileWillBeSavedInAppFolder={1} zostanie zapisany w folderze aplikacji.
 fileWillBeSavedInAppFolder={1} zostanie zapisany w folderze aplikacji.
 fill=Wypełnij
 fill=Wypełnij
 fillColor=Kolor wypełnienia
 fillColor=Kolor wypełnienia
-filterCards=Filter Cards
+filterCards=Filtr kart
 find=Znajdź
 find=Znajdź
 fit=Dopasuj
 fit=Dopasuj
 fitContainer=Zmień wymiary kontenera
 fitContainer=Zmień wymiary kontenera
@@ -342,26 +342,26 @@ formatVssx=VSSX
 formatXmlPlain=XML (normalny)
 formatXmlPlain=XML (normalny)
 formatXml=XML
 formatXml=XML
 forum=Dyskusja/Forum wsparcia
 forum=Dyskusja/Forum wsparcia
-freehand=Freehand
+freehand=Odręcznie
 fromTemplate=Z szablonu
 fromTemplate=Z szablonu
 fromTemplateUrl=Z adresu URL szablonu
 fromTemplateUrl=Z adresu URL szablonu
 fromText=Z tekstu
 fromText=Z tekstu
 fromUrl=Z hiperłącza
 fromUrl=Z hiperłącza
 fromThisPage=Z tej strony
 fromThisPage=Z tej strony
 fullscreen=Pełnoekranowy
 fullscreen=Pełnoekranowy
-gap=Gap
+gap=Luka
 gcp=GCP
 gcp=GCP
 general=Ogólny
 general=Ogólny
-getNotionChromeExtension=Get the Notion Chrome Extension
+getNotionChromeExtension=Pobierz rozszerzenie Notion do Chrome
 github=GitHub
 github=GitHub
 gitlab=GitLab
 gitlab=GitLab
 gliffy=Gliffy
 gliffy=Gliffy
 global=Globalny
 global=Globalny
-googleDocs=Google Docs
-googleDrive=Google Drive
+googleDocs=Dokumenty Google
+googleDrive=Dysk Google
 googleGadget=Google Gadget
 googleGadget=Google Gadget
 googlePlus=Google+
 googlePlus=Google+
-googleSharingNotAvailable=Sharing is only available via Google Drive. Please click Open below and share from the more actions menu:
+googleSharingNotAvailable=Udostępnianie jest dostępne tylko przez Google Drive. Proszę kliknąć Otwórz poniżej i udostępnić z menu więcej akcji:
 googleSlides=Google Slides
 googleSlides=Google Slides
 googleSites=Google Sites
 googleSites=Google Sites
 googleSheets=Google Sheets
 googleSheets=Google Sheets
@@ -415,10 +415,10 @@ insertRowBefore=Wstaw wiersz u góry
 insertRowAfter=Wstaw wiersz u dołu
 insertRowAfter=Wstaw wiersz u dołu
 insertText=Wstaw tekst
 insertText=Wstaw tekst
 inserting=Wstawianie
 inserting=Wstawianie
-installApp=Install App
+installApp=Zainstaluj aplikację
 invalidFilename=Nazwy diagramów nie mogą zawierać następujących znaków: \ / | : ; { } < > & + ? = "
 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
+invalidLicenseSeeThisPage=Twoja licencja jest nieważna, sprawdź <a target="_blank" href="https://support.draw.io/display/DFCS/Licensing+your+draw.io+plugin">stronę</a>.
+invalidInput=Nieprawidłowe wejście
 invalidName=Nieprawidłowa nazwa
 invalidName=Nieprawidłowa nazwa
 invalidOrMissingFile=Nieprawidłowy lub brakujący plik
 invalidOrMissingFile=Nieprawidłowy lub brakujący plik
 invalidPublicUrl=Nieprawidłowe publiczne hiperłącze
 invalidPublicUrl=Nieprawidłowe publiczne hiperłącze
@@ -427,7 +427,7 @@ ios=iOS
 italic=Kursywa
 italic=Kursywa
 kennedy=Kennedy
 kennedy=Kennedy
 keyboardShortcuts=Skróty klawiszowe
 keyboardShortcuts=Skróty klawiszowe
-labels=Labels
+labels=Etykiety
 layers=Warstwy
 layers=Warstwy
 landscape=Poziomy
 landscape=Poziomy
 language=Język
 language=Język
@@ -436,9 +436,9 @@ lastChange=Ostatnia zmiana {1} temu
 lessThanAMinute=poniżej minuty
 lessThanAMinute=poniżej minuty
 licensingError=Błąd licencji
 licensingError=Błąd licencji
 licenseHasExpired=Licencja dla {1} wygasła {2}. Kliknij tutaj.
 licenseHasExpired=Licencja dla {1} wygasła {2}. Kliknij tutaj.
-licenseRequired=This feature requires draw.io to be licensed.
+licenseRequired=Ta funkcja wymaga licencji na draw.io.
 licenseWillExpire=Licencja dla {1} wygaśnie {2}. Kliknij tutaj.
 licenseWillExpire=Licencja dla {1} wygaśnie {2}. Kliknij tutaj.
-lineJumps=Line jumps
+lineJumps=Przeskoki na liniach
 linkAccountRequired=Jeśli diagram nie jest publiczny, wymagane jest konto Google, by zobaczyć link.
 linkAccountRequired=Jeśli diagram nie jest publiczny, wymagane jest konto Google, by zobaczyć link.
 linkText=Hiperłącze tekstu
 linkText=Hiperłącze tekstu
 list=Lista
 list=Lista
@@ -470,18 +470,18 @@ loggedOut=Wylogowany
 logIn=Zaloguj
 logIn=Zaloguj
 loveIt=Kocham {1}
 loveIt=Kocham {1}
 lucidchart=Lucidchart
 lucidchart=Lucidchart
-maps=Maps
+maps=Mapy
 mathematicalTypesetting=Matematyczny zestaw znaków
 mathematicalTypesetting=Matematyczny zestaw znaków
 makeCopy=Zrób kopię
 makeCopy=Zrób kopię
 manual=Ręczny
 manual=Ręczny
-merge=Merge
+merge=Połącz
 mermaid=Mermaid
 mermaid=Mermaid
 microsoftOffice=Microsoft Office
 microsoftOffice=Microsoft Office
 microsoftExcel=Microsoft Excel
 microsoftExcel=Microsoft Excel
 microsoftPowerPoint=Microsoft PowerPoint
 microsoftPowerPoint=Microsoft PowerPoint
 microsoftWord=Microsoft Word
 microsoftWord=Microsoft Word
 middle=Środek
 middle=Środek
-minimal=Minimal
+minimal=Minimalna
 misc=Różne
 misc=Różne
 mockups=Modele
 mockups=Modele
 modificationDate=Data zmiany
 modificationDate=Data zmiany
@@ -495,13 +495,13 @@ moving=Przenoszenie
 moveSelectionTo=Przenieś zaznaczone do {1}
 moveSelectionTo=Przenieś zaznaczone do {1}
 name=Nazwa
 name=Nazwa
 navigation=Nawigacja
 navigation=Nawigacja
-network=Network
+network=Sieć
 networking=Sieci komputerowe
 networking=Sieci komputerowe
 new=Nowy
 new=Nowy
 newLibrary=Nowa biblioteka
 newLibrary=Nowa biblioteka
 nextPage=Następna strona
 nextPage=Następna strona
 no=Nie
 no=Nie
-noPickFolder=No, pick folder
+noPickFolder=Nie, wybierz folder
 noAttachments=Nie znaleziono załączników
 noAttachments=Nie znaleziono załączników
 noColor=Brak koloru
 noColor=Brak koloru
 noFiles=Brak plików
 noFiles=Brak plików
@@ -526,7 +526,7 @@ notAUtf8File=To nie jest plik z kodowaniem UTF-8
 notConnected=Niepołączony
 notConnected=Niepołączony
 note=Notka
 note=Notka
 notion=Notion
 notion=Notion
-notSatisfiedWithImport=Not satisfied with the import?
+notSatisfiedWithImport=Nie jesteś zadowolony z importu?
 notUsingService=Nie używasz {1}?
 notUsingService=Nie używasz {1}?
 numberedList=Lista numerowana
 numberedList=Lista numerowana
 offline=Offline
 offline=Offline
@@ -549,7 +549,7 @@ openRecent=Otwórz ostatnie
 openSupported=Wspierane są pliki utworzone w tym programie (.xml), .vsdx oraz .gliffy
 openSupported=Wspierane są pliki utworzone w tym programie (.xml), .vsdx oraz .gliffy
 options=Opcje
 options=Opcje
 organic=Organiczny
 organic=Organiczny
-orgChart=Org Chart
+orgChart=Schemat organizacji
 orthogonal=Prostopadły
 orthogonal=Prostopadły
 otherViewer=inny użytkownik
 otherViewer=inny użytkownik
 otherViewers=inni użytkownicy
 otherViewers=inni użytkownicy
@@ -567,11 +567,11 @@ pan=Panorama
 panTooltip=Spacja+przeciągnij do panoramy
 panTooltip=Spacja+przeciągnij do panoramy
 paperSize=Rozmiar papieru
 paperSize=Rozmiar papieru
 pattern=Wzór
 pattern=Wzór
-parallels=Parallels
+parallels=Równolegle
 paste=Wklej
 paste=Wklej
-pasteData=Paste Data
+pasteData=Wklej dane
 pasteHere=Wklej tutaj
 pasteHere=Wklej tutaj
-pasteSize=Paste Size
+pasteSize=Wklej rozmiar
 pasteStyle=Wklej styl
 pasteStyle=Wklej styl
 perimeter=Granica
 perimeter=Granica
 permissionAnyone=Każdy może edytować
 permissionAnyone=Każdy może edytować
@@ -600,20 +600,20 @@ properties=Właściwości
 publish=Publikuj
 publish=Publikuj
 quickStart=Szybki start (wideo)
 quickStart=Szybki start (wideo)
 rack=Szafa serwerowa
 rack=Szafa serwerowa
-radial=Radial
+radial=Promienisty
 radialTree=Drzewo radialne
 radialTree=Drzewo radialne
 readOnly=Tylko do odczytu
 readOnly=Tylko do odczytu
 reconnecting=Łączę ponownie
 reconnecting=Łączę ponownie
 recentlyUpdated=Ostatnio zakutalizowane
 recentlyUpdated=Ostatnio zakutalizowane
 recentlyViewed=Ostatnio przeglądane
 recentlyViewed=Ostatnio przeglądane
-rectangle=Rectangle
+rectangle=Prostokąt
 redirectToNewApp=Ten plik został utworzony lub zmodyfikowany w nowszej wersji programu. Teraz nastąpi przekierowanie.
 redirectToNewApp=Ten plik został utworzony lub zmodyfikowany w nowszej wersji programu. Teraz nastąpi przekierowanie.
 realtimeTimeout=Wygląda na to, że dokonał-eś/aś kilku zmian w trybie offline. Przepraszamy, ale te zmiany nie mogą zostać zapisane.
 realtimeTimeout=Wygląda na to, że dokonał-eś/aś kilku zmian w trybie offline. Przepraszamy, ale te zmiany nie mogą zostać zapisane.
 redo=Powtórz
 redo=Powtórz
 refresh=Odśwież
 refresh=Odśwież
 regularExpression=Wyrażenie regularne
 regularExpression=Wyrażenie regularne
-relative=Relative
-relativeUrlNotAllowed=Relative URL not allowed
+relative=Względny
+relativeUrlNotAllowed=Względny adres URL nie jest dozwolony
 rememberMe=Zapamiętaj mnie
 rememberMe=Zapamiętaj mnie
 rememberThisSetting=Zapamiętaj te ustawienia
 rememberThisSetting=Zapamiętaj te ustawienia
 removeFormat=Wyczyść formatowanie
 removeFormat=Wyczyść formatowanie
@@ -631,7 +631,7 @@ required=wymagany
 reset=Resetuj
 reset=Resetuj
 resetView=Resetuj widok
 resetView=Resetuj widok
 resize=Zmień rozmiar
 resize=Zmień rozmiar
-resizeLargeImages=Do you want to resize large images to make the application run faster?
+resizeLargeImages=Czy chcesz zmienić rozmiar dużych obrazów, aby aplikacja działała szybciej?
 retina=Retina
 retina=Retina
 responsive=Responsywny
 responsive=Responsywny
 restore=Przywróć
 restore=Przywróć
@@ -642,7 +642,7 @@ retryingLogin=Upłynął czas logowania. Ponawiam...
 reverse=Odwróć
 reverse=Odwróć
 revision=Zmiana
 revision=Zmiana
 revisionHistory=Historia zmian
 revisionHistory=Historia zmian
-rhombus=Rhombus
+rhombus=Romb
 right=Do prawej
 right=Do prawej
 rightAlign=Wyrównaj do prawej
 rightAlign=Wyrównaj do prawej
 rightToLeft=Od prawej do lewej
 rightToLeft=Od prawej do lewej
@@ -655,11 +655,11 @@ saveAndExit=Zapisz i wyjdź
 saveAs=Zapisz jako
 saveAs=Zapisz jako
 saveAsXmlFile=Zapisać jako plik XML?
 saveAsXmlFile=Zapisać jako plik XML?
 saved=Zapisany
 saved=Zapisany
-saveDiagramFirst=Please save the diagram first
+saveDiagramFirst=Proszę najpierw zapisać diagram
 saveDiagramsTo=Zapisz diagramy w
 saveDiagramsTo=Zapisz diagramy w
 saveLibrary403=Niewystarczające uprawnienia do edycji tej biblioteki
 saveLibrary403=Niewystarczające uprawnienia do edycji tej biblioteki
 saveLibrary500=Wystąpił błąd podczas zapisywania biblioteki
 saveLibrary500=Wystąpił błąd podczas zapisywania biblioteki
-saveLibraryReadOnly=Could not save library while read-only mode is active
+saveLibraryReadOnly=Nie można zapisać biblioteki, gdy jest aktywny tryb tylko do odczytu
 saving=Zapisuję
 saving=Zapisuję
 scratchpad=Brudnopis
 scratchpad=Brudnopis
 scrollbars=Paski przewijania
 scrollbars=Paski przewijania
@@ -667,15 +667,15 @@ search=Szukaj
 searchShapes=Szukaj kształtów
 searchShapes=Szukaj kształtów
 selectAll=Zaznacz wszystko
 selectAll=Zaznacz wszystko
 selectionOnly=Tylko wybrane
 selectionOnly=Tylko wybrane
-selectCard=Select Card
+selectCard=Wybierz kartę
 selectEdges=Zaznacz brzegi
 selectEdges=Zaznacz brzegi
 selectFile=Wybierz plik
 selectFile=Wybierz plik
 selectFolder=Wybierz folder
 selectFolder=Wybierz folder
 selectFont=Wybierz czcionkę
 selectFont=Wybierz czcionkę
 selectNone=Odznacz wszystko
 selectNone=Odznacz wszystko
-selectTemplate=Select Template
+selectTemplate=Wybierz szablon
 selectVertices=Zaznacz wierzchołki
 selectVertices=Zaznacz wierzchołki
-sendBackward=Send Backward
+sendBackward=Wyślij wstecz
 sendMessage=Wyślij
 sendMessage=Wyślij
 sendYourFeedback=Wyślij opinię
 sendYourFeedback=Wyślij opinię
 serviceUnavailableOrBlocked=Usługa zablokowana lub niedostępna
 serviceUnavailableOrBlocked=Usługa zablokowana lub niedostępna
@@ -687,7 +687,7 @@ shape=Kształt
 shapes=Kształty
 shapes=Kształty
 share=Udostępnij
 share=Udostępnij
 shareLink=Hiperłącze do umożliwienia edycji innym użytkownikom
 shareLink=Hiperłącze do umożliwienia edycji innym użytkownikom
-sharingAvailable=Sharing available for Google Drive and OneDrive files.
+sharingAvailable=Udostępnianie dostępne dla plików Google Drive i OneDrive.
 sharp=Ostry
 sharp=Ostry
 show=Pokaż
 show=Pokaż
 showStartScreen=Pokaż ekran startowy
 showStartScreen=Pokaż ekran startowy
@@ -696,10 +696,10 @@ signs=Znaki
 signOut=Wyloguj
 signOut=Wyloguj
 simple=Proste
 simple=Proste
 simpleArrow=Prosta strzałka
 simpleArrow=Prosta strzałka
-simpleViewer=Simple Viewer
+simpleViewer=Łatwe przeglądanie
 size=Rozmiar
 size=Rozmiar
-sketch=Sketch
-snapToGrid=Snap to Grid
+sketch=Szkic
+snapToGrid=Przyciąganie do siatki
 solid=Ciągła
 solid=Ciągła
 sourceSpacing=Rozmieszczenie źródła
 sourceSpacing=Rozmieszczenie źródła
 south=Południe
 south=Południe
@@ -708,23 +708,23 @@ space=Obszar
 spacing=Rozmieszczenie
 spacing=Rozmieszczenie
 specialLink=Łącze specjalne
 specialLink=Łącze specjalne
 standard=Standardowe
 standard=Standardowe
-startDrawing=Start drawing
-stopDrawing=Stop drawing
+startDrawing=Zacznij rysować
+stopDrawing=Przestań rysować
 starting=Uruchamianie
 starting=Uruchamianie
 straight=Prosty
 straight=Prosty
-strikethrough=Strikethrough
+strikethrough=Skreślenie
 strokeColor=Kolor linii
 strokeColor=Kolor linii
 style=Styl
 style=Styl
 subscript=Indeks dolny
 subscript=Indeks dolny
 summary=Podsumowanie
 summary=Podsumowanie
 superscript=Indeks górny
 superscript=Indeks górny
 support=Wsparcie
 support=Wsparcie
-swimlaneDiagram=Swimlane Diagram
+swimlaneDiagram=Diagram toru wodnego
 sysml=SysML
 sysml=SysML
 tags=Znaczniki
 tags=Znaczniki
 table=Tabela
 table=Tabela
-tables=Tables
-takeOver=Take Over
+tables=Tabele
+takeOver=Przejąć kontrolę
 targetSpacing=Rozmieszczenie celu
 targetSpacing=Rozmieszczenie celu
 template=Szablon
 template=Szablon
 templates=Szablony
 templates=Szablony
@@ -737,8 +737,8 @@ title=Tytuł
 to=do
 to=do
 toBack=Do tyłu
 toBack=Do tyłu
 toFront=Do przodu
 toFront=Do przodu
-tooLargeUseDownload=Too large, use download instead.
-toolbar=Toolbar
+tooLargeUseDownload=Zbyt duży, użyj opcji pobierz.
+toolbar=Pasek narzędzi
 tooltips=Dymki podpowiedzi
 tooltips=Dymki podpowiedzi
 top=Góra
 top=Góra
 topAlign=Wyrównaj do góry
 topAlign=Wyrównaj do góry
@@ -756,7 +756,7 @@ uml=UML
 underline=Podkreślenie
 underline=Podkreślenie
 undo=Cofnij
 undo=Cofnij
 ungroup=Rozgrupuj
 ungroup=Rozgrupuj
-unmerge=Unmerge
+unmerge=Odłącz
 unsavedChanges=Niezapisane zmiany
 unsavedChanges=Niezapisane zmiany
 unsavedChangesClickHereToSave=Niezapisane zmiany. Kliknij tutaj, aby zapisać.
 unsavedChangesClickHereToSave=Niezapisane zmiany. Kliknij tutaj, aby zapisać.
 untitled=Bez tytułu
 untitled=Bez tytułu
@@ -770,14 +770,14 @@ updatingPreview=Aktualizowanie podglądu. Proszę czekać...
 updatingSelection=Aktualizowanie wyboru. Proszę czekać...
 updatingSelection=Aktualizowanie wyboru. Proszę czekać...
 upload=Załaduj
 upload=Załaduj
 url=URL
 url=URL
-useOffline=Use Offline
-useRootFolder=Use root folder?
+useOffline=Użycie w trybie offline
+useRootFolder=Użyć folderu głównego?
 userManual=Podręcznik użytkownika
 userManual=Podręcznik użytkownika
 vertical=Pionowy
 vertical=Pionowy
 verticalFlow=Pionowy przepływ
 verticalFlow=Pionowy przepływ
 verticalTree=Pionowe drzewo
 verticalTree=Pionowe drzewo
 view=Widok
 view=Widok
-viewerSettings=Viewer Settings
+viewerSettings=Wyświetlanie ustawień
 viewUrl=Hiperłącze do widoku: {1}
 viewUrl=Hiperłącze do widoku: {1}
 voiceAssistant=Asystent głosowy (beta)
 voiceAssistant=Asystent głosowy (beta)
 warning=Ostrzeżenie
 warning=Ostrzeżenie
@@ -808,30 +808,30 @@ venndiagrams=Diagramy Venna
 webEmailOrOther=Strona, email lub dowolny inny adres internetowy
 webEmailOrOther=Strona, email lub dowolny inny adres internetowy
 webLink=Hiperłącze strony
 webLink=Hiperłącze strony
 wireframes=Projekty ramowe
 wireframes=Projekty ramowe
-property=Property
-value=Value
-showMore=Show More
-showLess=Show Less
-myDiagrams=My Diagrams
-allDiagrams=All Diagrams
-recentlyUsed=Recently used
-listView=List view
-gridView=Grid view
-resultsFor=Results for '{1}'
-oneDriveCharsNotAllowed=The following characters are not allowed: ~ " # %  * : < > ? / \ { | }
-oneDriveInvalidDeviceName=The specified device name is invalid
-officeNotLoggedOD=You are not logged in to OneDrive. Please open draw.io task pane and login first.
-officeSelectSingleDiag=Please select a single draw.io diagram only without other contents.
-officeSelectDiag=Please select a draw.io diagram.
-officeCannotFindDiagram=Cannot find a draw.io diagram in the selection
-noDiagrams=No diagrams found
-authFailed=Authentication failed
-officeFailedAuthMsg=Unable to successfully authenticate user or authorize application.
-convertingDiagramFailed=Converting diagram failed
-officeCopyImgErrMsg=Due to some limitations in the host application, the image could not be inserted. Please manually copy the image then paste it to the document.
-insertingImageFailed=Inserting image failed
+property=Właściwości
+value=Wartość
+showMore=Pokaż więcej
+showLess=Pokaż mniej
+myDiagrams=Moje schematy
+allDiagrams=Wszystkie schematy
+recentlyUsed=Ostatnio używane
+listView=Widok listy
+gridView=Widok siatki
+resultsFor=Wyniki dla '{1}'
+oneDriveCharsNotAllowed=Następujące znaki są niedozwolone: ~ " # % * : < > ? / \ { | }
+oneDriveInvalidDeviceName=Podana nazwa urządzenia jest nieprawidłowa
+officeNotLoggedOD=Nie jesteś zalogowany do OneDrive. Proszę otworzyć okno zadań draw.io i najpierw się zaloguj.
+officeSelectSingleDiag=Proszę wybrać tylko jeden diagram draw.io bez innych treści.
+officeSelectDiag=Proszę wybrać diagram draw.io.
+officeCannotFindDiagram=Nie można znaleźć diagramu draw.io w zaznaczonym elemencie
+noDiagrams=Nie znaleziono diagramów
+authFailed=Autoryzacja nie powiodła się
+officeFailedAuthMsg=Nie udało się pomyślnie uwierzytelnić użytkownika lub autoryzować aplikacji.
+convertingDiagramFailed=Konwersja diagramu nie powiodła się
+officeCopyImgErrMsg=Ze względu na pewne ograniczenia w aplikacji gospodarza, obraz nie mógł zostać wstawiony. Prosimy o ręczne skopiowanie obrazu, a następnie wklejenie go do dokumentu.
+insertingImageFailed=Nie udało się wstawić obrazu
 officeCopyImgInst=Instructions: Right-click the image below. Select "Copy image" from the context menu. Then, in the document, right-click and select "Paste" from the context menu.
 officeCopyImgInst=Instructions: Right-click the image below. Select "Copy image" from the context menu. Then, in the document, right-click and select "Paste" from the context menu.
-folderEmpty=Folder is empty
+folderEmpty=Folder jest pusty
 recent=Recent
 recent=Recent
 sharedWithMe=Shared With Me
 sharedWithMe=Shared With Me
 sharepointSites=Sharepoint Sites
 sharepointSites=Sharepoint Sites
@@ -865,7 +865,7 @@ reOpened=Re-opened
 markedAsResolved=Marked as resolved
 markedAsResolved=Marked as resolved
 noCommentsFound=No comments found
 noCommentsFound=No comments found
 comments=Comments
 comments=Comments
-timeAgo={1} ago
+timeAgo={1} temu
 confluenceCloud=Confluence Cloud
 confluenceCloud=Confluence Cloud
 libraries=Libraries
 libraries=Libraries
 confAnchor=Confluence Page Anchor
 confAnchor=Confluence Page Anchor
@@ -894,22 +894,22 @@ draftWriteErr=Draft Write Error
 draftCantCreate=Draft could not be created
 draftCantCreate=Draft could not be created
 confDuplName=Duplicate diagram name detected. Please pick another name.
 confDuplName=Duplicate diagram name detected. Please pick another name.
 confSessionExpired=Looks like your session expired. Log in again to keep working.
 confSessionExpired=Looks like your session expired. Log in again to keep working.
-login=Login
+login=Zaloguj się
 drawPrev=draw.io preview
 drawPrev=draw.io preview
 drawDiag=draw.io diagram
 drawDiag=draw.io diagram
 invalidCallFnNotFound=Invalid Call: {1} not found
 invalidCallFnNotFound=Invalid Call: {1} not found
 invalidCallErrOccured=Invalid Call: An error occurred, {1}
 invalidCallErrOccured=Invalid Call: An error occurred, {1}
 anonymous=Anonymous
 anonymous=Anonymous
 confGotoPage=Go to containing page
 confGotoPage=Go to containing page
-showComments=Show Comments
-confError=Error: {1}
+showComments=Pokaż komentarze
+confError=Błąd: {1}
 gliffyImport=Gliffy Import
 gliffyImport=Gliffy Import
 gliffyImportInst1=Click the "Start Import" button to import all Gliffy diagrams to draw.io.
 gliffyImportInst1=Click the "Start Import" button to import all Gliffy diagrams to draw.io.
 gliffyImportInst2=Please note that the import procedure will take some time and the browser window must remain open until the import is completed.
 gliffyImportInst2=Please note that the import procedure will take some time and the browser window must remain open until the import is completed.
-startImport=Start Import
-drawConfig=draw.io Configuration
-customLib=Custom Libraries
-customTemp=Custom Templates
+startImport=Rozpocznij import
+drawConfig=Konfiguracja draw.io
+customLib=Biblioteki własne
+customTemp=Szablony własne
 pageIdsExp=Page IDs Export
 pageIdsExp=Page IDs Export
 drawReindex=draw.io re-indexing (beta)
 drawReindex=draw.io re-indexing (beta)
 working=Working
 working=Working
@@ -917,16 +917,16 @@ drawConfigNotFoundInst=draw.io Configuration Space (DRAWIOCONFIG) does not exist
 createConfSp=Create Config Space
 createConfSp=Create Config Space
 unexpErrRefresh=Unexpected error, please refresh the page and try again.
 unexpErrRefresh=Unexpected error, please refresh the page and try again.
 configJSONInst=Write draw.io JSON configuration in the editor below then click save. If you need help, please refer to
 configJSONInst=Write draw.io JSON configuration in the editor below then click save. If you need help, please refer to
-thisPage=this page
-curCustLib=Current Custom Libraries
-libName=Library Name
-action=Action
-drawConfID=draw.io Config ID
-addLibInst=Click the "Add Library" button to upload a new library.
-addLib=Add Library
-customTempInst1=Custom templates are draw.io diagrams saved in children pages of
-customTempInst2=For more details, please refer to
-tempsPage=Templates page
+thisPage=ta strona
+curCustLib=Aktualne niestandardowe biblioteki
+libName=Nazwa biblioteki
+action=Akcja
+drawConfID=Draw.io ID konfiguracji
+addLibInst=Kliknij "Dodaj bibliotekę", aby załadować nową bibliotekę.
+addLib=Dodaj bibliotekę
+customTempInst1=Własne szablony to diagramy draw.io zapisane na stronach podrzędnych
+customTempInst2=Aby uzyskać więcej informacji, zapoznaj się z
+tempsPage=Strona szablonów
 pageIdsExpInst1=Select export target, then click the "Start Export" button to export all pages IDs.
 pageIdsExpInst1=Select export target, then click the "Start Export" button to export all pages IDs.
 pageIdsExpInst2=Please note that the export procedure will take some time and the browser window must remain open until the export is completed.
 pageIdsExpInst2=Please note that the export procedure will take some time and the browser window must remain open until the export is completed.
 startExp=Start Export
 startExp=Start Export
@@ -942,8 +942,8 @@ confAPartialDiagDone={1} out of {2} {3} diagrams in page "{4}" processed success
 confAUpdatePageFailed=Updating page "{1}" failed.
 confAUpdatePageFailed=Updating page "{1}" failed.
 confANoDiagFoundInPage=No {1} diagrams found in page "{2}".
 confANoDiagFoundInPage=No {1} diagrams found in page "{2}".
 confAFetchPageFailed=Fetching the page failed.
 confAFetchPageFailed=Fetching the page failed.
-confANoDiagFound=No {1} diagrams found. Process finished.
-confASearchFailed=Searching for {1} diagrams failed. Please try again later.
+confANoDiagFound=Nie znaleziono diagramów {1}. Proces zakończony.
+confASearchFailed=Poszukiwanie diagramów dla {1} nie powiodło się. Proszę spróbować ponownie później.
 confAGliffyDiagFound={2} diagram "{1}" found. Importing
 confAGliffyDiagFound={2} diagram "{1}" found. Importing
 confAGliffyDiagImported={2} diagram "{1}" imported successfully.
 confAGliffyDiagImported={2} diagram "{1}" imported successfully.
 confASavingImpGliffyFailed=Saving imported {2} diagram "{1}" failed.
 confASavingImpGliffyFailed=Saving imported {2} diagram "{1}" failed.
@@ -985,11 +985,11 @@ pickODFile=Pick OneDrive File
 pickGDriveFile=Pick Google Drive File
 pickGDriveFile=Pick Google Drive File
 pickDeviceFile=Pick Device File
 pickDeviceFile=Pick Device File
 vsdNoConfig="vsdurl" is not configured
 vsdNoConfig="vsdurl" is not configured
-ruler=Ruler
-units=Units
-points=Points
-inches=Inches
-millimeters=Millimeters
+ruler=Linijka
+units=Jednostki
+points=Punkty
+inches=Cale
+millimeters=Milimetry
 confEditDraftDelOrExt=This diagram is in a draft page, is deleted from the page, or is edited externally. It will be saved as a new attachment version and may not be reflected in the page.
 confEditDraftDelOrExt=This diagram is in a draft page, is deleted from the page, or is edited externally. It will be saved as a new attachment version and may not be reflected in the page.
 confDiagEditedExt=Diagram is edited in another session. It will be saved as a new attachment version but the page will show other session's modifications.
 confDiagEditedExt=Diagram is edited in another session. It will be saved as a new attachment version but the page will show other session's modifications.
 macroNotFound=Macro Not Found
 macroNotFound=Macro Not Found
@@ -1076,7 +1076,7 @@ widthOfViewer=Width of the viewer (px)
 heightOfViewer=Height of the viewer (px)
 heightOfViewer=Height of the viewer (px)
 autoSetViewerSize=Automatically set the size of the viewer
 autoSetViewerSize=Automatically set the size of the viewer
 thumbnail=Thumbnail
 thumbnail=Thumbnail
-prevInDraw=Preview in draw.io
+prevInDraw=Podgląd w draw.io
 onedriveFname=OneDrive filename
 onedriveFname=OneDrive filename
 diagFname=Diagram filename
 diagFname=Diagram filename
 diagUrl=Diagram URL
 diagUrl=Diagram URL
@@ -1134,48 +1134,49 @@ importingDrafts=Importing {1} Diagrams in drafts
 processingDrafts=Processing drafts
 processingDrafts=Processing drafts
 updatingDrafts=Updating drafts
 updatingDrafts=Updating drafts
 updateDrafts=Update drafts
 updateDrafts=Update drafts
-notifications=Notifications
+notifications=Powiadomienia
 drawioImp=draw.io Import
 drawioImp=draw.io Import
 confALibsImp=Importing draw.io Libraries
 confALibsImp=Importing draw.io Libraries
 confALibsImpFailed=Importing {1} library failed
 confALibsImpFailed=Importing {1} library failed
 contributors=Contributors
 contributors=Contributors
-drawDiagrams=draw.io Diagrams
+drawDiagrams=Diagramy draw.io
 errFileNotFoundOrNoPer=Error: Access Denied. File not found or you do not have permission to access "{1}" on {2}.
 errFileNotFoundOrNoPer=Error: Access Denied. File not found or you do not have permission to access "{1}" on {2}.
 confACheckPagesWEmbed=Checking pages having embedded draw.io diagrams.
 confACheckPagesWEmbed=Checking pages having embedded draw.io diagrams.
 confADelBrokenEmbedDiagLnk=Removing broken embedded diagram links
 confADelBrokenEmbedDiagLnk=Removing broken embedded diagram links
-replaceWith=Replace with
-replaceAll=Replace All
+replaceWith=Zamień na
+replaceAll=Zamień wszystkie
 confASkipDiagModified=Skipped "{1}" as it was modified after initial import
 confASkipDiagModified=Skipped "{1}" as it was modified after initial import
 replFind=Replace/Find
 replFind=Replace/Find
 matchesRepl={1} matches replaced
 matchesRepl={1} matches replaced
 draftErrDataLoss=An error occurred while reading the draft file. The diagram cannot be edited now to prevent any possible data loss. Please try again later or contact support.
 draftErrDataLoss=An error occurred while reading the draft file. The diagram cannot be edited now to prevent any possible data loss. Please try again later or contact support.
 ibm=IBM
 ibm=IBM
-linkToDiagramHint=Add a link to this diagram. The diagram can only be edited from the page that owns it.
-linkToDiagram=Link to Diagram
-changedBy=Changed By
-lastModifiedOn=Last modified on
-searchResults=Search Results
-showAllTemps=Show all templates
-notionToken=Notion Token
-selectDB=Select Database
-noDBs=No Databases
-diagramEdited={1} diagram "{2}" edited
-confDraftPermissionErr=Draft cannot be written. Do you have attachment write/read permission on this page?
-confDraftTooBigErr=Draft size is too large. Pease check "Attachment Maximum Size" of "Attachment Settings" in Confluence Configuration?
-owner=Owner
-repository=Repository
+linkToDiagramHint=Dodaj link do tego diagramu. Diagram może być edytowany tylko z poziomu strony, która jest jego właścicielem.
+linkToDiagram=Link do schematu
+changedBy=Zmienione przez
+lastModifiedOn=Ostatnio zmodyfikowano
+searchResults=Wyniki wyszukiwania
+showAllTemps=Pokaż wszystkie szablony
+notionToken=Token Notion
+selectDB=Wybierz bazę danych
+noDBs=Brak bazy danych
+diagramEdited={1} diagram "{2}" edytowany
+confDraftPermissionErr=Projekt nie może być zapisany. Czy masz uprawnienia do zapisu/odczytu załącznika na tej stronie?
+confDraftTooBigErr=Rozmiar szkicu jest zbyt duży. Proszę sprawdzić "Attachment Maximum Size" w "Attachment Settings" w Konfiguracji Confluence?
+owner=Właściciel
+repository=Repozytorium
 branch=Branch
 branch=Branch
-meters=Meters
-teamsNoEditingMsg=Editor functionality is only available in Desktop environment (in MS Teams App or a web browser)
-contactOwner=Contact Owner
-viewerOnlyMsg=You cannot edit the diagrams in the mobile platform, please use the desktop client or a web browser.
-website=Website
-check4Updates=Check for updates
-attWriteFailedRetry={1}: Attachment write failed, trying again in {2} seconds...
-confPartialPageList=We couldn't fetch all pages due to an error in Confluence. Continuing using {1} pages only.
-spellCheck=Spell checker
-noChange=No Change
-lblToSvg=Convert labels to SVG
-txtSettings=Text Settings
-LinksLost=Links will be lost
-arcSize=Arc Size
+meters=Metry
+teamsNoEditingMsg=Funkcjonalność edytora jest dostępna tylko na komputerze stacjonarnym (w aplikacji MS Teams lub w przeglądarce internetowej)
+contactOwner=Skontaktuj się z właścicielem
+viewerOnlyMsg=Nie możesz edytować diagramów w platformie mobilnej, skorzystaj z aplikacji na komputerze lub przeglądarki internetowej.
+website=Strona internetowa
+check4Updates=Sprawdź aktualizacje
+attWriteFailedRetry={1}: Nie udało się zapisać załącznika, spróbuj ponownie za {2} sekund...
+confPartialPageList=Nie mogliśmy pobrać wszystkich stron z powodu błędu w Confluence. Kontynuacja przy użyciu tylko {1} stron.
+spellCheck=Sprawdzanie pisowni
+noChange=Bez zmian
+lblToSvg=Konwersja etykiet do SVG
+txtSettings=Ustawienia tekstu
+LinksLost=Linki zostaną utracone
+arcSize=Rozmiar łuku
+editConnectionPoints=Edycja punktów połączeń

+ 13 - 12
src/main/webapp/resources/dia_pt-br.txt

@@ -303,7 +303,7 @@ fileWillBeSavedInAppFolder={1} será salvo na pasta do aplicativo.
 fill=Preencher
 fill=Preencher
 fillColor=Cor de preenchimento
 fillColor=Cor de preenchimento
 filterCards=Filtrar os cartões
 filterCards=Filtrar os cartões
-find=Encontrar
+find=Procurar
 fit=Caber
 fit=Caber
 fitContainer=Redimensionar a tela
 fitContainer=Redimensionar a tela
 fitIntoContainer=Caber na tela
 fitIntoContainer=Caber na tela
@@ -352,7 +352,7 @@ fullscreen=Tela cheia
 gap=Espaçamento
 gap=Espaçamento
 gcp=GCP
 gcp=GCP
 general=Geral
 general=Geral
-getNotionChromeExtension=Get the Notion Chrome Extension
+getNotionChromeExtension=Obtenha a extensão do Notion para o Chrome
 github=GitHub
 github=GitHub
 gitlab=GitLab
 gitlab=GitLab
 gliffy=Gliffy
 gliffy=Gliffy
@@ -663,10 +663,10 @@ saveLibraryReadOnly=Não foi possível salvar a biblioteca porque o modo somente
 saving=Salvando
 saving=Salvando
 scratchpad=Bloco de rascunho
 scratchpad=Bloco de rascunho
 scrollbars=Barras de rolagem
 scrollbars=Barras de rolagem
-search=Buscar
+search=Procurar
 searchShapes=Procurar formas
 searchShapes=Procurar formas
 selectAll=Selecionar tudo
 selectAll=Selecionar tudo
-selectionOnly=Selecionar somente
+selectionOnly=Apenas a seleção
 selectCard=Selecionar cartão
 selectCard=Selecionar cartão
 selectEdges=Selecionar bordas
 selectEdges=Selecionar bordas
 selectFile=Selecionar arquivo
 selectFile=Selecionar arquivo
@@ -699,7 +699,7 @@ simpleArrow=Seta simples
 simpleViewer=Visualizador simples
 simpleViewer=Visualizador simples
 size=Tamanho
 size=Tamanho
 sketch=Esboço
 sketch=Esboço
-snapToGrid=Snap to Grid
+snapToGrid=Alinhar à grade
 solid=Sólido
 solid=Sólido
 sourceSpacing=Espaçamento entre fontes
 sourceSpacing=Espaçamento entre fontes
 south=Inferior
 south=Inferior
@@ -756,7 +756,7 @@ uml=UML
 underline=Sublinhado
 underline=Sublinhado
 undo=Desfazer
 undo=Desfazer
 ungroup=Desagrupar
 ungroup=Desagrupar
-unmerge=Unmerge
+unmerge=Dividir
 unsavedChanges=Mudanças não salvas
 unsavedChanges=Mudanças não salvas
 unsavedChangesClickHereToSave=Mudanças não salvas. Clique aqui para salvar.
 unsavedChangesClickHereToSave=Mudanças não salvas. Clique aqui para salvar.
 untitled=Sem título
 untitled=Sem título
@@ -1143,10 +1143,10 @@ drawDiagrams=draw.io Diagrams
 errFileNotFoundOrNoPer=Error: Access Denied. File not found or you do not have permission to access "{1}" on {2}.
 errFileNotFoundOrNoPer=Error: Access Denied. File not found or you do not have permission to access "{1}" on {2}.
 confACheckPagesWEmbed=Checking pages having embedded draw.io diagrams.
 confACheckPagesWEmbed=Checking pages having embedded draw.io diagrams.
 confADelBrokenEmbedDiagLnk=Removing broken embedded diagram links
 confADelBrokenEmbedDiagLnk=Removing broken embedded diagram links
-replaceWith=Replace with
+replaceWith=Substituir por
 replaceAll=Substituir tudo
 replaceAll=Substituir tudo
 confASkipDiagModified=Skipped "{1}" as it was modified after initial import
 confASkipDiagModified=Skipped "{1}" as it was modified after initial import
-replFind=Replace/Find
+replFind=Substituir/Procurar
 matchesRepl={1} matches replaced
 matchesRepl={1} matches replaced
 draftErrDataLoss=An error occurred while reading the draft file. The diagram cannot be edited now to prevent any possible data loss. Please try again later or contact support.
 draftErrDataLoss=An error occurred while reading the draft file. The diagram cannot be edited now to prevent any possible data loss. Please try again later or contact support.
 ibm=IBM
 ibm=IBM
@@ -1173,9 +1173,10 @@ website=Website
 check4Updates=Verificar se há atualizações
 check4Updates=Verificar se há atualizações
 attWriteFailedRetry={1}: Attachment write failed, trying again in {2} seconds...
 attWriteFailedRetry={1}: Attachment write failed, trying again in {2} seconds...
 confPartialPageList=We couldn't fetch all pages due to an error in Confluence. Continuing using {1} pages only.
 confPartialPageList=We couldn't fetch all pages due to an error in Confluence. Continuing using {1} pages only.
-spellCheck=Spell checker
-noChange=No Change
-lblToSvg=Convert labels to SVG
-txtSettings=Text Settings
+spellCheck=Verificação ortográfica
+noChange=Nenhuma alteração
+lblToSvg=Converter textos para SVG
+txtSettings=Configurações de texto
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Editar pontos de conexão

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

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

@@ -1179,3 +1179,4 @@ lblToSvg=Convert labels to SVG
 txtSettings=Text Settings
 txtSettings=Text Settings
 LinksLost=Links will be lost
 LinksLost=Links will be lost
 arcSize=Arc Size
 arcSize=Arc Size
+editConnectionPoints=Edit Connection Points

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
src/main/webapp/service-worker.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 1
src/main/webapp/service-worker.js.map


+ 3 - 1
src/main/webapp/teams.html

@@ -43,7 +43,7 @@
 			
 			
 			for (var i = 0; i < params.length; i++)
 			for (var i = 0; i < params.length; i++)
 			{
 			{
-				idx = params[i].indexOf('=');
+				var idx = params[i].indexOf('=');
 				
 				
 				if (idx > 0)
 				if (idx > 0)
 				{
 				{
@@ -262,6 +262,8 @@
 				mxForceIncludes = true;
 				mxForceIncludes = true;
 			}
 			}
 
 
+			mxForceIncludes = false;
+
 			mxscript(drawDevUrl + 'js/PreConfig.js');
 			mxscript(drawDevUrl + 'js/PreConfig.js');
 			mxscript(drawDevUrl + 'js/diagramly/Init.js');
 			mxscript(drawDevUrl + 'js/diagramly/Init.js');
 			mxscript(geBasePath + '/Init.js');
 			mxscript(geBasePath + '/Init.js');