Parcourir la source

15.7.4 release

David Benson [draw.io] il y a 3 ans
Parent
commit
6c3d619355
82 fichiers modifiés avec 4839 ajouts et 3545 suppressions
  1. 6 0
      ChangeLog
  2. 1 1
      VERSION
  3. 5 0
      etc/notionExtension/README.md
  4. 63 0
      etc/notionExtension/background.js
  5. 932 0
      etc/notionExtension/contentScript.js
  6. BIN
      etc/notionExtension/images/logo128.png
  7. BIN
      etc/notionExtension/images/logo16.png
  8. BIN
      etc/notionExtension/images/logo32.png
  9. BIN
      etc/notionExtension/images/logo48.png
  10. 38 0
      etc/notionExtension/manifest.json
  11. 9 0
      etc/notionExtension/popup.html
  12. 40 0
      etc/notionExtension/popup.js
  13. 934 931
      src/main/webapp/js/app.min.js
  14. 14 7
      src/main/webapp/js/diagramly/Editor.js
  15. 2 2
      src/main/webapp/js/diagramly/EditorUi.js
  16. 17 9
      src/main/webapp/js/diagramly/ElectronApp.js
  17. 17 1
      src/main/webapp/js/diagramly/Menus.js
  18. 14 1
      src/main/webapp/js/diagramly/Minimal.js
  19. 49 15
      src/main/webapp/js/grapheditor/Shapes.js
  20. 1162 1160
      src/main/webapp/js/viewer-static.min.js
  21. 1162 1160
      src/main/webapp/js/viewer.min.js
  22. 1 1
      src/main/webapp/mxgraph/mxClient.js
  23. 2 0
      src/main/webapp/resources/dia.txt
  24. 2 0
      src/main/webapp/resources/dia_am.txt
  25. 2 0
      src/main/webapp/resources/dia_ar.txt
  26. 2 0
      src/main/webapp/resources/dia_bg.txt
  27. 2 0
      src/main/webapp/resources/dia_bn.txt
  28. 2 0
      src/main/webapp/resources/dia_bs.txt
  29. 2 0
      src/main/webapp/resources/dia_ca.txt
  30. 2 0
      src/main/webapp/resources/dia_cs.txt
  31. 2 0
      src/main/webapp/resources/dia_da.txt
  32. 2 0
      src/main/webapp/resources/dia_de.txt
  33. 2 0
      src/main/webapp/resources/dia_el.txt
  34. 2 0
      src/main/webapp/resources/dia_eo.txt
  35. 2 0
      src/main/webapp/resources/dia_es.txt
  36. 2 0
      src/main/webapp/resources/dia_et.txt
  37. 2 0
      src/main/webapp/resources/dia_eu.txt
  38. 2 0
      src/main/webapp/resources/dia_fa.txt
  39. 257 255
      src/main/webapp/resources/dia_fi.txt
  40. 2 0
      src/main/webapp/resources/dia_fil.txt
  41. 2 0
      src/main/webapp/resources/dia_fr.txt
  42. 2 0
      src/main/webapp/resources/dia_gl.txt
  43. 2 0
      src/main/webapp/resources/dia_gu.txt
  44. 2 0
      src/main/webapp/resources/dia_he.txt
  45. 2 0
      src/main/webapp/resources/dia_hi.txt
  46. 2 0
      src/main/webapp/resources/dia_hr.txt
  47. 2 0
      src/main/webapp/resources/dia_hu.txt
  48. 2 0
      src/main/webapp/resources/dia_i18n.txt
  49. 2 0
      src/main/webapp/resources/dia_id.txt
  50. 2 0
      src/main/webapp/resources/dia_it.txt
  51. 2 0
      src/main/webapp/resources/dia_ja.txt
  52. 2 0
      src/main/webapp/resources/dia_kn.txt
  53. 2 0
      src/main/webapp/resources/dia_ko.txt
  54. 2 0
      src/main/webapp/resources/dia_lt.txt
  55. 2 0
      src/main/webapp/resources/dia_lv.txt
  56. 2 0
      src/main/webapp/resources/dia_ml.txt
  57. 2 0
      src/main/webapp/resources/dia_mr.txt
  58. 2 0
      src/main/webapp/resources/dia_ms.txt
  59. 2 0
      src/main/webapp/resources/dia_my.txt
  60. 2 0
      src/main/webapp/resources/dia_nl.txt
  61. 2 0
      src/main/webapp/resources/dia_no.txt
  62. 2 0
      src/main/webapp/resources/dia_pl.txt
  63. 2 0
      src/main/webapp/resources/dia_pt-br.txt
  64. 2 0
      src/main/webapp/resources/dia_pt.txt
  65. 2 0
      src/main/webapp/resources/dia_ro.txt
  66. 2 0
      src/main/webapp/resources/dia_ru.txt
  67. 2 0
      src/main/webapp/resources/dia_si.txt
  68. 2 0
      src/main/webapp/resources/dia_sk.txt
  69. 2 0
      src/main/webapp/resources/dia_sl.txt
  70. 2 0
      src/main/webapp/resources/dia_sr.txt
  71. 2 0
      src/main/webapp/resources/dia_sv.txt
  72. 2 0
      src/main/webapp/resources/dia_sw.txt
  73. 2 0
      src/main/webapp/resources/dia_ta.txt
  74. 2 0
      src/main/webapp/resources/dia_te.txt
  75. 2 0
      src/main/webapp/resources/dia_th.txt
  76. 2 0
      src/main/webapp/resources/dia_tr.txt
  77. 2 0
      src/main/webapp/resources/dia_uk.txt
  78. 2 0
      src/main/webapp/resources/dia_vi.txt
  79. 2 0
      src/main/webapp/resources/dia_zh-tw.txt
  80. 2 0
      src/main/webapp/resources/dia_zh.txt
  81. 1 1
      src/main/webapp/service-worker.js
  82. 1 1
      src/main/webapp/service-worker.js.map

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+15-NOV-2021: 15.7.4
+
+- Adds titlebar to desktop sketch mode
+- Adds styles config type check
+- Adds rowspan for row line rendering
+
 10-NOV-2021: 15.7.3
 
 - [teams] Fixes shapes rendering in picker

+ 1 - 1
VERSION

@@ -1 +1 @@
-15.7.3
+15.7.4

+ 5 - 0
etc/notionExtension/README.md

@@ -0,0 +1,5 @@
+# Notion draw.io Extension
+
+To deploy, zip all the files in this directory (except the README.md) and deploy to:
+
+https://chrome.google.com/u/2/webstore/devconsole/...

+ 63 - 0
etc/notionExtension/background.js

@@ -0,0 +1,63 @@
+'use strict';
+
+chrome.runtime.onInstalled.addListener(function() 
+{
+  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() 
+  {
+    chrome.declarativeContent.onPageChanged.addRules([{
+      conditions: [new chrome.declarativeContent.PageStateMatcher({
+        pageUrl: {hostSuffix: '.notion.so'},
+      })],
+      actions: [new chrome.declarativeContent.ShowPageAction()]
+    }]);
+  });
+});
+
+chrome.tabs.onActivated.addListener(function(activeInfo) 
+{
+	let tabId = activeInfo.tabId;
+	
+	chrome.tabs.get(tabId, tab => {
+		if (tab.url && new URL(tab.url).host.indexOf('.notion.so') > 0)
+		{
+			chrome.storage.local.set({ notionTabId: tabId });
+		}
+	});
+});
+
+chrome.runtime.onConnect.addListener(function(port) 
+{
+	//Popup messages
+	port.onMessage.addListener(function(msg) 
+	{
+		chrome.storage.local.get(['notionTabId'], ({ notionTabId }) => 
+	    {
+		  if (notionTabId != null)
+		  {
+			  try
+			  {
+				  chrome.tabs.sendMessage(notionTabId, msg, function(resp)
+					{
+						console.log(resp);
+						port.postMessage(resp);
+					});
+			  }
+			  catch(e)
+			  {
+				  if (e.message.indexOf('disconnected') >= 0)
+				  {
+					  port.postMessage({msg: 'NotionDisconnected', error: true});
+				  }
+				  else
+				  {
+					  port.postMessage({msg: 'Exception', errMsg: e.message, error: true});
+				  }
+			  }
+		  }
+		  else
+		  {
+			  port.postMessage({msg: 'NotionNotFound', error: true, origMsg: msg});
+		  }
+	    });
+	});
+});

+ 932 - 0
etc/notionExtension/contentScript.js

