Gaudenz Alder 8 роки тому
батько
коміт
1ea494934b

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+18-AUG-2017: 7.1.7
+
+- Webapp opens local files in new window
+- Fixes flipped, non-projected anchors
+- Uses mxGraph 3.7.5 beta 11
+- Changes download links
+
 17-AUG-2017: 7.1.6
 
 - Improvements for Lucidchart import

+ 1 - 1
VERSION

@@ -1 +1 @@
-7.1.6
+7.1.7

Різницю між файлами не показано, бо вона завелика
+ 3 - 3
etc/mxgraph/mxClient.js


+ 8 - 8
src/com/mxgraph/io/gliffy/importer/gliffyTranslation.properties

@@ -1292,17 +1292,17 @@ com.gliffy.shape.sitemap.sitemap_v1.default.email=mxgraph.mockup.misc.mail2
 com.gliffy.shape.ui.ui_v3.containers_content.browser=mxgraph.mockup.containers.browserWindow
 com.gliffy.shape.ui.ui_v3.containers_content.dialog=mxgraph.mockup.containers.window;mainText=
 com.gliffy.shape.ui.ui_v3.containers_content.window=mxgraph.mockup.containers.window;mainText=
-com.gliffy.shape.ui.ui_v3.containers_content.popover_top=mxgraph.basic.rectCallout;dx=30;dy=15
-com.gliffy.shape.ui.ui_v3.containers_content.popover_bottom=mxgraph.basic.rectCallout;dx=30;dy=15;flipV=1
+com.gliffy.shape.ui.ui_v3.containers_content.popover_top=callout;perimeter=calloutPerimeter;rounded=1;position=0.48;position2=0.5;size=8;base=10
+com.gliffy.shape.ui.ui_v3.containers_content.popover_bottom=callout;perimeter=calloutPerimeter;rounded=1;position=0.48;position2=0.5;size=8;base=10;flipV=1
 com.gliffy.shape.ui.ui_v3.containers_content.circle_dashed_line=ellipse
-com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_right=mxgraph.basic.rectCallout;dx=30;dy=15
-com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_left=mxgraph.basic.rectCallout;dx=30;dy=15;flipV=1;flipH=1
+com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_right=callout;perimeter=calloutPerimeter;rounded=1;position=0.6;position2=0.55;size=15
+com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_left=callout;perimeter=calloutPerimeter;rounded=1;position=0.6;position2=0.55;size=15;flipH=1
 com.gliffy.shape.ui.ui_v3.containers_content.rectangle_dashed_line=rect
-com.gliffy.shape.ui.ui_v3.containers_content.tooltip_top=mxgraph.basic.rectCallout;dx=30;dy=15
-com.gliffy.shape.ui.ui_v3.containers_content.tooltip_bottom=mxgraph.basic.rectCallout;dx=30;dy=15;flipV=1
+com.gliffy.shape.ui.ui_v3.containers_content.tooltip_top=callout;perimeter=calloutPerimeter;rounded=1;position=0.48;position2=0.5;size=5;base=10
+com.gliffy.shape.ui.ui_v3.containers_content.tooltip_bottom=callout;perimeter=calloutPerimeter;rounded=1;position=0.48;position2=0.5;size=5;base=10;flipV=1
 com.gliffy.shape.ui.ui_v3.containers_content.image=mxgraph.mockup.graphics.simpleIcon
