소스 검색

9.0.1 release

David Benson [draw.io] 7 년 전
부모
커밋
6612ce8d07

+ 4 - 0
ChangeLog

@@ -1,3 +1,7 @@
+31-JUL-2018: 9.0.1
+
+- Fixes insert to GitHub with URL parameter
+
 28-JUL-2018: 9.0.0
 
 - Disables persisted default styles

+ 1 - 1
VERSION

@@ -1 +1 @@
-9.0.0
+9.0.1

+ 13 - 0
etc/docker/Dockerfile

@@ -0,0 +1,13 @@
+FROM frekele/ant:1.10.3-jdk8 as  BUILD
+RUN mkdir /usr/build
+COPY src /usr/build/src
+COPY etc /usr/build/etc
+COPY war /usr/build/war
+COPY VERSION /usr/build
+RUN cd /usr/build/etc/build/
+RUN ant -file /usr/build/etc/build/build.xml war
+
+FROM tomcat:9.0 as TARGET
+COPY --from=BUILD /usr/build/build/draw.war  /usr/local/tomcat/webapps/
+EXPOSE 8080
+CMD ["catalina.sh", "run"]

+ 9 - 0
etc/docker/README.md

@@ -0,0 +1,9 @@
+Docker
+------
+After successful checkout, from the project directory run,
+
+```bash
+docker build -t draw .
+docker run -d -p 8888:8080 draw
+```
+Now the app will be accessible at `http://localhost:8888/draw/?https=0`

+ 1 - 1
etc/vsd/VsdConverter/VsdConverter/Controllers/ConverterController.cs

@@ -72,7 +72,7 @@ namespace VsdConverter.Controllers
             //TODO is this secure or it only returns the header?
             String origin = Request.GetCorsRequestContext().Origin;
 
-            if (!origin.EndsWith("draw.io") && !origin.EndsWith("jgraph.com"))
+            if (!origin.EndsWith(".draw.io") && !origin.EndsWith(".jgraph.com") && !origin.EndsWith(".quipelements.com"))
             {
                 throw new HttpResponseException(HttpStatusCode.Forbidden);
             }

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

@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 07/28/2018 12:14 PM
+# 07/31/2018 05:24 PM
 
 app.html
 index.html?offline=1

+ 8 - 8
src/main/webapp/index.html

@@ -391,16 +391,16 @@
 	</div>
 	<table align="center" height="100%">
 		<tr>
-			<td id="geFooterItem2" align="center" style="width:280px;transition: all 1s ease;">
-				<a title="Quick Start Video" href="https://www.youtube.com/watch?v=Z0D96ZikMkc" target="_blank">
+			<td id="geFooterItem1" align="center" style="width:280px;transition: all 1s ease;">
+				<a title="GitHub" href="https://github.com/jgraph/drawio" target="_blank">
 					<img border="0" align="absmiddle" style="margin-top:-4px;padding-right:10px;"
-						width="26" height="20" src="images/youtube.png"/>Quick Start Video</a>
+						width="24" height="24" src="images/glyphicons_github.png"/>Fork us on GitHub</a>
 			</td>
-			<td id="geFooterItem1" align="center" style="width:260px;">
-				<a id="geFooterLink1" title="#1 Rated Confluence Add-on" target="_blank"
-					href="https://about.draw.io/integrations/confluence-integration/">
-					<img border="0" width="24" height="24" align="absmiddle" style="padding-right:10px;"
-						src="images/logo-confluence.png"/>#1 Rated Confluence App
+			<td id="geFooterItem2" align="center" style="width:260px;">
+				<a id="geFooterLink1" title="Download draw.io Desktop" target="_blank"
+					href="https://get.draw.io/">
+					<img border="0" align="absmiddle" style="margin-top:-2px;padding-right:10px;"
+					width="26" src="images/drawlogo48.png">Download draw.io Desktop
 				</a>
 			</td>
 		</tr>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 748 - 748
