8.4.8 release

This commit is contained in:
David Benson 2018-03-22 11:27:49 +00:00
parent 33f9219502
commit 0d8a3f4f74
49 changed files with 36660 additions and 3632 deletions

View file

@ -1,3 +1,10 @@
21-MAR-2018: 8.4.8
- Gliffy import improvements
- Adds Cisco Safe Stencils
- Adds top, left for CSV import
- Uses mxGraph 3.9.4 beta 3
15-MAR-2018: 8.4.7
- Improves Gliffy import

View file

@ -1 +1 @@
8.4.7
8.4.8

View file

@ -115,6 +115,7 @@
<file name="Sidebar-Bootstrap.js" />
<file name="Sidebar-BPMN.js" />
<file name="Sidebar-Cabinet.js" />
<file name="Sidebar-CiscoSafe.js" />
<file name="Sidebar-Citrix.js" />
<file name="Sidebar-EIP.js" />
<file name="Sidebar-Electrical.js" />

View file

@ -292,8 +292,8 @@ mxXmlCanvas2D.prototype.text=function(a,b,c,d,e,f,g,k,l,m,n,p,q){if(this.textEna
m);null!=n&&r.setAttribute("clip",n?"1":"0");null!=p&&r.setAttribute("rotation",p);null!=q&&r.setAttribute("dir",q);this.root.appendChild(r)}};mxXmlCanvas2D.prototype.stroke=function(){this.root.appendChild(this.createElement("stroke"))};mxXmlCanvas2D.prototype.fill=function(){this.root.appendChild(this.createElement("fill"))};mxXmlCanvas2D.prototype.fillAndStroke=function(){this.root.appendChild(this.createElement("fillstroke"))};
function mxSvgCanvas2D(a,b){mxAbstractCanvas2D.call(this);this.root=a;this.gradients=[];this.defs=null;this.styleEnabled=null!=b?b:!1;var c=null;if(a.ownerDocument!=document)for(c=a;null!=c&&"svg"!=c.nodeName;)c=c.parentNode;null!=c&&(0<c.getElementsByTagName("defs").length&&(this.defs=c.getElementsByTagName("defs")[0]),null==this.defs&&(this.defs=this.createElement("defs"),null!=c.firstChild?c.insertBefore(this.defs,c.firstChild):c.appendChild(this.defs)),this.styleEnabled&&this.defs.appendChild(this.createStyle()))}
mxUtils.extend(mxSvgCanvas2D,mxAbstractCanvas2D);(function(){mxSvgCanvas2D.prototype.useDomParser=!mxClient.IS_IE&&"function"===typeof DOMParser&&"function"===typeof XMLSerializer;if(mxSvgCanvas2D.prototype.useDomParser)try{var a=(new DOMParser).parseFromString("test text","text/html");mxSvgCanvas2D.prototype.useDomParser=null!=a}catch(b){mxSvgCanvas2D.prototype.useDomParser=!1}})();mxSvgCanvas2D.prototype.node=null;mxSvgCanvas2D.prototype.matchHtmlAlignment=!0;
mxSvgCanvas2D.prototype.textEnabled=!0;mxSvgCanvas2D.prototype.foEnabled=!0;mxSvgCanvas2D.prototype.foAltText="[Object]";mxSvgCanvas2D.prototype.foOffset=0;mxSvgCanvas2D.prototype.textOffset=0;mxSvgCanvas2D.prototype.imageOffset=0;mxSvgCanvas2D.prototype.strokeTolerance=0;mxSvgCanvas2D.prototype.refCount=0;mxSvgCanvas2D.prototype.blockImagePointerEvents=!1;mxSvgCanvas2D.prototype.lineHeightCorrection=1;mxSvgCanvas2D.prototype.pointerEventsValue="all";mxSvgCanvas2D.prototype.fontMetricsPadding=10;
mxSvgCanvas2D.prototype.cacheOffsetSize=!0;mxSvgCanvas2D.prototype.format=function(a){return parseFloat(parseFloat(a).toFixed(2))};mxSvgCanvas2D.prototype.getBaseUrl=function(){var a=window.location.href,b=a.lastIndexOf("#");0<b&&(a=a.substring(0,b));return a};mxSvgCanvas2D.prototype.reset=function(){mxAbstractCanvas2D.prototype.reset.apply(this,arguments);this.gradients=[]};
mxSvgCanvas2D.prototype.textEnabled=!0;mxSvgCanvas2D.prototype.foEnabled=!0;mxSvgCanvas2D.prototype.foAltText="[Object]";mxSvgCanvas2D.prototype.foOffset=0;mxSvgCanvas2D.prototype.textOffset=0;mxSvgCanvas2D.prototype.imageOffset=0;mxSvgCanvas2D.prototype.strokeTolerance=0;mxSvgCanvas2D.prototype.minStrokeWidth=1;mxSvgCanvas2D.prototype.refCount=0;mxSvgCanvas2D.prototype.blockImagePointerEvents=!1;mxSvgCanvas2D.prototype.lineHeightCorrection=1;mxSvgCanvas2D.prototype.pointerEventsValue="all";
mxSvgCanvas2D.prototype.fontMetricsPadding=10;mxSvgCanvas2D.prototype.cacheOffsetSize=!0;mxSvgCanvas2D.prototype.format=function(a){return parseFloat(parseFloat(a).toFixed(2))};mxSvgCanvas2D.prototype.getBaseUrl=function(){var a=window.location.href,b=a.lastIndexOf("#");0<b&&(a=a.substring(0,b));return a};mxSvgCanvas2D.prototype.reset=function(){mxAbstractCanvas2D.prototype.reset.apply(this,arguments);this.gradients=[]};
mxSvgCanvas2D.prototype.createStyle=function(a){a=this.createElement("style");a.setAttribute("type","text/css");mxUtils.write(a,"svg{font-family:"+mxConstants.DEFAULT_FONTFAMILY+";font-size:"+mxConstants.DEFAULT_FONTSIZE+";fill:none;stroke-miterlimit:10}");return a};
mxSvgCanvas2D.prototype.createElement=function(a,b){if(null!=this.root.ownerDocument.createElementNS)return this.root.ownerDocument.createElementNS(b||mxConstants.NS_SVG,a);var c=this.root.ownerDocument.createElement(a);null!=b&&c.setAttribute("xmlns",b);return c};
mxSvgCanvas2D.prototype.createAlternateContent=function(a,b,c,d,e,f,g,k,l,m,n,p,q){return null!=this.foAltText?(a=this.state,b=this.createElement("text"),b.setAttribute("x",Math.round(d/2)),b.setAttribute("y",Math.round((e+a.fontSize)/2)),b.setAttribute("fill",a.fontColor||"black"),b.setAttribute("text-anchor","middle"),b.setAttribute("font-size",a.fontSize+"px"),b.setAttribute("font-family",a.fontFamily),(a.fontStyle&mxConstants.FONT_BOLD)==mxConstants.FONT_BOLD&&b.setAttribute("font-weight","bold"),
@ -306,7 +306,7 @@ mxSvgCanvas2D.prototype.addNode=function(a,b){var c=this.node,d=this.state;if(nu
c.setAttribute("transform",d.transform);d.shadow&&this.root.appendChild(this.createShadow(c));0<this.strokeTolerance&&!a&&this.root.appendChild(this.createTolerance(c));!this.pointerEvents||"path"==c.nodeName&&this.path[this.path.length-1]!=this.closeOp?this.pointerEvents||null!=this.originalRoot||c.setAttribute("pointer-events","none"):c.setAttribute("pointer-events",this.pointerEventsValue);("rect"!=c.nodeName&&"path"!=c.nodeName&&"ellipse"!=c.nodeName||"none"!=c.getAttribute("fill")&&"transparent"!=
c.getAttribute("fill")||"none"!=c.getAttribute("stroke")||"none"!=c.getAttribute("pointer-events"))&&this.root.appendChild(c);this.node=null}};
mxSvgCanvas2D.prototype.updateFill=function(){var a=this.state;(1>a.alpha||1>a.fillAlpha)&&this.node.setAttribute("fill-opacity",a.alpha*a.fillAlpha);if(null!=a.fillColor)if(null!=a.gradientColor)if(a=this.getSvgGradient(a.fillColor,a.gradientColor,a.gradientFillAlpha,a.gradientAlpha,a.gradientDirection),mxClient.IS_CHROME_APP||mxClient.IS_IE||mxClient.IS_IE11||mxClient.IS_EDGE||this.root.ownerDocument!=document)this.node.setAttribute("fill","url(#"+a+")");else{var b=this.getBaseUrl().replace(/([\(\)])/g,
"\\$1");this.node.setAttribute("fill","url("+b+"#"+a+")")}else this.node.setAttribute("fill",a.fillColor.toLowerCase())};mxSvgCanvas2D.prototype.getCurrentStrokeWidth=function(){return Math.max(1,this.format(this.state.strokeWidth*this.state.scale))};
"\\$1");this.node.setAttribute("fill","url("+b+"#"+a+")")}else this.node.setAttribute("fill",a.fillColor.toLowerCase())};mxSvgCanvas2D.prototype.getCurrentStrokeWidth=function(){return Math.max(this.minStrokeWidth,this.format(this.state.strokeWidth*this.state.scale))};
mxSvgCanvas2D.prototype.updateStroke=function(){var a=this.state;this.node.setAttribute("stroke",a.strokeColor.toLowerCase());(1>a.alpha||1>a.strokeAlpha)&&this.node.setAttribute("stroke-opacity",a.alpha*a.strokeAlpha);var b=this.getCurrentStrokeWidth();1!=b&&this.node.setAttribute("stroke-width",b);"path"==this.node.nodeName&&this.updateStrokeAttributes();a.dashed&&this.node.setAttribute("stroke-dasharray",this.createDashPattern((a.fixDash?1:a.strokeWidth)*a.scale))};
mxSvgCanvas2D.prototype.updateStrokeAttributes=function(){var a=this.state;null!=a.lineJoin&&"miter"!=a.lineJoin&&this.node.setAttribute("stroke-linejoin",a.lineJoin);if(null!=a.lineCap){var b=a.lineCap;"flat"==b&&(b="butt");"butt"!=b&&this.node.setAttribute("stroke-linecap",b)}null==a.miterLimit||this.styleEnabled&&10==a.miterLimit||this.node.setAttribute("stroke-miterlimit",a.miterLimit)};
mxSvgCanvas2D.prototype.createDashPattern=function(a){var b=[];if("string"===typeof this.state.dashPattern){var c=this.state.dashPattern.split(" ");if(0<c.length)for(var d=0;d<c.length;d++)b[d]=Number(c[d])*a}return b.join(" ")};
@ -403,9 +403,9 @@ b),a.roundrect(g+Number(c.getAttribute("x"))*l,k+Number(c.getAttribute("y"))*m,n
else if("text"==f){if(!b.outline){n=this.evaluateTextAttribute(c,"str",b);d="1"==c.getAttribute("vertical")?-90:0;if("0"==c.getAttribute("align-shape")){var p=b.rotation,q=1==mxUtils.getValue(b.style,mxConstants.STYLE_FLIPH,0);b=1==mxUtils.getValue(b.style,mxConstants.STYLE_FLIPV,0);d=q&&b?d-p:q||b?d+p:d-p}d-=c.getAttribute("rotation");a.text(g+Number(c.getAttribute("x"))*l,k+Number(c.getAttribute("y"))*m,0,0,n,c.getAttribute("align")||"left",c.getAttribute("valign")||"top",!1,"",null,!1,d)}}else if("include-shape"==
f)p=mxStencilRegistry.getStencil(c.getAttribute("name")),null!=p&&(g+=Number(c.getAttribute("x"))*l,k+=Number(c.getAttribute("y"))*m,n=Number(c.getAttribute("w"))*l,d=Number(c.getAttribute("h"))*m,p.drawShape(a,b,g,k,n,d));else if("fillstroke"==f)a.fillAndStroke();else if("fill"==f)a.fill();else if("stroke"==f)a.stroke();else if("strokewidth"==f)l="1"==c.getAttribute("fixed")?1:n,a.setStrokeWidth(Number(c.getAttribute("width"))*l);else if("dashed"==f)a.setDashed("1"==c.getAttribute("dashed"));else if("dashpattern"==
f){if(c=c.getAttribute("pattern"),null!=c){c=c.split(" ");l=[];for(m=0;m<c.length;m++)0<c[m].length&&l.push(Number(c[m])*n);c=l.join(" ");a.setDashPattern(c)}}else"strokecolor"==f?a.setStrokeColor(c.getAttribute("color")):"linecap"==f?a.setLineCap(c.getAttribute("cap")):"linejoin"==f?a.setLineJoin(c.getAttribute("join")):"miterlimit"==f?a.setMiterLimit(Number(c.getAttribute("limit"))):"fillcolor"==f?a.setFillColor(c.getAttribute("color")):"alpha"==f?a.setAlpha(c.getAttribute("alpha")):"fontcolor"==
f?a.setFontColor(c.getAttribute("color")):"fontstyle"==f?a.setFontStyle(c.getAttribute("style")):"fontfamily"==f?a.setFontFamily(c.getAttribute("family")):"fontsize"==f&&a.setFontSize(Number(c.getAttribute("size"))*n);!e||"fillstroke"!=f&&"fill"!=f&&"stroke"!=f||a.setShadow(!1)};function mxShape(a){this.stencil=a;this.initStyles()}mxShape.prototype.dialect=null;mxShape.prototype.scale=1;mxShape.prototype.antiAlias=!0;mxShape.prototype.bounds=null;mxShape.prototype.points=null;
mxShape.prototype.node=null;mxShape.prototype.state=null;mxShape.prototype.style=null;mxShape.prototype.boundingBox=null;mxShape.prototype.stencil=null;mxShape.prototype.svgStrokeTolerance=8;mxShape.prototype.pointerEvents=!0;mxShape.prototype.svgPointerEvents="all";mxShape.prototype.shapePointerEvents=!1;mxShape.prototype.stencilPointerEvents=!1;mxShape.prototype.vmlScale=1;mxShape.prototype.outline=!1;mxShape.prototype.visible=!0;mxShape.prototype.useSvgBoundingBox=!1;
mxShape.prototype.init=function(a){null==this.node&&(this.node=this.create(a),null!=a&&a.appendChild(this.node))};mxShape.prototype.initStyles=function(a){this.strokewidth=1;this.rotation=0;this.strokeOpacity=this.fillOpacity=this.opacity=100;this.flipV=this.flipH=!1};mxShape.prototype.isParseVml=function(){return!0};mxShape.prototype.isHtmlAllowed=function(){return!1};
f?a.setFontColor(c.getAttribute("color")):"fontstyle"==f?a.setFontStyle(c.getAttribute("style")):"fontfamily"==f?a.setFontFamily(c.getAttribute("family")):"fontsize"==f&&a.setFontSize(Number(c.getAttribute("size"))*n);!e||"fillstroke"!=f&&"fill"!=f&&"stroke"!=f||a.setShadow(!1)};function mxShape(a){this.stencil=a;this.initStyles()}mxShape.prototype.dialect=null;mxShape.prototype.scale=1;mxShape.prototype.antiAlias=!0;mxShape.prototype.minSvgStrokeWidth=1;mxShape.prototype.bounds=null;
mxShape.prototype.points=null;mxShape.prototype.node=null;mxShape.prototype.state=null;mxShape.prototype.style=null;mxShape.prototype.boundingBox=null;mxShape.prototype.stencil=null;mxShape.prototype.svgStrokeTolerance=8;mxShape.prototype.pointerEvents=!0;mxShape.prototype.svgPointerEvents="all";mxShape.prototype.shapePointerEvents=!1;mxShape.prototype.stencilPointerEvents=!1;mxShape.prototype.vmlScale=1;mxShape.prototype.outline=!1;mxShape.prototype.visible=!0;
mxShape.prototype.useSvgBoundingBox=!1;mxShape.prototype.init=function(a){null==this.node&&(this.node=this.create(a),null!=a&&a.appendChild(this.node))};mxShape.prototype.initStyles=function(a){this.strokewidth=1;this.rotation=0;this.strokeOpacity=this.fillOpacity=this.opacity=100;this.flipV=this.flipH=!1};mxShape.prototype.isParseVml=function(){return!0};mxShape.prototype.isHtmlAllowed=function(){return!1};
mxShape.prototype.getSvgScreenOffset=function(){return 1==mxUtils.mod(Math.max(1,Math.round((this.stencil&&"inherit"!=this.stencil.strokewidth?Number(this.stencil.strokewidth):this.strokewidth)*this.scale)),2)?.5:0};mxShape.prototype.create=function(a){return null!=a&&null!=a.ownerSVGElement?this.createSvg(a):8==document.documentMode||!mxClient.IS_VML||this.dialect!=mxConstants.DIALECT_VML&&this.isHtmlAllowed()?this.createHtml(a):this.createVml(a)};
mxShape.prototype.createSvg=function(){return document.createElementNS(mxConstants.NS_SVG,"g")};mxShape.prototype.createVml=function(){var a=document.createElement(mxClient.VML_PREFIX+":group");a.style.position="absolute";return a};mxShape.prototype.createHtml=function(){var a=document.createElement("div");a.style.position="absolute";return a};mxShape.prototype.reconfigure=function(){this.redraw()};
mxShape.prototype.redraw=function(){this.updateBoundsFromPoints();this.visible&&this.checkBounds()?(this.node.style.visibility="visible",this.clear(),"DIV"!=this.node.nodeName||!this.isHtmlAllowed()&&mxClient.IS_VML?this.redrawShape():this.redrawHtmlShape(),this.updateBoundingBox()):(this.node.style.visibility="hidden",this.boundingBox=null)};
@ -416,7 +416,7 @@ mxShape.prototype.getLabelBounds=function(a){var b=mxUtils.getValue(this.style,m
mxShape.prototype.checkBounds=function(){return!isNaN(this.scale)&&isFinite(this.scale)&&0<this.scale&&null!=this.bounds&&!isNaN(this.bounds.x)&&!isNaN(this.bounds.y)&&!isNaN(this.bounds.width)&&!isNaN(this.bounds.height)&&0<this.bounds.width&&0<this.bounds.height};mxShape.prototype.createVmlGroup=function(){var a=document.createElement(mxClient.VML_PREFIX+":group");a.style.position="absolute";a.style.width=this.node.style.width;a.style.height=this.node.style.height;return a};
mxShape.prototype.redrawShape=function(){var a=this.createCanvas();null!=a&&(a.pointerEvents=this.pointerEvents,this.paint(a),this.node!=a.root&&this.node.insertAdjacentHTML("beforeend",a.root.outerHTML),"DIV"==this.node.nodeName&&8==document.documentMode&&(this.node.style.filter="",mxUtils.addTransparentBackgroundFilter(this.node)),this.destroyCanvas(a))};
mxShape.prototype.createCanvas=function(){var a=null;null!=this.node.ownerSVGElement?a=this.createSvgCanvas():mxClient.IS_VML&&(this.updateVmlContainer(),a=this.createVmlCanvas());null!=a&&this.outline&&(a.setStrokeWidth(this.strokewidth),a.setStrokeColor(this.stroke),null!=this.isDashed&&a.setDashed(this.isDashed),a.setStrokeWidth=function(){},a.setStrokeColor=function(){},a.setFillColor=function(){},a.setGradient=function(){},a.setDashed=function(){});return a};
mxShape.prototype.createSvgCanvas=function(){var a=new mxSvgCanvas2D(this.node,!1);a.strokeTolerance=this.pointerEvents?this.svgStrokeTolerance:0;a.pointerEventsValue=this.svgPointerEvents;a.blockImagePointerEvents=mxClient.IS_FF;var b=this.getSvgScreenOffset();0!=b?this.node.setAttribute("transform","translate("+b+","+b+")"):this.node.removeAttribute("transform");this.antiAlias||(a.format=function(a){return Math.round(parseFloat(a))});return a};
mxShape.prototype.createSvgCanvas=function(){var a=new mxSvgCanvas2D(this.node,!1);a.strokeTolerance=this.pointerEvents?this.svgStrokeTolerance:0;a.pointerEventsValue=this.svgPointerEvents;a.blockImagePointerEvents=mxClient.IS_FF;var b=this.getSvgScreenOffset();0!=b?this.node.setAttribute("transform","translate("+b+","+b+")"):this.node.removeAttribute("transform");a.minStrokeWidth=this.minSvgStrokeWidth;this.antiAlias||(a.format=function(a){return Math.round(parseFloat(a))});return a};
mxShape.prototype.createVmlCanvas=function(){var a=8==document.documentMode&&this.isParseVml()?this.createVmlGroup():this.node,b=new mxVmlCanvas2D(a,!1);""!=a.tagUrn&&(a.coordsize=Math.max(1,Math.round(this.bounds.width))*this.vmlScale+","+Math.max(1,Math.round(this.bounds.height))*this.vmlScale,b.scale(this.vmlScale),b.vmlScale=this.vmlScale);a=this.scale;b.translate(-Math.round(this.bounds.x/a),-Math.round(this.bounds.y/a));return b};
mxShape.prototype.updateVmlContainer=function(){this.node.style.left=Math.round(this.bounds.x)+"px";this.node.style.top=Math.round(this.bounds.y)+"px";var a=Math.max(1,Math.round(this.bounds.height));this.node.style.width=Math.max(1,Math.round(this.bounds.width))+"px";this.node.style.height=a+"px";this.node.style.overflow="visible"};mxShape.prototype.redrawHtmlShape=function(){this.updateHtmlBounds(this.node);this.updateHtmlFilters(this.node);this.updateHtmlColors(this.node)};
mxShape.prototype.updateHtmlFilters=function(a){var b="";100>this.opacity&&(b+="alpha(opacity="+this.opacity+")");this.isShadow&&(b+="progid:DXImageTransform.Microsoft.dropShadow (OffX='"+Math.round(mxConstants.SHADOW_OFFSET_X*this.scale)+"', OffY='"+Math.round(mxConstants.SHADOW_OFFSET_Y*this.scale)+"', Color='"+mxConstants.VML_SHADOWCOLOR+"')");if(null!=this.fill&&this.fill!=mxConstants.NONE&&this.gradient&&this.gradient!=mxConstants.NONE){var c=this.fill,d=this.gradient,e="0",f={east:0,south:1,
@ -906,10 +906,10 @@ k==mxConstants.ALIGN_CENTER&&l==mxConstants.ALIGN_MIDDLE?a.shape.getLabelBounds(
c.height=Math.max(d,a.text.boundingBox.height)):(c.width=Math.max(c.width,a.text.boundingBox.width),c.height=Math.max(c.height,a.text.boundingBox.height)));this.graph.getModel().isVertex(a.cell)&&(b=mxUtils.getValue(a.style,mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER),b==mxConstants.ALIGN_LEFT?c.x-=a.width:b==mxConstants.ALIGN_RIGHT&&(c.x+=a.width),b=mxUtils.getValue(a.style,mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE),b==mxConstants.ALIGN_TOP?c.y-=a.height:b==
mxConstants.ALIGN_BOTTOM&&(c.y+=a.height))}return new mxRectangle(Math.round(c.x),Math.round(c.y),Math.round(c.width),Math.round(c.height))};mxCellEditor.prototype.getEmptyLabelText=function(a){return this.emptyLabelText};mxCellEditor.prototype.getEditingCell=function(){return this.editingCell};
mxCellEditor.prototype.destroy=function(){null!=this.textarea&&(mxEvent.release(this.textarea),null!=this.textarea.parentNode&&this.textarea.parentNode.removeChild(this.textarea),this.textarea=null);null!=this.changeHandler&&(this.graph.getModel().removeListener(this.changeHandler),this.changeHandler=null);this.zoomHandler&&(this.graph.view.removeListener(this.zoomHandler),this.zoomHandler=null)};function mxCellRenderer(){}mxCellRenderer.defaultShapes={};
mxCellRenderer.prototype.defaultEdgeShape=mxConnector;mxCellRenderer.prototype.defaultVertexShape=mxRectangleShape;mxCellRenderer.prototype.defaultTextShape=mxText;mxCellRenderer.prototype.legacyControlPosition=!0;mxCellRenderer.prototype.legacySpacing=!0;mxCellRenderer.prototype.antiAlias=!0;mxCellRenderer.prototype.forceControlClickHandler=!1;mxCellRenderer.registerShape=function(a,b){mxCellRenderer.defaultShapes[a]=b};mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE,mxRectangleShape);
mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE,mxEllipse);mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS,mxRhombus);mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER,mxCylinder);mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR,mxConnector);mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR,mxActor);mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE,mxTriangle);mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON,mxHexagon);
mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD,mxCloud);mxCellRenderer.registerShape(mxConstants.SHAPE_LINE,mxLine);mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW,mxArrow);mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW_CONNECTOR,mxArrowConnector);mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE,mxDoubleEllipse);mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE,mxSwimlane);mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE,mxImageShape);
mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL,mxLabel);mxCellRenderer.prototype.initializeShape=function(a){a.shape.dialect=a.view.graph.dialect;this.configureShape(a);a.shape.init(a.view.getDrawPane())};mxCellRenderer.prototype.createShape=function(a){var b=null;null!=a.style&&(b=mxStencilRegistry.getStencil(a.style[mxConstants.STYLE_SHAPE]),b=null!=b?new mxShape(b):new (this.getShapeConstructor(a)));return b};
mxCellRenderer.prototype.defaultEdgeShape=mxConnector;mxCellRenderer.prototype.defaultVertexShape=mxRectangleShape;mxCellRenderer.prototype.defaultTextShape=mxText;mxCellRenderer.prototype.legacyControlPosition=!0;mxCellRenderer.prototype.legacySpacing=!0;mxCellRenderer.prototype.antiAlias=!0;mxCellRenderer.prototype.minSvgStrokeWidth=1;mxCellRenderer.prototype.forceControlClickHandler=!1;mxCellRenderer.registerShape=function(a,b){mxCellRenderer.defaultShapes[a]=b};
mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE,mxRectangleShape);mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE,mxEllipse);mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS,mxRhombus);mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER,mxCylinder);mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR,mxConnector);mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR,mxActor);mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE,mxTriangle);
mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON,mxHexagon);mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD,mxCloud);mxCellRenderer.registerShape(mxConstants.SHAPE_LINE,mxLine);mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW,mxArrow);mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW_CONNECTOR,mxArrowConnector);mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE,mxDoubleEllipse);mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE,mxSwimlane);
mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE,mxImageShape);mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL,mxLabel);mxCellRenderer.prototype.initializeShape=function(a){a.shape.dialect=a.view.graph.dialect;this.configureShape(a);a.shape.init(a.view.getDrawPane())};mxCellRenderer.prototype.createShape=function(a){var b=null;null!=a.style&&(b=mxStencilRegistry.getStencil(a.style[mxConstants.STYLE_SHAPE]),b=null!=b?new mxShape(b):new (this.getShapeConstructor(a)));return b};
mxCellRenderer.prototype.createIndicatorShape=function(a){a.shape.indicatorShape=this.getShape(a.view.graph.getIndicatorShape(a))};mxCellRenderer.prototype.getShape=function(a){return null!=a?mxCellRenderer.defaultShapes[a]:null};mxCellRenderer.prototype.getShapeConstructor=function(a){var b=this.getShape(a.style[mxConstants.STYLE_SHAPE]);null==b&&(b=a.view.graph.getModel().isEdge(a.cell)?this.defaultEdgeShape:this.defaultVertexShape);return b};
mxCellRenderer.prototype.configureShape=function(a){a.shape.apply(a);a.shape.image=a.view.graph.getImage(a);a.shape.indicatorColor=a.view.graph.getIndicatorColor(a);a.shape.indicatorStrokeColor=a.style[mxConstants.STYLE_INDICATOR_STROKECOLOR];a.shape.indicatorGradientColor=a.view.graph.getIndicatorGradientColor(a);a.shape.indicatorDirection=a.style[mxConstants.STYLE_INDICATOR_DIRECTION];a.shape.indicatorImage=a.view.graph.getIndicatorImage(a);this.postConfigureShape(a)};
mxCellRenderer.prototype.postConfigureShape=function(a){null!=a.shape&&(this.resolveColor(a,"indicatorColor",mxConstants.STYLE_FILLCOLOR),this.resolveColor(a,"indicatorGradientColor",mxConstants.STYLE_GRADIENTCOLOR),this.resolveColor(a,"fill",mxConstants.STYLE_FILLCOLOR),this.resolveColor(a,"stroke",mxConstants.STYLE_STROKECOLOR),this.resolveColor(a,"gradient",mxConstants.STYLE_GRADIENTCOLOR))};
@ -951,9 +951,9 @@ f),g,k,new mxPoint(a.getCenterX(),a.getCenterY())),e=f.x,f=f.y)}return a.view.gr
mxCellRenderer.prototype.insertStateAfter=function(a,b,c){for(var d=this.getShapesForState(a),e=0;e<d.length;e++)if(null!=d[e]&&null!=d[e].node){var f=d[e].node.parentNode!=a.view.getDrawPane()&&d[e].node.parentNode!=a.view.getOverlayPane(),g=f?c:b;if(null!=g&&g.nextSibling!=d[e].node)null==g.nextSibling?g.parentNode.appendChild(d[e].node):g.parentNode.insertBefore(d[e].node,g.nextSibling);else if(null==g)if(d[e].node.parentNode==a.view.graph.container){for(g=a.view.canvas;null!=g&&g.parentNode!=
a.view.graph.container;)g=g.parentNode;null!=g&&null!=g.nextSibling?g.nextSibling!=d[e].node&&d[e].node.parentNode.insertBefore(d[e].node,g.nextSibling):d[e].node.parentNode.appendChild(d[e].node)}else null!=d[e].node.parentNode.firstChild&&d[e].node.parentNode.firstChild!=d[e].node&&d[e].node.parentNode.insertBefore(d[e].node,d[e].node.parentNode.firstChild);f?c=d[e].node:b=d[e].node}return[b,c]};mxCellRenderer.prototype.getShapesForState=function(a){return[a.shape,a.text,a.control]};
mxCellRenderer.prototype.redraw=function(a,b,c){b=this.redrawShape(a,b,c);null==a.shape||null!=c&&!c||(this.redrawLabel(a,b),this.redrawCellOverlays(a,b),this.redrawControl(a,b))};
mxCellRenderer.prototype.redrawShape=function(a,b,c){var d=a.view.graph.model,e=!1;null!=a.shape&&null!=a.shape.style&&null!=a.style&&a.shape.style[mxConstants.STYLE_SHAPE]!=a.style[mxConstants.STYLE_SHAPE]&&(a.shape.destroy(),a.shape=null);null==a.shape&&null!=a.view.graph.container&&a.cell!=a.view.currentRoot&&(d.isVertex(a.cell)||d.isEdge(a.cell))?(a.shape=this.createShape(a),null!=a.shape&&(a.shape.antiAlias=this.antiAlias,this.createIndicatorShape(a),this.initializeShape(a),this.createCellOverlays(a),
this.installListeners(a),a.view.graph.selectionCellsHandler.updateHandler(a))):b||null==a.shape||mxUtils.equalEntries(a.shape.style,a.style)&&!this.checkPlaceholderStyles(a)||(a.shape.resetStyles(),this.configureShape(a),a.view.graph.selectionCellsHandler.updateHandler(a),b=!0);null!=a.shape&&(this.createControl(a),b||this.isShapeInvalid(a,a.shape))&&(null!=a.absolutePoints?(a.shape.points=a.absolutePoints.slice(),a.shape.bounds=null):(a.shape.points=null,a.shape.bounds=new mxRectangle(a.x,a.y,a.width,
a.height)),a.shape.scale=a.view.scale,null==c||c?this.doRedrawShape(a):a.shape.updateBoundingBox(),e=!0);return e};mxCellRenderer.prototype.doRedrawShape=function(a){a.shape.redraw()};mxCellRenderer.prototype.isShapeInvalid=function(a,b){return null==b.bounds||b.scale!=a.view.scale||null==a.absolutePoints&&!b.bounds.equals(a)||null!=a.absolutePoints&&!mxUtils.equalPoints(b.points,a.absolutePoints)};
mxCellRenderer.prototype.redrawShape=function(a,b,c){var d=a.view.graph.model,e=!1;null!=a.shape&&null!=a.shape.style&&null!=a.style&&a.shape.style[mxConstants.STYLE_SHAPE]!=a.style[mxConstants.STYLE_SHAPE]&&(a.shape.destroy(),a.shape=null);null==a.shape&&null!=a.view.graph.container&&a.cell!=a.view.currentRoot&&(d.isVertex(a.cell)||d.isEdge(a.cell))?(a.shape=this.createShape(a),null!=a.shape&&(a.shape.minSvgStrokeWidth=this.minSvgStrokeWidth,a.shape.antiAlias=this.antiAlias,this.createIndicatorShape(a),
this.initializeShape(a),this.createCellOverlays(a),this.installListeners(a),a.view.graph.selectionCellsHandler.updateHandler(a))):b||null==a.shape||mxUtils.equalEntries(a.shape.style,a.style)&&!this.checkPlaceholderStyles(a)||(a.shape.resetStyles(),this.configureShape(a),a.view.graph.selectionCellsHandler.updateHandler(a),b=!0);null!=a.shape&&(this.createControl(a),b||this.isShapeInvalid(a,a.shape))&&(null!=a.absolutePoints?(a.shape.points=a.absolutePoints.slice(),a.shape.bounds=null):(a.shape.points=
null,a.shape.bounds=new mxRectangle(a.x,a.y,a.width,a.height)),a.shape.scale=a.view.scale,null==c||c?this.doRedrawShape(a):a.shape.updateBoundingBox(),e=!0);return e};mxCellRenderer.prototype.doRedrawShape=function(a){a.shape.redraw()};mxCellRenderer.prototype.isShapeInvalid=function(a,b){return null==b.bounds||b.scale!=a.view.scale||null==a.absolutePoints&&!b.bounds.equals(a)||null!=a.absolutePoints&&!mxUtils.equalPoints(b.points,a.absolutePoints)};
mxCellRenderer.prototype.destroy=function(a){null!=a.shape&&(null!=a.text&&(a.text.destroy(),a.text=null),null!=a.overlays&&(a.overlays.visit(function(a,c){c.destroy()}),a.overlays=null),null!=a.control&&(a.control.destroy(),a.control=null),a.shape.destroy(),a.shape=null)};
var mxEdgeStyle={EntityRelation:function(a,b,c,d,e){var f=a.view,g=f.graph;d=mxUtils.getValue(a.style,mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)*f.scale;var k=a.absolutePoints,l=k[0],m=k[k.length-1],k=!1;if(null!=l)b=new mxCellState,b.x=l.x,b.y=l.y;else if(null!=b){var n=mxUtils.getPortConstraints(b,a,!0,mxConstants.DIRECTION_MASK_NONE);n!=mxConstants.DIRECTION_MASK_NONE&&n!=mxConstants.DIRECTION_MASK_WEST+mxConstants.DIRECTION_MASK_EAST?k=n==mxConstants.DIRECTION_MASK_WEST:(l=g.getCellGeometry(b.cell),
l.relative?k=.5>=l.x:null!=c&&(k=c.x+c.width<b.x))}else return;l=!0;null!=m?(c=new mxCellState,c.x=m.x,c.y=m.y):null!=c&&(n=mxUtils.getPortConstraints(c,a,!1,mxConstants.DIRECTION_MASK_NONE),n!=mxConstants.DIRECTION_MASK_NONE&&n!=mxConstants.DIRECTION_MASK_WEST+mxConstants.DIRECTION_MASK_EAST?l=n==mxConstants.DIRECTION_MASK_WEST:(a=g.getCellGeometry(c.cell),a.relative?l=.5>=a.x:null!=b&&(l=b.x+b.width<c.x)));null!=b&&null!=c&&(a=k?b.x:b.x+b.width,b=f.getRoutingCenterY(b),g=l?c.x:c.x+c.width,c=f.getRoutingCenterY(c),
@ -1102,11 +1102,11 @@ b=this.container.scrollHeight+d-f):(b=Math.max(e.clientHeight,e.scrollHeight)+d-
mxGraph.prototype.getBorderSizes=function(){var a=mxUtils.getCurrentStyle(this.container);return new mxRectangle(mxUtils.parseCssNumber(a.paddingLeft)+("none"!=a.borderLeftStyle?mxUtils.parseCssNumber(a.borderLeftWidth):0),mxUtils.parseCssNumber(a.paddingTop)+("none"!=a.borderTopStyle?mxUtils.parseCssNumber(a.borderTopWidth):0),mxUtils.parseCssNumber(a.paddingRight)+("none"!=a.borderRightStyle?mxUtils.parseCssNumber(a.borderRightWidth):0),mxUtils.parseCssNumber(a.paddingBottom)+("none"!=a.borderBottomStyle?
mxUtils.parseCssNumber(a.borderBottomWidth):0))};mxGraph.prototype.getPreferredPageSize=function(a,b,c){a=this.view.translate;var d=this.pageFormat,e=this.pageScale,d=new mxRectangle(0,0,Math.ceil(d.width*e),Math.ceil(d.height*e));return new mxRectangle(0,0,(this.pageBreaksVisible?Math.ceil(b/d.width):1)*d.width+2+a.x,(this.pageBreaksVisible?Math.ceil(c/d.height):1)*d.height+2+a.y)};
mxGraph.prototype.fit=function(a,b,c,d,e,f,g){if(null!=this.container){a=null!=a?a:this.getBorder();b=null!=b?b:!1;c=null!=c?c:0;d=null!=d?d:!0;e=null!=e?e:!1;f=null!=f?f:!1;var k=this.getBorderSizes(),l=this.container.offsetWidth-k.x-k.width-1,m=null!=g?g:this.container.offsetHeight-k.y-k.height-1;g=this.view.getGraphBounds();if(0<g.width&&0<g.height){b&&null!=g.x&&null!=g.y&&(g=g.clone(),g.width+=g.x,g.height+=g.y,g.x=0,g.y=0);var k=this.view.scale,n=g.width/k,p=g.height/k;null!=this.backgroundImage&&
(n=Math.max(n,this.backgroundImage.width-g.x/k),p=Math.max(p,this.backgroundImage.height-g.y/k));var q=(b?a:2*a)+c,l=l-q,m=m-q;e=e?m/p:f?l/n:Math.min(l/n,m/p);null!=this.minFitScale&&(e=Math.max(e,this.minFitScale));null!=this.maxFitScale&&(e=Math.min(e,this.maxFitScale));if(d)b?this.view.scale!=e&&this.view.setScale(e):mxUtils.hasScrollbars(this.container)?(this.view.setScale(e),a=this.getGraphBounds(),null!=a.x&&(this.container.scrollLeft=a.x),null!=a.y&&(this.container.scrollTop=a.y)):this.view.scaleAndTranslate(e,
(n=Math.max(n,this.backgroundImage.width-g.x/k),p=Math.max(p,this.backgroundImage.height-g.y/k));var q=(b?a:2*a)+c+1,l=l-q,m=m-q;e=e?m/p:f?l/n:Math.min(l/n,m/p);null!=this.minFitScale&&(e=Math.max(e,this.minFitScale));null!=this.maxFitScale&&(e=Math.min(e,this.maxFitScale));if(d)b?this.view.scale!=e&&this.view.setScale(e):mxUtils.hasScrollbars(this.container)?(this.view.setScale(e),a=this.getGraphBounds(),null!=a.x&&(this.container.scrollLeft=a.x),null!=a.y&&(this.container.scrollTop=a.y)):this.view.scaleAndTranslate(e,
null!=g.x?Math.floor(this.view.translate.x-g.x/k+a/e+c/2):a,null!=g.y?Math.floor(this.view.translate.y-g.y/k+a/e+c/2):a);else return e}}return this.view.scale};
mxGraph.prototype.sizeDidChange=function(){var a=this.getGraphBounds();if(null!=this.container){var b=this.getBorder(),c=Math.max(0,a.x+a.width+b),b=Math.max(0,a.y+a.height+b);null!=this.minimumContainerSize&&(c=Math.max(c,this.minimumContainerSize.width),b=Math.max(b,this.minimumContainerSize.height));this.resizeContainer&&this.doResizeContainer(c,b);if(this.preferPageSize||!mxClient.IS_IE&&this.pageVisible){var d=this.getPreferredPageSize(a,Math.max(1,c),Math.max(1,b));null!=d&&(c=d.width*this.view.scale,
b=d.height*this.view.scale)}null!=this.minimumGraphSize&&(c=Math.max(c,this.minimumGraphSize.width*this.view.scale),b=Math.max(b,this.minimumGraphSize.height*this.view.scale));c=Math.ceil(c);b=Math.ceil(b);this.dialect==mxConstants.DIALECT_SVG?(d=this.view.getDrawPane().ownerSVGElement,d.style.minWidth=Math.max(1,c)+"px",d.style.minHeight=Math.max(1,b)+"px",d.style.width="100%",d.style.height="100%"):mxClient.IS_QUIRKS?this.view.updateHtmlCanvasSize(Math.max(1,c),Math.max(1,b)):(this.view.canvas.style.minWidth=
Math.max(1,c)+"px",this.view.canvas.style.minHeight=Math.max(1,b)+"px");this.updatePageBreaks(this.pageBreaksVisible,c,b)}this.fireEvent(new mxEventObject(mxEvent.SIZE,"bounds",a))};mxGraph.prototype.doResizeContainer=function(a,b){null!=this.maximumContainerSize&&(a=Math.min(this.maximumContainerSize.width,a),b=Math.min(this.maximumContainerSize.height,b));this.container.style.width=Math.ceil(a)+"px";this.container.style.height=Math.ceil(b)+"px"};
mxGraph.prototype.sizeDidChange=function(){var a=this.getGraphBounds();if(null!=this.container){var b=this.getBorder(),c=Math.max(0,a.x+a.width+2*b*this.view.scale),b=Math.max(0,a.y+a.height+2*b*this.view.scale);null!=this.minimumContainerSize&&(c=Math.max(c,this.minimumContainerSize.width),b=Math.max(b,this.minimumContainerSize.height));this.resizeContainer&&this.doResizeContainer(c,b);if(this.preferPageSize||!mxClient.IS_IE&&this.pageVisible){var d=this.getPreferredPageSize(a,Math.max(1,c),Math.max(1,
b));null!=d&&(c=d.width*this.view.scale,b=d.height*this.view.scale)}null!=this.minimumGraphSize&&(c=Math.max(c,this.minimumGraphSize.width*this.view.scale),b=Math.max(b,this.minimumGraphSize.height*this.view.scale));c=Math.ceil(c);b=Math.ceil(b);this.dialect==mxConstants.DIALECT_SVG?(d=this.view.getDrawPane().ownerSVGElement,d.style.minWidth=Math.max(1,c)+"px",d.style.minHeight=Math.max(1,b)+"px",d.style.width="100%",d.style.height="100%"):mxClient.IS_QUIRKS?this.view.updateHtmlCanvasSize(Math.max(1,
c),Math.max(1,b)):(this.view.canvas.style.minWidth=Math.max(1,c)+"px",this.view.canvas.style.minHeight=Math.max(1,b)+"px");this.updatePageBreaks(this.pageBreaksVisible,c,b)}this.fireEvent(new mxEventObject(mxEvent.SIZE,"bounds",a))};mxGraph.prototype.doResizeContainer=function(a,b){null!=this.maximumContainerSize&&(a=Math.min(this.maximumContainerSize.width,a),b=Math.min(this.maximumContainerSize.height,b));this.container.style.width=Math.ceil(a)+"px";this.container.style.height=Math.ceil(b)+"px"};
mxGraph.prototype.updatePageBreaks=function(a,b,c){b=this.view.scale;c=this.view.translate;var d=this.pageFormat,e=b*this.pageScale,f=new mxRectangle(0,0,d.width*e,d.height*e),d=mxRectangle.fromRectangle(this.getGraphBounds());d.width=Math.max(1,d.width);d.height=Math.max(1,d.height);f.x=Math.floor((d.x-c.x*b)/f.width)*f.width+c.x*b;f.y=Math.floor((d.y-c.y*b)/f.height)*f.height+c.y*b;d.width=Math.ceil((d.width+(d.x-f.x))/f.width)*f.width;d.height=Math.ceil((d.height+(d.y-f.y))/f.height)*f.height;
var g=(a=a&&Math.min(f.width,f.height)>this.minPageBreakDist)?Math.ceil(d.height/f.height)+1:0,k=a?Math.ceil(d.width/f.width)+1:0,l=(k-1)*f.width,m=(g-1)*f.height;null==this.horizontalPageBreaks&&0<g&&(this.horizontalPageBreaks=[]);null==this.verticalPageBreaks&&0<k&&(this.verticalPageBreaks=[]);a=mxUtils.bind(this,function(a){if(null!=a){for(var b=a==this.horizontalPageBreaks?g:k,c=0;c<=b;c++){var d=a==this.horizontalPageBreaks?[new mxPoint(Math.round(f.x),Math.round(f.y+c*f.height)),new mxPoint(Math.round(f.x+
l),Math.round(f.y+c*f.height))]:[new mxPoint(Math.round(f.x+c*f.width),Math.round(f.y)),new mxPoint(Math.round(f.x+c*f.width),Math.round(f.y+m))];null!=a[c]?(a[c].points=d,a[c].redraw()):(d=new mxPolyline(d,this.pageBreakColor),d.dialect=this.dialect,d.pointerEvents=!1,d.isDashed=this.pageBreakDashed,d.init(this.view.backgroundPane),d.redraw(),a[c]=d)}for(c=b;c<a.length;c++)a[c].destroy();a.splice(b,a.length-b)}});a(this.horizontalPageBreaks);a(this.verticalPageBreaks)};
@ -1307,10 +1307,10 @@ mxEvent.addGestureListeners(b,null,c,f);this.outline.fireMouseEvent(mxEvent.MOUS
this.selectionBorder.node.style.display;this.selectionBorder.node.style.cursor="move";this.update(!1)};mxOutline.prototype.isEnabled=function(){return this.enabled};mxOutline.prototype.setEnabled=function(a){this.enabled=a};mxOutline.prototype.setZoomEnabled=function(a){this.sizer.node.style.visibility=a?"visible":"hidden"};mxOutline.prototype.refresh=function(){this.update(!0)};
mxOutline.prototype.createSizer=function(){var a=null!=this.sizerImage?new mxImageShape(new mxRectangle(0,0,this.sizerImage.width,this.sizerImage.height),this.sizerImage.src):new mxRectangleShape(new mxRectangle(0,0,this.sizerSize,this.sizerSize),mxConstants.OUTLINE_HANDLE_FILLCOLOR,mxConstants.OUTLINE_HANDLE_STROKECOLOR);a.dialect=this.outline.dialect;return a};mxOutline.prototype.getSourceContainerSize=function(){return new mxRectangle(0,0,this.source.container.scrollWidth,this.source.container.scrollHeight)};
mxOutline.prototype.getOutlineOffset=function(a){return null};mxOutline.prototype.getSourceGraphBounds=function(){return this.source.getGraphBounds()};
mxOutline.prototype.update=function(a){if(null!=this.source&&null!=this.outline){var b=this.source.view.scale,c=this.getSourceGraphBounds(),c=new mxRectangle(c.x/b+this.source.panDx,c.y/b+this.source.panDy,c.width/b,c.height/b),d=new mxRectangle(0,0,this.source.container.clientWidth/b,this.source.container.clientHeight/b),e=c.clone();e.add(d);d=this.getSourceContainerSize();b=Math.min(Math.max(0,this.outline.container.clientWidth-this.border)/Math.max(d.width/b,e.width),Math.max(0,this.outline.container.clientHeight-
this.border)/Math.max(d.height/b,e.height));d=isNaN(b)?this.minScale:Math.max(this.minScale,b);if(0<d){this.outline.getView().scale!=d&&(this.outline.getView().scale=d,a=!0);b=this.outline.getView();b.currentRoot!=this.source.getView().currentRoot&&b.setCurrentRoot(this.source.getView().currentRoot);var e=this.source.view.translate,f=e.x+this.source.panDx,g=e.y+this.source.panDy,d=this.getOutlineOffset(d);null!=d&&(f+=d.x,g+=d.y);0>c.x&&(f-=c.x);0>c.y&&(g-=c.y);if(b.translate.x!=f||b.translate.y!=
g)b.translate.x=f,b.translate.y=g,a=!0;var c=b.translate,d=this.source.getView().scale,f=d/b.scale,g=1/b.scale,k=this.source.container;this.bounds=new mxRectangle((c.x-e.x-this.source.panDx)/g,(c.y-e.y-this.source.panDy)/g,k.clientWidth/f,k.clientHeight/f);this.bounds.x+=this.source.container.scrollLeft*b.scale/d;this.bounds.y+=this.source.container.scrollTop*b.scale/d;c=this.selectionBorder.bounds;if(c.x!=this.bounds.x||c.y!=this.bounds.y||c.width!=this.bounds.width||c.height!=this.bounds.height)this.selectionBorder.bounds=
this.bounds,this.selectionBorder.redraw();c=this.sizer.bounds;b=new mxRectangle(this.bounds.x+this.bounds.width-c.width/2,this.bounds.y+this.bounds.height-c.height/2,c.width,c.height);if(c.x!=b.x||c.y!=b.y||c.width!=b.width||c.height!=b.height)this.sizer.bounds=b,"hidden"!=this.sizer.node.style.visibility&&this.sizer.redraw();a&&this.outline.view.revalidate()}}};
mxOutline.prototype.update=function(a){if(null!=this.source&&null!=this.source.container&&null!=this.outline&&null!=this.outline.container){var b=this.source.view.scale,c=this.getSourceGraphBounds(),c=new mxRectangle(c.x/b+this.source.panDx,c.y/b+this.source.panDy,c.width/b,c.height/b),d=new mxRectangle(0,0,this.source.container.clientWidth/b,this.source.container.clientHeight/b),e=c.clone();e.add(d);d=this.getSourceContainerSize();b=Math.min(Math.max(0,this.outline.container.clientWidth-this.border)/
Math.max(d.width/b,e.width),Math.max(0,this.outline.container.clientHeight-this.border)/Math.max(d.height/b,e.height));d=isNaN(b)?this.minScale:Math.max(this.minScale,b);if(0<d){this.outline.getView().scale!=d&&(this.outline.getView().scale=d,a=!0);b=this.outline.getView();b.currentRoot!=this.source.getView().currentRoot&&b.setCurrentRoot(this.source.getView().currentRoot);var e=this.source.view.translate,f=e.x+this.source.panDx,g=e.y+this.source.panDy,d=this.getOutlineOffset(d);null!=d&&(f+=d.x,
g+=d.y);0>c.x&&(f-=c.x);0>c.y&&(g-=c.y);if(b.translate.x!=f||b.translate.y!=g)b.translate.x=f,b.translate.y=g,a=!0;var c=b.translate,d=this.source.getView().scale,f=d/b.scale,g=1/b.scale,k=this.source.container;this.bounds=new mxRectangle((c.x-e.x-this.source.panDx)/g,(c.y-e.y-this.source.panDy)/g,k.clientWidth/f,k.clientHeight/f);this.bounds.x+=this.source.container.scrollLeft*b.scale/d;this.bounds.y+=this.source.container.scrollTop*b.scale/d;c=this.selectionBorder.bounds;if(c.x!=this.bounds.x||
c.y!=this.bounds.y||c.width!=this.bounds.width||c.height!=this.bounds.height)this.selectionBorder.bounds=this.bounds,this.selectionBorder.redraw();c=this.sizer.bounds;b=new mxRectangle(this.bounds.x+this.bounds.width-c.width/2,this.bounds.y+this.bounds.height-c.height/2,c.width,c.height);if(c.x!=b.x||c.y!=b.y||c.width!=b.width||c.height!=b.height)this.sizer.bounds=b,"hidden"!=this.sizer.node.style.visibility&&this.sizer.redraw();a&&this.outline.view.revalidate()}}};
mxOutline.prototype.mouseDown=function(a,b){if(this.enabled&&this.showViewport){var c=mxEvent.isMouseEvent(b.getEvent())?0:this.source.tolerance,c=this.source.allowHandleBoundsCheck&&(mxClient.IS_IE||0<c)?new mxRectangle(b.getGraphX()-c,b.getGraphY()-c,2*c,2*c):null;this.zoom=b.isSource(this.sizer)||null!=c&&mxUtils.intersects(shape.bounds,c);this.startX=b.getX();this.startY=b.getY();this.active=!0;this.source.useScrollbarsForPanning&&mxUtils.hasScrollbars(this.source.container)?(this.dx0=this.source.container.scrollLeft,
this.dy0=this.source.container.scrollTop):this.dy0=this.dx0=0}b.consume()};
mxOutline.prototype.mouseMove=function(a,b){if(this.active){this.selectionBorder.node.style.display=this.showViewport?"":"none";this.sizer.node.style.display=this.selectionBorder.node.style.display;var c=this.getTranslateForEvent(b),d=c.x,e=c.y;if(this.zoom)c=this.source.container,e=d/(c.clientWidth/c.clientHeight),c=new mxRectangle(this.bounds.x,this.bounds.y,Math.max(1,this.bounds.width+d),Math.max(1,this.bounds.height+e)),this.selectionBorder.bounds=c,this.selectionBorder.redraw();else{var f=this.outline.getView().scale,

View file

@ -426,7 +426,9 @@ public class GliffyDiagramConverter
// Do not add constraint for orthogonal edges
if (addConstraint(object, startTerminal, true, orthogonal))
{
mxPoints.remove(p0);
//Removing the point resulted in incorrect edges
//TODO confirm nothing is affected from this change
//mxPoints.remove(p0);
}
}
@ -440,7 +442,9 @@ public class GliffyDiagramConverter
// Do not add constraint for orthogonal edges
if (addConstraint(object, endTerminal, false, orthogonal))
{
mxPoints.remove(pe);
//Removing the point resulted in incorrect edges
//TODO confirm nothing is affected from this change
//mxPoints.remove(pe);
}
}
@ -646,8 +650,11 @@ public class GliffyDiagramConverter
style.append("pointerEvents=0;");
}
if(style.lastIndexOf("strokeColor") == -1)
style.append("strokeColor=" + shape.strokeColor).append(";");
if(style.lastIndexOf("strokeColor") == -1)
{
String strokeClr = gliffyObject.isUseFillColor4StrokeColor()? shape.fillColor: shape.strokeColor;
style.append("strokeColor=" + strokeClr).append(";");
}
if (style.lastIndexOf("gradient") == -1 && shape.gradient && !gliffyObject.isGradientIgnored())
{
@ -655,7 +662,7 @@ public class GliffyDiagramConverter
}
// opacity value is wrong for venn circles, so ignore it and use the one in the mapping
if (!gliffyObject.isVennCircle())
if (!gliffyObject.isVennCircle() && style.lastIndexOf("opacity") == -1)
{
style.append("opacity=" + shape.opacity * 100).append(";");
}
@ -679,6 +686,7 @@ public class GliffyDiagramConverter
style.append("fillColor=" + line.fillColor).append(";");
style.append(ArrowMapping.get(line.startArrow).toString(true)).append(";");
style.append(ArrowMapping.get(line.endArrow).toString(false)).append(";");
style.append("rounded=" + (line.cornerRadius != null? "1" : "0")).append(";");
style.append(DashStyleMapping.get(line.dashStyle, line.strokeWidth));
style.append(LineMapping.get(line.interpolationType));
@ -705,12 +713,59 @@ public class GliffyDiagramConverter
* The equation that translates Gliffy offset to draw.io offset is : G*2 - 1 = D
*/
mxGeometry mxGeo = new mxGeometry(graphic.Text.lineTValue != null ? graphic.Text.lineTValue * 2 -1 : 0, 0, 0, 0);
mxGeo.setOffset(new mxPoint());
float lblY = 0, lblX = 0;
if (graphic.Text.linePerpValue != null)
{
List<float[]> controlPath = gliffyObject.parent.graphic.Line.controlPath;
if (controlPath != null && controlPath.size() >= 2)
{
int i1 = 0, i2 = controlPath.size() - 1;
boolean noCardinal = false;
if ("begin".equals(graphic.Text.cardinalityType))
{
i2 = 1;
}
else if ("end".equals(graphic.Text.cardinalityType))
{
i1 = controlPath.size() - 2;
}
else
{
noCardinal = true;
}
if (noCardinal || (controlPath.get(i1)[1] == controlPath.get(i2)[1]))
{
lblY = graphic.Text.linePerpValue;
if (controlPath.get(i1)[0] - controlPath.get(i2)[0] > 0)
{
lblY = -lblY;
}
}
else
{
lblX = graphic.Text.linePerpValue;
if (controlPath.get(i1)[1] - controlPath.get(i2)[1] < 0)
{
lblX = -lblX;
}
}
}
}
mxGeo.setOffset(new mxPoint(lblX, lblY));
cell.setGeometry(mxGeo);
style.append("labelBackgroundColor=" + gliffyDiagram.stage.getBackgroundColor()).append(";");
//should we force horizontal align for text on lines?
//Most probably yes, as extracting alignment from html messes with some cases [set halign to null later]
//style.append("align=center;");
//This is a workaround for edges as its label offset is incorrect when alignment is set. It should be handled in a better way
//HTML text-align is not mapped to halign for edges
//TODO Enhance edge's label positioning
gliffyObject.graphic.getText().setHalign(null);
}
else
{

View file

@ -12,7 +12,7 @@ com.gliffy.shape.basic.basic_v1.default.octagon=mxgraph.basic.octagon
com.gliffy.shape.basic.basic_v1.default.right_triangle=mxgraph.basic.orthogonal_triangle
com.gliffy.shape.basic.basic_v1.default.star=mxgraph.basic.star
#TODO fix disappearing control point
com.gliffy.shape.basic.basic_v1.default.round_rectangle=rect;rounded=1;arcSize=5;
com.gliffy.shape.basic.basic_v1.default.round_rectangle=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.basic.basic_v1.default.cross=mxgraph.basic.cross2;dx=5
com.gliffy.shape.basic.basic_v1.default.left_arrow=mxgraph.arrows2.arrow;dy=0.6;dx=25;flipH=1;notch=0
com.gliffy.shape.basic.basic_v1.default.right_arrow=mxgraph.arrows2.arrow;dy=0.6;dx=25;notch=0
@ -103,12 +103,12 @@ com.gliffy.shape.swimlanes.swimlanes_v1.default.horizontal_four_lane_pool=swimla
# UML v2
#
# UML V2 CLASS
com.gliffy.shape.uml.uml_v2.class.object=rect;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.data_type=rect;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.enumeration=rect;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.interface=rect;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.class2=rect;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.class=rect;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.object=rect;verticalAlign=top;align=left;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.data_type=rect;verticalAlign=top;align=left;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.enumeration=rect;verticalAlign=top;align=left;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.interface=rect;verticalAlign=top;align=left;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.class2=rect;verticalAlign=top;align=left;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.class=rect;verticalAlign=top;align=left;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.package=rect;strokeColor=none;shadow=0;fillColor=none
com.gliffy.shape.uml.uml_v2.class.simple_class=rect
com.gliffy.shape.uml.uml_v2.class.primitive=rect
@ -152,11 +152,11 @@ com.gliffy.shape.uml.uml_v1.default.self_message=filledEdge;fixDash=1;startArrow
com.gliffy.shape.uml.uml_v1.default.actor=umlActor;verticalLabelPosition=bottom;verticalAlign=bottom
com.gliffy.shape.uml.uml_v1.default.use_case=ellipse;perimeter=ellipsePerimeter
# UML v2 SEQUENCE
com.gliffy.shape.uml.uml_v2.sequence.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;overflow=fill;labelX=26
com.gliffy.shape.uml.uml_v2.sequence.interaction_use=stencil(rVNbDsIgEDwN/wjxAMbHPWi7taQIDWCtt5dmsVI0aqw/hBkmwyy7EL51jeiAMNoQviOMrSgNa8CXDAvXQemR7IWVolCAJ85b08JFVj56SN2AlX485XtCN4RvC1G2R2vOuiLsMLG1sRDZO9WJ0SWCk+nHaAPaxiDXFD28lNSJli8Qr9hbdZaDrd+qF4jz0KUyDlIi7GfPVUulsBmp6k8vOg3CT+o7/q7yZ/XH2p/r9jB4nE40tVDjJcOszVnXqVDyqJEqQXuwSPcJf5JVFYd/FujFOAcWPxjf3wA=);xSize=90;align=left;spacingLeft=10;overflow=fill
com.gliffy.shape.uml.uml_v2.sequence.opt_combined_fragment=stencil(rVPREoIgEPwa3gmmD2jM/gP1TEYCB0nt78M5MtSmmuyFYZedZY87CE/aSjRAGK0IPxLGdpT61eN+gUXbQO6Q7ISVIlOAJ62zpoZeFi54SF2BlW485SmhB8KTTOT12ZqrLgg7TWxpLAT2QTVidAngYrox2oC2IcgtRk8vJXWk5RvEO/ZWvcjB9m/VG8TL0LkyLcSE38+eq5RKYTNi1Z9edBqEn9QP/F3la/XH2td1OxgcTieamsbhJcOszYuuU6HkWSOVg3Zgke4i/iKLIgz/LNCLcfYsfjCe3gE=);xSize=90;align=left;spacingLeft=10;overflow=fill
com.gliffy.shape.uml.uml_v2.sequence.loop_combined_fragment=stencil(rVNbDoMgEDwN/xTSAzStvQeFVYkUDFJtb1/NokX7jOkPYYbJMLsshO+bUtRAGC0JPxDGNpT2a4+7BRZNDTIg2QqvxckAnjTBuwo6rUL00LYEr8NwyjNCd4TvT0JWhXcXqwg7TmzuPER2pGoxuERwdu0Q7Yq2McgtRQ8vo22i5dv14g37qGZzdYTv1HS9eBlaGtdASvT7WbtybQw+Rqr6U0enQVilHvFvlT+rv9b+XHeAa8DpRFPjXI23jBlfPjsVRhcWKQk2gEe6TfizVipO/yzRi3nuWfxhPLsD);xSize=90;align=left;spacingLeft=10;overflow=fill
com.gliffy.shape.uml.uml_v2.sequence.alt_combined_fragment=stencil(rVNbDsIgEDwN/wjxAMbHPWi7WlKEBrCtt5dmsVI0aqw/hBkmwyy7EL51tWiBMFoTviOMrSgNa8B9hoVrofRIdsJKUSjAE+etaaCXlY8eUtdgpR9P+Z7QDeHbQpTNyZqLrgg7TOzRWIjsnWrF6BLB2XRjtAFtY5Brih5eSupEyxeIV+ytOsvB1m/VC8R56FIZBykR9rPnOkqlsBmp6k8vOg3CT+o7/q7yZ/XH2p/r9jB4nE40FcrjJcOszVnXqVDypJEqQXuwSHcJf5ZVFYd/FujFOAcWPxjf3wA=);xSize=90;align=left;spacingLeft=10;overflow=fill
com.gliffy.shape.uml.uml_v2.sequence.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;labelX=26
com.gliffy.shape.uml.uml_v2.sequence.interaction_use=stencil(rVNbDsIgEDwN/wjxAMbHPWi7taQIDWCtt5dmsVI0aqw/hBkmwyy7EL51jeiAMNoQviOMrSgNa8CXDAvXQemR7IWVolCAJ85b08JFVj56SN2AlX485XtCN4RvC1G2R2vOuiLsMLG1sRDZO9WJ0SWCk+nHaAPaxiDXFD28lNSJli8Qr9hbdZaDrd+qF4jz0KUyDlIi7GfPVUulsBmp6k8vOg3CT+o7/q7yZ/XH2p/r9jB4nE40tVDjJcOszVnXqVDyqJEqQXuwSPcJf5JVFYd/FujFOAcWPxjf3wA=);xSize=90;align=left;spacingLeft=10
com.gliffy.shape.uml.uml_v2.sequence.opt_combined_fragment=stencil(rVPREoIgEPwa3gmmD2jM/gP1TEYCB0nt78M5MtSmmuyFYZedZY87CE/aSjRAGK0IPxLGdpT61eN+gUXbQO6Q7ISVIlOAJ62zpoZeFi54SF2BlW485SmhB8KTTOT12ZqrLgg7TWxpLAT2QTVidAngYrox2oC2IcgtRk8vJXWk5RvEO/ZWvcjB9m/VG8TL0LkyLcSE38+eq5RKYTNi1Z9edBqEn9QP/F3la/XH2td1OxgcTieamsbhJcOszYuuU6HkWSOVg3Zgke4i/iKLIgz/LNCLcfYsfjCe3gE=);xSize=90;align=left;spacingLeft=10
com.gliffy.shape.uml.uml_v2.sequence.loop_combined_fragment=stencil(rVNbDoMgEDwN/xTSAzStvQeFVYkUDFJtb1/NokX7jOkPYYbJMLsshO+bUtRAGC0JPxDGNpT2a4+7BRZNDTIg2QqvxckAnjTBuwo6rUL00LYEr8NwyjNCd4TvT0JWhXcXqwg7TmzuPER2pGoxuERwdu0Q7Yq2McgtRQ8vo22i5dv14g37qGZzdYTv1HS9eBlaGtdASvT7WbtybQw+Rqr6U0enQVilHvFvlT+rv9b+XHeAa8DpRFPjXI23jBlfPjsVRhcWKQk2gEe6TfizVipO/yzRi3nuWfxhPLsD);xSize=90;align=left;spacingLeft=10
com.gliffy.shape.uml.uml_v2.sequence.alt_combined_fragment=stencil(rVNbDsIgEDwN/wjxAMbHPWi7WlKEBrCtt5dmsVI0aqw/hBkmwyy7EL51tWiBMFoTviOMrSgNa8B9hoVrofRIdsJKUSjAE+etaaCXlY8eUtdgpR9P+Z7QDeHbQpTNyZqLrgg7TOzRWIjsnWrF6BLB2XRjtAFtY5Brih5eSupEyxeIV+ytOsvB1m/VC8R56FIZBykR9rPnOkqlsBmp6k8vOg3CT+o7/q7yZ/XH2p/r9jB4nE40FcrjJcOszVnXqVDypJEqQXuwSHcJf5ZVFYd/FujFOAcWPxjf3wA=);xSize=90;align=left;spacingLeft=10
com.gliffy.shape.basic.basic_v1.default.line=edgeStyle=none;endArrow=none
#composite
com.gliffy.shape.uml.uml_v2.sequence.entity_lifeline=rect;fillColor=none;strokeColor=none
@ -175,14 +175,14 @@ com.gliffy.shape.uml.uml_v2.sequence.return_message=endArrow=none;startSize=12;s
com.gliffy.shape.uml.uml_v2.sequence.self_message=curved=1
com.gliffy.shape.uml.uml_v2.sequence.actor=umlActor;verticalLabelPosition=bottom;verticalAlign=top
com.gliffy.shape.uml.uml_v2.sequence.concurrent=stencil(nZFNDsIgEIVPwx6ZjS4NtveYtkRIKxDAVm8vP5qA3RgTNrw330zmDQHuJVpBGEVvxRgIXAhjKzqFwxJlFh0fnJnFpqYgi620FE6F5EJH6JkAH3Ccr87c9fSW6Ck94BYTVUlZvZk1zXyUfrTMeda/fg8tSlfQgbbYv9zxR66lPl36r3WjUm0c083ZNXW5aJdXVsstoHsB);dashed=1
com.gliffy.shape.uml.uml_v2.sequence.continuation=rect;rounded=1
com.gliffy.shape.uml.uml_v2.sequence.continuation=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.sequence.gate=rect
com.gliffy.shape.uml.uml_v2.sequence.constraint=edgeStyle=none;endArrow=none;dashed=1
com.gliffy.shape.uml.uml_v2.sequence.note=note;size=10
com.gliffy.shape.uml.uml_v2.sequence.anchor_line=edgeStyle=none;endArrow=none;dashed=1
# UML v2 ACTIVITY
com.gliffy.shape.uml.uml_v2.activity.activity=rect;rounded=1
com.gliffy.shape.uml.uml_v2.activity.action=rect;rounded=1
com.gliffy.shape.uml.uml_v2.activity.activity=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.activity.action=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.activity.accept_event_action=mxgraph.arrows2.arrow;dy=0;dx=0;notch=15
com.gliffy.shape.uml.uml_v2.activity.accept_time_event_action=mxgraph.flowchart.collate
com.gliffy.shape.uml.uml_v2.activity.send_signal_action=mxgraph.arrows2.arrow;dy=0;dx=15;notch=0
@ -196,19 +196,19 @@ com.gliffy.shape.uml.uml_v2.activity.jump_node=ellipse;perimeter=ellipsePerimete
com.gliffy.shape.uml.uml_v2.activity.control_flow=edgeStyle=none;endArrow=open;endSize=12
com.gliffy.shape.uml.uml_v2.activity.object_flow=edgeStyle=none;endArrow=open;dashed=1;endSize=12
#com.gliffy.shape.uml.uml_v2.activity.exception_flow=
com.gliffy.shape.uml.uml_v2.activity.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;overflow=fill;labelX=32
com.gliffy.shape.uml.uml_v2.activity.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;labelX=32
com.gliffy.shape.uml.uml_v2.activity.object_node=rect
com.gliffy.shape.uml.uml_v2.activity.structured_node=rect;rounded=1;dashed=1
com.gliffy.shape.uml.uml_v2.activity.region=rect;rounded=1;dashed=1
com.gliffy.shape.uml.uml_v2.activity.structured_node=rect;rounded=1;dashed=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.activity.region=rect;rounded=1;dashed=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.activity.note=note;size=10
com.gliffy.shape.uml.uml_v2.activity.anchor_line=edgeStyle=none;endArrow=none;dashed=1
# UML v2 STATE MACHINE
com.gliffy.shape.uml.uml_v2.state_machine.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;overflow=fill;labelX=32
com.gliffy.shape.uml.uml_v2.state_machine.orthoganal_state=rect;rounded=1;startSize=30;arcSize=10
com.gliffy.shape.uml.uml_v2.state_machine.composite_state=rect;rounded=1;startSize=30;arcSize=10
com.gliffy.shape.uml.uml_v2.state_machine.state=rect;rounded=1
com.gliffy.shape.uml.uml_v2.state_machine.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;labelX=32
com.gliffy.shape.uml.uml_v2.state_machine.orthoganal_state=rect;rounded=1;startSize=30;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.state_machine.composite_state=rect;rounded=1;startSize=30;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.state_machine.state=rect;rounded=1;arcSize=15;absoluteArcSize=1
# temporary
com.gliffy.shape.uml.uml_v2.state_machine.submachine_state=ext;symbol0=ellipse;symbol0Width=10;symbol0Height=10;symbol0Align=right;symbol0VerticalAlign=bottom;symbol0Spacing=5;symbol0VSpacing=5;symbol1=ellipse;symbol1Width=10;symbol1Height=10;symbol1Align=right;symbol1VerticalAlign=bottom;symbol1Spacing=25;symbol1VSpacing=5;symbol2=line;symbol2Width=10;symbol2Height=10;symbol2Align=right;symbol2VerticalAlign=bottom;symbol2Spacing=15;symbol2VSpacing=5;rounded=1;arcSize=10
com.gliffy.shape.uml.uml_v2.state_machine.submachine_state=ext;symbol0=ellipse;symbol0Width=10;symbol0Height=10;symbol0Align=right;symbol0VerticalAlign=bottom;symbol0Spacing=5;symbol0VSpacing=5;symbol1=ellipse;symbol1Width=10;symbol1Height=10;symbol1Align=right;symbol1VerticalAlign=bottom;symbol1Spacing=25;symbol1VSpacing=5;symbol2=line;symbol2Width=10;symbol2Height=10;symbol2Align=right;symbol2VerticalAlign=bottom;symbol2Spacing=15;symbol2VSpacing=5;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.uml.uml_v2.state_machine.final_state=mxgraph.bpmn.shape;verticalLabelPosition=bottom;verticalAlign=top;perimeter=ellipsePerimeter;outline=end;symbol=terminate
com.gliffy.shape.uml.uml_v2.state_machine.initial_state=ellipse;perimeter=ellipsePerimeter
com.gliffy.shape.uml.uml_v2.state_machine.entry_point=ellipse;perimeter=ellipsePerimeter
@ -230,14 +230,14 @@ com.gliffy.shape.uml.uml_v2.deployment.device_node=cube;size=10;direction=south
com.gliffy.shape.uml.uml_v2.deployment.execution_environment_node=cube;size=10;direction=south
com.gliffy.shape.uml.uml_v2.deployment.artifact=note;size=10
com.gliffy.shape.uml.uml_v2.deployment.component1=component;align=left;spacingLeft=36
com.gliffy.shape.uml.uml_v2.deployment.component2=ext;symbol0=component;symbol0Width=20;symbol0Height=20;symbol0Align=right;symbol0VerticalAlign=top;symbol0Spacing=4;symbol0ArcSpacing=0.25;jettyWidth=8;jettyHeight=4;overflow=fill
com.gliffy.shape.uml.uml_v2.deployment.component2=ext;symbol0=component;symbol0Width=20;symbol0Height=20;symbol0Align=right;symbol0VerticalAlign=top;symbol0Spacing=4;symbol0ArcSpacing=0.25;jettyWidth=8;jettyHeight=4
com.gliffy.shape.uml.uml_v2.deployment.interface=ellipse;perimeter=ellipsePerimeter
com.gliffy.shape.uml.uml_v2.deployment.simple_interface=stencil(bVHRDsIgDPwaHpewERN9NFP/o5s4yHCQgm7+vWydBqYJL3dXer2WidorcJJVHLyTbWDixKrqCaihMZGuouID2l6O+hoUyXpQEnWYVXFm/MhE3UDbd2gfw3Wl+GF+onYw/0qohb3b5+w5Ub8dJ6MXwZITvny7A7ZRxk85VeMrg/97rWgqYNK+QBsgaDtkmgHsZBEtipuBLpP8KKVL6DKbK0kZySRoXOqysjSCNEY7n4Qut6EJjgT3K1Q5TDvetDFbHxppmefnIgtL1xbnNw==)
com.gliffy.shape.uml.uml_v2.deployment.required_interface=stencil(bZDNDoMgEISfhiMJQnrosbH2PValSrRCFurP25cfbSRtwmW+GXZhiChtD0YSzsAa2Tgi7oTzGVBBPXrMvWMd6kEuqnV9stXUS1QuuKIi7EZEWUMzdKjfU7sjdg1HlAbCrROK9KXnsHNN8y4sLdqSLFjSj+90wMbbeMRTGrdM/p+1q5XCqixF7cApPWXeCNhJ6lfQ5whdZtlFSnPCRfau4zOenH7pG419ZbkY+uko0tS/qD4=)
com.gliffy.shape.uml.uml_v2.deployment.port=rect;verticalLabelPosition=bottom;verticalAlign=top
com.gliffy.shape.uml.uml_v2.deployment.instance=rect
com.gliffy.shape.uml.uml_v2.deployment.instance_specification=ext;symbol0=note;symbol0Width=20;symbol0Height=20;symbol0Align=right;symbol0VerticalAlign=top;symbol0Spacing=4;symbol0ArcSpacing=0.25;jettyWidth=8;jettyHeight=4;overflow=fill;align=center;verticalAlign=bottom;size=5
com.gliffy.shape.uml.uml_v2.deployment.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;overflow=fill
com.gliffy.shape.uml.uml_v2.deployment.instance_specification=ext;symbol0=note;symbol0Width=20;symbol0Height=20;symbol0Align=right;symbol0VerticalAlign=top;symbol0Spacing=4;symbol0ArcSpacing=0.25;jettyWidth=8;jettyHeight=4;align=center;verticalAlign=bottom;size=5
com.gliffy.shape.uml.uml_v2.deployment.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10
com.gliffy.shape.uml.uml_v2.deployment.association=edgeStyle=orthogonalEdgeStyle
com.gliffy.shape.uml.uml_v2.deployment.dependency=edgeStyle=orthogonalEdgeStyle;dashed=1
com.gliffy.shape.uml.uml_v2.deployment.generalization=edgeStyle=orthogonalEdgeStyle
@ -245,14 +245,14 @@ com.gliffy.shape.uml.uml_v2.deployment.aggregation=edgeStyle=orthogonalEdgeStyle
com.gliffy.shape.uml.uml_v2.deployment.composition=edgeStyle=orthogonalEdgeStyle
com.gliffy.shape.uml.uml_v2.deployment.note=note;size=10
com.gliffy.shape.uml.uml_v2.deployment.anchor_line=edgeStyle=none;dashed=1
com.gliffy.shape.uml.uml_v2.class.class=verticalAlign=top;overflow=fill;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.class.class=verticalAlign=top;fontSize=12;fontFamily=Helvetica
com.gliffy.shape.uml.uml_v2.deployment.package=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left
# UML v2 COMPONENT
com.gliffy.shape.uml.uml_v2.component.component1=component;align=left;spacingLeft=36
com.gliffy.shape.uml.uml_v2.component.component2=ext;symbol0=component;symbol0Width=20;symbol0Height=20;symbol0Align=right;symbol0VerticalAlign=top;symbol0Spacing=4;symbol0ArcSpacing=0.25;jettyWidth=8;jettyHeight=4;overflow=fill
com.gliffy.shape.uml.uml_v2.component.component2=ext;symbol0=component;symbol0Width=20;symbol0Height=20;symbol0Align=right;symbol0VerticalAlign=top;symbol0Spacing=4;symbol0ArcSpacing=0.25;jettyWidth=8;jettyHeight=4
com.gliffy.shape.uml.uml_v2.component.interface=ellipse;perimeter=ellipsePerimeter
#com.gliffy.shape.uml.uml_v2.component.simple_interface=
#com.gliffy.shape.uml.uml_v2.component.required_interface=
com.gliffy.shape.uml.uml_v2.component.simple_interface=stencil(bVHRDsIgDPwaHpewERN9NFP/o5s4yHCQgm7+vWydBqYJL3dXer2WidorcJJVHLyTbWDixKrqCaihMZGuouID2l6O+hoUyXpQEnWYVXFm/MhE3UDbd2gfw3Wl+GF+onYw/0qohb3b5+w5Ub8dJ6MXwZITvny7A7ZRxk85VeMrg/97rWgqYNK+QBsgaDtkmgHsZBEtipuBLpP8KKVL6DKbK0kZySRoXOqysjSCNEY7n4Qut6EJjgT3K1Q5TDvetDFbHxppmefnIgtL1xbnNw==)
com.gliffy.shape.uml.uml_v2.component.required_interface=stencil(bZDNDoMgEISfhiMJQnrosbH2PValSrRCFurP25cfbSRtwmW+GXZhiChtD0YSzsAa2Tgi7oTzGVBBPXrMvWMd6kEuqnV9stXUS1QuuKIi7EZEWUMzdKjfU7sjdg1HlAbCrROK9KXnsHNN8y4sLdqSLFjSj+90wMbbeMRTGrdM/p+1q5XCqixF7cApPWXeCNhJ6lfQ5whdZtlFSnPCRfau4zOenH7pG419ZbkY+uko0tS/qD4=)
com.gliffy.shape.uml.uml_v2.component.port=rect
com.gliffy.shape.uml.uml_v2.component.artifact=note;size=10
com.gliffy.shape.uml.uml_v2.component.generalization=edgeStyle=orthogonalEdgeStyle
@ -269,7 +269,7 @@ com.gliffy.shape.uml.uml_v2.use_case.use_case=ellipse;perimeter=ellipsePerimeter
com.gliffy.shape.uml.uml_v2.use_case.actor=umlActor;verticalLabelPosition=bottom;verticalAlign=bottom
com.gliffy.shape.uml.uml_v2.use_case.association=edgeStyle=none
com.gliffy.shape.uml.uml_v2.use_case.system=rect
com.gliffy.shape.uml.uml_v2.use_case.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;overflow=fill;labelX=26
com.gliffy.shape.uml.uml_v2.use_case.frame=mxgraph.sysml.package;xSize=90;align=left;spacingLeft=10;labelX=26
com.gliffy.shape.uml.uml_v2.use_case.include=edgeStyle=none;dashed=1
com.gliffy.shape.uml.uml_v2.use_case.extend=edgeStyle=none;dashed=1
com.gliffy.shape.uml.uml_v2.use_case.dependency=edgeStyle=none;dashed=1
@ -332,22 +332,22 @@ com.gliffy.shape.bpmn.bpmn_v1.activities.multiple_instances=mxgraph.ios7.icons.p
com.gliffy.shape.bpmn.bpmn_v1.activities.compensation=mxgraph.bpmn.compensation;html=1;fillColor=#000000;verticalLabelPosition=bottom;verticalAlign=top
com.gliffy.shape.bpmn.bpmn_v1.activities.ad_hoc=mxgraph.bpmn.ad_hoc;fillColor=#000000;verticalLabelPosition=bottom;verticalAlign=top
com.gliffy.shape.bpmn.bpmn_v1.activities.looping=mxgraph.bpmn.loop;verticalLabelPosition=bottom;verticalAlign=top;strokeWidth=5
com.gliffy.shape.bpmn.bpmn_v1.activities.process=ext;rounded=1
com.gliffy.shape.bpmn.bpmn_v1.activities.transaction=ext;rounded=1;double=1
com.gliffy.shape.bpmn.bpmn_v1.activities.expanded_sub_process=ext;rounded=1
com.gliffy.shape.bpmn.bpmn_v1.activities.collapsed_sub_process=ext;rounded=1;symbol0=plus;symbol0Width=14;symbol0Height=14;symbol0Align=center;symbol0VerticalAlign=bottom
com.gliffy.shape.bpmn.bpmn_v1.activities.task=ext;rounded=1
com.gliffy.shape.bpmn.bpmn_v1.activities.process=ext;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.bpmn.bpmn_v1.activities.transaction=ext;rounded=1;double=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.bpmn.bpmn_v1.activities.expanded_sub_process=ext;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.bpmn.bpmn_v1.activities.collapsed_sub_process=ext;rounded=1;symbol0=plus;symbol0Width=14;symbol0Height=14;symbol0Align=center;symbol0VerticalAlign=bottom;arcSize=15;absoluteArcSize=1
com.gliffy.shape.bpmn.bpmn_v1.activities.task=ext;rounded=1;arcSize=15;absoluteArcSize=1
# BPMN v1 DATA ARTIFACTS
com.gliffy.shape.bpmn.bpmn_v1.data_artifacts.annotation=mxgraph.flowchart.annotation_1;strokeWidth=2;html=1
com.gliffy.shape.bpmn.bpmn_v1.data_artifacts.data_object=note;size=25
com.gliffy.shape.bpmn.bpmn_v1.data_artifacts.group=rect;dashed=1;fillColor=none;dashPattern=8 3 2 3;fixDash=1
# BPMN v1 GATEWAYS
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway=rhombus;perimeter=rhombusPerimeter
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_xor_data=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=none;symbol=exclusiveGw
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_and=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=none;symbol=parallelGw
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_xor_event=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=throwing;symbol=multiple
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_complex=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=none;symbol=complexGw
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_or=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=end;symbol=general
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway=rhombus;perimeter=rhombusPerimeter;strokeWidth=1
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_xor_data=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=none;symbol=exclusiveGw;strokeWidth=1
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_and=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=none;symbol=parallelGw;strokeWidth=1
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_xor_event=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=throwing;symbol=multiple;strokeWidth=1
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_complex=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=none;symbol=complexGw;strokeWidth=1
com.gliffy.shape.bpmn.bpmn_v1.gateways.gateway_or=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;outline=end;symbol=general;strokeWidth=1
# BPMN v1 CONNECTORS
com.gliffy.shape.bpmn.bpmn_v1.connectors.normal_sequence_flow=edgeStyle=orthogonalEdgeStyle;dashed=1
com.gliffy.shape.bpmn.bpmn_v1.connectors.message_flow=edgeStyle=orthogonalEdgeStyle
@ -362,33 +362,31 @@ com.gliffy.shape.bpmn.bpmn_v1.connectors.association_with_arrow=edgeStyle=orthog
# iOS7 CONTAINERS
com.gliffy.shape.iphone.iphone_ios7.containers_content.title_bar=rect;strokeColor=none
#composite
#com.gliffy.shape.iphone.iphone_ios7.containers_content.table=
com.gliffy.shape.iphone.iphone_ios7.containers_content.table=rect
com.gliffy.shape.iphone.iphone_ios7.containers_content.blank_screen=mxgraph.ios.iBgFlat;strokeColor=#18211b;fillColor=#dddddd
com.gliffy.shape.iphone.iphone_ios7.containers_content.iphone5=mxgraph.ios.iPhone;bgStyle=bgWhite;fillColor=#aaaaaa
com.gliffy.shape.iphone.iphone_ios7.containers_content.chat_bubble_grey=mxgraph.ios7ui.callout
com.gliffy.shape.iphone.iphone_ios7.containers_content.chat_bubble_green=mxgraph.ios7ui.callout;flipH=1
com.gliffy.shape.iphone.iphone_ios7.containers_content.chat_bubble_blue=mxgraph.ios7ui.callout;flipH=1
com.gliffy.shape.iphone.iphone_ios7.containers_content.page_indicator=mxgraph.ios.iPageControl
#composite
com.gliffy.shape.iphone.iphone_ios7.containers_content.status_bar_black=mxgraph.ios7ui.appBar;fillColor=#000000;strokeColor=#FFFFFF
#composite
com.gliffy.shape.iphone.iphone_ios7.containers_content.status_bar_white=mxgraph.ios7ui.appBar;;fillColor=none;strokeColor=#000000
com.gliffy.shape.iphone.iphone_ios7.containers_content.status_bar_white=mxgraph.ios7ui.appBar;fillColor=none;strokeColor=#000000
# iOS7 FORMS CONTROLS
#composite
#com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_stack=
com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_stack=rect;rounded=1;arcSize=15;absoluteArcSize=1
#composite
#com.gliffy.shape.iphone.iphone_ios7.forms_controls.alert=
com.gliffy.shape.iphone.iphone_ios7.forms_controls.alert=rect;rounded=1;arcSize=15;absoluteArcSize=1
#composite
#com.gliffy.shape.iphone.iphone_ios7.forms_controls.alert_2options=
com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_blue=rect;rounded=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_green=rect;rounded=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_red=rect;rounded=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.alert_2options=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_blue=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_green=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_red=rect;rounded=1;arcSize=15;absoluteArcSize=1
#com.gliffy.shape.iphone.iphone_ios7.forms_controls.date_picker=
com.gliffy.shape.iphone.iphone_ios7.forms_controls.input=rect;rounded=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.input=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.iphone.iphone_ios7.forms_controls.keyboard_landscape=mxgraph.ios7.misc.keyboard_(letters)
com.gliffy.shape.iphone.iphone_ios7.forms_controls.keyboard_portrait=mxgraph.ios7.misc.keyboard_(letters)
com.gliffy.shape.iphone.iphone_ios7.forms_controls.progress_bar=mxgraph.ios7ui.downloadBar;barPos=50;fillColor=#aaaaaa;strokeColor=#0080f0
com.gliffy.shape.iphone.iphone_ios7.forms_controls.search=mxgraph.ios7ui.searchBox
com.gliffy.shape.iphone.iphone_ios7.forms_controls.search=rect;
com.gliffy.shape.iphone.iphone_ios7.forms_controls.slider=mxgraph.ios7ui.slider;barPos=35;strokeColor=#0080f0;fillColor=#ffffff;strokeColor2=#a0a0a0
com.gliffy.shape.iphone.iphone_ios7.forms_controls.switch_off=mxgraph.ios7ui.onOffButton;buttonState=off;strokeColor2=#aaaaaa;fillColor2=#ffffff
com.gliffy.shape.iphone.iphone_ios7.forms_controls.switch_on=mxgraph.ios7ui.onOffButton;buttonState=on;strokeColor=#38D145;fillColor=#38D145
@ -450,53 +448,49 @@ com.gliffy.shape.iphone.iphone_ios7.icons_glyphs.icon_orange_dot=ellipse;perimet
com.gliffy.shape.iphone.iphone_ios7.icons_glyphs.icon_refresh=mxgraph.ios7.icons.reload;strokeColor=#929292;fillColor=#929292
com.gliffy.shape.iphone.iphone_ios7.icons_glyphs.icon_remove=mxgraph.ios7.misc.delete;fillColor=#ff0000;strokeColor=#ffffff
# iOS7 NAVIGATION
com.gliffy.shape.iphone.iphone_ios7.navigation.action_back=mxgraph.ios7.misc.left
com.gliffy.shape.iphone.iphone_ios7.navigation.action_back=mxgraph.ios7.misc.left;strokeColor=#157EFA;strokeWidth=3
#composite
#com.gliffy.shape.iphone.iphone_ios7.navigation.contextual_menu=
com.gliffy.shape.iphone.iphone_ios7.navigation.contextual_menu=rect
#composite
#com.gliffy.shape.iphone.iphone_ios7.navigation.nav_3tabs=
com.gliffy.shape.iphone.iphone_ios7.navigation.nav_3tabs=rect;rounded=1;arcSize=15;absoluteArcSize=1
#composite
#com.gliffy.shape.iphone.iphone_ios7.containers_content.title_bar=
com.gliffy.shape.iphone.iphone_ios7.containers_content.title_bar=partialRectangle;top=0;right=0;left=0
#composite
#com.gliffy.shape.iphone.iphone_ios7.navigation.tab_bar=
com.gliffy.shape.iphone.iphone_ios7.navigation.tab_bar=partialRectangle;bottom=0;right=0;left=0
#
# ANDROID v1
#
# ANDROID v1 GENERAL
com.gliffy.shape.android.android_v1.general.tooltip=rect;rounded=1
com.gliffy.shape.android.android_v1.general.tooltip=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.android.android_v1.general.subheader=rect
#composite
com.gliffy.shape.android.android_v1.general.statusbar=mxgraph.android.statusBar;strokeColor=#ffffff
com.gliffy.shape.android.android_v1.general.slider=mxgraph.android.progress_scrubber_focused
com.gliffy.shape.android.android_v1.general.keyboard_portrait=mxgraph.android.keyboard
com.gliffy.shape.android.android_v1.general.keyboard_landscape=mxgraph.android.keyboard
com.gliffy.shape.android.android_v1.general.bottom_bar=rect
#composite
#com.gliffy.shape.android.android_v1.general.app_bar=
com.gliffy.shape.android.android_v1.general.actionbar=rect
com.gliffy.shape.android.android_v1.general.app_bar=rect
com.gliffy.shape.android.android_v1.general.actionbar=partialRectangle;top=0;right=0;left=0;strokeWidth=3
com.gliffy.shape.android.android_v1.general.phone=mxgraph.android.phone2
#composite
#com.gliffy.shape.android.android_v1.general.dialog=
com.gliffy.shape.android.android_v1.general.dialog=rect;rounded=1;arcSize=5;absoluteArcSize=1
#composite
#com.gliffy.shape.android.android_v1.general.list_1line=
com.gliffy.shape.android.android_v1.general.list_1line=rect;strokeColor=none
#composite
#com.gliffy.shape.android.android_v1.general.list_2lines=
com.gliffy.shape.android.android_v1.general.list_2lines=rect;strokeColor=none
#composite
#com.gliffy.shape.android.android_v1.general.tabs01=
com.gliffy.shape.android.android_v1.general.tabs01=rect;strokeColor=none
#composite
#com.gliffy.shape.android.android_v1.general.tabs02=
com.gliffy.shape.android.android_v1.general.tabs02=partialRectangle;top=0;right=0;left=0
# ANDROID v1 FORMS
#composite
#com.gliffy.shape.android.android_v1.forms.timepicker=
com.gliffy.shape.android.android_v1.forms.switch_on=mxgraph.android.switch_on
com.gliffy.shape.android.android_v1.forms.switch_off=mxgraph.android.switch_off
com.gliffy.shape.android.android_v1.forms.radio_button=ellipse;perimeter=ellipsePerimeter
com.gliffy.shape.android.android_v1.forms.input_field=mxgraph.android.textfield
#composite
#com.gliffy.shape.android.android_v1.forms.datepicker=
com.gliffy.shape.android.android_v1.forms.checkbox=mxgraph.android.checkbox
com.gliffy.shape.android.android_v1.forms.button_floating_action=mxgraph.ios7.icons.add;strokecolor=#929292;fillColor=#ffffff
com.gliffy.shape.android.android_v1.forms.button=rect;rounded=1;strokeColor=none
com.gliffy.shape.android.android_v1.forms.button=rect;rounded=1;strokeColor=none;arcSize=15;absoluteArcSize=1
# ANDROID v1 ICONS
com.gliffy.shape.android.android_v1.icons.attachment=mxgraph.office.concepts.attachment;direction=north
com.gliffy.shape.android.android_v1.icons.avatar=mxgraph.android.contact_badge_normal
@ -587,7 +581,7 @@ com.gliffy.shape.android.android_v1.icons_av.shuffle=mxgraph.ios7.icons.shuffle
#ANDROID SYSTEM ICONS
com.gliffy.shape.android.android_v1.icons_system.back=mxgraph.ios7.icons.play;flipH=1
com.gliffy.shape.android.android_v1.icons_system.home=ellipse;perimeter=ellipsePerimeter
com.gliffy.shape.android.android_v1.icons_system.recent_apps=rect;rounded=1
com.gliffy.shape.android.android_v1.icons_system.recent_apps=rect;rounded=1;arcSize=15;absoluteArcSize=1
#com.gliffy.shape.android.android_v1.icons_system.back_v1=
com.gliffy.shape.android.android_v1.icons_system.down_v1=mxgraph.ios7.misc.down
#com.gliffy.shape.android.android_v1.icons_system.home_v1=
@ -705,9 +699,9 @@ com.gliffy.shape.aws.aws_v1.sdks.python=mxgraph.aws3.android;fillColor=#FFD44F
com.gliffy.shape.aws.aws_v1.sdks.ruby=mxgraph.aws3.android;fillColor=#AE1F23
com.gliffy.shape.aws.aws_v1.sdks.tools_for_windows_power_shell=mxgraph.aws3.toolkit_for_windows_powershell;fillColor=#737373
# AWS STORAGE AND CONTENT DELIVERY
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_cloud_front=mxgraph.aws3.cloudfront;fillColor=#F58536
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_cloud_front=mxgraph.aws3.cloudfront;fillColor=#E05243
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_cloud_front_download_distribution=mxgraph.aws3.download_distribution;fillColor=#F58536
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_cloud_front_edge_location=mxgraph.aws3.edge_location;fillColor=#F58536
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_cloud_front_edge_location=mxgraph.aws3.edge_location;fillColor=#E05243
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_cloud_front_streaming_distribution=mxgraph.aws3.streaming_distribution;fillColor=#F58536
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_ebs=mxgraph.aws3.volume;fillColor=#E05243
com.gliffy.shape.aws.aws_v1.storage_and_content_delivery.amazon_ebs_snapshot=mxgraph.aws3.snapshot;fillColor=#E05243
@ -1045,6 +1039,7 @@ com.gliffy.shape.network.network_v4.home.subwoofer=mxgraph.cisco.computers_and_p
com.gliffy.shape.network.network_v4.home.tablet=mxgraph.android.tab2
com.gliffy.shape.network.network_v4.home.wireless_modem=mxgraph.networks.wireless_hub;strokeColor=#ffffff
com.gliffy.shape.network.network_v3.home.firewall=image;image=img/lib/clip_art/networking/Firewall-page1_128x128.png
#this has fixed fill color, gradient color, and stroke width. Fill color is mapped to stroke color!
com.gliffy.shape.network.network_v3.home.cloud=cloud;strokeColor=#ffffff
com.gliffy.shape.network.network_v3.home.comm_link=mxgraph.networks.comm_link;strokeColor=#ffffff
com.gliffy.shape.network.network_v3.home.server=image;image=img/lib/clip_art/computers/Server_Tower_128x128.png
@ -1127,7 +1122,7 @@ com.gliffy.shape.network.network_v3.business.user=image;image=img/lib/clip_art/p
com.gliffy.shape.network.network_v3.business.user_female=image;image=img/lib/clip_art/people/Worker_Woman_128x128.png
com.gliffy.shape.network.network_v3.business.user_male=image;image=img/lib/clip_art/people/Tech_Man_128x128.png
#composite
#com.gliffy.shape.network.network_v3.business.user_group=
com.gliffy.shape.network.network_v3.business.user_group=rect
com.gliffy.shape.network.network_v3.business.server=image;image=img/lib/clip_art/computers/Server_Tower_128x128.png
com.gliffy.shape.network.network_v3.business.database_server=image;image=img/lib/clip_art/computers/Server_Tower_128x128.png
com.gliffy.shape.network.network_v3.business.mail_server=image;image=img/lib/clip_art/computers/Server_Tower_128x128.png
@ -1148,7 +1143,8 @@ com.gliffy.shape.network.network_v3.business.multi_u_server=image;image=img/lib/
com.gliffy.shape.network.network_v3.business.rack=image;image=img/lib/clip_art/computers/Server_Rack_Empty_128x128.png
#com.gliffy.shape.network.network_v3.business.telephone=
#com.gliffy.shape.network.network_v3.business.flash_drive=
#com.gliffy.shape.network.network_v3.business.tape_backup=
#It needs a new modern icon to match the remaining icons
com.gliffy.shape.network.network_v3.business.tape_backup=mxgraph.networks.tape_storage;strokeColor=#ffffff
#com.gliffy.shape.network.network_v3.business.video_projector=
#com.gliffy.shape.network.network_v3.business.video_screen=
#com.gliffy.shape.network.network_v3.business.satellite=
@ -1162,7 +1158,8 @@ com.gliffy.shape.network.network_v3.rack.power_strip_1u=mxgraph.rack.dell.power_
com.gliffy.shape.network.network_v3.rack.spacer_1u=mxgraph.rackGeneral.plate;fillColor=#e8e8e8;strokeColor=#666666
com.gliffy.shape.network.network_v3.rack.tray_1u=mxgraph.rackGeneral.plate;fillColor=#e8e8e8;strokeColor=#666666
com.gliffy.shape.network.network_v3.rack.hub_switch_2u=mxgraph.rack.general.cat5e_enhanced_patch_panel_48_ports;strokeColor=#666666
#com.gliffy.shape.network.network_v3.rack.lcd_7u=
#TODO needs a better icon
com.gliffy.shape.network.network_v3.rack.lcd_7u=mxgraph.office.devices.lcd_monitor
com.gliffy.shape.network.network_v3.rack.rack=mxgraph.rackGeneral.container;container=1;collapsible=0;childLayout=rack;marginLeft=9;marginRight=9;marginTop=21;marginBottom=22;textColor=#666666;numDisp=off;strokeColor=#666666
# NETWORK v4 RACK
com.gliffy.shape.network.network_v4.rack.rack_server=mxgraph.rack.cisco.cisco_ucs_c22_m3_server
@ -1269,30 +1266,25 @@ com.gliffy.shape.ui.ui_v3.containers_content.note=rect;fillColor=#fff0ab;strokeC
# UI v3 NAVIGATION
com.gliffy.shape.ui.ui_v3.navigation.btn_circle_previous=mxgraph.ios.iArrowIcon;fillColor2=#FFFFFF
com.gliffy.shape.ui.ui_v3.navigation.btn_circle_next=mxgraph.ios.iArrowIcon;fillColor2=#FFFFFF;flipH=1
#composite
#com.gliffy.shape.ui.ui_v3.navigation.btn_rect_previous=
#composite
#com.gliffy.shape.ui.ui_v3.navigation.btn_rect_next=
#composite
#com.gliffy.shape.ui.ui_v3.navigation.pagination=
com.gliffy.shape.ui.ui_v3.navigation.slide_indicator=mxgraph.mockup.navigation.pageControl;fillColor=#999999;strokeColor=#cccccc
#composite
#com.gliffy.shape.ui.ui_v3.navigation.navbar=
com.gliffy.shape.ui.ui_v3.navigation.navbar=rect
#composite
#com.gliffy.shape.ui.ui_v3.navigation.navbar_vertical=
com.gliffy.shape.ui.ui_v3.navigation.navbar_vertical=rect
# UI v3 FORMS CONTROLS
com.gliffy.shape.ui.ui_v3.forms_controls.input_field=rect
com.gliffy.shape.ui.ui_v3.forms_controls.text_area=rect
com.gliffy.shape.ui.ui_v3.forms_controls.input_search=mxgraph.mockup.forms.searchBox;mainText=
com.gliffy.shape.ui.ui_v3.forms_controls.combo_box=mxgraph.mockup.forms.comboBox;fillColor=#cccccc;fillColor2=#cccccc;mainText=
#composite
#com.gliffy.shape.ui.ui_v3.forms_controls.calendar=
#composite
#com.gliffy.shape.ui.ui_v3.forms_controls.dropdown=
com.gliffy.shape.ui.ui_v3.forms_controls.dropdown=rect
com.gliffy.shape.ui.ui_v3.forms_controls.checkbox=mxgraph.mockup.forms.checkbox;rSize=0
com.gliffy.shape.ui.ui_v3.forms_controls.radio_btn=ellipse;perimeter=ellipsePerimeter
com.gliffy.shape.ui.ui_v3.forms_controls.selector=mxgraph.mockup.forms.spinner;spinLayout=right;spinStyle=normal;adjStyle=triangle;fillColor=#999999;mainText=
#composite
#com.gliffy.shape.ui.ui_v3.forms_controls.date=
com.gliffy.shape.ui.ui_v3.forms_controls.color_picker=mxgraph.mockup.forms.colorPicker;chosenColor=#aaddff
com.gliffy.shape.ui.ui_v3.forms_controls.button=rect
@ -1332,7 +1324,7 @@ com.gliffy.shape.ui.ui_v2.forms_components.scrollbar_horizontal=mxgraph.mockup.n
com.gliffy.shape.ui.ui_v2.forms_components.text_area=rect
com.gliffy.shape.ui.ui_v2.forms_components.slider_vertical=mxgraph.mockup.forms.horSlider;sliderStyle=basic;sliderPos=50;handleStyle=circle;fillColor2=#ddeeff;direction=south
com.gliffy.shape.ui.ui_v2.forms_components.slider_horizontal=mxgraph.mockup.forms.horSlider;sliderStyle=basic;sliderPos=50;handleStyle=circle;fillColor2=#ddeeff
com.gliffy.shape.ui.ui_v2.forms_components.button=rect;rounded=1
com.gliffy.shape.ui.ui_v2.forms_components.button=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.ui.ui_v2.forms_components.radio_button=
com.gliffy.shape.ui.ui_v2.forms_components.checkbox=mxgraph.mockup.forms.checkbox;rSize=0
com.gliffy.shape.ui.ui_v2.forms_components.combobox=mxgraph.mockup.forms.comboBox;fillColor=#ddeeff;fillColor2=#aaddff;mainText=
@ -1410,110 +1402,101 @@ com.gliffy.shape.venn.outline.default.FFFF00=ellipse;perimeter=ellipsePerimeter;
# FLOORPLAN v2
#
# FLOORPLAN v2 STRUCTURE
com.gliffy.shape.floorplan.floorplan_v2.structure.door1=mxgraph.floorplan.doorLeft;direction=north;flipV=1
com.gliffy.shape.floorplan.floorplan_v2.structure.door2=mxgraph.floorplan.doorRight;direction=north;flipH=1
com.gliffy.shape.floorplan.floorplan_v2.structure.wall_horizontal=mxgraph.floorplan.wall
com.gliffy.shape.floorplan.floorplan_v2.structure.wall_vertical=mxgraph.floorplan.wall;direction=south
com.gliffy.shape.floorplan.floorplan_v2.structure.window_single=mxgraph.floorplan.window
com.gliffy.shape.floorplan.floorplan_v2.structure.dimension=mxgraph.floorplan.dimension
com.gliffy.shape.floorplan.floorplan_v2.structure.stairs1=mxgraph.floorplan.stairs
com.gliffy.shape.floorplan.floorplan_v2.structure.stairs2=mxgraph.floorplan.stairsRest
com.gliffy.shape.floorplan.floorplan_v2.structure.elevator=mxgraph.floorplan.elevator
com.gliffy.shape.floorplan.floorplan_v2.structure.fireplace=mxgraph.floorplan.fireplace
com.gliffy.shape.floorplan.floorplan_v2.structure.door1=mxgraph.floorplan.doorLeft;direction=north;flipV=1;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.door2=mxgraph.floorplan.doorRight;direction=north;flipH=1;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.wall_horizontal=mxgraph.floorplan.wall;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.wall_vertical=mxgraph.floorplan.wall;direction=south;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.window_single=mxgraph.floorplan.window;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.dimension=mxgraph.floorplan.dimension;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.stairs1=mxgraph.floorplan.stairs;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.stairs2=mxgraph.floorplan.stairsRest;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.elevator=mxgraph.floorplan.elevator;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.structure.fireplace=mxgraph.floorplan.fireplace;strokeWidth=1
#com.gliffy.shape.floorplan.floorplan_v2.structure.tile_floor=
#com.gliffy.shape.floorplan.floorplan_v2.structure.wood_floor=
#com.gliffy.shape.floorplan.floorplan_v2.structure.light_wood_floor=
# FLOORPLAN v2 BEDROOM
com.gliffy.shape.floorplan.floorplan_v2.bedroom.bed_double=mxgraph.floorplan.bed_double
com.gliffy.shape.floorplan.floorplan_v2.bedroom.bed_queen=mxgraph.floorplan.bed_double
com.gliffy.shape.floorplan.floorplan_v2.bedroom.bed_single=mxgraph.floorplan.bed_single
com.gliffy.shape.floorplan.floorplan_v2.bedroom.dresser=mxgraph.floorplan.dresser
com.gliffy.shape.floorplan.floorplan_v2.bedroom.armoire=mxgraph.floorplan.dresser
com.gliffy.shape.floorplan.floorplan_v2.bedroom.lamp=mxgraph.floorplan.floor_lamp
com.gliffy.shape.floorplan.floorplan_v2.bedroom.bed_double=mxgraph.floorplan.bed_double;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bedroom.bed_queen=mxgraph.floorplan.bed_double;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bedroom.bed_single=mxgraph.floorplan.bed_single;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bedroom.dresser=mxgraph.floorplan.dresser;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bedroom.armoire=mxgraph.floorplan.dresser;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bedroom.lamp=mxgraph.floorplan.floor_lamp;strokeWidth=1
# FLOORPLAN v2 LIVING ROOM
#composite
com.gliffy.shape.floorplan.floorplan_v2.living_room.coffee_table=mxgraph.floorplan.table
com.gliffy.shape.floorplan.floorplan_v2.living_room.bookcase=mxgraph.floorplan.bookcase
com.gliffy.shape.floorplan.floorplan_v2.living_room.floor_lamp=mxgraph.floorplan.floor_lamp
com.gliffy.shape.floorplan.floorplan_v2.living_room.lamp=mxgraph.floorplan.floor_lamp
com.gliffy.shape.floorplan.floorplan_v2.living_room.side_table=rect
com.gliffy.shape.floorplan.floorplan_v2.living_room.couch=mxgraph.floorplan.couch
com.gliffy.shape.floorplan.floorplan_v2.living_room.plant=mxgraph.floorplan.plant
com.gliffy.shape.floorplan.floorplan_v2.living_room.flat_tv=mxgraph.floorplan.flat_tv
com.gliffy.shape.floorplan.floorplan_v2.living_room.tv=mxgraph.floorplan.crt_tv
com.gliffy.shape.floorplan.floorplan_v2.living_room.loveseat=mxgraph.floorplan.couch
com.gliffy.shape.floorplan.floorplan_v2.living_room.small_loveseat=mxgraph.floorplan.sofa
com.gliffy.shape.floorplan.floorplan_v2.living_room.coffee_table=mxgraph.floorplan.table;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.bookcase=mxgraph.floorplan.bookcase;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.floor_lamp=mxgraph.floorplan.floor_lamp;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.lamp=mxgraph.floorplan.floor_lamp;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.side_table=rect;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.couch=mxgraph.floorplan.couch;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.plant=mxgraph.floorplan.plant;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.flat_tv=mxgraph.floorplan.flat_tv;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.tv=mxgraph.floorplan.crt_tv;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.loveseat=mxgraph.floorplan.couch;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.small_loveseat=mxgraph.floorplan.sofa;strokeWidth=1
#com.gliffy.shape.floorplan.floorplan_v2.living_room.ottoman=
com.gliffy.shape.floorplan.floorplan_v2.living_room.circular_rug=ellipse
com.gliffy.shape.floorplan.floorplan_v2.living_room.rectangular_rug=rect
com.gliffy.shape.floorplan.floorplan_v2.living_room.circular_rug=ellipse;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.living_room.rectangular_rug=rect;strokeWidth=1
# FLOORPLAN v2 DINING ROOM
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_wood=rect
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_glass=rect
com.gliffy.shape.floorplan.floorplan_v2.dining_room.chair=mxgraph.floorplan.chair
#composite
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_4_chairs=mxgraph.floorplan.table_1
#composite
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_4_chairs_square=mxgraph.floorplan.table_2
#composite
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_6_chairs_wood=mxgraph.floorplan.table_4
#composite
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_6_chairs=mxgraph.floorplan.table_4
#composite
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_circular=mxgraph.floorplan.table_3
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_wood=rect;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_glass=rect;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.dining_room.chair=mxgraph.floorplan.chair;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_4_chairs=mxgraph.floorplan.table_1;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_4_chairs_square=mxgraph.floorplan.table_2;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_6_chairs_wood=mxgraph.floorplan.table_4;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_6_chairs=mxgraph.floorplan.table_4;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.dining_room.table_circular=mxgraph.floorplan.table_3;strokeWidth=1
# FLOORPLAN v2 KITCHEN
com.gliffy.shape.floorplan.floorplan_v2.kitchen.stool=mxgraph.floorplan.chair;flipV=1
com.gliffy.shape.floorplan.floorplan_v2.kitchen.range=mxgraph.floorplan.range_2
com.gliffy.shape.floorplan.floorplan_v2.kitchen.refrigerator=mxgraph.floorplan.refrigerator
com.gliffy.shape.floorplan.floorplan_v2.kitchen.sink_single1=mxgraph.floorplan.sink_1
com.gliffy.shape.floorplan.floorplan_v2.kitchen.sink_single2=mxgraph.floorplan.sink_2
com.gliffy.shape.floorplan.floorplan_v2.kitchen.sink_double_2d=mxgraph.floorplan.sink_double
com.gliffy.shape.floorplan.floorplan_v2.kitchen.stool=mxgraph.floorplan.chair;flipV=1;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.kitchen.range=mxgraph.floorplan.range_2;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.kitchen.refrigerator=mxgraph.floorplan.refrigerator;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.kitchen.sink_single1=mxgraph.floorplan.sink_1;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.kitchen.sink_single2=mxgraph.floorplan.sink_2;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.kitchen.sink_double_2d=mxgraph.floorplan.sink_double;strokeWidth=1
# FLOORPLAN v2 BATHROOM
com.gliffy.shape.floorplan.floorplan_v2.bathroom.bathtub=mxgraph.floorplan.bathtub;flipH=1
com.gliffy.shape.floorplan.floorplan_v2.bathroom.toilet=mxgraph.floorplan.toilet
com.gliffy.shape.floorplan.floorplan_v2.bathroom.shower=mxgraph.floorplan.shower
com.gliffy.shape.floorplan.floorplan_v2.bathroom.sink_single1=mxgraph.floorplan.sink_1
com.gliffy.shape.floorplan.floorplan_v2.bathroom.sink_single2=mxgraph.floorplan.sink_2
com.gliffy.shape.floorplan.floorplan_v2.bathroom.bathtub=mxgraph.floorplan.bathtub;flipH=1;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bathroom.toilet=mxgraph.floorplan.toilet;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bathroom.shower=mxgraph.floorplan.shower;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bathroom.sink_single1=mxgraph.floorplan.sink_1;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.bathroom.sink_single2=mxgraph.floorplan.sink_2;strokeWidth=1
# FLOORPLAN v2 OFFICE
com.gliffy.shape.floorplan.floorplan_v2.office.cubicle=mxgraph.floorplan.wallU
com.gliffy.shape.floorplan.floorplan_v2.office.wall_horizontal=mxgraph.floorplan.wall
com.gliffy.shape.floorplan.floorplan_v2.office.wall_vertical=mxgraph.floorplan.wall;direction=south
com.gliffy.shape.floorplan.floorplan_v2.office.office_chair=mxgraph.floorplan.office_chair
com.gliffy.shape.floorplan.floorplan_v2.office.computer_crt=mxgraph.floorplan.workstation
com.gliffy.shape.floorplan.floorplan_v2.office.desk_l=mxgraph.floorplan.desk_corner_2
com.gliffy.shape.floorplan.floorplan_v2.office.desk_office=rect
com.gliffy.shape.floorplan.floorplan_v2.office.desk_metal=rect
com.gliffy.shape.floorplan.floorplan_v2.office.desk_metal_l=mxgraph.floorplan.desk_corner_2
com.gliffy.shape.floorplan.floorplan_v2.office.computer_lcd=mxgraph.floorplan.workstation
com.gliffy.shape.floorplan.floorplan_v2.office.copier=mxgraph.floorplan.copier
com.gliffy.shape.floorplan.floorplan_v2.office.cubicle=mxgraph.floorplan.wallU;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.wall_horizontal=mxgraph.floorplan.wall;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.wall_vertical=mxgraph.floorplan.wall;direction=south;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.office_chair=mxgraph.floorplan.office_chair;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.computer_crt=mxgraph.floorplan.workstation;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.desk_l=mxgraph.floorplan.desk_corner_2;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.desk_office=rect;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.desk_metal=rect;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.desk_metal_l=mxgraph.floorplan.desk_corner_2;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.computer_lcd=mxgraph.floorplan.workstation;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.copier=mxgraph.floorplan.copier;strokeWidth=1
#com.gliffy.shape.floorplan.floorplan_v2.office.desk_lamp=
com.gliffy.shape.floorplan.floorplan_v2.office.laptop=mxgraph.floorplan.laptop
com.gliffy.shape.floorplan.floorplan_v2.office.laptop=mxgraph.floorplan.laptop;strokeWidth=1
#com.gliffy.shape.floorplan.floorplan_v2.office.telephone=
com.gliffy.shape.floorplan.floorplan_v2.office.printer=mxgraph.floorplan.printer
com.gliffy.shape.floorplan.floorplan_v2.office.scanner=roundrect
#composite
com.gliffy.shape.floorplan.floorplan_v2.office.table_3person=mxgraph.floorplan.table_3
#composite
com.gliffy.shape.floorplan.floorplan_v2.office.table_6person=mxgraph.floorplan.table_3
#composite
com.gliffy.shape.floorplan.floorplan_v2.office.table_10person=mxgraph.floorplan.table_5
com.gliffy.shape.floorplan.floorplan_v2.office.vending_machine=roundrect
com.gliffy.shape.floorplan.floorplan_v2.office.printer=mxgraph.floorplan.printer;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.scanner=roundrect;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.table_3person=mxgraph.floorplan.table_3;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.table_6person=mxgraph.floorplan.table_3;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.table_10person=mxgraph.floorplan.table_5;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.vending_machine=roundrect;strokeWidth=1
#com.gliffy.shape.floorplan.floorplan_v2.office.video_projector=
#com.gliffy.shape.floorplan.floorplan_v2.office.video_screen=
com.gliffy.shape.floorplan.floorplan_v2.office.water_cooler=mxgraph.floorplan.water_cooler
com.gliffy.shape.floorplan.floorplan_v2.office.plant=mxgraph.floorplan.plant
com.gliffy.shape.floorplan.floorplan_v2.office.water_cooler=mxgraph.floorplan.water_cooler;strokeWidth=1
com.gliffy.shape.floorplan.floorplan_v2.office.plant=mxgraph.floorplan.plant;strokeWidth=1
# FLOORPLAN v2 MISCELLANEOUS
#com.gliffy.shape.floorplan.floorplan_v2.miscellaneous.washing_machine=
#com.gliffy.shape.floorplan.floorplan_v2.miscellaneous.dryer=
com.gliffy.shape.floorplan.floorplan_v2.miscellaneous.piano=mxgraph.floorplan.piano
com.gliffy.shape.floorplan.floorplan_v2.miscellaneous.piano=mxgraph.floorplan.piano;strokeWidth=1
#com.gliffy.shape.floorplan.floorplan_v2.miscellaneous.pool_table=
#com.gliffy.shape.floorplan.floorplan_v2.miscellaneous.drumset=
#com.gliffy.shape.floorplan.floorplan_v2.miscellaneous.gas_furnace=
#
# MINDMAP
#
com.gliffy.shape.mindmap.mindmap_v1.default.main_topic=rect;rounded=1
com.gliffy.shape.mindmap.mindmap_v1.default.subtopic=rect;rounded=1
com.gliffy.shape.mindmap.mindmap_v1.default.child_node=rect;rounded=1;dashed=1
com.gliffy.shape.mindmap.mindmap_v1.default.main_topic=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.mindmap.mindmap_v1.default.subtopic=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.shape.mindmap.mindmap_v1.default.child_node=rect;rounded=1;dashed=1;arcSize=15;absoluteArcSize=1
#
# Child shape TID
@ -1530,7 +1513,18 @@ com.gliffy.stencil.boundary_lifeline.uml_v2=umlBoundary
com.gliffy.stencil.object_timeline.uml_v1=line;direction=south;dashed=1
com.gliffy.stencil.control_lifeline.uml_v2=umlControl
com.gliffy.stencil.entity_lifeline.uml_v2=umlEntity
com.gliffy.stencil.ui.ui_v3.containers_content.speech_bubble=rect;rounded=1
com.gliffy.stencil.ui.ui_v3.containers_content.speech_bubble=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.stencil.ui.ui_v3.containers_content.speech_bubble_right=mxgraph.basic.orthogonal_triangle;direction=south
com.gliffy.stencil.ui.ui_v3.containers_content.speech_bubble_left=mxgraph.basic.orthogonal_triangle;direction=south;flipH=1
com.gliffy.stencil.rectangle.basic_v1=rect
com.gliffy.stencil.iphone.iphone_ios7.navigation.action_back=mxgraph.ios7.misc.left;strokeWidth=3;strokeColor=#157EFA
com.gliffy.stencil.round_rectangle.basic_v1=rect;rounded=1;arcSize=15;absoluteArcSize=1
com.gliffy.stencil.triangle.basic_v1=mxgraph.flowchart.extract_or_measurement
com.gliffy.stencil.rectangle.fill_line_top=partialRectangle;bottom=0;right=0;left=0
com.gliffy.stencil.rectangle.white_no_line_opacity_68=rect;strokeColor=none;opacity=68
com.gliffy.stencil.rectangle.fill_line_bottom=partialRectangle;top=0;right=0;left=0
com.gliffy.stencil.rectangle.no_fill_line_bottom_2px_off=partialRectangle;top=0;right=0;left=0;fillColor=none
com.gliffy.stencil.rectangle.no_fill_half_line_right=partialRectangle;top=0;bottom=0;left=0
com.gliffy.stencil.rectangle.basic_v1_whitened_68_percent=rect;opacity=68
#in current configuration, we cannot add subshapes (the circle)
com.gliffy.stencil.rectangle.fill_no_line_circle_left=rect;strokeColor=none

View file

@ -8,7 +8,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
import com.mxgraph.io.gliffy.importer.PostDeserializer.PostDeserializable;
import com.mxgraph.model.mxCell;
@ -27,6 +26,8 @@ public class GliffyObject implements PostDeserializable
private static Set<String> MINDMAP_SHAPES = new HashSet<>();
private static Set<String> FILLCLR_IS_STROKECLR_SHAPES = new HashSet<>();
private static Map<String, double[]> SHAPES_COORD_FIX = new HashMap<>();
public float x;
@ -148,18 +149,53 @@ public class GliffyObject implements PostDeserializable
GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v1.default.object_timeline");
GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v1.default.class");
GROUP_SHAPES.add("com.gliffy.shape.uml.uml_v1.default.object");
//ios
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.containers_content.table");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.forms_controls.button_stack");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.forms_controls.alert_2options");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.forms_controls.alert");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.navigation.contextual_menu");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.navigation.nav_3tabs");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.containers_content.title_bar");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.navigation.tab_bar");
GROUP_SHAPES.add("com.gliffy.shape.iphone.iphone_ios7.forms_controls.search");
//android
GROUP_SHAPES.add("com.gliffy.shape.android.android_v1.general.dialog");
GROUP_SHAPES.add("com.gliffy.shape.android.android_v1.general.list_1line");
GROUP_SHAPES.add("com.gliffy.shape.android.android_v1.general.list_2lines");
GROUP_SHAPES.add("com.gliffy.shape.android.android_v1.general.tabs01");
GROUP_SHAPES.add("com.gliffy.shape.android.android_v1.general.tabs02");
//others
GROUP_SHAPES.add("com.gliffy.shape.network.network_v3.business.user_group");
//ui
GROUP_SHAPES.add("com.gliffy.shape.ui.ui_v3.navigation.navbar");
GROUP_SHAPES.add("com.gliffy.shape.ui.ui_v3.navigation.navbar_vertical");
GROUP_SHAPES.add("com.gliffy.shape.ui.ui_v3.forms_controls.dropdown");
//It is a group but we have one similar
//GROUP_SHAPES.add("com.gliffy.shape.ui.ui_v3.forms_controls.audio_controls");
MINDMAP_SHAPES.add("com.gliffy.shape.mindmap.mindmap_v1.default.main_topic");
MINDMAP_SHAPES.add("com.gliffy.shape.mindmap.mindmap_v1.default.subtopic");
MINDMAP_SHAPES.add("com.gliffy.shape.mindmap.mindmap_v1.default.child_node");
//This map is used to change Gliffy coordinates to match mxGraph ones
//Format [xShift, yShift, widthShift, heightShift, DONT REPOSITION TEXT] values between ]-1, 1[ means percentage
SHAPES_COORD_FIX.put("com.gliffy.shape.flowchart.flowchart_v1.default.paper_tape", new double[]{0, -0.1, 0, 0.2});
SHAPES_COORD_FIX.put("com.gliffy.shape.uml.uml_v1.default.node", new double[]{0, -10, 10, 10});
SHAPES_COORD_FIX.put("com.gliffy.shape.uml.uml_v2.deployment.node", new double[]{0, -10, 10, 10});
SHAPES_COORD_FIX.put("com.gliffy.shape.uml.uml_v2.deployment.device_node", new double[]{0, -10, 10, 10});
SHAPES_COORD_FIX.put("com.gliffy.shape.uml.uml_v2.deployment.execution_environment_node", new double[]{0, -10, 10, 10});
SHAPES_COORD_FIX.put("com.gliffy.shape.flowchart.flowchart_v1.default.data_storage", new double[]{0, 0, 0.115, 0});
//these shapes cannot be resized (width is fixed) in Gliffy
SHAPES_COORD_FIX.put("com.gliffy.stencil.entity_lifeline.uml_v2", new double[]{10, 0, -20, 0});
SHAPES_COORD_FIX.put("com.gliffy.stencil.boundary_lifeline.uml_v2", new double[]{35, 0, -70, 0});
SHAPES_COORD_FIX.put("com.gliffy.stencil.control_lifeline.uml_v2", new double[]{10, 0, -20, 0});
//Our browser window has a larger header so increase it
SHAPES_COORD_FIX.put("com.gliffy.shape.ui.ui_v3.containers_content.browser", new double[]{0, -40, 0, 40, 1});
//There are many shapes where fillColor is the strokeColor
FILLCLR_IS_STROKECLR_SHAPES.add("com.gliffy.stencil.rectangle.no_fill_line_bottom_2px_off");
}
public GliffyObject()
@ -257,9 +293,9 @@ public class GliffyObject implements PostDeserializable
public boolean isGroup()
{
return (uid != null && (GROUP_SHAPES.contains(uid) || uid.startsWith("com.gliffy.shape.table")))
return (hasChildren() && ((uid != null && (GROUP_SHAPES.contains(uid) || uid.startsWith("com.gliffy.shape.table")))
//Since we treat text in a different way (added as cell value instead of another child cell, this is probably the best way to detect groups when uid is null)
|| (uid == null && hasChildren() && !children.get(0).isText());
|| (uid == null && !children.get(0).isText())));
}
public boolean isSelection()
@ -517,7 +553,7 @@ public class GliffyObject implements PostDeserializable
public void adjustGeo(mxGeometry geo)
{
double[] arr = SHAPES_COORD_FIX.get(uid);
double[] arr = SHAPES_COORD_FIX.get(uid != null? uid : (graphic != null && graphic.getShape() != null ? graphic.getShape().tid : null));
if (arr != null)
{
@ -536,7 +572,7 @@ public class GliffyObject implements PostDeserializable
{
double[] arr = SHAPES_COORD_FIX.get(uid);
if (arr != null)
if (arr != null && arr.length == 4)
{
mxGeometry shifts = getAdjustShifts(arr, x, y, width, height);
@ -544,4 +580,9 @@ public class GliffyObject implements PostDeserializable
textObject.y -= shifts.getY();
}
}
public boolean isUseFillColor4StrokeColor()
{
return FILLCLR_IS_STROKECLR_SHAPES.contains(uid != null? uid : (graphic != null && graphic.getShape() != null ? graphic.getShape().tid : null));
}
}

View file

@ -29,6 +29,8 @@ public class GliffyText implements PostDeserializer.PostDeserializable
public Double lineTValue = 0.5;//places the text in the middle of the line
public Integer linePerpValue;
public String cardinalityType;
public String overflow;
@ -201,6 +203,11 @@ public class GliffyText implements PostDeserializer.PostDeserializable
return null;
}
public void setHalign(String halign)
{
this.halign = halign;
}
public void setValign(String valign)
{
this.valign = valign;

View file

@ -45,6 +45,8 @@ public class Graphic
public Integer endArrow;
public String interpolationType;
public Integer cornerRadius;
public List<float[]> controlPath = new ArrayList<float[]>();
}