@@ -0,0 +1,932 @@
+(function()
+{
+	// Specifies if images should be changed for dark mode
+	var convertImages = true;
+	var backgroundColor = '#2F3437';
+	var convertAttrib = 'data-drawio-src';
+	var editor = 'https://embed.diagrams.net/?embedInline=1&libraries=1&configure=1';
+	//editor = 'https://test.draw.io/?dev=1&embedInline=1&libraries=1&configure=1';
+	var notionScrollers = document.getElementsByClassName('notion-scroller vertical');
+	var notionFrames = document.getElementsByClassName('notion-frame');
+	var dark = document.body.className.includes('dark');
+	var initialized = false;
+	var activeImage = null;
+	var editBlockId = null;
+
+	var iframe = document.createElement('iframe');
+	iframe.style.position = 'absolute';
+	iframe.style.border = '0';
+	iframe.style.top = '0px';
+	iframe.style.left = '0px';
+	iframe.style.width = '100%';
+	iframe.style.height = '100%';
+	iframe.style.zIndex = '4';
+
+	function invertImage(img, done)
+	{
+		var req = new XMLHttpRequest();
+
+		req.addEventListener('load', function()
+		{
+			if (req.status >= 200 && req.status <= 299 && this.responseXML != null)
+			{
+				img.src = createSvgDataUri(invertSvg(this.responseXML));
+			}
+
+			done();
+		});
+
+		req.open('GET', img.src);
+		req.send();
+	};
+
+	function installInverter(img)
+	{
+		var busy = false;
+		img.setAttribute(convertAttrib, img.src);
+
+		if (dark)
+		{
+			busy = true;
+
+			invertImage(img, function()
+			{
+				busy = false;
+			});
+		}
+
+		var mutationObserver = new MutationObserver(function(evt)
+		{
+			if (!isSvgDataUri(img.src) && img.src != '' && !busy)
+			{
+				if (dark)
+				{
+					busy = true;
+					img.setAttribute(convertAttrib, img.src);
+
+					invertImage(img, function()
+					{
+						busy = false;
+					});
+				}
+			}
+		});
+
+		mutationObserver.observe(img, {attributes: true});
+	};
+
+	function darkModeChanged()
+	{
+		if (activeImage != null)
+		{
+			iframe.contentWindow.postMessage(JSON.stringify(
+				{action: 'exit'}), '*');
+		}
+
+		var imgs = document.getElementsByTagName('img');
+
+		for (var i = 0; i < imgs.length; i++)
+		{
+			var src = imgs[i].getAttribute(convertAttrib);
+
+			if (src != null)
+			{
+				if (!isSvgDataUri(imgs[i].src))
+				{
+					src = imgs[i].src;
+					imgs[i].src = '';
+					imgs[i].src = src;
+				}
+				else
+				{
+					imgs[i].src = src;
+				}
+			}
+		}
+	};
+
+	function editImage(img, isNew, onChange)
+	{
+		iframe.doResize = function(msg)
+		{
+			setFullscreen(msg.fullscreen);
+			img.style.width = msg.rect.width + 'px';
+			img.style.height = (msg.rect.height - 22) + 'px';
+		};
+
+		var prev = img.parentNode.style.cursor;
+		img.parentNode.style.cursor = 'wait';
+		iframe.style.cursor = 'wait';
+
+		iframe.doInit = function(errorCode)
+		{
+			if (errorCode != null)
+			{
+				img.parentNode.style.cursor = prev;
+				onChange({});
+				alert('Error ' + errorCode + ': Cannot load editor');
+			}
+			else
+			{
+				setControlsVisible(img, false);
+				crossfade(img, iframe);
+				iframe.style.cursor = '';
+				img.parentNode.style.cursor = prev;
+			}
+		};
+		
+		iframe.doUpdate = onChange;
+		startEditor(img, isNew);
+	};
+
+	function startEditor(img, isNew)
+	{
+		var req = new XMLHttpRequest();
+
+		req.addEventListener('load', function()
+		{
+			if (req.status >= 200 && req.status <= 299)
+			{
+				try
+				{
+					var rect = img.parentNode.getBoundingClientRect();
+					var r = iframe.parentNode.getBoundingClientRect();
+
+					if (rect.y < r.y + 66 || rect.y > iframe.parentNode.scrollTop + r.height)
+					{
+						img.scrollIntoView();
+						iframe.parentNode.scrollTop -= 60
+						rect = img.parentNode.getBoundingClientRect();
+					}
+
+					var border = 8;
+					rect.x -= border + 3 + r.x;
+					rect.y -= border + 3 - iframe.parentNode.scrollTop + r.y;
+					rect.width += 2 * border + 2;
+					rect.height = (isNew) ? Math.max(rect.height, 500) : rect.height + 2 * border + 2;
+
+					iframe.contentWindow.postMessage(JSON.stringify(
+						{action: 'load', xml: this.responseText, border: border,
+						background: '#ffffff', rect: rect, dark: dark,
+						viewport: getViewport()}), '*');
+					updateFrame();
+				}
+				catch (e)
+				{
+					iframe.doInit(e.message);
+				}
+			}
+			else
+			{
+				iframe.doInit(req.status);
+			}
+		});
+
+		req.open('GET', img.src);
+		req.send();
+	};
+
+	function installEditor(img, filename, url)
+	{
+		img.parentNode.addEventListener('click', function()
+		{
+			if (!initialized)
+			{
+				var prev = img.parentNode.style.cursor;
+				img.parentNode.style.cursor = 'not-allowed';
+
+				window.setTimeout(function()
+				{
+					img.parentNode.style.cursor = prev;
+				}, 300);
+			}
+			else
+			{
+				prepareEditor(img, filename, url);
+			}
+		});
+	};
+
+	function editBlock(id)
+	{
+		editBlockId = id;
+	};
+
+	function mergeChanges(url)
+	{
+		var req = new XMLHttpRequest();
+
+		req.addEventListener('load', function()
+		{
+			if (req.status >= 200 && req.status <= 299)
+			{
+				iframe.contentWindow.postMessage(JSON.stringify({action: 'merge',
+					xml: this.responseText}), '*');
+			}
+		});
+
+		req.open('GET', url);
+		req.send();
+	};
+
+	var lastSnapshot = null;
+
+	function prepareEditor(img, filename, url, isNew)
+	{
+		if (!iframe.busy)
+		{
+			var elt = document.activeElement;
+			iframe.busy = true;
+			activeImage = img;
+
+			var width = img.style.width;
+			var height = img.style.height;
+			var boxSizing = img.style.boxSizing;
+
+			// Listens for remote changes
+			var mutationObserver = new MutationObserver(function(evt)
+			{
+				if (!isSvgDataUri(img.src) && url != img.src &&
+					activeImage == img)
+				{
+					url = img.src;
+					mergeChanges(url);
+				}
+			});
+		
+			mutationObserver.observe(img, {attributes: true});
+
+			editImage(img, isNew, function(msg, override)
+			{
+				if (msg.data != null && msg.exit != null &&
+					!msg.exit && !override)
+				{
+					lastSnapshot = msg;
+				}
+				else
+				{
+					var rect = iframe.getBoundingClientRect();
+					mutationObserver.disconnect();
+					setFullscreen(false);
+					img.style.width = width;
+					img.style.height = height;
+					img.style.boxSizing = boxSizing;
+					imageChanged(img, filename, msg.data);
+
+					crossfade(iframe, img, function()
+					{
+						setControlsVisible(img, true);
+						iframe.busy = false;
+						lastSnapshot = null;
+						activeImage = null;
+
+						if (msg != null && msg.point != null)
+						{
+							var temp = document.elementFromPoint(rect.x + msg.point.x, rect.y + msg.point.y);
+
+							if (temp != null && temp.click != null)
+							{
+								elt = temp;
+								elt.click();
+							}
+						}
+
+						elt.focus();
+					});
+				}
+			});
+		}
+	};
+
+	function imageChanged(img, filename, data)
+	{
+		if (data != null)
+		{
+			var svg = getSvg(data);
+
+			replaceDiagram({blockId: getBlockId(img), filename: filename, data: svg}, function(msg)
+			{
+				if (msg.error != null)
+				{
+					alert('Error ' + msg.errStatus + ': Cannot update diagram');
+				}
+			});
+
+			if (dark && convertImages)
+			{
+				data = createSvgDataUri(invertSvg(new DOMParser().
+					parseFromString(svg, 'text/xml')));
+			}
+
+			// Restores state and shows preview
+			img.setAttribute('src', data);
+		}
+
+		iframe.style.width = '100%';
+		iframe.style.height = '100%';
+		iframe.doUpdate = null;
+		iframe.doResize = null;
+	};
+
+	window.addEventListener('message', function(evt)
+	{
+		if (evt, evt.source === iframe.contentWindow)
+		{
+			var msg = JSON.parse(evt.data);
+
+			if (msg.event == 'init')
+			{
+				initialized = true;
+			}
+			else if (msg.event == 'configure')
+			{
+				iframe.contentWindow.postMessage(JSON.stringify({action: 'configure',
+					config: {
+						darkColor: backgroundColor,
+						settingsName: 'notion'
+					}
+				}), '*');
+			}
+			else if (msg.event == 'load' && iframe.doInit != null)
+			{
+				iframe.doInit();
+			}
+			else if ((msg.event == 'export' || msg.event == 'exit') &&
+				iframe.doUpdate != null)
+			{
+				iframe.doUpdate(msg);
+			}
+			else if (msg.event == 'resize' && iframe.doResize != null)
+			{
+				iframe.doResize(msg);
+			}
+		}
+	});
+
+	var checked = [];
+
+	function updateChecked()
+	{
+		var temp = [];
+
+		// Forgets old images
+		for (var i = 0; i < checked.length; i++)
+		{
+			if (document.body.contains(checked[i]))
+			{
+				temp.push(checked[i]);
+			}
+		}
+
+		return temp;
+	};
+
+	function checkDiagram(img)
+	{
+		var filename = getFilename(img.src);
+		var result = false;
+
+		if (filename.endsWith('.drawio.svg'))
+		{
+			installEditor(img, filename, img.src);
+
+			if (convertImages)
+			{
+				installInverter(img);
+			}
+
+			if (editBlockId != null && getBlockId(img) == editBlockId)
+			{
+				editBlockId = null;
+				prepareEditor(img, filename, img.src, true);
+			}
+
+			result = true;
+		}
+
+		return result;
+	};
+
+	function checkImage(img)
+	{
+		if (checked.indexOf(img) < 0)
+		{
+			checked.push(img);
+
+			if (!checkDiagram(img))
+			{
+				var mutationObserver = new MutationObserver(function()
+				{
+					if (checkDiagram(img))
+					{
+						mutationObserver.disconnect();
+					}
+				});
+		
+				mutationObserver.observe(img, {attributes: true});
+			}
+		};
+	};
+
+	function scrollHandler()
+	{
+		if (iframe.style.visibility != 'hidden')
+		{
+			iframe.contentWindow.postMessage(JSON.stringify(
+				{action: 'viewport', viewport: getViewport()}), '*');
+		}
+	};
+
+	// Creates a snapshot in case ppl click off the diagram so that it
+	// is removed from the DOM (eg, if they click on the background or
+	// if they click in the navigation).
+	iframe.addEventListener('mouseleave', function()
+	{
+		if (activeImage != null && iframe.contentWindow != null)
+		{
+			iframe.contentWindow.postMessage(JSON.stringify(
+				{action: 'snapshot'}), '*');
+		}
+	}, true);
+
+	function checkFrame()
+	{
+		// Checks if pending snapshot exists
+		if (iframe.doUpdate != null && lastSnapshot != null &&
+			!document.body.contains(iframe))
+		{
+			iframe.doUpdate(lastSnapshot, true);
+		}
+
+		// Checks if parent node was removed and reinserts editor
+		// Adding to body would avoid this but doesn't allow
+		// the iframe to be scrolled with the page content.
+		// LATER: Can we use cloneNode to avoid this?
+		if (notionScrollers.length > 0 &&
+			!notionScrollers[notionScrollers.length - 1].contains(iframe))
+		{
+			if (iframe.parentNode != null)
+			{
+				iframe.parentNode.removeEventListener('scroll', scrollHandler);
+			}
+
+			initialized = false;
+			iframe.busy = false;
+			iframe.style.visibility = 'hidden';
+			notionScrollers[notionScrollers.length - 1].appendChild(iframe);
+			iframe.setAttribute('src', editor);
+			iframe.parentNode.addEventListener('scroll', scrollHandler);
+		}
+	};
+
+	function checkImages()
+	{
+		// Removes old images
+		// LATER: Move to other listener with fewer invocations
+		checked = updateChecked();
+		var imgs = document.getElementsByTagName('img');
+
+		for (var i = 0; i < imgs.length; i++)
+		{
+			checkImage(imgs[i]);
+		}
+	};
+
+	function getViewport()
+	{
+		var viewport = iframe.parentNode.getBoundingClientRect();
+		viewport.x = iframe.parentNode.scrollLeft;
+		viewport.y = iframe.parentNode.scrollTop;
+
+		return viewport;
+	};
+
+	function pageChanged()
+	{
+		checkFrame();
+		checkImages();
+	};
+	
+	function installDarkModeListener()
+	{
+		new MutationObserver(pageChanged).observe(
+			document.body, {childList: true,
+				subtree: true});
+
+		new MutationObserver(function()
+		{
+			var newDark = document.body.className.includes('dark');
+
+			if (newDark != dark)
+			{
+				dark = newDark;
+				darkModeChanged();
+			}
+		}).observe(document.body, {attributes: true});
+	}
+
+	installDarkModeListener();
+
+	window.addEventListener('resize', function()
+	{
+		if (iframe.style.visibility != 'hidden')
+		{
+			iframe.contentWindow.postMessage(JSON.stringify(
+				{action: 'viewport', viewport: getViewport()}), '*');
+
+			updateFrame();
+		}
+	});
+
+	var fullscreen = false;
+	var prevOverflow = null;
+
+	function updateFrame()
+	{
+		if (fullscreen)
+		{
+			var r = notionFrames[0].getBoundingClientRect();
+			prevOverflow = document.body.style.overflow;
+			document.body.style.overflow = 'hidden';
+			iframe.style.position = 'fixed';
+			iframe.style.top = r.y + 'px';
+			iframe.style.left = r.x + 'px';
+			iframe.style.width = r.width + 'px';
+			iframe.style.height = r.height + 'px';
+		}
+		else
+		{
+			document.body.style.overflow = prevOverflow;
+			iframe.style.position = 'absolute';
+			iframe.style.left = '0px';
+			iframe.style.top = '0px';
+			iframe.style.width = iframe.parentNode.clientWidth + 'px';
+			iframe.style.height = iframe.parentNode.scrollHeight + 'px';
+		}
+	};
+
+	function setFullscreen(value)
+	{
+		if (fullscreen != value)
+		{
+			fullscreen = value;
+			updateFrame();
+		}
+	};
+
+	function setControlsVisible(img, visible)
+	{
+		try
+		{
+			// Hides halo
+			img.parentNode.parentNode.parentNode.parentNode.parentNode.
+				nextSibling.style.visibility = 'hidden';
+			iframe.parentNode.nextSibling.style.visibility =
+				(visible) ? '' : 'hidden';
+		}
+		catch (e)
+		{
+			// ignore
+		}
+	};
+
+	function invertSvg(doc)
+	{
+		var defs = doc.getElementsByTagName('defs');
+		var style = doc.createElementNS('http://www.w3.org/2000/svg', 'style');
+		style.appendChild(doc.createTextNode(
+			'[stroke="rgba(0, 0, 0, 1)"] {stroke: #f0f0f0}\n' +
+			'[stroke="rgba(255, 255, 255, 1)"] {stroke: ' + backgroundColor + '}\n' +
+			'[fill="rgba(0, 0, 0, 1)"] {fill: #f0f0f0}\n' +
+			'[fill="rgba(255, 255, 255, 1)"] {fill: ' + backgroundColor + '}\n' +
+			'g[fill="rgba(0, 0, 0, 1)"] text {fill: #f0f0f0}\n' +
+			'div[data-drawio-colors*="color: rgba(0, 0, 0, 1)"] div ' +
+			'{color: #f0f0f0 !important;}\n' +
+			'div[data-drawio-colors*="background-color: rgba(255, 255, 255, 1)"] div ' +
+			'{background-color: ' + backgroundColor + '  !important;}' +
+			'div[data-drawio-colors*="border-color: rgba(0, 0, 0, 1)"] div ' +
+			'{border-color: #f0f0f0  !important;}' +
+			'div[data-drawio-colors*="background-color: rgba(255, 255, 255, 1)"] ' +
+			'{background-color: ' + backgroundColor + '  !important;}' +
+			'div[data-drawio-colors*="border-color: rgba(0, 0, 0, 1)"] ' +
+			'{border-color: #f0f0f0  !important;}'));
+		defs[0].appendChild(style);
+
+		if (doc.documentElement.style.backgroundColor == 'rgb(255, 255, 255)')
+		{
+			doc.documentElement.style.backgroundColor = backgroundColor;
+			var g = doc.getElementsByTagName('g');
+
+			if (g != null && g.length > 0 && g[0].getAttribute('filter') == 'url(#dropShadow)')
+			{
+				g[0].removeAttribute('filter');
+			}
+		}
+
+		return doc;
+	};
+
+	function isSvgDataUri(url)
+	{
+		return url.startsWith('data:image/svg+xml;base64,');
+	};
+
+	function createSvgDataUri(doc)
+	{
+		return 'data:image/svg+xml;base64,' +
+			btoa(unescape(encodeURIComponent(
+				new XMLSerializer().serializeToString(
+					doc.documentElement))));
+	};
+
+	function getSvg(data)
+	{
+		return  '<?xml version="1.0" encoding="UTF-8"?>\n' +
+			'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
+			decodeURIComponent(escape(atob(data.substring(data.indexOf(',') + 1))));
+	};
+
+	function getFilename(url)
+	{
+		var tokens = url.split('?')[0].split('/');
+		var filename = tokens[tokens.length - 1];
+
+		if (filename.startsWith('https%3A%2F%2F'))
+		{
+			filename = getFilename(decodeURIComponent(filename));
+		}
+
+		return filename;
+	};
+
+	function getBlockId(node)
+	{
+		var blockId = null;
+		
+		while (blockId == null && node != null && node != document.body)
+		{
+			blockId = node.getAttribute('data-block-id');
+			node = node.parentNode;
+		}
+
+		return blockId;
+	};
+
+	function crossfade(source, target, done)
+	{
+		target.style.visibility = '';
+
+		window.setTimeout(function()
+		{
+			source.style.visibility = 'hidden';
+
+			if (done != null)
+			{
+				done();
+			}	
+		}, 50);
+	};
+
+	function extractId(url, isBlock)
+	{
+		if (isBlock)
+		{
+			url = url.split('#').pop();
+		}
+		
+		let id = url.split('/').pop().split('&p=').pop().split('?p=').pop().split('?').shift().split('-').pop().split('&').shift();
+		
+		//Return the id in the form 12345678-1234-5678-1234-567812345678 
+		return id.substring(0,8) + '-' + id.substring(8, 12) + '-' + id.substring(12, 16) +
+				 '-' + id.substring(16, 20) + '-' + id.substring(20);
+	};
+	
+	function uuidv4()
+	{
+	  return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
+		(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
+	  );
+	}
+	
+	function callNotionAPI(api, data, onsuccess, onerror, origMsg, absUrl, method, directData, mimeType, respAsTxt)
+	{
+		fetch(absUrl || ('https://www.notion.so/api/v3/' + api),
+			{ method: method || 'post', 
+			  body: directData? data : JSON.stringify(data), 
+			  headers: {'Content-Type': mimeType || 'application/json'}})
+			.then(async res => 
+			{
+				try
+				{
+					if (res.ok)
+					{
+						onsuccess(respAsTxt? await res.text() : await res.json());
+					}
+					else
+					{
+						origMsg = origMsg || {};
+						origMsg.error = true;
+						origMsg.errStatus = res.status;
+						onerror(origMsg);
+						
+						try
+						{
+							console.log(await res.json());
+						}
+						catch(e){}
+					}
+				}
+				catch(e)
+				{
+					console.log(e);
+					origMsg.error = true;
+					onerror(origMsg);
+				}
+			})
+			.catch((err) => 
+			{
+				console.log(err);
+				origMsg.error = true;
+				onerror(origMsg);
+			});
+	};
+
+	function replaceDiagram(msg, sendResponse)
+	{
+		callNotionAPI('loadUserContent', {},
+		function(data)
+		{
+			let userId = Object.keys(data.recordMap.notion_user)[0];
+			let blockId = msg.blockId;
+			
+			//Upload the file
+			callNotionAPI('getUploadFileUrl', {bucket: 'secure', name: msg.filename, contentType: 'image/svg+xml'},
+			function(urls)
+			{
+				let ts = Date.now();
+				let url = urls.url;
+				const S3_URL_PREFIX = 'https://s3-us-west-2.amazonaws.com/secure.notion-static.com/';
+				let fileId = url.substring(S3_URL_PREFIX.length).split('/')[0];
+				
+				callNotionAPI(null, msg.data, function()
+				{
+					//Update Image block with file info
+					callNotionAPI('saveTransactions', {
+						'requestId': uuidv4(),
+						'transactions': [{
+							'id': uuidv4(),
+							'operations': [
+								{'id': blockId, 'path': ['format', 'display_source'], 
+									'args': url, 
+									'command': 'set', 'table': 'block'
+								}, 
+								{
+									'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+									'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+								},
+								{'id': blockId, 'path': ['properties', 'source'], 
+									'args': [[url]], 
+									'command': 'set', 'table': 'block'
+								}, 
+								{
+									'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+									'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+								},
+								{'id': blockId, 'path': ['file_ids', 0], 
+									'args': fileId, 
+									'command': 'set', 'table': 'block'
+								}, 
+								{
+									'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts},
+									'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+								}				
+							]
+						}]
+					},
+					function()
+					{
+						msg.newUrl = url;
+						sendResponse(msg);
+					}, sendResponse, msg);
+				}, sendResponse, msg, urls.signedPutUrl, 'put', true, 'image/svg+xml', true);
+			}, sendResponse, msg);
+		}, sendResponse, msg);
+	};
+	
+	chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) 
+	{
+		switch (msg.msg)
+		{
+		case 'insertDiagram':
+			// Stops active editing
+			if (activeImage != null)
+			{
+				iframe.contentWindow.postMessage(JSON.stringify(
+					{action: 'exit'}), '*');
+			}
+
+			//Get user ID
+			callNotionAPI('loadUserContent', {},
+			function(data)
+			{
+				let userId = Object.keys(data.recordMap.notion_user)[0];
+				let blockId = uuidv4();
+				let pageId = msg.pageId || extractId(window.location.href);
+				let ts = Date.now();
+				
+				//Add Image block
+				callNotionAPI('saveTransactions', {
+					'requestId': uuidv4(),
+					'transactions': [{
+						'id': uuidv4(), 			
+						'operations': [
+							{'id': blockId, 'path': [], 
+								'args': {'id': blockId, 'version': 1, 'alive': true, 'created_by_id': userId, 'created_by_table': 'notion_user',
+									'created_time': ts, 'parent_id': pageId, 'parent_table': 'block', 'type': 'image', 'child_list_key': null}, 
+								'command': 'set', 'table': 'block'
+							},
+							{	
+								'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+								'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+							},
+							{'id': pageId, 'path': ['content'], 
+								'args': {'id': blockId}, 
+								'command': 'listAfter', 'table': 'block'
+							},
+							{
+								'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+								'command': 'update', 'id': pageId, 'path': [], 'table': 'block'
+							},
+							{
+								'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+								'command': 'update', 'id': pageId, 'path': [], 'table': 'block'
+							},
+							{
+								'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+								'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+							}
+						]
+					}]
+				},
+				function()
+				{
+					//Now, upload the file
+					callNotionAPI('getUploadFileUrl', {bucket: 'secure', name: msg.filename, contentType: 'image/svg+xml'},
+					function(urls)
+					{
+						ts = Date.now();
+						let url = urls.url;
+						const S3_URL_PREFIX = 'https://s3-us-west-2.amazonaws.com/secure.notion-static.com/';
+						let fileId = url.substring(S3_URL_PREFIX.length).split('/')[0];
+						
+						callNotionAPI(null, msg.data, function()
+						{
+							//Update Image block with file info
+							callNotionAPI('saveTransactions', {
+								'requestId': uuidv4(),
+								'transactions': [{
+									'id': uuidv4(),
+									'operations': [
+										{'id': blockId, 'path': ['format', 'display_source'], 
+											'args': url, 
+											'command': 'set', 'table': 'block'
+										}, 
+										{
+											'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+											'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+										},
+										{'id': blockId, 'path': ['properties', 'source'], 
+											'args': [[url]], 
+											'command': 'set', 'table': 'block'
+										}, 
+										{
+											'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts}, 
+											'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+										},
+										{'id': blockId, 'path': ['file_ids', 0], 
+											'args': fileId, 
+											'command': 'set', 'table': 'block'
+										}, 
+										{
+											'args': {'last_edited_by_id': userId, 'last_edited_by_table': 'notion_user', 'last_edited_time': ts},
+											'command': 'update', 'id': blockId, 'path': [], 'table': 'block'
+										}				
+									]
+								}]
+							},
+							function()
+							{
+								msg.newBlock = {id: blockId, url: url};
+								editBlock(blockId);
+								sendResponse(msg);
+							}, sendResponse, msg);
+						}, sendResponse, msg, urls.signedPutUrl, 'put', true, 'image/svg+xml', true);
+					}, sendResponse, msg);
+				}, sendResponse, msg);
+			}, sendResponse, msg);
+		break;
+		}
+		
+		return true;
+	});
+})();

