Browse Source

10.4.7 release

Gaudenz Alder 6 years ago
parent
commit
ab021d6bbc

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+15-MAR-2019: 10.4.7
+
+- Realtime warning can be permanently closed
+- Ignores read-only files in auto conversion
+- Adds new issue viewer for Jira cloud
+- Fixes Atlas theme in Safari
+
 14-MAR-2019: 10.4.6
 
 - Adds warning dialog for failed autosave after 10 minutes

+ 1 - 1
VERSION

@@ -1 +1 @@
-10.4.6
+10.4.7

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

@@ -1,7 +1,7 @@
 CACHE MANIFEST
 
 # THIS FILE WAS GENERATED. DO NOT MODIFY!
-# 03/14/2019 11:48 AM
+# 03/15/2019 10:34 AM
 
 app.html
 index.html?offline=1

File diff suppressed because it is too large
+ 765 - 763
src/main/webapp/js/app.min.js


+ 74 - 48
src/main/webapp/js/diagramly/App.js

@@ -1041,46 +1041,56 @@ App.prototype.init = function()
 						this.restoreLibraries();
 						this.checkLicense();
 						
-						this.drive.checkRealtimeFiles(mxUtils.bind(this, function()
+						if (!isLocalStorage || mxSettings.settings == null || mxSettings.settings.closeRealtimeWarning == null)
 						{
-							var footer = document.createElement('div');
-							footer.style.cssText = 'position:absolute;bottom:0px;max-width:90%;padding:10px;padding-right:26px;' +
-								'white-space:nowrap;left:50%;bottom:2px;';
-							footer.className = 'geStatusAlert';
-							
-							mxUtils.setPrefixedStyle(footer.style, 'transform', 'translate(-50%,110%)');
-							mxUtils.setPrefixedStyle(footer.style, 'transition', 'all 1s ease');
-							footer.style.whiteSpace = 'nowrap';
-							footer.innerHTML = '<a href="https://desk.draw.io/support/solutions/articles/16000092210" ' +
-								'target="_blank" style="display:inline;text-decoration:none;font-weight:700;font-size:13px;opacity:1;">' +
-								'<img src="' + this.editor.graph.warningImage.src + '" border="0" style="margin-top:-4px;margin-right:2px;" valign="middle"/>&nbsp;' +
-								'You need to take action to convert legacy files. Click here.&nbsp;' +
-								'<img src="' + this.editor.graph.warningImage.src + '" border="0" style="margin-top:-4px;margin-left:2px;" valign="middle"/></a>';
-							
-							var img = document.createElement('img');
-							
-							img.setAttribute('src', Dialog.prototype.closeImage);
-							img.setAttribute('title', mxResources.get('close'));
-							img.style.position = 'absolute';
-							img.style.cursor = 'pointer';
-							img.style.right = '10px';
-							img.style.top = '12px';
-
-							footer.appendChild(img);
-
-							mxEvent.addListener(img, 'click', mxUtils.bind(this, function()
+							this.drive.checkRealtimeFiles(mxUtils.bind(this, function()
 							{
-								footer.parentNode.removeChild(footer);
-								this.hideFooter();
+								var footer = document.createElement('div');
+								footer.style.cssText = 'position:absolute;bottom:0px;max-width:90%;padding:10px;padding-right:26px;' +
+									'white-space:nowrap;left:50%;bottom:2px;';
+								footer.className = 'geStatusAlert';
+								
+								mxUtils.setPrefixedStyle(footer.style, 'transform', 'translate(-50%,110%)');
+								mxUtils.setPrefixedStyle(footer.style, 'transition', 'all 1s ease');
+								footer.style.whiteSpace = 'nowrap';
+								footer.innerHTML = '<a href="https://desk.draw.io/support/solutions/articles/16000092210" ' +
+									'target="_blank" style="display:inline;text-decoration:none;font-weight:700;font-size:13px;opacity:1;">' +
+									'<img src="' + this.editor.graph.warningImage.src + '" border="0" style="margin-top:-4px;margin-right:2px;" valign="middle"/>&nbsp;' +
+									'You need to take action to convert legacy files. Click here.&nbsp;' +
+									'<img src="' + this.editor.graph.warningImage.src + '" border="0" style="margin-top:-4px;margin-left:2px;" valign="middle"/></a>';
+								
+								var img = document.createElement('img');
+								
+								img.setAttribute('src', Dialog.prototype.closeImage);
+								img.setAttribute('title', mxResources.get('close'));
+								img.style.position = 'absolute';
+								img.style.cursor = 'pointer';
+								img.style.right = '10px';
+								img.style.top = '12px';
+	
+								footer.appendChild(img);
+	
+								mxEvent.addListener(img, 'click', mxUtils.bind(this, function()
+								{
+									footer.parentNode.removeChild(footer);
+									this.hideFooter();
+
+									// Close permanently
+									if (isLocalStorage && mxSettings.settings != null)
+									{
+										mxSettings.settings.closeRealtimeWarning = Date.now();
+										mxSettings.save();
+									}
+								}));
+								
+								document.body.appendChild(footer);
+								
+								window.setTimeout(mxUtils.bind(this, function()
+								{
+									mxUtils.setPrefixedStyle(footer.style, 'transform', 'translate(-50%,0%)');
+								}), 1500);
 							}));
-							
-							document.body.appendChild(footer);
-							
-							window.setTimeout(mxUtils.bind(this, function()
-							{
-								mxUtils.setPrefixedStyle(footer.style, 'transform', 'translate(-50%,0%)');
-							}), 1500);
-						}));
+						}
 					}))
 					
 					// Notifies listeners of new client
@@ -1241,9 +1251,13 @@ App.prototype.init = function()
 		this.icon = document.createElement('img');
 		this.icon.setAttribute('src', IMAGE_PATH + '/logo-flat-small.png');
 		this.icon.setAttribute('title', mxResources.get('draw.io'));
-		this.icon.style.paddingTop = '11px';
-		this.icon.style.marginLeft = '4px';
-		this.icon.style.marginRight = '6px';
+		this.icon.style.padding = '6px';
+		this.icon.style.cursor = 'pointer';
+		
+		mxEvent.addListener(this.icon, 'click', mxUtils.bind(this, function(evt)
+		{
+			this.appIconClicked(evt);
+		}));
 		
 		if (mxClient.IS_QUIRKS)
 		{
@@ -5186,9 +5200,8 @@ App.prototype.updateUserElement = function()
 			this.userElement.className = 'geItem';
 			this.userElement.style.position = 'absolute';
 			this.userElement.style.fontSize = '8pt';
-			this.userElement.style.top = '4px';
+			this.userElement.style.top = (uiTheme == 'atlas') ? '8px' : '2px';
 			this.userElement.style.right = '30px';
-			this.userElement.style.color = '#666';
 			this.userElement.style.margin = '4px';
 			this.userElement.style.padding = '2px';
 			this.userElement.style.paddingRight = '16px';
@@ -5268,9 +5281,7 @@ App.prototype.updateUserElement = function()
 								'<small>' + mxResources.get('googleDrive') + '</small></tr></table>';
 							var div = document.createElement('div');
 							div.style.textAlign = 'center';
-							div.style.padding = '12px';
-							div.style.background = 'whiteSmoke';
-							div.style.borderTop = '1px solid #e0e0e0';
+							div.style.paddingBottom = '12px';
 							div.style.whiteSpace = 'nowrap';
 
 							// LATER: Cannot change user while file is open since close will not work with new
@@ -5342,9 +5353,7 @@ App.prototype.updateUserElement = function()
 								'</td></tr></table>';
 							var div = document.createElement('div');
 							div.style.textAlign = 'center';
-							div.style.padding = '12px';
-							div.style.background = 'whiteSmoke';
-							div.style.borderTop = '1px solid #e0e0e0';
+							div.style.paddingBottom = '12px';
 							div.style.whiteSpace = 'nowrap';
 							
 							if (logout != null)
@@ -5490,6 +5499,23 @@ App.prototype.updateUserElement = function()
 						
 						this.userPanel.appendChild(div);
 					}
+					
+					var div = document.createElement('div');
+					div.style.textAlign = 'center';
+					div.style.padding = '12px';
+					div.style.background = 'whiteSmoke';
+					div.style.borderTop = '1px solid #e0e0e0';
+					div.style.whiteSpace = 'nowrap';
+					
+					var btn = mxUtils.button(mxResources.get('close'), mxUtils.bind(this, function()
+					{
+						if (!mxEvent.isConsumed(evt) && this.userPanel != null && this.userPanel.parentNode != null)
+						{
+							this.userPanel.parentNode.removeChild(this.userPanel);
+						}
+					}));
+					div.appendChild(btn);
+					this.userPanel.appendChild(div);
 
 					document.body.appendChild(this.userPanel);
 				}

+ 10 - 3
src/main/webapp/js/diagramly/DriveClient.js

@@ -2441,7 +2441,11 @@ DriveClient.prototype.jsonToCell = function(val, codec)
  */
 DriveClient.prototype.checkRealtimeFiles = function(fn)
 {
-	this.executeRequest(gapi.client.drive.files.list({'maxResults': 1, 'q': 'mimeType=\'application/vnd.jgraph.mxfile.realtime\'',
+	var email = (this.user.email != null) ? this.user.email : null;
+	
+	this.executeRequest(gapi.client.drive.files.list({'maxResults': 1, 'q':
+		'mimeType=\'application/vnd.jgraph.mxfile.realtime\'' +
+		((email != null) ? ' and \'' + email + '\' in writers' : ''),
 		'includeTeamDriveItems': true, 'supportsTeamDrives': true}), mxUtils.bind(this, function(res)
 	{
 		if (res != null && (res.nextPageToken != null || (res.items != null && res.items.length > 0)))
@@ -2475,7 +2479,6 @@ DriveClient.prototype.convertRealtimeFiles = function()
 	{
 		this.checkToken(mxUtils.bind(this, function()
 		{
-			var q = 'mimeType=\'application/vnd.jgraph.mxfile.realtime\'';
 			var convertDelay = 2000;
 			var convertedIds = {};
 			var converted = 0;
@@ -2487,7 +2490,11 @@ DriveClient.prototype.convertRealtimeFiles = function()
 			var failed = 0;
 			var total = 0;
 			var queryFail = 0;
-			
+
+			var email = (this.user.email != null) ? this.user.email : null;
+			var q = 'mimeType=\'application/vnd.jgraph.mxfile.realtime\'' +
+				((email != null) ? ' and \'' + email + '\' in writers' : '');
+
 			var done = mxUtils.bind(this, function()
 			{
 				this.ui.spinner.stop();

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

@@ -4146,7 +4146,11 @@ HoverIcons.prototype.setCurrentState = function(state)
 								var pt = mxUtils.intersection(p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
 	
 								// Handles intersection between two segments
-								if (pt != null && (Math.abs(pt.x - p2.x) > thresh ||
+								if (pt != null && (Math.abs(pt.x - p0.x) > thresh ||
+									Math.abs(pt.y - p0.y) > thresh) &&
+									(Math.abs(pt.x - p1.x) > thresh ||
+									Math.abs(pt.y - p1.y) > thresh) &&
+									(Math.abs(pt.x - p2.x) > thresh ||
 									Math.abs(pt.y - p2.y) > thresh) &&
 									(Math.abs(pt.x - p3.x) > thresh ||
 									Math.abs(pt.y - p3.y) > thresh))
@@ -4260,8 +4264,16 @@ HoverIcons.prototype.setCurrentState = function(state)
 					{
 						n = new mxPoint(pt.x - last.x, pt.y - last.y);
 						len = Math.sqrt(n.x * n.x + n.y * n.y);
-						n.x = n.x * size / len;
-						n.y = n.y * size / len;
+						
+						if (len > 0)
+						{
+							n.x = n.x * size / len;
+							n.y = n.y * size / len;
+						}
+						else
+						{
+							n = null;
+						}
 					}
 					
 					if (dist > size * size && len > 0)

File diff suppressed because it is too large
+ 361 - 360
src/main/webapp/js/viewer.min.js


+ 46 - 75
src/main/webapp/styles/atlas.css

@@ -48,16 +48,12 @@ body > .geToolbarContainer > .geToolbar .geSeparator {
 .geSidebarContainer .geToolbarContainer .geButton {
 	padding:0px 2px 4px 2px;
 }
-.geToolbarContainer .geButton {
-	margin:0px -1px 0px 0px !important;
-	height:20px;
-}
 .geToolbarContainer .geLabel {
 	height:18px;
 	_height:31px;
 }
-.geStatus .geStatusAlert {
-	color:#ffffff;
+html body .geStatus .geStatusAlert {
+	color:#ffffff !important;
 	font-size:12px;
 	border:none;
 	border-radius:6px;
@@ -69,12 +65,12 @@ body > .geToolbarContainer > .geToolbar .geSeparator {
 	box-shadow: rgba(255, 255, 255, 0.0980392) 0px 1px 0px 0px inset, rgba(0, 0, 0, 0.2) 0px 1px 1px 0px;
 	margin-top:-5px;
 }
-.geStatus .geStatusAlert:hover {
+html body .geStatus .geStatusAlert:hover {
     background-color: #2d6ca2;
     background-image: linear-gradient(rgb(90, 148, 211) 0px, rgb(54, 115, 181) 100%);
 }
-.geStatus .geStatusMessage {
-	color:#ffffff;
+html body .geStatus .geStatusMessage {
+	color:#ffffff !important;
 	font-size:12px;
 	border:none;
 	border-radius:6px;
@@ -86,24 +82,22 @@ body > .geToolbarContainer > .geToolbar .geSeparator {
 	box-shadow: rgba(255, 255, 255, 0.0980392) 0px 1px 0px 0px inset, rgba(0, 0, 0, 0.2) 0px 1px 1px 0px;
 	margin-top:-5px;
 }
-.geStatus .geStatusMessage:hover {
+html body .geStatus .geStatusMessage:hover {
     background-color: #2d6ca2;
     background-image: linear-gradient(rgb(90, 148, 211) 0px, rgb(54, 115, 181) 100%);
 }
-div.mxWindow .geToolbarContainer {
+html body div.mxWindow .geToolbarContainer {
 	font-size:11px !important;	
 	color: #000000 !important;
 	-webkit-box-shadow: none !important;
 	-moz-box-shadow: none !important;
 	box-shadow: none !important;
-	
 	border-width: 0px 0px 1px !important;
 	border-color: rgb(195, 195, 195) !important;
 	border-style: solid !important;
-	
 	border-bottom:1px solid #e0e0e0;
 }
-div.mxWindow .geButton, .mxWindow .geLabel {
+html body div.mxWindow .geButton, .mxWindow .geLabel {
 	-webkit-box-shadow: none !important;
 	-moz-box-shadow: none !important;
 	box-shadow: none !important;
@@ -131,6 +125,10 @@ div.mxWindow .geButton:active, .mxWindow .geLabel:active {
 	background-image: none !important;
 	border:1px solid black;
 }
+body > .geToolbarContainer .geButton {
+	margin:0px -1px 0px 0px !important;
+	height:20px;
+}
 .geToolbarContainer .geButton:hover, .geToolbarContainer .geLabel:hover {
 	background-image: linear-gradient(rgb(255, 255, 255) 0px, rgb(247, 247, 247) 100%) !important;
 	border:1px solid rgb(153, 153, 153) !important;
@@ -142,39 +140,27 @@ div.mxWindow .geButton:active, .mxWindow .geLabel:active {
 	border:1px solid rgb(153, 153, 153) !important;
 	z-index:2;
 }
-.geSidebarTooltip, .geSidebarTooltipImage {
+html body .geSidebarTooltip, .geSidebarTooltipImage {
 	z-index:2;
 }
-.geSidebarContainer .geTitle {
+html body .geSidebarContainer .geTitle {
 	font-size:13px;
-	padding:8px 0px 8px 16px !important;
-}
-.geMenubarContainer * {
-	color: #DEEBFF !important;
+	padding:8px 0px 8px 16px;
 }
-.geMenubarContainer .geStatus {
-	color: rgb(179, 179, 179) !important;
+html body .geMenubarContainer * {
+	color: #DEEBFF;
 }
-.geMenubarContainer a {
-	margin-top: 0px !important;
+html body .geMenubarContainer .geStatus {
+	color: rgb(179, 179, 179);
 }
-.geMenubar .geItem, .geMenubarContainer .geItem {
-	background-repeat: no-repeat !important;
-	background-position: 100% 50% !important;
-	padding:12px !important;
-	margin:0px !important;
-	margin-left:2px !important;
-	margin-right:2px !important;
-	font-size:14px;
-}
-.geMenubarContainer .geBigButton {
-	margin-top: 4px !important;
-	padding: 7px !important;
+html body .geMenubarContainer .geBigButton {
+	margin-top: 4px;
+	padding: 7px;
 }
 .geMenubarContainer .geItem:hover {
 	background-color: rgba(9, 30, 66, 0.48);
 }
-.geToolbarContainer .geLabel {
+html body .geToolbarContainer .geLabel {
 	margin:0px;
 	padding:6px 20px 4px 10px !important;
 }
@@ -188,56 +174,41 @@ div.mxWindow .geButton:active, .mxWindow .geLabel:active {
 	-ms-transition: none;
 	transition: none;
 }
-.geMenubarContainer {
-	background-color: #0049B0 !important;
-	background-repeat: repeat-x;
-	color: rgb(255, 255, 255);
-	font-size: 13px;
-	padding: 0px !important;
-	margin: 0px !important;
-}
-.geMenubar {
+html body .geMenubarContainer {
+	background-color: #0049B0;
+	color: #ffffff;
 	font-size: 14px;
-	padding:0px 10px 0px 10px !important;
-	margin-left:0px !important;
-}
-.geToolbarContainer *:not(.geFormatContainer *) {
-	font-size: 13px;
-	color: rgb(153, 153, 153);
-	background-color: rgb(238, 238, 238);
-	background-image: linear-gradient(top, rgb(245, 245, 245) 0px, rgb(238, 238, 238) 100%);
-	background-repeat: repeat-x;
-	border:1px solid rgb(229, 229, 229) !important;
-	-webkit-box-shadow: rgb(136, 136, 136) 0px 1px 5px 0px !important;
-	-moz-box-shadow: rgb(136, 136, 136) 0px 1px 5px 0px !important;
-	box-shadow: rgb(136, 136, 136) 0px 1px 5px 0px !important;
-	padding: 0px;
-	margin: 0px;
-}
-.geSidebarContainer .geToolbarContainer {
-	-webkit-box-shadow: none !important;
-	-moz-box-shadow: none !important;
-	box-shadow: none !important;
-	border:none !important;
+	padding-top:6px;
 }
-.geSidebarContainer .geToolbarContainer .geButton {
+html body .geMenubar > .geItem {
+	padding-left:14px;
+	padding-right:15px;
+}
+html body .geSidebarContainer .geToolbarContainer {
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+	box-shadow: none;
+	border:none;
+}
+html body .geSidebarContainer .geToolbarContainer .geButton {
 	margin:2px !important;
+	height:20px !important;
 }
-.geSidebarContainer .geToolbarContainer .geLabel {
+html body .geSidebarContainer .geToolbarContainer .geLabel {
 	margin:2px !important;
 	padding:4px !important;
 }
-.geToolbar {
-	margin:0px !important;
-	padding:8px 10px 0px 10px !important;
+html body .geToolbar {
+	margin:0px;
+	padding:8px 10px 0px 10px;
 	-webkit-box-shadow:none;
 	-moz-box-shadow:none;
 	box-shadow:none;
 	border:none;
 }
-.geMenubarContainer .mxDisabled {
-	opacity: 1 !important;
-	color: rgb(179, 179, 179) !important;
+html body .geMenubarContainer .mxDisabled {
+	opacity: 1;
+	color: rgb(179, 179, 179);
 }
 .geDialogTitle {
 	box-sizing:border-box;