-com.gliffy.shape.ui.ui_v3.containers_content.tooltip_left=mxgraph.basic.rectCallout;dx=30;dy=15;direction=south
-com.gliffy.shape.ui.ui_v3.containers_content.tooltip_right=mxgraph.basic.rectCallout;dx=30;dy=15;direction=north
+com.gliffy.shape.ui.ui_v3.containers_content.tooltip_left=callout;perimeter=calloutPerimeter;rounded=1;position=0.48;position2=0.5;size=5;base=10;direction=south
+com.gliffy.shape.ui.ui_v3.containers_content.tooltip_right=callout;perimeter=calloutPerimeter;rounded=1;position=0.48;position2=0.5;size=5;base=10;direction=north
 com.gliffy.shape.ui.ui_v3.containers_content.rectangle=rect
 com.gliffy.shape.ui.ui_v3.containers_content.video=mxgraph.mockup.containers.videoPlayer;strokeColor2=#666666;strokeColor3=#666666;fillColor2=#666666;barHeight=30;barPos=20
 com.gliffy.shape.ui.ui_v3.containers_content.graph_bar=mxgraph.mockup.graphics.columnChart;fillColor=#ffffff;strokeColor=none;strokeColor2=none;strokeColor3=#666666;fillColor2=#008cff;fillColor3=#dddddd

+ 6 - 3
src/com/mxgraph/io/gliffy/model/GliffyObject.java

@@ -101,12 +101,17 @@ public class GliffyObject implements PostDeserializable
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.forms_controls.combo_box");
 
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.tooltip_top");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.tooltip_bottom");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.tooltip_left");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.tooltip_right");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.popover_top");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.popover_bottom");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.forms_controls.selector");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.icon_symbols.annotate_left");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.icon_symbols.annotate_right");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.icon_symbols.annotate_top");
-		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.popover_top");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_right");
+		GRAPHICLESS_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_left");
 
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.page");
 		GRAPHICLESS_SHAPES.add("com.gliffy.shape.sitemap.sitemap_v2.home");
@@ -136,8 +141,6 @@ public class GliffyObject implements PostDeserializable
 		GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v2.sequence.lifeline");
 		GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v2.sequence.entity_lifeline");
 		GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v2.sequence.control_lifeline");
-		GROUP_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_right");
-		GROUP_SHAPES.add("com.gliffy.shape.ui.ui_v3.containers_content.speech_bubble_left");
 		//UML V1
 		GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v1.default.object_timeline");
 		GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v1.default.class");

+ 1 - 1
war/cache.manifest

@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 08/17/2017 09:32 AM
+# 08/18/2017 10:09 AM
 
 app.html
 index.html?offline=1

+ 3 - 3
war/index.html

@@ -375,7 +375,7 @@
 		</p>
 	</div>
 </div>
-<div id="geFooter" style="visibility:hidden;overflow:hidden;margin-right:200px;">
+<div id="geFooter" style="visibility:hidden;overflow:hidden;margin-right:200px;height:100%;">
 	<div class="geSocialFooter" style="position:absolute;right:32px;white-space:nowrap;">
     	<a href="https://www.youtube.com/channel/UCiTtRN9b8P4CoSfpkfgEJHA" title="draw.io on Youtube" target="_blank">
     		<img border="0" width="24" height="24" src="images/glyphicons_youtube.png" alt="draw.io on Youtube"/>
@@ -397,14 +397,14 @@
     		<img border="0" width="24" height="24" src="images/glyphicons_github.png" alt="draw.io on GitHub"/>
     	</a>
 	</div>
-	<table align="center">
+	<table align="center" height="100%">
 		<tr>
 			<td id="geFooterItem2" align="center" style="width:246px;">
 				<a title="Quick Start Video" href="https://www.youtube.com/watch?v=Z0D96ZikMkc" target="_blank">
 					<img border="0" align="absmiddle" style="margin-top:-2px;padding-right:8px;"
 						width="26" height="26" src="images/youtube.png"/>Quick Start Video</a>
 			</td>
-			<td id="geFooterItem1">
+			<td id="geFooterItem1" align="center" style="width:282px;">
 				<a id="geFooterLink1" title="#1 Rated Confluence Add-on" target="_blank"
 					href="https://marketplace.atlassian.com/plugins/com.mxgraph.confluence.plugins.diagramly/server/overview">
 					<img border="0" width="24" height="24" align="absmiddle" style="padding-right:10px;"

Різницю між файлами не показано, бо вона завелика
+ 493 - 494
war/js/app.min.js


Різницю між файлами не показано, бо вона завелика
+ 56 - 56
war/js/atlas-viewer.min.js