BIN
etc/notionExtension/images/logo128.png


BIN
etc/notionExtension/images/logo16.png


BIN
etc/notionExtension/images/logo32.png


BIN
etc/notionExtension/images/logo48.png


+ 38 - 0
etc/notionExtension/manifest.json

@@ -0,0 +1,38 @@
+{
+  "name": "draw.io for Notion",
+  "version": "1.0.4",
+  "description": "Insert draw.io diagrams in Notion pages and edit them",
+  "permissions": [
+  	"storage",
+  	"declarativeContent",
+  	"https://*.notion.so/*"
+  ],
+  "background": {
+    "scripts": ["background.js"],
+    "persistent": false
+  },
+  "content_scripts": [
+    {
+      "matches": ["https://*.notion.so/*"],
+      "all_frames": true,
+      "run_at": "document_end",
+      "js": ["contentScript.js"]
+    }
+  ],
+  "page_action": {
+    "default_icon": {
+      "16": "images/logo16.png",
+      "32": "images/logo32.png",
+      "48": "images/logo48.png",
+      "128": "images/logo128.png"
+    },
+    "default_popup": "popup.html"
+  },
+  "icons": {
+    "16": "images/logo16.png",
+    "32": "images/logo32.png",
+    "48": "images/logo48.png",
+    "128": "images/logo128.png"
+  },
+  "manifest_version": 2
+}