src/main/webapp/js/app.min.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 879 - 880
src/main/webapp/js/atlas-viewer.min.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 280 - 280
src/main/webapp/js/atlas.min.js


+ 70 - 59
src/main/webapp/js/diagramly/App.js

@@ -3132,82 +3132,93 @@ App.prototype.createFile = function(title, data, libs, mode, done, replace, fold
 			}
 		});
 		
-		if (mode == App.MODE_GOOGLE && this.drive != null)
-		{
-			folderId = (this.stateArg != null) ? this.stateArg.folderId : folderId;
-
-			this.drive.insertFile(title, data, folderId, mxUtils.bind(this, function(file)
-			{
-				complete();
-				this.fileCreated(file, libs, replace, done);
-			}), error);
-		}
-		else if (mode == App.MODE_GITHUB && this.gitHub != null)
-		{
-			this.gitHub.insertFile(title, data, mxUtils.bind(this, function(file)
-			{
-				complete();
-				this.fileCreated(file, libs, replace, done);
-			}), error, false, folderId);
-		}
-		else if (mode == App.MODE_TRELLO && this.trello != null)
+		try
 		{
-			this.trello.insertFile(title, data, mxUtils.bind(this, function(file)
+			if (mode == App.MODE_GOOGLE && this.drive != null)
 			{
-				complete();
-				this.fileCreated(file, libs, replace, done);
-			}), error, false, folderId);
-		}
-		else if (mode == App.MODE_DROPBOX && this.dropbox != null)
-		{
-			this.dropbox.insertFile(title, data, mxUtils.bind(this, function(file)
+				if (folderId == null && this.stateArg != null && this.stateArg.folderId != null)
+				{
+					folderId = this.stateArg.folderId;
+				}
+	
+				this.drive.insertFile(title, data, folderId, mxUtils.bind(this, function(file)
+				{
+					complete();
+					this.fileCreated(file, libs, replace, done);
+				}), error);
+			}
+			else if (mode == App.MODE_GITHUB && this.gitHub != null)
 			{
-				complete();
-				this.fileCreated(file, libs, replace, done);
-			}), error);
-		}
-		else if (mode == App.MODE_ONEDRIVE && this.oneDrive != null)
-		{
-			this.oneDrive.insertFile(title, data, mxUtils.bind(this, function(file)
+				this.gitHub.insertFile(title, data, mxUtils.bind(this, function(file)
+				{
+					complete();
+					this.fileCreated(file, libs, replace, done);
+				}), error, false, folderId);
+			}
+			else if (mode == App.MODE_TRELLO && this.trello != null)
 			{
-				complete();
-				this.fileCreated(file, libs, replace, done);
-			}), error, false, folderId);
-		}
-		else if (mode == App.MODE_BROWSER)
-		{
-			complete();
-			
-			var fn = mxUtils.bind(this, function()
+				this.trello.insertFile(title, data, mxUtils.bind(this, function(file)
+				{
+					complete();
+					this.fileCreated(file, libs, replace, done);
+				}), error, false, folderId);
+			}
+			else if (mode == App.MODE_DROPBOX && this.dropbox != null)
 			{
-				var file = new StorageFile(this, data, title);
-				
-				// Inserts data into local storage
-				file.saveFile(title, false, mxUtils.bind(this, function()
+				this.dropbox.insertFile(title, data, mxUtils.bind(this, function(file)
 				{
+					complete();
 					this.fileCreated(file, libs, replace, done);
 				}), error);
-			});
-			
-			if (localStorage.getItem(title) == null)
+			}
+			else if (mode == App.MODE_ONEDRIVE && this.oneDrive != null)
 			{
-				fn();
+				this.oneDrive.insertFile(title, data, mxUtils.bind(this, function(file)
+				{
+					complete();
+					this.fileCreated(file, libs, replace, done);
+				}), error, false, folderId);
 			}
-			else
+			else if (mode == App.MODE_BROWSER)
 			{
-				this.confirm(mxResources.get('replaceIt', [title]), fn, mxUtils.bind(this, function()
+				complete();
+				
+				var fn = mxUtils.bind(this, function()
 				{
-					if (this.getCurrentFile() == null && this.dialog == null)
+					var file = new StorageFile(this, data, title);
+					
+					// Inserts data into local storage
+					file.saveFile(title, false, mxUtils.bind(this, function()
 					{
-						this.showSplash();
-					}
-				}));
+						this.fileCreated(file, libs, replace, done);
+					}), error);
+				});
+				
+				if (localStorage.getItem(title) == null)
+				{
+					fn();
+				}
+				else
+				{
+					this.confirm(mxResources.get('replaceIt', [title]), fn, mxUtils.bind(this, function()
+					{
+						if (this.getCurrentFile() == null && this.dialog == null)
+						{
+							this.showSplash();
+						}
+					}));
+				}
+			}
+			else
+			{
+				complete();
+				this.fileCreated(new LocalFile(this, data, title, mode == null), libs, replace, done);
 			}
 		}