Різницю між файлами не показано, бо вона завелика
+ 873 - 876
war/js/atlas.min.js


+ 87 - 41
war/js/diagramly/App.js

@@ -754,12 +754,13 @@ App.prototype.init = function()
 	/**
 	 * Basic adds for all backends.
 	 */
-	this.basicAds = ['<a title="Share on Twitter" target="_blank" href="https://twitter.com/intent/tweet?text=' +
-		'www.draw.io free online diagramming' +
+	this.basicAds = ['<a title="' + mxResources.get('loveIt', ['draw.io']) +
+		'" target="_blank" href="https://twitter.com/intent/tweet?text=' +
+		encodeURIComponent(mxResources.get('loveIt', ['www.draw.io'])) +
 		'" onclick="javascript:window.open(this.href, \'\', \'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,' +
 		'left=\'+((screen.width-640)/2)+\',top=\'+((screen.height-280)/3)+\',height=280,width=640\');return false;"\'>' +
 		'<img border="0" align="absmiddle" width="18" height="18" style="margin-top:-2px;padding-right:8px;" src="' +
-		Editor.tweetImage + '"/>Share on Twitter</a>',
+		Editor.tweetImage + '"/>' + mxResources.get('loveIt', ['draw.io']) + '</a>',
 		'<a title="Share on Facebook" target="_blank" href="https://www.facebook.com/sharer.php?u=' +
 		encodeURIComponent('https://www.draw.io') +
 		'" onclick="javascript:window.open(this.href, \'\', \'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,' +
@@ -873,6 +874,7 @@ App.prototype.init = function()
 								'<img border="0" align="absmiddle" style="margin-top:-4px;" src="images/glyphicons_star.png"/>&nbsp;&nbsp;Google Docs Add-on</a>',
 								'<a title="Please help us to 5 stars" href="https://chrome.google.com/webstore/detail/drawio-pro/onlkggianjhjenigcpigpjehhpplldkc/reviews" target="_blank">' +
 								'<img border="0" align="absmiddle" style="margin-top:-4px;" src="images/glyphicons_star.png"/>&nbsp;&nbsp;Please help us to 5 stars</a>']);
+							this.updateAd(this.adsHtml.length - 1);
 						}
 						
 						this.updateUserElement();
@@ -993,39 +995,68 @@ App.prototype.init = function()
 
 	this.updateHeader();
 	