+ 9 - 0
etc/notionExtension/popup.html

@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+  <head>
+  </head>
+  <body>
+  	<button style="width: 160px;margin:5px" id="insertDiagram">Insert Diagram</button>
+  	<script src="popup.js"></script>
+  </body>
+</html>

Fichier diff supprimé car celui-ci est trop grand
+ 40 - 0
etc/notionExtension/popup.js


Fichier diff supprimé car celui-ci est trop grand
+ 934 - 931
src/main/webapp/js/app.min.js


+ 14 - 7
src/main/webapp/js/diagramly/Editor.js

@@ -1830,7 +1830,14 @@
 			
 			if (config.styles != null)
 			{
-				Editor.styles = config.styles;
+				if (Array.isArray(config.styles))
+				{
+					Editor.styles = config.styles;
+				}
+				else
+				{
+					EditorUi.debug('Configuration Error: Array expected for styles');
+				}
 			}
 			
 			if (config.globalVars != null)
@@ -1975,7 +1982,7 @@
 				}
 				else
 				{
-					EditorUi.debug('Invalid zoomFactor: value must be float > 1');
+					EditorUi.debug('Configuration Error: Float > 1 expected for zoomFactor');
 				}
 			}
 
@@ -1990,7 +1997,7 @@
 				}
 				else
 				{
-					EditorUi.debug('Invalid gridSteps: value must be int > 0');
+					EditorUi.debug('Configuration Error: Int > 0 expected for gridSteps');
 				}
 			}
 
@@ -2006,7 +2013,7 @@
 				}
 				else
 				{
-					EditorUi.debug('Invalid pageFormat: value must be {width: int, height: int}');
+					EditorUi.debug('Configuration Error: {width: int, height: int} expected for pageFormat');
 				}
 			}
 			
@@ -2050,7 +2057,7 @@
 				}
 				else
 				{
-					EditorUi.debug('Invalid sidebarTitleSize: value must be int > 0');
+					EditorUi.debug('Configuration Error: Int > 0 expected for sidebarTitleSize');
 				}
 			}
 			
@@ -2062,7 +2069,7 @@
 				}
 				else
 				{
-					EditorUi.debug('Invalid fontCss: value must be string');
+					EditorUi.debug('Configuration Error: String expected for fontCss');
 				}
 			}
 			
@@ -2076,7 +2083,7 @@
 				}
 				else
 				{
-					EditorUi.debug('Invalid autosaveDelay: value must be int > 0');
+					EditorUi.debug('Configuration Error: Int > 0 expected for autosaveDelay');
 				}
 			}
 			

+ 2 - 2
src/main/webapp/js/diagramly/EditorUi.js

@@ -5755,7 +5755,7 @@
 	/**
 	 * 
 	 */
-	EditorUi.prototype.showPublishLinkDialog = function(title, hideShare, width, height, fn, showFrameOption, helpLink)
+	EditorUi.prototype.showPublishLinkDialog = function(title, hideShare, width, height, fn, showFrameOption, helpLink, footer)
 	{
 		var div = document.createElement('div');
 		div.style.whiteSpace = 'nowrap';
@@ -5911,7 +5911,7 @@
 				lightbox.checked, editSection.getLink(),
 				layers.checked, (widthInput != null) ? widthInput.value : null,
 				(heightInput != null) ? heightInput.value : null, tags.checked);
-		}), null, mxResources.get('create'), helpLink);
+		}), null, mxResources.get('create'), helpLink, footer);
 		this.showDialog(dlg.container, 340, 300 + dy, true, true);
 		
 		if (widthInput != null)

+ 17 - 9
src/main/webapp/js/diagramly/ElectronApp.js

@@ -1695,9 +1695,7 @@ mxStencilRegistry.allowEval = false;
 		
 		if (urlParams['sketch'] == '1')
 		{
-			menubarContainer = this.menubarContainer;
-			//TODO find a better place for dragging the window
-			menubarContainer.parentNode.style.webkitAppRegion = 'drag';
+			menubarContainer = this.titlebar;
 		}
 
 		menubarContainer.style.webkitAppRegion = 'drag';
@@ -1735,6 +1733,10 @@ mxStencilRegistry.allowEval = false;
 		{
 			this.windowControls.style.top = '9px';
 		}
+		else if (urlParams['sketch'] == '1')
+		{
+			this.windowControls.style.top = '-1px';
+		}
 		
 		menubarContainer.appendChild(this.windowControls);
 
@@ -1743,7 +1745,7 @@ mxStencilRegistry.allowEval = false;
 			if (uiTheme == 'atlas' || Editor.isDarkMode())
 			{
 				this.windowControls.style.fill = 'white';
-				document.querySelectorAll('#geWindow-controls .button').forEach(b => b.className = 'button dark');			
+				document.querySelectorAll('#geWindow-controls .button').forEach(b => b.className = 'button dark');
 			}
 			else
 			{
@@ -1755,11 +1757,6 @@ mxStencilRegistry.allowEval = false;
 		handleDarkModeChange();
 		this.addListener('darkModeChanged', handleDarkModeChange);
 		
-		if (urlParams['sketch'] == '1')
-		{
-			this.windowControls.style.position = 'inherit';
-		}
-		
 		if (this.appIcon != null)
 		{
 			this.appIcon.style.webkitAppRegion = 'no-drag';
@@ -1812,6 +1809,17 @@ mxStencilRegistry.allowEval = false;
 	    }
 	}
 	
+	var origUpdateDocumentTitle = App.prototype.updateDocumentTitle;
+	
+	App.prototype.updateDocumentTitle = function()
+	{
+		origUpdateDocumentTitle.apply(this, arguments);
+		
+		if (this.titlebar != null && this.titlebar.firstChild != null)
+		{
+			this.titlebar.firstChild.innerHTML = mxUtils.htmlEntities(document.title);
+		}
+	};
 	/**
 	 * Copies the given cells and XML to the clipboard as an embedded image.
 	 */

+ 17 - 1
src/main/webapp/js/diagramly/Menus.js