-		else
+		catch (e)
 		{
 			complete();
-			this.fileCreated(new LocalFile(this, data, title, mode == null), libs, replace, done);
+			this.handleError(e);	
 		}
 	}
 };

+ 171 - 159
src/main/webapp/js/diagramly/Dialogs.js

@@ -624,7 +624,7 @@ var SplashDialog = function(editorUi)
 			
 			var link = document.createElement('a');
 			link.setAttribute('href', 'javascript:void(0)');
-			link.style.display = 'block';
+			link.style.display = 'inline-block';
 			link.style.marginTop = '6px';
 			mxUtils.write(link, mxResources.get('signOut'));
 
@@ -649,7 +649,7 @@ var SplashDialog = function(editorUi)
 			
 			var link = document.createElement('a');
 			link.setAttribute('href', 'javascript:void(0)');
-			link.style.display = 'block';
+			link.style.display = 'inline-block';
 			link.style.marginTop = '6px';
 			mxUtils.write(link, mxResources.get('changeUser') + ' (' + driveUser.displayName + ')');
 
@@ -721,9 +721,10 @@ var SplashDialog = function(editorUi)
 			});
 		}
 		
+		mxUtils.br(buttons);
 		var link = document.createElement('a');
 		link.setAttribute('href', 'javascript:void(0)');
-		link.style.display = 'block';
+		link.style.display = 'inline-block';
 		link.style.marginTop = '8px';
 		mxUtils.write(link, mxResources.get('notUsingService', [storage]));
 		
