Kaynağa Gözat

6.0.3.6 release

Gaudenz Alder 8 yıl önce
ebeveyn
işleme
a09b653240
67 değiştirilmiş dosya ile 1908 ekleme ve 2153 silme
  1. 6 0
      ChangeLog
  2. 1 1
      VERSION
  3. 1 1
      war/cache.manifest
  4. 254 263
      war/js/app.min.js
  5. 469 475
      war/js/atlas-viewer.min.js
  6. 218 226
      war/js/atlas.min.js
  7. 3 3
      war/js/diagramly/App.js
  8. 300 453
      war/js/diagramly/EditorUi.js
  9. 6 1
      war/js/diagramly/GraphViewer.js
  10. 131 259
      war/js/diagramly/Menus.js
  11. 7 7
      war/js/embed-static.min.js
  12. 2 1
      war/js/mxgraph/Graph.js
  13. 7 7
      war/js/reader.min.js
  14. 450 456
      war/js/viewer.min.js
  15. 1 0
      war/resources/dia.txt
  16. 1 0
      war/resources/dia_am.txt
  17. 1 0
      war/resources/dia_ar.txt
  18. 1 0
      war/resources/dia_bg.txt
  19. 1 0
      war/resources/dia_bn.txt
  20. 1 0
      war/resources/dia_bs.txt
  21. 1 0
      war/resources/dia_ca.txt
  22. 1 0
      war/resources/dia_cs.txt
  23. 1 0
      war/resources/dia_da.txt
  24. 1 0
      war/resources/dia_de.txt
  25. 1 0
      war/resources/dia_el.txt
  26. 1 0
      war/resources/dia_es.txt
  27. 1 0
      war/resources/dia_et.txt
  28. 1 0
      war/resources/dia_fa.txt
  29. 1 0
      war/resources/dia_fi.txt
  30. 1 0
      war/resources/dia_fil.txt
  31. 1 0
      war/resources/dia_fr.txt
  32. 1 0
      war/resources/dia_gu.txt
  33. 1 0
      war/resources/dia_he.txt
  34. 1 0
      war/resources/dia_hi.txt
  35. 1 0
      war/resources/dia_hr.txt
  36. 1 0
      war/resources/dia_hu.txt
  37. 1 0
      war/resources/dia_i18n.txt
  38. 1 0
      war/resources/dia_id.txt
  39. 1 0
      war/resources/dia_it.txt
  40. 1 0
      war/resources/dia_ja.txt
  41. 1 0
      war/resources/dia_kn.txt
  42. 1 0
      war/resources/dia_ko.txt
  43. 1 0
      war/resources/dia_lt.txt
  44. 1 0
      war/resources/dia_lv.txt
  45. 1 0
      war/resources/dia_ml.txt
  46. 1 0
      war/resources/dia_mr.txt
  47. 1 0
      war/resources/dia_ms.txt
  48. 1 0
      war/resources/dia_nl.txt
  49. 1 0
      war/resources/dia_no.txt
  50. 1 0
      war/resources/dia_pl.txt
  51. 1 0
      war/resources/dia_pt-br.txt
  52. 1 0
      war/resources/dia_pt.txt
  53. 1 0
      war/resources/dia_ro.txt
  54. 1 0
      war/resources/dia_ru.txt
  55. 1 0
      war/resources/dia_sk.txt
  56. 1 0
      war/resources/dia_sl.txt
  57. 1 0
      war/resources/dia_sr.txt
  58. 1 0
      war/resources/dia_sv.txt
  59. 1 0
      war/resources/dia_sw.txt
  60. 1 0
      war/resources/dia_ta.txt
  61. 1 0
      war/resources/dia_te.txt
  62. 1 0
      war/resources/dia_th.txt
  63. 1 0
      war/resources/dia_tr.txt
  64. 1 0
      war/resources/dia_uk.txt
  65. 1 0
      war/resources/dia_vi.txt
  66. 1 0
      war/resources/dia_zh-tw.txt
  67. 1 0
      war/resources/dia_zh.txt

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+08-FEB-2017: 6.0.3.6
+
+- Adds help button in publish link dialog
+- Uses desk.draw.io for searching help
+- Adds export HTML dialog
+
 07-FEB-2017: 6.0.3.5
 
 - Fixes hidden image in Chrome for image export to new window

+ 1 - 1
VERSION

@@ -1 +1 @@
-6.0.3.5
+6.0.3.6

+ 1 - 1
war/cache.manifest

@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 02/07/2017 05:29 PM
+# 02/08/2017 03:49 PM
 
 /app.html
 /index.html?offline=1

Dosya farkı çok büyük olduğundan ihmal edildi
+ 254 - 263
war/js/app.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 469 - 475
war/js/atlas-viewer.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 218 - 226
war/js/atlas.min.js


+ 3 - 3
war/js/diagramly/App.js

@@ -3212,7 +3212,8 @@ App.prototype.loadFile = function(id, sameWindow, file)
 						else
 						{
 							// Fallback for non-public Google Drive diagrams
-							if (url.substring(0, 31) == 'https://drive.google.com/uc?id=')
+							if (url.substring(0, 31) == 'https://drive.google.com/uc?id=' &&
+								(this.drive != null || typeof window.DriveClient === 'function'))
 							{
 								this.hideDialog();
 								
@@ -3231,8 +3232,7 @@ App.prototype.loadFile = function(id, sameWindow, file)
 									}
 								});
 								
-								if (!fallback() && typeof window.DriveClient === 'function' &&
-									this.spinner.spin(document.body, mxResources.get('loading')))
+								if (!fallback() && this.spinner.spin(document.body, mxResources.get('loading')))
 								{
 									this.addListener('clientLoaded', fallback);
 								}

+ 300 - 453
war/js/diagramly/EditorUi.js

@@ -957,6 +957,25 @@
 		}
 	};
 
