8.9.9 release

Former-commit-id: 648db9b817
This commit is contained in:
David Benson [draw.io] 2018-07-26 12:05:19 +01:00
parent 8bff6984fd
commit 9eacf5c0a0
63 changed files with 18097 additions and 4895 deletions

View file

@ -1,3 +1,18 @@
26-JUL-2018: 8.9.9
- Adds support for hierarchies in CSV import
- Uses mxGraph 3.9.9 beta 6
23-JUL-2018: 8.9.8
- Changes PlantUML autosize parameter to default to true
- Improves error handling, imports
- Uses mxGraph 3.9.9 beta 5
18-JUL-2018: 8.9.7
- Uses new PlantUML version
18-JUL-2018: 8.9.6
- Fixes vertical offset for text editing with small fonts

View file

@ -1 +1 @@
8.9.6
8.9.9

View file

@ -131,7 +131,7 @@ function mxXmlRequest(a,b,c,d,e,f){this.url=a;this.params=b;this.method=c||"POST
mxXmlRequest.prototype.decodeSimulateValues=!1;mxXmlRequest.prototype.isBinary=function(){return this.binary};mxXmlRequest.prototype.setBinary=function(a){this.binary=a};mxXmlRequest.prototype.getText=function(){return this.request.responseText};mxXmlRequest.prototype.isReady=function(){return 4==this.request.readyState};mxXmlRequest.prototype.getDocumentElement=function(){var a=this.getXml();return null!=a?a.documentElement:null};
mxXmlRequest.prototype.getXml=function(){var a=this.request.responseXML;if(9<=document.documentMode||null==a||null==a.documentElement)a=mxUtils.parseXml(this.request.responseText);return a};mxXmlRequest.prototype.getText=function(){return this.request.responseText};mxXmlRequest.prototype.getStatus=function(){return this.request.status};
mxXmlRequest.prototype.create=function(){if(window.XMLHttpRequest)return function(){var a=new XMLHttpRequest;this.isBinary()&&a.overrideMimeType&&a.overrideMimeType("text/plain; charset=x-user-defined");return a};if("undefined"!=typeof ActiveXObject)return function(){return new ActiveXObject("Microsoft.XMLHTTP")}}();
mxXmlRequest.prototype.send=function(a,b,c,d){this.request=this.create();null!=this.request&&(null!=a&&(this.request.onreadystatechange=mxUtils.bind(this,function(){this.isReady()&&(a(this),this.onreadystatechaange=null)})),this.request.open(this.method,this.url,this.async,this.username,this.password),this.setRequestHeaders(this.request,this.params),window.XMLHttpRequest&&this.withCredentials&&(this.request.withCredentials="true"),!mxClient.IS_QUIRKS&&(null==document.documentMode||9<document.documentMode)&&
mxXmlRequest.prototype.send=function(a,b,c,d){this.request=this.create();null!=this.request&&(null!=a&&(this.request.onreadystatechange=mxUtils.bind(this,function(){this.isReady()&&(a(this),this.request.onreadystatechaange=null)})),this.request.open(this.method,this.url,this.async,this.username,this.password),this.setRequestHeaders(this.request,this.params),window.XMLHttpRequest&&this.withCredentials&&(this.request.withCredentials="true"),!mxClient.IS_QUIRKS&&(null==document.documentMode||9<document.documentMode)&&
window.XMLHttpRequest&&null!=c&&null!=d&&(this.request.timeout=c,this.request.ontimeout=d),this.request.send(this.params))};mxXmlRequest.prototype.setRequestHeaders=function(a,b){null!=b&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded")};
mxXmlRequest.prototype.simulate=function(a,b){a=a||document;var c=null;a==document&&(c=window.onbeforeunload,window.onbeforeunload=null);var d=a.createElement("form");d.setAttribute("method",this.method);d.setAttribute("action",this.url);null!=b&&d.setAttribute("target",b);d.style.display="none";d.style.visibility="hidden";for(var e=0<this.params.indexOf("&")?this.params.split("&"):this.params.split(),f=0;f<e.length;f++){var g=e[f].indexOf("=");if(0<g){var k=e[f].substring(0,g),g=e[f].substring(g+
1);this.decodeSimulateValues&&(g=decodeURIComponent(g));var l=a.createElement("textarea");l.setAttribute("wrap","off");l.setAttribute("name",k);mxUtils.write(l,g);d.appendChild(l)}}a.body.appendChild(d);d.submit();null!=d.parentNode&&d.parentNode.removeChild(d);null!=c&&(window.onbeforeunload=c)};
@ -1459,9 +1459,9 @@ mxConnectionHandler.prototype.reset=function(){null!=this.shape&&(this.shape.des
mxConnectionHandler.prototype.drawPreview=function(){this.updatePreview(null==this.error);this.shape.redraw()};mxConnectionHandler.prototype.updatePreview=function(a){this.shape.strokewidth=this.getEdgeWidth(a);this.shape.stroke=this.getEdgeColor(a)};mxConnectionHandler.prototype.getEdgeColor=function(a){return a?mxConstants.VALID_COLOR:mxConstants.INVALID_COLOR};mxConnectionHandler.prototype.getEdgeWidth=function(a){return a?3:1};
mxConnectionHandler.prototype.connect=function(a,b,c,d){if(null!=b||this.isCreateTarget(c)||this.graph.allowDanglingEdges){var e=this.graph.getModel(),f=!1,g=null;e.beginUpdate();try{if(null!=a&&null==b&&!this.graph.isIgnoreTerminalEvent(c)&&this.isCreateTarget(c)&&(b=this.createTargetVertex(c,a),null!=b)){d=this.graph.getDropTarget([b],c,d);f=!0;if(null!=d&&this.graph.getModel().isEdge(d))d=this.graph.getDefaultParent();else{var k=this.graph.getView().getState(d);if(null!=k){var l=e.getGeometry(b);
l.x-=k.origin.x;l.y-=k.origin.y}}this.graph.addCell(b,d)}var m=this.graph.getDefaultParent();null!=a&&null!=b&&e.getParent(a)==e.getParent(b)&&e.getParent(e.getParent(a))!=e.getRoot()&&(m=e.getParent(a),null!=a.geometry&&a.geometry.relative&&null!=b.geometry&&b.geometry.relative&&(m=e.getParent(m)));var n=k=null;null!=this.edgeState&&(k=this.edgeState.cell.value,n=this.edgeState.cell.style);g=this.insertEdge(m,null,k,a,b,n);if(null!=g){this.graph.setConnectionConstraint(g,a,!0,this.sourceConstraint);
this.graph.setConnectionConstraint(g,b,!1,this.constraintHandler.currentConstraint);null!=this.edgeState&&e.setGeometry(g,this.edgeState.cell.geometry);e.getParent(a);if(this.isInsertBefore(g,a,b,c,d)){m=null;for(l=a;null!=l.parent&&null!=l.geometry&&l.geometry.relative&&l.parent!=g.parent;)l=this.graph.model.getParent(l);null!=l&&null!=l.parent&&l.parent==g.parent&&(m=l.parent.getIndex(l),l.parent.insert(g,m))}var p=e.getGeometry(g);null==p&&(p=new mxGeometry,p.relative=!0,e.setGeometry(g,p));if(null!=
this.waypoints&&0<this.waypoints.length){var q=this.graph.view.scale,r=this.graph.view.translate;p.points=[];for(a=0;a<this.waypoints.length;a++){var t=this.waypoints[a];p.points.push(new mxPoint(t.x/q-r.x,t.y/q-r.y))}}if(null==b){var u=this.graph.view.translate,q=this.graph.view.scale,t=null!=this.originalPoint?new mxPoint(this.originalPoint.x/q-u.x,this.originalPoint.y/q-u.y):new mxPoint(this.currentPoint.x/q-u.x,this.currentPoint.y/q-u.y);t.x-=this.graph.panDx/this.graph.view.scale;t.y-=this.graph.panDy/
this.graph.view.scale;p.setTerminalPoint(t,!1)}this.fireEvent(new mxEventObject(mxEvent.CONNECT,"cell",g,"terminal",b,"event",c,"target",d,"terminalInserted",f))}}catch(x){mxLog.show(),mxLog.debug(x.message)}finally{e.endUpdate()}this.select&&this.selectCells(g,f?b:null)}};mxConnectionHandler.prototype.selectCells=function(a,b){this.graph.setSelectionCell(a)};
this.graph.setConnectionConstraint(g,b,!1,this.constraintHandler.currentConstraint);null!=this.edgeState&&e.setGeometry(g,this.edgeState.cell.geometry);m=e.getParent(a);if(this.isInsertBefore(g,a,b,c,d)){for(l=a;null!=l.parent&&null!=l.geometry&&l.geometry.relative&&l.parent!=g.parent;)l=this.graph.model.getParent(l);null!=l&&null!=l.parent&&l.parent==g.parent&&e.add(m,g,l.parent.getIndex(l))}var p=e.getGeometry(g);null==p&&(p=new mxGeometry,p.relative=!0,e.setGeometry(g,p));if(null!=this.waypoints&&
0<this.waypoints.length){var q=this.graph.view.scale,r=this.graph.view.translate;p.points=[];for(a=0;a<this.waypoints.length;a++){var t=this.waypoints[a];p.points.push(new mxPoint(t.x/q-r.x,t.y/q-r.y))}}if(null==b){var u=this.graph.view.translate,q=this.graph.view.scale,t=null!=this.originalPoint?new mxPoint(this.originalPoint.x/q-u.x,this.originalPoint.y/q-u.y):new mxPoint(this.currentPoint.x/q-u.x,this.currentPoint.y/q-u.y);t.x-=this.graph.panDx/this.graph.view.scale;t.y-=this.graph.panDy/this.graph.view.scale;
p.setTerminalPoint(t,!1)}this.fireEvent(new mxEventObject(mxEvent.CONNECT,"cell",g,"terminal",b,"event",c,"target",d,"terminalInserted",f))}}catch(x){mxLog.show(),mxLog.debug(x.message)}finally{e.endUpdate()}this.select&&this.selectCells(g,f?b:null)}};mxConnectionHandler.prototype.selectCells=function(a,b){this.graph.setSelectionCell(a)};
mxConnectionHandler.prototype.insertEdge=function(a,b,c,d,e,f){if(null==this.factoryMethod)return this.graph.insertEdge(a,b,c,d,e,f);b=this.createEdge(c,d,e,f);return b=this.graph.addEdge(b,a,d,e)};
mxConnectionHandler.prototype.createTargetVertex=function(a,b){for(var c=this.graph.getCellGeometry(b);null!=c&&c.relative;)b=this.graph.getModel().getParent(b),c=this.graph.getCellGeometry(b);var d=this.graph.cloneCells([b])[0],c=this.graph.getModel().getGeometry(d);if(null!=c){var e=this.graph.view.translate,f=this.graph.view.scale,g=new mxPoint(this.currentPoint.x/f-e.x,this.currentPoint.y/f-e.y);c.x=Math.round(g.x-c.width/2-this.graph.panDx/f);c.y=Math.round(g.y-c.height/2-this.graph.panDy/f);
g=this.getAlignmentTolerance();if(0<g){var k=this.graph.view.getState(b);if(null!=k){var l=k.x/f-e.x,e=k.y/f-e.y;Math.abs(l-c.x)<=g&&(c.x=Math.round(l));Math.abs(e-c.y)<=g&&(c.y=Math.round(e))}}}return d};mxConnectionHandler.prototype.getAlignmentTolerance=function(a){return this.graph.isGridEnabled()?this.graph.gridSize/2:this.graph.tolerance};

View file

@ -9,7 +9,32 @@ VsdConverter:
AST.net web application that provides *.vsd files conversion service and acts as a client to the previous TCP server.
========================================
Running the conversion site:
Running the conversion site without Hyper-V:
1- Run VsdConverterApp TCP sever
2- Deploy VsdConverter to IIS manually
2.1- Install IIS and enable ASP.NET
2.1.a Open Control Panel, Programs and Features, Turn Windows features on or off.
2.1.b Expand Internet Information Services, World Wide Web Services, and Application Development Features.
2.1.c Make sure that ASP.NET 4.7 is selected.
2.2- After installing IIS, run IIS Manager to make sure that the .NET Framework version 4 is assigned to the default application pool.
2.2.a Press WINDOWS+R to open the Run dialog box.
2.2.b Enter "inetmgr", and then click OK.
2.2.c In the Connections pane, expand the server node and select Application Pools. In the Application Pools pane, if DefaultAppPool is assigned to the .NET framework version 4, skip to (2.3).
2.2.d In the Application Pools pane, click DefaultAppPool, and then in the Actions pane click Basic Settings.
2.2.e In the Edit Application Pool dialog box, change .NET Framework version to .NET Framework v4.0.30319 and click OK.
2.2.f IIS is now ready for you to publish a web application to it.
2.3- Create the deployment files from Visual Studio (Build-> Publish VsdConverter) and select folder deploy
2.4- Upload the folder (zipped) & the TCP server App (VsdConverterApp) to Google Drive and download it from the server
2.5- Unpack the files to IIS app in C:\VsdConverter && exe to VsdConverterLocalSrv
2.6- In folder: C:\inetpub\wwwroot\VsdConverter_deploy
2.6.a create folder: App_Data
2.6.b Open Properties of App_Data -> Security -> Edit
2.6.c Give full control to Users: IIS_IUSRS
2.7- Website is ready
========================================
Running the conversion site with Hyper-V:
1- Run VsdConverterApp TCP sever
2- Deploy VsdConverter to IIS (manually or using Web Deployment Tool).

View file

@ -162,7 +162,7 @@
</site>
<site name="VsdConverter" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Users\ashra\source\repos\VsdConverter\VsdConverter" />
<virtualDirectory path="/" physicalPath="C:\Users\ashra\Documents\drawio\etc\vsd\VsdConverter\VsdConverter" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:59769:localhost" />

View file

@ -88,7 +88,9 @@ namespace VsdConverter.Controllers
{
// Read the form data and return an async task.
await Request.Content.ReadAsMultipartAsync(provider);
String srcExt = "", dstExt = "";
//We assume one type for all files, otherwise, conversion will fail
foreach (var file in provider.FileData)
{
string actualFileName = file.Headers.ContentDisposition.FileName;
@ -98,6 +100,17 @@ namespace VsdConverter.Controllers
actualNames.Add(actualFileName);
System.IO.File.Move(file.LocalFileName, file.LocalFileName + ".vsd");
srcExt = ".vsd";
dstExt = ".vsdx";
}
else if (actualFileName.EndsWith(".vss\""))
{
convertedFiles.Add(file.LocalFileName);
actualNames.Add(actualFileName);
System.IO.File.Move(file.LocalFileName, file.LocalFileName + ".vss");
srcExt = ".vss";
dstExt = ".vssx";
}
else
{
@ -106,12 +119,14 @@ namespace VsdConverter.Controllers
}
StringBuilder allFiles = new StringBuilder();
String newLine = "";
allFiles.Append(srcExt);
allFiles.Append("\n");
allFiles.Append(dstExt);
for (int i = 0; i < convertedFiles.Count; i++)
{
allFiles.Append(newLine);
allFiles.Append("\n");
allFiles.Append(convertedFiles[i]);
newLine = "\n";
}
//Ask the TCP Converter Server to do the job
@ -127,19 +142,19 @@ namespace VsdConverter.Controllers
{
var pushStreamContent = new PushStreamContent((stream, content, context) =>
{
FileStream fs = new FileStream(convertedFiles[0] + ".vsdx", FileMode.Open);
FileStream fs = new FileStream(convertedFiles[0] + dstExt, FileMode.Open);
fs.CopyTo(stream);
fs.Close();
stream.Close(); // After save we close the stream to signal that we are done writing.
System.IO.File.Delete(convertedFiles[0] + ".vsd");
System.IO.File.Delete(convertedFiles[0] + ".vsdx");
System.IO.File.Delete(convertedFiles[0] + srcExt);
System.IO.File.Delete(convertedFiles[0] + dstExt);
}, "application/x-visio");
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK) { Content = pushStreamContent };
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = Path.GetFileNameWithoutExtension(actualNames[0].Replace('"', ' ')) + ".vsdx"
FileName = Path.GetFileNameWithoutExtension(actualNames[0].Replace('"', ' ')) + dstExt
};
response.Content.Headers.Add("Access-Control-Allow-Origin", "*");
return response;
@ -152,8 +167,8 @@ namespace VsdConverter.Controllers
{
var name = Path.GetFileNameWithoutExtension(actualNames[i].Replace('"', ' '));
var file = convertedFiles[i];
var e = zipFile.AddFile(file + ".vsdx");
e.FileName = name + ".vsdx";
var e = zipFile.AddFile(file + dstExt);
e.FileName = name + dstExt;
}
var pushStreamContent = new PushStreamContent((stream, content, context) =>
@ -163,8 +178,8 @@ namespace VsdConverter.Controllers
foreach (string file in convertedFiles)
{
System.IO.File.Delete(file + ".vsd");
System.IO.File.Delete(file + ".vsdx");
System.IO.File.Delete(file + srcExt);
System.IO.File.Delete(file + dstExt);
}
}, "application/zip");

View file

@ -10,70 +10,70 @@ by editing this MSBuild file. In order to learn more about this please visit htt
</PropertyGroup>
<ItemGroup>
<File Include="ApplicationInsights.config">
<publishTime>12/28/2017 15:07:25</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/HelpPage.css">
<publishTime>12/28/2017 15:07:22</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/Api.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/ApiGroup.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/CollectionModelDescription.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/ComplexTypeModelDescription.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/DictionaryModelDescription.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/EnumTypeModelDescription.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/HelpPageApiModel.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/ImageSample.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/InvalidSample.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/KeyValuePairModelDescription.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/ModelDescriptionLink.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/Parameters.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/Samples.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/SimpleTypeModelDescription.cshtml">
<publishTime>12/28/2017 15:07:20</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/DisplayTemplates/TextSample.cshtml">
<publishTime>12/28/2017 15:07:19</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/Index.cshtml">
<publishTime>12/28/2017 15:07:19</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Help/ResourceModel.cshtml">
<publishTime>12/28/2017 15:07:19</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Shared/_Layout.cshtml">
<publishTime>12/28/2017 15:07:19</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/Web.config">
<publishTime>03/30/2018 14:53:40</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Areas/HelpPage/Views/_ViewStart.cshtml">
<publishTime>12/28/2017 15:07:03</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="bin/Antlr3.Runtime.dll">
<publishTime>02/22/2013 08:43:40</publishTime>
@ -82,7 +82,7 @@ by editing this MSBuild file. In order to learn more about this please visit htt
<publishTime>02/22/2013 08:43:40</publishTime>
</File>
<File Include="bin/ApplicationInsights.config">
<publishTime>12/28/2017 15:07:25</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="bin/Ionic.Zip.dll">
<publishTime>11/22/2017 14:06:00</publishTime>
@ -304,82 +304,82 @@ by editing this MSBuild file. In order to learn more about this please visit htt
<publishTime>01/28/2015 04:04:30</publishTime>
</File>
<File Include="bin/VsdConverter.dll">
<publishTime>03/31/2018 17:49:17</publishTime>
<publishTime>07/24/2018 15:54:46</publishTime>
</File>
<File Include="bin/VsdConverter.pdb">
<publishTime>03/31/2018 17:49:17</publishTime>
<publishTime>07/24/2018 15:54:46</publishTime>
</File>
<File Include="bin/WebGrease.dll">
<publishTime>09/10/2013 17:28:38</publishTime>
</File>
<File Include="Content/bootstrap.css">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Content/bootstrap.min.css">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Content/Site.css">
<publishTime>12/28/2017 15:07:03</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="favicon.ico">
<publishTime>12/28/2017 15:07:03</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="fonts/glyphicons-halflings-regular.eot">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="fonts/glyphicons-halflings-regular.svg">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="fonts/glyphicons-halflings-regular.ttf">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="fonts/glyphicons-halflings-regular.woff">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Global.asax">
<publishTime>12/28/2017 15:07:03</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/bootstrap.js">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/bootstrap.min.js">
<publishTime>12/28/2017 15:07:10</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/jquery-1.10.2.js">
<publishTime>12/28/2017 15:07:14</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/jquery-1.10.2.min.js">
<publishTime>12/28/2017 15:07:14</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/jquery-1.10.2.min.map">
<publishTime>12/28/2017 15:07:14</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/modernizr-2.6.2.js">
<publishTime>12/28/2017 15:07:22</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/respond.js">
<publishTime>12/28/2017 15:07:24</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Scripts/respond.min.js">
<publishTime>12/28/2017 15:07:24</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Views/Home/Index.cshtml">
<publishTime>03/30/2018 15:59:48</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Views/Shared/Error.cshtml">
<publishTime>12/28/2017 15:07:03</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Views/Shared/_Layout.cshtml">
<publishTime>12/28/2017 15:07:03</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Views/Web.config">
<publishTime>03/30/2018 14:53:40</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Views/_ViewStart.cshtml">
<publishTime>12/28/2017 15:07:03</publishTime>
<publishTime>04/20/2018 13:27:12</publishTime>
</File>
<File Include="Web.config">
<publishTime>03/31/2018 17:49:18</publishTime>
<publishTime>07/24/2018 15:54:47</publishTime>
</File>
</ItemGroup>
</Project>

View file

@ -92,7 +92,17 @@ namespace VsdConverterApp
//Now convert these vsd file pathes to vsdx
Console.WriteLine("{0} - Converting ...", clientNum);
String[] files = allData.Split('\n');
String[] info = allData.Split('\n');
if (info.Length < 3)
throw new Exception("Invalid number of arguments");
String[] files = new String[info.Length - 2];
for (var o = 2; o < info.Length; o++)
files[o - 2] = info[o];
String srcExt = info[0];
String dstExt = info[1];
//Using COM to call visio to convert the files
Type VisioType = Type.GetTypeFromProgID("Visio.InvisibleApp");
@ -104,8 +114,8 @@ namespace VsdConverterApp
{
if (file.Length > 0)
{
var doc = VisioInst.Documents.Open(file + ".vsd");
doc.SaveAs(file + ".vsdx");
var doc = VisioInst.Documents.Open(file + srcExt);
doc.SaveAs(file + dstExt);
doc.Close();
}
}

View file

@ -1,7 +1,7 @@
CACHE MANIFEST
# THIS FILE WAS GENERATED. DO NOT MODIFY!
# 07/18/2018 05:43 PM
# 07/26/2018 10:35 AM
app.html
index.html?offline=1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 119 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -2280,12 +2280,16 @@ App.prototype.start = function()
this.hideDialog();
var prev = Editor.useLocalStorage;
this.createFile((filename.length > 0) ? filename : this.defaultFilename,
this.getFileData(), null, null, null, null, null, true);
this.getFileData(), null, null, null, true, null, true);
Editor.useLocalStorage = prev;
}
else
{
this.createFile(filename, this.getFileData(true), null, mode);
this.pickFolder(mode, mxUtils.bind(this, function(folderId)
{
this.createFile(filename, this.getFileData(true),
null, mode, null, true, folderId);
}));
}
}), null, null, null, null, urlParams['browser'] == '1', null, null, true, rowLimit);
this.showDialog(dlg.container, 380, (serviceCount > rowLimit) ? 390 : 270,
@ -3008,7 +3012,7 @@ App.prototype.saveFile = function(forceDialog)
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
EditorUi.prototype.loadTemplate = function(url, onload, onerror)
App.prototype.loadTemplate = function(url, onload, onerror)
{
var realUrl = url;
@ -3039,11 +3043,14 @@ EditorUi.prototype.loadTemplate = function(url, onload, onerror)
}
}), url);
}
else if (data.substring(0, 26) == '{"state":"{\\"Properties\\":')
else if (this.isLucidChartData(data))
{
this.importLucidChart(data, 0, 0, false, mxUtils.bind(this, function()
this.convertLucidChart(data, mxUtils.bind(this, function(xml)
{
onload(this.getFileData(true));
onload(xml);
}), mxUtils.bind(this, function(e)
{
onerror(e);
}));
}
else
@ -3137,14 +3144,11 @@ App.prototype.createFile = function(title, data, libs, mode, done, replace, fold
}
else if (mode == App.MODE_GITHUB && this.gitHub != null)
{
this.pickFolder(mode, mxUtils.bind(this, function(folderId)
this.gitHub.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);
}));
complete();
this.fileCreated(file, libs, replace, done);
}), error, false, folderId);
}
else if (mode == App.MODE_TRELLO && this.trello != null)
{

View file

@ -852,111 +852,6 @@ var ConfirmDialog = function(editorUi, message, okFn, cancelFn, okLabel, cancelL
this.container = div;
};
/**
*
*/
var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, buttonText2, fn2, hide, buttonText3, fn3)
{
hide = (hide != null) ? hide : true;
var div = document.createElement('div');
div.style.textAlign = 'center';
if (title != null)
{
var hd = document.createElement('div');
hd.style.padding = '0px';
hd.style.margin = '0px';
hd.style.fontSize = '18px';
hd.style.paddingBottom = '16px';
hd.style.marginBottom = '16px';
hd.style.borderBottom = '1px solid #c0c0c0';
hd.style.color = 'gray';
mxUtils.write(hd, title);
div.appendChild(hd);
}
var p2 = document.createElement('div');
p2.style.padding = '6px';
p2.innerHTML = message;
div.appendChild(p2);
var btns = document.createElement('div');
btns.style.marginTop = '16px';
btns.style.textAlign = 'center';
if (retry != null)
{
var retryBtn = mxUtils.button(mxResources.get('tryAgain'), function()
{
editorUi.hideDialog();
retry();
});
retryBtn.className = 'geBtn';
btns.appendChild(retryBtn);
btns.style.textAlign = 'center';
}
if (buttonText3 != null)
{
var btn3 = mxUtils.button(buttonText3, function()
{
if (fn3 != null)
{
fn3();
}
});
btn3.className = 'geBtn';
btns.appendChild(btn3);
}
var btn = mxUtils.button(buttonText, function()
{
if (hide)
{
editorUi.hideDialog();
}
if (fn != null)
{
fn();
}
});
btn.className = 'geBtn';
btns.appendChild(btn);
if (buttonText2 != null)
{
var mainBtn = mxUtils.button(buttonText2, function()
{
if (hide)
{
editorUi.hideDialog();
}
if (fn2 != null)
{
fn2();
}
});
mainBtn.className = 'geBtn gePrimaryBtn';
btns.appendChild(mainBtn);
}
this.init = function()
{
btn.focus();
};
div.appendChild(btns);
this.container = div;
};
/**
* Constructs a new embed dialog
*/

View file

@ -83,11 +83,20 @@
'#\n' +
'# style: label;image=%image%;whiteSpace=wrap;html=1;rounded=1;fillColor=%fill%;strokeColor=%stroke%;\n' +
'#\n' +
'## Parent style for nodes with child nodes (placeholders are replaced once).\n' +
'#\n' +
'# parentstyle: swimlane;whiteSpace=wrap;html=1;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;\n' +
'#\n' +
'## Uses the given column name as the identity for cells (updates existing cells).\n' +
'## Default is no identity (empty value or -).\n' +
'#\n' +
'# identity: -\n' +
'#\n' +
'## Uses the given column name as the parent reference for cells. Default is no parent (empty or -).\n' +
'## The identity above is used for resolving the reference so it must be specified.\n' +
'#\n' +
'# parent: -\n' +
'#\n' +
'## Adds a prefix to the identity of cells to make sure they do not collide with existing cells (whose\n' +
'## IDs are numbers from 0..n, sometimes with a GUID prefix in the context of realtime collaboration).\n' +
'## Default is csvimport-.\n' +
@ -1524,7 +1533,7 @@
{
if (href.substring(0, 17) == 'data:action/json,')
{
// Some actions are stateless and must be handled before of the transaction
// Some actions are stateless and must be handled before the transaction
var action = JSON.parse(href.substring(17));
if (action.actions != null)
@ -1536,7 +1545,10 @@
{
if (this.isCustomLink(action.actions[i].open))
{
this.customLinkClicked(action.actions[i].open);
if (!this.customLinkClicked(action.actions[i].open))
{
return;
}
}
else
{
@ -1972,6 +1984,7 @@
mxStencilRegistry.libraries['eip'] = [SHAPES_PATH + '/mxEip.js', STENCIL_PATH + '/eip.xml'];
mxStencilRegistry.libraries['networks'] = [SHAPES_PATH + '/mxNetworks.js', STENCIL_PATH + '/networks.xml'];
mxStencilRegistry.libraries['aws3d'] = [SHAPES_PATH + '/mxAWS3D.js', STENCIL_PATH + '/aws3d.xml'];
mxStencilRegistry.libraries['veeam'] = [STENCIL_PATH + '/veeam/2d.xml', STENCIL_PATH + '/veeam/3d.xml', STENCIL_PATH + '/veeam/veeam.xml'];
mxStencilRegistry.libraries['pid2inst'] = [SHAPES_PATH + '/pid2/mxPidInstruments.js'];
mxStencilRegistry.libraries['pid2misc'] = [SHAPES_PATH + '/pid2/mxPidMisc.js', STENCIL_PATH + '/pid/misc.xml'];
mxStencilRegistry.libraries['pid2valves'] = [SHAPES_PATH + '/pid2/mxPidValves.js'];
@ -2662,6 +2675,111 @@
};
})();
/**
*
*/
var ErrorDialog = function(editorUi, title, message, buttonText, fn, retry, buttonText2, fn2, hide, buttonText3, fn3)
{
hide = (hide != null) ? hide : true;
var div = document.createElement('div');
div.style.textAlign = 'center';
if (title != null)
{
var hd = document.createElement('div');
hd.style.padding = '0px';
hd.style.margin = '0px';
hd.style.fontSize = '18px';
hd.style.paddingBottom = '16px';
hd.style.marginBottom = '16px';
hd.style.borderBottom = '1px solid #c0c0c0';
hd.style.color = 'gray';
mxUtils.write(hd, title);
div.appendChild(hd);
}
var p2 = document.createElement('div');
p2.style.padding = '6px';
p2.innerHTML = message;
div.appendChild(p2);
var btns = document.createElement('div');
btns.style.marginTop = '16px';
btns.style.textAlign = 'center';
if (retry != null)
{
var retryBtn = mxUtils.button(mxResources.get('tryAgain'), function()
{
editorUi.hideDialog();
retry();
});
retryBtn.className = 'geBtn';
btns.appendChild(retryBtn);
btns.style.textAlign = 'center';
}
if (buttonText3 != null)
{
var btn3 = mxUtils.button(buttonText3, function()
{
if (fn3 != null)
{
fn3();
}
});
btn3.className = 'geBtn';
btns.appendChild(btn3);
}
var btn = mxUtils.button(buttonText, function()
{
if (hide)
{
editorUi.hideDialog();
}
if (fn != null)
{
fn();
}
});
btn.className = 'geBtn';
btns.appendChild(btn);
if (buttonText2 != null)
{
var mainBtn = mxUtils.button(buttonText2, function()
{
if (hide)
{
editorUi.hideDialog();
}
if (fn2 != null)
{
fn2();
}
});
mainBtn.className = 'geBtn gePrimaryBtn';
btns.appendChild(mainBtn);
}
this.init = function()
{
btn.focus();
};
div.appendChild(btns);
this.container = div;
};
// Extends codec for ChangePageSetup
(function()
{

View file

@ -1354,7 +1354,7 @@
}
});
if (desc.url != null)
if (desc.url != null && desc.url.length > 0)
{
var realUrl = desc.url;
@ -1377,7 +1377,7 @@
}
else
{
loadData(desc.data);
loadData('');
}
};
@ -2558,7 +2558,7 @@
}
});
if (file != null && img != null && ((/(\.vsdx?)($|\?)/i.test(img)) || /(\.vssx)($|\?)/i.test(img)))
if (file != null && img != null && ((/(\.vsdx?)($|\?)/i.test(img)) || /(\.vssx?)($|\?)/i.test(img)))
{
this.importVisio(file, function(xml)
{
@ -2914,14 +2914,6 @@
mxUtils.htmlEntities(mxResources.get('tryOpeningViaThisPage')) + '</a>';
}
}
else if (e.code == App.ERROR_TIMEOUT)
{
msg = mxUtils.htmlEntities(mxResources.get('timeout'));
}
else if (e.code == App.ERROR_BUSY)
{
msg = mxUtils.htmlEntities(mxResources.get('busy'));
}
else if (e.message != null)
{
msg = mxUtils.htmlEntities(e.message);
@ -2930,6 +2922,17 @@
{
msg = mxUtils.htmlEntities(e.response.error);
}
else if (window.App !== 'undefined')
{
if (e.code == App.ERROR_TIMEOUT)
{
msg = mxUtils.htmlEntities(mxResources.get('timeout'));
}
else if (e.code == App.ERROR_BUSY)
{
msg = mxUtils.htmlEntities(mxResources.get('busy'));
}
}
}
this.showError(title, msg, btn, fn, retry);
@ -5813,7 +5816,7 @@
if (this.doImportVisio)
{
if (/(\.vsd)($|\?)/i.test(filename) && VSD_CONVERT_URL != null)
if ((/(\.vsd)($|\?)/i.test(filename) || /(\.vss)($|\?)/i.test(filename)) && VSD_CONVERT_URL != null)
{
var formData = new FormData();
formData.append('file1', file, filename);
@ -5830,6 +5833,8 @@
{
try
{
//add back the file name
xhr.response.name = filename;
this.doImportVisio(xhr.response, done, onerror);
}
catch (e)
@ -5907,34 +5912,32 @@
/**
* Imports the given Lucidchart data.
*/
EditorUi.prototype.importLucidChart = function(data, dx, dy, crop, done)
EditorUi.prototype.convertLucidChart = function(data, success, error)
{
var delayed = mxUtils.bind(this, function()
{
this.loadingExtensions = false;
// Checks for signature method
if (this.pasteLucidChart)
if (typeof window.LucidImporter !== 'undefined')
{
try
{
this.insertLucidChart(data, dx, dy, crop, done);
success(LucidImporter.importState(JSON.parse(data)));
}
catch (e)
{
this.handleError(e);
}
finally
{
if (done != null)
{
done();
}
error(e);
}
}
else
{
error({message: mxResources.get('serviceUnavailableOrBlocked')});
}
});
if (!this.pasteLucidChart && !this.loadingExtensions && !this.isOffline())
if (typeof window.LucidImporter === 'undefined' &&
!this.loadingExtensions && !this.isOffline())
{
this.loadingExtensions = true;
@ -5949,80 +5952,11 @@
}
else
{
// Must be async for cell selection
// Async needed for selection
window.setTimeout(delayed, 0);
}
};
/**
* Automatic loading for lucidchart import.
*/
EditorUi.prototype.insertLucidChart = function(data, dx, dy, crop, done)
{
var state = JSON.parse(data);
// Extracts and sorts all pages
var pages = [];
if (state.state != null)
{
state = JSON.parse(state.state);
for (var id in state.Pages)
{
pages.push(state.Pages[id]);
}
pages.sort(function(a, b)
{
if (a.Properties.Order < b.Properties.Order)
{
return -1;
}
else if (a.Properties.Order > b.Properties.Order)
{
return 1;
}
else
{
return 0;
}
});
}
else
{
pages.push(state);
}
if (pages.length > 0)
{
this.editor.graph.getModel().beginUpdate();
try
{
this.pasteLucidChart(pages[0], dx, dy, crop);
// If pages are enabled add more pages
if (this.pages != null)
{
var current = this.currentPage;
for (var i = 1; i < pages.length; i++)
{
this.insertPage();
this.pasteLucidChart(pages[i]);
}
this.selectPage(current);
}
}
finally
{
this.editor.graph.getModel().endUpdate();
}
}
};
/**
* Imports the given XML into the existing diagram.
* TODO: Make this function asynchronous
@ -6042,7 +5976,8 @@
{
if (xhr.readyState == 4 && xhr.status >= 200 && xhr.status <= 299)
{
this.editor.graph.setSelectionCells(this.insertTextAt(xhr.responseText, dx, dy, true));
this.editor.graph.setSelectionCells(this.insertTextAt(
xhr.responseText, dx, dy, true));
}
}));
@ -6050,7 +5985,8 @@
return [];
}
// Handles special case of data URI which requires async loading for finding size
else if (text.substring(0, 5) == 'data:' || (!this.isOffline() && (asImage || (/\.(gif|jpg|jpeg|tiff|png|svg)$/i).test(text))))
else if (text.substring(0, 5) == 'data:' || (!this.isOffline() &&
(asImage || (/\.(gif|jpg|jpeg|tiff|png|svg)$/i).test(text))))
{
var graph = this.editor.graph;
@ -6150,9 +6086,16 @@
}
else if (text.length > 0)
{
if (text.substring(0, 26) == '{"state":"{\\"Properties\\":')
if (this.isLucidChartData(text))
{
this.importLucidChart(text, dx, dy, crop);
this.convertLucidChart(text, mxUtils.bind(this, function(xml)
{
this.editor.graph.setSelectionCells(
this.importXml(xml, dx, dy, crop));
}), mxUtils.bind(this, function(e)
{
this.handleError(e);
}));
}
else
{
@ -6248,6 +6191,14 @@
{
return /(\"contentType\":\s*\"application\/gliffy\+json\")/.test(data);
};
/**
* Returns true for Gliffy or GraphML data or .vsdx filenames.
*/
EditorUi.prototype.isLucidChartData = function(data)
{
return data != null && data.substring(0, 26) == '{"state":"{\\"Properties\\":';
};
/**
* Imports a local file from the device or local storage.
@ -6411,7 +6362,7 @@
}
}));
}
else if (file != null && filename != null && ((/(\.vsdx?)($|\?)/i.test(filename)) || /(\.vssx)($|\?)/i.test(filename)))
else if (file != null && filename != null && ((/(\.vsdx?)($|\?)/i.test(filename)) || /(\.vssx?)($|\?)/i.test(filename)))
{
// LATER: done and async are a hack before making this asynchronous
async = true;
@ -6439,7 +6390,7 @@
}
}), filename);
}
else if (!/(\.vsd)($|\?)/i.test(filename))
else if (!/(\.vsd)($|\?)/i.test(filename) && !/(\.vss)($|\?)/i.test(filename))
{
cells = this.insertTextAt(this.validateFileData(data), dx, dy, true, null, crop);
}
@ -6537,7 +6488,7 @@
this.spinner.stop();
this.loadLibrary(new LocalLibrary(this, data, filename));
return null;
return null;
}
else
{
@ -6807,26 +6758,26 @@
}
else
{
fn(e.target.result, file.type, x + index * gs, y + index * gs, 240, 160, file.name, function(cells)
{
barrier(index, function()
{
return cells;
});
});
fn(e.target.result, file.type, x + index * gs, y + index * gs, 240, 160, file.name, function(cells)
{
barrier(index, function()
{
return cells;
});
});
}
}
});
// Handles special cases
if (/(\.vsdx?)($|\?)/i.test(file.name) || /(\.vssx)($|\?)/i.test(file.name))
if (/(\.vsdx?)($|\?)/i.test(file.name) || /(\.vssx?)($|\?)/i.test(file.name))
{
fn(null, file.type, x + index * gs, y + index * gs, 240, 160, file.name, function(cells)
{
barrier(index, function()
{
return cells;
});
{
return cells;
});
}, file);
}
else if (file.type.substring(0, 5) == 'image')
@ -7227,6 +7178,8 @@
var editorUiInit = EditorUi.prototype.init;
EditorUi.prototype.init = function()
{
mxStencilRegistry.allowEval = !this.isOfflineApp();
// Must be set before UI is created in superclass
if (typeof window.mxSettings !== 'undefined')
{
@ -7245,14 +7198,19 @@
// Redirects custom link via UI for page link handling
graph.customLinkClicked = function(link)
{
var done = false;
try
{
ui.handleCustomLink(link);
done = true;
}
catch (e)
{
ui.handleError(e);
}
return done;
};
// Sets help link for placeholders
@ -7315,9 +7273,9 @@
if (href != null && graph.isCustomLink(href) &&
(mxEvent.isTouchEvent(evt) ||
!mxEvent.isPopupTrigger(evt)))
!mxEvent.isPopupTrigger(evt)) &&
graph.customLinkClicked(href))
{
graph.customLinkClicked(href);
mxEvent.consume(evt);
}
@ -7374,29 +7332,6 @@
return graphGetGlobalVariable.apply(this, arguments);
};
var graphCreateLinkForHint = graph.createLinkForHint;
graph.createLinkForHint = function(href, label)
{
if (href != null && graph.isCustomLink(href))
{
label = graph.getLinkTitle(href);
}
var a = graphCreateLinkForHint.call(this, href, label);
if (href != null && graph.isCustomLink(href))
{
mxEvent.addListener(a, 'click', function(evt)
{
graph.customLinkClicked(href);
mxEvent.consume(evt);
});
}
return a;
};
var graphLabelLinkClicked = graph.labelLinkClicked;
graph.labelLinkClicked = function(state, elt, evt)
@ -8109,6 +8044,11 @@
{
this.selectPage(page)
}
else
{
// Needs fallback for missing resource in case of viewer lightbox
throw new Error(mxResources.get('pageNotFound') || 'Page not found');
}
}
else
{
@ -8283,7 +8223,14 @@
if (content != null && content.length > 0)
{
this.importLucidChart(content, 0, 0);
this.convertLucidChart(content, mxUtils.bind(this, function(xml)
{
this.editor.graph.setSelectionCells(this.importXml(xml, 0, 0));
}), mxUtils.bind(this, function(e)
{
this.handleError(e);
}));
mxEvent.consume(evt);
}
}
@ -8431,8 +8378,8 @@
{
if (dropElt != null)
{
dropElt.parentNode.removeChild(dropElt);
dropElt = null;
dropElt.parentNode.removeChild(dropElt);
dropElt = null;
}
if (this.editor.graph.isEnabled() || urlParams['embed'] != '1')
@ -8687,7 +8634,7 @@
}
});
if (/(\.vsdx?)($|\?)/i.test(name) || /(\.vssx)($|\?)/i.test(name))
if (/(\.vsdx?)($|\?)/i.test(name) || /(\.vssx?)($|\?)/i.test(name))
{
this.importVisio(file, mxUtils.bind(this, function(xml)
{
@ -8717,7 +8664,7 @@
}
}));
}
else if (data.substring(0, 26) == '{"state":"{\\"Properties\\":')
else if (this.isLucidChartData(data))
{
if (/(\.json)$/i.test(name))
{
@ -8725,11 +8672,14 @@
}
// LATER: Add import step that produces cells and use callback
this.openLocalFile(this.emptyDiagramXml, name, temp);
this.importLucidChart(data, 0, 0, null, mxUtils.bind(this, function()
this.convertLucidChart(data, mxUtils.bind(this, function(xml)
{
this.editor.undoManager.clear();
this.spinner.stop();
this.openLocalFile(xml, name, temp);
}), mxUtils.bind(this, function(e)
{
this.spinner.stop();
this.handleError(e);
}));
}
else if (e.target.result.substring(0, 10) == '<mxlibrary')
@ -8834,8 +8784,15 @@
window.openFile.setData(data, name);
window.openWindow(this.getUrl(), null, mxUtils.bind(this, function()
{
this.confirm(mxResources.get('allChangesLost'), null, fn,
mxResources.get('cancel'), mxResources.get('discardChanges'));
if (currentFile != null && currentFile.isModified())
{
this.confirm(mxResources.get('allChangesLost'), null, fn,
mxResources.get('cancel'), mxResources.get('discardChanges'));
}
else
{
fn();
}
}));
}
}
@ -9766,7 +9723,9 @@
// Default values
var style = null;
var parentstyle = null;
var identity = null;
var parent = null;
var namespace = '';
var width = 'auto';
var height = 'auto';
@ -9851,10 +9810,18 @@
{
style = value;
}
else if (key == 'parentstyle')
{
parentstyle = value;
}
else if (key == 'identity' && value.length > 0 && value != '-')
{
identity = value;
}
else if (key == 'parent' && value.length > 0 && value != '-')
{
parent = value;
}
else if (key == 'namespace' && value.length > 0 && value != '-')
{
namespace = value;
@ -9909,17 +9876,22 @@
var keys = this.editor.csvToArray(lines[index]);
// Converts name of identity to index of column
// Converts name of identity and parent to indexes of column
var identityIndex = null;
var parentIndex = null;
if (identity != null)
if (identity != null || parent != null)
{
for (var i = 0; i < keys.length; i++)
{
if (identity == keys[i])
{
identityIndex = i;
break;
}
if (parent == keys[i])
{
parentIndex = i;
}
}
}
@ -9964,7 +9936,7 @@
cell.vertex = true;
cell.id = id;
}
for (var j = 0; j < values.length; j++)
{
graph.setAttributeForCell(cell, keys[j], values[j]);
@ -10022,8 +9994,19 @@
y += cell.geometry.height + nodespacing;
}
cells.push(graph.addCell(cell));
var parent = (parentIndex != null) ? graph.model.getCell(
namespace + values[parentIndex]) : null;
if (parent != null)
{
parent.style = graph.replacePlaceholders(parent, parentstyle);
graph.addCell(cell, parent);
}
else
{
cells.push(graph.addCell(cell));
}
}
}
@ -10095,7 +10078,7 @@
{
edgeLayout.execute(graph.getDefaultParent());
// Aligns cells to grid and/or rounds positions
// Aligns cells to grid and/or rounds positions
for (var i = 0; i < cells.length; i++)
{
var geo = graph.getCellGeometry(cells[i]);

View file

@ -181,21 +181,26 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
var fs = require('fs');
fs.readFile(path, encoding, mxUtils.bind(this, function (e, data)
{
if (e)
{
editorUi.spinner.stop();
editorUi.handleError(e);
}
else
{
if (e)
{
editorUi.spinner.stop();
editorUi.handleError(e);
}
else
{
try
{
if (data.substring(0, 26) == '{"state":"{\\"Properties\\":')
if (editorUi.isLucidChartData(data))
{
editorUi.importLucidChart(data, 0, 0, null, function()
editorUi.convertLucidChart(data, function(xml)
{
editorUi.spinner.stop();
graph.setSelectionCells(editorUi.importXml(xml));
}, function(e)
{
editorUi.spinner.stop();
editorUi.handleError(e);
});
}
else if (/(\.vsdx)($|\?)/i.test(path))
@ -203,7 +208,7 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
editorUi.importVisio(editorUi.base64ToBlob(data, 'application/octet-stream'), function(xml)
{
editorUi.spinner.stop();
editorUi.editor.graph.setSelectionCells(editorUi.insertTextAt(xml, 0, 0, true));
graph.setSelectionCells(editorUi.importXml(xml));
});
}
else if (!editorUi.isOffline() && new XMLHttpRequest().upload && editorUi.isRemoteFileFormat(data, path))
@ -217,7 +222,7 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
if (xhr.status >= 200 && xhr.status <= 299)
{
editorUi.editor.graph.setSelectionCells(editorUi.insertTextAt(xhr.responseText, 0, 0, true));
graph.setSelectionCells(editorUi.importXml(xhr.responseText));
}
}
}), path);
@ -235,40 +240,40 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
}
}
else if (/\.svg$/i.test(path))
{
// LATER: Use importXml without throwing exception if no data
// Checks if SVG contains content attribute
var root = mxUtils.parseXml(data);
var svgs = root.getElementsByTagName('svg');
if (svgs.length > 0)
{
// LATER: Use importXml without throwing exception if no data
// Checks if SVG contains content attribute
var root = mxUtils.parseXml(data);
var svgs = root.getElementsByTagName('svg');
if (svgs.length > 0)
{
var svgRoot = svgs[0];
var cont = svgRoot.getAttribute('content');
if (cont != null && cont.charAt(0) != '<' && cont.charAt(0) != '%')
{
var svgRoot = svgs[0];
var cont = svgRoot.getAttribute('content');
if (cont != null && cont.charAt(0) != '<' && cont.charAt(0) != '%')
{
cont = unescape((window.atob) ? atob(cont) : Base64.decode(cont, true));
}
if (cont != null && cont.charAt(0) == '%')
{
cont = decodeURIComponent(cont);
}
if (cont != null && (cont.substring(0, 8) === '<mxfile ' ||
cont.substring(0, 14) === '<mxGraphModel '))
{
asImage = false;
data = cont;
}
else
{
asImage = true;
data = btoa(data);
}
cont = unescape((window.atob) ? atob(cont) : Base64.decode(cont, true));
}
}
if (cont != null && cont.charAt(0) == '%')
{
cont = decodeURIComponent(cont);
}
if (cont != null && (cont.substring(0, 8) === '<mxfile ' ||
cont.substring(0, 14) === '<mxGraphModel '))
{
asImage = false;
data = cont;
}
else
{
asImage = true;
data = btoa(data);
}
}
}
if (asImage)
{
@ -315,8 +320,8 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
editorUi.spinner.stop();
editorUi.handleError(e);
}
}
}));
}
}));
}
}
}
@ -331,10 +336,10 @@ FeedbackDialog.feedbackUrl = 'https://log.draw.io/email';
{
oldNew();
}
else {
else
{
const ipc = require('electron').ipcRenderer
ipc.sendSync('winman', {action: 'newfile', opt: {width: 1600}})
}
}), null, null, Editor.ctrlKey + '+N');

View file

@ -3,6 +3,7 @@
*
* TODO: Move to dynamic loading minimized plugin.
*/
LucidImporter = {};
(function()
{
// Global import transformation
@ -3087,11 +3088,8 @@
return hidden;
};
EditorUi.prototype.pasteLucidChart = function(g, dx, dy, crop)
function importLucidPage(graph, g, dx, dy, crop, noSelection)
{
// Creates a new graph, inserts cells and returns XML for insert
var graph = this.editor.graph;
graph.getModel().beginUpdate();
try
{
@ -3257,22 +3255,87 @@
}
}
graph.setSelectionCells(select);
if (!noSelection)
graph.setSelectionCells(select);
}
finally
{
graph.getModel().endUpdate();
}
if (!graph.isSelectionEmpty())
};
function createGraph()
{
//TODO Set the graph defaults
var graph = new Graph();
graph.setExtendParents(false);
graph.setExtendParentsOnAdd(false);
graph.setConstrainChildren(false);
graph.setHtmlLabels(true);
graph.getModel().maintainEdgeParent = false;
return graph;
};
LucidImporter.importState = function(state)
{
var xml = ['<?xml version=\"1.0\" encoding=\"UTF-8\"?>', '<mxfile>'];
// Extracts and sorts all pages
var pages = [];
if (state.state != null)
{
graph.scrollCellToVisible(graph.getSelectionCell());
state = JSON.parse(state.state);
if (this.hoverIcons != null)
for (var id in state.Pages)
{
this.hoverIcons.update(graph.view.getState(graph.getSelectionCell()));
pages.push(state.Pages[id]);
}
pages.sort(function(a, b)
{
if (a.Properties.Order < b.Properties.Order)
{
return -1;
}
else if (a.Properties.Order > b.Properties.Order)
{
return 1;
}
else
{
return 0;
}
});
}
else
{
pages.push(state);
}
var graph = createGraph();
var codec = new mxCodec();
for (var i = 0; i < pages.length; i++)
{
xml.push('<diagram');
if (pages[i].Properties != null && pages[i].Properties.Title != null)
{
xml.push(' name="' + mxUtils.htmlEntities(pages[i].Properties.Title) + '"');
}
importLucidPage(graph, pages[i], null, null, null, true);
var node = codec.encode(graph.getModel());
graph.getModel().clear();
xml.push('>' + Graph.prototype.compress(mxUtils.getXml(node)) + '</diagram>');
}
xml.push('</mxfile>');
return xml.join('');
};
function addRouterEdge(x, y, edge, select, graph, cells, v, cell)

View file

@ -178,14 +178,19 @@ GraphViewer.prototype.init = function(container, xmlNode, graphConfig)
this.selectPageById = function(id)
{
var found = false;
for (var i = 0; i < this.diagrams.length; i++)
{
if (this.diagrams[i].getAttribute('id') == id)
{
this.selectPage(i);
found = true;
break;
}
}
return found;
};
var update = mxUtils.bind(this, function()
@ -249,15 +254,24 @@ GraphViewer.prototype.init = function(container, xmlNode, graphConfig)
this.graph.customLinkClicked = function(href)
{
var done = true;
if (href.substring(0, 13) == 'data:page/id,')
{
var comma = href.indexOf(',');
self.selectPageById(href.substring(comma + 1));
if (!self.selectPageById(href.substring(comma + 1)))
{
done = false;
alert(mxResources.get('pageNotFound') || 'Page not found');
}
}
else
{
this.handleCustomLink(href);
}
return done;
};
if (this.graphConfig.toolbar != null)
@ -1172,9 +1186,9 @@ GraphViewer.prototype.addClickHandler = function(graph, ui)
}
}
else if (href != null && ui == null && graph.isCustomLink(href) &&
(mxEvent.isTouchEvent(evt) || !mxEvent.isPopupTrigger(evt)))
(mxEvent.isTouchEvent(evt) || !mxEvent.isPopupTrigger(evt)) &&
graph.customLinkClicked(href))
{
graph.customLinkClicked(href);
mxEvent.consume(evt);
}
}), mxUtils.bind(this, function(evt)

View file

@ -9,7 +9,7 @@ window.isSvgBrowser = window.isSvgBrowser || (navigator.userAgent.indexOf('MSIE'
// CUSTOM_PARAMETERS - URLs for save and export
window.EXPORT_URL = window.EXPORT_URL || 'https://exp.draw.io/ImageExport4/export';
window.PLANT_URL = window.PLANT_URL || 'https://exp-plant.draw.io/plantuml2';
window.PLANT_URL = window.PLANT_URL || 'https://exp-plant.draw.io/plantuml3';
window.VSD_CONVERT_URL = window.VSD_CONVERT_URL || "https://convert.draw.io/VsdConverter/api/converter";
window.SAVE_URL = window.SAVE_URL || 'save';
window.OPEN_URL = window.OPEN_URL || 'open';

View file

@ -459,7 +459,7 @@
if (vertices.length > 0)
{
var dlg = new EditGeometryDialog(editorUi, vertices);
editorUi.showDialog(dlg.container, 190, 250, true, true);
editorUi.showDialog(dlg.container, 200, 250, true, true);
dlg.init();
}
}, null, null, Editor.ctrlKey + '+Shift+M');

View file

@ -116,7 +116,7 @@ EditorUi.initMinimalTheme = function()
{
ui.formatWindow = new WrapperWindow(ui, mxResources.get('format'),
Math.max(20, ui.diagramContainer.clientWidth - 240 - 12), 56,
240, Math.min(546, graph.container.clientHeight - 10), function(container)
240, Math.min(550, graph.container.clientHeight - 10), function(container)
{
var format = ui.createFormat(container);
format.init();
@ -881,7 +881,16 @@ EditorUi.initMinimalTheme = function()
{
ui.menus.addMenuItems(menu, ['insertRectangle', 'insertEllipse', 'insertRhombus', '-', 'insertText',
'insertLink', '-', 'insertImage'], parent);
ui.menus.addSubmenu('importFrom', menu, parent);
if (mxClient.IS_CHROMEAPP || EditorUi.isElectronApp)
{
ui.menus.addMenuItems(menu, ['import'], parent);
}
else
{
ui.menus.addSubmenu('importFrom', menu, parent);
}
menu.addSeparator(parent);
ui.menus.addSubmenu('insertLayout', menu, parent);
ui.menus.addSubmenu('insertAdvanced', menu, parent);

View file

@ -556,6 +556,7 @@ Graph.prototype.setViewState = function(state)
this.scrollbars = this.defaultScrollbars;
this.graphHandler.guidesEnabled = true;
this.foldingEnabled = true;
this.setShadowVisible(false, false);
this.defaultParent = null;
this.setTooltips(true);
this.setConnectable(true);
@ -1326,6 +1327,13 @@ EditorUi.prototype.createPageMenu = function(page, label)
}
})();
//Overrides ChangePageSetup codec to exclude page
(function()
{
var codec = mxCodecRegistry.getCodec(ChangePageSetup);
codec.exclude.push('page');
})();
//Registers codec for MovePage
(function()
{

View file

@ -347,13 +347,13 @@ RealtimeMapping.prototype.initRealtime = function()
this.diagramMap.set('shadowVisible', (vs != null && vs.shadowVisible) ? '1' : '0');
this.diagramMap.set('foldingEnabled', (vs != null && !vs.foldingEnabled) ? '0' : '1');
this.diagramMap.set('mathEnabled', (vs != null && vs.mathEnabled) ? '1' : '0');
this.diagramMap.set('pageScale', this.graph.pageScale);
this.diagramMap.set('pageScale', (vs != null) ? vs.pageScale : mxGraph.prototype.pageScale);
this.diagramMap.set('pageVisible', (vs != null && !vs.pageVisible) ? '0' : '1');
this.diagramMap.set('pageFormat', pf.width + ',' + pf.height);
this.diagramMap.set('backgroundImage', (vs != null && vs.backgroundImage != null) ?
JSON.stringify(vs.backgroundImage) : '');
this.diagramMap.set('backgroundColor', (vs != null && vs.background != null) ?
this.graph.background : '');
this.diagramMap.set('backgroundImage', (vs != null &&
vs.backgroundImage != null) ? JSON.stringify(vs.backgroundImage) : '');
this.diagramMap.set('backgroundColor', (vs != null &&
vs.background != null) ? vs.background : '');
}
this.root.set('modifiedDate', new Date().getTime());

File diff suppressed because it is too large Load diff

View file

@ -109,7 +109,7 @@
/**
*
*/
Sidebar.prototype.veeam = ['2D', '3D'];
Sidebar.prototype.veeam = ['Data Center', 'Misc', 'Software', 'Storage', 'UsersStatus', 'VASComponents', 'Backup Replication', 'Products', 'VMs and Tape', '2D', '3D'];
/**
*

View file

@ -11773,7 +11773,7 @@ com.mxgraph.io.mxVsdxCodec.parsererrorNS_$LI$();
EditorUi.prototype.doImportVisio = function(file, done, onerror)
{
if (file.name != null && /(\.vssx)($|\?)/i.test(file.name))
if (file.name != null && /(\.vssx?)($|\?)/i.test(file.name))
{
new com.mxgraph.io.mxVssxCodec().decodeVssx(file, done);
}

View file

@ -730,6 +730,14 @@ mxVsdxCanvas2D.prototype.text = function(x, y, w, h, str, align, valign, wrap, f
str = mxUtils.getOuterHtml(str);
}
//This is the case with edges
if (w == 0 && h == 0)
{
var strSize = mxUtils.getSizeForString(str, that.cellState.style["fontSize"], that.cellState.style["fontFamily"]);
w = strSize.width * 1.2;
h = strSize.height * 1.2;
}
//TODO support HTML text formatting and remaining attributes
if (format == 'html')
{
@ -866,14 +874,15 @@ mxVsdxCanvas2D.prototype.text = function(x, y, w, h, str, align, valign, wrap, f
{
if (ch[i].nodeType == 3)
{ //#text
var fontStyle = that.cellState.style["fontStyle"];
var styleMap = {
fontColor: pStyle['fontColor'] || that.cellState.style["fontColor"],
fontSize: pStyle['fontSize'] || that.cellState.style["fontSize"],
fontFamily: pStyle['fontFamily'] || that.cellState.style["fontFamily"],
align: pStyle['align'] || that.cellState.style["align"],
bold: pStyle['bold'],
italic: pStyle['italic'],
underline: pStyle['underline']
bold: pStyle['bold'] || (fontStyle & 1),
italic: pStyle['italic'] || (fontStyle & 2),
underline: pStyle['underline'] || (fontStyle & 4)
};
createTextRow(styleMap, charSect, pSect, text, ch[i].textContent);
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -189,7 +189,6 @@ Actions.prototype.init = function()
}
}, null, null, 'Alt+Shit+V');
function deleteCells(includeEdges)
{
// Cancels interactive operations
@ -357,7 +356,7 @@ Actions.prototype.init = function()
ui.showLinkDialog(value, mxResources.get('apply'), function(link)
{
link = mxUtils.trim(link);
graph.setLinkForCell(cell, (link.length > 0) ? link : null);
graph.setLinkForCell(cell, (link.length > 0) ? link : null);
});
}
}, null, null, 'Alt+Shift+L');
@ -1031,7 +1030,7 @@ Actions.prototype.init = function()
var model = graph.getModel();
var dlg = new TextareaDialog(this.editorUi, mxResources.get('editStyle') + ':',
model.getStyle(cells[0]) || '', function(newValue)
model.getStyle(cells[0]) || '', function(newValue)
{
if (newValue != null)
{

View file

@ -2446,7 +2446,7 @@ TextFormatPanel.prototype.addFont = function(container)
var cssPanel = stylePanel.cloneNode();
var cssMenu = this.editorUi.toolbar.addMenu(mxResources.get('style'),
mxResources.get('style'), true, 'formatBlock', cssPanel);
mxResources.get('style'), true, 'formatBlock', cssPanel, null, true);
cssMenu.style.color = 'rgb(112, 112, 112)';
cssMenu.style.whiteSpace = 'nowrap';
cssMenu.style.overflow = 'hidden';
@ -2473,8 +2473,9 @@ TextFormatPanel.prototype.addFont = function(container)
colorPanel.style.borderTop = '1px solid #c0c0c0';
colorPanel.style.paddingTop = '6px';
colorPanel.style.paddingBottom = '6px';
var fontMenu = this.editorUi.toolbar.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily', stylePanel);
var fontMenu = this.editorUi.toolbar.addMenu('Helvetica', mxResources.get('fontFamily'),
true, 'fontFamily', stylePanel, null, true);
fontMenu.style.color = 'rgb(112, 112, 112)';
fontMenu.style.whiteSpace = 'nowrap';
fontMenu.style.overflow = 'hidden';

View file

@ -1506,8 +1506,7 @@ Graph.prototype.isCustomLink = function(href)
*/
Graph.prototype.customLinkClicked = function(link)
{
console.log('customLinkClicked not implemented');
// Hook for subclassers
return false;
};
/**
@ -5936,6 +5935,52 @@ if (typeof mxVertexHandler != 'undefined')
{
document.execCommand('unlink', false);
}
else if (mxClient.IS_FF)
{
// Workaround for Firefox that adds a new link and removes
// the href from the inner link if its parent is a span is
// to remove all inner links inside the new outer link
var tmp = this.cellEditor.textarea.getElementsByTagName('a');
var oldLinks = [];
for (var i = 0; i < tmp.length; i++)
{
oldLinks.push(tmp[i]);
}
document.execCommand('createlink', false, mxUtils.trim(value));
// Finds the new link element
var newLinks = this.cellEditor.textarea.getElementsByTagName('a');
if (newLinks.length == oldLinks.length + 1)
{
// Inverse order in favor of appended links
for (var i = newLinks.length - 1; i >= 0; i--)
{
if (newLinks[i] != oldLinks[i - 1])
{
// Removes all inner links from the new link and
// moves the children to the inner link parent
var tmp = newLinks[i].getElementsByTagName('a');
while (tmp.length > 0)
{
var parent = tmp[0].parentNode;
while (tmp[0].firstChild != null)
{
parent.insertBefore(tmp[0].firstChild, tmp[0]);
}
parent.removeChild(tmp[0]);
}
break;
}
}
}
}
else
{
// LATER: Fix inserting link/image in IE8/quirks after focus lost
@ -6550,15 +6595,36 @@ if (typeof mxVertexHandler != 'undefined')
*/
Graph.prototype.createLinkForHint = function(link, label)
{
label = (label != null) ? label : link;
link = (link != null) ? link : 'javascript:void(0);';
if (label == null || label.length == 0)
{
if (this.isCustomLink(link))
{
label = this.getLinkTitle(link);
}
else
{
label = link;
}
}
// Helper function to shorten strings
function short(str, max)
{
if (str.length > max)
{
str = str.substring(0, Math.round(max / 2)) + '...' +
str.substring(str.length - Math.round(max / 4));
}
return str;
};
var a = document.createElement('a');
a.setAttribute('href', this.getAbsoluteUrl(link));
if (link != null && !this.isCustomLink(link))
{
a.setAttribute('title', link);
}
a.setAttribute('title', short((this.isCustomLink(link)) ?
this.getLinkTitle(link) : link, 80));
if (this.linkTarget != null)
{
@ -6566,16 +6632,17 @@ if (typeof mxVertexHandler != 'undefined')
}
// Adds shortened label to link
var max = 40;
var head = 26;
var tail = 10;
mxUtils.write(a, short(label, 40));
if (label.length > max)
// Handles custom links
if (this.isCustomLink(link))
{
label = label.substring(0, head) + '...' + label.substring(label.length - tail);
mxEvent.addListener(a, 'click', mxUtils.bind(this, function(evt)
{
this.customLinkClicked(link);
mxEvent.consume(evt);
}));
}
mxUtils.write(a, label);
return a;
};
@ -8143,8 +8210,8 @@ if (typeof mxVertexHandler != 'undefined')
var div = document.createElement('div');
div.style.marginTop = (link != null || i > 0) ? '6px' : '0px';
div.appendChild(this.graph.createLinkForHint(
links[i].getAttribute('href'),
mxUtils.getTextContent(links[i])));
links[i].getAttribute('href'),
mxUtils.getTextContent(links[i])));
this.linkHint.appendChild(div);
}

View file

@ -3153,6 +3153,16 @@ Sidebar.prototype.itemClicked = function(cells, ds, evt, elt)
else
{
var pt = graph.getFreeInsertPoint();
if (mxEvent.isShiftDown(evt))
{
var bounds = graph.getGraphBounds();
var tr = graph.view.translate;
var s = graph.view.scale;
pt.x = bounds.x / s - tr.x + bounds.width / s + graph.gridSize;
pt.y = bounds.y / s - tr.y;
}
ds.drop(graph, evt, null, pt.x, pt.y, true);
if (this.editorUi.hoverIcons != null && (mxEvent.isTouchEvent(evt) || mxEvent.isPenEvent(evt)))

View file

@ -655,7 +655,7 @@ Toolbar.prototype.hideMenu = function()
/**
* Adds a label to the toolbar.
*/
Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name, c, showAll)
Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name, c, showAll, ignoreState)
{
var menu = this.editorUi.menus.get(name);
var elt = this.addMenuFunction(label, tooltip, showLabels, function()
@ -663,11 +663,14 @@ Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name, c, showAl
menu.funct.apply(menu, arguments);
}, c, showAll);
menu.addListener('stateChanged', function()
if (!ignoreState)
{
elt.setEnabled(menu.enabled);
});
menu.addListener('stateChanged', function()
{
elt.setEnabled(menu.enabled);
});
}
return elt;
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Rechts
rightAlign=Rechts
rightToLeft=Von rechts nach links
rotate=Rotieren
rotateTooltip=Klicken und ziehen um zu rotieren, klicken für 90 Grad Drehung
rotateTooltip=Klicken und ziehen um zu rotieren, klicken um nur Form um 90 Grad zu drehen
rotation=Rotation
rounded=Abgerundet
save=Speichern
@ -674,7 +674,7 @@ transparentBackground=Transparenter Hintergrund
trello=Trello
tryAgain=Erneut versuchen
tryOpeningViaThisPage=Versuchen Sie die Datei über diese Seite zu öffnen.
turn=Drehen 90°
turn=Nur Form um 90° drehen
type=Typ
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

View file

@ -585,7 +585,7 @@ right=Right
rightAlign=Right Align
rightToLeft=Right to left
rotate=Rotate
rotateTooltip=Click and drag to rotate, click to turn by 90 degrees
rotateTooltip=Click and drag to rotate, click to turn shape only by 90 degrees
rotation=Rotation
rounded=Rounded
save=Save
@ -674,7 +674,7 @@ transparentBackground=Transparent Background
trello=Trello
tryAgain=Try again
tryOpeningViaThisPage=Try opening via this page.
turn=Rotate 90°
turn=Rotate shape only by 90°
type=Type
twitter=Twitter
uml=UML

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,18 @@
border-radius:3px;
background-image: linear-gradient(rgb(255, 255, 255) 0px, rgb(242, 242, 242) 100%);
}
body .geBigButton {
background-color:#0052cc;
background-image:none;
}
body .geBigButton:hover {
background-color:#0065ff;
background-image: none;
}
body .geBigButton:active {
background-color:#0747a6;
background-image:none;
}
body > .geToolbarContainer .geLabel, body > .geToolbarContainer .geButton {
-webkit-box-shadow: none !important;
-moz-box-shadow: none !important;
@ -139,7 +151,7 @@ div.mxWindow .geButton:active, .mxWindow .geLabel:active {
padding:8px 0px 8px 16px !important;
}
.geMenubarContainer * {
color: #ffffff !important;
color: #DEEBFF !important;
}
.geMenubarContainer .geStatus {
color: rgb(179, 179, 179) !important;
@ -161,7 +173,7 @@ div.mxWindow .geButton:active, .mxWindow .geLabel:active {
padding: 7px !important;
}
.geMenubarContainer .geItem:hover {
background-color: rgb(59, 115, 175);
background-color: rgba(9, 30, 66, 0.48);
}
.geToolbarContainer .geLabel {
margin:0px;
@ -178,7 +190,7 @@ div.mxWindow .geButton:active, .mxWindow .geLabel:active {
transition: none;
}
.geMenubarContainer {
background-color: #205081 !important;
background-color: #0049B0 !important;
background-repeat: repeat-x;
color: rgb(255, 255, 255);
font-size: 13px;