@@ -2012,170 +2013,183 @@ var ParseDialog = function(editorUi, title, defaultType)
 		{
 			var plantUmlServerUrl = (type == 'plantUmlTxt') ? PLANT_URL + '/txt/' :
 				((type == 'plantUmlPng') ? PLANT_URL + '/png/' : PLANT_URL + '/svg/');
-	    	var graph = editorUi.editor.graph;
-	    	
-	    	// TODO: Change server to return base64 & accept POST request
-	    	if (editorUi.spinner.spin(document.body, mxResources.get('inserting')))
-	    	{
-    			function encode64(data) {
-				r = "";
-				for (i=0; i<data.length; i+=3) {
-			 		if (i+2==data.length) {
-						r +=append3bytes(data.charCodeAt(i), data.charCodeAt(i+1), 0);
-					} else if (i+1==data.length) {
-						r += append3bytes(data.charCodeAt(i), 0, 0);
-					} else {
-						r += append3bytes(data.charCodeAt(i), data.charCodeAt(i+1),
-							data.charCodeAt(i+2));
-					}
-				}
-				return r;
-			}
-			
-			function append3bytes(b1, b2, b3)
-			{
-				c1 = b1 >> 2;
-				c2 = ((b1 & 0x3) << 4) | (b2 >> 4);
-				c3 = ((b2 & 0xF) << 2) | (b3 >> 6);
-				c4 = b3 & 0x3F;
-				r = "";
-				r += encode6bit(c1 & 0x3F);
-				r += encode6bit(c2 & 0x3F);
-				r += encode6bit(c3 & 0x3F);
-				r += encode6bit(c4 & 0x3F);
-				return r;
-			}
-			
-			function encode6bit(b)
+			var graph = editorUi.editor.graph;
+
+			// TODO: Change server to return base64 and accept POST request
+			if (editorUi.spinner.spin(document.body, mxResources.get('inserting')))
 			{
-				if (b < 10) {
-			 		return String.fromCharCode(48 + b);
-				}
-				b -= 10;
-				if (b < 26) {
-			 		return String.fromCharCode(65 + b);
-				}
-				b -= 26;
-				if (b < 26) {
-			 		return String.fromCharCode(97 + b);
-				}
-				b -= 26;
-				if (b == 0) {
-			 		return '-';
+				function encode64(data)
+				{
+					r = "";
+					
+					for (i = 0; i < data.length; i += 3)
+					{
+						if (i + 2 == data.length)
+						{
+							r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1), 0);
+						}
+						else if (i + 1 == data.length)
+						{
+							r += append3bytes(data.charCodeAt(i), 0, 0);
+						}
+						else
+						{
+							r += append3bytes(data.charCodeAt(i), data.charCodeAt(i + 1),
+								data.charCodeAt(i + 2));
+						}
+					}
+					
+					return r;
 				}
-				if (b == 1) {
-			 		return '_';
+
+				function append3bytes(b1, b2, b3)
+				{
+					c1 = b1 >> 2;
+					c2 = ((b1 & 0x3) << 4) | (b2 >> 4);
+					c3 = ((b2 & 0xF) << 2) | (b3 >> 6);
+					c4 = b3 & 0x3F;
+					r = "";
+					r += encode6bit(c1 & 0x3F);
+					r += encode6bit(c2 & 0x3F);
+					r += encode6bit(c3 & 0x3F);
+					r += encode6bit(c4 & 0x3F);
+					
+					return r;
 				}
-				return '?';
-			}
-		
-			// TODO: Remove unescape, use btoa for compatibility with graph.compress
-			function compress(s)
-			{
-				return encode64(graph.bytesToString(pako.deflateRaw(unescape(encodeURIComponent(s)))));
-			};
-		
-			var xhr = new XMLHttpRequest();
-			xhr.open('GET', plantUmlServerUrl + compress(text), true);
-			
-			if (type != 'plantUmlTxt')
-			{
-				xhr.responseType = 'blob';
-			}
-			
-			xhr.onload = function(e) 
-			{
-			  if (this.status >= 200 && this.status < 300)
-			  {
-				if (type == 'plantUmlTxt')
+
+				function encode6bit(b)
 				{
-					editorUi.spinner.stop();
+					if (b < 10)
+					{
+						return String.fromCharCode(48 + b);
+					}
 					
-		    			graph.getModel().beginUpdate();
-					try
+					b -= 10;
+					
+					if (b < 26)
 					{
-			    			cell = graph.insertVertex(null, null, '<pre>' + this.response + '</pre>',
-			    				insertPoint.x, insertPoint.y, 1, 1, 'text;html=1;overflow=fill;');
-			    			graph.updateCellSize(cell, true);
+						return String.fromCharCode(65 + b);
 					}
-					finally
+					
+					b -= 26;
+					
+					if (b < 26)
 					{
-						graph.getModel().endUpdate();
+						return String.fromCharCode(97 + b);
 					}
 					
-					graph.setSelectionCell(cell);
-		           	graph.scrollCellToVisible(graph.getSelectionCell());
+					b -= 26;
+					
+					if (b == 0)
+					{
+						return '-';
+					}
+					
+					if (b == 1)
+					{
+						return '_';
+					}
+					
+					return '?';
 				}
-				else
+
+				// TODO: Remove unescape, use btoa for compatibility with graph.compress
+				function compress(s)
 				{
-				    var reader = new FileReader();
-				    reader.readAsDataURL(this.response);
-				    
-				    reader.onload = function(e) 
-				    {
-					    	var img = new Image();
-					    	
-					    	img.onload = function()
-					    	{
-					    		editorUi.spinner.stop();
-					    		var w = img.width;
-					    		var h = img.height;
-					    		
-					    		// Workaround for 0 image size in IE11
-					    		if (w == 0 && h == 0)
-					    		{
-						    		var data = e.target.result;
-						    		var comma = data.indexOf(',');
-			    					var svgText = decodeURIComponent(escape(atob(data.substring(comma + 1))));
-			    					var root = mxUtils.parseXml(svgText);
-		    						var svgs = root.getElementsByTagName('svg');
-		    						
-		    						if (svgs.length > 0)
-		    						{
-		    							w = parseFloat(svgs[0].getAttribute('width'));
-		    							h = parseFloat(svgs[0].getAttribute('height'));
-		    						}
-					    		}
-					    		
-					    		graph.getModel().beginUpdate();
-							try
+					return encode64(graph.bytesToString(
+						pako.deflateRaw(unescape(
+						encodeURIComponent(s)))));
+				};
+
+				var xhr = new XMLHttpRequest();
+				xhr.open('GET', plantUmlServerUrl + compress(text), true);
+
+				if (type != 'plantUmlTxt')
+				{
+					xhr.responseType = 'blob';
+				}
+
+				xhr.onload = function(e)
+				{
+					if (this.status >= 200 && this.status < 300)
+					{
+						if (type == 'plantUmlTxt')
+						{
+							editorUi.spinner.stop();
+							graph.setSelectionCell(editorUi.insertAsPreText(
+								this.response, insertPoint.x, insertPoint.y));
+							graph.scrollCellToVisible(graph.getSelectionCell());
+						}
+						else
+						{
+							var reader = new FileReader();
+							reader.readAsDataURL(this.response);
+
+							reader.onloadend = function(e)
 							{
-					    			cell = graph.insertVertex(null, null, text, insertPoint.x, insertPoint.y,
-									w, h, 'shape=image;noLabel=1;verticalAlign=top;aspect=fixed;imageAspect=0;' +
-									'image=' + editorUi.convertDataUri(e.target.result) + ';');
-							}
-							finally
+								var img = new Image();
+
+								img.onload = function()
+								{
+									editorUi.spinner.stop();
+									var w = img.width;
+									var h = img.height;
+
+									// Workaround for 0 image size in IE11
+									if (w == 0 && h == 0)
+									{
+										var data = reader.result;
+										var comma = data.indexOf(',');
+										var svgText = decodeURIComponent(escape(atob(data.substring(comma + 1))));
+										var root = mxUtils.parseXml(svgText);
+										var svgs = root.getElementsByTagName('svg');
+
+										if (svgs.length > 0)
+										{
+											w = parseFloat(svgs[0].getAttribute('width'));
+											h = parseFloat(svgs[0].getAttribute('height'));
+										}
+									}
+
+									graph.getModel().beginUpdate();
+									try
+									{
+										cell = graph.insertVertex(null, null, text, insertPoint.x, insertPoint.y,
+											w, h, 'shape=image;noLabel=1;verticalAlign=top;aspect=fixed;imageAspect=0;' +
+											'image=' + editorUi.convertDataUri(reader.result) + ';');
+									}
+									finally
+									{
+										graph.getModel().endUpdate();
+									}
+
+									graph.setSelectionCell(cell);
+									graph.scrollCellToVisible(graph.getSelectionCell());
+								};
+
+								img.src = reader.result;
+							};
+
+							reader.onerror = function(e)
 							{
-								graph.getModel().endUpdate();
-							}
-							
-							graph.setSelectionCell(cell);
-				           	graph.scrollCellToVisible(graph.getSelectionCell());
-					    	};
-					    	
-					    	img.src = e.target.result;
-				    };
-				    
-				    reader.onerror = function(e)
-				    {
-				    		editorUi.handleError(e);
-				    };
-				}
-			  }
-			  else 
-			  {
-				  editorUi.spinner.stop();
-				  editorUi.handleError(e);
-			  }
-			};
-			
-			xhr.onerror = function(e)
-			{
-				editorUi.handleError(e);
-			};
-			 
-			xhr.send();
-    	  }
+								editorUi.handleError(e);
+							};
+						}
+					}
+					else
+					{
+						editorUi.spinner.stop();
+						editorUi.handleError(e);
+					}
+				};
+
+				xhr.onerror = function(e)
+				{
+					editorUi.handleError(e);
+				};
+
+				xhr.send();
+			}
 		}
 		else if (type == 'table')
 		{
@@ -2958,18 +2972,16 @@ var NewDialog = function(editorUi, compact, showName, callback, createOnly, canc
 				
 			if (title != null && title.length > 0)
 			{
-				var tempMode = (editorUi.mode == App.MODE_ONEDRIVE || editorUi.mode == App.MODE_TRELLO ||
-					(editorUi.mode == App.MODE_GOOGLE && (editorUi.stateArg == null ||
-					editorUi.stateArg.folderId == null))) ? editorUi.mode : null;
-				
-				editorUi.pickFolder(tempMode, function(folderId)
+				editorUi.pickFolder(editorUi.mode, function(folderId)
 				{
 					editorUi.createFile(title, templateXml, (templateLibs != null &&
 						templateLibs.length > 0) ? templateLibs : null, null, function()
 					{
 						editorUi.hideDialog();
 					}, null, folderId);
-				});
+				}, editorUi.mode != App.MODE_GOOGLE ||
+					editorUi.stateArg == null ||
+					editorUi.stateArg.folderId == null);
 			}
 		}
 	};

+ 24 - 1
src/main/webapp/js/diagramly/EditorUi.js

@@ -5975,6 +5975,29 @@
 		}
 	};
 
+	/**
+	 * Inserts the given text as a preformatted HTML text.
+	 */
+	EditorUi.prototype.insertAsPreText = function(text, x, y)
+	{
+		var graph = this.editor.graph;
+		var cell = null;
+		
+		graph.getModel().beginUpdate();
+		try
+		{
+			cell = graph.insertVertex(null, null, '<pre>' + text + '</pre>',
+				x, y, 1, 1, 'text;html=1;align=center;verticalAlign=middle;');
+			graph.updateCellSize(cell, true);
+		}
+		finally
+		{
+			graph.getModel().endUpdate();
+		}
+
+		return cell;
+	};
+
 	/**
 	 * Imports the given XML into the existing diagram.
 	 * TODO: Make this function asynchronous
@@ -7194,7 +7217,7 @@
 	var editorUiInit = EditorUi.prototype.init;
 	EditorUi.prototype.init = function()
 	{
-		mxStencilRegistry.allowEval = !this.isOfflineApp();
+		mxStencilRegistry.allowEval = mxStencilRegistry.allowEval && !this.isOfflineApp();
 		
 		// Must be set before UI is created in superclass
 		if (typeof window.mxSettings !== 'undefined')

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

@@ -23,7 +23,7 @@ EditorUi.initMinimalTheme = function()
            'div.geDialog { border-radius: 5px; }' +
            'html body div.geDialog button.geBigButton { color: #fff !important; }' +
            '.mxWindow button, .geDialog select, .mxWindow select { display:inline-block; }' +
-           '.mxWindow .geColorBtn, .geDialog .geColorBtn { background: none !important; }' +
+           'html body .mxWindow .geColorBtn, html body .geDialog .geColorBtn { background: none; }' +
            'html body div.diagramContainer button, html body .mxWindow button, html body .geDialog button { min-width: 0px; border-radius: 5px; color: #353535 !important; border-color: rgb(216, 216, 216); }' +
            'div.diagramContainer button.geBtn, .mxWindow button.geBtn, .geDialog button.geBtn { min-width:72px; font-weight: 600; background: none; }' +
            'div.diagramContainer button.geBtn:hover, .mxWindow button.geBtn:hover, .geDialog button.geBtn:hover { box-shadow: none; border-color: rgb(216, 216, 216); }' +

+ 0 - 5
src/main/webapp/js/diagramly/Trees.js

@@ -613,11 +613,6 @@
 						-clones[1].geometry.height - spacing;
 				}
 				
-				if (dir == mxConstants.DIRECTION_WEST)
-				{
-					clones[1].geometry.x = cell.geometry.x + cell.geometry.width - clones[1].geometry.width; 
-				}
-				
 				if (graph.view.currentRoot != parent)
 				{
 					clones[1].geometry.x -= pgeo.x;

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 10 - 11
src/main/webapp/js/embed-static.min.js


+ 15 - 13
src/main/webapp/js/mxgraph/Graph.js

@@ -3159,10 +3159,12 @@ HoverIcons.prototype.init = function()
 	    	}
 	    	else if (!this.graph.isMouseDown && !mxEvent.isTouchEvent(evt))
 	    	{
-	    		this.update(this.getState(me.getState()), me.getGraphX(), me.getGraphY());
+	    		this.update(this.getState(me.getState()),
+	    			me.getGraphX(), me.getGraphY());
 	    	}
 	    	
-	    	if (this.graph.connectionHandler != null && this.graph.connectionHandler.shape != null)
+	    	if (this.graph.connectionHandler != null &&
+	    		this.graph.connectionHandler.shape != null)
 	    	{
 	    		connectionHandlerActive = true;
 	    	}
@@ -3170,34 +3172,34 @@ HoverIcons.prototype.init = function()
 	    mouseUp: mxUtils.bind(this, function(sender, me)
 	    {
 	    	var evt = me.getEvent();
+	    	var pt = mxUtils.convertPoint(this.graph.container,
+				mxEvent.getClientX(evt), mxEvent.getClientY(evt))
 	    	
 	    	if (this.isResetEvent(evt))
 	    	{
 	    		this.reset();
 	    	}
-	    	else if (this.isActive() && this.mouseDownPoint != null &&
-	    		Math.abs(me.getGraphX() - this.mouseDownPoint.x) < this.graph.tolerance &&
-		    	Math.abs(me.getGraphY() - this.mouseDownPoint.y) < this.graph.tolerance)
+	    	else if (this.isActive() && !connectionHandlerActive &&
+	    		this.mouseDownPoint != null)
 	    	{
-	    		// Executes click event on highlighted arrow
-	    		if (!connectionHandlerActive)
-	    		{
-	    			this.click(this.currentState, this.getDirection(), me);
-	    		}
+    			this.click(this.currentState, this.getDirection(), me);
 	    	}
 	    	else if (this.isActive())
 	    	{
 	    		// Selects target vertex after drag and clone if not only new edge was inserted
-	    		if (this.graph.getSelectionCount() != 1 || !this.graph.model.isEdge(this.graph.getSelectionCell()))
+	    		if (this.graph.getSelectionCount() != 1 || !this.graph.model.isEdge(
+	    			this.graph.getSelectionCell()))
 	    		{
-	    			this.update(this.getState(this.graph.view.getState(this.graph.getCellAt(me.getGraphX(), me.getGraphY()))));
+	    			this.update(this.getState(this.graph.view.getState(
+	    				this.graph.getCellAt(me.getGraphX(), me.getGraphY()))));
 	    		}
 	    		else
 	    		{
 	    			this.reset();
 	    		}
 	    	}
-	    	else if (mxEvent.isTouchEvent(evt) || (this.bbox != null && mxUtils.contains(this.bbox, me.getGraphX(), me.getGraphY())))
+	    	else if (mxEvent.isTouchEvent(evt) || (this.bbox != null &&
+	    		mxUtils.contains(this.bbox, me.getGraphX(), me.getGraphY())))
 	    	{
 	    		// Shows existing hover icons if inside bounding box
 	    		this.setDisplay('');

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 10 - 11
src/main/webapp/js/reader.min.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 879 - 880
src/main/webapp/js/viewer.min.js