+	/**
+	 * Translates this point by the given vector.
+	 * 
+	 * @param {number} dx X-coordinate of the translation.
+	 * @param {number} dy Y-coordinate of the translation.
+	 */
+	EditorUi.prototype.getBaseFilename = function()
+	{
+		var file = this.getCurrentFile();
+		var basename = (file != null && file.getTitle() != null) ? file.getTitle() : this.defaultFilename;
+		
+		if (/(\.xml)$/i.test(basename) || /(\.html)$/i.test(basename) || /(\.svg)$/i.test(basename))
+		{
+			basename = basename.substring(0, basename.lastIndexOf('.'));
+		}
+		
+		return basename;
+	};
+	
 	/**
 	 * Translates this point by the given vector.
 	 * 
@@ -968,16 +987,7 @@
 		try
 		{
 			ignoreSelection = (ignoreSelection != null) ? ignoreSelection : this.editor.graph.isSelectionEmpty();
-
-			// LATER: Double URI encoding for needed for newlines in simulate (truncates body otherwise).
-			var file = this.getCurrentFile();
-			var basename = (file != null && file.getTitle() != null) ? file.getTitle() : this.defaultFilename;
-			
-			if (/(\.xml)$/i.test(basename) || /(\.html)$/i.test(basename) || /(\.svg)$/i.test(basename))
-			{
-				basename = basename.substring(0, basename.lastIndexOf('.'));
-			}
-			
+			var basename = this.getBaseFilename();
 			var filename = basename + '.' + format;
 			
 			if (format == 'xml')
@@ -2882,11 +2892,11 @@
 	 */
 	EditorUi.prototype.addLinkSection = function(div)
 	{
-		mxUtils.write(div, mxResources.get('link') + ':');
+		mxUtils.write(div, mxResources.get('links') + ':');
 
 		var linkSelect = document.createElement('select');
 		linkSelect.style.width = '100px';
-		linkSelect.style.marginLeft = '6px';
+		linkSelect.style.marginLeft = '4px';
 		linkSelect.style.marginRight = '10px';
 		linkSelect.className = 'geBtn';
 
@@ -2904,37 +2914,22 @@
 		selfOption.setAttribute('value', 'self');
 		mxUtils.write(selfOption, mxResources.get('openInThisWindow'));
 		linkSelect.appendChild(selfOption);
-
 		div.appendChild(linkSelect);
 		
 		mxUtils.write(div, mxResources.get('borderColor') + ':');
-		
-		var linkButton = document.createElement('button');
-		linkButton.style.width = '18px';
-		linkButton.style.height = '18px';
-		linkButton.style.marginLeft = '6px';
-		linkButton.style.backgroundPosition = 'center center';
-		linkButton.style.backgroundRepeat = 'no-repeat';
-		
 		var linkColor = '#0000ff';
+		var linkButton = null;
 		
 		function updateLinkColor()
 		{
-			if (linkColor == null || linkColor == mxConstants.NONE)
-			{
-				linkButton.style.backgroundColor = '';
-				linkButton.style.backgroundImage = 'url(\'' + Dialog.prototype.noColorImage + '\')';
-			}
-			else
-			{
-				linkButton.style.backgroundColor = linkColor;
-				linkButton.style.backgroundImage = '';
-			}
+			linkButton.innerHTML = '<div style="width:100%;height:100%;box-sizing:border-box;' +
+				((linkColor != null && linkColor != mxConstants.NONE) ?
+				'border:1px solid black;background-color:' + linkColor :
+				'background-position:center center;background-repeat:no-repeat;' +
+				'background-image:url(\'' + Dialog.prototype.closeImage + '\')') + ';"></div>';
 		};
 		
-		updateLinkColor();
-
-		mxEvent.addListener(linkButton, 'click', mxUtils.bind(this, function(evt)
+		linkButton = mxUtils.button('', mxUtils.bind(this, function(evt)
 		{
 			this.pickColor(linkColor || 'none', function(color)
 			{
@@ -2944,7 +2939,15 @@
 			
 			mxEvent.consume(evt);
 		}));
-		
+
+		updateLinkColor();
+		linkButton.style.padding = (mxClient.IS_FF) ? '4px 2px 4px 2px' : '4px';
+		linkButton.style.marginLeft = '4px';
+		linkButton.style.height = '22px';
+		linkButton.style.width = '22px';
+		linkButton.style.position = 'relative';
+		linkButton.style.top = (mxClient.IS_IE || mxClient.IS_IE11 || mxClient.IS_EDGE) ? '6px' : '1px';
+		linkButton.className = 'geColorBtn';
 		div.appendChild(linkButton);
 		mxUtils.br(div);
 		
@@ -2964,107 +2967,6 @@
 		};
 	}
 
-	/**
-	 * 
-	 */
-	EditorUi.prototype.showRemoteExportDialog = function(btnLabel, helpLink, callback)
-	{
-		var graph = this.editor.graph;
-		var div = document.createElement('div');
-		div.style.padding = '6px';
-		
-		var hd = document.createElement('h3');
-		mxUtils.write(hd, mxResources.get('export') + ' ' + mxResources.get('image'));
-		hd.style.marginTop = '0px';
-		hd.style.marginBottom = '8px';
-		div.appendChild(hd);
-		
-		var selection = this.addCheckbox(div, mxResources.get('selectionOnly'), false,
-			this.editor.graph.isSelectionEmpty());
-		var include = this.addCheckbox(div, mxResources.get('includeCopyOfMyDiagram'), true);
-
-		var dlg = new CustomDialog(this, div, mxUtils.bind(this, function()
-		{
-			callback(!selection.checked, include.checked);
-		}), null, btnLabel, helpLink);
-		this.showDialog(dlg.container, 300, 140, true, true);
-	};
-	
-	/**
-	 * 
-	 */
-	EditorUi.prototype.showExportDialog = function(embedOption, btnLabel, helpLink, callback, cropOption)
-	{
-		var graph = this.editor.graph;
-		var div = document.createElement('div');
-		div.style.paddingTop = '10px';
-		div.style.paddingRight = '8px';
-		var height = 240;
-		
-		var transparent = this.addCheckbox(div, mxResources.get('transparentBackground'),
-			graph.background == mxConstants.NONE || graph.background == null);
-		var selection = this.addCheckbox(div, mxResources.get('selectionOnly'),
-			false, graph.isSelectionEmpty());
-
-		var cb6 = document.createElement('input');
-		cb6.style.marginTop = '16px';
-		cb6.style.marginRight = '8px';
-		cb6.setAttribute('type', 'checkbox');
-
-		if (cropOption)
-		{
-			div.appendChild(cb6);
-			mxUtils.write(div, mxResources.get('crop'));
-			mxUtils.br(div);
-			
-			height += 26;
-		}
-		
-		if (graph.isSelectionEmpty())
-		{
-			cb6.setAttribute('disabled', 'disabled');
-		}
-		
-		var shadow = this.addCheckbox(div, mxResources.get('shadow'), graph.shadowVisible);
-		
-		var cb5 = document.createElement('input');
-		cb5.style.marginTop = '16px';
-		cb5.style.marginRight = '8px';
-		cb5.setAttribute('type', 'checkbox');
-		
-		if (this.isOffline() || !this.canvasSupported)
-		{
-			cb5.setAttribute('disabled', 'disabled');
-		}
-		
-		if (embedOption)
-		{
-			div.appendChild(cb5);
-			mxUtils.write(div, mxResources.get('embedImages'));
-			mxUtils.br(div);
-			
-			height += 26;
-		}
-		
-		var cb4 = document.createElement('input');
-		cb4.style.marginTop = '16px';
-		cb4.style.marginRight = '8px';
-		cb4.setAttribute('type', 'checkbox');
-		cb4.style.marginBottom = '8px';
-		cb4.setAttribute('checked', 'checked');
-		cb4.defaultChecked = true;
-		
-		div.appendChild(cb4);
-		mxUtils.write(div, mxResources.get('includeCopyOfMyDiagram'));
-		
-		var dlg = new FilenameDialog(this, 100, btnLabel, mxUtils.bind(this, function(newValue)
-		{
-		   	callback(newValue, transparent.checked, !selection.checked, shadow.checked, cb4.checked, cb5.checked, cb6.checked);
-		}), mxResources.get('zoom') + ' (%)', null, div, (!this.isOffline()) ? helpLink : null);
-		
-		this.showDialog(dlg.container, 320, height, true, true);
-		dlg.init();
-	};
 	/**
 	 * 
 	 */
@@ -3099,11 +3001,6 @@
 			}
 		}
 		
-		if (file != null && file.getTitle() != null)
-		{
-			params.push('title=' + encodeURIComponent(file.getTitle()));
-		}
-		
 		if (allPages && this.pages != null && this.currentPage != null)
 		{
 			for (var i = 0; i < this.pages.length; i++)
@@ -3121,6 +3018,7 @@
 		}
 		
 		var data = '';
+		var addTitle = true;
 		
 		if (url != null)
 		{
@@ -3134,6 +3032,7 @@
 			if (!ignoreFile && file != null && file.constructor == DriveFile)
 			{
 				data = '#' + file.getHash();
+				addTitle = false;
 			}
 			else
 			{
@@ -3142,6 +3041,11 @@
 					this.editor.graph.compress(mxUtils.getXml(this.editor.getGraphXml())))
 			}
 		}
+
+		if (addTitle && file != null && file.getTitle() != null)
+		{
+			params.push('title=' + encodeURIComponent(file.getTitle()));
+		}
 		
 		return ((mxClient.IS_CHROMEAPP) ? 'https://www.draw.io/' : 'https://' + location.host + '/') +
 			((params.length > 0) ? '?' + params.join('&') : '') + data;
@@ -3150,10 +3054,115 @@
 	/**
 	 * 
 	 */