+	var rotate = mxUtils.bind(this, function(elt, html, delay, fn)
+	{
+		delay = (delay != null) ? delay : 1000;
+		mxUtils.setPrefixedStyle(elt.style, 'transition', 'all ' + (delay / 1000) + 's ease');
+		mxUtils.setPrefixedStyle(elt.style, 'transform', 'scale(0)');
+		elt.style.visibility = 'visible';
+		elt.style.opacity = '0';
+		
+		window.setTimeout(mxUtils.bind(this, function()
+		{
+			elt.innerHTML = html;
+			mxUtils.setPrefixedStyle(elt.style, 'transform', 'scale(1)');
+			elt.style.opacity = '1';
+			
+			if (fn != null)
+			{
+				fn();
+			}
+		}), delay);
+	});
+	
 	// Announce Desktop Apps
 	// TODO: Remove after one week
 	var td2 = document.getElementById('geFooterItem1');
 	
 	if (td2 != null)
 	{
-		var link = 'https://www.facebook.com/drawioapp/posts/1628618103829386';
+		var link = 'https://download.draw.io/';
+		var lastHtml = td2.innerHTML;
+		var os = 'draw.io';
 
 		if (['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].indexOf(navigator.platform) >= 0)
 		{
-			td2.innerHTML = '<a title="draw.io for macOS" href="' + link + '" target="_blank">' +
-				'<img border="0" align="absmiddle" style="margin-top:-4px;" width="24" height="24" src="images/drawlogo48.png"/>&nbsp;&nbsp;draw.io for macOS</a>';
+			os += ' for macOS';
 		}
 		else if (['Win32', 'Win64', 'Windows', 'WinCE'].indexOf(navigator.platform) >= 0)
 		{
-			td2.innerHTML = '<a title="draw.io for Windows" href="' + link + '" target="_blank">' +
-				'<img border="0" align="absmiddle" style="margin-top:-4px;" width="24" height="24" src="images/drawlogo48.png"/>&nbsp;&nbsp;draw.io for Windows</a>';
+			os += ' for Windows';
 		}
 		else if (/\bCrOS\b/.test(navigator.userAgent))
 		{
-			td2.innerHTML = '<a title="draw.io for Chrome OS" href="https://chrome.google.com/webstore/detail/drawio-desktop/pebppomjfocnoigkeepgbmcifnnlndla" target="_blank">' +
-				'<img border="0" align="absmiddle" style="margin-top:-4px;" width="24" height="24" src="images/drawlogo48.png"/>&nbsp;&nbsp;draw.io for Chrome OS</a>';
+			os += ' for Chrome OS';
 		}
 		else if (/Linux/.test(navigator.platform))
 		{
-			td2.innerHTML = '<a title="draw.io for Linux" href="' + link + '" target="_blank">' +
-				'<img border="0" align="absmiddle" style="margin-top:-4px;" width="24" height="24" src="images/drawlogo48.png"/>&nbsp;&nbsp;draw.io for Linux</a>';
+			os += ' for Linux';
 		}
 		else
 		{
-			td2.innerHTML = '<a title="draw.io Desktop" href="' + link + '" target="_blank">' +
-				'<img border="0" align="absmiddle" style="margin-top:-4px;" width="24" height="24" src="images/drawlogo48.png"/>&nbsp;&nbsp;draw.io Desktop</a>';
+			os += ' Desktop';
 		}
+		
+		td2.innerHTML = '<a title="' + os + '" href="' + link + '" target="_blank">' +
+			'<img border="0" align="absmiddle" style="margin-top:-4px;" width="24" height="24" ' +
+			'src="images/drawlogo48.png"/>&nbsp;&nbsp;' + os + '</a>';
+		
+		window.setInterval(mxUtils.bind(this, function()
+		{
+			var temp = lastHtml;
+			lastHtml = td2.innerHTML;
+			rotate(td2, temp);
+		}), 300000);
 	}
 	
 	// Changes footer from time to time
@@ -1041,8 +1072,11 @@ App.prototype.init = function()
 		
 		this.updateAd = function(index, delay)
 		{
-			delay = (delay != null) ? delay : 1000;
-			mxUtils.setPrefixedStyle(td.style, 'transition', 'all ' + (delay / 1000) + 's ease');
+			if (thread != null)
+			{
+				window.clearTimeout(thread);
+				thread = null;
+			}
 
 			if (thread2 != null)
 			{
@@ -1050,43 +1084,51 @@ App.prototype.init = function()
 				thread2 = null;
 			}
 			
-			if (this.adsHtml.length == 1)
-			{
-				window.clearInterval(thread);
-			}
-			
 			if (this.adsHtml.length == 0)
 			{
-				td.style.visibility = 'hidden';
+				td.style.display = 'none';
 				td.innerHTML = '';
 			}
 			else
 			{
-				td.style.visibility = 'visible';
-				
-				if (index == lastAd)
+				var schedule = mxUtils.bind(this, function()
 				{
-					index++;
-				}
-
-				mxUtils.setPrefixedStyle(td.style, 'transform', 'scale(0)');
-				td.style.opacity = '0';
+					if (this.adsHtml.length > 0)
+					{
+						thread = window.setTimeout(mxUtils.bind(this, function()
+						{
+							var tmp = 0;
+							
+							if (this.adsHtml.length > 1)
+							{
+								tmp = Math.round(Math.random() * (this.adsHtml.length - 2));
+								
+								if (tmp == lastAd)
+								{
+									tmp++;
+								}
+							}
+							
+							this.updateAd(tmp);
+						}), 180000);
+					}
+				});
 			
-				window.setTimeout(mxUtils.bind(this, function()
+				if (index != lastAd)
 				{
-					td.innerHTML = this.adsHtml[index];
-					mxUtils.setPrefixedStyle(td.style, 'transform', 'scale(1)');
-					td.style.opacity = '1';
-					lastAd = index;
-				}), delay);
+					rotate(td, this.adsHtml[index], delay, function()
+					{
+						lastAd = index;
+						schedule();
+					});
+				}
+				else
+				{
+					schedule();
+				}
 			}
 		};
 		
-		thread = window.setInterval(mxUtils.bind(this, function()
-		{
-			this.updateAd(Math.round(Math.random() * (this.adsHtml.length - 2)));
-		}), 180000);
-		
 		mxEvent.addListener(td, 'click', mxUtils.bind(this, function()
 		{
 			this.adsHtml.splice(lastAd, 1);
@@ -1101,6 +1143,10 @@ App.prototype.init = function()
 				this.updateAd(0);
 			}), 15000);
 		}
+		else
+		{
+			this.updateAd(this.adsHtml.length - 1);
+		}
 	}
 	
 	if (this.menubar != null)

+ 4 - 0
war/js/diagramly/Dialogs.js

@@ -1095,6 +1095,8 @@ var EmbedDialog = function(editorUi, result, timeout, ignoreSize, previewFn)
 			
 			var img = document.createElement('img');
 			img.setAttribute('src', Editor.facebookImage);
+			img.setAttribute('width', '18');
+			img.setAttribute('height', '18');
 			img.setAttribute('border', '0');
 				
 			fbBtn.appendChild(img);
@@ -1126,6 +1128,8 @@ var EmbedDialog = function(editorUi, result, timeout, ignoreSize, previewFn)
 			
 			var img = document.createElement('img');
 			img.setAttribute('src', Editor.tweetImage);
+			img.setAttribute('width', '18');
+			img.setAttribute('height', '18');
 			img.setAttribute('border', '0');
 			img.style.marginBottom = '5px'
 	

+ 9 - 2
war/js/diagramly/EditorUi.js

@@ -4990,7 +4990,7 @@
 							encodeURIComponent('I\'ve just copy and pasted my Lucidchart diagram into www.draw.io') +
 							'" onclick="javascript:window.open(this.href, \'\', \'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,' +
 							'left=\'+((screen.width-640)/2)+\',top=\'+((screen.height-280)/3)+\',height=280,width=640\');return false;"\'>' +
-							'<img border="0" align="absmiddle" style="margin-top:-2px;padding-right:8px;" src="' +
+							'<img border="0" width="18" height="18" align="absmiddle" style="margin-top:-2px;padding-right:8px;" src="' +
 							Editor.tweetImage + '"/>Paste from Lucidchart?</a>');
 						this.updateAd(this.adsHtml.length - 1, 200);
 						this.lucidchartTweetShown = true;
@@ -7623,10 +7623,17 @@
 
 		if (data != null && data.length > 0)
 		{
-			if (currentFile == null || !currentFile.isModified())
+			if (currentFile == null || (!currentFile.isModified() &&
+				(mxClient.IS_CHROMEAPP || EditorUi.isElectronApp)))
 			{
 				fn();
 			}
+			else if ((mxClient.IS_CHROMEAPP || EditorUi.isElectronApp) &&
+				currentFile != null && currentFile.isModified())
+			{
+				this.confirm(mxResources.get('allChangesLost'), null, fn,
+					mxResources.get('cancel'), mxResources.get('discardChanges'));
+			}
 			else
 			{
 				window.openFile = new OpenFile(function()

+ 29 - 103
war/js/diagramly/Extensions.js

@@ -18,7 +18,28 @@
 	var c = "fillColor=#036897;strokeColor=#ffffff;";
 	var s = "shape=mxgraph.";
 	var ss = "strokeColor=none;shape=mxgraph.";
-	
+
+	var edgeStyleMap = {
+			//Standard
+						'None': 'none',
+						'Arrow': 'block;endFill=1',
+						'Hollow Arrow': 'block;endFill=0',
+						'Open Arrow': 'open;',
+						'CFN ERD Zero Or More Arrow': 'ERzeroToMany;startSize=10',
+						'CFN ERD One Or More Arrow': 'ERoneToMany;startSize=10',
+						'CFN ERD Many Arrow': 'ERmany;startSize=10',
+						'CFN ERD Exactly One Arrow': 'ERmandOne;startSize=10',
+						'CFN ERD Zero Or One Arrow': 'ERzeroToOne;startSize=10',
+						'CFN ERD One Arrow': 'ERone;startSize=16',
+						'Generalization': 'block;endFill=0;startSize=12',
+						'Big Open Arrow': 'open;startSize=10',
+						'Asynch1': 'openAsync;flipH=1;startSize=10',
+						'Asynch2': 'openAsync;startSize=10',
+						'Aggregation': 'diamond;endFill=0;startSize=16',
+						'Composition': 'diamond;endFill=1;startSize=16',
+						'BlockEnd': 'none;endFill=1;startSize=16'
+	};
+
 	// TODO: Add shape mappings
 	// FIXME: Factor our common strings, eg. shape=mxgraph. to save space
 	var styleMap = {
@@ -2050,8 +2071,6 @@
 		var text = (props.Text != null) ? props.Text :
 			((props.Value != null) ? props.Value :
 			props.Lane_0);
-		
-		
 		var text2 = null;
 		
 		if (text == null && props.State != null)
@@ -2130,7 +2149,7 @@
 									isV = true;
 
 									var fontSize = currM.v;
-									fontSize = 1 + Math.round(fontSize / 1.8);
+									fontSize = Math.round(fontSize * scale);
 									cell.style += 'fontSize=' + fontSize + ';';
 								}
 							}
@@ -2460,7 +2479,7 @@
 				}
 				
 				// Adds styles
-				cell.style += createStyle(mxConstants.STYLE_STROKEWIDTH, p.LineWidth, '1');
+				cell.style += createStyle(mxConstants.STYLE_STROKEWIDTH, parseFloat(p.LineWidth) * scale, '1');
 				
 //				stencils with hardcoded stroke color
 				var hardStroke = ['VennPlainColor1', 'VennPlainColor2', 'VennPlainColor3', 'VennPlainColor4', 'VennPlainColor5', 'VennPlainColor6', 'VennPlainColor7', 'VennPlainColor8',
@@ -2620,94 +2639,16 @@
 
 					if (p.Endpoint1.Style != null)
 					{
-						var s = p.Endpoint1.Style;
-						
-						if (s == 'None')
-						{
-							cell.style += 'startArrow=none;';
-						}
-						else if (s == 'Arrow')
-						{
-							cell.style += 'startArrow=block;endFill=1;';
-						}
-						else if (s == 'Hollow Arrow')
-						{
-							cell.style += 'startArrow=block;endFill=0;';
-						}
-						else if (s == 'Open Arrow')
-						{
-							cell.style += 'startArrow=open;';
-						}
-						else if (s == 'CFN ERD Zero Or More Arrow')
-						{
-							cell.style += 'startArrow=ERzeroToMany;startSize=10;';
-						}
-						else if (s == 'CFN ERD One Or More Arrow')
-						{
-							cell.style += 'startArrow=ERoneToMany;startSize=10;';
-						}
-						else if (s == 'CFN ERD Many Arrow')
-						{
-							cell.style += 'startArrow=ERmany;startSize=10;';
-						}
-						else if (s == 'CFN ERD Exactly One Arrow')
-						{
-							cell.style += 'startArrow=ERmandOne;startSize=10;';
-						}
-						else if (s == 'CFN ERD Zero Or One Arrow')
-						{
-							cell.style += 'startArrow=ERzeroToOne;startSize=10;';
-						}
-						else if (s == 'CFN ERD One Arrow')
-						{
-							cell.style += 'startArrow=ERone;startSize=10;';
-						}
+						cell.style += 'startArrow=' + edgeStyleMap[p.Endpoint1.Style] + ';';
 					}
 					
 					if (p.Endpoint2.Style != null)
 					{
-						var s = p.Endpoint2.Style;
+						var tmp = edgeStyleMap[p.Endpoint2.Style];
 						
-						if (s == 'None')
-						{
-							cell.style += 'endArrow=none;';
-						}
-						else if (s == 'Arrow')
-						{
-							cell.style += 'endArrow=block;endFill=1;';
-						}
-						else if (s == 'Hollow Arrow')
-						{
-							cell.style += 'endArrow=block;endFill=0;';
-						}
-						else if (s == 'Open Arrow')
-						{
-							cell.style += 'endArrow=open;';
-						}
-						else if (s == 'CFN ERD Zero Or More Arrow')
-						{
-							cell.style += 'endArrow=ERzeroToMany;endSize=10;';
-						}
-						else if (s == 'CFN ERD One Or More Arrow')
-						{
-							cell.style += 'endArrow=ERoneToMany;endSize=10;';
-						}
-						else if (s == 'CFN ERD Many Arrow')
-						{
-							cell.style += 'endArrow=ERmany;endSize=10;';
-						}
-						else if (s == 'CFN ERD Exactly One Arrow')
-						{
-							cell.style += 'endArrow=ERmandOne;endSize=10;';
-						}
-						else if (s == 'CFN ERD Zero Or One Arrow')
-						{
-							cell.style += 'endArrow=ERzeroToOne;endSize=10;';
-						}
-						else if (s == 'CFN ERD One Arrow')
-						{
-							cell.style += 'endArrow=ERone;endSize=10;';
-						}
+						tmp = tmp.replace(/startSize/g, 'endSize');
+						
+						cell.style += 'endArrow=' + tmp + ';';
 					}
 					
 					// Anchor points and arrows
@@ -2812,21 +2753,6 @@
 					((source) ? 'exitY' : 'entryY') + '=' + endpoint.LinkY + ';' +
 					((source) ? 'exitPerimeter' : 'entryPerimeter') + '=0;';
 			}
-				
-			if (endpoint.Style == 'Arrow')
-			{
-				cell.style += ((source) ? 'startArrow' : 'endArrow') + '=block;';
-			}
-			else if (endpoint.Style == 'Hollow Arrow')
-			{
-				cell.style += ((source) ? 'startArrow' : 'endArrow') + '=block;';
-				cell.style += ((source) ? 'startFill' : 'endFill') + '=0;';
-			}
-			else if (endpoint.Style == 'Open Arrow')
-			{
-				cell.style += ((source) ? 'startArrow' : 'endArrow') + '=open;';
-				cell.style += ((source) ? 'startSize' : 'endSize') + '=12;';
-			}
 		}
 	};
 

Різницю між файлами не показано, бо вона завелика
+ 4 - 4
war/js/embed-static.min.js


Різницю між файлами не показано, бо вона завелика
+ 59 - 61
war/js/extensions.min.js


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

@@ -373,7 +373,8 @@
 	{
 		if (mxUtils.getValue(this.style, 'boundedLbl', false))
 		{
-			return new mxRectangle(0, 0, 0, parseFloat(mxUtils.getValue(this.style, 'size', this.size)) * rect.height);
+			return new mxRectangle(0, 0, 0, parseFloat(mxUtils.getValue(
+				this.style, 'size', this.size)) * rect.height);
 		}
 		
 		return null;

Різницю між файлами не показано, бо вона завелика
+ 4 - 4
war/js/reader.min.js


Різницю між файлами не показано, бо вона завелика
+ 56 - 56
war/js/viewer.min.js


+ 1 - 1
war/styles/grapheditor.css

@@ -413,7 +413,7 @@ div.mxWindow .geButton {
 	box-sizing:border-box;
 	width:100%;
 	height:100%;
-	padding:11px 38px 11px 38px;
+	padding:12px 38px 11px 38px;
 	white-space:nowrap;
 }
 .geHsplit {