@@ -2141,6 +2141,22 @@
 
 		editorUi.actions.put('embedNotion', new Action(mxResources.get('notion') + '...', function()
 		{
+			var footer = document.createElement('div');
+			footer.style.position = 'absolute';
+			footer.style.bottom = '30px';
+			footer.style.textAlign = 'center';
+			footer.style.width = '100%';
+			footer.style.left = '0px';
+			var link = document.createElement('a');
+			link.style.cursor = 'pointer';
+			mxUtils.write(link, mxResources.get('getNotionChromeExtension'));
+			footer.appendChild(link);
+
+			mxEvent.addListener(link, 'click', function()
+			{
+				editorUi.openLink('https://chrome.google.com/webstore/detail/drawio-for-notion/plhaalebpkihaccllnkdaokdoeaokmle');
+			});
+			
 			editorUi.showPublishLinkDialog(mxResources.get('notion'), null, null, null,
 				function(linkTarget, linkColor, allPages, lightbox, editLink, layers, width, height, tags)
 			{
@@ -2162,7 +2178,7 @@
 						dlg.init();
 					});
 				}
-			}, true);
+			}, true, 'https://www.diagrams.net/blog/drawio-notion', footer);
 		}));
 		
 		editorUi.actions.put('publishLink', new Action(mxResources.get('link') + '...', function()

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

@@ -87,7 +87,8 @@ EditorUi.initMinimalTheme = function()
 	    {
 			ui.formatWindow = new WrapperWindow(ui, mxResources.get('format'),
 				(urlParams['sketch'] == '1') ? Math.max(10, ui.diagramContainer.clientWidth - 241) :
-				Math.max(10, ui.diagramContainer.clientWidth - 248), 60,
+				Math.max(10, ui.diagramContainer.clientWidth - 248), 
+				EditorUi.isElectronApp && urlParams['sketch'] == '1'? 80 : 60,
 				240, Math.min(566, graph.container.clientHeight - 10), function(container)
 			{
 				var format = ui.createFormat(container);
@@ -1795,6 +1796,18 @@ EditorUi.initMinimalTheme = function()
         wrapper.style.cssText = 'position:absolute;top:0px;left:0px;right:0px;bottom:0px;overflow:hidden;';
         ui.diagramContainer.style.top = (urlParams['sketch'] == '1') ? '0px' : '47px';
 
+		//Create draggable titlebar
+		if (EditorUi.isElectronApp && urlParams['sketch'] == '1')
+		{
+			wrapper.style.top = '20px';
+			ui.titlebar = document.createElement('div');
+			ui.titlebar.style.cssText = 'position:absolute;top:0px;left:0px;right:0px;height:20px;overflow:hidden;box-shadow: 0px 0px 2px #c0c0c0;';
+			var title = document.createElement('div');
+			title.style.cssText = 'max-width: calc(100% - 100px);text-overflow: ellipsis;user-select:none;height:20px;margin: 2px 10px;font-size: 12px;white-space: nowrap;overflow: hidden;';
+			ui.titlebar.appendChild(title);
+			previousParent.appendChild(ui.titlebar);
+		}
+		
         var viewZoomMenu = ui.menus.get('viewZoom');
 		var insertImage = (urlParams['sketch'] != '1') ? Editor.plusImage : Editor.shapesImage;
 		var footer = (urlParams['sketch'] == '1') ? document.createElement('div') : null;

+ 49 - 15
src/main/webapp/js/grapheditor/Shapes.js

@@ -181,6 +181,18 @@
 		var start = graph.getActualStartSize(this.state.cell);
 		var rows = graph.model.getChildCells(this.state.cell, true);
 		
+		function getCellStyles(cells)
+		{
+			var result = [];
+
+			for (var i = 0; i < cells.length; i++)
+			{
+				result.push(graph.getCurrentCellStyle(cells[i], true));
+			}
+
+			return result;
+		};
+		
 		if (rows.length > 0)
 		{
 			var rowLines = mxUtils.getValue(this.state.style,
@@ -189,19 +201,38 @@
 				'columnLines', '1') != '0';
 			var geo = graph.getCellGeometry(rows[0]);
 			var cells = graph.model.getChildCells(rows[0], true);
-			var rowData = [{y: (geo != null) ? geo.y + geo.height : 0,
-				x: 0, cells: cells, colspans: []}];
-			
+			var lastRow = {y: (geo != null) ? geo.y + geo.height : 0,
+				x: 0, cells: cells, styles: getCellStyles(cells),
+				colspans: [], rowspans: []};
+			var rowData = [lastRow];
+			var colwidths = [];
+
 			// Paints row lines
 			if (rowLines)
 			{
+				// Initializes rowspans on first row
+				var tx = 0;
+
+				for (var i = 0; i < lastRow.cells.length; i++)
+				{
+					lastRow.rowspans[i] = parseInt(lastRow.styles[i]['rowspan'] || 1);
+					var geo = graph.getCellGeometry(cells[i]);
+
+					if (geo != null)
+					{
+						tx += (geo.alternateBounds != null) ? geo.alternateBounds.width : geo.width;
+					}
+
+					colwidths[i] = tx;
+				}
+
 				for (var i = 1; i < rows.length; i++)
 				{
 					geo = graph.getCellGeometry(rows[i]);
 
-					var data = {y: 0, cells: graph.model.
-						getChildCells(rows[i], true),
-						colspans: []};
+					cells = graph.model.getChildCells(rows[i], true);
+					var data = {y: 0, cells: cells, styles: getCellStyles(cells),
+						colspans: [], rowspans: []};
 					rowData.push(data);
 
 					if (geo != null)
@@ -214,9 +245,13 @@
 
 						for (j = 0; j < data.cells.length; j++)
 						{
-							if (graph.model.isVisible(data.cells[j]))
+							var rowspan = lastRow.rowspans[j];
+							data.rowspans[j] = rowspan - 1;
+
+							if (data.rowspans[j] < 1)
 							{
-								tw = data.x;
+								data.rowspans[j] = parseInt(data.styles[j]['rowspan'] || 1);
+								tw = colwidths[j];
 							}
 							else
 							{
@@ -225,7 +260,7 @@
 									c.lineTo(x + tw - start.width, y + geo.y);
 								}
 
-								c.moveTo(x + geo.x + geo.width + start.x, y + geo.y);
+								c.moveTo(x + colwidths[j] + start.x, y + geo.y);
 								tw = 0;
 							}
 						}
@@ -234,6 +269,8 @@
 						c.end();
 						c.stroke();
 					}
+
+					lastRow = data;
 				}
 			}
 			
@@ -255,16 +292,13 @@
 						for (var j = 0; j < rowData.length; j++)
 						{
 							var data = rowData[j];
-							var colspan = (i == 1) ? parseInt(graph.getCurrentCellStyle(
-								data.cells[i - 1], true)['colspan'] || 1) :
-									rowData[j].colspans[i - 1];
-
+							var colspan = (i == 1) ? parseInt(data.styles[i - 1]['colspan'] || 1) :
+								rowData[j].colspans[i - 1];
 							data.colspans[i] = colspan - 1;
 
 							if (data.colspans[i] < 1)
 							{
-								data.colspans[i] = parseInt(graph.getCurrentCellStyle(
-									data.cells[i], true)['colspan'] || 1);
+								data.colspans[i] = parseInt(data.styles[i]['colspan'] || 1);
 								th = data.y;
 							}
 							else

Fichier diff supprimé car celui-ci est trop grand
+ 1162 - 1160
src/main/webapp/js/viewer-static.min.js


Fichier diff supprimé car celui-ci est trop grand
+ 1162 - 1160
src/main/webapp/js/viewer.min.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
src/main/webapp/mxgraph/mxClient.js


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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=‫عام‬
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=На цял екран
 gap=Хлабина
 gcp=GCP
 general=Общи
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Zaslon preko cijelog ekrana
 gap=Gap
 gcp=GCP
 general=Opšti
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Pantalla completa
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy 
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Přes celou obrazovku
 gap=Gap
 gcp=GCP
 general=Obecné
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fuldskærm
 gap=Gap
 gcp=GCP
 general=Generelt
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Vollbild
 gap=Lücke
 gcp=GCP
 general=Allgemein
+getNotionChromeExtension=Holen Sie sich die Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Πλήρης οθόνη
 gap=Διάκενο
 gcp=GCP
 general=Γενικά
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Pantalla completa
 gap=Brecha
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Täisekraan
 gap=Gap
 gcp=GCP
 general=Üldine
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Pantaila osoa
 gap=Tartea
 gcp=GCP
 general=Orokorra
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ contactOwner=Contact Owner
 viewerOnlyMsg=Ezin dituzu diagramak editatu plataforma mugikorrean, mesedez erabili mahaigaineko bezeroa edo web arakatzailea.
 website=Webgunea
 check4Updates=Bilat eguneraketak
+attWriteFailedRetry={1}: Attachment write failed, trying again in {2} seconds...

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

@@ -352,6 +352,7 @@ fullscreen=‫تمام‌صفحه‬
 gap=Gap
 gcp=GCP
 general=‫عمومی‬
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

+ 257 - 255
src/main/webapp/resources/dia_fi.txt

@@ -74,7 +74,7 @@ bottomAlign=Tasaa alas
 bottomLeft=Alas vasemmalle
 bottomRight=Alas oikealle
 bpmn=BPMN
-bringForward=Bring Forward
+bringForward=Tuo eteenpäin
 browser=Selain
 bulletedList=Luettelomerkkilista
 business=Yritystoiminta
@@ -97,12 +97,12 @@ chatWindowTitle=Chat
 chooseAnOption=Valitse vaihtoehto
 chromeApp=Chrome-sovellus
 collaborativeEditingNotice=Tärkeä huomautus yhteistyömuokkaukseen
-compare=Compare
+compare=Vertaa
 compressed=Pakattu
 commitMessage=Lähetä viesti
 configLinkWarn=Tämä linkki määrittää draw.io:n. Napsauta OK vain, jos luotat siihen tahoon, joka antoi sen sinulle!
 configLinkConfirm=Määritä ja käynnistä draw.io uudelleen napsauttamalla OK.
-container=Container
+container=Kontti
 csv=CSV
 dark=Tumma
 diagramXmlDesc=XML-tiedosto
@@ -111,7 +111,7 @@ diagramPngDesc=Muokattava bittikarttakuva
 diagramSvgDesc=Muokattava vektorikuva
 didYouMeanToExportToPdf=Tarkoititko PDF-muotoon viemistä?
 draftFound=Luonnos tiedostolle '{1}' on löytynyt. Lataa se muokattavaksi tai hylkää se jatkaaksesi.
-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.
+draftRevisionMismatch=Tästä kaaviosta on erilainen versio tämän sivun jaetussa luonnoksessa. Muokkaa kaaviota luonnoksesta varmistaaksesi, että käytät uusinta versiota.
 selectDraft=Valitse luonnos jatkaaksesi muokkausta:
 dragAndDropNotSupported=Vedä ja pudota -toiminto ei tue kuvia. Haluatko tuoda kuvat?
 dropboxCharsNotAllowed=Seuraavat merkit eivät ole sallittuja: \ / : ? * " |
@@ -148,7 +148,7 @@ copiedToClipboard=Kopioitu leikepöydälle
 copy=Kopioi
 copyConnect=Kopioi tai yhdistä
 copyCreated=Tiedoston kopio luotiin.
-copyData=Copy Data
+copyData=Kopioi tiedot
 copyOf=Kopio {1}
 copyOfDrawing=Kopio piirustuksesta
 copySize=Kopioi koko
@@ -236,7 +236,7 @@ googleImages=Google Kuvat
 imageSearch=Kuvahaku
 eip=EIP
 embed=Upota
-embedFonts=Embed Fonts
+embedFonts=Upota fontteja
 embedImages=Upota kuvia
 mainEmbedNotice=Liitä tämä sivulle
 electrical=Sähköpiirros
@@ -352,6 +352,7 @@ fullscreen=Koko näyttö
 gap=Väli
 gcp=GCP
 general=Yleinen
+getNotionChromeExtension=Hanki Notion-Chrome-laajennus
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -434,7 +435,7 @@ lastChange=Viimeinen muutos {1} sitten
 lessThanAMinute=alle minuutti
 licensingError=Lisenssivirhe
 licenseHasExpired={1} lisenssi on päättynyt {2}. Klikkaa tästä.
-licenseRequired=This feature requires draw.io to be licensed.
+licenseRequired=Tämä ominaisuus vaatii draw.io-lisenssin.
 licenseWillExpire={1} lisenssi päättyy {2}. Klikkaa tästä.
 lineJumps=Viivanylitykset
 linkAccountRequired=Jos kaavio ei ole julkinen, tarkistamiseen tarvitaan Google-tiliä.
@@ -472,7 +473,7 @@ maps=Kartat
 mathematicalTypesetting=Matemaattiset näppäilyasetukset
 makeCopy=Luo kopio
 manual=Manuaalinen
-merge=Merge
+merge=Yhdistä
 mermaid=Mermaid
 microsoftOffice=Microsoft Office
 microsoftExcel=Microsoft Excel
@@ -565,9 +566,9 @@ pan=Panoroi
 panTooltip=Välilyönti+vedä panoroidaksesi
 paperSize=Paperin koko
 pattern=Kuvio
-parallels=Parallels
+parallels=Rinnakkain
 paste=Liitä
-pasteData=Paste Data
+pasteData=Liitä data
 pasteHere=Liitä tähän
 pasteSize=Liitä koko
 pasteStyle=Liitä tyyli
@@ -598,7 +599,7 @@ properties=Ominaisuudet
 publish=Julkaise
 quickStart=Pika-aloitusvideo
 rack=Teline
-radial=Radial
+radial=Säteittäinen
 radialTree=Säteittäinen puu
 readOnly=Vain luku
 reconnecting=Yhdistetään uudelleen
@@ -673,7 +674,7 @@ selectFont=Valitse fontti
 selectNone=Poista valinnat
 selectTemplate=Valitse malli
 selectVertices=Valitse kärkipisteet
-sendBackward=Send Backward
+sendBackward=Vie taaksepäin
 sendMessage=Lähetä
 sendYourFeedback=Lähetä palautetta
 serviceUnavailableOrBlocked=Palvelu ei ole käytettävissä tai se on estetty
@@ -900,270 +901,271 @@ confGotoPage=Siirry sisältävälle sivulle
 showComments=Näytä kommentit
 confError=Virhe: {1}
 gliffyImport=Gliffy-tuonti
-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.
+gliffyImportInst1=Napsauta "Aloita tuonti" -painiketta tuodaksesi kaikki Gliffy-kaaviot draw.io:on.
+gliffyImportInst2=Huomaa, että tuontiprosessi kestää jonkin aikaa ja selainikkunan on oltava auki, kunnes tuonti on valmis.
 startImport=Aloita tuonti
-drawConfig=draw.io Configuration
-customLib=Custom Libraries
-customTemp=Custom Templates
-pageIdsExp=Page IDs Export
-drawReindex=draw.io re-indexing (beta)
-working=Working
-drawConfigNotFoundInst=draw.io Configuration Space (DRAWIOCONFIG) does not exist. This space is needed to store draw.io configuration files and custom libraries/templates.
-createConfSp=Create Config Space
-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
-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
-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.
+drawConfig=draw.io-määritykset
+customLib=Mukautetut kirjastot
+customTemp=Mukautetut mallit
+pageIdsExp=Sivutunnusten vienti
+drawReindex=draw.io uudelleenindeksointi (beta)
+working=Käynnissä
+drawConfigNotFoundInst=draw.io-määritystilaa (DRAWIOCONFIG) ei ole olemassa. Tämä tila tarvitaan draw.io-määritystiedostojen ja mukautettujen kirjastojen/mallien tallentamiseen.
+createConfSp=Luo määritystila
+unexpErrRefresh=Odottamaton virhe. Päivitä sivu ja yritä uudelleen.
+configJSONInst=Kirjoita draw.io JSON-määritykset alla olevaan editoriin ja napsauta sitten Tallenna. Jos tarvitset apua, katso
+thisPage=tämä sivu
+curCustLib=Nykyiset mukautetut kirjastot
+libName=Kirjaston nimi
+action=Toiminta
+drawConfID=draw.io määritystunnus
+addLibInst=Napsauta "Lisää kirjasto" -painiketta ladataksesi uuden kirjaston.
+addLib=Lisää kirjasto
+customTempInst1=Mukautetut mallit ovat draw.io-kaavioita, jotka on tallennettu lapsisivuille
+customTempInst2=Katso lisätietoja osoitteesta
+tempsPage=Mallit-sivu
+pageIdsExpInst1=Valitse vientikohde ja napsauta sitten "Aloita vienti" -painiketta viedäksesi kaikkien sivujen tunnukset.
+pageIdsExpInst2=Huomaa, että vientiprosessi kestää jonkin aikaa ja selainikkunan on oltava auki, kunnes vienti on valmis.
 startExp=Aloita vienti
-refreshDrawIndex=Refresh draw.io Diagrams Index
-reindexInst1=Click the "Start Indexing" button to refresh draw.io diagrams index.
-reindexInst2=Please note that the indexing procedure will take some time and the browser window must remain open until the indexing is completed.
+refreshDrawIndex=Päivitä draw.io-kaavioiden hakemisto
+reindexInst1=Napsauta "Aloita indeksointi" -painiketta päivittääksesi draw.io-kaavioiden hakemiston.
+reindexInst2=Huomaa, että indeksointi kestää jonkin aikaa ja selainikkunan on pysyttävä auki, kunnes indeksointi on valmis.
 startIndexing=Aloita indeksointi
-confAPageFoundFetch=Page "{1}" found. Fetching
-confAAllDiagDone=All {1} diagrams processed. Process finished.
+confAPageFoundFetch=Sivu "{1}" löytyi. Haetaan
+confAAllDiagDone=Kaikki {1} kaaviota käsitelty. Prosessi valmis.
 confAStartedProcessing=Prosessoidaan sivua "{1}"
-confAAllDiagInPageDone=All {1} diagrams in page "{2}" processed successfully.
-confAPartialDiagDone={1} out of {2} {3} diagrams in page "{4}" processed successfully.
-confAUpdatePageFailed=Updating page "{1}" failed.
-confANoDiagFoundInPage=No {1} diagrams found in page "{2}".
-confAFetchPageFailed=Fetching the page failed.
-confANoDiagFound=No {1} diagrams found. Process finished.
-confASearchFailed=Searching for {1} diagrams failed. Please try again later.
-confAGliffyDiagFound={2} diagram "{1}" found. Importing
-confAGliffyDiagImported={2} diagram "{1}" imported successfully.
-confASavingImpGliffyFailed=Saving imported {2} diagram "{1}" failed.
-confAImportedFromByDraw=Imported from "{1}" by draw.io
-confAImportGliffyFailed=Importing {2} diagram "{1}" failed.
-confAFetchGliffyFailed=Fetching {2} diagram "{1}" failed.
-confACheckBrokenDiagLnk=Checking for broken diagrams links.
-confADelDiagLinkOf=Deleting diagram link of "{1}"
-confADupLnk=(duplicate link)
-confADelDiagLnkFailed=Deleting diagram link of "{1}" failed.
-confAUnexpErrProcessPage=Unexpected error during processing the page with id: {1}
-confADiagFoundIndex=Diagram "{1}" found. Indexing
-confADiagIndexSucc=Diagram "{1}" indexed successfully.
-confAIndexDiagFailed=Indexing diagram "{1}" failed.
-confASkipDiagOtherPage=Skipped "{1}" as it belongs to another page!
-confADiagUptoDate=Diagram "{1}" is up to date.
-confACheckPagesWDraw=Checking pages having draw.io diagrams.
-confAErrOccured=An error occurred!
-savedSucc=Saved successfully
-confASaveFailedErr=Saving Failed (Unexpected Error)
-character=Character
-confAConfPageDesc=This page contains draw.io configuration file (configuration.json) as attachment
-confALibPageDesc=This page contains draw.io custom libraries as attachments
-confATempPageDesc=This page contains draw.io custom templates as attachments
-working=Working
-confAConfSpaceDesc=This space is used to store draw.io configuration files and custom libraries/templates
-confANoCustLib=No Custom Libraries
-delFailed=Delete failed!
-showID=Show ID
-confAIncorrectLibFileType=Incorrect file type. Libraries should be XML files.
-uploading=Uploading
-confALibExist=This library already exists
-confAUploadSucc=Uploaded successfully
-confAUploadFailErr=Upload Failed (Unexpected Error)
-hiResPreview=High Res Preview
-officeNotLoggedGD=You are not logged in to Google Drive. Please open draw.io task pane and login first.
-officePopupInfo=Please complete the process in the pop-up window.
-pickODFile=Pick OneDrive File
-pickGDriveFile=Pick Google Drive File
-pickDeviceFile=Pick Device File
-vsdNoConfig="vsdurl" is not configured
+confAAllDiagInPageDone=Kaikki {1} kaaviota sivulla "{2}" käsiteltiin onnistuneesti.
+confAPartialDiagDone={1}/{2} {3} kaaviota sivulla "{4}" käsitelty onnistuneesti.
+confAUpdatePageFailed=Sivun "{1}" päivittäminen epäonnistui.
+confANoDiagFoundInPage=Sivulta "{2}" ei löytynyt {1}-kaavioita.
+confAFetchPageFailed=Sivun nouto epäonnistui.
+confANoDiagFound=Ei löytynyt {1} kaaviota. Prosessi valmis.
+confASearchFailed={1} kaavion haku epäonnistui. Yritä uudelleen myöhemmin.
+confAGliffyDiagFound={2} kaavio "{1}" löytyi. Tuodaan
+confAGliffyDiagImported=Kaavion {2} "{1}" tuonti onnistui.
+confASavingImpGliffyFailed=Tuodun {2} kaavion "{1}" tallentaminen epäonnistui.
+confAImportedFromByDraw=Draw.io tuonut osoitteesta "{1}".
+confAImportGliffyFailed={2}-kaavion "{1}" tuonti epäonnistui.
+confAFetchGliffyFailed=Kaavion "{1}" noutaminen {2} epäonnistui.
+confACheckBrokenDiagLnk=Tarkistetaan rikkinäisten kaaviolinkkien varalta.
+confADelDiagLinkOf=Poistetaan "{1}" kaaviolinkkiä
+confADupLnk=(kaksoislinkki)
+confADelDiagLnkFailed=Kaavion "{1}" linkin poistaminen epäonnistui.
+confAUnexpErrProcessPage=Odottamaton virhe käsiteltäessä sivua tunnuksella: {1}
+confADiagFoundIndex=Kaavio "{1}" löytyi. Indeksoidaan
+confADiagIndexSucc=Kaavion "{1}" indeksointi onnistui.
+confAIndexDiagFailed=Kaavion "{1}" indeksointi epäonnistui.
+confASkipDiagOtherPage=Ohitettu "{1}", koska se kuuluu toiselle sivulle!
+confADiagUptoDate=Kaavio "{1}" on ajan tasalla.
+confACheckPagesWDraw=Tarkastetaan sivuja, joissa on draw.io-kaavioita.
+confAErrOccured=Tapahtui virhe!
+savedSucc=Tallennettu onnistuneesti
+confASaveFailedErr=Tallennus epäonnistui (odottamaton virhe)
+character=Merkki
+confAConfPageDesc=Tämä sivu sisältää liitteenä draw.io-määritystiedoston (configuration.json).
+confALibPageDesc=Tämä sivu sisältää liitteinä mukautettuja draw.io-kirjastoja
+confATempPageDesc=Tämä sivu sisältää mukautettuja draw.io-malleja liitteinä
+working=Käynnissä
+confAConfSpaceDesc=Tätä tilaa käytetään draw.io-määritystiedostojen ja mukautettujen kirjastojen/mallien tallentamiseen
+confANoCustLib=Ei mukautettuja kirjastoja
+delFailed=Poistaminen epäonnistui!
+showID=Näytä tunnus
+confAIncorrectLibFileType=Väärä tiedostotyyppi. Kirjastojen tulee olla XML-tiedostoja.
+uploading=Lähetetään
+confALibExist=Tämä kirjasto on jo olemassa
+confAUploadSucc=Lähetys onnistui
+confAUploadFailErr=Lataus epäonnistui (odottamaton virhe)
+hiResPreview=Korkearesoluutioinen esikatselu
+officeNotLoggedGD=Et ole kirjautunut Google Driveen. Avaa draw.io-tehtäväruutu ja kirjaudu sisään ensin.
+officePopupInfo=Suorita prosessi loppuun ponnahdusikkunassa.
+pickODFile=Valitse OneDrive-tiedosto
+pickGDriveFile=Valitse Google Drive -tiedosto
+pickDeviceFile=Valitse laitetiedosto
+vsdNoConfig="vsdurl" ei ole määritetty
 ruler=Viivain
 units=Yksiköt
 points=Pisteet
 inches=Tuumat
 millimeters=Millimetrit
-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.
-macroNotFound=Macro Not Found
-confAInvalidPageIdsFormat=Incorrect Page IDs file format
-confACollectingCurPages=Collecting current pages
-confABuildingPagesMap=Building pages mapping
+confEditDraftDelOrExt=Tämä kaavio on luonnossivulla, se on poistettu sivulta tai sitä on muokattu ulkoisesti. Se tallennetaan uutena liiteversiona, eikä se välttämättä näy sivulla.
+confDiagEditedExt=Kaavio on muokattu toisessa istunnossa. Se tallennetaan uutena liiteversiona, mutta sivulla näkyvät muut istunnon muutokset.
+macroNotFound=Makroa ei löydy
+confAInvalidPageIdsFormat=Virheellinen sivutunnusten tiedostomuoto
+confACollectingCurPages=Kerätään nykyisiä sivuja
+confABuildingPagesMap=Rakennetaan sivujen kartoitusta
 confAProcessDrawDiag=Prosessoidaan tuotuja draw.io-kaavioita
-confAProcessDrawDiagDone=Finished processing imported draw.io diagrams
+confAProcessDrawDiagDone=Tuotujen draw.io-kaavioiden käsittely on valmis
 confAProcessImpPages=Prosessoidaan tuotuja sivuja
-confAErrPrcsDiagInPage=Error processing draw.io diagrams in page "{1}"
-confAPrcsDiagInPage=Processing draw.io diagrams in page "{1}"
-confAImpDiagram=Importing diagram "{1}"
-confAImpDiagramFailed=Importing diagram "{1}" failed. Cannot find its new page ID. Maybe it points to a page that is not imported. 
-confAImpDiagramError=Error importing diagram "{1}". Cannot fetch or save the diagram. Cannot fix this diagram links.
-confAUpdateDgrmCCFailed=Updating link to diagram "{1}" failed.
-confImpDiagramSuccess=Updating diagram "{1}" done successfully.
-confANoLnksInDrgm=No links to update in: {1}
-confAUpdateLnkToPg=Updated link to page: "{1}" in diagram: "{2}"
-confAUpdateLBLnkToPg=Updated lightbox link to page: "{1}" in diagram: "{2}"
-confAUpdateLnkBase=Updated base URL from: "{1}" to: "{2}" in diagram: "{3}"
-confAPageIdsImpDone=Page IDs Import finished
-confAPrcsMacrosInPage=Processing draw.io macros in page "{1}"
-confAErrFetchPage=Error fetching page "{1}"
-confAFixingMacro=Fixing macro of diagram "{1}"
-confAErrReadingExpFile=Error reading export file
-confAPrcsDiagInPageDone=Processing draw.io diagrams in page "{1}" finished
-confAFixingMacroSkipped=Fixing macro of diagram "{1}" failed. Cannot find its new page ID. Maybe it points to a page that is not imported. 
-pageIdsExpTrg=Export target
-confALucidDiagImgImported={2} diagram "{1}" image extracted successfully
-confASavingLucidDiagImgFailed=Extracting {2} diagram "{1}" image failed
-confGetInfoFailed=Fetching file info from {1} failed.
-confCheckCacheFailed=Cannot get cached file info.
-confReadFileErr=Cannot read "{1}" file from {2}.
-confSaveCacheFailed=Unexpected error. Cannot save cached file
-orgChartType=Org Chart Type
-linear=Linear
-hanger2=Hanger 2
-hanger4=Hanger 4
-fishbone1=Fishbone 1
-fishbone2=Fishbone 2
-1ColumnLeft=Single Column Left
-1ColumnRight=Single Column Right
-smart=Smart
-parentChildSpacing=Parent Child Spacing
-siblingSpacing=Sibling Spacing
-confNoPermErr=Sorry, you don't have enough permissions to view this embedded diagram from page {1}
+confAErrPrcsDiagInPage=Virhe käsiteltäessä draw.io-kaavioita sivulla "{1}"
+confAPrcsDiagInPage=Käsitellään draw.io-kaavioita sivulla "{1}"
+confAImpDiagram=Tuodaan kaaviota "{1}"
+confAImpDiagramFailed=Kaavion "{1}" tuonti epäonnistui. Sen uutta sivutunnusta ei löydy. Ehkä se osoittaa sivulle, jota ei ole tuotu.
+confAImpDiagramError=Virhe kaavion "{1}" tuonnissa. Kaaviota ei voi noutaa tai tallentaa. Tätä kaaviolinkkiä ei voi korjata.
+confAUpdateDgrmCCFailed=Linkin päivittäminen kaavioon "{1}" epäonnistui.
+confImpDiagramSuccess=Kaavion "{1}" päivitys onnistui.
+confANoLnksInDrgm=Ei päivitettäviä linkkejä: {1}
+confAUpdateLnkToPg=Päivitetty linkki sivulle: "{1}" kaaviossa: "{2}"
+confAUpdateLBLnkToPg=Päivitetty lightbox-linkki sivulle: "{1}" kaaviossa: "{2}"
+confAUpdateLnkBase=Päivitetty perus-URL-osoite: "{1}": "{2}" kaaviossa: "{3}"
+confAPageIdsImpDone=Sivutunnusten tuonti valmis
+confAPrcsMacrosInPage=Käsitellään draw.io-makroja sivulla "{1}"
+confAErrFetchPage=Virhe haettaessa sivua "{1}"
+confAFixingMacro=Korjataan kaavion "{1}" makro
+confAErrReadingExpFile=Virhe luettaessa vientitiedostoa
+confAPrcsDiagInPageDone=Draw.io-kaavioiden käsittely sivulla "{1}" on valmis
+confAFixingMacroSkipped=Kaavion "{1}" makron korjaaminen epäonnistui. Sen uutta sivutunnusta ei löydy. Ehkä se osoittaa sivulle, jota ei ole tuotu.
+pageIdsExpTrg=Vie kohde
+confALucidDiagImgImported={2} kaavion "{1}" kuva purettu onnistuneesti
+confASavingLucidDiagImgFailed=Kuvan {2} kaavion "{1}" purkaminen epäonnistui
+confGetInfoFailed=Tiedoston tietojen hakeminen kohteesta {1} epäonnistui.
+confCheckCacheFailed=Välimuistissa olevan tiedoston tietoja ei voi saada.
+confReadFileErr=Tiedostoa "{1}" ei voi lukea kohteesta {2}.
+confSaveCacheFailed=Odottamaton virhe. Välimuistissa olevaa tiedostoa ei voi tallentaa
+orgChartType=Kaavion tyyppi
+linear=Lineaarinen
+hanger2=Ripustin 2
+hanger4=Ripustin 4
+fishbone1=Kalanruoto 1
+fishbone2=Kalanruoto 2
+1ColumnLeft=Yksi sarake vasemmalla
+1ColumnRight=Yksi sarake oikealla
+smart=Älykäs
+parentChildSpacing=Vanhemman lapsen välit
+siblingSpacing=Sisaruksen välit
+confNoPermErr=Valitettavasti sinulla ei ole tarpeeksi oikeuksia tarkastella tätä upotettua kaaviota sivulta {1}
 copyAsImage=Kopioi kuvana
 lucidImport=Lucidchart-tuonti
-lucidImportInst1=Click the "Start Import" button to import all Lucidchart diagrams.
+lucidImportInst1=Napsauta "Aloita tuonti" -painiketta tuodaksesi kaikki Lucidchart-kaaviot.
 installFirst=Asenna ensin {1}
 drawioChromeExt=draw.io Chrome Extension
 loginFirstThen=Kirjaudu ensin {1}, sitten {2}
-errFetchDocList=Error: Couldn't fetch documents list
+errFetchDocList=Virhe: Asiakirjaluetteloa ei voitu hakea
 builtinPlugins=Sisäänrakennetut liitännäiset
 extPlugins=Ulkoiset liitännäiset
 backupFound=Varmuuskopiotiedosto löydetty
 chromeOnly=Tämä ominaisuus toimii ainoastaan Google Chromella
 msgDeleted=Tämä viesti on poistettu
-confAErrFetchDrawList=Error fetching diagrams list. Some diagrams are skipped.
-confAErrCheckDrawDiag=Cannot check diagram {1}
-confAErrFetchPageList=Error fetching pages list
-confADiagImportIncom={1} diagram "{2}" is imported partially and may have missing shapes
-invalidSel=Invalid selection
-diagNameEmptyErr=Diagram name cannot be empty
-openDiagram=Open Diagram
-newDiagram=New diagram
-editable=Editable
-confAReimportStarted=Re-import {1} diagrams started...
-spaceFilter=Filter by spaces
-curViewState=Current Viewer State
-pageLayers=Page and Layers
-customize=Customize
-firstPage=First Page (All Layers)
-curEditorState=Current Editor State
-noAnchorsFound=No anchors found 
-attachment=Attachment
-curDiagram=Current Diagram
-recentDiags=Recent Diagrams
-csvImport=CSV Import
-chooseFile=Choose a file...
-choose=Choose
-gdriveFname=Google Drive filename
-widthOfViewer=Width of the viewer (px)
-heightOfViewer=Height of the viewer (px)
-autoSetViewerSize=Automatically set the size of the viewer
-thumbnail=Thumbnail
-prevInDraw=Preview in draw.io
-onedriveFname=OneDrive filename
-diagFname=Diagram filename
-diagUrl=Diagram URL
-showDiag=Show Diagram
-diagPreview=Diagram Preview
-csvFileUrl=CSV File URL
-generate=Generate
-selectDiag2Insert=Please select a diagram to insert it.
-errShowingDiag=Unexpected error. Cannot show diagram
-noRecentDiags=No recent diagrams found
-fetchingRecentFailed=Failed to fetch recent diagrams
-useSrch2FindDiags=Use the search box to find draw.io diagrams
-cantReadChckPerms=Cannot read the specified diagram. Please check you have read permission on that file.
-cantFetchChckPerms=Cannot fetch diagram info. Please check you have read permission on that file.
-searchFailed=Searching failed. Please try again later.
-plsTypeStr=Please type a search string.
-unsupportedFileChckUrl=Unsupported file. Please check the specified URL
-diagNotFoundChckUrl=Diagram not found or cannot be accessed. Please check the specified URL
-csvNotFoundChckUrl=CSV file not found or cannot be accessed. Please check the specified URL
-cantReadUpload=Cannot read the uploaded diagram
-select=Select
-errCantGetIdType=Unexpected Error: Cannot get content id or type.
-errGAuthWinBlocked=Error: Google Authentication window blocked
-authDrawAccess=Authorize draw.io to access {1}
-connTimeout=The connection has timed out
-errAuthSrvc=Error authenticating to {1}
-plsSelectFile=Please select a file
-mustBgtZ={1} must be greater than zero
-cantLoadPrev=Cannot load file preview.
-errAccessFile=Error: Access Denied. You do not have permission to access "{1}".
-noPrevAvail=No preview is available.
-personalAccNotSup=Personal accounts are not supported.
-errSavingTryLater=Error occurred during saving, please try again later.
-plsEnterFld=Please enter {1}
-invalidDiagUrl=Invalid Diagram URL
-unsupportedVsdx=Unsupported vsdx file
-unsupportedImg=Unsupported image file
-unsupportedFormat=Unsupported file format
-plsSelectSingleFile=Please select a single file only
-attCorrupt=Attachment file "{1}" is corrupted
-loadAttFailed=Failed to load attachment "{1}"
-embedDrawDiag=Embed draw.io Diagram
-addDiagram=Add Diagram
-embedDiagram=Embed Diagram
-editOwningPg=Edit owning page
-deepIndexing=Deep Indexing (Index diagrams that aren't used in any page also)
+confAErrFetchDrawList=Virhe noudettaessa kaavioluetteloa. Jotkut kaaviot on ohitettu.
+confAErrCheckDrawDiag=Kaaviota {1} ei voi tarkistaa
+confAErrFetchPageList=Virhe haettaessa sivuluetteloa
+confADiagImportIncom={1}-kaavio "{2}" on tuotu osittain ja siitä saattaa puuttua muotoja
+invalidSel=Virheellinen valinta
+diagNameEmptyErr=Kaavion nimi ei voi olla tyhjä
+openDiagram=Avaa kaavio
+newDiagram=Uusi kaavio
+editable=Muokattava
+confAReimportStarted={1} kaavion uudelleentuonti aloitettu...
+spaceFilter=Suodata välilyöntien mukaan
+curViewState=Katsojan nykyinen tila
+pageLayers=Sivu ja tasot
+customize=Mukauta
+firstPage=Ensimmäinen sivu (kaikki tasot)
+curEditorState=Editorin nykyinen tila
+noAnchorsFound=Ankkureita ei löytynyt
+attachment=Liite
+curDiagram=Nykyinen kaavio
+recentDiags=Viimeaikaiset kaaviot
+csvImport=CSV-tuonti
+chooseFile=Valitse tiedosto...
+choose=Valitse
+gdriveFname=Google Drive -tiedostonimi
+widthOfViewer=Katsojan leveys (px)
+heightOfViewer=Katsojan korkeus (px)
+autoSetViewerSize=Aseta katsojan koko automaattisesti
+thumbnail=Pikkukuva
+prevInDraw=Esikatsele draw.io:ssa
+onedriveFname=OneDrive-tiedostonimi
+diagFname=Kaavion tiedostonimi
+diagUrl=Kaavion URL
+showDiag=Näytä kaavio
+diagPreview=Kaavion esikatselu
+csvFileUrl=CSV-tiedoston URL
+generate=Generoi
+selectDiag2Insert=Valitse kaavio lisätäksesi sen.
+errShowingDiag=Odottamaton virhe. Kaaviota ei voi näyttää
+noRecentDiags=Uusia kaavioita ei löytynyt
+fetchingRecentFailed=Viimeaikaisten kaavioiden nouto epäonnistui
+useSrch2FindDiags=Käytä hakukenttää löytääksesi draw.io-kaaviot
+cantReadChckPerms=Määritettyä kaaviota ei voi lukea. Tarkista, että sinulla on kyseisen tiedoston lukuoikeus.
+cantFetchChckPerms=Kaavion tietoja ei voi noutaa. Tarkista, että sinulla on kyseisen tiedoston lukuoikeus.
+searchFailed=Haku epäonnistui. Yritä uudelleen myöhemmin.
+plsTypeStr=Kirjoita hakumerkkijono.
+unsupportedFileChckUrl=Tiedostoa ei tueta. Tarkista määritetty URL-osoite
+diagNotFoundChckUrl=Kaaviota ei löydy tai sitä ei voi käyttää. Tarkista määritetty URL-osoite
+csvNotFoundChckUrl=CSV-tiedostoa ei löydy tai sitä ei voi käyttää. Tarkista määritetty URL-osoite
+cantReadUpload=Ladattua kaaviota ei voi lukea
+select=Valitse
+errCantGetIdType=Odottamaton virhe: Sisältötunnusta tai tyyppiä ei voi saada.
+errGAuthWinBlocked=Virhe: Google Authentication -ikkuna estetty
+authDrawAccess=Valtuuta draw.io käyttämään sivustoa {1}
+connTimeout=Yhteys on aikakatkaistu
+errAuthSrvc=Virhe todennuksessa kohteeseen {1}
+plsSelectFile=Valitse tiedosto
+mustBgtZ={1} tulee olla suurempi kuin nolla
+cantLoadPrev=Tiedoston esikatselua ei voi ladata.
+errAccessFile=Virhe: Pääsy kielletty. Sinulla ei ole oikeutta käyttää kohdetta "{1}".
+noPrevAvail=Esikatselua ei ole saatavilla.
+personalAccNotSup=Henkilökohtaisia tilejä ei tueta.
+errSavingTryLater=Tallennuksen aikana tapahtui virhe, yritä myöhemmin uudelleen.
+plsEnterFld=Kirjoita {1}
+invalidDiagUrl=Virheellinen kaavion URL-osoite
+unsupportedVsdx=Vsdx-tiedostoa ei tueta
+unsupportedImg=Kuvatiedostoa ei tueta
+unsupportedFormat=Tiedostomuotoa ei tueta
+plsSelectSingleFile=Valitse vain yksi tiedosto
+attCorrupt=Liitetiedosto "{1}" on vioittunut
+loadAttFailed=Liitteen "{1}" lataaminen epäonnistui
+embedDrawDiag=Upota draw.io-kaavio
+addDiagram=Lisää kaavio
+embedDiagram=Upota kaavio
+editOwningPg=Muokkaa omistavaa sivua
+deepIndexing=Syväindeksoidaan (myös hakemistokaaviot, joita ei käytetä millään sivulla)
 confADeepIndexStarted=Syväindeksointi aloitettu
 confADeepIndexDone=Syväindeksointi valmis
-officeNoDiagramsSelected=No diagrams found in the selection
-officeNoDiagramsInDoc=No diagrams found in the document
-officeNotSupported=This feature is not supported in this host application
-someImagesFailed={1} out of {2} failed due to the following errors
-importingNoUsedDiagrams=Importing {1} Diagrams not used in pages
-importingDrafts=Importing {1} Diagrams in drafts
-processingDrafts=Processing drafts
-updatingDrafts=Updating drafts
-updateDrafts=Update drafts
-notifications=Notifications
-drawioImp=draw.io Import
-confALibsImp=Importing draw.io Libraries
-confALibsImpFailed=Importing {1} library failed
-contributors=Contributors
-drawDiagrams=draw.io Diagrams
-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.
-confADelBrokenEmbedDiagLnk=Removing broken embedded diagram links
-replaceWith=Replace with
-replaceAll=Replace All
-confASkipDiagModified=Skipped "{1}" as it was modified after initial import
-replFind=Replace/Find
-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.
+officeNoDiagramsSelected=Valikoimasta ei löytynyt kaavioita
+officeNoDiagramsInDoc=Asiakirjasta ei löytynyt kaavioita
+officeNotSupported=Tämä isäntäsovellus ei tue tätä ominaisuutta
+someImagesFailed={1}/{2} epäonnistui seuraavien virheiden vuoksi
+importingNoUsedDiagrams=Tuodaan {1} Kaavioita, joita ei käytetä sivuilla
+importingDrafts=Tuodaan {1} kaavioita luonnoksissa
+processingDrafts=Käsitellään luonnoksia
+updatingDrafts=Päivitetään luonnoksia
+updateDrafts=Päivitä luonnokset
+notifications=Ilmoitukset
+drawioImp=draw.io-tuonti
+confALibsImp=Tuodaan draw.io-kirjastoja
+confALibsImpFailed=Kirjaston {1} tuonti epäonnistui
+contributors=Osallistujat
+drawDiagrams=draw.io-kaaviot
+errFileNotFoundOrNoPer=Virhe: Pääsy kielletty. Tiedostoa ei löydy tai sinulla ei ole oikeutta käyttää tiedostoa "{1}" osoitteessa {2}.
+confACheckPagesWEmbed=Tarkistetaan sivuja, joille on upotettu draw.io-kaavio.
+confADelBrokenEmbedDiagLnk=Poistetaan rikkinäiset upotetut kaaviolinkit
+replaceWith=Korvaa
+replaceAll=Korvaa kaikki
+confASkipDiagModified=Ohitettu "{1}", koska sitä muutettiin ensimmäisen tuonnin jälkeen
+replFind=Korvaa/etsi
+matchesRepl={1} osumaa korvattu
+draftErrDataLoss=Virhe luettaessa luonnostiedostoa. Kaaviota ei voi muokata nyt mahdollisen tietojen katoamisen estämiseksi. Yritä myöhemmin uudelleen tai ota yhteyttä tukeen.
 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
-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
+linkToDiagramHint=Lisää linkki tähän kaavioon. Kaaviota voi muokata vain sen omistavalta sivulta.
+linkToDiagram=Linkki kaavioon
+changedBy=Muuttanut
+lastModifiedOn=Viimeksi muokattu
+searchResults=Hakutulokset
+showAllTemps=Näytä kaikki mallit
+notionToken=Notion-token
+selectDB=Valitse tietokanta
+noDBs=Ei tietokantoja
+diagramEdited={1} kaaviota "{2}" muokattu
+confDraftPermissionErr=Luonnosta ei voi kirjoittaa. Onko sinulla liitteen kirjoitus-/lukuoikeus tälle sivulle?
+confDraftTooBigErr=Luonnos on liian suuri. Tarkista Confluence Configuration:ssa "Liiteasetukset"-kohdasta "Liitteen enimmäiskoko".
+owner=Omistaja
+repository=Repositorio
+branch=Haara
+meters=Metrit
+teamsNoEditingMsg=Editor-toiminto on käytettävissä vain työpöytäympäristössä (MS Teams Appissa tai verkkoselaimessa)
+contactOwner=Ota yhteyttä omistajaan
+viewerOnlyMsg=Et voi muokata kaavioita mobiilialustalla, käytä työpöytäohjelmaa tai verkkoselainta.
+website=Verkkosivusto
+check4Updates=Tarkista päivitykset
+attWriteFailedRetry={1}: Liitteen kirjoitus epäonnistui, yritetään uudelleen {2} sekunnin kuluttua...

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

@@ -352,6 +352,7 @@ fullscreen=Buong Screen
 gap=Gap
 gcp=GCP
 general=Pangkalahatan
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Plein écran
 gap=Espace
 gcp=GCP
 general=Général
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Pantalla completa
 gap=Espazo
 gcp=GCP
 general=Xeral
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=‫מסך מלא‬
 gap=Gap
 gcp=GCP
 general=‫כללי‬
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Teljes képernyő
 gap=Gap
 gcp=GCP
 general=Általános
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=fullscreen
 gap=gap
 gcp=gcp
 general=general
+getNotionChromeExtension=getNotionChromeExtension
 github=github
 gitlab=gitlab
 gliffy=gliffy
@@ -1167,3 +1168,4 @@ contactOwner=contactOwner
 viewerOnlyMsg=viewerOnlyMsg
 website=website
 check4Updates=check4Updates
+attWriteFailedRetry=attWriteFailedRetry

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

@@ -352,6 +352,7 @@ fullscreen=Layar penuh
 gap=Gap
 gcp=GCP
 general=Umum
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Schermo intero
 gap=Spazio
 gcp=GCP
 general=Generale
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=フルスクリーン
 gap=Gap
 gcp=GCP
 general=一般
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=전체화면
 gap=Gap
 gcp=GCP
 general=일반
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Per visą ekraną
 gap=Tarpas
 gcp=GCP
 general=Pagrindinis
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Skrin penuh
 gap=Gap
 gcp=GCP
 general=Umum
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Volledig scherm
 gap=Opening
 gcp=GCP
 general=Algemeen
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullskjerm
 gap=Gap
 gcp=GCP
 general=Generell
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Pełnoekranowy
 gap=Gap
 gcp=GCP
 general=Ogólny
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Tela cheia
 gap=Espaçamento
 gcp=GCP
 general=Geral
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Ecrã completo
 gap=Gap
 gcp=GCP
 general=Geral
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Ecran întreg
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Полный экран
 gap=Промежуток
 gcp=GCP
 general=Общие
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=Opšti
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Helskärm
 gap=Gap
 gcp=GCP
 general=Allmänt
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Fullscreen
 gap=Gap
 gcp=GCP
 general=General
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=เต็มหน้าจอ
 gap=Gap
 gcp=GCP
 general=ทั่วไป
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Tam ekran
 gap=Boşluk
 gcp=GCP
 general=Genel
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Повний екран
 gap=Проміжок
 gcp=GCP
 general=Загальний
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=Toàn màn hình
 gap=Gap
 gcp=GCP
 general=Chung
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=全螢幕
 gap=Gap
 gcp=GCP
 general=通用
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

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

@@ -352,6 +352,7 @@ fullscreen=全屏
 gap=间隙
 gcp=GCP
 general=通用
+getNotionChromeExtension=Get the Notion Chrome Extension
 github=GitHub
 gitlab=GitLab
 gliffy=Gliffy
@@ -1167,3 +1168,4 @@ 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...

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
src/main/webapp/service-worker.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
src/main/webapp/service-worker.js.map