-	EditorUi.prototype.showEmbedHtmlDialog = function(publicUrl, fn)
+	EditorUi.prototype.createHtml = function(publicUrl, zoomEnabled, initialZoom, linkTarget,
+		linkColor, fit, allPages, layers, lightbox, edit, fn)
+	{
+		var s = this.getBasenames();
+		var data = {};
+		
+		if (linkColor != '' && linkColor != mxConstants.NONE)
+		{
+			data.highlight = linkColor;
+		}
+		
+		if (linkTarget !== 'auto')
+		{
+			data.target = linkTarget;
+		}
+		
+		if (!lightbox)
+		{
+			data.lightbox = false;
+		}
+		
+		data.nav = this.editor.graph.foldingEnabled;
+		var zoom = parseInt(initialZoom);
+		
+		if (!isNaN(zoom) && zoom != 100)
+		{
+			data.zoom = zoom / 100;
+		}
+		
+		var tb = [];
+		
+		if (allPages)
+		{
+			tb.push('pages');
+			data.resize = true;
+			
+			if (this.pages != null && this.currentPage != null)
+			{
+				data.page = mxUtils.indexOf(this.pages, this.currentPage);
+			}
+		}
+		
+		if (zoomEnabled)
+		{
+			tb.push('zoom');
+			data.resize = true;
+		}
+		
+		if (layers)
+		{
+			tb.push('layers');
+		}
+		
+		if (tb.length > 0)
+		{
+			if (lightbox)
+			{
+				tb.push('lightbox');
+			}
+			
+			data.toolbar = tb.join(' ');
+		}
+
+		if (edit)
+		{
+			if (publicUrl != null)
+			{
+				data.edit = publicUrl;
+			}
+			else
+			{
+				data.edit = '_blank';
+			}
+		}
+		
+		if (publicUrl != null)
+		{
+			data.url = publicUrl;
+		}
+		else
+		{
+			data.xml = this.getFileData(true, null, null, null, null, !allPages);
+		}
+	
+		var value = '<div class="mxgraph" style="' +
+			((fit) ? 'max-width:100%;' : '') +
+			((tb != '') ? 'border:1px solid transparent;' : '') +
+			'" data-mxgraph="' + mxUtils.htmlEntities(JSON.stringify(data)) + '"></div>';
+		
+		var sParam = (s.length > 0) ? 's=' + s.join(';') : '';
+		var fetchParam = (publicUrl != null) ? 'fetch=' + encodeURIComponent(publicUrl) : '';
+		var s2 = (sParam.length > 0 || fetchParam.length > 0) ?
+			(((urlParams['dev'] == '1') ?
+			'https://test.draw.io/embed2.js?dev=1&' + sParam :
+			'https://www.draw.io/embed2.js?' + sParam)) + '&' + fetchParam :
+			(((urlParams['dev'] == '1') ?
+			'https://test.draw.io/js/viewer.min.js' :
+			'https://www.draw.io/js/viewer.min.js'));
+		var scr = '<script type="text/javascript" src="' + s2 + '"></script>';
+		
+		fn(value, scr);
+	};
+	
+	/**
+	 * 
+	 */
+	EditorUi.prototype.showHtmlDialog = function(btnLabel, helpLink, publicUrl, fn)
 	{
 		var div = document.createElement('div');
-		div.style.padding = '6px';
 		div.style.whiteSpace = 'nowrap';
 		var graph = this.editor.graph;
 		
@@ -3163,7 +3172,7 @@
 		div.appendChild(hd);
 
 		var radioSection = document.createElement('div');
-		radioSection.style.cssText = 'border-bottom:1px solid lightGray;padding-bottom:6px;margin-bottom:8px;';
+		radioSection.style.cssText = 'border-bottom:1px solid lightGray;padding-bottom:8px;margin-bottom:12px;';
 
 		var publicUrlRadio = document.createElement('input');
 		publicUrlRadio.style.cssText = 'margin-right:8px;margin-top:8px;margin-bottom:8px;';
@@ -3220,13 +3229,13 @@
 		var zoomInput = document.createElement('input');
 		zoomInput.setAttribute('type', 'text');
 		zoomInput.style.marginRight = '16px';
-		zoomInput.style.width = '40px';
-		zoomInput.style.marginLeft = '6px';
+		zoomInput.style.width = '60px';
+		zoomInput.style.marginLeft = '4px';
 		zoomInput.style.marginRight = '12px';
 		zoomInput.value = '100%';
 		
 		div.appendChild(zoomInput);
-				
+
 		var fit = this.addCheckbox(div, mxResources.get('fit'), true);
 		var hasPages = this.pages != null && this.pages.length > 1;
 		var allPages = allPages = this.addCheckbox(div, mxResources.get('allPages'), hasPages, !hasPages);
@@ -3234,7 +3243,7 @@
 		var lightbox = this.addCheckbox(div, mxResources.get('lightbox'), true);
 		var edit = this.addCheckbox(div, mxResources.get('showEditButton'), true);
 		edit.style.marginLeft = '24px';
-		edit.style.marginBottom = '8px';
+		edit.style.marginBottom = '16px';
 		
 		mxEvent.addListener(lightbox, 'change', function()
 		{
@@ -3252,9 +3261,9 @@
 		{
 			fn((publicUrlRadio.checked) ? publicUrl : null, zoom.checked, zoomInput.value, linkSection.getTarget(),
 				linkSection.getColor(), fit.checked, allPages.checked, layers.checked, lightbox.checked, edit.checked);
-		}), null, mxResources.get('create'), 'https://desk.draw.io/support/solutions/articles/16000042542-how-to-embed-html-');
-		this.showDialog(dlg.container, 320, 360, true, true);
-		linkSection.focus();
+		}), null, btnLabel, helpLink);
+		this.showDialog(dlg.container, 340, 360, true, true);
+		copyRadio.focus();
 	};
 	
 	/**
@@ -3263,7 +3272,7 @@
 	EditorUi.prototype.showPublishLinkDialog = function(title, hideShare, width, height, fn)
 	{
 		var div = document.createElement('div');
-		div.style.padding = '6px';
+		div.style.whiteSpace = 'nowrap';
 		var graph = this.editor.graph;
 		
 		var hd = document.createElement('h3');
@@ -3272,15 +3281,20 @@
 		div.appendChild(hd);
 		
 		var file = this.getCurrentFile();
+		var helpLink = 'https://desk.draw.io/support/solutions/articles/16000051941-how-to-publicly-publish-a-copy-of-your-draw-io-diagram';
 		var dy = 0;
 		
 		if (file != null && file.constructor == DriveFile && !hideShare)
 		{
 			dy = 80;
+			helpLink = 'https://desk.draw.io/support/solutions/articles/16000039384-how-to-publicly-publish-a-copy-of-your-draw-io-diagram-stored-in-google-drive';
 			var hintSection = document.createElement('div');
-			hintSection.style.cssText = 'border-bottom:1px solid lightGray;padding-bottom:12px;padding-top:6px;margin-bottom:12px;text-align:center;';
-			mxUtils.write(hintSection, mxResources.get('linkAccountRequired'));
-			mxUtils.br(hintSection);
+			hintSection.style.cssText = 'border-bottom:1px solid lightGray;padding-bottom:14px;padding-top:6px;margin-bottom:14px;text-align:center;';
+			
+			var text = document.createElement('div');
+			text.style.whiteSpace = 'normal';
+			mxUtils.write(text, mxResources.get('linkAccountRequired'));
+			hintSection.appendChild(text);
 			
 			var shareBtn = mxUtils.button(mxResources.get('share'), mxUtils.bind(this, function()
 			{
@@ -3309,7 +3323,7 @@
 						
 						var dlg = new ErrorDialog(this, null, mxResources.get((url != null) ?
 							'diagramIsPublic' : 'diagramIsNotPublic'), mxResources.get('ok'));
-						this.showDialog(dlg.container, 340, 80, true, false);
+						this.showDialog(dlg.container, 300, 80, true, false);
 						dlg.init();
 					}));
 				}
@@ -3362,7 +3376,7 @@
 		edit.style.marginLeft = '24px';
 		var layers = this.addCheckbox(div, mxResources.get('layers'), true);
 		layers.style.marginLeft = edit.style.marginLeft;
-		layers.style.marginBottom = '4px';
+		layers.style.marginBottom = '16px';
 		
 		mxEvent.addListener(lightbox, 'change', function()
 		{
@@ -3385,8 +3399,8 @@
 				lightbox.checked, edit.checked, layers.checked,
 				(widthInput != null) ? widthInput.value : null,
 				(heightInput != null) ? heightInput.value : null);
-		}), null, mxResources.get('create'));
-		this.showDialog(dlg.container, 280, 240 + dy, true, true);
+		}), null, mxResources.get('create'), helpLink);
+		this.showDialog(dlg.container, 340, 246 + dy, true, true);
 		
 		if (widthInput != null)
 		{
@@ -3407,21 +3421,144 @@
 		}
 	};
 
+	/**
+	 * 
+	 */
+	EditorUi.prototype.showRemoteExportDialog = function(btnLabel, helpLink, callback)
+	{
+		var div = document.createElement('div');
+		div.style.whiteSpace = 'nowrap';
+		
+		var hd = document.createElement('h3');
+		mxUtils.write(hd, mxResources.get('image'));
+		hd.style.cssText = 'width:100%;text-align:center;margin-top:0px;margin-bottom:4px';
+		div.appendChild(hd);
+
+		var selection = this.addCheckbox(div, mxResources.get('selectionOnly'), false,
+			this.editor.graph.isSelectionEmpty());
+		var include = this.addCheckbox(div, mxResources.get('includeCopyOfMyDiagram'), true);
+		include.style.marginBottom = '16px';
+
+		var dlg = new CustomDialog(this, div, mxUtils.bind(this, function()
+		{
+			callback(!selection.checked, include.checked);
+		}), null, btnLabel, helpLink);
+		this.showDialog(dlg.container, 300, 146, true, true);
+	};
+	
+	/**
+	 * 
+	 */
+	EditorUi.prototype.showExportDialog = function(title, embedOption, btnLabel, helpLink, callback, cropOption)
+	{
+		var div = document.createElement('div');
+		div.style.whiteSpace = 'nowrap';
+		var graph = this.editor.graph;
+		var height = 246;
+		
+		var hd = document.createElement('h3');
+		mxUtils.write(hd, title);
+		hd.style.cssText = 'width:100%;text-align:center;margin-top:0px;margin-bottom:10px';
+		div.appendChild(hd);
+		
+		mxUtils.write(div, mxResources.get('zoom') + ':');
+		
+		var zoomInput = document.createElement('input');
+		zoomInput.setAttribute('type', 'text');
+		zoomInput.style.marginRight = '16px';
+		zoomInput.style.width = '60px';
+		zoomInput.style.marginLeft = '4px';
+		zoomInput.style.marginRight = '12px';
+		zoomInput.value = '100%';
+		
+		div.appendChild(zoomInput);
+		mxUtils.br(div);
+		
+		var transparent = this.addCheckbox(div, mxResources.get('transparentBackground'),
+			graph.background == mxConstants.NONE || graph.background == null);
+		var selection = this.addCheckbox(div, mxResources.get('selectionOnly'),
+			false, graph.isSelectionEmpty());
+
+		var cb6 = document.createElement('input');
+		cb6.style.marginTop = '16px';
+		cb6.style.marginRight = '8px';
+		cb6.setAttribute('type', 'checkbox');
+
+		if (cropOption)
+		{
+			div.appendChild(cb6);
+			mxUtils.write(div, mxResources.get('crop'));
+			mxUtils.br(div);
+			
+			height += 26;
+		}
+		
+		if (graph.isSelectionEmpty())
+		{
+			cb6.setAttribute('disabled', 'disabled');
+		}
+		else
+		{
+			cb6.setAttribute('checked', 'checked');
+			cb6.defaultChecked = true;
+		}
+		
+		var shadow = this.addCheckbox(div, mxResources.get('shadow'), graph.shadowVisible);
+		
+		var cb5 = document.createElement('input');
+		cb5.style.marginTop = '16px';
+		cb5.style.marginRight = '8px';
+		cb5.setAttribute('type', 'checkbox');
+		
+		if (this.isOffline() || !this.canvasSupported)
+		{
+			cb5.setAttribute('disabled', 'disabled');
+		}
+		
+		if (embedOption)
+		{
+			div.appendChild(cb5);
+			mxUtils.write(div, mxResources.get('embedImages'));
+			mxUtils.br(div);
+			
+			height += 26;
+		}
+		
+		var include = this.addCheckbox(div, mxResources.get('includeCopyOfMyDiagram'), true);
+		include.style.marginBottom = '16px';
+	
+		var dlg = new CustomDialog(this, div, mxUtils.bind(this, function()
+		{
+			callback(zoomInput.value, transparent.checked, !selection.checked,
+				shadow.checked, include.checked, cb5.checked, cb6.checked);
+		}), null, btnLabel, helpLink);
+		this.showDialog(dlg.container, 320, height, true, true);
+		zoomInput.focus();
+		
+		if (mxClient.IS_FF || document.documentMode >= 5 || mxClient.IS_QUIRKS)
+		{
+			zoomInput.select();
+		}
+		else
+		{
+			document.execCommand('selectAll', false, null);
+		}
+	};
+	
 	/**
 	 * 
 	 */
 	EditorUi.prototype.showEmbedImageDialog = function(fn, title, imageLabel, shadowEnabled, helpLink)
 	{
 		var div = document.createElement('div');
-		div.style.padding = '6px';
+		div.style.whiteSpace = 'nowrap';
 		var graph = this.editor.graph;
 		
 		if (title != null)
 		{
 			var hd = document.createElement('h3');
 			mxUtils.write(hd, title);
-			hd.style.marginTop = '0px';
-			hd.style.marginBottom = '8px';
+			hd.style.cssText = 'width:100%;text-align:center;margin-top:0px;margin-bottom:4px';
 			div.appendChild(hd);
 		}
 		
@@ -3436,7 +3573,7 @@
 		var hasLayers = graph.model.getChildCount(graph.model.getRoot()) > 1;
 		var layers = this.addCheckbox(div, mxResources.get('layers'), hasLayers, !hasLayers);
 		layers.style.marginLeft = edit.style.marginLeft;
-		layers.style.marginBottom = '8px';
+		layers.style.marginBottom = '12px';
 		
 		mxEvent.addListener(lightbox, 'change', function()
 		{
@@ -3663,295 +3800,6 @@
 		}
 	};
 
-	/**
-	 * 
-	 */
-	EditorUi.prototype.uploadToGithub = function(file, base64Data, editable)
-	{
-		var resume = this.spinner.pause();
-		
-		var content = document.createElement('div');
-		content.style.paddingTop = '20px';
-		content.style.paddingRight = '8px';
-		
-		var table = document.createElement('table');
-		var tbody = document.createElement('tbody');
-		var tr = document.createElement('tr');
-		var td = document.createElement('td');
-		
-		var uname = document.createElement('input');
-		uname.setAttribute('type', 'text');
-		mxUtils.write(td, 'Username:');
-		tr.appendChild(td);
-		td = td.cloneNode(false);
-		td.appendChild(uname);
-		tr.appendChild(td);
-		tbody.appendChild(tr);
-		td = td.cloneNode(false);
-		
-		var pword = document.createElement('input');
-		pword.setAttribute('type', 'password');
-		mxUtils.write(td, 'Password:');
-		
-		tr = tr.cloneNode(false);
-		tr.appendChild(td);
-		td = td.cloneNode(false);
-		td.appendChild(pword);
-		tr.appendChild(td);
-		tbody.appendChild(tr);
-		td = td.cloneNode(false);
-		
-		var org = document.createElement('input');
-		org.setAttribute('type', 'text');
-		mxUtils.write(td, 'Organisation:');
-		
-		tr = tr.cloneNode(false);
-		tr.appendChild(td);
-		td = td.cloneNode(false);
-		td.appendChild(org);
-		tr.appendChild(td);
-		tbody.appendChild(tr);
-		td = td.cloneNode(false);
-		
-		var repo = document.createElement('input');
-		repo.setAttribute('type', 'text');
-		mxUtils.write(td, 'Repository:');
-
-		tr = tr.cloneNode(false);
-		tr.appendChild(td);
-		td = td.cloneNode(false);
-		td.appendChild(repo);
-		tr.appendChild(td);
-		tbody.appendChild(tr);
-		td = td.cloneNode(false);
-
-		var path = document.createElement('input');
-		path.setAttribute('type', 'text');
-		mxUtils.write(td, 'Path:');
-		
-		tr = tr.cloneNode(false);
-		tr.appendChild(td);
-		td = td.cloneNode(false);
-		td.appendChild(path);
-		tr.appendChild(td);
-		tbody.appendChild(tr);
-		td = td.cloneNode(false);
-		
-		var file = this.getCurrentFile();
-		var filename = (file != null && file.getTitle() != null) ? file.getTitle() : this.defaultFilename;
-		var dot = filename.lastIndexOf('.');
-		
-		if (dot > 0)
-		{
-			filename = filename.substring(0, dot);
-		}
-		
-		path.value = filename + '.png';
-
-		var ref = document.createElement('input');
-		ref.setAttribute('type', 'text');
-		mxUtils.write(td, 'Branch/Tag:');
-		ref.value = 'master';
-		
-		tr = tr.cloneNode(false);
-		tr.appendChild(td);
-		td = td.cloneNode(false);
-		td.appendChild(ref);
-		tr.appendChild(td);
-		tbody.appendChild(tr);
-		td = td.cloneNode(false);
-
-		var msg = document.createElement('input');
-		msg.setAttribute('type', 'text');
-		mxUtils.write(td, 'Message:');
-		msg.value = 'Updated ' + filename + '.png';
-		
-		tr = tr.cloneNode(false);
-		tr.appendChild(td);
-		td = td.cloneNode(false);
-		td.appendChild(msg);
-		tr.appendChild(td);
-		tbody.appendChild(tr);
-		td = td.cloneNode(false);
-		
-		table.appendChild(tbody);
-		content.appendChild(table);
-		
-		var dlg = new FilenameDialog(this, null, mxResources.get('publish'), mxUtils.bind(this, function()
-		{
-			var url = 'https://api.github.com/repos/' + org.value + '/' + repo.value +
-				'/contents/' + path.value + '?ref=' + encodeURIComponent(ref.value);
-			resume();
-			
-			mxUtils.get(url, mxUtils.bind(this, function(req)
-			{
-				if (req.getStatus() == 200 || req.getStatus() == 404)
-				{
-					var obj = JSON.parse(req.getText());
-					var entity =
-					{
-						path: path.value,
-						message: msg.value,
-						content: base64Data
-					};			
-					
-					if (obj.sha != null)
-					{
-						entity.sha = obj.sha;
-					}
-					
-					// Native PUT request
-					var req2 = new XMLHttpRequest();
-					req2.onreadystatechange = mxUtils.bind(this, function()
-					{
-						if (req2.readyState == 4)
-						{
-							if (req2.status >= 200 && req2.status < 300)
-							{
-								this.spinner.stop();
-								this.hideDialog();
-								
-								url = 'https://github.com/' + org.value + '/' + repo.value + '/blob/' + ref.value + '/' + path.value;
-								var dlg = new ErrorDialog(this, mxResources.get('published'),
-									mxResources.get('publishedAt', ['<a href="' + url + '" target="_blank">' + url + '</a>']),
-									mxResources.get('close'), mxUtils.bind(this, function()
-									{
-										this.hideDialog();
-									}), null,
-									mxResources.get('openInNewWindow'), mxUtils.bind(this, function()
-									{
-										window.open(url);
-									}), false);
-								this.showDialog(dlg.container, 340, 170, true, false);
-								dlg.init();
-							}
-							else
-							{
-								resume = this.spinner.pause();
-								this.handleError(JSON.parse(req2.responseText));
-							}
-						}
-					});
-					
-					req2.open('PUT', url, true);
-					req2.setRequestHeader('Authorization', 'Basic ' +
-						btoa(uname.value + ':' + pword.value));
-					req2.send(JSON.stringify(entity));
-				}
-				else
-				{
-					this.hideDialog();
-					this.spinner.stop();
-					this.handleError(JSON.parse(req.getText()));
-				}
-			}), mxUtils.bind(this, function(req)
-			{
-				this.hideDialog();
-				this.spinner.stop();
-				this.handleError({message: mxResources.get('unknownError')});
-			}));
-		}), null, null, content, null, false);
-		
-		this.showDialog(dlg.container, 260, 260, true, false);
-		dlg.init();
-	};
-	
-	/**
-	 * 
-	 */
-	EditorUi.prototype.publishImage = function(handler, socialHandler)
-	{
-	   	var file = this.getCurrentFile();
-	   	
-	   	if (file != null)
-	   	{
-			if (this.isExportToCanvas())
-			{
-				this.showExportDialog(false, mxResources.get('publish'), 'https://support.draw.io/pages/viewpage.action?pageId=12222625', mxUtils.bind(this, function(scale, transparentBackground, ignoreSelection, addShadow, editable)
-				{
-					var val = parseInt(scale);
-					
-					if (!isNaN(val) && val > 0)
-					{
-						var scale = val / 100;
-						var selectionEmpty = this.editor.graph.isSelectionEmpty();
-						ignoreSelection = (ignoreSelection != null) ? ignoreSelection : selectionEmpty;
-		
-					   	if (this.spinner.spin(document.body, mxResources.get('publishing')))
-						{
-							try
-							{
-							   	this.exportToCanvas(mxUtils.bind(this, function(canvas)
-							   	{
-							   		try
-							   		{
-							   			var xml = (editable) ? this.getFileData(true, null, null, null, ignoreSelection) : null;
-							   			var data = this.createPngDataUri(canvas, xml);
-							   	   	    handler(file, data.substring(data.lastIndexOf(',') + 1), editable, socialHandler);
-							   		}
-							   		catch (e)
-							   		{
-							   			this.handleError(e);
-							   		}
-							   	}), null, null, null, mxUtils.bind(this, function(e)
-							   	{
-							   		this.handleError(e);
-							   	}), null, ignoreSelection, scale || 1, transparentBackground, addShadow);
-							}
-							catch (e)
-							{
-								this.handleError(e);
-							}
-						}
-					}
-				}));
-			}
-			else
-			{
-				this.showRemoteExportDialog(mxResources.get('publish'), 'https://support.draw.io/pages/viewpage.action?pageId=12222625', mxUtils.bind(this, function(ignoreSelection, editable)
-				{
-					if (this.spinner.spin(document.body, mxResources.get('publishing')))
-					{
-						var bounds = this.editor.graph.getGraphBounds();
-						var data = this.getFileData(true, null, null, null, ignoreSelection);
-						
-						if (bounds.width * bounds.height <= MAX_AREA && data.length <= MAX_REQUEST_SIZE)
-						{
-							var embed = (editable) ? '1' : '0';
-					       	
-							try
-							{
-								var req = new mxXmlRequest(EXPORT_URL, 'format=png' +
-									'&base64=1&embedXml=' + embed + '&xml=' +
-									encodeURIComponent(data));
-								
-								req.send(mxUtils.bind(this, function()
-								{
-									if (req.getStatus() == 200)
-									{
-										handler(file, req.getText(), editable, socialHandler);
-									}
-									else
-									{
-										this.handleError(req);
-									}
-								}));
-							}
-							catch (e)
-							{
-								this.handleError(e);
-							}
-						}
-						else
-						{
-							this.handleError({message: mxResources.get('drawingTooLarge')}, mxResources.get('error'));
-						}
-					}
-				}));
-			}
-		}
-	};
-	
 	/**
 	 * Translates this point by the given vector.
 	 * 
@@ -8255,7 +8103,6 @@
 		this.actions.get('makeCopy').setEnabled(file != null && !file.isRestricted());
 		this.actions.get('editDiagram').setEnabled(urlParams['embed'] == '1' ||
 				(file != null && !file.isRestricted()));
-		this.actions.get('github').setEnabled(file != null && !file.isRestricted());
 		this.actions.get('publishLink').setEnabled(file != null && !file.isRestricted());
 		this.menus.get('publish').setEnabled(file != null && !file.isRestricted());
 		

+ 6 - 1
war/js/diagramly/GraphViewer.js

@@ -1254,7 +1254,12 @@ GraphViewer.prototype.showLocalLightbox = function()
 		
 		if (ui.pages != null && ui.currentPage != null)
 		{
-			param = '&page=' + mxUtils.indexOf(ui.pages, ui.currentPage);
+			var pageIndex = mxUtils.indexOf(ui.pages, ui.currentPage);
+		
+			if (pageIndex > 0)
+			{
+				param = '&page=' + pageIndex;
+			}
 		}
 		
 		return editorGetEditBlankUrl.apply(this, arguments) + param;

+ 131 - 259
war/js/diagramly/Menus.js

@@ -589,9 +589,9 @@
 				
 				var form = document.createElement('div');
 				form.style.display = 'inline';
-				form.innerHTML = ':<form style="display:inline;margin-left:8px;" id="rw_search_form"' +
-					'target="_blank" method="get" action="https://support.draw.io/dosearchsite.action">' +
-					'<input id="rw_search_query" type="text" name="queryString" size="25"></form>';
+				form.innerHTML = ':<form style="display:inline;margin-left:8px;"' +
+					'target="_blank" method="get" action="https://desk.draw.io/support/search/solutions">' +
+					'<input type="text" name="term" size="25"></form>';
 				item.firstChild.nextSibling.appendChild(form);
 				item.style.backgroundColor = 'whiteSmoke';
 				item.style.cursor = 'default';
@@ -855,168 +855,70 @@
 				{
 					editorUi.spinner.stop();
 					
-					editorUi.showEmbedHtmlDialog(url,
-						function(publicUrl, zoomEnabled, initialZoom, linkTarget, linkColor, fit, allPages, layers, lightbox, edit)
+					editorUi.showHtmlDialog(mxResources.get('create'), 'https://desk.draw.io/support/solutions/articles/16000042542-how-to-embed-html-',
+						url, function(publicUrl, zoomEnabled, initialZoom, linkTarget, linkColor, fit, allPages, layers, lightbox, edit)
 					{
-						var s = editorUi.getBasenames();
-						var data = {};
-						
-						if (linkColor != '' && linkColor != mxConstants.NONE)
-						{
-							data.highlight = linkColor;
-						}
-						
-						if (linkTarget !== 'auto')
-						{
-							data.target = linkTarget;
-						}
-						
-						if (!lightbox)
-						{
-							data.lightbox = false;
-						}
-						
-						data.nav = graph.foldingEnabled;
-						var zoom = parseInt(initialZoom);
-						
-						if (!isNaN(zoom) && zoom != 100)
-						{
-							data.zoom = zoom / 100;
-						}
-						
-						var tb = [];
-						
-						if (allPages)
-						{
-							tb.push('pages');
-							data.resize = true;
-							
-							if (editorUi.pages != null && editorUi.currentPage != null)
-							{
-								data.page = mxUtils.indexOf(editorUi.pages, editorUi.currentPage);
-							}
-						}
-						
-						if (zoomEnabled)
-						{
-							tb.push('zoom');
-							data.resize = true;
-						}
-						
-						if (layers)
-						{
-							tb.push('layers');
-						}
-						
-						if (tb.length > 0)
-						{
-							if (lightbox)
-							{
-								tb.push('lightbox');
-							}
-							
-							data.toolbar = tb.join(' ');
-						}
-
-						if (edit)
-						{
-							if (publicUrl != null)
-							{
-								data.edit = publicUrl;
-							}
-							else
-							{
-								data.edit = '_blank';
-							}
-						}
-						
-						if (publicUrl != null)
-						{
-							data.url = publicUrl;
-						}
-						else
-						{
-							data.xml = editorUi.getFileData(true, null, null, null, null, !allPages);
-						}
-					
-						var value = '<div class="mxgraph" style="' +
-							((fit) ? 'max-width:100%;' : '') +
-							((tb != '') ? 'border:1px solid transparent;' : '') +
-							'" data-mxgraph="' + mxUtils.htmlEntities(JSON.stringify(data)) + '"></div>';
-						
-						var sParam = (s.length > 0) ? 's=' + s.join(';') : '';
-						var fetchParam = (publicUrl != null) ? 'fetch=' + encodeURIComponent(publicUrl) : '';
-						var s2 = (sParam.length > 0 || fetchParam.length > 0) ?
-							(((urlParams['dev'] == '1') ?
-							'https://test.draw.io/embed2.js?dev=1&' + sParam :
-							'https://www.draw.io/embed2.js?' + sParam)) + '&' + fetchParam :
-							(((urlParams['dev'] == '1') ?
-							'https://test.draw.io/js/viewer.min.js' :
-							'https://www.draw.io/js/viewer.min.js'));
-					
-						var scr = '<script type="text/javascript" src="' + s2 + '"></script>';
-						
-						var dlg = new EmbedDialog(editorUi, value + '\n' + scr, null, null, function()
-						{
-							var wnd = window.open();
-							var doc = wnd.document;
-					
-							if (document.compatMode === 'CSS1Compat')
-							{
-								doc.writeln('<!DOCTYPE html>');
-							}
-							
-							doc.writeln('<html>');
-							doc.writeln('<head><title>' + encodeURIComponent(mxResources.get('preview')) +
-								'</title><meta charset="utf-8"></head>');
-							doc.writeln('<body>');
-							doc.writeln(value);
-							
-							var direct = mxClient.IS_IE || mxClient.IS_EDGE || document.documentMode != null;
-							
-							if (direct)
-							{
-								doc.writeln(scr);
-							}
-							
-							doc.writeln('</body>');
-							doc.writeln('</html>');
-							doc.close();
-							
-							// Adds script tag after closing page and delay to fix timing issues
-							if (!direct)
+						editorUi.createHtml(publicUrl, zoomEnabled, initialZoom, linkTarget, linkColor,
+							fit, allPages, layers, lightbox, edit, mxUtils.bind(this, function(html, scriptTag)
 							{
-								var info = wnd.document.createElement('div');
-								info.marginLeft = '26px';
-								info.marginTop = '26px';
-								mxUtils.write(info, mxResources.get('updatingDocument'));
-
-								var img = wnd.document.createElement('img');
-								img.setAttribute('src', window.location.protocol + '//' + window.location.hostname +
-									'/' + IMAGE_PATH + '/spin.gif');
-								img.style.marginLeft = '6px';
-								info.appendChild(img);
-								
-								wnd.document.body.insertBefore(info, wnd.document.body.firstChild);
-								
-								window.setTimeout(function()
+								var dlg = new EmbedDialog(editorUi, html + '\n' + scriptTag, null, null, function()
 								{
-									var script = document.createElement('script');
-									script.type = 'text/javascript';
-									script.src = /<script.*?src="(.*?)"/.exec(scr)[1];
-									doc.body.appendChild(script);
+									var wnd = window.open();
+									var doc = wnd.document;
+							
+									if (document.compatMode === 'CSS1Compat')
+									{
+										doc.writeln('<!DOCTYPE html>');
+									}
 									
-									info.parentNode.removeChild(info);
-								}, 20);
-							}
-						});
-						editorUi.showDialog(dlg.container, 440, 240, true, true);
-						dlg.init();
+									doc.writeln('<html>');
+									doc.writeln('<head><title>' + encodeURIComponent(mxResources.get('preview')) +
+										'</title><meta charset="utf-8"></head>');
+									doc.writeln('<body>');
+									doc.writeln(value);
+									
+									var direct = mxClient.IS_IE || mxClient.IS_EDGE || document.documentMode != null;
+									
+									if (direct)
+									{
+										doc.writeln(scr);
+									}
+									
+									doc.writeln('</body>');
+									doc.writeln('</html>');
+									doc.close();
+									
+									// Adds script tag after closing page and delay to fix timing issues
+									if (!direct)
+									{
+										var info = wnd.document.createElement('div');
+										info.marginLeft = '26px';
+										info.marginTop = '26px';
+										mxUtils.write(info, mxResources.get('updatingDocument'));
+
+										var img = wnd.document.createElement('img');
+										img.setAttribute('src', window.location.protocol + '//' + window.location.hostname +
+											'/' + IMAGE_PATH + '/spin.gif');
+										img.style.marginLeft = '6px';
+										info.appendChild(img);
+										
+										wnd.document.body.insertBefore(info, wnd.document.body.firstChild);
+										
+										window.setTimeout(function()
+										{
+											var script = document.createElement('script');
+											script.type = 'text/javascript';
+											script.src = /<script.*?src="(.*?)"/.exec(scr)[1];
+											doc.body.appendChild(script);
+											
+											info.parentNode.removeChild(info);
+										}, 20);
+									}
+								});
+								editorUi.showDialog(dlg.container, 440, 240, true, true);
+								dlg.init();
+							}));
 					});
-					
-//					var dlg = new EmbedHtmlDialog(editorUi, url);
-//					editorUi.showDialog(dlg.container, 550, 400, true, true);
-//					dlg.init();
 				});
 			}
 		}));
@@ -1251,17 +1153,17 @@
 			{
 				menu.addItem(mxResources.get('image') + '...', null, mxUtils.bind(this, function()
 				{
-					editorUi.showExportDialog(false, mxResources.get('export'),
+					editorUi.showExportDialog(mxResources.get('image'), false, mxResources.get('export'),
 						'https://support.draw.io/display/DO/Exporting+Files',
-						mxUtils.bind(this, function(scale, transparentBackground, ignoreSelection, addShadow, editable,
-							embedImages, cropImage)
+						mxUtils.bind(this, function(scale, transparentBackground, ignoreSelection,
+							addShadow, editable, embedImages, cropImage)
 						{
 							var val = parseInt(scale);
 							
 							if (!isNaN(val) && val > 0)
 							{
-							   	this.editorUi.exportImage(val / 100, transparentBackground, ignoreSelection, addShadow,
-							   		editable, !cropImage);
+							   	this.editorUi.exportImage(val / 100, transparentBackground, ignoreSelection,
+							   		addShadow, editable, !cropImage);
 							}
 						}), true);
 				}), parent);
@@ -1281,17 +1183,17 @@
 			
 			menu.addItem(mxResources.get('formatSvg') + '...', null, mxUtils.bind(this, function()
 			{
-				editorUi.showExportDialog(true, mxResources.get('export'),
+				editorUi.showExportDialog(mxResources.get('formatSvg'), true, mxResources.get('export'),
 					'https://support.draw.io/display/DO/Exporting+Files',
-					mxUtils.bind(this, function(scale, transparentBackground, ignoreSelection, addShadow, editable,
-						embedImages, cropImage)
+					mxUtils.bind(this, function(scale, transparentBackground, ignoreSelection,
+						addShadow, editable, embedImages, cropImage)
 					{
 						var val = parseInt(scale);
 						
 						if (!isNaN(val) && val > 0)
 						{
-						   	this.editorUi.exportSvg(val / 100, transparentBackground, ignoreSelection, addShadow,
-						   		editable, embedImages, !cropImage);
+						   	this.editorUi.exportSvg(val / 100, transparentBackground, ignoreSelection,
+						   		addShadow, editable, embedImages, !cropImage);
 						}
 					}), true);
 			}), parent);
@@ -1308,105 +1210,89 @@
 			{
 				menu.addItem(mxResources.get('formatPdf') + '...', null, mxUtils.bind(this, function()
 				{
-					var content = document.createElement('div');
-					content.style.padding = '6px';
+					var div = document.createElement('div');
+					div.style.whiteSpace = 'nowrap';
 					
-					var cb2 = document.createElement('input');
-					cb2.style.marginRight = '8px';
-					cb2.setAttribute('type', 'checkbox');
+					var hd = document.createElement('h3');
+					mxUtils.write(hd, mxResources.get('formatPdf'));
+					hd.style.cssText = 'width:100%;text-align:center;margin-top:0px;margin-bottom:4px';
+					div.appendChild(hd);
 					
-					if (graph.isSelectionEmpty())
-					{
-						cb2.setAttribute('disabled', 'disabled');
-					}
-					
-					content.appendChild(cb2);
-					mxUtils.write(content, mxResources.get('selectionOnly'));
-					mxUtils.br(content);
-					
-					var cb = document.createElement('input');
-					cb.setAttribute('type', 'checkbox');
-					cb.style.marginTop = '16px';
-					cb.style.marginRight = '8px';
-					
-					if (!graph.pageVisible)
-					{
-						cb.setAttribute('checked', 'checked');
-						cb.defaultChecked = true;
-					}
-					
-					content.appendChild(cb);
-					mxUtils.write(content, mxResources.get('crop'));
+					var selection = editorUi.addCheckbox(div, mxResources.get('selectionOnly'),
+						false, graph.isSelectionEmpty());
+					var crop = editorUi.addCheckbox(div, mxResources.get('crop'),
+						!graph.pageVisible);
+					crop.style.marginBottom = '16px';
 					
-					var dlg = new CustomDialog(editorUi, content, mxUtils.bind(this, function()
+					var dlg = new CustomDialog(editorUi, div, mxUtils.bind(this, function()
 					{
-						this.editorUi.downloadFile('pdf', null, null, !cb2.checked, null, !cb.checked);
+						this.editorUi.downloadFile('pdf', null, null, !selection.checked, null, !crop.checked);
 					}), null, mxResources.get('export'));
-					this.editorUi.showDialog(dlg.container, 300, 120, true, true);
+					this.editorUi.showDialog(dlg.container, 300, 146, true, true);
 				}), parent);
 			}
 
 			menu.addItem(mxResources.get('formatHtmlEmbedded') + '...', null, mxUtils.bind(this, function()
 			{
-				this.editorUi.downloadFile('html');
+				if (editorUi.spinner.spin(document.body, mxResources.get('loading')))
+				{
+					editorUi.getPublicUrl(editorUi.getCurrentFile(), function(url)
+					{
+						editorUi.spinner.stop();
+						
+						editorUi.showHtmlDialog(mxResources.get('export'), null, url, function(publicUrl, zoomEnabled,
+							initialZoom, linkTarget, linkColor, fit, allPages, layers, lightbox, edit)
+						{
+							editorUi.createHtml(publicUrl, zoomEnabled, initialZoom, linkTarget, linkColor,
+								fit, allPages, layers, lightbox, edit, mxUtils.bind(this, function(html, scriptTag)
+								{
+									editorUi.saveData(editorUi.getBaseFilename() + '.html',
+										'html', html + '\n' + scriptTag, 'text/html');
+								}));
+						});
+					});
+				}
+				
+				//this.editorUi.downloadFile('html');
 			}), parent);
 
 			menu.addSeparator(parent);
 
 			menu.addItem(mxResources.get('formatXml') + '...', null, mxUtils.bind(this, function()
 			{
-				var noPages = editorUi.pages == null || editorUi.pages.length <= 1;
-				var content = document.createElement('div');
-				content.style.padding = '6px';
-				
-				var cb2 = document.createElement('input');
-				cb2.style.marginRight = '8px';
-				cb2.setAttribute('type', 'checkbox');
 				
-				if (graph.isSelectionEmpty())
-				{
-					cb2.setAttribute('disabled', 'disabled');
-				}
+				var div = document.createElement('div');
+				div.style.whiteSpace = 'nowrap';
+				var noPages = editorUi.pages == null || editorUi.pages.length <= 1;
 				
-				content.appendChild(cb2);
-				mxUtils.write(content, mxResources.get('selectionOnly'));
+				var hd = document.createElement('h3');
+				mxUtils.write(hd, mxResources.get('formatXml'));
+				hd.style.cssText = 'width:100%;text-align:center;margin-top:0px;margin-bottom:4px';
+				div.appendChild(hd);
 				
-				var cb = document.createElement('input');
-				cb.setAttribute('type', 'checkbox');
-				cb.setAttribute('checked', 'checked');
-				cb.defaultChecked = true;
-				cb.style.marginRight = '8px';
-				cb.style.marginTop = '16px';
-				mxUtils.br(content);
-				content.appendChild(cb);
+				var selection = editorUi.addCheckbox(div, mxResources.get('selectionOnly'),
+					false, graph.isSelectionEmpty());
+				var pages = editorUi.addCheckbox(div, mxResources.get((noPages) ? 'compressed' : 'allPages'), true);
+				pages.style.marginBottom = '16px';
 				
-				if (noPages)
-				{
-					mxUtils.write(content, mxResources.get('compressed'));
-				}
-				else
+				mxEvent.addListener(selection, 'change', function()
 				{
-					mxUtils.write(content, mxResources.get('allPages'));
-					
-					mxEvent.addListener(cb2, 'change', function()
+					if (selection.checked)
 					{
-						if (cb2.checked)
-						{
-							cb.setAttribute('disabled', 'disabled');
-						}
-						else
-						{
-							cb.removeAttribute('disabled');
-						}
-					});
-				}
-					
-				var dlg = new CustomDialog(editorUi, content, mxUtils.bind(this, function()
+						pages.setAttribute('disabled', 'disabled');
+					}
+					else
+					{
+						pages.removeAttribute('disabled');
+					}
+				});
+				
+				var dlg = new CustomDialog(editorUi, div, mxUtils.bind(this, function()
 				{
-					editorUi.downloadFile('xml', (noPages) ? !cb.checked : null, null, !cb2.checked,
-						(!noPages) ? !cb.checked : null);
+					editorUi.downloadFile('xml', (noPages) ? !pages.checked : null, null,
+						!selection.checked, (!noPages) ? !pages.checked : null);
 				}), null, mxResources.get('export'));
-				editorUi.showDialog(dlg.container, 300, 120, true, true);
+				this.editorUi.showDialog(dlg.container, 300, 146, true, true);
 			}), parent);
 
 			menu.addItem(mxResources.get('url') + '...', null, mxUtils.bind(this, function()
@@ -1828,23 +1714,9 @@
 			}
 		}));
 		
-		editorUi.actions.addAction('github...', mxUtils.bind(this, function()
-		{
-			editorUi.publishImage(mxUtils.bind(editorUi, editorUi.uploadToGithub));
-		}));
-
 		this.put('publish', new Menu(mxUtils.bind(this, function(menu, parent)
 		{
 			this.addMenuItems(menu, ['publishLink'], parent);
-			
-			// Disable publish in IE9- due to CORS problem when getting image from server
-			// which requires cross-domain XHR but XDomainRequest has no custom headers
-			// to set content type to form-encoded-data which is needed for the export.
-//			if ((document.documentMode == null || document.documentMode >= 10) &&
-//				typeof XMLHttpRequest !== 'undefined')
-//			{
-//				this.addMenuItems(menu, ['github'], parent);
-//			}
 		})));
 
 		editorUi.actions.put('offline', new Action(mxResources.get('offline') + '...', function()

Dosya farkı çok büyük olduğundan ihmal edildi
+ 7 - 7
war/js/embed-static.min.js


+ 2 - 1
war/js/mxgraph/Graph.js

@@ -2245,7 +2245,8 @@ Graph.prototype.getTooltipForCell = function(cell)
 			{
 				if (mxUtils.indexOf(ignored, attrs[i].nodeName) < 0 && attrs[i].nodeValue.length > 0)
 				{
-					tip += attrs[i].nodeName + ': ' + mxUtils.htmlEntities(attrs[i].nodeValue) + '\n';
+					tip += ((attrs[i].nodeName != 'link') ? attrs[i].nodeName + ':' : '') +
+						mxUtils.htmlEntities(attrs[i].nodeValue) + '\n';
 				}
 			}
 			

Dosya farkı çok büyük olduğundan ihmal edildi
+ 7 - 7
war/js/reader.min.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 450 - 456
war/js/viewer.min.js


+ 1 - 0
war/resources/dia.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_am.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_ar.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=‫بداية الخط‬
 linewidth=‫عرض الخط‬
 link=‫رابط‬
+links=Links
 loading=‫تحميل‬
 lockUnlock=‫قفل/إلغاء قفل‬
 loggedOut=‫تم تسجيل الخروج‬

+ 1 - 0
war/resources/dia_bg.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_bn.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_bs.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Početak linije
 linewidth=Debljina linije
 link=Link
+links=Links
 loading=Učitavanje
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_ca.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Inici de la línia
 linewidth=Amplada de la línia
 link=Enllaç
+links=Links
 loading=Carregant
 lockUnlock=Bloquejar/Desbloquejar
 loggedOut=Desconnectat

+ 1 - 0
war/resources/dia_cs.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Začátek řádku
 linewidth=Šířka řádku
 link=Odkaz
+links=Links
 loading=Nahrávám
 lockUnlock=Zamknout/Odemknout
 loggedOut=Odpojeno

+ 1 - 0
war/resources/dia_da.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Linjestart 
 linewidth=Linjebredde
 link=Link
+links=Links
 loading=Indlæser
 lockUnlock=Lås/lås op
 loggedOut=Logget af

+ 1 - 0
war/resources/dia_de.txt

@@ -383,6 +383,7 @@ lineheight=Zeilenhöhe
 linestart=Linienanfang
 linewidth=Linienbreite
 link=Verknüpfung
+links=Verknüpfungen
 loading=Wird geladen
 lockUnlock=Sperren/Entsperren
 loggedOut=Nicht angemeldet

+ 1 - 0
war/resources/dia_el.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Αρχή Γραμμής
 linewidth=Μήκος Γραμμής
 link=Σύνδεσμος
+links=Links
 loading=Φόρτωση
 lockUnlock=Κλείδωμα/Ξεκλείδωμα
 loggedOut=Αποσυνδέθηκε

+ 1 - 0
war/resources/dia_es.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Inicio de línea
 linewidth=Ancho de línea
 link=Enlace
+links=Links
 loading=Cargando
 lockUnlock=Bloquear/Desbloquear
 loggedOut=Desconectado

+ 1 - 0
war/resources/dia_et.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_fa.txt

@@ -383,6 +383,7 @@ lineheight=‫ارتقاع خط‬
 linestart=‫شروع خط‬
 linewidth=‫عرض خظ‬
 link=‫پیوند‬
+links=Links
 loading=‫فراخوانی‬
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_fi.txt

@@ -383,6 +383,7 @@ lineheight=Rivin korkeus
 linestart=Rivin alku
 linewidth=Rivin leveys
 link=Linkki
+links=Links
 loading=Ladataan
 lockUnlock=Lukitse/Avaa
 loggedOut=Kirjautunut ulos

+ 1 - 0
war/resources/dia_fil.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Umpisa ng linya
 linewidth=Lapad ng linya
 link=Ugnay
+links=Links
 loading=Naglolowd
 lockUnlock=Sarado/ Buksan
 loggedOut=Mag log paalis

+ 1 - 0
war/resources/dia_fr.txt

@@ -383,6 +383,7 @@ lineheight=Hauteur de ligne
 linestart=Début de la ligne
 linewidth=Largeur de la ligne
 link=Lien
+links=Links
 loading=Chargement
 lockUnlock=Bloquer/Débloquer
 loggedOut=Se déconnecter

+ 1 - 0
war/resources/dia_gu.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_he.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=‫התחלת קו‬
 linewidth=‫רוחב קו‬
 link=‫קישור‬
+links=Links
 loading=‫טוען‬
 lockUnlock=‫נעל/שחרר‬
 loggedOut=‫מנותק‬

+ 1 - 0
war/resources/dia_hi.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_hr.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_hu.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Vonalkezdet
 linewidth=Vonalvastagság
 link=Link
+links=Links
 loading=Betöltés
 lockUnlock=Bezár/Kizár
 loggedOut=Kijelentkezve

+ 1 - 0
war/resources/dia_i18n.txt

@@ -383,6 +383,7 @@ lineheight=lineheight
 linestart=linestart
 linewidth=linewidth
 link=link
+links=links
 loading=loading
 lockUnlock=lockUnlock
 loggedOut=loggedOut

+ 1 - 0
war/resources/dia_id.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Garis Akhir
 linewidth=Lebar garis
 link=link
+links=Links
 loading=Memuat
 lockUnlock=Mengunci/Membuka kunci
 loggedOut=Keluar

+ 1 - 0
war/resources/dia_it.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Inizio linea
 linewidth=Spessore linea
 link=Link
+links=Links
 loading=Caricamento
 lockUnlock=Blocca/Sblocca
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_ja.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=線の始点
 linewidth=線幅
 link=リンク
+links=Links
 loading=読み込み中
 lockUnlock=ロック / 解除
 loggedOut=ログアウトしました。

+ 1 - 0
war/resources/dia_kn.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_ko.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=선 시작
 linewidth=선 너비
 link=링크
+links=Links
 loading=불러오는중
 lockUnlock=잠금/잠금 해제
 loggedOut=로그아웃

+ 1 - 0
war/resources/dia_lt.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_lv.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_ml.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_mr.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_ms.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Garis mula
 linewidth=Lebar garis
 link=Pautan
+links=Links
 loading=Memuatkan
 lockUnlock=Kunci/Buka kunci
 loggedOut=Daftar keluar

+ 1 - 0
war/resources/dia_nl.txt

@@ -383,6 +383,7 @@ lineheight=Lijnhoogte
 linestart=Start lijn
 linewidth=Lijnbreedte
 link=Link
+links=Links
 loading=Bezig met laden
 lockUnlock=Vergrendelen/ontgrendelen
 loggedOut=Uitgelogd

+ 1 - 0
war/resources/dia_no.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Linjestart
 linewidth=Linjebredde
 link=Lenke
+links=Links
 loading=Laster inn
 lockUnlock=Lås/lås opp
 loggedOut=Utlogget

+ 1 - 0
war/resources/dia_pl.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Początek linii
 linewidth=Szerokość linii
 link=Hiperłącze
+links=Links
 loading=Ładuję
 lockUnlock=Zablokuj/odblokuj
 loggedOut=Wylogowany

+ 1 - 0
war/resources/dia_pt-br.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Início da Linha
 linewidth=Largura da Linha
 link=Link
+links=Links
 loading=Carregando...
 lockUnlock=Travar/Destravar
 loggedOut=Desconectado

+ 1 - 0
war/resources/dia_pt.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Início da linha
 linewidth=Largura da linha
 link=Link
+links=Links
 loading=A carregar
 lockUnlock=Bloquear/Desbloquear
 loggedOut=Desconetado

+ 1 - 0
war/resources/dia_ro.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Început de Linie
 linewidth=Grosime linie
 link=Link
+links=Links
 loading=În curs de încărcare
 lockUnlock=Blocare/Deblocare
 loggedOut=Deconectat

+ 1 - 0
war/resources/dia_ru.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Начало линии
 linewidth=Толщина линии
 link=Ссылка
+links=Links
 loading=Загрузка
 lockUnlock=Блокировать/Разблокировать
 loggedOut=Вышел

+ 1 - 0
war/resources/dia_sk.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_sl.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_sr.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Početak linije
 linewidth=Debljina linije
 link=Veza
+links=Links
 loading=Učitavanje
 lockUnlock=Zaključaj/Otključaj
 loggedOut=Odlogovan

+ 1 - 0
war/resources/dia_sv.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Linjens start
 linewidth=Linjebredd
 link=Länk
+links=Links
 loading=Laddar
 lockUnlock=Lås/Lås upp
 loggedOut=Utloggad

+ 1 - 0
war/resources/dia_sw.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_ta.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_te.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Line start
 linewidth=Linewidth
 link=Link
+links=Links
 loading=Loading
 lockUnlock=Lock/Unlock
 loggedOut=Logged Out

+ 1 - 0
war/resources/dia_th.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=เริ่มต้นเส้น
 linewidth=ความกว้างของเส้น
 link=Link
+links=Links
 loading=กำหลังโหลด
 lockUnlock=ล็อก/เอาล็อกออก
 loggedOut=ออกจากระบบ

+ 1 - 0
war/resources/dia_tr.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Çizgi başı
 linewidth=Çizgi genişliği
 link=Link 
+links=Links
 loading=Yüklüyor
 lockUnlock=Kilitle/Kilidini Aç
 loggedOut=Çıkış Yapıldı 

+ 1 - 0
war/resources/dia_uk.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Початок лінії
 linewidth=Товщина лінії
 link=Посилання
+links=Links
 loading=Завантажується
 lockUnlock=Заблокувати/Розблокувати
 loggedOut=Ви вийшли

+ 1 - 0
war/resources/dia_vi.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=Đầu dòng
 linewidth=Chiều rộng dòng
 link=Đường dẫn
+links=Links
 loading=Đang tải
 lockUnlock=Khóa/Mở khóa
 loggedOut=Đã đăng xuất

+ 1 - 0
war/resources/dia_zh-tw.txt

@@ -383,6 +383,7 @@ lineheight=邊線高度
 linestart=邊線起點
 linewidth=邊線寬度
 link=連結
+links=Links
 loading=載入中
 lockUnlock=鎖定/解鎖
 loggedOut=登出

+ 1 - 0
war/resources/dia_zh.txt

@@ -383,6 +383,7 @@ lineheight=Line Height
 linestart=线始端
 linewidth=线宽
 link=链接
+links=Links
 loading=加载中
 lockUnlock=加锁/解锁
 loggedOut=Logged Out