View file

@ -40,8 +40,23 @@ public class ProxyServlet extends HttpServlet
HttpServletResponse response) throws ServletException, IOException
{
String urlParam = request.getParameter("url");
// build the UML source from the compressed request parameter
String ref = request.getHeader("referer");
String dom = null;
if (urlParam != null)
if (ref != null && ref.toLowerCase()
.matches("https?://([a-z0-9,-]+[.])*draw[.]io/.*"))
{
dom = ref.toLowerCase().substring(0, ref.indexOf(".draw.io/") + 8);
}
else if (ref != null && ref.toLowerCase()
.matches("https?://([a-z0-9,-]+[.])*quipelements[.]com/.*"))
{
dom = ref.toLowerCase().substring(0, ref.indexOf(".quipelements.com/") + 17);
}
if (dom != null && urlParam != null)
{
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
@ -56,26 +71,7 @@ public class ProxyServlet extends HttpServlet
response.setHeader("Pragma", "no-cache"); // HTTP 1.0
response.setHeader("Cache-control", "private, no-cache, no-store");
response.setHeader("Expires", "0");
// build the UML source from the compressed request parameter
String ref = request.getHeader("referer");
String dom = null;
if (ref != null && ref.toLowerCase()
.matches("https?://([a-z0-9,-]+[.])*draw[.]io/.*"))
{
dom = ref.toLowerCase().substring(0, ref.indexOf(".draw.io/") + 8);
}
else if (ref != null && ref.toLowerCase()
.matches("https?://([a-z0-9,-]+[.])*quipelements[.]com/.*"))
{
dom = ref.toLowerCase().substring(0, ref.indexOf(".quipelements.com/") + 17);
}
if (dom != null)
{
response.addHeader("Access-Control-Allow-Origin", dom);
}
response.addHeader("Access-Control-Allow-Origin", dom);
// Status code pass-through
if (connection instanceof HttpURLConnection)

View file

@ -1,7 +1,7 @@
CACHE MANIFEST
# THIS FILE WAS GENERATED. DO NOT MODIFY!
# 03/15/2018 03:18 PM
# 03/21/2018 05:29 PM
app.html
index.html?offline=1

View file

@ -98,7 +98,7 @@ AC.initAsync = function(baseUrl)
editor.setAttribute('frameborder', '0');
//editor.setAttribute('src', 'https://9674265b.ngrok.io/?dev=1&drawdev=1&' +
editor.setAttribute('src', hostUrl + '/?' +
'ui=atlas&p=ac&embed=1&modified=unsavedChanges' +
'ui=atlas&p=ac148&embed=1&modified=unsavedChanges' +
((!AC.autoExit) ? '&saveAndExit=1' : '') +
'&keepmodified=1&spin=1&libraries=1&proto=json' +
((lang != null) ? '&lang=' + lang : '') + ((site != null) ? '&site=' + encodeURIComponent(site) : '') +
@ -588,7 +588,7 @@ AC.init = function(baseUrl, location, pageId, editor, diagramName, initialXml, d
if (fileExists)
{
err(name, null, 'fileExists');
err(name, name + ' already exists');
}
else
{

View file

@ -239,7 +239,7 @@ if (lang != null)
// LATER: Disable responsive resize while lightbox shows
var container = document.createElement('div');
container.style.cssText = 'position:absolute;box-sizing:border-box;' +
'max-width:100%;margin-bottom:' + tbHeight +'px;border:1px solid transparent;';
'max-width:100%;border:1px solid transparent;';
document.body.appendChild(container);
var doc = mxUtils.parseXml(xml);
@ -281,6 +281,8 @@ if (lang != null)
width += 3;
updateContainerWidth.apply(this, arguments);
};
config.resize = true;
}
var viewer = new GraphViewer(container, doc.documentElement, config);
@ -290,7 +292,7 @@ if (lang != null)
function updateHeight(height)
{
AP.resize('100%', (tbHeight == 0) ? Math.ceil(height) : container.offsetHeight + tbHeight);
AP.resize('100%', Math.ceil(height) + tbHeight + 2 * border);
};
viewer.graph.doResizeContainer = function(width, height)
@ -305,14 +307,14 @@ if (lang != null)
updateHeight(height);
};
updateHeight();
updateHeight(container.offsetHeight);
viewer.showLightbox = function()
{
dialog.create(
{
header: name,
key: 'lightbox',
key: 'lightbox',
size: 'fullscreen',
customData: {id: id, name: name, revision: revision, page: viewer.currentPage, links: links},
chrome: true

View file

@ -20,7 +20,6 @@ function createWindow (opt = {})
{
width: 1600,
height: 1200,
nodeIntegration: false,
'web-security': false,
allowRunningInsecureContent: __DEV__,
webPreferences: {

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -163,7 +163,7 @@ App.DROPBOX_APPKEY = 'libwls2fa9szdji';
/**
* Sets URL to load the Dropbox SDK from
*/
App.DROPBOX_URL = 'https://unpkg.com/dropbox@2.5.13/dist/Dropbox-sdk.min.js';
App.DROPBOX_URL = 'js/dropbox/Dropbox-sdk.min.js';
/**
* Sets the delay for autosave in milliseconds. Default is 2000.
@ -195,8 +195,9 @@ App.FOOTER_PLUGIN_URL = 'https://www.jgraph.com/drawio-footer.js';
* https://desk.draw.io/solution/articles/16000042546
*/
App.pluginRegistry = {'4xAKTrabTpTzahoLthkwPNUn': '/plugins/explore.js',
'ex': '/plugins/explore.js', 'p1': '/plugins/p1.js', 'ac': '/plugins/connect.js',
'acj': '/plugins/connectJira.js', 'voice': '/plugins/voice.js',
'ex': '/plugins/explore.js', 'p1': '/plugins/p1.js',
'ac': '/plugins/connect.js', 'acj': '/plugins/connectJira.js',
'ac148': '/plugins/cConf-1-4-8.js', 'voice': '/plugins/voice.js',
'tips': '/plugins/tooltips.js', 'svgdata': '/plugins/svgdata.js',
'doors': '/plugins/doors.js', 'electron': 'plugins/electron.js',
'number': '/plugins/number.js', 'sql': '/plugins/sql.js',

View file

@ -41,6 +41,7 @@ mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Basic.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Bootstrap.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-BPMN.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Cabinet.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-CiscoSafe.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Citrix.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-EIP.js');
mxscript(drawDevUrl + 'js/diagramly/sidebar/Sidebar-Electrical.js');

View file

@ -2832,7 +2832,9 @@ var NewDialog = function(editorUi, compact, showName, callback, createOnly, canc
var createButton = mxUtils.button(mxResources.get('create'), function()
{
createButton.setAttribute('disabled', 'disabled');
create();
createButton.removeAttribute('disabled');
});
createButton.className = 'geBtn gePrimaryBtn';

View file

@ -95,11 +95,23 @@
'# "style": "curved=1;endArrow=blockThin;endFill=1;fontSize=11;"}\n' +
'# connect: {"from": "refs", "to": "id", "style": "curved=1;fontSize=11;"}\n' +
'#\n' +
'## Node width. Possible value are px or auto. Default is auto.\n' +
'## Node x-coordinate. Possible value is a column name. Default is empty. Layouts will\n' +
'## override this value.\n' +
'#\n' +
'# left: \n' +
'#\n' +
'## Node y-coordinate. Possible value is a column name. Default is empty. Layouts will\n' +
'## override this value.\n' +
'#\n' +
'# top: \n' +
'#\n' +
'## Node width. Possible value is a number (in px), auto or an @ sign followed by a column\n' +
'## name that contains the value for the width. Default is auto.\n' +
'#\n' +
'# width: auto\n' +
'#\n' +
'## Node height. Possible value are px or auto. Default is auto.\n' +
'## Node height. Possible value is a number (in px), auto or an @ sign followed by a column\n' +
'## name that contains the value for the height. Default is auto.\n' +
'#\n' +
'# height: auto\n' +
'#\n' +
@ -619,7 +631,7 @@
this.graph.addListener(mxEvent.SIZE, mxUtils.bind(this, function(sender, evt)
{
if (this.graph.mathEnabled)
if (this.graph.mathEnabled && this.graph.container.style.visibility != 'hidden')
{
Editor.MathJaxRender(this.graph.container);
}

View file

@ -9144,6 +9144,8 @@
var identity = null;
var width = 'auto';
var height = 'auto';
var left = null;
var top = null;
var edgespacing = 40;
var nodespacing = 40;
var padding = 0;
@ -9159,7 +9161,7 @@
graph.scrollCellToVisible(graph.getSelectionCell());
};
// Computes unscaled, untranslated graph bounds
// Computes unscaled, untranslated graph bounds
var pt = graph.getFreeInsertPoint();
var x0 = pt.x;
var y0 = pt.y;
@ -9228,6 +9230,14 @@
{
height = value;
}
else if (key == 'left' && value.length > 0)
{
left = value;
}
else if (key == 'top' && value.length > 0)
{
top = value;
}
else if (key == 'ignore')
{
ignore = value.split(',');
@ -9320,7 +9330,7 @@
for (var j = 0; j < values.length; j++)
{
graph.setAttributeForCell(cell, keys[j], values[j]);
graph.setAttributeForCell(cell, keys[j], values[j]);
}
graph.setAttributeForCell(cell, 'placeholders', '1');
@ -9343,9 +9353,38 @@
graph.fireEvent(new mxEventObject('cellsInserted', 'cells', [cell]));
var size = this.editor.graph.getPreferredSizeForCell(cell);
cell.geometry.width = (width == 'auto') ? size.width + padding : parseFloat(width);
cell.geometry.height = (height == 'auto') ? size.height + padding : parseFloat(height);
y += cell.geometry.height + nodespacing;
if (cell.vertex)
{
if (left != null && cell.getAttribute(left) != null)
{
cell.geometry.x = x0 + parseFloat(cell.getAttribute(left));
}
if (top != null && cell.getAttribute(top) != null)
{
cell.geometry.y = y0 + parseFloat(cell.getAttribute(top));
}
if (width.charAt(0) == '@' && cell.getAttribute(width.substring(1)) != null)
{
cell.geometry.width = parseFloat(cell.getAttribute(width.substring(1)));
}
else
{
cell.geometry.width = (width == 'auto') ? size.width + padding : parseFloat(width);
}
if (height.charAt(0) == '@' && cell.getAttribute(height.substring(1)) != null)
{
cell.geometry.height = parseFloat(cell.getAttribute(height.substring(1)));
}
else
{
cell.geometry.height = (height == 'auto') ? size.height + padding : parseFloat(height);
}
y += cell.geometry.height + nodespacing;
}
cells.push(graph.addCell(cell));
}

View file

@ -406,7 +406,7 @@ GraphViewer.prototype.addSizeHandler = function()
updatingOverflow = true;
var tmp = this.graph.getGraphBounds();
if (container.offsetWidth < tmp.width + this.graph.border)
if (container.offsetWidth <= tmp.width + 2 * this.graph.border * this.graph.view.scale)
{
container.style.overflow = 'auto';
}
@ -504,7 +504,7 @@ GraphViewer.prototype.addSizeHandler = function()
if (this.graphConfig.resize || ((this.zoomEnabled || !this.autoFit) && this.graphConfig.resize != false))
{
this.graph.minimumContainerSize = new mxRectangle(0, 0, 100, this.toolbarHeight);
this.graph.minimumContainerSize = new mxRectangle(0, 0, 100, 1);
this.graph.resizeContainer = true;
}
else

View file

@ -376,7 +376,7 @@ EditorUi.prototype.initPages = function()
if (typeof(MathJax) !== 'undefined' && typeof(MathJax.Hub) !== 'undefined')
{
// Pending math should not be rendered if the graph has no math enabled
if (!ignorePendingMath)
if (!ignorePendingMath && this.editor != null)
{
if (MathJax.Hub.queue.pending == 1 && !this.editor.graph.mathEnabled)
{
@ -394,7 +394,7 @@ EditorUi.prototype.initPages = function()
}));
}
}
else if (typeof(Editor.MathJaxClear) !== 'undefined' && !this.editor.graph.mathEnabled)
else if (typeof(Editor.MathJaxClear) !== 'undefined' && (this.editor == null || !this.editor.graph.mathEnabled))
{
// Clears our own queue for async loading
ignorePendingMath = true;

View file

@ -32,7 +32,9 @@
this.createVertexTemplateEntry(s2 + 'moon', w * 0.75, h, '', 'Moon', null, null, this.getTagsForStencil(gn, 'moon', dt).join(' ')),
this.createVertexTemplateEntry(s2 + 'no_symbol', w, h, '', 'No Symbol', null, null, this.getTagsForStencil(gn, 'no_symbol', dt).join(' ')),
this.createVertexTemplateEntry(s + 'octagon2;align=center;verticalAlign=middle;dx=15;', w, h, '', 'Octagon', null, null, this.getTagsForStencil(gn, 'octagon', dt).join(' ')),
this.createVertexTemplateEntry(s2 + 'orthogonal_triangle', w, h, '', 'Orthogonal Triangle', null, null, this.getTagsForStencil(gn, 'orthogonal_triangle', dt).join(' ')),
this.createVertexTemplateEntry(s2 + 'orthogonal_triangle', w, h * 0.7, '', 'Orthogonal Triangle', null, null, this.getTagsForStencil(gn, 'orthogonal_triangle', dt).join(' ')),
this.createVertexTemplateEntry(s2 + 'acute_triangle;dx=0.5;', w, h * 0.7, '', 'Acute Triangle', null, null, this.getTagsForStencil(gn, 'acute_triangle', dt).join(' ')),
this.createVertexTemplateEntry(s2 + 'obtuse_triangle;dx=0.25;', w, h * 0.7, '', 'Obtuse Triangle', null, null, this.getTagsForStencil(gn, 'obtuse_triangle', dt).join(' ')),
this.createVertexTemplateEntry(s + 'oval_callout', w, h * 0.6, '', 'Oval Callout', null, null, this.getTagsForStencil(gn, 'oval_callout', dt).join(' ')),
this.createVertexTemplateEntry(s3 + 'parallelogram;whiteSpace=wrap;align=center;size=0.24;', w, h * 0.6, '', 'Parallelepiped', null, null, this.getTagsForStencil(gn, 'parallelepiped', dt).join(' ')),
this.createVertexTemplateEntry(s + 'pentagon', w, h * 0.9, '', 'Pentagon', null, null, this.getTagsForStencil(gn, 'pentagon', dt).join(' ')),

View file

@ -0,0 +1,426 @@
(function()
{
// Adds Cisco Safe stencils
Sidebar.prototype.addCiscoSafePalette = function()
{
this.addCiscoSafeArchitecturePalette();
this.addCiscoSafeCapabilityPalette();
this.addCiscoSafeDesignPalette();
this.addCiscoSafeThreatPalette();
};
Sidebar.prototype.addCiscoSafeArchitecturePalette = function()
{
var w = 50;
var h = 50;
var s = mxConstants.STYLE_VERTICAL_LABEL_POSITION + '=bottom;html=1;fillColor=#6ABD46;' + mxConstants.STYLE_VERTICAL_ALIGN + '=top;shape=mxgraph.cisco_safe.architecture.';
var gn = 'mxgraph.cisco_safe.architecture';
var dt = 'cisco safe architecture';
this.addPaletteFunctions('cisco_safeArchitecture', 'Cisco Safe / Architecture', false,
[
this.createVertexTemplateEntry(s + 'aci_controller;',
w, h, '', 'ACI Controller', null, null, this.getTagsForStencil(gn, 'aci controller', dt).join(' ')),
this.createVertexTemplateEntry(s + 'aci_leaf_switch;',
w, h, '', 'ACI Leaf Switch', null, null, this.getTagsForStencil(gn, 'aci leaf switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'aci_spine_switch;',
w, h, '', 'ACI Spine Switch', null, null, this.getTagsForStencil(gn, 'aci spine switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'adaptive_security_appliance;',
w, h, '', 'Adaptive Security Appliance', null, null, this.getTagsForStencil(gn, 'adaptive security appliance', dt).join(' ')),
this.createVertexTemplateEntry(s + 'automated_system;',
w, h, '', 'Automated System', null, null, this.getTagsForStencil(gn, 'automated system', dt).join(' ')),
this.createVertexTemplateEntry(s + 'blade_server;',
w, h, '', 'Blade Server', null, null, this.getTagsForStencil(gn, 'blade server', dt).join(' ')),
this.createVertexTemplateEntry(s + 'catalyst_switch;',
w, h, '', 'Catalyst Switch', null, null, this.getTagsForStencil(gn, 'catalyst switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'corporate_device;',
w, h, '', 'Corporate Device', null, null, this.getTagsForStencil(gn, 'corporate device', dt).join(' ')),
this.createVertexTemplateEntry(s + 'email_security;',
w, h, '', 'Email Security', null, null, this.getTagsForStencil(gn, 'email security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'fabric_switch;',
w, h, '', 'Fabric Switch', null, null, this.getTagsForStencil(gn, 'fabric switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'firepower_appliance;',
w, h, '', 'Firepower Appliance', null, null, this.getTagsForStencil(gn, 'firepower appliance', dt).join(' ')),
this.createVertexTemplateEntry(s + 'firewall;',
w, h, '', 'Firewall', null, null, this.getTagsForStencil(gn, 'firewall', dt).join(' ')),
this.createVertexTemplateEntry(s + 'generic_appliance;',
w, h, '', 'Generic Appliance', null, null, this.getTagsForStencil(gn, 'generic appliance', dt).join(' ')),
this.createVertexTemplateEntry(s + 'intrusion_detection;',
w, h, '', 'Intrusion Detection', null, null, this.getTagsForStencil(gn, 'intrusion detection', dt).join(' ')),
this.createVertexTemplateEntry(s + 'l3_switch;',
w, h, '', 'L3 Switch', null, null, this.getTagsForStencil(gn, 'l3 switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'load_balancer;',
w, h, '', 'Load Balancer', null, null, this.getTagsForStencil(gn, 'load balancer', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_1kv;',
w, h, '', 'Nexus 1kv', null, null, this.getTagsForStencil(gn, 'nexus 1kv', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_data_center_switch;',
w, h, '', 'Nexus Data Center Switch', null, null, this.getTagsForStencil(gn, 'nexus data center switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_fabric_switch;',
w, h, '', 'Nexus Fabric Switch', null, null, this.getTagsForStencil(gn, 'nexus fabric switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_switch;',
w, h, '', 'Nexus Switch', null, null, this.getTagsForStencil(gn, 'nexus switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'phone;',
w, h, '', 'Phone', null, null, this.getTagsForStencil(gn, 'phone', dt).join(' ')),
this.createVertexTemplateEntry(s + 'router;',
w, h, '', 'Router', null, null, this.getTagsForStencil(gn, 'router', dt).join(' ')),
this.createVertexTemplateEntry(s + 'secure_server;',
w, h, '', 'Secure Server', null, null, this.getTagsForStencil(gn, 'secure server', dt).join(' ')),
this.createVertexTemplateEntry(s + 'server;',
w, h, '', 'Server', null, null, this.getTagsForStencil(gn, 'server', dt).join(' ')),
this.createVertexTemplateEntry(s + 'stacked_switch;',
w, h, '', 'Stacked Switch', null, null, this.getTagsForStencil(gn, 'stacked switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'storage;',
w, h, '', 'Storage', null, null, this.getTagsForStencil(gn, 'storage', dt).join(' ')),
this.createVertexTemplateEntry(s + 'switch;',
w, h, '', 'Switch', null, null, this.getTagsForStencil(gn, 'switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'tls_appliance;',
w, h, '', 'TLS Appliance', null, null, this.getTagsForStencil(gn, 'tls appliance', dt).join(' ')),
this.createVertexTemplateEntry(s + 'unified_access_switch;',
w, h, '', 'Unified Access Switch', null, null, this.getTagsForStencil(gn, 'unified access switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'web_application_firewall;',
w, h, '', 'Web Application Firewall', null, null, this.getTagsForStencil(gn, 'web application firewall', dt).join(' ')),
this.createVertexTemplateEntry(s + 'web_security;',
w, h, '', 'Web Security', null, null, this.getTagsForStencil(gn, 'web security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wide_area_application_engine;',
w, h, '', 'Wide Area Application Engine', null, null, this.getTagsForStencil(gn, 'wide area application engine', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wireless_access_point;',
w, h, '', 'Wireless Access Point', null, null, this.getTagsForStencil(gn, 'wireless access point', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wireless_lan_controller;',
w, h, '', 'Wireless LAN Controller', null, null, this.getTagsForStencil(gn, 'wireless lan controller', dt).join(' '))
]);
};
Sidebar.prototype.addCiscoSafeCapabilityPalette = function()
{
var w = 50;
var h = 50;
var s = mxConstants.STYLE_VERTICAL_LABEL_POSITION + '=bottom;html=1;fillColor=#28A8E0;' + mxConstants.STYLE_VERTICAL_ALIGN + '=top;shape=mxgraph.cisco_safe.capability.';
var gn = 'mxgraph.cisco_safe.capability';
var dt = 'cisco safe capability';
this.addPaletteFunctions('cisco_safeCapability', 'Cisco Safe / Capability', false,
[
this.createVertexTemplateEntry(s + 'access_control_using_trustsec;',
w, h, '', 'Access Control Using TrustSec', null, null, this.getTagsForStencil(gn, 'access control using trustsec', dt).join(' ')),
this.createVertexTemplateEntry(s + 'analysis_correlation',
w, h, '', 'Analysis Correlation', null, null, this.getTagsForStencil(gn, 'analysis correlation', dt).join(' ')),
this.createVertexTemplateEntry(s + 'anomaly_detection;',
w, h, '', 'Anomaly Detection', null, null, this.getTagsForStencil(gn, 'anomaly detection', dt).join(' ')),
this.createVertexTemplateEntry(s + 'anti_malware;',
w, h, '', 'Anti-Malware', null, null, this.getTagsForStencil(gn, 'anti malware', dt).join(' ')),
this.createVertexTemplateEntry(s + 'anti_spam;',
w, h, '', 'Anti-Spam', null, null, this.getTagsForStencil(gn, 'anti spam', dt).join(' ')),
this.createVertexTemplateEntry(s + 'anti_virus;',
w, h, '', 'Anti-Virus', null, null, this.getTagsForStencil(gn, 'anti virus', dt).join(' ')),
this.createVertexTemplateEntry(s + 'application;',
w, h, '', 'Application', null, null, this.getTagsForStencil(gn, 'application', dt).join(' ')),
this.createVertexTemplateEntry(s + 'application_visibility_control;',
w, h, '', 'Application Visibility Control', null, null, this.getTagsForStencil(gn, 'application visibility control', dt).join(' ')),
this.createVertexTemplateEntry(s + 'client_based_security;',
w, h, '', 'Client Based Security', null, null, this.getTagsForStencil(gn, 'client based security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'cloud_web_security;',
w, h, '', 'Cloud Web Security', null, null, this.getTagsForStencil(gn, 'cloud web security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'conference_bridge;',
w, h, '', 'Conference Bridge', null, null, this.getTagsForStencil(gn, 'conference bridge', dt).join(' ')),
this.createVertexTemplateEntry(s + 'database;',
w, h, '', 'Database', null, null, this.getTagsForStencil(gn, 'database', dt).join(' ')),
this.createVertexTemplateEntry(s + 'data_loss_prevention;',
w, h, '', 'Data Loss Prevention', null, null, this.getTagsForStencil(gn, 'data loss prevention', dt).join(' ')),
this.createVertexTemplateEntry(s + 'distributed_denial_of_service_protection;',
w, h, '', 'Distributed Denial of Service Protection', null, null, this.getTagsForStencil(gn, 'distributed denial of service protection', dt).join(' ')),
this.createVertexTemplateEntry(s + 'dns;',
w, h, '', 'DNS', null, null, this.getTagsForStencil(gn, 'dns', dt).join(' ')),
this.createVertexTemplateEntry(s + 'email_encryption;',
w, h, '', 'Email Encryption', null, null, this.getTagsForStencil(gn, 'email encryption', dt).join(' ')),
this.createVertexTemplateEntry(s + 'email_security;',
w, h, '', 'Email Security', null, null, this.getTagsForStencil(gn, 'email security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'fabric_switching;',
w, h, '', 'Fabric Switching', null, null, this.getTagsForStencil(gn, 'fabric switching', dt).join(' ')),
this.createVertexTemplateEntry(s + 'firewall;',
w, h, '', 'Firewall', null, null, this.getTagsForStencil(gn, 'firewall', dt).join(' ')),
this.createVertexTemplateEntry(s + 'flow_analytics;',
w, h, '', 'Flow Analytics', null, null, this.getTagsForStencil(gn, 'flow analytics', dt).join(' ')),
this.createVertexTemplateEntry(s + 'identity_authorization;',
w, h, '', 'Identity Authorization', null, null, this.getTagsForStencil(gn, 'identity authorization', dt).join(' ')),
this.createVertexTemplateEntry(s + 'identity_authorization_alt;',
w, h, '', 'Identity Authorization (alternative)', null, null, this.getTagsForStencil(gn, 'identity authorization alt alternative', dt).join(' ')),
this.createVertexTemplateEntry(s + 'intrusion_detection;',
w, h, '', 'Intrusion Detection', null, null, this.getTagsForStencil(gn, 'intrusion detection', dt).join(' ')),
this.createVertexTemplateEntry(s + 'intrusion_prevention;',
w, h, '', 'Intrusion Prevention', null, null, this.getTagsForStencil(gn, 'intrusion prevention', dt).join(' ')),
this.createVertexTemplateEntry(s + 'l2_l3_network;',
w, h, '', 'L2 L3 Network', null, null, this.getTagsForStencil(gn, 'l2 l3 network', dt).join(' ')),
this.createVertexTemplateEntry(s + 'l2_l3_network_virtual;',
w, h, '', 'L2 L3 Network (virtual)', null, null, this.getTagsForStencil(gn, 'l2 l3 network virtual', dt).join(' ')),
this.createVertexTemplateEntry(s + 'l2_switching;',
w, h, '', 'L2 Switching', null, null, this.getTagsForStencil(gn, 'l2 switching', dt).join(' ')),
this.createVertexTemplateEntry(s + 'l3_switching;',
w, h, '', 'L3 Switching', null, null, this.getTagsForStencil(gn, 'l3 switching', dt).join(' ')),
this.createVertexTemplateEntry(s + 'load_balancer;',
w, h, '', 'Load Balancer', null, null, this.getTagsForStencil(gn, 'load balancer', dt).join(' ')),
this.createVertexTemplateEntry(s + 'logging_reporting;',
w, h, '', 'Logging Reporting', null, null, this.getTagsForStencil(gn, 'logging reporting', dt).join(' ')),
this.createVertexTemplateEntry(s + 'malware_sandbox;',
w, h, '', 'Malware Sandbox', null, null, this.getTagsForStencil(gn, 'malware sandbox', dt).join(' ')),
this.createVertexTemplateEntry(s + 'mobile_device_manager;',
w, h, '', 'Mobile Device Manager', null, null, this.getTagsForStencil(gn, 'mobile device manager', dt).join(' ')),
this.createVertexTemplateEntry(s + 'monitoring;',
w, h, '', 'Monitoring', null, null, this.getTagsForStencil(gn, 'monitoring', dt).join(' ')),
this.createVertexTemplateEntry(s + 'policy_configuration;',
w, h, '', 'Policy Configuration', null, null, this.getTagsForStencil(gn, 'policy configuration', dt).join(' ')),
this.createVertexTemplateEntry(s + 'posture_assesment;',
w, h, '', 'Posture Assesment', null, null, this.getTagsForStencil(gn, 'posture assesment', dt).join(' ')),
this.createVertexTemplateEntry(s + 'routing;',
w, h, '', 'Routing', null, null, this.getTagsForStencil(gn, 'routing', dt).join(' ')),
this.createVertexTemplateEntry(s + 'server_based_security;',
w, h, '', 'Server Based Security', null, null, this.getTagsForStencil(gn, 'server based security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'ssl_tls_offload;',
w, h, '', 'SSL TLS Offload', null, null, this.getTagsForStencil(gn, 'ssl tls offload', dt).join(' ')),
this.createVertexTemplateEntry(s + 'storage;',
w, h, '', 'Storage', null, null, this.getTagsForStencil(gn, 'storage', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_intelligence;',
w, h, '', 'Threat Intelligence', null, null, this.getTagsForStencil(gn, 'threat intelligence', dt).join(' ')),
this.createVertexTemplateEntry(s + 'time_synchronization;',
w, h, '', 'Time Synchronization', null, null, this.getTagsForStencil(gn, 'time synchronization', dt).join(' ')),
this.createVertexTemplateEntry(s + 'user;',
w, h, '', 'User', null, null, this.getTagsForStencil(gn, 'user', dt).join(' ')),
this.createVertexTemplateEntry(s + 'video;',
w, h, '', 'Video', null, null, this.getTagsForStencil(gn, 'video', dt).join(' ')),
this.createVertexTemplateEntry(s + 'virtualized_capability;',
w, h, '', 'Virtualized Capability', null, null, this.getTagsForStencil(gn, 'virtualized capability', dt).join(' ')),
this.createVertexTemplateEntry(s + 'virtual_firewall;',
w, h, '', 'Virtual Firewall', null, null, this.getTagsForStencil(gn, 'virtual firewall', dt).join(' ')),
this.createVertexTemplateEntry(s + 'virtual_l2_switching;',
w, h, '', 'Virtual L2 Switching', null, null, this.getTagsForStencil(gn, 'virtual l2 switching', dt).join(' ')),
this.createVertexTemplateEntry(s + 'virtual_private_network;',
w, h, '', 'Virtual Private Network', null, null, this.getTagsForStencil(gn, 'virtual private network vpn', dt).join(' ')),
this.createVertexTemplateEntry(s + 'voice;',
w, h, '', 'Voice', null, null, this.getTagsForStencil(gn, 'voice', dt).join(' ')),
this.createVertexTemplateEntry(s + 'vpn_concentrator;',
w, h, '', 'VPN Concentrator', null, null, this.getTagsForStencil(gn, 'vpn concentrator virtual private network', dt).join(' ')),
this.createVertexTemplateEntry(s + 'vulnerability_management;',
w, h, '', 'Vulnerability Management', null, null, this.getTagsForStencil(gn, 'vulnerability management', dt).join(' ')),
this.createVertexTemplateEntry(s + 'web_application_firewall;',
w, h, '', 'Web Application Firewall', null, null, this.getTagsForStencil(gn, 'web application firewall', dt).join(' ')),
this.createVertexTemplateEntry(s + 'web_reputation_filtering_dcs;',
w, h, '', 'Web Reputation Filtering DCS', null, null, this.getTagsForStencil(gn, 'web reputation filtering dcs', dt).join(' ')),
this.createVertexTemplateEntry(s + 'web_security;',
w, h, '', 'Web Security', null, null, this.getTagsForStencil(gn, 'web security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wireless_connection;',
w, h, '', 'Wireless Connection', null, null, this.getTagsForStencil(gn, 'wireless connection', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wireless_intrusion_detection_system;',
w, h, '', 'Wireless Intrusion Detection System', null, null, this.getTagsForStencil(gn, 'wireless intrusion detection system', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wireless_intrusion_prevention_system;',
w, h, '', 'Wireless Intrusion Prevention System', null, null, this.getTagsForStencil(gn, 'wireless intrusion prevention system', dt).join(' '))
]);
};
Sidebar.prototype.addCiscoSafeDesignPalette = function()
{
var w = 50;
var h = 50;
var s = mxConstants.STYLE_VERTICAL_LABEL_POSITION + '=bottom;html=1;fillColor=#A153A0;' + mxConstants.STYLE_VERTICAL_ALIGN + '=top;shape=mxgraph.cisco_safe.design.';
var gn = 'mxgraph.cisco_safe.design';
var dt = 'cisco safe design';
this.addPaletteFunctions('cisco_safeDesign', 'Cisco Safe / Design', false,
[
this.createVertexTemplateEntry(s + 'access_point;',
w, h * 0.9, '', 'Access Point', null, null, this.getTagsForStencil(gn, 'access point', dt).join(' ')),
this.createVertexTemplateEntry(s + 'aci_controller;',
w, h * 0.9, '', 'ACI Controller', null, null, this.getTagsForStencil(gn, 'aci controller', dt).join(' ')),
this.createVertexTemplateEntry(s + 'aci_leaf_switch;',
w, h * 0.9, '', 'ACI Leaf Switch', null, null, this.getTagsForStencil(gn, 'aci leaf switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'aci_spine_switch;',
w, h * 0.9, '', 'ACI Spine Switch', null, null, this.getTagsForStencil(gn, 'aci spine switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'actor_1;',
w * 0.47, h, '', 'Actor (female)', null, null, this.getTagsForStencil(gn, 'actor female', dt).join(' ')),
this.createVertexTemplateEntry(s + 'actor_2;',
w * 0.38, h, '', 'Actor (male)', null, null, this.getTagsForStencil(gn, 'actor male', dt).join(' ')),
this.createVertexTemplateEntry(s + 'adaptive_security_appliance;',
w, h * 0.9, '', 'Adaptive Security Appliance', null, null, this.getTagsForStencil(gn, 'adaptive security appliance', dt).join(' ')),
this.createVertexTemplateEntry(s + 'automated_system;',
w, h * 0.9, '', 'Automated System', null, null, this.getTagsForStencil(gn, 'automated system', dt).join(' ')),
this.createVertexTemplateEntry(s + 'blade_server;',
w, h * 0.9, '', 'Blade Server', null, null, this.getTagsForStencil(gn, 'blade server', dt).join(' ')),
this.createVertexTemplateEntry(s + 'blank_device;',
w, h * 0.9, '', 'Blank Device', null, null, this.getTagsForStencil(gn, 'blank device', dt).join(' ')),
this.createVertexTemplateEntry(s + 'blank_service;',
w, h * 0.9, '', 'Blank Service', null, null, this.getTagsForStencil(gn, 'blank service', dt).join(' ')),
this.createVertexTemplateEntry(s + 'call_manager;',
w, h * 0.9, '', 'Call Manager', null, null, this.getTagsForStencil(gn, 'call manager', dt).join(' ')),
this.createVertexTemplateEntry(s + 'catalyst_data_center_switch;',
w, h * 0.9, '', 'Catalyst Data Center Switch', null, null, this.getTagsForStencil(gn, 'catalyst data center switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'catalyst_switch_stack;',
w, h * 0.9, '', 'Catalyst Switch Stack', null, null, this.getTagsForStencil(gn, 'catalyst switch stack', dt).join(' ')),
this.createVertexTemplateEntry(s + 'cisco_amp;',
w, h * 0.9, '', 'Cisco Amp', null, null, this.getTagsForStencil(gn, 'cisco amp amplifier', dt).join(' ')),
this.createVertexTemplateEntry(s + 'cisco_anyconnect;',
w, h * 0.9, '', 'Cisco AnyConnect', null, null, this.getTagsForStencil(gn, 'cisco anyconnect', dt).join(' ')),
this.createVertexTemplateEntry(s + 'cisco_cloud_web_security;',
w, h * 0.9, '', 'Cisco Cloud Web Security', null, null, this.getTagsForStencil(gn, 'cisco cloud web security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'client_firewall;',
w, h * 0.9, '', 'Client Firewall', null, null, this.getTagsForStencil(gn, 'client firewall', dt).join(' ')),
this.createVertexTemplateEntry(s + 'corporate_device;',
w, h * 0.9, '', 'Corporate Device', null, null, this.getTagsForStencil(gn, 'corporate device', dt).join(' ')),
this.createVertexTemplateEntry(s + 'email_security;',
w, h * 0.9, '', 'Email Security', null, null, this.getTagsForStencil(gn, 'email security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'encryption_offload;',
w, h * 0.9, '', 'Encryption Offload', null, null, this.getTagsForStencil(gn, 'encryption offload', dt).join(' ')),
this.createVertexTemplateEntry(s + 'fabric_switch;',
w, h * 0.9, '', 'Fabric Switch', null, null, this.getTagsForStencil(gn, 'fabric switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'firepower_appliance;',
w, h * 0.9, '', 'Firepower Appliance', null, null, this.getTagsForStencil(gn, 'firepower appliance', dt).join(' ')),
this.createVertexTemplateEntry(s + 'firewall;',
w, h * 0.9, '', 'Firewall', null, null, this.getTagsForStencil(gn, 'firewall', dt).join(' ')),
this.createVertexTemplateEntry(s + 'intrusion_detection;',
w, h * 0.9, '', 'Intrusion Detection', null, null, this.getTagsForStencil(gn, 'intrusion detection', dt).join(' ')),
this.createVertexTemplateEntry(s + 'l2_switch;',
w, h * 0.9, '', 'L2 Switch', null, null, this.getTagsForStencil(gn, 'l2 switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'l3_switch;',
w, h * 0.9, '', 'L3 Switch', null, null, this.getTagsForStencil(gn, 'l3 switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'load_balancer;',
w, h * 0.9, '', 'Load Balancer', null, null, this.getTagsForStencil(gn, 'load balancer', dt).join(' ')),
this.createVertexTemplateEntry(s + 'mobile_device;',
w, h * 0.9, '', 'Mobile Device', null, null, this.getTagsForStencil(gn, 'mobile device', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_1kv;',
w, h * 0.9, '', 'Nexus 1kv', null, null, this.getTagsForStencil(gn, 'nexus 1kv', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_data_center_switch;',
w, h * 0.9, '', 'Nexus Data Center Switch', null, null, this.getTagsForStencil(gn, 'nexus data center switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_fabric_switch;',
w, h * 0.9, '', 'Nexus Fabric Switch', null, null, this.getTagsForStencil(gn, 'nexus fabric switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'nexus_switch;',
w, h * 0.9, '', 'Nexus Switch', null, null, this.getTagsForStencil(gn, 'nexus switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'phone;',
w, h * 0.9, '', 'Phone', null, null, this.getTagsForStencil(gn, 'phone', dt).join(' ')),
this.createVertexTemplateEntry(s + 'radware;',
w, h * 0.9, '', 'Radware', null, null, this.getTagsForStencil(gn, 'radware', dt).join(' ')),
this.createVertexTemplateEntry(s + 'router;',
w, h * 0.9, '', 'Router', null, null, this.getTagsForStencil(gn, 'router', dt).join(' ')),
this.createVertexTemplateEntry(s + 'server_1;',
w, h * 0.9, '', 'Server', null, null, this.getTagsForStencil(gn, 'server', dt).join(' ')),
this.createVertexTemplateEntry(s + 'server_2;',
w, h * 0.9, '', 'Server', null, null, this.getTagsForStencil(gn, 'server', dt).join(' ')),
this.createVertexTemplateEntry(s + 'storage;',
w, h * 0.9, '', 'Storage', null, null, this.getTagsForStencil(gn, 'storage', dt).join(' ')),
this.createVertexTemplateEntry(s + 'user;',
w, h, '', 'User', null, null, this.getTagsForStencil(gn, 'user', dt).join(' ')),
this.createVertexTemplateEntry(s + 'users;',
w, h, '', 'Users', null, null, this.getTagsForStencil(gn, 'users', dt).join(' ')),
this.createVertexTemplateEntry(s + 'virtual_secure_server;',
w, h * 0.9, '', 'Virtual Secure Server', null, null, this.getTagsForStencil(gn, 'virtual secure server', dt).join(' ')),
this.createVertexTemplateEntry(s + 'vload_balancer;',
w, h * 0.9, '', 'vLoad Balancer', null, null, this.getTagsForStencil(gn, 'vload balancer', dt).join(' ')),
this.createVertexTemplateEntry(s + 'vwaf_security;',
w, h * 0.9, '', 'vWAF Security', null, null, this.getTagsForStencil(gn, 'vwaf security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'vweb_security;',
w, h * 0.9, '', 'vWeb Security', null, null, this.getTagsForStencil(gn, 'vweb security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'vwlan_controller;',
w, h * 0.9, '', 'vWLAN Controller', null, null, this.getTagsForStencil(gn, 'vwlan controller', dt).join(' ')),
this.createVertexTemplateEntry(s + 'web_security;',
w, h * 0.9, '', 'Web Security', null, null, this.getTagsForStencil(gn, 'web security', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wireless_corporate_device;',
w, h * 0.9, '', 'Wireless Corporate Device', null, null, this.getTagsForStencil(gn, 'wireless corporate device', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wireless_switch;',
w, h * 0.9, '', 'Wireless Switch', null, null, this.getTagsForStencil(gn, 'wireless switch', dt).join(' ')),
this.createVertexTemplateEntry(s + 'wlan_controller;',
w, h * 0.9, '', 'WLAN Controller', null, null, this.getTagsForStencil(gn, 'wlan controller', dt).join(' '))
]);
};
Sidebar.prototype.addCiscoSafeThreatPalette = function()
{
var w = 50;
var h = 50;
var s = mxConstants.STYLE_VERTICAL_LABEL_POSITION + '=bottom;html=1;fillColor=#F06650;' + mxConstants.STYLE_VERTICAL_ALIGN + '=top;shape=mxgraph.cisco_safe.threat.';
var gn = 'mxgraph.cisco_safe.threat';
var dt = 'cisco safe threat';
this.addPaletteFunctions('cisco_safeThreat', 'Cisco Safe / Threat', false,
[
this.createVertexTemplateEntry(s + 'threat_a1;',
w * 0.98, h, '', 'Threat A1', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_a2;',
w * 0.98, h, '', 'Threat A2', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_a3;',
w * 0.98, h, '', 'Threat A3', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_a4;',
w * 0.98, h, '', 'Threat A4', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_a5;',
w * 0.98, h, '', 'Threat A5', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_a6;',
w * 0.98, h, '', 'Threat A6', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_a7;',
w * 0.98, h, '', 'Threat A7', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_a8;',
w * 0.98, h, '', 'Threat A8', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b1;',
w * 0.63, h, '', 'Threat B1', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b2;',
w * 0.63, h, '', 'Threat B2', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b3;',
w * 0.63, h, '', 'Threat B3', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b4;',
w * 0.63, h, '', 'Threat B4', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b5;',
w * 0.63, h, '', 'Threat B5', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b6;',
w * 0.63, h, '', 'Threat B6', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b7;',
w * 0.63, h, '', 'Threat B7', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_b8;',
w * 0.63, h, '', 'Threat B8', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c1;',
w, h * 0.81, '', 'Threat C1', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c2;',
w, h * 0.81, '', 'Threat C2', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c3;',
w, h * 0.81, '', 'Threat C3', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c4;',
w, h * 0.81, '', 'Threat C4', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c5;',
w, h * 0.81, '', 'Threat C5', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c6;',
w, h * 0.81, '', 'Threat C6', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c7;',
w, h * 0.81, '', 'Threat C7', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_c8;',
w, h * 0.81, '', 'Threat C8', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d1;',
w * 0.93, h, '', 'Threat D1', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d2;',
w * 0.93, h, '', 'Threat D2', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d3;',
w * 0.93, h, '', 'Threat D3', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d4;',
w * 0.93, h, '', 'Threat D4', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d5;',
w * 0.93, h, '', 'Threat D5', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d6;',
w * 0.93, h, '', 'Threat D6', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d7;',
w * 0.93, h, '', 'Threat D7', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_d8;',
w * 0.93, h, '', 'Threat D8', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e1;',
w, h * 0.94, '', 'Threat E1', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e2;',
w, h * 0.94, '', 'Threat E2', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e3;',
w, h * 0.94, '', 'Threat E3', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e4;',
w, h * 0.94, '', 'Threat E4', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e5;',
w, h * 0.94, '', 'Threat E5', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e6;',
w, h * 0.94, '', 'Threat E6', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e7;',
w, h * 0.94, '', 'Threat E7', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' ')),
this.createVertexTemplateEntry(s + 'threat_e8;',
w, h * 0.94, '', 'Threat E8', null, null, this.getTagsForStencil(gn, 'threat', dt).join(' '))
]);
};
})();

View file

@ -60,6 +60,11 @@
Sidebar.prototype.cisco = ['Buildings', 'Computers and Peripherals', 'Controllers and Modules', 'Directors', 'Hubs and Gateways', 'Misc',
'Modems and Phones', 'People', 'Routers', 'Security', 'Servers', 'Storage', 'Switches', 'Wireless'];
/**
*
*/
Sidebar.prototype.cisco_safe = ['Architecture', 'Capability', 'Design', 'Threat'];
/**
*
*/
@ -137,6 +142,7 @@
{id: 'aws3', prefix: 'aws3', libs: Sidebar.prototype.aws3},
{id: 'pid', prefix: 'pid', libs: Sidebar.prototype.pids},
{id: 'cisco', prefix: 'cisco', libs: Sidebar.prototype.cisco},
{id: 'cisco_safe', prefix: 'cisco_safe', libs: Sidebar.prototype.cisco_safe},
{id: 'office', prefix: 'office', libs: Sidebar.prototype.office},
{id: 'veeam', prefix: 'veeam', libs: Sidebar.prototype.veeam},
{id: 'cabinets', libs: ['cabinets']},
@ -351,6 +357,7 @@
{title: mxResources.get('azure'), id: 'azure', image: IMAGE_PATH + '/sidebar-azure.png'},
{title: 'Cloud & Enterprise', id: 'mscae', image: IMAGE_PATH + '/sidebar-mscae.png'},
{title: mxResources.get('cisco'), id: 'cisco', image: IMAGE_PATH + '/sidebar-cisco.png'},
{title: 'Cisco Safe', id: 'cisco_safe', image: IMAGE_PATH + '/sidebar-cisco_safe.png'},
{title: 'Citrix', id: 'citrix', image: IMAGE_PATH + '/sidebar-citrix.png'},
{title: 'Google Cloud Platform', id: 'gcp', image: IMAGE_PATH + '/sidebar-gcp.png'},
{title: 'IBM', id: 'ibm', image: IMAGE_PATH + '/sidebar-ibm.png'},
@ -631,6 +638,7 @@
var rack = this.rack;
var pids = this.pids;
var cisco = this.cisco;
var cisco_safe = this.cisco_safe;
var sysml = this.sysml;
var eip = this.eip;
var gmdl = this.gmdl;
@ -937,6 +945,7 @@
';html=1;dashed=0;fillColor=#036897;strokeColor=#ffffff;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;', null, null, 1.6);
}
this.addCiscoSafePalette();
this.addFloorplanPalette();
this.addAtlassianPalette();
this.addBootstrapPalette();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -25,7 +25,7 @@ Actions.prototype.init = function()
};
// File actions
this.addAction('new...', function() { window.open(ui.getUrl()); });
this.addAction('new...', function() { graph.openLink(ui.getUrl()); });
this.addAction('open...', function()
{
window.openNew = true;
@ -291,14 +291,14 @@ Actions.prototype.init = function()
ui.showDialog(dlg.container, 320, 200, true, true);
dlg.init();
}
});
}, null, null, 'Alt+Shift+T');
this.addAction('openLink', function()
{
var link = graph.getLinkForCell(graph.getSelectionCell());
if (link != null)
{
window.open(link);
graph.openLink(link);
}
});
this.addAction('editLink...', function()
@ -316,7 +316,7 @@ Actions.prototype.init = function()
graph.setLinkForCell(cell, (link.length > 0) ? link : null);
});
}
});
}, null, null, 'Alt+Shift+L');
this.addAction('insertLink...', function()
{
if (graph.isEnabled() && !graph.isCellLocked(graph.getDefaultParent()))
@ -755,7 +755,7 @@ Actions.prototype.init = function()
ext = '_' + mxClient.language;
}
window.open(RESOURCES_PATH + '/help' + ext + '.html');
graph.openLink(RESOURCES_PATH + '/help' + ext + '.html');
});
var showingAbout = false;

View file

@ -520,7 +520,7 @@ var FilenameDialog = function(editorUi, filename, buttonText, fn, label, validat
{
var helpBtn = mxUtils.button(mxResources.get('help'), function()
{
window.open(helpLink);
editorUi.editor.graph.openLink(helpLink);
});
helpBtn.className = 'geBtn';
@ -780,7 +780,7 @@ var EditDiagramDialog = function(editorUi)
});
window.openFile.setData(data, null);
window.open(editorUi.getUrl());
editorUi.editor.graph.openLink(editorUi.getUrl());
}
else if (select.value == 'replace')
{
@ -1807,16 +1807,25 @@ var OutlineWindow = function(editorUi, x, y, w, h)
}
};
mxEvent.addListener(window, 'resize', mxUtils.bind(this, function()
var resizeListener = mxUtils.bind(this, function()
{
var x = this.window.getX();
var y = this.window.getY();
this.window.setLocation(x, y);
}));
});
mxEvent.addListener(window, 'resize', resizeListener);
var outline = editorUi.createOutline(this.window);
this.destroy = function()
{
mxEvent.removeListener(window, 'resize', resizeListener);
this.window.destroy();
outline.destroy();
}
this.window.addListener(mxEvent.RESIZE, mxUtils.bind(this, function()
{
outline.update(false);
@ -1948,7 +1957,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
var tbarHeight = (!EditorUi.compactUi) ? '30px' : '26px';
var listDiv = document.createElement('div')
listDiv.style.backgroundColor = (Dialog.backdropColor == 'white') ? '#a2a2a2' : '#e5e5e5';
listDiv.style.backgroundColor = (Dialog.backdropColor == 'white') ? '#dcdcdc' : '#e5e5e5';
listDiv.style.position = 'absolute';
listDiv.style.overflow = 'auto';
listDiv.style.left = '0px';
@ -2457,7 +2466,7 @@ var LayersWindow = function(editorUi, x, y, w, h)
});
this.window = new mxWindow(mxResources.get('layers'), div, x, y, w, h, true, true);
this.window.minimumSize = new mxRectangle(0, 0, 90, 90);
this.window.minimumSize = new mxRectangle(0, 0, 120, 120);
this.window.destroyOnClose = false;
this.window.setMaximizable(false);
this.window.setResizable(true);
@ -2481,11 +2490,19 @@ var LayersWindow = function(editorUi, x, y, w, h)
}
};
mxEvent.addListener(window, 'resize', mxUtils.bind(this, function()
var resizeListener = mxUtils.bind(this, function()
{
var x = this.window.getX();
var y = this.window.getY();
this.window.setLocation(x, y);
}));
});
mxEvent.addListener(window, 'resize', resizeListener);
this.destroy = function()
{
mxEvent.removeListener(window, 'resize', resizeListener);
this.window.destroy();
}
};

View file

@ -312,12 +312,12 @@ Editor.prototype.editAsNew = function(xml, title)
}));
}
this.editorWindow = window.open(this.getEditBlankUrl(p +
this.editorWindow = this.graph.openLink(this.getEditBlankUrl(p +
((p.length > 0) ? '&' : '?') + 'client=1'));
}
else
{
this.editorWindow = window.open(this.getEditBlankUrl(p) +
this.editorWindow = this.graph.openLink(this.getEditBlankUrl(p) +
'#R' + encodeURIComponent(xml));
}
}

View file

@ -1321,8 +1321,6 @@ EditorUi.prototype.initClipboard = function()
*/
EditorUi.prototype.initCanvas = function()
{
var graph = this.editor.graph;
// Initial page layout view, scrollBuffer and timer-based scrolling
var graph = this.editor.graph;
graph.timerAutoScroll = true;
@ -1717,7 +1715,7 @@ EditorUi.prototype.initCanvas = function()
}
else
{
window.open(this.editor.editButtonLink, 'editWindow');
graph.openLink(this.editor.editButtonLink, 'editWindow');
}
mxEvent.consume(evt);
@ -2009,8 +2007,7 @@ EditorUi.prototype.initCanvas = function()
{
// Ctrl+wheel (or pinch on touchpad) is a native browser zoom event is OS X
// LATER: Add support for zoom via pinch on trackpad for Chrome in OS X
if ((mxEvent.isAltDown(evt) || (mxEvent.isControlDown(evt) && !mxClient.IS_MAC) ||
graph.panningHandler.isActive()) && (this.dialogs == null || this.dialogs.length == 0))
if ((this.dialogs == null || this.dialogs.length == 0) && graph.isZoomWheelEvent(evt))
{
var source = mxEvent.getSource(evt);
@ -3008,6 +3005,10 @@ EditorUi.prototype.createDivs = function()
{
this.tabContainer = this.createTabContainer();
}
else
{
this.diagramContainer.style.border = 'none';
}
};
/**
@ -3864,7 +3865,9 @@ EditorUi.prototype.createKeyHandler = function(editor)
// Alt+Shift+Keycode mapping to action
var altShiftActions = {67: this.actions.get('clearWaypoints'), // Alt+Shift+C
65: this.actions.get('connectionArrows'), // Alt+Shift+A
80: this.actions.get('connectionPoints') // Alt+Shift+P
76: this.actions.get('editLink'), // Alt+Shift+L
80: this.actions.get('connectionPoints'), // Alt+Shift+P
84: this.actions.get('editTooltip') // Alt+Shift+T
};
mxKeyHandler.prototype.getFunction = function(evt)

View file

@ -256,8 +256,9 @@ Format.prototype.isRoundedState = function(state)
Format.prototype.isLineJumpState = function(state)
{
var shape = mxUtils.getValue(state.style, mxConstants.STYLE_SHAPE, null);
var curved = mxUtils.getValue(state.style, mxConstants.STYLE_CURVED, false);
return shape == 'connector' || shape == 'filledEdge';
return !curved && (shape == 'connector' || shape == 'filledEdge');
};
/**
@ -888,8 +889,6 @@ BaseFormatPanel.prototype.createOption = function(label, isCheckedFn, setChecked
apply(cb.checked);
}
mxEvent.consume(evt);
});
apply(value);

View file

@ -621,13 +621,15 @@ Graph = function(container, model, renderHint, stylesheet, themes)
return mxEvent.isMouseEvent(me.getEvent());
};
// Enables links if graph is "disabled" (ie. read-only)
// Handles links if graph is read-only or cell is locked
var click = this.click;
this.click = function(me)
{
if (!this.isEnabled() && !me.isConsumed())
var locked = me.state == null && me.sourceState != null && this.isCellLocked(me.sourceState.cell);
if ((!this.isEnabled() || locked) && !me.isConsumed())
{
var cell = me.getCell();
var cell = (locked) ? me.sourceState.cell : me.getCell();
if (cell != null)
{
@ -635,7 +637,14 @@ Graph = function(container, model, renderHint, stylesheet, themes)
if (link != null)
{
window.open(link);
if (this.isPageLink(link))
{
this.pageLinkClicked(cell, link);
}
else
{
this.openLink(link);
}
}
}
}
@ -644,13 +653,28 @@ Graph = function(container, model, renderHint, stylesheet, themes)
return click.apply(this, arguments);
}
};
// Redirects tooltips for locked cells
this.tooltipHandler.getStateForEvent = function(me)
{
return me.sourceState;
};
// Redirects cursor for locked cells
var getCursorForMouseEvent = this.getCursorForMouseEvent;
this.getCursorForMouseEvent = function(me)
{
var locked = me.state == null && me.sourceState != null && this.isCellLocked(me.sourceState.cell);
return this.getCursorForCell((locked) ? me.sourceState.cell : me.getCell());
};
// Shows pointer cursor for clickable cells with links
// ie. if the graph is disabled and cells cannot be selected
var getCursorForCell = this.getCursorForCell;
this.getCursorForCell = function(cell)
{
if (!this.isEnabled())
if (!this.isEnabled() || this.isCellLocked(cell))
{
var link = this.getLinkForCell(cell);
@ -658,11 +682,13 @@ Graph = function(container, model, renderHint, stylesheet, themes)
{
return 'pointer';
}
else if (this.isCellLocked(cell))
{
return 'default';
}
}
else
{
return getCursorForCell.apply(this, arguments);
}
return getCursorForCell.apply(this, arguments);
};
// Changes rubberband selection to be recursive
@ -852,7 +878,7 @@ Graph = function(container, model, renderHint, stylesheet, themes)
{
me = graphUpdateMouseEvent.apply(this, arguments);
if (this.isCellLocked(me.getCell()))
if (me.state != null && this.isCellLocked(me.getCell()))
{
me.state = null;
}
@ -1068,6 +1094,64 @@ Graph.prototype.init = function(container)
this.initLayoutManager();
};
/**
* Installs automatic layout via styles
*/
Graph.prototype.labelLinkClicked = function(state, elt, evt)
{
var href = elt.getAttribute('href');
if (href != null && !this.isPageLink(href) && (mxEvent.isLeftMouseButton(evt) &&
!mxEvent.isPopupTrigger(evt)) || mxEvent.isTouchEvent(evt))
{
if (!this.isEnabled() || this.isCellLocked(state.cell))
{
var target = this.isBlankLink(href) ? this.linkTarget : '_top';
this.openLink(this.getAbsoluteUrl(href), target);
}
mxEvent.consume(evt);
}
};
/**
* Returns the size of the page format scaled with the page size.
*/
Graph.prototype.openLink = function(href, target)
{
var result = window;
// Workaround for blocking in same iframe
if (target == '_self' && window != window.top)
{
window.location.href = href;
}
else
{
// Avoids page reload for anchors (workaround for IE but used everywhere)
if (href.substring(0, this.baseUrl.length) == this.baseUrl &&
href.charAt(this.baseUrl.length) == '#' &&
target == '_top' && window == window.top)
{
var hash = href.split('#')[1];
// Forces navigation if on same hash
if (window.location.hash == '#' + hash)
{
window.location.hash = '';
}
window.location.hash = hash;
}
else
{
result = window.open(href, target);
}
}
return result;
};
/**
* Adds support for page links.
*/
@ -1077,45 +1161,11 @@ Graph.prototype.isPageLink = function(href)
};
/**
* Installs automatic layout via styles
* Adds support for page links.
*/
Graph.prototype.labelLinkClicked = function(state, elt, evt)
Graph.prototype.pageLinkClicked = function(cell, href)
{
var href = elt.getAttribute('href');
if (href != null && !this.isPageLink(href))
{
if (!this.isEnabled())
{
var target = state.view.graph.isBlankLink(href) ?
state.view.graph.linkTarget : '_top';
href = state.view.graph.getAbsoluteUrl(href);
// Workaround for blocking in same iframe
if (target == '_self' && window != window.top)
{
window.location.href = href;
}
else
{
// Avoids page reload for anchors (workaround for IE but used everywhere)
if (href.substring(0, this.baseUrl.length) == this.baseUrl &&
href.charAt(this.baseUrl.length) == '#' &&
target == '_top' && window == window.top)
{
window.location.hash = href.split('#')[1];
}
else if ((mxEvent.isLeftMouseButton(evt) &&
!mxEvent.isPopupTrigger(evt)) ||
mxEvent.isTouchEvent(evt))
{
window.open(href, target);
}
}
}
mxEvent.consume(evt);
}
this.fireEvent(new mxEventObject('pageLinkClicked', 'cell', cell, 'href', href));
};
/**
@ -1311,6 +1361,17 @@ Graph.prototype.isReplacePlaceholders = function(cell)
cell.value.getAttribute('placeholders') == '1';
};
/**
* Returns true if the given mouse wheel event should be used for zooming. This
* is invoked if no dialogs are showing and returns true if Alt or Control
* (except macOS) is pressed or if the panning handler is active.
*/
Graph.prototype.isZoomWheelEvent = function(evt)
{
return mxEvent.isAltDown(evt) || (mxEvent.isControlDown(evt) && !mxClient.IS_MAC) ||
(this.panningHandler != null && this.panningHandler.isActive());
};
/**
* Adds Alt+click to select cells behind cells.
*/
@ -3522,7 +3583,7 @@ HoverIcons.prototype.setCurrentState = function(state)
var state2 = this.validEdges[e];
var pts2 = state2.absolutePoints;
if (pts2 != null && mxUtils.intersects(state, state2))
if (pts2 != null && mxUtils.intersects(state, state2) && state2.style['noJump'] != '1')
{
// Compares each segment of the edge with the current segment
for (var j = 0; j < pts2.length - 1; j++)
@ -5195,178 +5256,157 @@ if (typeof mxVertexHandler != 'undefined')
scrollTop: 0,
updateCurrentState: function(me)
{
var tmp = graph.view.getState(me.getCell());
var tmp = me.sourceState;
if (tmp != this.currentState)
{
if (this.currentState != null)
{
this.clear();
}
this.currentState = tmp;
if (this.currentState != null)
{
this.activate(this.currentState);
}
if (this.currentState != null)
{
this.clear();
}
this.currentState = tmp;
if (this.currentState != null)
{
this.activate(this.currentState);
}
}
},
mouseDown: function(sender, me)
{
this.startX = me.getGraphX();
this.startY = me.getGraphY();
this.scrollLeft = graph.container.scrollLeft;
this.scrollTop = graph.container.scrollTop;
if (this.currentLink == null && graph.container.style.overflow == 'auto')
{
graph.container.style.cursor = 'move';
}
this.updateCurrentState(me);
this.startX = me.getGraphX();
this.startY = me.getGraphY();
this.scrollLeft = graph.container.scrollLeft;
this.scrollTop = graph.container.scrollTop;
if (this.currentLink == null && graph.container.style.overflow == 'auto')
{
graph.container.style.cursor = 'move';
}
this.updateCurrentState(me);
},
mouseMove: function(sender, me)
{
if (graph.isMouseDown)
{
if (this.currentLink != null)
{
var dx = Math.abs(this.startX - me.getGraphX());
var dy = Math.abs(this.startY - me.getGraphY());
if (graph.isMouseDown)
{
if (this.currentLink != null)
{
var dx = Math.abs(this.startX - me.getGraphX());
var dy = Math.abs(this.startY - me.getGraphY());
if (dx > tol || dy > tol)
{
this.clear();
}
}
}
else
{
// Checks for parent link
var linkNode = me.getSource();
if (dx > tol || dy > tol)
while (linkNode != null && linkNode.nodeName.toLowerCase() != 'a')
{
this.clear();
linkNode = linkNode.parentNode;
}
}
}
else
{
if (linkNode != null)
{
this.clear();
}
else
{
if (this.currentState != null && (me.getState() == this.currentState || me.sourceState == null) &&
graph.intersects(this.currentState, me.getGraphX(), me.getGraphY()))
{
return;
}
this.updateCurrentState(me);
}
}
},
mouseUp: function(sender, me)
{
var source = me.getSource();
var evt = me.getEvent();
// Checks for parent link
var linkNode = me.getSource();
var linkNode = source;
while (linkNode != null && linkNode.nodeName.toLowerCase() != 'a')
{
linkNode = linkNode.parentNode;
}
if (linkNode != null)
{
this.clear();
}
else
{
if (this.currentState != null && (me.getState() == this.currentState || me.getState() == null) &&
graph.intersects(this.currentState, me.getGraphX(), me.getGraphY()))
{
return;
}
this.updateCurrentState(me);
}
}
},
mouseUp: function(sender, me)
{
var source = me.getSource();
var evt = me.getEvent();
// Checks for parent link
var linkNode = source;
while (linkNode != null && linkNode.nodeName.toLowerCase() != 'a')
{
linkNode = linkNode.parentNode;
}
// Ignores clicks on links and collapse/expand icon
if (linkNode == null &&
(((Math.abs(this.scrollLeft - graph.container.scrollLeft) < tol &&
Math.abs(this.scrollTop - graph.container.scrollTop) < tol) &&
(me.getState() == null || !me.isSource(me.getState().control))) &&
((mxEvent.isLeftMouseButton(evt) &&
!mxEvent.isPopupTrigger(evt)) ||
mxEvent.isTouchEvent(evt))))
{
if (this.currentLink != null)
// Ignores clicks on links and collapse/expand icon
if (linkNode == null &&
(((Math.abs(this.scrollLeft - graph.container.scrollLeft) < tol &&
Math.abs(this.scrollTop - graph.container.scrollTop) < tol) &&
(me.sourceState == null || !me.isSource(me.sourceState.control))) &&
(((mxEvent.isLeftMouseButton(evt) || mxEvent.isMiddleMouseButton(evt)) &&
!mxEvent.isPopupTrigger(evt)) || mxEvent.isTouchEvent(evt))))
{
var blank = graph.isBlankLink(this.currentLink);
if ((this.currentLink.substring(0, 5) === 'data:' ||
!blank) && beforeClick != null)
{
beforeClick(evt, this.currentLink);
}
if (!mxEvent.isConsumed(evt))
{
var target = (blank) ? graph.linkTarget : '_top';
if (this.currentLink != null)
{
var blank = graph.isBlankLink(this.currentLink);
// Workaround for blocking in same iframe
if (target == '_self' && window != window.top)
{
window.location.href = this.currentLink;
}
else
{
// Avoids page reload for anchors (workaround for IE but used everywhere)
if (this.currentLink.substring(0, graph.baseUrl.length) == graph.baseUrl &&
this.currentLink.charAt(graph.baseUrl.length) == '#' &&
target == '_top' && window == window.top)
{
window.location.hash = this.currentLink.split('#')[1];
}
else
{
window.open(this.currentLink, target);
}
}
if ((this.currentLink.substring(0, 5) === 'data:' ||
!blank) && beforeClick != null)
{
beforeClick(evt, this.currentLink);
}
me.consume();
if (!mxEvent.isConsumed(evt))
{
var target = (mxEvent.isMiddleMouseButton(evt)) ? '_blank' :
((blank) ? graph.linkTarget : '_top');
graph.openLink(this.currentLink, target);
me.consume();
}
}
else if (onClick != null && !me.isConsumed() &&
(Math.abs(this.scrollLeft - graph.container.scrollLeft) < tol &&
Math.abs(this.scrollTop - graph.container.scrollTop) < tol) &&
(Math.abs(this.startX - me.getGraphX()) < tol &&
Math.abs(this.startY - me.getGraphY()) < tol))
{
onClick(me.getEvent());
}
}
else if (onClick != null && !me.isConsumed() &&
(Math.abs(this.scrollLeft - graph.container.scrollLeft) < tol &&
Math.abs(this.scrollTop - graph.container.scrollTop) < tol) &&
(Math.abs(this.startX - me.getGraphX()) < tol &&
Math.abs(this.startY - me.getGraphY()) < tol))
{
onClick(me.getEvent());
}
}
this.clear();
this.clear();
},
activate: function(state)
{
this.currentLink = graph.getAbsoluteUrl(graph.getLinkForCell(state.cell));
if (this.currentLink != null)
{
graph.container.style.cursor = 'pointer';
if (this.highlight != null)
{
this.highlight.highlight(state);
}
this.currentLink = graph.getAbsoluteUrl(graph.getLinkForCell(state.cell));
if (this.currentLink != null)
{
graph.container.style.cursor = 'pointer';
if (this.highlight != null)
{
this.highlight.highlight(state);
}
}
},
clear: function()
{
if (graph.container != null)
{
graph.container.style.cursor = cursor;
}
this.currentState = null;
this.currentLink = null;
if (this.highlight != null)
{
this.highlight.hide();
}
if (graph.container != null)
{
graph.container.style.cursor = cursor;
}
this.currentState = null;
this.currentLink = null;
if (this.highlight != null)
{
this.highlight.hide();
}
}
};
@ -5402,7 +5442,7 @@ if (typeof mxVertexHandler != 'undefined')
for (var i = 0; i < cells.length; i++)
{
var parent = model.getParent(cells[i]);
var child = this.moveCells([clones[i]], s, s, false, parent)[0];
var child = this.moveCells([clones[i]], s, s, false)[0];
select.push(child);
if (append)
@ -5411,7 +5451,7 @@ if (typeof mxVertexHandler != 'undefined')
}
else
{
// Maintains child index by inserting after cloned in parent
// Maintains child index by inserting after clone in parent
var index = parent.getIndex(cells[i]);
model.add(parent, clones[i], index + 1);
}
@ -5676,7 +5716,7 @@ if (typeof mxVertexHandler != 'undefined')
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
Graph.prototype.getSvg = function(background, scale, border, nocrop, crisp, ignoreSelection, showText)
Graph.prototype.getSvg = function(background, scale, border, nocrop, crisp, ignoreSelection, showText, imgExport)
{
scale = (scale != null) ? scale : 1;
border = (border != null) ? border : 0;
@ -5824,7 +5864,7 @@ if (typeof mxVertexHandler != 'undefined')
svgCanvas.scale(s);
svgCanvas.textEnabled = showText;
var imgExport = this.createSvgImageExport();
imgExport = (imgExport != null) ? imgExport : this.createSvgImageExport();
var imgExportDrawCellState = imgExport.drawCellState;
// Implements ignoreSelection flag

File diff suppressed because one or more lines are too long

View file

@ -11,16 +11,16 @@ k===mxBpmnShape.prototype.eventTypeEnum.END)a.setStrokeColor(n),a.setFillColor(l
mxBpmnShape.prototype.outlines={none:function(a,d,e,b,c,f){f||a.setShadow(!1)},standard:function(a,d,e,b,c,f){a.ellipse(0,0,b,c);a.fillAndStroke();f||a.setShadow(!1)},eventInt:function(a,d,e,b,c,f){a.ellipse(0,0,b,c);a.fillAndStroke();f||a.setShadow(!1)},eventNonint:function(a,d,e,b,c,f){d=a.state.dashed;a.setDashed(!0);a.ellipse(0,0,b,c);a.fillAndStroke();a.setDashed(d);f||a.setShadow(!1)},catching:function(a,d,e,b,c,f){a.ellipse(0,0,b,c);a.fillAndStroke();f||a.setShadow(!1);a.ellipse(2,2,b-4,c-
4);a.stroke()},boundInt:function(a,d,e,b,c,f){a.ellipse(0,0,b,c);a.fillAndStroke();f||a.setShadow(!1);a.ellipse(2,2,b-4,c-4);a.stroke()},boundNonint:function(a,d,e,b,c,f){d=a.state.dashed;a.setDashed(!0);a.ellipse(0,0,b,c);a.fillAndStroke();f||a.setShadow(!1);a.ellipse(2,2,b-4,c-4);a.stroke();a.setDashed(d)},throwing:function(a,d,e,b,c,f){a.ellipse(0,0,b,c);a.fillAndStroke();f||a.setShadow(!1);a.ellipse(.02*b+2,.02*c+2,.96*b-4,.96*c-4);a.stroke()},end:function(a,d,e,b,c,f){d=a.state.strokeWidth;a.setStrokeWidth(3*
d);a.ellipse(0,0,b,c);a.fillAndStroke();a.setStrokeWidth(d);f||a.setShadow(!1)}};
mxBpmnShape.prototype.symbols={general:function(a,d,e,b,c){},message:function(a,d,e,b,c){a.rect(0,0,b,c);a.fillAndStroke();a.begin();a.moveTo(0,0);a.lineTo(.5*b,.5*c);a.lineTo(b,0);a.stroke()},timer:function(a,d,e,b,c){a.ellipse(0,0,b,c);a.fillAndStroke();a.begin();a.moveTo(.5*b,0);a.lineTo(.5*b,.0642*c);a.moveTo(.7484*b,.0654*c);a.lineTo(.7126*b,.1281*c);a.moveTo(.93*b,.2471*c);a.lineTo(.8673*b,.2854*c);a.moveTo(b,.5*c);a.lineTo(.9338*b,.5*c);a.moveTo(.93*b,.7509*c);a.lineTo(.8673*b,.7126*c);a.moveTo(.7484*
b,.9326*c);a.lineTo(.7126*b,.8699*c);a.moveTo(.5*b,.9338*c);a.lineTo(.5*b,c);a.moveTo(.2496*b,.9325*c);a.lineTo(.2854*b,.8699*c);a.moveTo(.068*b,.7509*c);a.lineTo(.1307*b,.7126*c);a.moveTo(0,.5*c);a.lineTo(.0642*b,.5*c);a.moveTo(.068*b,.2471*c);a.lineTo(.1307*b,.2854*c);a.moveTo(.2496*b,.0654*c);a.lineTo(.2854*b,.1281*c);a.moveTo(.5246*b,.0706*c);a.lineTo(.5*b,.5*c);a.lineTo(.7804*b,.5118*c);a.stroke()},escalation:function(a,d,e,b,c){a.begin();a.moveTo(0,c);a.lineTo(.5*b,0);a.lineTo(b,c);a.lineTo(.5*
b,.5*c);a.close();a.fillAndStroke()},conditional:function(a,d,e,b,c){a.rect(0,0,b,c);a.fillAndStroke();a.begin();a.moveTo(0,.1027*c);a.lineTo(.798*b,.1027*c);a.moveTo(0,.3669*c);a.lineTo(.798*b,.3669*c);a.moveTo(0,.6311*c);a.lineTo(.798*b,.6311*c);a.moveTo(0,.8953*c);a.lineTo(.798*b,.8953*c);a.stroke()},link:function(a,d,e,b,c){a.begin();a.moveTo(0,.76*c);a.lineTo(0,.24*c);a.lineTo(.63*b,.24*c);a.lineTo(.63*b,0);a.lineTo(b,.5*c);a.lineTo(.63*b,c);a.lineTo(.63*b,.76*c);a.close();a.fillAndStroke()},
error:function(a,d,e,b,c){a.begin();a.moveTo(0,c);a.lineTo(.3287*b,.123*c);a.lineTo(.6194*b,.6342*c);a.lineTo(b,0);a.lineTo(.6625*b,.939*c);a.lineTo(.3717*b,.5064*c);a.close();a.fillAndStroke()},cancel:function(a,d,e,b,c){a.begin();a.moveTo(.1051*b,0);a.lineTo(.5*b,.3738*c);a.lineTo(.8909*b,0);a.lineTo(b,.1054*c);a.lineTo(.623*b,.5*c);a.lineTo(b,.8926*c);a.lineTo(.8909*b,c);a.lineTo(.5*b,.6242*c);a.lineTo(.1051*b,c);a.lineTo(0,.8926*c);a.lineTo(.373*b,.5*c);a.lineTo(0,.1054*c);a.close();a.fillAndStroke()},
compensation:function(a,d,e,b,c){a.begin();a.moveTo(0,.5*c);a.lineTo(.5*b,0);a.lineTo(.5*b,c);a.close();a.moveTo(.5*b,.5*c);a.lineTo(b,0);a.lineTo(b,c);a.close();a.fillAndStroke()},signal:function(a,d,e,b,c){a.begin();a.moveTo(0,c);a.lineTo(.5*b,0);a.lineTo(b,c);a.close();a.fillAndStroke()},multiple:function(a,d,e,b,c){a.begin();a.moveTo(0,.39*c);a.lineTo(.5*b,0);a.lineTo(b,.39*c);a.lineTo(.815*b,c);a.lineTo(.185*b,c);a.close();a.fillAndStroke()},parallelMultiple:function(a,d,e,b,c){a.begin();a.moveTo(.38*
b,0);a.lineTo(.62*b,0);a.lineTo(.62*b,.38*c);a.lineTo(b,.38*c);a.lineTo(b,.62*c);a.lineTo(.62*b,.62*c);a.lineTo(.62*b,c);a.lineTo(.38*b,c);a.lineTo(.38*b,.62*c);a.lineTo(0,.62*c);a.lineTo(0,.38*c);a.lineTo(.38*b,.38*c);a.close();a.fillAndStroke()},terminate:function(a,d,e,b,c){a.ellipse(0,0,b,c);a.fillAndStroke()},exclusiveGw:function(a,d,e,b,c){d=a.state.strokeColor;e=a.state.fillColor;a.setStrokeColor(e);a.setFillColor(d);a.begin();a.moveTo(.105*b,0);a.lineTo(.5*b,.38*c);a.lineTo(.895*b,0*c);a.lineTo(b,
.11*c);a.lineTo(.6172*b,.5*c);a.lineTo(b,.89*c);a.lineTo(.895*b,c);a.lineTo(.5*b,.62*c);a.lineTo(.105*b,c);a.lineTo(0,.89*c);a.lineTo(.3808*b,.5*c);a.lineTo(0,.11*c);a.close();a.fillAndStroke();a.setStrokeColor(d);a.setFillColor(e)},parallelGw:function(a,d,e,b,c){d=a.state.strokeColor;e=a.state.fillColor;a.setStrokeColor(e);a.setFillColor(d);a.begin();a.moveTo(.38*b,0);a.lineTo(.62*b,0);a.lineTo(.62*b,.38*c);a.lineTo(b,.38*c);a.lineTo(b,.62*c);a.lineTo(.62*b,.62*c);a.lineTo(.62*b,c);a.lineTo(.38*
b,c);a.lineTo(.38*b,.62*c);a.lineTo(0,.62*c);a.lineTo(0,.38*c);a.lineTo(.38*b,.38*c);a.close();a.fillAndStroke();a.setStrokeColor(d);a.setFillColor(e)},complexGw:function(a,d,e,b,c){d=a.state.strokeColor;e=a.state.fillColor;a.setStrokeColor(e);a.setFillColor(d);a.begin();a.moveTo(0,.44*c);a.lineTo(.36*b,.44*c);a.lineTo(.1*b,.18*c);a.lineTo(.18*b,.1*c);a.lineTo(.44*b,.36*c);a.lineTo(.44*b,0);a.lineTo(.56*b,0);a.lineTo(.56*b,.36*c);a.lineTo(.82*b,.1*c);a.lineTo(.9*b,.18*c);a.lineTo(.64*b,.44*c);a.lineTo(b,
.44*c);a.lineTo(b,.56*c);a.lineTo(.64*b,.56*c);a.lineTo(.9*b,.82*c);a.lineTo(.82*b,.9*c);a.lineTo(.56*b,.64*c);a.lineTo(.56*b,c);a.lineTo(.44*b,c);a.lineTo(.44*b,.64*c);a.lineTo(.18*b,.9*c);a.lineTo(.1*b,.82*c);a.lineTo(.36*b,.56*c);a.lineTo(0,.56*c);a.close();a.fillAndStroke();a.setStrokeColor(d);a.setFillColor(e)},star:function(a,d,e,b,c){a.translate(b/5,c/6);c*=2/3;b*=.6;a.begin();a.moveTo(0,c/4);a.lineTo(b/3,c/4);a.lineTo(b/2,0);a.lineTo(2*b/3,c/4);a.lineTo(b,c/4);a.lineTo(5*b/6,c/2);a.lineTo(b,
3*c/4);a.lineTo(2*b/3,3*c/4);a.lineTo(b/2,c);a.lineTo(b/3,3*c/4);a.lineTo(0,3*c/4);a.lineTo(b/6,c/2);a.close();a.fillAndStroke()}};mxCellRenderer.registerShape("mxgraph.bpmn.shape",mxBpmnShape);function mxShapeEREntity(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxShapeEREntity,mxShape);
mxBpmnShape.prototype.symbols={general:function(a,d,e,b,c){},message:function(a,d,e,b,c){a.rect(0,0,b,c);a.fillAndStroke();"none"===mxUtils.getValue(this.style,"fillColor","none")&&a.setStrokeColor("#ffffff");a.begin();a.moveTo(0,0);a.lineTo(.5*b,.5*c);a.lineTo(b,0);a.stroke()},timer:function(a,d,e,b,c){a.ellipse(0,0,b,c);a.fillAndStroke();a.begin();a.moveTo(.5*b,0);a.lineTo(.5*b,.0642*c);a.moveTo(.7484*b,.0654*c);a.lineTo(.7126*b,.1281*c);a.moveTo(.93*b,.2471*c);a.lineTo(.8673*b,.2854*c);a.moveTo(b,
.5*c);a.lineTo(.9338*b,.5*c);a.moveTo(.93*b,.7509*c);a.lineTo(.8673*b,.7126*c);a.moveTo(.7484*b,.9326*c);a.lineTo(.7126*b,.8699*c);a.moveTo(.5*b,.9338*c);a.lineTo(.5*b,c);a.moveTo(.2496*b,.9325*c);a.lineTo(.2854*b,.8699*c);a.moveTo(.068*b,.7509*c);a.lineTo(.1307*b,.7126*c);a.moveTo(0,.5*c);a.lineTo(.0642*b,.5*c);a.moveTo(.068*b,.2471*c);a.lineTo(.1307*b,.2854*c);a.moveTo(.2496*b,.0654*c);a.lineTo(.2854*b,.1281*c);a.moveTo(.5246*b,.0706*c);a.lineTo(.5*b,.5*c);a.lineTo(.7804*b,.5118*c);a.stroke()},
escalation:function(a,d,e,b,c){a.begin();a.moveTo(0,c);a.lineTo(.5*b,0);a.lineTo(b,c);a.lineTo(.5*b,.5*c);a.close();a.fillAndStroke()},conditional:function(a,d,e,b,c){a.rect(0,0,b,c);a.fillAndStroke();a.begin();a.moveTo(0,.1027*c);a.lineTo(.798*b,.1027*c);a.moveTo(0,.3669*c);a.lineTo(.798*b,.3669*c);a.moveTo(0,.6311*c);a.lineTo(.798*b,.6311*c);a.moveTo(0,.8953*c);a.lineTo(.798*b,.8953*c);a.stroke()},link:function(a,d,e,b,c){a.begin();a.moveTo(0,.76*c);a.lineTo(0,.24*c);a.lineTo(.63*b,.24*c);a.lineTo(.63*
b,0);a.lineTo(b,.5*c);a.lineTo(.63*b,c);a.lineTo(.63*b,.76*c);a.close();a.fillAndStroke()},error:function(a,d,e,b,c){a.begin();a.moveTo(0,c);a.lineTo(.3287*b,.123*c);a.lineTo(.6194*b,.6342*c);a.lineTo(b,0);a.lineTo(.6625*b,.939*c);a.lineTo(.3717*b,.5064*c);a.close();a.fillAndStroke()},cancel:function(a,d,e,b,c){a.begin();a.moveTo(.1051*b,0);a.lineTo(.5*b,.3738*c);a.lineTo(.8909*b,0);a.lineTo(b,.1054*c);a.lineTo(.623*b,.5*c);a.lineTo(b,.8926*c);a.lineTo(.8909*b,c);a.lineTo(.5*b,.6242*c);a.lineTo(.1051*
b,c);a.lineTo(0,.8926*c);a.lineTo(.373*b,.5*c);a.lineTo(0,.1054*c);a.close();a.fillAndStroke()},compensation:function(a,d,e,b,c){a.begin();a.moveTo(0,.5*c);a.lineTo(.5*b,0);a.lineTo(.5*b,c);a.close();a.moveTo(.5*b,.5*c);a.lineTo(b,0);a.lineTo(b,c);a.close();a.fillAndStroke()},signal:function(a,d,e,b,c){a.begin();a.moveTo(0,c);a.lineTo(.5*b,0);a.lineTo(b,c);a.close();a.fillAndStroke()},multiple:function(a,d,e,b,c){a.begin();a.moveTo(0,.39*c);a.lineTo(.5*b,0);a.lineTo(b,.39*c);a.lineTo(.815*b,c);a.lineTo(.185*
b,c);a.close();a.fillAndStroke()},parallelMultiple:function(a,d,e,b,c){a.begin();a.moveTo(.38*b,0);a.lineTo(.62*b,0);a.lineTo(.62*b,.38*c);a.lineTo(b,.38*c);a.lineTo(b,.62*c);a.lineTo(.62*b,.62*c);a.lineTo(.62*b,c);a.lineTo(.38*b,c);a.lineTo(.38*b,.62*c);a.lineTo(0,.62*c);a.lineTo(0,.38*c);a.lineTo(.38*b,.38*c);a.close();a.fillAndStroke()},terminate:function(a,d,e,b,c){a.ellipse(0,0,b,c);a.fillAndStroke()},exclusiveGw:function(a,d,e,b,c){d=a.state.strokeColor;e=a.state.fillColor;a.setStrokeColor(e);
a.setFillColor(d);a.begin();a.moveTo(.105*b,0);a.lineTo(.5*b,.38*c);a.lineTo(.895*b,0*c);a.lineTo(b,.11*c);a.lineTo(.6172*b,.5*c);a.lineTo(b,.89*c);a.lineTo(.895*b,c);a.lineTo(.5*b,.62*c);a.lineTo(.105*b,c);a.lineTo(0,.89*c);a.lineTo(.3808*b,.5*c);a.lineTo(0,.11*c);a.close();a.fillAndStroke();a.setStrokeColor(d);a.setFillColor(e)},parallelGw:function(a,d,e,b,c){d=a.state.strokeColor;e=a.state.fillColor;a.setStrokeColor(e);a.setFillColor(d);a.begin();a.moveTo(.38*b,0);a.lineTo(.62*b,0);a.lineTo(.62*
b,.38*c);a.lineTo(b,.38*c);a.lineTo(b,.62*c);a.lineTo(.62*b,.62*c);a.lineTo(.62*b,c);a.lineTo(.38*b,c);a.lineTo(.38*b,.62*c);a.lineTo(0,.62*c);a.lineTo(0,.38*c);a.lineTo(.38*b,.38*c);a.close();a.fillAndStroke();a.setStrokeColor(d);a.setFillColor(e)},complexGw:function(a,d,e,b,c){d=a.state.strokeColor;e=a.state.fillColor;a.setStrokeColor(e);a.setFillColor(d);a.begin();a.moveTo(0,.44*c);a.lineTo(.36*b,.44*c);a.lineTo(.1*b,.18*c);a.lineTo(.18*b,.1*c);a.lineTo(.44*b,.36*c);a.lineTo(.44*b,0);a.lineTo(.56*
b,0);a.lineTo(.56*b,.36*c);a.lineTo(.82*b,.1*c);a.lineTo(.9*b,.18*c);a.lineTo(.64*b,.44*c);a.lineTo(b,.44*c);a.lineTo(b,.56*c);a.lineTo(.64*b,.56*c);a.lineTo(.9*b,.82*c);a.lineTo(.82*b,.9*c);a.lineTo(.56*b,.64*c);a.lineTo(.56*b,c);a.lineTo(.44*b,c);a.lineTo(.44*b,.64*c);a.lineTo(.18*b,.9*c);a.lineTo(.1*b,.82*c);a.lineTo(.36*b,.56*c);a.lineTo(0,.56*c);a.close();a.fillAndStroke();a.setStrokeColor(d);a.setFillColor(e)},star:function(a,d,e,b,c){a.translate(b/5,c/6);c*=2/3;b*=.6;a.begin();a.moveTo(0,c/
4);a.lineTo(b/3,c/4);a.lineTo(b/2,0);a.lineTo(2*b/3,c/4);a.lineTo(b,c/4);a.lineTo(5*b/6,c/2);a.lineTo(b,3*c/4);a.lineTo(2*b/3,3*c/4);a.lineTo(b/2,c);a.lineTo(b/3,3*c/4);a.lineTo(0,3*c/4);a.lineTo(b/6,c/2);a.close();a.fillAndStroke()}};mxCellRenderer.registerShape("mxgraph.bpmn.shape",mxBpmnShape);function mxShapeEREntity(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxShapeEREntity,mxShape);
mxShapeEREntity.prototype.paintVertexShape=function(a,d,e,b,c){var f=mxUtils.getValue(this.style,"buttonText","Entity"),g=mxUtils.getValue(this.style,"textColor","#666666"),h=mxUtils.getValue(this.style,mxConstants.STYLE_FONTSIZE,"17");a.translate(d,e);b=Math.max(b,20);c=Math.max(c,20);this.background(a,d,e,b,c,10,g);a.setShadow(!1);this.mainText(a,d,e,b,c,f,h,g)};
mxShapeEREntity.prototype.background=function(a,d,e,b,c,f,g){d=mxUtils.getValue(this.style,"buttonStyle","round").toString();"round"===d?(a.begin(),a.moveTo(0,f),a.arcTo(f,f,0,0,1,f,0),a.lineTo(b-f,0),a.arcTo(f,f,0,0,1,b,f),a.lineTo(b,c-f),a.arcTo(f,f,0,0,1,b-f,c),a.lineTo(f,c),a.arcTo(f,f,0,0,1,0,c-f),a.close(),a.fillAndStroke()):"rect"===d?(a.begin(),a.moveTo(0,0),a.lineTo(b,0),a.lineTo(b,c),a.lineTo(0,c),a.close(),a.fillAndStroke()):"dblFrame"===d&&(f=mxUtils.getValue(this.style,mxConstants.STYLE_FILLCOLOR,
"#ffffff"),a.setFillColor(f),a.begin(),a.moveTo(0,0),a.lineTo(b,0),a.lineTo(b,c),a.lineTo(0,c),a.close(),a.fillAndStroke(),f=Math.min(b,c),a.begin(),a.moveTo(.1*f,.1*f),a.lineTo(b-.1*f,.1*f),a.lineTo(b-.1*f,c-.1*f),a.lineTo(.1*f,c-.1*f),a.close(),a.stroke())};mxShapeEREntity.prototype.mainText=function(a,d,e,b,c,f,g,h){a.begin();a.setFontSize(g);a.setFontColor(h);a.text(.5*b,.5*c,0,0,f,mxConstants.ALIGN_CENTER,mxConstants.ALIGN_MIDDLE,0,null,0,0,0)};
@ -1543,6 +1543,12 @@ Graph.handleFactory[mxShapeBasicOctagon.prototype.cst.OCTAGON]=function(a){retur
function mxShapeBasicIsoCube(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.isoAngle=15}mxUtils.extend(mxShapeBasicIsoCube,mxActor);mxShapeBasicIsoCube.prototype.cst={ISO_CUBE:"mxgraph.basic.isocube"};
mxShapeBasicIsoCube.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=Math.max(.01,Math.min(94,parseFloat(mxUtils.getValue(this.style,"isoAngle",this.isoAngle))))*Math.PI/200;d=Math.min(b*Math.tan(d),.5*c);a.begin();a.moveTo(.5*b,0);a.lineTo(b,d);a.lineTo(b,c-d);a.lineTo(.5*b,c);a.lineTo(0,c-d);a.lineTo(0,d);a.close();a.fillAndStroke();a.setShadow(!1);a.begin();a.moveTo(0,d);a.lineTo(.5*b,2*d);a.lineTo(b,d);a.moveTo(.5*b,2*d);a.lineTo(.5*b,c);a.stroke()};
mxCellRenderer.registerShape(mxShapeBasicIsoCube.prototype.cst.ISO_CUBE,mxShapeBasicIsoCube);mxShapeBasicIsoCube.prototype.constraints=null;Graph.handleFactory[mxShapeBasicIsoCube.prototype.cst.ISO_CUBE]=function(a){return[Graph.createHandle(a,["isoAngle"],function(a){var d=Math.max(0,Math.min(100,parseFloat(mxUtils.getValue(this.state.style,"isoAngle",this.isoAngle))));return new mxPoint(a.x,a.y+d)},function(a,e){this.state.style.isoAngle=Math.round(100*Math.max(0,Math.min(100,e.y-a.y)))/100})]};
function mxShapeBasicTriangleAcute(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicTriangleAcute,mxActor);mxShapeBasicTriangleAcute.prototype.cst={ACUTE_TRIANGLE:"mxgraph.basic.acute_triangle"};
mxShapeBasicTriangleAcute.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=b*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));a.begin();a.moveTo(0,c);a.lineTo(d,0);a.lineTo(b,c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicTriangleAcute.prototype.cst.ACUTE_TRIANGLE,mxShapeBasicTriangleAcute);mxShapeBasicTriangleAcute.prototype.constraints=null;
Graph.handleFactory[mxShapeBasicTriangleAcute.prototype.cst.ACUTE_TRIANGLE]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d*a.width,a.y+10)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(1,(e.x-a.x)/a.width)))/100})]};
function mxShapeBasicTriangleObtuse(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1;this.dx=.5}mxUtils.extend(mxShapeBasicTriangleObtuse,mxActor);mxShapeBasicTriangleObtuse.prototype.cst={OBTUSE_TRIANGLE:"mxgraph.basic.obtuse_triangle"};
mxShapeBasicTriangleObtuse.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=b*Math.max(0,Math.min(b,parseFloat(mxUtils.getValue(this.style,"dx",this.dx))));a.begin();a.moveTo(d,c);a.lineTo(0,0);a.lineTo(b,c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBasicTriangleObtuse.prototype.cst.OBTUSE_TRIANGLE,mxShapeBasicTriangleObtuse);mxShapeBasicTriangleObtuse.prototype.constraints=null;
Graph.handleFactory[mxShapeBasicTriangleObtuse.prototype.cst.OBTUSE_TRIANGLE]=function(a){return[Graph.createHandle(a,["dx"],function(a){var d=Math.max(0,Math.min(1,parseFloat(mxUtils.getValue(this.state.style,"dx",this.dx))));return new mxPoint(a.x+d*a.width,a.y+a.height-10)},function(a,e){this.state.style.dx=Math.round(100*Math.max(0,Math.min(1,(e.x-a.x)/a.width)))/100})]};
function mxShapeBootstrapRRect(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxShapeBootstrapRRect,mxShape);mxShapeBootstrapRRect.prototype.cst={PACKAGE:"mxgraph.bootstrap.rrect",R_SIZE:"rSize"};mxShapeBootstrapRRect.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=parseInt(mxUtils.getValue(this.style,mxShapeBootstrapRRect.prototype.cst.R_SIZE,"10"));a.roundrect(0,0,b,c,d);a.fillAndStroke()};
mxCellRenderer.registerShape(mxShapeBootstrapRRect.prototype.cst.PACKAGE,mxShapeBootstrapRRect);function mxShapeBootstrapTopButton(a,d,e,b){mxShape.call(this);this.bounds=a;this.fill=d;this.stroke=e;this.strokewidth=null!=b?b:1}mxUtils.extend(mxShapeBootstrapTopButton,mxShape);mxShapeBootstrapTopButton.prototype.cst={TOP_BUTTON:"mxgraph.bootstrap.topButton",R_SIZE:"rSize"};
mxShapeBootstrapTopButton.prototype.paintVertexShape=function(a,d,e,b,c){a.translate(d,e);d=parseInt(mxUtils.getValue(this.style,mxShapeBootstrapTopButton.prototype.cst.R_SIZE,"10"));a.begin();a.moveTo(0,d);a.arcTo(d,d,0,0,1,d,0);a.lineTo(b-d,0);a.arcTo(d,d,0,0,1,b,d);a.lineTo(b,c);a.lineTo(0,c);a.close();a.fillAndStroke()};mxCellRenderer.registerShape(mxShapeBootstrapTopButton.prototype.cst.TOP_BUTTON,mxShapeBootstrapTopButton);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,195 @@
/**
* Plugin for embed mode in Confluence Connect post version 1.4.8
*/
Draw.loadPlugin(function(ui)
{
// Extracts macro data from JSON protocol
var macroData = {};
mxEvent.addListener(window, 'message', mxUtils.bind(this, function(evt)
{
var data = evt.data;
try
{
data = JSON.parse(data);
if (data.action == 'load' && data.macroData != null)
{
macroData = data.macroData;
}
}
catch (e)
{
data = null;
}
}));
// Creates actions
var action = ui.actions.put('viewerToolbarTop', new Action(mxResources.get('top'), function()
{
macroData.tbstyle = 'top';
}));
action.setToggleAction(true);
action.setSelectedCallback(function() { return macroData.tbstyle != 'inline' && macroData.tbstyle != 'hidden' });
action = ui.actions.put('viewerToolbarMiddle', new Action(mxResources.get('embed'), function()
{
macroData.tbstyle = 'inline';
}));
action.setToggleAction(true);
action.setSelectedCallback(function() { return macroData.tbstyle == 'inline'; });
action = ui.actions.put('viewerToolbarHidden', new Action(mxResources.get('hidden'), function()
{
macroData.tbstyle = 'hidden';
}));
action.setToggleAction(true);
action.setSelectedCallback(function() { return macroData.tbstyle == 'hidden'; });
action = ui.actions.put('viewerLightbox', new Action(mxResources.get('lightbox'), function()
{
macroData.lbox = (macroData.lbox != '0') ? '0' : '1';
}));
action.setToggleAction(true);
action.setSelectedCallback(function() { return macroData.lbox != '0'; });
action = ui.actions.put('linksAuto', new Action(mxResources.get('automatic'), function()
{
macroData.links = 'auto';
}));
action.setToggleAction(true);
action.setSelectedCallback(function() { return macroData.links != 'blank' && macroData.links != 'self'; });
action = ui.actions.put('linksBlank', new Action(mxResources.get('openInNewWindow'), function()
{
macroData.links = 'blank';
}));
action.setToggleAction(true);
action.setSelectedCallback(function() { return macroData.links == 'blank'; });
action = ui.actions.put('linksSelf', new Action(mxResources.get('openInThisWindow'), function()
{
macroData.links = 'self';
}));
action.setToggleAction(true);
action.setSelectedCallback(function() { return macroData.links == 'self'; });
action = ui.actions.put('viewerZoom', new Action(mxResources.get('zoom') + '...', function()
{
var dlg = new FilenameDialog(ui, (parseFloat(macroData.zoom || 1) * 100) + '%',
mxResources.get('apply'), function(newValue)
{
if (newValue != null)
{
var val = parseInt(newValue);
if (!isNaN(val))
{
macroData.zoom = val / 100;
}
}
}, mxResources.get('zoom'));
ui.showDialog(dlg.container, 300, 80, true, true);
dlg.init();
}));
// Creates viewer toolbar menu
mxResources.parse('viewerMenu=Viewer');
mxResources.parse('viewerToolbar=Toolbar');
mxResources.parse('viewerLightbox=Lightbox');
mxResources.parse('viewerLinks=Links');
ui.menus.put('viewerMenu', new Menu(mxUtils.bind(this, function(menu, parent)
{
ui.menus.addMenuItems(menu, ['viewerLightbox', 'viewerZoom', '-'], parent);
ui.menus.addSubmenu('viewerToolbar', menu, parent);
ui.menus.addSubmenu('viewerLinks', menu, parent);
})));
ui.menus.put('viewerToolbar', new Menu(mxUtils.bind(this, function(menu, parent)
{
ui.menus.addMenuItems(menu, ['viewerToolbarTop', 'viewerToolbarMiddle',
'viewerToolbarHidden'], parent);
})));
ui.menus.put('viewerLinks', new Menu(mxUtils.bind(this, function(menu, parent)
{
ui.menus.addMenuItems(menu, ['linksAuto', 'linksBlank', 'linksSelf'], parent);
})));
// Adds Viewer menu at bottom of Extras menu
var menu = ui.menus.get('extras');
var oldFunct = menu.funct;
menu.funct = function(menu, parent)
{
oldFunct.apply(this, arguments);
this.addSubmenu('viewerMenu', menu, parent);
};
// Returns modified macro data to client
var uiCreateLoadMessage = ui.createLoadMessage;
ui.createLoadMessage = function(eventName)
{
var msg = uiCreateLoadMessage.apply(this, arguments);
if (eventName == 'export')
{
msg.macroData = macroData;
}
return msg;
};
var lic = urlParams['lic'];
if (lic != null && lic == 'active')
{
ui.hideFooter();
}
else
{
// Display footer and alter it
var td = document.getElementById('geFooterItem2');
if (td != null)
{
td.innerHTML = '<a title="faq" href="https://marketplace.atlassian.com/plugins/com.mxgraph.confluence.plugins.diagramly/cloud/reviews" target="_blank">' +
'<img border="0" align="absmiddle" style="margin-top:-4px;"/>Enjoying this free plugin? Please help us to 4 stars.</a>';
}
td = document.getElementById('geFooterItem1');
if (td != null)
{
td.parentNode.removeChild(td);
}
td = document.getElementById('geFooterItem3');
if (td != null)
{
td.parentNode.removeChild(td);
}
}
var lang = urlParams['lang'];
var site = urlParams['site'];
var user = urlParams['user'];
try
{
var img = new Image();
img.src = 'https://log.draw.io/log?severity=CONFIG&msg=conf-cloud-edit' +
((lang != null) ? ':lang=' + encodeURIComponent(lang) : '') +
((site != null) ? ':site=' + encodeURIComponent(site) : '') +
((user != null) ? ':user=' + encodeURIComponent(user) : '') +
'&v=' + encodeURIComponent(EditorUi.VERSION);
}
catch (e)
{
// not important, just don't break editing because of a log
}
});

View file

@ -1,176 +1,639 @@
/**
* Parse SQL CREATE TABLE. Simple initial version for community to improve.
*/
Draw.loadPlugin(function(ui)
{
// LATER: REFERENCES and PRIMARY KEY
var div = document.createElement('div');
div.style.userSelect = 'none';
div.style.overflow = 'hidden';
div.style.padding = '10px';
div.style.height = '100%';
Draw.loadPlugin(function(ui) {
var graph = ui.editor.graph;
function TableModel() {
this.Name = null;
this.Properties = []
}
var sqlInput = document.createElement('textarea');
sqlInput.style.height = '200px';
sqlInput.style.width = '100%';
sqlInput.value = 'CREATE TABLE Persons\n(\nPersonID int,\nLastName varchar(255),\n' +
'FirstName varchar(255),\nAddress varchar(255),\nCity varchar(255)\n);';
mxUtils.br(div);
div.appendChild(sqlInput);
var graph = ui.editor.graph;
// Extends Extras menu
mxResources.parse('fromSql=From SQL');
function PropertyModel() {
this.Name = null;
this.Value = null;
this.TableName = null;
this.ForeignKey = [];
this.IsPrimaryKey = false;
this.IsForeignKey = false;
}
var wnd = new mxWindow(mxResources.get('fromSql'), div, document.body.offsetWidth - 480, 140,
320, 300, true, true);
wnd.destroyOnClose = false;
wnd.setMaximizable(false);
wnd.setResizable(false);
wnd.setClosable(true);
function ForeignKeyModel() {
this.PrimaryKeyName = null;
this.ReferencesPropertyName = null
function parseSql(text)
{
var lines = text.split('\n');
var tableCell = null;
var rows = null;
var cells = [];
var dx = 0;
this.PrimaryKeyTableName = null;
this.ReferencesTableName = null;
for (var i = 0; i < lines.length; i++)
{
var tmp = mxUtils.trim(lines[i]);
if (tmp.substring(0, 12).toLowerCase() == 'create table')
{
var name = mxUtils.trim(tmp.substring(12));
if (name.charAt(name.length - 1) == '(')
{
name = name.substring(0, name.lastIndexOf(' '));
}
tableCell = new mxCell(name, new mxGeometry(dx, 0, 160, 26),
'swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;');
tableCell.vertex = true;
cells.push(tableCell);
var size = ui.editor.graph.getPreferredSizeForCell(rowCell);
if (size != null)
{
tableCell.geometry.width = size.width + 10;
}
// For primary key lookups
rows = {};
}
else if (tableCell != null && tmp.charAt(0) == ')')
{
dx += tableCell.geometry.width + 40;
tableCell = null;
}
else if (tmp != '(' && tableCell != null)
{
var name = tmp.substring(0, (tmp.charAt(tmp.length - 1) == ',') ? tmp.length - 1 : tmp.length);
if (name.substring(0, 11).toLowerCase() != 'primary key')
{
var rowCell = new mxCell(name, new mxGeometry(0, 0, 90, 26),
'shape=partialRectangle;top=0;left=0;right=0;bottom=0;align=left;verticalAlign=top;spacingTop=-2;fillColor=none;spacingLeft=34;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;');
rowCell.vertex = true;
var left = sb.cloneCell(rowCell, '' /* eg. PK */);
left.connectable = false;
left.style = 'shape=partialRectangle;top=0;left=0;bottom=0;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;'
left.geometry.width = 30;
left.geometry.height = 26;
rowCell.insert(left);
var size = ui.editor.graph.getPreferredSizeForCell(rowCell);
if (size != null && tableCell.geometry.width < size.width + 10)
{
tableCell.geometry.width = size.width + 10;
}
tableCell.insert(rowCell);
tableCell.geometry.height += 26;
rows[rowCell.value] = rowCell;
}
}
}
if (cells.length > 0)
{
var graph = ui.editor.graph;
var view = graph.view;
var bds = graph.getGraphBounds();
// Computes unscaled, untranslated graph bounds
var x = Math.ceil(Math.max(0, bds.x / view.scale - view.translate.x) + 4 * graph.gridSize);
var y = Math.ceil(Math.max(0, (bds.y + bds.height) / view.scale - view.translate.y) + 4 * graph.gridSize);
this.IsDestination = false;
}
graph.setSelectionCells(graph.importCells(cells, x, y));
graph.scrollCellToVisible(graph.getSelectionCell());
}
wnd.setVisible(false);
};
function PrimaryKeyModel() {
this.PrimaryKeyName = null;
this.PrimaryKeyTableName = null;
}
mxUtils.br(div);
//SQL Types
var SQLServer = 'sqlserver';
var resetBtn = mxUtils.button(mxResources.get('reset'), function()
{
sqlInput.value = '';
});
resetBtn.style.marginTop = '8px';
resetBtn.style.marginRight = '4px';
resetBtn.style.padding = '4px';
div.appendChild(resetBtn);
//SQL Modes
var MODE_SQLSERVER = null;
var btn = mxUtils.button(mxResources.get('cancel'), function()
{
wnd.setVisible(false);
});
btn.style.marginTop = '8px';
btn.style.marginRight = '4px';
btn.style.padding = '4px';
div.appendChild(btn);
//Table Info
var foreignKeyList = [];
var primaryKeyList = [];
var tableList = [];
var cells = [];
var tableCell = null;
var rowCell = null;
var dx = 0;
var exportedTables = 0;
var btn = mxUtils.button(mxResources.get('insert'), function()
{
parseSql(sqlInput.value);
});
btn.style.marginTop = '8px';
btn.style.padding = '4px';
div.appendChild(btn);
//Create Base div
var div = document.createElement('div');
div.style.userSelect = 'none';
div.style.overflow = 'hidden';
div.style.padding = '10px';
div.style.height = '100%';
var graph = ui.editor.graph;
var sqlInput = document.createElement('textarea');
sqlInput.style.height = '200px';
sqlInput.style.width = '100%';
sqlInput.value = 'CREATE TABLE Persons\n(\nPersonID int,\nLastName varchar(255),\n' +
'FirstName varchar(255),\nAddress varchar(255),\nCity varchar(255)\n);';
mxUtils.br(div);
div.appendChild(sqlInput);
var graph = ui.editor.graph;
// Extends Extras menu
mxResources.parse('fromSql=From SQL');
var wnd = new mxWindow(mxResources.get('fromSql'), div, document.body.offsetWidth - 480, 140,
320, 300, true, true);
wnd.destroyOnClose = false;
wnd.setMaximizable(false);
wnd.setResizable(false);
wnd.setClosable(true);
function AddRow(propertyModel, tableName) {
var cellName = propertyModel.Name;
if (propertyModel.IsForeignKey && propertyModel.ForeignKey !== undefined && propertyModel.ForeignKey !== null) {
propertyModel.ForeignKey.forEach(function(foreignKeyModel) {
//We do not want the foreign key to be duplicated in our table to the same property
if (tableName !== foreignKeyModel.PrimaryKeyTableName || (tableName === foreignKeyModel.PrimaryKeyTableName && propertyModel.Name !== foreignKeyModel.PrimaryKeyName)) {
cellName += ' | ' + foreignKeyModel.PrimaryKeyTableName + '(' + foreignKeyModel.PrimaryKeyName + ')';
}
})
}
rowCell = new mxCell(cellName, new mxGeometry(0, 0, 90, 26),
'shape=partialRectangle;top=0;left=0;right=0;bottom=0;align=left;verticalAlign=top;spacingTop=-2;fillColor=none;spacingLeft=64;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;');
rowCell.vertex = true;
var columnType = propertyModel.IsPrimaryKey && propertyModel.IsForeignKey ? 'PK | FK' : propertyModel.IsPrimaryKey ? 'PK' : propertyModel.IsForeignKey ? 'FK' : '';
var left = sb.cloneCell(rowCell, columnType);
left.connectable = false;
left.style = 'shape=partialRectangle;top=0;left=0;bottom=0;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=180;points=[];portConstraint=eastwest;part=1;'
left.geometry.width = 54;
left.geometry.height = 26;
rowCell.insert(left);
var size = ui.editor.graph.getPreferredSizeForCell(rowCell);
if (size !== null && tableCell.geometry.width < size.width + 10) {
tableCell.geometry.width = size.width + 10;
}
tableCell.insert(rowCell);
tableCell.geometry.height += 26;
rowCell = rowCell;
};
function ParseMySQLForeignKey(name, currentTableModel) {
var referencesIndex = name.toLowerCase().indexOf("references");
var foreignKeySQL = name.substring(0, referencesIndex);
var referencesSQL = name.substring(referencesIndex, name.length);
//Remove references syntax
referencesSQL = referencesSQL.replace("REFERENCES ", '');
//Get Table and Property Index
var referencedTableIndex = referencesSQL.indexOf("(");
var referencedPropertyIndex = referencesSQL.indexOf(")");
//Get Referenced Table
var referencedTableName = referencesSQL.substring(0, referencedTableIndex);
//Get Referenced Key
var referencedPropertyName = referencesSQL.substring(referencedTableIndex + 1, referencedPropertyIndex);
//Get ForeignKey
var foreignKey = foreignKeySQL.replace("FOREIGN KEY (", '').replace(")", '').replace(" ", '');
//Create ForeignKey
var foreignKeyOriginModel = CreateForeignKey(foreignKey, currentTableModel.Name, referencedPropertyName, referencedTableName, true);
//Add ForeignKey Origin
foreignKeyList.push(foreignKeyOriginModel);
//Create ForeignKey
var foreignKeyDestinationModel = CreateForeignKey(referencedPropertyName, referencedTableName, foreignKey, currentTableModel.Name, false);
//Add ForeignKey Destination
foreignKeyList.push(foreignKeyDestinationModel);
};
function ParseSQLServerForeignKey(name, currentTableModel) {
var referencesIndex = name.toLowerCase().indexOf("references");
if (name.toLowerCase().indexOf("foreign key(") !== -1) {
var foreignKeySQL = name.substring(name.toLowerCase().indexOf("foreign key("), referencesIndex).replace("FOREIGN KEY(", '').replace(')', '');
} else {
var foreignKeySQL = name.substring(name.toLowerCase().indexOf("foreign key ("), referencesIndex).replace("FOREIGN KEY (", '').replace(')', '');
}
var referencesSQL = name.substring(referencesIndex, name.length);
var alterTableName = name.substring(0, name.indexOf("WITH")).replace('ALTER TABLE ', '');
if (referencesIndex !== -1 && alterTableName !== '' && foreignKeySQL !== '' && referencesSQL !== '') {
//Remove references syntax
referencesSQL = referencesSQL.replace("REFERENCES ", '');
//Get Table and Property Index
var referencedTableIndex = referencesSQL.indexOf("(");
var referencedPropertyIndex = referencesSQL.indexOf(")");
//Get Referenced Table
var referencedTableName = referencesSQL.substring(0, referencedTableIndex);
//Parse Name
referencedTableName = ParseSQLServerName(referencedTableName);
//Get Referenced Key
var referencedPropertyName = referencesSQL.substring(referencedTableIndex + 1, referencedPropertyIndex);
//Parse Name
referencedPropertyName = ParseSQLServerName(referencedPropertyName);
//Get ForeignKey
var foreignKey = foreignKeySQL.replace("FOREIGN KEY (", '').replace(")", '');
//Parse Name
foreignKey = ParseSQLServerName(foreignKey);
//Parse Name
alterTableName = ParseSQLServerName(alterTableName);
//Create ForeignKey
var foreignKeyOriginModel = CreateForeignKey(foreignKey, alterTableName, referencedPropertyName, referencedTableName, true);
//Add ForeignKey Origin
foreignKeyList.push(foreignKeyOriginModel);
//Create ForeignKey
var foreignKeyDestinationModel = CreateForeignKey(referencedPropertyName, referencedTableName, foreignKey, alterTableName, false);
//Add ForeignKey Destination
foreignKeyList.push(foreignKeyDestinationModel);
}
};
function ProcessPrimaryKey() {
primaryKeyList.forEach(function(primaryModel) {
tableList.forEach(function(tableModel) {
if (tableModel.Name === primaryModel.PrimaryKeyTableName) {
tableModel.Properties.forEach(function(propertyModel) {
if (propertyModel.Name === primaryModel.PrimaryKeyName) {
propertyModel.IsPrimaryKey = true;
}
});
}
});
});
}
function AssignForeignKey(foreignKeyModel) {
tableList.forEach(function(tableModel) {
if (tableModel.Name === foreignKeyModel.ReferencesTableName) {
tableModel.Properties.forEach(function(propertyModel) {
if (propertyModel.Name === foreignKeyModel.ReferencesPropertyName) {
propertyModel.IsForeignKey = true;
propertyModel.ForeignKey.push(foreignKeyModel);
}
});
}
if (tableModel.Name === foreignKeyModel.PrimaryKeyTableName) {
tableModel.Properties.forEach(function(propertyModel) {
if (propertyModel.Name === foreignKeyModel.PrimaryKeyName) {
propertyModel.IsForeignKey = true;
propertyModel.ForeignKey.push(foreignKeyModel);
}
});
}
});
}
function ProcessForeignKey() {
foreignKeyList.forEach(function(foreignKeyModel) {
//Assign ForeignKey
AssignForeignKey(foreignKeyModel);
});
}
function CreateForeignKey(primaryKeyName, primaryKeyTableName, referencesPropertyName, referencesTableName, isDestination) {
var foreignKey = new ForeignKeyModel;
foreignKey.PrimaryKeyTableName = primaryKeyTableName;
foreignKey.PrimaryKeyName = primaryKeyName;
foreignKey.ReferencesPropertyName = referencesPropertyName;
foreignKey.ReferencesTableName = referencesTableName;
foreignKey.IsDestination = (isDestination !== undefined && isDestination !== null) ? isDestination : false;
return foreignKey;
};
function CreatePrimaryKey(primaryKeyName, primaryKeyTableName) {
var primaryKey = new PrimaryKeyModel;
primaryKey.PrimaryKeyTableName = primaryKeyTableName;
primaryKey.PrimaryKeyName = primaryKeyName;
return primaryKey;
};
function CreateProperty(name, tableName, foreignKey, isPrimaryKey) {
var property = new PropertyModel;
var isForeignKey = foreignKey !== undefined && foreignKey !== null;
property.Name = name;
property.TableName = tableName;
property.ForeignKey = isForeignKey ? foreignKey : [];
property.IsForeignKey = isForeignKey;
property.IsPrimaryKey = isPrimaryKey;
return property;
};
function CreateTable(name) {
var table = new TableModel;
table.Name = name;
//Count exported tables
exportedTables++;
return table;
};
function ParseSQLServerName(name, property) {
name = name.replace('[dbo].[', '');
name = name.replace('](', '');
name = name.replace('].[', '.');
name = name.replace('[', '');
if (property == undefined || property == null) {
name = name.replace(' [', '');
name = name.replace('] ', '');
} else {
if (name.indexOf(']') !== -1) {
name = name.substring(0, name.indexOf(']'));
}
}
if (name.lastIndexOf(']') === (name.length - 1)) {
name = name.substring(0, name.length - 1);
}
if (name.lastIndexOf(')') === (name.length - 1)) {
name = name.substring(0, name.length - 1);
}
if (name.lastIndexOf('(') === (name.length - 1)) {
name = name.substring(0, name.length - 1);
}
name = name.replace(' ', '');
return name;
};
function ParseTableName(name) {
if (name.charAt(name.length - 1) === '(') {
if (!MODE_SQLSERVER) {
name = name.substring(0, name.lastIndexOf(' '));
} else {
name = ParseSQLServerName(name);
}
}
return name;
};
function parseSql(text, type) {
var lines = text.split('\n');
dx = 0;
MODE_SQLSERVER = type !== undefined && type !== null && type == SQLServer;
tableCell = null;
cells = [];
exportedTables = 0;
tableList = [];
foreignKeyList = [];
var currentTableModel = null;
//Parse SQL to objects
for (var i = 0; i < lines.length; i++) {
rowCell = null;
var tmp = mxUtils.trim(lines[i]);
var propertyRow = tmp.substring(0, 12).toLowerCase();
//Parse Table
if (propertyRow === 'create table') {
//Parse row
var name = mxUtils.trim(tmp.substring(12));
//Parse Table Name
name = ParseTableName(name);
if (currentTableModel !== null) {
//Add table to the list
tableList.push(currentTableModel);
}
//Create Table
currentTableModel = CreateTable(name);
}
// Parse Properties
else if (tmp !== '(' && currentTableModel != null && propertyRow !== 'alter table ') {
//Parse the row
var name = tmp.substring(0, (tmp.charAt(tmp.length - 1) === ',') ? tmp.length - 1 : tmp.length);
//Attempt to get the Key Type
var propertyType = name.substring(0, 11).toLowerCase();
//Add special constraints
if (MODE_SQLSERVER) {
if (tmp.indexOf("CONSTRAINT") !== -1 && tmp.indexOf("PRIMARY KEY") !== -1) {
propertyType = "constrain primary key";
}
if (tmp.indexOf("CONSTRAINT") !== -1 && tmp.indexOf("FOREIGN KEY") !== -1) {
propertyType = "constrain foreign key";
}
}
//Verify if this is a property that doesn't have a relationship (One minute of silence for the property)
var normalProperty = propertyType !== 'primary key' && propertyType !== 'foreign key' && propertyType !== 'constrain primary key' && propertyType !== 'constrain foreign key';
//Parse properties that don't have relationships
if (normalProperty) {
if (name === '' || name === "" || name === ");") {
continue;
}
if (MODE_SQLSERVER) {
if (name.indexOf("ASC") !== -1 ||
name.indexOf("DESC") !== -1 ||
name.indexOf("EXEC") !== -1 ||
name.indexOf("WITH") !== -1 ||
name.indexOf("ON") !== -1 ||
name.indexOf("ALTER") !== -1 ||
name.indexOf("/*") !== -1 ||
name.indexOf("CONSTRAIN") !== -1 ||
name.indexOf("SET") !== -1 ||
name.indexOf("NONCLUSTERED") !== -1 ||
name.indexOf("GO") !== -1 ||
name.indexOf("REFERENCES") !== -1) {
continue;
}
//Get delimiter of column name
var firstSpaceIndex = name.indexOf(' ');
//Get full name
name = name.substring(0, firstSpaceIndex);
name = ParseSQLServerName(name, true);
} else {
//Get delimiter of column name
var firstSpaceIndex = name.indexOf(' ');
//Get full name
name = name.substring(0, firstSpaceIndex);
}
//Create Property
var propertyModel = CreateProperty(name, currentTableModel.Name, null, false, false);
//Add Property to table
currentTableModel.Properties.push(propertyModel);
}
//Parse Primary Key
if (propertyType === 'primary key' || propertyType === 'constrain primary key') {
if (!MODE_SQLSERVER) {
var primaryKey = name.replace('PRIMARY KEY (', '').replace(')', '');
//Create Primary Key
var primaryKeyModel = CreatePrimaryKey(primaryKey, currentTableModel.Name);
//Add Primary Key to List
primaryKeyList.push(primaryKeyModel);
} else {
var start = i + 2;
var end = 0;
if (name.indexOf('PRIMARY KEY') !== -1 && name.indexOf('CLUSTERED') === -1) {
var primaryKey = name.replace('PRIMARY KEY (', '').replace(')', '');
//Create Primary Key
var primaryKeyModel = CreatePrimaryKey(primaryKey, currentTableModel.Name);
//Add Primary Key to List
primaryKeyList.push(primaryKeyModel);
} else {
while (end === 0) {
var primaryKeyRow = mxUtils.trim(lines[start]);
if (primaryKeyRow.indexOf(')') !== -1) {
end = 1;
break;
}
start++;
primaryKeyRow = primaryKeyRow.replace("ASC", '');
//Parse name
primaryKeyRow = ParseSQLServerName(primaryKeyRow, true);
//Create Primary Key
var primaryKeyModel = CreatePrimaryKey(primaryKeyRow, currentTableModel.Name);
//Add Primary Key to List
primaryKeyList.push(primaryKeyModel);
}
}
}
}
//Parse Foreign Key
if (propertyType === 'foreign key' || propertyType === 'constrain foreign key') {
if (!MODE_SQLSERVER) {
ParseMySQLForeignKey(name, currentTableModel);
} else {
var completeRow = name;
if (name.indexOf('REFERENCES') === -1) {
var referencesRow = mxUtils.trim(lines[i + 1]);
completeRow = 'ALTER TABLE [dbo].[' + currentTableModel.Name + '] WITH CHECK ADD' + ' ' + name + ' ' + referencesRow;
}
ParseSQLServerForeignKey(completeRow, currentTableModel);
}
}
} else if (propertyRow === 'alter table ') {
if (MODE_SQLSERVER) {
//Parse the row
var alterTableRow = tmp.substring(0, (tmp.charAt(tmp.length - 1) === ',') ? tmp.length - 1 : tmp.length);
var referencesRow = mxUtils.trim(lines[i + 1]);
var completeRow = alterTableRow + ' ' + referencesRow;
ParseSQLServerForeignKey(completeRow, currentTableModel);
}
}
}
//Add last table
if (currentTableModel !== null) {
//Add table to the list
tableList.push(currentTableModel);
}
//Process Primary Keys
ProcessPrimaryKey();
//Process Foreign Keys
ProcessForeignKey();
//Create Table in UI
CreateTableUI();
};
function CreateTableUI() {
tableList.forEach(function(tableModel) {
//Define table size width
var maxNameLenght = 100 + tableModel.Name.length;
//Create Table
tableCell = new mxCell(tableModel.Name, new mxGeometry(dx, 0, maxNameLenght, 26),
'swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;');
tableCell.vertex = true;
//Resize row
var size = ui.editor.graph.getPreferredSizeForCell(rowCell);
if (size !== null) {
tableCell.geometry.width = size.width + maxNameLenght;
}
//Add Table to cells
cells.push(tableCell);
//Add properties
tableModel.Properties.forEach(function(propertyModel) {
//Add row
AddRow(propertyModel, tableModel.Name);
});
//Close table
dx += tableCell.geometry.width + 40;
tableCell = null;
});
if (cells.length > 0) {
var graph = ui.editor.graph;
var view = graph.view;
var bds = graph.getGraphBounds();
// Computes unscaled, untranslated graph bounds
var x = Math.ceil(Math.max(0, bds.x / view.scale - view.translate.x) + 4 * graph.gridSize);
var y = Math.ceil(Math.max(0, (bds.y + bds.height) / view.scale - view.translate.y) + 4 * graph.gridSize);
graph.setSelectionCells(graph.importCells(cells, x, y));
graph.scrollCellToVisible(graph.getSelectionCell());
}
wnd.setVisible(false);
};
mxUtils.br(div);
var resetBtn = mxUtils.button(mxResources.get('reset'), function() {
sqlInput.value = '';
});
resetBtn.style.marginTop = '8px';
resetBtn.style.marginRight = '4px';
resetBtn.style.padding = '4px';
div.appendChild(resetBtn);
var btn = mxUtils.button('Insert MySQL', function() {
parseSql(sqlInput.value);
});
btn.style.marginTop = '8px';
btn.style.padding = '4px';
div.appendChild(btn);
var btn = mxUtils.button('Insert SQL Server', function() {
parseSql(sqlInput.value, 'sqlserver');
});
btn.style.marginTop = '8px';
btn.style.padding = '4px';
div.appendChild(btn);
// Adds action
ui.actions.addAction('fromSql', function()
{
wnd.setVisible(!wnd.isVisible());
if (wnd.isVisible())
{
sqlInput.focus();
}
ui.actions.addAction('fromSql', function() {
wnd.setVisible(!wnd.isVisible());
if (wnd.isVisible()) {
sqlInput.focus();
}
});
var theMenu = ui.menus.get('insert');
var oldMenu = theMenu.funct;
theMenu.funct = function(menu, parent)
{
oldMenu.apply(this, arguments);
ui.menus.addMenuItems(menu, ['fromSql'], parent);
};
});
var theMenu = ui.menus.get('insert');
var oldMenu = theMenu.funct;
theMenu.funct = function(menu, parent) {
oldMenu.apply(this, arguments);
ui.menus.addMenuItems(menu, ['fromSql'], parent);
};
});

View file

@ -206,7 +206,7 @@ embed=Insluiten
embedImages=Afbeeldingen Insluiten
mainEmbedNotice=Dit op de pagina plakken
electrical=Elektrisch
ellipse=Ellipse
ellipse=Ellips
embedNotice=Dit eenmalig aan het einde van de pagina plakken
enterGroup=Groep Invullen
enterName=Naam invullen
@ -419,7 +419,7 @@ makeCopy=Een kopie maken
manual=Handleiding
middle=Midden
misc=Overige
mockups=Mock-ups
mockups=Modellen
modificationDate=Aanpassingsdatum
modifiedBy=Aangepast door
more=Meer
@ -533,7 +533,7 @@ readOnly=Alleen-lezen
reconnecting=Opnieuw verbinden
recentlyUpdated=Recent bijgewerkt
recentlyViewed=Recent bekeken
rectangle=Rectangle
rectangle=Rechthoek
redirectToNewApp=Dit bestand is aangemaakt of aangepast in een nieuwere versie van deze app. U wordt nu doorgestuurd.
realtimeTimeout=Het lijkt alsof u enkele wijzigingen hebt aangebracht terwijl u offline was. Het spijt ons, maar deze wijzigingen kunnen niet worden opgeslagen.
redo=Opnieuw
@ -568,7 +568,7 @@ retryingLogin=Logintijd verlopen. Opnieuw...
reverse=Ongedaan maken
revision=Revisie
revisionHistory=Revisiegeschiedenis
rhombus=Rhombus
rhombus=Ruit
right=Rechts
rightAlign=Rechts Uitlijnen
rightToLeft=Rechts naar links
@ -597,7 +597,7 @@ selectFile=Bestand selecteren
selectFolder=Map selecteren
selectFont=Lettertype selecteren
selectNone=Niets selecteren
selectTemplate=Select Template
selectTemplate=Sjabloon selecteren
selectVertices=Hoekpunten selecteren
sendMessage=Versturen
sendYourFeedbackToDrawIo=Stuur uw opmerkingen naar draw.io
@ -708,7 +708,7 @@ engineering=Elektrisch
flowcharts=Stroomschema's
gmdl=Materiaalontwerp
mindmaps=Mindmaps
mockups=Mock-ups
mockups=Modellen
networkdiagrams=Netwerkdiagrammen
nothingIsSelected=Niets geselecteerd
other=Overige

View file

@ -435,6 +435,13 @@ mxBpmnShape.prototype.symbols = {
c.rect(0, 0, w, h);
c.fillAndStroke();
var fc = mxUtils.getValue(this.style, "fillColor", "none");
if (fc === 'none')
{
c.setStrokeColor('#ffffff');
}
c.begin();
c.moveTo(0, 0);
c.lineTo(w * 0.5, h * 0.5);

View file

@ -451,3 +451,126 @@ Graph.handleFactory[mxShapeBasicIsoCube.prototype.cst.ISO_CUBE] = function(state
return handles;
};
//**********************************************************************************************************************************************************
//Acute Triangle
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeBasicTriangleAcute(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
this.dx = 0.5;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeBasicTriangleAcute, mxActor);
mxShapeBasicTriangleAcute.prototype.cst = {ACUTE_TRIANGLE : 'mxgraph.basic.acute_triangle'};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeBasicTriangleAcute.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.translate(x, y);
var dx = w * Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
c.begin();
c.moveTo(0, h);
c.lineTo(dx, 0);
c.lineTo(w, h);
c.close();
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeBasicTriangleAcute.prototype.cst.ACUTE_TRIANGLE, mxShapeBasicTriangleAcute);
mxShapeBasicTriangleAcute.prototype.constraints = null;
Graph.handleFactory[mxShapeBasicTriangleAcute.prototype.cst.ACUTE_TRIANGLE] = function(state)
{
var handles = [Graph.createHandle(state, ['dx'], function(bounds)
{
var dx = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
return new mxPoint(bounds.x + dx * bounds.width, bounds.y + 10);
}, function(bounds, pt)
{
this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(1, (pt.x - bounds.x) / bounds.width))) / 100;
})];
return handles;
};
//**********************************************************************************************************************************************************
//Obtuse Triangle
//**********************************************************************************************************************************************************
/**
* Extends mxShape.
*/
function mxShapeBasicTriangleObtuse(bounds, fill, stroke, strokewidth)
{
mxShape.call(this);
this.bounds = bounds;
this.fill = fill;
this.stroke = stroke;
this.strokewidth = (strokewidth != null) ? strokewidth : 1;
this.dx = 0.5;
};
/**
* Extends mxShape.
*/
mxUtils.extend(mxShapeBasicTriangleObtuse, mxActor);
mxShapeBasicTriangleObtuse.prototype.cst = {OBTUSE_TRIANGLE : 'mxgraph.basic.obtuse_triangle'};
/**
* Function: paintVertexShape
*
* Paints the vertex shape.
*/
mxShapeBasicTriangleObtuse.prototype.paintVertexShape = function(c, x, y, w, h)
{
c.translate(x, y);
var dx = w * Math.max(0, Math.min(w, parseFloat(mxUtils.getValue(this.style, 'dx', this.dx))));
c.begin();
c.moveTo(dx, h);
c.lineTo(0, 0);
c.lineTo(w, h);
c.close();
c.fillAndStroke();
};
mxCellRenderer.registerShape(mxShapeBasicTriangleObtuse.prototype.cst.OBTUSE_TRIANGLE, mxShapeBasicTriangleObtuse);
mxShapeBasicTriangleObtuse.prototype.constraints = null;
Graph.handleFactory[mxShapeBasicTriangleObtuse.prototype.cst.OBTUSE_TRIANGLE] = function(state)
{
var handles = [Graph.createHandle(state, ['dx'], function(bounds)
{
var dx = Math.max(0, Math.min(1, parseFloat(mxUtils.getValue(this.state.style, 'dx', this.dx))));
return new mxPoint(bounds.x + dx * bounds.width, bounds.y + bounds.height - 10);
}, function(bounds, pt)
{
this.state.style['dx'] = Math.round(100 * Math.max(0, Math.min(1, (pt.x - bounds.x) / bounds.width))) / 100;
})];
return handles;
};

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff