9.3.4 release
This commit is contained in:
parent
94642c30f9
commit
6fbf5bc048
87 changed files with 5045 additions and 3475 deletions
|
@ -1,3 +1,12 @@
|
|||
06-NOV-2018: 9.3.4
|
||||
|
||||
- Improves sanity check for Google Drive files
|
||||
- Uses mxGraph 3.9.11 beta 4
|
||||
|
||||
02-NOV-2018: 9.3.2
|
||||
|
||||
- Adds sanity check for Google Drive files
|
||||
|
||||
26-OCT-2018: 9.3.1
|
||||
|
||||
- Adds current page index to JSON protocol
|
||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
9.3.1
|
||||
9.3.4
|
|
@ -556,7 +556,7 @@ mxSwimlane.prototype.paintDivider=function(a,b,c,d,e,f,g){g||a.setShadow(!1);a.b
|
|||
mxSwimlane.prototype.getImageBounds=function(a,b,c,d){return this.isHorizontal()?new mxRectangle(a+c-this.imageSize,b,this.imageSize,this.imageSize):new mxRectangle(a,b,this.imageSize,this.imageSize)};function mxGraphLayout(a){this.graph=a}mxGraphLayout.prototype.graph=null;mxGraphLayout.prototype.useBoundingBox=!0;mxGraphLayout.prototype.parent=null;mxGraphLayout.prototype.moveCell=function(a,b,c){};mxGraphLayout.prototype.execute=function(a){};mxGraphLayout.prototype.getGraph=function(){return this.graph};
|
||||
mxGraphLayout.prototype.getConstraint=function(a,b,c,d){c=this.graph.view.getState(b);b=null!=c?c.style:this.graph.getCellStyle(b);return null!=b?b[a]:null};
|
||||
mxGraphLayout.traverse=function(a,b,c,d,e){if(null!=c&&null!=a&&(b=null!=b?b:!0,e=e||new mxDictionary,!e.get(a)&&(e.put(a,!0),d=c(a,d),null==d||d))&&(d=this.graph.model.getEdgeCount(a),0<d))for(var f=0;f<d;f++){var g=this.graph.model.getEdgeAt(a,f),k=this.graph.model.getTerminal(g,!0)==a;if(!b||k)k=this.graph.view.getVisibleTerminal(g,!k),this.traverse(k,b,c,g,e)}};
|
||||
mxGraphLayout.prototype.isAncestor=function(a,b,c){if(!c)return this.graph.model.getParent(cell)==a;if(b==a)return!1;for(;null!=b&&b!=a;)b=this.graph.model.getParent(b);return b==a};mxGraphLayout.prototype.isVertexMovable=function(a){return this.graph.isCellMovable(a)};mxGraphLayout.prototype.isVertexIgnored=function(a){return!this.graph.getModel().isVertex(a)||!this.graph.isCellVisible(a)};
|
||||
mxGraphLayout.prototype.isAncestor=function(a,b,c){if(!c)return this.graph.model.getParent(b)==a;if(b==a)return!1;for(;null!=b&&b!=a;)b=this.graph.model.getParent(b);return b==a};mxGraphLayout.prototype.isVertexMovable=function(a){return this.graph.isCellMovable(a)};mxGraphLayout.prototype.isVertexIgnored=function(a){return!this.graph.getModel().isVertex(a)||!this.graph.isCellVisible(a)};
|
||||
mxGraphLayout.prototype.isEdgeIgnored=function(a){var b=this.graph.getModel();return!b.isEdge(a)||!this.graph.isCellVisible(a)||null==b.getTerminal(a,!0)||null==b.getTerminal(a,!1)};mxGraphLayout.prototype.setEdgeStyleEnabled=function(a,b){this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE,b?"0":"1",[a])};mxGraphLayout.prototype.setOrthogonalEdge=function(a,b){this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL,b?"1":"0",[a])};
|
||||
mxGraphLayout.prototype.getParentOffset=function(a){var b=new mxPoint;if(null!=a&&a!=this.parent){var c=this.graph.getModel();if(c.isAncestor(this.parent,a))for(var d=c.getGeometry(a);a!=this.parent;)b.x+=d.x,b.y+=d.y,a=c.getParent(a),d=c.getGeometry(a)}return b};
|
||||
mxGraphLayout.prototype.setEdgePoints=function(a,b){if(null!=a){var c=this.graph.model,d=c.getGeometry(a);null==d?(d=new mxGeometry,d.setRelative(!0)):d=d.clone();if(null!=this.parent&&null!=b)for(var e=c.getParent(a),e=this.getParentOffset(e),f=0;f<b.length;f++)b[f].x-=e.x,b[f].y-=e.y;d.points=b;c.setGeometry(a,d)}};
|
||||
|
|
|
@ -36,7 +36,7 @@ Running the conversion site without Hyper-V:
|
|||
========================================
|
||||
Running the conversion site with Hyper-V:
|
||||
|
||||
1- Run VsdConverterApp TCP sever
|
||||
1- Run VsdConverterApp TCP sever (Also disable QuickEdit Mode: Property > Options > Edit Options > QuickEdit Mode)
|
||||
2- Deploy VsdConverter to IIS (manually or using Web Deployment Tool).
|
||||
|
||||
In details (Ignore Hyper-V steps if it is running directly on the server):
|
||||
|
|
|
@ -811,7 +811,8 @@ public class GliffyDiagramConverter
|
|||
cell.setVertex(true);
|
||||
style.append("shape=image;imageAspect=0;");
|
||||
Resource res = gliffyDiagram.embeddedResources.get(svg.embeddedResourceId);
|
||||
|
||||
SVGImporterUtils svgUtils = new SVGImporterUtils();
|
||||
res.data = svgUtils.setViewBox(res.data);
|
||||
style.append("image=data:image/svg+xml,").append(res.getBase64EncodedData()).append(";");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
package com.mxgraph.io.gliffy.importer;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Class is used to stripe large unused white areas on SVG files and return only important parts.
|
||||
* For example, if you have centered square of 50x50 size on 200x200 canvas this class will remove
|
||||
* unused portions of the canvas and return larger square from the center.
|
||||
*
|
||||
*/
|
||||
public class SVGImporterUtils
|
||||
{
|
||||
|
||||
private static final Pattern SVG_PATTERN = Pattern.compile("viewBox=\"(.*?)\"");
|
||||
|
||||
private final static Logger LOGGER = Logger.getLogger(SVGImporterUtils.class.getName());
|
||||
|
||||
public SVGImporterUtils()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* This is main method that will return new viewBox value. Then we use this value to update existing SVG string in Gliffy object.
|
||||
*
|
||||
* @param svgString original SVG string from Gliffy Object.
|
||||
* @return recalculated viewBox parameters as a String
|
||||
*/
|
||||
public String setViewBox(String svgString)
|
||||
{
|
||||
try
|
||||
{
|
||||
Matcher m = SVG_PATTERN.matcher(svgString);
|
||||
while (m.find())
|
||||
{
|
||||
String oldViewBox = m.group();
|
||||
String newViewBox = getNewViewBox(svgString);
|
||||
if (newViewBox != null)
|
||||
{
|
||||
return svgString.replace(oldViewBox, newViewBox);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Throwable exc)
|
||||
{
|
||||
//perfectly fine to blow-up, just ignore - original string will be returned if something goes wrong
|
||||
LOGGER.log(Level.WARNING, "Cannot set viewBox for: " + svgString + " with error " + exc);
|
||||
}
|
||||
|
||||
return svgString;
|
||||
}
|
||||
|
||||
private String getNewViewBox(String svgString) throws Exception
|
||||
{
|
||||
String result = null;
|
||||
Object svg = createSVGDocument(svgString);
|
||||
buildDocument(svg);
|
||||
result = getViewBoxString(svg);
|
||||
return result;
|
||||
}
|
||||
|
||||
private Object createSVGDocument(String svgString) throws Exception
|
||||
{
|
||||
InputStream stream = new ByteArrayInputStream(svgString.getBytes(StandardCharsets.UTF_8));
|
||||
Class<?> myClass = Class.forName("org.apache.batik.dom.svg.SAXSVGDocumentFactory");
|
||||
Method myMethod = myClass.getDeclaredMethod("createSVGDocument", String.class, InputStream.class);
|
||||
String param = null;
|
||||
Object newInstance = myClass.getConstructor(String.class).newInstance(param);
|
||||
Object o = myMethod.invoke(newInstance, "http://www.w3.org/2000/svg", stream);
|
||||
return o;
|
||||
}
|
||||
|
||||
private void buildDocument(Object svg) throws Exception
|
||||
{
|
||||
Class<?> bridgeContextClass = Class.forName("org.apache.batik.bridge.BridgeContext");
|
||||
Class<?> userAgentAdapterClass = Class.forName("org.apache.batik.bridge.UserAgentAdapter");
|
||||
Class<?> userAgentClass = Class.forName("org.apache.batik.bridge.UserAgent");
|
||||
Class<?> gvtBuilderClass = Class.forName("org.apache.batik.bridge.GVTBuilder");
|
||||
Class<?> documentClass = Class.forName("org.w3c.dom.Document");
|
||||
|
||||
Method myBuildMethod = gvtBuilderClass.getDeclaredMethod("build", bridgeContextClass, documentClass);
|
||||
Object newBuilderInstance = gvtBuilderClass.getConstructor().newInstance();
|
||||
Object newUserAgentAdapterInstance = userAgentAdapterClass.getConstructor().newInstance();
|
||||
Object newBridgeContextClass = bridgeContextClass.getConstructor(userAgentClass).newInstance(newUserAgentAdapterInstance);
|
||||
myBuildMethod.invoke(newBuilderInstance, newBridgeContextClass, svg);
|
||||
|
||||
}
|
||||
|
||||
private String getViewBoxString(Object svg) throws Exception
|
||||
{
|
||||
Class<?> svgDocumentClass = Class.forName("org.apache.batik.dom.svg.SVGOMDocument");
|
||||
Class<?> svgSVGElement = Class.forName("org.apache.batik.dom.svg.SVGOMSVGElement");
|
||||
Class<?> svgRect = Class.forName("org.w3c.dom.svg.SVGRect");
|
||||
|
||||
Method getRootElement = svgDocumentClass.getDeclaredMethod("getRootElement");
|
||||
Method getBBox = svgSVGElement.getDeclaredMethod("getBBox");
|
||||
Method getX = svgRect.getDeclaredMethod("getX");
|
||||
Method getY = svgRect.getDeclaredMethod("getY");
|
||||
Method getHeight = svgRect.getDeclaredMethod("getHeight");
|
||||
Method getWidth = svgRect.getDeclaredMethod("getWidth");
|
||||
|
||||
Object root = getRootElement.invoke(svg);
|
||||
Object bbox = getBBox.invoke(root);
|
||||
Object x = getX.invoke(bbox);
|
||||
Object y = getY.invoke(bbox);
|
||||
Object height = getHeight.invoke(bbox);
|
||||
Object width = getWidth.invoke(bbox);
|
||||
|
||||
String result = String.format("viewBox=\"%s %s %s %s\"", getIntValue(x.toString()), getIntValue(y.toString()),
|
||||
getIntValue(width.toString()), getIntValue(height.toString()));
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
private String getIntValue(String value)
|
||||
{
|
||||
int dot = value.indexOf(".");
|
||||
if (dot > 0)
|
||||
{
|
||||
return value.substring(0, dot);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
|
@ -284,7 +284,10 @@ public class GliffyObject implements PostDeserializable
|
|||
|
||||
public String getText()
|
||||
{
|
||||
return graphic.getText().getHtml();
|
||||
GliffyText text = graphic.getText();
|
||||
//TODO These values are hurestics based on analyzing many files. 6 is a range from 2 to 6 so used the maximum
|
||||
int widthDiff = "none".equals(text.overflow)? -3 : 6;
|
||||
return "<div style='width: "+ (width + widthDiff) +"px;height: "+ height +"px;word-break: break-word;'>" + text.getHtml() + "</div>";
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
|||
CACHE MANIFEST
|
||||
|
||||
# THIS FILE WAS GENERATED. DO NOT MODIFY!
|
||||
# 10/26/2018 05:46 PM
|
||||
# 11/06/2018 04:33 PM
|
||||
|
||||
app.html
|
||||
index.html?offline=1
|
||||
|
|
|
@ -410,7 +410,119 @@
|
|||
/**
|
||||
* Main
|
||||
*/
|
||||
App.main();
|
||||
App.main(function (ui)
|
||||
{
|
||||
// **************************************************
|
||||
// TESTING JSON TO XML CONVERTER FOR EOL OF GOOGLE RT
|
||||
// **************************************************
|
||||
// ui.JSON_CHECK = 'JSON-CHECK7';
|
||||
|
||||
// DriveFile.prototype.runCheck = function(json, fileNode, fileData)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// this.debug('JSON Check', this.desc, json);
|
||||
|
||||
// if (this.ui.getCurrentFile() == this && !this.isModified())
|
||||
// {
|
||||
// // Gets comparable XML structures
|
||||
// var convert = (json != null) ? this.getComparableFile(this.ui.drive.convertJsonToXml(json, true)) : null;
|
||||
// var remote = (fileNode != null) ? this.getComparableFile(fileNode) : null;
|
||||
// var local = this.getComparableFile(this.ui.getXmlFileData());
|
||||
|
||||
// // Uses the newer of the two
|
||||
// var age = this.ui.drive.getRealtimeAge(this.desc, json);
|
||||
// var relevant = (age < 0 && convert != null) ? convert : remote;
|
||||
|
||||
// if (local == null || relevant == null || !local.isEqualNode(relevant))
|
||||
// {
|
||||
// this.log('FAIL-REPORT');
|
||||
|
||||
// var summary = ((relevant == convert) ? 'Source: Convert' : 'Source: Remote') +
|
||||
// '\nFile modified: ' + new Date(this.desc.modifiedDate).toUTCString();
|
||||
|
||||
// if (json != null)
|
||||
// {
|
||||
// var mod = (json.value != null && json.value.modifiedDate != null) ? json.value.modifiedDate.json : null;
|
||||
|
||||
// if (mod != null)
|
||||
// {
|
||||
// summary += '\nJson modified: ' + new Date(mod).toUTCString();
|
||||
// }
|
||||
|
||||
// var bak = (json.value != null && json.value.backupDate != null) ? json.value.backupDate.json : null;
|
||||
|
||||
// if (bak != null)
|
||||
// {
|
||||
// summary += '\nJson backedup: ' + new Date(bak).toUTCString();
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (local != null)
|
||||
// {
|
||||
// if (convert != null)
|
||||
// {
|
||||
// summary += '\nConvert-Equals-Local: ' + convert.isEqualNode(local);
|
||||
// }
|
||||
|
||||
// if (remote != null)
|
||||
// {
|
||||
// summary += '\nRemote-Equals-Local: ' + remote.isEqualNode(local);
|
||||
// }
|
||||
// }
|
||||
|
||||
// this.report('Realtime Error Report ' + new Date() +
|
||||
// '\n\nDescription: ' + JSON.stringify({version: this.ui.JSON_CHECK,
|
||||
// realtimeAge: age, title: this.desc.title, editable: this.desc.editable,
|
||||
// copyable: this.desc.copyable, labels: this.desc.labels, id: this.desc.id,
|
||||
// userPermission: this.desc.userPermission, fileSize: this.desc.fileSize,
|
||||
// fileExtension: this.desc.fileExtension, modifiedDate: this.desc.modifiedDate,
|
||||
// mimeType: this.desc.mimeType}) +
|
||||
// '\n\nSummary:\n' + summary +
|
||||
// '\n\nLocal:\n' + this.getAnonymizedXml(local) +
|
||||
// '\n\nRemote:\n' + this.getAnonymizedXml(remote) +
|
||||
// ((remote == null) ? ('\n\nData:\n' + fileData) : '') +
|
||||
// '\n\nConvert:\n' + this.getAnonymizedXml(convert) +
|
||||
// '\n\nJSON:\n' + this.getAnonymizedJson(json));
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// this.log('OK-age.' + age + '.');
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// catch (e)
|
||||
// {
|
||||
// this.log('CATCH-RUNCHECK-' + e.stack, true);
|
||||
// this.debug(e);
|
||||
// }
|
||||
// };
|
||||
|
||||
// ui.editor.addListener('fileLoaded', mxUtils.bind(this, function()
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// var file = ui.getCurrentFile();
|
||||
|
||||
// if (file != null && file.constructor == DriveFile && file.realtime != null)
|
||||
// {
|
||||
// // With a 30% probability
|
||||
// if (urlParams['json-check'] != '0' && (urlParams['json-check'] == '1' ||
|
||||
// (Math.random() > 0.3 && urlParams['dev'] != '1')))
|
||||
// {
|
||||
// file.checkConvert();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// catch (e)
|
||||
// {
|
||||
// // ignore
|
||||
// }
|
||||
// }));
|
||||
// ***********
|
||||
// END OF TEST
|
||||
// ***********
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
1680
src/main/webapp/js/app.min.js
vendored
1680
src/main/webapp/js/app.min.js
vendored
File diff suppressed because it is too large
Load diff
1907
src/main/webapp/js/atlas-viewer.min.js
vendored
1907
src/main/webapp/js/atlas-viewer.min.js
vendored
File diff suppressed because one or more lines are too long
791
src/main/webapp/js/atlas.min.js
vendored
791
src/main/webapp/js/atlas.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -186,6 +186,16 @@ App.TRELLO_JQUERY_URL = 'https://code.jquery.com/jquery-1.7.1.min.js';
|
|||
*/
|
||||
App.FOOTER_PLUGIN_URL = 'https://www.jgraph.com/drawio-footer.js';
|
||||
|
||||
/**
|
||||
* Switch to disable Google realtime. If true this will convert existing realtime files.
|
||||
*/
|
||||
App.GOOGLE_REALTIME = urlParams['google-realtime'] != '0';
|
||||
|
||||
/**
|
||||
* Switch to disable Google realtime. If true this will convert existing realtime files.
|
||||
*/
|
||||
App.GOOGLE_APIS = 'client,drive-share' + ((App.GOOGLE_REALTIME) ? ',drive-realtime' : '');
|
||||
|
||||
/**
|
||||
* Defines plugin IDs for loading via p URL parameter. Update the table at
|
||||
* https://desk.draw.io/solution/articles/16000042546
|
||||
|
@ -400,6 +410,7 @@ App.getStoredMode = function()
|
|||
*/
|
||||
App.main = function(callback, createUi)
|
||||
{
|
||||
var sessionId = Editor.guid();
|
||||
var lastErrorMessage = null;
|
||||
|
||||
// Changes top level error handling
|
||||
|
@ -420,16 +431,19 @@ App.main = function(callback, createUi)
|
|||
else if (message != null && message.indexOf('DocumentClosedError') < 0)
|
||||
{
|
||||
lastErrorMessage = message;
|
||||
var img = new Image();
|
||||
var severity = (message.indexOf('NetworkError') >= 0 || message.indexOf('SecurityError') >= 0 ||
|
||||
message.indexOf('NS_ERROR_FAILURE') >= 0 || message.indexOf('out of memory') >= 0) ?
|
||||
'CONFIG' : 'SEVERE';
|
||||
var logDomain = window.DRAWIO_LOG_URL != null ? window.DRAWIO_LOG_URL : '';
|
||||
img.src = logDomain + '/log?severity=' + severity + '&v=' + encodeURIComponent(EditorUi.VERSION) +
|
||||
'&msg=clientError:' + encodeURIComponent(message) + ':url:' + encodeURIComponent(window.location.href) +
|
||||
':lnum:' + encodeURIComponent(linenumber) +
|
||||
((colno != null) ? ':colno:' + encodeURIComponent(colno) : '') +
|
||||
((err != null && err.stack != null) ? '&stack=' + encodeURIComponent(err.stack) : '');
|
||||
|
||||
var img = new Image();
|
||||
img.src = logDomain + '/log?severity=' + severity + '&v=' + encodeURIComponent(EditorUi.VERSION) +
|
||||
'&msg=clientError:' + encodeURIComponent(message) +
|
||||
':url:' + encodeURIComponent(window.location.href) +
|
||||
':lnum:' + encodeURIComponent(linenumber) +
|
||||
((colno != null) ? ':colno:' + encodeURIComponent(colno) : '') +
|
||||
((err != null && err.stack != null) ? '&stack=' + encodeURIComponent(err.stack) : '') +
|
||||
'&sid=' + sessionId;
|
||||
}
|
||||
}
|
||||
catch (err)
|
||||
|
@ -438,7 +452,7 @@ App.main = function(callback, createUi)
|
|||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
if (window.mxscript != null)
|
||||
{
|
||||
/**
|
||||
|
@ -960,10 +974,10 @@ App.prototype.init = function()
|
|||
|
||||
if (window.DrawGapiClientCallback != null)
|
||||
{
|
||||
gapi.load(((urlParams['picker'] != '0') ? 'picker,': '') + 'auth:client,drive-realtime,drive-share', mxUtils.bind(this, function(resp)
|
||||
gapi.load(((urlParams['picker'] != '0') ? 'picker,': '') + 'auth:' + App.GOOGLE_APIS, mxUtils.bind(this, function(resp)
|
||||
{
|
||||
// Starts the app without the Google Option if the API fails to load
|
||||
if (gapi.drive != null && gapi.drive.realtime != null)
|
||||
if (gapi.client != null)
|
||||
{
|
||||
gapi.client.load('drive', 'v2', mxUtils.bind(this, function()
|
||||
{
|
||||
|
@ -1751,7 +1765,7 @@ App.prototype.appIconClicked = function(evt)
|
|||
|
||||
if (mode == App.MODE_GOOGLE)
|
||||
{
|
||||
if (file.desc != null && file.desc.parents.length > 0)
|
||||
if (file.desc != null && file.desc.parents != null && file.desc.parents.length > 0)
|
||||
{
|
||||
// Opens containing folder
|
||||
this.openLink('https://drive.google.com/drive/folders/' + file.desc.parents[0].id);
|
||||
|
@ -1901,13 +1915,13 @@ App.prototype.loadGapi = function(then)
|
|||
{
|
||||
if (typeof gapi !== 'undefined')
|
||||
{
|
||||
gapi.load(((urlParams['picker'] != '0') ? 'picker,': '') + 'auth:client,drive-realtime,drive-share', mxUtils.bind(this, function(resp)
|
||||
gapi.load(((urlParams['picker'] != '0') ? 'picker,': '') + 'auth:' + App.GOOGLE_APIS, mxUtils.bind(this, function(resp)
|
||||
{
|
||||
// Starts the app without the Google Option if the API fails to load
|
||||
if (gapi.drive == null || gapi.drive.realtime == null)
|
||||
if (gapi.client == null)
|
||||
{
|
||||
this.mode = null;
|
||||
this.drive = null;
|
||||
this.mode = null;
|
||||
then();
|
||||
}
|
||||
else
|
||||
|
@ -1919,8 +1933,8 @@ App.prototype.loadGapi = function(then)
|
|||
{
|
||||
if (gapi.client.drive == null)
|
||||
{
|
||||
this.mode = null;
|
||||
this.drive = null;
|
||||
this.mode = null;
|
||||
}
|
||||
|
||||
then();
|
||||
|
@ -2001,6 +2015,26 @@ App.prototype.load = function()
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds the listener for automatically saving the diagram for local changes.
|
||||
*/
|
||||
App.prototype.showRefreshDialog = function(title, message)
|
||||
{
|
||||
if (!this.showingRefreshDialog)
|
||||
{
|
||||
this.showingRefreshDialog = true;
|
||||
|
||||
this.showError(title || mxResources.get('error'),
|
||||
message || mxResources.get('redirectToNewApp'),
|
||||
mxResources.get('refresh'), mxUtils.bind(this, function()
|
||||
{
|
||||
this.spinner.spin(document.body, mxResources.get('connecting'));
|
||||
this.editor.graph.setEnabled(false);
|
||||
window.location.reload();
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Called in start after the spinner stops.
|
||||
*/
|
||||
|
@ -4104,6 +4138,11 @@ App.prototype.save = function(name, done)
|
|||
|
||||
var error = mxUtils.bind(this, function(resp)
|
||||
{
|
||||
if (this.getCurrentFile() == file && file.isModified())
|
||||
{
|
||||
file.addUnsavedStatus();
|
||||
}
|
||||
|
||||
// Spinner is paused and resumed in handleError
|
||||
this.handleError(resp, (resp != null) ? mxResources.get('errorSavingFile') : null);
|
||||
});
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
{
|
||||
var yShift = delta.y;
|
||||
var xShift = delta.x;
|
||||
var hasHorGuides = false;
|
||||
var hasVerGuides = false;
|
||||
|
||||
if (this.states != null && bounds != null && delta != null)
|
||||
{
|
||||
|
@ -68,11 +70,13 @@
|
|||
}
|
||||
|
||||
var eqCy = 0;
|
||||
var dy = 0;
|
||||
var fixedDy = 0;
|
||||
var midDy = 0;
|
||||
var eqCx = 0;
|
||||
var dy = 0.0;
|
||||
var fixedDy = 0.0;
|
||||
var dx = 0.0;
|
||||
var fixedDx = 0.0;
|
||||
var dx = 0;
|
||||
var fixedDx = 0;
|
||||
var midDx = 0;
|
||||
var shift = 5 * scale;
|
||||
|
||||
if (verticalCells.length > 1)
|
||||
|
@ -84,29 +88,75 @@
|
|||
return s1.y - s2.y;
|
||||
});
|
||||
|
||||
var newStatePassed = false;
|
||||
var firstMoving = newState == verticalCells[0];
|
||||
var lastMoving = newState == verticalCells[verticalCells.length - 1];
|
||||
|
||||
//find the mid space and use it as dy and fixedDy
|
||||
if (!firstMoving && !lastMoving)
|
||||
{
|
||||
for (var i = 1; i < verticalCells.length - 1; i++)
|
||||
{
|
||||
if (newState == verticalCells[i])
|
||||
{
|
||||
var s1 = verticalCells[i - 1];
|
||||
var s3 = verticalCells[i + 1];
|
||||
midDy = (s3.y - s1.y - s1.height - newState.height) / 2;
|
||||
dy = midDy;
|
||||
fixedDy = dy;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < verticalCells.length - 1; i++)
|
||||
{
|
||||
var s1 = verticalCells[i];
|
||||
var s2 = verticalCells[i + 1];
|
||||
var isMovingOne = newState == s1 || newState == s2;
|
||||
|
||||
var curDy = s2.y - s1.y - s1.height;
|
||||
|
||||
if (!isMovingOne)
|
||||
{
|
||||
fixedDy = curDy;
|
||||
}
|
||||
|
||||
if (eqCy == 0)
|
||||
newStatePassed |= newState == s1;
|
||||
|
||||
if (dy == 0 && eqCy == 0)
|
||||
{
|
||||
dy = curDy;
|
||||
eqCy = 1;
|
||||
}
|
||||
else if (Math.abs(dy - curDy) <= (isMovingOne? tolerance : tolerance))
|
||||
else if (Math.abs(dy - curDy) <= (isMovingOne || (i == 1 && newStatePassed)? tolerance : 0)) //non-moving cells must have exact same dy, must handle the case of having the first cell moving so we allow tolerance for second cell (until fixedDy is non-zero)
|
||||
{
|
||||
eqCy += 1;
|
||||
}
|
||||
}
|
||||
else if (eqCy > 1 && newStatePassed) //stop and ignore the following cells
|
||||
{
|
||||
verticalCells = verticalCells.slice(0, i + 1);
|
||||
break;
|
||||
}
|
||||
else if (verticalCells.length - i >= 3 && !newStatePassed) //reset and start counting again
|
||||
{
|
||||
eqCy = 0;
|
||||
dy = midDy != 0? midDy : 0;
|
||||
fixedDy = dy;
|
||||
verticalCells.splice(0, i == 0? 1 : i);
|
||||
i = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (fixedDy == 0 && !isMovingOne)
|
||||
{
|
||||
fixedDy = curDy;
|
||||
//Update dy such that following cells shows equal distance guides without tolerance
|
||||
dy = fixedDy;
|
||||
}
|
||||
}
|
||||
|
||||
if (verticalCells.length == 3 && verticalCells[1] == newState)
|
||||
{
|
||||
fixedDy = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (horizontalCells.length > 1)
|
||||
|
@ -118,36 +168,81 @@
|
|||
return s1.x - s2.x;
|
||||
});
|
||||
|
||||
var newStatePassed = false;
|
||||
var firstMoving = newState == horizontalCells[0];
|
||||
var lastMoving = newState == horizontalCells[horizontalCells.length - 1];
|
||||
|
||||
//find the mid space and use it as dx and fixedDx
|
||||
if (!firstMoving && !lastMoving)
|
||||
{
|
||||
for (var i = 1; i < horizontalCells.length - 1; i++)
|
||||
{
|
||||
if (newState == horizontalCells[i])
|
||||
{
|
||||
var s1 = horizontalCells[i - 1];
|
||||
var s3 = horizontalCells[i + 1];
|
||||
midDx = (s3.x - s1.x - s1.width - newState.width) / 2;
|
||||
dx = midDx;
|
||||
fixedDx = dx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < horizontalCells.length - 1; i++)
|
||||
{
|
||||
var s1 = horizontalCells[i];
|
||||
var s2 = horizontalCells[i + 1];
|
||||
var isMovingOne = newState == s1 || newState == s2;
|
||||
|
||||
var curDx = s2.x - s1.x - s1.width;
|
||||
|
||||
if (!isMovingOne)
|
||||
{
|
||||
fixedDx = curDx;
|
||||
}
|
||||
newStatePassed |= newState == s1;
|
||||
|
||||
if (eqCx == 0)
|
||||
if (dx == 0 && eqCx == 0)
|
||||
{
|
||||
dx = curDx;
|
||||
eqCx = 1;
|
||||
}
|
||||
else if (Math.abs(dx - curDx) <= (isMovingOne? tolerance : tolerance))
|
||||
else if (Math.abs(dx - curDx) <= (isMovingOne || (i == 1 && newStatePassed)? tolerance : 0))
|
||||
{
|
||||
eqCx += 1;
|
||||
}
|
||||
}
|
||||
else if (eqCx > 1 && newStatePassed) //stop and ignore the following cells
|
||||
{
|
||||
horizontalCells = horizontalCells.slice(0, i + 1);
|
||||
break;
|
||||
}
|
||||
else if (horizontalCells.length - i >= 3 && !newStatePassed) //reset and start counting again
|
||||
{
|
||||
eqCx = 0;
|
||||
dx = midDx != 0? midDx : 0;
|
||||
fixedDx = dx;
|
||||
horizontalCells.splice(0, i == 0? 1 : i);
|
||||
i = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (fixedDx == 0 && !isMovingOne)
|
||||
{
|
||||
fixedDx = curDx;
|
||||
//Update dx such that following cells shows equal distance guides without tolerance
|
||||
dx = fixedDx;
|
||||
}
|
||||
}
|
||||
if (horizontalCells.length == 3 && horizontalCells[1] == newState)
|
||||
{
|
||||
fixedDx = 0;
|
||||
}
|
||||
}
|
||||
|
||||
var createEqGuide = function(p1, p2, curGuide, isVer)
|
||||
{
|
||||
var points = [];
|
||||
var dx = 0.0;
|
||||
var dy = 0.0;
|
||||
var dx = 0
|
||||
var dy = 0;
|
||||
|
||||
if (isVer)
|
||||
{
|
||||
|
@ -181,7 +276,26 @@
|
|||
return guideEq;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var hideEqGuides = function(horizontal, vertical)
|
||||
{
|
||||
if (horizontal && guide.guidesArrHor != null)
|
||||
{
|
||||
for (var i = 0; i < guide.guidesArrHor.length; i++)
|
||||
{
|
||||
guide.guidesArrHor[i].node.style.visibility = "hidden";
|
||||
}
|
||||
}
|
||||
|
||||
if (vertical && guide.guidesArrVer != null)
|
||||
{
|
||||
for (var i = 0; i < guide.guidesArrVer.length; i++)
|
||||
{
|
||||
guide.guidesArrVer[i].node.style.visibility = "hidden";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (eqCx > 1 && eqCx == horizontalCells.length - 1)
|
||||
{
|
||||
var guidesArr = [];
|
||||
|
@ -239,16 +353,21 @@
|
|||
guideEq.redraw();
|
||||
guidesArr.push(guideEq);
|
||||
}
|
||||
|
||||
//destroy old non-recycled guides
|
||||
for (var i = hPoints.length / 2; curArr != null && i < curArr.length; i ++)
|
||||
{
|
||||
curArr[i].destroy();
|
||||
}
|
||||
|
||||
guide.guidesArrHor = guidesArr;
|
||||
|
||||
xShift = newX - bounds.x;
|
||||
hasHorGuides = true;
|
||||
}
|
||||
else if (guide.guidesArrHor != null)
|
||||
else
|
||||
{
|
||||
for (var i = 0; i < guide.guidesArrHor.length; i++)
|
||||
{
|
||||
guide.guidesArrHor[i].node.style.visibility = "hidden";
|
||||
}
|
||||
hideEqGuides(true);
|
||||
}
|
||||
|
||||
if (eqCy > 1 && eqCy == verticalCells.length - 1)
|
||||
|
@ -299,7 +418,7 @@
|
|||
vPoints.push(new mxPoint(firstX, s3.y - shift));
|
||||
}
|
||||
|
||||
for (i = 0; i < vPoints.length; i += 2)
|
||||
for (var i = 0; i < vPoints.length; i += 2)
|
||||
{
|
||||
var p1 = vPoints[i];
|
||||
var p2 = vPoints[i+1];
|
||||
|
@ -308,21 +427,44 @@
|
|||
guideEq.redraw();
|
||||
guidesArr.push(guideEq);
|
||||
}
|
||||
|
||||
//destroy old non-recycled guides
|
||||
for (var i = vPoints.length / 2; curArr != null && i < curArr.length; i ++)
|
||||
{
|
||||
curArr[i].destroy();
|
||||
}
|
||||
|
||||
guide.guidesArrVer = guidesArr;
|
||||
|
||||
yShift = newY - bounds.y;
|
||||
hasVerGuides = true;
|
||||
}
|
||||
else if (guide.guidesArrVer != null)
|
||||
else
|
||||
{
|
||||
for (var i = 0; i < guide.guidesArrVer.length; i++)
|
||||
{
|
||||
guide.guidesArrVer[i].node.style.visibility = "hidden";
|
||||
}
|
||||
hideEqGuides(false, true);
|
||||
}
|
||||
}
|
||||
|
||||
return guideMove.call(this, bounds, new mxPoint(xShift, yShift), gridEnabled);
|
||||
//TODO force other guides not to change the point!
|
||||
if (hasHorGuides || hasVerGuides)
|
||||
{
|
||||
var eqPoint = new mxPoint(xShift, yShift);
|
||||
guideMove.call(this, bounds, eqPoint, gridEnabled, clone);
|
||||
|
||||
//if other guides changed the calculated point, hide the guides
|
||||
// if ((hasHorGuides && newPoint.x != xShift) || (hasVerGuides && newPoint.y != yShift))
|
||||
// {
|
||||
// hideEqGuides(true, true);
|
||||
// }
|
||||
// return newPoint;
|
||||
//Discard other guides modifications and return our point! Not the best (correct?) solution
|
||||
return eqPoint;
|
||||
}
|
||||
else
|
||||
{
|
||||
hideEqGuides(true, true);
|
||||
return guideMove.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
var guideSetVisible = mxGuide.prototype.setVisible;
|
||||
|
|
|
@ -25,27 +25,28 @@ DrawioFile = function(ui, data)
|
|||
mxUtils.extend(DrawioFile, mxEventSource);
|
||||
|
||||
/**
|
||||
* Sets the delay for autosave in milliseconds. Default is 1500.
|
||||
* Specifies the delay between the last change and the autosave.
|
||||
*/
|
||||
DrawioFile.prototype.autosaveDelay = 1500;
|
||||
|
||||
/**
|
||||
* Sets the delay for autosave in milliseconds. Default is 30000.
|
||||
* Specifies the maximum delay before an autosave is forced even if the graph
|
||||
* is being changed.
|
||||
*/
|
||||
DrawioFile.prototype.maxAutosaveDelay = 30000;
|
||||
|
||||
/**
|
||||
* Sets the delay for autosave in milliseconds. Default is 2000.
|
||||
* Contains the thread for the next autosave.
|
||||
*/
|
||||
DrawioFile.prototype.autosaveThread = null;
|
||||
|
||||
/**
|
||||
* Sets the delay for autosave in milliseconds. Default is 500.
|
||||
* Stores the timestamp for hte last autosave.
|
||||
*/
|
||||
DrawioFile.prototype.lastAutosave = null;
|
||||
|
||||
/**
|
||||
* Sets the delay for autosave in milliseconds. Default is 1500.
|
||||
* Stores the modified state.
|
||||
*/
|
||||
DrawioFile.prototype.modified = false;
|
||||
|
||||
|
@ -297,40 +298,20 @@ DrawioFile.prototype.getData = function()
|
|||
*/
|
||||
DrawioFile.prototype.open = function()
|
||||
{
|
||||
this.ui.setFileData(this.getData());
|
||||
var data = this.getData();
|
||||
|
||||
if (data != null)
|
||||
{
|
||||
this.ui.setFileData(data);
|
||||
}
|
||||
|
||||
this.changeListener = mxUtils.bind(this, function(sender, eventObject)
|
||||
{
|
||||
var edit = (eventObject != null) ? eventObject.getProperty('edit') : null;
|
||||
|
||||
if (this.changeListenerEnabled && this.isEditable() &&
|
||||
(edit == null || !edit.ignoreEdit))
|
||||
if (this.changeListenerEnabled && this.isEditable() && (edit == null || !edit.ignoreEdit))
|
||||
{
|
||||
this.setModified(true);
|
||||
|
||||
if (this.isAutosave())
|
||||
{
|
||||
this.ui.editor.setStatus(mxUtils.htmlEntities(mxResources.get('saving')) + '...');
|
||||
|
||||
this.autosave(this.autosaveDelay, this.maxAutosaveDelay, mxUtils.bind(this, function(resp)
|
||||
{
|
||||
// Does not update status if another autosave was scheduled
|
||||
if (this.autosaveThread == null && this.ui.getCurrentFile() == this && !this.isModified())
|
||||
{
|
||||
this.addAllSavedStatus();
|
||||
}
|
||||
}), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
if (this.ui.getCurrentFile() == this)
|
||||
{
|
||||
this.addUnsavedStatus(resp);
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.addUnsavedStatus();
|
||||
}
|
||||
this.fileChanged();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -360,22 +341,17 @@ DrawioFile.prototype.addAllSavedStatus = function()
|
|||
|
||||
if (file != null && (file.constructor == DriveFile || file.constructor == DropboxFile))
|
||||
{
|
||||
|
||||
this.ui.editor.setStatus('<span title="'+ mxUtils.htmlEntities(mxResources.get('revisionHistory')) +
|
||||
this.ui.editor.setStatus('<div title="'+ mxUtils.htmlEntities(mxResources.get('revisionHistory')) +
|
||||
'" style="text-decoration:underline;cursor:pointer;">' +
|
||||
mxUtils.htmlEntities(mxResources.get('allChangesSaved')) + '</span>');
|
||||
mxUtils.htmlEntities(mxResources.get('allChangesSaved')) + '</div>');
|
||||
var links = (this.ui.statusContainer != null) ? this.ui.statusContainer.getElementsByTagName('div') : null;
|
||||
|
||||
if (this.ui.statusContainer != null)
|
||||
if (links.length > 0)
|
||||
{
|
||||
var links = this.ui.statusContainer.getElementsByTagName('span');
|
||||
|
||||
if (links.length > 0)
|
||||
mxEvent.addListener(links[0], 'click', mxUtils.bind(this, function()
|
||||
{
|
||||
mxEvent.addListener(links[0], 'click', mxUtils.bind(this, function()
|
||||
{
|
||||
this.ui.actions.get('revisionHistory').funct();
|
||||
}));
|
||||
}
|
||||
this.ui.actions.get('revisionHistory').funct();
|
||||
}));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -384,6 +360,38 @@ DrawioFile.prototype.addAllSavedStatus = function()
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds the listener for automatically saving the diagram for local changes.
|
||||
*/
|
||||
DrawioFile.prototype.fileChanged = function()
|
||||
{
|
||||
this.setModified(true);
|
||||
|
||||
if (this.isAutosave())
|
||||
{
|
||||
this.ui.editor.setStatus(mxUtils.htmlEntities(mxResources.get('saving')) + '...');
|
||||
|
||||
this.autosave(this.autosaveDelay, this.maxAutosaveDelay, mxUtils.bind(this, function(resp)
|
||||
{
|
||||
// Does not update status if another autosave was scheduled
|
||||
if (this.autosaveThread == null && this.ui.getCurrentFile() == this && !this.isModified())
|
||||
{
|
||||
this.addAllSavedStatus();
|
||||
}
|
||||
}), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
if (this.ui.getCurrentFile() == this)
|
||||
{
|
||||
this.addUnsavedStatus(resp);
|
||||
}
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.addUnsavedStatus();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds the listener for automatically saving the diagram for local changes.
|
||||
*/
|
||||
|
@ -392,8 +400,8 @@ DrawioFile.prototype.addUnsavedStatus = function(err)
|
|||
if (err instanceof Error && err.message != null)
|
||||
{
|
||||
this.ui.editor.setStatus('<div class="geStatusAlert" style="overflow:hidden;">' +
|
||||
mxUtils.htmlEntities(mxResources.get('unsavedChanges')) +
|
||||
' (' + mxUtils.htmlEntities(err.message) + ')</div>');
|
||||
mxUtils.htmlEntities(mxResources.get('unsavedChanges')) +
|
||||
' (' + mxUtils.htmlEntities(err.message) + ')</div>');
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -415,17 +423,19 @@ DrawioFile.prototype.addUnsavedStatus = function(err)
|
|||
mxUtils.htmlEntities(mxResources.get('unsavedChangesClickHereToSave')) + '</div>');
|
||||
|
||||
// Installs click handler for saving
|
||||
if (this.ui.statusContainer != null)
|
||||
var links = (this.ui.statusContainer != null) ? this.ui.statusContainer.getElementsByTagName('div') : null;
|
||||
|
||||
if (links != null && links.length > 0)
|
||||
{
|
||||
var links = this.ui.statusContainer.getElementsByTagName('div');
|
||||
|
||||
if (links.length > 0)
|
||||
mxEvent.addListener(links[0], 'click', mxUtils.bind(this, function()
|
||||
{
|
||||
mxEvent.addListener(links[0], 'click', mxUtils.bind(this, function()
|
||||
{
|
||||
this.ui.actions.get((this.ui.mode == null) ? 'saveAs' : 'save').funct();
|
||||
}));
|
||||
}
|
||||
this.ui.actions.get((this.ui.mode == null) ? 'saveAs' : 'save').funct();
|
||||
}));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ui.editor.setStatus('<div class="geStatusAlert" style="overflow:hidden;">' +
|
||||
mxUtils.htmlEntities(mxResources.get('unsavedChanges')) + '</div>');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -442,13 +452,17 @@ DrawioFile.prototype.autosave = function(delay, maxDelay, success, error)
|
|||
|
||||
var tmp = (new Date().getTime() - this.lastAutosave < maxDelay) ? delay : 0;
|
||||
this.clearAutosave();
|
||||
|
||||
|
||||
// Starts new timer or executes immediately if not unsaved for maxDelay
|
||||
this.autosaveThread = window.setTimeout(mxUtils.bind(this, function()
|
||||
var thread = window.setTimeout(mxUtils.bind(this, function()
|
||||
{
|
||||
this.autosaveThread = null;
|
||||
this.lastAutosave = null;
|
||||
|
||||
if (this.autosaveThead == thread)
|
||||
{
|
||||
this.autosaveThread = null;
|
||||
}
|
||||
|
||||
// Workaround for duplicate save if UI is blocking
|
||||
// after save while pending autosave triggers
|
||||
if (this.isModified() && this.isAutosaveNow())
|
||||
|
@ -478,12 +492,19 @@ DrawioFile.prototype.autosave = function(delay, maxDelay, success, error)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!this.isModified())
|
||||
{
|
||||
this.ui.editor.setStatus('');
|
||||
}
|
||||
|
||||
if (success != null)
|
||||
{
|
||||
success(null);
|
||||
}
|
||||
}
|
||||
}), tmp);
|
||||
|
||||
this.autosaveThread = thread;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -10,6 +10,9 @@ DriveClient = function(editorUi)
|
|||
* Holds a reference to the UI. Needed for the sharing client.
|
||||
*/
|
||||
this.ui = editorUi;
|
||||
|
||||
// New mime type for XML files
|
||||
this.xmlMimeType = 'application/vnd.jgraph.mxfile';
|
||||
|
||||
if (this.ui.editor.isChromelessView() && urlParams['rt'] != '1')
|
||||
{
|
||||
|
@ -37,9 +40,8 @@ DriveClient = function(editorUi)
|
|||
this.mimeType = 'application/vnd.jgraph.mxfile.rtlegacy';
|
||||
}
|
||||
|
||||
this.mimeTypes = 'application/mxe,application/vnd.jgraph.mxfile,' +
|
||||
'application/mxr,application/vnd.jgraph.mxfile.realtime,' +
|
||||
'application/vnd.jgraph.mxfile.rtlegacy';
|
||||
this.mimeTypes = this.xmlMimeType + 'application/mxe,application/mxr,' +
|
||||
'application/vnd.jgraph.mxfile.realtime,application/vnd.jgraph.mxfile.rtlegacy';
|
||||
};
|
||||
|
||||
// Extends mxEventSource
|
||||
|
@ -58,6 +60,12 @@ DriveClient.prototype.scopes = (urlParams['photos'] == '1') ?
|
|||
'https://www.googleapis.com/auth/drive.install',
|
||||
'https://www.googleapis.com/auth/userinfo.profile'];
|
||||
|
||||
/**
|
||||
* Contains the hostname of the old app.
|
||||
*/
|
||||
DriveClient.prototype.allFields = 'kind,id,parents,headRevisionId,etag,title,mimeType,modifiedDate,' +
|
||||
'editable,copyable,labels,properties,downloadUrl,webContentLink,userPermission';
|
||||
|
||||
/**
|
||||
* Specifies if thumbnails should be enabled. Default is true.
|
||||
* LATER: If thumbnails are disabled, make sure to replace the
|
||||
|
@ -377,7 +385,8 @@ DriveClient.prototype.executeRequest = function(req, success, error)
|
|||
// Schedules a retry if no new request was executed
|
||||
// TODO: Check for 'rateLimitExceeded', 'userRateLimitExceeded' in errors
|
||||
// see https://developers.google.com/drive/handle-errors
|
||||
else if (resp != null && resp.error != null && resp.error.code != 404 && this.currentRequest == req && retryCount < this.maxRetries)
|
||||
else if (resp != null && resp.error != null && resp.error.code != 412 && resp.error.code != 404 &&
|
||||
this.currentRequest == req && retryCount < this.maxRetries)
|
||||
{
|
||||
retryCount++;
|
||||
var jitter = 1 + 0.1 * (Math.random() - 0.5);
|
||||
|
@ -561,8 +570,9 @@ DriveClient.prototype.copyFile = function(id, title, success, error)
|
|||
{
|
||||
if (id != null && title != null)
|
||||
{
|
||||
this.executeRequest(gapi.client.drive.files.copy({'fileId': id, 'resource':
|
||||
{'title' : title}, 'supportsTeamDrives': true}), success, error);
|
||||
this.executeRequest(gapi.client.drive.files.copy({'fileId': id,
|
||||
'fields': this.allFields, 'supportsTeamDrives': true,
|
||||
'resource': {'title' : title}}), success, error);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -576,7 +586,8 @@ DriveClient.prototype.renameFile = function(id, title, success, error)
|
|||
{
|
||||
if (id != null && title != null)
|
||||
{
|
||||
this.executeRequest(this.createDriveRequest(id, {'title' : title}), success, error);
|
||||
this.executeRequest(this.createDriveRequest(
|
||||
id, {'title' : title}), success, error);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -620,6 +631,40 @@ DriveClient.prototype.getLibrary = function(id, success, error)
|
|||
return this.getFile(id, success, error, true, true);
|
||||
};
|
||||
|
||||
/**
|
||||
* Loads the descriptorf for the given file ID.
|
||||
*/
|
||||
DriveClient.prototype.loadDescriptor = function(id, success, error)
|
||||
{
|
||||
this.executeRequest(gapi.client.drive.files.get({'fileId': id,
|
||||
'fields': this.allFields, 'supportsTeamDrives': true}),
|
||||
success, error);
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the channel ID from the given descriptor.
|
||||
*/
|
||||
DriveClient.prototype.getChannelId = function(desc)
|
||||
{
|
||||
var props = desc.properties;
|
||||
var result = null;
|
||||
|
||||
if (props != null)
|
||||
{
|
||||
for (var i = 0; i < props.length; i++)
|
||||
{
|
||||
if (props[i].key == 'channel')
|
||||
{
|
||||
result = props[i].value;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if the client is authorized and calls the next step. The optional
|
||||
* readXml argument is used for import. Default is false. The optional
|
||||
|
@ -632,14 +677,16 @@ DriveClient.prototype.getFile = function(id, success, error, readXml, readLibrar
|
|||
|
||||
if (urlParams['rev'] != null)
|
||||
{
|
||||
this.executeRequest(gapi.client.drive.revisions.get({'fileId': id, 'revisionId': urlParams['rev']}), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
this.getXmlFile(resp, null, success, error);
|
||||
}), error);
|
||||
this.executeRequest(gapi.client.drive.revisions.get({'fileId': id,
|
||||
'revisionId': urlParams['rev'], 'supportsTeamDrives': true}),
|
||||
mxUtils.bind(this, function(resp)
|
||||
{
|
||||
this.getXmlFile(resp, null, success, error);
|
||||
}), error);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.executeRequest(gapi.client.drive.files.get({'fileId': id, 'supportsTeamDrives': true}), mxUtils.bind(this, function(resp)
|
||||
this.loadDescriptor(id, mxUtils.bind(this, function(resp)
|
||||
{
|
||||
if (this.user != null)
|
||||
{
|
||||
|
@ -654,20 +701,39 @@ DriveClient.prototype.getFile = function(id, success, error, readXml, readLibrar
|
|||
}
|
||||
else
|
||||
{
|
||||
if (readXml || readLibrary || resp.mimeType == this.libraryMimeType)
|
||||
// Handles converted realtime files as XML files
|
||||
if (readXml || readLibrary || resp.mimeType == this.libraryMimeType ||
|
||||
resp.mimeType == this.xmlMimeType)
|
||||
{
|
||||
this.getXmlFile(resp, null, success, error, true, readLibrary);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.loadRealtime(resp, mxUtils.bind(this, function(doc)
|
||||
{
|
||||
try
|
||||
if (!App.GOOGLE_REALTIME)
|
||||
{
|
||||
if (this.isGoogleRealtimeMimeType(resp.mimeType))
|
||||
{
|
||||
// Converts XML files to realtime including old realtime model
|
||||
if (doc == null || doc.getModel() == null || doc.getModel().getRoot() == null ||
|
||||
doc.getModel().getRoot().isEmpty() || (doc.getModel().getRoot().has('cells') &&
|
||||
!doc.getModel().getRoot().has(DriveRealtime.prototype.diagramsKey)))
|
||||
this.convertRealtimeFile(resp, mxUtils.bind(this, function(file)
|
||||
{
|
||||
this.notifyRealtimeConverted(file);
|
||||
success(file);
|
||||
}), error);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.getXmlFile(resp, null, success, error);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.loadRealtime(resp, mxUtils.bind(this, function(doc)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Converts XML files to realtime including old realtime model
|
||||
if (doc == null || doc.getModel() == null || doc.getModel().getRoot() == null ||
|
||||
doc.getModel().getRoot().isEmpty() || (doc.getModel().getRoot().has('cells') &&
|
||||
!doc.getModel().getRoot().has(DriveRealtime.prototype.diagramsKey)))
|
||||
{
|
||||
this.getXmlFile(resp, doc, success, error);
|
||||
}
|
||||
|
@ -676,12 +742,13 @@ DriveClient.prototype.getFile = function(id, success, error, readXml, readLibrar
|
|||
// XML not required here since the realtime model is not empty
|
||||
success(new DriveFile(this.ui, null, resp, doc));
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
error(e);
|
||||
}
|
||||
}), error);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
error(e);
|
||||
}
|
||||
}), error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -693,6 +760,50 @@ DriveClient.prototype.getFile = function(id, success, error, readXml, readLibrar
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns true if the given mime type is for Google Realtime files.
|
||||
*/
|
||||
DriveClient.prototype.isGoogleRealtimeMimeType = function(mimeType)
|
||||
{
|
||||
return mimeType != null && mimeType.substring(0, 30) == 'application/vnd.jgraph.mxfile.';
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if the client is authorized and calls the next step.
|
||||
*/
|
||||
DriveClient.prototype.getRealtimeData = function(id, success, error, retryCount)
|
||||
{
|
||||
this.executeRequest(gapi.client.drive.realtime.get({'fileId': id,
|
||||
'supportsTeamDrives': true}), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
var json = (resp.result != null) ? resp.result.data : null;
|
||||
|
||||
if (json != null && json.value != null && json.value.diagrams != null)
|
||||
{
|
||||
success(json);
|
||||
}
|
||||
else if (error != null)
|
||||
{
|
||||
error();
|
||||
}
|
||||
}), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
if (retryCount == null)
|
||||
{
|
||||
retryCount = 0;
|
||||
}
|
||||
|
||||
if (retryCount < 3)
|
||||
{
|
||||
this.getRealtimeData(id, success, error, retryCount + 1);
|
||||
}
|
||||
else if (error != null)
|
||||
{
|
||||
error();
|
||||
}
|
||||
}));
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if the client is authorized and calls the next step.
|
||||
*/
|
||||
|
@ -707,7 +818,7 @@ DriveClient.prototype.loadRealtime = function(resp, success, error)
|
|||
}
|
||||
// Checks if we're in viewer app or if the file is writeable if it needs to be converted
|
||||
else if (this.appId != '850530949725' && (resp.editable || (resp.mimeType != 'application/mxe' &&
|
||||
resp.mimeType != 'application/vnd.jgraph.mxfile')))
|
||||
resp.mimeType != 'application/vnd.jgraph.mxfile')) && gapi.drive.realtime != null)
|
||||
{
|
||||
var fn = mxUtils.bind(this, function()
|
||||
{
|
||||
|
@ -792,7 +903,8 @@ DriveClient.prototype.getXmlFile = function(resp, doc, success, error, ignoreMim
|
|||
var file = new DriveFile(this.ui, data, resp, doc);
|
||||
|
||||
// Checks if mime-type needs to be updated if the file is editable and no viewer app
|
||||
if (!ignoreMime && this.appId != '850530949725' && file.isEditable() && resp.mimeType != this.mimeType)
|
||||
if (App.GOOGLE_REALTIME && !ignoreMime && this.appId != '850530949725' && file.isEditable() &&
|
||||
resp.mimeType != this.mimeType)
|
||||
{
|
||||
// Overwrites mime-type (only mutable on update when uploading new content)
|
||||
this.saveFile(file, true, mxUtils.bind(this, function(resp)
|
||||
|
@ -816,7 +928,7 @@ DriveClient.prototype.getXmlFile = function(resp, doc, success, error, ignoreMim
|
|||
* @param {number} dx X-coordinate of the translation.
|
||||
* @param {number} dy Y-coordinate of the translation.
|
||||
*/
|
||||
DriveClient.prototype.saveFile = function(file, revision, success, error, noCheck, unloading)
|
||||
DriveClient.prototype.saveFile = function(file, revision, success, error, noCheck, unloading, overwrite, properties)
|
||||
{
|
||||
if (file.isEditable())
|
||||
{
|
||||
|
@ -839,10 +951,29 @@ DriveClient.prototype.saveFile = function(file, revision, success, error, noChec
|
|||
{
|
||||
var meta =
|
||||
{
|
||||
'mimeType': (file.constructor == DriveLibrary) ? this.libraryMimeType : this.mimeType,
|
||||
'mimeType': file.desc.mimeType,
|
||||
'title': file.getTitle()
|
||||
};
|
||||
|
||||
// Overrides old mime type and creates a revision
|
||||
if (!App.GOOGLE_REALTIME && file.realtime == null &&
|
||||
this.isGoogleRealtimeMimeType(file.desc.mimeType))
|
||||
{
|
||||
meta.mimeType = this.xmlMimeType;
|
||||
revision = true;
|
||||
}
|
||||
|
||||
// Inserts a channel ID
|
||||
if (file.constructor == DriveFile && this.getChannelId(file.desc) == null)
|
||||
{
|
||||
if (properties == null)
|
||||
{
|
||||
properties = [];
|
||||
}
|
||||
|
||||
properties.push({'key': 'channel', 'value': Editor.guid()});
|
||||
}
|
||||
|
||||
// Specifies that no thumbnail should be uploaded in which case the existing thumbnail is used
|
||||
if (!keepExisting)
|
||||
{
|
||||
|
@ -869,15 +1000,24 @@ DriveClient.prototype.saveFile = function(file, revision, success, error, noChec
|
|||
// Updates saveDelay on drive file
|
||||
var wrapper = function()
|
||||
{
|
||||
file.saveDelay = new Date().getTime() - t0;
|
||||
success.apply(this, arguments);
|
||||
file.saveDelay = new Date().getTime() - t0;
|
||||
success.apply(this, arguments);
|
||||
};
|
||||
|
||||
var fn = mxUtils.bind(this, function(data, binary)
|
||||
{
|
||||
if (properties != null)
|
||||
{
|
||||
meta.properties = properties;
|
||||
}
|
||||
|
||||
// Used to check if file was changed externally
|
||||
var etag = (!overwrite && file.constructor == DriveFile &&
|
||||
file.realtime == null) ? file.desc.etag : null;
|
||||
|
||||
this.executeRequest(this.createUploadRequest(file.getId(), meta,
|
||||
data, revision || (file.desc.mimeType != this.mimeType &&
|
||||
file.desc.mimeType != this.libraryMimeType), binary),
|
||||
file.desc.mimeType != this.libraryMimeType), binary, etag),
|
||||
wrapper, error);
|
||||
});
|
||||
|
||||
|
@ -900,37 +1040,38 @@ DriveClient.prototype.saveFile = function(file, revision, success, error, noChec
|
|||
{
|
||||
// NOTE: getThumbnail is asynchronous and returns false if no thumbnails can be created
|
||||
if (unloading || file.constructor == DriveLibrary || !this.enableThumbnails || urlParams['thumb'] == '0' ||
|
||||
(file.realtime != null && !file.realtime.connected) || !this.ui.getThumbnail(this.thumbnailWidth, mxUtils.bind(this, function(canvas)
|
||||
{
|
||||
// Callback for getThumbnail
|
||||
var thumb = null;
|
||||
|
||||
if (canvas != null)
|
||||
(file.realtime != null && !file.realtime.connected) || !this.ui.getThumbnail(this.thumbnailWidth,
|
||||
mxUtils.bind(this, function(canvas)
|
||||
{
|
||||
try
|
||||
// Callback for getThumbnail
|
||||
var thumb = null;
|
||||
|
||||
if (canvas != null)
|
||||
{
|
||||
// Security errors are possible
|
||||
thumb = canvas.toDataURL('image/png');
|
||||
try
|
||||
{
|
||||
// Security errors are possible
|
||||
thumb = canvas.toDataURL('image/png');
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
// ignore and continue with placeholder
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
|
||||
// Maximum thumbnail size is 2MB
|
||||
if (thumb == null || thumb.length > this.maxThumbnailSize)
|
||||
{
|
||||
// ignore and continue with placeholder
|
||||
thumb = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Maximum thumbnail size is 2MB
|
||||
if (thumb == null || thumb.length > this.maxThumbnailSize)
|
||||
{
|
||||
thumb = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Converts base64 data into required format for Drive (base64url with no prefix)
|
||||
thumb = thumb.substring(thumb.indexOf(',') + 1).replace(/\+/g, '-').replace(/\//g, '_');
|
||||
}
|
||||
|
||||
doSave(thumb, 'image/png');
|
||||
})))
|
||||
else
|
||||
{
|
||||
// Converts base64 data into required format for Drive (base64url with no prefix)
|
||||
thumb = thumb.substring(thumb.indexOf(',') + 1).replace(/\+/g, '-').replace(/\//g, '_');
|
||||
}
|
||||
|
||||
doSave(thumb, 'image/png');
|
||||
})))
|
||||
{
|
||||
// If-branch
|
||||
doSave(null, null, file.constructor != DriveLibrary && (file.realtime == null || file.realtime.connected));
|
||||
|
@ -963,6 +1104,39 @@ DriveClient.prototype.saveFile = function(file, revision, success, error, noChec
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sends a message to all collaborators and stores the head revision ID.
|
||||
*/
|
||||
DriveClient.prototype.notifyRealtimeConverted = function(file)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (gapi.drive.realtime != null)
|
||||
{
|
||||
gapi.drive.realtime.load(file.getId(), mxUtils.bind(this, function(doc)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (doc != null && doc.getModel() != null &&
|
||||
doc.getModel().getRoot() != null)
|
||||
{
|
||||
doc.getModel().getRoot().set('realtimeConverted',
|
||||
file.desc.headRevisionId);
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Verifies the mime type of the given file ID.
|
||||
*/
|
||||
|
@ -1049,7 +1223,7 @@ DriveClient.prototype.redirectToNewApp = function(error, fileId)
|
|||
*/
|
||||
DriveClient.prototype.insertFile = function(title, data, folderId, success, error, mimeType, binary, allowRealtime)
|
||||
{
|
||||
mimeType = (mimeType != null) ? mimeType : this.mimeType;
|
||||
mimeType = (mimeType != null) ? mimeType : ((App.GOOGLE_REALTIME) ? this.mimeType : this.xmlMimeType);
|
||||
allowRealtime = (allowRealtime != null) ? allowRealtime : true;
|
||||
|
||||
var metadata =
|
||||
|
@ -1062,7 +1236,7 @@ DriveClient.prototype.insertFile = function(title, data, folderId, success, erro
|
|||
{
|
||||
metadata.parents = [{'kind': 'drive#fileLink', 'id': folderId}];
|
||||
}
|
||||
|
||||
|
||||
// NOTE: Cannot create thumbnail on insert since no ui has no current file
|
||||
this.executeRequest(this.createUploadRequest(null, metadata, data, false, binary), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
|
@ -1077,10 +1251,11 @@ DriveClient.prototype.insertFile = function(title, data, folderId, success, erro
|
|||
error({message: mxResources.get('errorSavingFile')});
|
||||
}
|
||||
}
|
||||
else if (allowRealtime)
|
||||
else if (App.GOOGLE_REALTIME && allowRealtime &&
|
||||
this.isGoogleRealtimeMimeType(resp.mimeType))
|
||||
{
|
||||
this.loadRealtime(resp, mxUtils.bind(this, function(doc)
|
||||
{
|
||||
{
|
||||
if (this.user != null)
|
||||
{
|
||||
var file = new DriveFile(this.ui, data, resp, doc);
|
||||
|
@ -1094,11 +1269,11 @@ DriveClient.prototype.insertFile = function(title, data, folderId, success, erro
|
|||
{
|
||||
error({message: mxResources.get('loggedOut')});
|
||||
}
|
||||
}), error);
|
||||
}), error, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
success(resp);
|
||||
success(new DriveFile(this.ui, data, resp));
|
||||
}
|
||||
}), error);
|
||||
};
|
||||
|
@ -1109,20 +1284,27 @@ DriveClient.prototype.insertFile = function(title, data, folderId, success, erro
|
|||
* @param {number} dx X-coordinate of the translation.
|
||||
* @param {number} dy Y-coordinate of the translation.
|
||||
*/
|
||||
DriveClient.prototype.createUploadRequest = function(id, metadata, data, revision, binary)
|
||||
DriveClient.prototype.createUploadRequest = function(id, metadata, data, revision, binary, etag)
|
||||
{
|
||||
binary = (binary != null) ? binary : false;
|
||||
var bd = '-------314159265358979323846';
|
||||
var delim = '\r\n--' + bd + '\r\n';
|
||||
var close = '\r\n--' + bd + '--';
|
||||
var ctype = 'application/octect-stream';
|
||||
|
||||
var headers = {'Content-Type' : 'multipart/mixed; boundary="' + bd + '"'};
|
||||
|
||||
if (etag != null)
|
||||
{
|
||||
headers['If-Match'] = etag;
|
||||
}
|
||||
|
||||
var reqObj =
|
||||
{
|
||||
'path': '/upload/drive/v2/files' + (id != null ? '/' + id : ''),
|
||||
'method': (id != null) ? 'PUT' : 'POST',
|
||||
'params': {'uploadType': 'multipart'},
|
||||
'headers': {'Content-Type' : 'multipart/mixed; boundary="' + bd + '"'},
|
||||
'headers': headers,
|
||||
'body' : delim + 'Content-Type: application/json\r\n\r\n' + JSON.stringify(metadata) + delim +
|
||||
'Content-Type: ' + ctype + '\r\n' + 'Content-Transfer-Encoding: base64\r\n' + '\r\n' +
|
||||
((data != null) ? (binary) ? data : Base64.encode(data) : '') + close
|
||||
|
@ -1134,6 +1316,7 @@ DriveClient.prototype.createUploadRequest = function(id, metadata, data, revisio
|
|||
}
|
||||
|
||||
reqObj.params['supportsTeamDrives'] = true;
|
||||
reqObj.params['fields'] = this.allFields;
|
||||
|
||||
return gapi.client.request(reqObj);
|
||||
};
|
||||
|
@ -1397,7 +1580,7 @@ DriveClient.prototype.pickLibrary = function(fn)
|
|||
}
|
||||
});
|
||||
|
||||
// Reuses picker as long as token doesn't change.
|
||||
// Reuses picker as long as token doesn't change
|
||||
var token = gapi.auth.getToken().access_token;
|
||||
|
||||
if (this.libraryPicker == null || this.libraryPickerToken != token)
|
||||
|
@ -1477,3 +1660,255 @@ DriveClient.prototype.showPermissions = function(id)
|
|||
shareClient.showSettingsDialog();
|
||||
}));
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts the given file from realtime to XML.
|
||||
*/
|
||||
DriveClient.prototype.getRealtimeAge = function(desc, json)
|
||||
{
|
||||
var mod = (json != null && json.value != null && json.value.modifiedDate != null) ?
|
||||
json.value.modifiedDate.json : null;
|
||||
var result = 0;
|
||||
|
||||
if (mod != null && mod > 0)
|
||||
{
|
||||
var ts = new Date(desc.modifiedDate);
|
||||
var rt = new Date(mod);
|
||||
result = ts.getTime() - rt.getTime();
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts the given file from realtime to XML.
|
||||
*/
|
||||
DriveClient.prototype.convertRealtimeFile = function(desc, success, error)
|
||||
{
|
||||
this.getRealtimeData(desc.id, mxUtils.bind(this, function(json)
|
||||
{
|
||||
var age = this.getRealtimeAge(desc, json);
|
||||
|
||||
// Uses the newer of the two
|
||||
if (age < 0)
|
||||
{
|
||||
var node = this.convertJsonToXml(json);
|
||||
console.log('converted realtime model', age, json, node);
|
||||
success(new DriveFile(this.ui, mxUtils.getXml(node), desc));
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log('using newer XML file', age, json);
|
||||
this.getXmlFile(desc, null, success, error);
|
||||
}
|
||||
}), mxUtils.bind(this, function()
|
||||
{
|
||||
console.log('no realtime data, using XML file');
|
||||
this.getXmlFile(desc, null, success, error);
|
||||
}));
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the location as a new object.
|
||||
*/
|
||||
DriveClient.prototype.convertJsonToXml = function(json, uncompressed)
|
||||
{
|
||||
if (json.value == null || json.value.diagrams == null)
|
||||
{
|
||||
throw Error('Invalid JSON: no diagrams in root map');
|
||||
}
|
||||
else
|
||||
{
|
||||
var node = mxUtils.createXmlDocument().createElement('mxfile');
|
||||
var diagrams = json.value.diagrams.value;
|
||||
|
||||
for (var i = 0; i < diagrams.length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var diagramNode = this.decodeJsonPage(diagrams[i].value,
|
||||
node.ownerDocument.createElement('diagram'),
|
||||
uncompressed);
|
||||
|
||||
//if (diagramNode.getAttribute('name') == null)
|
||||
//{
|
||||
// TODO: Should only use when converting but not when comparing
|
||||
//diagramNode.setAttribute('name', mxResources.get('pageWithNumber', [i + 1]));
|
||||
//}
|
||||
|
||||
node.appendChild(diagramNode);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
throw Error('Error on page ' + i + ': ' + e.stack);
|
||||
}
|
||||
}
|
||||
|
||||
//console.log('leaving convertJson', mxUtils.getPrettyXml(node));
|
||||
|
||||
return node;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns true if copy, export and print are not allowed for this file.
|
||||
*/
|
||||
DriveClient.prototype.decodeJsonPage = function(json, node, uncompressed)
|
||||
{
|
||||
if (json == null)
|
||||
{
|
||||
throw Error('Invalid JSON: json for page is null');
|
||||
}
|
||||
else
|
||||
{
|
||||
var codec = new mxCodec();
|
||||
var root = this.createJsonCell(json.root, codec);
|
||||
|
||||
if (root == null)
|
||||
{
|
||||
throw Error('Invalid JSON: no root cell for page');
|
||||
}
|
||||
else
|
||||
{
|
||||
// Dummy model for encoding
|
||||
var modelNode = codec.encode(new mxGraphModel(root));
|
||||
this.decodeJsonViewState(json, modelNode);
|
||||
|
||||
if (uncompressed)
|
||||
{
|
||||
node.appendChild(modelNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
mxUtils.setTextContent(node, this.ui.editor.graph.compressNode(modelNode));
|
||||
}
|
||||
|
||||
// Adds attributes to diagram node
|
||||
if (json.id != null)
|
||||
{
|
||||
node.setAttribute('id', json.id.json);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Workaround for missing page ID in JSON
|
||||
this.node.setAttribute('id', Editor.guid());
|
||||
}
|
||||
|
||||
if (json.name != null)
|
||||
{
|
||||
node.setAttribute('name', json.name.json);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//console.log('decoded json page', json, node);
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
/**
|
||||
* Writes the view state to the given node.
|
||||
*/
|
||||
DriveClient.prototype.decodeJsonViewState = function(json, node)
|
||||
{
|
||||
// Page format is stored as "width,height"
|
||||
var pf = (json.pageFormat != null) ? json.pageFormat.json : null;
|
||||
|
||||
if (pf != null && pf.length > 0)
|
||||
{
|
||||
var values = pf.split(',');
|
||||
|
||||
if (values.length > 1)
|
||||
{
|
||||
node.setAttribute('pageWidth', values[0]);
|
||||
node.setAttribute('pageHeight', values[1]);
|
||||
}
|
||||
}
|
||||
|
||||
var bg = (json.backgroundColor != null) ? json.backgroundColor.json : null;
|
||||
|
||||
if (bg != null && bg.length > 0)
|
||||
{
|
||||
node.setAttribute('background', bg);
|
||||
}
|
||||
|
||||
var img = (json.backgroundImage != null) ? json.backgroundImage.json : null;
|
||||
|
||||
if (img != null && img.length > 0)
|
||||
{
|
||||
node.setAttribute('backgroundImage', img);
|
||||
}
|
||||
|
||||
node.setAttribute('fold', (json.foldingEnabled != null) ? json.foldingEnabled.json : '0');
|
||||
node.setAttribute('pageScale', (json.pageScale != null) ? json.pageScale.json : mxGraph.prototype.pageScale);
|
||||
node.setAttribute('math', (json.mathEnabled != null) ? json.mathEnabled.json : '0');
|
||||
node.setAttribute('shadow', (json.shadowVisible != null) ? json.shadowVisible.json : '0');
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
/**
|
||||
* Syncs initial state from collab model to graph model.
|
||||
*/
|
||||
DriveClient.prototype.createJsonCell = function(json, codec)
|
||||
{
|
||||
if (json != null && json.id != null)
|
||||
{
|
||||
var val = json.value;
|
||||
var cell = this.jsonToCell(val, codec);
|
||||
codec.putObject(json.id, cell);
|
||||
|
||||
cell.source = (val.source != null) ? this.createJsonCell(val.source, codec) : null;
|
||||
cell.target = (val.target != null) ? this.createJsonCell(val.target, codec) : null;
|
||||
|
||||
// Cells can be serialized as parents of terminals
|
||||
this.createJsonCell(val.parent, codec)
|
||||
|
||||
for (var i = 0; i < val.children.value.length; i++)
|
||||
{
|
||||
var child = this.createJsonCell(val.children.value[i], codec);
|
||||
|
||||
if (child != null)
|
||||
{
|
||||
cell.insert(child);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Error('Invalid JSON: no child ' + i + ' for cell ' + json.id);
|
||||
}
|
||||
}
|
||||
|
||||
return cell;
|
||||
}
|
||||
else if (json != null && json.ref != null)
|
||||
{
|
||||
return codec.objects[json.ref];
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds the listener for automatically saving the diagram for local changes.
|
||||
*/
|
||||
DriveClient.prototype.jsonToCell = function(val, codec)
|
||||
{
|
||||
var cell = new mxCell();
|
||||
|
||||
cell.id = val.cellId.json;
|
||||
cell.vertex = val.type.json == 'vertex';
|
||||
cell.edge = val.type.json == 'edge';
|
||||
cell.connectable = val.connectable.json != '0';
|
||||
cell.collapsed = val.collapsed.json == '1';
|
||||
cell.visible = val.visible.json != '0';
|
||||
cell.style = (val.style != null) ? val.style.json : null;
|
||||
cell.value = (val.xmlValue != null) ?
|
||||
mxUtils.parseXml(val.xmlValue.json).documentElement :
|
||||
((val.value != null) ? val.value.json : null);
|
||||
cell.geometry = (val.geometry != null) ?
|
||||
codec.decode(mxUtils.parseXml(val.geometry.json).documentElement) : null;
|
||||
|
||||
return cell;
|
||||
};
|
||||
|
|
|
@ -17,6 +17,11 @@ DriveFile = function(ui, data, desc, doc)
|
|||
//Extends mxEventSource
|
||||
mxUtils.extend(DriveFile, DrawioFile);
|
||||
|
||||
/**
|
||||
* Delay for last save in ms.
|
||||
*/
|
||||
DriveFile.prototype.saveDelay = 0;
|
||||
|
||||
/**
|
||||
* Returns true if copy, export and print are not allowed for this file.
|
||||
*/
|
||||
|
@ -27,9 +32,12 @@ DriveFile.prototype.isRestricted = function()
|
|||
};
|
||||
|
||||
/**
|
||||
* Delay for last save in ms.
|
||||
* Adds the listener for automatically saving the diagram for local changes.
|
||||
*/
|
||||
DriveFile.prototype.saveDelay = 0;
|
||||
DriveFile.prototype.isConflict = function(err)
|
||||
{
|
||||
return err != null && err.error != null && err.error.code == 412;
|
||||
};
|
||||
|
||||
/**
|
||||
* Translates this point by the given vector.
|
||||
|
@ -87,7 +95,7 @@ DriveFile.prototype.isAutosaveOptional = function()
|
|||
*/
|
||||
DriveFile.prototype.isAutosave = function()
|
||||
{
|
||||
return this.ui.editor.autosave || this.isAutosaveRevision();
|
||||
return this.ui.editor.autosave || (this.realtime != null && this.isAutosaveRevision());
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -103,8 +111,10 @@ DriveFile.prototype.isAutosaveNow = function()
|
|||
|
||||
return isNaN(backup) || isNaN(modified) || backup < modified;
|
||||
}
|
||||
|
||||
return true;
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -146,11 +156,11 @@ DriveFile.prototype.isMovable = function()
|
|||
* @param {number} dx X-coordinate of the translation.
|
||||
* @param {number} dy Y-coordinate of the translation.
|
||||
*/
|
||||
DriveFile.prototype.save = function(revision, success, error, unloading)
|
||||
DriveFile.prototype.save = function(revision, success, error, unloading, overwrite)
|
||||
{
|
||||
DrawioFile.prototype.save.apply(this, arguments);
|
||||
|
||||
this.saveFile(null, revision, success, error, unloading);
|
||||
this.saveFile(null, revision, success, error, unloading, overwrite);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -159,7 +169,7 @@ DriveFile.prototype.save = function(revision, success, error, unloading)
|
|||
* @param {number} dx X-coordinate of the translation.
|
||||
* @param {number} dy Y-coordinate of the translation.
|
||||
*/
|
||||
DriveFile.prototype.saveFile = function(title, revision, success, error, unloading)
|
||||
DriveFile.prototype.saveFile = function(title, revision, success, error, unloading, overwrite)
|
||||
{
|
||||
if (!this.isEditable())
|
||||
{
|
||||
|
@ -170,58 +180,118 @@ DriveFile.prototype.saveFile = function(title, revision, success, error, unloadi
|
|||
}
|
||||
else if (!this.savingFile)
|
||||
{
|
||||
this.savingFile = true;
|
||||
|
||||
// Makes sure no changes get lost while the file is saved
|
||||
var prevModified = this.isModified;
|
||||
var modified = this.isModified();
|
||||
this.setModified(false);
|
||||
|
||||
this.ui.drive.saveFile(this, revision, mxUtils.bind(this, function(resp)
|
||||
// Makes sure no changes get lost while the file is saved
|
||||
this.setModified(false);
|
||||
|
||||
// Waits for success for modified state to be visible
|
||||
this.isModified = function()
|
||||
{
|
||||
this.savingFile = false;
|
||||
this.isModified = prevModified;
|
||||
|
||||
// Handles special case where resp is false eg
|
||||
// if the old file was converted to realtime
|
||||
if (resp != false)
|
||||
{
|
||||
if (revision)
|
||||
{
|
||||
this.lastAutosaveRevision = new Date().getTime();
|
||||
}
|
||||
|
||||
this.desc = resp;
|
||||
this.contentChanged();
|
||||
|
||||
if (success != null)
|
||||
{
|
||||
success(resp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setModified(modified || this.isModified());
|
||||
|
||||
if (error != null)
|
||||
{
|
||||
error();
|
||||
}
|
||||
}
|
||||
}), mxUtils.bind(this, function(resp)
|
||||
return true;
|
||||
};
|
||||
|
||||
var doSave = mxUtils.bind(this, function(realOverwrite, realRevision)
|
||||
{
|
||||
this.savingFile = false;
|
||||
this.isModified = prevModified;
|
||||
this.setModified(modified || this.isModified());
|
||||
this.savingFile = true;
|
||||
|
||||
if (error != null)
|
||||
this.ui.drive.saveFile(this, realRevision, mxUtils.bind(this, function(resp)
|
||||
{
|
||||
error(resp);
|
||||
}
|
||||
}), unloading, unloading);
|
||||
this.isModified = prevModified;
|
||||
this.savingFile = false;
|
||||
|
||||
// Handles special case where resp is false eg
|
||||
// if the old file was converted to realtime
|
||||
if (resp != false)
|
||||
{
|
||||
if (revision)
|
||||
{
|
||||
this.lastAutosaveRevision = new Date().getTime();
|
||||
}
|
||||
|
||||
this.desc = resp;
|
||||
this.contentChanged();
|
||||
|
||||
if (success != null)
|
||||
{
|
||||
success(resp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.setModified(modified || this.isModified());
|
||||
|
||||
if (error != null)
|
||||
{
|
||||
error(resp);
|
||||
}
|
||||
}
|
||||
}), mxUtils.bind(this, function(err)
|
||||
{
|
||||
var doError = mxUtils.bind(this, function()
|
||||
{
|
||||
this.setModified(modified || this.isModified());
|
||||
this.isModified = prevModified;
|
||||
this.savingFile = false;
|
||||
|
||||
if (error != null)
|
||||
{
|
||||
error(err);
|
||||
}
|
||||
});
|
||||
|
||||
if (this.isConflict(err))
|
||||
{
|
||||
this.showConflictDialog(function()
|
||||
{
|
||||
// Overwrites and creates revision
|
||||
doSave(true, true);
|
||||
}, function()
|
||||
{
|
||||
err = null;
|
||||
doError();
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
doError();
|
||||
}
|
||||
}), unloading, unloading, realOverwrite);
|
||||
});
|
||||
|
||||
doSave(overwrite, revision);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows a conflict dialog to the user.
|
||||
*/
|
||||
DriveFile.prototype.makeCopy = function(success, error, timestamp)
|
||||
{
|
||||
if (this.ui.spinner.spin(document.body, mxResources.get('saving')))
|
||||
{
|
||||
// Uses copyFile internally which is a remote REST call with the advantage of keeping
|
||||
// the parents of the file in-place, but copies the remote file contents so needs to
|
||||
// be updated as soon as we have the ID.
|
||||
this.saveAs(this.ui.getCopyFilename(this, timestamp), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
// Replaces the descriptor to and writes the file
|
||||
this.ui.spinner.stop();
|
||||
this.desc = resp;
|
||||
success();
|
||||
this.setModified(false);
|
||||
}), mxUtils.bind(this, function()
|
||||
{
|
||||
this.ui.spinner.stop();
|
||||
|
||||
if (error != null)
|
||||
{
|
||||
error();
|
||||
}
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Translates this point by the given vector.
|
||||
|
@ -364,3 +434,324 @@ DriveFile.prototype.close = function(unloading)
|
|||
this.realtime = null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows a conflict dialog to the user.
|
||||
*/
|
||||
DriveFile.prototype.showConflictDialog = function(retry, error)
|
||||
{
|
||||
if (!this.showingConflictDialog)
|
||||
{
|
||||
var resume = (this.ui.spinner != null && this.ui.spinner.pause != null) ?
|
||||
this.ui.spinner.pause() : function() {};
|
||||
var prev = this.changeListenerEnabled;
|
||||
this.changeListenerEnabled = false;
|
||||
this.showingConflictDialog = true;
|
||||
|
||||
this.ui.showError(mxResources.get('externalChanges'), mxResources.get('fileChangedOverwrite'),
|
||||
mxResources.get('makeCopy'), mxUtils.bind(this, function()
|
||||
{
|
||||
this.showingConflictDialog = false;
|
||||
this.changeListenerEnabled = prev;
|
||||
this.makeCopy(retry, error, true);
|
||||
}), null, mxResources.get('overwrite'), mxUtils.bind(this, function()
|
||||
{
|
||||
this.showingConflictDialog = false;
|
||||
this.changeListenerEnabled = prev;
|
||||
resume();
|
||||
retry();
|
||||
}), mxResources.get('cancel'), mxUtils.bind(this, function()
|
||||
{
|
||||
this.showingConflictDialog = false;
|
||||
this.changeListenerEnabled = prev;
|
||||
this.ui.hideDialog();
|
||||
resume();
|
||||
error();
|
||||
}), 360, 180);
|
||||
|
||||
// Adds important notice to dialog
|
||||
if (this.ui.dialog != null && this.ui.dialog.container != null)
|
||||
{
|
||||
var alert = document.createElement('a');
|
||||
alert.className = 'geStatusAlert';
|
||||
alert.style.display = 'block';
|
||||
alert.style.position = 'absolute';
|
||||
alert.style.cursor = 'pointer';
|
||||
alert.style.bottom = '0';
|
||||
alert.style.padding = '8px 0 8px 0';
|
||||
alert.style.marginBottom = '26px';
|
||||
alert.style.left = '0';
|
||||
alert.style.right = '0';
|
||||
alert.style.textAlign = 'center';
|
||||
alert.style.borderRadius = '0';
|
||||
alert.style.borderLeftStyle = 'none';
|
||||
alert.style.borderRightStyle = 'none';
|
||||
alert.style.textDecoration = 'none';
|
||||
alert.style.fontWeight = 'bold';
|
||||
|
||||
alert.setAttribute('href', 'https://desk.draw.io/support/solutions/articles/16000087215');
|
||||
alert.setAttribute('target', '_blank');
|
||||
mxUtils.write(alert, mxResources.get('collaborativeEditingNotice'));
|
||||
|
||||
this.ui.dialog.container.appendChild(alert);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks the conversion of the realtime model for this file.
|
||||
*/
|
||||
DriveFile.prototype.checkConvert = function()
|
||||
{
|
||||
var doCheck = mxUtils.bind(this, function(json)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (this.ui.getCurrentFile() == this && !this.isModified())
|
||||
{
|
||||
this.ui.drive.getXmlFile(this.desc, null, mxUtils.bind(this, function(file)
|
||||
{
|
||||
try
|
||||
{
|
||||
var data = file.getData();
|
||||
var node = (data != null) ? mxUtils.parseXml(data).documentElement : null;
|
||||
|
||||
if (node != null)
|
||||
{
|
||||
var tmp = this.ui.editor.extractGraphModel(node, true);
|
||||
|
||||
if (tmp != null)
|
||||
{
|
||||
node = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.runCheck != null)
|
||||
{
|
||||
this.runCheck(json, node, data);
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
this.log('CATCH-PARSEFILE-' + e.stack);
|
||||
this.runCheck(json, null, 'CATCH-PARSEFILE-' + e.stack);
|
||||
}
|
||||
}), mxUtils.bind(this, function(err)
|
||||
{
|
||||
this.log('ERROR-GETFILE');
|
||||
this.runCheck(json, null, 'ERROR-GETFILE');
|
||||
}), true);
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
this.log('CATCH-GETFILE-' + e.stack);
|
||||
this.runCheck(json, null, 'CATCH-GETFILE-' + e.stack);
|
||||
}
|
||||
});
|
||||
|
||||
try
|
||||
{
|
||||
this.ui.drive.getRealtimeData(this.desc.id, doCheck, doCheck);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
this.log('CATCH-GETJSON-' + e.stack, true);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes all attributes that are irrelevant for structural diff.
|
||||
*/
|
||||
DriveFile.prototype.getComparableFile = function(node)
|
||||
{
|
||||
// Removes all attributes from the mxfile
|
||||
while (node.attributes.length > 0)
|
||||
{
|
||||
node.removeAttribute(node.attributes[0].name);
|
||||
}
|
||||
|
||||
// Removes all diagram IDs since those can be missing in
|
||||
// realtime but will be added on the fly
|
||||
var diagrams = node.getElementsByTagName('diagram');
|
||||
|
||||
for (var i = 0; i < diagrams.length; i++)
|
||||
{
|
||||
diagrams[i].removeAttribute('name');
|
||||
diagrams[i].removeAttribute('id');
|
||||
|
||||
// Uncompress diagram data for structural comparison
|
||||
var tmp = this.ui.editor.graph.decompress(mxUtils.getTextContent(diagrams[i]));
|
||||
|
||||
if (tmp != null && tmp.length > 0)
|
||||
{
|
||||
while (diagrams[i].firstChild != null)
|
||||
{
|
||||
diagrams[i].removeChild(diagrams[i].firstChild);
|
||||
}
|
||||
|
||||
diagrams[i].appendChild(mxUtils.parseXml(tmp).documentElement);
|
||||
}
|
||||
}
|
||||
|
||||
// Some attributes have been initialized using different defaults
|
||||
// in the UI compared to realtime so they must be ignored
|
||||
var models = node.getElementsByTagName('mxGraphModel');
|
||||
|
||||
for (var i = 0; i < models.length; i++)
|
||||
{
|
||||
while (models[i].attributes.length > 0)
|
||||
{
|
||||
models[i].removeAttribute(models[i].attributes[0].name);
|
||||
}
|
||||
}
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes all labels, user objects and styles from the given node.
|
||||
*/
|
||||
DriveFile.prototype.getAnonymizedXml = function(node)
|
||||
{
|
||||
if (node != null)
|
||||
{
|
||||
var nodes = node.getElementsByTagName('mxCell');
|
||||
|
||||
for (var i = 0; i < nodes.length; i++)
|
||||
{
|
||||
nodes[i].removeAttribute('style');
|
||||
nodes[i].removeAttribute('value');
|
||||
|
||||
if (nodes[i].parentNode != null && nodes[i].parentNode.nodeName == 'UserObject' &&
|
||||
nodes[i].parentNode.parentNode != null)
|
||||
{
|
||||
nodes[i].parentNode.parentNode.replaceChild(nodes[i], nodes[i].parentNode);
|
||||
}
|
||||
}
|
||||
|
||||
return mxUtils.getPrettyXml(node);;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 'null';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Removes all labels, user objects and styles from the given JSON.
|
||||
*/
|
||||
DriveFile.prototype.getAnonymizedJson = function(json)
|
||||
{
|
||||
if (json != null)
|
||||
{
|
||||
var diagrams = json.value.diagrams.value;
|
||||
|
||||
for (var i = 0; i < diagrams.length; i++)
|
||||
{
|
||||
if (diagrams[i].value != null && diagrams[i].value.root != null)
|
||||
{
|
||||
this.anonymizeJsonCell(diagrams[i].value.root.value);
|
||||
}
|
||||
}
|
||||
|
||||
return JSON.stringify(json);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 'null';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the location as a new object.
|
||||
*/
|
||||
DriveFile.prototype.anonymizeJsonCell = function(json)
|
||||
{
|
||||
if (json != null)
|
||||
{
|
||||
delete json.xmlValue;
|
||||
delete json.value;
|
||||
delete json.style;
|
||||
|
||||
if (json.children != null && json.children.value != null)
|
||||
{
|
||||
for (var i = 0; i < json.children.value.length; i++)
|
||||
{
|
||||
this.anonymizeJsonCell(json.children.value[i].value);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Debug output.
|
||||
*/
|
||||
DriveFile.prototype.debug = function()
|
||||
{
|
||||
if (window.console != null && urlParams['test'] == '1')
|
||||
{
|
||||
console.log.apply(console, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Debug output.
|
||||
*/
|
||||
DriveFile.prototype.log = function(msg, sendReport)
|
||||
{
|
||||
this.debug(msg);
|
||||
|
||||
try
|
||||
{
|
||||
this.ui.logEvent({category: this.ui.JSON_CHECK, action: msg, label: this.desc.id});
|
||||
|
||||
if (sendReport)
|
||||
{
|
||||
this.report('Realtime Log Report ' + new Date() +
|
||||
'\n\nDescription: ' + JSON.stringify({version: this.ui.JSON_CHECK,
|
||||
title: this.desc.title, editable: this.desc.editable,
|
||||
copyable: this.desc.copyable, labels: this.desc.labels, id: this.desc.id,
|
||||
userPermission: this.desc.userPermission, fileSize: this.desc.fileSize,
|
||||
fileExtension: this.desc.fileExtension, modifiedDate: this.desc.modifiedDate,
|
||||
mimeType: this.desc.mimeType}) +
|
||||
'\n\nMessage:\n' + msg);
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Debug output.
|
||||
*/
|
||||
DriveFile.prototype.report = function(data)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (data.length > 3000000)
|
||||
{
|
||||
data = data.substring(0, 3000000) + '\n...[REPORT SHORTENED]'
|
||||
}
|
||||
|
||||
this.debug(data);
|
||||
|
||||
mxUtils.post('/email', 'version=' + encodeURIComponent(EditorUi.VERSION) +
|
||||
'&url=' + encodeURIComponent(window.location.href) +
|
||||
'&data=' + encodeURIComponent(data),
|
||||
mxUtils.bind(this, function(req)
|
||||
{
|
||||
this.debug('report sent');
|
||||
}),
|
||||
mxUtils.bind(this, function()
|
||||
{
|
||||
this.debug('report failed');
|
||||
}));
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
};
|
||||
|
|
|
@ -25,7 +25,7 @@ function DriveRealtime(file, doc)
|
|||
|
||||
this.ui.allowAnimation = false;
|
||||
this.codec = new mxCodec();
|
||||
|
||||
|
||||
this.disconnectListener = mxUtils.bind(this, function()
|
||||
{
|
||||
// LATER: How to reload realtime document without refreshing the page
|
||||
|
@ -181,6 +181,20 @@ DriveRealtime.prototype.start = function()
|
|||
this.log('reset realtime');
|
||||
}
|
||||
|
||||
// Forces a refresh if realtime was disabled on the file
|
||||
this.root.addEventListener(gapi.drive.realtime.EventType.VALUE_CHANGED, mxUtils.bind(this, function(evt)
|
||||
{
|
||||
if (evt.property == 'realtimeConverted')
|
||||
{
|
||||
this.ui.showRefreshDialog();
|
||||
}
|
||||
}));
|
||||
|
||||
if (this.root.has('realtimeConverted'))
|
||||
{
|
||||
this.ui.showRefreshDialog();
|
||||
}
|
||||
|
||||
var prefix = this.createPrefix();
|
||||
this.model.prefix = prefix + '-';
|
||||
this.ui.editor.resetGraph();
|
||||
|
@ -265,9 +279,14 @@ DriveRealtime.prototype.start = function()
|
|||
// Dummy node, should be XML node if used
|
||||
this.page = new DiagramPage(document.createElement('diagram'));
|
||||
this.page.mapping = new RealtimeMapping(this, this.diagramMap, this.page);
|
||||
this.diagramMap.set('name', mxResources.get('pageWithNumber', [1]));
|
||||
this.diagramMap.set('id', this.page.getId());
|
||||
this.page.setName(this.diagramMap.get('name'));
|
||||
|
||||
if (this.file.isEditable())
|
||||
{
|
||||
this.diagramMap.set('name', mxResources.get('pageWithNumber', [1]));
|
||||
this.diagramMap.set('id', this.page.getId());
|
||||
}
|
||||
|
||||
this.page.setName(this.diagramMap.get('name') || mxResources.get('pageWithNumber', [1]));
|
||||
this.page.mapping.init();
|
||||
}
|
||||
else
|
||||
|
@ -282,10 +301,17 @@ DriveRealtime.prototype.start = function()
|
|||
page.mapping = new RealtimeMapping(this, diagramMap, page);
|
||||
this.ui.currentPage = page;
|
||||
|
||||
if (this.file.isEditable() && !page.mapping.diagramMap.has('name'))
|
||||
if (this.file.isEditable())
|
||||
{
|
||||
page.mapping.diagramMap.set('name', mxResources.get('pageWithNumber', [1]));
|
||||
page.mapping.diagramMap.set('id', page.getId());
|
||||
if (!page.mapping.diagramMap.has('name'))
|
||||
{
|
||||
page.mapping.diagramMap.set('name', mxResources.get('pageWithNumber', [1]));
|
||||
}
|
||||
|
||||
if (!page.mapping.diagramMap.has('id'))
|
||||
{
|
||||
page.mapping.diagramMap.set('id', page.getId());
|
||||
}
|
||||
}
|
||||
|
||||
page.setName(page.mapping.diagramMap.get('name') || mxResources.get('pageWithNumber', [1]));
|
||||
|
@ -872,6 +898,7 @@ DriveRealtime.prototype.installPageSelectListener = function()
|
|||
if (this.file.isEditable())
|
||||
{
|
||||
page.mapping.diagramMap.set('name', page.getName());
|
||||
page.mapping.diagramMap.set('id', page.getId());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -922,6 +949,12 @@ DriveRealtime.prototype.installPageSelectListener = function()
|
|||
page.mapping = new RealtimeMapping(this, evt.values[i], page);
|
||||
page.setName(page.mapping.diagramMap.get('name') || mxResources.get('pageWithNumber',
|
||||
[this.ui.pages.length + 1]));
|
||||
|
||||
if (page.mapping.diagramMap.has('id'))
|
||||
{
|
||||
page.node.setAttribute('id', page.mapping.diagramMap.get('id'));
|
||||
}
|
||||
|
||||
this.ui.pages.splice(evt.index + i, 0, page);
|
||||
page.mapping.init();
|
||||
}
|
||||
|
|
|
@ -120,6 +120,15 @@
|
|||
},
|
||||
{name: 'portConstraintRotation', dispName: 'Port Const. Rot.', type: 'bool', defVal: false},
|
||||
{name: 'snapToPoint', dispName: 'Snap to Point', type: 'bool', defVal: false},
|
||||
{name: 'perimeter', dispName: 'Perimeter', defVal: 'none', type: 'enum',
|
||||
enumList: [{val: 'none', dispName: 'None'},
|
||||
{val: 'rectanglePerimeter', dispName: 'Rectangle'}, {val: 'ellipsePerimeter', dispName: 'Ellipse'},
|
||||
{val: 'rhombusPerimeter', dispName: 'Rhombus'}, {val: 'trianglePerimeter', dispName: 'Triangle'},
|
||||
{val: 'hexagonPerimeter2', dispName: 'Hexagon'}, {val: 'lifelinePerimeter', dispName: 'Lifeline'},
|
||||
{val: 'orthogonalPerimeter', dispName: 'Orthogonal'}, {val: 'backbonePerimeter', dispName: 'Backbone'},
|
||||
{val: 'calloutPerimeter', dispName: 'Callout'}, {val: 'parallelogramPerimeter', dispName: 'Parallelogram'},
|
||||
{val: 'trapezoidPerimeter', dispName: 'Trapezoid'}, {val: 'stepPerimeter', dispName: 'Step'}]
|
||||
},
|
||||
{name: 'fixDash', dispName: 'Fixed Dash', type: 'bool', defVal: false},
|
||||
{name: 'autosize', dispName: 'Autosize', type: 'bool', defVal: false},
|
||||
{name: 'collapsible', dispName: 'Collapsible', type: 'bool', defVal: false},
|
||||
|
@ -2020,7 +2029,7 @@
|
|||
input.value = pValue;
|
||||
input.className = "gePropEditor";
|
||||
|
||||
if (pType == "int" || pType == "float")
|
||||
if ((pType == "int" || pType == "float") && !prop.allowAuto)
|
||||
{
|
||||
input.type = "number";
|
||||
input.step = pType == "int"? "1" : "any";
|
||||
|
@ -2041,6 +2050,21 @@
|
|||
function setInputVal()
|
||||
{
|
||||
var inputVal = input.value;
|
||||
inputVal = inputVal.length == 0 && pType != "string"? 0 : inputVal;
|
||||
|
||||
if (prop.allowAuto)
|
||||
{
|
||||
if (inputVal.trim().toLowerCase() == "auto")
|
||||
{
|
||||
inputVal = "auto";
|
||||
pType = "string";
|
||||
}
|
||||
else
|
||||
{
|
||||
inputVal = parseFloat(inputVal);
|
||||
inputVal = isNaN(inputVal)? 0 : inputVal;
|
||||
}
|
||||
}
|
||||
|
||||
if (prop.min != null && inputVal < prop.min)
|
||||
{
|
||||
|
|
|
@ -684,6 +684,7 @@
|
|||
else
|
||||
{
|
||||
var diagramNode = node.ownerDocument.createElement('diagram');
|
||||
diagramNode.setAttribute('id', Editor.guid());
|
||||
mxUtils.setTextContent(diagramNode, data);
|
||||
|
||||
fileNode = node.ownerDocument.createElement('mxfile');
|
||||
|
@ -773,9 +774,7 @@
|
|||
|
||||
// Uses the graph state from the realtime model
|
||||
mapping.writeRealtimeToNode(temp);
|
||||
|
||||
var data = this.editor.graph.compress(this.editor.graph.zapGremlins(mxUtils.getXml(temp)));
|
||||
mxUtils.setTextContent(this.pages[i].node, data);
|
||||
mxUtils.setTextContent(this.pages[i].node, this.editor.graph.compressNode(temp));
|
||||
|
||||
// Marks the page as up-to-date
|
||||
mapping.needsUpdate = false;
|
||||
|
@ -1630,6 +1629,49 @@
|
|||
return doc;
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructs a filename for a copy of the given file.
|
||||
*/
|
||||
EditorUi.prototype.getCopyFilename = function(file, timestamp)
|
||||
{
|
||||
var title = (file != null && file.getTitle() != null) ?
|
||||
file.getTitle() : this.defaultFilename;
|
||||
|
||||
// Handles extension
|
||||
var extension = '';
|
||||
var dot = title.lastIndexOf('.');
|
||||
|
||||
if (dot >= 0)
|
||||
{
|
||||
extension = title.substring(dot);
|
||||
title = title.substring(0, dot);
|
||||
}
|
||||
|
||||
if (timestamp)
|
||||
{
|
||||
function getFormattedTime()
|
||||
{
|
||||
var today = new Date();
|
||||
var y = today.getFullYear();
|
||||
// JavaScript months are 0-based.
|
||||
var m = today.getMonth() + 1;
|
||||
var d = today.getDate();
|
||||
var h = today.getHours();
|
||||
var mi = today.getMinutes();
|
||||
var s = today.getSeconds();
|
||||
|
||||
return y + "-" + m + "-" + d + "-" + h + "-" + mi + "-" + s;
|
||||
}
|
||||
|
||||
var ts = new Date();
|
||||
title += '-' + getFormattedTime();
|
||||
}
|
||||
|
||||
title = mxResources.get('copyOf', [title]) + extension;
|
||||
|
||||
return title;
|
||||
};
|
||||
|
||||
/**
|
||||
* Translates this point by the given vector.
|
||||
*
|
||||
|
@ -5820,6 +5862,7 @@
|
|||
if (page.getName() == null)
|
||||
{
|
||||
page.setName(mxResources.get('pageWithNumber', [index + 1]));
|
||||
page.needsUpdate = true;
|
||||
}
|
||||
|
||||
graph.model.execute(new ChangePage(this, page, page, index));
|
||||
|
|
|
@ -629,7 +629,7 @@ GitHubClient.prototype.saveFile = function(file, success, error)
|
|||
{
|
||||
resume = this.ui.spinner.pause();
|
||||
|
||||
var dlg = new ErrorDialog(this.ui, mxResources.get('errorSavingFile'),
|
||||
var dlg = new ErrorDialog(this.ui, mxResources.get('externalChanges'),
|
||||
mxResources.get('fileChangedOverwrite'), mxResources.get('cancel'), mxUtils.bind(this, function()
|
||||
{
|
||||
error();
|
||||
|
|
|
@ -386,6 +386,27 @@
|
|||
{
|
||||
editorUi.actions.get('save').funct();
|
||||
}, null, null, Editor.ctrlKey + '+S');
|
||||
|
||||
editorUi.actions.addAction('refresh', function()
|
||||
{
|
||||
var currentFile = editorUi.getCurrentFile();
|
||||
|
||||
function fn()
|
||||
{
|
||||
currentFile.setModified(false);
|
||||
editorUi.loadFile(currentFile.getHash(), true);
|
||||
};
|
||||
|
||||
if (currentFile != null && currentFile.isModified())
|
||||
{
|
||||
editorUi.confirm(mxResources.get('allChangesLost'), null, fn,
|
||||
mxResources.get('cancel'), mxResources.get('discardChanges'));
|
||||
}
|
||||
else
|
||||
{
|
||||
fn();
|
||||
}
|
||||
}, null, null, 'Alt+Shift+R');
|
||||
|
||||
editorUi.actions.addAction('upload...', function()
|
||||
{
|
||||
|
@ -945,7 +966,9 @@
|
|||
var b = graph.getGraphBounds();
|
||||
var tr = graph.view.translate;
|
||||
var s = graph.view.scale;
|
||||
graph.insertVertex(parent, null, '', b.x / s - tr.x, b.y / s - tr.y, b.width / s, b.height / s, 'fillColor=none;strokeColor=red;');
|
||||
graph.insertVertex(graph.getDefaultParent(), null, '',
|
||||
b.x / s - tr.x, b.y / s - tr.y, b.width / s, b.height / s,
|
||||
'fillColor=none;strokeColor=red;');
|
||||
}));
|
||||
|
||||
mxResources.parse('createSidebarEntry=Create sidebar entry');
|
||||
|
@ -1830,20 +1853,8 @@
|
|||
|
||||
if (file != null)
|
||||
{
|
||||
var title = (file.getTitle() != null) ? file.getTitle() : editorUi.defaultFilename;
|
||||
|
||||
// Handles extension
|
||||
var extension = '';
|
||||
var dot = title.lastIndexOf('.');
|
||||
|
||||
if (dot >= 0)
|
||||
{
|
||||
extension = title.substring(dot);
|
||||
title = title.substring(0, dot);
|
||||
}
|
||||
|
||||
title = mxResources.get('copyOf', [title]) + extension;
|
||||
|
||||
var title = editorUi.getCopyFilename(file);
|
||||
|
||||
if (file.constructor == DriveFile)
|
||||
{
|
||||
var dlg = new CreateDialog(editorUi, title, mxUtils.bind(this, function(newTitle, mode)
|
||||
|
@ -1860,18 +1871,18 @@
|
|||
{
|
||||
if (editorUi.spinner.spin(document.body, mxResources.get('saving')))
|
||||
{
|
||||
// Makes sure the latest XML is in the file
|
||||
file.save(false, mxUtils.bind(this, function()
|
||||
// Saveas does not update the file descriptor in Google Drive
|
||||
file.saveAs(newTitle, mxUtils.bind(this, function(resp)
|
||||
{
|
||||
// Saveas does not update the file descriptor in Google Drive
|
||||
file.saveAs(newTitle, mxUtils.bind(this, function(resp)
|
||||
// Replaces file descriptor in-place and saves
|
||||
file.desc = resp;
|
||||
|
||||
// Makes sure the latest XML is in the file
|
||||
file.save(false, mxUtils.bind(this, function()
|
||||
{
|
||||
editorUi.spinner.stop();
|
||||
var url = editorUi.getUrl();
|
||||
window.openWindow(url + '#G' + resp.id, null, mxUtils.bind(this, function()
|
||||
{
|
||||
window.location.hash = 'G' + resp.id;
|
||||
}));
|
||||
file.setModified(false);
|
||||
file.addAllSavedStatus();
|
||||
}), mxUtils.bind(this, function(resp)
|
||||
{
|
||||
editorUi.handleError(resp);
|
||||
|
@ -1884,7 +1895,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
this.editorUi.createFile(newTitle, this.editorUi.getFileData(true), null, mode);
|
||||
editorUi.createFile(newTitle, editorUi.getFileData(true), null, mode);
|
||||
}
|
||||
}
|
||||
}), mxUtils.bind(this, function()
|
||||
|
@ -2648,7 +2659,7 @@
|
|||
|
||||
if (file.realtime == null)
|
||||
{
|
||||
this.addMenuItems(menu, ['save', 'share', '-'], parent);
|
||||
this.addMenuItems(menu, ['save', 'share', '-', 'refresh', '-'], parent);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -694,9 +694,10 @@ EditorUi.initMinimalTheme = function()
|
|||
|
||||
this.put('diagram', new Menu(mxUtils.bind(this, function(menu, parent)
|
||||
{
|
||||
var file = ui.getCurrentFile();
|
||||
ui.menus.addSubmenu('extras', menu, parent, mxResources.get('preferences'));
|
||||
menu.addSeparator(parent);
|
||||
|
||||
|
||||
if (mxClient.IS_CHROMEAPP || EditorUi.isElectronApp)
|
||||
{
|
||||
ui.menus.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', '-'], parent);
|
||||
|
@ -721,17 +722,19 @@ EditorUi.initMinimalTheme = function()
|
|||
}
|
||||
|
||||
ui.menus.addSubmenu('exportAs', menu, parent);
|
||||
|
||||
var file = ui.getCurrentFile();
|
||||
|
||||
if (file != null && file.constructor == DriveFile)
|
||||
{
|
||||
ui.menus.addMenuItems(menu, ['-', 'share'], parent);
|
||||
|
||||
|
||||
if (file.realtime != null)
|
||||
{
|
||||
ui.menus.addMenuItems(menu, ['chatWindowTitle'], parent);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.menus.addMenuItems(menu, ['-', 'refresh'], parent);
|
||||
}
|
||||
|
||||
menu.addSeparator(parent);
|
||||
}
|
||||
|
|
|
@ -460,7 +460,7 @@ Graph.prototype.createViewState = function(node)
|
|||
background: (bg != null && bg.length > 0) ? bg : this.defaultGraphBackground,
|
||||
backgroundImage: (bgImg != null) ? new mxImage(bgImg.src, bgImg.width, bgImg.height) : null,
|
||||
pageScale: (!isNaN(ps)) ? ps : mxGraph.prototype.pageScale,
|
||||
pageFormat: (!isNaN(pw) && !isNaN(ph)) ? new mxRectangle(0, 0, pw, pw) : this.pageFormat,
|
||||
pageFormat: (!isNaN(pw) && !isNaN(ph)) ? new mxRectangle(0, 0, pw, ph) : mxSettings.getPageFormat(),
|
||||
tooltips: node.getAttribute('tooltips') != '0',
|
||||
connect: node.getAttribute('connect') != '0',
|
||||
arrows: node.getAttribute('arrows') != '0',
|
||||
|
@ -496,8 +496,10 @@ Graph.prototype.saveViewState = function(vs, node)
|
|||
node.setAttribute('pageHeight', pf.height);
|
||||
}
|
||||
|
||||
node.setAttribute('background', (vs != null && vs.background != null) ?
|
||||
vs.background : this.defaultGraphBackground);
|
||||
if (vs != null && vs.background != null)
|
||||
{
|
||||
node.setAttribute('background', vs.background);
|
||||
}
|
||||
|
||||
if (vs != null && vs.backgroundImage != null)
|
||||
{
|
||||
|
|
|
@ -1287,14 +1287,14 @@ var com;
|
|||
|
||||
if (dScale != null)
|
||||
{
|
||||
dScaleV = parseFloat(dScale.getAttribute("V"));
|
||||
dScaleV = parseFloat(dScale.getAttribute("V")) || 1;
|
||||
}
|
||||
|
||||
var pScale = master.pageSheet["PageScale"];
|
||||
|
||||
if (pScale != null)
|
||||
{
|
||||
pScaleV = parseFloat(pScale.getAttribute("V"));
|
||||
pScaleV = parseFloat(pScale.getAttribute("V")) || 1;
|
||||
}
|
||||
|
||||
scale = pScaleV / dScaleV;
|
||||
|
@ -1533,7 +1533,7 @@ var com;
|
|||
}
|
||||
/*private*/ RowFactory.getIndex = function (elem) {
|
||||
try {
|
||||
return parseInt(elem.getAttribute("IX"));
|
||||
return parseInt(elem.getAttribute("IX")) || 1;
|
||||
}
|
||||
catch (e) {
|
||||
return 1;
|
||||
|
@ -2142,7 +2142,7 @@ var com;
|
|||
}
|
||||
mxVsdxGeometry.prototype.getIndex$org_w3c_dom_Element = function (elem) {
|
||||
try {
|
||||
return parseInt(elem.getAttribute("IX"));
|
||||
return parseInt(elem.getAttribute("IX")) || 0;
|
||||
}
|
||||
catch (e) {
|
||||
return 0;
|
||||
|
@ -8609,7 +8609,7 @@ var com;
|
|||
var cell = cells[index158];
|
||||
{
|
||||
n = cell.getAttribute("N");
|
||||
var v = cell.getAttribute("V");
|
||||
var v = cell.getAttribute("V") || cell.textContent || "";
|
||||
switch ((n)) {
|
||||
case "Value":
|
||||
value = v;
|
||||
|
@ -10688,9 +10688,9 @@ var com;
|
|||
var yS = "-0.4";
|
||||
if (control != null) {
|
||||
xEl = control.getElementsByTagName(com.mxgraph.io.vsdx.mxVsdxConstants.X).item(0);
|
||||
xS = xEl.getAttribute("F");
|
||||
xS = xEl.getAttribute("F") || "";
|
||||
yEl = control.getElementsByTagName(com.mxgraph.io.vsdx.mxVsdxConstants.Y).item(0);
|
||||
yS = yEl.getAttribute("F");
|
||||
yS = yEl.getAttribute("F") || "";
|
||||
}
|
||||
var geometry_4 = vertex.getGeometry();
|
||||
xS = xS.split("Width/2+").join("");
|
||||
|
@ -11080,7 +11080,7 @@ var com;
|
|||
var firstNURBS = firstGeom.getElementsByTagName(com.mxgraph.io.vsdx.mxVsdxConstants.NURBS_TO).item(0);
|
||||
var firstE = firstNURBS.getElementsByTagName("E").item(0);
|
||||
if (firstE != null) {
|
||||
var f = firstE.getAttribute("F");
|
||||
var f = firstE.getAttribute("F") || "";
|
||||
f = f.replace(new RegExp("NURBS\\(", 'g'), "");
|
||||
f = f.replace(new RegExp("\\)", 'g'), "");
|
||||
f = f.replace(new RegExp(",", 'g'), " ");
|
||||
|
|
23
src/main/webapp/js/embed-static.min.js
vendored
23
src/main/webapp/js/embed-static.min.js
vendored
|
@ -22,8 +22,8 @@ position:{cssPropBits:0,cssLitGroup:[a[23]],cssFns:[]},quotes:{cssPropBits:8,css
|
|||
cssLitGroup:[a[14],a[69]],cssFns:[]},stress:"border-bottom-left-radius","table-layout":{cssPropBits:0,cssLitGroup:[a[52],a[61]],cssFns:[]},"text-align":{cssPropBits:0,cssLitGroup:[a[42],a[56],a[66]],cssFns:[]},"text-decoration":{cssPropBits:0,cssLitGroup:[a[19],a[71]],cssFns:[]},"text-indent":"border-bottom-left-radius","text-overflow":{cssPropBits:8,cssLitGroup:[a[33]],cssFns:[]},"text-shadow":"box-shadow","text-transform":{cssPropBits:0,cssLitGroup:[a[26],a[71]],cssFns:[]},"text-wrap":{cssPropBits:0,
|
||||
cssLitGroup:[a[46],a[71],a[72]],cssFns:[]},top:"bottom",transform:{cssPropBits:0,cssLitGroup:[a[71]],cssFns:"matrix() perspective() rotate() rotate3d() rotatex() rotatey() rotatez() scale() scale3d() scalex() scaley() scalez() skew() skewx() skewy() translate() translate3d() translatex() translatey() translatez()".split(" ")},"transform-origin":"perspective-origin","transform-style":{cssPropBits:0,cssLitGroup:[a[37]],cssFns:[]},transition:{cssPropBits:1029,cssLitGroup:[a[10],a[48],a[50],a[71]],cssFns:["cubic-bezier()",
|
||||
"steps()"]},"transition-delay":"animation-delay","transition-duration":"animation-delay","transition-property":{cssPropBits:1024,cssLitGroup:[a[48],a[50]],cssFns:[]},"transition-timing-function":"animation-timing-function","unicode-bidi":{cssPropBits:0,cssLitGroup:[a[30],a[72]],cssFns:[]},"vertical-align":{cssPropBits:5,cssLitGroup:[a[12],a[31]],cssFns:[]},visibility:"backface-visibility","voice-family":{cssPropBits:8,cssLitGroup:[a[27],a[48]],cssFns:[]},volume:{cssPropBits:1,cssLitGroup:[a[17],a[69]],
|
||||
cssFns:[]},"white-space":{cssPropBits:0,cssLitGroup:[a[22],a[72]],cssFns:[]},width:"min-height","word-break":{cssPropBits:0,cssLitGroup:[a[32],a[72]],cssFns:[]},"word-spacing":"letter-spacing","word-wrap":"overflow-wrap","z-index":"bottom",zoom:"line-height","cubic-bezier()":"animation-delay","steps()":{cssPropBits:5,cssLitGroup:[a[36],a[48]],cssFns:[]},"image()":{cssPropBits:18,cssLitGroup:[a[0],a[48]],cssFns:["rgb()","rgba()"]},"linear-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[31],a[42],a[48],
|
||||
a[79]],cssFns:["rgb()","rgba()"]},"radial-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[11],a[31],a[42],a[48],a[56],a[57]],cssFns:["rgb()","rgba()"]},"repeating-linear-gradient()":"linear-gradient()","repeating-radial-gradient()":"radial-gradient()","rgb()":{cssPropBits:1,cssLitGroup:[a[48]],cssFns:[]},"rgba()":"rgb()","rect()":{cssPropBits:5,cssLitGroup:[a[48],a[52]],cssFns:[]},"alpha()":{cssPropBits:1,cssLitGroup:[a[28]],cssFns:[]},"matrix()":"animation-delay","perspective()":"border-bottom-left-radius",
|
||||
cssFns:[]},"white-space":{cssPropBits:0,cssLitGroup:[a[22],a[72]],cssFns:[]},width:"min-height","word-break":{cssPropBits:0,cssLitGroup:[a[32],a[72],a[55]],cssFns:[]},"word-spacing":"letter-spacing","word-wrap":"overflow-wrap","z-index":"bottom",zoom:"line-height","cubic-bezier()":"animation-delay","steps()":{cssPropBits:5,cssLitGroup:[a[36],a[48]],cssFns:[]},"image()":{cssPropBits:18,cssLitGroup:[a[0],a[48]],cssFns:["rgb()","rgba()"]},"linear-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[31],a[42],
|
||||
a[48],a[79]],cssFns:["rgb()","rgba()"]},"radial-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[11],a[31],a[42],a[48],a[56],a[57]],cssFns:["rgb()","rgba()"]},"repeating-linear-gradient()":"linear-gradient()","repeating-radial-gradient()":"radial-gradient()","rgb()":{cssPropBits:1,cssLitGroup:[a[48]],cssFns:[]},"rgba()":"rgb()","rect()":{cssPropBits:5,cssLitGroup:[a[48],a[52]],cssFns:[]},"alpha()":{cssPropBits:1,cssLitGroup:[a[28]],cssFns:[]},"matrix()":"animation-delay","perspective()":"border-bottom-left-radius",
|
||||
"rotate()":"border-bottom-left-radius","rotate3d()":"animation-delay","rotatex()":"border-bottom-left-radius","rotatey()":"border-bottom-left-radius","rotatez()":"border-bottom-left-radius","scale()":"animation-delay","scale3d()":"animation-delay","scalex()":"border-bottom-left-radius","scaley()":"border-bottom-left-radius","scalez()":"border-bottom-left-radius","skew()":"animation-delay","skewx()":"border-bottom-left-radius","skewy()":"border-bottom-left-radius","translate()":"animation-delay","translate3d()":"animation-delay",
|
||||
"translatex()":"border-bottom-left-radius","translatey()":"border-bottom-left-radius","translatez()":"border-bottom-left-radius"},c;for(c in b)"string"===typeof b[c]&&Object.hasOwnProperty.call(b,c)&&(b[c]=b[b[c]]);"undefined"!==typeof window&&(window.cssSchema=b);var d,e;(function(){function a(a){var b=parseInt(a.substring(1),16);return 65535<b?(b-=65536,String.fromCharCode(55296+(b>>10),56320+(b&1023))):b==b?String.fromCharCode(b):" ">a[1]?"":a[1]}function b(a,b){return'"'+a.replace(/[\u0000-\u001f\\\"<>]/g,
|
||||
b)+'"'}function c(a){return g[a]||(g[a]="\\"+a.charCodeAt(0).toString(16)+" ")}function f(a){return h[a]||(h[a]=("">a?"%0":"%")+a.charCodeAt(0).toString(16))}var g={"\\":"\\\\"},h={"\\":"%5c"},k=RegExp("\\uFEFF|U[+][0-9A-F?]{1,6}(?:-[0-9A-F]{1,6})?|url[(][\\t\\n\\f ]*(?:\"(?:'|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*\"|'(?:\"|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*'|(?:[\\t\\x21\\x23-\\x26\\x28-\\x5b\\x5d-\\x7e]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*)[\\t\\n\\f ]*[)]|(?!url[(])-?(?:[a-zA-Z_]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))(?:[a-zA-Z0-9_-]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*[(]|(?:@?-?(?:[a-zA-Z_]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))|#)(?:[a-zA-Z0-9_-]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*|\"(?:'|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*\"|'(?:\"|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*'|[-+]?(?:[0-9]+(?:[.][0-9]+)?|[.][0-9]+)(?:%|-?(?:[a-zA-Z_]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))(?:[a-zA-Z0-9_-]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*)?|\x3c!--|--\x3e|[\\t\\n\\f ]+|/(?:[*][^*]*[*]+(?:[^/][^*]*[*]+)*/|/[^\\n\\f]*)|[~|^$*]=|[^\"'\\\\/]|/(?![/*])",
|
||||
|
@ -184,7 +184,7 @@ f)+"\n"+t+"}":"{"+z.join(",")+"}";f=t;return l}}"function"!==typeof Date.prototy
|
|||
e=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,f,g,h={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},k;"function"!==typeof JSON.stringify&&(JSON.stringify=function(a,b,d){var e;g=f="";if("number"===typeof d)for(e=0;e<d;e+=1)g+=" ";else"string"===typeof d&&(g=d);if((k=b)&&"function"!==typeof b&&("object"!==typeof b||"number"!==typeof b.length))throw Error("JSON.stringify");return c("",{"":a})});
|
||||
"function"!==typeof JSON.parse&&(JSON.parse=function(a,b){function c(a,d){var e,f,g=a[d];if(g&&"object"===typeof g)for(e in g)Object.prototype.hasOwnProperty.call(g,e)&&(f=c(g,e),void 0!==f?g[e]=f:delete g[e]);return b.call(a,d,g)}var e;a=""+a;d.lastIndex=0;d.test(a)&&(a=a.replace(d,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
|
||||
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof b?c({"":e},""):e;throw new SyntaxError("JSON.parse");})})();"undefined"===typeof window.mxBasePath&&(window.mxBasePath="https://www.draw.io/mxgraph/");window.mxLoadStylesheets=window.mxLoadStylesheets||!1;window.mxLoadResources=window.mxLoadResources||!1;window.mxLanguage=window.mxLanguage||"en";window.urlParams=window.urlParams||{};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";
|
||||
window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"9.3.1",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
|
||||
window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"9.3.4",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
|
||||
0>navigator.userAgent.indexOf("Edge/"),IS_OP:0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/"),IS_OT:0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&
|
||||
0>navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_IOS:navigator.userAgent.match(/(iPad|iPhone|iPod)/g)?!0:!1,IS_GC:0<=navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:0<=navigator.userAgent.indexOf("Firefox/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&
|
||||
0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||
|
||||
|
@ -615,7 +615,7 @@ mxSwimlane.prototype.paintDivider=function(a,b,c,d,e,f,g){g||a.setShadow(!1);a.b
|
|||
mxSwimlane.prototype.getImageBounds=function(a,b,c,d){return this.isHorizontal()?new mxRectangle(a+c-this.imageSize,b,this.imageSize,this.imageSize):new mxRectangle(a,b,this.imageSize,this.imageSize)};function mxGraphLayout(a){this.graph=a}mxGraphLayout.prototype.graph=null;mxGraphLayout.prototype.useBoundingBox=!0;mxGraphLayout.prototype.parent=null;mxGraphLayout.prototype.moveCell=function(a,b,c){};mxGraphLayout.prototype.execute=function(a){};mxGraphLayout.prototype.getGraph=function(){return this.graph};
|
||||
mxGraphLayout.prototype.getConstraint=function(a,b,c,d){c=this.graph.view.getState(b);b=null!=c?c.style:this.graph.getCellStyle(b);return null!=b?b[a]:null};
|
||||
mxGraphLayout.traverse=function(a,b,c,d,e){if(null!=c&&null!=a&&(b=null!=b?b:!0,e=e||new mxDictionary,!e.get(a)&&(e.put(a,!0),d=c(a,d),null==d||d))&&(d=this.graph.model.getEdgeCount(a),0<d))for(var f=0;f<d;f++){var g=this.graph.model.getEdgeAt(a,f),h=this.graph.model.getTerminal(g,!0)==a;if(!b||h)h=this.graph.view.getVisibleTerminal(g,!h),this.traverse(h,b,c,g,e)}};
|
||||
mxGraphLayout.prototype.isAncestor=function(a,b,c){if(!c)return this.graph.model.getParent(cell)==a;if(b==a)return!1;for(;null!=b&&b!=a;)b=this.graph.model.getParent(b);return b==a};mxGraphLayout.prototype.isVertexMovable=function(a){return this.graph.isCellMovable(a)};mxGraphLayout.prototype.isVertexIgnored=function(a){return!this.graph.getModel().isVertex(a)||!this.graph.isCellVisible(a)};
|
||||
mxGraphLayout.prototype.isAncestor=function(a,b,c){if(!c)return this.graph.model.getParent(b)==a;if(b==a)return!1;for(;null!=b&&b!=a;)b=this.graph.model.getParent(b);return b==a};mxGraphLayout.prototype.isVertexMovable=function(a){return this.graph.isCellMovable(a)};mxGraphLayout.prototype.isVertexIgnored=function(a){return!this.graph.getModel().isVertex(a)||!this.graph.isCellVisible(a)};
|
||||
mxGraphLayout.prototype.isEdgeIgnored=function(a){var b=this.graph.getModel();return!b.isEdge(a)||!this.graph.isCellVisible(a)||null==b.getTerminal(a,!0)||null==b.getTerminal(a,!1)};mxGraphLayout.prototype.setEdgeStyleEnabled=function(a,b){this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE,b?"0":"1",[a])};mxGraphLayout.prototype.setOrthogonalEdge=function(a,b){this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL,b?"1":"0",[a])};
|
||||
mxGraphLayout.prototype.getParentOffset=function(a){var b=new mxPoint;if(null!=a&&a!=this.parent){var c=this.graph.getModel();if(c.isAncestor(this.parent,a))for(var d=c.getGeometry(a);a!=this.parent;)b.x+=d.x,b.y+=d.y,a=c.getParent(a),d=c.getGeometry(a)}return b};
|
||||
mxGraphLayout.prototype.setEdgePoints=function(a,b){if(null!=a){var c=this.graph.model,d=c.getGeometry(a);null==d?(d=new mxGeometry,d.setRelative(!0)):d=d.clone();if(null!=this.parent&&null!=b)for(var e=c.getParent(a),e=this.getParentOffset(e),f=0;f<b.length;f++)b[f].x-=e.x,b[f].y-=e.y;d.points=b;c.setGeometry(a,d)}};
|
||||
|
@ -1607,13 +1607,14 @@ Graph.prototype.isCellFoldable=function(a){var b=this.view.getState(a),b=null!=b
|
|||
Graph.prototype.zoom=function(a,b){a=Math.max(.01,Math.min(this.view.scale*a,160))/this.view.scale;mxGraph.prototype.zoom.apply(this,arguments)};Graph.prototype.zoomIn=function(){.15>this.view.scale?this.zoom((this.view.scale+.01)/this.view.scale):this.zoom(Math.round(this.view.scale*this.zoomFactor*20)/20/this.view.scale)};Graph.prototype.zoomOut=function(){.15>=this.view.scale?this.zoom((this.view.scale-.01)/this.view.scale):this.zoom(Math.round(1/this.zoomFactor*this.view.scale*20)/20/this.view.scale)};
|
||||
Graph.prototype.getTooltipForCell=function(a){var b="";if(mxUtils.isNode(a.value)){var c=a.value.getAttribute("tooltip");if(null!=c)null!=c&&this.isReplacePlaceholders(a)&&(c=this.replacePlaceholders(a,c)),b=this.sanitizeHtml(c);else{c=this.builtInProperties;a=a.value.attributes;var d=[];this.isEnabled()&&c.push("link");for(var e=0;e<a.length;e++)0>mxUtils.indexOf(c,a[e].nodeName)&&0<a[e].nodeValue.length&&d.push({name:a[e].nodeName,value:a[e].nodeValue});d.sort(function(a,b){return a.name<b.name?
|
||||
-1:a.name>b.name?1:0});for(e=0;e<d.length;e++)"link"==d[e].name&&this.isCustomLink(d[e].value)||(b+=("link"!=d[e].name?"<b>"+d[e].name+":</b> ":"")+mxUtils.htmlEntities(d[e].value)+"\n");0<b.length&&(b=b.substring(0,b.length-1),mxClient.IS_SVG&&(b='<div style="max-width:360px;">'+b+"</div>"))}}return b};Graph.prototype.stringToBytes=function(a){for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=a.charCodeAt(c);return b};
|
||||
Graph.prototype.bytesToString=function(a){for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")};Graph.prototype.compress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=this.bytesToString(pako.deflateRaw(encodeURIComponent(a)));return window.btoa?btoa(a):Base64.encode(a,!0)};Graph.prototype.decompress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=window.atob?atob(a):Base64.decode(a,!0);return this.zapGremlins(decodeURIComponent(this.bytesToString(pako.inflateRaw(a))))};
|
||||
Graph.prototype.zapGremlins=function(a){for(var b=[],c=0;c<a.length;c++){var d=a.charCodeAt(c);(32<=d||9==d||10==d||13==d)&&b.push(a.charAt(c))}return b.join("")};HoverIcons=function(a){this.graph=a;this.init()};HoverIcons.prototype.arrowSpacing=2;HoverIcons.prototype.updateDelay=500;HoverIcons.prototype.activationDelay=140;HoverIcons.prototype.currentState=null;HoverIcons.prototype.activeArrow=null;HoverIcons.prototype.inactiveOpacity=15;HoverIcons.prototype.cssCursor="copy";
|
||||
HoverIcons.prototype.checkCollisions=!0;HoverIcons.prototype.arrowFill="#29b6f2";HoverIcons.prototype.triangleUp=mxClient.IS_SVG?Graph.createSvgImage(18,28,'<path d="m 6 26 L 12 26 L 12 12 L 18 12 L 9 1 L 1 12 L 6 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-up.png",26,14);
|
||||
HoverIcons.prototype.triangleRight=mxClient.IS_SVG?Graph.createSvgImage(26,18,'<path d="m 1 6 L 14 6 L 14 1 L 26 9 L 14 18 L 14 12 L 1 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-right.png",14,26);HoverIcons.prototype.triangleDown=mxClient.IS_SVG?Graph.createSvgImage(18,26,'<path d="m 6 1 L 6 14 L 1 14 L 9 26 L 18 14 L 12 14 L 12 1 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-down.png",26,14);
|
||||
HoverIcons.prototype.triangleLeft=mxClient.IS_SVG?Graph.createSvgImage(28,18,'<path d="m 1 9 L 12 1 L 12 6 L 26 6 L 26 12 L 12 12 L 12 18 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-left.png",14,26);HoverIcons.prototype.roundDrop=mxClient.IS_SVG?Graph.createSvgImage(26,26,'<circle cx="13" cy="13" r="12" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/round-drop.png",26,26);
|
||||
HoverIcons.prototype.refreshTarget=new mxImage(mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDQxNERDRTU1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDQxNERDRTY1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NDE0RENFMzVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NDE0RENFNDVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsvuX50AAANaSURBVHja7FjRZ1tRGD9ZJ1NCyIQSwrivI4Q8hCpjlFDyFEoYfSp9Ko1QWnmo0If+BSXkIfo0QirTMUpeGo2EPfWllFYjZMLKLDJn53d3biU337m5J223bPbxk5t7v+/c3/2+73znO8fDOWezKM/YjMpz68Lj8ejY+QTeCCwLxOS9qPxtyN+6wAeBTwJ31CCO0cJDjXBGBN4LfIepSwykTUT1bgpuib0SONIgo8KRHOtRiCFcvUcgZeGrHPNBxLIyFPyRgTGz0xLbegJCdmzpElue5KlAIMDX19d5uVzm5+fnfDAYmMA17uEZdOx2Yvb/sHlu2S0xwymn5ufneTab5b1ej08S6EAXNrDd2dnhiUTim21MvMtwQ6yiIrWwsMDPzs64rsBmf3/fvM7n89TYlUnEllSkQqEQv7q64g+Vk5MTVXosORErU0Zer5f0FEIlw2N6MxwO82QyaXql2+2SxDqdjopYWUUsqEp45IldqtWq6UWVh/1+P7+8vCTJ4QMUJSRIEXuneoH96w8PDyeWAnhSJfCqwm6NIlaklFdXV0cGhRcQ2mlJQXK5nMq2YPEZbnteU1U2lUqN/D84OGD9fl+5fgnSrFarsUwmw0qlEru4uBjTicViTk3Cr27HSnxR+Doyz0ZE1CAWiUTusbu7y9rttlZv5fP5WDQavYfIMba4uEipfhF8XtqJoZXx/uH+sC/4vPg7OljZZQbsCmLtYzc3N6zRaJhotVrmfx0xDINtbm6athYUeXpHdbBNaqZUKpWxWXV7e2vex+xaWVnhc3NzjrPUXgexyCt0m67LBV7uJMITjqRE4o8tZeg8FPpFitgapYxiOC0poFgsji1jKNo6BZZckrAGUtJsNk1vqAihCBcKhTE7hNWhqw2qFnGy5UFOUYJVIJ1OjzSE+BCEilon0URavRmBqnbbQ00AXbm+vnZc9O1tj72OnQoc2+cwygRkb2+P1et17ZoEm3g87lRmjgWZ00kbXkNuse6/Bu2wlegIxfb2tuvWGroO4bO2c4bbzUh60mxDXm1sbJhhxkQYnhS4h2fUZoRAWnf7lv8N27f8P7Xhnekjgpk+VKGOoQbsiY+hhhtF3YO7twIJ+ULvUGv+GQ2fQEvWxI/THNx5/p/BaspPAQYAqStgiSQwCDoAAAAASUVORK5CYII=":
|
||||
IMAGE_PATH+"/refresh.png",38,38);HoverIcons.prototype.tolerance=mxClient.IS_TOUCH?6:0;
|
||||
Graph.prototype.bytesToString=function(a){for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")};Graph.prototype.compressNode=function(a){return this.compress(this.zapGremlins(mxUtils.getXml(a)))};Graph.prototype.compress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=this.bytesToString(pako.deflateRaw(encodeURIComponent(a)));return window.btoa?btoa(a):Base64.encode(a,!0)};
|
||||
Graph.prototype.decompress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=window.atob?atob(a):Base64.decode(a,!0);return this.zapGremlins(decodeURIComponent(this.bytesToString(pako.inflateRaw(a))))};Graph.prototype.zapGremlins=function(a){for(var b=[],c=0;c<a.length;c++){var d=a.charCodeAt(c);(32<=d||9==d||10==d||13==d)&&b.push(a.charAt(c))}return b.join("")};HoverIcons=function(a){this.graph=a;this.init()};HoverIcons.prototype.arrowSpacing=2;
|
||||
HoverIcons.prototype.updateDelay=500;HoverIcons.prototype.activationDelay=140;HoverIcons.prototype.currentState=null;HoverIcons.prototype.activeArrow=null;HoverIcons.prototype.inactiveOpacity=15;HoverIcons.prototype.cssCursor="copy";HoverIcons.prototype.checkCollisions=!0;HoverIcons.prototype.arrowFill="#29b6f2";
|
||||
HoverIcons.prototype.triangleUp=mxClient.IS_SVG?Graph.createSvgImage(18,28,'<path d="m 6 26 L 12 26 L 12 12 L 18 12 L 9 1 L 1 12 L 6 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-up.png",26,14);HoverIcons.prototype.triangleRight=mxClient.IS_SVG?Graph.createSvgImage(26,18,'<path d="m 1 6 L 14 6 L 14 1 L 26 9 L 14 18 L 14 12 L 1 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-right.png",14,26);
|
||||
HoverIcons.prototype.triangleDown=mxClient.IS_SVG?Graph.createSvgImage(18,26,'<path d="m 6 1 L 6 14 L 1 14 L 9 26 L 18 14 L 12 14 L 12 1 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-down.png",26,14);HoverIcons.prototype.triangleLeft=mxClient.IS_SVG?Graph.createSvgImage(28,18,'<path d="m 1 9 L 12 1 L 12 6 L 26 6 L 26 12 L 12 12 L 12 18 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-left.png",14,26);
|
||||
HoverIcons.prototype.roundDrop=mxClient.IS_SVG?Graph.createSvgImage(26,26,'<circle cx="13" cy="13" r="12" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/round-drop.png",26,26);
|
||||
HoverIcons.prototype.refreshTarget=new mxImage(mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDQxNERDRTU1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDQxNERDRTY1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NDE0RENFMzVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NDE0RENFNDVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsvuX50AAANaSURBVHja7FjRZ1tRGD9ZJ1NCyIQSwrivI4Q8hCpjlFDyFEoYfSp9Ko1QWnmo0If+BSXkIfo0QirTMUpeGo2EPfWllFYjZMLKLDJn53d3biU337m5J223bPbxk5t7v+/c3/2+73znO8fDOWezKM/YjMpz68Lj8ejY+QTeCCwLxOS9qPxtyN+6wAeBTwJ31CCO0cJDjXBGBN4LfIepSwykTUT1bgpuib0SONIgo8KRHOtRiCFcvUcgZeGrHPNBxLIyFPyRgTGz0xLbegJCdmzpElue5KlAIMDX19d5uVzm5+fnfDAYmMA17uEZdOx2Yvb/sHlu2S0xwymn5ufneTab5b1ej08S6EAXNrDd2dnhiUTim21MvMtwQ6yiIrWwsMDPzs64rsBmf3/fvM7n89TYlUnEllSkQqEQv7q64g+Vk5MTVXosORErU0Zer5f0FEIlw2N6MxwO82QyaXql2+2SxDqdjopYWUUsqEp45IldqtWq6UWVh/1+P7+8vCTJ4QMUJSRIEXuneoH96w8PDyeWAnhSJfCqwm6NIlaklFdXV0cGhRcQ2mlJQXK5nMq2YPEZbnteU1U2lUqN/D84OGD9fl+5fgnSrFarsUwmw0qlEru4uBjTicViTk3Cr27HSnxR+Doyz0ZE1CAWiUTusbu7y9rttlZv5fP5WDQavYfIMba4uEipfhF8XtqJoZXx/uH+sC/4vPg7OljZZQbsCmLtYzc3N6zRaJhotVrmfx0xDINtbm6athYUeXpHdbBNaqZUKpWxWXV7e2vex+xaWVnhc3NzjrPUXgexyCt0m67LBV7uJMITjqRE4o8tZeg8FPpFitgapYxiOC0poFgsji1jKNo6BZZckrAGUtJsNk1vqAihCBcKhTE7hNWhqw2qFnGy5UFOUYJVIJ1OjzSE+BCEilon0URavRmBqnbbQ00AXbm+vnZc9O1tj72OnQoc2+cwygRkb2+P1et17ZoEm3g87lRmjgWZ00kbXkNuse6/Bu2wlegIxfb2tuvWGroO4bO2c4bbzUh60mxDXm1sbJhhxkQYnhS4h2fUZoRAWnf7lv8N27f8P7Xhnekjgpk+VKGOoQbsiY+hhhtF3YO7twIJ+ULvUGv+GQ2fQEvWxI/THNx5/p/BaspPAQYAqStgiSQwCDoAAAAASUVORK5CYII=":IMAGE_PATH+
|
||||
"/refresh.png",38,38);HoverIcons.prototype.tolerance=mxClient.IS_TOUCH?6:0;
|
||||
HoverIcons.prototype.init=function(){this.arrowUp=this.createArrow(this.triangleUp,mxResources.get("plusTooltip"));this.arrowRight=this.createArrow(this.triangleRight,mxResources.get("plusTooltip"));this.arrowDown=this.createArrow(this.triangleDown,mxResources.get("plusTooltip"));this.arrowLeft=this.createArrow(this.triangleLeft,mxResources.get("plusTooltip"));this.elts=[this.arrowUp,this.arrowRight,this.arrowDown,this.arrowLeft];this.repaintHandler=mxUtils.bind(this,function(){this.repaint()});this.graph.selectionModel.addListener(mxEvent.CHANGE,
|
||||
this.repaintHandler);this.graph.model.addListener(mxEvent.CHANGE,this.repaintHandler);this.graph.view.addListener(mxEvent.SCALE_AND_TRANSLATE,this.repaintHandler);this.graph.view.addListener(mxEvent.TRANSLATE,this.repaintHandler);this.graph.view.addListener(mxEvent.SCALE,this.repaintHandler);this.graph.view.addListener(mxEvent.DOWN,this.repaintHandler);this.graph.view.addListener(mxEvent.UP,this.repaintHandler);this.graph.addListener(mxEvent.ROOT,this.repaintHandler);this.graph.addListener(mxEvent.ESCAPE,
|
||||
mxUtils.bind(this,function(){this.mouseDownPoint=null}));mxEvent.addListener(this.graph.container,"mouseleave",mxUtils.bind(this,function(a){null!=a.relatedTarget&&mxEvent.getSource(a)==this.graph.container&&this.setDisplay("none")}));this.graph.addListener(mxEvent.START_EDITING,mxUtils.bind(this,function(a){this.reset()}));var a=this.graph.click;this.graph.click=mxUtils.bind(this,function(b){a.apply(this.graph,arguments);null==this.currentState||this.graph.isCellSelected(this.currentState.cell)||
|
||||
|
|
16
src/main/webapp/js/extensions.min.js
vendored
16
src/main/webapp/js/extensions.min.js
vendored
|
@ -592,7 +592,7 @@ c,b,p)}};h.prototype.sanitiseGraph=function(c){var b=c.getModel().getRoot();this
|
|||
-1==p.indexOf(mxConstants.STYLE_STROKECOLOR+"=none")||-1!=p.indexOf("image=")?!1:!0};return h}();w.mxVsdxCodec=l;l.__class="com.mxgraph.io.mxVsdxCodec"})(m.io||(m.io={}))})(c.mxgraph||(c.mxgraph={}))})(com||(com={}));
|
||||
(function(c){(function(m){(function(w){var l=function(h){function f(){var b=h.call(this)||this;b.RESPONSE_END="";b.RESPONSE_DIAGRAM_START="";b.RESPONSE_DIAGRAM_END="";b.RESPONSE_HEADER="";return b}__extends(f,h);f.prototype.decodeVssx=function(b,a,d){var g=this,p="<mxlibrary>[";this.decodeVsdx(b,function(b){p=p.concat(b);var d=g.vsdxModel.getMasterShapes(),f=function(a){var b=0;return{next:function(){return b<a.length?a[b++]:null},hasNext:function(){return b<a.length}}}(function(a){var b=[];null==
|
||||
a.entries&&(a.entries=[]);for(var d=0;d<a.entries.length;d++)b.push(a.entries[d].value);return b}(g.vsdxModel.getPages())).next();if(null!=d){var D={str:"",toString:function(){return this.str}},l=0===b.length?"":",",w=function(a){return Object.keys(a).map(function(b){return a[b]})}(d);b=function(a){a=w[a];var b=m.createMxGraph(),g=a.getMasterShape().getShape(),g=new c.mxgraph.io.vsdx.VsdxShape(f,g,!f.isEdge(g),d,null,m.vsdxModel),p=1;if(null!=a.pageSheet){var x=p=1,E=a.pageSheet.DrawingScale;null!=
|
||||
E&&(p=parseFloat(E.getAttribute("V")));E=a.pageSheet.PageScale;null!=E&&(x=parseFloat(E.getAttribute("V")));p=x/p}x=null;if(g.isVertex())for(m.edgeShapeMap.entries=[],m.parentsMap.entries=[],x=m.addShape(b,g,b.getDefaultParent(),0,1169),g=function(a){null==a.entries&&(a.entries=[]);return a.entries}(m.edgeShapeMap),E=0;E<g.length;E++){var t=g[E],z=function(a,b){null==a.entries&&(a.entries=[]);for(var d=0;d<a.entries.length;d++)if(null!=a.entries[d].key.equals&&a.entries[d].key.equals(b)||a.entries[d].key===
|
||||
E&&(p=parseFloat(E.getAttribute("V"))||1);E=a.pageSheet.PageScale;null!=E&&(x=parseFloat(E.getAttribute("V"))||1);p=x/p}x=null;if(g.isVertex())for(m.edgeShapeMap.entries=[],m.parentsMap.entries=[],x=m.addShape(b,g,b.getDefaultParent(),0,1169),g=function(a){null==a.entries&&(a.entries=[]);return a.entries}(m.edgeShapeMap),E=0;E<g.length;E++){var t=g[E],z=function(a,b){null==a.entries&&(a.entries=[]);for(var d=0;d<a.entries.length;d++)if(null!=a.entries[d].key.equals&&a.entries[d].key.equals(b)||a.entries[d].key===
|
||||
b)return a.entries[d].value;return null}(m.parentsMap,t.getKey());m.addUnconnectedEdge(b,z,t.getValue(),1169)}else x=m.addUnconnectedEdge(b,null,g,1169);if(null!=x){m.scaleGraph(b,p);g=m.normalizeGeo(x);m.sanitiseGraph(b);if(0===b.getModel().getChildCount(b.getDefaultParent()))return"continue";D.str=D.str.concat(l);D.str=D.str.concat('{"xml":"');b=h.prototype.processPage.call(m,b,null);D.str=D.str.concat(b);D.str=D.str.concat('","w":');D.str=D.str.concat(g.width);D.str=D.str.concat(',"h":');D.str=
|
||||
D.str.concat(g.height);D.str=D.str.concat(',"title":');a=a.getName();null==a&&(a="");a=JSON.stringify(mxUtils.htmlEntities(a));D.str=D.str.concat(a);D.str=D.str.concat("}");l=","}};for(var m=g,C=0;C<w.length;C++)b(C);p=p.concat(D)}p=p.concat("]</mxlibrary>");a&&a(p)},d)};f.prototype.normalizeGeo=function(b){var a=b.getGeometry();a.x=0;a.y=0;var d=a.sourcePoint;if(b.isEdge()&&null!=d){this.transPoint(a.targetPoint,d);this.transPoint(a.offset,d);b=a.points;if(null!=b)for(var g=0;g<b.length;g++)this.transPoint(b[g],
|
||||
d);this.transPoint(d,d)}return a};f.prototype.transPoint=function(b,a){null!=b&&(b.x-=a.x,b.y-=a.y)};f.prototype.processPage=function(b,a){var d=b.getModel(),g="",p="",f;for(f in d.cells){var E=d.cells[f];if(b.getDefaultParent()===d.getParent(E)){var g=g.concat(p),g=g.concat('{"xml":"'),x=this.createMxGraph();x.addCell(E);this.sanitiseGraph(x);if(0===x.getModel().getChildCount(x.getDefaultParent()))return"continue";p=this.normalizeGeo(E);x=h.prototype.processPage.call(this,x,null);g=g.concat(x);g=
|
||||
|
@ -600,8 +600,8 @@ g.concat('","w":');g=g.concat(p.width);g=g.concat(',"h":');g=g.concat(p.height);
|
|||
p.entries[t].key===x){p=p.entries[t].value;break a}p=null}null!=p&&(E=p.getName())}g=g.concat(E);g=g.concat('"}');p=","}}this.RESPONSE_DIAGRAM_START=0<g.length?",":"";return g};return f}(c.mxgraph.io.mxVsdxCodec);w.mxVssxCodec=l;l.__class="com.mxgraph.io.mxVssxCodec"})(m.io||(m.io={}))})(c.mxgraph||(c.mxgraph={}))})(com||(com={}));
|
||||
(function(c){(function(c){(function(c){(function(c){(function(c){var f=function(){function b(a,b,g){this.formulaE=this.formulaA=this.d=this.c=this.b=this.a=this.y=this.x=null;this.index=0;this.index=a;this.x=b;this.y=g}b.prototype.getX=function(){return this.x};b.prototype.getY=function(){return this.y};b.prototype.getA=function(){return this.a};b.prototype.getB=function(){return this.b};b.prototype.getC=function(){return this.c};b.prototype.getD=function(){return this.d};b.prototype.getFormulaA=
|
||||
function(){return this.formulaA};b.prototype.getFormulaE=function(){return this.formulaE};b.prototype.getIndex=function(){return this.index};return b}();c.Row=f;f.__class="com.mxgraph.io.vsdx.geometry.Row"})(c.geometry||(c.geometry={}))})(c.vsdx||(c.vsdx={}))})(c.io||(c.io={}))})(c.mxgraph||(c.mxgraph={}))})(com||(com={}));
|
||||
(function(c){(function(m){(function(m){(function(l){(function(h){var f=function(){function b(){}b.getIndex=function(a){try{return parseInt(a.getAttribute("IX"))}catch(d){return 1}};b.getDoubleVal=function(a){try{if(null!=a&&0!==a.length){var b=parseFloat(a);if(isFinite(b))return b}}catch(g){}return null};b.getRowObj=function(a,d){var g=a.getAttribute("T"),p=b.getIndex(a),f;f=(f=a.getAttribute("Del"))&&f.equals?f.equals("1"):"1"===f;if(!f){var E=null;p<=d.length&&(E=d[p-1]);var x=f=null,t=null,h=null,
|
||||
l=null,m=null,w=null,A=null;null!=E&&(f=E.x,x=E.y,t=E.getA(),h=E.getB(),l=E.getC(),m=E.getD(),A=E.getFormulaA(),w=E.getFormulaE());for(var E=c.mxgraph.io.vsdx.mxVsdxUtils.getDirectChildElements(a),F=0;F<E.length;F++){var B=E[F],Y=B.getAttribute("N"),J=B.getAttribute("V");switch(Y){case "X":f=b.getDoubleVal(J);break;case "Y":x=b.getDoubleVal(J);break;case "A":t=b.getDoubleVal(J);A=B.getAttribute("V");break;case "B":h=b.getDoubleVal(J);break;case "C":l=b.getDoubleVal(J);break;case "D":m=b.getDoubleVal(J);
|
||||
(function(c){(function(m){(function(m){(function(l){(function(h){var f=function(){function b(){}b.getIndex=function(a){try{return parseInt(a.getAttribute("IX"))||1}catch(d){return 1}};b.getDoubleVal=function(a){try{if(null!=a&&0!==a.length){var b=parseFloat(a);if(isFinite(b))return b}}catch(g){}return null};b.getRowObj=function(a,d){var g=a.getAttribute("T"),p=b.getIndex(a),f;f=(f=a.getAttribute("Del"))&&f.equals?f.equals("1"):"1"===f;if(!f){var E=null;p<=d.length&&(E=d[p-1]);var x=f=null,t=null,
|
||||
h=null,l=null,m=null,w=null,A=null;null!=E&&(f=E.x,x=E.y,t=E.getA(),h=E.getB(),l=E.getC(),m=E.getD(),A=E.getFormulaA(),w=E.getFormulaE());for(var E=c.mxgraph.io.vsdx.mxVsdxUtils.getDirectChildElements(a),F=0;F<E.length;F++){var B=E[F],Y=B.getAttribute("N"),J=B.getAttribute("V");switch(Y){case "X":f=b.getDoubleVal(J);break;case "Y":x=b.getDoubleVal(J);break;case "A":t=b.getDoubleVal(J);A=B.getAttribute("V");break;case "B":h=b.getDoubleVal(J);break;case "C":l=b.getDoubleVal(J);break;case "D":m=b.getDoubleVal(J);
|
||||
break;case "E":w=J}}switch(g){case "MoveTo":return new c.mxgraph.io.vsdx.geometry.MoveTo(p,f,x);case "LineTo":return new c.mxgraph.io.vsdx.geometry.LineTo(p,f,x);case "ArcTo":return new c.mxgraph.io.vsdx.geometry.ArcTo(p,f,x,t);case "Ellipse":return new c.mxgraph.io.vsdx.geometry.Ellipse(p,f,x,t,h,l,m);case "EllipticalArcTo":return new c.mxgraph.io.vsdx.geometry.EllipticalArcTo(p,f,x,t,h,l,m);case "InfiniteLine":return new c.mxgraph.io.vsdx.geometry.InfiniteLine(p,f,x,t,h);case "NURBSTo":return new c.mxgraph.io.vsdx.geometry.NURBSTo(p,
|
||||
f,x,t,h,l,m,w);case "PolylineTo":return new c.mxgraph.io.vsdx.geometry.PolylineTo(p,f,x,A);case "RelCubBezTo":return new c.mxgraph.io.vsdx.geometry.RelCubBezTo(p,f,x,t,h,l,m);case "RelEllipticalArcTo":return new c.mxgraph.io.vsdx.geometry.RelEllipticalArcTo(p,f,x,t,h,l,m);case "RelLineTo":return new c.mxgraph.io.vsdx.geometry.RelLineTo(p,f,x);case "RelMoveTo":return new c.mxgraph.io.vsdx.geometry.RelMoveTo(p,f,x);case "RelQuadBezTo":return new c.mxgraph.io.vsdx.geometry.RelQuadBezTo(p,f,x,t,h);case "SplineKnot":return new c.mxgraph.io.vsdx.geometry.SplineKnot(p,
|
||||
f,x,t);case "SplineStart":return new c.mxgraph.io.vsdx.geometry.SplineStart(p,f,x,t,h,l,m)}}return new c.mxgraph.io.vsdx.geometry.DelRow(p)};return b}();h.RowFactory=f;f.__class="com.mxgraph.io.vsdx.geometry.RowFactory"})(l.geometry||(l.geometry={}))})(m.vsdx||(m.vsdx={}))})(m.io||(m.io={}))})(c.mxgraph||(c.mxgraph={}))})(com||(com={}));
|
||||
|
@ -622,7 +622,7 @@ h.BULLET="Bullet";h.CASE="Case";h.CHARACTER="Character";h.COLOR="Color";h.COLOR_
|
|||
"TextBlock";h.TEXT_STYLE="TextStyle";h.TO_PART="ToPart";h.TO_SHEET="ToSheet";h.TOP_MARGIN="TopMargin";h.TRUE="1";h.TXT_ANGLE="TxtAngle";h.TXT_HEIGHT="TxtHeight";h.TXT_LOC_PIN_X="TxtLocPinX";h.TXT_LOC_PIN_Y="TxtLocPinY";h.TXT_PIN_X="TxtPinX";h.TXT_PIN_Y="TxtPinY";h.TXT_WIDTH="TxtWidth";h.TYPE="Type";h.TYPE_GROUP="Group";h.TYPE_SHAPE="Shape";h.UNIQUE_ID="UniqueID";h.VERTICAL_ALIGN="VerticalAlign";h.WIDTH="Width";h.X_CON="XCon";h.X_DYN="XDyn";h.X="X";h.Y_CON="YCon";h.Y_DYN="YDyn";h.Y="Y";h.HIDE_TEXT=
|
||||
"HideText";h.VSDX_ID="vsdxID";h.CONNECT_TO_PART_WHOLE_SHAPE=3;c.mxVsdxConstants=h;h.__class="com.mxgraph.io.vsdx.mxVsdxConstants"})(c.vsdx||(c.vsdx={}))})(c.io||(c.io={}))})(c.mxgraph||(c.mxgraph={}))})(com||(com={}));
|
||||
(function(c){(function(m){(function(m){(function(l){var h=function(){function f(b,a){this.noQuickDrag=this.noSnap=this.noShow=this.noLine=this.noFill=!1;this.rows=null;if((null!=b&&1==b.nodeType||null===b)&&(null!=a&&a instanceof Array||null===a))Array.prototype.slice.call(arguments),this.index=0,this.noQuickDrag=this.noSnap=this.noShow=this.noLine=this.noFill=!1,this.rows=null,this.index=0,this.index=this.getIndex$org_w3c_dom_Element(b),null!=a&&this.index<a.length&&this.inheritGeo(a[this.index]),
|
||||
this.processGeoElem(b);else if((null!=b&&1==b.nodeType||null===b)&&void 0===a)Array.prototype.slice.call(arguments),this.index=0,this.noQuickDrag=this.noSnap=this.noShow=this.noLine=this.noFill=!1,this.rows=null,this.index=0,this.index=this.getIndex$org_w3c_dom_Element(b),this.processGeoElem(b);else throw Error("invalid overload");}f.prototype.getIndex$org_w3c_dom_Element=function(b){try{return parseInt(b.getAttribute("IX"))}catch(a){return 0}};f.prototype.getIndex=function(b){if(null!=b&&1==b.nodeType||
|
||||
this.processGeoElem(b);else if((null!=b&&1==b.nodeType||null===b)&&void 0===a)Array.prototype.slice.call(arguments),this.index=0,this.noQuickDrag=this.noSnap=this.noShow=this.noLine=this.noFill=!1,this.rows=null,this.index=0,this.index=this.getIndex$org_w3c_dom_Element(b),this.processGeoElem(b);else throw Error("invalid overload");}f.prototype.getIndex$org_w3c_dom_Element=function(b){try{return parseInt(b.getAttribute("IX"))||0}catch(a){return 0}};f.prototype.getIndex=function(b){if(null!=b&&1==b.nodeType||
|
||||
null===b)return this.getIndex$org_w3c_dom_Element(b);if(void 0===b)return this.getIndex$();throw Error("invalid overload");};f.prototype.processGeoElem=function(b){var a=c.mxgraph.io.vsdx.mxVsdxUtils.getDirectChildNamedElements(b,"Cell");b=c.mxgraph.io.vsdx.mxVsdxUtils.getDirectChildNamedElements(b,"Row");if(null==this.rows){this.rows=[];for(var d=0;d<b.length;d++)0<this.rows.push(null)}for(d=0;d<a.length;d++){var g=a[d],p=g.getAttribute("N"),g=g.getAttribute("V");switch(p){case "NoFill":this.noFill=
|
||||
function(a,b){return a&&a.equals?a.equals(b):a===b}("1",g);break;case "NoLine":this.noLine=function(a,b){return a&&a.equals?a.equals(b):a===b}("1",g);break;case "NoShow":this.noShow=function(a,b){return a&&a.equals?a.equals(b):a===b}("1",g);break;case "NoSnap":this.noSnap=function(a,b){return a&&a.equals?a.equals(b):a===b}("1",g);break;case "NoQuickDrag":this.noQuickDrag=function(a,b){return a&&a.equals?a.equals(b):a===b}("1",g)}}a=this.rows.length;d=!1;for(p=0;p<b.length;p++)g=c.mxgraph.io.vsdx.geometry.RowFactory.getRowObj(b[p],
|
||||
this.rows),g.getIndex()>a?(0<this.rows.push(g),d=!0):this.rows[g.getIndex()-1]=g;d&&function(a,b){b.compare?a.sort(function(a,d){return b.compare(a,d)}):a.sort(b)}(this.rows,new f.mxVsdxGeometry$0(this))};f.prototype.inheritGeo=function(b){this.noFill=b.noFill;this.noLine=b.noLine;this.noShow=b.noShow;this.noSnap=b.noSnap;this.noQuickDrag=b.noQuickDrag;var a=this.rows=[];a.push.apply(a,b.rows)};f.prototype.getIndex$=function(){return this.index};f.prototype.isNoFill=function(){return this.noFill};
|
||||
|
@ -877,7 +877,7 @@ this.geomListProcessed=!0}};b.prototype.parseShapeElem=function(a,d){f.prototype
|
|||
a.equals?a.equals(b):a===b}(h,"Enhanced Metafile")||function(a,b){return a&&a.equals?a.equals(b):a===b}(h,"EnhMetaFile"))g="png";else return;h=a.firstChild;if(null!=h){if(null!=h&&1==h.nodeType){var l=h;if(function(a,b){return a&&a.equals?a.equals(b):a===b}(l.nodeName.toLowerCase(),"rel")&&(l=l.getAttribute("r:id"),null!=l&&0!==l.length)){var h=p.lastIndexOf("/"),m="",t="";try{m=p.substring(0,h),t=p.substring(h,p.length)}catch(z){return}h=d.getRelationship(l,m+"/_rels"+t+".rels");if(null!=h){p=h.getAttribute("Target")||
|
||||
"";l=h.getAttribute("Type");h=p.lastIndexOf("/");try{p=p.substring(h+1,p.length)}catch(z){return}null!=l&&function(a,b){var d=a.length-b.length,g=a.indexOf(b,d);return-1!==g&&g===d}(l,"image")&&(this.imageData={},(h=d.getMedia(c.mxgraph.io.mxVsdxCodec.vsdxPlaceholder+"/media/"+p))?(this.imageData.iData=h,function(a,b){var d=a.length-b.length,g=a.indexOf(b,d);return-1!==g&&g===d}(p.toLowerCase(),".bmp")&&(g="jpg"),this.imageData.iType=g):(this.imageData.iData=b.ERROR_IMAGE,this.imageData.iType="svg+xml"))}return}}h=
|
||||
h.nextSibling}}else(function(a,b){return a&&a.equals?a.equals(b):a===b})(g,c.mxgraph.io.vsdx.mxVsdxConstants.TEXT)&&(this.text=a)};b.prototype.parseSection=function(a){var d=a.getAttribute("N");if(function(a,b){return a&&a.equals?a.equals(b):a===b}(d,"Geometry"))null==this.geom&&(this.geom=[]),0<this.geom.push(a);else if(function(a,b){return a&&a.equals?a.equals(b):a===b}(d,"Field")){a=c.mxgraph.io.vsdx.mxVsdxUtils.getDirectChildNamedElements(a,"Row");for(var g=0;g<a.length;g++){var d=a[g],p=d.getAttribute("IX")||
|
||||
"";if(0!==p.length)if(null==this.fields&&(this.fields={}),function(a,b){return a&&a.equals?a.equals(b):a===b}("1",d.getAttribute("Del")))this.fields[p]="";else{for(var h=c.mxgraph.io.vsdx.mxVsdxUtils.getDirectChildNamedElements(d,"Cell"),l="",m="",t=0;t<h.length;t++){var z=h[t],d=z.getAttribute("N"),z=z.getAttribute("V");switch(d){case "Value":l=z;break;case "Format":m=z}}if(0!==l.length){try{(function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b})(m,"{{")&&(l=(new Date(b.VSDX_START_TIME+
|
||||
"";if(0!==p.length)if(null==this.fields&&(this.fields={}),function(a,b){return a&&a.equals?a.equals(b):a===b}("1",d.getAttribute("Del")))this.fields[p]="";else{for(var h=c.mxgraph.io.vsdx.mxVsdxUtils.getDirectChildNamedElements(d,"Cell"),l="",m="",t=0;t<h.length;t++){var z=h[t],d=z.getAttribute("N"),z=z.getAttribute("V")||z.textContent||"";switch(d){case "Value":l=z;break;case "Format":m=z}}if(0!==l.length){try{(function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b})(m,"{{")&&(l=(new Date(b.VSDX_START_TIME+
|
||||
Math.floor(864E5*parseFloat(l)))).toString())}catch(aa){}this.fields[p]=l}}}}else f.prototype.parseSection.call(this,a)};b.prototype.parseGeom=function(){return this.hasGeomList()?this.geomList.getShapeXML(this):""};b.prototype.getText=function(){return null!=this.text?this.text.textContent:null};b.prototype.getTextChildren=function(){return null!=this.text?this.text.childNodes:null};b.prototype.getWidth=function(){return 0===this.width&&0<this.height?1:this.width};b.prototype.getHeight=function(){return 0===
|
||||
this.height&&0<this.width?1:this.height};b.prototype.getRotation=function(){return this.rotation};b.prototype.getStyleMap=function(){return this.styleMap};b.prototype.hasGeom=function(){return!(null==this.geom||0==this.geom.length)};b.prototype.hasGeomList=function(){return null!=this.geomList&&this.geomList.hasGeom()};b.prototype.textToList=function(a,b){if(!function(a,b){return a&&a.equals?a.equals(b):a===b}(b,"")){var d=this.getBullet(b);if(!function(a,b){return a&&a.equals?a.equals(b):a===b}(d,
|
||||
"0")){var f=a.split("\n");f[f.length-1]||f.pop();for(var h="",l=0;l<f.length;l++)h+=c.mxgraph.io.vsdx.mxVsdxUtils.surroundByTags(f[l],"li");h=c.mxgraph.io.vsdx.mxVsdxUtils.surroundByTags(h,"ul");f={};(function(a,b){return a&&a.equals?a.equals(b):a===b})(d,"4")?f["list-style-type"]="square":f["list-style-type"]="disc";return h=this.insertAttributes(h,f)}}return a};b.prototype.getTextParagraphFormated=function(a){var b="",g={};g.align=this.getHorizontalAlign(this.pp,!0);g["margin-left"]=this.getIndentLeft(this.pp);
|
||||
|
@ -967,7 +967,7 @@ b.prototype.getMasterName=function(){return this.shapeName};b.prototype.setLabel
|
|||
if(function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(d,"Organizational unit")||function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(f,"Organizational unit")){var h=this.shape.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.CONTROL).item(0),d=null,d="0.0",f=null,f="-0.4";null!=h&&(d=h.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.X).item(0),d=d.hasAttribute("F")?d.getAttribute("F"):d.textContent,f=h.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.Y).item(0),
|
||||
f=f.hasAttribute("F")?f.getAttribute("F"):f.textContent);h=a.getGeometry();d=d.split("Width/2+").join("");d=d.split("DL").join("");f=f.split("Height*").join("");(function(a,b){return a&&a.equals?a.equals(b):a===b})(d,"Inh")&&(d="0.0");(function(a,b){return a&&a.equals?a.equals(b):a===b})(f,"Inh")&&(f="-0.4");-1!=f.indexOf("txtHeight")&&(f="-0.4");for(var l=b.split(";"),m="",t=0;t<l.length;t++){var z=l[t],z=z.trim();(function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b})(z,"tabHeight=")&&
|
||||
(m=z.split("tabHeight=").join(""))}(function(a,b){return a&&a.equals?a.equals(b):a===b})(m,"")&&(m="20");l=parseFloat(m);d=parseFloat(d);f=parseFloat(f);m=h.height;d=.1*h.width+100*d;d=new mxPoint(d,m-m*f-l/2);a.getGeometry().offset=d}else if(function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(d,"Domain 3D")||function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(f,"Domain 3D")){h=this.shape.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.CONTROL).item(0);d=null;
|
||||
d="0.0";f=null;f="-0.4";null!=h&&(d=h.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.X).item(0),d=d.getAttribute("F"),f=h.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.Y).item(0),f=f.getAttribute("F"));h=a.getGeometry();d=d.split("Width/2+").join("");d=d.split("DL").join("");f=f.split("Height*").join("");if(function(a,b){return a&&a.equals?a.equals(b):a===b}(d,"Inh")||function(a,b){return a&&a.equals?a.equals(b):a===b}(d,""))d="0.0";if(function(a,b){return a&&a.equals?a.equals(b):
|
||||
d="0.0";f=null;f="-0.4";null!=h&&(d=h.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.X).item(0),d=d.getAttribute("F")||"",f=h.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.Y).item(0),f=f.getAttribute("F")||"");h=a.getGeometry();d=d.split("Width/2+").join("");d=d.split("DL").join("");f=f.split("Height*").join("");if(function(a,b){return a&&a.equals?a.equals(b):a===b}(d,"Inh")||function(a,b){return a&&a.equals?a.equals(b):a===b}(d,""))d="0.0";if(function(a,b){return a&&a.equals?a.equals(b):
|
||||
a===b}(f,"Inh")||function(a,b){return a&&a.equals?a.equals(b):a===b}(f,""))f="-0.4";-1!=f.indexOf("txtHeight")&&(f="-0.4");d=parseFloat(d);f=parseFloat(f);m=h.height;d=.1*h.width+100*d;d=new mxPoint(d,m-m*f);a.getGeometry().offset=d}};b.prototype.getForm=function(){var a={};if(this.isVertex())try{var d=b.getType(this.getShape());this.styleDebug("shape type = "+d);if(null!=this.imageData||function(a,b){return a&&a.equals?a.equals(b):a===b}(c.mxgraph.io.vsdx.mxVsdxConstants.FOREIGN,d)&&null!=this.masterShape&&
|
||||
null!=this.masterShape.imageData){var f=null!=this.imageData?this.imageData:this.masterShape.imageData;a.shape="image";a.aspect="fixed";var h=function(a,b){return a[b]?a[b]:null}(f,"iType"),l=function(a,b){return a[b]?a[b]:null}(f,"iData");a.image="data:image/"+h+","+l;return a}var m=this.parseGeom();if(function(a,b){return a&&a.equals?a.equals(b):a===b}(m,""))return this.styleDebug("No geom found"),a;var x=Graph.prototype.compress(m);a[mxConstants.STYLE_SHAPE]="stencil("+x+")"}catch(t){console.error(t.message,
|
||||
t)}else return this.getEdgeStyle();return a};b.prototype.isOff_page_reference=function(){var a=this.getNameU();return function(a,b){return a&&a.equals?a.equals(b):a===b}(a,"Off-page reference")||function(a,b){return a&&a.equals?a.equals(b):a===b}(a,"Lined/Shaded process")?!0:!1};b.prototype.isExternal_process=function(){var a;a=(a=this.shapeName)&&a.equals?a.equals("External process"):"External process"===a;return a};b.prototype.getDirection=function(a){a=mxResources.get("mxOffset"+this.shapeName);
|
||||
|
@ -979,8 +979,8 @@ a===b}(f.toLowerCase(),"width*1")&&function(a,b){return a&&a.equals?a.equals(b):
|
|||
b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(a.toLowerCase(),"controls.row_")||function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(b.toLowerCase(),"controls.row_"))?!1:!0};b.prototype.isRotatedLabel=function(){var a=this.getAttribute(c.mxgraph.io.vsdx.mxVsdxConstants.TXT_ANGLE,"V","");null!=this.masterShape&&function(a,b){return a&&a.equals?a.equals(b):a===b}(a,"")&&(a=this.masterShape.getAttribute(c.mxgraph.io.vsdx.mxVsdxConstants.TXT_ANGLE,"V",""));return function(a,b){return a&&
|
||||
a.equals?a.equals(b):a===b}(a,"0")||function(a,b){return a&&a.equals?a.equals(b):a===b}(a,"0.0")||function(a,b){return a&&a.equals?a.equals(b):a===b}(a,"")?!1:!0};b.prototype.setRootShape=function(a){this.rootShape=a};b.prototype.getRootShape=function(){return this.rootShape};b.prototype.getStartXY=function(a){var b=Math.floor(Math.round(100*this.getScreenNumericalValue$org_w3c_dom_Element$double(this.getCellElement$java_lang_String(c.mxgraph.io.vsdx.mxVsdxConstants.BEGIN_X),0))/100);a=Math.floor(Math.round(100*
|
||||
(a-this.getScreenNumericalValue$org_w3c_dom_Element$double(this.getCellElement$java_lang_String(c.mxgraph.io.vsdx.mxVsdxConstants.BEGIN_Y),0)))/100);return new mxPoint(b,a)};b.prototype.getEndXY=function(a){var b=Math.floor(Math.round(100*this.getScreenNumericalValue$org_w3c_dom_Element$double(this.getCellElement$java_lang_String(c.mxgraph.io.vsdx.mxVsdxConstants.END_X),0))/100);a=Math.floor(Math.round(100*(a-this.getScreenNumericalValue$org_w3c_dom_Element$double(this.getCellElement$java_lang_String(c.mxgraph.io.vsdx.mxVsdxConstants.END_Y),
|
||||
0)))/100);return new mxPoint(b,a)};b.prototype.getRoutingPoints=function(a,b,c){return null!=this.geomList?this.geomList.getRoutingPoints(a,b,c):null};b.prototype.getControlPoints=function(a){var b=this.getStartXY(a);a=this.getEndXY(a);var f=[];if(null!=this.shape){var h=this.shape.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.GEOM);if(0<h.length&&(h=h.item(0).getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.NURBS_TO).item(0).getElementsByTagName("E").item(0),null!=h)){for(var h=h.getAttribute("F"),
|
||||
h=h.replace(RegExp("NURBS\\(","g"),""),h=h.replace(RegExp("\\)","g"),""),h=h.replace(RegExp(",","g")," "),h=h.replace(RegExp("\\s\\s","g")," "),h=h.split(" "),l=h.length,m=[];0<l--;)m.push(0);for(l=0;l<h.length;l++)m[l]=parseFloat(h[l]);for(l=2;l+4<h.length;l+=4){var x=new mxPoint,t=m[l+3];x.x=Math.floor(Math.round(100*(b.x+Math.min(100,Math.abs(a.x-b.x))*m[l+2]))/100);x.y=Math.floor(Math.round(100*(b.y-100*t))/100);0<f.push(x)}return f}}return null};b.prototype.getStyleFromEdgeShape=function(a){this.styleMap[c.mxgraph.io.vsdx.mxVsdxConstants.VSDX_ID]=
|
||||
0)))/100);return new mxPoint(b,a)};b.prototype.getRoutingPoints=function(a,b,c){return null!=this.geomList?this.geomList.getRoutingPoints(a,b,c):null};b.prototype.getControlPoints=function(a){var b=this.getStartXY(a);a=this.getEndXY(a);var f=[];if(null!=this.shape){var h=this.shape.getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.GEOM);if(0<h.length&&(h=h.item(0).getElementsByTagName(c.mxgraph.io.vsdx.mxVsdxConstants.NURBS_TO).item(0).getElementsByTagName("E").item(0),null!=h)){for(var h=h.getAttribute("F")||
|
||||
"",h=h.replace(RegExp("NURBS\\(","g"),""),h=h.replace(RegExp("\\)","g"),""),h=h.replace(RegExp(",","g")," "),h=h.replace(RegExp("\\s\\s","g")," "),h=h.split(" "),l=h.length,m=[];0<l--;)m.push(0);for(l=0;l<h.length;l++)m[l]=parseFloat(h[l]);for(l=2;l+4<h.length;l+=4){var x=new mxPoint,t=m[l+3];x.x=Math.floor(Math.round(100*(b.x+Math.min(100,Math.abs(a.x-b.x))*m[l+2]))/100);x.y=Math.floor(Math.round(100*(b.y-100*t))/100);0<f.push(x)}return f}}return null};b.prototype.getStyleFromEdgeShape=function(a){this.styleMap[c.mxgraph.io.vsdx.mxVsdxConstants.VSDX_ID]=
|
||||
this.getId().toString();a=this.getForm();if(null!=a&&!function(a,b){return a&&a.equals?a.equals(b):a===b}(a,""))for(var d in a)this.styleMap[d]=a[d];this.isDashed()&&(this.styleMap[mxConstants.STYLE_DASHED]="1",d=this.getDashPattern(),null!=d&&(this.styleMap[mxConstants.STYLE_DASH_PATTERN]=d));d=this.getEdgeMarker(!0);null!=d&&(function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(d,b.ARROW_NO_FILL_MARKER)&&(d=d.substring(b.ARROW_NO_FILL_MARKER.length),this.styleMap[mxConstants.STYLE_STARTFILL]=
|
||||
"0"),this.styleMap[mxConstants.STYLE_STARTARROW]=d);d=this.getEdgeMarker(!1);null!=d&&(function(a,b,d){void 0===d&&(d=0);return a.substr(d,b.length)===b}(d,b.ARROW_NO_FILL_MARKER)&&(d=d.substring(b.ARROW_NO_FILL_MARKER.length),this.styleMap[mxConstants.STYLE_ENDFILL]="0"),this.styleMap[mxConstants.STYLE_ENDARROW]=d);d=Math.round(this.getStartArrowSize())|0;6!==d&&(this.styleMap[mxConstants.STYLE_STARTSIZE]=""+d);d=Math.round(this.getFinalArrowSize())|0;6!==d&&(this.styleMap[mxConstants.STYLE_ENDSIZE]=
|
||||
""+d);d=Math.round(this.getLineWidth())|0;1!==d&&(this.styleMap[mxConstants.STYLE_STROKEWIDTH]=""+d);d=this.getStrokeColor();(function(a,b){return a&&a.equals?a.equals(b):a===b})(d,"")||(this.styleMap[mxConstants.STYLE_STROKECOLOR]=d);this.isShadow()&&(this.styleMap[mxConstants.STYLE_SHADOW]=c.mxgraph.io.vsdx.mxVsdxConstants.TRUE);this.isConnectorBigNameU(this.getNameU())&&(this.styleMap[mxConstants.STYLE_SHAPE]=mxConstants.SHAPE_ARROW,d=this.getFillColor(),function(a,b){return a&&a.equals?a.equals(b):
|
||||
|
|
|
@ -773,14 +773,8 @@ var EditDiagramDialog = function(editorUi)
|
|||
|
||||
if (select.value == 'new')
|
||||
{
|
||||
window.openFile = new OpenFile(function()
|
||||
{
|
||||
editorUi.hideDialog();
|
||||
window.openFile = null;
|
||||
});
|
||||
|
||||
window.openFile.setData(data, null);
|
||||
editorUi.editor.graph.openLink(editorUi.getUrl());
|
||||
editorUi.hideDialog();
|
||||
editorUi.editor.editAsNew(data);
|
||||
}
|
||||
else if (select.value == 'replace')
|
||||
{
|
||||
|
|
|
@ -2924,6 +2924,14 @@ Graph.prototype.bytesToString = function(arr)
|
|||
return result.join('');
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns a base64 encoded version of the compressed outer XML of the given node.
|
||||
*/
|
||||
Graph.prototype.compressNode = function(node)
|
||||
{
|
||||
return this.compress(this.zapGremlins(mxUtils.getXml(node)));
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns a base64 encoded version of the compressed string.
|
||||
*/
|
||||
|
@ -4797,6 +4805,10 @@ if (typeof mxVertexHandler != 'undefined')
|
|||
// Mapping for multiple calls to cloneCells with the same set of cells
|
||||
var mapping = new Object();
|
||||
|
||||
// Populates the mapping to fix lookups for forward refs from edges
|
||||
// to cells in parents that are cloned later in the loop below
|
||||
// this.cloneCells([model.root], this.isCloneInvalidEdges(), mapping);
|
||||
|
||||
for (var i = 0; i < childCount; i++)
|
||||
{
|
||||
var parent = model.getChildAt(model.getRoot(), i);
|
||||
|
|
23
src/main/webapp/js/reader.min.js
vendored
23
src/main/webapp/js/reader.min.js
vendored
|
@ -22,8 +22,8 @@ position:{cssPropBits:0,cssLitGroup:[a[23]],cssFns:[]},quotes:{cssPropBits:8,css
|
|||
cssLitGroup:[a[14],a[69]],cssFns:[]},stress:"border-bottom-left-radius","table-layout":{cssPropBits:0,cssLitGroup:[a[52],a[61]],cssFns:[]},"text-align":{cssPropBits:0,cssLitGroup:[a[42],a[56],a[66]],cssFns:[]},"text-decoration":{cssPropBits:0,cssLitGroup:[a[19],a[71]],cssFns:[]},"text-indent":"border-bottom-left-radius","text-overflow":{cssPropBits:8,cssLitGroup:[a[33]],cssFns:[]},"text-shadow":"box-shadow","text-transform":{cssPropBits:0,cssLitGroup:[a[26],a[71]],cssFns:[]},"text-wrap":{cssPropBits:0,
|
||||
cssLitGroup:[a[46],a[71],a[72]],cssFns:[]},top:"bottom",transform:{cssPropBits:0,cssLitGroup:[a[71]],cssFns:"matrix() perspective() rotate() rotate3d() rotatex() rotatey() rotatez() scale() scale3d() scalex() scaley() scalez() skew() skewx() skewy() translate() translate3d() translatex() translatey() translatez()".split(" ")},"transform-origin":"perspective-origin","transform-style":{cssPropBits:0,cssLitGroup:[a[37]],cssFns:[]},transition:{cssPropBits:1029,cssLitGroup:[a[10],a[48],a[50],a[71]],cssFns:["cubic-bezier()",
|
||||
"steps()"]},"transition-delay":"animation-delay","transition-duration":"animation-delay","transition-property":{cssPropBits:1024,cssLitGroup:[a[48],a[50]],cssFns:[]},"transition-timing-function":"animation-timing-function","unicode-bidi":{cssPropBits:0,cssLitGroup:[a[30],a[72]],cssFns:[]},"vertical-align":{cssPropBits:5,cssLitGroup:[a[12],a[31]],cssFns:[]},visibility:"backface-visibility","voice-family":{cssPropBits:8,cssLitGroup:[a[27],a[48]],cssFns:[]},volume:{cssPropBits:1,cssLitGroup:[a[17],a[69]],
|
||||
cssFns:[]},"white-space":{cssPropBits:0,cssLitGroup:[a[22],a[72]],cssFns:[]},width:"min-height","word-break":{cssPropBits:0,cssLitGroup:[a[32],a[72]],cssFns:[]},"word-spacing":"letter-spacing","word-wrap":"overflow-wrap","z-index":"bottom",zoom:"line-height","cubic-bezier()":"animation-delay","steps()":{cssPropBits:5,cssLitGroup:[a[36],a[48]],cssFns:[]},"image()":{cssPropBits:18,cssLitGroup:[a[0],a[48]],cssFns:["rgb()","rgba()"]},"linear-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[31],a[42],a[48],
|
||||
a[79]],cssFns:["rgb()","rgba()"]},"radial-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[11],a[31],a[42],a[48],a[56],a[57]],cssFns:["rgb()","rgba()"]},"repeating-linear-gradient()":"linear-gradient()","repeating-radial-gradient()":"radial-gradient()","rgb()":{cssPropBits:1,cssLitGroup:[a[48]],cssFns:[]},"rgba()":"rgb()","rect()":{cssPropBits:5,cssLitGroup:[a[48],a[52]],cssFns:[]},"alpha()":{cssPropBits:1,cssLitGroup:[a[28]],cssFns:[]},"matrix()":"animation-delay","perspective()":"border-bottom-left-radius",
|
||||
cssFns:[]},"white-space":{cssPropBits:0,cssLitGroup:[a[22],a[72]],cssFns:[]},width:"min-height","word-break":{cssPropBits:0,cssLitGroup:[a[32],a[72],a[55]],cssFns:[]},"word-spacing":"letter-spacing","word-wrap":"overflow-wrap","z-index":"bottom",zoom:"line-height","cubic-bezier()":"animation-delay","steps()":{cssPropBits:5,cssLitGroup:[a[36],a[48]],cssFns:[]},"image()":{cssPropBits:18,cssLitGroup:[a[0],a[48]],cssFns:["rgb()","rgba()"]},"linear-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[31],a[42],
|
||||
a[48],a[79]],cssFns:["rgb()","rgba()"]},"radial-gradient()":{cssPropBits:7,cssLitGroup:[a[0],a[11],a[31],a[42],a[48],a[56],a[57]],cssFns:["rgb()","rgba()"]},"repeating-linear-gradient()":"linear-gradient()","repeating-radial-gradient()":"radial-gradient()","rgb()":{cssPropBits:1,cssLitGroup:[a[48]],cssFns:[]},"rgba()":"rgb()","rect()":{cssPropBits:5,cssLitGroup:[a[48],a[52]],cssFns:[]},"alpha()":{cssPropBits:1,cssLitGroup:[a[28]],cssFns:[]},"matrix()":"animation-delay","perspective()":"border-bottom-left-radius",
|
||||
"rotate()":"border-bottom-left-radius","rotate3d()":"animation-delay","rotatex()":"border-bottom-left-radius","rotatey()":"border-bottom-left-radius","rotatez()":"border-bottom-left-radius","scale()":"animation-delay","scale3d()":"animation-delay","scalex()":"border-bottom-left-radius","scaley()":"border-bottom-left-radius","scalez()":"border-bottom-left-radius","skew()":"animation-delay","skewx()":"border-bottom-left-radius","skewy()":"border-bottom-left-radius","translate()":"animation-delay","translate3d()":"animation-delay",
|
||||
"translatex()":"border-bottom-left-radius","translatey()":"border-bottom-left-radius","translatez()":"border-bottom-left-radius"},c;for(c in b)"string"===typeof b[c]&&Object.hasOwnProperty.call(b,c)&&(b[c]=b[b[c]]);"undefined"!==typeof window&&(window.cssSchema=b);var d,e;(function(){function a(a){var b=parseInt(a.substring(1),16);return 65535<b?(b-=65536,String.fromCharCode(55296+(b>>10),56320+(b&1023))):b==b?String.fromCharCode(b):" ">a[1]?"":a[1]}function b(a,b){return'"'+a.replace(/[\u0000-\u001f\\\"<>]/g,
|
||||
b)+'"'}function c(a){return g[a]||(g[a]="\\"+a.charCodeAt(0).toString(16)+" ")}function f(a){return h[a]||(h[a]=("">a?"%0":"%")+a.charCodeAt(0).toString(16))}var g={"\\":"\\\\"},h={"\\":"%5c"},k=RegExp("\\uFEFF|U[+][0-9A-F?]{1,6}(?:-[0-9A-F]{1,6})?|url[(][\\t\\n\\f ]*(?:\"(?:'|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*\"|'(?:\"|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*'|(?:[\\t\\x21\\x23-\\x26\\x28-\\x5b\\x5d-\\x7e]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*)[\\t\\n\\f ]*[)]|(?!url[(])-?(?:[a-zA-Z_]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))(?:[a-zA-Z0-9_-]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*[(]|(?:@?-?(?:[a-zA-Z_]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))|#)(?:[a-zA-Z0-9_-]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*|\"(?:'|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*\"|'(?:\"|[^'\"\\n\\f\\\\]|\\\\[\\s\\S])*'|[-+]?(?:[0-9]+(?:[.][0-9]+)?|[.][0-9]+)(?:%|-?(?:[a-zA-Z_]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))(?:[a-zA-Z0-9_-]|[\\u0080-\\ud7ff\\ue000-\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]|\\\\(?:[0-9a-fA-F]{1,6}[\\t\\n\\f ]?|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|[\\ud800-\\udbff][\\udc00-\\udfff]))*)?|\x3c!--|--\x3e|[\\t\\n\\f ]+|/(?:[*][^*]*[*]+(?:[^/][^*]*[*]+)*/|/[^\\n\\f]*)|[~|^$*]=|[^\"'\\\\/]|/(?![/*])",
|
||||
|
@ -184,7 +184,7 @@ f)+"\n"+t+"}":"{"+z.join(",")+"}";f=t;return l}}"function"!==typeof Date.prototy
|
|||
e=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,f,g,h={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},k;"function"!==typeof JSON.stringify&&(JSON.stringify=function(a,b,d){var e;g=f="";if("number"===typeof d)for(e=0;e<d;e+=1)g+=" ";else"string"===typeof d&&(g=d);if((k=b)&&"function"!==typeof b&&("object"!==typeof b||"number"!==typeof b.length))throw Error("JSON.stringify");return c("",{"":a})});
|
||||
"function"!==typeof JSON.parse&&(JSON.parse=function(a,b){function c(a,d){var e,f,g=a[d];if(g&&"object"===typeof g)for(e in g)Object.prototype.hasOwnProperty.call(g,e)&&(f=c(g,e),void 0!==f?g[e]=f:delete g[e]);return b.call(a,d,g)}var e;a=""+a;d.lastIndex=0;d.test(a)&&(a=a.replace(d,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
|
||||
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),"function"===typeof b?c({"":e},""):e;throw new SyntaxError("JSON.parse");})})();"undefined"===typeof window.mxBasePath&&(window.mxBasePath="https://www.draw.io/mxgraph/");window.mxLoadStylesheets=window.mxLoadStylesheets||!1;window.mxLoadResources=window.mxLoadResources||!1;window.mxLanguage=window.mxLanguage||"en";window.urlParams=window.urlParams||{};window.MAX_REQUEST_SIZE=window.MAX_REQUEST_SIZE||10485760;window.MAX_AREA=window.MAX_AREA||225E6;window.EXPORT_URL=window.EXPORT_URL||"/export";window.SAVE_URL=window.SAVE_URL||"/save";window.OPEN_URL=window.OPEN_URL||"/open";window.RESOURCES_PATH=window.RESOURCES_PATH||"resources";window.RESOURCE_BASE=window.RESOURCE_BASE||window.RESOURCES_PATH+"/grapheditor";window.STENCIL_PATH=window.STENCIL_PATH||"stencils";window.IMAGE_PATH=window.IMAGE_PATH||"images";
|
||||
window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"9.3.1",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
|
||||
window.STYLE_PATH=window.STYLE_PATH||"styles";window.CSS_PATH=window.CSS_PATH||"styles";window.OPEN_FORM=window.OPEN_FORM||"open.html";window.mxBasePath=window.mxBasePath||"../../../src";window.mxLanguage=window.mxLanguage||urlParams.lang;window.mxLanguages=window.mxLanguages||["de"];var mxClient={VERSION:"9.3.4",IS_IE:0<=navigator.userAgent.indexOf("MSIE"),IS_IE6:0<=navigator.userAgent.indexOf("MSIE 6"),IS_IE11:!!navigator.userAgent.match(/Trident\/7\./),IS_EDGE:!!navigator.userAgent.match(/Edge\//),IS_QUIRKS:0<=navigator.userAgent.indexOf("MSIE")&&(null==document.documentMode||5==document.documentMode),IS_EM:"spellcheck"in document.createElement("textarea")&&8==document.documentMode,VML_PREFIX:"v",OFFICE_PREFIX:"o",IS_NS:0<=navigator.userAgent.indexOf("Mozilla/")&&0>navigator.userAgent.indexOf("MSIE")&&
|
||||
0>navigator.userAgent.indexOf("Edge/"),IS_OP:0<=navigator.userAgent.indexOf("Opera/")||0<=navigator.userAgent.indexOf("OPR/"),IS_OT:0<=navigator.userAgent.indexOf("Presto/")&&0>navigator.userAgent.indexOf("Presto/2.4.")&&0>navigator.userAgent.indexOf("Presto/2.3.")&&0>navigator.userAgent.indexOf("Presto/2.2.")&&0>navigator.userAgent.indexOf("Presto/2.1.")&&0>navigator.userAgent.indexOf("Presto/2.0.")&&0>navigator.userAgent.indexOf("Presto/1."),IS_SF:0<=navigator.userAgent.indexOf("AppleWebKit/")&&
|
||||
0>navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_IOS:navigator.userAgent.match(/(iPad|iPhone|iPod)/g)?!0:!1,IS_GC:0<=navigator.userAgent.indexOf("Chrome/")&&0>navigator.userAgent.indexOf("Edge/"),IS_CHROMEAPP:null!=window.chrome&&null!=chrome.app&&null!=chrome.app.runtime,IS_FF:0<=navigator.userAgent.indexOf("Firefox/"),IS_MT:0<=navigator.userAgent.indexOf("Firefox/")&&0>navigator.userAgent.indexOf("Firefox/1.")&&0>navigator.userAgent.indexOf("Firefox/2.")||0<=navigator.userAgent.indexOf("Iceweasel/")&&
|
||||
0>navigator.userAgent.indexOf("Iceweasel/1.")&&0>navigator.userAgent.indexOf("Iceweasel/2.")||0<=navigator.userAgent.indexOf("SeaMonkey/")&&0>navigator.userAgent.indexOf("SeaMonkey/1.")||0<=navigator.userAgent.indexOf("Iceape/")&&0>navigator.userAgent.indexOf("Iceape/1."),IS_SVG:0<=navigator.userAgent.indexOf("Firefox/")||0<=navigator.userAgent.indexOf("Iceweasel/")||0<=navigator.userAgent.indexOf("Seamonkey/")||0<=navigator.userAgent.indexOf("Iceape/")||0<=navigator.userAgent.indexOf("Galeon/")||
|
||||
|
@ -615,7 +615,7 @@ mxSwimlane.prototype.paintDivider=function(a,b,c,d,e,f,g){g||a.setShadow(!1);a.b
|
|||
mxSwimlane.prototype.getImageBounds=function(a,b,c,d){return this.isHorizontal()?new mxRectangle(a+c-this.imageSize,b,this.imageSize,this.imageSize):new mxRectangle(a,b,this.imageSize,this.imageSize)};function mxGraphLayout(a){this.graph=a}mxGraphLayout.prototype.graph=null;mxGraphLayout.prototype.useBoundingBox=!0;mxGraphLayout.prototype.parent=null;mxGraphLayout.prototype.moveCell=function(a,b,c){};mxGraphLayout.prototype.execute=function(a){};mxGraphLayout.prototype.getGraph=function(){return this.graph};
|
||||
mxGraphLayout.prototype.getConstraint=function(a,b,c,d){c=this.graph.view.getState(b);b=null!=c?c.style:this.graph.getCellStyle(b);return null!=b?b[a]:null};
|
||||
mxGraphLayout.traverse=function(a,b,c,d,e){if(null!=c&&null!=a&&(b=null!=b?b:!0,e=e||new mxDictionary,!e.get(a)&&(e.put(a,!0),d=c(a,d),null==d||d))&&(d=this.graph.model.getEdgeCount(a),0<d))for(var f=0;f<d;f++){var g=this.graph.model.getEdgeAt(a,f),h=this.graph.model.getTerminal(g,!0)==a;if(!b||h)h=this.graph.view.getVisibleTerminal(g,!h),this.traverse(h,b,c,g,e)}};
|
||||
mxGraphLayout.prototype.isAncestor=function(a,b,c){if(!c)return this.graph.model.getParent(cell)==a;if(b==a)return!1;for(;null!=b&&b!=a;)b=this.graph.model.getParent(b);return b==a};mxGraphLayout.prototype.isVertexMovable=function(a){return this.graph.isCellMovable(a)};mxGraphLayout.prototype.isVertexIgnored=function(a){return!this.graph.getModel().isVertex(a)||!this.graph.isCellVisible(a)};
|
||||
mxGraphLayout.prototype.isAncestor=function(a,b,c){if(!c)return this.graph.model.getParent(b)==a;if(b==a)return!1;for(;null!=b&&b!=a;)b=this.graph.model.getParent(b);return b==a};mxGraphLayout.prototype.isVertexMovable=function(a){return this.graph.isCellMovable(a)};mxGraphLayout.prototype.isVertexIgnored=function(a){return!this.graph.getModel().isVertex(a)||!this.graph.isCellVisible(a)};
|
||||
mxGraphLayout.prototype.isEdgeIgnored=function(a){var b=this.graph.getModel();return!b.isEdge(a)||!this.graph.isCellVisible(a)||null==b.getTerminal(a,!0)||null==b.getTerminal(a,!1)};mxGraphLayout.prototype.setEdgeStyleEnabled=function(a,b){this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE,b?"0":"1",[a])};mxGraphLayout.prototype.setOrthogonalEdge=function(a,b){this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL,b?"1":"0",[a])};
|
||||
mxGraphLayout.prototype.getParentOffset=function(a){var b=new mxPoint;if(null!=a&&a!=this.parent){var c=this.graph.getModel();if(c.isAncestor(this.parent,a))for(var d=c.getGeometry(a);a!=this.parent;)b.x+=d.x,b.y+=d.y,a=c.getParent(a),d=c.getGeometry(a)}return b};
|
||||
mxGraphLayout.prototype.setEdgePoints=function(a,b){if(null!=a){var c=this.graph.model,d=c.getGeometry(a);null==d?(d=new mxGeometry,d.setRelative(!0)):d=d.clone();if(null!=this.parent&&null!=b)for(var e=c.getParent(a),e=this.getParentOffset(e),f=0;f<b.length;f++)b[f].x-=e.x,b[f].y-=e.y;d.points=b;c.setGeometry(a,d)}};
|
||||
|
@ -1607,13 +1607,14 @@ Graph.prototype.isCellFoldable=function(a){var b=this.view.getState(a),b=null!=b
|
|||
Graph.prototype.zoom=function(a,b){a=Math.max(.01,Math.min(this.view.scale*a,160))/this.view.scale;mxGraph.prototype.zoom.apply(this,arguments)};Graph.prototype.zoomIn=function(){.15>this.view.scale?this.zoom((this.view.scale+.01)/this.view.scale):this.zoom(Math.round(this.view.scale*this.zoomFactor*20)/20/this.view.scale)};Graph.prototype.zoomOut=function(){.15>=this.view.scale?this.zoom((this.view.scale-.01)/this.view.scale):this.zoom(Math.round(1/this.zoomFactor*this.view.scale*20)/20/this.view.scale)};
|
||||
Graph.prototype.getTooltipForCell=function(a){var b="";if(mxUtils.isNode(a.value)){var c=a.value.getAttribute("tooltip");if(null!=c)null!=c&&this.isReplacePlaceholders(a)&&(c=this.replacePlaceholders(a,c)),b=this.sanitizeHtml(c);else{c=this.builtInProperties;a=a.value.attributes;var d=[];this.isEnabled()&&c.push("link");for(var e=0;e<a.length;e++)0>mxUtils.indexOf(c,a[e].nodeName)&&0<a[e].nodeValue.length&&d.push({name:a[e].nodeName,value:a[e].nodeValue});d.sort(function(a,b){return a.name<b.name?
|
||||
-1:a.name>b.name?1:0});for(e=0;e<d.length;e++)"link"==d[e].name&&this.isCustomLink(d[e].value)||(b+=("link"!=d[e].name?"<b>"+d[e].name+":</b> ":"")+mxUtils.htmlEntities(d[e].value)+"\n");0<b.length&&(b=b.substring(0,b.length-1),mxClient.IS_SVG&&(b='<div style="max-width:360px;">'+b+"</div>"))}}return b};Graph.prototype.stringToBytes=function(a){for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=a.charCodeAt(c);return b};
|
||||
Graph.prototype.bytesToString=function(a){for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")};Graph.prototype.compress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=this.bytesToString(pako.deflateRaw(encodeURIComponent(a)));return window.btoa?btoa(a):Base64.encode(a,!0)};Graph.prototype.decompress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=window.atob?atob(a):Base64.decode(a,!0);return this.zapGremlins(decodeURIComponent(this.bytesToString(pako.inflateRaw(a))))};
|
||||
Graph.prototype.zapGremlins=function(a){for(var b=[],c=0;c<a.length;c++){var d=a.charCodeAt(c);(32<=d||9==d||10==d||13==d)&&b.push(a.charAt(c))}return b.join("")};HoverIcons=function(a){this.graph=a;this.init()};HoverIcons.prototype.arrowSpacing=2;HoverIcons.prototype.updateDelay=500;HoverIcons.prototype.activationDelay=140;HoverIcons.prototype.currentState=null;HoverIcons.prototype.activeArrow=null;HoverIcons.prototype.inactiveOpacity=15;HoverIcons.prototype.cssCursor="copy";
|
||||
HoverIcons.prototype.checkCollisions=!0;HoverIcons.prototype.arrowFill="#29b6f2";HoverIcons.prototype.triangleUp=mxClient.IS_SVG?Graph.createSvgImage(18,28,'<path d="m 6 26 L 12 26 L 12 12 L 18 12 L 9 1 L 1 12 L 6 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-up.png",26,14);
|
||||
HoverIcons.prototype.triangleRight=mxClient.IS_SVG?Graph.createSvgImage(26,18,'<path d="m 1 6 L 14 6 L 14 1 L 26 9 L 14 18 L 14 12 L 1 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-right.png",14,26);HoverIcons.prototype.triangleDown=mxClient.IS_SVG?Graph.createSvgImage(18,26,'<path d="m 6 1 L 6 14 L 1 14 L 9 26 L 18 14 L 12 14 L 12 1 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-down.png",26,14);
|
||||
HoverIcons.prototype.triangleLeft=mxClient.IS_SVG?Graph.createSvgImage(28,18,'<path d="m 1 9 L 12 1 L 12 6 L 26 6 L 26 12 L 12 12 L 12 18 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-left.png",14,26);HoverIcons.prototype.roundDrop=mxClient.IS_SVG?Graph.createSvgImage(26,26,'<circle cx="13" cy="13" r="12" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/round-drop.png",26,26);
|
||||
HoverIcons.prototype.refreshTarget=new mxImage(mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDQxNERDRTU1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDQxNERDRTY1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NDE0RENFMzVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NDE0RENFNDVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsvuX50AAANaSURBVHja7FjRZ1tRGD9ZJ1NCyIQSwrivI4Q8hCpjlFDyFEoYfSp9Ko1QWnmo0If+BSXkIfo0QirTMUpeGo2EPfWllFYjZMLKLDJn53d3biU337m5J223bPbxk5t7v+/c3/2+73znO8fDOWezKM/YjMpz68Lj8ejY+QTeCCwLxOS9qPxtyN+6wAeBTwJ31CCO0cJDjXBGBN4LfIepSwykTUT1bgpuib0SONIgo8KRHOtRiCFcvUcgZeGrHPNBxLIyFPyRgTGz0xLbegJCdmzpElue5KlAIMDX19d5uVzm5+fnfDAYmMA17uEZdOx2Yvb/sHlu2S0xwymn5ufneTab5b1ej08S6EAXNrDd2dnhiUTim21MvMtwQ6yiIrWwsMDPzs64rsBmf3/fvM7n89TYlUnEllSkQqEQv7q64g+Vk5MTVXosORErU0Zer5f0FEIlw2N6MxwO82QyaXql2+2SxDqdjopYWUUsqEp45IldqtWq6UWVh/1+P7+8vCTJ4QMUJSRIEXuneoH96w8PDyeWAnhSJfCqwm6NIlaklFdXV0cGhRcQ2mlJQXK5nMq2YPEZbnteU1U2lUqN/D84OGD9fl+5fgnSrFarsUwmw0qlEru4uBjTicViTk3Cr27HSnxR+Doyz0ZE1CAWiUTusbu7y9rttlZv5fP5WDQavYfIMba4uEipfhF8XtqJoZXx/uH+sC/4vPg7OljZZQbsCmLtYzc3N6zRaJhotVrmfx0xDINtbm6athYUeXpHdbBNaqZUKpWxWXV7e2vex+xaWVnhc3NzjrPUXgexyCt0m67LBV7uJMITjqRE4o8tZeg8FPpFitgapYxiOC0poFgsji1jKNo6BZZckrAGUtJsNk1vqAihCBcKhTE7hNWhqw2qFnGy5UFOUYJVIJ1OjzSE+BCEilon0URavRmBqnbbQ00AXbm+vnZc9O1tj72OnQoc2+cwygRkb2+P1et17ZoEm3g87lRmjgWZ00kbXkNuse6/Bu2wlegIxfb2tuvWGroO4bO2c4bbzUh60mxDXm1sbJhhxkQYnhS4h2fUZoRAWnf7lv8N27f8P7Xhnekjgpk+VKGOoQbsiY+hhhtF3YO7twIJ+ULvUGv+GQ2fQEvWxI/THNx5/p/BaspPAQYAqStgiSQwCDoAAAAASUVORK5CYII=":
|
||||
IMAGE_PATH+"/refresh.png",38,38);HoverIcons.prototype.tolerance=mxClient.IS_TOUCH?6:0;
|
||||
Graph.prototype.bytesToString=function(a){for(var b=Array(a.length),c=0;c<a.length;c++)b[c]=String.fromCharCode(a[c]);return b.join("")};Graph.prototype.compressNode=function(a){return this.compress(this.zapGremlins(mxUtils.getXml(a)))};Graph.prototype.compress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=this.bytesToString(pako.deflateRaw(encodeURIComponent(a)));return window.btoa?btoa(a):Base64.encode(a,!0)};
|
||||
Graph.prototype.decompress=function(a){if(null==a||0==a.length||"undefined"===typeof pako)return a;a=window.atob?atob(a):Base64.decode(a,!0);return this.zapGremlins(decodeURIComponent(this.bytesToString(pako.inflateRaw(a))))};Graph.prototype.zapGremlins=function(a){for(var b=[],c=0;c<a.length;c++){var d=a.charCodeAt(c);(32<=d||9==d||10==d||13==d)&&b.push(a.charAt(c))}return b.join("")};HoverIcons=function(a){this.graph=a;this.init()};HoverIcons.prototype.arrowSpacing=2;
|
||||
HoverIcons.prototype.updateDelay=500;HoverIcons.prototype.activationDelay=140;HoverIcons.prototype.currentState=null;HoverIcons.prototype.activeArrow=null;HoverIcons.prototype.inactiveOpacity=15;HoverIcons.prototype.cssCursor="copy";HoverIcons.prototype.checkCollisions=!0;HoverIcons.prototype.arrowFill="#29b6f2";
|
||||
HoverIcons.prototype.triangleUp=mxClient.IS_SVG?Graph.createSvgImage(18,28,'<path d="m 6 26 L 12 26 L 12 12 L 18 12 L 9 1 L 1 12 L 6 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-up.png",26,14);HoverIcons.prototype.triangleRight=mxClient.IS_SVG?Graph.createSvgImage(26,18,'<path d="m 1 6 L 14 6 L 14 1 L 26 9 L 14 18 L 14 12 L 1 12 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-right.png",14,26);
|
||||
HoverIcons.prototype.triangleDown=mxClient.IS_SVG?Graph.createSvgImage(18,26,'<path d="m 6 1 L 6 14 L 1 14 L 9 26 L 18 14 L 12 14 L 12 1 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-down.png",26,14);HoverIcons.prototype.triangleLeft=mxClient.IS_SVG?Graph.createSvgImage(28,18,'<path d="m 1 9 L 12 1 L 12 6 L 26 6 L 26 12 L 12 12 L 12 18 z" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/triangle-left.png",14,26);
|
||||
HoverIcons.prototype.roundDrop=mxClient.IS_SVG?Graph.createSvgImage(26,26,'<circle cx="13" cy="13" r="12" stroke="#fff" fill="'+HoverIcons.prototype.arrowFill+'"/>'):new mxImage(IMAGE_PATH+"/round-drop.png",26,26);
|
||||
HoverIcons.prototype.refreshTarget=new mxImage(mxClient.IS_SVG?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDQxNERDRTU1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDQxNERDRTY1QjY1MTFFNDkzNTRFQTVEMTdGMTdBQjciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NDE0RENFMzVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NDE0RENFNDVCNjUxMUU0OTM1NEVBNUQxN0YxN0FCNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsvuX50AAANaSURBVHja7FjRZ1tRGD9ZJ1NCyIQSwrivI4Q8hCpjlFDyFEoYfSp9Ko1QWnmo0If+BSXkIfo0QirTMUpeGo2EPfWllFYjZMLKLDJn53d3biU337m5J223bPbxk5t7v+/c3/2+73znO8fDOWezKM/YjMpz68Lj8ejY+QTeCCwLxOS9qPxtyN+6wAeBTwJ31CCO0cJDjXBGBN4LfIepSwykTUT1bgpuib0SONIgo8KRHOtRiCFcvUcgZeGrHPNBxLIyFPyRgTGz0xLbegJCdmzpElue5KlAIMDX19d5uVzm5+fnfDAYmMA17uEZdOx2Yvb/sHlu2S0xwymn5ufneTab5b1ej08S6EAXNrDd2dnhiUTim21MvMtwQ6yiIrWwsMDPzs64rsBmf3/fvM7n89TYlUnEllSkQqEQv7q64g+Vk5MTVXosORErU0Zer5f0FEIlw2N6MxwO82QyaXql2+2SxDqdjopYWUUsqEp45IldqtWq6UWVh/1+P7+8vCTJ4QMUJSRIEXuneoH96w8PDyeWAnhSJfCqwm6NIlaklFdXV0cGhRcQ2mlJQXK5nMq2YPEZbnteU1U2lUqN/D84OGD9fl+5fgnSrFarsUwmw0qlEru4uBjTicViTk3Cr27HSnxR+Doyz0ZE1CAWiUTusbu7y9rttlZv5fP5WDQavYfIMba4uEipfhF8XtqJoZXx/uH+sC/4vPg7OljZZQbsCmLtYzc3N6zRaJhotVrmfx0xDINtbm6athYUeXpHdbBNaqZUKpWxWXV7e2vex+xaWVnhc3NzjrPUXgexyCt0m67LBV7uJMITjqRE4o8tZeg8FPpFitgapYxiOC0poFgsji1jKNo6BZZckrAGUtJsNk1vqAihCBcKhTE7hNWhqw2qFnGy5UFOUYJVIJ1OjzSE+BCEilon0URavRmBqnbbQ00AXbm+vnZc9O1tj72OnQoc2+cwygRkb2+P1et17ZoEm3g87lRmjgWZ00kbXkNuse6/Bu2wlegIxfb2tuvWGroO4bO2c4bbzUh60mxDXm1sbJhhxkQYnhS4h2fUZoRAWnf7lv8N27f8P7Xhnekjgpk+VKGOoQbsiY+hhhtF3YO7twIJ+ULvUGv+GQ2fQEvWxI/THNx5/p/BaspPAQYAqStgiSQwCDoAAAAASUVORK5CYII=":IMAGE_PATH+
|
||||
"/refresh.png",38,38);HoverIcons.prototype.tolerance=mxClient.IS_TOUCH?6:0;
|
||||
HoverIcons.prototype.init=function(){this.arrowUp=this.createArrow(this.triangleUp,mxResources.get("plusTooltip"));this.arrowRight=this.createArrow(this.triangleRight,mxResources.get("plusTooltip"));this.arrowDown=this.createArrow(this.triangleDown,mxResources.get("plusTooltip"));this.arrowLeft=this.createArrow(this.triangleLeft,mxResources.get("plusTooltip"));this.elts=[this.arrowUp,this.arrowRight,this.arrowDown,this.arrowLeft];this.repaintHandler=mxUtils.bind(this,function(){this.repaint()});this.graph.selectionModel.addListener(mxEvent.CHANGE,
|
||||
this.repaintHandler);this.graph.model.addListener(mxEvent.CHANGE,this.repaintHandler);this.graph.view.addListener(mxEvent.SCALE_AND_TRANSLATE,this.repaintHandler);this.graph.view.addListener(mxEvent.TRANSLATE,this.repaintHandler);this.graph.view.addListener(mxEvent.SCALE,this.repaintHandler);this.graph.view.addListener(mxEvent.DOWN,this.repaintHandler);this.graph.view.addListener(mxEvent.UP,this.repaintHandler);this.graph.addListener(mxEvent.ROOT,this.repaintHandler);this.graph.addListener(mxEvent.ESCAPE,
|
||||
mxUtils.bind(this,function(){this.mouseDownPoint=null}));mxEvent.addListener(this.graph.container,"mouseleave",mxUtils.bind(this,function(a){null!=a.relatedTarget&&mxEvent.getSource(a)==this.graph.container&&this.setDisplay("none")}));this.graph.addListener(mxEvent.START_EDITING,mxUtils.bind(this,function(a){this.reset()}));var a=this.graph.click;this.graph.click=mxUtils.bind(this,function(b){a.apply(this.graph,arguments);null==this.currentState||this.graph.isCellSelected(this.currentState.cell)||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// NOTE: Modified to support data URIs for images, ie. data:image/*
|
||||
// Modified to allow "word-break: break-word" in styles. It is done by adding "break-word" which is at index 55 of J array J[55] to "cssLitGroup" of "word-break"
|
||||
(function(){var c=void 0,n=!0,s=null,C=!1,J=["aliceblue,antiquewhite,aqua,aquamarine,azure,beige,bisque,black,blanchedalmond,blue,blueviolet,brown,burlywood,cadetblue,chartreuse,chocolate,coral,cornflowerblue,cornsilk,crimson,cyan,darkblue,darkcyan,darkgoldenrod,darkgray,darkgreen,darkkhaki,darkmagenta,darkolivegreen,darkorange,darkorchid,darkred,darksalmon,darkseagreen,darkslateblue,darkslategray,darkturquoise,darkviolet,deeppink,deepskyblue,dimgray,dodgerblue,firebrick,floralwhite,forestgreen,fuchsia,gainsboro,ghostwhite,gold,goldenrod,gray,green,greenyellow,honeydew,hotpink,indianred,indigo,ivory,khaki,lavender,lavenderblush,lawngreen,lemonchiffon,lightblue,lightcoral,lightcyan,lightgoldenrodyellow,lightgreen,lightgrey,lightpink,lightsalmon,lightseagreen,lightskyblue,lightslategray,lightsteelblue,lightyellow,lime,limegreen,linen,magenta,maroon,mediumaquamarine,mediumblue,mediumorchid,mediumpurple,mediumseagreen,mediumslateblue,mediumspringgreen,mediumturquoise,mediumvioletred,midnightblue,mintcream,mistyrose,moccasin,navajowhite,navy,oldlace,olive,olivedrab,orange,orangered,orchid,palegoldenrod,palegreen,paleturquoise,palevioletred,papayawhip,peachpuff,peru,pink,plum,powderblue,purple,red,rosybrown,royalblue,saddlebrown,salmon,sandybrown,seagreen,seashell,sienna,silver,skyblue,slateblue,slategray,snow,springgreen,steelblue,tan,teal,thistle,tomato,transparent,turquoise,violet,wheat,white,whitesmoke,yellow,yellowgreen".split(","),
|
||||
"all-scroll,col-resize,crosshair,default,e-resize,hand,help,move,n-resize,ne-resize,no-drop,not-allowed,nw-resize,pointer,progress,row-resize,s-resize,se-resize,sw-resize,text,vertical-text,w-resize,wait".split(","),"armenian,decimal,decimal-leading-zero,disc,georgian,lower-alpha,lower-greek,lower-latin,lower-roman,square,upper-alpha,upper-latin,upper-roman".split(","),"100,200,300,400,500,600,700,800,900,bold,bolder,lighter".split(","),"block-level,inline-level,table-caption,table-cell,table-column,table-column-group,table-footer-group,table-header-group,table-row,table-row-group".split(","),
|
||||
"condensed,expanded,extra-condensed,extra-expanded,narrower,semi-condensed,semi-expanded,ultra-condensed,ultra-expanded,wider".split(","),"inherit,inline,inline-block,inline-box,inline-flex,inline-grid,inline-list-item,inline-stack,inline-table,run-in".split(","),"behind,center-left,center-right,far-left,far-right,left-side,leftwards,right-side,rightwards".split(","),"large,larger,small,smaller,x-large,x-small,xx-large,xx-small".split(","),"dashed,dotted,double,groove,outset,ridge,solid".split(","),
|
||||
|
@ -23,7 +24,7 @@ position:{cssPropBits:0,cssLitGroup:[J[23]],cssFns:[]},quotes:{cssPropBits:8,css
|
|||
cssLitGroup:[J[14],J[69]],cssFns:[]},stress:"border-bottom-left-radius","table-layout":{cssPropBits:0,cssLitGroup:[J[52],J[61]],cssFns:[]},"text-align":{cssPropBits:0,cssLitGroup:[J[42],J[56],J[66]],cssFns:[]},"text-decoration":{cssPropBits:0,cssLitGroup:[J[19],J[71]],cssFns:[]},"text-indent":"border-bottom-left-radius","text-overflow":{cssPropBits:8,cssLitGroup:[J[33]],cssFns:[]},"text-shadow":"box-shadow","text-transform":{cssPropBits:0,cssLitGroup:[J[26],J[71]],cssFns:[]},"text-wrap":{cssPropBits:0,
|
||||
cssLitGroup:[J[46],J[71],J[72]],cssFns:[]},top:"bottom",transform:{cssPropBits:0,cssLitGroup:[J[71]],cssFns:"matrix(),perspective(),rotate(),rotate3d(),rotatex(),rotatey(),rotatez(),scale(),scale3d(),scalex(),scaley(),scalez(),skew(),skewx(),skewy(),translate(),translate3d(),translatex(),translatey(),translatez()".split(",")},"transform-origin":"perspective-origin","transform-style":{cssPropBits:0,cssLitGroup:[J[37]],cssFns:[]},transition:{cssPropBits:1029,cssLitGroup:[J[10],J[48],J[50],J[71]],cssFns:["cubic-bezier()",
|
||||
"steps()"]},"transition-delay":"animation-delay","transition-duration":"animation-delay","transition-property":{cssPropBits:1024,cssLitGroup:[J[48],J[50]],cssFns:[]},"transition-timing-function":"animation-timing-function","unicode-bidi":{cssPropBits:0,cssLitGroup:[J[30],J[72]],cssFns:[]},"vertical-align":{cssPropBits:5,cssLitGroup:[J[12],J[31]],cssFns:[]},visibility:"backface-visibility","voice-family":{cssPropBits:8,cssLitGroup:[J[27],J[48]],cssFns:[]},volume:{cssPropBits:1,cssLitGroup:[J[17],J[69]],
|
||||
cssFns:[]},"white-space":{cssPropBits:0,cssLitGroup:[J[22],J[72]],cssFns:[]},width:"min-height","word-break":{cssPropBits:0,cssLitGroup:[J[32],J[72]],cssFns:[]},"word-spacing":"letter-spacing","word-wrap":"overflow-wrap","z-index":"bottom",zoom:"line-height","cubic-bezier()":"animation-delay","steps()":{cssPropBits:5,cssLitGroup:[J[36],J[48]],cssFns:[]},"image()":{cssPropBits:18,cssLitGroup:[J[0],J[48]],cssFns:["rgb()","rgba()"]},"linear-gradient()":{cssPropBits:7,cssLitGroup:[J[0],J[31],J[42],J[48],
|
||||
cssFns:[]},"white-space":{cssPropBits:0,cssLitGroup:[J[22],J[72]],cssFns:[]},width:"min-height","word-break":{cssPropBits:0,cssLitGroup:[J[32],J[72],J[55]],cssFns:[]},"word-spacing":"letter-spacing","word-wrap":"overflow-wrap","z-index":"bottom",zoom:"line-height","cubic-bezier()":"animation-delay","steps()":{cssPropBits:5,cssLitGroup:[J[36],J[48]],cssFns:[]},"image()":{cssPropBits:18,cssLitGroup:[J[0],J[48]],cssFns:["rgb()","rgba()"]},"linear-gradient()":{cssPropBits:7,cssLitGroup:[J[0],J[31],J[42],J[48],
|
||||
J[79]],cssFns:["rgb()","rgba()"]},"radial-gradient()":{cssPropBits:7,cssLitGroup:[J[0],J[11],J[31],J[42],J[48],J[56],J[57]],cssFns:["rgb()","rgba()"]},"repeating-linear-gradient()":"linear-gradient()","repeating-radial-gradient()":"radial-gradient()","rgb()":{cssPropBits:1,cssLitGroup:[J[48]],cssFns:[]},"rgba()":"rgb()","rect()":{cssPropBits:5,cssLitGroup:[J[48],J[52]],cssFns:[]},"alpha()":{cssPropBits:1,cssLitGroup:[J[28]],cssFns:[]},"matrix()":"animation-delay","perspective()":"border-bottom-left-radius",
|
||||
"rotate()":"border-bottom-left-radius","rotate3d()":"animation-delay","rotatex()":"border-bottom-left-radius","rotatey()":"border-bottom-left-radius","rotatez()":"border-bottom-left-radius","scale()":"animation-delay","scale3d()":"animation-delay","scalex()":"border-bottom-left-radius","scaley()":"border-bottom-left-radius","scalez()":"border-bottom-left-radius","skew()":"animation-delay","skewx()":"border-bottom-left-radius","skewy()":"border-bottom-left-radius","translate()":"animation-delay","translate3d()":"animation-delay",
|
||||
"translatex()":"border-bottom-left-radius","translatey()":"border-bottom-left-radius","translatez()":"border-bottom-left-radius"},O;for(O in L)"string"===typeof L[O]&&Object.hasOwnProperty.call(L,O)&&(L[O]=L[L[O]]);"undefined"!==typeof window&&(window.cssSchema=L);var U,X;
|
||||
|
|
1907
src/main/webapp/js/viewer.min.js
vendored
1907
src/main/webapp/js/viewer.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft=غادر {1}
|
|||
chatWindowTitle=دردشة
|
||||
chooseAnOption=اختر خيارا
|
||||
chromeApp=تطبيق Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=تصدير ك
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=إضافات
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=لم يتم الحفظ، محاولة إعادة الاتصال.
|
||||
|
@ -252,7 +254,7 @@ feedback=تعليق
|
|||
feedbackSent=تم إرسال التعليق بنجاح.
|
||||
floorplans=Floorplans
|
||||
file=ملف
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=اسم الملف
|
||||
fileExists=الملف موجود مسبقا
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} напусна
|
|||
chatWindowTitle=Чат
|
||||
chooseAnOption=Изберете опция
|
||||
chromeApp=Chrome приложение
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Компресиран
|
||||
commitMessage=Съобщение при подаване
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Експортиране
|
|||
exportAs=Експортиране като
|
||||
exportOptionsDisabled=Опцията за експортиране е деактивирана
|
||||
exportOptionsDisabledDetails=Собственикът е деактивирал опциите за изтегляне, принтиране и копиране за хората, които коментират и разглеждат този файл.
|
||||
externalChanges=External Changes
|
||||
extras=Екстри
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Неуспешно запазване, опит за повторно свързване
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} je otišao
|
|||
chatWindowTitle=Razgovor
|
||||
chooseAnOption=Izaberite opciju
|
||||
chromeApp=Chrome Aplikacija
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Kompresovano
|
||||
commitMessage=Posveti poruku
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Izvozi
|
|||
exportAs=Izvezi kao
|
||||
exportOptionsDisabled=Opcije izvoza onemogućene
|
||||
exportOptionsDisabledDetails=Vlasnik je za ovaj fajl komentatorima i posjetiocima onemogućio preuzimanje, printanje i kopiranje.
|
||||
externalChanges=External Changes
|
||||
extras=Dodaci
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Spašavanje nije uspjelo, pokušaj ponovnog povezivanja
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} ha sortit
|
|||
chatWindowTitle=Xat
|
||||
chooseAnOption=Escolliu una opció
|
||||
chromeApp=Aplicació Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Comprimit
|
||||
commitMessage=Missatge de Commit
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportant
|
|||
exportAs=Exporta com a
|
||||
exportOptionsDisabled=Opcions d'exportació inactives
|
||||
exportOptionsDisabledDetails=El propietari ha desactivat les opcions per a descarregar, imprimir o copiar aquest fitxer per las que només tenen permís per visualitzar i comentar.
|
||||
externalChanges=External Changes
|
||||
extras=Extres
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Error en desar, intentant reconnectar
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} se odhlásil
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Vyberte možnost
|
||||
chromeApp=Aplikace Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Komprimováno
|
||||
commitMessage=Zpráva ke commitu
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportuji
|
|||
exportAs=Exportovat jako
|
||||
exportOptionsDisabled=Možnost exportu je vypnutá
|
||||
exportOptionsDisabledDetails=Vlastník pro komentující a diváky vypnul možnost stažení, tisku nebo kopírování.
|
||||
externalChanges=External Changes
|
||||
extras=Extra
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Uložení se nezdařilo, zkouším se znovu připojit
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} har forladt chatten
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Vælg en mulighed
|
||||
chromeApp=Chrome app
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Komprimeret
|
||||
commitMessage=Commit Besked
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Eksporterer
|
|||
exportAs=Eksporterer som
|
||||
exportOptionsDisabled=Eksportmuligheder deaktiveret
|
||||
exportOptionsDisabledDetails=Ejeren har deaktiveret muligheder for at downloade, printe eller kopiere for kommentører og seere på denne fil.
|
||||
externalChanges=External Changes
|
||||
extras=Ekstra
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Kunne ikke gemme, forsøger at genoprette forbindelsen
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} hat den Chat verlassen
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Wählen Sie eine Option
|
||||
chromeApp=Chrome app
|
||||
collaborativeEditingNotice=Wichtige Mitteilung für gemeinesames Bearbeiten
|
||||
compressed=Komprimiert
|
||||
commitMessage=Commit-Nachricht
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Wird exportiert
|
|||
exportAs=Exportieren als
|
||||
exportOptionsDisabled=Exportoptionen deaktiviert
|
||||
exportOptionsDisabledDetails=Der Nutzer hat die Optionen zum Herunterladen, Drucken und Kopieren dieser Datei für Nutzer mit Kommentier- und Lesezugriff deaktiviert.
|
||||
externalChanges=Externe Änderungen
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Speichern fehlgeschlagen. Verbindungswiederherstellung
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback erfolgreich versendet.
|
||||
floorplans=Grundriss
|
||||
file=Datei
|
||||
fileChangedOverwrite=Datei wurde geändert. Änderungen überschreiben?
|
||||
fileChangedOverwrite=Die Datei wurde geändert. Möchten Sie die Datei speichern und die Änderungen überschreiben?
|
||||
overwrite=Überschreiben
|
||||
filename=Dateiname
|
||||
fileExists=Datei existiert bereits
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} έχει εξέρθει
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Διαλέξτε μια επιλογή
|
||||
chromeApp=Εφαρμογή Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Συμπιεσμένο
|
||||
commitMessage=Υποβολή μυνήματος
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Γίνετε εξαγωγή
|
|||
exportAs=Εξαγωγή ως
|
||||
exportOptionsDisabled=Οι επιλογές εξαγωγής έχουν απενεργοποιηθεί
|
||||
exportOptionsDisabledDetails=Ο ιδιοκτήτης έχει απενεργοποιήσει τις επιλογές λήψης, εκτύπωσης ή αντιγραφής του αρχείου για τους σχολιαστές και τους θεατές.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Αποτυχία αποθήκευσης, γίνεται προσπάθεια επανασύνδεσης
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
|
||||
# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
|
||||
aboutDrawio=Pri draw.io
|
||||
accessDenied=Access Denied
|
||||
action=Action
|
||||
actualSize=Actual Size
|
||||
accessDenied=Aliro rifuzita
|
||||
action=Ago
|
||||
actualSize=Vera grandeco
|
||||
add=Aldoni
|
||||
addedFile=Added {1}
|
||||
addedFile={1} aldonita
|
||||
addImages=Aldoni bildojn
|
||||
addImageUrl=Add Image URL
|
||||
addLayer=Add Layer
|
||||
addLayer=Aldoni tavolon
|
||||
addProperty=Aldoni econ
|
||||
address=Adreso
|
||||
addToExistingDrawing=Add to Existing Drawing
|
||||
|
@ -24,7 +24,7 @@ allSpaces=All Spaces
|
|||
allTags=All Tags
|
||||
anchor=Anchor
|
||||
android=Android
|
||||
angle=Angle
|
||||
angle=Angulo
|
||||
arc=Arc
|
||||
areYouSure=Ĉu vi certas?
|
||||
ensureDataSaved=Please ensure your data is saved before closing.
|
||||
|
@ -81,15 +81,16 @@ center=Center
|
|||
cannotLoad=Load attempts failed. Please try again later.
|
||||
cannotLogin=Log in attempts failed. Please try again later.
|
||||
cannotOpenFile=Cannot open file
|
||||
change=Change
|
||||
change=Ŝanĝi
|
||||
changeOrientation=Change Orientation
|
||||
changeUser=Change user
|
||||
changeUser=Ŝanĝi uzanton
|
||||
changesNotSaved=Changes have not been saved
|
||||
chatJoined={1} has joined
|
||||
chatLeft={1} has left
|
||||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=Dosiero
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Dosiernomo
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} se ha ido
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Elegir una opción
|
||||
chromeApp=Aplicación Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Comprimido
|
||||
commitMessage=Confirmar mensaje
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportando
|
|||
exportAs=Exportar como
|
||||
exportOptionsDisabled=Las opciones para exportar están deshabilitadas
|
||||
exportOptionsDisabledDetails=El propietario ha deshabilitado las opciones de descargar, imprimir o copiar para los comentadores u observadores de este archivo.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Falló al guardar, intentando reconectar
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} lahkus
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Tee valik
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Pakitud
|
||||
commitMessage=Kinnita sõnum
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Eksport
|
|||
exportAs=Ekspordi nimega
|
||||
exportOptionsDisabled=Ekspordi valikud keelatud
|
||||
exportOptionsDisabledDetails=Faili omanik on keelanud võimaluse kommenteerijatel ja vaatajatel sisu alla laadida, printida või kopeerida.
|
||||
externalChanges=External Changes
|
||||
extras=Lisad
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Salvestamine ebaõnnestunud, proov ühendust luua
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} خارج شده است.
|
|||
chatWindowTitle=چت
|
||||
chooseAnOption=یک گزینه را انتخاب نمایید
|
||||
chromeApp=اپلیکیشن کروم
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=فشرده
|
||||
commitMessage=تایید پیام
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=در حال فرستادن
|
|||
exportAs=فرستادن به عنوان
|
||||
exportOptionsDisabled=گزینه های فرستادن غیرفعال گشته اند
|
||||
exportOptionsDisabledDetails=دارنده امکان دانلود، چاپ و کپی برای نظردهندگان و بینندگان این فایل را غیرفعال کرده است.
|
||||
externalChanges=External Changes
|
||||
extras=موارد اضافی
|
||||
facebook=فیسبوک
|
||||
failedToSaveTryReconnect=عدم ذخیره سازی، سعی در اتصال مجدد
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} lähti pois keskustelusta
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Valitse vaihtoehto
|
||||
chromeApp=Chrome-sovellus
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Pakattu
|
||||
commitMessage=Lähetä viesti
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Viedään
|
|||
exportAs=Vie nimellä
|
||||
exportOptionsDisabled=Vientivalinnat pois käytöstä
|
||||
exportOptionsDisabledDetails=Omistaja on poistanut valinnat lataamiseen, tulostamiseen tai kopioimiseen kommentoijille ja katsojille tässä tiedostossa.
|
||||
externalChanges=External Changes
|
||||
extras=Extrat
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Tallentaminen epäonnistui, yritetään yhdistää uudelleen
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} ay umalis
|
|||
chatWindowTitle=Pag-uusap
|
||||
chooseAnOption=Magtakda ng Pagpipilian
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Siniksik
|
||||
commitMessage=Maglagak ng mensahe
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Iniluluwas
|
|||
exportAs=Iluwas bilang
|
||||
exportOptionsDisabled=Ang mga pagpipilian sa pagluwas ay di pinagana
|
||||
exportOptionsDisabledDetails=Di pinagana ng may-ari ang mga pagpipilian para mag download, iprinta, o kumopya para sa mga nagkukumento o tumitingin ng file na ito.
|
||||
externalChanges=External Changes
|
||||
extras=Mga dagdag
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Bigong mag-save, sinusubukang kumonektang muli.
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} a quitté le chat
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choisir une option
|
||||
chromeApp=Application Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressé
|
||||
commitMessage=Message commit
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportation
|
|||
exportAs=Exporter en tant que
|
||||
exportOptionsDisabled=Possibilités d'export désactivées
|
||||
exportOptionsDisabledDetails=Le propriétaire a désactivé les possibilités de téléchargement, d'impression ou de copie pour les commentateurs et observateurs sur ce fichier.
|
||||
externalChanges=External Changes
|
||||
extras=Suppléments
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=La sauvegarde a échoué, tentative de reconnexion
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} עזב
|
|||
chatWindowTitle=צ'אט
|
||||
chooseAnOption=בחר אפשרות
|
||||
chromeApp=אפליקציית כרום
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=דחוס
|
||||
commitMessage=הודעת commit
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=ייצוא
|
|||
exportAs=ייצא בתור
|
||||
exportOptionsDisabled=האפשרות לייצא הושבתה
|
||||
exportOptionsDisabledDetails=האחראי הגביל את האפשרות להוריד, להדפיס או להעתיק עבור מגיבים וצופים בקובץ זה.
|
||||
externalChanges=External Changes
|
||||
extras=תוספות
|
||||
facebook=פייסבוק
|
||||
failedToSaveTryReconnect=השמירה נכשלה, מנסה להתחבר מחדש
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} távozott
|
|||
chatWindowTitle=Cseveg
|
||||
chooseAnOption=Válasszon opciót
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Tömörített
|
||||
commitMessage=Üzenetet küld
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportálás folyamatban
|
|||
exportAs=Exportálás másként
|
||||
exportOptionsDisabled=Exportálási opciók letiltva
|
||||
exportOptionsDisabledDetails=A tulajdonos letiltotta a letöltési, nyomtatási vagy másolási opciókat a kommentelőknek és nézőknek ezen a fájlon.
|
||||
externalChanges=External Changes
|
||||
extras=Extrák
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Sikertelen mentés, próbáljon újrakapcsolódni
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft=chatLeft
|
|||
chatWindowTitle=chatWindowTitle
|
||||
chooseAnOption=chooseAnOption
|
||||
chromeApp=chromeApp
|
||||
collaborativeEditingNotice=collaborativeEditingNotice
|
||||
compressed=compressed
|
||||
commitMessage=commitMessage
|
||||
csv=csv
|
||||
|
@ -244,6 +245,7 @@ exporting=exporting
|
|||
exportAs=exportAs
|
||||
exportOptionsDisabled=exportOptionsDisabled
|
||||
exportOptionsDisabledDetails=exportOptionsDisabledDetails
|
||||
externalChanges=externalChanges
|
||||
extras=extras
|
||||
facebook=facebook
|
||||
failedToSaveTryReconnect=failedToSaveTryReconnect
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} keluar
|
|||
chatWindowTitle=Obrolan
|
||||
chooseAnOption=Pilih salah satu opsi
|
||||
chromeApp=Aplikasi Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Mampat
|
||||
commitMessage=Kirim Pesan
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Mengekspor
|
|||
exportAs=Ekspor sebagai
|
||||
exportOptionsDisabled=Pilihan ekspor nonaktif
|
||||
exportOptionsDisabledDetails=Pemilik telah menonaktifkan opsi unduh, cetak, atau salin untuk pengomentar dan pembaca berkas ini.
|
||||
externalChanges=External Changes
|
||||
extras=Ekstra
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Gagal menyimpan, mencoba menghubungkan kembali
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} è uscito
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Scegli un'opzione
|
||||
chromeApp=App Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compresso
|
||||
commitMessage=Invia il messaggio
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Esportando
|
|||
exportAs=Esporta come
|
||||
exportOptionsDisabled=Opzioni di esporto disabilitate
|
||||
exportOptionsDisabledDetails=Il proprietario ha disabilitato le opzioni di download, stampa e copia per i commentatori ed i lettori del file.
|
||||
externalChanges=External Changes
|
||||
extras=Altro
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Impossibile salvare, riconnessione in corso
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} がチャットを去りました。
|
|||
chatWindowTitle=チャット
|
||||
chooseAnOption=オプションを選んでください
|
||||
chromeApp=Chrome アプリ
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=圧縮
|
||||
commitMessage=メッセージを省略する
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=エクスポート中
|
|||
exportAs=形式を指定してエクスポート
|
||||
exportOptionsDisabled=エクスポートは使えません
|
||||
exportOptionsDisabledDetails=所有者は、視聴者や編集者がダウンロード、印刷、コピーをすることを認めていません。
|
||||
externalChanges=External Changes
|
||||
extras=拡張
|
||||
facebook=フェイスブック
|
||||
failedToSaveTryReconnect=保存に失敗しました。再接続中です。
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1}님이 대화에서 나갔습니다
|
|||
chatWindowTitle=대화창
|
||||
chooseAnOption=옵션 선택
|
||||
chromeApp=크롬 앱
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=압축
|
||||
commitMessage=메세지 전송
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=내보내는 중
|
|||
exportAs=다른 파일 형식으로 내보내기
|
||||
exportOptionsDisabled=내보내기 옵션 사용불가
|
||||
exportOptionsDisabledDetails=소유자가 확인자 및 주석자들의 다운로드, 인쇄, 복사를 허용하지 않습니다.
|
||||
externalChanges=External Changes
|
||||
extras=추가 도구
|
||||
facebook=페이스북
|
||||
failedToSaveTryReconnect=저장 실패, 재연결중
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} telah beredar
|
|||
chatWindowTitle=Sembang
|
||||
chooseAnOption=Pilih satu opsyen
|
||||
chromeApp=Aplikasi Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Mampat
|
||||
commitMessage=Hantar Mesej
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Mengeksport
|
|||
exportAs=Eksport sebagai
|
||||
exportOptionsDisabled=Pilihan eksport dilumpuhkan
|
||||
exportOptionsDisabledDetails=Pemilik telah melumpuhkan pilihan untuk memuat turun, mencetak atau menyalin untuk pengulas dan penonton pada fail ini.
|
||||
externalChanges=External Changes
|
||||
extras=Tambahan
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Gagal untuk menyimpan, cuba untuk menyambung semula
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
|
||||
aboutDrawio=Over draw.io
|
||||
accessDenied=Toegang geweigerd
|
||||
action=Action
|
||||
action=Actie
|
||||
actualSize=Ware grootte
|
||||
add=Toevoegen
|
||||
addedFile={1} toegevoegd
|
||||
|
@ -90,6 +90,7 @@ chatLeft={1} is vertrokken
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Kies een optie
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Gecomprimeerd
|
||||
commitMessage=Bericht vastleggen
|
||||
csv=CSV
|
||||
|
@ -128,7 +129,7 @@ copy=Kopiëren
|
|||
copyConnect=Kopiëren bij verbinding
|
||||
copyOf=Kopie van {1}
|
||||
copyOfDrawing=Kopie van tekening
|
||||
copySize=Copy Size
|
||||
copySize=Afmetingen kopiëren
|
||||
copyStyle=Stijl kopiëren
|
||||
create=Aanmaken
|
||||
createNewDiagram=Nieuw diagram aanmaken
|
||||
|
@ -174,7 +175,7 @@ doubleClickOrientation=Dubbelklik om oriëntatie te wijzigen
|
|||
doubleClickTooltip=Dubbelklik om tekst in te voegen
|
||||
doubleClickChangeProperty=Dubbelklik om eigenschapsnaam te wijzigen
|
||||
download=Downloaden
|
||||
downloadDesktop=Download draw.io Desktop
|
||||
downloadDesktop=draw.io Bureaublad-app downloaden
|
||||
downloadAs=Downloaden als
|
||||
clickHereToSave=Klik hier om op te slaan.
|
||||
draftDiscarded=Concept genegeerd
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporteren
|
|||
exportAs=Exporteren als
|
||||
exportOptionsDisabled=Exportopties uitgeschakeld
|
||||
exportOptionsDisabledDetails=De eigenaar heeft opties voor het downloaden, afdrukken of kopiëren uitgeschakeld voor commentatoren en bekijkers van dit bestand.
|
||||
externalChanges=External Changes
|
||||
extras=Extra's
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Opslaan mislukt, opnieuw verbinden maken
|
||||
|
@ -513,7 +515,7 @@ paperSize=Papiergrootte
|
|||
pattern=Patroon
|
||||
paste=Plakken
|
||||
pasteHere=Hier plakken
|
||||
pasteSize=Paste Size
|
||||
pasteSize=Afmetingen plakken
|
||||
pasteStyle=Stijl plakken
|
||||
perimeter=Begrenzing
|
||||
permissionAnyone=Iedereen kan bewerken
|
||||
|
@ -553,7 +555,7 @@ realtimeTimeout=Het lijkt alsof u enkele wijzigingen hebt aangebracht terwijl u
|
|||
redo=Opnieuw
|
||||
refresh=Herladen
|
||||
regularExpression=Reguliere expressie
|
||||
relative=Relative
|
||||
relative=Relatief
|
||||
relativeUrlNotAllowed=Relatieve URL niet toegestaan
|
||||
rememberMe=Onthoud mij
|
||||
rememberThisSetting=Deze instelling onthouden
|
||||
|
@ -697,7 +699,7 @@ updatingPreview=Voorbeeld wordt bijgewerkt. Even wachten...
|
|||
updatingSelection=Selectie wordt bijgewerkt. Even wachten...
|
||||
upload=Uploaden
|
||||
url=URL
|
||||
useOffline=Use Offline
|
||||
useOffline=Offline gebruiken
|
||||
useRootFolder=Hoofdmap gebruiken?
|
||||
userManual=Gebruikershandleiding
|
||||
vertical=Verticaal
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} har dratt
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Velg et alternativ
|
||||
chromeApp=Chrome-app
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Komprimert
|
||||
commitMessage=Forpliktende Melding
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Eksporterer
|
|||
exportAs=Eksporter som
|
||||
exportOptionsDisabled=Eksport alternativer deaktivert
|
||||
exportOptionsDisabledDetails=Eieren har deaktivert nedlastning, print og kopieringsalternativer for kommentatorer og seere for denne filen.
|
||||
externalChanges=External Changes
|
||||
extras=Ekstra
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Feil under lagring, prøver å koble til på nytt
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} opuścił
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Wybierz opcję
|
||||
chromeApp=Aplikacja Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Skompresowany
|
||||
commitMessage=commit Wiadomość
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Eksportowanie
|
|||
exportAs=Eksportuj jako
|
||||
exportOptionsDisabled=Opcja eksporu została zablokowana
|
||||
exportOptionsDisabledDetails=Właściciel zablokował możliwość pobierania, drukowania i kopiowania dla przeglądających i komentujących.
|
||||
externalChanges=External Changes
|
||||
extras=Dodatki
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Błąd zapisu, próbuję połączyć ponownie
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} saiu
|
|||
chatWindowTitle=Bate-papo
|
||||
chooseAnOption=Escolha uma opção
|
||||
chromeApp=Aplicativo Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Comprimido
|
||||
commitMessage=Cometer mensagem
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportando
|
|||
exportAs=Exportar como
|
||||
exportOptionsDisabled=Exportar opções desabilitadas
|
||||
exportOptionsDisabledDetails=O proprietário desabilitou as opções de download, impressão ou cópia para comentadores e visualizadores neste arquivo.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Falha ao salvar, tentando reconetar
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} saiu
|
|||
chatWindowTitle=Conversa
|
||||
chooseAnOption=Escolha uma opção
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compactado
|
||||
commitMessage=Mensagem da alteração
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportando
|
|||
exportAs=Exportar como
|
||||
exportOptionsDisabled=Exportar opções desactivadas
|
||||
exportOptionsDisabledDetails=O proprietário desactivou as opções de descarga, impressão ou cópia para comentadores e visuaizados neste ficheiro.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Falha ao salvar, tentando reconetar
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} a plecat
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Alege o opţiune
|
||||
chromeApp=Aplicaţie Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Comprimat
|
||||
commitMessage=Comite un mesaj
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Se exportează
|
|||
exportAs=Exportează ca
|
||||
exportOptionsDisabled=Opțiunile de export au fost dezactivate
|
||||
exportOptionsDisabledDetails=Deținătorul a dezactivat posibilitațile de download, imprimare sau copiere pentru comentatorii și vizualizatorii acestei pagini.
|
||||
externalChanges=External Changes
|
||||
extras=Extra
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Salvare eșuată, se încearcă reconectarea
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} вышел
|
|||
chatWindowTitle=Чат
|
||||
chooseAnOption=Выберите вариант
|
||||
chromeApp=Приложение Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Сжато
|
||||
commitMessage=Сообщение при коммите
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Экспорт
|
|||
exportAs=Экспортировать как
|
||||
exportOptionsDisabled=Возможности экспорта отключены
|
||||
exportOptionsDisabledDetails=Владелец файла отключил возможности сохранения, печати или копирования данных при просмотре и комментировании этого файла.
|
||||
externalChanges=External Changes
|
||||
extras=Дополнительно
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Ошибка при сохранении, выполняется повторное подключение
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} je otišao
|
|||
chatWindowTitle=Razgovor
|
||||
chooseAnOption=Izaberite opciju
|
||||
chromeApp=Chrome Aplikacija
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Komprimovan
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Izvoz
|
|||
exportAs=Izvezi kao
|
||||
exportOptionsDisabled=Mogućnost izvoza je onemogućena
|
||||
exportOptionsDisabledDetails=Vlasnik je onesposobio mogućnost preuzimanja, štampanja i kopiranja za komentatore i posmatrače ovog dokumenta.
|
||||
externalChanges=External Changes
|
||||
extras=Dodaci
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Neuspelo snimanje, pokušaj rekonekcije
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} har lämnat
|
|||
chatWindowTitle=Chatt
|
||||
chooseAnOption=Välj ett alternativ
|
||||
chromeApp=Chrome app
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Komprimerad
|
||||
commitMessage=Skicka meddelande
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exportering
|
|||
exportAs=Exportera som
|
||||
exportOptionsDisabled=Exporteringsval inaktiverade
|
||||
exportOptionsDisabledDetails=Ägaren har inaktiverat nerladdning, skriv ut eller kopiera för kommenterare och åskådare för denna fil.
|
||||
externalChanges=External Changes
|
||||
extras=Extrafunktioner
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Kunde inte spara, försöker återansluta
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} has left
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Choose an option
|
||||
chromeApp=Chrome App
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Compressed
|
||||
commitMessage=Commit Message
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Exporting
|
|||
exportAs=Export as
|
||||
exportOptionsDisabled=Export options disabled
|
||||
exportOptionsDisabledDetails=The owner has disabled options to download, print or copy for commenters and viewers on this file.
|
||||
externalChanges=External Changes
|
||||
extras=Extras
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Failed to save, trying to reconnect
|
||||
|
@ -252,7 +254,7 @@ feedback=Feedback
|
|||
feedbackSent=Feedback successfully sent.
|
||||
floorplans=Floorplans
|
||||
file=File
|
||||
fileChangedOverwrite=File was changed. Overwrite changes?
|
||||
fileChangedOverwrite=The file has been modified. Do you want to save the file and overwrite those changes?
|
||||
overwrite=Overwrite
|
||||
filename=Filename
|
||||
fileExists=File already exists
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} ได้ออกจากระบบ
|
|||
chatWindowTitle=แชท
|
||||
chooseAnOption=เลือกหนึ่งตัวเลือก
|
||||
chromeApp=โครมแอพลิเคชั่น
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=บีบอัดแล้ว
|
||||
commitMessage=ข้อความสัญญา
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=การส่่งออก
|
|||
exportAs=ส่งออกเป็น
|
||||
exportOptionsDisabled=ตัวเลือกการส่งออกถูกปิดใช้งาน
|
||||
exportOptionsDisabledDetails=เจ้าของได้ปิดการใช้งานดาวน์โหลด พิมพ์หรือสำเนาสำหรับผู้แสดงความเห็นและผู้ชมไฟล์นี้
|
||||
externalChanges=External Changes
|
||||
extras=เอ็กซ์ตร้า
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=การบันทึกล้มเหลว กำลังพยายามเชื่อมต่อใหม่
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} sohbeti terk etti
|
|||
chatWindowTitle=Sohbet
|
||||
chooseAnOption=Bir seçenek seçin
|
||||
chromeApp=Chrome Uygulaması
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Sıkıştırılmış
|
||||
commitMessage=Mesaj oluştur
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Dışa aktarma
|
|||
exportAs=Farklı dışa aktar
|
||||
exportOptionsDisabled=Dışa aktarma seçenekleri devre dışı
|
||||
exportOptionsDisabledDetails=Yetkili, indirme, basım veya yorumlayıcılar için kopyalama seçeneklerini devre dışı bıraktı.
|
||||
externalChanges=External Changes
|
||||
extras=Ekstralar
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Kaydetme başarısız, tekrar bağlanmayı deniyor
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} вийшов
|
|||
chatWindowTitle=Чат
|
||||
chooseAnOption=Оберіть варіант
|
||||
chromeApp=Додаток Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Стисло
|
||||
commitMessage=Повідомлення при коміті
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Експортуємо
|
|||
exportAs=Експортувати як
|
||||
exportOptionsDisabled=Можливості експорту відключено
|
||||
exportOptionsDisabledDetails=Власник відключив можливості скачування, друку та копіювання цього файлу для коментаторів та глядачів.
|
||||
externalChanges=External Changes
|
||||
extras=Додатково
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Не вдалося зберегти, спроба повторного підключення
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1} đã thoát
|
|||
chatWindowTitle=Chat
|
||||
chooseAnOption=Chọn một tùy chọn
|
||||
chromeApp=Ứng dụng Chrome
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=Đã nén
|
||||
commitMessage=Nội dung thay đổi
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=Đang xuất tập tin
|
|||
exportAs=Xuất tập tin dưới dạng
|
||||
exportOptionsDisabled=Lựa chọn xuất tập tin bị vô hiệu hóa
|
||||
exportOptionsDisabledDetails=Người sở hữu đã vô hiệu hóa quyền tải xuống, in hoặc sao chép đối với người bình luận hoặc người xem tập tin này.
|
||||
externalChanges=External Changes
|
||||
extras=Bổ sung
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=Lưu thất bại, đang thử kết nối lại
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1}已離開
|
|||
chatWindowTitle=交談
|
||||
chooseAnOption=請選擇一項
|
||||
chromeApp=Chrome應用
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=已壓縮
|
||||
commitMessage=提交訊息
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=匯出中
|
|||
exportAs=匯出為
|
||||
exportOptionsDisabled=已禁用匯出
|
||||
exportOptionsDisabledDetails=所有者已禁止評論者和瀏覽者下載,列印或複制此檔案。
|
||||
externalChanges=External Changes
|
||||
extras=其他
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=存檔失敗,正嘗試重新連線
|
||||
|
|
|
@ -90,6 +90,7 @@ chatLeft={1}已离开
|
|||
chatWindowTitle=聊天
|
||||
chooseAnOption=请选择一项
|
||||
chromeApp=Chrome应用软件
|
||||
collaborativeEditingNotice=Important Notice for Collaborative Editing
|
||||
compressed=已压缩
|
||||
commitMessage=提交信息
|
||||
csv=CSV
|
||||
|
@ -244,6 +245,7 @@ exporting=导出中
|
|||
exportAs=导出为
|
||||
exportOptionsDisabled=已禁止导出
|
||||
exportOptionsDisabledDetails=所有者已禁止评论者及浏览者下载、打印或复制该文件。
|
||||
externalChanges=External Changes
|
||||
extras=其它
|
||||
facebook=Facebook
|
||||
failedToSaveTryReconnect=保存失败,正在尝试重新连接
|
||||
|
|
Loading…
Reference in a new issue