1/** 2 * Handles paste from Lucidchart 3 * 4 * TODO: Move to dynamic loading minimized plugin. 5 */ 6//This covers version 52 of Lucidchart ("BCUVersion": 52 or "BackwardsCompatibilityStateVersion": 52) 7LucidImporter = {}; 8(function() 9{ 10 // Global import transformation 11 var defaultFontSize = '13'; 12 var defaultLucidFont = 'Liberation Sans'; 13 var scale = 0.75; 14 var dx = 0; 15 var dy = 0; 16 17 var arcSize = 6; 18 var edgeStyle = 'html=1;jettySize=18;'; 19 var vertexStyle = 'html=1;overflow=block;blockSpacing=1;whiteSpace=wrap;'; 20 var labelStyle = 'text;html=1;resizable=0;labelBackgroundColor=#ffffff;align=center;verticalAlign=middle;'; 21 22 var c = 'verticalLabelPosition=bottom;verticalAlign=top;fillColor=#036897;strokeColor=#ffffff'; 23 var s = 'shape=mxgraph.'; 24 var ss = 'strokeColor=none;shape=mxgraph.'; 25 var ssAzure = 'verticalLabelPosition=bottom;verticalAlign=top;' + ss; 26 var cs = 'mxCompositeShape'; 27 var azur19 = 'aspect=fixed;html=1;points=[];align=center;verticalAlign=top;image;image=img/lib/mscae/'; 28 var gcpIcon = 'html=1;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none;shape=mxgraph.gcp2.'; 29 var kupIcon = 'html=1;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none;shape=mxgraph.kubernetes.icon;prIcon='; 30 31 //Instead of doing a massive code refactoring, thees ugly global variables are used 32 var isLastLblHTML = false; 33 var gFontFamilyStyle = ''; 34 35 //stencils to rotate counter clockwise 90 degrees 36 var rccw = [ 37 'AEUSBBlock', 38 'AGSCutandpasteBlock', 39 'iOSDeviceiPadLandscape', 40 'iOSDeviceiPadProLandscape' 41 ]; 42 43 //stencils to rotate clockwise 180 degrees 44 var rcw2 = [ 45 'fpDoor' 46 ]; 47 48 var edgeStyleMap = { 49 'None': 'none;', 50 'Arrow': 'block;xyzFill=1;', 51 'Hollow Arrow': 'block;xyzFill=0;', 52 'Open Arrow': 'open;', 53 'CFN ERD Zero Or More Arrow': 'ERzeroToMany;xyzSize=10;', 54 'CFN ERD One Or More Arrow': 'ERoneToMany;xyzSize=10;', 55 'CFN ERD Many Arrow': 'ERmany;xyzSize=10;', 56 'CFN ERD Exactly One Arrow': 'ERmandOne;xyzSize=10;', 57 'CFN ERD Zero Or One Arrow': 'ERzeroToOne;xyzSize=10;', 58 'CFN ERD One Arrow': 'ERone;xyzSize=16;', 59 'Generalization': 'block;xyzFill=0;xyzSize=12;', 60 'Big Open Arrow': 'open;xyzSize=10;', 61 'Asynch1': 'openAsync;flipV=1;xyzSize=10;', 62 'Asynch2': 'openAsync;xyzSize=10;', 63 'Aggregation': 'diamond;xyzFill=0;xyzSize=16;', 64 'Composition': 'diamond;xyzFill=1;xyzSize=16;', 65 'BlockEnd': 'box;xyzFill=0;xyzSize=16;', 66 'Measure': 'ERone;xyzSize=10;', 67 'CircleOpen': 'oval;xyzFill=0;xyzSize=16;', 68 'CircleClosed': 'oval;xyzFill=1;xyzSize=16;', 69 'BlockEndFill': 'box;xyzFill=1;xyzSize=16;', 70 'Nesting': 'circlePlus;xyzSize=7;xyzFill=0;', 71 'BPMN Conditional': 'diamond;xyzFill=0;', 72 'BPMN Default': 'dash;' 73 }; 74 75 var styleMap = { 76//Standard 77 'DefaultTextBlockNew': 'strokeColor=none;fillColor=none', 78 'DefaultTextBlock': 'strokeColor=none;fillColor=none', 79 'DefaultSquareBlock': '', 80 'RectangleBlock': '', 81 'DefaultNoteBlock': 'shape=note;size=15', 82 'DefaultNoteBlockV2': 'shape=note;size=15', 83 'HotspotBlock': 'strokeColor=none;fillColor=none', 84 'ImageSearchBlock2': 'shape=image', 85 'UserImage2Block': 'shape=image', 86 'ExtShapeBoxBlock': '', 87 'DefaultStickyNoteBlock': 'shadow=1', 88//Flowchart 89 'ProcessBlock': '', 90 'DecisionBlock': 'rhombus', 91 'TerminatorBlock': 'rounded=1;arcSize=50', 92 'PredefinedProcessBlock': 'shape=process', 93 'DocumentBlock': 'shape=document;boundedLbl=1', 94 'MultiDocumentBlock': s + 'flowchart.multi-document', 95 'ManualInputBlock': 'shape=manualInput;size=15', 96 'PreparationBlock': 'shape=hexagon;perimeter=hexagonPerimeter2', 97 'DataBlock': 'shape=parallelogram;perimeter=parallelogramPerimeter;anchorPointDirection=0', 98 'DataBlockNew': 'shape=parallelogram;perimeter=parallelogramPerimeter;anchorPointDirection=0', 99 'DatabaseBlock': 'shape=cylinder3;size=4;anchorPointDirection=0;boundedLbl=1;', 100 'DirectAccessStorageBlock': 'shape=cylinder3;direction=south;size=10;anchorPointDirection=0;boundedLbl=1;', 101 'InternalStorageBlock': cs, 102 'PaperTapeBlock': 'shape=tape;size=0.2', 103 'ManualOperationBlockNew': 'shape=trapezoid;perimeter=trapezoidPerimeter;anchorPointDirection=0;flipV=1', 104 'DelayBlock': 'shape=delay', 105 'StoredDataBlock': 'shape=cylinder3;boundedLbl=1;size=15;lid=0;direction=south;', 106 'MergeBlock': 'triangle;direction=south;anchorPointDirection=0', 107 'ConnectorBlock': 'ellipse', 108 'OrBlock': s + 'flowchart.summing_function', 109 'SummingJunctionBlock': s + 'flowchart.or', 110 'DisplayBlock': 'shape=display', 111 'OffPageLinkBlock': 'shape=offPageConnector', 112 'BraceNoteBlock': cs, 113 'NoteBlock': cs, 114//Containers 115 'AdvancedSwimLaneBlock': cs, 116 'AdvancedSwimLaneBlockRotated': cs, 117 'RectangleContainerBlock': 'container=1;collapsible=0', 118 'DiamondContainerBlock': 'shape=rhombus;container=1;collapsible=0', 119 'RoundedRectangleContainerBlock': 'container=1;rounded=1;absoluteArcSize=1;arcSize=24;collapsible=0', 120 'CircleContainerBlock': 'ellipse;container=1;collapsible=0', 121 'PillContainerBlock': 'shape=mxgraph.flowchart.terminator;container=1;collapsible=0', 122 'BraceBlock': cs, 123 'BracketBlock': cs, 124 'BraceBlockRotated': cs, 125 'BracketBlockRotated': cs, 126//Geometric shapes 127 'IsoscelesTriangleBlock': 'shape=mxgraph.basic.acute_triangle;dx=0.5;anchorPointDirection=0', 128 'RightTriangleBlock': s + 'basic.orthogonal_triangle', 129 'PentagonBlock': s + 'basic.pentagon', 130 'HexagonBlock': 'shape=hexagon;perimeter=hexagonPerimeter2', 131 'OctagonBlock': s + 'basic.octagon2;dx=15;', 132 'CrossBlock': 'shape=cross;size=0.6', 133 'CloudBlock': 'ellipse;shape=cloud', 134 'HeartBlock': s + 'basic.heart', 135 'RightArrowBlock': cs, 136 'DoubleArrowBlock': cs, 137 'CalloutBlock': s + 'basic.rectangular_callout', 138 'CalloutSquareBlock': cs, 139 'ShapeCircleBlock': 'ellipse', 140 'ShapePolyStarBlock': s + 'basic.star', 141 'ShapeDiamondBlock': 'rhombus', 142//Misc 143 'UI2HotspotBlock' : 'opacity=50;strokeColor=none', 144//Android Devices 145 'AndroidDevice' : cs, 146//Android Dialogs 147 'AndroidAlertDialog' : cs, 148 'AndroidDateDialog' : cs, 149 'AndroidTimeDialog' : cs, 150//Android Blocks 151 'AndroidListItems' : cs, 152 'AndroidTabs' : cs, 153 'AndroidProgressBar' : cs, 154 'AndroidImageBlock' : cs, 155 'AndroidTextBlock' : cs, 156 'AndroidActionBar' : cs, 157// 'AndroidBrowserBar' NA 158//Android Inputs 159 'AndroidButton' : cs, 160 'AndroidTextBox' : cs, 161 'AndroidRadioButton' : cs, 162 'AndroidCheckBox' : cs, 163 'AndroidToggle' : cs, 164 'AndroidSlider' : cs, 165//Android Icons (not working properly, needs specific code) 166 'AndroidIconCheck': s + 'ios7.misc.check', 167// 'AndroidIconBack' NA 168 'AndroidIconCancel' : s + 'atlassian.x', 169 'AndroidIconCollapse': s + 'ios7.misc.up', 170 'AndroidIconExpand': s + 'ios7.misc.down', 171// 'AndroidIconForward' NA 172 'AndroidIconNext': s + 'ios7.misc.right', 173 'AndroidIconPrevious': s + 'ios7.misc.left', 174 'AndroidIconRefresh' : + 'ios7.icons.repeat', 175 'AndroidIconInformation': s + 'ios7.icons.info', 176// 'AndroidIconHelp' NA 177 'AndroidIconSearch': s + 'ios7.icons.looking_glass', 178 'AndroidIconSettings': s + 'ios7.icons.volume;direction=south', 179// 'AndroidIconDislike' NA 180// 'AndroidIconLike' NA 181// 'AndroidIconDelete' NA 182// 'AndroidIconCopy' NA 183// 'AndroidIconCut' NA 184// 'AndroidIconPaste' NA 185 'AndroidIconTrash': s + 'ios7.icons.trashcan', 186 'AndroidIconEmail': s + 'mockup.misc.mail2', 187 'AndroidIconNew': s + 'ios7.misc.flagged', 188// 'AndroidIconImage' NA 189// 'AndroidIconUndo' NA 190// 'AndroidIconSharing' NA 191// 'AndroidIconDownload' NA 192// 'AndroidIconError' NA 193// 'AndroidIconWarning' NA 194//iOS mockups 195 'iOSDeviceiPhoneSE': s + 'ios7.misc.iphone', 196 'iOSDeviceiPhone6s': s + 'ios7.misc.iphone', 197 'iOSDeviceiPhone6sPlus': s + 'ios7.misc.iphone', 198 'iOSDeviceiPadPortrait': s + 'ios7.misc.ipad7inch', 199 'iOSDeviceiPadLandscape': s + 'ios7.misc.ipad7inch', 200 'iOSDeviceiPadProPortrait': s + 'ios7.misc.ipad7inch', 201 'iOSDeviceiPadProLandscape': s + 'ios7.misc.ipad10inch', 202//iOS UI components 203 'iOSButton': 'fillColor=none;strokeColor=none;', 204 'iOSSegmentedControl' : cs, //TODO 205 'iOSStepper': s + 'ios7.misc.adjust', 206 'iOSToggle': s + 'ios7ui.onOffButton;buttonState=on;strokeColor2=#aaaaaa;fillColor2=#ffffff', 207 'iOSSlider': cs, 208 'iOSProgressBar': cs, 209 'iOSPageControls': cs, 210 'iOSStatusBar' : cs, 211 'iOSSearchBar' : cs, 212 'iOSNavBar' : cs, 213 'iOSTabs' : cs, 214 'iOSUniversalKeyboard': s + 'ios.iKeybLett', 215 'iOSDatePicker' : cs, 216 'iOSTimePicker' : cs, 217 'iOSCountdownPicker' : cs, 218 'iOSBasicCell' : cs, 219 'iOSSubtitleCell' : cs, 220 'iOSRightDetailCell' : cs, 221 'iOSLeftDetailCell' : cs, 222 'iOSTableGroupedSectionBreak' : cs, 223 'iOSTablePlainHeaderFooter' : cs, 224//Mind Map 225 'MindMapBlock' : '', 226 'MindMapStadiumBlock' : 'arcSize=50', 227 'MindMapCloud' : 'shape=cloud', 228 'MindMapCircle' : 'ellipse', 229 'MindMapIsoscelesTriangleBlock' : 'shape=triangle;direction=north', 230 'MindMapDiamondBlock' : 'shape=rhombus', 231 'MindMapPentagonBlock' : s + 'basic.pentagon', 232 'MindMapHexagonBlock' : 'shape=hexagon;perimeter=hexagonPerimeter2', 233 'MindMapOctagonBlock' : s + 'basic.octagon2;dx=10;', 234 'MindMapCrossBlock' : s + 'basic.cross2;dx=20', 235//Entity Relationship 236 'ERDEntityBlock' : cs, 237 'ERDEntityBlock2' : cs, 238 'ERDEntityBlock3' : cs, 239 'ERDEntityBlock4' : cs, 240//UML Class Diagram 241 'UMLClassBlock': cs, 242 'UMLActiveClassBlock': 'shape=process', 243 'UMLMultiplicityBlock' : cs, 244// 'UMLPackageBlock': 'shape=folder;tabPosition=left', 245 'UMLPackageBlock': '', 246 'UMLConstraintBlock' : cs, 247 'UMLNoteBlock': 'shape=note;size=15', 248 'UMLNoteBlockV2': 'shape=note;size=15', 249 'UMLTextBlock': cs, 250//UML Use Case 251 'UMLActorBlock': 'shape=umlActor;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;whiteSpace=nowrap', 252 'UMLUseCaseBlock': 'ellipse', 253 'UMLCircleContainerBlock': 'ellipse;container=1', 254 'UMLRectangleContainerBlock': 'container=1', 255//UML State/Activity 256 'UMLOptionLoopBlock' : s + 'sysml.package2;xSize=90;overflow=fill', 257 'UMLAlternativeBlock2' : s + 'sysml.package2;xSize=90;overflow=fill', 258 'UMLStartBlock' : 'ellipse;fillColor=#000000', 259 'UMLStateBlock' : cs, 260 'UMLDecisionBlock' : 'shape=rhombus;', 261 'UMLHForkJoinBlock' : 'fillColor=#000000', 262 'UMLVForkJoinBlock' : 'fillColor=#000000', 263 'UMLFlowFinalBlock' : s + 'flowchart.or', 264 'UMLHistoryStateBlock' : 'ellipse', 265 'UMLEndBlock' : s + 'bpmn.shape;outline=end;symbol=terminate;strokeColor=#000000;fillColor=#ffffff', 266 'UMLObjectBlock' : '', 267 'UMLSendSignalBlock' : s + 'sysml.sendSigAct', 268 'UMLReceiveSignalBlock' : s + 'sysml.accEvent;flipH=1', 269 'UMLAcceptTimeEventActionBlock' : s + 'sysml.timeEvent', 270// 'UMLInterruptingEdgeBlock' NA 271 'UMLOffPageLinkBlock' : s + 'sysml.sendSigAct;direction=south', 272// 'UMLExpansionNodeBlock' NA 273 'UMLMultiLanePoolBlock' : cs, 274 'UMLMultiLanePoolRotatedBlock' : cs, 275 'UMLMultidimensionalSwimlane' : cs, 276//UML Sequence 277 'UMLActivationBlock' : '', 278 'UMLDeletionBlock' : s + 'sysml.x;strokeWidth=4', 279// 'UMLAlternativeBlock' NA 280 'UMLSeqEntityBlock' : s + 'electrical.radio.microphone_1;direction=north', 281// 'UMLBoundaryBlock' NA 282// 'UMLControlBlock'NA 283//UML Component 284 'UMLComponentBlock' : 'shape=component;align=left;spacingLeft=36', 285 'UMLComponentBlockV2' : 'shape=component;align=left;spacingLeft=36', 286 'UMLNodeBlock' : 'shape=cube;size=20;flipH=1;verticalAlign=top;spacingTop=22;spacingLeft=5', 287 'UMLNodeBlockV2' : 'shape=cube;size=20;flipH=1;verticalAlign=top;spacingTop=22;spacingLeft=5', 288 'UMLComponentInterfaceBlock' : 'ellipse', 289 'UMLComponentInterfaceBlockV2' : 'ellipse', 290 'UMLComponentBoxBlock' : cs, 291 'UMLComponentBoxBlockV2' : cs, 292 'UMLAssemblyConnectorBlock': cs, 293 'UMLAssemblyConnectorBlockV2': cs, 294 'UMLProvidedInterfaceBlock' : cs, 295 'UMLProvidedInterfaceBlockV2' :cs, 296 'UMLRequiredInterfaceBlock' : 'shape=requires;direction=north', 297 'UMLRequiredInterfaceBlockV2' : 'shape=requires;direction=north', 298 'UMLSwimLaneBlockV2': cs, 299 'UMLSwimLaneBlock': 'swimlane;startSize=25;container=1;collapsible=0;dropTarget=0;fontStyle=0', 300//UML Deployment 301//UML Entity Relationship 302 'UMLEntityBlock' : '', 303 'UMLWeakEntityBlock' : 'shape=ext;double=1', 304 'UMLAttributeBlock' : 'ellipse', 305 'UMLMultivaluedAttributeBlock' : 'shape=doubleEllipse', 306 'UMLRelationshipBlock' : 'shape=rhombus', 307 'UMLWeakRelationshipBlock' : 'shape=rhombus;double=1', 308//BPMN 2.0 309 'BPMNActivity' : cs, 310 'BPMNEvent' : cs, 311 'BPMNChoreography' : cs, 312 'BPMNConversation' : cs, 313 'BPMNGateway' : cs, 314 'BPMNData' : cs, 315 'BPMNDataStore' : 'shape=datastore', 316 'BPMNAdvancedPoolBlock' : cs, 317 'BPMNAdvancedPoolBlockRotated' : cs, 318 'BPMNBlackPool' : cs, 319 'BPMNTextAnnotation' : cs, 320//Data Flow 321 'DFDExternalEntityBlock' : cs, 322 'DFDExternalEntityBlock2' : '', 323 'YDMDFDProcessBlock' : 'ellipse', 324 'YDMDFDDataStoreBlock' : 'shape=partialRectangle;right=0;left=0', 325 'GSDFDProcessBlock' : cs, 326 'GSDFDProcessBlock2' : 'rounded=1;arcSize=10;', 327 'GSDFDDataStoreBlock' : cs, 328 'GSDFDDataStoreBlock2' : 'shape=partialRectangle;right=0', 329//Org Chart 330 'OrgBlock' : cs, 331//Tables 332 'DefaultTableBlock' : cs, 333//Value Stream Mapping 334//Processes 335 'VSMCustomerSupplierBlock' : s + 'lean_mapping.outside_sources', 336 'VSMDedicatedProcessBlock' : cs, 337 'VSMSharedProcessBlock' : cs, 338 'VSMWorkcellBlock' : cs, 339 'VSMDatacellBlock' : cs, 340//Materials 341 'VSMInventoryBlock' : cs, 342 'VSMSupermarketBlock' : cs, 343 'VSMPhysicalPullBlock' : s + 'lean_mapping.physical_pull;direction=south', 344 'VSMFIFOLaneBlock' : cs, 345 'VSMSafetyBufferStockBlock' : cs, 346//Shipments 347 'VSMExternalShipmentAirplaneBlock' : s + 'lean_mapping.airplane_7', 348 'VSMExternalShipmentForkliftBlock' : s + 'lean_mapping.move_by_forklift', 349 'VSMExternalShipmentTruckBlock' : s + 'lean_mapping.truck_shipment;align=left;', 350 'VSMExternalShipmentBoatBlock' : s + 'lean_mapping.boat_shipment;verticalAlign=bottom;', 351//Information 352 'VSMProductionControlBlock' : cs, 353 'VSMOtherInformationBlock' : '', 354// 'VSMHeijyunkaBoxBlock' NA 355 'VSMSequencedPullBallBlock' : s + 'lean_mapping.sequenced_pull_ball', 356 'VSMMRPERPBlock' : s + 'lean_mapping.mrp_erp;whiteSpace=wrap', 357 'VSMLoadLevelingBlock' : s + 'lean_mapping.load_leveling', 358 'VSMGoSeeBlock' : s + 'lean_mapping.go_see_production_scheduling;flipH=1', 359 'VSMGoSeeProductionBlock' : cs, 360 'VSMVerbalInfoBlock' : s + 'lean_mapping.verbal', 361//Value Stream Mapping 362 'VSMKaizenBurstBlock' : s + 'lean_mapping.kaizen_lightening_burst', 363 'VSMOperatorBlock' : s + 'lean_mapping.operator;flipV=1', 364 'VSMTimelineBlock' : cs, //TODO Timeline shape 365 'VSMQualityProblemBlock' : s + 'lean_mapping.quality_problem', 366//Kanban 367 'VSMProductionKanbanSingleBlock' : 'shape=card;size=18;flipH=1;', 368 'VSMProductionKanbanBatchBlock' : cs, 369 'VSMWithdrawalKanbanBlock' : s + 'lean_mapping.withdrawal_kanban', 370// 'VSMWithdrawalKanbanBatchBlock' NA 371 'VSMSignalKanbanBlock' : 'shape=triangle;direction=south;anchorPointDirection=0', 372 'VSMKanbanPostBlock' : s + 'lean_mapping.kanban_post', 373//Arrows 374 'VSMShipmentArrow': 'shape=singleArrow;arrowWidth=0.5;arrowSize=0.13', 375 'VSMPushArrow' : s + 'lean_mapping.push_arrow', 376 'VSMElectronicInformationArrow' : cs, 377//EC2 378 'AWSElasticComputeCloudBlock2' : cs, 379// 'AWSElasticComputeCloudBlock2' : ss + 'aws3.ec2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 380 'AWSInstanceBlock2' : ss + 'aws3.instance', 381 'AWSInstancesBlock2' : ss + 'aws3.instances;verticalLabelPosition=bottom;align=center;verticalAlign=top', 382 'AWSAMIBlock2' : ss + 'aws3.ami;verticalLabelPosition=bottom;align=center;verticalAlign=top', 383 'AWSDBonInstanceBlock2' : ss + 'aws3.db_on_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 384 'AWSInstanceCloudWatchBlock2' : ss + 'aws3.instance_with_cloudwatch;verticalLabelPosition=bottom;align=center;verticalAlign=top', 385 //'AmazonCloudWatch2017' : ss + 'aws3.instance_with_cloudwatch;verticalLabelPosition=bottom;align=center;verticalAlign=top', 386 'AWSElasticIPBlock2' : ss + 'aws3.elastic_ip;verticalLabelPosition=bottom;align=center;verticalAlign=top', 387 'AWSHDFSClusterBlock2' : ss + 'aws3.hdfs_cluster;verticalLabelPosition=bottom;align=center;verticalAlign=top', 388 'AWSAutoScalingBlock2' : ss + 'aws3.auto_scaling;verticalLabelPosition=bottom;align=center;verticalAlign=top', 389 'AWSEC2OptimizedInstance2' : ss + 'aws3.optimized_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 390 'AWSAmazonEC2(Spotinstance)' : ss + 'aws3.spot_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 391 'AWSAmazonECR' : ss + 'aws3.ecr;verticalLabelPosition=bottom;align=center;verticalAlign=top', 392 'AWSAmazonECS' : ss + 'aws3.ecs;verticalLabelPosition=bottom;align=center;verticalAlign=top', 393 'AWSLambda2' : ss + 'aws3.lambda;verticalLabelPosition=bottom;align=center;verticalAlign=top', 394 'AWSElasticLoadBalancing' : ss + 'aws3.elastic_load_balancing;verticalLabelPosition=bottom;align=center;verticalAlign=top', 395//Networking 396 'AWSElasticLoadBlock2' : ss + 'aws3.classic_load_balancer;verticalLabelPosition=bottom;align=center;verticalAlign=top', 397 'AWSDirectConnectBlock3' : ss + 'aws3.direct_connect;verticalLabelPosition=bottom;align=center;verticalAlign=top', 398 'AWSElasticNetworkBlock2' : ss + 'aws3.elastic_network_interface;verticalLabelPosition=bottom;align=center;verticalAlign=top', 399 'AWSRoute53Block2' : cs, 400 'AWSHostedZoneBlock2' : ss + 'aws3.hosted_zone;fontColor=#FFFFFF;fontStyle=1', 401 'AWSRouteTableBlock2' : ss + 'aws3.route_table;verticalLabelPosition=bottom;align=center;verticalAlign=top', 402 'AWSVPCBlock2' : ss + 'aws3.vpc;verticalLabelPosition=bottom;align=center;verticalAlign=top', 403 'AWSVPNConnectionBlock2' : ss + 'aws3.vpn_connection;verticalLabelPosition=bottom;align=center;verticalAlign=top', 404 'AWSVPNGatewayBlock2' : ss + 'aws3.vpn_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top', 405 'AWSCustomerGatewayBlock2' : ss + 'aws3.customer_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top', 406 'AWSCustomerGatewayBlock3' : ss + 'aws3.customer_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top', 407 'AWSInternetGatewayBlock2' : ss + 'aws3.internet_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top', 408 'AWSRouterBlock2' : ss + 'aws3.router;verticalLabelPosition=bottom;align=center;verticalAlign=top', 409 'AWSRouterBlock3' : ss + 'aws3.router;verticalLabelPosition=bottom;align=center;verticalAlign=top', 410 'AWSAmazonVPC(endpoints)' : ss + 'aws3.endpoints;verticalLabelPosition=bottom;align=center;verticalAlign=top', 411 'AWSAmazonVPC(flowlogs)' : ss + 'aws3.flow_logs;verticalLabelPosition=bottom;align=center;verticalAlign=top', 412 'AWSAmazonVPC(VPCNATgateway)' : ss + 'aws3.vpc_nat_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top', 413 'AWSVPCPeering3' : ss + 'aws3.vpc_peering;verticalLabelPosition=bottom;align=center;verticalAlign=top', 414 415//S3 416 'AWSSimpleStorageBlock2' : ss + 'aws3.s3;verticalLabelPosition=bottom;align=center;verticalAlign=top', 417 'AWSBucketBlock2' : ss + 'aws3.bucket;fontStyle=1;fontColor=#ffffff', 418 'AWSBuckethWithObjectsBlock2' : ss + 'aws3.bucket_with_objects;verticalLabelPosition=bottom;align=center;verticalAlign=top', 419 'AWSObjectBlock2' : ss + 'aws3.object;fontStyle=1;fontColor=#ffffff', 420 'AWSImportExportBlock2' : ss + 'aws3.import_export;verticalLabelPosition=bottom;align=center;verticalAlign=top', 421 'AWSStorageGatewayBlock2' : ss + 'aws3.storage_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top', 422 'AWSElasticBlockStorageBlock2' : ss + 'aws3.volume;fontStyle=1;fontColor=#ffffff', 423 'AWSVolumeBlock3' : ss + 'aws3.volume;fontStyle=1;fontColor=#ffffff', 424 'AWSSnapshotBlock2' : ss + 'aws3.snapshot;fontStyle=1;fontColor=#ffffff', 425 'AWSGlacierArchiveBlock3' : ss + 'aws3.archive;verticalLabelPosition=bottom;align=center;verticalAlign=top', 426 'AWSGlacierVaultBlock3' : ss + 'aws3.vault;verticalLabelPosition=bottom;align=center;verticalAlign=top', 427 'AWSAmazonEFS' : ss + 'aws3.efs;verticalLabelPosition=bottom;align=center;verticalAlign=top', 428 'AWSGlacierBlock2' : ss + 'aws3.glacier;verticalLabelPosition=bottom;align=center;verticalAlign=top', 429 'AWSAWSImportExportSnowball' : ss + 'aws3.snowball;verticalLabelPosition=bottom;align=center;verticalAlign=top', 430 'AWSStorageGatewayCachedVolumn2' : ss + 'aws3.cached_volume;verticalLabelPosition=bottom;align=center;verticalAlign=top', 431 'AWSStorageGatewayNon-CachedVolumn2' : ss + 'aws3.non_cached_volume;verticalLabelPosition=bottom;align=center;verticalAlign=top', 432 'AWSStorageGatewayVirtualTapeLibrary2' : ss + 'aws3.virtual_tape_library;verticalLabelPosition=bottom;align=center;verticalAlign=top', 433//Content Delivery 434 'AWSCloudFrontBlock2' : ss + 'aws3.cloudfront;verticalLabelPosition=bottom;align=center;verticalAlign=top', 435 'AWSDownloadDistBlock2' : ss + 'aws3.download_distribution;verticalLabelPosition=bottom;align=center;verticalAlign=top', 436 'AWSStreamingBlock2' : ss + 'aws3.streaming_distribution;verticalLabelPosition=bottom;align=center;verticalAlign=top', 437 'AWSEdgeLocationBlock2' : ss + 'aws3.edge_location;verticalLabelPosition=bottom;align=center;verticalAlign=top', 438//Database 439 'AWSItemBlock2' : ss + 'aws3.item;verticalLabelPosition=bottom;align=center;verticalAlign=top', 440 'AWSItemsBlock2' : ss + 'aws3.items;verticalLabelPosition=bottom;align=center;verticalAlign=top', 441 'AWSAttributeBlock2' : ss + 'aws3.attribute;verticalLabelPosition=bottom;align=center;verticalAlign=top', 442 'AWSAttributesBlock2' : ss + 'aws3.attributes;verticalLabelPosition=bottom;align=center;verticalAlign=top', 443 'AWSRDBSBlock2' : cs, 444 'AWSRDSInstanceBlock2' : ss + 'aws3.rds_db_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 445 'AWSRDSStandbyBlock2' : ss + 'aws3.rds_db_instance_standby_multi_az;verticalLabelPosition=bottom;align=center;verticalAlign=top', 446 'AWSRDSInstanceReadBlock2' : ss + 'aws3.rds_db_instance_read_replica;verticalLabelPosition=bottom;align=center;verticalAlign=top', 447 'AWSOracleDBBlock2' : ss + 'aws3.oracle_db_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 448 'AWSMySQLDBBlock2' : ss + 'aws3.mysql_db_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 449 'AWSDynamoDBBlock2' : ss + 'aws3.dynamo_db;verticalLabelPosition=bottom;align=center;verticalAlign=top', 450 'AWSSimpleDatabaseBlock3' : ss + 'aws2.database.simpledb;verticalLabelPosition=bottom;align=center;verticalAlign=top', 451 'AWSSimpleDatabaseDomainBlock3' : ss + 'aws2.database.simpledb_domain;verticalLabelPosition=bottom;align=center;verticalAlign=top', 452 'AWSTableBlock2' : ss + 'aws3.table;verticalLabelPosition=bottom;align=center;verticalAlign=top', 453 'AWSAmazonRedShiftBlock3' : ss + 'aws3.redshift;verticalLabelPosition=bottom;align=center;verticalAlign=top', 454 'AWSElastiCacheNodeBlock2' : ss + 'aws3.cache_node;verticalLabelPosition=bottom;align=center;verticalAlign=top', 455 'AWSElastiCacheBlock2' : ss + 'aws3.elasticache;verticalLabelPosition=bottom;align=center;verticalAlign=top', 456 'AWSDynamoDBGlobalSecondaryIndexes2' : ss + 'aws3.global_secondary_index;verticalLabelPosition=bottom;align=center;verticalAlign=top', 457 'AWSAmazonElastiCacheMemcache2' : ss + 'aws3.memcached;verticalLabelPosition=bottom;align=center;verticalAlign=top', 458 'AWSAmazonElastiCacheRedis2' : ss + 'aws3.redis;verticalLabelPosition=bottom;align=center;verticalAlign=top', 459 'AWSAmazonRDSMSSQLInstance2' : ss + 'aws3.ms_sql_instance_2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 460 'AWSMSSQLDBBlock3' : ss + 'aws3.ms_sql_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 461 'AWSAmazonRDSMySQLDBInstance2' : ss + 'aws3.mysql_db_instance_2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 462 'AWSAmazonRDSOracleDBInstance2' : ss + 'aws3.oracle_db_instance_2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 463 'AWSRDSReplicasetswithPIOP2' : ss + 'aws3.piop;verticalLabelPosition=bottom;align=center;verticalAlign=top', 464 'AWSAmazonRDSPostgreSQL2' : ss + 'aws3.postgre_sql_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top', 465 'AWSRDSMasterSQL2' : ss + 'aws3.sql_master;verticalLabelPosition=bottom;align=center;verticalAlign=top', 466 'AWSRDSSlaveSQL2' : ss + 'aws3.sql_slave;verticalLabelPosition=bottom;align=center;verticalAlign=top', 467 'AWSAmazonRedshift(densecomputenode)' : ss + 'aws3.dense_compute_node;verticalLabelPosition=bottom;align=center;verticalAlign=top', 468 'AWSAmazonRedshift(densestoragenode)' : ss + 'aws3.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top', 469 'AWSAWSDatabaseMigrationService' : ss + 'aws3.database_migration_service;verticalLabelPosition=bottom;align=center;verticalAlign=top', 470//Security Identity 471 'AWSACM' : ss + 'aws3.certificate_manager;verticalLabelPosition=bottom;align=center;verticalAlign=top', 472 'AWSAmazonInspector' : ss + 'aws3.inspector;verticalLabelPosition=bottom;align=center;verticalAlign=top', 473 'AWSAWSCloudHSM' : ss + 'aws3.cloudhsm;verticalLabelPosition=bottom;align=center;verticalAlign=top', 474 'AWSDirectoryService2' : ss + 'aws3.directory_service;verticalLabelPosition=bottom;align=center;verticalAlign=top', 475 'AWSAWSKMS' : ss + 'aws3.kms;verticalLabelPosition=bottom;align=center;verticalAlign=top', 476 'AWSAWSWAF' : ss + 'aws3.waf;verticalLabelPosition=bottom;align=center;verticalAlign=top', 477 'AWSACM(certificate-manager)' : ss + 'aws3.certificate_manager_2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 478//App Services 479 'AWSSESBlock2' : ss + 'aws3.ses;verticalLabelPosition=bottom;align=center;verticalAlign=top', 480 'AWSEmailBlock2' : ss + 'aws3.email;verticalLabelPosition=bottom;align=center;verticalAlign=top', 481 'AWSSNSBlock2' : ss + 'aws3.sns;verticalLabelPosition=bottom;align=center;verticalAlign=top', 482 'AWSSQSBlock3' : ss + 'aws3.sqs;verticalLabelPosition=bottom;align=center;verticalAlign=top', 483 'AWSQueueBlock2' : ss + 'aws3.queue;verticalLabelPosition=bottom;align=center;verticalAlign=top', 484 'AWSMessageBlock2' : ss + 'aws3.message;verticalLabelPosition=bottom;align=center;verticalAlign=top', 485 'AWSDeciderBlock2' : ss + 'aws3.decider;verticalLabelPosition=bottom;align=center;verticalAlign=top', 486 'AWSSWFBlock2' : ss + 'aws3.swf;verticalLabelPosition=bottom;align=center;verticalAlign=top', 487 'AWSWorkerBlock2' : ss + 'aws3.worker;verticalLabelPosition=bottom;align=center;verticalAlign=top', 488 'AWSCloudSearchBlock2' : ss + 'aws3.cloudsearch;verticalLabelPosition=bottom;align=center;verticalAlign=top', 489 'AWSCloudSearchMetadataBlock3' : ss + 'aws3.search_documents;verticalLabelPosition=bottom;align=center;verticalAlign=top', 490 'AWSElasticTranscoder3' : ss + 'aws3.elastic_transcoder;verticalLabelPosition=bottom;align=center;verticalAlign=top', 491 'AWSAmazonAPIGateway' : ss + 'aws3.api_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top', 492 'AWSAppStream2' : ss + 'aws3.appstream;verticalLabelPosition=bottom;align=center;verticalAlign=top', 493//Deployment 494 'AWSCloudFormationBlock2' : ss + 'aws3.cloudformation;verticalLabelPosition=bottom;align=center;verticalAlign=top', 495 'AWSDataPipelineBlock3' : ss + 'aws3.data_pipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top', 496 'AWSDataPipelineBlock2' : ss + 'aws3.data_pipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top', 497 'AWSTemplageBlock2' : ss + 'aws3.template;verticalLabelPosition=bottom;align=center;verticalAlign=top', 498 'AWSStackBlock2' : ss + 'aws3.stack_aws_cloudformation;verticalLabelPosition=bottom;align=center;verticalAlign=top', 499 'AWSBeanStockBlock2' : ss + 'aws3.elastic_beanstalk;verticalLabelPosition=bottom;align=center;verticalAlign=top', 500 'AWSApplicationBlock2' : ss + 'aws3.application;verticalLabelPosition=bottom;align=center;verticalAlign=top', 501 'AWSBeanstalkDeploymentBlock3' : ss + 'aws3.deployment;verticalLabelPosition=bottom;align=center;verticalAlign=top', 502 'AWSIAMBlock3' : ss + 'aws3.iam;verticalLabelPosition=bottom;align=center;verticalAlign=top', 503 'AWSIAMSTSBlock3' : ss + 'aws3.sts;verticalLabelPosition=bottom;align=center;verticalAlign=top', 504 'AWSIAMAddonBlock2' : ss + 'aws3.add_on;verticalLabelPosition=bottom;align=center;verticalAlign=top', 505 'AWSCloudWatchBlock3' : ss + 'aws3.cloudwatch;verticalLabelPosition=bottom;align=center;verticalAlign=top', 506 'AWSCloudWatchAlarmBlock2' : ss + 'aws3.alarm;verticalLabelPosition=bottom;align=center;verticalAlign=top', 507 'AWSIAMSecurityTokenService2' : ss + 'aws3.sts_2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 508 'AWSIAMDataEncryptionKey2' : ss + 'aws3.data_encryption_key;verticalLabelPosition=bottom;align=center;verticalAlign=top', 509 'AWSIAMEncryptedData2' : ss + 'aws3.encrypted_data;verticalLabelPosition=bottom;align=center;verticalAlign=top', 510 'AWSAWSIAM(long-termsecuritycredential)' : ss + 'aws3.long_term_security_credential;verticalLabelPosition=bottom;align=center;verticalAlign=top', 511 'AWSIAMMFAToken2' : ss + 'aws3.mfa_token;verticalLabelPosition=bottom;align=center;verticalAlign=top', 512 'AWSIAMPermissions2' : ss + 'aws3.permissions_2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 513 'AWSIAMRoles2' : ss + 'aws3.role;verticalLabelPosition=bottom;align=center;verticalAlign=top', 514 'AWSAWSIAM(temporarysecuritycredential)' : ss + 'aws3.long_term_security_credential;verticalLabelPosition=bottom;align=center;verticalAlign=top', 515 'AWSCloudTrail2' : ss + 'aws3.cloudtrail;verticalLabelPosition=bottom;align=center;verticalAlign=top', 516 'AWSConfig2' : ss + 'aws3.config;verticalLabelPosition=bottom;align=center;verticalAlign=top', 517 'AWSOpsWorksBlock3' : ss + 'aws3.opsworks;verticalLabelPosition=bottom;align=center;verticalAlign=top', 518 'AWSAWSServiceCatalog' : ss + 'aws3.service_catalog;verticalLabelPosition=bottom;align=center;verticalAlign=top', 519 'AWSTrustedAdvisor2' : ss + 'aws3.trusted_advisor;verticalLabelPosition=bottom;align=center;verticalAlign=top', 520 'AWSOpsWorksApps2' : ss + 'aws3.apps;verticalLabelPosition=bottom;align=center;verticalAlign=top', 521 'AWSOpsWorksDeployments2' : ss + 'aws3.deployments;verticalLabelPosition=bottom;align=center;verticalAlign=top', 522 'AWSOpsWorksInstances2' : ss + 'aws3.instances_2;verticalLabelPosition=bottom;align=center;verticalAlign=top', 523 'AWSOpsWorksLayers2' : ss + 'aws3.layers;verticalLabelPosition=bottom;align=center;verticalAlign=top', 524 'AWSOpsWorksMonitoring2' : ss + 'aws3.monitoring;verticalLabelPosition=bottom;align=center;verticalAlign=top', 525 'AWSOpsWorksPermissions2' : ss + 'aws3.permissions;verticalLabelPosition=bottom;align=center;verticalAlign=top', 526 'AWSOpsWorksResources2' : ss + 'aws3.resources;verticalLabelPosition=bottom;align=center;verticalAlign=top', 527 'AWSOpsWorksStack2' : ss + 'aws3.stack_aws_opsworks;verticalLabelPosition=bottom;align=center;verticalAlign=top', 528//On-Demand 529 'AWSMechanicalTurkBlock3' : ss + 'aws3.mechanical_turk;verticalLabelPosition=bottom;align=center;verticalAlign=top', 530 'AWSHumanITBlock2' : ss + 'aws3.human_intelligence_tasks_hit;verticalLabelPosition=bottom;align=center;verticalAlign=top', 531 'AWSAssignmentTaskBlock2' : ss + 'aws3.requester;verticalLabelPosition=bottom;align=center;verticalAlign=top', 532 'AWSWorkersBlock2' : ss + 'aws3.users;verticalLabelPosition=bottom;align=center;verticalAlign=top', 533 'AWSRequesterBlock2' : ss + 'aws3.assignment_task;verticalLabelPosition=bottom;align=center;verticalAlign=top', 534//SDKs 535 'AWSAndroidBlock3': ss + 'aws3.android;fillColor=#96BF3D;verticalLabelPosition=bottom;align=center;verticalAlign=top', 536 'AWSiOSBlock3' : ss + 'aws3.android;fillColor=#CFCFCF;verticalLabelPosition=bottom;align=center;verticalAlign=top', 537 'AWSJavaBlock3' : ss + 'aws3.android;fillColor=#EE472A;verticalLabelPosition=bottom;align=center;verticalAlign=top', 538 'AWSJavaScript' : ss + 'aws3.android;fillColor=#205E00;verticalLabelPosition=bottom;align=center;verticalAlign=top', 539 'AWSNetBlock3' : ss + 'aws3.android;fillColor=#115193;verticalLabelPosition=bottom;align=center;verticalAlign=top', 540 'AWSNodeJSBlock3' : ss + 'aws3.android;fillColor=#8CC64F;verticalLabelPosition=bottom;align=center;verticalAlign=top', 541 'AWSPHPBlock3' : ss + 'aws3.android;fillColor=#5A69A4;verticalLabelPosition=bottom;align=center;verticalAlign=top', 542 'AWSPythonBlock3' : ss + 'aws3.android;fillColor=#FFD44F;verticalLabelPosition=bottom;align=center;verticalAlign=top', 543 'AWSRubyBlock3' : ss + 'aws3.android;fillColor=#AE1F23;verticalLabelPosition=bottom;align=center;verticalAlign=top', 544 'AWSXamarin' : ss + 'aws3.android;fillColor=#4090D7;verticalLabelPosition=bottom;align=center;verticalAlign=top', 545 'AWSCLIBlock3' : ss + 'aws3.cli;fillColor=#444444;verticalLabelPosition=bottom;align=center;verticalAlign=top', 546 'AWSEclipseToolkitBlock3' : ss + 'aws3.toolkit_for_eclipse;fillColor=#342074;verticalLabelPosition=bottom;align=center;verticalAlign=top', 547 'AWSVisualStudioToolkitBlock3' : ss + 'aws3.toolkit_for_visual_studio;fillColor=#53B1CB;verticalLabelPosition=bottom;align=center;verticalAlign=top', 548 'AWSWindowsPowershellToolkitBlock3' : ss + 'aws3.toolkit_for_windows_powershell;fillColor=#737373;verticalLabelPosition=bottom;align=center;verticalAlign=top', 549//Analytics 550 'AWSAmazonElasticsearchService' : ss + 'aws3.elasticsearch_service;verticalLabelPosition=bottom;align=center;verticalAlign=top', 551 'AWSElasticMapReduceBlock2' : ss + 'aws3.emr;verticalLabelPosition=bottom;align=center;verticalAlign=top', 552 'AWSClusterBlock2' : ss + 'aws3.emr_cluster;verticalLabelPosition=bottom;align=center;verticalAlign=top', 553 'AWSEMREngine2' : ss + 'aws3.emr_engine;verticalLabelPosition=bottom;align=center;verticalAlign=top', 554 'AWSEMRMapRM3Engine2' : ss + 'aws3.emr_engine_mapr_m3;verticalLabelPosition=bottom;align=center;verticalAlign=top', 555 'AWSEMRMapRM5Engine2' : ss + 'aws3.emr_engine_mapr_m5;verticalLabelPosition=bottom;align=center;verticalAlign=top', 556 'AWSEMRMapRM7Engine2' : ss + 'aws3.emr_engine_mapr_m7;verticalLabelPosition=bottom;align=center;verticalAlign=top', 557 'AWSKinesis2' : ss + 'aws3.kinesis;verticalLabelPosition=bottom;align=center;verticalAlign=top', 558 'AWSAmazonKinesis(AmazonKinesisAnalytics)' : ss + 'aws3.kinesis;verticalLabelPosition=bottom;align=center;verticalAlign=top', 559 'AWSKinesisEnabledApp2' : ss + 'aws3.kinesis_enabled_app;verticalLabelPosition=bottom;align=center;verticalAlign=top', 560 'AWSAmazonKinesis(AmazonKinesisFirehose)' : ss + 'aws3.kinesis_firehose;verticalLabelPosition=bottom;align=center;verticalAlign=top', 561 'AWSAmazonKinesis(AmazonKinesisStreams)' : ss + 'aws3.kinesis_streams;verticalLabelPosition=bottom;align=center;verticalAlign=top', 562 'AWSAmazonMachineLearning' : ss + 'aws3.machine_learning;verticalLabelPosition=bottom;align=center;verticalAlign=top', 563 'AWSAmazonQuickSight' : ss + 'aws3.quicksight;verticalLabelPosition=bottom;align=center;verticalAlign=top', 564//Mobile Services 565 'AWSCognito2' : ss + 'aws3.cognito;verticalLabelPosition=bottom;align=center;verticalAlign=top', 566 'AWSMobileAnalytics2' : ss + 'aws3.mobile_analytics;verticalLabelPosition=bottom;align=center;verticalAlign=top', 567 'AWSAWSDeviceFarm' : ss + 'aws3.device_farm;verticalLabelPosition=bottom;align=center;verticalAlign=top', 568 'AWSAWSMobileHub' : ss + 'aws3.mobile_hub;gradientColor=#AD688A;gradientDirection=east;verticalLabelPosition=bottom;align=center;verticalAlign=top', 569 'AWSTopicBlock2' : ss + 'aws3.topic_2;fontStyle=1;fontColor=#ffffff;verticalAlign=top;spacingTop=-5', 570 'AWSEmailNotificationBlock2' : ss + 'aws3.email_notification;verticalLabelPosition=bottom;align=center;verticalAlign=top', 571 'AWSHTTPNotificationBlock2' : ss + 'aws3.http_notification;verticalLabelPosition=bottom;align=center;verticalAlign=top', 572//Developer Tools 573 'AWSAWSCodeCommit' : ss + 'aws3.codecommit;verticalLabelPosition=bottom;align=center;verticalAlign=top', 574 'AWSCodeDeploy2' : ss + 'aws3.codedeploy;verticalLabelPosition=bottom;align=center;verticalAlign=top', 575 'AWSAWSCodePipeline' : ss + 'aws3.codepipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top', 576//Enterprise Application 577 'AWSWorkDocs2' : ss + 'aws3.workdocs;verticalLabelPosition=bottom;align=center;verticalAlign=top', 578 'AWSAmazonWorkMail' : ss + 'aws3.workmail;verticalLabelPosition=bottom;align=center;verticalAlign=top', 579 'AWSAmazonWorkSpaces2' : ss + 'aws3.workspaces;verticalLabelPosition=bottom;align=center;verticalAlign=top', 580//Internet of Things 581 'AWSAWSIoT' : ss + 'aws3.aws_iot;verticalLabelPosition=bottom;align=center;verticalAlign=top', 582 'AWSAWSIoT(action)' : ss + 'aws3.action;verticalLabelPosition=bottom;align=center;verticalAlign=top', 583 'AWSAWSIoT(actuator)' : ss + 'aws3.actuator;verticalLabelPosition=bottom;align=center;verticalAlign=top', 584 'AWSAWSIoT(certificate)' : ss + 'aws3.certificate;verticalLabelPosition=bottom;align=center;verticalAlign=top', 585 'AWSAWSIoT(desiredstate)' : ss + 'aws3.desired_state;verticalLabelPosition=bottom;align=center;verticalAlign=top', 586 'AWSAWSIoT(hardwareboard)' : ss + 'aws3.hardware_board;verticalLabelPosition=bottom;align=center;verticalAlign=top', 587 'AWSAWSIoT(HTTP2protocol)' : ss + 'aws3.http_2_protocol;verticalLabelPosition=bottom;align=center;verticalAlign=top', 588 'AWSAWSIoT(HTTPprotocol)' : ss + 'aws3.http_protocol;verticalLabelPosition=bottom;align=center;verticalAlign=top', 589 'AWSAWSIoT(MQTTprotocol)' : ss + 'aws3.mqtt_protocol;verticalLabelPosition=bottom;align=center;verticalAlign=top', 590 'AWSAWSIoT(policy)' : ss + 'aws3.policy;verticalLabelPosition=bottom;align=center;verticalAlign=top', 591 'AWSAWSIoT(reportedstate)' : ss + 'aws3.reported_state;verticalLabelPosition=bottom;align=center;verticalAlign=top', 592 'AWSAWSIoT(rule)' : ss + 'aws3.rule;verticalLabelPosition=bottom;align=center;verticalAlign=top', 593 'AWSAWSIoT(sensor)' : ss + 'aws3.sensor;verticalLabelPosition=bottom;align=center;verticalAlign=top', 594 'AWSAWSIoT(servo)' : ss + 'aws3.servo;verticalLabelPosition=bottom;align=center;verticalAlign=top', 595 'AWSAWSIoT(shadow)' : ss + 'aws3.shadow;verticalLabelPosition=bottom;align=center;verticalAlign=top', 596 'AWSAWSIoT(simulator)' : ss + 'aws3.simulator;verticalLabelPosition=bottom;align=center;verticalAlign=top', 597 'AWSAWSIoT(thingbank)' : ss + 'aws3.bank;verticalLabelPosition=bottom;align=center;verticalAlign=top', 598 'AWSAWSIoT(thingbicycle)' : ss + 'aws3.bicycle;verticalLabelPosition=bottom;align=center;verticalAlign=top', 599 'AWSAWSIoT(thingcamera)' : ss + 'aws3.camera;verticalLabelPosition=bottom;align=center;verticalAlign=top', 600 'AWSAWSIoT(thingcar)' : ss + 'aws3.car;verticalLabelPosition=bottom;align=center;verticalAlign=top', 601 'AWSAWSIoT(thingcart)' : ss + 'aws3.cart;verticalLabelPosition=bottom;align=center;verticalAlign=top', 602 'AWSAWSIoT(thingcoffeepot)' : ss + 'aws3.coffee_pot;verticalLabelPosition=bottom;align=center;verticalAlign=top', 603 'AWSAWSIoT(thingdoorlock)' : ss + 'aws3.door_lock;verticalLabelPosition=bottom;align=center;verticalAlign=top', 604 'AWSAWSIoT(thingfactory)' : ss + 'aws3.factory;verticalLabelPosition=bottom;align=center;verticalAlign=top', 605 'AWSAWSIoT(thinggeneric)' : ss + 'aws3.generic;verticalLabelPosition=bottom;align=center;verticalAlign=top', 606 'AWSAWSIoT(thinghouse)' : ss + 'aws3.house;verticalLabelPosition=bottom;align=center;verticalAlign=top', 607 'AWSAWSIoT(thinglightbulb)' : ss + 'aws3.lightbulb;verticalLabelPosition=bottom;align=center;verticalAlign=top', 608 'AWSAWSIoT(thingmedicalemergency)' : ss + 'aws3.medical_emergency;verticalLabelPosition=bottom;align=center;verticalAlign=top', 609 'AWSAWSIoT(thingpoliceemergency)' : ss + 'aws3.police_emergency;verticalLabelPosition=bottom;align=center;verticalAlign=top', 610 'AWSAWSIoT(thingthermostat)' : ss + 'aws3.thermostat;verticalLabelPosition=bottom;align=center;verticalAlign=top', 611 'AWSAWSIoT(thingtravel)' : ss + 'aws3.travel;verticalLabelPosition=bottom;align=center;verticalAlign=top', 612 'AWSAWSIoT(thingutility)' : ss + 'aws3.utility;verticalLabelPosition=bottom;align=center;verticalAlign=top', 613 'AWSAWSIoT(thingwindfarm)' : ss + 'aws3.windfarm;verticalLabelPosition=bottom;align=center;verticalAlign=top', 614 'AWSAWSIoT(topic)' : ss + 'aws3.topic;verticalLabelPosition=bottom;align=center;verticalAlign=top', 615 616//AWS General 617 'AWSCloudBlock2' : ss + 'aws3.cloud;verticalLabelPosition=bottom;align=center;verticalAlign=top', 618 'AWSVPCloudBlock3' : ss + 'aws3.virtual_private_cloud;verticalLabelPosition=bottom;align=center;verticalAlign=top', 619 'AWSUserBlock2' : ss + 'aws3.user;verticalLabelPosition=bottom;align=center;verticalAlign=top', 620 'AWSUsersBlock2' : ss + 'aws3.users;verticalLabelPosition=bottom;align=center;verticalAlign=top', 621 'AWSClientBlock2' : ss + 'aws3.management_console;verticalLabelPosition=bottom;align=center;verticalAlign=top', 622 'AWSMobileClientBlock2' : ss + 'aws3.mobile_client;verticalLabelPosition=bottom;align=center;verticalAlign=top', 623 'AWSGenericDatabaseBlock3' : ss + 'aws3.generic_database;verticalLabelPosition=bottom;align=center;verticalAlign=top', 624 'AWSDiskBlock3' : ss + 'aws3.disk;verticalLabelPosition=bottom;align=center;verticalAlign=top', 625 'AWSTapeStorageBlock3' : ss + 'aws3.tape_storage;verticalLabelPosition=bottom;align=center;verticalAlign=top', 626 'AWSMediaBlock2' : ss + 'aws3.multimedia;verticalLabelPosition=bottom;align=center;verticalAlign=top', 627 'AWSDataCenterBlock2' : ss + 'aws3.corporate_data_center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 628 'AWSServerBlock2' : ss + 'aws3.traditional_server;verticalLabelPosition=bottom;align=center;verticalAlign=top', 629 'AWSInternetBlock2' : ss + 'aws2.non-service_specific.internet;verticalLabelPosition=bottom;align=center;verticalAlign=top', 630 'AWSForumsBlock3' : ss + 'aws3.forums;verticalLabelPosition=bottom;align=center;verticalAlign=top', 631 'AWSManagementBlock2' : ss + 'aws3.management_console;verticalLabelPosition=bottom;align=center;verticalAlign=top', 632 'AWSAmazonElasticCacheNode2' : ss + 'aws3.cache_node;verticalLabelPosition=bottom;align=center;verticalAlign=top', 633 'AWSAmazonRedshiftDW1Cluster2' : ss + 'aws3.dense_compute_node;verticalLabelPosition=bottom;align=center;verticalAlign=top', 634 'AWSAmazonRedshiftDW2Cluster2' : ss + 'aws3.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top', 635 'AWSAmazonRedshiftSSDFamilyCluster2' : ss + 'aws3.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top', 636 'AWSAmazonRoute53RouteTable2' : ss + 'aws3.route_table;verticalLabelPosition=bottom;align=center;verticalAlign=top', 637// 'AWSExampleIAMBlock2' NA 638 'AWSSubnetBlock2' : ss + 'aws3.permissions;verticalLabelPosition=bottom;align=center;verticalAlign=top', 639//AWS Containers 640 'AWSRoundedRectangleContainerBlock2' : cs, 641//Azure Cloud 642 'ACAccessControlBlock' : ssAzure + 'azure.access_control', 643 'ACAPIAppsBlock' : ssAzure + 'mscae.cloud.api_app', 644 'ACAPIManagementBlock' : ssAzure + 'mscae.cloud.api_management', 645 'ACAppInsightsBlock' : ssAzure + 'mscae.cloud.application_insights', 646 'ACAppServicesBlock' : ssAzure + 'mscae.cloud.app_service', 647 'ACAutoscalingBlock' : ssAzure + 'azure.autoscale', 648 'ACAzureActiveDirectoryBlock' : ssAzure + 'azure.azure_active_directory', 649 'ACAzurealertBlock' : ssAzure + 'azure.azure_alert', 650 'ACAzureAutomationBlock' : ssAzure + 'azure.automation', 651 'ACAzureBatchBlock' : ssAzure + 'mscae.cloud.azure_batch', 652 'ACAzureRedisBlock' : ssAzure + 'azure.azure_cache', 653 'ACAzureFilesBlock' : ssAzure + 'mscae.cloud.azure_files_service', 654 'ACAzureloadbalancerBlock' : ssAzure + 'mscae.cloud.azure_automatic_load_balancer', 655 'ACAzureMarketplaceBlock' : ssAzure + 'azure.azure_marketplace', 656 'ACAzureRightManagementRMSBlock' : ssAzure + 'mscae.cloud.azure_rights_management_rms', 657 'ACAzureSDKBlock' : ssAzure + 'azure.azure_sdk', 658 'ACAzureSearchBlock' : ssAzure + 'mscae.cloud.azure_search', 659 'ACAzureSQLdatabaseBlock' : ssAzure + 'azure.sql_database_sql_azure', 660 'ACAzuresubscriptionBlock' : ssAzure + 'azure.azure_subscription', 661 'ACAzureWebsitesBlock' : ssAzure + 'azure.azure_website', 662 'ACBackupServiceBlock' : ssAzure + 'azure.backup_service', 663 'ACBitbucketcodesourceBlock' : ssAzure + 'azure.bitbucket_code_source', 664 'ACBizTalkServicesBlock' : ssAzure + 'azure.biztalk_services', 665 'ACCloudServiceBlock' : ssAzure + 'azure.cloud_service', 666 'ACCodePlexBlock' : ssAzure + 'azure.codeplex_code_source', 667// 'ACComputeBlock' NA 668 'ACContentDeliveryNetworkBlock' : ssAzure + 'azure.content_delivery_network', 669 'ACDataFactoryBlock' : ssAzure + 'mscae.cloud.data_factory', 670// 'ACDataservicesBlock' NA 671 'ACDocumentDBBlock' : ssAzure + 'mscae.cloud.documentdb', 672 'ACDropboxcodesourceBlock' : ssAzure + 'azure.dropbox_code_source', 673 'ACEventsHubBlock' : ssAzure + 'mscae.cloud.event_hubs', 674 'ACExpressRouteBlock' : ssAzure + 'azure.express_route', 675 'ACGitHubBlock' : ssAzure + 'azure.github_code', 676 'ACGitrepositoryBlock' : ssAzure + 'azure.git_repository', 677 'ACHDInsightBlock' : ssAzure + 'mscae.cloud.hdinsight', 678 'ACHealthmonitoringBlock' : ssAzure + 'azure.health_monitoring', 679 'ACHealthyBlock' : ssAzure + 'azure.healthy', 680 'ACHybridConnectionBlock' : ssAzure + 'mscae.cloud.hybrid_connections', 681 'ACBizTalkhybridconnectionBlock' : ssAzure + 'mscae.cloud.hybrid_connection_manager', 682 'ACKeyVaultBlock' : ssAzure + 'mscae.cloud.key_vault', 683 'ACLogicAppBlock' : ssAzure + 'mscae.cloud.logic_app', 684 'ACMachineLearningBlock' : ssAzure + 'mscae.cloud.machine_learning', 685 'ACMediaServicesBlock' : ssAzure + 'azure.media_service', 686 'ACMicrosoftaccountBlock' : ssAzure + 'mscae.cloud.microsoft_account', 687 'ACMicrosoftAzureBlock' : ssAzure + 'mscae.cloud.microsoft_azure', 688 'ACMobileEngagementBlock' : ssAzure + 'mscae.cloud.mobile_engagement', 689 'ACMobileServicesBlock' : ssAzure + 'mscae.cloud.mobile_app', 690 'ACMultiFactorAuthBlock' : ssAzure + 'azure.multi_factor_authentication', 691 'ACMySQLdatabaseBlock' : ssAzure + 'azure.mysql_database', 692 'ACNotificationHubsBlock' : ssAzure + 'azure.notification_hub', 693 'ACNotificationtopicBlock' : ssAzure + 'azure.notification_topic', 694 'ACOperationalInsightsBlock' : ssAzure + 'mscae.cloud.operational_insights', 695 'ACOSimageBlock' : ssAzure + 'azure.operating_system_image', 696 'ACRemoteAppBlock' : ssAzure + 'mscae.cloud.remoteapp', 697 'ACrpdRemotingfileBlock' : ssAzure + 'azure.rdp_remoting_file', 698 'ACSchedulerBlock' : ssAzure + 'azure.scheduler', 699 'ACServiceBusBlock' : ssAzure + 'azure.service_bus', 700 'ACServiceBusQueueBlock' : ssAzure + 'azure.service_bus_queues', 701 'ACServiceBusRelayBlock' : ssAzure + 'azure.service_bus_relay', 702 'ACServiceBusTopicBlock' : ssAzure + 'azure.service_bus_topics_and_subscriptions', 703 'ACServiceEndpointBlock' : ssAzure + 'mscae.cloud.service_endpoint', 704 'ACServicepackageBlock' : ssAzure + 'mscae.cloud.service_package', 705 'ACSiteRecoveryBlock' : ssAzure + 'azure.hyper_v_recovery_manager', 706 'ACSQLdatabasegenericBlock' : ssAzure + 'azure.sql_database', 707// 'ACSQLDatabasePremiumBlock' NA 708 'ACSQLdatasyncBlock' : ssAzure + 'azure.sql_datasync', 709 'ACSQLreportingdeprecatedBlock' : ssAzure + 'azure.sql_reporting', 710 'ACStartuptaskBlock' : ssAzure + 'azure.startup_task', 711 'ACStorageAzureBlock' : ssAzure + 'mscae.cloud.azure_storage', 712 'ACStorageblobBlock' : ssAzure + 'azure.storage_blob', 713 'ACStoragequeueBlock' : ssAzure + 'azure.storage_queue', 714 'ACStoragetableBlock' : ssAzure + 'azure.storage_table', 715 'ACStorSimpleBlock' : ssAzure + 'azure.storsimple', 716 'ACStreamAnalyticsBlock' : ssAzure + 'mscae.cloud.stream_analytics', 717 'ACTrafficManagerBlock' : ssAzure + 'azure.traffic_manager', 718 'ACAlienBlock' : ssAzure + 'azure.unidentified_code_object', 719 'ACVHDBlock' : ssAzure + 'azure.vhd', 720 'ACVHDdatadiskBlock' : ssAzure + 'azure.vhd_data_disk', 721 'ACVirtualmachineBlock' : ssAzure + 'azure.virtual_machine', 722 'ACVirtualmachinecontainerBlock' : ssAzure + 'mscae.cloud.virtual_machine_container', 723 'ACVirtualnetworkBlock' : ssAzure + 'azure.virtual_network', 724 'ACVisualStudioOnlineBlock' : ssAzure + 'azure.visual_studio_online', 725 'ACVMsymbolonlyBlock' : ssAzure + 'azure.virtual_machine_feature', 726 'ACWebJobsBlock' : ssAzure + 'mscae.cloud.webjobs', 727 'ACWebroleBlock' : ssAzure + 'azure.web_role', 728 'ACWebrolesBlock' : ssAzure + 'azure.web_roles', 729 'ACWorkaccountBlock' : ssAzure + 'mscae.cloud.work_account', 730 'ACWorkerroleBlock' : ssAzure + 'azure.worker_role', 731 'ACWorkerrolesBlock' : ssAzure + 'azure.worker_roles', 732 'ADNSBlock' : ssAzure + 'mscae.cloud.azure_dns', 733// 'AGatewayBlock' NA 734 'ACLoadBalancerBlock' : ssAzure + 'mscae.cloud.azure_load_balancer_feature', 735 'ACResourceGroupBlock' : ssAzure + 'mscae.cloud.resource_group', 736 'ACVPNGatewayBlock' : ssAzure + 'mscae.cloud.vpn_gateway', 737//Azure Enterprise 738 'AEActiveDirectoryFSPBlock' : ssAzure + 'mscae.enterprise.d', 739 'AEADFSBlock' : ssAzure + 'mscae.enterprise.ad_fs', 740 'AEAndroidPhoneBlock' : ssAzure + 'mscae.enterprise.android_phone', 741 'AEappblankfortextBlock' : ssAzure + 'mscae.enterprise.application_blank', 742 'AEAppGenericBlock' : ssAzure + 'mscae.enterprise.app_generic', 743 'AEAppserverBlock' : ssAzure + 'mscae.enterprise.application_server', 744 'AEBackuplocalBlock' : ssAzure + 'mscae.enterprise.backup_local', 745 'AEBackuponlineBlock' : ssAzure + 'mscae.enterprise.backup_online', 746 'AECalendarBlock' : ssAzure + 'mscae.general.calendar', 747 'AECertificateBlock' : ssAzure + 'azure.certificate', 748 'AEClientAppBlock' : ssAzure + 'mscae.enterprise.client_application', 749 'AECloudBlock' : ssAzure + 'mscae.enterprise.internet', 750 'AEClusterserverBlock' : ssAzure + 'mscae.enterprise.cluster_server', 751 'AECodefileBlock' : ssAzure + 'azure.code_file', 752 'AEConnectorsBlock' : ssAzure + 'mscae.enterprise.connectors', 753 'AEDatabasegenericBlock' : ssAzure + 'mscae.enterprise.database_generic', 754 'AEDatabaseserverBlock' : ssAzure + 'mscae.enterprise.database_server', 755 'AEDatabasesyncBlock' : ssAzure + 'mscae.enterprise.database_synchronization', 756 'AEDeviceBlock' : ssAzure + 'mscae.enterprise.device', 757 'AEDirectaccessBlock' : ssAzure + 'mscae.enterprise.direct_access_feature', 758 'AEDocumentBlock' : ssAzure + 'mscae.enterprise.document', 759 'AEDomaincontrollerBlock' : ssAzure + 'mscae.enterprise.domain_controller', 760 'AEEnterpriseBuildingBlock' : ssAzure + 'azure.enterprise', 761 'AEFilegeneralBlock' : ssAzure + 'azure.file', 762 'AEFilterBlock' : ssAzure + 'mscae.enterprise.filter', 763 'AEFirewallBlock' : ssAzure + 'mscae.enterprise.firewall', 764 'AEFolderBlock' : ssAzure + 'mscae.enterprise.folder', 765 'AEGatewayBlock' : ssAzure + 'mscae.enterprise.gateway', 766 'AEGenericcodeBlock' : ssAzure + 'azure.code_file', 767 'AEGraphBlock' : ssAzure + 'mscae.general.graph', 768 'AEHealthmonitoringBlock' : ssAzure + 'azure.health_monitoring', 769 'AEHealthyBlock' : ssAzure + 'azure.healthy', 770 'AEImportgenericBlock' : ssAzure + 'mscae.enterprise.import_generic', 771 'AEInternetBlock' : ssAzure + 'mscae.enterprise.internet', 772 'AEKeyboardBlock' : ssAzure + 'mscae.enterprise.keyboard', 773 'AEKeypermissionsBlock' : ssAzure + 'mscae.enterprise.key_permissions', 774 'AELaptopcomputerBlock' : ssAzure + 'azure.laptop', 775 'AELoadbalancerBlock' : ssAzure + 'azure.load_balancer_generic', 776 'AELoadTestingBlock' : ssAzure + 'mscae.enterprise.load_testing', 777 'AELockprotectedBlock' : ssAzure + 'mscae.enterprise.lock', 778 'AELockunprotectedBlock' : ssAzure + 'mscae.enterprise.lock_unlocked', 779 'AEMaintenanceBlock' : ssAzure + 'mscae.enterprise.maintenance', 780 'AEManagementconsoleBlock' : ssAzure + 'mscae.enterprise.management_console', 781 'AEMessageBlock' : ssAzure + 'azure.message', 782 'AEMonitorBlock' : ssAzure + 'azure.computer', 783 'AEMonitorrunningappsBlock' : ssAzure + 'mscae.enterprise.monitor_running_apps', 784 'AEMouseBlock' : ssAzure + 'mscae.enterprise.mouse', 785 'AENetworkcardBlock' : ssAzure + 'mscae.enterprise.network_card', 786 'AENotallowedBlock' : ssAzure + 'mscae.general.not_allowed', 787 'AEPerformanceBlock' : ssAzure + 'mscae.enterprise.performance', 788 'AEPerformancemonitorBlock' : ssAzure + 'mscae.enterprise.performance_monitor', 789 'AEPhoneBlock' : ssAzure + 'azure.mobile', 790 'AEPlugandplayBlock' : ssAzure + 'mscae.enterprise.plug_and_play', 791 'AEPowershellscriptfileBlock' : ssAzure + 'azure.powershell_file', 792 'AEProtocolstackBlock' : ssAzure + 'mscae.enterprise.protocol_stack', 793 'AEQueuegeneralBlock' : ssAzure + 'azure.queue_generic', 794 'AERMSconnectorBlock' : ssAzure + 'mscae.enterprise.rms_connector', 795 'AERouterBlock' : ssAzure + 'mscae.enterprise.router', 796 'AEScriptfileBlock' : ssAzure + 'azure.script_file', 797 'AESecurevirtualmachineBlock' : ssAzure + 'mscae.enterprise.secure_virtual_machine', 798 'AEServerbladeBlock' : ssAzure + 'azure.server', 799 'AEServerdirectoryBlock' : ssAzure + 'mscae.enterprise.server_directory', 800 'AEServerfarmBlock' : ssAzure + 'mscae.enterprise.server_farm', 801 'AEServergenericBlock' : ssAzure + 'mscae.enterprise.server_generic', 802 'AEServerrackBlock' : ssAzure + 'azure.server_rack', 803 'AESettingsBlock' : ssAzure + 'mscae.enterprise.settings', 804 'AESharedfolderBlock' : ssAzure + 'mscae.enterprise.shared_folder', 805 'AESmartcardBlock' : ssAzure + 'mscae.enterprise.smartcard', 806 'AEStorageBlock' : ssAzure + 'mscae.enterprise.storage', 807 'AETableBlock' : ssAzure + 'mscae.enterprise.table', 808 'AETabletBlock' : ssAzure + 'azure.tablet', 809 'AEToolBlock' : ssAzure + 'mscae.enterprise.tool', 810 'AETunnelBlock' : ssAzure + 'mscae.general.tunnel', 811 'AEUnhealthyBlock' : ssAzure + 'mscae.enterprise.unhealthy', 812 'AEUSBBlock' : ssAzure + 'mscae.enterprise.usb', 813 'AEUserBlock' : ssAzure + 'azure.user', 814 'AEVideoBlock' : ssAzure + 'mscae.general.video', 815 'AEVirtualmachineBlock' : ssAzure + 'azure.virtual_machine_feature', 816 'AEWebBlock' : ssAzure + 'mscae.enterprise.web', 817 'AEWebserverBlock' : ssAzure + 'mscae.enterprise.web_server', 818 'AEWindowsserverBlock' : ssAzure + 'mscae.enterprise.windows_server', 819 'AEWirelessconnectionBlock' : ssAzure + 'mscae.enterprise.wireless_connection', 820 'AEWorkstationclientBlock' : ssAzure + 'mscae.enterprise.workstation_client', 821 'AEXMLwebserviceBlock' : ssAzure + 'mscae.enterprise.xml_web_service', 822 'AGSAudioBlock' : ssAzure + 'mscae.general.audio', 823 'AGSBugBlock' : ssAzure + 'mscae.general.bug', 824 'AGSCablesettopTVboxBlock' : ssAzure + 'mscae.general.cable_settop_tv_box', 825 'AGSCalendarBlock' : ssAzure + 'mscae.general.calendar', 826 'AGSChartBlock' : ssAzure + 'mscae.general.chart', 827 'AGSCheckmarkSuccessBlock' : ssAzure + 'mscae.general.checkmark', 828 'AGSContinousCycleCircleBlock' : ssAzure + 'mscae.general.continuous_cycle', 829 'AGSCrossoutFailureBlock' : ssAzure + 'mscae.general.crossout', 830 'AGSCutandpasteBlock' : ssAzure + 'mscae.general.cut_and_paste', 831 'AGSFolderBlock' : ssAzure + 'mscae.enterprise.folder', 832 'AGSGamecontrollerBlock' : ssAzure + 'mscae.general.game_controller', 833 'AGSGearsBlock' : ssAzure + 'mscae.general.gears', 834 'AGSGraphBlock' : ssAzure + 'mscae.general.graph', 835 'AGSLikeBlock' : ssAzure + 'mscae.general.like', 836 'AGSNotallowedBlock' : ssAzure + 'mscae.general.not_allowed', 837 'AGSSliderbarhorizontalBlock' : ssAzure + 'mscae.general.slider_bar_horizontal', 838 'AGSSliderbarvertBlock' : ssAzure + 'mscae.general.slider_bar_vertical', 839 'AGSTasklistorBacklogBlock' : ssAzure + 'mscae.general.task_list', 840 'AGSTasksBlock' : ssAzure + 'mscae.general.tasks', 841 'AGSTunnelBlock' : ssAzure + 'mscae.general.tunnel', 842 'AGSUserBlock' : ssAzure + 'azure.user', 843 'AGSVideoBlock' : ssAzure + 'mscae.general.video', 844// Azure VMS 845 'AVMActiveDirectoryVMBlock' : 'shape=mxgraph.mscae.vm.active_directory;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 846 'AVMActiveDirectoryVMmultiBlock' : 'shape=mxgraph.mscae.vm.active_directory_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 847 'AVMAppServerVMBlock' : 'shape=mxgraph.mscae.vm.application_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 848 'AVMAppServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.application_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 849 'AVMDatabaseServerVMBlock' : 'shape=mxgraph.mscae.vm.database_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 850 'AVMDatabaseServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.database_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 851 'AVMDirectoryServerVMBlock' : 'shape=mxgraph.mscae.vm.directory_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 852 'AVMDirectoryServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.directory_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 853 'AVMDomainServerVMBlock' : 'shape=mxgraph.mscae.vm.domain_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 854 'AVMDomainServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.domain_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 855 'AVMFileServerVMBlock' : 'shape=mxgraph.mscae.vm.file_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 856 'AVMFileServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.file_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 857 'AVMWebServerVMBlock' : 'shape=mxgraph.mscae.vm.web_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 858 'AVMWebServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.web_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 859 'AVMWindowsServerVMBlock' : 'shape=mxgraph.mscae.vm.windows_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 860 'AVMWindowsServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.windows_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none', 861// Azure 2019 862 'AccessReviewAzure2019': azur19 + 'Access_Review.svg', 863 'ActiveDirectoryConnectHealthAzure2019': azur19 + 'Active_Directory_Health_Monitoring.svg', 864 'ActiveDirectoryAzure2019': azur19 + 'Active_Directory.svg', 865 'ActiveDirectoryAzure2019_': azur19 + 'ActiveDirectory.svg', 866 'ActiveDirectoryDomainAzure2019': azur19 + 'ActiveDirectoryDomain.svg', 867 'AddressSpaceAzure2019': azur19 + 'Address_Space.svg', 868 'AddTeamMemberAzure2019': azur19 + 'AddTeamMember.svg', 869 'ADFSAzure2019': azur19 + 'ADFS.svg', 870 'AdvisorAzure2019': azur19 + 'Advisor.svg', 871 'AlienAzure2019': azur19 + 'Alien.svg', 872 'AlienSadAzure2019': azur19 + 'AlienSad.svg', 873 'AnalysisServicesAzure2019': azur19 + 'Analysis_Services.svg', 874 'APIManagementServicesAzure2019': azur19 + 'API_Management.svg', 875 'APIAzure2019': azur19 + 'API.svg', 876 'APIDefinitionAzure2019': azur19 + 'APIDefinition.svg', 877 'AppConfigurationAzure2019': azur19 + 'App_Configuration.svg', 878 'AppRegistrationsAzure2019': azur19 + 'App_Registrations.svg', 879 'AppServiceAPIAppsAzure2019': azur19 + 'App_Service_API_Apps.svg', 880 'AppServiceFrontendAzure2019': azur19 + 'App_Service_Frontend.svg', 881 'PublicIPAddressesAzure2019': azur19 + 'App_Service_IPAddress.svg', 882 'AzureAppServiceMobileAzure2019': azur19 + 'App_Service_Mobile_App.svg', 883 'AppServiceWorkerPoolsAzure2019': azur19 + 'App_Service_Worker_Pools.svg', 884 'AppServiceAzure2019': azur19 + 'App_Service.svg', 885 'AppServicesAzure2019': azur19 + 'App_Services.svg', 886 'AppServiceEnvironmentsAzure2019': azur19 + 'App_Services.svg', 887 'ApplicationGatewayAzure2019': azur19 + 'Application_Gateway.svg', 888 'ApplicationInsightsAzure2019': azur19 + 'Application_Insights.svg', 889 'ApplicationSecurityGroupsAzure2019': azur19 + 'Application_Security_Groups.svg', 890 'AppServiceConnectivityAzure2019': azur19 + 'AppServiceConnectivity.svg', 891 'AppServiceEnvironmentAzure2019': azur19 + 'AppServiceEnvironment.svg', 892 'ArchiveStorageAzure2019': azur19 + 'Archive_Storage.svg', 893 'ARMExplorerAzure2019': azur19 + 'ARMExplorer.svg', 894 'AuditingAzure2019': azur19 + 'Auditing.svg', 895 'AuditingServerAzure2019': azur19 + 'AuditingServer.svg', 896 'AutoBackupAzure2019': azur19 + 'AutoBackup.svg', 897 'AutomationAccountsAzure2019': azur19 + 'Automation.svg', 898 'AvatarAzure2019': azur19 + 'Avatar.svg', 899 'AvatarDefaultAzure2019': azur19 + 'AvatarDefault.svg', 900 'AvatarUnknownAzure2019': azur19 + 'AvatarUnknown.svg', 901 'Azure API for FHIRAzure2019': azur19 + 'Azure API for FHIR.svg', 902 'AzureADB2CAzure2019': azur19 + 'Azure_AD_B2C.svg', 903 'AzureADDomainServicesAzure2019': azur19 + 'Azure_AD_Domain_Services.svg', 904 'AzureADIdentityProtectionAzure2019': azur19 + 'Azure_AD_Identity_Protection.svg', 905 'AzureADPrivilegedIdentityManagementAzure2019': azur19 + 'Azure_AD_Privileged_Identity_Management.svg', 906 'AzureAPIforFHIRAzure2019': azur19 + 'Azure_API_for_FHIR.svg', 907 'AzureArtifactsAzure2019': azur19 + 'Azure_Artifacts.svg', 908 'AzureBoardsAzure2019': azur19 + 'Azure_Boards.svg', 909 'AzureCacheforRedisAzure2019': azur19 + 'Azure_Cache_for_Redis.svg', 910 'AzureDataExplorerClustersAzure2019': azur19 + 'Azure_Data_Explorer_Clusters.svg', 911 'AzureDatabaseforMariaDBServersAzure2019': azur19 + 'Azure_Database_for_MariaDB_servers.svg', 912 'AzureDatabaseforMySQLServersAzure2019': azur19 + 'Azure_Database_for_MySQL_servers.svg', 913 'AzureDatabaseforPostgreSQLServersAzure2019': azur19 + 'Azure_Database_for_PostgreSQL_servers.svg', 914 'AzureDatabaseMigrationServicesAzure2019': azur19 + 'Azure_Database_Migration_Services.svg', 915 'AzureDevOpsAzure2019': azur19 + 'Azure_DevOps.svg', 916 'AzureDigitalTwinsAzure2019': azur19 + 'Azure_Digital_Twins.svg', 917 'AzureFirewallAzure2019': azur19 + 'Azure_Firewall.svg', 918 'AzureHomeAzure2019': azur19 + 'Azure_Home.svg', 919 'AzureIoTHubSecurityAzure2019': azur19 + 'Azure_IoT_Hub_Security.svg', 920 'AzureIoTHubAzure2019': azur19 + 'Azure_IoT_Hub.svg', 921 'AzureMapsAzure2019': azur19 + 'Azure_Maps.svg', 922 'AzureMediaPlayerAzure2019': azur19 + 'Azure_Media_Player.svg', 923 'AzureNetAppfilesAzure2019': azur19 + 'Azure_NetApp_files.svg', 924 'AzurePipelinesAzure2019': azur19 + 'Azure_Pipelines.svg', 925 'AzureReposAzure2019': azur19 + 'Azure_Repos.svg', 926 'AzureSentinelAzure2019': azur19 + 'Azure_Sentinel.svg', 927 'AzureSphereAzure2019': azur19 + 'Azure_Sphere.svg', 928 'AzureTestPlansAzure2019': azur19 + 'Azure_Test_Plans.svg', 929 'AzureFXTEdgeFilerAzure2019': azur19 + 'AzureFXTEdgeFiler.svg', 930 'BacklogAzure2019': azur19 + 'Backlog.svg', 931 'RecoveryServicesVaultsAzure2019': azur19 + 'Backup.svg', 932 'BatchAccountsAzure2019': azur19 + 'Batch_Accounts.svg', 933 'BatchAIAzure2019': azur19 + 'Batch_AI.svg', 934 'BatchTaskAzure2019': azur19 + 'Batch_Task.svg', 935 'BatchTaskVMAzure2019': azur19 + 'Batch_TaskVM.svg', 936 'BatchAzure2019': azur19 + 'Batch.svg', 937 'BillingHubAzure2019': azur19 + 'BillingHub.svg', 938 'BizTalkServicesHybridConnectionsAzure2019': azur19 + 'BizTalk_Services_Hybrid_Connections.svg', 939 'BizTalkServicesAzure2019': azur19 + 'BizTalk_Services.svg', 940 'BlobStorageAzure2019': azur19 + 'BlobBlock.svg', 941 'BlobPageAzure2019': azur19 + 'BlobPage.svg', 942 'BlockchainAzure2019': azur19 + 'Blockchain.svg', 943 'BlogStorageAzure2019': azur19 + 'Blog_Storage.svg', 944 'BlueprintsAzure2019': azur19 + 'Blueprints.svg', 945 'BookAzure2019': azur19 + 'Book.svg', 946 'BotServicesAzure2019': azur19 + 'Bot_Services.svg', 947 'BranchAzure2019': azur19 + 'Branch.svg', 948 'BrowserAzure2019': azur19 + 'Browser.svg', 949 'BugAzure2019': azur19 + 'Bug.svg', 950 'BuildingBlocksAzure2019': azur19 + 'Building_Blocks.svg', 951 'BuildsAzure2019': azur19 + 'Builds.svg', 952 'AzureCacheplusRedisAzure2019': azur19 + 'Cache_including_Redis.svg', 953 'AzureCacheRedisAzure2019': azur19 + 'Cache_Redis_Product.svg', 954 'CalendarAzure2019': azur19 + 'Calendar.svg', 955 'CDNrocketAzure2019': azur19 + 'CDNrocket.svg', 956 'CertificateAzure2019': azur19 + 'Certificate.svg', 957 'AppServiceCertificatesAzure2019': azur19 + 'Certificate.svg', 958 'MetricsAzure2019': azur19 + 'Chart.svg', 959 'CheckAzure2019': azur19 + 'Check.svg', 960 'CitrixVirtualDesktopsEssentialsAzure2019': azur19 + 'Citrix_Virtual_Desktops_Essentials.svg', 961 'ReservedIPAddressesClassicAzure2019': azur19 + 'ClassicIPAddress.svg', 962 'ClassicStorageAzure2019': azur19 + 'ClassicStorage.svg', 963 'ClientAppsAzure2019': azur19 + 'Client_Apps.svg', 964 'RecentAzure2019': azur19 + 'Clock.svg', 965 'CycleCloudAzure2019': azur19 + 'Cloud_Cycle.svg', 966 'CloudServicesAzure2019': azur19 + 'Cloud_Service.svg', 967 'CloudServicesClassicAzure2019': azur19 + 'Cloud_Services_Classic.svg', 968 'CloudSimpleNodesAzure2019': azur19 + 'CloudSimple_Nodes.svg', 969 'CloudSimpleServicesAzure2019': azur19 + 'CloudSimple_Services.svg', 970 'CloudSimpleVirtualMachinesAzure2019': azur19 + 'CloudSimple_Virtual_Machines.svg', 971 'CodeAzure2019': azur19 + 'Code.svg', 972 'CognitiveServicesComputerVisionAzure2019': azur19 + 'Cognitive_Services_Computer_Vision.svg', 973 'CognitiveServicesemotionAzure2019': azur19 + 'Cognitive_Services_emotion.svg', 974 'CognitiveServicesfaceAzure2019': azur19 + 'Cognitive_Services_face.svg', 975 'CognitiveServicesluisAzure2019': azur19 + 'Cognitive_Services_luis.svg', 976 'CognitiveServicesrecommendationsAzure2019': azur19 + 'Cognitive_Services_recommendations.svg', 977 'CognitiveServicesSpeechAzure2019': azur19 + 'Cognitive_Services_Speech.svg', 978 'CognitiveServicestextanalyticsAzure2019': azur19 + 'Cognitive_Services_textanalytics.svg', 979 'CognitiveServicesweblanguagemodelAzure2019': azur19 + 'Cognitive_Services_web_language_model.svg', 980 'CognitiveServicesAzure2019': azur19 + 'Cognitive_Services.svg', 981 'CommitsAzure2019': azur19 + 'Commits.svg', 982 'ConnectionAzure2019': azur19 + 'Connection.svg', 983 'ConnectionsAzure2019': azur19 + 'Connections.svg', 984 'ContactInfoAzure2019': azur19 + 'ContactInfo.svg', 985 'ContainerInstancesAzure2019': azur19 + 'Container_Instances.svg', 986 'ContainerRegistriesAzure2019': azur19 + 'Container_Registries.svg', 987 'ContainerServiceAzure2019': azur19 + 'Container_Service.svg', 988 'CDNProfilesAzure2019': azur19 + 'Content_Delivery_Network.svg', 989 'ContentProtectionAzure2019': azur19 + 'Content_Protection.svg', 990 'ContentManagementSystemAzure2019': azur19 + 'ContentManagementSystem.svg', 991 'ContinuousExportAzure2019': azur19 + 'ContinuousExport.svg', 992 'ControllersAzure2019': azur19 + 'Controllers.svg', 993 'ControlsAzure2019': azur19 + 'Controls.svg', 994 'ControlsHorizontalAzure2019': azur19 + 'ControlsHorizontal.svg', 995 'AzureCosmosDBAzure2019': azur19 + 'CosmosDB.svg', 996 'CounterAzure2019': azur19 + 'Counter.svg', 997 'CubesAzure2019': azur19 + 'Cubes.svg', 998 'CustomDomainAzure2019': azur19 + 'CustomDomain.svg', 999 'AppServiceDomainsAzure2019': azur19 + 'CustomDomain.svg', 1000 'CustomerLockboxAzure2019': azur19 + 'Customer_Lockbox.svg', 1001 'CustomerInsightsAzure2019': azur19 + 'CustomerInsights.svg', 1002 'DataBoxEdgeDataBoxGatewayAzure2019': azur19 + 'Data_Box_Edge_Data_Box_Gateway.svg', 1003 'DataBoxAzure2019': azur19 + 'Data_Box.svg', 1004 'ImportExportJobsAzure2019': azur19 + 'Data_Box.svg', 1005 'AzureDataCatalogAzure2019': azur19 + 'Data_Catalog.svg', 1006 'DataFactoriesAzure2019': azur19 + 'Data_Factory.svg', 1007 'DataLakeAnalyticsAzure2019': azur19 + 'Data_Lake_Analytics.svg', 1008 'DataLakeStorageAzure2019': azur19 + 'Data_Lake_Storage.svg', 1009 'DataLakeStoreGen1Azure2019': azur19 + 'Data_Lake_Store.svg', 1010 'DataLakeAzure2019': azur19 + 'Data_Lake.svg', 1011 'DataWarehouseAzure2019': azur19 + 'Data_Warehouse.svg', 1012 'AzureDatabaseGenericAzure2019': azur19 + 'Database_General.svg', 1013 'DatabaseRestoreAzure2019': azur19 + 'DatabaseRestore.svg', 1014 'AzureDatabricksAzure2019': azur19 + 'Databricks.svg', 1015 'dataExportAzure2019': azur19 + 'dataExport.svg', 1016 'dataRetentionAzure2019': azur19 + 'dataRetention.svg', 1017 'DataServicescategoryrollupAzure2019': azur19 + 'DataServices_category_rollup.svg', 1018 'DCOSAzure2019': azur19 + 'DC_OS.svg', 1019 'DDOSProtectionPlansAzure2019': azur19 + 'DDOS_Protection_Plans.svg', 1020 'DedicatedEventHubAzure2019': azur19 + 'Dedicated_Event_Hub.svg', 1021 'DevConsoleAzure2019': azur19 + 'DevConsole.svg', 1022 'DeveloperToolsAzure2019': azur19 + 'Developer_Tools.svg', 1023 'DeviceComplianceAzure2019': azur19 + 'Device_Compliance.svg', 1024 'DeviceConfigAzure2019': azur19 + 'Device_Config.svg', 1025 'DeviceProvisioningServicesAzure2019': azur19 + 'Device_Provisioning_Services.svg', 1026 'DevicesGroupsAzure2019': azur19 + 'Devices_Groups.svg', 1027 'AzureDevTestLabsAzure2019': azur19 + 'DevTest_Labs.svg', 1028 'DirectorySyncAzure2019': azur19 + 'DirectorySync.svg', 1029 'DiscardAzure2019': azur19 + 'Discard.svg', 1030 'DisksAzure2019': azur19 + 'Discs.svg', 1031 'DNSPrivateZonesAzure2019': azur19 + 'DNS_Private_Zones.svg', 1032 'DNSZonesAzure2019': azur19 + 'DNS.svg', 1033 'DockerAzure2019': azur19 + 'Docker.svg', 1034 'DocumentDBAzure2019': azur19 + 'DocumentDB.svg', 1035 'DownloadAzure2019': azur19 + 'Download.svg', 1036 'EBooksAzure2019': azur19 + 'eBooks.svg', 1037 'EducationAzure2019': azur19 + 'Education.svg', 1038 'ElasticDatabasePoolsAzure2019': azur19 + 'Elastic_Database_Pools.svg', 1039 'ElasticJobAgentsAzure2019': azur19 + 'Elastic_Job_Agents.svg', 1040 'EnrollmentAzure2019': azur19 + 'Enrollment.svg', 1041 'EnterpriseApplicationsAzure2019': azur19 + 'Enterprise_Applications.svg', 1042 'EventGridTopicsAzure2019': azur19 + 'Event_Grid_Topics.svg', 1043 'EventGridDomainsAzure2019': azur19 + 'Event_Grid.svg', 1044 'EventGridSubscriptionsAzure2019': azur19 + 'Event_Grid.svg', 1045 'EventHubClustersAzure2019': azur19 + 'Event_Hub_Clusters.svg', 1046 'EventHubsAzure2019': azur19 + 'Event_Hubs.svg', 1047 'EventLogAzure2019': azur19 + 'EventLog.svg', 1048 'ExchangeOnPremisesAccessAzure2019': azur19 + 'Exchange_On_premises_Access.svg', 1049 'ExpressRouteCircuitsAzure2019': azur19 + 'Express_Route.svg', 1050 'ExtensionsAzure2019': azur19 + 'Extensions.svg', 1051 'FavoriteAzure2019': azur19 + 'Favorite.svg', 1052 'FileAzure2019': azur19 + 'File.svg', 1053 'FilesAzure2019': azur19 + 'Files.svg', 1054 'FolderAzure2019': azur19 + 'Folder.svg', 1055 'FolderBlankAzure2019': azur19 + 'FolderBlank.svg', 1056 'FolderCubeAzure2019': azur19 + 'FolderCube.svg', 1057 'FolderWebsiteAzure2019': azur19 + 'FolderWebsite.svg', 1058 'ForPlacementOnlyAzure2019': azur19 + 'ForPlacementOnly.svg', 1059 'FreeServicesAzure2019': azur19 + 'Free_Services.svg', 1060 'FrontDoorsAzure2019': azur19 + 'Front_Doors.svg', 1061 'FtpAzure2019': azur19 + 'Ftp.svg', 1062 'FunctionAppsAzure2019': azur19 + 'Functions.svg', 1063 'GalleryManagementAzure2019': azur19 + 'GalleryManagement.svg', 1064 'GatewayAzure2019': azur19 + 'Gateway.svg', 1065 'Gear2Azure2019': azur19 + 'Gear_2.svg', 1066 'GearAzure2019': azur19 + 'Gear.svg', 1067 'GearAlternate2Azure2019': azur19 + 'GearAlternate_2.svg', 1068 'GearAlternateAzure2019': azur19 + 'GearAlternate.svg', 1069 'GeneralStorageAzure2019': azur19 + 'General_Storage.svg', 1070 'GenomicsAccountsAzure2019': azur19 + 'Genomics_Accounts.svg', 1071 'GeoReplicationPremiumAzure2019': azur19 + 'GeoReplicationPremium.svg', 1072 'GeoReplicationStandardAzure2019': azur19 + 'GeoReplicationStandard.svg', 1073 'GetMoreLicenseAzure2019': azur19 + 'GetMoreLicense.svg', 1074 'GetStartedAzure2019': azur19 + 'GetStarted.svg', 1075 'GiftAzure2019': azur19 + 'Gift.svg', 1076 'GlobeAzure2019': azur19 + 'Globe.svg', 1077 'GlobeErrorAzure2019': azur19 + 'GlobeError.svg', 1078 'GlobeSuccessAzure2019': azur19 + 'GlobeSuccess.svg', 1079 'GlobeWarningAzure2019': azur19 + 'GlobeWarning.svg', 1080 'GoAzure2019': azur19 + 'Go.svg', 1081 'GreatScottAzure2019': azur19 + 'GreatScott.svg', 1082 'GridAzure2019': azur19 + 'Grid.svg', 1083 'AllResourcesAzure2019': azur19 + 'Grid3x3.svg', 1084 'GuestAssignmentsAzure2019': azur19 + 'Guest_Assignments.svg', 1085 'Guide2Azure2019': azur19 + 'Guide_2.svg', 1086 'GuideAzure2019': azur19 + 'Guide.svg', 1087 'HammerAzure2019': azur19 + 'Hammer.svg', 1088 'HDInsightAzure2019': azur19 + 'HDInsight.svg', 1089 'HDInsightClustersAzure2019': azur19 + 'HDInsightClusters.svg', 1090 'HealthErrorBadgeAzure2019': azur19 + 'HealthErrorBadge.svg', 1091 'HealthWarningBadgeAzure2019': azur19 + 'HealthWarningBadge.svg', 1092 'HeartAzure2019': azur19 + 'Heart.svg', 1093 'HeartPulseAzure2019': azur19 + 'HeartPulse.svg', 1094 'HomeAzure2019': azur19 + 'Home.svg', 1095 'HybridConnectionEndpointAzure2019': azur19 + 'HybridConnectionEndpoint.svg', 1096 'IdentityGovernanceAzure2019': azur19 + 'Identity_Governance.svg', 1097 'ImageDefinitionsAzure2019': azur19 + 'Image_Definitions.svg', 1098 'ImageVersionsAzure2019': azur19 + 'Image_Versions.svg', 1099 'ImageAzure2019': azur19 + 'Image.svg', 1100 'InboundNATAzure2019': azur19 + 'InboundNAT.svg', 1101 'InboundRuleAzure2019': azur19 + 'InboundRule.svg', 1102 'InformationAzure2019': azur19 + 'Info_2.svg', 1103 'WhatsNewAzure2019': azur19 + 'Info.svg', 1104 'AzureTimeSeriesInsightsEventsSourcesAzure2019': azur19 + 'Input.svg', 1105 'InputOutputAzure2019': azur19 + 'InputOutput.svg', 1106 'InstallVisualStudioAzure2019': azur19 + 'InstallVisualStudio.svg', 1107 'IntegrationAccountsAzure2019': azur19 + 'Integration_Accounts.svg', 1108 'IntegrationServiceEnvironmentsAzure2019': azur19 + 'Integration_Service_Environments.svg', 1109 'IntuneAppProtectionAzure2019': azur19 + 'Intune_App_Protection.svg', 1110 'IntuneAzure2019': azur19 + 'Intune_App_Protection.svg', 1111 'IOTedgeAzure2019': azur19 + 'IOT_edge.svg', 1112 'JobAzure2019': azur19 + 'Job.svg', 1113 'JourneyHubAzure2019': azur19 + 'JourneyHub.svg', 1114 'KeyVaultsAzure2019': azur19 + 'Key_Vaults.svg', 1115 'SubscriptionsAzure2019': azur19 + 'Key.svg', 1116 'KeyboardShortcutsAzure2019': azur19 + 'KeyboardShortcuts.svg', 1117 'KeyVaultAzure2019': azur19 + 'KeyVault.svg', 1118 'KubernetesServicesAzure2019': azur19 + 'Kubernetes_Services.svg', 1119 'KubernetesAzure2019': azur19 + 'Kubernetes.svg', 1120 'KuduKnifeAzure2019': azur19 + 'KuduKnife.svg', 1121 'LaunchPortalAzure2019': azur19 + 'LaunchPortal.svg', 1122 'LoadBalancersAzure2019': azur19 + 'Load_Balancer_feature.svg', 1123 'LoadTestAzure2019': azur19 + 'LoadTest.svg', 1124 'LocalNetworkGatewaysAzure2019': azur19 + 'Local_Network_Gateways.svg', 1125 'LocalNetworkAzure2019': azur19 + 'LocalNetwork.svg', 1126 'LocationAzure2019': azur19 + 'Location.svg', 1127 'LogAnalyticsWorkspacesAzure2019': azur19 + 'Log_Analytics_Workspaces.svg', 1128 'ActivityLogAzure2019': azur19 + 'Log.svg', 1129 'DiagnosticSettingsAzure2019': azur19 + 'LogDiagnostics.svg', 1130 'LogicAppsCustomConnectorAzure2019': azur19 + 'Logic_Apps_Custom_Connector.svg', 1131 'LogicAppsAzure2019': azur19 + 'Logic_Apps.svg', 1132 'LogStreamingAzure2019': azur19 + 'LogStreaming.svg', 1133 'MachineLearningServiceWorkspacesAzure2019': azur19 + 'Machine_Learning_Service_Workspaces.svg', 1134 'MachineLearningStudioWebServicePlansAzure2019': azur19 + 'Machine_Learning_Studio_Web_Service_Plans.svg', 1135 'MachineLearningStudioWebServicesAzure2019': azur19 + 'Machine_Learning_Studio_Web_Services.svg', 1136 'MachineLearningStudioWorkspacesAzure2019': azur19 + 'Machine_Learning_Studio_Workspaces.svg', 1137 'MachineLearningAzure2019': azur19 + 'Machine_Learning.svg', 1138 'MachineLearningServicePlansAzure2019': azur19 + 'MachineLearningServicePlans.svg', 1139 'MachineLearningWebServicesAzure2019': azur19 + 'MachineLearningWebServices.svg', 1140 'MachineLearningWorkspacesAzure2019': azur19 + 'MachineLearningWorkspaces.svg', 1141 'ManagedApplicationsAzure2019': azur19 + 'Managed_Applications.svg', 1142 'ManagedDatabasesAzure2019': azur19 + 'Managed_Databases.svg', 1143 'ManagedDesktopAzure2019': azur19 + 'Managed_Desktop.svg', 1144 'ManagedIdentitiesAzure2019': azur19 + 'Managed_Identities.svg', 1145 'ManagedApplicationsAzure2019_': azur19 + 'ManagedApplications.svg', 1146 'ManagementGroupsAzure2019': azur19 + 'Management_Groups.svg', 1147 'ManagementPortalAzure2019': azur19 + 'Management_Portal.svg', 1148 'ManagePortalAzure2019': azur19 + 'ManagePortal.svg', 1149 'DiskSnapshotsAzure2019': azur19 + 'MD_snapshot.svg', 1150 'MediaEncodingAzure2019': azur19 + 'Media_Encoding.svg', 1151 'MediaOnDemandAzure2019': azur19 + 'Media_On_Demand.svg', 1152 'MediaServicesAzure2019': azur19 + 'Media_Services.svg', 1153 'AzureMediaServicesAzure2019': azur19 + 'Media_Services.svg', 1154 'MediaFileAzure2019': azur19 + 'MediaFile.svg', 1155 'MigrationProjectsAzure2019': azur19 + 'Migration_Projects.svg', 1156 'AzureMobileEngagementAzure2019': azur19 + 'Mobile_Engagement.svg', 1157 'ModuleAzure2019': azur19 + 'Module.svg', 1158 'MonitorAzure2019': azur19 + 'Monitor.svg', 1159 'MonitoringAzure2019': azur19 + 'Monitoring.svg', 1160 'MultiFactorAuthenticationAzure2019': azur19 + 'Multi_Factor_Authentication.svg', 1161 'MySQLClearDBdatabaseAzure2019': azur19 + 'MySQL_ClearDB_database.svg', 1162 'NetworkSecurityGroupsClassicAzure2019': azur19 + 'Network_Security_Groups_Classic.svg', 1163 'NetworkWatcherAzure2019': azur19 + 'Network_watcher.svg', 1164 'NetworkInterfacesAzure2019': azur19 + 'NetworkInterfaceCard.svg', 1165 'NewAzure2019': azur19 + 'New.svg', 1166 'NextBillAzure2019': azur19 + 'NextBill.svg', 1167 'NonAzureMachineAzure2019': azur19 + 'Non_Azure_Machine.svg', 1168 'NotificationHubsAzure2019': azur19 + 'Notification_Hubs.svg', 1169 'NotificationHubNamespacesAzure2019': azur19 + 'Notification_Hubs.svg', 1170 'AlertsAzure2019': azur19 + 'Notification.svg', 1171 'NSGAzure2019': azur19 + 'NSG.svg', 1172 'OfferAzure2019': azur19 + 'Offer.svg', 1173 'OnPremisesDataGatewaysAzure2019': azur19 + 'On_Premises_Data_Gateways.svg', 1174 'OnPremiseSetupAzure2019': azur19 + 'OnPremiseSetup.svg', 1175 'AzureOpenShiftAzure2019': azur19 + 'OpenShift.svg', 1176 'OperationsManagementSuiteAzure2019': azur19 + 'Operations_Management_Suite.svg', 1177 'OSImagesClassicAzure2019': azur19 + 'OS_Images_Classic.svg', 1178 'OutboundNATAzure2019': azur19 + 'OutboundNAT.svg', 1179 'OutboundRuleAzure2019': azur19 + 'OutboundRule.svg', 1180 'OutputAzure2019': azur19 + 'Output.svg', 1181 'overageCostsAzure2019': azur19 + 'overageCosts.svg', 1182 'PausedAzure2019': azur19 + 'Paused.svg', 1183 'PeeringsAzure2019': azur19 + 'Peerings.svg', 1184 'PendingAzure2019': azur19 + 'Pending.svg', 1185 'UserIconAzure2019': azur19 + 'Person.svg', 1186 'PersonWithFriendAzure2019': azur19 + 'PersonWithFriend.svg', 1187 'PhoneAzure2019': azur19 + 'Phone.svg', 1188 'PluralsightAzure2019': azur19 + 'PluralSight_mono.svg', 1189 'PolicyAzure2019': azur19 + 'Policy.svg', 1190 'PortalCurrentAzure2019': azur19 + 'PortalCurrent.svg', 1191 'PostponeAzure2019': azur19 + 'Postpone.svg', 1192 'PowerAzure2019': azur19 + 'Power.svg', 1193 'PowershellAzure2019': azur19 + 'Powershell.svg', 1194 'PowerUp2Azure2019': azur19 + 'PowerUp_2.svg', 1195 'PowerUpAzure2019': azur19 + 'PowerUp.svg', 1196 'PreviewRightAzure2019': azur19 + 'PreviewRight.svg', 1197 'ProbeAzure2019': azur19 + 'Probe.svg', 1198 'ProcessExplorerAzure2019': azur19 + 'ProcessExplorer.svg', 1199 'ProductionReadyDBAzure2019': azur19 + 'ProductionReadyDB.svg', 1200 'PublishAzure2019': azur19 + 'Publish.svg', 1201 'PullRequestAzure2019': azur19 + 'PullRequest.svg', 1202 'QSDiagnosticsAzure2019': azur19 + 'QSDiagnostics.svg', 1203 'QSFileAzure2019': azur19 + 'QSFile.svg', 1204 'QSMailAzure2019': azur19 + 'QSMail.svg', 1205 'QSWarningAzure2019': azur19 + 'QSWarning.svg', 1206 'QueuedAzure2019': azur19 + 'Queued.svg', 1207 'QueuesStorageAzure2019': azur19 + 'Queues_Storage.svg', 1208 'QuickStartCenterAzure2019': azur19 + 'Quick_Start_Center.svg', 1209 'QuickstartAzure2019': azur19 + 'Quickstart.svg', 1210 'QuotaAzure2019': azur19 + 'Quota.svg', 1211 'RainAzure2019': azur19 + 'Rain.svg', 1212 'RDMAAzure2019': azur19 + 'RDMA.svg', 1213 'RecommendationAzure2019': azur19 + 'Recommendation.svg', 1214 'RemoteAppAzure2019': azur19 + 'RemoteApp.svg', 1215 'ReservationsAzure2019': azur19 + 'Reservations.svg', 1216 'ResourceExplorerAzure2019': azur19 + 'Resource_Explorer.svg', 1217 'ResourceGraphExplorerAzure2019': azur19 + 'Resource_Graph_Explorer.svg', 1218 'ResourceGroupsAzure2019': azur19 + 'Resource_Groups.svg', 1219 'ResourceDefaultAzure2019': azur19 + 'ResourceDefault.svg', 1220 'ResourceGroupAzure2019': azur19 + 'ResourceGroup.svg', 1221 'ResourceLinkedAzure2019': azur19 + 'ResourceLinked.svg', 1222 'ResourceProviderAzure2019': azur19 + 'ResourceProvider.svg', 1223 'ResourceRoleAzure2019': azur19 + 'ResourceRole.svg', 1224 'RouteFiltersAzure2019': azur19 + 'Route_Filter.svg', 1225 'RuleAzure2019': azur19 + 'Rule.svg', 1226 'RunbooksAzure2019': azur19 + 'Runbooks.svg', 1227 'RunbookSourceAzure2019': azur19 + 'RunbookSource.svg', 1228 'SAPHANAonAzureAzure2019': azur19 + 'SAP_HANA_on_Azure.svg', 1229 'ScaleAzure2019': azur19 + 'Scale.svg', 1230 'ScaleAltAzure2019': azur19 + 'ScaleAlt.svg', 1231 'SchedulerJobAzure2019': azur19 + 'SchedulerJob.svg', 1232 'SchedulerJobCollectionsAzure2019': azur19 + 'SchedulerJobCollection.svg', 1233 'SDKAzure2019': azur19 + 'SDK.svg', 1234 'SearchAzure2019': azur19 + 'Search.svg', 1235 'AzureSearchAzure2019': azur19 + 'Search.svg', 1236 'SearchGridAzure2019': azur19 + 'SearchGrid.svg', 1237 'SecurityBaselinesAzure2019': azur19 + 'Security_Baselines.svg', 1238 'ConditionalAccessAzure2019': azur19 + 'Security_Center.svg', 1239 'SecurityCenterAzure2019': azur19 + 'Security_Center.svg', 1240 'SendGridAccountsAzure2019': azur19 + 'SendGrid_Accounts.svg', 1241 'ServerAzure2019': azur19 + 'Server.svg', 1242 'ServerFarmAzure2019': azur19 + 'ServerFarm.svg', 1243 'ServerProxyAzure2019': azur19 + 'ServerProxy.svg', 1244 'serversAndMobileDevicesAzure2019': azur19 + 'serversAndMobileDevices.svg', 1245 'ServiceBusQueuesAzure2019': azur19 + 'Service_Bus_Queues.svg', 1246 'AzureServiceBusRelaysAzure2019': azur19 + 'Service_Bus_Relay.svg', 1247 'ServiceBusTopicsAzure2019': azur19 + 'Service_Bus_Topics.svg', 1248 'AzureServiceBusAzure2019': azur19 + 'Service_Bus.svg', 1249 'ServiceCatalogManagedApplicationDefinitionsAzure2019': azur19 + 'Service_Catalog_Managed_Application_Definitions.svg', 1250 'ServiceEndpointPoliciesAzure2019': azur19 + 'Service_Endpoint_Policies.svg', 1251 'ServiceFabricClustersAzure2019': azur19 + 'Service_Fabric.svg', 1252 'ServiceHealthAzure2019': azur19 + 'ServiceHealth.svg', 1253 'SharedDashboardAzure2019': azur19 + 'Shared_Dashboard.svg', 1254 'SharedImageGalleriesAzure2019': azur19 + 'Shared_Image_Galleries.svg', 1255 'ShieldFirewallAzure2019': azur19 + 'ShieldFirewall.svg', 1256 'SignalRAzure2019': azur19 + 'SignalR.svg', 1257 'SiteRecoveryAzure2019': azur19 + 'Site_Recovery.svg', 1258 'SoftwareasaServiceSaaSAzure2019': azur19 + 'Software_as_a_Service.svg', 1259 'SoftwareUpdateAzure2019': azur19 + 'Software_Update.svg', 1260 'SolutionsAzure2019': azur19 + 'Solutions.svg', 1261 'SpatialAnchorAzure2019': azur19 + 'Spatial_Anchor.svg', 1262 'SQLDatabasesAzure2019': azur19 + 'SQL_Database_generic.svg', 1263 'AzureSQLDataWarehouseAzure2019': azur19 + 'SQL_DataWarehouse.svg', 1264 'SQLManagedInstancesAzure2019': azur19 + 'SQL_Managed_Instances.svg', 1265 'SQLServersAzure2019': azur19 + 'SQL_Servers.svg', 1266 'SQLStretchDatabaseAzure2019': azur19 + 'SQL_Stretch_Database.svg', 1267 'SQLServerStretchDatabasesAzure2019': azur19 + 'dep/SQL_Server_Stretch_DB.svg', 1268 'SQLQueryPerformanceCheckAzure2019': azur19 + 'SQLQueryPerformanceCheck.svg', 1269 'SSDAzure2019': azur19 + 'SSD.svg', 1270 'StackOverflowAzure2019': azur19 + 'StackOverflow.svg', 1271 'StorageAccountsAzure2019': azur19 + 'Storage_Accounts.svg', 1272 'StorageExplorerAzure2019': azur19 + 'Storage_Explorer.svg', 1273 'StorageSyncServicesAzure2019': azur19 + 'Storage_sync_service.svg', 1274 'StorageAzure2019': azur19 + 'Storage.svg', 1275 'StorageAzureFilesAzure2019': azur19 + 'StorageAzureFiles.svg', 1276 'StorageContainerAzure2019': azur19 + 'StorageContainer.svg', 1277 'StorageQueueAzure2019': azur19 + 'StorageQueue.svg', 1278 'StorageReplicaAzure2019': azur19 + 'StorageReplica.svg', 1279 'MarketplaceAzure2019': azur19 + 'Store_Marketplace.svg', 1280 'StorSimpleDataManagersAzure2019': azur19 + 'StorSimple_Data_Managers.svg', 1281 'AzureStorSimpleDeviceManagersAzure2019': azur19 + 'StorSimple.svg', 1282 'StorSimpleDeviceManagersAzure2019': azur19 + 'StorSimple.svg', 1283 'StreamAnalyticsJobsAzure2019': azur19 + 'Stream_Analytics.svg', 1284 'SubnetAzure2019': azur19 + 'Subnet.svg', 1285 'HelpSupportAzure2019': azur19 + 'Support_2.svg', 1286 'SupportRequestsAzure2019': azur19 + 'Support_Requests.svg', 1287 'SupportAzure2019': azur19 + 'Support.svg', 1288 'TableStorageAzure2019': azur19 + 'Table_Storage.svg', 1289 'TagAzure2019': azur19 + 'Tag.svg', 1290 'TagsAzure2019': azur19 + 'Tags.svg', 1291 'TaskAzure2019': azur19 + 'Task.svg', 1292 'TasksAzure2019': azur19 + 'Tasks.svg', 1293 'TasksPolychromaticAzure2019': azur19 + 'TasksPolychromatic.svg', 1294 'TaskVMAzure2019': azur19 + 'TaskVM.svg', 1295 'TaxAzure2019': azur19 + 'Tax.svg', 1296 'TeamProjectAzure2019': azur19 + 'TeamProject.svg', 1297 'TemplatesAzure2019': azur19 + 'Templates.svg', 1298 'TenantStatusAzure2019': azur19 + 'Tenant_Status.svg', 1299 'TFSVCRepositoryAzure2019': azur19 + 'TFSVCRepository.svg', 1300 'AzureTimeSeriesInsightsEnvironmentsAzure2019': azur19 + 'Time_Series_Insights_environments.svg', 1301 'TimeSeriesInsightsAzure2019': azur19 + 'TimeSeriesInsights.svg', 1302 'ToolboxAzure2019': azur19 + 'Toolbox.svg', 1303 'ToolsAzure2019': azur19 + 'Tools.svg', 1304 'TrafficManagerProfilesAzure2019': azur19 + 'Traffic_Manager.svg', 1305 'TrafficManagerDisabledAzure2019': azur19 + 'TrafficManagerDisabled.svg', 1306 'TrafficManagerEnabledAzure2019': azur19 + 'TrafficManagerEnabled.svg', 1307 'TwoUserIconAzure2019': azur19 + 'Two_User_Icon.svg', 1308 'UnidentifiedFeatureObjectAzure2019': azur19 + 'Unidentified_Feature_Object.svg', 1309 'UserHealthIconAzure2019': azur19 + 'User_Health_Icon.svg', 1310 'UserPrivacyAzure2019': azur19 + 'User_Privacy.svg', 1311 'UserResourceAzure2019': azur19 + 'User_Resource.svg', 1312 'RouteTablesAzure2019': azur19 + 'UserDefinedRoute.svg', 1313 'VariablesAzure2019': azur19 + 'Variables.svg', 1314 'VersionsAzure2019': azur19 + 'Versions.svg', 1315 'VirtualClustersAzure2019': azur19 + 'Virtual_Clusters.svg', 1316 'VirtualDatacenterAzure2019': azur19 + 'Virtual_Datacenter.svg', 1317 'VMClassicAzure2019': azur19 + 'Virtual_Machine_2.svg', 1318 'VMAzure2019': azur19 + 'Virtual_Machine.svg', 1319 'AvailabilitySetsAzure2019': azur19 + 'Virtual_Machines_Availability_Set.svg', 1320 'VirtualMachinesLinuxAzure2019': azur19 + 'Virtual_Machines_Linux.svg', 1321 'VirtualNetworkClassicAzure2019': azur19 + 'Virtual_Network_Classic.svg', 1322 'VirtualNetworksAzure2019': azur19 + 'Virtual_Network.svg', 1323 'VirtualWANsAzure2019': azur19 + 'Virtual_WANs.svg', 1324 'VirtualMachineLinuxAzure2019': azur19 + 'VirtualMachineLinux.svg', 1325 'VMWindowsAzure2019': azur19 + 'VirtualMachineWindows.svg', 1326 'VisualStudioTeamServicesCodePlexsourceAzure2019': azur19 + 'Visual_Studio_Team_Services_CodePlex_source.svg', 1327 'VMImagesAzure2019': azur19 + 'VM_Images.svg', 1328 'VMLinuxNonAzureAzure2019': azur19 + 'VM_Linux_Non_Azure.svg', 1329 'VMLinuxAzure2019': azur19 + 'VM_Linux.svg', 1330 'VMScaleSetsAzure2019': azur19 + 'VM_Scale_Set.svg', 1331 'VMWindowsNonAzureAzure2019': azur19 + 'VM_Windows_Non_Azure.svg', 1332 'VMScaleAzure2019': azur19 + 'VMScale.svg', 1333 'VirtualNetworkGatewaysAzure2019': azur19 + 'VPN_Gateway.svg', 1334 'VPNPointToSiteAzure2019': azur19 + 'VPNPointToSite.svg', 1335 'VPNSiteToSiteAzure2019': azur19 + 'VPNSiteToSite.svg', 1336 'WebAppFirewallAzure2019': azur19 + 'Web_App_Firewall.svg', 1337 'WebAppWebJobsAzure2019': azur19 + 'WebApp_WebJobs.svg', 1338 'UmbracoAzure2019': azur19 + 'WebAppUmbraco.svg', 1339 'WordPressAzure2019': azur19 + 'WebAppWordPress.svg', 1340 'WebEnvironmentAzure2019': azur19 + 'WebEnvironment.svg', 1341 'WebhooksAzure2019': azur19 + 'Webhooks.svg', 1342 'WebHostingAzure2019': azur19 + 'WebHosting.svg', 1343 'AppServicePlansAzure2019': azur19 + 'WebHosting.svg', 1344 'WebNetworkAzure2019': azur19 + 'WebNetwork.svg', 1345 'WebsitePowerAzure2019': azur19 + 'WebsitePower.svg', 1346 'WebsiteReplicatorAzure2019': azur19 + 'WebsiteReplicator.svg', 1347 'WebsiteSettingsAzure2019': azur19 + 'WebsiteSettings.svg', 1348 'WebsiteStagingAzure2019': azur19 + 'WebsiteStaging.svg', 1349 'WebSlotsAzure2019': azur19 + 'WebSlots.svg', 1350 'WebTestAzure2019': azur19 + 'WebTest.svg', 1351 'Windows10IoTCoreServicesAzure2019': azur19 + 'Windows_10_IoT_Core_Services.svg', 1352 'WorkflowAzure2019': azur19 + 'Workflow.svg', 1353 'WrenchAzure2019': azur19 + 'Wrench.svg', 1354 'XboxControllerAzure2019': azur19 + 'XboxController.svg', 1355 'HockeyAppAzure2019' : 'shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;shape=mxgraph.mscae.cloud.hockeyapp;fillColor=#0079D6;pointerEvents=1', 1356 'AppServiceLogicAppAzure2019': azur19 + 'dep/App_Service_Logic_App.svg', 1357 //'ApplicationGatewayAzure2019': azur19 + 'dep/Application_Gateway.svg', 1358 'ContentDeliveryNetworkAzure2019': azur19 + 'dep/Content_Delivery_Network.svg', 1359 //'DataLakeAnalyticsAzure2019': azur19 + 'dep/Data_Lake_Analytics.svg', 1360 'DataLakeStoreAzure2019': azur19 + 'dep/Data_Lake_Store.svg', 1361 //'DataLakeAzure2019': azur19 + 'dep/Data_Lake.svg', 1362 //'DataWarehouseAzure2019': azur19 + 'dep/DataWarehouse.svg', 1363 'AzureInformationProtectionAzure2019' : 'aspect=fixed;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;shape=mxgraph.mscae.cloud.azure_rights_management_rms;fillColor=#58B4D9;', 1364 'IoTCentralApplicationsAzure2019' : 'aspect=fixed;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;shape=mxgraph.mscae.cloud.central;fillColor=#0079D6;pointerEvents=1', 1365 1366//Cisco Basic 1367 'Cisco_cisco_androgenous_person' : s + 'cisco.people.androgenous_person;' + c, 1368 'Cisco_cisco_atm_switch' : s + 'cisco.switches.atm_switch;' + c, 1369 'Cisco_cisco_cloud' : s + 'cisco.storage.cloud;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897;fillColor=#ffffff', 1370 'Cisco_cisco_fileserver' : s + 'cisco.servers.fileserver;' + c, 1371 'Cisco_cisco_firewall' : s + 'cisco.security.firewall;' + c, 1372 'Cisco_cisco_generic_building' : s + 'cisco.buildings.generic_building;' + c, 1373 'Cisco_cisco_laptop' : s + 'cisco.computers_and_peripherals.laptop;' + c, 1374 'Cisco_cisco_lock' : s + 'cisco.security.lock;' + c, 1375 'Cisco_cisco_microwebserver' : s + 'cisco.servers.microwebserver;' + c, 1376 'Cisco_cisco_pc' : s + 'cisco.computers_and_peripherals.pc;' + c, 1377 'Cisco_cisco_pda' : s + 'cisco.misc.pda;' + c, 1378 'Cisco_cisco_phone' : s + 'cisco.modems_and_phones.hootphone;' + c, 1379 'Cisco_cisco_printer' : s + 'cisco.computers_and_peripherals.printer;' + c, 1380 'Cisco_cisco_relational_database' : s + 'cisco.storage.relational_database;' + c, 1381 'Cisco_cisco_router' : s + 'cisco.routers.router;' + c, 1382 'Cisco_cisco_standing_man' : s + 'cisco.people.standing_man;' + c, 1383 'Cisco_cisco_standing_woman' : s + 'cisco.people.standing_woman;' + c, 1384 'Cisco_cisco_ups' : s + 'cisco.misc.ups;' + c, 1385 'Cisco_cisco_wireless_router' : s + 'cisco.routers.wireless_router;' + c, 1386//Cisco Extended 1387 'Cisco_cisco_100baset_hub' : s + 'cisco.hubs_and_gateways.100baset_hub;' + c, 1388 'Cisco_cisco_10700' : s + 'cisco.routers.10700;' + c, 1389 'Cisco_cisco_10GE_FCoE' : s + 'cisco.controllers_and_modules.10ge_fcoe;' + c, 1390 'Cisco_cisco_15200' : s + 'cisco.misc.15200;' + c, 1391 'Cisco_cisco_3174__desktop_' : s + 'cisco.controllers_and_modules.3174_(desktop)_cluster_controller;' + c, 1392 'Cisco_cisco_3200_mobile_access_router' : s + 'cisco.routers.mobile_access_router;' + c, 1393 'Cisco_cisco_3x74__floor_' : s + 'cisco.controllers_and_modules.3x74_(floor)_cluster_controller;' + c, 1394 'Cisco_cisco_6700_series' : s + 'cisco.misc.6700_series;' + c, 1395 'Cisco_cisco_7500ars__7513_' : s + 'cisco.misc.7500ars_(7513);' + c, 1396// 'Cisco_cisco_access_gateway' NA 1397 'Cisco_cisco_accesspoint' : s + 'cisco.misc.access_point;' + c, 1398 'Cisco_cisco_ace' : s + 'cisco.misc.ace;' + c, 1399 'Cisco_cisco_ACS' : s + 'cisco.misc.acs;' + c, 1400 'Cisco_cisco_adm' : s + 'cisco.misc.adm;' + c, 1401 'Cisco_cisco_antenna' : s + 'cisco.wireless.antenna;' + c, 1402 'Cisco_cisco_asic_processor' : s + 'cisco.misc.asic_processor;' + c, 1403 'Cisco_cisco_ASR_1000_Series' : s + 'cisco.misc.asr_1000_series;' + c, 1404 'Cisco_cisco_ata' : s + 'cisco.misc.ata;' + c, 1405 'Cisco_cisco_atm_3800' : s + 'cisco.misc.atm_3800;' + c, 1406 'Cisco_cisco_atm_fast_gigabit_etherswitch' : s + 'cisco.switches.atm_fast_gigabit_etherswitch;' + c, 1407 'Cisco_cisco_atm_router' : s + 'cisco.routers.atm_router;' + c, 1408 'Cisco_cisco_atm_tag_switch_router' : s + 'cisco.routers.atm_tag_switch_router;' + c, 1409 'Cisco_cisco_avs' : s + 'cisco.misc.avs;' + c, 1410 'Cisco_cisco_AXP' : s + 'cisco.misc.axp;' + c, 1411// 'Cisco_cisco_bbfw_media' NA 1412// 'Cisco_cisco_bbfw' NA 1413 'Cisco_cisco_bbsm' : s + 'cisco.misc.bbsm;' + c, 1414 'Cisco_cisco_branch_office' : s + 'cisco.buildings.branch_office;' + c, 1415 'Cisco_cisco_breakout_box' : s + 'cisco.misc.breakout_box;' + c, 1416 'Cisco_cisco_bridge' : s + 'cisco.misc.bridge;' + c, 1417 'Cisco_cisco_broadband_router' : s + 'cisco.routers.broadcast_router;' + c, 1418 'Cisco_cisco_bts_10200' : s + 'cisco.misc.bts_10200;' + c, 1419 'Cisco_cisco_cable_modem' : s + 'cisco.modems_and_phones.cable_modem;' + c, 1420 'Cisco_cisco_callmanager' : s + 'cisco.misc.call_manager;' + c, 1421 'Cisco_cisco_car' : s + 'cisco.misc.car;' + c, 1422 'Cisco_cisco_carrier_routing_system' : s + 'cisco.misc.carrier_routing_system;' + c, 1423 'Cisco_cisco_cddi_fddi' : s + 'cisco.misc.cddi_fddi;' + c, 1424 'Cisco_cisco_cdm' : s + 'cisco.misc.cdm;' + c, 1425 'Cisco_cisco_cellular_phone' : s + 'cisco.modems_and_phones.cell_phone;' + c, 1426 'Cisco_cisco_centri_firewall' : s + 'cisco.security.centri_firewall;' + c, 1427 'Cisco_cisco_cisco_1000' : s + 'cisco.misc.cisco_1000;' + c, 1428 'Cisco_cisco_cisco_asa_5500' : s + 'cisco.misc.asa_5500;' + c, 1429 'Cisco_cisco_cisco_ca' : s + 'cisco.misc.cisco_ca;' + c, 1430 'Cisco_cisco_cisco_file_engine' : s + 'cisco.storage.cisco_file_engine;' + c, 1431 'Cisco_cisco_cisco_hub' : s + 'cisco.hubs_and_gateways.cisco_hub;' + c, 1432 'Cisco_cisco_ciscosecurity' : s + 'cisco.security.cisco_security;' + c, 1433// 'Cisco_cisco_Cisco_telepresence_manager' NA 1434 'Cisco_cisco_cisco_unified_presence_server' : s + 'cisco.servers.cisco_unified_presence_server;' + c, 1435 'Cisco_cisco_cisco_unityexpress' : s + 'cisco.misc.cisco_unity_express;' + c, 1436 'Cisco_cisco_ciscoworks' : s + 'cisco.misc.cisco_works;' + c, 1437 'Cisco_cisco_class_4_5_switch' : s + 'cisco.switches.class_4_5_switch;' + c, 1438 'Cisco_cisco_communications_server' : s + 'cisco.servers.communications_server;' + c, 1439 'Cisco_cisco_contact_center' : s + 'cisco.misc.contact_center;' + c, 1440 'Cisco_cisco_content_engine__cache_director_' : s + 'cisco.directors.content_engine_(cache_director);' + c, 1441 'Cisco_cisco_content_service_router' : s + 'cisco.routers.content_service_router;' + c, 1442 'Cisco_cisco_content_service_switch_1100' : s + 'cisco.switches.content_service_switch_1100;' + c, 1443 'Cisco_cisco_content_switch_module' : s + 'cisco.controllers_and_modules.content_switch_module;' + c, 1444 'Cisco_cisco_content_switch' : s + 'cisco.switches.content_switch;' + c, 1445 'Cisco_cisco_content_transformation_engine__cte_' : s + 'cisco.misc.content_transformation_engine_(cte);' + c, 1446 'Cisco_cisco_cs_mars' : s + 'cisco.misc.cs-mars;' + c, 1447 'Cisco_cisco_csm_s' : s + 'cisco.misc.csm-s;' + c, 1448 'Cisco_cisco_csu_dsu' : s + 'cisco.misc.csu_dsu;' + c, 1449 'Cisco_cisco_CUBE' : s + 'cisco.misc.cube;' + c, 1450 'Cisco_cisco_detector' : s + 'cisco.misc.detector;' + c, 1451 'Cisco_cisco_director_class_fibre_channel_director' : s + 'cisco.directors.director-class_fibre_channel_director;' + c, 1452 'Cisco_cisco_directory_server' : s + 'cisco.servers.directory_server;' + c, 1453 'Cisco_cisco_diskette' : s + 'cisco.storage.diskette;' + c, 1454 'Cisco_cisco_distributed_director' : s + 'cisco.directors.distributed_director;' + c, 1455 'Cisco_cisco_dot_dot' : s + 'cisco.misc.dot-dot;' + c, 1456 'Cisco_cisco_dpt' : s + 'cisco.misc.dpt;' + c, 1457 'Cisco_cisco_dslam' : s + 'cisco.misc.dslam;' + c, 1458 'Cisco_cisco_dual_mode_ap' : s + 'cisco.misc.dual_mode;' + c, 1459 'Cisco_cisco_dwdm_filter' : s + 'cisco.misc.dwdm_filter;' + c, 1460 'Cisco_cisco_end_office' : s + 'cisco.buildings.end_office;' + c, 1461 'Cisco_cisco_fax' : s + 'cisco.modems_and_phones.fax;' + c, 1462 'Cisco_cisco_fc_storage' : s + 'cisco.storage.fc_storage;' + c, 1463 'Cisco_cisco_fddi_ring' : s + 'cisco.misc.fddi_ring;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897;', 1464 'Cisco_cisco_fibre_channel_disk_subsystem' : s + 'cisco.storage.fibre_channel_disk_subsystem;' + c, 1465 'Cisco_cisco_fibre_channel_fabric_switch' : s + 'cisco.switches.fibre_channel_fabric_switch;' + c, 1466 'Cisco_cisco_file_cabinet' : s + 'cisco.storage.file_cabinet;' + c, 1467 'Cisco_cisco_file_server' : s + 'cisco.servers.file_server;' + c, 1468 'Cisco_cisco_firewall_service_module__fwsm_' : s + 'cisco.controllers_and_modules.firewall_service_module_(fwsm);' + c, 1469 'Cisco_cisco_front_end_processor' : s + 'cisco.misc.front_end_processor;' + c, 1470 'Cisco_cisco_gatekeeper' : s + 'cisco.security.gatekeeper;strokeColor=#036897;', 1471 'Cisco_cisco_general_applicance' : s + 'cisco.misc.general_appliance;' + c, 1472 'Cisco_cisco_generic_gateway' : s + 'cisco.hubs_and_gateways.generic_gateway;' + c, 1473 'Cisco_cisco_generic_processor' : s + 'cisco.misc.generic_processor;' + c, 1474 'Cisco_cisco_generic_softswitch' : s + 'cisco.switches.generic_softswitch;' + c, 1475 'Cisco_cisco_gigabit_switch_atm_tag_router' : s + 'cisco.routers.gigabit_switch_atm_tag_router;' + c, 1476 'Cisco_cisco_government_building' : s + 'cisco.buildings.government_building;' + c, 1477 'Cisco_cisco_Ground_terminal' : s + 'cisco.wireless.ground_terminal;' + c, 1478 'Cisco_cisco_guard' : s + 'cisco.security.guard;' + c, 1479 'Cisco_cisco_handheld' : s + 'cisco.misc.handheld;' + c, 1480 'Cisco_cisco_hootphone' : s + 'cisco.modems_and_phones.hootphone;' + c, 1481 'Cisco_cisco_host' : s + 'cisco.servers.host;' + c, 1482 'Cisco_cisco_hp_mini' : s + 'cisco.misc.hp_mini;' + c, 1483 'Cisco_cisco_h' : s + 'cisco.misc.h_323;' + c, 1484 'Cisco_cisco_hub' : s + 'cisco.hubs_and_gateways.hub;' + c, 1485 'Cisco_cisco_iad_router' : s + 'cisco.routers.iad_router;' + c, 1486 'Cisco_cisco_ibm_mainframe' : s + 'cisco.computers_and_peripherals.ibm_mainframe;' + c, 1487 'Cisco_cisco_ibm_mini_as400' : s + 'cisco.computers_and_peripherals.ibm_mini_as400;' + c, 1488 'Cisco_cisco_ibm_tower' : s + 'cisco.computers_and_peripherals.ibm_tower;' + c, 1489 'Cisco_cisco_icm' : s + 'cisco.misc.icm;' + c, 1490 'Cisco_cisco_ics' : s + 'cisco.misc.ics;' + c, 1491 'Cisco_cisco_intelliswitch_stack' : s + 'cisco.switches.intelliswitch_stack;' + c, 1492 'Cisco_cisco_ios_firewall' : s + 'cisco.security.ios_firewall;' + c, 1493 'Cisco_cisco_ios_slb' : s + 'cisco.misc.ios_slb;' + c, 1494 'Cisco_cisco_ip_communicator' : s + 'cisco.misc.ip_communicator;' + c, 1495 'Cisco_cisco_ip_dsl' : s + 'cisco.misc.ip_dsl;' + c, 1496 'Cisco_cisco_ip_phone' : s + 'cisco.modems_and_phones.ip_phone;' + c, 1497 'Cisco_cisco_ip' : s + 'cisco.misc.ip;' + c, 1498 'Cisco_cisco_iptc' : s + 'cisco.misc.iptc;' + c, 1499 'Cisco_cisco_ip_telephony_router' : s + 'cisco.routers.ip_telephony_router;' + c, 1500 'Cisco_cisco_iptv_content_manager' : s + 'cisco.misc.iptv_content_manager;' + c, 1501 'Cisco_cisco_iptv_server' : s + 'cisco.servers.iptv_server;' + c, 1502 'Cisco_cisco_iscsi_router' : s + 'cisco.routers.isci_router;' + c, 1503 'Cisco_cisco_isdn_switch' : s + 'cisco.switches.isdn_switch;' + c, 1504 'Cisco_cisco_itp' : s + 'cisco.misc.itp;' + c, 1505 'Cisco_cisco_jbod' : s + 'cisco.misc.jbod;' + c, 1506 'Cisco_cisco_key' : s + 'cisco.misc.key;' + c, 1507 'Cisco_cisco_keys' : s + 'cisco.misc.keys;' + c, 1508 'Cisco_cisco_lan_to_lan' : s + 'cisco.misc.lan_to_lan;' + c, 1509 'Cisco_cisco_layer_2_remote_switch' : s + 'cisco.switches.layer_2_remote_switch;' + c, 1510 'Cisco_cisco_layer_3_switch' : s + 'cisco.switches.layer_3_switch;' + c, 1511 'Cisco_cisco_lightweight_ap' : s + 'cisco.misc.lightweight_ap;' + c, 1512 'Cisco_cisco_localdirector' : s + 'cisco.directors.localdirector;' + c, 1513 'Cisco_cisco_longreach_cpe' : s + 'cisco.misc.longreach_cpe;' + c, 1514 'Cisco_cisco_macintosh' : s + 'cisco.computers_and_peripherals.macintosh;' + c, 1515 'Cisco_cisco_mac_woman' : s + 'cisco.people.mac_woman;' + c, 1516 'Cisco_cisco_man_woman' : s + 'cisco.people.man_woman;' + c, 1517 'Cisco_cisco_mas_gateway' : s + 'cisco.hubs_and_gateways.mas_gateway;' + c, 1518 'Cisco_cisco_mau' : s + 'cisco.misc.mau;' + c, 1519 'Cisco_cisco_mcu' : s + 'cisco.misc.mcu;' + c, 1520 'Cisco_cisco_mdu' : s + 'cisco.buildings.mdu;' + c, 1521 'Cisco_cisco_me_1100' : s + 'cisco.misc.me1100;' + c, 1522 'Cisco_cisco_Mediator' : s + 'cisco.misc.mediator;' + c, 1523 'Cisco_cisco_meetingplace' : s + 'cisco.misc.meetingplace;' + c, 1524 'Cisco_cisco_mesh_ap' : s + 'cisco.misc.mesh_ap;' + c, 1525 'Cisco_cisco_metro_1500' : s + 'cisco.misc.metro_1500;' + c, 1526 'Cisco_cisco_mgx_8000_multiservice_switch' : s + 'cisco.switches.mgx_8000_multiservice_switch;' + c, 1527 'Cisco_cisco_microphone' : s + 'cisco.computers_and_peripherals.microphone;' + c, 1528 'Cisco_cisco_mini_vax' : s + 'cisco.misc.mini_vax;' + c, 1529 'Cisco_cisco_mobile_access_ip_phone' : s + 'cisco.modems_and_phones.mobile_access_ip_phone;' + c, 1530 'Cisco_cisco_mobile_access_router' : s + 'cisco.routers.mobile_access_router;' + c, 1531 'Cisco_cisco_modem' : s + 'cisco.modems_and_phones.modem;' + c, 1532 'Cisco_cisco_moh_server' : s + 'cisco.servers.moh_server;' + c, 1533 'Cisco_cisco_MSE' : s + 'cisco.misc.mse;' + c, 1534 'Cisco_cisco_mulitswitch_device' : s + 'cisco.switches.multiswitch_device;' + c, 1535 'Cisco_cisco_multi_fabric_server_switch' : s + 'cisco.switches.multi-fabric_server_switch;' + c, 1536 'Cisco_cisco_multilayer_remote_switch' : s + 'cisco.switches.multilayer_remote_switch;' + c, 1537 'Cisco_cisco_mux' : s + 'cisco.misc.mux;' + c, 1538 'Cisco_cisco_MXE' : s + 'cisco.misc.mxe;' + c, 1539 'Cisco_cisco_nac_appliance' : s + 'cisco.misc.nac_appliance;' + c, 1540 'Cisco_cisco_NCE' : s + 'cisco.misc.nce;' + c, 1541 'Cisco_cisco_NCE_router' : s + 'cisco.routers.nce_router;' + c, 1542 'Cisco_cisco_netflow_router' : s + 'cisco.routers.netflow_router;' + c, 1543 'Cisco_cisco_netranger' : s + 'cisco.misc.netranger;' + c, 1544 'Cisco_cisco_netsonar' : s + 'cisco.misc.netsonar;' + c, 1545 'Cisco_cisco_network_management' : s + 'cisco.misc.network_management;' + c, 1546 'Cisco_cisco_Nexus_1000' : s + 'cisco.misc.nexus_1000;' + c, 1547 'Cisco_cisco_Nexus_2000' : s + 'cisco.misc.nexus_2000_fabric_extender;' + c, 1548 'Cisco_cisco_Nexus_5000' : s + 'cisco.misc.nexus_5000;' + c, 1549 'Cisco_cisco_Nexus_7000' : s + 'cisco.misc.nexus_7000;' + c, 1550 'Cisco_cisco_octel' : s + 'cisco.misc.octel;' + c, 1551 'Cisco_cisco_ons15500' : s + 'cisco.misc.ons15500;' + c, 1552 'Cisco_cisco_optical_amplifier' : s + 'cisco.misc.optical_amplifier;' + c, 1553 'Cisco_cisco_optical_services_router' : s + 'cisco.routers.optical_services_router;' + c, 1554 'Cisco_cisco_optical_transport' : s + 'cisco.misc.optical_transport;' + c, 1555 'Cisco_cisco_pad' : s + 'cisco.misc.pad_2;' + c, 1556 'Cisco_cisco_pad_x' : s + 'cisco.misc.pad_1;' + c, 1557 'Cisco_cisco_page_icon' : s + 'cisco.misc.page_icon;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897;', 1558 'Cisco_cisco_pbx' : s + 'cisco.misc.pbx;' + c, 1559 'Cisco_cisco_pbx_switch' : s + 'cisco.switches.pbx_switch;' + c, 1560 'Cisco_cisco_pc_adapter_card' : s + 'cisco.computers_and_peripherals.pc_adapter_card;' + c, 1561 'Cisco_cisco_pc_man' : s + 'cisco.people.pc_man;' + c, 1562 'Cisco_cisco_pc_routercard' : s + 'cisco.computers_and_peripherals.pc_routercard;' + c, 1563 'Cisco_cisco_pc_software' : s + 'cisco.misc.pc_software;' + c, 1564 'Cisco_cisco_pc_video' : s + 'cisco.misc.pc_video;' + c, 1565 'Cisco_cisco_phone_fax' : s + 'cisco.modems_and_phones.phone-fax;' + c, 1566 'Cisco_cisco_pix_firewall' : s + 'cisco.security.pix_firewall;' + c, 1567 'Cisco_cisco_pmc' : s + 'cisco.misc.pmc;' + c, 1568 'Cisco_cisco_programmable_switch' : s + 'cisco.switches.programmable_switch;' + c, 1569 'Cisco_cisco_protocol_translator' : s + 'cisco.misc.protocol_translator;' + c, 1570 'Cisco_cisco_pxf' : s + 'cisco.misc.pxf;' + c, 1571 'Cisco_cisco_radio_tower' : s + 'cisco.wireless.radio_tower;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897', 1572 'Cisco_cisco_ratemux' : s + 'cisco.misc.ratemux;' + c, 1573 'Cisco_cisco_repeater' : s + 'cisco.misc.repeater;' + c, 1574 'Cisco_cisco_RF_modem' : s + 'cisco.modems_and_phones.rf_modem;' + c, 1575 'Cisco_cisco_router_firewall' : s + 'cisco.security.router_firewall;' + c, 1576 'Cisco_cisco_routerin_building' : s + 'cisco.routers.router_in_building;' + c, 1577 'Cisco_cisco_router_with_silicon_switch' : s + 'cisco.routers.router_with_silicon_switch;' + c, 1578 'Cisco_cisco_route_switch_processor' : s + 'cisco.misc.route_switch_processor;' + c, 1579 'Cisco_cisco_rpsrps' : s + 'cisco.misc.rpsrps;' + c, 1580 'Cisco_cisco_running_man' : s + 'cisco.people.running_man;' + c, 1581 'Cisco_cisco_sattelite_dish' : s + 'cisco.wireless.satellite_dish;' + c, 1582 'Cisco_cisco_sattelite' : s + 'cisco.wireless.satellite;' + c, 1583 'Cisco_cisco_scanner' : s + 'cisco.computers_and_peripherals.scanner;' + c, 1584 'Cisco_cisco_server_switch' : s + 'cisco.switches.server_switch;' + c, 1585 'Cisco_cisco_server_with_router' : s + 'cisco.servers.server_with_router;' + c, 1586 'Cisco_cisco_service_control' : s + 'cisco.misc.service_control;' + c, 1587 'Cisco_cisco_Service_Module' : s + 'cisco.controllers_and_modules.service_module;' + c, 1588 'Cisco_cisco_Service_router' : s + 'cisco.routers.service_router;' + c, 1589 'Cisco_cisco_Services' : s + 'cisco.misc.services;' + c, 1590 'Cisco_cisco_Set_top_box' : s + 'cisco.misc.set_top_box;' + c, 1591 'Cisco_cisco_simulitlayer_switch' : s + 'cisco.switches.simultilayer_switch;' + c, 1592 'Cisco_cisco_sip_proxy_werver' : s + 'cisco.servers.sip_proxy_server;' + c, 1593 'Cisco_cisco_sitting_woman' : s + 'cisco.people.sitting_woman;' + c, 1594 'Cisco_cisco_small_business' : s + 'cisco.buildings.small_business;' + c, 1595 'Cisco_cisco_small_hub' : s + 'cisco.hubs_and_gateways.small_hub;' + c, 1596 'Cisco_cisco_softphone' : s + 'cisco.modems_and_phones.softphone;' + c, 1597 'Cisco_cisco_softswitch_pgw_mgc' : s + 'cisco.switches.softswitch_pgw_mgc;' + c, 1598 'Cisco_cisco_software_based_server' : s + 'cisco.servers.software_based_server;' + c, 1599// 'Cisco_cisco_Space_router' NA 1600 'Cisco_cisco_speaker' : s + 'cisco.computers_and_peripherals.speaker;' + c, 1601 'Cisco_cisco_ssc' : s + 'cisco.misc.ssc;' + c, 1602 'Cisco_cisco_ssl_terminator' : s + 'cisco.misc.ssl_terminator;' + c, 1603 'Cisco_cisco_standard_host' : s + 'cisco.servers.standard_host;' + c, 1604 'Cisco_cisco_stb' : s + 'cisco.misc.stb;' + c, 1605 'Cisco_cisco_storage_router' : s + 'cisco.routers.storage_router;' + c, 1606 'Cisco_cisco_storage_server' : s + 'cisco.servers.storage_server;' + c, 1607 'Cisco_cisco_stp' : s + 'cisco.misc.stp;' + c, 1608 'Cisco_cisco_streamer' : s + 'cisco.misc.streamer;' + c, 1609 'Cisco_cisco_sun_workstation' : s + 'cisco.computers_and_peripherals.workstation;' + c, 1610 'Cisco_cisco_supercomputer' : s + 'cisco.computers_and_peripherals.supercomputer;' + c, 1611 'Cisco_cisco_svx' : s + 'cisco.misc.svx;' + c, 1612 'Cisco_cisco_system_controller' : s + 'cisco.controllers_and_modules.system_controller;' + c, 1613 'Cisco_cisco_tablet' : s + 'cisco.computers_and_peripherals.tablet;' + c, 1614 'Cisco_cisco_tape_array' : s + 'cisco.storage.tape_array;' + c, 1615 'Cisco_cisco_tdm_router' : s + 'cisco.routers.tdm_router;' + c, 1616 'Cisco_cisco_telecommuter_house_pc' : s + 'cisco.buildings.telecommuter_house_pc;' + c, 1617 'Cisco_cisco_telecommuter_house' : s + 'cisco.buildings.telecommuter_house;' + c, 1618 'Cisco_cisco_telecommuter_icon' : s + 'cisco.misc.telecommuter_icon;' + c, 1619// 'Cisco_cisco_Telepresence_1000' NA 1620// 'Cisco_cisco_Telepresence_3000' NA 1621 'Cisco_cisco_Telepresence_3200' : s + 'cisco.misc.telepresence;' + c, 1622// 'Cisco_cisco_Telepresence_500' NA 1623 'Cisco_cisco_terminal' : s + 'cisco.computers_and_peripherals.terminal;' + c, 1624 'Cisco_cisco_token' : s + 'cisco.misc.token;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897', 1625 'Cisco_cisco_TP_MCU' : s + 'cisco.misc.tp_mcu;' + c, 1626 'Cisco_cisco_transpath' : s + 'cisco.misc.transpath;' + c, 1627 'Cisco_cisco_truck' : s + 'cisco.misc.truck;' + c, 1628 'Cisco_cisco_turret' : s + 'cisco.misc.turret;' + c, 1629 'Cisco_cisco_tv' : s + 'cisco.misc.tv;' + c, 1630 'Cisco_cisco_ubr910' : s + 'cisco.misc.ubr910;' + c, 1631 'Cisco_cisco_umg_series' : s + 'cisco.misc.umg_series;' + c, 1632 'Cisco_cisco_unity_server' : s + 'cisco.servers.unity_server;' + c, 1633 'Cisco_cisco_universal_gateway' : s + 'cisco.hubs_and_gateways.universal_gateway;' + c, 1634 'Cisco_cisco_university' : s + 'cisco.buildings.university;' + c, 1635 'Cisco_cisco_upc' : s + 'cisco.computers_and_peripherals.upc;' + c, 1636 'Cisco_cisco_vault' : s + 'cisco.misc.vault;' + c, 1637 'Cisco_cisco_video_camera' : s + 'cisco.computers_and_peripherals.video_camera;' + c, 1638 'Cisco_cisco_vip' : s + 'cisco.misc.vip;' + c, 1639 'Cisco_cisco_virtual_layer_switch' : s + 'cisco.switches.virtual_layer_switch;' + c, 1640 'Cisco_cisco_virtual_switch_controller__vsc3000_' : s + 'cisco.controllers_and_modules.virtual_switch_controller_(vsc3000);' + c, 1641 'Cisco_cisco_voice_atm_switch' : s + 'cisco.switches.voice_atm_switch;' + c, 1642 'Cisco_cisco_voice_commserver' : s + 'cisco.servers.voice_commserver;' + c, 1643 'Cisco_cisco_voice_router' : s + 'cisco.routers.voice_router;' + c, 1644 'Cisco_cisco_voice_switch' : s + 'cisco.switches.voice_switch;' + c, 1645 'Cisco_cisco_vpn_concentrator' : s + 'cisco.misc.vpn_concentrator;' + c, 1646 'Cisco_cisco_vpn_gateway' : s + 'cisco.hubs_and_gateways.vpn_gateway;' + c, 1647 'Cisco_cisco_VSS' : s + 'cisco.misc.vss;' + c, 1648 'Cisco_cisco_wae' : s + 'cisco.misc.wae;' + c, 1649 'Cisco_cisco_wavelength_router' : s + 'cisco.routers.wavelength_router;' + c, 1650 'Cisco_cisco_web_browser' : s + 'cisco.computers_and_peripherals.web_browser;' + c, 1651 'Cisco_cisco_web_cluster' : s + 'cisco.storage.web_cluster;' + c, 1652 'Cisco_cisco_wi_fi_tag' : s + 'cisco.wireless.wi-fi_tag;' + c, 1653 'Cisco_cisco_wireless_bridge' : s + 'cisco.wireless.wireless_bridge;' + c, 1654 'Cisco_cisco_wireless_location_appliance' : s + 'cisco.wireless.wireless_location_appliance;' + c, 1655 'Cisco_cisco_wireless' : s + 'cisco.wireless.wireless;' + c, 1656 'Cisco_cisco_wireless_transport' : s + 'cisco.wireless.wireless_transport;' + c, 1657 'Cisco_cisco_wism' : s + 'cisco.misc.wism;' + c, 1658 'Cisco_cisco_wlan_controller' : s + 'cisco.wireless.wlan_controller;' + c, 1659 'Cisco_cisco_workgroup_director' : s + 'cisco.directors.workgroup_director;' + c, 1660 'Cisco_cisco_workgroup_switch' : s + 'cisco.switches.workgroup_switch;' + c, 1661 'Cisco_cisco_workstation' : s + 'cisco.computers_and_peripherals.workstation;' + c, 1662 'Cisco_cisco_www_server' : s + 'cisco.servers.www_server;' + c, 1663//Computers and Monitors 1664 'NET_PC' : s + 'networks.pc;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1665 'NET_Virtual-PC' : s + 'networks.virtual_pc;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1666 'NET_Terminal' : s + 'networks.terminal;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1667 'NET_DataPipe' : s + 'networks.bus;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1668 'NET_SlateDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1669 'NET_TabletDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1670 'NET_Laptop' : s + 'networks.laptop;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1671 'NET_PDA' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1672 'NET_CRTMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1673 'NET_LCDMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1674//Detailed Network Diagrams 1675// 'NET_ABSwitch' NA 1676// 'NET_Repeater' NA 1677// 'NET_DiagnosticDevice' NA 1678// 'NET_CardReader' NA 1679// 'NET_PatchPanel' NA 1680 'NET_RadioTower' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1681// 'NET_BiometricReader' NA 1682 'NET_ExternalHardDrive' : s + 'networks.external_storage;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1683// 'NET_WebService' NA 1684// 'NET_FiberOptic' NA 1685 'NET_SatelliteDish' : s + 'networks.satellite_dish;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1686 'NET_Satellite' : s + 'networks.satellite;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1687// 'NET_VoIPPhone' NA 1688// 'NET_PBX' NA 1689// 'NET_MLPS' NA 1690//Basic Network Shapes 1691 'NET_WirelessAccessPoint' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#29AAE1;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1692 'NET_RingNetwork' : cs, 1693 'NET_Ethernet' : cs, 1694 'NET_Server' : s + 'networks.server;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1695// 'NET_ExternalMediaDrive' NA 1696 'NET_Mainframe' : s + 'networks.mainframe;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1697 'NET_Router' : s + 'networks.wireless_hub;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1698 'NET_Switch' : s + 'networks.switch;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1699 'NET_Firewall' : s + 'networks.firewall;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1700 'NET_User' : s + 'networks.user_male;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1701 'NET_CommLink' : s + 'networks.comm_link_edge;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1702 'NET_SuperComputer' : s + 'networks.supercomputer;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1703 'NET_VirtualServer' : s + 'networks.virtual_server;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1704 'NET_Printer' : s + 'networks.printer;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1705// 'NET_Plotter' NA 1706 'NET_Scanner' : s + 'networks.scanner;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1707 'NET_Copier' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1708// 'NET_FaxMachine' NA 1709 'NET_MultiFunctionMachine' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1710 'NET_Projector' : s + 'networks.video_projector;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1711 'NET_ProjectorScreen' : s + 'networks.video_projector_screen;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1712 'NET_Bridge' : s + 'networks.router;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1713 'NET_Hub' : s + 'networks.hub;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1714 'NET_Modem' : s + 'networks.modem;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1715 'NET_Telephone' : s + 'signs.tech.telephone_5;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1716 'NET_CellPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1717 'NET_SmartPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1718// 'NET_VideoPhone' NA 1719 'NET_Camera' : s + 'signs.tech.camera_2;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;', 1720// 'NET_VideoCamera' NA 1721//Server Racks 1722 'RackServerRack' : s + 'rackGeneral.container;container=1;collapsible=0;childLayout=rack;marginLeft=9;marginRight=9;marginTop=21;marginBottom=22;textColor=#000000;numDisp=off', 1723 'RackBlank' : s + 'rackGeneral.plate;strokeColor=#666666;labelPosition=left;align=right;spacingRight=15;fillColor=#e8e8e8', 1724 'RackRaidArray' : s + 'rack.cisco.cisco_carrier_packet_transport_50;labelPosition=left;align=right;spacingRight=15', 1725 'RackServer' : s + 'rack.oracle.sunfire_x4100;labelPosition=left;align=right;spacingRight=15', 1726 'RackEthernetSwitch' : s + 'rack.cisco.cisco_nexus_3016_switch;labelPosition=left;align=right;spacingRight=15', 1727 'RackPatchPanel' : s + 'rack.general.cat5e_rack_mount_patch_panel_24_ports;strokeColor=#666666;labelPosition=left;align=right;spacingRight=15', 1728 'RackRouter' : s + 'rack.cisco.cisco_asr_1001_router;labelPosition=left;align=right;spacingRight=15', 1729 'RackMonitor' : s + 'rack.ibm.ibm_1u_flat_panel_console_kit;labelPosition=left;align=right;spacingRight=15', 1730 'RackKeyboard' : s + 'rack.cisco.cisco_1905_serial_integrated_services_router;labelPosition=left;align=right;spacingRight=15', 1731 'RackPowerStrip' : s + 'rack.dell.power_strip;labelPosition=left;align=right;spacingRight=15', 1732 'RackPowerSupply' : s + 'rack.cisco.cisco_web_security_appliance_s170;labelPosition=left;align=right;spacingRight=15', 1733 'RackBridge' : s + 'rack.cisco.cisco_nexus_5548p_switch;labelPosition=left;align=right;spacingRight=15', 1734 'RackTapeDrive' : s + 'rack.ibm.ibm_1754_local_console_manager;labelPosition=left;align=right;spacingRight=15', 1735//Network 1736 'Image_network_server' : 'image;image=img/lib/clip_art/computers/Server_Tower_128x128.png;flipH=1', 1737 'Image_network_server_file' : 'image;image=img/lib/clip_art/computers/Server_128x128.png', 1738 'Image_network_server_net' : 'image;image=img/lib/clip_art/networking/Print_Server_128x128.png', 1739 'Image_network_server_net_large' : 'image;image=img/lib/clip_art/computers/Server_128x128.png', 1740 'Image_network_raid' : 'image;image=img/lib/clip_art/computers/Server_Tower_128x128.png;flipH=1', 1741 'Image_network_raid_large' : 'image;image=img/lib/clip_art/computers/Server_Tower_128x128.png;flipH=1', 1742 'Image_network_rack_server' : 'image;image=img/lib/clip_art/computers/Server_Rack_128x128.png', 1743 'Image_network_rack_tape' : 'image;image=img/lib/clip_art/computers/Server_Rack_Partial_128x128.png', 1744 'Image_network_printer_small' : 'image;image=img/lib/clip_art/computers/Printer_128x128.png;flipH=1', 1745 'Image_network_printer_large' : 'image;image=img/lib/clip_art/computers/Printer_128x128.png;flipH=1', 1746 'Image_network_printer_multipurpose' : 'image;image=img/lib/clip_art/computers/Printer_Commercial_128x128.png;flipH=1', 1747 'Image_network_copier_small' : 'image;image=img/lib/clip_art/computers/Printer_Commercial_128x128.png', 1748 'Image_network_copier_large' : 'image;image=img/lib/clip_art/computers/Printer_Commercial_128x128.png', 1749// 'Image_network_printer_largeformat' NA 1750 'Image_network_router' : 'image;image=img/lib/clip_art/networking/Router_128x128.png', 1751 'Image_network_router_wireless' : 'image;image=img/lib/clip_art/networking/Wireless_Router_128x128.png', 1752 'Image_network_ups' : 'image;image=img/lib/clip_art/networking/UPS_128x128.png', 1753//Electronics 1754// 'Image_electronics_speakers_2' NA 1755// 'Image_electronics_scanner_slide' NA 1756// 'Image_electronics_speakers_2_1' NA 1757// 'Image_electronics_speakers_5_1' NA 1758 'Image_electronics_lcd' : 'image;image=img/lib/clip_art/computers/Monitor_128x128.png', 1759 'Image_electronics_pda' : 'image;image=img/lib/clip_art/telecommunication/Palm_Treo_128x128.png', 1760 'Image_electronics_drive_cardreader' : 'image;image=img/lib/clip_art/finance/Credit_Card_128x128.png', 1761 'Image_electronics_camcorder' : 'image;image=img/lib/clip_art/networking/Ip_Camera_128x128.png', 1762// 'Image_electronics_headset' NA 1763// 'Image_electronics_calculator_simple' NA 1764// 'Image_electronics_scanner_flatbed' NA 1765 'Image_electronics_printer_photo' : 'image;image=img/lib/clip_art/computers/Printer_128x128.png;flipH=1', 1766// 'Image_electronics_scanner_photo' NA 1767// 'Image_electronics_projector' NA 1768 'Image_electronics_drive_firewire' : 'image;image=img/lib/clip_art/computers/Harddrive_128x128.png;flipH=1', 1769 'Image_electronics_drive_usb' : 'image;image=img/lib/clip_art/computers/Harddrive_128x128.png;flipH=1', 1770 'Image_electronics_modem_external' : 'image;image=img/lib/clip_art/networking/Modem_128x128.png;flipH=1', 1771// 'Image_electronics_tv_tuner_external' NA 1772// 'Image_electronics_mp3' NA 1773// 'Image_electronics_sound_box' NA 1774 'Image_electronics_lcd_wide' : 'image;image=img/lib/clip_art/computers/Monitor_128x128.png', 1775//Audio Equipment 1776// 'Image_audio_speakers_2' NA 1777// 'Image_audio_speakers_2_1' NA 1778// 'Image_audio_speakers_5_1' NA 1779// 'Image_audio_record_player' NA 1780// 'Image_audio_headset' NA 1781//Electrical 1782 'EE_Amplifier' : s + 'electrical.abstract.amplifier', 1783 'EE_OpAmp' : cs, 1784 'EE_ControlledAmp' : s + 'electrical.abstract.controlled_amplifier', 1785 'EE_Multiplexer' : 'shape=mxgraph.electrical.abstract.mux2', 1786 'EE_Demultiplexer' : 'shape=mxgraph.electrical.abstract.mux2;operation=demux', 1787 'EE_Capacitor1' : s + 'electrical.capacitors.capacitor_1', 1788 'EE_Capacitor2' : s + 'electrical.capacitors.capacitor_3', 1789 'EE_Diode' : s + 'electrical.diodes.diode', 1790 'EE_Resistor' : s + 'electrical.resistors.resistor_2', 1791 'EE_VarResistor' : s + 'electrical.resistors.variable_resistor_2', 1792 'EE_Potentiometer' : s + 'electrical.resistors.potentiometer_2', 1793 'EE_ProtGround' : s + 'electrical.signal_sources.protective_earth', 1794 'EE_SignalGround' : s + 'electrical.signal_sources.signal_ground', 1795 'EE_Transformer' : s + 'electrical.inductors.transformer_1', 1796 'EE_Inductor' : s + 'electrical.inductors.inductor_3', 1797 'EE_Variable Inductor' : s + 'electrical.inductors.variable_inductor', 1798 'EE_TwoWaySwitch' : s + 'electrical.electro-mechanical.2-way_switch', 1799 'EE_OnOffSwitch' : s + 'electrical.electro-mechanical.simple_switch', 1800 'EE_Loudspeaker' : s + 'electrical.electro-mechanical.loudspeaker', 1801 'EE_Motor' : s + 'electrical.electro-mechanical.motor_1', 1802 'EE_LED1' : s + 'electrical.opto_electronics.led_2', 1803 'EE_Lightbulb' : s + 'electrical.miscellaneous.light_bulb', 1804 'EE_IntegratedCircuit' : 'shape=mxgraph.electrical.logic_gates.dual_inline_ic', 1805//Power Sources 1806 'EE_AcSource' : s + 'electrical.signal_sources.ac_source;strokeWidth=1;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;', 1807 'EE_VoltageSource' : s + 'electrical.signal_sources.dc_source_3;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;', 1808 'EE_CurrentSource' : s + 'electrical.signal_sources.dc_source_2;direction=north;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;', 1809 'EE_ControlledCurrentSource' : s + 'electrical.signal_sources.dependent_source_2;direction=west;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;', 1810 'EE_ControlledVoltageSource' : s + 'electrical.signal_sources.dependent_source_3;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;', 1811 'EE_DcSource1' : s + 'electrical.miscellaneous.monocell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top', 1812 'EE_DcSource2' : s + 'electrical.miscellaneous.multicell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top', 1813 'EE_Vss' : s + 'electrical.signal_sources.vss2;verticalLabelPosition=top;verticalAlign=bottom;fontSize=24', 1814 'EE_Vdd' : s + 'electrical.signal_sources.vdd;verticalLabelPosition=bottom;verticalAlign=top', 1815//Transistors 1816 1817 'EE_BJT_NPN1' : s + 'electrical.transistors.pnp_transistor_1', 1818 'EE_BJT_NPN1_V2' : s + 'electrical.transistors.npn_transistor_1;', 1819 'EE_BJT_PNP1' : s + 'electrical.transistors.npn_transistor_1', 1820 'EE_BJT_PNP1_V2' : s + 'electrical.transistors.pnp_transistor_1', 1821 'EE_JFET_P' : s + 'electrical.transistors.p-channel_jfet_1;flipV=1', 1822 'EE_JFET_P_V2' : s + 'electrical.transistors.p-channel_jfet_1;flipV=1', 1823 'EE_JFET_N' : s + 'electrical.transistors.n-channel_jfet_1', 1824 'EE_JFET_N_V2' : s + 'electrical.transistors.n-channel_jfet_1', 1825 'EE_MOSFET_P1' : s + 'electrical.mosfets1.mosfet_ic_p;flipV=1', 1826 'EE_MOSFET_P1_V2' : s + 'electrical.mosfets1.mosfet_ic_p;flipV=1', 1827 'EE_MOSFET_P2' : s + 'electrical.mosfets1.mosfet_p_no_bulk', 1828 'EE_MOSFET_P2_V2' : s + 'electrical.mosfets1.mosfet_p_no_bulk', 1829 'EE_MOSFET_P3' : s + 'electrical.mosfets1.p-channel_mosfet_1;flipV=1', 1830 'EE_MOSFET_P3_V2' : s + 'electrical.mosfets1.p-channel_mosfet_1;flipV=1', 1831 'EE_MOSFET_N1' : s + 'electrical.mosfets1.mosfet_ic_n', 1832 'EE_MOSFET_N1_V2' : s + 'electrical.mosfets1.mosfet_ic_n', 1833 'EE_MOSFET_N2' : s + 'electrical.mosfets1.mosfet_n_no_bulk', 1834 'EE_MOSFET_N2_V2' : s + 'electrical.mosfets1.mosfet_n_no_bulk', 1835 'EE_MOSFET_N3' : s + 'electrical.mosfets1.n-channel_mosfet_1', 1836 'EE_MOSFET_N3_V2' : s + 'electrical.mosfets1.n-channel_mosfet_1', 1837//Relays 1838// 'EE_SPST' NA 1839// 'EE_SPDT' NA 1840// 'EE_DPST' NA 1841// 'EE_DPDT' NA 1842//Logic Gates 1843 'EE_AND' : s + 'electrical.logic_gates.and', 1844 'EE_OR' : s + 'electrical.logic_gates.or', 1845 'EE_Inverter' : s + 'electrical.logic_gates.inverter', 1846 'EE_NAND' : s + 'electrical.logic_gates.nand', 1847 'EE_NOR' : s + 'electrical.logic_gates.nor', 1848 'EE_XOR' : s + 'electrical.logic_gates.xor', 1849 'EE_NXOR' : s + 'electrical.logic_gates.xnor', 1850 'EE_DTypeRSFlipFlop' : s + 'electrical.logic_gates.d_type_rs_flip-flop', 1851 'EE_DTypeFlipFlop' : s + 'electrical.logic_gates.d_type_flip-flop', 1852 'EE_DTypeFlipFlopWithClear' : s + 'electrical.logic_gates.d_type_flip-flop_with_clear', 1853 'EE_RSLatch' : s + 'electrical.logic_gates.rs_latch', 1854 'EE_SyncRSLatch' : s + 'electrical.logic_gates.synchronous_rs_latch', 1855 'EE_TTypeFlipFlop' : s + 'electrical.logic_gates.t_type_flip-flop', 1856//Miscellaneous 1857 'EE_Plus' : s + 'ios7.misc.flagged', 1858 'EE_Negative' : 'shape=line', 1859 'EE_InverterContact' : 'ellipse', 1860 'EE_Voltmeter' : s + 'electrical.instruments.voltmeter', 1861 'EE_Ammeter' : s + 'electrical.instruments.ampermeter', 1862 'EE_SineWave' : s + 'electrical.waveforms.sine_wave', 1863 'EE_Sawtooth' : s + 'electrical.waveforms.sawtooth', 1864 'EE_SquareWave' : s + 'electrical.waveforms.square_wave', 1865//Messaging Systems 1866 'EIChannelBlock' : s + 'eip.messageChannel;verticalLabelPosition=bottom;verticalAlign=top', 1867 'EIMessageChannelBlock' : cs, 1868 'EIMessageBlock' : cs, 1869 'EIMessageRouterBlock' : s + 'eip.content_based_router;verticalLabelPosition=bottom;verticalAlign=top', 1870 'EIMessageTranslatorBlock' : s + 'eip.message_translator;verticalLabelPosition=bottom;verticalAlign=top', 1871 'EIMessageEndpointBlock' : cs, 1872//Messaging Channels 1873 'EIPublishSubscribeChannelBlock' : cs, 1874 'EIDatatypeChannelBlock' : cs, 1875 'EIInvalidMessageChannelBlock' : cs, 1876 'EIDeadLetterChannelBlock' : cs, 1877 'EIGuaranteedDeliveryBlock' : cs, 1878 'EIChannelAdapterBlock' : cs, 1879 'EIMessagingBridgeBlock' : s + 'eip.messaging_bridge;verticalLabelPosition=bottom;verticalAlign=top', 1880 'EIMessageBusBlock' : cs, 1881//Message Construction 1882 'EICommandMessageBlock' : cs, 1883 'EIDocumentMessageBlock' : cs, 1884 'EIEventMessageBlock' : cs, 1885 'EIRequestReplyBlock' : cs, 1886 'EIReturnAddressBlock' : cs, 1887 'EICorrelationIDBlock' : cs, 1888 'EIMessageSequenceBlock' : cs, 1889 'EIMessageExpirationBlock' : cs, 1890//Message Routing 1891 'EIContentBasedRouterBlock' : s + 'eip.content_based_router;verticalLabelPosition=bottom;verticalAlign=top', 1892 'EIMessageFilterBlock' : s + 'eip.message_filter;verticalLabelPosition=bottom;verticalAlign=top', 1893 'EIDynamicRouterBlock' : s + 'eip.dynamic_router;verticalLabelPosition=bottom;verticalAlign=top', 1894 'EIRecipientListBlock' : s + 'eip.recipient_list;verticalLabelPosition=bottom;verticalAlign=top', 1895 'EISplitterBlock' : s + 'eip.splitter;verticalLabelPosition=bottom;verticalAlign=top', 1896 'EIAggregatorBlock' : s + 'eip.aggregator;verticalLabelPosition=bottom;verticalAlign=top', 1897 'EIResequencerBlock' : s + 'eip.resequencer;verticalLabelPosition=bottom;verticalAlign=top', 1898 'EIComposedMessageBlock' : s + 'eip.composed_message_processor;verticalLabelPosition=bottom;verticalAlign=top', 1899 'EIRoutingSlipBlock' : s + 'eip.routing_slip;verticalLabelPosition=bottom;verticalAlign=top', 1900 'EIProcessManagerBlock' : s + 'eip.process_manager;verticalLabelPosition=bottom;verticalAlign=top', 1901 'EIMessageBrokerBlock' : cs, 1902//Message Transformation 1903 'EIEnvelopeWrapperBlock' : s + 'eip.envelope_wrapper;verticalLabelPosition=bottom;verticalAlign=top', 1904 'EIContentEnricherBlock' : s + 'eip.content_enricher;verticalLabelPosition=bottom;verticalAlign=top', 1905 'EIContentFilterBlock' : s + 'eip.content_filter;verticalLabelPosition=bottom;verticalAlign=top', 1906 'EIClaimCheckBlock' : s + 'eip.claim_check;verticalLabelPosition=bottom;verticalAlign=top', 1907 'EINormalizerBlock' : s + 'eip.normalizer;verticalLabelPosition=bottom;verticalAlign=top', 1908//Messaging Endpoints 1909 'EIMessagingGatewayBlock' : s + 'eip.messaging_gateway;verticalLabelPosition=bottom;verticalAlign=top', 1910 'EITransactionalClientBlock' : s + 'eip.transactional_client;verticalLabelPosition=bottom;verticalAlign=top', 1911 'EIPollingConsumerBlock' : s + 'eip.polling_consumer;verticalLabelPosition=bottom;verticalAlign=top', 1912 'EIEventDrivenConsumerBlock' : s + 'eip.event_driven_consumer;verticalLabelPosition=bottom;verticalAlign=top', 1913 'EICompetingConsumersBlock' : s + 'eip.competing_consumers;verticalLabelPosition=bottom;verticalAlign=top', 1914 'EIMessageDispatcherBlock' : s + 'eip.message_dispatcher;verticalLabelPosition=bottom;verticalAlign=top', 1915 'EISelectiveConsumerBlock' : s + 'eip.selective_consumer;verticalLabelPosition=bottom;verticalAlign=top', 1916 'EIDurableSubscriberBlock' : cs, 1917 'EIServiceActivatorBlock' : s + 'eip.service_activator;verticalLabelPosition=bottom;verticalAlign=top', 1918//System Management 1919 'EIControlBusBlock' : cs, 1920 'EIDetourBlock' : s + 'eip.detour;verticalLabelPosition=bottom;verticalAlign=top', 1921 'EIWireTapBlock' : s + 'eip.wire_tap;verticalLabelPosition=bottom;verticalAlign=top', 1922 'EIMessageHistoryBlock' : cs, 1923 'EIMessageStoreBlock' : s + 'eip.message_store;verticalLabelPosition=bottom;verticalAlign=top', 1924 'EISmartProxyBlock' : s + 'eip.smart_proxy;verticalLabelPosition=bottom;verticalAlign=top', 1925 'EITestMessageBlock' : s + 'eip.test_message;verticalLabelPosition=bottom;verticalAlign=top', 1926 'EIChannelPurgerBlock' : s + 'eip.channel_purger;verticalLabelPosition=bottom;verticalAlign=top', 1927//Google Cloud Platform 1928 'GCPIconComputeEngineBlock' : gcpIcon + 'compute_engine', 1929 'GCPIconAppEngineBlock' : gcpIcon + 'app_engine', 1930 'GCPIconContainerEngineBlock' : gcpIcon + 'container_engine', 1931 'GCPIconContainerRegistryBlock' : gcpIcon + 'container_registry', 1932 'GCPIconCloudFunctionsBlock' : gcpIcon + 'cloud_functions', 1933 'GCPIconCloudStorageBlock' : gcpIcon + 'cloud_storage', 1934 'GCPIconCloudSQLBlock' : gcpIcon + 'cloud_sql', 1935 'GCPIconCloudBigtableBlock' : gcpIcon + 'cloud_bigtable', 1936 'GCPIconCloudDatastoreBlock' : gcpIcon + 'cloud_datastore', 1937 'GCPIconPersistentDiskBlock' : gcpIcon + 'persistent_disk', 1938 'GCPIconCloudVirtualNetworkBlock' : ss + 'gcp.networking.cloud_virtual_network;verticalLabelPosition=bottom;verticalAlign=top', 1939 'GCPIconCloudLoadBalancingBlock' : gcpIcon + 'cloud_load_balancing', 1940 'GCPIconCloudCDNBlock' : gcpIcon + 'cloud_cdn', 1941 'GCPIconCloudInterconnectBlock' : gcpIcon + 'dedicated_interconnect', 1942 'GCPIconCloudInterconnectBlock2' : gcpIcon + 'dedicated_interconnect', 1943 'GCPIconCloudDNSBlock' : gcpIcon + 'cloud_dns', 1944 'GCPIconBigQueryBlock' : gcpIcon + 'bigquery', 1945 'GCPIconCloudDataflowBlock' : gcpIcon + 'cloud_dataflow', 1946 'GCPIconCloudDataprocBlock' : gcpIcon + 'cloud_dataproc', 1947 'GCPIconCloudDatalabBlock' : gcpIcon + 'cloud_datalab', 1948 'GCPIconCloudPubSubBlock' : gcpIcon + 'cloud_pubsub', 1949 'GCPIconGenomicsBlock' : gcpIcon + 'genomics', 1950 'GCPIconCloudMachineLearningServicesBlock' : gcpIcon + 'cloud_machine_learning', 1951 'GCPIconCloudMachineLearningServicesBlock2' : gcpIcon + 'cloud_machine_learning', 1952 'GCPIconVisionAPIBlock' : gcpIcon + 'cloud_vision_api', 1953 'GCPIconVisionAPIBlock2' : gcpIcon + 'cloud_vision_api', 1954 'GCPIconSpeechAPIBlock' : gcpIcon + 'cloud_speech_api', 1955 'GCPIconSpeechAPIBlock2' : gcpIcon + 'cloud_speech_api', 1956 'GCPIconNaturalLanguageAPIBlock' : gcpIcon + 'cloud_natural_language_api', 1957 'GCPIconNaturalLanguageAPIBlock2' : gcpIcon + 'cloud_natural_language_api', 1958 'GCPIconTranslateAPIBlock' : gcpIcon + 'cloud_translation_api', 1959 'GCPIconTranslateAPIBlock2' : gcpIcon + 'cloud_translation_api', 1960 'GCPIconStackdriverOverviewBlock' : gcpIcon + 'stackdriver', 1961 'GCPIconStackdriverOverviewBlock2' : gcpIcon + 'stackdriver', 1962 'GCPIconMonitoringBlock' : gcpIcon + 'cloud_deployment_manager', 1963 'GCPIconLoggingBlock' : gcpIcon + 'logging', 1964 'GCPIconErrorReportingBlock' : gcpIcon + 'error_reporting', 1965 'GCPIconTraceBlock' : gcpIcon + 'trace', 1966 'GCPIconDebuggerBlock' : gcpIcon + 'debugger', 1967 'GCPIconDeploymentManagerBlock' : gcpIcon + 'cloud_deployment_manager', 1968 'GCPIconDeploymentManagerBlock2' : gcpIcon + 'cloud_deployment_manager', 1969 'GCPIconCloudEndpointsBlock' : gcpIcon + 'cloud_endpoints', 1970 'GCPIconCloudToolsForPowerShellBlock' : gcpIcon + 'cloud_tools_for_powershell', 1971 'GCPIconCloudToolsForVisualStudioBlock' : gcpIcon + 'cloud_tools_for_powershell', 1972 'GCPIconCloudIAMBlock' : gcpIcon + 'cloud_iam', 1973 'GCPIconGCPLogoBlock' : gcpIcon + 'placeholder', 1974 'GCPIconGCPLogoBlock2' : gcpIcon + 'placeholder', 1975 'GCPIconBlankBlock' : gcpIcon + 'blue_hexagon', 1976 'GCPIconBlankBlock2' : gcpIcon + 'blue_hexagon', 1977 'GCPIconAPIAnalyticsBlock' : gcpIcon + 'api_analytics', 1978 'GCPIconApigeeAPIPlatformBlock' : gcpIcon + 'apigee_api_platform', 1979 'GCPIconApigeeSenseBlock' : gcpIcon + 'apigee_sense', 1980 'GCPIconAPIMonetizationBlock' : gcpIcon + 'api_monetization', 1981 'GCPIconCloudEndpointsBlock2' : gcpIcon + 'cloud_endpoints', 1982 'GCPIconDeveloperPortalBlock' : gcpIcon + 'developer_portal', 1983 'GCPIconBigQueryBlock2' : gcpIcon + 'bigquery', 1984 'GCPIconCloudComposerBlock' : gcpIcon + 'cloud_composer', 1985 'GCPIconCloudDataflowBlock2' : gcpIcon + 'cloud_dataflow', 1986 'GCPIconCloudDatalabBlock2' : gcpIcon + 'cloud_datalab', 1987 'GCPIconCloudDataprepBlock' : gcpIcon + 'cloud_dataprep', 1988 'GCPIconCloudDataprocBlock2' : gcpIcon + 'cloud_dataproc', 1989 'GCPIconCloudPubSubBlock2' : gcpIcon + 'cloud_pubsub', 1990 'GCPIconDataStudioBlock' : gcpIcon + 'data_studio', 1991 'GCPIconGenomicsBlock2' : gcpIcon + 'genomics', 1992 'GCPIconAdvancedSolutionsLabBlock' : gcpIcon + 'advanced_solutions_lab', 1993 'GCPIconCloudAutoMLBlock' : gcpIcon + 'cloud_automl', 1994 'GCPIconCloudNaturalLanguageAPIBlock' : gcpIcon + 'cloud_natural_language_api', 1995 'GCPIconCloudJobsAPIBlock' : gcpIcon + 'cloud_jobs_api', 1996 'GCPIconCloudTPUBlock' : gcpIcon + 'cloud_tpu', 1997 'GCPIconCloudMachineLearningBlock' : gcpIcon + 'cloud_machine_learning', 1998 'GCPIconCloudVisionAPIBlock' : gcpIcon + 'cloud_vision_api', 1999 'GCPIconCloudTranslationAPIBlock' : gcpIcon + 'cloud_translation_api', 2000 'GCPIconDialogflowEnterpriseEditionBlock' : gcpIcon + 'dialogflow_enterprise_edition', 2001 'GCPIconCloudSpeechAPIBlock' : gcpIcon + 'cloud_speech_api', 2002 'GCPIconCloudTexttoSpeechBlock' : gcpIcon + 'cloud_text_to_speech', 2003 'GCPIconCloudVideoIntelligenceAPIBlock' : gcpIcon + 'cloud_video_intelligence_api', 2004 'GCPIconAppEngineBlock2' : gcpIcon + 'app_engine', 2005 'GCPIconCloudToolsforVisualStudioBlock' : gcpIcon + 'cloud_tools_for_powershell', 2006 'GCPIconCloudDeploymentManagerBlock' : gcpIcon + 'cloud_deployment_manager', 2007 'GCPIconCloudFunctionsBlock2' : gcpIcon + 'cloud_functions', 2008 'GCPIconContainerBuilderBlock' : gcpIcon + 'container_builder', 2009 'GCPIconCloudSDKBlock' : gcpIcon + 'placeholder', 2010 'GCPIconCloudSourceRepositoriesBlock' : gcpIcon + 'placeholder', 2011 'GCPIconContainerRegistryBlock2' : gcpIcon + 'container_registry', 2012 'GCPIconCloudTestLabBlock' : gcpIcon + 'placeholder', 2013 'GCPIconGPUBlock' : gcpIcon + 'gpu', 2014 'GCPIconContainerEngineBlock2' : gcpIcon + 'container_engine', 2015 'GCPIconTransferApplianceBlock' : gcpIcon + 'transfer_appliance', 2016 'GCPIconCloudToolsforPowerShellBlock' : gcpIcon + 'cloud_tools_for_powershell', 2017 'GCPIconCloudToolsforIntelliJBlock' : gcpIcon + 'placeholder', 2018 'GCPIconCloudToolsforAndroidStudioBlock' : gcpIcon + 'placeholder', 2019 'GCPIconGooglePluginforEclipseBlock' : gcpIcon + 'placeholder', 2020 'GCPIconContainerOptimizedOSBlock' : gcpIcon + 'container_optimized_os', 2021 'GCPIconComputeEngineBlock2' : gcpIcon + 'compute_engine', 2022 'GCPIconBeyondCorpBlock' : gcpIcon + 'beyondcorp', 2023 'GCPIconCloudIAMBlock2' : gcpIcon + 'cloud_iam', 2024 'GCPIconCloudResourceManagerBlock' : gcpIcon + 'cloud_iam', 2025 'GCPIconCloudSecurityCommandCenterBlock' : gcpIcon + 'cloud_security_command_center', 2026 'GCPIconCloudSecurityScannerBlock' : gcpIcon + 'cloud_security_scanner', 2027 'GCPIconDataLossPreventionAPIBlock' : gcpIcon + 'data_loss_prevention_api', 2028 'GCPIconIdentityAwareProxyBlock' : gcpIcon + 'identity_aware_proxy', 2029 'GCPIconKeyManagementServiceBlock' : gcpIcon + 'key_management_service', 2030 'GCPIconSecurityKeyEnforcementBlock' : gcpIcon + 'security_key_enforcement', 2031 'GCPIconCloudIoTCoreBlock' : gcpIcon + 'cloud_iot_core', 2032 'GCPIconCloudAPIsBlock' : gcpIcon + 'cloud_apis', 2033 'GCPIconCloudBillingAPIBlock' : gcpIcon + 'placeholder', 2034 'GCPIconCloudConsoleBlock' : gcpIcon + 'placeholder', 2035 'GCPIconCloudDeploymentManagerBlock2' : gcpIcon + 'cloud_deployment_manager', 2036 'GCPIconCloudMobileAppBlock' : gcpIcon + 'placeholder', 2037 'GCPIconCloudShellBlock' : gcpIcon + 'placeholder', 2038 'GCPIconDebuggerBlock2' : gcpIcon + 'debugger', 2039 'GCPIconErrorReportingBlock2' : gcpIcon + 'error_reporting', 2040 'GCPIconLoggingBlock2' : gcpIcon + 'logging', 2041 'GCPIconMonitoringBlock2' : gcpIcon + 'cloud_deployment_manager', 2042 'GCPIconStackdriverBlock' : gcpIcon + 'stackdriver', 2043 'GCPIconTraceBlock2' : gcpIcon + 'trace', 2044 'GCPIconCloudArmorBlock' : gcpIcon + 'cloud_armor', 2045 'GCPIconCloudCDNBlock2' : gcpIcon + 'cloud_cdn', 2046 'GCPIconCloudDNSBlock2' : gcpIcon + 'cloud_dns', 2047 'GCPIconCloudExternalIPAddressesBlock' : gcpIcon + 'cloud_external_ip_addresses', 2048 'GCPIconCloudFirewallRulesBlock' : gcpIcon + 'cloud_firewall_rules', 2049 'GCPIconCloudLoadBalancingBlock2' : gcpIcon + 'cloud_load_balancing', 2050 'GCPIconCloudNetworkBlock' : gcpIcon + 'cloud_network', 2051 'GCPIconCloudRouterBlock' : gcpIcon + 'cloud_router', 2052 'GCPIconCloudRoutesBlock' : gcpIcon + 'cloud_routes', 2053 'GCPIconCloudVPNBlock' : gcpIcon + 'cloud_vpn', 2054 'GCPIconDedicatedInterconnectBlock' : gcpIcon + 'dedicated_interconnect', 2055 'GCPIconPartnerInterconnectBlock' : gcpIcon + 'partner_interconnect', 2056 'GCPIconPremiumNetworkTierBlock' : gcpIcon + 'premium_network_tier', 2057 'GCPIconStandardNetworkTierBlock' : gcpIcon + 'standard_network_tier', 2058 'GCPIconVirtualPrivateCloudBlock' : gcpIcon + 'virtual_private_cloud', 2059 'GCPIconCloudBigtableBlock2' : gcpIcon + 'cloud_bigtable', 2060 'GCPIconCloudDatastoreBlock2' : gcpIcon + 'cloud_datastore', 2061 'GCPIconCloudFilestoreBlock' : gcpIcon + 'cloud_filestore', 2062 'GCPIconCloudMemorystoreBlock' : gcpIcon + 'cloud_memorystore', 2063 'GCPIconCloudSpannerBlock' : gcpIcon + 'cloud_spanner', 2064 'GCPIconCloudSQLBlock2' : gcpIcon + 'cloud_sql', 2065 'GCPIconCloudStorageBlock2' : gcpIcon + 'cloud_storage', 2066 'GCPIconPersistentDiskBlock2' : gcpIcon + 'persistent_disk', 2067 'GCPIconGoogleCloudPlatformBlock' : gcpIcon + 'google_cloud_platform', 2068 'GCPIconBlueHexagonBlock' : gcpIcon + 'blue_hexagon', 2069 'GCPIconGenericBlock' : gcpIcon + 'placeholder', 2070 'GCPIconPredictionAPIBlock' : gcpIcon + 'prediction_api', 2071 //'GCPGoogleCloudPlatformLockupBlock' : gcpIcon + 'gcp_google_cloud_platform_lockup', 2072 'GCPAutoScalingModifier' : 'shape=mxgraph.gcp2.modifiers_autoscaling;fillColor=#757575;strokeColor=none;', 2073 'GCPCustomVirtualMachineModifier' : 'shape=mxgraph.gcp2.modifiers_custom_virtual_machine;fillColor=#757575;strokeColor=none;', 2074 'GCPHighCPUMachineModifier' : 'shape=mxgraph.gcp2.modifiers_high_cpu_machine;fillColor=#757575;strokeColor=none;', 2075 'GCPHighMemoryMachineModifier' : 'shape=mxgraph.gcp2.modifiers_high_memory_machine;fillColor=#757575;strokeColor=none;', 2076 'GCPPreemptableVSModifier' : 'shape=mxgraph.gcp2.modifiers_preemptable_vm;fillColor=#757575;strokeColor=none;', 2077 'GCPSharedCoreMachineF1Modifier' : 'shape=mxgraph.gcp2.modifiers_shared_core_machine_f1;fillColor=#757575;strokeColor=none;', 2078 'GCPSharedCoreMachineG1Modifier' : 'shape=mxgraph.gcp2.modifiers_shared_core_machine_g1;fillColor=#757575;strokeColor=none;', 2079 'GCPStandardMachineModifier' : 'shape=mxgraph.gcp2.modifiers_standard_machine;fillColor=#757575;strokeColor=none;', 2080 'GCPStorageModifier' : 'shape=mxgraph.gcp2.modifiers_storage;fillColor=#757575;strokeColor=none;', 2081 'GCPAppEngineProductCard' : cs, 2082 'GCPCloudDataflowProductCard' : cs, 2083 'GCPCloudDataprocProductCard' : cs, 2084 'GCPComputeEngineProductCard' : cs, 2085 'GCPContainerEngineProductCard' : cs, 2086 2087//Kubernetes Icons 2088 'CronjobLabeledKub19' : kupIcon + 'cronjob', 2089 'CronjobKub19' : kupIcon + 'cronjob', 2090 'DeployLabeledKub19' : kupIcon + 'deploy', 2091 'DeployKub19' : kupIcon + 'deploy', 2092 'DsLabeledKub19' : kupIcon + 'ds', 2093 'DsKub19' : kupIcon + 'ds', 2094 'JobLabeledKub19' : kupIcon + 'job', 2095 'JobKub19' : kupIcon + 'job', 2096 'PodLabeledKub19' : kupIcon + 'pod', 2097 'PodKub19' : kupIcon + 'pod', 2098 'RsLabeledKub19' : kupIcon + 'rs', 2099 'RsKub19' : kupIcon + 'rs', 2100 'StsLabeledKub19' : kupIcon + 'sts', 2101 'StsKub19' : kupIcon + 'sts', 2102 'PvLabeledKub19' : kupIcon + 'pv', 2103 'PvKub19' : kupIcon + 'pv', 2104 'PvcLabeledKub19' : kupIcon + 'pvc', 2105 'PvcKub19' : kupIcon + 'pvc', 2106 'ScLabeledKub19' : kupIcon + 'sc', 2107 'ScKub19' : kupIcon + 'sc', 2108 'VolLabeledKub19' : kupIcon + 'vol', 2109 'VolKub19' : kupIcon + 'vol', 2110 'EpLabeledKub19' : kupIcon + 'ep', 2111 'EpKub19' : kupIcon + 'ep', 2112 'IngLabeledKub19' : kupIcon + 'ing', 2113 'IngKub19' : kupIcon + 'ing', 2114 'NetpolLabeledKub19' : kupIcon + 'netpol', 2115 'NetpolKub19' : kupIcon + 'netpol', 2116 'SvcLabeledKub19' : kupIcon + 'svc', 2117 'SvcKub19' : kupIcon + 'svc', 2118 'CrdLabeledKub19' : kupIcon + 'crd', 2119 'CrdKub19' : kupIcon + 'crd', 2120 'CroleLabeledKub19' : kupIcon + 'c_role', 2121 'CroleKub19' : kupIcon + 'c_role', 2122 'GroupLabeledKub19' : kupIcon + 'group', 2123 'GroupKub19' : kupIcon + 'group', 2124 'RbLabeledKub19' : kupIcon + 'rb', 2125 'RbKub19' : kupIcon + 'rb', 2126 'RoleLabeledKub19' : kupIcon + 'role', 2127 'RoleKub19' : kupIcon + 'role', 2128 'SaLabeledKub19' : kupIcon + 'sa', 2129 'SaKub19' : kupIcon + 'sa', 2130 'UserLabeledKub19' : kupIcon + 'user', 2131 'UserKub19' : kupIcon + 'user', 2132 'CmResourceLabeledKub19' : kupIcon + 'cm', 2133 'CmKub19' : kupIcon + 'cm', 2134 'SecretLabeledKub19' : kupIcon + 'secret', 2135 'SecretKub19' : kupIcon + 'secret', 2136 'HpaLabeledKub19' : kupIcon + 'hpa', 2137 'HpaKub19' : kupIcon + 'hpa', 2138 'LimitsLabeledKub19' : kupIcon + 'limits', 2139 'LimitsKub19' : kupIcon + 'limits', 2140 'QuotaLabeledKub19' : kupIcon + 'quota', 2141 'QuotaKub19' : kupIcon + 'quota', 2142 'CrbLabeledKub19' : kupIcon + 'crb', 2143 'CrbKub19' : kupIcon + 'crb', 2144 'LogoKub19' : 'aspect=fixed;html=1;align=center;image;image=img/lib/mscae/Kubernetes.svg', 2145 'NsLabeledKub19' : kupIcon + 'ns', 2146 'NsKub19' : kupIcon + 'ns', 2147 'PspLabeledKub19' : kupIcon + 'psp', 2148 'PspKub19' : kupIcon + 'psp', 2149 'EtcdLabeledKub19' : kupIcon + 'etcd', 2150 'EtcdKub19' : kupIcon + 'etcd', 2151 'MasterLabeledKub19' : kupIcon + 'master', 2152 'MasterKub19' : kupIcon + 'master', 2153 'NodeLabeledKub19' : kupIcon + 'node', 2154 'NodeKub19' : kupIcon + 'node', 2155 'ApiLabeledKub19' : kupIcon + 'api', 2156 'CcmLabeledKub19' : kupIcon + 'c_c_m', 2157 'CmLabeledKub19' : kupIcon + 'c_m', 2158 'KproxyLabeledKub19' : kupIcon + 'node', 2159 'KubeletLabeledKub19' : kupIcon + 'kubelet', 2160 'SchedLabeledKub19' : kupIcon + 'sched', 2161//Equation 2162 'Equation' : cs, 2163//Walls 2164 'fpWall' : cs, 2165//Rooms 2166//Doors & Windows 2167 'fpWindow' : s + 'floorplan.window;strokeWidth=3', 2168 'fpOpening' : 'shape=rect', 2169 'fpDoor' : cs, 2170 'fpDoubleDoor' : cs, 2171//Stairs 2172 'fpStairs' : s + 'floorplan.stairs;direction=north', 2173 'fpStairsDirectional' : s + 'floorplan.stairs;direction=north;verticalAlign=bottom', 2174// 'fpStairsCurved' NA 2175// 'fpStairsCurvedWide' NA 2176//Desks 2177// 'fpDeskEndSegment' NA 2178 'fpDeskLongSegment' : '', 2179 'fpDeskShortSegment' : '', 2180// 'fpDeskSmallCornerSegment' NA 2181 'fpDeskLargeCornerSegment' : s + 'floorplan.desk_corner', 2182// 'fpDeskMediumCornerSegment' NA 2183// 'fpDeskRoundedLSegment' NA 2184// 'fpDeskRoundedCornerSegment' NA 2185//Cubicle walls 2186 'fpCubiclePanel' : s + 'floorplan.wall;wallThickness=3', 2187 'fpCubicleWorkstation' : s + 'floorplan.wallU;wallThickness=3', 2188 'fpCubicleCorner5x5' : s + 'floorplan.wallCorner;wallThickness=3', 2189 'fpCubicleCorner6x6' : s + 'floorplan.wallCorner;wallThickness=3', 2190 'fpCubicleCorner8x8' : s + 'floorplan.wallCorner;wallThickness=3', 2191 'fpCubicleCorner8x6' : s + 'floorplan.wallCorner;wallThickness=3', 2192 'fpCubicleCornerOpen6x4' : s + 'floorplan.wallCorner;wallThickness=3', 2193 'fpCubicleDouble14x8' : s + 'floorplan.wallU;wallThickness=3', 2194 'fpCubicleEnclosed11x9' : s + 'floorplan.wallU;wallThickness=3', 2195//Tables & Chairs 2196 'fpTableConferenceOval' : 'ellipse', 2197 'fpTableConferenceBoat' : '', 2198 'fpTableConferenceRectangle' : '', 2199 'fpTableDiningRound' : 'ellipse', 2200 'fpTableDiningSquare' : '', 2201 'fpChairOffice' : s + 'floorplan.office_chair', 2202 'fpChairExecutive' : s + 'floorplan.office_chair', 2203 'fpChairLobby' : s + 'floorplan.office_chair', 2204 'fpChairDining' : s + 'floorplan.chair', 2205 'fpChairBarstool' : 'ellipse', 2206//Cubicles - Prebuilt 2207//Tables - Prebuilt 2208//Cabinets - we don't have corresponding stencils, just rounded rectangles 2209 'fpCabinetBasic' : '', 2210// 'fpCabinetCornerLarge' NA 2211 'fpCabinetDoubleWide' : '', 2212 'fpCabinetDoubleWithShelves' : '', 2213 'fpCabinetShelvesBasic' : '', 2214 'fpCabinetShelvesDouble' : '', 2215 'fpCabinetBasicWithShelves' : '', 2216 'fpCabinetsAboveDeskShelves' : '', 2217//Restroom 2218 'fpRestroomToiletPrivate' : s + 'floorplan.toilet', 2219 'fpRestroomToiletPublic' : s + 'floorplan.toilet', 2220// 'fpRestroomBidet' NA 2221 'fpRestroomLights' : cs, 2222 'fpRestroomSinks' : cs, 2223// 'fpRestroomGrabBar' NA 2224 'fpRestroomBathtub' : s + 'floorplan.bathtub;direction=south', 2225 'fpRestroomShower' : s + 'floorplan.shower;flipH=1', 2226// 'fpRestroomCornerSink' NA 2227 'fpRestroomPedastalSink' : s + 'floorplan.sink_1', 2228 'fpRestroomCountertop' : '', 2229 'fpRestroomMirror' : 'shape=line;strokeWidth=3', 2230// 'fpDresserOrnateMirror' NA 2231// 'fpRestroomToiletPaper' NA 2232 'fpRestroomStalls' : cs, 2233//Beds 2234 'fpBedDouble' : s + 'floorplan.bed_double', 2235 'fpBedSingle' : s + 'floorplan.bed_single', 2236 'fpBedQueen' : s + 'floorplan.bed_double', 2237 'fpBedKing' : s + 'floorplan.bed_double', 2238 'fpBedDoubleWithTrundle' : s + 'floorplan.bed_double', 2239 'fpBedBunk' : s + 'floorplan.bed_double', 2240// 'fpBedBunkL' NA 2241// 'fpBedCrib' NA 2242 'fpBedBassinet' : s + 'pid.fittings.compensator', 2243//Dressers 2244// 'fpDresserChest' NA 2245// 'fpDresserMirrorDresser' NA 2246// 'fpClosetRod' NA 2247// 'fpDresserOrnateMirror' NA 2248//Appliances 2249 'fpApplianceWasher' : '', 2250 'fpApplianceDryer' : '', 2251 'fpApplianceWaterHeater' : 'ellipse', 2252// 'fpApplianceRefrigerator' NA 2253 'fpApplianceStoveOven' : s + 'floorplan.range_1', 2254 'fpStoveOvenSixBurner' : s + 'floorplan.range_2', 2255 'fpApplianceDishwasher' : '', 2256//Kitchen 2257 'fpKitchenSink' : s + 'floorplan.sink_2', 2258 'fpKitchenDoubleSink' : s + 'floorplan.sink_double', 2259 'fpKitchenCountertop' : '', 2260 'fpKitchenCountertopCorner' : s + 'floorplan.desk_corner', 2261//Couches 2262 'fpCouchLoveSeat' : s + 'floorplan.couch', 2263 'fpCouchSofa' : s + 'floorplan.couch', 2264// 'fpCouchSectional' NA 2265 'fpCouchOttoman' : '', 2266// 'fpCouchPillow' NA 2267//Technology 2268 'fpMiscDesktopComputer' : s + 'floorplan.workstation', 2269 'fpMiscLaptopComputer' : s + 'floorplan.laptop', 2270 'fpComputerMonitor' : s + 'floorplan.flat_tv', 2271 'fpCRTTelevision' : s + 'floorplan.flat_tv', 2272// 'fpMiscProjector' NA 2273// 'fpMiscProjectorScreen' NA 2274//Misc Floorplan 2275 'fpMiscIndoorPlant' : s + 'floorplan.plant', 2276// 'fpMiscPodium' NA 2277 'fpPiano' : s + 'floorplan.piano', 2278// 'fpPianoBench' : 'absoluteArcSize=1;arcSize=' + arcSize + ';rounded=1', 2279//Equipment 2280 'PEAxialCompressor' : s + 'pid.compressors.centrifugal_compressor_-_turbine_driven;verticalLabelPosition=bottom;verticalAlign=top', 2281 'PECentrifugalCompressor' : s + 'pid.compressors.centrifugal_compressor;verticalLabelPosition=bottom;verticalAlign=top', 2282 'PECentrifugalCompressor2' : s + 'pid.compressors.centrifugal_compressor_-_turbine_driven;verticalLabelPosition=bottom;verticalAlign=top', 2283// 'PECentrifugalCompressor3' NA 2284 'PEReciprocationCompressor' : s + 'pid.compressors.reciprocating_compressor;verticalLabelPosition=bottom;verticalAlign=top', 2285 'PERotaryCompressorBlock' : s + 'pid.compressors.rotary_compressor;verticalLabelPosition=bottom;verticalAlign=top', 2286 'PERotaryCompressor2Block' : s + 'pid.compressors.compressor_and_silencers;verticalLabelPosition=bottom;verticalAlign=top', 2287 'PEConveyorBlock' : s + 'pid2misc.conveyor;verticalLabelPosition=bottom;verticalAlign=top', 2288// 'PEOverheadConveyorBlock' NA 2289// 'PEScraperConveyorBlock' NA 2290// 'PEScrewConveyorBlock' NA 2291// 'PEPositiveDisplacementBlock' NA 2292// 'PEPositiveDisplacement2' NA 2293 'PEElevator1Block' : s + 'pid.misc.bucket_elevator;flipH=1;verticalLabelPosition=bottom;verticalAlign=top', 2294// 'PEElevator2Block' NA 2295// 'PEHoistBlock' NA 2296// 'PESkipHoistBlock' NA 2297// 'PEMotorBlock' NA 2298// 'PEDieselMotorBlock' NA 2299// 'PEElectricMotorBlock' NA 2300// 'PELiquidRingVacuumBlock' NA 2301// 'PETurbineDriverBlock' NA 2302// 'PEDoubleFlowTurbineBlock' NA 2303 'PEAgitatorMixerBlock' : s + 'pid.agitators.agitator_(propeller);verticalLabelPosition=bottom;verticalAlign=top', 2304 'PEDrumBlock' : s + 'pid.vessels.drum_or_condenser;verticalLabelPosition=bottom;verticalAlign=top', 2305 'PETankEquipmentBlock' : s + 'pid.vessels.tank;verticalLabelPosition=bottom;verticalAlign=top', 2306// 'PECentrifugalBlower' NA 2307// 'PEAlkylationBlock' NA 2308// 'PEBoomLoaderBlock' NA 2309// 'PEFluidCatalyticCrackingBlock' NA 2310// 'PEFluidCookingBlock' NA 2311// 'PEFluidizedReactorBlock' NA 2312// 'PETubularBlock' NA 2313// 'PEReformerBlock' NA 2314 'PEMixingReactorBlock' : s + 'pid.vessels.mixing_reactor;verticalLabelPosition=bottom;verticalAlign=top', 2315// 'PEHydrodesulferizationBlock' NA 2316// 'PEHydrocrackingBlock' NA 2317 'PEPlateTowerBlock' : s + 'pid2misc.column;columnType=baffle;verticalLabelPosition=bottom;verticalAlign=top', 2318 'PEPackedTowerBlock' : s + 'pid2misc.column;columnType=fixed;verticalLabelPosition=bottom;verticalAlign=top', 2319// 'PEAutomaticStokerBlock' NA 2320// 'PEOilBurnerBlock' NA 2321// 'PECounterflowForcedDraftBlock' NA 2322// 'PECounterflowNaturalDraftBlock' NA 2323// 'PECrossflowInductedBlock' NA 2324 'PEFurnaceBlock' : s + 'pid.vessels.furnace;verticalLabelPosition=bottom;verticalAlign=top', 2325// 'PEChimneyTowerBlock' NA 2326//Piping 2327 'PEOneToMany' : cs, //TODO 2328 'PEMultilines' : cs, //TODO 2329 'PEMidArrow' : 'shape=triangle;anchorPointDirection=0', 2330 'PEButtWeld' : s + 'sysml.x', 2331 'PETopToTop' : s + 'pid.vessels.container,_tank,_cistern', 2332// 'PESonicSignal' NA 2333 'PENuclear' : s + 'electrical.waveforms.sine_wave', 2334// 'PEPneumatic' NA 2335// 'PEHydraulicSignalLine' NA 2336 'PEMechanicalLink' : 'ellipse', 2337 'PESolderedSolvent' : 'ellipse', 2338 'PEDoubleContainment' : 'shape=hexagon;perimeter=hexagonPerimeter2', 2339 'PEFlange' : s + 'pid.piping.double_flange', 2340 'PEFlange2' : s + 'pid.piping.flange_in;flipH=1', 2341 'PEEndCap' : s + 'pid.piping.cap', 2342 'PEEndCap2' : s + 'pid.vessels.container,_tank,_cistern;direction=north', 2343 'PEBreather' : s + 'pid.piping.breather', 2344 'PEElectronicallyInsulated' : s + 'pid.piping.double_flange', 2345 'PEReducer' : s + 'pid.piping.concentric_reducer', 2346 'PEInlineMixer' : s + 'pid.piping.in-line_mixer', 2347// 'PESeparator' NA 2348// 'PEBurstingDisc' NA 2349 'PEFlameArrester' : s + 'pid.piping.flame_arrestor', 2350// 'PEFlameArrester2' NA 2351 'PEDetonationArrester' : s + 'pid.piping.detonation_arrestor', 2352// 'PEDrainSilencer' NA 2353 'PETriangleSeparator' : 'shape=triangle;direction=west;anchorPointDirection=0', 2354// 'PETriangleSeparator2' NA 2355 'PETundish' : s + 'ios7.misc.left', 2356 'PEOpenVent' : s + 'pid.vessels.vent_(bent)', 2357// 'PESiphonDrain' NA 2358 'PERemovableSpool' : s + 'pid.piping.removable_spool', 2359 'PEYTypeStrainer' : s + 'pid.piping.y-type_strainer', 2360 'PEDiverterValve' : s + 'pid.piping.diverter_valve', 2361 'PEPulsationDampener' : s + 'pid.piping.pulsation_dampener', 2362 'PEDuplexStrainer' : s + 'pid.piping.duplex_strainer', 2363 'PEBasketStrainer' : s + 'pid.piping.basket_strainer', 2364 'PEVentSilencer' : s + 'pid.piping.vent_silencer', 2365 'PEInlineSilencer' : s + 'pid.piping.in-line_silencer', 2366 'PESteamTrap' : s + 'pid.piping.steam_trap', 2367 'PEDesuperheater' : s + 'pid.piping.desuper_heater', 2368 'PEEjectorOrEductor' : s + 'pid.fittings.injector', 2369 'PEExhaustHead' : s + 'pid.piping.exhaust_head', 2370 'PERotaryValve' : s + 'pid.piping.rotary_valve', 2371 'PEExpansionJoint' : s + 'pid.piping.expansion_joint', 2372//Vessels 2373 'PEVesselBlock' : cs, 2374 'PEOpenTankBlock' : s + 'pid.vessels.container,_tank,_cistern;verticalLabelPosition=bottom;verticalAlign=top', //not all versions supported 2375 'PEOpenTopTank' : s + 'pid.vessels.container,_tank,_cistern;verticalLabelPosition=bottom;verticalAlign=top', 2376 'PEClosedTankBlock' : cs, 2377 'PEStorageSphereBlock' : s + 'pid.vessels.storage_sphere;verticalLabelPosition=bottom;verticalAlign=top', 2378 'PEColumnBlock' : cs, 2379 'PEBagBlock' : s + 'pid.vessels.bag;verticalLabelPosition=bottom;verticalAlign=top', 2380 'PEGasCylinderBlock' : s + 'pid.vessels.gas_bottle;verticalLabelPosition=bottom;verticalAlign=top', 2381 'PEGasHolderBlock' : s + 'pid.vessels.gas_holder;verticalLabelPosition=bottom;verticalAlign=top', 2382 'PEClarifierBlock' : s + 'pid.vessels.bunker_(conical_bottom);verticalLabelPosition=bottom;verticalAlign=top', 2383 'PETankBlock' : s + 'pid.vessels.tank_(conical_roof);verticalLabelPosition=bottom;verticalAlign=top', 2384 'PETrayColumnBlock' : s + 'pid2misc.column;columnType=tray;verticalLabelPosition=bottom;verticalAlign=top', 2385 'PEReactionVesselBlock' : s + 'pid.vessels.reactor;verticalLabelPosition=bottom;verticalAlign=top', 2386 'PEBin' : s + 'pid.vessels.tank_(conical_bottom)', 2387 'PEDomeRoofTank' : s + 'pid.vessels.tank_(dished_roof)', 2388 'PEConeRoofTank' : s + 'pid.vessels.tank_(conical_roof)', 2389// 'PEInternalFloatingRoof' NA 2390// 'PEDoubleWallTank' NA 2391// 'PEOnionTank' NA 2392//Heat Exchangers 2393 'PEBoilerBlock' : s + 'pid.misc.boiler_(dome);verticalLabelPosition=bottom;verticalAlign=top', 2394 'PEEquipmentBoilerBlock' : s + 'pid.misc.boiler_(dome);verticalLabelPosition=bottom;verticalAlign=top', 2395 'PEReboilerBlock' : s + 'pid.heat_exchangers.reboiler;verticalLabelPosition=bottom;verticalAlign=top', 2396 'PECondenserBlock' : s + 'pid.heat_exchangers.heat_exchanger_(straight_tubes);verticalLabelPosition=bottom;verticalAlign=top', 2397 'PEEquipmentCondenserBlock' : s + 'pid.heat_exchangers.condenser;verticalLabelPosition=bottom;verticalAlign=top', 2398// 'PEEvaporativeCondenserBlock' NA 2399 'PECoolingTowerBlock' : s + 'pid.misc.cooling_tower;verticalLabelPosition=bottom;verticalAlign=top', 2400 'PEHeatExchangerBlock' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_1;verticalLabelPosition=bottom;verticalAlign=top', 2401// 'PEAirCooledExchangerBlock' NA 2402 'PEHairpinExchangerBlock' : s + 'pid.heat_exchangers.hairpin_exchanger;verticalLabelPosition=bottom;verticalAlign=top', 2403 'PEPlateAndFrameHeatExchangerBlock' : s + 'pid.heat_exchangers.plate_and_frame_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top', 2404 'PESpiralHeatExchanger' : s + 'pid.heat_exchangers.spiral_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top', 2405 'PEUTubeHeatExchangerBlock' : s + 'pid.heat_exchangers.u-tube_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top', 2406 'PEDoublePipeHeatBlock' : s + 'pid.heat_exchangers.double_pipe_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top', 2407 'PEShellAndTubeHeat1Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_1;verticalLabelPosition=bottom;verticalAlign=top', 2408 'PEShellAndTubeHeat2Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_2;verticalLabelPosition=bottom;verticalAlign=top', 2409 'PEShellAndTubeHeat3Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_1;direction=north;verticalLabelPosition=bottom;verticalAlign=top', 2410 'PESinglePassHeatBlock' : s + 'pid.heat_exchangers.single_pass_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top', 2411 'PEHeaterBlock' : s + 'pid.heat_exchangers.heater;verticalLabelPosition=bottom;verticalAlign=top', 2412//Pumps 2413 'PEEjectorInjectorBlock' : s + 'pid.fittings.injector;verticalLabelPosition=bottom;verticalAlign=top', 2414 'PECompressorTurbineBlock' : cs, 2415 'PEMotorDrivenTurbineBlock' : cs, 2416// 'PETripleFanBlades2Block' NA 2417// 'PEFanBlades2Block' : NA 2418 'PECentrifugalPumpBlock' : s + 'pid.pumps.gas_blower;flipH=1;verticalLabelPosition=bottom;verticalAlign=top', 2419 'PECentrifugalPump' : s + 'pid.pumps.centrifugal_pump_1;verticalLabelPosition=bottom;verticalAlign=top', 2420 'PECentrifugalPump2' : s + 'pid.pumps.centrifugal_pump_2;verticalLabelPosition=bottom;verticalAlign=top', 2421 'PECentrifugalPump3' : s + 'pid.pumps.centrifugal_pump_1;flipH=1;verticalLabelPosition=bottom;verticalAlign=top', 2422 'PEGearPumpBlock' : s + 'pid.pumps.gear_pump;verticalLabelPosition=bottom;verticalAlign=top', 2423 'PEHorizontalPump' : s + 'pid.pumps.horizontal_pump;verticalLabelPosition=bottom;verticalAlign=top', 2424 'PEProgressiveCavityPump' : s + 'pid.pumps.cavity_pump;flipH=1;flipV=1;verticalLabelPosition=bottom;verticalAlign=top', 2425 'PEScrewPump' : s + 'pid.pumps.screw_pump;verticalLabelPosition=bottom;verticalAlign=top', 2426 'PEScrewPump2' : s + 'pid.pumps.screw_pump_2;flipH=1;verticalLabelPosition=bottom;verticalAlign=top', 2427 'PESumpPump' : s + 'pid.pumps.sump_pump;verticalLabelPosition=bottom;verticalAlign=top', 2428 'PEVacuumPump' : s + 'pid.pumps.vacuum_pump;verticalLabelPosition=bottom;verticalAlign=top', 2429 'PEVerticalPump' : s + 'pid.pumps.vertical_pump;verticalLabelPosition=bottom;verticalAlign=top', 2430 'PEVerticalPump2' : s + 'pid.pumps.vertical_pump;verticalLabelPosition=bottom;verticalAlign=top', 2431//Instruments 2432 'PEIndicatorBlock' : cs, 2433 'PEIndicator2Block' : cs, 2434 'PEIndicator3Block' : s + 'pid2inst.discInst;mounting=field', 2435 'PEIndicator4Block' : s + 'pid2inst.indicator;mounting=field;indType=inst', 2436// 'PEIndicator5Block' NA 2437 'PESharedIndicatorBlock' : cs, 2438 'PESharedIndicator2Block' : cs, 2439 'PEComputerIndicatorBlock' : cs, 2440 'PEProgrammableIndicatorBlock' : cs, 2441//Valves 2442 'PEGateValveBlock' : cs, //TODO not all variants covered 2443 'PEGlobeValveBlock' : cs, 2444 'PEControlValveBlock' : s + 'pid2valves.valve;valveType=gate;actuator=diaph;verticalLabelPosition=bottom;verticalAlign=top', //TODO not all variants covered 2445 'PENeedleValveBlock' : s + 'pid2valves.valve;valveType=needle;verticalLabelPosition=bottom;verticalAlign=top', 2446// 'PEButterflyValveBlock' NA 2447 'PEButterflyValve2Block' : s + 'pid2valves.valve;flipH=1;valveType=butterfly;verticalLabelPosition=bottom;verticalAlign=top', 2448 'PEBallValveBlock' : s + 'pid2valves.valve;valveType=ball;verticalLabelPosition=bottom;verticalAlign=top', 2449 'PEDiaphragmBlock' : s + 'pid2valves.valve;valveType=ball;verticalLabelPosition=bottom;verticalAlign=top', 2450 'PEPlugValveBlock' : s + 'pid2valves.valve;valveType=ball;verticalLabelPosition=bottom;verticalAlign=top', 2451 'PECheckValveBlock' : s + 'pid2valves.valve;valveType=check;verticalLabelPosition=bottom;verticalAlign=top', 2452 'PECheckValve2Block' : s + 'pid2valves.valve;valveType=check;verticalLabelPosition=bottom;verticalAlign=top', 2453 'PEAngleValveBlock' : cs, 2454 'PEAngleGlobeValveBlock' : cs, 2455 'PEPoweredValveBlock' : cs, 2456 'PEFloatOperatedValveBlock' : s + 'pid2valves.valve;valveType=gate;actuator=singActing;verticalLabelPosition=bottom;verticalAlign=top', 2457 'PENeedleValve2Block' : s + 'pid2valves.valve;valveType=needle;verticalLabelPosition=bottom;verticalAlign=top', 2458 'PEThreeWayValveBlock' : s + 'pid2valves.valve;valveType=threeWay;actuator=none;verticalLabelPosition=bottom;verticalAlign=top', 2459// 'PEFourWayValveBlock' NA 2460// 'PEGaugeBlock' NA 2461 'PEBleederValveBlock' : s + 'pid2valves.blockBleedValve;actuator=none;verticalLabelPosition=bottom;verticalAlign=top', 2462// 'PEOrificeBlock' NA 2463 'PERotameterBlock' : s + 'pid.flow_sensors.rotameter;flipH=1;verticalLabelPosition=bottom;verticalAlign=top', 2464//Venn Gradient 2465 'VennGradientColor1' : 'ellipse;fillOpacity=35', 2466 'VennGradientColor2' : 'ellipse;fillOpacity=35', 2467 'VennGradientColor3' : 'ellipse;fillOpacity=35', 2468 'VennGradientColor4' : 'ellipse;fillOpacity=35', 2469 'VennGradientColor5' : 'ellipse;fillOpacity=35', 2470 'VennGradientColor6' : 'ellipse;fillOpacity=35', 2471 'VennGradientColor7' : 'ellipse;fillOpacity=35', 2472 'VennGradientColor8' : 'ellipse;fillOpacity=35', 2473//Venn Plain 2474 'VennPlainColor1' : 'ellipse;fillOpacity=35', 2475 'VennPlainColor2' : 'ellipse;fillOpacity=35', 2476 'VennPlainColor3' : 'ellipse;fillOpacity=35', 2477 'VennPlainColor4' : 'ellipse;fillOpacity=35', 2478 'VennPlainColor5' : 'ellipse;fillOpacity=35', 2479 'VennPlainColor6' : 'ellipse;fillOpacity=35', 2480 'VennPlainColor7' : 'ellipse;fillOpacity=35', 2481 'VennPlainColor8' : 'ellipse;fillOpacity=35', 2482//iOS Devices 2483 'iOS7DeviceiPhone5Portrait' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO 2484 'iOS7DeviceiPhone5Landscape' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO 2485 'iOS7DeviceiPadPortrait' : s + 'ios.iPad;bgStyle=bgGreen', //TODO 2486 'iOS7DeviceiPadLandscape' : s + 'ios.iPad;bgStyle=bgGreen', //TODO 2487 'iOS7DeviceiPhone6Portrait' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO 2488 'iOS7DeviceiPhone6Landscape' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO 2489 'iOS7DeviceiPhone6PlusPortrait' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO 2490 'iOS7DeviceiPhone6PlusLandscape' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO 2491//iPhone Elements 2492 'iOS7StatusBariPhone' : s + 'ios7ui.appBar', 2493// 'iOS7NavBariPhone' NA 2494// 'iOS7TabsiPhone' : cs, //TODO 2495// 'iOS7iPhoneActionSheet' : cs, //TODO 2496 'iOS7iPhoneKeyboard' : s + 'ios7.misc.keyboard_(letters)', 2497// 'iOS7TableView' : cs, //TODO 2498//iPad Elements 2499 'iOS7StatusBariPad' : s + 'ios7ui.appBar', 2500// 'iOS7NavBariPad' : cs, //TODO 2501// 'iOS7TabsiPad' : cs, //TODO 2502// 'iOS7iPadActionSheet' : cs, //TODO 2503 'iOS7iPadKeyboard' : s + 'ios7.misc.keyboard_(letters)', 2504// 'iOS7SplitView' 2505// 'iOS7iPadPopover' 2506//Common Elements 2507// 'iOS7AlertDialog' : cs, //TODO 2508 'iOS7ProgressBar' : s + 'ios7ui.downloadBar', //TODO 2509 'iOS7Slider' : s + 'ios7ui.searchBox', //TODO 2510 'iOS7SearchBar' : s + 'ios7ui.searchBox', 2511 'iOS7Button' : '', 2512 'iOS7TextField' : '', 2513 'iOS7TextView' : '', 2514// 'iOS7SegmentedControl' : cs, //TODO 2515 'iOS7Toggle' : s + 'ios7ui.onOffButton;buttonState=on;strokeColor=#38D145;strokeColor2=#aaaaaa;fillColor=#38D145;fillColor2=#ffffff', //TODO 2516 'iOS7Stepper' : s + 'ios7.misc.adjust;fillColor=#ffffff;gradientColor=none', 2517 'iOS7PageControls' : s + 'ios7ui.pageControl;fillColor=#666666;strokeColor=#bbbbbb', //TODO 2518 'iOS7Block' : '', 2519// 'iOS7DatePicker' : cs, //TODO 2520// 'iOS7TimePicker' : cs, //TODO 2521// 'iOS7CountdownPicker' : cs, //TODO 2522//iOS Icons 2523 'iOS7IconArrow left' : s + 'ios7.misc.left', 2524 'iOS7IconArrow' : s + 'ios7.misc.right', 2525 'iOS7IconArrow up' : s + 'ios7.misc.up', 2526 'iOS7IconArrow down' : s + 'ios7.misc.down', 2527 'iOS7IconWifi' : s + 'ios7.icons.wifi', 2528 'iOS7IconBluetooth' : s + 'ios7.icons.bluetooth', 2529 'iOS7IconBattery' : s + 'ios7.icons.battery', 2530 'iOS7IconSiri' : s + 'ios7.icons.microphone', 2531 'iOS7IconCheck' : s + 'ios7.icons.select', 2532 'iOS7IconCreate' : s + 'ios7.icons.add', 2533 'iOS7IconInfo' : s + 'ios7.icons.info', 2534 'iOS7IconLocation' : s + 'ios7.icons.location_2', 2535 'iOS7IconQuestion' : s + 'ios7.icons.help', 2536 'iOS7IconSearch' : s + 'ios7.icons.looking_glass', 2537 'iOS7IconToolbox' : s + 'ios7.icons.briefcase', 2538 'iOS7IconOptions' : s + 'ios7.icons.options', 2539 'iOS7IconShare' : s + 'ios7.icons.share', 2540 'iOS7IconTyping' : s + 'ios7.icons.message', 2541 'iOS7IconCopy' : s + 'ios7.icons.folders_2', 2542 'iOS7IconChat' : s + 'ios7.icons.messages', 2543 'iOS7IconOrganize' : s + 'ios7.icons.folder', 2544 'iOS7IconTrash' : s + 'ios7.icons.trashcan', 2545 'iOS7IconReply' : s + 'ios7.icons.back', 2546 'iOS7IconArchive' : s + 'ios7.icons.box', 2547 'iOS7IconCompose' : s + 'ios7.icons.compose', 2548 'iOS7IconSend' : s + 'ios7.icons.pointer', 2549 'iOS7IconDrawer' : s + 'ios7.icons.storage', 2550 'iOS7IconMail' : s + 'ios7.icons.mail', 2551 'iOS7IconDocument' : s + 'ios7.icons.document', 2552 'iOS7IconFlag' : s + 'ios7.icons.flag', 2553 'iOS7IconBookmarks' : s + 'ios7.icons.book', 2554 'iOS7IconGlasses' : s + 'ios7.icons.glasses', 2555 'iOS7IconFiles' : s + 'ios7.icons.folders', 2556 'iOS7IconDownloads' : s + 'ios7.icons.down', 2557 'iOS7IconLock' : s + 'ios7.icons.locked', 2558// 'iOS7IconUnlock' NA 2559 'iOS7IconCloud' : s + 'ios7.icons.cloud', 2560// 'iOS7IconCloud-lock' NA 2561 'iOS7IconOrientation Lock' : s + 'ios7.icons.orientation_lock', 2562// 'iOS7IconNotification' NA 2563 'iOS7IconContacts' : s + 'ios7.icons.user', 2564 'iOS7IconGlobal' : s + 'ios7.icons.globe', 2565 'iOS7IconSettings' : s + 'ios7.icons.settings', 2566 'iOS7IconAirplay' : s + 'ios7.icons.move_to_folder', 2567 'iOS7IconCamera' : s + 'ios7.icons.camera', 2568 'iOS7IconAirplane' : s + 'signs.transportation.airplane_6;direction=south', 2569 'iOS7IconCalculator' : s + 'ios7.icons.calculator', 2570 'iOS7IconPreferences' : s + 'ios7.icons.most_viewed', 2571 'iOS7IconPhone' : s + 'signs.tech.telephone_3', 2572 'iOS7IconKeypad' : s + 'ios7.icons.keypad', 2573 'iOS7IconVoicemail' : s + 'ios7.icons.tape', 2574 'iOS7IconStar' : s + 'ios7.icons.star', 2575 'iOS7IconMost Viewed' : s + 'ios7.icons.most_viewed', 2576 'iOS7IconVideo' : s + 'ios7.icons.video_conversation', 2577 'iOS7IconVolumne Controls' : s + 'ios7.icons.volume', 2578 'iOS7IconLocation pin' : s + 'ios7.icons.location', 2579 'iOS7IconCalendar' : s + 'ios7.icons.calendar', 2580 'iOS7IconAlarm' : s + 'ios7.icons.alarm_clock', 2581 'iOS7IconClock' : s + 'ios7.icons.clock', 2582 'iOS7IconTimer' : s + 'ios7.icons.gauge', 2583 'iOS7IconVolume down' : s + 'ios7.icons.silent', 2584 'iOS7IconVolume' : s + 'ios7.icons.volume_2', 2585 'iOS7IconVolume up' : s + 'ios7.icons.loud', 2586 'iOS7IconRepeat' : s + 'ios7.icons.reload', 2587 'iOS7IconRewind' : s + 'ios7.icons.backward', 2588 'iOS7IconPlay' : s + 'ios7.icons.play', 2589 'iOS7IconPause' : s + 'ios7.icons.pause', 2590 'iOS7IconFast forward' : s + 'ios7.icons.forward', 2591// 'iOS7IconArtists' NA 2592// 'iOS7IconPlaylist' NA 2593 'iOS7IconControls' : s + 'ios7.icons.controls', 2594// 'iOS7IconShuffle' NA 2595 'iOS7IconPrivacy' : s + 'ios7.icons.privacy', 2596 'iOS7IconLink' : s + 'ios7.icons.link', 2597 'iOS7IconLight' : s + 'ios7.icons.flashlight', 2598 'iOS7IconBrightness' : s + 'ios7.icons.sun', 2599 'iOS7IconHeart' : s + 'ios7.icons.heart', 2600 'iOS7IconJava' : s + 'ios7.icons.cup', 2601 'iOS7IconBox' : s + 'ios7.icons.bag', 2602 'iOS7IconEye' : s + 'ios7.icons.eye', 2603 'iOS7IconDo not disturb' : s + 'ios7.icons.moon', 2604//iOS Activity 2605// 'iOS7ActivityAdd bookmark' NA 2606// 'iOS7ActivityAdd to home screen' NA 2607// 'iOS7ActivityAdd to reading list' NA 2608// 'iOS7ActivityAirplay' NA 2609// 'iOS7ActivityAssign to contact' NA 2610// 'iOS7ActivityCopy' NA 2611// 'iOS7ActivityPrint' NA 2612// 'iOS7ActivitySlideshow' NA 2613// 'iOS7ActivityUse as wallpaper' NA 2614//UI Containers 2615 'UI2BrowserBlock' : cs, 2616 'UI2WindowBlock' : cs, 2617 'UI2DialogBlock' : cs, 2618 'UI2AreaBlock' : 'rounded=1;arcSize=3', 2619 'UIAreaBlock' : 'rounded=1;arcSize=3;fillColor=none', 2620 'UI2ElementBlock' : '', 2621 'UI2AccordionBlock' : cs, 2622 'UI2TabBarContainerBlock' : cs, 2623 'UI2TabBar2ContainerBlock' : cs, 2624 'UI2VTabBarContainerBlock' : cs, 2625 'UI2VScrollBlock' : s + 'mockup.navigation.scrollBar;direction=north', 2626 'UI2HScrollBlock' : s + 'mockup.navigation.scrollBar', 2627 'UI2VerticalSplitterBlock' : s + 'mockup.forms.splitter;direction=north', 2628 'UI2HorizontalSplitterBlock' : s + 'mockup.forms.splitter', 2629//UI Widgets 2630 'UI2ImageBlock' : s + 'mockup.graphics.simpleIcon', 2631 'UI2VideoBlock' : s + 'mockup.containers.videoPlayer;barHeight=30', 2632 'UI2AudioBlock' : s + 'mockup.misc.playbackControls', 2633 'UI2MapBlock' : s + 'mockup.misc.map', 2634// 'UI2CalendarBlock' NA 2635 'UI2BarChartBlock' : s + 'mockup.graphics.barChart;strokeColor=none;strokeColor2=none', 2636 'UI2ColumnChartBlock' : s + 'mockup.graphics.columnChart;strokeColor=none;strokeColor2=none', 2637 'UI2LineChartBlock' : s + 'mockup.graphics.lineChart;strokeColor=none', 2638 'UI2PieChartBlock' : s + 'mockup.graphics.pieChart;parts=10,20,35', 2639 'UI2WebcamBlock' : s + 'mockup.containers.userMale', 2640 'UI2CaptchaBlock' : s + 'mockup.text.captcha;mainText=', 2641// 'Image_ui_formatting_toolbar2' 2642//UI Input 2643 'UI2ButtonBlock' : 'rounded=1;arcSize=25;', 2644 'UI2CheckBoxBlock' : cs, 2645 'UI2HorizontalCheckBoxBlock' : cs, 2646 'UI2RadioBlock' : cs, 2647 'UI2HorizontalRadioBlock' : cs, 2648 'UI2ColorPickerBlock' : s + 'mockup.forms.colorPicker;chosenColor=#aaddff', 2649 'UI2TextInputBlock' : '', 2650 'UI2SelectBlock' : cs, 2651 'UI2VSliderBlock' : cs, 2652 'UI2HSliderBlock' : cs, 2653 'UI2DatePickerBlock' : cs, 2654 'UI2SearchBlock' : cs, 2655 'UI2NumericStepperBlock' : cs, 2656 'UI2TableBlock' : cs, 2657//UI Menus 2658 'UI2ButtonBarBlock' : cs, 2659 'UI2VerticalButtonBarBlock' : cs, 2660 'UI2LinkBarBlock' : cs, 2661 'UI2BreadCrumbsBlock' : cs, 2662 'UI2MenuBarBlock' : cs, 2663 'UI2AtoZBlock' : cs, 2664 'UI2PaginationBlock' : cs, 2665 'UI2ContextMenuBlock' : cs, 2666// 'UI2TreePaneBlock' : cs, //TODO 2667 'UI2PlaybackControlsBlock' : s + 'mockup.misc.playbackControls;fillColor=#ffffff;strokeColor=#999999;fillColor2=#99ddff;strokeColor2=none;fillColor3=#ffffff;strokeColor3=none', 2668 'Image_ui_formatting_toolbar' : s + 'mockup.menus_and_buttons.font_style_selector_2', 2669//UI Misc 2670 'UI2ProgressBarBlock' : cs, 2671 'UI2HelpIconBlock' : s + 'mockup.misc.help_icon', 2672 'UI2BraceNoteBlock' : cs, 2673 'UI2TooltipBlock' : s + 'basic.rectangular_callout;flipV=1', 2674 'UI2TooltipSquareBlock' : cs, 2675 'UI2CalloutBlock' : cs, 2676 'UI2AlertBlock' : cs, 2677//iOS 6 iPad Elements 2678 'Image_ipad_ipad' : s + 'ios.iPad;bgStyle=bgGreen', 2679 'iPadGrayBackgroundBlock' : '', 2680 'Image_ipad_top_bar' : s + 'ios.iTopBar2;opacity=50;fillColor=#999999;strokeColor=#cccccc', 2681// 'Image_ipad_bar_gray' : '', 2682// 'Image_ipad_bar_semi_trans_black' : '', 2683// 'Image_ipad_bar_black' : '', 2684// 'Image_ipad_safari_top' NA 2685 'Image_ipad_search' : s + 'mockup.forms.searchBox;mainText=;flipH=1', 2686// 'Image_ipad_alert_dialog' : cs, //TODO 2687// 'Image_ipad_dialog' : cs, //TODO 2688 'Image_ipad_popover' : s + 'ios.iOption;barPos=50;pointerPos=top;buttonText=', 2689// 'Image_ipad_table' : cs, //TODO 2690// 'Image_ipad_vtab' : cs, //TODO 2691//iOS 6 iPad Controls 2692 'Image_ipad_button_black' : '', 2693 'Image_ipad_button_blue' : '', 2694 'Image_ipad_button_grayblue' : '', 2695 'Image_ipad_button_red' : '', 2696 'Image_ipad_back_button_gray' : s + 'ios.iButtonBack;buttonText=;fillColor=#eeeeee;fillColor2=#aaaaaa', 2697 'Image_ipad_back_button_black' : s + 'ios.iButtonBack;buttonText=;fillColor=#888888;fillColor2=#000000', 2698 'Image_ipad_sort_handle' : s + 'ios7.icons.options', 2699 'Image_ipad_dropdown' : s + 'ios.iComboBox;buttonText=;fillColor=#dddddd;fillColor2=#3D5565', 2700 'Image_ipad_email_name' : '', 2701 'Image_ipad_prev_next' : s + 'ios.iPrevNext;strokeColor=#444444;fillColor=#dddddd;fillColor2=#3D5565;fillColor3=#ffffff', 2702 'Image_ipad_keyboard_portrait' : s + 'ios.iKeybLett', 2703 'Image_ipad_keyboard_landscape' : s + 'ios.iKeybLett', 2704// 'Image_ipad_large_tabbed_button' : cs, //TODO 2705// 'Image_ipad_sort_button' : cs, //TODO 2706// 'Image_ipad_tab_bar' : cs, //TODO 2707 'Image_ipad_slider' : s + 'ios.iSlider;barPos=20', 2708// 'Image_ipad_switch_off' 2709//iOS 6 iPad Icons 2710 'Image_ipad_add_icon_blue' : s + 'ios.iAddIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff', 2711 'Image_ipad_add_icon_green' : s + 'ios.iAddIcon;fillColor=#7AdF78;fillColor2=#1A9917;strokeColor=#ffffff', 2712 'Image_ipad_remove_icon' : s + 'ios.iDeleteIcon;fillColor=#e8878E;fillColor2=#BD1421;strokeColor=#ffffff', 2713 'Image_ipad_arrow_icon' : s + 'ios.iArrowIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff', 2714 'Image_ipad_arrow' : s + 'ios7.misc.more', 2715 'Image_ipad_checkmark' : s + 'ios7.misc.check', 2716 'Image_ipad_check_off' : 'ellipse', //TODO 2717 'Image_ipad_location_dot' : 'ellipse', 2718 'Image_ipad_mark_as_read' : 'ellipse', 2719 'Image_ipad_pin_green' : s + 'ios.iPin;fillColor2=#00dd00;fillColor3=#004400;strokeColor=#006600', 2720 'Image_ipad_pin_red' : s + 'ios.iPin;fillColor2=#dd0000;fillColor3=#440000;strokeColor=#660000', 2721 'Image_ipad_radio_off' : 'ellipse', //TODO 2722 'Image_ipad_checkbox_off' : 'absoluteArcSize=1;arcSize=' + arcSize + ';rounded=1', //TODO 2723 'Image_ipad_indicator' : 'absoluteArcSize=1;arcSize=' + arcSize + ';rounded=1;fillColor=#e8878E;gradientColor=#BD1421;strokeColor=#ffffff', 2724//iOS 6 iPhone Elements 2725 'Image_iphone_iphone_4' : s + 'ios.iPhone;bg=bgGreen', 2726 'Image_iphone_bg_black' : '', 2727 'Image_iphone_bg_gray' : '', 2728 'Image_iphone_bg_stripe_drk' : s + 'ios.iBgStriped;strokeColor=#18211b;fillColor=#5D7585;strokeColor2=#657E8F', 2729 'Image_iphone_bg_stripe_lt' : s + 'ios.iBgStriped;strokeColor=#18211b;fillColor=#5D7585;strokeColor2=#657E8F', 2730 'Image_iphone_bg_white' : '', 2731 'Image_iphone_top_bar_app' : s + 'ios.iAppBar', 2732 'Image_iphone_top_bar_home' : s + 'ios.iTopBar2;opacity=50;fillColor=#999999;strokeColor=#cccccc;strokeWidth=1', 2733 'Image_iphone_bar_top' : '', 2734 'Image_iphone_bar_semi_trans_black' : '', 2735 'Image_iphone_bar_semi_trans_blue' : '', 2736 'Image_iphone_search' : s + 'mockup.forms.searchBox;mainText=;flipH=1', 2737// 'Image_iphone_table' : cs, //TODO 2738// 'Image_iphone_table_w_buttons' : cs, //TODO 2739// 'Image_iphone_table_w_icons' : cs, //TODO 2740// 'Image_iphone_list' : cs, //TODO 2741// 'Image_iphone_safari_top' NA 2742// 'Image_iphone_safari_bottom' NA 2743// 'Image_iphone_gray_grad_list' : '', //TODO 2744// 'Image_iphone_alert_bar' NA 2745// 'Image_iphone_alert_dialog' : cs, //TODO 2746// 'Image_iphone_dialog' : cs, //TODO 2747// 'Image_iphone_scroll_pane' : cs, //TODO 2748 'Image_iphone_alpha_list' : s + 'ios.iAlphaList', 2749//iOS 6 iPhone Controls 2750 'Image_iphone_button_black' : '', 2751 'Image_iphone_button_blue' : '', 2752 'Image_iphone_button_grayblue' : '', 2753 'Image_iphone_button_red' : '', 2754 'Image_iphone_button_lg_light' : '', 2755 'Image_iphone_button_lg_dark' : '', 2756 'Image_iphone_button_lg_green' : '', 2757 'Image_iphone_button_lg_red' : '', 2758 'Image_iphone_button_lg_yellow' : '', 2759 'Image_iphone_button_xl_green' : '', 2760 'Image_iphone_back_button' : s + 'ios.iButtonBack;strokeColor=#444444;buttonText=;fillColor=#dddddd;fillColor2=#3D5565', 2761 'Image_iphone_prev_next' : s + 'ios.iPrevNext;strokeColor=#444444;fillColor=#dddddd;fillColor2=#3D5565;fillColor3=#ffffff', 2762 'Image_iphone_sort_handle' : s + 'ios7.icons.options', 2763 'Image_iphone_slider' : s + 'ios.iSlider;barPos=60', 2764 'Image_iphone_dropdown' : s + 'ios.iComboBox;buttonText=;fillColor=#dddddd;fillColor2=#3D5565', 2765 'Image_iphone_email_name' : '', 2766 'Image_iphone_switch_off' : s + 'android.switch_off;fillColor=#666666', //TODO 2767 'Image_iphone_keyboard_button_blue' : '', 2768 'Image_iphone_keyboard_letters' : s + 'ios.iKeybLett', 2769 'Image_iphone_keyboard_landscape' : s + 'ios.iKeybLett', 2770// 'Image_iphone_large_tabbed_button' : cs, //TODO 2771// 'Image_iphone_sort_button' : cs, //TODO 2772// 'Image_iphone_tab_bar' : cs, //TODO 2773// 'Image_iphone_picker_multi' : cs, //TODO 2774// 'Image_iphone_picker_web' : cs, //TODO 2775//iOS 6 iPhone Icons 2776 'Image_iphone_add_icon_blue' : s + 'ios.iAddIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff', 2777 'Image_iphone_add_icon_green' : s + 'ios.iAddIcon;fillColor=#7AdF78;fillColor2=#1A9917;strokeColor=#ffffff', 2778 'Image_iphone_remove_icon' : s + 'ios.iDeleteIcon;fillColor=#e8878E;fillColor2=#BD1421;strokeColor=#ffffff', 2779 'Image_iphone_arrow_icon' : s + 'ios.iArrowIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff', 2780 'Image_iphone_arrow' : s + 'ios7.misc.more', 2781 'Image_iphone_checkmark' : s + 'ios7.misc.check', 2782 'Image_iphone_check_off' : 'ellipse', //TODO 2783 'Image_iphone_location_dot' : 'ellipse', 2784 'Image_iphone_mark_as_read' : 'ellipse', 2785 'Image_iphone_pin_green' : s + 'ios.iPin;fillColor2=#00dd00;fillColor3=#004400;strokeColor=#006600', 2786 'Image_iphone_pin_red' : s + 'ios.iPin;fillColor2=#dd0000;fillColor3=#440000;strokeColor=#660000', 2787 'Image_iphone_radio_off' : 'ellipse', //TODO 2788// 'Image_iphone_checkbox_off' : '', //TODO 2789 'Image_iphone_indicator' : 'fillColor=#e8878E;gradientColor=#BD1421;strokeColor=#ffffff', 2790 'Image_iphone_thread_count' : '', 2791 2792//*************************************************************************************************************** 2793// 2019 mapping 2794//*************************************************************************************************************** 2795 2796 2797// AWS 17 - Analytics 2798 'AmazonAthena2017' : 'shape=mxgraph.aws3.athena;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2799 'AmazonCloudSearch2017' : 'shape=mxgraph.aws3.cloudsearch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2800 'AmazonCloudSearchsearchdocuments2017' : 'shape=mxgraph.aws3.search_documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2801 'AmazonEMR2017' : 'shape=mxgraph.aws3.emr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2802 'AmazonEMRcluster2017' : 'shape=mxgraph.aws3.emr_cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2803 'AmazonEMREMRengine2017' : 'shape=mxgraph.aws3.emr_engine;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2804 'AmazonEMREMRengineMapRM32017' : 'shape=mxgraph.aws3.emr_engine_mapr_m3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2805 'AmazonEMREMRengineMapRM52017' : 'shape=mxgraph.aws3.emr_engine_mapr_m5;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2806 'AmazonEMREMRengineMapRM72017' : 'shape=mxgraph.aws3.emr_engine_mapr_m7;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2807 'AmazonEMRHDFScluster2017' : 'shape=mxgraph.aws3.hdfs_cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2808 'AmazonES2017' : 'shape=mxgraph.aws3.elasticsearch_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2809 'AmazonKinesis2017' : 'shape=mxgraph.aws3.kinesis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2810 'AmazonKinesisAmazonKinesisAnalytics2017' : 'shape=mxgraph.aws3.kinesis_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2811 'AmazonKinesisAmazonKinesisenabledapp2017' : 'shape=mxgraph.aws3.kinesis_enabled_app;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2812 'AmazonKinesisAmazonKinesisFirehose2017' : 'shape=mxgraph.aws3.kinesis_firehose;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2813 'AmazonKinesisAmazonKinesisStreams2017' : 'shape=mxgraph.aws3.kinesis_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2814 'AmazonQuickSight2017' : 'shape=mxgraph.aws3.quicksight;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2815 'AmazonRedshift2017' : 'shape=mxgraph.aws3.redshift;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2816 'AmazonRedshiftdensecomputenode2017' : 'shape=mxgraph.aws3.dense_compute_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2817 'AmazonRedshiftdensestoragenode2017' : 'shape=mxgraph.aws3.dense_storage_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2818 'AWSDataPipeline2017' : 'shape=mxgraph.aws3.data_pipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2819 'AWSGlue2017' : 'shape=mxgraph.aws3.glue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2820 2821// AWS 17 - Application Services 2822 'AmazonAPIGateway2017' : 'shape=mxgraph.aws3.api_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2823 'AmazonAppStream22017' : 'shape=mxgraph.aws3.appstream;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2824 'AmazonElasticTranscoder2017' : 'shape=mxgraph.aws3.elastic_transcoder;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2825 'AmazonSWF2017' : 'shape=mxgraph.aws3.swf;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2826 'AmazonSWFdecider2017' : 'shape=mxgraph.aws3.decider;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2827 'AmazonSWFworker2017' : 'shape=mxgraph.aws3.worker;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2828 'AWSStepFunctions2017' : 'shape=mxgraph.aws3.step_functions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2829 2830// AWS 17 - Artificial Intelligence 2831 'AmazonLex2017' : 'shape=mxgraph.aws3.lex;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2832 'AmazonMachineLearning2017' : 'shape=mxgraph.aws3.machine_learning;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2833 'AmazonPolly2017' : 'shape=mxgraph.aws3.polly;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2834 'AmazonRekognition2017' : 'shape=mxgraph.aws3.rekognition;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2835 2836// AWS 17 - Business Productivity 2837 'AmazonChime2017' : 'shape=mxgraph.aws3.chime;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2838 'AmazonWorkMail2017' : 'shape=mxgraph.aws3.workmail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2839 'AmazonWorkDocs2017' : 'shape=mxgraph.aws3.workdocs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2840 2841// AWS 17 - Compute 2842 'AmazonEC22017' : 'shape=mxgraph.aws3.ec2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2843 'AmazonEC2AMI2017' : 'shape=mxgraph.aws3.ami;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2844 'AmazonEC2AutoScaling2017' : 'shape=mxgraph.aws3.auto_scaling;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2845 'AmazonEC2DBoninstance2017' : 'shape=mxgraph.aws3.db_on_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2846 'AmazonEC2EC2rescue2017' : 'shape=mxgraph.aws3.rescue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2847 'AmazonEC2ElasticIPaddress2017' : 'shape=mxgraph.aws3.elastic_ip;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2848 'AmazonEC2instance2017' : 'shape=mxgraph.aws3.instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2849 'AmazonEC2instances2017' : 'shape=mxgraph.aws3.instances;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2850 'AmazonEC2instancewithCloudWatch2017' : 'shape=mxgraph.aws3.instance_with_cloudwatch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2851 'AmazonEC2optimizedinstance2017' : 'shape=mxgraph.aws3.optimized_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2852// 'AmazonEC2SpotFleet2017' : composite, 2853 'AmazonEC2SpotInstance2017' : 'shape=mxgraph.aws3.spot_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2854 'AmazonEC2X1instance2017' : 'shape=mxgraph.aws3.x1_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2855 'AmazonECR2017' : 'shape=mxgraph.aws3.ecr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2856 'AmazonECRECRRegistry2017' : 'shape=mxgraph.aws3.ecr_registry;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2857 'AmazonECS2017' : 'shape=mxgraph.aws3.ecs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2858 'AmazonECSECScontainer2017' : 'shape=mxgraph.aws3.ec2_compute_container;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2859 'AmazonECSECScontainerAlt12017' : 'shape=mxgraph.aws3.ec2_compute_container_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2860 'AmazonECSECScontainerAlt22017' : 'shape=mxgraph.aws3.ec2_compute_container_3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2861 'AmazonLightsail2017' : 'shape=mxgraph.aws3.lightsail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2862 'AmazonVPC2017' : 'shape=mxgraph.aws3.vpc;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2863 'AmazonVPCcustomergateway2017' : 'shape=mxgraph.aws3.customer_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2864 'AmazonVPCelasticnetworkadapter2017' : 'shape=mxgraph.aws3.elastic_network_adapter;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2865 'AmazonVPCelasticnetworkinterface2017' : 'shape=mxgraph.aws3.elastic_network_interface;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2866 'AmazonVPCendpoints2017' : 'shape=mxgraph.aws3.endpoints;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2867 'AmazonVPCflowlogs2017' : 'shape=mxgraph.aws3.flow_logs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2868 'AmazonVPCInternetgateway2017' : 'shape=mxgraph.aws3.internet_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2869 'AmazonVPCnetworkaccesscontrollist2017' : 'shape=mxgraph.aws3.network_access_controllist;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2870 'AmazonVPCrouter2017' : 'shape=mxgraph.aws3.router;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2871 'AmazonVPCVPCNATgateway2017' : 'shape=mxgraph.aws3.vpc_nat_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2872 'AmazonVPCVPCpeering2017' : 'shape=mxgraph.aws3.vpc_peering;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2873 'AmazonVPCVPNconnection2017' : 'shape=mxgraph.aws3.vpn_connection;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2874 'AmazonVPCVPNgateway2017' : 'shape=mxgraph.aws3.vpn_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2875 'AWSBatch2017' : 'shape=mxgraph.aws3.batch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2876 'AWSElasticBeanstalk2017' : 'shape=mxgraph.aws3.elastic_beanstalk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2877 'AWSElasticBeanstalkapplication2017' : 'shape=mxgraph.aws3.application;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2878 'AWSElasticBeanstalkdeployment2017' : 'shape=mxgraph.aws3.deployment;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2879 'AWSLambda2017' : 'shape=mxgraph.aws3.lambda;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2880 'AWSLambdaLambdaFunction2017' : 'shape=mxgraph.aws3.lambda_function;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2881 'ElasticLoadBalancing2017' : 'shape=mxgraph.aws3.elastic_load_balancing;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2882 'ElasticLoadBalancingApplicationLoadBalancer2017' : 'shape=mxgraph.aws3.application_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2883 'ElasticLoadBalancingELLoadBalancer2017' : 'shape=mxgraph.aws3.classic_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2884 2885// AWS 17 - Contact Center 2886 'AmazonConnect2017' : 'shape=mxgraph.aws3.connect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2887 2888// AWS 17 - Containers 2889 'AutoScalingGroup2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=8 3 1 3;verticalAlign=bottom', 2890 'AvailabilityZone2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=8 4;verticalAlign=bottom', 2891 'Region2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=1 1;verticalAlign=bottom', 2892 'SecurityGroup2017' : 'verticalAlign=bottom', 2893 'ElasticBeanStalkContainer2017' : cs, 2894 'EC2InstanceContents2017' : cs, 2895 'VPCSubnet2017' : cs, 2896 'ServerContents2017' : 'rounded=1;arcSize=10;dashed=0;fillColor=#DBDBDB;gradientColor=none;verticalAlign=bottom', 2897 'VirtualPrivateCloudContainer2017' : cs, 2898 'AWSCloudContainer2017' : cs, 2899 'CorporateDataCenterContainer2017' : cs, 2900 2901// AWS 17 - Database 2902 'AmazonDynamoDB2017' : 'shape=mxgraph.aws3.dynamo_db;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2903 'AmazonDynamoDBAccelerator2017' : 'shape=mxgraph.aws3.db_accelerator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2904 'AmazonDynamoDBattribute2017' : 'shape=mxgraph.aws3.attribute;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2905 'AmazonDynamoDBattributes2017' : 'shape=mxgraph.aws3.attributes;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2906 'AmazonDynamoDBglobalsecondaryindex2017' : 'shape=mxgraph.aws3.global_secondary_index;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2907 'AmazonDynamoDBitem2017' : 'shape=mxgraph.aws3.item;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2908 'AmazonDynamoDBitems2017' : 'shape=mxgraph.aws3.items;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2909 'AmazonDynamoDBtable2017' : 'shape=mxgraph.aws3.table;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2910 'AmazonElasticCache2017' : 'shape=mxgraph.aws3.elasticache;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2911 'AmazonElasticCachecachenode2017' : 'shape=mxgraph.aws3.cache_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2912 'AmazonElasticCacheMemcached2017' : 'shape=mxgraph.aws3.memcached;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2913 'AmazonElasticCacheRedis2017' : 'shape=mxgraph.aws3.redis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2914 'AmazonRDS2017' : 'shape=mxgraph.aws3.rds;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2915 'AmazonRDSDBinstance2017' : 'shape=mxgraph.aws3.rds_db_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2916 'AmazonRDSinstancereadreplica2017' : 'shape=mxgraph.aws3.rds_db_instance_read_replica;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2917 'AmazonRDSinstancestandby2017' : 'shape=mxgraph.aws3.rds_db_instance_standby_multi_az;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2918 'AmazonRDSMSSQLinstance2017' : 'shape=mxgraph.aws3.ms_sql_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2919 'AmazonRDSMSSQLinstancealternate2017' : 'shape=mxgraph.aws3.ms_sql_instance_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2920 'AmazonRDSMySQLDBinstance2017' : 'shape=mxgraph.aws3.ms_sql_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2921 'AmazonRDSMySQLinstancealternate2017' : 'shape=mxgraph.aws3.mysql_db_instance_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2922 'AmazonRDSoracleDBinstance2017' : 'shape=mxgraph.aws3.oracle_db_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2923 'AmazonRDSOracleDBinstancealternate2017' : 'shape=mxgraph.aws3.oracle_db_instance_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2924 'AmazonRDSPIOP2017' : 'shape=mxgraph.aws3.piop;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2925 'AmazonRDSPostgreSQLinstance2017' : 'shape=mxgraph.aws3.postgre_sql_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2926 'AmazonRDSSQLmaster2017' : 'shape=mxgraph.aws3.sql_master;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2927 'AmazonRDSSQLslave2017' : 'shape=mxgraph.aws3.sql_slave;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2928 'AWSDMS2017' : 'shape=mxgraph.aws3.database_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2929 'AWSDMSdatabasemigrationworkflowjob2017' : 'shape=mxgraph.aws3.database_migration_workflow_job;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2930 2931// AWS 17 - Desktop App Straning 2932 'AmazonWorkSpaces2017' : 'shape=mxgraph.aws3.workspaces;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2933 2934// AWS 17 - Developer Tools 2935 'AWSCodeBuild2017' : 'shape=mxgraph.aws3.codebuild;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2936 'AWSCodeCommit2017' : 'shape=mxgraph.aws3.codecommit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2937 'AWSCodeDeploy2017' : 'shape=mxgraph.aws3.codedeploy;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2938 'AWSCodePipeline2017' : 'shape=mxgraph.aws3.codepipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2939 'AWSCodeStar2017' : 'shape=mxgraph.aws3.codestar;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2940 'AWSXRay2017' : 'shape=mxgraph.aws3.x_ray;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2941 2942// AWS 17 - Game Development 2943 'AmazonGameLift2017' : 'shape=mxgraph.aws3.gamelift;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2944 2945// AWS 17 - General 2946 'AWScloud2017' : 'shape=mxgraph.aws3.cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2947 'AWSManagementConsole2017' : 'shape=mxgraph.aws3.management_console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2948 'client2017' : 'shape=mxgraph.aws3.management_console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2949 'corporatedatacenter2017' : 'shape=mxgraph.aws3.corporate_data_center;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2950 'disk2017' : 'shape=mxgraph.aws3.disk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2951 'forums2017' : 'shape=mxgraph.aws3.forums;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2952 'genericdatabase2017' : 'shape=mxgraph.aws3.generic_database;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2953 'Internet2017' : 'shape=mxgraph.aws3.internet;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2954 'Internetalternate12017' : 'shape=mxgraph.aws3.internet_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2955 'Internetalternate22017' : 'shape=mxgraph.aws3.internet_3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2956 'mobileclient2017' : 'shape=mxgraph.aws3.mobile_client;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2957 'multimedia2017' : 'shape=mxgraph.aws3.multimedia;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2958 'officebuilding2017' : 'shape=mxgraph.aws3.office_building;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2959 'SAMLtoken2017' : 'shape=mxgraph.aws3.saml_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2960 'SSLpadlock2017' : 'shape=mxgraph.aws3.ssl_padlock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2961 'tapestorage2017' : 'shape=mxgraph.aws3.tape_storage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2962 'traditionalserver2017' : 'shape=mxgraph.aws3.traditional_server;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2963 'user2017' : 'shape=mxgraph.aws3.user;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2964 'users2017' : 'shape=mxgraph.aws3.users;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2965 'virtualprivatecloud2017' : 'shape=mxgraph.aws3.virtual_private_cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2966 2967// AWS 17 - IoT 2968 'AWSIoTlambdafunction2017' : 'shape=mxgraph.aws3.lambda_function;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2969 'AWSIoTfireTVstick2017' : 'shape=mxgraph.aws3.fire_tv_stick;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2970 'AWSIoTfireTV2017' : 'shape=mxgraph.aws3.fire_tv;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2971 'AWSIoTecho2017' : 'shape=mxgraph.aws3.echo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2972 'AWSIoTAVSenableddevice2017' : 'shape=mxgraph.aws3.alexa_enabled_device;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2973 'AWSIoTalexavoiceservice2017' : 'shape=mxgraph.aws3.alexa_voice_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2974 'AWSIoTalexasmarthomeskill2017' : 'shape=mxgraph.aws3.alexa_smart_home_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2975 'AWSIoTalexaskill2017' : 'shape=mxgraph.aws3.alexa_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2976 'AWSIoTHTTPprotocol2017' : 'shape=mxgraph.aws3.http_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2977 'AWSIoTHTTP2protocol2017' : 'shape=mxgraph.aws3.http_2_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2978 'AWSIoThardwareboard2017' : 'shape=mxgraph.aws3.hardware_board;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2979 'AWSIoTrule2017' : 'shape=mxgraph.aws3.rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2980 'AWSIoTpolicy2017' : 'shape=mxgraph.aws3.policy;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2981 'AWSIoTMQTTprotocol2017' : 'shape=mxgraph.aws3.mqtt_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2982 'AWSIoTaction2017' : 'shape=mxgraph.aws3.action;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2983 'AWSIoTtopic2017' : 'shape=mxgraph.aws3.topic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2984 'AWSIoTshadow2017' : 'shape=mxgraph.aws3.shadow;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2985 'AWSIoTdesiredstate2017' : 'shape=mxgraph.aws3.desired_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2986 'AWSIoTcertificate2017' : 'shape=mxgraph.aws3.certificate;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2987 'AWSIoTreportedstate2017' : 'shape=mxgraph.aws3.reported_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2988 'AWSIoTsimulator2017' : 'shape=mxgraph.aws3.simulator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2989 'AWSIoTservo2017' : 'shape=mxgraph.aws3.servo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2990 'AWSIoTsensor2017' : 'shape=mxgraph.aws3.sensor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2991 'AWSIoTactuator2017' : 'shape=mxgraph.aws3.actuator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2992 'AWSIoTthingthermostat2017' : 'shape=mxgraph.aws3.thermostat;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2993 'AWSIoTthingmedicalemergency2017' : 'shape=mxgraph.aws3.medical_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2994 'AWSIoTthingtravel2017' : 'shape=mxgraph.aws3.travel;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2995 'AWSIoTthingcoffeepot2017' : 'shape=mxgraph.aws3.coffee_pot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2996 'AWSIoTthingcart2017' : 'shape=mxgraph.aws3.cart;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2997 'AWSIoTthingcamera2017' : 'shape=mxgraph.aws3.camera;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2998 'AWSIoTthingpoliceemergency2017' : 'shape=mxgraph.aws3.police_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 2999 'AWSIoTthingdoorlock2017' : 'shape=mxgraph.aws3.door_lock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3000 'AWSIoTthingutility2017' : 'shape=mxgraph.aws3.utility;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3001 'AWSIoTthingcar2017' : 'shape=mxgraph.aws3.car;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3002 'AWSIoTthingbank2017' : 'shape=mxgraph.aws3.bank;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3003 'AWSIoTthingwindfarm2017' : 'shape=mxgraph.aws3.windfarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3004 'AWSIoTthingbicycle2017' : 'shape=mxgraph.aws3.bicycle;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3005 'AWSIoTthinghouse2017' : 'shape=mxgraph.aws3.house;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3006 'AWSIoTthingfactory2017' : 'shape=mxgraph.aws3.factory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3007 'AWSIoTthinglightbulb2017' : 'shape=mxgraph.aws3.lightbulb;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3008 'AWSIoTthinggeneric2017' : 'shape=mxgraph.aws3.generic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3009 'AWSIoTAWSGreengrass2017' : 'shape=mxgraph.aws3.greengrass;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3010 'AWSIoT2017' : 'shape=mxgraph.aws3.aws_iot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3011 3012// AWS 17 - Management 3013 'AmazonCloudWatch2017' : 'shape=mxgraph.aws3.cloudwatch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3014 'AmazonCloudWatchalarm2017' : 'shape=mxgraph.aws3.alarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3015 'AmazonCloudWatcheventeventbased2017' : 'shape=mxgraph.aws3.event_event_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3016 'AmazonCloudWatcheventtimebased2017' : 'shape=mxgraph.aws3.event_time_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3017 'AmazonCloudWatchrule2017' : 'shape=mxgraph.aws3.config_rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3018 'AmazonEC2SystemsManager2017' : 'shape=mxgraph.aws3.ec2_systems_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3019 'AmazonEC2SystemsManagerAutomation2017' : 'shape=mxgraph.aws3.automation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3020 'AmazonEC2SystemsManagerdocuments2017' : 'shape=mxgraph.aws3.documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3021 'AmazonEC2SystemsManagerInventory2017' : 'shape=mxgraph.aws3.inventory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3022 'AmazonEC2SystemsManagerMaintenanceWindow2017' : 'shape=mxgraph.aws3.maintenance_window;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3023 'AmazonEC2SystemsManagerParameterStore2017' : 'shape=mxgraph.aws3.parameter_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3024 'AmazonEC2SystemsManagerPatchManager2017' : 'shape=mxgraph.aws3.patch_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3025 'AmazonEC2SystemsManagerRunCommand2017' : 'shape=mxgraph.aws3.run_command;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3026 'AmazonEC2SystemsManagerStateManager2017' : 'shape=mxgraph.aws3.state_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3027 'AWSCloudFormation2017' : 'shape=mxgraph.aws3.cloudformation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3028 'AWSCloudFormationchangeset2017' : 'shape=mxgraph.aws3.change_set;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3029 'AWSCloudFormationstack2017' : 'shape=mxgraph.aws3.stack_aws_cloudformation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3030 'AWSCloudFormationtemplate2017' : 'shape=mxgraph.aws3.template;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3031 'AWSCloudTrail2017' : 'shape=mxgraph.aws3.cloudtrail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3032 'AWSConfig2017' : 'shape=mxgraph.aws3.config;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3033 'AWSManagedServices2017' : 'shape=mxgraph.aws3.managed_services;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3034 'AWSOpsWorks2017' : 'shape=mxgraph.aws3.opsworks;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3035 'AWSOpsWorksapps2017' : 'shape=mxgraph.aws3.apps;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3036 'AWSOpsWorksdeployments2017' : 'shape=mxgraph.aws3.deployments;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3037 'AWSOpsWorksinstances2017' : 'shape=mxgraph.aws3.instances_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3038 'AWSOpsWorkslayers2017' : 'shape=mxgraph.aws3.layers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3039 'AWSOpsWorksmonitoring2017' : 'shape=mxgraph.aws3.monitoring;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3040 'AWSOpsWorkspermissions2017' : 'shape=mxgraph.aws3.permissions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3041 'AWSOpsWorksresources2017' : 'shape=mxgraph.aws3.resources;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3042 'AWSOpsWorksstack2017' : 'shape=mxgraph.aws3.stack_aws_opsworks;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3043 'AWSServiceCatalog2017' : 'shape=mxgraph.aws3.service_catalog;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3044 'AWSTrustedAdvisor2017' : 'shape=mxgraph.aws3.trusted_advisor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3045 'AWSTrustedAdvisorchecklist2017' : 'shape=mxgraph.aws3.checklist;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3046 'AWSTrustedAdvisorchecklistcost2017' : 'shape=mxgraph.aws3.checklist_cost;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3047 'AWSTrustedAdvisorchecklistfaulttolerance2017' : 'shape=mxgraph.aws3.checklist_fault_tolerance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3048 'AWSTrustedAdvisorchecklistperformance2017' : 'shape=mxgraph.aws3.checklist_performance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3049 'AWSTrustedAdvisorchecklistsecurity2017' : 'shape=mxgraph.aws3.checklist_security;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3050 3051// AWS 17 - Messaging 3052 'AmazonPinpoint2017' : 'shape=mxgraph.aws3.pinpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3053 'AmazonSES2017' : 'shape=mxgraph.aws3.ses;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3054 'AmazonSESemail2017' : 'shape=mxgraph.aws3.email;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3055 'AmazonSNS2017' : 'shape=mxgraph.aws3.sns;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3056 'AmazonSNSemailnotification2017' : 'shape=mxgraph.aws3.email_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3057 'AmazonSNSHTTPnotification2017' : 'shape=mxgraph.aws3.http_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3058 'AmazonSNStopic2017' : 'shape=mxgraph.aws3.topic_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3059 'AmazonSQS2017' : 'shape=mxgraph.aws3.sqs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3060 'AmazonSQSmessage2017' : 'shape=mxgraph.aws3.message;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3061 'AmazonSQSqueue2017' : 'shape=mxgraph.aws3.queue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3062 3063// AWS 17 - Migration 3064 'AWSApplicationDiscoveryService2017' : 'shape=mxgraph.aws3.application_discovery_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3065 'AWSMigrationHub2017' : 'shape=mxgraph.aws3.migration_hub_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3066 'AWSSMS2017' : 'shape=mxgraph.aws3.server_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3067 'AWSSnowball2017' : 'shape=mxgraph.aws3.snowball;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3068 'AWSSnowballimportexport2017' : 'shape=mxgraph.aws3.import_export;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3069 3070// AWS 17 - Mobile Services 3071 'AmazonCognito2017' : 'shape=mxgraph.aws3.cognito;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3072 'AmazonMobileAnalytics2017' : 'shape=mxgraph.aws3.mobile_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3073 'AWSDeviceFarm2017' : 'shape=mxgraph.aws3.device_farm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3074 'AWSMobileHub2017' : 'shape=mxgraph.aws3.mobile_hub;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fillColor=#AD688A;gradientColor=#F58435;gradientDirection=west;', 3075 3076// AWS 17 - Networking & Content Delivery 3077 'AmazonCloudFront2017' : 'shape=mxgraph.aws3.cloudfront;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3078 'AmazonCloudFrontdownloaddistribution2017' : 'shape=mxgraph.aws3.download_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3079 'AmazonCloudFrontedgelocation2017' : 'shape=mxgraph.aws3.edge_location;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3080 'AmazonCloudFrontstreamingdistribution2017' : 'shape=mxgraph.aws3.streaming_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3081 'AmazonRoute532017' : 'shape=mxgraph.aws3.route_53;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3082 'AmazonRoute53hostedzone2017' : 'shape=mxgraph.aws3.hosted_zone;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3083 'AmazonRoute53routetable2017' : 'shape=mxgraph.aws3.route_table;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3084 'AmazonVPCinternetgateway2017' : 'shape=mxgraph.aws3.internet_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3085 'AWSDirectConnect2017' : 'shape=mxgraph.aws3.direct_connect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3086 'ElasticLoadBalancingClassicLoadBalancer2017' : 'shape=mxgraph.aws3.classic_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3087 3088// AWS 17 - On-Demand Workforce 3089 'AmazonMechanicalTurk2017' : 'shape=mxgraph.aws3.mechanical_turk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3090 'AmazonMechanicalTurkassignmenttask2017' : 'shape=mxgraph.aws3.assignment_task;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3091 'AmazonMechanicalTurkhumanintelligencetasks2017' : 'shape=mxgraph.aws3.human_intelligence_tasks_hit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3092 'AmazonMechanicalTurkrequester2017' : 'shape=mxgraph.aws3.requester;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3093 'AmazonMechanicalTurkworkers2017' : 'shape=mxgraph.aws3.users;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3094 3095// AWS 17 - SDKs 3096 'Xamarin2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3097 'Ruby2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3098 'Python2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3099 'PHP2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3100 'Nodejs2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3101 'Net2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3102 'JavaScript2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3103 'Java2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3104 'iOS2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3105 'AWSToolsForWindowsPowerShell2017' : 'shape=mxgraph.aws3.toolkit_for_windows_powershell;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3106 'AWSToolkitForVisualStudio2017' : 'shape=mxgraph.aws3.toolkit_for_visual_studio;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3107 'AWSToolkitForEclipse2017' : 'shape=mxgraph.aws3.toolkit_for_eclipse;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3108 'AWSCLI2017' : 'shape=mxgraph.aws3.cli;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3109 'Android2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3110 3111// AWS 17 - Serurity Identity and Compliance 3112 'ACMcertificatemanager2017' : 'shape=mxgraph.aws3.certificate_manager_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3113 'AmazonCloudDirectory2017' : 'shape=mxgraph.aws3.clouddirectory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3114 'AmazonInspector2017' : 'shape=mxgraph.aws3.inspector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3115 'AmazonInspectoragent2017' : 'shape=mxgraph.aws3.agent;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3116 'AmazonMacie2017' : 'shape=mxgraph.aws3.macie;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3117 'AWSArtifact2017' : 'shape=mxgraph.aws3.artifact;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3118 'AWSCertificateManager2017' : 'shape=mxgraph.aws3.certificate_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3119 'AWSCloudHSM2017' : 'shape=mxgraph.aws3.cloudhsm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3120 'AWSDirectoryService2017' : 'shape=mxgraph.aws3.directory_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3121 'AWSKMS2017' : 'shape=mxgraph.aws3.kms;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3122 'AWSOrganizations2017' : 'shape=mxgraph.aws3.organizations;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3123 'AWSShield2017' : 'shape=mxgraph.aws3.shield;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3124 'AWSWAF2017' : 'shape=mxgraph.aws3.waf;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3125 'AWSWAFfilteringrule2017' : 'shape=mxgraph.aws3.filtering_rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3126 'IAM2017' : 'shape=mxgraph.aws3.iam;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3127 'IAMaddon2017' : 'shape=mxgraph.aws3.add_on;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3128 'IAMAWSSTS2017' : 'shape=mxgraph.aws3.sts;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3129 'IAMAWSSTS22017' : 'shape=mxgraph.aws3.sts_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3130 'IAMdataencryptionkey2017' : 'shape=mxgraph.aws3.data_encryption_key;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3131 'IAMencrypteddata2017' : 'shape=mxgraph.aws3.encrypted_data;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3132 'IAMlongtermsecuritycredential2017' : 'shape=mxgraph.aws3.long_term_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fillColor=#ffffff', 3133 'IAMMFAtoken2017' : 'shape=mxgraph.aws3.mfa_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3134 'IAMpermissions2017' : 'shape=mxgraph.aws3.permissions_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3135 'IAMrole2017' : 'shape=mxgraph.aws3.role;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3136 'IAMtemporarysecuritycredential2017' : 'shape=mxgraph.aws3.temporary_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fillColor=#ffffff', 3137 3138// AWS 17 - Storage 3139 'AmazonEBS2017' : 'shape=mxgraph.aws3.volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3140 'AmazonEFS2017' : 'shape=mxgraph.aws3.efs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3141 'AmazonEFSEFSfilesystem2017' : 'shape=mxgraph.aws3.efs_share;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3142 'AmazonGlacier2017' : 'shape=mxgraph.aws3.glacier;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3143 'AmazonGlacierarchive2017' : 'shape=mxgraph.aws3.archive;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3144 'AmazonGlaciervault2017' : 'shape=mxgraph.aws3.vault;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3145 'AmazonS32017' : 'shape=mxgraph.aws3.s3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3146 'AmazonS3bucket2017' : 'shape=mxgraph.aws3.bucket;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3147 'AmazonS3bucketwithobjects2017' : 'shape=mxgraph.aws3.bucket_with_objects;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3148 'AmazonS3object2017' : 'shape=mxgraph.aws3.object;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3149 'AWSStorageGateway2017' : 'shape=mxgraph.aws3.storage_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3150 'AWSStorageGatewaycachedvolume2017' : 'shape=mxgraph.aws3.cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3151 'AWSStorageGatewaynoncachedvolume2017' : 'shape=mxgraph.aws3.non_cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3152 'AWSStorageGatewayvirtualtapelibrary2017' : 'shape=mxgraph.aws3.virtual_tape_library;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3153 'snapshot2017' : 'shape=mxgraph.aws3.snapshot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3154 'volume2017' : 'shape=mxgraph.aws3.volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3155 3156// AWS 19 Analytics 3157 3158 'AnalyticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3159 'AmazonAthenaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.athena;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3160 'AmazonCloudSearchAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudsearch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3161 'AmazonElasticsearchServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticsearch_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3162 'AmazonEMRAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.emr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3163 'AmazonKinesisAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3164 'AmazonKinesisDataAnalyticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_data_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3165 'AmazonKinesisDataFirehoseAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_data_firehose;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3166 'AmazonKinesisDataStreamsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_data_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3167 'AmazonKinesisVideoStreamsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_video_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3168 'AmazonManagedStreamingforKafkaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.managed_streaming_for_kafka;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3169 'AmazonQuickSightAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.quicksight;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3170 'AmazonRedshiftAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.redshift;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3171 'AWSDataPipelineAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.data_pipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3172 'AWSGlueAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.glue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3173 'AWSLakeFormationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lake_formation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3174 'AmazonCloudSearch_SearchDocumentsAWS19' : 'shape=mxgraph.aws4.search_documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3175 'AmazonEMR_ClusterAWS19' : 'shape=mxgraph.aws4.cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3176 'AmazonEMR_EMREngineAWS19' : 'shape=mxgraph.aws4.emr_engine;;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3177 'AmazonEMR_EMREngineMapRM3AWS19' : 'shape=mxgraph.aws4.emr_engine_mapr_m3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3178 'AmazonEMR_EMREngineMapRM5AWS19' : 'shape=mxgraph.aws4.emr_engine_mapr_m5;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3179 'AmazonEMR_EMREngineMapRM7AWS19' : 'shape=mxgraph.aws4.emr_engine_mapr_m7;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3180 'AmazonRedshift_DenseComputeNodeAWS19' : 'shape=mxgraph.aws4.dense_compute_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3181 'AmazonRedshift_DenseStorageNodeAWS19' : 'shape=mxgraph.aws4.dense_storage_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3182 'AWSGlue_CrawlersAWS19' : 'shape=mxgraph.aws4.glue_crawlers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3183 'AWSGlue_DataCatalogAWS19' : 'shape=mxgraph.aws4.glue_data_catalog;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3184 'AmazonEMR_HDFSClusterAWS19' : 'shape=mxgraph.aws4.cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3185 'AWSDataLake_ResourceAWS19' : 'shape=mxgraph.aws4.data_lake_resource_icon;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3186 3187// AWS 19 - Application Integration 3188 'ApplicationIntegrationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.application_integration;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3189 'AmazonMQAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.mq;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3190 'AmazonSimpleNotificationServiceSNSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sns;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3191 'AmazonSimpleQueueServiceSQSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3192 'AWSAppSyncAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3193 'AWSStepFunctionsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3194 'AmazonSimpleNotificationServiceSNS_EmailNotificationAWS19' : 'shape=mxgraph.aws4.email_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3195 'AmazonSimpleNotificationServiceSNS_HTTPNotificationAWS19' : 'shape=mxgraph.aws4.http_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3196 'AmazonSimpleNotificationServiceSNS_TopicAWS19' : 'shape=mxgraph.aws4.topic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3197 'AmazonSimpleQueueServiceSQS_MessageAWS19' : 'shape=mxgraph.aws4.message;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3198 'AmazonSimpleQueueServiceSQS_QueueAWS19' : 'shape=mxgraph.aws4.queue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3199 'AmazonAPIGateway_EndpointAWS19' : 'shape=mxgraph.aws4.endpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3200 'AmazonEventBridgeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eventbridge;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3201 'AWSElementalAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3202 3203// AWS 19 - AR & VR 3204 'ARVRAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ar_vr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3205 'AmazonSumerianAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sumerian;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3206 3207// AWS 19 - Blockchain 3208 'BlockchainAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.blockchain;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3209 'AmazonManagedBlockchainAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.managed_blockchain;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3210 'AmazonQuantumLedgerDatabaseQLDBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.quantum_ledger_database;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3211 3212// AWS 19 - Business Applications 3213 'BusinessApplicationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.business_application;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3214 'AlexaForBusinessAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.alexa_for_business;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3215 'AmazonChimeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.chime;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3216 'AmazonWorkDocsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.workdocs;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3217 'AmazonWorkMailAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.workmail;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3218 3219// AWS 19 - Compute 3220 'ComputeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.compute;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3221 'AmazonEC2AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ec2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3222 'AmazonEC2AutoScalingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.auto_scaling2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3223 'AmazonEC2ContainerRegistryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ecr;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3224 'AmazonElasticContainerServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ecs;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3225 'AmazonElasticContainerServiceforKubernetesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eks;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3226 'AmazonLightsailAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lightsail;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3227 'AWSBatchAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.batch;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3228 'AWSElasticBeanstalkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_beanstalk;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3229 'AWSFargateAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fargate;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3230 'AWSLambdaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3231 'AWSOutpostsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.outposts;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3232 'AWSServerlessApplicationRepositoryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.serverless_application_repository;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3233 'ElasticLoadBalancingELBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_load_balancing;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3234 'VMwareCloudOnAWSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.vmware_cloud_on_aws;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3235 'AmazonEC2_AMIAWS19' : 'shape=mxgraph.aws4.ami;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3236 'AmazonEC2_AutoScalingAWS19' : 'shape=mxgraph.aws4.auto_scaling2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3237 'AmazonEC2ContainerRegistry_ImageAWS19' : 'shape=mxgraph.aws4.container_registry_image;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3238 'AmazonEC2ContainerRegistry_RegistryAWS19' : 'shape=mxgraph.aws4.registry;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3239 'AmazonEC2_ElasticIPAddressAWS19' : 'shape=mxgraph.aws4.elastic_ip_address;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3240 'AmazonEC2_RescueAWS19' : 'shape=mxgraph.aws4.rescue;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3241 'AmazonElasticContainerService_Container1AWS19' : 'shape=mxgraph.aws4.container_1;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3242 'AmazonElasticContainerService_Container2AWS19' : 'shape=mxgraph.aws4.container_2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3243 'AmazonElasticContainerService_Container3AWS19' : 'shape=mxgraph.aws4.container_3;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3244 'AmazonElasticContainerService_ServiceAWS19' : 'shape=mxgraph.aws4.ecs_service;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3245 'AmazonElasticContainerService_TaskAWS19' : 'shape=mxgraph.aws4.ecs_task;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3246 'AWSElasticBeanstalk_ApplicationAWS19' : 'shape=mxgraph.aws4.application;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3247 'AWSElasticBeanstalk_DeploymentAWS19' : 'shape=mxgraph.aws4.deployment;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3248 'AWSLambda_LambdaFunctionAWS19' : 'shape=mxgraph.aws4.lambda_function;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3249 'AWSThinkboxDeadlineAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_deadline;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;', 3250 'AWSThinkboxDraftAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_draft;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;', 3251 'AWSThinkboxFrostAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_frost;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;', 3252 'AWSThinkboxKrakatoaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_krakatoa;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;', 3253 'AWSThinkboxSequoiaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_sequoia;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;', 3254 'AWSThinkboxStokeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_stoke;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;', 3255 'AWSThinkboxXMeshAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_xmesh;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;', 3256 3257 3258// AWS 19 - Cost Management 3259 'AWSCostManagementAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cost_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3260 'AWSBudgetsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.budgets;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3261 'AWSCostandUsageReportAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cost_and_usage_report;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3262 'AWSCostExplorerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cost_explorer;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3263 'ReservedInstanceReportingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.reserved_instance_reporting;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3264 3265// AWS 19 - Customer Engagement 3266 'CustomerEngagementAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.customer_engagement;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3267 'AmazonConnectAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.connect;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3268 'AmazonPinpointAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.pinpoint;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3269 'AmazonSimpleEmailServiceSESAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.simple_email_service;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3270 'AmazonSimpleEmailServiceSES_EmailAWS19' : 'shape=mxgraph.aws4.email;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3271 3272// AWS 19 - Database 3273 'DatabaseAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.database;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3274 'AmazonAuroraAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.aurora;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3275 'AmazonDocumentDBwithMongoDBcompatibilityAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.documentdb_with_mongodb_compatibility;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3276 'AmazonDynamoDBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3277 'AmazonElastiCacheAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticache;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3278 'AmazonNeptuneAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.neptune;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3279 'AmazonQuantumLedgerDatabase_QLDBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.quantum_ledger_database;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3280 'AmazonRDSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rds;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3281 'AmazonRDSonVMwareAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rds_on_vmware;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3282 'AmazonRedshift_blueAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.redshift;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3283 'AmazonTimestreamAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.timestream;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3284 'AWSDatabaseMigrationServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.database_migration_service;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3285 'AmazonDynamoDB_AttributeAWS19' : 'shape=mxgraph.aws4.attribute;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3286 'AmazonDynamoDB_AttributesAWS19' : 'shape=mxgraph.aws4.attributes;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3287 'AmazonDynamoDB_GlobalSecondaryIndexAWS19' : 'shape=mxgraph.aws4.global_secondary_index;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3288 'AmazonDynamoDB_ItemAWS19' : 'shape=mxgraph.aws4.item;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3289 'AmazonDynamoDB_ItemsAWS19' : 'shape=mxgraph.aws4.items;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3290 'AmazonDynamoDB_TableAWS19' : 'shape=mxgraph.aws4.table;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3291 'AmazonElastiCache_CacheNodeAWS19' : 'shape=mxgraph.aws4.cache_node;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3292 'AmazonElastiCache_ForMemcachedAWS19' : 'shape=mxgraph.aws4.elasticache_for_memcached;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3293 'AmazonElastiCache_ForRedisAWS19' : 'shape=mxgraph.aws4.elasticache_for_redis;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3294 'AmazonRedshift_DenseComputeNode_blueAWS19' : 'shape=mxgraph.aws4.dense_compute_node;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3295 'AmazonRedshift_DenseStorageNode_blueAWS19' : 'shape=mxgraph.aws4.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3296 'AWSDatabaseMigrationService_DatabaseMigrationWorkflowAWS19' : 'shape=mxgraph.aws4.database_migration_workflow_job;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3297 'AmazonDynamoDBDAXAWS19' : 'shape=mxgraph.aws4.dynamodb_dax;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3298 3299// AWS 19 - Desktop App Streaming 3300 'DesktopandAppStreamingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.desktop_and_app_streaming;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3301 'AmazonAppstream2AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.appstream_20;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3302 'AmazonWorkspacesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.workspaces;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3303 3304// AWS 19 - Developer Tools 3305 'DeveloperToolsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.developer_tools;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3306 'AWSCloud9AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud9;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3307 'AWSCodeBuildAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codebuild;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3308 'AWSCodeCommitAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codecommit;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3309 'AWSCodeDeployAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codedeploy;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3310 'AWSCodePipelineAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codepipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3311 'AWSCodeStarAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codestar;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3312 'AWSCommandLineInterfaceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.command_line_interface;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3313 'AWSToolsAndSDKsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.tools_and_sdks;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3314 'AWSXRayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.xray;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3315 'AWSCloudDevelopmentKitAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud_development_kit;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3316 3317// AWS 19 - EC2 Instance Types 3318 'AmazonEC2_InstanceAWS19' : 'shape=mxgraph.aws4.instance2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3319 'AmazonEC2_InstancesAWS19' : 'shape=mxgraph.aws4.instances;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3320 'AmazonEC2_InstancewithCloudWatchAWS19' : 'shape=mxgraph.aws4.instance_with_cloudwatch2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3321 'AmazonEC2_DBonInstanceAWS19' : 'shape=mxgraph.aws4.db_on_instance2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3322 'AmazonEC2_SpotInstanceAWS19' : 'shape=mxgraph.aws4.spot_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3323 'AmazonEC2_HighMemoryInstanceAWS19' : 'shape=mxgraph.aws4.high_memory_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3324 'AmazonEC2_A1InstanceAWS19' : 'shape=mxgraph.aws4.a1_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3325 'AmazonEC2_OptimizedInstanceAWS19' : 'shape=mxgraph.aws4.optimized_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3326 'AmazonEC2_C4InstanceAWS19' : 'shape=mxgraph.aws4.c4_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3327 'AmazonEC2_C5InstanceAWS19' : 'shape=mxgraph.aws4.c5_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3328 'AmazonEC2_C5nInstanceAWS19' : 'shape=mxgraph.aws4.c5n_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3329 'AmazonEC2_D2InstanceAWS19' : 'shape=mxgraph.aws4.d2_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3330 'AmazonEC2_F1InstanceAWS19' : 'shape=mxgraph.aws4.f1_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3331 'AmazonEC2_G3InstanceAWS19' : 'shape=mxgraph.aws4.g3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3332 'AmazonEC2_H1InstanceAWS19' : 'shape=mxgraph.aws4.h1_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3333 'AmazonEC2_I3InstanceAWS19' : 'shape=mxgraph.aws4.i3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3334 'AmazonEC2_M4InstanceAWS19' : 'shape=mxgraph.aws4.m4_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3335 'AmazonEC2_M5aInstanceAWS19' : 'shape=mxgraph.aws4.m5a_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3336 'AmazonEC2_M5InstanceAWS19' : 'shape=mxgraph.aws4.m5_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3337 'AmazonEC2_P2InstanceAWS19' : 'shape=mxgraph.aws4.p2_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3338 'AmazonEC2_P3InstanceAWS19' : 'shape=mxgraph.aws4.p3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3339 'AmazonEC2_R4InstanceAWS19' : 'shape=mxgraph.aws4.r4_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3340 'AmazonEC2_R5aInstanceAWS19' : 'shape=mxgraph.aws4.r5a_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3341 'AmazonEC2_R5InstanceAWS19' : 'shape=mxgraph.aws4.r5_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3342 'AmazonEC2_T2InstanceAWS19' : 'shape=mxgraph.aws4.t2_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3343 'AmazonEC2_T3aInstanceAWS19' : 'shape=mxgraph.aws4.t3a_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3344 'AmazonEC2_T3InstanceAWS19' : 'shape=mxgraph.aws4.t3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3345 'AmazonEC2_X1eInstanceAWS19' : 'shape=mxgraph.aws4.x1e_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3346 'AmazonEC2_X1InstanceAWS19' : 'shape=mxgraph.aws4.x1_instance2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3347 'AmazonEC2_z1dInstanceAWS19' : 'shape=mxgraph.aws4.z1d_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3348 3349 'AmazonWorkLinkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.worklink;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3350 3351// AWS 19 - Game Tech 3352 'GameTechAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.game_tech;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3353 'AmazonGameLiftAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.gamelift;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3354 3355// AWS 19 - General 3356 'AWSMarketplaceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.marketplace;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3357 'AWSGeneral_AWSCloudAWS19' : 'shape=mxgraph.aws4.aws_cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3358 'AWSGeneral_CorporateDataCenterAWS19' : 'shape=mxgraph.aws4.corporate_data_center;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3359 'AWSGeneral_DiskAWS19' : 'shape=mxgraph.aws4.disk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3360 'AWSGeneral_ForumsAWS19' : 'shape=mxgraph.aws4.forums;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3361 'AWSGeneral_GenericDatabaseAWS19' : 'shape=mxgraph.aws4.generic_database;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3362 'AWSGeneral_InternetAlt1AWS19' : 'shape=mxgraph.aws4.internet;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3363 'AWSGeneral_InternetAlt2AWS19' : 'shape=mxgraph.aws4.internet_alt1;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3364 'AWSGeneral_InternetGatewayAWS19' : 'shape=mxgraph.aws4.internet_alt2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3365 'AWSGeneral_MobileClientAWS19' : 'shape=mxgraph.aws4.mobile_client;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3366 'AWSGeneral_MultimediaAWS19' : 'shape=mxgraph.aws4.multimedia;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3367 'AWSGeneral_OfficeBuildingAWS19' : 'shape=mxgraph.aws4.office_building;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3368 'AWSGeneral_SAMLTokenAWS19' : 'shape=mxgraph.aws4.saml_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3369 'AWSGeneral_SDKAWS19' : 'shape=mxgraph.aws4.external_sdk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3370 'AWSGeneral_SSLPadlockAWS19' : 'shape=mxgraph.aws4.ssl_padlock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3371 'AWSGeneral_TapeStorageAWS19' : 'shape=mxgraph.aws4.tape_storage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3372 'AWSGeneral_ToolkitAWS19' : 'shape=mxgraph.aws4.external_toolkit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3373 'AWSGeneral_TraditionalServerAWS19' : 'shape=mxgraph.aws4.traditional_server;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3374 'AWSGeneral_UserAWS19' : 'shape=mxgraph.aws4.user;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3375 'AWSGeneral_UsersAWS19' : 'shape=mxgraph.aws4.users;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3376 'AWSGeneral_VirtualPrivateCloudAWS19' : 'shape=mxgraph.aws4.virtual_private_cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3377 'ClientAWS19' : 'shape=mxgraph.aws4.client;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3378 'External_SDKAWS19' : 'shape=mxgraph.aws4.external_sdk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3379 'External_ToolkitAWS19' : 'shape=mxgraph.aws4.external_toolkit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3380 3381// AWS 19 - Groups (Note: repeated below without _v2) 3382 'AWSCloudAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fillColor=none', 3383 'AWSCloudaltAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fillColor=none', 3384 'RegionAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;dashed=1;fontColor=#0E82B8;fillColor=none', 3385 'AvailabilityZoneAWS19_v2' : 'verticalAlign=top;fillColor=none;fillOpacity=100;dashed=1;dashPattern=5 5;fontColor=#0E82B8', 3386 'SecuritygroupAWS19_v2' : 'verticalAlign=top;fillColor=none;fillOpacity=100', 3387 'AutoScalingAWS19_v2' : 'shape=mxgraph.aws4.groupCenter;grIcon=mxgraph.aws4.group_auto_scaling_group;grStroke=1;verticalAlign=top;fillColor=none;fillOpacity=100;fontColor=#D75F17;spacingTop=25;fillColor=none', 3388 'VirtualprivatecloudVPCAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_vpc;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#2C8723;fillColor=none', 3389 'PrivateSubnetAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;strokeColor=#0E82B8;fillColor=none', 3390 'PublicSubnetAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;strokeColor=#2C8723;fontColor=#2C8723;fillColor=none', 3391 'ServercontentsAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_on_premise;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#5A6C86;fillColor=none', 3392 'CorporatedatacenterAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_corporate_data_center;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#5A6C86;fillColor=none', 3393 'ElasticBeanstalkcontainerAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_elastic_beanstalk;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#D75F17;fillColor=none', 3394 'EC2instancecontentsAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_ec2_instance_contents;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#D75F17;fillColor=none', 3395 'SpotFleetAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_spot_fleet;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#D75F17;fillColor=none', 3396 'AWSStepFunctionAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_step_functions_workflow;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#CB1261;fillColor=none', 3397 'GenericGroup1AWS19_v2' : 'verticalAlign=top;align=center;fillColor=none;fillOpacity=100;dashed=1;dashPattern=5 5;strokeColor=#5A6C86;fontColor=#5A6C86', 3398 'GenericGroup2AWS19_v2' : 'verticalAlign=top;align=center', 3399 3400 //Repeated from the above 3401 'AWSCloudAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fillColor=none', 3402 'AWSCloudaltAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fillColor=none', 3403 'RegionAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;dashed=1;fontColor=#0E82B8;fillColor=none', 3404 'AvailabilityZoneAWS19' : 'verticalAlign=top;fillColor=none;fillOpacity=100;dashed=1;dashPattern=5 5;fontColor=#0E82B8;strokeOpacity=100;strokeColor=#147eba', 3405 'SecuritygroupAWS19' : 'verticalAlign=top;fillColor=none;fillOpacity=100;fontColor=#DD3522', 3406 'AutoScalingAWS19' : 'shape=mxgraph.aws4.groupCenter;grIcon=mxgraph.aws4.group_auto_scaling_group;grStroke=1;verticalAlign=top;fillColor=none;fillOpacity=100;fontColor=#D75F17;spacingTop=25;fillColor=none', 3407 'VirtualprivatecloudVPCAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_vpc;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#2C8723;fillColor=none', 3408 'PrivateSubnetAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;spacingLeft=30;strokeColor=#0E82B8;fontColor=#0E82B8;fillOpacity=13;fillColor=#147eba', 3409 'PublicSubnetAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;spacingLeft=30;strokeColor=#2C8723;fontColor=#2C8723;fillOpacity=13;fillColor=#248814', 3410 'ServercontentsAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_on_premise;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#5A6C86;fillColor=none', 3411 'CorporatedatacenterAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_corporate_data_center;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#5A6C86;fillColor=none', 3412 'ElasticBeanstalkcontainerAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_elastic_beanstalk;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#D75F17;fillColor=none', 3413 'EC2instancecontentsAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_ec2_instance_contents;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#D75F17;fillColor=none', 3414 'SpotFleetAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_spot_fleet;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#D75F17;fillColor=none', 3415 'AWSStepFunctionAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_step_functions_workflow;verticalAlign=top;align=left;spacingLeft=30;fillOpacity=100;fontColor=#CB1261;fillColor=none', 3416 'GenericGroup1AWS19' : 'verticalAlign=top;align=center;fillColor=none;fillOpacity=100;dashed=1;dashPattern=5 5;strokeColor=#5A6C86;fontColor=#5A6C86', 3417 'GenericGroup2AWS19' : 'verticalAlign=top;align=center;fillOpacity=100;fillColor=#EAECEF', 3418// AWS 19 - Internet of Things 3419 'InternetofThingsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.internet_of_things;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3420 'AmazonFreeRTOSlightbgAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.freertos;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3421 'AWSIoT1ClickAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_1click;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3422 'AWSIoTButtonAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_button;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3423 'AWSIoTCoreAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_core;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3424 'AWSIoTDeviceDefenderAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_device_defender;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3425 'AWSIoTDeviceManagementAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_device_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3426 'AWSIoTEventsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_events;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3427 'AWSIoTGreengrassAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.greengrass;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3428 'AWSIoTSiteWiseAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_sitewise;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3429 'AWSIoTThingsGraphAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_things_graph;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3430 'AWSIoTAnalyticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3431 'AWSIoTAnalytics_ChannelAWS19' : 'shape=mxgraph.aws4.iot_analytics_channel;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3432 'AWSIoTAnalytics_DataStoreAWS19' : 'shape=mxgraph.aws4.iot_analytics_data_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3433 'AWSIoTAnalytics_PipelineAWS19' : 'shape=mxgraph.aws4.iot_analytics_pipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3434 'IoT_ActionAWS19' : 'shape=mxgraph.aws4.action;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3435 'IoT_ActuatorAWS19' : 'shape=mxgraph.aws4.actuator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3436 'IoT_AlexaEnabledDeviceAWS19' : 'shape=mxgraph.aws4.alexa_enabled_device;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3437 'IoT_AlexaSkillAWS19' : 'shape=mxgraph.aws4.alexa_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3438 'IoT_AlexaVoiceServiceAWS19' : 'shape=mxgraph.aws4.alexa_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3439 'IoT_BankAWS19' : 'shape=mxgraph.aws4.bank;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3440 'IoT_BicycleAWS19' : 'shape=mxgraph.aws4.bycicle;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3441 'IoT_CameraAWS19' : 'shape=mxgraph.aws4.camera;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3442 'IoT_CarAWS19' : 'shape=mxgraph.aws4.car;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3443 'IoT_CartAWS19' : 'shape=mxgraph.aws4.cart;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3444 'IoT_CertificateManagerAWS19' : 'shape=mxgraph.aws4.certificate_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3445 'IoT_CoffeePotAWS19' : 'shape=mxgraph.aws4.coffee_pot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3446 'IoT_DesiredStateAWS19' : 'shape=mxgraph.aws4.desired_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3447 'IoT_DeviceGatewayAWS19' : 'shape=mxgraph.aws4.iot_device_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3448 'IoT_DoorLockAWS19' : 'shape=mxgraph.aws4.door_lock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3449 'IoT_EchoAWS19' : 'shape=mxgraph.aws4.echo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3450 'IoT_FactoryAWS19' : 'shape=mxgraph.aws4.factory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3451 'IoT_FireTVAWS19' : 'shape=mxgraph.aws4.firetv;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3452 'IoT_FireTVStickAWS19' : 'shape=mxgraph.aws4.firetv_stick;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3453 'IoT_GenericAWS19' : 'shape=mxgraph.aws4.generic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3454 'IoT_HardwareBoardAWS19' : 'shape=mxgraph.aws4.hardware_board;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3455 'IoT_HouseAWS19' : 'shape=mxgraph.aws4.house;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3456 'IoT_HTTP2ProtocolAWS19' : 'shape=mxgraph.aws4.http2_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3457 'IoT_HTTPProtocolAWS19' : 'shape=mxgraph.aws4.http_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3458 'IoT_LambdaFunctionAWS19' : 'shape=mxgraph.aws4.lambda_function;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3459 'IoT_LightbulbAWS19' : 'shape=mxgraph.aws4.lightbulb;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3460 'IoT_MedicalEmergencyAWS19' : 'shape=mxgraph.aws4.medical_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3461 'IoT_MQTTProtocolAWS19' : 'shape=mxgraph.aws4.mqtt_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3462 'IoT_OverTheAirUpdateAWS19' : 'shape=mxgraph.aws4.iot_over_the_air_update;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3463 'IoT_PoliceEmergencyAWS19' : 'shape=mxgraph.aws4.police_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3464 'IoT_PolicyAWS19' : 'shape=mxgraph.aws4.policy;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3465 'IoT_ReportedStateAWS19' : 'shape=mxgraph.aws4.reported_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3466 'IoT_RuleAWS19' : 'shape=mxgraph.aws4.rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3467 'IoT_SensorAWS19' : 'shape=mxgraph.aws4.sensor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3468 'IoT_ServoAWS19' : 'shape=mxgraph.aws4.servo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3469 'IoT_ShadowAWS19' : 'shape=mxgraph.aws4.shadow;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3470 'IoT_SimulatorAWS19' : 'shape=mxgraph.aws4.simulator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3471 'IoT_ThermostatAWS19' : 'shape=mxgraph.aws4.thermostat;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3472 'IoT_TopicAWS19' : 'shape=mxgraph.aws4.topic_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3473 'IoT_TravelAWS19' : 'shape=mxgraph.aws4.travel;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3474 'IoT_UtilityAWS19' : 'shape=mxgraph.aws4.utility;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3475 'IoT_WindfarmAWS19' : 'shape=mxgraph.aws4.windfarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3476 'AWSIoTGreengrass_ConnectorAWS19' : 'shape=mxgraph.aws4.connector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3477 'AWSIoTAnalytics_DataSetAWS19' : 'shape=mxgraph.aws4.data_set;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3478 'AWSIoTAnalytics_NotebookAWS19' : 'shape=mxgraph.aws4.notebook;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3479 3480// AWS 19 - Machine Learning 3481 'MachineLearningAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.machine_learning;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3482 'AmazonComprehendAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.comprehend;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3483 'AmazonElasticInferenceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_inference;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3484 'AmazonForecastAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.forecast;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3485 'AmazonLexAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lex;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3486 'AmazonPersonalizeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.personalize;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3487 'AmazonPollyAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.polly;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3488 'AmazonRekognitionAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rekognition;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3489 'AmazonSageMakerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sagemaker;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3490 'AmazonSageMakerGroundTruthAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sagemaker_ground_truth;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3491 'AmazonTextractAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.textract;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3492 'AmazonTranscribeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.transcribe;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3493 'AmazonTranslateAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.translate;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3494 'ApacheMXNetonAWSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.apache_mxnet_on_aws;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3495 'AWSDeepLearningAMIsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deep_learning_amis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3496 'AWSDeepLensAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deeplens;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3497 'AWSDeepRacerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deepracer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3498 'TensorFlowonAWSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.tensorflow_on_aws;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3499 'AmazonSageMaker_ModelAWS19' : 'shape=mxgraph.aws4.sagemaker_model;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3500 'AmazonSageMaker_NotebookAWS19' : 'shape=mxgraph.aws4.sagemaker_notebook;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3501 'AmazonSageMaker_TrainAWS19' : 'shape=mxgraph.aws4.sagemaker_train;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3502 'AmazonRekognition_ImageAWS19' : 'shape=mxgraph.aws4.rekognition_image;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3503 'AmazonRekognition_VideoAWS19' : 'shape=mxgraph.aws4.rekognition_video;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3504 'AWSDeepLearningContainersAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deep_learning_containers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3505 3506// AWS 19 - Management & Governance 3507 'ManagementandGovernanceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.management_and_governance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3508 'AmazonCloudWatchAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3509 'AWSAutoScalingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.autoscaling;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3510 'AWSCloudFormationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudformation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3511 'AWSCloudTrailAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudtrail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3512 'AWSCommandLineInterface_pinkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.command_line_interface;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3513 'AWSConfigAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.config;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3514 'AWSControlTowerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.control_tower;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3515 'AWSLicenseManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.license_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3516 'AWSManagedServicesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.managed_services;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3517 'AWSManagementConsoleAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.management_console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3518 'AWSOpsWorksAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.opsworks;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3519 'AWSPersonalHealthDashboardAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.personal_health_dashboard;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3520 'AWSServiceCatalogAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.service_catalog;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3521 'AWSSystemsManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.systems_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3522 'AWSTrustedAdvisorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.trusted_advisor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3523 'AWSWellArchitectedToolAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.well_architected_tool;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3524 'AmazonCloudWatch_AlarmAWS19' : 'shape=mxgraph.aws4.alarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3525 'AmazonCloudWatch_EventEventBasedAWS19' : 'shape=mxgraph.aws4.event_event_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3526 'AmazonCloudWatch_EventTimeBasedAWS19' : 'shape=mxgraph.aws4.event_time_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3527 'AmazonCloudWatch_RuleAWS19' : 'shape=mxgraph.aws4.rule_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3528 'AWSCloudFormation_ChangeSetAWS19' : 'shape=mxgraph.aws4.change_set;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3529 'AWSCloudFormation_StackAWS19' : 'shape=mxgraph.aws4.stack;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3530 'AWSCloudFormation_TemplateAWS19' : 'shape=mxgraph.aws4.template;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3531 'AWSOpsWorks_AppsAWS19' : 'shape=mxgraph.aws4.opsworks_apps;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3532 'AWSOpsWorks_DeploymentsAWS19' : 'shape=mxgraph.aws4.deployments;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3533 'AWSOpsWorks_InstancesAWS19' : 'shape=mxgraph.aws4.instances_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3534 'AWSOpsWorks_LayersAWS19' : 'shape=mxgraph.aws4.layers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3535 'AWSOpsWorks_MonitoringAWS19' : 'shape=mxgraph.aws4.monitoring;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3536 'AWSOpsWorks_PermissionsAWS19' : 'shape=mxgraph.aws4.opsworks_permissions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3537 'AWSOpsWorks_ResourcesAWS19' : 'shape=mxgraph.aws4.resources;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3538 'AWSOpsWorks_Stack2AWS19' : 'shape=mxgraph.aws4.stack2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3539 'AWSSystemsManager_AutomationAWS19' : 'shape=mxgraph.aws4.automation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3540 'AWSSystemsManager_DocumentsAWS19' : 'shape=mxgraph.aws4.documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3541 'AWSSystemsManager_InventoryAWS19' : 'shape=mxgraph.aws4.inventory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3542 'AWSSystemsManager_MaintenanceWindowsAWS19' : 'shape=mxgraph.aws4.maintenance_windows;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3543 'AWSSystemsManager_ParameterStoreAWS19' : 'shape=mxgraph.aws4.parameter_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3544 'AWSSystemsManager_PatchManagerAWS19' : 'shape=mxgraph.aws4.patch_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3545 'AWSSystemsManager_RunCommandAWS19' : 'shape=mxgraph.aws4.run_command;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3546 'AWSSystemsManager_StateManagerAWS19' : 'shape=mxgraph.aws4.state_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3547 'AWSTrustedAdvisor_ChecklistAWS19' : 'shape=mxgraph.aws4.checklist;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3548 'AWSTrustedAdvisor_ChecklistCostAWS19' : 'shape=mxgraph.aws4.checklist_cost;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3549 'AWSTrustedAdvisor_ChecklistFaultTolerantAWS19' : 'shape=mxgraph.aws4.checklist_fault_tolerant;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3550 'AWSTrustedAdvisor_ChecklistPerformanceAWS19' : 'shape=mxgraph.aws4.checklist_performance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3551 'AWSTrustedAdvisor_ChecklistSecurityAWS19' : 'shape=mxgraph.aws4.checklist_security;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3552 'AWSOrganizationsAWS19_v2' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.organizations;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3553 'AWSSystemsManagerOpsCenterAWS19' : 'shape=mxgraph.aws4.systems_manager_opscenter;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3554 3555// AWS 19 - Media Services 3556 'MediaServicesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.media_services;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3557 'AmazonElasticTranscoderAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_transcoder;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3558 'AmazonKinesisVideoStreams_orangeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_video_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3559 'AWSElementalMediaConnectAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediaconnect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3560 'AWSElementalMediaConvertAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediaconvert;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3561 'AWSElementalMediaLiveAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_medialive;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3562 'AWSElementalMediaPackageAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediapackage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3563 'AWSElementalMediaStoreAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediastore;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3564 'AWSElementalMediaTailorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediatailor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3565 3566// AWS 19 - Migration & Transfer 3567 'MigrationandTransferAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.migration_and_transfer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3568 'AWSApplicationDiscoveryServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.application_discovery_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3569 'AWSDatabaseMigrationService_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.database_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3570 'AWSDataSyncAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.datasync;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3571 'AWSMigrationHubAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.migration_hub;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3572 'AWSServerMigrationServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.server_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3573 'AWSSnowballAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3574 'AWSSnowballEdgeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball_edge;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3575 'AWSSnowmobileAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowmobile;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3576 'AWSTransferforSFTPAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.transfer_for_sftp;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3577 'AWSDataSync_AgentAWS19' : 'shape=mxgraph.aws4.agent2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3578// AWS 19 - Mobile 3579 'MobileAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.mobile;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3580 'AmazonAPIGatewayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3581 'AmazonPinpoint_redAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.pinpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3582 'AWSAmplifyAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.amplify;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3583 'AWSAppSync_redAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.appsync;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3584 'AWSDeviceFarmAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.device_farm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3585 3586// AWS 19 - Networking & Content Delivery 3587 'NetworkingandContentDeliveryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.networking_and_content_delivery;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3588 'AmazonAPIGateway_purpleAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3589 'AmazonCloudFrontAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3590 'AmazonRoute53AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.route_53;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3591 'AmazonVPCAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.vpc;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3592 'AmazonVPCPrivateLinkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.vpc_privatelink;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3593 'AWSAppMeshAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.app_mesh;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3594 'AWSClientVPNAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.client_vpn;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3595 'AWSCloudMapAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud_map;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3596 'AWSDirectConnectAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.direct_connect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3597 'AWSGlobalAcceleratorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.global_accelerator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3598 'AWSTransitGatewayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.transit_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3599 'AmazonCloudFront_DownloadDistributionAWS19' : 'shape=mxgraph.aws4.download_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3600 'AmazonCloudFront_EdgeLocationAWS19' : 'shape=mxgraph.aws4.edge_location;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3601 'AmazonCloudFront_StreamingDistributionAWS19' : 'shape=mxgraph.aws4.streaming_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3602 'AmazonRoute53_HostedZoneAWS19' : 'shape=mxgraph.aws4.hosted_zone;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3603 'AmazonRoute53_RouteTableAWS19' : 'shape=mxgraph.aws4.route_table;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3604 'AmazonVPC_CustomerGatewayAWS19' : 'shape=mxgraph.aws4.customer_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3605 'AmazonVPC_ElasticNetworkAdapterAWS19' : 'shape=mxgraph.aws4.elastic_network_adapter;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3606 'AmazonVPC_ElasticNetworkInterfaceAWS19' : 'shape=mxgraph.aws4.elastic_network_interface;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3607 'AmazonVPC_EndpointsAWS19' : 'shape=mxgraph.aws4.endpoints;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3608 'AmazonVPC_FlowLogsAWS19' : 'shape=mxgraph.aws4.flow_logs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3609 'AmazonVPC_InternetGatewayAWS19' : 'shape=mxgraph.aws4.internet_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3610 'AmazonVPC_NATGatewayAWS19' : 'shape=mxgraph.aws4.nat_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3611 'AmazonVPC_NetworkAccessControlListAWS19' : 'shape=mxgraph.aws4.network_access_control_list;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3612 'AmazonVPC_PeeringAWS19' : 'shape=mxgraph.aws4.peering;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3613 'AmazonVPC_RouterAWS19' : 'shape=mxgraph.aws4.router;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3614 'AmazonVPC_VPNConnectionAWS19' : 'shape=mxgraph.aws4.vpn_connection;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3615 'AmazonVPC_VPNGatewayAWS19' : 'shape=mxgraph.aws4.vpn_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3616 'AmazonNetworkingAPIGateway_EndpointAWS19' : 'shape=mxgraph.aws4.endpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3617 'AmazonVPCTrafficMirroringAWS19' : 'shape=mxgraph.aws4.vpc_traffic_mirroring;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3618 'AWSSitetoSiteVPNAWS19' : 'shape=mxgraph.aws4.site_to_site_vpn;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3619 'ElasticLoadBalancing_ApplicationloadbalancerAWS19' : 'shape=mxgraph.aws4.application_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3620 'ElasticLoadBalancingELBAWS19_v2' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_load_balancing;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3621 'ElasticLoadBalancing_ClassicloadbalancerAWS19' : 'shape=mxgraph.aws4.classic_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3622 'ElasticLoadBalancing_NetworkloadbalancerAWS19' : 'shape=mxgraph.aws4.network_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3623 3624// AWS 19 - Robotics 3625 'RoboticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.robotics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3626 'AWSRoboMakerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.robotics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3627 'AWSRoboMaker_CloudExtensionROSAWS19' : 'shape=mxgraph.aws4.cloud_extension_ros;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3628 'AWSRoboMaker_DevelopmentEnvironmentAWS19' : 'shape=mxgraph.aws4.development_environment;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3629 'AWSRoboMaker_FleetManagementAWS19' : 'shape=mxgraph.aws4.fleet_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3630 'AWSRoboMaker_SimulationAWS19' : 'shape=mxgraph.aws4.simulation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3631 3632// AWS 19 - Satellite 3633 'SatelliteAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.satellite;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3634 'AWSGroundStationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ground_station;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3635 3636// AWS 19 - Security, Identity & Compliance 3637 'SecurityIdentityandComplianceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.security_identity_and_compliance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3638 'AmazonCloudDirectoryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud_directory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3639 'AmazonCognitoAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cognito;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3640 'AmazonGuardDutyAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.guardduty;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3641 'AmazonInspectorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.inspector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3642 'AmazonMacieAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.macie;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3643 'AWSArtifactAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.artifact;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3644 'AWSCertificateManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.certificate_manager_3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3645 'AWSCloudHSMAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudhsm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3646 'AWSDirectoryServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.directory_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3647 'AWSFirewallManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.firewall_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3648 'AWSIdentityandAccessManagement_IAMAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.identity_and_access_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3649 'AWSKeyManagementServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.key_management_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3650 'AWSOrganizationsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.organizations;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3651 'AWSSecretsManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.secrets_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3652 'AWSSecurityHubAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.security_hub;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3653 'AWSShieldAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.shield;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3654 'AWSSingleSignOnAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.single_sign_on;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3655 'AWSWAFAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.waf;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3656 'AmazonInspector_AgentAWS19' : 'shape=mxgraph.aws4.agent;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3657 'AWSCertificateManager_CertificateManagerAWS19' : 'shape=mxgraph.aws4.certificate_manager_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3658 'AWSIdentityandAccessManagementIAM_AddonAWS19' : 'shape=mxgraph.aws4.addon;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3659 'AWSIdentityandAccessManagementIAM_AWSSTSAWS19' : 'shape=mxgraph.aws4.sts;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3660 'AWSIdentityandAccessManagementIAM_AWSSTSAlternateAWS19' : 'shape=mxgraph.aws4.sts_alternate;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3661 'AWSIdentityandAccessManagementIAM_DataEncryptionKeyAWS19' : 'shape=mxgraph.aws4.data_encryption_key;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3662 'AWSIdentityandAccessManagementIAM_EncryptedDataAWS19' : 'shape=mxgraph.aws4.encrypted_data;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3663 'AWSIdentityandAccessManagementIAM_LongtermSecurityCredentialAWS19' : 'shape=mxgraph.aws4.long_term_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3664 'AWSIdentityandAccessManagementIAM_MFATokenAWS19' : 'shape=mxgraph.aws4.mfa_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3665 'AWSIdentityandAccessManagementIAM_PermissionsAWS19' : 'shape=mxgraph.aws4.permissions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3666 'AWSIdentityandAccessManagementIAM_RoleAWS19' : 'shape=mxgraph.aws4.role;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3667 'AWSIdentityandAccessManagementIAM_TemporarySecurityCredentialAWS19' : 'shape=mxgraph.aws4.temporary_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3668 'AWSOrganizations_AccountAWS19' : 'shape=mxgraph.aws4.organizations_account;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3669 'AWSOrganizations_OrganizationalUnitAWS19' : 'shape=mxgraph.aws4.organizations_organizational_unit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3670 'AWSShield_ShieldAdvancedAWS19' : 'shape=mxgraph.aws4.shield_shield_advanced;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3671 'AWSWAF_FilteringruleAWS19' : 'shape=mxgraph.aws4.filtering_rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3672 'AWSADConnectorAWS19' : 'shape=mxgraph.aws4.ad_connector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3673 'AWSSimpleADAWS19' : 'shape=mxgraph.aws4.simple_ad;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3674 'AWSManagedMicrosoftADAWS19' : 'shape=mxgraph.aws4.managed_ms_ad;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3675 'AWSResourceAccessManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.resource_access_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3676 3677 3678// AWS 19 - Storage 3679 'StorageAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.storage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top', 3680 'AmazonElasticBlockStoreEBSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_block_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3681 'AmazonElasticFileSystem_EFSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_file_system;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3682 'AmazonFSxAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fsx;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3683 'AmazonFSxforLustreAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fsx_for_lustre;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3684 'AmazonFSxforWindowsFileServerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fsx_for_windows_file_server;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3685 'AmazonS3GlacierAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.glacier;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3686 'AmazonSimpleStorageServiceS3AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3687 'AWSBackupAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.backup;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3688 'AWSSnowball_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3689 'AWSSnowballEdge_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball_edge;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3690 'AWSSnowmobile_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowmobile;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3691 'AWSStorageGatewayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.storage_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3692 'AmazonElasticBlockStoreEBS_SnapshotAWS19' : 'shape=mxgraph.aws4.snapshot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3693 'AmazonElasticBlockStoreEBS_VolumeAWS19' : 'shape=mxgraph.aws4.volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3694 'AmazonS3Glacier_ArchiveAWS19' : 'shape=mxgraph.aws4.archive;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3695 'AmazonS3Glacier_VaultAWS19' : 'shape=mxgraph.aws4.vault;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3696 'AmazonSimpleStorageServiceS3_BucketAWS19' : 'shape=mxgraph.aws4.bucket;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3697 'AmazonSimpleStorageServiceS3_BucketwithObjectsAWS19' : 'shape=mxgraph.aws4.bucket_with_objects;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3698 'AmazonSimpleStorageServiceS3_ObjectAWS19' : 'shape=mxgraph.aws4.object;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3699 'AWSSnowFamily_SnowballImportExportAWS19' : 'shape=mxgraph.aws4.import_export;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3700 'AWSStorageGateway_CachedVolumeAWS19' : 'shape=mxgraph.aws4.cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3701 'AWSStorageGateway_NonCachedVolumeAWS19' : 'shape=mxgraph.aws4.non_cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3702 'AWSStorageGateway_VirtualTapeLibraryAWS19' : 'shape=mxgraph.aws4.virtual_tape_library;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3703 'AmazonElasticFileSystem_EFS_FilesystemAWS19' : 'shape=mxgraph.aws4.file_system;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none', 3704 'EFSInfrequentAccessAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.efs_infrequentaccess;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3705 'EFSStandardAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.efs_standard;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff', 3706 3707// GCP - Service Cards 3708 'GCPServiceCardApplicationSystemBlock' : cs, 3709 'GCPServiceCardAuthorizationBlock' : cs, 3710 'GCPServiceCardBlankBlock' : cs, 3711 'GCPServiceCardReallyBlankBlock' : cs, 3712 'GCPServiceCardBucketBlock' : cs, 3713 'GCPServiceCardCDNInterconnectBlock' : cs, 3714 'GCPServiceCardCloudDNSBlock' : cs, 3715 'GCPServiceCardClusterBlock' : cs, 3716 'GCPServiceCardDiskSnapshotBlock' : cs, 3717 'GCPServiceCardEdgePopBlock' : cs, 3718 'GCPServiceCardFrontEndPlatformServicesBlock' : cs, 3719 'GCPServiceCardGatewayBlock' : cs, 3720 'GCPServiceCardGoogleNetworkBlock' : cs, 3721 'GCPServiceCardImageServicesBlock' : cs, 3722 'GCPServiceCardLoadBalancerBlock' : cs, 3723 'GCPServiceCardLocalComputeBlock' : cs, 3724 'GCPServiceCardLocalStorageBlock' : cs, 3725 'GCPServiceCardLogsAPIBlock' : cs, 3726 'GCPServiceCardMemcacheBlock' : cs, 3727 'GCPServiceCardNATBlock' : cs, 3728 'GCPServiceCardPaymentFormBlock' : cs, 3729 'GCPServiceCardPushNotificationsBlock' : cs, 3730 'GCPServiceCardScheduledTasksBlock' : cs, 3731 'GCPServiceCardServiceDiscoveryBlock' : cs, 3732 'GCPServiceCardSquidProxyBlock' : cs, 3733 'GCPServiceCardTaskQueuesBlock' : cs, 3734 'GCPServiceCardVirtualFileSystemBlock' : cs, 3735 'GCPServiceCardVPNGatewayBlock' : cs, 3736 3737// GCP - Device Cards 3738 'GCPInputDatabase' : cs, 3739 'GCPInputRecord' : cs, 3740 'GCPInputPayment' : cs, 3741 'GCPInputGateway' : cs, 3742 'GCPInputLocalCompute' : cs, 3743 'GCPInputBeacon' : cs, 3744 'GCPInputStorage' : cs, 3745 'GCPInputList' : cs, 3746 'GCPInputStream' : cs, 3747 'GCPInputMobileDevices' : cs, 3748 'GCPInputCircuitBoard' : cs, 3749 'GCPInputLive' : cs, 3750 'GCPInputUsers' : cs, 3751 'GCPInputLaptop' : cs, 3752 'GCPInputApplication' : cs, 3753 'GCPInputLightbulb' : cs, 3754 'GCPInputGame' : cs, 3755 'GCPInputDesktop' : cs, 3756 'GCPInputDesktopAndMobile' : cs, 3757 'GCPInputWebcam' : cs, 3758 'GCPInputSpeaker' : cs, 3759 'GCPInputRetail' : cs, 3760 'GCPInputReport' : cs, 3761 'GCPInputPhone' : cs, 3762 'GCPInputBlank' : cs, 3763 3764// Site Map 3765 'SMPage' : cs, 3766 'SMHome' : s + 'sitemap.home;strokeColor=#000000;fillColor=#E6E6E6', 3767 'SMGallery' : s + 'sitemap.gallery;strokeColor=#000000;fillColor=#E6E6E6', 3768 'SMShopping' : s + 'sitemap.shopping;strokeColor=#000000;fillColor=#E6E6E6', 3769 'SMMap' : s + 'sitemap.map;strokeColor=#000000;fillColor=#E6E6E6', 3770 'SMAthletics' : s + 'sitemap.sports;strokeColor=#000000;fillColor=#E6E6E6', 3771 'SMLogin' : s + 'sitemap.login;strokeColor=#000000;fillColor=#E6E6E6', 3772 'SMPrint' : s + 'sitemap.print;strokeColor=#000000;fillColor=#E6E6E6', 3773 'SMScript' : s + 'sitemap.script;strokeColor=#000000;fillColor=#E6E6E6', 3774 'SMSearch' : s + 'sitemap.search;strokeColor=#000000;fillColor=#E6E6E6', 3775 'SMSettings' : s + 'sitemap.settings;strokeColor=#000000;fillColor=#E6E6E6', 3776 'SMSitemap' : s + 'sitemap.sitemap;strokeColor=#000000;fillColor=#E6E6E6', 3777 'SMSuccess' : s + 'sitemap.success;strokeColor=#000000;fillColor=#E6E6E6', 3778 'SMVideo' : s + 'sitemap.video;strokeColor=#000000;fillColor=#E6E6E6', 3779 'SMAudio' : s + 'sitemap.audio;strokeColor=#000000;fillColor=#E6E6E6', 3780 'SMBlog' : s + 'sitemap.blog;strokeColor=#000000;fillColor=#E6E6E6', 3781 'SMCalendar' : s + 'sitemap.calendar;strokeColor=#000000;fillColor=#E6E6E6', 3782 'SMChart' : s + 'sitemap.chart;strokeColor=#000000;fillColor=#E6E6E6', 3783 'SMCloud' : s + 'sitemap.cloud;strokeColor=#000000;fillColor=#E6E6E6', 3784 'SMDocument' : s + 'sitemap.document;strokeColor=#000000;fillColor=#E6E6E6', 3785 'SMDownload' : s + 'sitemap.download;strokeColor=#000000;fillColor=#E6E6E6', 3786 'SMError' : s + 'sitemap.error;strokeColor=#000000;fillColor=#E6E6E6', 3787 'SMForm' : s + 'sitemap.form;strokeColor=#000000;fillColor=#E6E6E6', 3788 'SMGame' : s + 'sitemap.game;strokeColor=#000000;fillColor=#E6E6E6', 3789 'SMJobs' : s + 'sitemap.jobs;strokeColor=#000000;fillColor=#E6E6E6', 3790 'SMLucid' : s + 'sitemap.home;strokeColor=#000000;fillColor=#E6E6E6', 3791 'SMNewspress' : s + 'sitemap.news;strokeColor=#000000;fillColor=#E6E6E6', 3792 'SMPhoto' : s + 'sitemap.photo;strokeColor=#000000;fillColor=#E6E6E6', 3793 'SMPortfolio' : s + 'sitemap.portfolio;strokeColor=#000000;fillColor=#E6E6E6', 3794 'SMPricing' : s + 'sitemap.pricing;strokeColor=#000000;fillColor=#E6E6E6', 3795 'SMProfile' : s + 'sitemap.profile;strokeColor=#000000;fillColor=#E6E6E6', 3796 'SMSlideshow' : s + 'sitemap.slideshow;strokeColor=#000000;fillColor=#E6E6E6', 3797 'SMUpload' : s + 'sitemap.upload;strokeColor=#000000;fillColor=#E6E6E6', 3798//SVG shapes 3799 'SVGPathBlock2' : cs, 3800//Special cases 3801 'PresentationFrameBlock' : cs, 3802//Timeline 3803//TODO Timeline shapes are postponed, this code is a work-in-progress 3804 'TimelineBlock' : cs, 3805 'TimelineMilestoneBlock' : cs, 3806 'TimelineIntervalBlock' : cs, 3807 'MinimalTextBlock' : 'strokeColor=none;fillColor=none', 3808//Freehand 3809 'FreehandBlock' : cs, 3810//ExtShapes 3811 'ExtShapeLaptopBlock': ss + 'citrix.laptop_2;verticalLabelPosition=bottom;verticalAlign=top', 3812 'ExtShapeServerBlock': ss + 'citrix.tower_server;verticalLabelPosition=bottom;verticalAlign=top', 3813 'ExtShapeCloudBlock': ss + 'citrix.cloud;verticalLabelPosition=bottom;verticalAlign=top', 3814 'ExtShapeUserBlock': ss + 'aws3d.end_user;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#073763', 3815 'ExtShapeWorkstationLCDBlock': ss + 'veeam.3d.workstation;verticalLabelPosition=bottom;verticalAlign=top', 3816//Infographics 3817 'InfographicsBlock': cs, 3818//Other 3819 'FlexiblePolygonBlock': cs, 3820 'PersonRoleBlock' : cs 3821 }; 3822 3823 function mapImgUrl(imgUrl) 3824 { 3825 if (imgUrl && LucidImporter.imgSrcRepl != null) 3826 { 3827 var attMap = LucidImporter.imgSrcRepl.attMap; 3828 3829 if (attMap[imgUrl]) 3830 { 3831 imgUrl = attMap[imgUrl]; 3832 } 3833 else 3834 { 3835 var imgRepl = LucidImporter.imgSrcRepl.imgRepl; 3836 3837 for (var i = 0; i < imgRepl.length; i++) 3838 { 3839 var repl = imgRepl[i]; 3840 imgUrl = imgUrl.replace(repl.searchVal, repl.replVal); 3841 } 3842 3843 LucidImporter.hasExtImgs = true; 3844 } 3845 } 3846 3847 return imgUrl; 3848 }; 3849 3850 function mapFontFamily(fontFamily) 3851 { 3852 //We support a single font only since we can have one mapping only 3853 gFontFamilyStyle = ''; 3854 3855 try 3856 { 3857 if (fontFamily) 3858 { 3859 var mappedFont = null; 3860 3861 if (LucidImporter.advImpConfig && LucidImporter.advImpConfig.fontMapping) 3862 { 3863 mappedFont = LucidImporter.advImpConfig.fontMapping[fontFamily]; 3864 } 3865 3866 if (mappedFont) 3867 { 3868 for (var key in mappedFont) 3869 { 3870 gFontFamilyStyle += key + '=' + mappedFont[key] + ';'; 3871 } 3872 3873 return mappedFont['fontFamily']? 'font-family: ' + mappedFont['fontFamily'] : ''; 3874 } 3875 else if (fontFamily != defaultLucidFont) 3876 { 3877 gFontFamilyStyle = 'fontFamily=' + fontFamily + ';'; 3878 return 'font-family: ' + fontFamily + ';'; 3879 } 3880 } 3881 } 3882 catch(e) {} 3883 3884 return ''; 3885 }; 3886 3887 function fix1Digit(num) 3888 { 3889 return Math.round(num * 10) / 10; 3890 }; 3891 3892 // actual code start 3893 //TODO This can be optimized more 3894 function convertTxt2Html(txt, srcM, props) 3895 { 3896 var blockStyles = {'a': true, 'il': true, 'ir': true, 'mt': true, 'mb': true, 'p': true, 't': true, 'l': true}; 3897 var nonBlockStyles = {'lk': true, 's': true, 'c': true, 'b': true, 'fc': true, 'i': true, 'u': true, 'k': true, 'f': true, 'ac': true}; 3898 3899 srcM.sort(function(a, b) 3900 { 3901 return a.s - b.s; 3902 }); 3903 3904 var m = srcM.filter(function(m) 3905 { 3906 return nonBlockStyles[m.n]; 3907 }); 3908 3909 //To prevent losing beginning of a label when first one is not at zero (links case) 3910 if (m[0] && m[0].s != 0) 3911 { 3912 m.unshift({s: 0, n: 'dummy', v: '', e: m[0].s}); 3913 } 3914 3915 var globalStyles = srcM.filter(function(m) 3916 { 3917 return blockStyles[m.n]; 3918 }); 3919 3920 //Add missing block that defauls to center 3921 var newlines = [0], nl = 0; 3922 3923 while ((nl = txt.indexOf('\n', nl)) > 0) 3924 { 3925 nl++; 3926 newlines.push(nl); 3927 } 3928 3929 var expectedS = 0; 3930 3931 for (var i = 0; i < globalStyles.length; i++) 3932 { 3933 if (globalStyles[i].s > newlines[expectedS]) 3934 { 3935 globalStyles.splice(i, 0, {s: newlines[expectedS], n: 'a', v: props.TextAlign || 'center'}); 3936 } 3937 else 3938 { 3939 var skip = 0; 3940 3941 while(i + skip < globalStyles.length && globalStyles[i + skip].s == newlines[expectedS]) 3942 { 3943 skip++; 3944 } 3945 3946 if (skip > 1) 3947 { 3948 i += skip - 1; // -1 since loop will increment again 3949 } 3950 } 3951 3952 expectedS++; 3953 } 3954 3955 if (newlines[expectedS] != null) 3956 { 3957 globalStyles.push({s: newlines[expectedS], n: 'a', v: props.TextAlign || 'center'}); 3958 } 3959 3960 var html = '', ends = m.slice(); 3961 3962 ends.sort(function(a, b) 3963 { 3964 return a.e - b.e; 3965 }); 3966 3967 var i = 0, j = 0, k = 0, curStyles = {}, curBlockStyles = {}, openTags = [], openTagsCount = [], 3968 openBlockTags = [], blockActive = false, listActive = false, listType; 3969 3970 function startBlockTag(styles, nonBlockStyles) 3971 { 3972 var str = ''; 3973 var t = styles['t']; 3974 3975 var l = styles['l'] || {v: t && t.v == 'ul'? 'auto' : 'decimal'}; 3976 3977 if (t != null && (listActive == false || listActive != t.v || listType != l.v)) 3978 { 3979 if (listActive) 3980 { 3981 str += endBlockTag(true); 3982 } 3983 3984 listActive = t.v; 3985 listType = l.v; 3986 3987 if (t.v == 'ul') 3988 { 3989 str += '<ul '; 3990 openBlockTags.push('ul'); 3991 } 3992 else 3993 { 3994 str += '<ol '; 3995 openBlockTags.push('ol'); 3996 } 3997 3998 str += 'style="margin: 0px; padding-left: 10px;list-style-position: inside; list-style-type:'; 3999 4000 if (t.v == 'hl') 4001 { 4002 str += 'upper-roman'; 4003 } 4004 else 4005 { 4006 switch(l.v) 4007 { 4008 case 'auto': 4009 str += 'disc'; 4010 break; 4011 case 'inv': //Approx 4012 str += 'circle'; 4013 break; 4014 case 'disc': 4015 str += 'circle'; 4016 break; 4017 case 'trib': //Approx 4018 str += 'square'; 4019 break; 4020 case 'square': 4021 str += 'square'; 4022 break; 4023 case 'dash': //Approx 4024 str += 'square'; 4025 break; 4026 case 'heart': //Approx 4027 str += 'disc'; 4028 break; 4029 default: 4030 str += 'decimal'; 4031 } 4032 } 4033 4034 str += '">'; 4035 } 4036 else if (t == null) 4037 { 4038 if (listActive) 4039 { 4040 str += endBlockTag(true); 4041 listActive = false; 4042 } 4043 4044 str += '<div style="'; 4045 openBlockTags.push('div'); 4046 } 4047 4048 if (t != null) 4049 { 4050 str += '<li style="text-align:' + (styles['a']? styles['a'].v : (props.TextAlign || 'center')) + ';'; 4051 var color, fontSize; 4052 4053 // Find font size/color 4054 if (nonBlockStyles != null) 4055 { 4056 if (nonBlockStyles['c']) 4057 { 4058 color = nonBlockStyles['c'].v; 4059 } 4060 4061 if (nonBlockStyles['s']) 4062 { 4063 fontSize = nonBlockStyles['s'].v; 4064 } 4065 } 4066 4067 try 4068 { 4069 var s = m[i], e = ends[j]; 4070 var it = i; 4071 4072 if (s && e && s.s < e.e) //s can be null when all starts are used, e ends after s BUT sometimes there are errors in the file 4073 { 4074 var curS = s.s; 4075 4076 while(s != null && s.s == curS) 4077 { 4078 if (s.n == 's') 4079 { 4080 fontSize = s.v; 4081 } 4082 else if (s.n == 'c') 4083 { 4084 color = s.v; 4085 } 4086 4087 s = m[++it]; 4088 } 4089 } 4090 } 4091 catch(e) 4092 { 4093 console.log(e); 4094 } 4095 4096 color = rgbToHex(color); 4097 4098 if (color != null) 4099 { 4100 color = color.substring(0, 7); 4101 str += 'color:' + color + ';'; 4102 } 4103 4104 if (fontSize != null) 4105 { 4106 str += 'font-size:' + fix1Digit(fontSize * scale) + 'px;'; 4107 } 4108 4109 str += '">'; 4110 openBlockTags.push('li'); 4111 str += '<span style="'; 4112 openBlockTags.push('span'); 4113 } 4114 4115 if (!listActive) 4116 { 4117 var tmp = styles['a']? styles['a'].v : (props.TextAlign || 'center'); 4118 var jc = tmp; 4119 4120 if (tmp == 'left') 4121 { 4122 jc = 'flex-start'; 4123 } 4124 else if (tmp == 'right') 4125 { 4126 jc = 'flex-end'; 4127 } 4128 4129 str += 'display: flex; justify-content: ' + jc + '; text-align: ' + tmp + '; align-items: baseline; font-size: 0; line-height: 1.25;'; 4130 } 4131 4132 if (styles['il']) 4133 { 4134 str += 'margin-left: ' + Math.max(0, fix1Digit(styles['il'].v * scale - (listActive? 28 : 0))) + 'px;'; 4135 } 4136 4137 if (styles['ir']) 4138 { 4139 str += 'margin-right: ' + fix1Digit(styles['ir'].v * scale) + 'px;'; 4140 } 4141 4142 if (styles['mt']) 4143 { 4144 str += 'margin-top: ' + fix1Digit(styles['mt'].v * scale) + 'px;'; 4145 } 4146 4147 if (styles['mb']) 4148 { 4149 str += 'margin-bottom: ' + fix1Digit(styles['mb'].v * scale) + 'px;'; 4150 } 4151 4152 str += 'margin-top: -2px;">'; 4153 4154 if (!listActive) 4155 { 4156 str += '<span>';// Is this needed? 4157 openBlockTags.push('span'); 4158 } 4159 4160 return str; 4161 }; 4162 4163 4164 function startTag(styles) 4165 { 4166 if (Object.keys(styles).length == 0) return ''; 4167 4168 var str = ''; 4169 var tagCount = 0; 4170 4171 if (styles['lk']) 4172 { 4173 var lk = styles['lk']; 4174 4175 if (lk.v != null && lk.v.length > 0) 4176 { 4177 str += '<a href="' + getLink(lk.v[0]) + '">'; 4178 openTags.push('a'); 4179 tagCount++; 4180 } 4181 } 4182 4183 str += '<span style="'; 4184 openTags.push('span'); 4185 tagCount++; 4186 4187 str += 'font-size:' + (styles['s']? fix1Digit(styles['s'].v * scale) : defaultFontSize) + 'px;'; 4188 4189 if (styles['c']) 4190 { 4191 var v = rgbToHex(styles['c'].v); 4192 4193 if (v != null) 4194 { 4195 v = v.substring(0, 7); 4196 str += 'color:' + v + ';'; 4197 } 4198 } 4199 4200 if ((styles['b'] && styles['b'].v) || (styles['fc'] && styles['fc'].v && styles['fc'].v.indexOf('Bold') == 0)) 4201 { 4202 str += 'font-weight: bold;'; 4203 } 4204 4205 if (styles['i'] && styles['i'].v) 4206 { 4207 str += 'font-style: italic;'; 4208 } 4209 4210 if (styles['ac'] && styles['ac'].v) 4211 { 4212 str += 'text-transform: uppercase;'; 4213 } 4214 4215 var fontFamily = null; 4216 4217 if (styles['f']) 4218 { 4219 fontFamily = styles['f'].v; 4220 } 4221 else if (props.Font) 4222 { 4223 fontFamily = props.Font; 4224 } 4225 4226 str += mapFontFamily(fontFamily); 4227 4228 var td = []; 4229 4230 if (styles['u'] && styles['u'].v) 4231 { 4232 td.push('underline'); 4233 } 4234 4235 if (styles['k'] && styles['k'].v) 4236 { 4237 td.push('line-through'); 4238 } 4239 4240 if (td.length > 0) 4241 { 4242 str += 'text-decoration: ' + td.join(' ') + ';'; 4243 } 4244 4245 str += '">' 4246 openTagsCount.push(tagCount); 4247 4248 return str; 4249 }; 4250 4251 function endBlockTag(force) 4252 { 4253 var str = ''; 4254 4255 do 4256 { 4257 var tag = openBlockTags.pop(); 4258 4259 if (!force && listActive && (tag == 'ul' || tag == 'ol')) 4260 { 4261 openBlockTags.push(tag); 4262 break; 4263 } 4264 4265 str += '</' + tag + '>'; 4266 } 4267 while(openBlockTags.length > 0); 4268 4269 return str; 4270 }; 4271 4272 function endTag(txt, curS, curE, all) 4273 { 4274 var str = txt? txt.substring(curS, curE) : ''; 4275 4276 //TODO Check this is always the case. Most of the time this is correct, also, the empty tag should be removed 4277 if (listActive) 4278 { 4279 str = str.trim(); 4280 } 4281 4282 //If an endTag is called with no open tags, add a dummy startTag to have a font size 4283 if (openTags.length == 0 && str.length > 0) 4284 { 4285 str = startTag({dummy: 1}) + str; 4286 } 4287 4288 str = str.replace(/</g, '<').replace(/>/g, '>'); 4289 4290 do 4291 { 4292 var count = openTagsCount.pop(); 4293 4294 for (var i = 0; i < count; i++) 4295 { 4296 var tag = openTags.pop(); 4297 str += '</' + tag + '>'; 4298 } 4299 } 4300 while(all && openTags.length > 0); 4301 4302 return str; 4303 }; 4304 4305 var curS = 0, curE = 0, maxE = txt.length, firstBlock = true; 4306 4307 while (k < globalStyles.length || firstBlock) 4308 { 4309 firstBlock = false; 4310 4311 if (k < globalStyles.length) 4312 { 4313 var bs = globalStyles[k], curBS = globalStyles[k].s; 4314 4315 if (blockActive) 4316 { 4317 curBlockStyles = {}; 4318 html += endTag(txt, curS, maxE, true); //End any open tag 4319 curE = curS = maxE; 4320 html += endBlockTag(); 4321 } 4322 4323 while(bs != null && bs.s == curBS) 4324 { 4325 curBlockStyles[bs.n] = bs; 4326 bs = globalStyles[++k]; 4327 } 4328 4329 if (bs != null) 4330 { 4331 maxE = bs.s; 4332 } 4333 else 4334 { 4335 maxE = txt.length; 4336 } 4337 4338 html += startBlockTag(curBlockStyles, curStyles); 4339 4340 if (blockActive) 4341 { 4342 html += startTag(curStyles); 4343 } 4344 4345 blockActive = true; 4346 } 4347 4348 while(i >= j && (i < m.length || j < ends.length)) 4349 { 4350 var s = m[i], e = ends[j]; 4351 4352 if (s && e && s.s < e.e) //s can be null when all starts are used, e ends after s BUT sometimes there are errors in the file 4353 { 4354 if (s.s >= maxE) break; 4355 curS = s.s; 4356 4357 if (curS - curE > 0) 4358 { 4359 //NOTE: After the fix in end where we add dummy start and end, this shouldn't be called 4360 //End any open tag and add remaining text with current style 4361 html += startTag(curStyles) + endTag(txt, curE, curS); 4362 curE = curS; 4363 } 4364 4365 while(s != null && s.s == curS) 4366 { 4367 curStyles[s.n] = s; 4368 s = m[++i]; 4369 } 4370 4371 html += startTag(curStyles); 4372 } 4373 else if (e) 4374 { 4375 if (e.e > maxE) break; 4376 curE = e.e; 4377 4378 do 4379 { 4380 delete curStyles[e.n]; 4381 e = ends[++j]; 4382 } 4383 while(e != null && e.e == curE); 4384 4385 html += endTag(txt, curS, curE); 4386 curS = curE; 4387 4388 //Next start should be immidiately after this end or we add a dummy one 4389 if (openTagsCount.length == 0 && (s == null || s.s != curE)) 4390 { 4391 m.splice(i, 0, {s: curE, n: 'dummy', v: ''}); 4392 ends.splice(j, 0, {e: s? s.s : maxE, n: 'dummy', v: ''}); 4393 } 4394 } 4395 else 4396 { 4397 break; 4398 } 4399 } 4400 } 4401 4402 html += endTag(null, null, null, true); //End any open tag 4403 4404 if (blockActive) 4405 { 4406 if (curE != maxE) 4407 { 4408 html += startTag({dummy: 1}) + endTag(txt, curE, maxE); 4409 } 4410 4411 html += endBlockTag(true); 4412 } 4413 4414 return html; 4415 }; 4416 4417 function convertText(props, forceHTML) 4418 { 4419 isLastLblHTML = false; 4420 var text = (props.Text != null && props.Text.t) ? props.Text : 4421 ((props.Value != null && props.Value.t) ? props.Value : 4422 ((props.Lane_0 != null && props.Lane_0.t) ? props.Lane_0 : null)); 4423 var text2 = null; 4424 4425 if (text == null && props.State != null) 4426 { 4427 if (props.State.t) 4428 { 4429 text = props.State; 4430 } 4431 } 4432 else if (text == null && props.Note != null) 4433 { 4434 if (props.Note.t) 4435 { 4436 text = props.Note; 4437 } 4438 } 4439 else if (text == null && props.Title != null) 4440 { 4441 if (props.Title.t) 4442 { 4443 text = props.Title; 4444 } 4445 } 4446 else if (props.t) 4447 { 4448 text = props; 4449 } 4450 4451 if (text == null && props.TextAreas != null) 4452 { 4453 if (props.TextAreas.Text != null) 4454 { 4455 if (props.TextAreas.Text.Value != null) 4456 { 4457 if (props.TextAreas.Text.Value.t) 4458 { 4459 text = props.TextAreas.Text.Value; 4460 } 4461 } 4462 } 4463 } 4464 else if (text == null && props.t0 != null) 4465 { 4466 if (props.t0.t) 4467 { 4468 text = props.t0; 4469 } 4470 } 4471 4472 // TODO: Convert text object to HTML. One case is covered. Is there others? 4473 // TODO: HTML text conversion looks stable now, maybe convert all using html? 4474 if (text != null) 4475 { 4476 if (text.t != null) 4477 { 4478 var txt = text.t; 4479 txt = txt.replace(/\u2028/g, '\n'); //Special unicide line separator 4480 var m = text.m; 4481 4482 //Convert text object to HTML if needed 4483 try 4484 { 4485 //If there are 3+ consecutive spaces, most probably it's spaces to create a new line 4486 if (/ /.test(txt)) 4487 { 4488 LucidImporter.hasUnknownShapes = true; 4489 } 4490 4491 for (var i = 0; i < m.length; i++) 4492 { 4493 if (m[i].s > 0 || (m[i].e != null && m[i].e < txt.length) || m[i].n == 't' || m[i].n == 'ac' || m[i].n == 'lk') 4494 { 4495 isLastLblHTML = true; 4496 break; 4497 } 4498 } 4499 4500 isLastLblHTML = isLastLblHTML || forceHTML; 4501 4502 if (isLastLblHTML) 4503 { 4504 return convertTxt2Html(txt, m, props); 4505 } 4506 } 4507 catch(e) 4508 { 4509 console.log(e); 4510 } 4511 4512 txt = txt.replace(/</g, '<'); 4513 txt = txt.replace(/>/g, '>'); 4514 4515 return txt; 4516 } 4517 4518 if (text.Value != null) 4519 { 4520 if (text.Value.t != null) 4521 { 4522 text.Value.t = text.Value.t.replace(/</g, '<'); 4523 text.Value.t = text.Value.t.replace(/>/g, '>'); 4524 4525 return text.Value.t; 4526 } 4527 } 4528 } 4529 4530 return (text2 != null) ? text2 : ''; 4531 }; 4532 4533 function getAction(obj) 4534 { 4535 if (obj.Action != null) 4536 { 4537 return obj.Action; 4538 } 4539 4540 return obj; 4541 }; 4542 4543 function getTextM(properties) 4544 { 4545 if (properties.Text != null) 4546 { 4547 if (properties.Text.m != null) 4548 { 4549 return properties.Text.m; 4550 } 4551 } 4552 else if(properties.TextAreas != null) 4553 { 4554 if (properties.TextAreas.Text != null) 4555 { 4556 if (properties.TextAreas.Text.Value != null) 4557 { 4558 if (properties.TextAreas.Text.Value.m != null) 4559 { 4560 return properties.TextAreas.Text.Value.m; 4561 } 4562 } 4563 } 4564 } 4565 else if (properties.m != null) 4566 { 4567 return properties.m; 4568 } 4569 else if (properties.Title != null) 4570 { 4571 if (properties.Title.m != null) 4572 { 4573 return properties.Title.m; 4574 } 4575 } 4576 else if (properties.State != null) 4577 { 4578 if (properties.State.m != null) 4579 { 4580 return properties.State.m; 4581 } 4582 } 4583 else if (properties.Note != null) 4584 { 4585 if (properties.Note.m != null) 4586 { 4587 return properties.Note.m; 4588 } 4589 } 4590 4591 return null; 4592 } 4593 4594 function getLabelStyle(properties, noLblStyle) 4595 { 4596 var style = 'whiteSpace=wrap;' + (noLblStyle? 4597 'overflow=block;blockSpacing=1;html=1;fontSize=' + defaultFontSize + ';' + 4598 gFontFamilyStyle 4599 : 4600 getFontSize(properties) + 4601 getFontFamily(properties) + 4602 getFontColor(properties) + 4603 getFontStyle(properties) + 4604 getTextAlignment(properties) + 4605 getTextLeftSpacing(properties) + 4606 getTextRightSpacing(properties) + 4607 getTextTopSpacing(properties) + 4608 getTextBottomSpacing(properties) 4609 ) + 4610 getTextGlobalSpacing(properties) + 4611 getTextVerticalAlignment(properties) + 4612 getTextGlobalAlignment(properties); 4613 4614 gFontFamilyStyle = ''; 4615 return style; 4616 } 4617 4618 function addAllStyles(style, properties, action, cell, noLblStyle) 4619 { 4620 var s = ''; 4621 4622 if (style != null && style != '' && style.charAt(style.length - 1) != ';') 4623 { 4624 s = ';'; 4625 } 4626 4627 s += 'whiteSpace=wrap;' + 4628 (noLblStyle? (hasStyle(style, 'overflow')? '' : 'overflow=block;blockSpacing=1;') + 4629 (hasStyle(style, 'html')? '' : 'html=1;') + 'fontSize=' + defaultFontSize + ';' + 4630 gFontFamilyStyle 4631 : 4632 addStyle(mxConstants.STYLE_FONTSIZE, style, properties, action, cell) + 4633 addStyle(mxConstants.STYLE_FONTFAMILY, style, properties, action, cell) + 4634 addStyle(mxConstants.STYLE_FONTCOLOR, style, properties, action, cell) + 4635 addStyle(mxConstants.STYLE_FONTSTYLE, style, properties, action, cell) + 4636 addStyle(mxConstants.STYLE_ALIGN, style, properties, action, cell) + 4637 addStyle(mxConstants.STYLE_SPACING_LEFT, style, properties, action, cell) + 4638 addStyle(mxConstants.STYLE_SPACING_RIGHT, style, properties, action, cell) + 4639 addStyle(mxConstants.STYLE_SPACING_TOP, style, properties, action, cell) + 4640 addStyle(mxConstants.STYLE_SPACING_BOTTOM, style, properties, action, cell) 4641 ) + 4642 addStyle(mxConstants.STYLE_ALIGN + 'Global', style, properties, action, cell) + 4643 addStyle(mxConstants.STYLE_SPACING, style, properties, action, cell) + 4644 addStyle(mxConstants.STYLE_VERTICAL_ALIGN, style, properties, action, cell) + 4645 addStyle(mxConstants.STYLE_STROKECOLOR, style, properties, action, cell) + 4646 addStyle(mxConstants.STYLE_OPACITY, style, properties, action, cell) + 4647 addStyle(mxConstants.STYLE_ROUNDED, style, properties, action, cell) + 4648 addStyle(mxConstants.STYLE_ROTATION, style, properties, action, cell) + 4649 addStyle(mxConstants.STYLE_FLIPH, style, properties, action, cell) + 4650 addStyle(mxConstants.STYLE_FLIPV, style, properties, action, cell) + 4651 addStyle(mxConstants.STYLE_SHADOW, style, properties, action, cell) + 4652 addStyle(mxConstants.STYLE_FILLCOLOR, style, properties, action, cell) + 4653 addStyle(mxConstants.STYLE_DASHED, style, properties, action, cell) + 4654 addStyle(mxConstants.STYLE_STROKEWIDTH, style, properties, action, cell) + 4655 addStyle(mxConstants.STYLE_IMAGE, style, properties, action, cell); 4656 4657 gFontFamilyStyle = ''; 4658 return s; 4659 } 4660 4661 function addStyle(key, style, properties, action, cell) 4662 { 4663 if (!hasStyle(style, key)) 4664 { 4665 switch(key) 4666 { 4667 case mxConstants.STYLE_FONTSIZE : 4668 return getFontSize(properties); 4669 4670 case mxConstants.STYLE_FONTFAMILY : 4671 return getFontFamily(properties); 4672 4673 case mxConstants.STYLE_FONTCOLOR : 4674 return getFontColor(properties); 4675 4676 case mxConstants.STYLE_FONTSTYLE : 4677 return getFontStyle(properties); 4678 4679 case mxConstants.STYLE_ALIGN : 4680 return getTextAlignment(properties); 4681 4682 case mxConstants.STYLE_ALIGN + 'Global': 4683 return getTextGlobalAlignment(properties); 4684 4685 case mxConstants.STYLE_SPACING_LEFT : 4686 return getTextLeftSpacing(properties); 4687 4688 case mxConstants.STYLE_SPACING_RIGHT : 4689 return getTextRightSpacing(properties); 4690 4691 case mxConstants.STYLE_SPACING_TOP : 4692 return getTextTopSpacing(properties); 4693 4694 case mxConstants.STYLE_SPACING_BOTTOM : 4695 return getTextBottomSpacing(properties); 4696 4697 case mxConstants.STYLE_SPACING : 4698 return getTextGlobalSpacing(properties); 4699 4700 case mxConstants.STYLE_VERTICAL_ALIGN : 4701 return getTextVerticalAlignment(properties); 4702 4703 case mxConstants.STYLE_STROKECOLOR : 4704 return getStrokeColor(properties, action); 4705 4706 case mxConstants.STYLE_OPACITY : 4707 return getOpacity(properties, action, cell); 4708 4709 case mxConstants.STYLE_ROUNDED : 4710 return getRounded(properties, action, cell); 4711 4712 case mxConstants.STYLE_ROTATION : 4713 return getRotation(properties, action, cell); 4714 4715 case mxConstants.STYLE_FLIPH : 4716 return getFlipH(properties); 4717 4718 case mxConstants.STYLE_FLIPV : 4719 return getFlipV(properties); 4720 4721 case mxConstants.STYLE_SHADOW : 4722 return getShadow(properties); 4723 4724 case mxConstants.STYLE_FILLCOLOR : 4725 return getFillColor(properties, action); 4726 4727 case mxConstants.STYLE_DASHED : 4728 return getStrokeStyle(properties); 4729 4730 case mxConstants.STYLE_STROKEWIDTH : 4731 return getStrokeWidth(properties); 4732 4733 case mxConstants.STYLE_IMAGE : 4734 return getImage(properties, action); 4735 4736 default : 4737 break; 4738 } 4739 } 4740 4741 return ''; 4742 } 4743 4744 function getFontSize(properties) 4745 { 4746 //adds font size 4747 var isV = false; 4748 4749 var m = getTextM(properties); 4750 4751 if (m != null) 4752 { 4753 var i = 0; 4754 4755 while ((!isV) && (i < m.length)) 4756 { 4757 var currM = m[i]; 4758 4759 if (currM.n == 's') 4760 { 4761 if (currM.v != null) 4762 { 4763 isV = true; 4764 4765 return 'fontSize=' + fix1Digit(currM.v * scale) + ';'; 4766 } 4767 } 4768 i++; 4769 } 4770 } 4771 4772 if (isV == 0) 4773 { 4774 return 'fontSize=' + defaultFontSize + ';'; 4775 } 4776 4777 return ''; 4778 } 4779 4780 function getFontFamily(properties) 4781 { 4782 var m = getTextM(properties); 4783 var fontFamily; 4784 4785 if (m != null) 4786 { 4787 for (var i = 0; i < m.length; i++) 4788 { 4789 if (m[i].n == 'f' && m[i].v) 4790 { 4791 fontFamily = m[i].v; 4792 break; 4793 } 4794 } 4795 } 4796 4797 if (!fontFamily && properties.Font) 4798 { 4799 fontFamily = properties.Font; 4800 } 4801 4802 mapFontFamily(fontFamily); 4803 return gFontFamilyStyle; 4804 }; 4805 4806 function getLink(lnk) 4807 { 4808 if (lnk.tp == 'ext') 4809 { 4810 return lnk.url; 4811 } 4812 else if (lnk.tp == 'ml') 4813 { 4814 return 'mailto:' + lnk.eml; 4815 } 4816 else if (lnk.tp == 'pg') 4817 { 4818 return 'data:page/id,' + (LucidImporter.pageIdsMap[lnk.id] || 0); 4819 } 4820 else if (lnk.tp == 'c') //Confluence content 4821 { 4822 return 'data:confluence/id,' + lnk.ccid; 4823 } 4824 else 4825 { 4826 return null; 4827 } 4828 }; 4829 4830 function getFontColor(properties) 4831 { 4832 //adds font color 4833 var isC = false; 4834 var m = getTextM(properties); 4835 4836 if (m != null) 4837 { 4838 var i = 0; 4839 4840 while ((!isC) && (i < m.length)) 4841 { 4842 var currM = m[i]; 4843 4844 if (currM.n == 'c') 4845 { 4846 if (currM.v != null) 4847 { 4848 isC = true; 4849 4850 var currV = rgbToHex(currM.v).substring(0, 7); 4851 4852 return mxConstants.STYLE_FONTCOLOR + '=' + currV + ';'; 4853 } 4854 } 4855 4856 i++; 4857 } 4858 } 4859 4860 return ''; 4861 } 4862 4863 function getFontStyle(properties) 4864 { 4865 return getFontStyleString(getTextM(properties)); 4866 } 4867 4868 function getFontStyleString(m) 4869 { 4870 if (m != null) 4871 { 4872 var fontStyle = 0; 4873 //check for bold text 4874 var isBT = false; 4875 4876 if (m != null) 4877 { 4878 var i = 0; 4879 4880 while ((!isBT) && (i < m.length)) 4881 { 4882 var currM = m[i]; 4883 4884 if (currM.n == 'b') 4885 { 4886 if (currM.v != null && currM.v) 4887 { 4888 isBT = true; 4889 fontStyle += 1; 4890 } 4891 } 4892 else if (currM.n == 'fc' && currM.v == 'Bold') 4893 { 4894 isBT = true; 4895 fontStyle += 1; 4896 } 4897 4898 i++; 4899 } 4900 } 4901 4902 //check for italic text 4903 var isIT = false; 4904 4905 if (m != null) 4906 { 4907 var i = 0; 4908 4909 while ((!isIT) && (i < m.length)) 4910 { 4911 var currM = m[i]; 4912 4913 if (currM.n == 'i') 4914 { 4915 if (currM.v != null && currM.v) 4916 { 4917 isIT = true; 4918 fontStyle += 2; 4919 } 4920 } 4921 4922 i++; 4923 } 4924 } 4925 4926 //check for underline text 4927 var isUT = false; 4928 4929 if (m != null) 4930 { 4931 var i = 0; 4932 4933 while ((!isUT) && (i < m.length)) 4934 { 4935 var currM = m[i]; 4936 4937 if (currM.n == 'u') 4938 { 4939 if (currM.v != null && currM.v) 4940 { 4941 isUT = true; 4942 fontStyle += 4; 4943 } 4944 } 4945 4946 i++; 4947 } 4948 } 4949 4950 if (fontStyle > 0) 4951 { 4952 return 'fontStyle=' + fontStyle + ';'; 4953 } 4954 } 4955 4956 return ''; 4957 } 4958 4959 function getTextAlignment(properties) 4960 { 4961 var m = getTextM(properties); 4962 4963 //adds text alignment 4964 if (m != null) 4965 { 4966 var i = 0; 4967 4968 while (i < m.length) 4969 { 4970 var currM = m[i]; 4971 4972 if (currM.n == 'a') 4973 { 4974 if (currM.v != null) 4975 { 4976 return 'align=' + currM.v + ';'; 4977 } 4978 } 4979 4980 i++; 4981 } 4982 } 4983 4984 return ''; 4985 } 4986 4987 function getTextLeftSpacing(properties) 4988 { 4989 var m = getTextM(properties); 4990 4991 if (m != null) 4992 { 4993 //adds left spacing 4994 var i = 0; 4995 4996 while (i < m.length) 4997 { 4998 var currM = m[i]; 4999 5000 if (currM.v != null) 5001 { 5002 if (currM.n == 'il') 5003 { 5004 return 'spacingLeft=' + fix1Digit(currM.v * scale) + ';'; 5005 } 5006 /*else 5007 { 5008 var align = getTextAlignment(properties); 5009 5010 if (currM.n == 's' && align != 'align=center;' && align != '') 5011 { 5012 // TODO: Fix condition to apply this only when necessary 5013 //return 'spacingLeft=' + currM.v * scale + ';'; 5014 } 5015 }*/ 5016 } 5017 5018 i++; 5019 } 5020 } 5021 5022 return ''; 5023 } 5024 5025 function getTextRightSpacing(properties) 5026 { 5027 //adds right spacing 5028 var isIR = false; 5029 var m = getTextM(properties); 5030 5031 if (m != null) 5032 { 5033 var i = 0; 5034 5035 while ((!isIR) && (i < m.length)) 5036 { 5037 var currM = m[i]; 5038 5039 if (currM.n == 'ir') 5040 { 5041 if (currM.v != null) 5042 { 5043 isIR = true; 5044 5045 return 'spacingRight=' + fix1Digit(currM.v * scale) + ';'; 5046 } 5047 } 5048 5049 i++; 5050 } 5051 } 5052 5053 return ''; 5054 } 5055 5056 function getTextTopSpacing(properties) 5057 { 5058 //adds top spacing 5059 var isMT = false; 5060 var m = getTextM(properties); 5061 5062 if (m != null) 5063 { 5064 var i = 0; 5065 5066 while ((!isMT) && (i < m.length)) 5067 { 5068 var currM = m[i]; 5069 5070 if (currM.n == 'mt') 5071 { 5072 if (currM.v != null) 5073 { 5074 isMT = true; 5075 return 'spacingTop=' + fix1Digit(currM.v * scale) + ';'; 5076 } 5077 } 5078 5079 i++; 5080 } 5081 } 5082 5083 return ''; 5084 } 5085 5086 function getTextBottomSpacing(properties) 5087 { 5088 //adds bottom spacing 5089 var isMB = false; 5090 var m = getTextM(properties); 5091 5092 if (m != null) 5093 { 5094 var i = 0; 5095 5096 while ((!isMB) && (i < m.length)) 5097 { 5098 var currM = m[i]; 5099 5100 if (currM.n == 'mb') 5101 { 5102 if (currM.v != null) 5103 { 5104 isMB = true; 5105 return 'spacingBottom=' + fix1Digit(currM.v * scale) + ';'; 5106 } 5107 } 5108 5109 i++; 5110 } 5111 } 5112 5113 return ''; 5114 } 5115 5116 function getTextGlobalSpacing(properties) 5117 { 5118 //adds global spacing 5119 if (typeof properties.InsetMargin === 'number') 5120 { 5121 return 'spacing=' + Math.max(0, fix1Digit((properties.InsetMargin) * scale)) + ';'; 5122 } 5123 5124 return ''; 5125 } 5126 5127 function getTextVerticalAlignment(properties) 5128 { 5129 // adds text vertical alignment 5130 if (properties.Text_VAlign != null) 5131 { 5132 if (typeof properties.Text_VAlign === 'string') 5133 { 5134 return 'verticalAlign=' + properties.Text_VAlign + ';'; 5135 } 5136 } 5137 5138 if (properties.Title_VAlign != null && typeof properties.Title_VAlign === 'string') 5139 { 5140 return 'verticalAlign=' + properties.Title_VAlign + ';'; 5141 } 5142 5143 return createStyle(mxConstants.STYLE_VERTICAL_ALIGN, properties.TextVAlign, 'middle'); 5144 } 5145 5146 function getTextGlobalAlignment(properties) 5147 { 5148 return createStyle(mxConstants.STYLE_ALIGN, properties.TextAlign, 'center'); 5149 } 5150 5151 function getStrokeColor(properties, action) 5152 { 5153 if (properties.LineWidth == 0) 5154 { 5155 return mxConstants.STYLE_STROKECOLOR + '=none;'; 5156 } 5157 else 5158 { 5159 return createStyle(mxConstants.STYLE_STROKECOLOR, getColor(properties.LineColor), '#000000'); 5160 } 5161 } 5162 5163 function getHeaderColor(color) 5164 { 5165 if (color != null) 5166 { 5167 return mxConstants.STYLE_FILLCOLOR + '=' + getColor(color) + ';'; 5168 } 5169 5170 return ''; 5171 } 5172 5173 function getLaneColor(color) 5174 { 5175 if (color != null) 5176 { 5177 return 'swimlaneFillColor=' + getColor(color) + ';'; 5178 } 5179 5180 return ''; 5181 } 5182 5183 function getOpacity(properties, action, cell) 5184 { 5185 var style = ''; 5186 5187 if (typeof properties.LineColor === 'string') 5188 { 5189 properties.LineColor = rgbToHex(properties.LineColor); 5190 5191 if (properties.LineColor.length > 7) 5192 { 5193 var sOpac = "0x" + properties.LineColor.substring(properties.LineColor.length - 2, properties.LineColor.length); 5194 5195 if(!cell.style.includes('strokeOpacity')) 5196 { 5197 style += 'strokeOpacity=' + Math.round(parseInt(sOpac) / 2.55) + ';'; 5198 } 5199 } 5200 } 5201 5202 if (typeof properties.FillColor === 'string') 5203 { 5204 properties.FillColor = rgbToHex(properties.FillColor); 5205 5206 if (properties.FillColor.length > 7) 5207 { 5208 var fOpac = "0x" + properties.FillColor.substring(properties.FillColor.length - 2, properties.FillColor.length); 5209 5210 if(!cell.style.includes('fillOpacity')) 5211 { 5212 style += 'fillOpacity=' + Math.round(parseInt(fOpac) / 2.55) + ';'; 5213 } 5214 } 5215 } 5216 5217 return style; 5218 } 5219 5220 function getRounded(properties, action, cell) 5221 { 5222 if (!cell.edge && !cell.style.includes('rounded')) 5223 { 5224 //rounding check 5225 if (properties.Rounding != null) 5226 { 5227 if (properties.Rounding > 0) 5228 { 5229 return 'rounded=1;absoluteArcSize=1;arcSize=' + fix1Digit(properties.Rounding * scale) + ';'; 5230 } 5231 } 5232// else if (properties.Rounding == null) 5233// { 5234// return 'rounded=1;absoluteArcSize=1;arcSize=8;'; 5235// } 5236 } 5237 5238 return ''; 5239 } 5240 5241 function getRotation(properties, action, cell) 5242 { 5243 var s = ''; 5244 5245 // Converts rotation 5246 if (properties.Rotation != null) 5247 { 5248 // KNOWN: TextRotation currently ignored 5249 var deg = mxUtils.toDegree(parseFloat(properties.Rotation)); 5250 var h = true; 5251 5252 // Fixes the case for horizontal swimlanes where we use horizontal=0 5253 // and Lucid uses rotation 5254 if (deg != 0 && action.Class && ((action.Class == 'UMLSwimLaneBlockV2') || ((action.Class.indexOf('Rotated') >= 0 || deg == -90 || deg == 270) && (action.Class.indexOf('Pool') >= 0 || action.Class.indexOf('SwimLane') >= 0)))) 5255 { 5256 deg += 90; 5257 cell.geometry.rotate90(); 5258 cell.geometry.isRotated = true; 5259 h = false; 5260 } 5261 else if (mxUtils.indexOf(rccw, action.Class) >= 0) 5262 { 5263 deg -= 90; 5264 cell.geometry.rotate90(); 5265 } 5266 else if (mxUtils.indexOf(rcw2, action.Class) >= 0) 5267 { 5268 deg += 180; 5269 } 5270 5271 if (deg != 0) 5272 { 5273 s += 'rotation=' + deg + ';' 5274 } 5275 5276 if (!h) 5277 { 5278 s += 'horizontal=0;'; 5279 } 5280 } 5281 5282 return s; 5283 } 5284 5285 function getFlipH(properties) 5286 { 5287 if (properties.FlipX) 5288 { 5289 return 'flipH=1;'; 5290 } 5291 5292 return ''; 5293 } 5294 5295 function getFlipV(properties) 5296 { 5297 if (properties.FlipY) 5298 { 5299 return 'flipV=1;'; 5300 } 5301 5302 return ''; 5303 } 5304 5305 function getShadow(properties) 5306 { 5307 // Shadow is mapped simple shadow style 5308 if (properties.Shadow != null) 5309 { 5310 return mxConstants.STYLE_SHADOW + '=1;'; 5311 } 5312 5313 return ''; 5314 } 5315 5316 function rgbToHex(color) 5317 { 5318 if (color) 5319 { 5320 if (typeof color === 'object') 5321 { 5322 try 5323 { 5324 color = color.cs[0].c; //TODO support gradient colors 5325 } 5326 catch(e) 5327 { 5328 console.log(e); 5329 color = '#ffffff'; 5330 } 5331 } 5332 5333 if (color.substring(0, 3) == 'rgb') 5334 { 5335 color = '#' + color.match(/\d+/g).map(function(n) 5336 { 5337 var s = parseInt(n).toString(16); 5338 return (s.length == 1? '0' : '') + s; 5339 }).join(''); 5340 } 5341 else if (color.charAt(0) != '#') 5342 { 5343 color = '#' + color; 5344 } 5345 } 5346 5347 return color; 5348 }; 5349 5350 function getColor(color) 5351 { 5352 color = rgbToHex(color); 5353 return color? color.substring(0, 7) : null; 5354 } 5355 5356 function getOpacity2(color, style) 5357 { 5358 color = rgbToHex(color); 5359 return color && color.length > 7? (style + '=' + Math.round(parseInt('0x' + color.substr(7)) / 2.55) + ';') : ''; 5360 } 5361 5362 function getFillColor(properties, action) 5363 { 5364 // Gradients and fill color 5365 if (properties.FillColor != null) 5366 { 5367 if (typeof properties.FillColor === 'object') 5368 { 5369 if (properties.FillColor.cs != null && properties.FillColor.cs.length > 1) 5370 { 5371 return createStyle(mxConstants.STYLE_FILLCOLOR, getColor(properties.FillColor.cs[0].c)) + createStyle(mxConstants.STYLE_GRADIENTCOLOR, getColor(properties.FillColor.cs[1].c)); 5372 } 5373 } 5374 else if (typeof properties.FillColor === 'string') 5375 { 5376 return createStyle(mxConstants.STYLE_FILLCOLOR, getColor(properties.FillColor), '#FFFFFF'); 5377 } 5378 else 5379 { 5380 return createStyle(mxConstants.STYLE_FILLCOLOR, 'none'); 5381 } 5382 } 5383 5384 return ''; 5385 } 5386 5387 function getStrokeStyle(properties) 5388 { 5389 // Stroke style 5390 if (properties.StrokeStyle == 'dotted') 5391 { 5392 return 'dashed=1;fixDash=1;dashPattern=1 4;'; 5393 } 5394 else if (properties.StrokeStyle == 'dashdot') 5395 { 5396 return 'dashed=1;fixDash=1;dashPattern=10 5 1 5;'; 5397 } 5398 else if (properties.StrokeStyle == 'dashdotdot') 5399 { 5400 return 'dashed=1;fixDash=1;dashPattern=10 5 1 5 1 5;'; 5401 } 5402 else if (properties.StrokeStyle == 'dotdotdot') 5403 { 5404 return 'dashed=1;fixDash=1;dashPattern=1 2;'; 5405 } 5406 else if (properties.StrokeStyle == 'longdash') 5407 { 5408 return 'dashed=1;fixDash=1;dashPattern=16 6;'; 5409 } 5410 else if (properties.StrokeStyle == 'dashlongdash') 5411 { 5412 return 'dashed=1;fixDash=1;dashPattern=10 6 16 6;'; 5413 } 5414 else if (properties.StrokeStyle == 'dashed24') 5415 { 5416 return 'dashed=1;fixDash=1;dashPattern=3 8;'; 5417 } 5418 else if (properties.StrokeStyle == 'dashed32') 5419 { 5420 return 'dashed=1;fixDash=1;dashPattern=6 5;'; 5421 } 5422 else if (properties.StrokeStyle == 'dashed44') 5423 { 5424 return 'dashed=1;fixDash=1;dashPattern=8 8;'; 5425 } 5426 else if (properties.StrokeStyle != null && properties. 5427 StrokeStyle.substring(0, 6) == 'dashed') 5428 { 5429 return 'dashed=1;fixDash=1;'; 5430 } 5431 5432 return ''; 5433 } 5434 5435 function getStrokeWidth(properties) 5436 { 5437 return properties.LineWidth != null? createStyle(mxConstants.STYLE_STROKEWIDTH, fix1Digit(parseFloat(properties.LineWidth) * scale), '1') : ''; 5438 } 5439 5440 function getImage(properties, action, url) 5441 { 5442 var imgUrl = url, extraStyles = ''; 5443 5444 // Converts images 5445 if (properties.FillColor && properties.FillColor.url) 5446 { 5447 imgUrl = properties.FillColor.url; 5448 //Check if image is cropped, stretched, ... 5449 if (properties.FillColor.pos == 'fill') 5450 { 5451 extraStyles = 'imageAspect=0;'; 5452 } 5453 //TODO Support non-destructive cropping 5454 /*else if (typeof properties.FillColor.pos == 'object') 5455 { 5456 "pos": { 5457 "pin": { 5458 "x": 0.5765582655826557, 5459 "y": 0.6180376215526864 5460 }, 5461 "size": { 5462 "w": 0.7764227642276422, 5463 "h": 1.5284871672246134 5464 } 5465 } 5466 }*/ 5467 } 5468 else if (action.Class == 'ImageSearchBlock2') 5469 { 5470 imgUrl = properties.URL; 5471 } 5472 else if (action.Class == 'UserImage2Block' && properties.ImageFillProps != null && 5473 properties.ImageFillProps.url != null) 5474 { 5475 imgUrl = properties.ImageFillProps.url; 5476 } 5477 5478 if (imgUrl != null) 5479 { 5480 return 'image=' + mapImgUrl(imgUrl) + ';' + extraStyles; 5481 } 5482 5483 return ''; 5484 } 5485 5486 // Adds metadata, link, converts placeholders 5487 function addCustomData(cell, p, graph) 5488 { 5489 if (p.Link != null && p.Link.length > 0) 5490 { 5491 graph.setAttributeForCell(cell, 'link', getLink(p.Link[0])); 5492 } 5493 5494 replacePlaceholders(cell, graph); 5495 5496 for (var property in p) 5497 { 5498 if (p.hasOwnProperty(property) && 5499 property.toString().startsWith('ShapeData_')) 5500 { 5501 try 5502 { 5503 var data = p[property]; 5504 var key = mxUtils.trim(data.Label).replace(/[^a-z0-9]+/ig, '_'). 5505 replace(/^\d+/, '').replace(/_+$/, ''); 5506 setAttributeForCell(cell, key, data.Value, graph); 5507 } 5508 catch (e) 5509 { 5510 if (window.console) 5511 { 5512 console.log('Ignored ' + property + ':', e); 5513 } 5514 } 5515 } 5516 } 5517 }; 5518 5519 var placeholderPattern = new RegExp('{{(date\{.*\}|[^%^\{^\}]+)}}', 'g'); 5520 5521 function replacePlaceholders(cell, graph) 5522 { 5523 var result = []; 5524 var str = graph.convertValueToString(cell); 5525 var doReplace = false; 5526 5527 if (str != null) 5528 { 5529 var last = 0; 5530 5531 while (match = placeholderPattern.exec(str)) 5532 { 5533 var val = match[0]; 5534 doReplace = true; 5535 5536 if (val.length > 2) 5537 { 5538 var tmp = val.substring(2, val.length - 2); 5539 5540 if (tmp == 'documentName') 5541 { 5542 tmp = 'filename'; 5543 } 5544 else if (tmp == 'pageName') 5545 { 5546 tmp = 'page'; 5547 } 5548 else if (tmp == 'totalPages') 5549 { 5550 tmp = 'pagecount'; 5551 } 5552 else if (tmp == 'page') 5553 { 5554 tmp = 'pagenumber'; 5555 } 5556 else if (tmp.substring(0, 5) == 'date:') 5557 { 5558 // LATER: Convert more date masks 5559 tmp = 'date{' + tmp.substring(5).replace(/MMMM/g, 'mmmm').replace(/MM/g, 'mm').replace(/YYYY/g, 'yyyy') + '}'; 5560 } 5561 else if (tmp.substring(0, 16) == 'lastModifiedTime') 5562 { 5563 // LATER: Convert more date masks 5564 tmp = tmp.replace(/MMMM/g, 'mmmm').replace(/MM/g, 'mm').replace(/YYYY/g, 'yyyy'); 5565 } 5566 else if (tmp.substring(0, 9) == 'i18nDate:') 5567 { 5568 // LATER: Convert more named date masks 5569 tmp = 'date{' + tmp.substring(9).replace(/i18nShort/g, 'shortDate') 5570 .replace(/i18nMediumWithTime/g, 'mmm d, yyyy hh:MM TT') + '}'; 5571 } 5572 5573 tmp = '%' + tmp + '%'; 5574 result.push(str.substring(last, match.index) + ((tmp != null) ? tmp : val)); 5575 last = match.index + val.length; 5576 } 5577 } 5578 5579 if (doReplace) 5580 { 5581 result.push(str.substring(last)); 5582 graph.setAttributeForCell(cell, 'label', result.join('')); 5583 graph.setAttributeForCell(cell, 'placeholders', '1'); 5584 } 5585 } 5586 }; 5587 5588 function setAttributeForCell(cell, key, value, graph) 5589 { 5590 var currentKey = key; 5591 var counter = 0; 5592 5593 // Resolves conflicts by adding counter postfix 5594 while (graph.getAttributeForCell(cell, currentKey) != null) 5595 { 5596 counter++; 5597 currentKey = key + '_' + counter; 5598 } 5599 5600 graph.setAttributeForCell(cell, currentKey, (value != null) ? value : ''); 5601 }; 5602 5603 function updateCell(cell, obj, graph, source, target, ignoreLabel) 5604 { 5605 var a = getAction(obj); 5606 5607 if (a != null) 5608 { 5609 var s = styleMap[a.Class]; 5610 5611 if (s != null) 5612 { 5613 cell.style += s + ';'; 5614 } 5615 else if (!cell.edge) 5616 { 5617 console.log('No mapping found for: ' + a.Class); 5618 LucidImporter.hasUnknownShapes = true; 5619 } 5620 5621 var p = (a.Properties != null) ? a.Properties : a; 5622 5623 if (p != null) 5624 { 5625 // Adds label 5626 cell.value = (!ignoreLabel) ? convertText(p) : ''; 5627 cell.style += addAllStyles(cell.style, p, a, cell, isLastLblHTML); 5628 5629 if (!cell.style.includes('strokeColor')) 5630 { 5631 cell.style += getStrokeColor(p, a); 5632 } 5633 5634 addCustomData(cell, p, graph); 5635 5636 if (p.Title && p.Title.t && p.Text && p.Text.t && a.Class.substr(0, 8) != 'ExtShape') 5637 { 5638 var geo = cell.geometry; 5639 var title = new mxCell(convertText(p.Title), new mxGeometry(0, geo.height,geo.width, 10), 'strokeColor=none;fillColor=none;'); 5640 title.vertex = true; 5641 cell.insert(title); 5642 title.style += getLabelStyle(p.Title, isLastLblHTML); 5643 } 5644 5645 // Edge style 5646 if (cell.edge) 5647 { 5648 if (p.Rounding != null && p.Shape != 'diagonal') //No rounding for diagornal edges 5649 { 5650 cell.style += 'rounded=1;arcSize=' + p.Rounding + ';'; 5651 } 5652 else 5653 { 5654 cell.style += 'rounded=0;'; 5655 } 5656 var isCurved = p.Shape == 'curve'; 5657 5658 if (p.Shape != 'diagonal') 5659 { 5660 if (p.ElbowPoints != null && p.ElbowPoints.length > 0) 5661 { 5662 cell.geometry.points = []; 5663 5664 for (var i = 0; i < p.ElbowPoints.length; i++) 5665 { 5666 cell.geometry.points.push(new mxPoint( 5667 Math.round(p.ElbowPoints[i].x * scale + dx), 5668 Math.round(p.ElbowPoints[i].y * scale + dy))); 5669 } 5670 } 5671 else if (p.Shape == 'elbow') 5672 { 5673 cell.style += 'edgeStyle=orthogonalEdgeStyle;'; 5674 } 5675 else if (p.Endpoint1.Block != null && p.Endpoint2.Block != null) 5676 { 5677 cell.style += 'edgeStyle=orthogonalEdgeStyle;'; 5678 5679 if (isCurved) 5680 { 5681 cell.style += 'curved=1;'; 5682 } 5683 } 5684 } 5685 5686 if (p.LineJumps || LucidImporter.globalProps.LineJumps) 5687 { 5688 cell.style += 'jumpStyle=arc;'; 5689 } 5690 5691 if (p.Endpoint1.Style != null) 5692 { 5693 var startStyle = edgeStyleMap[p.Endpoint1.Style]; 5694 5695 if (startStyle != null) 5696 { 5697 startStyle = startStyle.replace(/xyz/g, 'start'); 5698 cell.style += 'startArrow=' + startStyle + ';'; 5699 } 5700 else 5701 { 5702 LucidImporter.hasUnknownShapes = true; 5703 5704 if (window.console) 5705 { 5706 console.log('Unknown endpoint style: ' + p.Endpoint1.Style); 5707 } 5708 } 5709 } 5710 5711 if (p.Endpoint2.Style != null) 5712 { 5713 var endStyle = edgeStyleMap[p.Endpoint2.Style]; 5714 5715 if (endStyle != null) 5716 { 5717 endStyle = endStyle.replace(/xyz/g, 'end'); 5718 cell.style += 'endArrow=' + endStyle + ';'; 5719 } 5720 else 5721 { 5722 LucidImporter.hasUnknownShapes = true; 5723 5724 if (window.console) 5725 { 5726 console.log('Unknown endpoint style: ' + p.Endpoint2.Style); 5727 } 5728 } 5729 } 5730 5731 var waypoints = p.ElbowControlPoints != null && p.ElbowControlPoints.length > 0? p.ElbowControlPoints : 5732 (isCurved && p.BezierJoints != null && p.BezierJoints.length > 0? p.BezierJoints : p.Joints); 5733 5734 if (waypoints != null) 5735 { 5736 cell.geometry.points = []; 5737 5738 for (var i = 0; i < waypoints.length; i++) 5739 { 5740 var pt = waypoints[i].p ? waypoints[i].p : waypoints[i]; 5741 5742 cell.geometry.points.push(new mxPoint( 5743 Math.round(pt.x * scale + dx), 5744 Math.round(pt.y * scale + dy))); 5745 } 5746 5747 if (waypoints == p.BezierJoints) 5748 { 5749 console.log('Curved edge case'); 5750 LucidImporter.hasUnknownShapes = true; 5751 } 5752 } 5753 5754 // Inserts implicit or explicit control points for loops 5755 var implicitY = false, implicitX = false; 5756 5757 if ((cell.geometry.points == null || cell.geometry.points.length == 0) && 5758 p.Endpoint1.Block != null && p.Endpoint1.Block == p.Endpoint2.Block && 5759 source != null && target != null) 5760 { 5761 { 5762 var exit = new mxPoint(Math.round(source.geometry.x + source.geometry.width * p.Endpoint1.LinkX), 5763 Math.round(source.geometry.y + source.geometry.height * p.Endpoint1.LinkY)); 5764 var entry = new mxPoint(Math.round(target.geometry.x + target.geometry.width * p.Endpoint2.LinkX), 5765 Math.round(target.geometry.y + target.geometry.height * p.Endpoint2.LinkY)); 5766 dx = (exit.x == entry.x) ? (Math.abs(exit.x - source.geometry.x) < source.geometry.width / 2? -20 : 20) : 0; 5767 dy = (exit.y == entry.y) ? (Math.abs(exit.y - source.geometry.y) < source.geometry.height / 2? -20 : 20) : 0; 5768 5769 var p1 = new mxPoint(exit.x + dx, exit.y + dy), p2 = new mxPoint(entry.x + dx, entry.y + dy); 5770 p1.generated = true; 5771 p2.generated = true; 5772 cell.geometry.points = [p1, p2]; 5773 implicitX = (exit.y == entry.y); //TODO Check these implicit variables effect 5774 implicitY = (exit.x == entry.x); 5775 } 5776 } 5777 5778 // Anchor points and arrows 5779 var p1, p2; 5780 5781 if (source == null || !source.geometry.isRotated) //TODO Rotate the endpoint instead of ignoring it 5782 { 5783 p1 = updateEndpoint(cell, p.Endpoint1, true, implicitY, null, source); 5784 } 5785 5786 if (source != null && p1 != null) 5787 { 5788 if (source.stylePoints == null) 5789 { 5790 source.stylePoints = []; 5791 } 5792 5793 source.stylePoints.push(p1); 5794 LucidImporter.stylePointsSet.add(source); 5795 } 5796 5797 if (target == null || !target.geometry.isRotated) //TODO Rotate the endpoint instead of ignoring it 5798 { 5799 p2 = updateEndpoint(cell, p.Endpoint2, false, implicitY, null, target); 5800 } 5801 5802 if (target != null && p2 != null) 5803 { 5804 if (target.stylePoints == null) 5805 { 5806 target.stylePoints = []; 5807 } 5808 5809 target.stylePoints.push(p2); 5810 LucidImporter.stylePointsSet.add(target); 5811 } 5812 } 5813 } 5814 } 5815 5816 if (obj.id != null) 5817 { 5818 setAttributeForCell(cell, 'lucidchartObjectId', obj.id, graph); 5819 } 5820 }; 5821 5822 function createVertex(obj, graph) 5823 { 5824 var a = getAction(obj); 5825 var p = a.Properties; 5826 var b = p.BoundingBox; 5827 5828 if (obj.Class != null && (obj.Class.substring(0, 3) === "AWS" || obj.Class.substring(0, 6) === "Amazon" ) && !obj.Class.includes('AWS19')) 5829 { 5830 b.h = b.h - 20; 5831 } 5832 5833 v = new mxCell('', new mxGeometry(Math.round(b.x * scale + dx), Math.round(b.y * scale + dy), 5834 Math.round(b.w * scale), Math.round(b.h * scale)), vertexStyle); 5835 v.vertex = true; 5836 updateCell(v, obj, graph); 5837 5838 //Store z-order to use it in groups 5839 v.zOrder = p.ZOrder; 5840 5841 //FillOpacity affects icon also, so create a parent as a background color 5842 if (v != null && v.style.indexOf(';grIcon=') >= 0) 5843 { 5844 var parent = new mxCell('', new mxGeometry(v.geometry.x, v.geometry.y, 5845 v.geometry.width, v.geometry.height), vertexStyle); 5846 parent.vertex = true; 5847 parent.style += addAllStyles(parent.style, p, a, parent); 5848 5849 v.geometry.x = 0; 5850 v.geometry.y = 0; 5851 v.style += 'part=1;'; 5852 parent.insert(v); 5853 v = parent; 5854 } 5855 5856 handleTextRotation(v, p); 5857 5858 if (p.Hidden) 5859 { 5860 v.visible = false; 5861 } 5862 5863 return v; 5864 }; 5865 5866 function createEdge(obj, graph, source, target) 5867 { 5868 var e = new mxCell('', new mxGeometry(0, 0, 100, 100), edgeStyle); 5869 e.geometry.relative = true; 5870 e.edge = true; 5871 updateCell(e, obj, graph, source, target, true); 5872 5873 // Adds text labels 5874 var a = getAction(obj); 5875 var p = a.Properties; 5876 var ta = (p != null) ? p.TextAreas : obj.TextAreas; 5877 5878 if (ta != null) 5879 { 5880 var count = 0; 5881 5882 while (ta['t' + count] !== undefined) //Some files has null for some labels 5883 { 5884 var tmp = ta['t' + count]; 5885 5886 if (tmp != null) 5887 { 5888 e = insertLabel(tmp, e, obj, source, target); 5889 } 5890 5891 count++; 5892 } 5893 5894 count = 0; 5895 5896 while (ta['m' + count] !== undefined || count < 1) 5897 { 5898 var tmp = ta['m' + count]; 5899 5900 if (tmp != null) 5901 { 5902 e = insertLabel(tmp, e, obj, source, target); 5903 } 5904 5905 count++; 5906 } 5907 5908 if (ta.Text != null) 5909 { 5910 e = insertLabel(ta.Text, e, obj, source, target); 5911 } 5912 5913 var ta = (p != null) ? p.TextAreas : obj.TextAreas; 5914 5915 if (ta.Message != null) 5916 { 5917 e = insertLabel(ta.Message, e, obj, source, target); 5918 } 5919 } 5920 5921 if (obj.Hidden) 5922 { 5923 e.visible = false; 5924 } 5925 5926 return e; 5927 } 5928 5929 function insertLabel(textArea, e, obj, src, trg) 5930 { 5931 var x = (parseFloat(textArea.Location) - 0.5) * 2; 5932 5933 if (isNaN(x) && textArea.Text != null && textArea.Text.Location != null) 5934 { 5935 x = (parseFloat(textArea.Text.Location) - 0.5) * 2; 5936 } 5937 5938 var lblTxt = convertText(textArea); 5939 var lab = new mxCell(lblTxt, new mxGeometry((!isNaN(x)) ? x : 0, 0, 0, 0), 5940 labelStyle + getEdgeLabelStyle(textArea, obj, isLastLblHTML)); 5941 lab.geometry.relative = true; 5942 lab.vertex = true; 5943 5944 if (textArea.Side) 5945 { 5946 try 5947 { 5948 if (obj.Action && obj.Action.Properties) 5949 { 5950 obj = obj.Action.Properties; 5951 } 5952 5953 var dx, dy; 5954 5955 //Sometimes x, y info in the Endpoint is incorrect when the edge is connected! 5956 if (src != null && trg != null) 5957 { 5958 var srcGeo = src.geometry, trgGeo = trg.geometry; 5959 dx = Math.abs((srcGeo.x + srcGeo.width * obj.Endpoint1.LinkX) - 5960 (trgGeo.x + trgGeo.width * obj.Endpoint2.LinkX)); 5961 dy = Math.abs((srcGeo.y + srcGeo.height * obj.Endpoint1.LinkY) - 5962 (trgGeo.y + trgGeo.height * obj.Endpoint2.LinkY)); 5963 } 5964 else 5965 { 5966 dx = Math.abs(obj.Endpoint1.x - obj.Endpoint2.x); 5967 dy = Math.abs(obj.Endpoint1.y - obj.Endpoint2.y); 5968 } 5969 5970 var strSize = mxUtils.getSizeForString(lblTxt.replace(/\n/g, '<br>')); 5971 5972 if (dx == 0 || dx < dy) 5973 { 5974 lab.geometry.offset = new mxPoint(Math.sign(obj.Endpoint1.y - obj.Endpoint2.y) * textArea.Side * (strSize.width / 2 + 5 + dx), 0); 5975 } 5976 else 5977 { 5978 lab.geometry.offset = new mxPoint(0, Math.sign(obj.Endpoint2.x - obj.Endpoint1.x) * textArea.Side * (strSize.height / 2 + 5 + dy)); 5979 } 5980 } 5981 catch(e) 5982 { 5983 console.log(e); 5984 } 5985 } 5986 5987 e.insert(lab); 5988 5989 return e; 5990 }; 5991 5992 function getEdgeLabelStyle(obj, pObj, noLblStyle) 5993 { 5994 if (noLblStyle) 5995 { 5996 return gFontFamilyStyle; 5997 } 5998 5999 var size = defaultFontSize; 6000 var style = ''; 6001 6002 if (obj != null && obj.Value != null && obj.Value.m != null) 6003 { 6004 style = getFontStyleString(obj.Value.m); 6005 6006 for (var i = 0; i < obj.Value.m.length; i++) 6007 { 6008 if (obj.Value.m[i].n == 's') 6009 { 6010 size = fix1Digit(scale * parseFloat(obj.Value.m[i].v)); 6011 } 6012 else if (obj.Value.m[i].n == 'c') 6013 { 6014 var v = rgbToHex(obj.Value.m[i].v); 6015 6016 if (v != null) 6017 { 6018 v = v.substring(0, 7); 6019 } 6020 6021 style += 'fontColor=' + v + ';' 6022 } 6023 } 6024 6025 style += getFontFamily(pObj); 6026 gFontFamilyStyle = ''; 6027 } 6028 6029 return style + ';fontSize=' + size + ';'; 6030 }; 6031 6032 function createStyle(key, prop, defaultValue, fn) 6033 { 6034 if (prop != null && fn != null) 6035 { 6036 prop = fn(prop); 6037 } 6038 6039 if (prop != null && prop != defaultValue) 6040 { 6041 return key + '=' + prop + ';'; 6042 } 6043 6044 return ''; 6045 }; 6046 6047 function updateEndpoint(cell, endpoint, source, ignoreX, ignoreY, endCell) 6048 { 6049 if (endpoint != null) 6050 { 6051 if (endpoint.LinkX != null && endpoint.LinkY != null) 6052 { 6053 endpoint.LinkX = Math.round(endpoint.LinkX * 1000) / 1000; 6054 endpoint.LinkY = Math.round(endpoint.LinkY * 1000) / 1000; 6055 6056 if (endCell != null && endCell.style && endCell.style.indexOf('flipH=1') > -1) 6057 { 6058 endpoint.LinkX = 1 - endpoint.LinkX; 6059 } 6060 6061 if (endCell != null && endCell.style && endCell.style.indexOf('flipV=1') > -1) 6062 { 6063 endpoint.LinkY = 1 - endpoint.LinkY; 6064 } 6065 6066 cell.style += ((!ignoreX) ? ((source) ? 'exitX' : 'entryX') + '=' + endpoint.LinkX + ';' : '') + 6067 ((!ignoreY) ? (((source) ? 'exitY' : 'entryY') + '=' + endpoint.LinkY + ';') : '') + 6068 ((source) ? 'exitPerimeter' : 'entryPerimeter') + '=0;'; //perimeter as 0 works with both cases better 6069 6070 if (endpoint.Inside) 6071 { 6072 6073 return '[' + endpoint.LinkX + ',' + endpoint.LinkY + ',0]'; 6074 } 6075 } 6076 } 6077 }; 6078 6079 function createGroup(obj, lookup, edgesGroups, blocksMap) 6080 { 6081 try 6082 { 6083 if (obj.Action != null && obj.Action.Properties != null) 6084 { 6085 obj = obj.Action.Properties; 6086 } 6087 6088 var group = new mxCell('', new mxGeometry(), 'group;dropTarget=0;'); 6089 group.vertex = true; 6090 //Store z-order to use it in groups 6091 group.zOrder = obj.ZOrder; 6092 6093 var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; 6094 var members = obj.Members, memberCells = []; 6095 6096 for (var key in members) 6097 { 6098 var v = lookup[key]; 6099 6100 if (v != null) 6101 { 6102 memberCells.push(v); 6103 } 6104 else if (blocksMap[key] != null) 6105 { 6106 memberCells.push(blocksMap[key]); 6107 //Edges are not yet created, so, create a map for them 6108 edgesGroups[key] = group; 6109 } 6110 } 6111 6112 memberCells.sort(function(a, b) 6113 { 6114 var ai = a.zOrder || a.ZOrder; // for edges we need ZOrder since they aren't created yet 6115 var bi = b.zOrder || b.ZOrder; 6116 6117 return (ai != null && bi != null) ? (ai > bi? 1 : (ai < bi? -1 : 0)) : 0; //ZOrder can be negative 6118 }); 6119 6120 function updateMinMax(e, scaleIt) 6121 { 6122 if (e != null) 6123 { 6124 if (Array.isArray(e)) 6125 { 6126 for (var i = 0; i < e.length; i++) 6127 { 6128 updateMinMax(e[i].p? e[i].p : e[i], scaleIt); 6129 } 6130 } 6131 else 6132 { 6133 var s = scaleIt? scale : 1; 6134 minX = Math.min(minX, e.x * s); 6135 minY = Math.min(minY, e.y * s); 6136 maxX = Math.max(maxX, (e.x + (e.width? e.width : 0)) * s); 6137 maxY = Math.max(maxY, (e.y + (e.height? e.height : 0)) * s); 6138 } 6139 } 6140 }; 6141 6142 var index = 0; 6143 6144 for (var i = 0; i < memberCells.length; i++) 6145 { 6146 var v = memberCells[i]; 6147 6148 if (v.vertex) 6149 { 6150 updateMinMax(v.geometry); 6151 v.parent = group; 6152 group.insert(v, index++); 6153 } 6154 else 6155 { 6156 var vProp = v.Action != null && v.Action.Properties? v.Action.Properties : v; 6157 updateMinMax(vProp.Endpoint1, true); 6158 updateMinMax(vProp.Endpoint2, true); 6159 updateMinMax(vProp.ElbowPoints, true); 6160 updateMinMax(vProp.ElbowControlPoints, true); 6161 updateMinMax(vProp.BezierJoints, true); 6162 updateMinMax(vProp.Joints, true); 6163 } 6164 } 6165 6166 group.geometry.x = minX; 6167 group.geometry.y = minY; 6168 group.geometry.width = maxX - minX; 6169 group.geometry.height = maxY - minY; 6170 6171 if (group.children != null) 6172 { 6173 for (var i = 0; i < group.children.length; i++) 6174 { 6175 var geo = group.children[i].geometry; 6176 geo.x -= minX; 6177 geo.y -= minY; 6178 } 6179 } 6180 6181 if (obj.IsState) 6182 { 6183 group.lucidLayerInfo = { 6184 name: obj.Name, 6185 visible: !obj.Hidden, 6186 locked: obj.Restrictions.b && obj.Restrictions.p && obj.Restrictions.c 6187 }; 6188 } 6189 else if (obj.Hidden) 6190 { 6191 group.visible = false; 6192 } 6193 6194 return group; 6195 } 6196 catch(e) 6197 { 6198 console.log(e); 6199 } 6200 }; 6201 6202 function importLucidPage(graph, g, noSelection) 6203 { 6204 LucidImporter.hasMath = false; 6205 LucidImporter.stylePointsSet = new Set(); 6206 6207 graph.getModel().beginUpdate(); 6208 try 6209 { 6210 var select = []; 6211 var lookup = {}; 6212 var edgesGroups = {}; 6213 var blocksMap = {}; 6214 var queue = []; 6215 6216 if (g.Lines != null) 6217 { 6218 blocksMap = g.Lines; 6219 } 6220 6221 // Vertices first (populates lookup table for connecting edges) 6222 if (g.Blocks != null) 6223 { 6224 Object.assign(blocksMap, g.Blocks); 6225 6226 for (var key in g.Blocks) 6227 { 6228 var obj = g.Blocks[key]; 6229 obj.id = key; 6230 6231 var created = false; 6232 6233 if (styleMap[obj.Class] != null) 6234 { 6235 if (styleMap[obj.Class] == 'mxCompositeShape') 6236 { 6237 lookup[obj.id] = addCompositeShape(obj, select, graph); 6238 queue.push(obj); 6239 created = true; 6240 } 6241 } 6242 6243 if (!created) 6244 { 6245 lookup[obj.id] = createVertex(obj, graph); 6246 queue.push(obj); 6247 } 6248 } 6249 6250 if (g.Generators != null) 6251 { 6252 for (var key in g.Generators) 6253 { 6254 if (g.Generators[key].ClassName == 'OrgChart2018') 6255 { 6256 LucidImporter.hasUnknownShapes = true; 6257 createOrgChart(key, g.Generators[key], g.Data, graph, lookup); 6258 } 6259 else 6260 { 6261 LucidImporter.hasUnknownShapes = true; 6262 } 6263 } 6264 } 6265 } 6266 else 6267 { 6268 for (var i = 0; i < g.Objects.length; i++) 6269 { 6270 var obj = g.Objects[i]; 6271 blocksMap[obj.id] = obj; 6272 6273 if (obj.Action != null && styleMap[obj.Action.Class] == 'mxCompositeShape') 6274 { 6275 lookup[obj.id] = addCompositeShape(obj, select, graph); 6276 } 6277 else if (obj.IsBlock && obj.Action != null && obj.Action.Properties != null) 6278 { 6279 lookup[obj.id] = createVertex(obj, graph); 6280 } 6281 else if (obj.IsGenerator && obj.GeneratorData && obj.GeneratorData.p) 6282 { 6283 if (obj.GeneratorData.p.ClassName == 'OrgChart2018') 6284 { 6285 LucidImporter.hasUnknownShapes = true; 6286 createOrgChart(obj.GeneratorData.id, obj.GeneratorData.p, obj.GeneratorData.gs, graph, lookup); 6287 } 6288 else 6289 { 6290 LucidImporter.hasUnknownShapes = true; 6291 } 6292 } 6293 6294 queue.push(obj); 6295 } 6296 6297 //Add groups 6298 for (var i = 0; i < g.Objects.length; i++) 6299 { 6300 var obj = g.Objects[i]; 6301 6302 if (obj.IsGroup) 6303 { 6304 var group = createGroup(obj, lookup, edgesGroups, blocksMap); 6305 6306 if (group) 6307 { 6308 lookup[obj.id] = group; 6309 queue.push(obj); 6310 } 6311 } 6312 } 6313 } 6314 6315 //Create groups 6316 if (g.Groups != null) 6317 { 6318 try 6319 { 6320 for (var key in g.Groups) 6321 { 6322 var obj = g.Groups[key]; 6323 obj.id = key; 6324 6325 var group = createGroup(obj, lookup, edgesGroups, blocksMap); 6326 6327 if (group) 6328 { 6329 lookup[obj.id] = group; 6330 queue.push(obj); 6331 } 6332 } 6333 } 6334 catch(e) 6335 { 6336 console.log(e); 6337 } 6338 } 6339 6340 if (g.Lines != null) 6341 { 6342 for (var key in g.Lines) 6343 { 6344 var obj = g.Lines[key]; 6345 obj.id = key; 6346 6347 queue.push(obj); 6348 } 6349 } 6350 6351 // Sorts all cells by ZOrder 6352 queue.sort(function(a, b) 6353 { 6354 a = getAction(a); 6355 b = getAction(b); 6356 6357 var ai = (a.Properties != null) ? a.Properties.ZOrder : a.ZOrder; 6358 var bi = (b.Properties != null) ? b.Properties.ZOrder : b.ZOrder; 6359 6360 return (ai != null && bi != null) ? (ai > bi? 1 : (ai < bi? -1 : 0)) : 0; //ZOrder can be negative 6361 }); 6362 6363 function addLine(obj, p) 6364 { 6365 var src = (p.Endpoint1.Block != null) ? lookup[p.Endpoint1.Block] : null; 6366 var trg = (p.Endpoint2.Block != null) ? lookup[p.Endpoint2.Block] : null; 6367 var e = createEdge(obj, graph, src, trg); 6368 6369 if ((p.Endpoint1 && p.Endpoint1.Line) || (p.Endpoint2 && p.Endpoint2.Line)) 6370 { 6371 console.log('Edge to Edge case'); 6372 LucidImporter.hasUnknownShapes = true; 6373 } 6374 6375 if (src == null && p.Endpoint1 != null) 6376 { 6377 e.geometry.setTerminalPoint(new mxPoint(Math.round(p.Endpoint1.x * scale), 6378 Math.round(p.Endpoint1.y * scale)), true); 6379 } 6380 6381 if (trg == null && p.Endpoint2 != null) 6382 { 6383 e.geometry.setTerminalPoint(new mxPoint(Math.round(p.Endpoint2.x * scale), 6384 Math.round(p.Endpoint2.y * scale)), false); 6385 } 6386 6387 var group = edgesGroups[obj.id]; 6388 6389 function fixPoint(p, px, py) 6390 { 6391 if (p != null && !p.generated) 6392 { 6393 p.x -= px; 6394 p.y -= py; 6395 } 6396 }; 6397 6398 if (group != null) 6399 { 6400 //Correct edge geometry 6401 var geo = e.geometry, px = 0, py = 0, prnt = group; 6402 6403 while (prnt != null && prnt.geometry != null) 6404 { 6405 px += prnt.geometry.x; 6406 py += prnt.geometry.y; 6407 prnt = prnt.parent; 6408 } 6409 6410 fixPoint(geo.sourcePoint, px, py); 6411 fixPoint(geo.targetPoint, px, py); 6412 fixPoint(geo.offset, px, py); 6413 var points = geo.points; 6414 6415 if (points != null) 6416 { 6417 for (var i = 0; i < points.length; i++) 6418 { 6419 fixPoint(points[i], px, py); 6420 } 6421 } 6422 } 6423 6424 select.push(graph.addCell(e, group, null, src, trg)); 6425 }; 6426 6427 // Inserts cells in ZOrder and connects edges via lookup 6428 for (var i = 0; i < queue.length; i++) 6429 { 6430 var obj = queue[i]; 6431 var v = lookup[obj.id]; 6432 6433 if (v != null) 6434 { 6435 if (v.parent == null) 6436 { 6437 if (v.lucidLayerInfo) 6438 { 6439 var layerCell = new mxCell(); 6440 graph.addCell(layerCell, graph.model.root); 6441 6442 layerCell.setVisible(v.lucidLayerInfo.visible); 6443 6444 if (v.lucidLayerInfo.locked) 6445 { 6446 layerCell.setStyle("locked=1;"); 6447 } 6448 6449 layerCell.setValue(v.lucidLayerInfo.name); 6450 delete v.lucidLayerInfo; 6451 graph.addCell(v, layerCell); 6452 } 6453 else 6454 { 6455 select.push(graph.addCell(v)); 6456 } 6457 } 6458 } 6459 else if (obj.IsLine && obj.Action != null && obj.Action.Properties != null) 6460 { 6461 var p = obj.Action.Properties; 6462 addLine(obj, p); 6463 } 6464 else if (obj.StrokeStyle != null) 6465 { 6466 addLine(obj, obj); 6467 } 6468 } 6469 6470 LucidImporter.stylePointsSet.forEach(function(v) 6471 { 6472 v.style = 'points=[' + v.stylePoints.join(',') + '];' + v.style; 6473 delete v.stylePoints; 6474 }); 6475 6476 //Cleanup added properties 6477 try 6478 { 6479 var allCells = graph.getModel().cells; 6480 6481 for (var id in allCells) 6482 { 6483 var c = allCells[id]; 6484 delete c.zOrder; 6485 } 6486 } catch(e){} 6487 6488 if (!noSelection) 6489 graph.setSelectionCells(select); 6490 } 6491 finally 6492 { 6493 graph.getModel().endUpdate(); 6494 } 6495 6496 }; 6497 6498 function createGraph() 6499 { 6500 //TODO Set the graph defaults 6501 var graph = new Graph(); 6502 graph.setExtendParents(false); 6503 graph.setExtendParentsOnAdd(false); 6504 graph.setConstrainChildren(false); 6505 graph.setHtmlLabels(true); 6506 graph.getModel().maintainEdgeParent = false; 6507 return graph; 6508 }; 6509 6510 //Code adopted from vsdx importer 6511 6512 /** 6513 * Holds the NURBS array that is part of the VSDX NURBSTo element, together with some helper functions 6514 */ 6515 function Nurbs(x1, y1, n1x, n1y, x2, y2, n2x, n2y) 6516 { 6517 this.nurbsValues = [1, 3, 0, 0, 6518 (x1 + n1x) * 100, 6519 100 - (1 - (y1 + n1y)) * 100, 6520 0, 1, 6521 (x2 + n2x) * 100, 6522 100 - (1 - (y2 + n2y)) * 100, 6523 0, 1 6524 ]; 6525 } 6526 /** 6527 * @return {number} number of points, not including the last one (which is outside of the nurbs string) 6528 */ 6529 Nurbs.prototype.getSize = function () { 6530 return (((this.nurbsValues.length / 4 | 0)) - 1); 6531 }; 6532 /** 6533 * @return {number} the i-th X coordinate 6534 * @param {number} i 6535 */ 6536 Nurbs.prototype.getX = function (i) { 6537 return Math.round(this.nurbsValues[(i + 1) * 4] * 100.0) / 100.0;; 6538 }; 6539 /** 6540 * @return {number} the i-th Y coordinate 6541 * @param {number} i 6542 */ 6543 Nurbs.prototype.getY = function (i) { 6544 return Math.round(this.nurbsValues[(i + 1) * 4 + 1] * 100.0) / 100.0;; 6545 }; 6546 6547 //A: 0, B: 1, C: 0, D: 1 6548 function NURBSTo(x, y, w, h, px1, py1, n1x, n1y, px2, py2, n2x, n2y) 6549 { 6550 var nurbs = new Nurbs(px1, py1, n1x, n1y, px2, py2, n2x, n2y); 6551 6552 if (nurbs.getSize() >= 2) 6553 { 6554 var x1 = nurbs.getX(0); 6555 var y1 = nurbs.getY(0); 6556 var x2 = nurbs.getX(1); 6557 var y2 = nurbs.getY(1); 6558 y = y * 100.0 / h; 6559 x = x * 100.0 / w; 6560 x = Math.round(x * 100.0) / 100.0; 6561 y = Math.round(y * 100.0) / 100.0; 6562 6563 var cp1 = ([]); 6564 var cp2 = ([]); 6565 var nut = ([]); 6566 var nurbsize = nurbs.getSize(); 6567 6568 for (var i = 0; i < nurbsize - 1; i = i + 3) 6569 { 6570 cp1.push(new mxPoint(nurbs.getX(i), nurbs.getY(i))); 6571 cp2.push(new mxPoint(nurbs.getX(i + 1), nurbs.getY(i + 1))); 6572 6573 if (i < nurbsize - 2) { 6574 nut.push(new mxPoint(nurbs.getX(i + 2), nurbs.getY(i + 2))); 6575 } 6576 else { 6577 nut.push(new mxPoint(x, y)); 6578 } 6579 } 6580 6581 var result = ""; 6582 for (var i = 0; i < cp1.length; i++) { 6583 result += "<curve x1=\"" + cp1[i].x + "\" y1=\"" + cp1[i].y + "\" x2=\"" + cp2[i].x + "\" y2=\"" + cp2[i].y + "\" x3=\"" + nut[i].x + "\" y3=\"" + nut[i].y + "\"/>"; 6584 } 6585 6586 return result; 6587 } 6588 }; 6589 6590 function addStencil(id, obj) 6591 { 6592 try 6593 { 6594 var stencils = []; 6595 var w = obj.BoundingBox.w; 6596 var h = obj.BoundingBox.h; 6597 6598 for (var i = 0; i < obj.Shapes.length; i++) 6599 { 6600 var shape = obj.Shapes[i]; 6601 var fillClr = shape.FillColor; 6602 var strokeClr = shape.StrokeColor; 6603 var lineW = shape.LineWidth; 6604 var points = shape.Points; 6605 var lines = shape.Lines; 6606 var parts = ["<shape strokewidth=\"inherit\"><foreground>"]; 6607 parts.push("<path>"); 6608 var lastP = null; 6609 6610 for (var j = 0; j < lines.length; j++) 6611 { 6612 var line = lines[j]; 6613 6614 if (lastP != line.p1) //Add move to when last point is different from current first poinnt 6615 { 6616 var x = points[line.p1].x, y = points[line.p1].y; 6617 x = x * 100.0 / w; 6618 y = y * 100.0 / h; 6619 x = Math.round(x * 100.0) / 100.0; 6620 y = Math.round(y * 100.0) / 100.0; 6621 parts.push("<move x=\"" + x + "\" y=\"" + y + "\"/>"); 6622 } 6623 6624 if (line.n1 != null) // Curve 6625 { 6626 var curve = NURBSTo(points[line.p2].x, points[line.p2].y, w, h, 6627 points[line.p1].x / w, points[line.p1].y / h, line.n1.x / w, line.n1.y / h, 6628 points[line.p2].x / w, points[line.p2].y / h, line.n2.x / w, line.n2.y / h); 6629 parts.push(curve); 6630 } 6631 else //line 6632 { 6633 var x = points[line.p2].x, y = points[line.p2].y; 6634 x = x * 100.0 / w; 6635 y = y * 100.0 / h; 6636 x = Math.round(x * 100.0) / 100.0; 6637 y = Math.round(y * 100.0) / 100.0; 6638 parts.push("<line x=\"" + x + "\" y=\"" + y + "\"/>"); 6639 } 6640 6641 lastP = line.p2; 6642 } 6643 6644 parts.push("</path>"); 6645 parts.push("<fillstroke/>"); 6646 parts.push("</foreground></shape>"); 6647 stencils.push({ 6648 shapeStencil: "stencil(" + Graph.compress(parts.join('')) + ")", 6649 FillColor: fillClr, 6650 LineColor: strokeClr, 6651 LineWidth: lineW, 6652 }); 6653 } 6654 6655 LucidImporter.stencilsMap[id] = { 6656 text: obj.Text, 6657 w: w, 6658 h: h, 6659 x: obj.BoundingBox.x, 6660 y: obj.BoundingBox.y, 6661 stencils: stencils 6662 }; 6663 } 6664 catch(e) 6665 { 6666 console.log('Stencil parsing error:', e); 6667 } 6668 }; 6669 6670 LucidImporter.importState = function(state, imgSrcRepl, advImpConfig) 6671 { 6672 LucidImporter.stencilsMap = {}; //Reset stencils cache 6673 LucidImporter.imgSrcRepl = imgSrcRepl; //Use LucidImporter object to store the map since it is used deep inside 6674 LucidImporter.advImpConfig = advImpConfig; 6675 LucidImporter.globalProps = {}; 6676 LucidImporter.pageIdsMap = {}; 6677 LucidImporter.hasUnknownShapes = false; 6678 LucidImporter.hasOrgChart = false; 6679 LucidImporter.hasTimeLine = false; 6680 LucidImporter.hasExtImgs = false; 6681 var xml = ['<?xml version=\"1.0\" encoding=\"UTF-8\"?>', '<mxfile type="Lucidchart-Import" version="' + 6682 EditorUi.VERSION + '" host="' + mxUtils.htmlEntities(window.location.hostname) + 6683 '" agent="' + mxUtils.htmlEntities(navigator.appVersion) + 6684 '" modified="' + mxUtils.htmlEntities(new Date().toISOString()) + '">']; 6685 6686 if (advImpConfig && advImpConfig.transparentEdgeLabels) 6687 { 6688 labelStyle = labelStyle.replace('labelBackgroundColor=#ffffff;', 'labelBackgroundColor=none;'); 6689 } 6690 6691 // Extracts and sorts all pages 6692 var pages = []; 6693 6694 function addPages(obj) 6695 { 6696 //Build stencils map 6697 if (obj.Properties) 6698 { 6699 for (var key in obj.Properties) 6700 { 6701 if (key.substr(0, 8) == 'Stencil-') 6702 { 6703 addStencil(key.substr(8), obj.Properties[key]); 6704 } 6705 } 6706 6707 LucidImporter.globalProps = obj.Properties; 6708 } 6709 6710 for (var id in obj.Pages) 6711 { 6712 var pg = obj.Pages[id]; 6713 pg.id = id; 6714 pg.Data = obj.Data; 6715 pages.push(pg); 6716 } 6717 6718 pages.sort(function(a, b) 6719 { 6720 if (a.Properties.Order < b.Properties.Order) 6721 { 6722 return -1; 6723 } 6724 else if (a.Properties.Order > b.Properties.Order) 6725 { 6726 return 1; 6727 } 6728 else 6729 { 6730 return 0; 6731 } 6732 }); 6733 6734 for (var i = 0; i < pages.length; i++) 6735 { 6736 LucidImporter.pageIdsMap[pages[i].id] = i; 6737 } 6738 }; 6739 6740 if (state.state != null && urlParams['dev'] == '1' && window.console != null) 6741 { 6742 console.log(JSON.stringify(JSON.parse(state.state), null, 2)); 6743 } 6744 6745 if (state.state != null) 6746 { 6747 addPages(JSON.parse(state.state)); 6748 } 6749 else if (state.Page == null && state.Pages != null) 6750 { 6751 addPages(state); 6752 } 6753 else 6754 { 6755 pages.push(state); 6756 } 6757 6758 var graph = createGraph(); 6759 var codec = new mxCodec(); 6760 6761 for (var i = 0; i < pages.length; i++) 6762 { 6763 xml.push('<diagram'); 6764 6765 if (pages[i].Properties != null && pages[i].Properties.Title != null) 6766 { 6767 xml.push(' name="' + mxUtils.htmlEntities(pages[i].Properties.Title) + '"'); 6768 } 6769 6770 xml.push(' id="' + i + '"'); //Add page ids in case it is needed in aspects 6771 importLucidPage(graph, pages[i], true); 6772 var node = codec.encode(graph.getModel()); 6773 6774 if (pages[i].Properties != null) 6775 { 6776 if (pages[i].Properties.FillColor) 6777 { 6778 node.setAttribute('background', getColor(pages[i].Properties.FillColor)); 6779 } 6780 6781 if (pages[i].Properties.InfiniteCanvas) 6782 { 6783 node.setAttribute('page', 0); 6784 } 6785 else if (pages[i].Properties.Size != null) 6786 { 6787 node.setAttribute('page', 1); 6788 node.setAttribute('pageWidth', pages[i].Properties.Size.w * scale); 6789 node.setAttribute('pageHeight', pages[i].Properties.Size.h * scale); 6790 } 6791 6792 if (pages[i].Properties.GridSpacing != null) 6793 { 6794 node.setAttribute('grid', 1); 6795 node.setAttribute('gridSize', pages[i].Properties.GridSpacing * scale); 6796 } 6797 } 6798 6799 if (LucidImporter.hasMath) 6800 { 6801 node.setAttribute('math', 1); 6802 } 6803 6804 graph.getModel().clear(); 6805 6806 xml.push('>' + Graph.compress(mxUtils.getXml(node)) + '</diagram>'); 6807 } 6808 6809 xml.push('</mxfile>'); 6810 LucidImporter.imgSrcRepl = null; //Reset the map so it doesn't affect next calls 6811 6812 return xml.join(''); 6813 }; 6814 6815 function addRouterEdge(x, y, edge, select, graph, cells, v, cell) 6816 { 6817 var dummy = new mxCell('', new mxGeometry(x, y, 0, 0), 'strokeColor=none;fillColor=none;'); 6818 dummy.vertex = true; 6819 v.insert(dummy); 6820 cells = [dummy]; 6821 6822 var e = edge.clone(); 6823 cell.insertEdge(e, false); 6824 dummy.insertEdge(e, true); 6825 cells.push(e); 6826 select.push(graph.addCell(e, null, null, null, null)); 6827 }; 6828 6829 function addFloatingEdge(x1, y1, x2, y2, edge, select, graph, cells, v) 6830 { 6831 var dummy1 = new mxCell('', new mxGeometry(x1, y1, 0, 0), 'strokeColor=none;fillColor=none;'); 6832 dummy1.vertex = true; 6833 v.insert(dummy1); 6834 cells = [dummy1]; 6835 6836 var dummy2 = new mxCell('', new mxGeometry(x2, y2, 0, 0), 'strokeColor=none;fillColor=none;'); 6837 dummy2.vertex = true; 6838 v.insert(dummy2); 6839 cells = [dummy2]; 6840 6841 var e = edge.clone(); 6842 dummy1.insertEdge(e, true); 6843 dummy2.insertEdge(e, false); 6844 cells.push(e); 6845 select.push(graph.addCell(e, null, null, null, null)); 6846 }; 6847 6848 function addGCP2ServiceCard(icon, w, h, v, p, a) 6849 { 6850 v.style = 'rounded=1;absoluteArcSize=1;fillColor=#ffffff;arcSize=2;strokeColor=#dddddd;'; 6851 v.style += addAllStyles(v.style, p, a, v); 6852 6853 var label = convertText(p); 6854 v.vertex = true; 6855 var icon1 = new mxCell(label, new mxGeometry(0, 0.5, 24, 24), 6856 'dashed=0;connectable=0;html=1;strokeColor=none;' + mxConstants.STYLE_SHAPE + '=mxgraph.gcp2.' + icon + ';part=1;shadow=0;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacingLeft=5;'); 6857 icon1.style += addAllStyles(icon1.style, p, a, icon1, isLastLblHTML); 6858 6859 icon1.geometry.relative = true; 6860 icon1.geometry.offset = new mxPoint(5, -12); 6861 icon1.vertex = true; 6862 v.insert(icon1); 6863 }; 6864 6865 function addGCP2UserDeviceCard(icon, scaleX, scaleY, w, h, v, p, a) 6866 { 6867 if (icon != 'transparent') 6868 { 6869 var s = mxConstants.STYLE_SHAPE + '=mxgraph.gcp2.'; 6870 } 6871 else 6872 { 6873 var s = mxConstants.STYLE_SHAPE + '='; 6874 } 6875 6876 v.style = 'rounded=1;absoluteArcSize=1;arcSize=2;verticalAlign=bottom;fillColor=#ffffff;strokeColor=#dddddd;whiteSpace=wrap;'; 6877 v.style += addAllStyles(v.style, p, a, v); 6878 6879 v.value = convertText(p); 6880 v.vertex = true; 6881 var icon1 = new mxCell(null, new mxGeometry(0.5, 0, w * 0.7 * scaleX, w * 0.7 * scaleY), 6882 s + icon + ';part=1;dashed=0;connectable=0;html=1;strokeColor=none;shadow=0;'); 6883 6884 icon1.geometry.relative = true; 6885 icon1.geometry.offset = new mxPoint(- scaleX * w * 0.35, 10 + (1 - scaleY) * w * 0.35); 6886 icon1.vertex = true; 6887 icon1.style += addAllStyles(icon1.style, p, a, icon1, isLastLblHTML); 6888 v.insert(icon1); 6889 }; 6890 6891 function addGCP2ExpandedProductCard(icon, scaleX, scaleY, w, h, v, p, a) 6892 { 6893 if (icon != 'transparent') 6894 { 6895 var s = mxConstants.STYLE_SHAPE + '=mxgraph.gcp.'; 6896 } 6897 else 6898 { 6899 var s = mxConstants.STYLE_SHAPE + '='; 6900 } 6901 6902 v.style = 'rounded=1;absoluteArcSize=1;arcSize=2;verticalAlign=bottom;fillColor=#ffffff;strokeColor=#dddddd;whiteSpace=wrap;'; 6903 v.style += addAllStyles(v.style, p, a, v); 6904 6905 v.value = convertText(p); 6906 v.vertex = true; 6907 var icon1 = new mxCell(null, new mxGeometry(0.5, 0, w * 0.7 * scaleX, w * 0.7 * scaleY), 6908 s + icon + ';part=1;dashed=0;connectable=0;html=1;strokeColor=none;shadow=0;'); 6909 6910 icon1.geometry.relative = true; 6911 icon1.geometry.offset = new mxPoint(- scaleX * w * 0.35, 10 + (1 - scaleY) * w * 0.35); 6912 icon1.vertex = true; 6913 icon1.style += addAllStyles(icon1.style, p, a, icon1, isLastLblHTML); 6914 v.insert(icon1); 6915 }; 6916 6917 function hasStyle(style, key) 6918 { 6919 if (style != null && key != null) 6920 { 6921 if (key == mxConstants.STYLE_ALIGN + 'Global') 6922 { 6923 key = mxConstants.STYLE_ALIGN; 6924 } 6925 6926 if (style.includes(';' + key + '=')) 6927 { 6928 return true; 6929 } 6930 6931 if (style.substring(0,key.length + 1) == (key + '=')) 6932 { 6933 return true; 6934 } 6935 } 6936 6937 return false; 6938 } 6939 6940 function getDarkerClr(clr, perc) 6941 { 6942 function modComp(comp) 6943 { 6944 var v = Math.round(parseInt('0x' + comp) * perc).toString(16); 6945 return v.length == 1? '0' + v : v; 6946 } 6947 6948 return '#' + modComp(clr.substr(1, 2)) + 6949 modComp(clr.substr(3, 2)) + 6950 modComp(clr.substr(5, 2)); 6951 }; 6952 6953 //composite shapes 6954 function addCompositeShape(obj, select, graph) 6955 { 6956 var a = getAction(obj); 6957 var p = a.Properties; 6958 var b = p.BoundingBox; 6959 6960 var w = Math.round(b.w * scale); 6961 var h = Math.round(b.h * scale); 6962 var x = Math.round(b.x * scale + dx); 6963 var y = Math.round(b.y * scale + dy); 6964 6965 if (obj.Class != null && 6966 (obj.Class === "GCPInputDatabase" || 6967 obj.Class === "GCPInputRecord" || 6968 obj.Class === "GCPInputPayment" || 6969 obj.Class === "GCPInputGateway" || 6970 obj.Class === "GCPInputLocalCompute" || 6971 obj.Class === "GCPInputBeacon" || 6972 obj.Class === "GCPInputStorage" || 6973 obj.Class === "GCPInputList" || 6974 obj.Class === "GCPInputStream" || 6975 obj.Class === "GCPInputMobileDevices" || 6976 obj.Class === "GCPInputCircuitBoard" || 6977 obj.Class === "GCPInputLive" || 6978 obj.Class === "GCPInputUsers" || 6979 obj.Class === "GCPInputLaptop" || 6980 obj.Class === "GCPInputApplication" || 6981 obj.Class === "GCPInputLightbulb" || 6982 obj.Class === "GCPInputGame" || 6983 obj.Class === "GCPInputDesktop" || 6984 obj.Class === "GCPInputDesktopAndMobile" || 6985 obj.Class === "GCPInputWebcam" || 6986 obj.Class === "GCPInputSpeaker" || 6987 obj.Class === "GCPInputRetail" || 6988 obj.Class === "GCPInputReport" || 6989 obj.Class === "GCPInputPhone" || 6990 obj.Class === "GCPInputBlank")) 6991 { 6992 h = h + 20; 6993 } 6994 6995 v = new mxCell('', new mxGeometry(x, y, w, h), vertexStyle); 6996 v.vertex = true; 6997 6998 //Store z-order to use it in groups 6999 v.zOrder = p.ZOrder; 7000 7001 var cls = (obj.Class != null) ? obj.Class : (a != null) ? a.Class : null; 7002 7003 //composite shapes 7004 switch (cls) 7005 { 7006 case 'BraceNoteBlock' : 7007 case 'UI2BraceNoteBlock' : 7008 7009 var isRightBrace = false; 7010 7011 if (p.BraceDirection != null) 7012 { 7013 if (p.BraceDirection == 'Right') 7014 { 7015 isRightBrace = true; 7016 } 7017 } 7018 7019 var brace = null; 7020 var label = null; 7021 var lbl = convertText(p); 7022 //TODO Handle rotation of label correctly in all cases 7023 var lblSize = p.Rotation? mxUtils.getSizeForString(lbl.replace(/\n/g, '<br>'), null, null, Math.abs(w - h * 0.125)) : {width: 0, height: 0}; 7024 7025 if (isRightBrace) 7026 { 7027 brace = new mxCell('', new mxGeometry(w - h * 0.125, 0, h * 0.125, h), 'shape=curlyBracket;rounded=1;'); 7028 label = new mxCell('', new mxGeometry(lblSize.height, -2 * lblSize.width, w - h * 0.125, h), 'strokeColor=none;fillColor=none;'); 7029 } 7030 else 7031 { 7032 brace = new mxCell('', new mxGeometry(0, 0, h * 0.125, h), 'shape=curlyBracket;rounded=1;flipH=1;'); 7033 label = new mxCell('', new mxGeometry(h * 0.125 - lblSize.height, lblSize.width, w - h * 0.125, h), 'strokeColor=none;fillColor=none;'); 7034 } 7035 7036 v.style = "strokeColor=none;fillColor=none;" 7037 v.style += addAllStyles(v.style, p, a, v); 7038 7039 brace.vertex = true; 7040 v.insert(brace); 7041 7042 brace.style += 7043 addAllStyles(brace.style, p, a, brace); 7044 7045 label.vertex = true; 7046 label.value = lbl; 7047 v.insert(label); 7048 7049 label.style += 7050 addAllStyles(label.style, p, a, label, isLastLblHTML); 7051 break; 7052 case 'BPMNAdvancedPoolBlockRotated' : 7053 case 'UMLMultiLanePoolRotatedBlock' : 7054 case 'UMLMultiLanePoolBlock' : 7055 case 'BPMNAdvancedPoolBlock' : 7056 case 'AdvancedSwimLaneBlockRotated' : 7057 case 'AdvancedSwimLaneBlock' : 7058 case 'UMLSwimLaneBlockV2': 7059 //Lucid changed swimlanes format 7060 var mainTxtFld = 'MainText', laneFld = null, headerFillFld = 'HeaderFill_', bodyFillFld = 'BodyFill_'; 7061 var mainTxtHeight = 25, laneTxtHeight = 25; 7062 var lanesNum = 0; 7063 7064 if (p.Lanes != null) 7065 { 7066 lanesNum = p.Lanes.length; 7067 } 7068 else if (p.PrimaryLane != null) 7069 { 7070 lanesNum = p.PrimaryLane.length; 7071 7072 //In this format, boundingBox is not accurate! 7073 w = 0, h = 0; 7074 7075 for (var i = 0; i < lanesNum; i++) 7076 { 7077 w += p.PrimaryLane[i]; 7078 } 7079 7080 for (var i = 0; i < p.SecondaryLane.length; i++) 7081 { 7082 h += p.SecondaryLane[i]; 7083 } 7084 7085 function fixTitleHeight(val) 7086 { 7087 if (!val) 7088 { 7089 return 0; 7090 } 7091 else if (val < 32) 7092 { 7093 val = 32; 7094 } 7095 else if (val > 208) 7096 { 7097 val = 208; 7098 } 7099 7100 return val * scale; 7101 }; 7102 7103 mainTxtHeight = fixTitleHeight(p.PrimaryPoolTitleHeight); 7104 laneTxtHeight = fixTitleHeight(p.PrimaryLaneTitleHeight); 7105 7106 w = w * scale; 7107 h = h * scale + mainTxtHeight + laneTxtHeight; 7108 v.geometry.width = w; 7109 v.geometry.height = h; 7110 7111 mainTxtFld = 'poolPrimaryTitleKey'; 7112 headerFillFld = 'PrimaryLaneHeaderFill_'; 7113 bodyFillFld = 'CellFill_0,'; 7114 laneFld = p.PrimaryLaneTextAreaIds; 7115 7116 if (laneFld == null) 7117 { 7118 laneFld = []; 7119 7120 for (var i = 0; i < lanesNum; i++) 7121 { 7122 laneFld.push('Primary_' + i); 7123 } 7124 } 7125 } 7126 7127 if (p.IsPrimaryLaneVertical == false) 7128 { 7129 p['Rotation'] = -1.5707963267948966; //-90 7130 var origX = v.geometry.x; 7131 var origY = v.geometry.y; 7132 } 7133 7134 var rotatedSL = p['Rotation'] != 0; 7135 var isPool = cls.indexOf('Pool') > 0; 7136 var isBPMN = cls.indexOf('BPMN') == 0; 7137 var hasTxt = p[mainTxtFld] != null; 7138 7139 v.style = (isPool? 'swimlane;startSize=' + mainTxtHeight + ';' : 'fillColor=none;strokeColor=none;pointerEvents=0;fontStyle=0;') + 7140 'html=1;whiteSpace=wrap;container=1;collapsible=0;childLayout=stackLayout;' + 7141 'resizeParent=1;dropTarget=0;' + (rotatedSL? 'horizontalStack=0;' : ''); 7142 v.style += addAllStyles(v.style, p, a, v); 7143 7144 if (hasTxt) 7145 { 7146 v.value = convertText(p[mainTxtFld]); 7147 v.style += (isLastLblHTML? 'overflow=block;blockSpacing=1;fontSize=' + defaultFontSize + ';' + 7148 gFontFamilyStyle 7149 : 7150 getFontSize(p[mainTxtFld]) + 7151 getFontColor(p[mainTxtFld]) + 7152 getFontFamily(p[mainTxtFld]) + 7153 getFontStyle(p[mainTxtFld]) + 7154 getTextAlignment(p[mainTxtFld], v) + 7155 getTextLeftSpacing(p[mainTxtFld]) + 7156 getTextRightSpacing(p[mainTxtFld]) + 7157 getTextTopSpacing(p[mainTxtFld]) + 7158 getTextBottomSpacing(p[mainTxtFld]) 7159 ) + 7160 getTextGlobalSpacing(p[mainTxtFld]) + 7161 getTextVerticalAlignment(p[mainTxtFld]); 7162 } 7163 7164 var totalOffset = 0; //relative 7165 var lane = new Array(); 7166 7167 var laneStyle = 'swimlane;html=1;whiteSpace=wrap;container=1;connectable=0;collapsible=0;fontStyle=0;startSize=' + laneTxtHeight + ';dropTarget=0;rounded=0;' + 7168 (rotatedSL? 'horizontal=0;': '') + 7169 (isBPMN? 'swimlaneLine=0;fillColor=none;' : ''); 7170 p['Rotation'] = 0; //Override rotation such that it doesn't mess with our coordinates 7171 7172 for (var j = 0; j < lanesNum; j++) 7173 { 7174 if (laneFld == null) 7175 { 7176 var currOffset = parseFloat(p.Lanes[j].p); 7177 var i = parseInt(p.Lanes[j].tid) || j; 7178 var curLane = 'Lane_' + i; 7179 } 7180 else 7181 { 7182 var currOffset = (p.PrimaryLane[j] * scale)/ w; 7183 var i = j; 7184 var curLane = laneFld[j]; 7185 } 7186 7187 var childX = w * totalOffset; 7188 var childY = isPool? mainTxtHeight : 0; 7189 lane.push(new mxCell('', rotatedSL? new mxGeometry(childY, childX, h - childY, w * currOffset) : 7190 new mxGeometry(childX, childY, w * currOffset, h - childY), laneStyle)); 7191 7192 lane[j].vertex = true; 7193 v.insert(lane[j]); 7194 lane[j].value = convertText(p[curLane]); 7195 lane[j].style += 7196 addAllStyles(lane[j].style, p, a, lane[j], isLastLblHTML) + 7197 (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 7198 getFontSize(p[curLane]) + 7199 getFontColor(p[curLane]) + 7200 getFontStyle(p[curLane]) + 7201 getTextAlignment(p[curLane], lane[j]) + 7202 getTextLeftSpacing(p[curLane]) + 7203 getTextRightSpacing(p[curLane]) + 7204 getTextTopSpacing(p[curLane]) + 7205 getTextBottomSpacing(p[curLane]) 7206 ) + 7207 getTextGlobalSpacing(p[curLane]) + 7208 getTextVerticalAlignment(p[curLane]) + 7209 getHeaderColor(p[headerFillFld + i]) + 7210 getLaneColor(p[bodyFillFld + i]); 7211 7212 totalOffset += currOffset; 7213 } 7214 7215 if (origX != null) 7216 { 7217 v.geometry.x = origX; 7218 v.geometry.y = origY; 7219 } 7220 break; 7221 case 'UMLMultidimensionalSwimlane' : 7222 var rowsNum = 0; 7223 var colsNum = 0; 7224 var rowFld = null, colFld = null; 7225 7226 if (p.Rows != null && p.Columns != null) 7227 { 7228 rowsNum = p.Rows.length; 7229 colsNum = p.Columns.length; 7230 var colStartSize = p.TitleHeight * scale || 25; 7231 var rowStartSize = p.TitleWidth * scale || 25; 7232 } 7233 else if (p.PrimaryLane != null && p.SecondaryLane != null) 7234 { 7235 rowsNum = p.SecondaryLane.length; 7236 colsNum = p.PrimaryLane.length; 7237 var rowStartSize = p.SecondaryLaneTitleHeight * scale || 25; 7238 var colStartSize = p.PrimaryLaneTitleHeight * scale || 25; 7239 7240 //In this format, boundingBox is not accurate! 7241 w = 0, h = 0; 7242 7243 for (var i = 0; i < rowsNum; i++) 7244 { 7245 h += p.SecondaryLane[i]; 7246 } 7247 7248 for (var i = 0; i < colsNum; i++) 7249 { 7250 w += p.PrimaryLane[i]; 7251 } 7252 7253 w = w * scale + rowStartSize; 7254 h = h * scale + colStartSize; 7255 v.geometry.width = w; 7256 v.geometry.height = h; 7257 7258 rowFld = p.SecondaryLaneTextAreaIds; 7259 colFld = p.PrimaryLaneTextAreaIds; 7260 } 7261 7262 v.style = 'group;'; 7263 var contStyle = 'fillColor=none;strokeColor=none;html=1;whiteSpace=wrap;container=1;collapsible=0;childLayout=stackLayout;' + 7264 'resizeParent=1;dropTarget=0;'; 7265 var rows = new mxCell('', new mxGeometry(0, colStartSize, w, h - colStartSize), contStyle + 'horizontalStack=0;'); 7266 rows.vertex = true; 7267 var cols = new mxCell('', new mxGeometry(rowStartSize, 0, w - rowStartSize, h), contStyle); 7268 cols.vertex = true; 7269 7270 v.insert(rows); 7271 v.insert(cols); 7272 var y = 0; 7273 7274 var rowStyle = 'swimlane;html=1;whiteSpace=wrap;container=1;connectable=0;collapsible=0;dropTarget=0;horizontal=0;fontStyle=0;startSize=' + rowStartSize + ';'; 7275 7276 for (var j = 0; j < rowsNum; j++) 7277 { 7278 if (rowFld == null) 7279 { 7280 var rh = parseInt(p.Rows[j].height) * scale; 7281 var i = parseInt(p.Rows[j].id) || j; 7282 var curRow = 'Row_' + i; 7283 } 7284 else 7285 { 7286 var rh = p.SecondaryLane[j] * scale; 7287 var curRow = rowFld[j]; 7288 } 7289 7290 var r = new mxCell('', new mxGeometry(0, y, w, rh), rowStyle); 7291 y += rh; 7292 r.vertex = true; 7293 rows.insert(r); 7294 r.value = convertText(p[curRow]); 7295 r.style += 7296 addAllStyles(r.style, p, a, r, isLastLblHTML) + 7297 (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 7298 getFontSize(p[curRow]) + 7299 getFontColor(p[curRow]) + 7300 getFontStyle(p[curRow]) + 7301 getTextAlignment(p[curRow], r) + 7302 getTextLeftSpacing(p[curRow]) + 7303 getTextRightSpacing(p[curRow]) + 7304 getTextTopSpacing(p[curRow]) + 7305 getTextBottomSpacing(p[curRow]) 7306 ) + 7307 getTextGlobalSpacing(p[curRow]) + 7308 getTextVerticalAlignment(p[curRow]); 7309 } 7310 7311 var colStyle = 'swimlane;html=1;whiteSpace=wrap;container=1;connectable=0;collapsible=0;dropTarget=0;fontStyle=0;startSize=' + colStartSize + ';'; 7312 var x = 0; 7313 7314 for (var j = 0; j < colsNum; j++) 7315 { 7316 if (colFld == null) 7317 { 7318 var cw = parseInt(p.Columns[j].width) * scale; 7319 var i = parseInt(p.Columns[j].id) || j; 7320 var curCol = 'Column_' + i; 7321 } 7322 else 7323 { 7324 var cw = p.PrimaryLane[j] * scale; 7325 var curCol = colFld[j]; 7326 } 7327 7328 var c = new mxCell('', new mxGeometry(x, 0, cw, h), colStyle); 7329 x += cw; 7330 c.vertex = true; 7331 cols.insert(c); 7332 c.value = convertText(p[curCol]); 7333 c.style += 7334 addAllStyles(c.style, p, a, c, isLastLblHTML) + 7335 (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 7336 getFontSize(p[curCol]) + 7337 getFontColor(p[curCol]) + 7338 getFontStyle(p[curCol]) + 7339 getTextAlignment(p[curCol], c) + 7340 getTextLeftSpacing(p[curCol]) + 7341 getTextRightSpacing(p[curCol]) + 7342 getTextTopSpacing(p[curCol]) + 7343 getTextBottomSpacing(p[curCol]) 7344 ) + 7345 getTextGlobalSpacing(p[curCol]) + 7346 getTextVerticalAlignment(p[curCol]); 7347 } 7348 break; 7349 case 'UMLStateBlock' : 7350 if (p.Composite == 0) 7351 { 7352 v.style = 'rounded=1;arcSize=20'; 7353 v.value = convertText(p.State, true); 7354 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 7355 } 7356 else 7357 { 7358 v.style = 'swimlane;startSize=25;html=1;whiteSpace=wrap;container=1;collapsible=0;childLayout=stackLayout;' + 7359 'resizeParent=1;dropTarget=0;rounded=1;arcSize=20;fontStyle=0;'; 7360 v.value = convertText(p.State, true); 7361 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 7362 v.style += getFillColor(p, a).replace('fillColor', 'swimlaneFillColor'); 7363 7364 var content = new mxCell('', new mxGeometry(0, 25, w, h - 25), 'rounded=1;arcSize=20;strokeColor=none;fillColor=none'); 7365 content.value = convertText(p.Action, true); 7366 content.style += addAllStyles(content.style, p, a, content, isLastLblHTML); 7367 content.vertex = true; 7368 v.insert(content); 7369 } 7370 break; 7371 case 'GSDFDProcessBlock' : 7372 var startSize = Math.round(p.nameHeight * scale); 7373 v.style = 'shape=swimlane;html=1;rounded=1;arcSize=10;collapsible=0;fontStyle=0;startSize=' + startSize; 7374 v.value = convertText(p.Number, true); 7375 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 7376 v.style += getFillColor(p, a).replace('fillColor', 'swimlaneFillColor'); 7377 7378 var content = new mxCell('', new mxGeometry(0, startSize, w, h - startSize), 'rounded=1;arcSize=10;strokeColor=none;fillColor=none'); 7379 content.value = convertText(p.Text, true); 7380 content.style += addAllStyles(content.style, p, a, content, isLastLblHTML); 7381 content.vertex = true; 7382 v.insert(content); 7383 break; 7384 case 'AndroidDevice' : 7385 if (p.AndroidDeviceName != null) 7386 { 7387 var rotation = getRotation(p, a, v); 7388 v.style = "fillColor=#000000;strokeColor=#000000;"; 7389 var background = null; 7390 var keyboard = null; 7391 var statusBar = null; 7392 7393 if (p.AndroidDeviceName == 'Tablet' || p.AndroidDeviceName == 'Mini Tablet' || (p.AndroidDeviceName == 'custom' && p.CustomDeviceType == 'Tablet')) 7394 { 7395 v.style += "shape=mxgraph.android.tab2;" 7396 background = new mxCell('', new mxGeometry(0.112, 0.077, w * 0.77, h * 0.85), rotation); 7397 7398 if (p.KeyboardShown) 7399 { 7400 keyboard = new mxCell('', new mxGeometry(0.112, 0.727, w * 0.77, h * 0.2), 'shape=mxgraph.android.keyboard;' + rotation); 7401 } 7402 7403 if (!p.FullScreen) 7404 { 7405 statusBar = new mxCell('', new mxGeometry(0.112, 0.077, w * 0.77, h * 0.03), 'shape=mxgraph.android.statusBar;strokeColor=#33b5e5;fillColor=#000000;fontColor=#33b5e5;fontSize=' + h * 0.015 + ';' + rotation); 7406 } 7407 } 7408 else if (p.AndroidDeviceName == 'Large Phone' || p.AndroidDeviceName == 'Phone' || (p.AndroidDeviceName == 'custom' && p.CustomDeviceType == 'Phone')) 7409 { 7410 v.style += "shape=mxgraph.android.phone2;" 7411 background = new mxCell('', new mxGeometry(0.04, 0.092, w * 0.92, h * 0.816), rotation); 7412 7413 if (p.KeyboardShown) 7414 { 7415 keyboard = new mxCell('', new mxGeometry(0.04, 0.708, w * 0.92, h * 0.2), 'shape=mxgraph.android.keyboard;' + rotation); 7416 } 7417 7418 if (!p.FullScreen) 7419 { 7420 statusBar = new mxCell('', new mxGeometry(0.04, 0.092, w * 0.92, h * 0.03), 'shape=mxgraph.android.statusBar;strokeColor=#33b5e5;fillColor=#000000;fontColor=#33b5e5;fontSize=' + h * 0.015 + ';' + rotation); 7421 } 7422 } 7423 7424 background.vertex = true; 7425 background.geometry.relative = true; 7426 v.insert(background); 7427 7428 if (p.Scheme == "Dark") 7429 { 7430 background.style += "fillColor=#111111;" 7431 } 7432 else if (p.Scheme == "Light") 7433 { 7434 background.style += "fillColor=#ffffff;" 7435 } 7436 7437 if (keyboard != null) 7438 { 7439 keyboard.vertex = true; 7440 keyboard.geometry.relative = true; 7441 v.insert(keyboard); 7442 } 7443 7444 if (statusBar != null) 7445 { 7446 statusBar.vertex = true; 7447 statusBar.geometry.relative = true; 7448 v.insert(statusBar); 7449 } 7450 } 7451 7452 v.style += addAllStyles(v.style, p, a, v); 7453 break; 7454 7455 case 'AndroidAlertDialog' : 7456 var dialog = new mxCell('', new mxGeometry(0, 0, w, 30), 'strokeColor=none;fillColor=none;spacingLeft=9;'); 7457 dialog.vertex = true; 7458 v.insert(dialog); 7459 var line = new mxCell('', new mxGeometry(0, 25, w, 10), 'shape=line;strokeColor=#33B5E5;'); 7460 line.vertex = true; 7461 v.insert(line); 7462 var dialogText = new mxCell('', new mxGeometry(0, 30, w, h - 30), 'strokeColor=none;fillColor=none;verticalAlign=top;'); 7463 dialogText.vertex = true; 7464 v.insert(dialogText); 7465 var cancelButton = new mxCell('', new mxGeometry(0, h - 25, w * 0.5, 25), 'fillColor=none;'); 7466 cancelButton.vertex = true; 7467 v.insert(cancelButton); 7468 var okButton = new mxCell('', new mxGeometry(w * 0.5, h - 25, w * 0.5, 25), 'fillColor=none;'); 7469 okButton.vertex = true; 7470 v.insert(okButton); 7471 dialog.value = convertText(p.DialogTitle); 7472 dialog.style += getLabelStyle(p.DialogTitle, isLastLblHTML); 7473 dialogText.value = convertText(p.DialogText); 7474 dialogText.style += getLabelStyle(p.DialogText, isLastLblHTML); 7475 cancelButton.value = convertText(p.Button_0); 7476 cancelButton.style += getLabelStyle(p.Button_0, isLastLblHTML); 7477 okButton.value = convertText(p.Button_1); 7478 okButton.style += getLabelStyle(p.Button_1, isLastLblHTML); 7479 7480 if (p.Scheme == 'Dark') 7481 { 7482 v.style += 'strokeColor=#353535;fillColor=#282828;shadow=1;'; 7483 cancelButton.style += 'strokeColor=#353535;'; 7484 okButton.style += 'strokeColor=#353535;'; 7485 } 7486 else 7487 { 7488 v.style += 'strokeColor=none;fillColor=#ffffff;shadow=1;'; 7489 cancelButton.style += 'strokeColor=#E2E2E2;'; 7490 okButton.style += 'strokeColor=#E2E2E2;'; 7491 } 7492 7493 v.style += addAllStyles(v.style, p, a, v); 7494 break; 7495 7496 case 'AndroidDateDialog' : 7497 case 'AndroidTimeDialog' : 7498 var dialog = new mxCell('', new mxGeometry(0, 0, w, 30), 'strokeColor=none;fillColor=none;spacingLeft=9;'); 7499 dialog.vertex = true; 7500 v.insert(dialog); 7501 dialog.value = convertText(p.DialogTitle); 7502 dialog.style += getLabelStyle(p.DialogTitle, isLastLblHTML); 7503 var line = new mxCell('', new mxGeometry(0, 25, w, 10), 'shape=line;strokeColor=#33B5E5;'); 7504 line.vertex = true; 7505 v.insert(line); 7506 var cancelButton = new mxCell('', new mxGeometry(0, h - 25, w * 0.5, 25), 'fillColor=none;'); 7507 cancelButton.vertex = true; 7508 v.insert(cancelButton); 7509 cancelButton.value = convertText(p.Button_0); 7510 cancelButton.style += getLabelStyle(p.Button_0, isLastLblHTML); 7511 var okButton = new mxCell('', new mxGeometry(w * 0.5, h - 25, w * 0.5, 25), 'fillColor=none;'); 7512 okButton.vertex = true; 7513 v.insert(okButton); 7514 okButton.value = convertText(p.Button_1); 7515 okButton.style += getLabelStyle(p.Button_1, isLastLblHTML); 7516 7517 var triangle1 = new mxCell('', new mxGeometry(w * 0.5 - 4, 41, 8, 4), 'shape=triangle;direction=north;'); 7518 triangle1.vertex = true; 7519 v.insert(triangle1); 7520 var triangle2 = new mxCell('', new mxGeometry(w * 0.25 - 4, 41, 8, 4), 'shape=triangle;direction=north;'); 7521 triangle2.vertex = true; 7522 v.insert(triangle2); 7523 var triangle3 = new mxCell('', new mxGeometry(w * 0.75 - 4, 41, 8, 4), 'shape=triangle;direction=north;'); 7524 triangle3.vertex = true; 7525 v.insert(triangle3); 7526 7527 var prevDate1 = new mxCell('', new mxGeometry(w * 0.375, 50, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7528 prevDate1.vertex = true; 7529 v.insert(prevDate1); 7530 prevDate1.value = convertText(p.Label_1); 7531 prevDate1.style += getLabelStyle(p.Label_1, isLastLblHTML); 7532 var prevDate2 = new mxCell('', new mxGeometry(w * 0.125, 50, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7533 prevDate2.vertex = true; 7534 v.insert(prevDate2); 7535 prevDate2.value = convertText(p.Label_0); 7536 prevDate2.style += getLabelStyle(p.Label_0, isLastLblHTML); 7537 7538 var prevDate3 = null; 7539 7540 if (obj.Class == 'AndroidDateDialog') 7541 { 7542 prevDate3 = new mxCell('', new mxGeometry(w * 0.625, 50, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7543 prevDate3.vertex = true; 7544 v.insert(prevDate3); 7545 prevDate3.value = convertText(p.Label_2); 7546 prevDate3.style += getLabelStyle(p.Label_2, isLastLblHTML); 7547 } 7548 7549 var line1 = new mxCell('', new mxGeometry(w * 0.43, 60, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;'); 7550 line1.vertex = true; 7551 v.insert(line1); 7552 var line2 = new mxCell('', new mxGeometry(w * 0.18, 60, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;'); 7553 line2.vertex = true; 7554 v.insert(line2); 7555 var line3 = new mxCell('', new mxGeometry(w * 0.68, 60, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;'); 7556 line3.vertex = true; 7557 v.insert(line3); 7558 7559 var date1 = new mxCell('', new mxGeometry(w * 0.375, 65, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7560 date1.vertex = true; 7561 v.insert(date1); 7562 date1.value = convertText(p.Label_4); 7563 date1.style += getLabelStyle(p.Label_4, isLastLblHTML); 7564 7565 var sep = null; 7566 7567 if (obj.Class == 'AndroidTimeDialog') 7568 { 7569 sep = new mxCell('', new mxGeometry(w * 0.3, 65, w * 0.1, 15), 'strokeColor=none;fillColor=none;'); 7570 sep.vertex = true; 7571 v.insert(sep); 7572 sep.value = convertText(p.Label_Colon); 7573 sep.style += getLabelStyle(p.Label_Colon, isLastLblHTML); 7574 } 7575 7576 var date2 = new mxCell('', new mxGeometry(w * 0.125, 65, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7577 date2.vertex = true; 7578 v.insert(date2); 7579 date2.value = convertText(p.Label_3); 7580 date2.style += getLabelStyle(p.Label_3, isLastLblHTML); 7581 var date3 = new mxCell('', new mxGeometry(w * 0.625, 65, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7582 date3.vertex = true; 7583 v.insert(date3); 7584 date3.value = convertText(p.Label_5); 7585 date3.style += getLabelStyle(p.Label_5, isLastLblHTML); 7586 7587 var line4 = new mxCell('', new mxGeometry(w * 0.43, 75, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;'); 7588 line4.vertex = true; 7589 v.insert(line4); 7590 var line5 = new mxCell('', new mxGeometry(w * 0.18, 75, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;'); 7591 line5.vertex = true; 7592 v.insert(line5); 7593 var line6 = new mxCell('', new mxGeometry(w * 0.68, 75, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;'); 7594 line6.vertex = true; 7595 v.insert(line6); 7596 7597 var nextDate1 = new mxCell('', new mxGeometry(w * 0.375, 80, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7598 nextDate1.vertex = true; 7599 v.insert(nextDate1); 7600 nextDate1.value = convertText(p.Label_7); 7601 nextDate1.style += getLabelStyle(p.Label_7, isLastLblHTML); 7602 var nextDate2 = new mxCell('', new mxGeometry(w * 0.125, 80, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7603 nextDate2.vertex = true; 7604 v.insert(nextDate2); 7605 nextDate2.value = convertText(p.Label_6); 7606 nextDate2.style += getLabelStyle(p.Label_6, isLastLblHTML); 7607 var nextDate3 = new mxCell('', new mxGeometry(w * 0.625, 80, w * 0.2, 15), 'strokeColor=none;fillColor=none;'); 7608 nextDate3.vertex = true; 7609 v.insert(nextDate3); 7610 nextDate3.value = convertText(p.Label_8); 7611 nextDate3.style += getLabelStyle(p.Label_8, isLastLblHTML); 7612 7613 var triangle4 = new mxCell('', new mxGeometry(w * 0.5 - 4, 99, 8, 4), 'shape=triangle;direction=south;'); 7614 triangle4.vertex = true; 7615 v.insert(triangle4); 7616 var triangle5 = new mxCell('', new mxGeometry(w * 0.25 - 4, 99, 8, 4), 'shape=triangle;direction=south;'); 7617 triangle5.vertex = true; 7618 v.insert(triangle5); 7619 var triangle6 = new mxCell('', new mxGeometry(w * 0.75 - 4, 99, 8, 4), 'shape=triangle;direction=south;'); 7620 triangle6.vertex = true; 7621 v.insert(triangle6); 7622 7623 if (p.Scheme == 'Dark') 7624 { 7625 v.style += 'strokeColor=#353535;fillColor=#282828;shadow=1;'; 7626 cancelButton.style += 'strokeColor=#353535;'; 7627 okButton.style += 'strokeColor=#353535;'; 7628 triangle1.style += 'strokeColor=none;fillColor=#7E7E7E;'; 7629 triangle2.style += 'strokeColor=none;fillColor=#7E7E7E;'; 7630 triangle3.style += 'strokeColor=none;fillColor=#7E7E7E;'; 7631 triangle4.style += 'strokeColor=none;fillColor=#7E7E7E;'; 7632 triangle5.style += 'strokeColor=none;fillColor=#7E7E7E;'; 7633 triangle6.style += 'strokeColor=none;fillColor=#7E7E7E;'; 7634 } 7635 else 7636 { 7637 v.style += 'strokeColor=none;fillColor=#ffffff;shadow=1;'; 7638 cancelButton.style += 'strokeColor=#E2E2E2;'; 7639 okButton.style += 'strokeColor=#E2E2E2;'; 7640 triangle1.style += 'strokeColor=none;fillColor=#939393;'; 7641 triangle2.style += 'strokeColor=none;fillColor=#939393;'; 7642 triangle3.style += 'strokeColor=none;fillColor=#939393;'; 7643 triangle4.style += 'strokeColor=none;fillColor=#939393;'; 7644 triangle5.style += 'strokeColor=none;fillColor=#939393;'; 7645 triangle6.style += 'strokeColor=none;fillColor=#939393;'; 7646 } 7647 7648 v.style += addAllStyles(v.style, p, a, v); 7649 break; 7650 7651 case 'AndroidListItems' : 7652 var itemFullH = h; 7653 var startH = 0; 7654 7655 if (p.ShowHeader) 7656 { 7657 startH = 8; 7658 7659 var header = new mxCell('', new mxGeometry(0, 0, w, startH), 'strokeColor=none;fillColor=none;'); 7660 header.vertex = true; 7661 v.insert(header); 7662 header.value = convertText(p.Header); 7663 header.style += getLabelStyle(p.Header, isLastLblHTML); 7664 7665 itemFullH -= startH; 7666 7667 var lineH = new mxCell('', new mxGeometry(0, startH - 2, w, 4), 'shape=line;strokeColor=#999999;'); 7668 lineH.vertex = true; 7669 v.insert(lineH); 7670 } 7671 7672 var numItems = parseInt(p.Items); 7673 7674 if (numItems > 0) 7675 { 7676 itemFullH = itemFullH / numItems; 7677 } 7678 7679 var item = new Array(); 7680 var line = new Array(); 7681 7682 for (var i = 0; i < numItems; i++) 7683 { 7684 item[i] = new mxCell('', new mxGeometry(0, startH + i * itemFullH, w, itemFullH), 'strokeColor=none;fillColor=none;'); 7685 item[i].vertex = true; 7686 v.insert(item[i]); 7687 item[i].value = convertText(p["Item_" + i]); 7688 item[i].style += getLabelStyle(p["Item_" + i], isLastLblHTML); 7689 7690 if (i > 0) 7691 { 7692 line[i] = new mxCell('', new mxGeometry(0, startH + i * itemFullH - 2, w, 4), 'shape=line;'); 7693 line[i].vertex = true; 7694 v.insert(line[i]); 7695 7696 if (p.Scheme == 'Dark') 7697 { 7698 line[i].style += 'strokeColor=#ffffff;'; 7699 } 7700 else 7701 { 7702 line[i].style += 'strokeColor=#D9D9D9;'; 7703 } 7704 } 7705 } 7706 7707 if (p.Scheme == 'Dark') 7708 { 7709 v.style += 'strokeColor=none;fillColor=#111111;'; 7710 } 7711 else 7712 { 7713 v.style += 'strokeColor=none;fillColor=#ffffff;'; 7714 } 7715 7716 v.style += addAllStyles(v.style, p, a, v); 7717 break; 7718 7719 case 'AndroidTabs' : 7720 var numTabs = parseInt(p.Tabs); 7721 var tabFullW = w; 7722 7723 if (numTabs > 0) 7724 { 7725 tabFullW = tabFullW / numTabs; 7726 } 7727 7728 var tab = new Array(); 7729 var line = new Array(); 7730 7731 for (var i = 0; i < numTabs; i++) 7732 { 7733 tab[i] = new mxCell('', new mxGeometry(i * tabFullW, 0, tabFullW, h), 'strokeColor=none;fillColor=none;'); 7734 tab[i].vertex = true; 7735 v.insert(tab[i]); 7736 tab[i].value = convertText(p["Tab_" + i]); 7737 tab[i].style += getLabelStyle(p["Tab_" + i], isLastLblHTML); 7738 7739 if (i > 0) 7740 { 7741 line[i] = new mxCell('', new mxGeometry(i * tabFullW - 2, h * 0.2, 4, h * 0.6), 'shape=line;direction=north;'); 7742 line[i].vertex = true; 7743 v.insert(line[i]); 7744 7745 if (p.Scheme == 'Dark') 7746 { 7747 line[i].style += 'strokeColor=#484848;'; 7748 } 7749 else 7750 { 7751 line[i].style += 'strokeColor=#CCCCCC;'; 7752 } 7753 } 7754 } 7755 7756 var selectedMarker = new mxCell('', new mxGeometry(p.Selected * tabFullW + 2, h - 3, tabFullW - 4, 3), 'strokeColor=none;fillColor=#33B5E5;'); 7757 selectedMarker.vertex = true; 7758 v.insert(selectedMarker); 7759 7760 if (p.Scheme == 'Dark') 7761 { 7762 v.style += 'strokeColor=none;fillColor=#333333;'; 7763 } 7764 else 7765 { 7766 v.style += 'strokeColor=none;fillColor=#DDDDDD;'; 7767 } 7768 7769 v.style += addAllStyles(v.style, p, a, v); 7770 break; 7771 7772 case 'AndroidProgressBar' : 7773 v = new mxCell('', new mxGeometry(Math.round(x), Math.round(y + h * 0.25), Math.round(w), Math.round(h * 0.5)), vertexStyle); 7774 v.vertex = true; 7775 7776 var progressBar = new mxCell('', new mxGeometry(0, 0, w * p.BarPosition, Math.round(h * 0.5)), 'strokeColor=none;fillColor=#33B5E5;'); 7777 progressBar.vertex = true; 7778 v.insert(progressBar); 7779 7780 if (p.Scheme == 'Dark') 7781 { 7782 v.style += 'strokeColor=none;fillColor=#474747;'; 7783 } 7784 else 7785 { 7786 v.style += 'strokeColor=none;fillColor=#BBBBBB;'; 7787 } 7788 7789 v.style += addAllStyles(v.style, p, a, v); 7790 break; 7791 7792 case 'AndroidImageBlock' : 7793 if (p.Scheme == 'Dark') 7794 { 7795 v.style += 'shape=mxgraph.mockup.graphics.simpleIcon;strokeColor=#7E7E7E;fillColor=#111111;'; 7796 } 7797 else 7798 { 7799 v.style += 'shape=mxgraph.mockup.graphics.simpleIcon;strokeColor=#939393;fillColor=#ffffff;'; 7800 } 7801 7802 v.style += addAllStyles(v.style, p, a, v); 7803 break; 7804 7805 case 'AndroidTextBlock' : 7806 if (p.Scheme == 'Dark') 7807 { 7808 if (p.ShowBorder) 7809 { 7810 v.style += 'fillColor=#111111;strokeColor=#ffffff;'; 7811 } 7812 else 7813 { 7814 v.style += 'fillColor=#111111;strokeColor=none;'; 7815 } 7816 } 7817 else 7818 { 7819 if (p.ShowBorder) 7820 { 7821 v.style += 'fillColor=#ffffff;strokeColor=#000000;'; 7822 } 7823 else 7824 { 7825 v.style += 'fillColor=#ffffff;strokeColor=none;'; 7826 } 7827 } 7828 7829 v.value = convertText(p.Label); 7830 v.style += getLabelStyle(p.Label, isLastLblHTML); 7831 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 7832 7833 break; 7834 7835 case 'AndroidActionBar' : 7836 v.style += 'strokeColor=none;'; 7837 7838 switch (p.BarBackground) 7839 { 7840 case 'Blue' : 7841 v.style += 'fillColor=#002E3E;'; 7842 break; 7843 case 'Gray' : 7844 v.style += 'fillColor=#DDDDDD;'; 7845 break; 7846 case 'Dark Gray' : 7847 v.style += 'fillColor=#474747;'; 7848 break; 7849 case 'White' : 7850 v.style += 'fillColor=#ffffff;'; 7851 break; 7852 } 7853 7854 if (p.HighlightShow) 7855 { 7856 var highlight = null; 7857 7858 if (p.HighlightTop) 7859 { 7860 highlight = new mxCell('', new mxGeometry(0, 0, w, 2), 'strokeColor=none;'); 7861 } 7862 else 7863 { 7864 highlight = new mxCell('', new mxGeometry(0, h - 2, w, 2), 'strokeColor=none;'); 7865 } 7866 7867 highlight.vertex = true; 7868 v.insert(highlight); 7869 7870 switch (p.HighlightColor) 7871 { 7872 case 'Blue' : 7873 highlight.style += 'fillColor=#33B5E5;'; 7874 break; 7875 case 'Dark Gray' : 7876 highlight.style += 'fillColor=#B0B0B0;'; 7877 break; 7878 case 'White' : 7879 highlight.style += 'fillColor=#ffffff;'; 7880 break; 7881 } 7882 } 7883 7884 if (p.VlignShow) 7885 { 7886 var vLine = new mxCell('', new mxGeometry(20, 5, 2, h - 10), 'shape=line;direction=north;'); 7887 vLine.vertex = true; 7888 v.insert(vLine); 7889 7890 switch (p.VlignColor) 7891 { 7892 case 'Blue' : 7893 vLine.style += 'strokeColor=#244C5A;'; 7894 break; 7895 case 'White' : 7896 vLine.style += 'strokeColor=#ffffff;'; 7897 break; 7898 } 7899 } 7900 7901 v.style += addAllStyles(v.style, p, a, v); 7902 break; 7903 7904 case 'AndroidButton' : 7905 v.value = convertText(p.Label); 7906 v.style += getLabelStyle(p.Label, isLastLblHTML) + 'shape=partialRectangle;left=0;right=0;'; 7907 7908 if (p.Scheme == 'Dark') 7909 { 7910 v.style += 'fillColor=#474747;strokeColor=#C6C5C6;bottom=0;'; 7911 } 7912 else 7913 { 7914 v.style += 'fillColor=#DFE0DF;strokeColor=#C6C5C6;top=0;'; 7915 } 7916 7917 v.style += addAllStyles(v.style, p, a, v); 7918 break; 7919 7920 case 'AndroidTextBox' : 7921 v.value = convertText(p.Label); 7922 v.style += getLabelStyle(p.Label, isLastLblHTML); 7923 7924 var underline = new mxCell('', new mxGeometry(2, h - 6, w - 4, 4), 'shape=partialRectangle;top=0;fillColor=none;'); 7925 underline.vertex = true; 7926 v.insert(underline); 7927 7928 if (p.Scheme == 'Dark') 7929 { 7930 v.style += 'fillColor=#111111;strokeColor=none;'; 7931 } 7932 else 7933 { 7934 v.style += 'fillColor=#ffffff;strokeColor=none;'; 7935 } 7936 7937 if (p.TextFocused) 7938 { 7939 underline.style += 'strokeColor=#33B5E5;'; 7940 } 7941 else 7942 { 7943 underline.style += 'strokeColor=#A9A9A9;'; 7944 } 7945 7946 v.style += addAllStyles(v.style, p, a, v); 7947 break; 7948 7949 case 'AndroidRadioButton' : 7950 var dot = null; 7951 7952 if (p.Checked) 7953 { 7954 dot = new mxCell('', new mxGeometry(w * 0.15, h * 0.15, w * 0.7, h * 0.7), 'ellipse;fillColor=#33B5E5;strokeWidth=1;'); 7955 dot.vertex = true; 7956 v.insert(dot); 7957 } 7958 7959 if (p.Scheme == 'Dark') 7960 { 7961 v.style += 'shape=ellipse;perimeter=ellipsePerimeter;strokeWidth=1;strokeColor=#272727;'; 7962 7963 if (p.Checked) 7964 { 7965 dot.style += 'strokeColor=#1F5C73;'; 7966 v.style += 'fillColor=#193C49;'; 7967 } 7968 else 7969 { 7970 v.style += 'fillColor=#111111;'; 7971 } 7972 } 7973 else 7974 { 7975 v.style += 'shape=ellipse;perimeter=ellipsePerimeter;strokeWidth=1;fillColor=#ffffff;strokeColor=#5C5C5C;'; 7976 7977 if (p.Checked) 7978 { 7979 dot.style += 'strokeColor=#999999;'; 7980 } 7981 } 7982 7983 v.style += addAllStyles(v.style, p, a, v); 7984 break; 7985 7986 case 'AndroidCheckBox' : 7987 var check = null; 7988 if (p.Checked) 7989 { 7990 check = new mxCell('', new mxGeometry(w * 0.25, - h * 0.05, w, h * 0.8), 'shape=mxgraph.ios7.misc.check;strokeColor=#33B5E5;strokeWidth=2;'); 7991 check.vertex = true; 7992 v.insert(check); 7993 } 7994 7995 if (p.Scheme == 'Dark') 7996 { 7997 v.style += 'strokeWidth=1;strokeColor=#272727;fillColor=#111111;'; 7998 } 7999 else 8000 { 8001 v.style += 'strokeWidth=1;strokeColor=#5C5C5C;fillColor=#ffffff;'; 8002 } 8003 8004 v.style += addAllStyles(v.style, p, a, v); 8005 break; 8006 8007 case 'AndroidToggle' : 8008 if (p.Scheme == 'Dark') 8009 { 8010 if (p.Checked) 8011 { 8012 v.style += 'shape=mxgraph.android.switch_on;fillColor=#666666;'; 8013 } 8014 else 8015 { 8016 v.style += 'shape=mxgraph.android.switch_off;fillColor=#666666;'; 8017 } 8018 } 8019 else 8020 { 8021 if (p.Checked) 8022 { 8023 v.style += 'shape=mxgraph.android.switch_on;fillColor=#E6E6E6;'; 8024 } 8025 else 8026 { 8027 v.style += 'shape=mxgraph.android.switch_off;fillColor=#E6E6E6;'; 8028 } 8029 } 8030 8031 v.style += addAllStyles(v.style, p, a, v); 8032 break; 8033 8034 case 'AndroidSlider' : 8035 v.style += 'shape=mxgraph.android.progressScrubberFocused;dx=' + p.BarPosition + ';fillColor=#33b5e5;'; 8036 v.style += addAllStyles(v.style, p, a, v); 8037 8038 break; 8039 8040 case 'iOSSegmentedControl' : 8041 var numTabs = parseInt(p.Tabs); 8042 var tabFullW = w; 8043 v.style += 'strokeColor=none;fillColor=none;'; 8044 8045 if (numTabs > 0) 8046 { 8047 tabFullW = tabFullW / numTabs; 8048 } 8049 8050 var tab = new Array(); 8051 var line = new Array(); 8052 8053 for (var i = 0; i < numTabs; i++) 8054 { 8055 tab[i] = new mxCell('', new mxGeometry(i * tabFullW, 0, tabFullW, h), 'strokeColor=' + p.FillColor + ';'); 8056 tab[i].vertex = true; 8057 v.insert(tab[i]); 8058 tab[i].value = convertText(p["Tab_" + i]); 8059 tab[i].style += getLabelStyle(p["Tab_" + i], isLastLblHTML); 8060 8061 if (p.Selected == i) 8062 { 8063 tab[i].style += getFillColor(p, a); 8064 } 8065 else 8066 { 8067 tab[i].style += 'fillColor=none;'; 8068 } 8069 } 8070 8071 v.style += addAllStyles(v.style, p, a, v); 8072 break; 8073 8074 case 'iOSSlider' : 8075 v.style += 'shape=mxgraph.ios7ui.slider;strokeColor=' + p.FillColor + ';fillColor=#ffffff;strokeWidth=2;barPos=' + p.BarPosition * 100 + ';'; 8076 v.style += addAllStyles(v.style, p, a, v); 8077 8078 break; 8079 8080 case 'iOSProgressBar': 8081 v = new mxCell('', new mxGeometry(Math.round(x), Math.round(y + h * 0.25), Math.round(w), Math.round(h * 0.5)), vertexStyle + 'strokeColor=none;fillColor=#B5B5B5;'); 8082 v.vertex = true; 8083 8084 var progressBar = new mxCell('', new mxGeometry(0, 0, w * p.BarPosition, Math.round(h * 0.5)), 'strokeColor=none;' + getFillColor(p, a)); 8085 progressBar.vertex = true; 8086 v.insert(progressBar); 8087 8088 v.style += addAllStyles(v.style, p, a, v); 8089 break; 8090 8091 case 'iOSPageControls' : 8092 v.style += 'shape=mxgraph.ios7ui.pageControl;strokeColor=#D6D6D6;'; 8093 v.style += addAllStyles(v.style, p, a, v); 8094 8095 break; 8096 8097 case 'iOSStatusBar' : 8098 v.style += 'shape=mxgraph.ios7ui.appBar;strokeColor=#000000;'; 8099 8100 var text1 = new mxCell(convertText(p.Text), new mxGeometry(w * 0.35, 0, w * 0.3, h), 'strokeColor=none;fillColor=none;'); 8101 text1.vertex = true; 8102 v.insert(text1); 8103 text1.style += getLabelStyle(p.Text, isLastLblHTML); 8104 8105 var text2 = new mxCell(convertText(p.Carrier), new mxGeometry(w * 0.09, 0, w * 0.2, h), 'strokeColor=none;fillColor=none;'); 8106 text2.vertex = true; 8107 v.insert(text2); 8108 text2.style += getLabelStyle(p.Carrier, isLastLblHTML); 8109 8110 v.style += addAllStyles(v.style, p, a, v); 8111 break; 8112 8113 case 'iOSSearchBar' : 8114 v.value = convertText(p.Search); 8115 8116 v.style += 'strokeColor=none;'; 8117 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML) + 8118 getLabelStyle(p.Search, isLastLblHTML); 8119 8120 var icon1 = new mxCell('', new mxGeometry(w * 0.3, h * 0.3, h * 0.4, h * 0.4), 'shape=mxgraph.ios7.icons.looking_glass;strokeColor=#000000;fillColor=none;'); 8121 icon1.vertex = true; 8122 v.insert(icon1); 8123 8124 break; 8125 8126 case 'iOSNavBar' : 8127 v.value = convertText(p.Title); 8128 v.style += 'shape=partialRectangle;top=0;right=0;left=0;strokeColor=#979797;' 8129 + getLabelStyle(p.Title, isLastLblHTML); 8130 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 8131 8132 var text1 = new mxCell(convertText(p.LeftText), new mxGeometry(w * 0.03, 0, w * 0.3, h), 'strokeColor=none;fillColor=none;'); 8133 text1.vertex = true; 8134 v.insert(text1); 8135 text1.style += getLabelStyle(p.LeftText, isLastLblHTML); 8136 8137 var text2 = new mxCell(convertText(p.RightText), new mxGeometry(w * 0.65, 0, w * 0.3, h), 'strokeColor=none;fillColor=none;'); 8138 text2.vertex = true; 8139 v.insert(text2); 8140 text2.style += getLabelStyle(p.RightText, isLastLblHTML); 8141 8142 var icon1 = new mxCell('', new mxGeometry(w * 0.02, h * 0.2, h * 0.3, h * 0.5), 'shape=mxgraph.ios7.misc.left;strokeColor=#007AFF;strokeWidth=2;'); 8143 icon1.vertex = true; 8144 v.insert(icon1); 8145 8146 break; 8147 8148 case 'iOSTabs' : 8149 var numTabs = parseInt(p.Tabs); 8150 var tabFullW = w; 8151 v.style += 'shape=partialRectangle;right=0;left=0;bottom=0;strokeColor=#979797;'; 8152 v.style += addAllStyles(v.style, p, a, v); 8153 8154 if (numTabs > 0) 8155 { 8156 tabFullW = tabFullW / numTabs; 8157 } 8158 8159 var tab = new Array(); 8160 var line = new Array(); 8161 8162 for (var i = 0; i < numTabs; i++) 8163 { 8164 tab[i] = new mxCell('', new mxGeometry(i * tabFullW, 0, tabFullW, h), 'strokeColor=none;'); 8165 tab[i].vertex = true; 8166 v.insert(tab[i]); 8167 tab[i].value = convertText(p["Tab_" + i]); 8168 8169 tab[i].style += (isLastLblHTML? 'overflow=block;blockSpacing=1;html=1;fontSize=' + defaultFontSize + ';' + 8170 gFontFamilyStyle 8171 : 8172 getFontSize(p["Tab_" + i]) + 8173 getFontFamily(p["Tab_" + i]) + 8174 getFontColor(p["Tab_" + i]) + 8175 getFontStyle(p["Tab_" + i]) + 8176 getTextAlignment(p["Tab_" + i]) + 8177 getTextLeftSpacing(p["Tab_" + i]) + 8178 getTextRightSpacing(p["Tab_" + i]) + 8179 getTextTopSpacing(p["Tab_" + i]) + 8180 getTextBottomSpacing(p["Tab_" + i]) + 8181 getTextGlobalSpacing(p["Tab_" + i])); 8182 8183 tab[i].style += 'verticalAlign=bottom;'; 8184 8185 if (p.Selected == i) 8186 { 8187 tab[i].style += 'fillColor=#BBBBBB;'; 8188 } 8189 else 8190 { 8191 tab[i].style += 'fillColor=none;'; 8192 } 8193 } 8194 8195 break; 8196 8197 case 'iOSDatePicker' : 8198 var firstDate1 = new mxCell('', new mxGeometry(0, 0, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;'); 8199 firstDate1.vertex = true; 8200 v.insert(firstDate1); 8201 firstDate1.value = convertText(p.Option11); 8202 firstDate1.style += getLabelStyle(p.Option11, isLastLblHTML); 8203 var firstDate2 = new mxCell('', new mxGeometry(w * 0.5, 0, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8204 firstDate2.vertex = true; 8205 v.insert(firstDate2); 8206 firstDate2.value = convertText(p.Option21); 8207 firstDate2.style += getLabelStyle(p.Option21, isLastLblHTML); 8208 var firstDate3 = new mxCell('', new mxGeometry(w * 0.65, 0, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8209 firstDate3.vertex = true; 8210 v.insert(firstDate3); 8211 firstDate3.value = convertText(p.Option31); 8212 firstDate3.style += getLabelStyle(p.Option31, isLastLblHTML); 8213 8214 var secondDate1 = new mxCell('', new mxGeometry(0, h * 0.2, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;'); 8215 secondDate1.vertex = true; 8216 v.insert(secondDate1); 8217 secondDate1.value = convertText(p.Option12); 8218 secondDate1.style += getLabelStyle(p.Option12, isLastLblHTML); 8219 var secondDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.2, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8220 secondDate2.vertex = true; 8221 v.insert(secondDate2); 8222 secondDate2.value = convertText(p.Option22); 8223 secondDate2.style += getLabelStyle(p.Option22, isLastLblHTML); 8224 var secondDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.2, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8225 secondDate3.vertex = true; 8226 v.insert(secondDate3); 8227 secondDate3.value = convertText(p.Option32); 8228 secondDate3.style += getLabelStyle(p.Option32, isLastLblHTML); 8229 8230 var currDate1 = new mxCell('', new mxGeometry(0, h * 0.4, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;'); 8231 currDate1.vertex = true; 8232 v.insert(currDate1); 8233 currDate1.value = convertText(p.Option13); 8234 currDate1.style += getLabelStyle(p.Option13, isLastLblHTML); 8235 var currDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8236 currDate2.vertex = true; 8237 v.insert(currDate2); 8238 currDate2.value = convertText(p.Option23); 8239 currDate2.style += getLabelStyle(p.Option23, isLastLblHTML); 8240 var currDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8241 currDate3.vertex = true; 8242 v.insert(currDate3); 8243 currDate3.value = convertText(p.Option33); 8244 currDate3.style += getLabelStyle(p.Option33, isLastLblHTML); 8245 var currDate4 = new mxCell('', new mxGeometry(w * 0.80, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8246 currDate4.vertex = true; 8247 v.insert(currDate4); 8248 currDate4.value = convertText(p.Option43); 8249 currDate4.style += getLabelStyle(p.Option43, isLastLblHTML); 8250 8251 var fourthDate1 = new mxCell('', new mxGeometry(0, h * 0.6, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;'); 8252 fourthDate1.vertex = true; 8253 v.insert(fourthDate1); 8254 fourthDate1.value = convertText(p.Option14); 8255 fourthDate1.style += getLabelStyle(p.Option14, isLastLblHTML); 8256 var fourthDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8257 fourthDate2.vertex = true; 8258 v.insert(fourthDate2); 8259 fourthDate2.value = convertText(p.Option24); 8260 fourthDate2.style += getLabelStyle(p.Option24, isLastLblHTML); 8261 var fourthDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8262 fourthDate3.vertex = true; 8263 v.insert(fourthDate3); 8264 fourthDate3.value = convertText(p.Option34); 8265 fourthDate3.style += getLabelStyle(p.Option34, isLastLblHTML); 8266 var fourthDate4 = new mxCell('', new mxGeometry(w * 0.8, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8267 fourthDate4.vertex = true; 8268 v.insert(fourthDate4); 8269 fourthDate4.value = convertText(p.Option44); 8270 fourthDate4.style += getLabelStyle(p.Option44, isLastLblHTML); 8271 8272 var fifthDate1 = new mxCell('', new mxGeometry(0, h * 0.8, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;'); 8273 fifthDate1.vertex = true; 8274 v.insert(fifthDate1); 8275 fifthDate1.value = convertText(p.Option15); 8276 fifthDate1.style += getLabelStyle(p.Option15, isLastLblHTML); 8277 var fifthDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.8, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8278 fifthDate2.vertex = true; 8279 v.insert(fifthDate2); 8280 fifthDate2.value = convertText(p.Option25); 8281 fifthDate2.style += getLabelStyle(p.Option25, isLastLblHTML); 8282 var fifthDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.8, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8283 fifthDate3.vertex = true; 8284 v.insert(fifthDate3); 8285 fifthDate3.value = convertText(p.Option35); 8286 fifthDate3.style += getLabelStyle(p.Option35, isLastLblHTML); 8287 8288 var line1 = new mxCell('', new mxGeometry(0, h * 0.4 - 2, w, 4), 'shape=line;strokeColor=#888888;'); 8289 line1.vertex = true; 8290 v.insert(line1); 8291 var line2 = new mxCell('', new mxGeometry(0, h * 0.6 - 2, w, 4), 'shape=line;strokeColor=#888888;'); 8292 line2.vertex = true; 8293 v.insert(line2); 8294 8295 v.style += 'strokeColor=none;'; 8296 v.style += addAllStyles(v.style, p, a, v); 8297 8298 break; 8299 8300 case 'iOSTimePicker' : 8301 var firstDate1 = new mxCell('', new mxGeometry(0, 0, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8302 firstDate1.vertex = true; 8303 v.insert(firstDate1); 8304 firstDate1.value = convertText(p.Option11); 8305 firstDate1.style += getLabelStyle(p.Option11, isLastLblHTML); 8306 var firstDate2 = new mxCell('', new mxGeometry(w * 0.25, 0, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;'); 8307 firstDate2.vertex = true; 8308 v.insert(firstDate2); 8309 firstDate2.value = convertText(p.Option21); 8310 firstDate2.style += getLabelStyle(p.Option21, isLastLblHTML); 8311 8312 var secondDate1 = new mxCell('', new mxGeometry(0, h * 0.2, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8313 secondDate1.vertex = true; 8314 v.insert(secondDate1); 8315 secondDate1.value = convertText(p.Option12); 8316 secondDate1.style += getLabelStyle(p.Option12, isLastLblHTML); 8317 var secondDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.2, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;'); 8318 secondDate2.vertex = true; 8319 v.insert(secondDate2); 8320 secondDate2.value = convertText(p.Option22); 8321 secondDate2.style += getLabelStyle(p.Option22, isLastLblHTML); 8322 8323 var currDate1 = new mxCell('', new mxGeometry(0, h * 0.4, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8324 currDate1.vertex = true; 8325 v.insert(currDate1); 8326 currDate1.value = convertText(p.Option13); 8327 currDate1.style += getLabelStyle(p.Option13, isLastLblHTML); 8328 var currDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.4, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;'); 8329 currDate2.vertex = true; 8330 v.insert(currDate2); 8331 currDate2.value = convertText(p.Option23); 8332 currDate2.style += getLabelStyle(p.Option23, isLastLblHTML); 8333 var currDate4 = new mxCell('', new mxGeometry(w * 0.7, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8334 currDate4.vertex = true; 8335 v.insert(currDate4); 8336 currDate4.value = convertText(p.Option33); 8337 currDate4.style += getLabelStyle(p.Option33, isLastLblHTML); 8338 8339 var fourthDate1 = new mxCell('', new mxGeometry(0, h * 0.6, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8340 fourthDate1.vertex = true; 8341 v.insert(fourthDate1); 8342 fourthDate1.value = convertText(p.Option14); 8343 fourthDate1.style += getLabelStyle(p.Option14, isLastLblHTML); 8344 var fourthDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.6, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;'); 8345 fourthDate2.vertex = true; 8346 v.insert(fourthDate2); 8347 fourthDate2.value = convertText(p.Option24); 8348 fourthDate2.style += getLabelStyle(p.Option24, isLastLblHTML); 8349 var fourthDate4 = new mxCell('', new mxGeometry(w * 0.7, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;'); 8350 fourthDate4.vertex = true; 8351 v.insert(fourthDate4); 8352 fourthDate4.value = convertText(p.Option34); 8353 fourthDate4.style += getLabelStyle(p.Option34, isLastLblHTML); 8354 8355 var fifthDate1 = new mxCell('', new mxGeometry(0, h * 0.8, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8356 fifthDate1.vertex = true; 8357 v.insert(fifthDate1); 8358 fifthDate1.value = convertText(p.Option15); 8359 fifthDate1.style += getLabelStyle(p.Option15, isLastLblHTML); 8360 var fifthDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.8, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;'); 8361 fifthDate2.vertex = true; 8362 v.insert(fifthDate2); 8363 fifthDate2.value = convertText(p.Option25); 8364 fifthDate2.style += getLabelStyle(p.Option25, isLastLblHTML); 8365 8366 var line1 = new mxCell('', new mxGeometry(0, h * 0.4 - 2, w, 4), 'shape=line;strokeColor=#888888;'); 8367 line1.vertex = true; 8368 v.insert(line1); 8369 var line2 = new mxCell('', new mxGeometry(0, h * 0.6 - 2, w, 4), 'shape=line;strokeColor=#888888;'); 8370 line2.vertex = true; 8371 v.insert(line2); 8372 8373 v.style += 'strokeColor=none;'; 8374 v.style += addAllStyles(v.style, p, a, v); 8375 8376 break; 8377 8378 case 'iOSCountdownPicker' : 8379 var firstDate3 = new mxCell('', new mxGeometry(w * 0.45, 0, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;'); 8380 firstDate3.vertex = true; 8381 v.insert(firstDate3); 8382 firstDate3.value = convertText(p.Option31); 8383 firstDate3.style += getLabelStyle(p.Option31, isLastLblHTML); 8384 8385 var secondDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.2, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;'); 8386 secondDate3.vertex = true; 8387 v.insert(secondDate3); 8388 secondDate3.value = convertText(p.Option32); 8389 secondDate3.style += getLabelStyle(p.Option32, isLastLblHTML); 8390 8391 var currDate1 = new mxCell('', new mxGeometry(0, h * 0.4, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8392 currDate1.vertex = true; 8393 v.insert(currDate1); 8394 currDate1.value = convertText(p.Option13); 8395 currDate1.style += getLabelStyle(p.Option13, isLastLblHTML); 8396 var currDate2 = new mxCell('', new mxGeometry(w * 0.2, h * 0.4, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8397 currDate2.vertex = true; 8398 v.insert(currDate2); 8399 currDate2.value = convertText(p.Option23); 8400 currDate2.style += getLabelStyle(p.Option23, isLastLblHTML); 8401 var currDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.4, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;'); 8402 currDate3.vertex = true; 8403 v.insert(currDate3); 8404 currDate3.value = convertText(p.Option33); 8405 currDate3.style += getLabelStyle(p.Option33, isLastLblHTML); 8406 var currDate4 = new mxCell('', new mxGeometry(w * 0.6, h * 0.4, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;'); 8407 currDate4.vertex = true; 8408 v.insert(currDate4); 8409 currDate4.value = convertText(p.Option43); 8410 currDate4.style += getLabelStyle(p.Option43, isLastLblHTML); 8411 8412 var fourthDate1 = new mxCell('', new mxGeometry(0, h * 0.6, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8413 fourthDate1.vertex = true; 8414 v.insert(fourthDate1); 8415 fourthDate1.value = convertText(p.Option14); 8416 fourthDate1.style += getLabelStyle(p.Option14, isLastLblHTML); 8417 var fourthDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.6, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;'); 8418 fourthDate3.vertex = true; 8419 v.insert(fourthDate3); 8420 fourthDate3.value = convertText(p.Option34); 8421 fourthDate3.style += getLabelStyle(p.Option34, isLastLblHTML); 8422 8423 var fifthDate1 = new mxCell('', new mxGeometry(0, h * 0.8, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;'); 8424 fifthDate1.vertex = true; 8425 v.insert(fifthDate1); 8426 fifthDate1.value = convertText(p.Option15); 8427 fifthDate1.style += getLabelStyle(p.Option15, isLastLblHTML); 8428 var fifthDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.8, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;'); 8429 fifthDate3.vertex = true; 8430 v.insert(fifthDate3); 8431 fifthDate3.value = convertText(p.Option35); 8432 fifthDate3.style += getLabelStyle(p.Option35, isLastLblHTML); 8433 8434 var line1 = new mxCell('', new mxGeometry(0, h * 0.4 - 2, w, 4), 'shape=line;strokeColor=#888888;'); 8435 line1.vertex = true; 8436 v.insert(line1); 8437 var line2 = new mxCell('', new mxGeometry(0, h * 0.6 - 2, w, 4), 'shape=line;strokeColor=#888888;'); 8438 line2.vertex = true; 8439 v.insert(line2); 8440 8441 v.style += 'strokeColor=none;'; 8442 v.style += addAllStyles(v.style, p, a, v); 8443 8444 break; 8445 8446 case 'iOSBasicCell' : 8447 v.value = convertText(p.text); 8448 v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;spacing=0;align=left;spacingLeft=' + (p.SeparatorInset * scale) + ';'; 8449 v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 8450 getFontSize(p.text) + 8451 getFontColor(p.text) + 8452 getFontStyle(p.text)) + 8453 getTextVerticalAlignment(p.text); 8454 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 8455 8456 switch (p.AccessoryIndicatorType) 8457 { 8458 case 'Disclosure' : 8459 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8460 icon1.vertex = true; 8461 v.insert(icon1); 8462 8463 break; 8464 8465 case 'DetailDisclosure' : 8466 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8467 icon1.vertex = true; 8468 v.insert(icon1); 8469 8470 var icon2 = new mxCell('', new mxGeometry(w * 0.79, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8471 icon2.vertex = true; 8472 v.insert(icon2); 8473 8474 break; 8475 8476 case 'DetailIndicator' : 8477 var icon2 = new mxCell('', new mxGeometry(w * 0.87, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8478 icon2.vertex = true; 8479 v.insert(icon2); 8480 8481 break; 8482 8483 case 'CheckMark' : 8484 var icon1 = new mxCell('', new mxGeometry(w * 0.89, h * 0.37, h * 0.4, h * 0.26), 'shape=mxgraph.ios7.misc.check;strokeColor=#007AFF;strokeWidth=2;'); 8485 icon1.vertex = true; 8486 v.insert(icon1); 8487 8488 break; 8489 } 8490 8491 break; 8492 8493 case 'iOSSubtitleCell' : 8494 v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;align=left;spacing=0;verticalAlign=top;spacingLeft=' + (p.SeparatorInset * scale) + ';'; 8495 v.value = convertText(p.subtext); 8496 v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 8497 getFontSize(p.subtext) + 8498 getFontColor(p.subtext) + 8499 getFontStyle(p.subtext)); 8500 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 8501 8502 var subtext = new mxCell('', new mxGeometry(0, h * 0.4, w, h * 0.6), 'fillColor=none;strokeColor=none;spacing=0;align=left;verticalAlign=bottom;spacingLeft=' + (p.SeparatorInset * scale) + ';'); 8503 subtext.vertex = true; 8504 v.insert(subtext); 8505 subtext.value = convertText(p.text); 8506 subtext.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' + 8507 gFontFamilyStyle 8508 : 8509 getFontSize(p.text) + 8510 getFontFamily(p.text) + 8511 getFontColor(p.text) + 8512 getFontStyle(p.text)); 8513 8514 switch (p.AccessoryIndicatorType) 8515 { 8516 case 'Disclosure' : 8517 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8518 icon1.vertex = true; 8519 v.insert(icon1); 8520 8521 break; 8522 8523 case 'DetailDisclosure' : 8524 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8525 icon1.vertex = true; 8526 v.insert(icon1); 8527 8528 var icon2 = new mxCell('', new mxGeometry(w * 0.79, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8529 icon2.vertex = true; 8530 v.insert(icon2); 8531 8532 break; 8533 8534 case 'DetailIndicator' : 8535 var icon2 = new mxCell('', new mxGeometry(w * 0.87, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8536 icon2.vertex = true; 8537 v.insert(icon2); 8538 8539 break; 8540 8541 case 'CheckMark' : 8542 var icon1 = new mxCell('', new mxGeometry(w * 0.89, h * 0.37, h * 0.4, h * 0.26), 'shape=mxgraph.ios7.misc.check;strokeColor=#007AFF;strokeWidth=2;'); 8543 icon1.vertex = true; 8544 v.insert(icon1); 8545 8546 break; 8547 } 8548 8549 break; 8550 8551 case 'iOSRightDetailCell' : 8552 v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;align=left;spacing=0;verticalAlign=middle;spacingLeft=' + (p.SeparatorInset * scale) + ';'; 8553 v.value = convertText(p.subtext); 8554 v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 8555 getFontSize(p.subtext) + 8556 getFontColor(p.subtext) + 8557 getFontStyle(p.subtext)); 8558 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 8559 8560 var subtext = null; 8561 8562 switch (p.AccessoryIndicatorType) 8563 { 8564 case 'Disclosure' : 8565 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8566 icon1.vertex = true; 8567 v.insert(icon1); 8568 8569 subtext = new mxCell('', new mxGeometry(w * 0.55, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;'); 8570 8571 break; 8572 8573 case 'DetailDisclosure' : 8574 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8575 icon1.vertex = true; 8576 v.insert(icon1); 8577 8578 var icon2 = new mxCell('', new mxGeometry(w * 0.79, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8579 icon2.vertex = true; 8580 v.insert(icon2); 8581 8582 subtext = new mxCell('', new mxGeometry(w * 0.45, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;'); 8583 8584 break; 8585 8586 case 'DetailIndicator' : 8587 var icon2 = new mxCell('', new mxGeometry(w * 0.87, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8588 icon2.vertex = true; 8589 v.insert(icon2); 8590 8591 subtext = new mxCell('', new mxGeometry(w * 0.52, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;'); 8592 8593 break; 8594 8595 case 'CheckMark' : 8596 var icon1 = new mxCell('', new mxGeometry(w * 0.89, h * 0.37, h * 0.4, h * 0.26), 'shape=mxgraph.ios7.misc.check;strokeColor=#007AFF;strokeWidth=2;'); 8597 icon1.vertex = true; 8598 v.insert(icon1); 8599 8600 subtext = new mxCell('', new mxGeometry(w * 0.55, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;'); 8601 8602 break; 8603 8604 default : 8605 subtext = new mxCell('', new mxGeometry(w * 0.65, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;'); 8606 } 8607 8608 subtext.vertex = true; 8609 v.insert(subtext); 8610 subtext.value = convertText(p.text); 8611 subtext.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' + 8612 gFontFamilyStyle 8613 : 8614 getFontSize(p.text) + 8615 getFontFamily(p.text) + 8616 getFontColor(p.text) + 8617 getFontStyle(p.text)); 8618 8619 break; 8620 8621 case 'iOSLeftDetailCell' : 8622 v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;'; 8623 v.style += addAllStyles(v.style, p, a, v); 8624 8625 var text = new mxCell('', new mxGeometry(0, 0, w * 0.25, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;verticalAlign=middle;spacingRight=3;'); 8626 text.vertex = true; 8627 v.insert(text); 8628 text.value = convertText(p.subtext); 8629 text.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' + 8630 gFontFamilyStyle 8631 : 8632 getFontSize(p.subtext) + 8633 getFontFamily(p.subtext) + 8634 getFontColor(p.subtext) + 8635 getFontStyle(p.subtext)); 8636 8637 var subtext = new mxCell('', new mxGeometry(w * 0.25, 0, w * 0.5, h), 'fillColor=none;strokeColor=none;spacing=0;align=left;verticalAlign=middle;spacingLeft=3;'); 8638 subtext.vertex = true; 8639 v.insert(subtext); 8640 subtext.value = convertText(p.text); 8641 subtext.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' + 8642 gFontFamilyStyle 8643 : 8644 getFontSize(p.text) + 8645 getFontFamily(p.text) + 8646 getFontColor(p.text) + 8647 getFontStyle(p.text)); 8648 8649 switch (p.AccessoryIndicatorType) 8650 { 8651 case 'Disclosure' : 8652 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8653 icon1.vertex = true; 8654 v.insert(icon1); 8655 8656 break; 8657 8658 case 'DetailDisclosure' : 8659 var icon1 = new mxCell('', new mxGeometry(w * 0.91, h * 0.35, h * 0.15, h * 0.3), 'shape=mxgraph.ios7.misc.right;strokeColor=#D2D2D6;'); 8660 icon1.vertex = true; 8661 v.insert(icon1); 8662 8663 var icon2 = new mxCell('', new mxGeometry(w * 0.79, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8664 icon2.vertex = true; 8665 v.insert(icon2); 8666 8667 break; 8668 8669 case 'DetailIndicator' : 8670 var icon2 = new mxCell('', new mxGeometry(w * 0.87, h * 0.25, h * 0.5, h * 0.5), 'shape=mxgraph.ios7.icons.info;strokeColor=#007AFF;fillColor=#ffffff;'); 8671 icon2.vertex = true; 8672 v.insert(icon2); 8673 8674 break; 8675 8676 case 'CheckMark' : 8677 var icon1 = new mxCell('', new mxGeometry(w * 0.89, h * 0.37, h * 0.4, h * 0.26), 'shape=mxgraph.ios7.misc.check;strokeColor=#007AFF;strokeWidth=2;'); 8678 icon1.vertex = true; 8679 v.insert(icon1); 8680 8681 break; 8682 } 8683 8684 break; 8685 8686 case 'iOSTableGroupedSectionBreak' : 8687 v.style += 'shape=partialRectangle;left=0;right=0;fillColor=#EFEFF4;strokeColor=#C8C7CC;'; 8688 8689 var text1 = new mxCell('', new mxGeometry(0, 0, w, h * 0.4), 'fillColor=none;strokeColor=none;spacing=10;align=left;'); 8690 text1.vertex = true; 8691 v.insert(text1); 8692 text1.value = convertText(p.text); 8693 text1.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' + 8694 gFontFamilyStyle 8695 : 8696 getFontSize(p.text) + 8697 getFontFamily(p.text) + 8698 getFontColor(p.text) + 8699 getFontStyle(p.text)); 8700 8701 var text2 = new mxCell('', new mxGeometry(0, h * 0.6, w, h * 0.4), 'fillColor=none;strokeColor=none;spacing=10;align=left;'); 8702 text2.vertex = true; 8703 v.insert(text2); 8704 text2.value = convertText(p["bottom-text"]); 8705 text2.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' + 8706 gFontFamilyStyle 8707 : 8708 getFontSize(p["bottom-text"]) + 8709 getFontFamily(p["bottom-text"]) + 8710 getFontColor(p["bottom-text"]) + 8711 getFontStyle(p["bottom-text"])); 8712 8713 break; 8714 8715 case 'iOSTablePlainHeaderFooter' : 8716 v.style += 'fillColor=#F7F7F7;strokeColor=none;align=left;spacingLeft=5;spacing=0;'; 8717 v.value = convertText(p.text); 8718 v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 8719 getFontSize(p.text) + 8720 getFontColor(p.text) + 8721 getFontStyle(p.text)); 8722 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 8723 8724 break; 8725 8726 case 'SMPage' : 8727 //TODO Link icon (p.Url != "") 8728 if (p.Group) 8729 { 8730 v.style += 'strokeColor=none;fillColor=none;' 8731 8732 var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.9, h * 0.9), 'rounded=1;arcSize=3;part=1;'); 8733 item1.vertex = true; 8734 v.insert(item1); 8735 8736 item1.style += getStrokeColor(p, a) + 8737 getFillColor(p, a) + 8738 getOpacity(p, a, item1) + 8739 getShadow(p) + 8740 getStrokeWidth(p); 8741 8742 var item2 = new mxCell('', new mxGeometry(w * 0.1, h * 0.1, w * 0.9, h * 0.9), 'rounded=1;arcSize=3;part=1;'); 8743 item2.vertex = true; 8744 v.insert(item2); 8745 8746 item2.value = convertText(p.Text); 8747 item2.style += getStrokeColor(p, a) + 8748 getFillColor(p, a) + 8749 getOpacity(p, a, item2) + 8750 getShadow(p) + 8751 getStrokeWidth(p) + 8752 getLabelStyle(p, isLastLblHTML); 8753 8754 if (p.Future) 8755 { 8756 item1.style += 'dashed=1;fixDash=1;'; 8757 item2.style += 'dashed=1;fixDash=1;'; 8758 } 8759 } 8760 else 8761 { 8762 v.style += 'rounded=1;arcSize=3;'; 8763 8764 if (p.Future) 8765 { 8766 v.style += 'dashed=1;fixDash=1;'; 8767 } 8768 8769 v.value = convertText(p.Text); 8770 v.style += getStrokeColor(p, a) + 8771 getFillColor(p, a) + 8772 getOpacity(p, a, v) + 8773 getShadow(p) + 8774 getStrokeWidth(p) + 8775 getLabelStyle(p, isLastLblHTML); 8776 } 8777 8778 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 8779 8780 break; 8781 8782 case 'SMHome' : 8783 case 'SMPrint' : 8784 case 'SMSearch' : 8785 case 'SMSettings' : 8786 case 'SMSitemap' : 8787 case 'SMSuccess' : 8788 case 'SMVideo' : 8789 case 'SMAudio' : 8790 case 'SMCalendar' : 8791 case 'SMChart' : 8792 case 'SMCloud' : 8793 case 'SMDocument' : 8794 case 'SMForm' : 8795 case 'SMGame' : 8796 case 'SMUpload' : 8797 8798 var item1 = null; 8799 8800 switch (obj.Class) 8801 { 8802 case 'SMHome' : 8803 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.1, h * 0.8, h * 0.8), 'part=1;shape=mxgraph.office.concepts.home;flipH=1;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8804 break; 8805 case 'SMPrint' : 8806 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.19, h * 0.8, h * 0.62), 'part=1;shape=mxgraph.office.devices.printer;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8807 break; 8808 case 'SMSearch' : 8809 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.1, h * 0.8, h * 0.8), 'part=1;shape=mxgraph.office.concepts.search;flipH=1;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8810 break; 8811 case 'SMSettings' : 8812 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.35, h * 0.15, h * 0.7, h * 0.7), 'part=1;shape=mxgraph.mscae.enterprise.settings;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8813 break; 8814 case 'SMSitemap' : 8815 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.35, h * 0.2, h * 0.7, h * 0.6), 'part=1;shape=mxgraph.office.sites.site_collection;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8816 break; 8817 case 'SMSuccess' : 8818 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.3, h * 0.25, h * 0.6, h * 0.5), 'part=1;shape=mxgraph.mscae.general.checkmark;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8819 break; 8820 case 'SMVideo' : 8821 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.2, h * 0.8, h * 0.6), 'part=1;shape=mxgraph.office.concepts.video_play;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8822 break; 8823 case 'SMAudio' : 8824 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.3, h * 0.2, h * 0.6, h * 0.6), 'part=1;shape=mxgraph.mscae.general.audio;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8825 break; 8826 case 'SMCalendar' : 8827 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.15, h * 0.8, h * 0.7), 'part=1;shape=mxgraph.office.concepts.form;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8828 break; 8829 case 'SMChart' : 8830 var fc = getFillColor(p, a); 8831 8832 if (fc == '') 8833 { 8834 fc = '#ffffff;' 8835 } 8836 else 8837 { 8838 fc = fc.replace('fillColor=', ''); 8839 } 8840 8841 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.35, h * 0.15, h * 0.7, h * 0.7), 'part=1;shape=mxgraph.ios7.icons.pie_chart;fillColor=#e6e6e6;fillOpacity=50;strokeWidth=4;strokeColor=' + fc); 8842 break; 8843 case 'SMCloud' : 8844 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.27, h * 0.8, h * 0.46), 'part=1;shape=mxgraph.networks.cloud;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8845 break; 8846 case 'SMDocument' : 8847 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.25, h * 0.15, h * 0.5, h * 0.7), 'part=1;shape=mxgraph.mscae.enterprise.document;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8848 break; 8849 case 'SMForm' : 8850 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.15, h * 0.8, h * 0.7), 'part=1;shape=mxgraph.office.concepts.form;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8851 break; 8852 case 'SMGame' : 8853 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.2, h * 0.8, h * 0.6), 'part=1;shape=mxgraph.mscae.general.game_controller;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8854 break; 8855 case 'SMUpload' : 8856 item1 = new mxCell('', new mxGeometry(w * 0.5 - h * 0.4, h * 0.2, h * 0.8, h * 0.6), 'part=1;shape=mxgraph.mscae.enterprise.backup_online;fillColor=#e6e6e6;opacity=50;strokeColor=none;'); 8857 break; 8858 } 8859 8860 item1.vertex = true; 8861 v.insert(item1); 8862 8863 item1.value = convertText(p.Text); 8864 item1.style += getLabelStyle(p, isLastLblHTML); 8865 v.style += addAllStyles(v.style, p, a, v); 8866 8867 break; 8868 case 'UMLMultiplicityBlock' : 8869 v.style += 'strokeColor=none;fillColor=none;' 8870 8871 var item1 = new mxCell('', new mxGeometry(w * 0.1, 0, w * 0.9, h * 0.9), 'part=1;'); 8872 item1.vertex = true; 8873 v.insert(item1); 8874 8875 item1.style += addAllStyles(item1.style, p, a, item1); 8876 8877 var item2 = new mxCell('', new mxGeometry(0, h * 0.1, w * 0.9, h * 0.9), 'part=1;'); 8878 item2.vertex = true; 8879 v.insert(item2); 8880 8881 item2.value = convertText(p.Text); 8882 item2.style += 8883 getLabelStyle(p.Text, isLastLblHTML); 8884 item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML); 8885 break; 8886 8887 case 'UMLConstraintBlock' : 8888 8889 var brace1 = new mxCell('', new mxGeometry(0, 0, h * 0.25, h), 'shape=curlyBracket;rounded=1;'); 8890 brace1.vertex = true; 8891 v.insert(brace1); 8892 8893 var brace2 = new mxCell('', new mxGeometry(w - h * 0.25, 0, h * 0.25, h), 'shape=curlyBracket;rounded=1;flipH=1;'); 8894 brace2.vertex = true; 8895 v.insert(brace2); 8896 8897 var label = new mxCell('', new mxGeometry(h * 0.25, 0, w - h * 0.5, h), 'strokeColor=none;fillColor=none;'); 8898 label.vertex = true; 8899 label.value = convertText(p); 8900 v.insert(label); 8901 8902 v.style = "strokeColor=none;fillColor=none;" 8903 v.style += addAllStyles(v.style, p, a, v); 8904 8905 8906 brace1.style += 8907 getOpacity(p, a, brace1); 8908 brace2.style += 8909 getOpacity(p, a, brace2); 8910 label.style += 8911 getFontColor(p, label); 8912 brace1.style += addAllStyles(brace1.style, p, a, brace1); 8913 brace2.style += addAllStyles(brace2.style, p, a, brace2); 8914 label.style += addAllStyles(label.style, p, a, label, isLastLblHTML); 8915 break; 8916 8917 case 'UMLTextBlock' : 8918 v.value = convertText(p.Text); 8919 v.style += 'strokeColor=none;' + 8920 getLabelStyle(p.Text, isLastLblHTML); 8921 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 8922 break; 8923 case 'UMLProvidedInterfaceBlock' : 8924 case 'UMLProvidedInterfaceBlockV2' : 8925 var rotation = getRotation(p, a, v); 8926 p.Rotatio = null; 8927 var allStyle = addAllStyles(v.style, p, a, v, isLastLblHTML); 8928 8929 if (allStyle.indexOf(mxConstants.STYLE_STROKEWIDTH) == -1) 8930 { 8931 allStyle = mxConstants.STYLE_STROKEWIDTH + '=1;' + allStyle; 8932 } 8933 8934 v.style = 'group;dropTarget=0;' + rotation; 8935 var circleW = w * 0.8; 8936 var lineW = w - circleW; 8937 var circle = new mxCell('', new mxGeometry(0.2, 0, circleW, h), 'shape=ellipse;' + allStyle); 8938 circle.vertex = true; 8939 circle.geometry.relative = true; 8940 v.insert(circle); 8941 var line = new mxCell('', new mxGeometry(0, 0.5, lineW, 1), 'line;' + allStyle); 8942 line.geometry.relative = true; 8943 line.vertex = true; 8944 v.insert(line); 8945 break; 8946 case 'UMLComponentBoxBlock' : 8947 case 'UMLComponentBoxBlockV2': 8948 v.value = convertText(p); 8949 v.style = 'html=1;dropTarget=0;' + addAllStyles(v.style, p, a, v, isLastLblHTML); 8950 8951 var icon = new mxCell('', new mxGeometry(1, 0, 15, 15), 'shape=component;jettyWidth=8;jettyHeight=4;'); 8952 icon.geometry.relative = true; 8953 icon.geometry.offset = new mxPoint(-20, 5); 8954 icon.vertex = true; 8955 v.insert(icon); 8956 break; 8957 case 'UMLAssemblyConnectorBlock': 8958 case 'UMLAssemblyConnectorBlockV2': 8959 var rotation = getRotation(p, a, v); 8960 p.Rotatio = null; 8961 var allStyle = addAllStyles(v.style, p, a, v, isLastLblHTML); 8962 8963 if (allStyle.indexOf(mxConstants.STYLE_STROKEWIDTH) == -1) 8964 { 8965 allStyle = mxConstants.STYLE_STROKEWIDTH + '=1;' + allStyle; 8966 } 8967 8968 v.style = 'group;dropTarget=0;' + rotation; 8969 var line1W = w * 0.225; 8970 var line2W = w * 0.1; 8971 var circleW = w - line1W - line2W; 8972 var circle = new mxCell('', new mxGeometry(0.225, 0, circleW, h), 'shape=providedRequiredInterface;verticalLabelPosition=bottom;' + allStyle); 8973 circle.vertex = true; 8974 circle.geometry.relative = true; 8975 v.insert(circle); 8976 var line1 = new mxCell('', new mxGeometry(0, 0.5, line1W, 1), 'line;' + allStyle); 8977 line1.geometry.relative = true; 8978 line1.vertex = true; 8979 v.insert(line1); 8980 var line2 = new mxCell('', new mxGeometry(0.9, 0.5, line2W, 1), 'line;' + allStyle); 8981 line2.geometry.relative = true; 8982 line2.vertex = true; 8983 v.insert(line2); 8984 break; 8985 case 'BPMNActivity' : 8986 v.value = convertText(p.Text); 8987 8988 switch (p.bpmnActivityType) 8989 { 8990 case 1: 8991 v.style += 8992 getLabelStyle(p.Text, isLastLblHTML); 8993 break 8994 case 2: 8995 v.style += 'shape=ext;double=1;' + 8996 getLabelStyle(p.Text, isLastLblHTML); 8997 break 8998 case 3: 8999 v.style += 'shape=ext;dashed=1;dashPattern=2 5;' + 9000 getLabelStyle(p.Text, isLastLblHTML); 9001 break 9002 case 4: 9003 v.style += 'shape=ext;strokeWidth=2;' + 9004 getLabelStyle(p.Text, isLastLblHTML); 9005 break 9006 } 9007 9008 if (p.bpmnTaskType != 0) 9009 { 9010 switch (p.bpmnTaskType) 9011 { 9012 case 1: 9013 var item1 = new mxCell('', new mxGeometry(0, 0, 19, 12), 'shape=message;'); 9014 item1.geometry.offset = new mxPoint(4, 7); 9015 break; 9016 case 2: 9017 var item1 = new mxCell('', new mxGeometry(0, 0, 19, 12), 'shape=message;'); 9018 item1.geometry.offset = new mxPoint(4, 7); 9019 break; 9020 case 3: 9021 var item1 = new mxCell('', new mxGeometry(0, 0, 15, 15), 'shape=mxgraph.bpmn.user_task;'); 9022 item1.geometry.offset = new mxPoint(4, 5); 9023 break; 9024 case 4: 9025 var item1 = new mxCell('', new mxGeometry(0, 0, 15, 10), 'shape=mxgraph.bpmn.manual_task;'); 9026 item1.geometry.offset = new mxPoint(4, 7); 9027 break; 9028 case 5: 9029 var item1 = new mxCell('', new mxGeometry(0, 0, 18, 13), 'shape=mxgraph.bpmn.business_rule_task;'); 9030 item1.geometry.offset = new mxPoint(4, 7); 9031 break; 9032 case 6: 9033 var item1 = new mxCell('', new mxGeometry(0, 0, 15, 15), 'shape=mxgraph.bpmn.service_task;'); 9034 item1.geometry.offset = new mxPoint(4, 5); 9035 break; 9036 case 7: 9037 var item1 = new mxCell('', new mxGeometry(0, 0, 15, 15), 'shape=mxgraph.bpmn.script_task;'); 9038 item1.geometry.offset = new mxPoint(4, 5); 9039 break; 9040 } 9041 9042 if (p.bpmnTaskType == 1) 9043 { 9044 var sc = getFillColor(p, a); 9045 var fc = getStrokeColor(p, a); 9046 9047 fc = fc.replace('strokeColor', 'fillColor'); 9048 sc = sc.replace('fillColor', 'strokeColor'); 9049 9050 if (fc == '') 9051 { 9052 fc = 'fillColor=#000000;' 9053 } 9054 9055 if (sc == '') 9056 { 9057 sc = 'strokeColor=#ffffff;' 9058 } 9059 9060 item1.style += sc + fc + 'part=1;'; 9061 9062 } 9063 else 9064 { 9065 item1.style += getFillColor(p, a) + getStrokeColor(p, a) + 'part=1;'; 9066 } 9067 9068 item1.geometry.relative = true; 9069 item1.vertex = true; 9070 v.insert(item1); 9071 } 9072 9073 var numIcons = 0; 9074 9075 if (p.bpmnActivityMarker1 != 0) 9076 { 9077 numIcons++; 9078 } 9079 9080 if (p.bpmnActivityMarker2 != 0) 9081 { 9082 numIcons++; 9083 } 9084 9085 var iconX = 0; 9086 var iconY = h - 20; 9087 9088 if (numIcons == 1) 9089 { 9090 iconX = -7.5; 9091 } 9092 else if (numIcons == 2) 9093 { 9094 iconX = -19; 9095 } 9096 9097 if (p.bpmnActivityMarker1 != 0) 9098 { 9099 switch (p.bpmnActivityMarker1) 9100 { 9101 case 1: 9102 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=plus;part=1;'); 9103 item1.geometry.offset = new mxPoint(iconX, -20); 9104 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9105 break; 9106 case 2: 9107 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=mxgraph.bpmn.loop;part=1;'); 9108 item1.geometry.offset = new mxPoint(iconX, -20); 9109 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9110 break; 9111 case 3: 9112 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;part=1;'); 9113 item1.geometry.offset = new mxPoint(iconX, -20); 9114 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9115 break; 9116 case 4: 9117 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;direction=south;part=1;'); 9118 item1.geometry.offset = new mxPoint(iconX, -20); 9119 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9120 break; 9121 case 5: 9122 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 10), 'shape=mxgraph.bpmn.ad_hoc;strokeColor=none;flipH=1;part=1;'); 9123 item1.geometry.offset = new mxPoint(iconX, -17); 9124 var fc = getStrokeColor(p, a); 9125 fc = fc.replace('strokeColor', 'fillColor'); 9126 9127 if (fc == '') 9128 { 9129 fc = 'fillColor=#000000;' 9130 } 9131 9132 item1.style += fc; 9133 break; 9134 case 6: 9135 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 11), 'shape=mxgraph.bpmn.compensation;part=1;'); 9136 item1.geometry.offset = new mxPoint(iconX, -18); 9137 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9138 break; 9139 } 9140 9141 item1.geometry.relative = true; 9142 item1.vertex = true; 9143 v.insert(item1); 9144 } 9145 9146 if (numIcons == 2) 9147 { 9148 iconX = 5; 9149 } 9150 9151 if (p.bpmnActivityMarker2 != 0) 9152 { 9153 switch (p.bpmnActivityMarker2) 9154 { 9155 case 1: 9156 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=plus;part=1;'); 9157 item1.geometry.offset = new mxPoint(iconX, -20); 9158 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9159 break; 9160 case 2: 9161 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=mxgraph.bpmn.loop;part=1;'); 9162 item1.geometry.offset = new mxPoint(iconX, -20); 9163 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9164 break; 9165 case 3: 9166 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;part=1;'); 9167 item1.geometry.offset = new mxPoint(iconX, -20); 9168 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9169 break; 9170 case 4: 9171 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;direction=south;part=1;'); 9172 item1.geometry.offset = new mxPoint(iconX, -20); 9173 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9174 break; 9175 case 5: 9176 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 10), 'shape=mxgraph.bpmn.ad_hoc;strokeColor=none;flipH=1;part=1;'); 9177 item1.geometry.offset = new mxPoint(iconX, -17); 9178 var fc = getStrokeColor(p, a); 9179 fc = fc.replace('strokeColor', 'fillColor'); 9180 9181 if (fc == '') 9182 { 9183 fc = 'fillColor=#000000;' 9184 } 9185 9186 item1.style += fc; 9187 break; 9188 case 6: 9189 var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 11), 'shape=mxgraph.bpmn.compensation;part=1;'); 9190 item1.geometry.offset = new mxPoint(iconX, -18); 9191 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9192 break; 9193 } 9194 9195 item1.geometry.relative = true; 9196 item1.vertex = true; 9197 v.insert(item1); 9198 } 9199 9200 v.style += addAllStyles(v.style, p, a, v); 9201 9202 break; 9203 9204 case 'BPMNEvent' : 9205 v.style += 'shape=mxgraph.bpmn.shape;verticalLabelPosition=bottom;verticalAlign=top;'; 9206 9207 v.value = convertText(p.Text); 9208 9209 if (p.bpmnDashed == true) 9210 { 9211 switch (p.bpmnEventGroup) 9212 { 9213 case 0: 9214 v.style += 'outline=eventNonint;'; 9215 break; 9216 case 1: 9217 v.style += 'outline=boundNonint;'; 9218 break; 9219 case 2: 9220 v.style += 'outline=end;'; 9221 break; 9222 } 9223 } 9224 else 9225 { 9226 switch (p.bpmnEventGroup) 9227 { 9228 case 0: 9229 v.style += 'outline=standard;'; 9230 break; 9231 case 1: 9232 v.style += 'outline=throwing;'; 9233 break; 9234 case 2: 9235 v.style += 'outline=end;'; 9236 break; 9237 } 9238 } 9239 9240 switch(p.bpmnEventType) 9241 { 9242 case 1: 9243 v.style += 'symbol=message;'; 9244 break; 9245 case 2: 9246 v.style += 'symbol=timer;'; 9247 break; 9248 case 3: 9249 v.style += 'symbol=escalation;'; 9250 break; 9251 case 4: 9252 v.style += 'symbol=conditional;'; 9253 break; 9254 case 5: 9255 v.style += 'symbol=link;'; 9256 break; 9257 case 6: 9258 v.style += 'symbol=error;'; 9259 break; 9260 case 7: 9261 v.style += 'symbol=cancel;'; 9262 break; 9263 case 8: 9264 v.style += 'symbol=compensation;'; 9265 break; 9266 case 9: 9267 v.style += 'symbol=signal;'; 9268 break; 9269 case 10: 9270 v.style += 'symbol=multiple;'; 9271 break; 9272 case 11: 9273 v.style += 'symbol=parallelMultiple;'; 9274 break; 9275 case 12: 9276 v.style += 'symbol=terminate;'; 9277 break; 9278 9279 } 9280 9281 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9282 9283 break; 9284 case 'BPMNChoreography' : 9285 try 9286 { 9287 var st = getColor(p.FillColor); 9288 var darkerClr = getDarkerClr(st, 0.75); 9289 9290 var fz = getFontSize(p.Name).match(/\d+/); 9291 var th = Math.max(mxUtils.getSizeForString(p.Name.t, fz? fz[0] : defaultFontSize, null, w - 10).height, 24); 9292 st = 'swimlaneFillColor=' + darkerClr + ';' 9293 9294 v.value = convertText(p.Name); 9295 v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;' + st + 9296 'startSize=' + th + ';spacingLeft=3;spacingRight=3;fontStyle=0;' + 9297 getLabelStyle(p.Name, isLastLblHTML); 9298 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9299 9300 var curY = th; 9301 var fz = getFontSize(p.TaskName).match(/\d+/); 9302 var curH = p.TaskHeight? p.TaskHeight * scale : Math.max(mxUtils.getSizeForString(p.TaskName.t, fz? fz[0] : defaultFontSize, null, w - 10).height + 15, 24); 9303 var task = new mxCell('', new mxGeometry(0, curY, w, curH), 'part=1;html=1;resizeHeight=0;spacingTop=-1;spacingLeft=3;spacingRight=3;'); 9304 task.value = convertText(p.TaskName); 9305 task.vertex = true; 9306 v.insert(task); 9307 task.style += getLabelStyle(p.TaskName, isLastLblHTML); 9308 task.style += addAllStyles(task.style, p, a, task, isLastLblHTML); 9309 curY += curH; 9310 9311 var item = []; 9312 9313 for (var i = 0; i < p.Fields; i++) 9314 { 9315 var pTxt = p['Participant' + (i + 1)]; 9316 var fz = getFontSize(pTxt).match(/\d+/); 9317 var curH = Math.max(mxUtils.getSizeForString(pTxt.t, fz? fz[0] : defaultFontSize, null, w - 10).height, 24); 9318 item[i] = new mxCell('', new mxGeometry(0, curY, w, curH), 'part=1;html=1;resizeHeight=0;fillColor=none;spacingTop=-1;spacingLeft=3;spacingRight=3;'); 9319 curY += curH; 9320 item[i].vertex = true; 9321 v.insert(item[i]); 9322 item[i].style += getLabelStyle(pTxt, isLastLblHTML); 9323 item[i].style += addAllStyles(item[i].style, p, a, item[i], isLastLblHTML); 9324 item[i].value = convertText(pTxt); 9325 } 9326 /* 9327 TODO: Add support for the following 9328 "bpmnChoreographyType": 0, //Plus sign 9329 "initiatingMessage": 0, //Envelop before 9330 "responseMessage": 0, //Envelop after 9331 */ 9332 } 9333 catch(e) 9334 { 9335 //Ignore 9336 console.log(e); 9337 } 9338 break; 9339 case 'BPMNConversation' : 9340 v.style += 'shape=hexagon;perimeter=hexagonPerimeter2;'; 9341 9342 v.value = convertText(p.Text); 9343 9344 if (p.bpmnConversationType == 0) 9345 { 9346 v.style += getStrokeWidth(p); 9347 } 9348 else 9349 { 9350 v.style += 'strokeWidth=2;'; 9351 } 9352 9353 if (p.bpmnIsSubConversation) 9354 { 9355 var item1 = new mxCell('', new mxGeometry(0.5, 1, 12, 12), 'shape=plus;part=1;'); 9356 item1.geometry.offset = new mxPoint(-6, -17); 9357 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9358 item1.geometry.relative = true; 9359 item1.vertex = true; 9360 v.insert(item1); 9361 } 9362 9363 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9364 9365 break; 9366 case 'BPMNGateway' : 9367 v.style += 'shape=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;verticalLabelPosition=bottom;verticalAlign=top;'; 9368 9369 switch (p.bpmnGatewayType) 9370 { 9371 case 0: 9372 v.style += 'outline=none;symbol=general;'; 9373 break; 9374 case 1: 9375 v.style += 'outline=none;symbol=exclusiveGw;'; 9376 break; 9377 case 2: 9378 v.style += 'outline=catching;symbol=multiple;'; 9379 break; 9380 case 3: 9381 v.style += 'outline=none;symbol=parallelGw;'; 9382 break; 9383 case 4: 9384 v.style += 'outline=end;symbol=general;'; 9385 break; 9386 case 5: 9387 v.style += 'outline=standard;symbol=multiple;'; 9388 break; 9389 case 6: 9390 v.style += 'outline=none;symbol=complexGw;'; 9391 break; 9392 case 7: 9393 v.style += 'outline=standard;symbol=parallelMultiple;'; 9394 break; 9395 } 9396 9397 v.style += addAllStyles(v.style, p, a, v); 9398 v.value = convertText(p.Text); 9399 v.style += getLabelStyle(p, isLastLblHTML); 9400 break; 9401 case 'BPMNData' : 9402 v.style += 'shape=note;size=14;'; 9403 9404 switch (p.bpmnDataType) 9405 { 9406 case 0: 9407 v.value = convertText(p.Text); 9408 9409 if (p.Text && !p.Text.t) 9410 { 9411 p.Text.t = ' '; //Such that Title is catched and added later! 9412 } 9413 break; 9414 case 1: 9415 var item1 = new mxCell('', new mxGeometry(0.5, 1, 12, 10), 'shape=parallelMarker;part=1;'); 9416 item1.geometry.offset = new mxPoint(-6, -15); 9417 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9418 item1.geometry.relative = true; 9419 item1.vertex = true; 9420 v.insert(item1); 9421 break; 9422 case 2: 9423 var item1 = new mxCell('', new mxGeometry(0, 0, 12, 10), 'shape=singleArrow;part=1;arrowWidth=0.4;arrowSize=0.4;'); 9424 item1.geometry.offset = new mxPoint(3, 3); 9425 item1.style += getFillColor(p, a) + getStrokeColor(p, a); 9426 item1.geometry.relative = true; 9427 item1.vertex = true; 9428 v.insert(item1); 9429 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 9430 9431 var text1 = new mxCell('', new mxGeometry(0, 0, w, 20), 'strokeColor=none;fillColor=none;'); 9432 text1.geometry.offset = new mxPoint(0, 14); 9433 text1.geometry.relative = true; 9434 text1.vertex = true; 9435 v.insert(text1); 9436 text1.value = convertText(p.Text); 9437 text1.style += getLabelStyle(p, isLastLblHTML); 9438 break; 9439 case 3: 9440 var item1 = new mxCell('', new mxGeometry(0, 0, 12, 10), 'shape=singleArrow;part=1;arrowWidth=0.4;arrowSize=0.4;'); 9441 item1.geometry.offset = new mxPoint(3, 3); 9442 item1.style += getStrokeColor(p, a); 9443 item1.geometry.relative = true; 9444 item1.vertex = true; 9445 v.insert(item1); 9446 9447 var fc = getStrokeColor(p, a); 9448 fc = fc.replace('strokeColor', 'fillColor'); 9449 9450 if (fc == '') 9451 { 9452 fc = 'fillColor=#000000;' 9453 } 9454 9455 item1.style += fc; 9456 9457 var text1 = new mxCell('', new mxGeometry(0, 0, w, 20), 'strokeColor=none;fillColor=none;'); 9458 text1.geometry.offset = new mxPoint(0, 14); 9459 text1.geometry.relative = true; 9460 text1.vertex = true; 9461 v.insert(text1); 9462 text1.value = convertText(p.Text); 9463 text1.style += getLabelStyle(p, isLastLblHTML); 9464 break; 9465 } 9466 9467 v.style += addAllStyles(v.style, p, a, v); 9468 9469 break; 9470 case 'BPMNBlackPool' : 9471 v.value = convertText(p.Text); 9472 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9473 9474 var item1 = new mxCell('', new mxGeometry(0, 0, w, h), 'fillColor=#000000;strokeColor=none;opacity=30;'); 9475 item1.vertex = true; 9476 v.insert(item1); 9477 9478 break; 9479 9480 case 'DFDExternalEntityBlock' : 9481 9482 v.style += 'strokeColor=none;fillColor=none;'; 9483 v.style += addAllStyles(v.style, p, a, v); 9484 9485 var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.95, h * 0.95), 'part=1;'); 9486 item1.vertex = true; 9487 v.insert(item1); 9488 9489 item1.style += addAllStyles(item1.style, p, a, item1); 9490 9491 var item2 = new mxCell('', new mxGeometry(w * 0.05, h * 0.05, w * 0.95, h * 0.95), 'part=1;'); 9492 item2.vertex = true; 9493 v.insert(item2); 9494 item2.value = convertText(p.Text); 9495 item2.style += 9496 getLabelStyle(p.Text, isLastLblHTML); 9497 item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML); 9498 9499 break; 9500 9501 case 'GSDFDDataStoreBlock' : 9502 v.value = convertText(p.Text); 9503 v.style += 'shape=partialRectangle;right=0;' + 9504 getLabelStyle(p.Text, isLastLblHTML); 9505 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9506 9507 var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.2, h), 'part=1;'); 9508 item1.vertex = true; 9509 v.insert(item1); 9510 9511 item1.value = convertText(p.Number); 9512 item1.style += 9513 getLabelStyle(p.Number, isLastLblHTML); 9514 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9515 9516 break; 9517 case 'OrgBlock' : 9518 var lbls = ''; 9519 9520 for (var key in p.Active) 9521 { 9522 if (key == 'Photo' || !p.Active[key]) continue; 9523 9524 lbls += convertText(p[key], true); 9525 } 9526 9527 if (p.Active.Photo) 9528 { 9529 var imgSize = w * 0.4; 9530 v.style += 'spacingLeft=' + imgSize + ';imageWidth=' + (imgSize - 4) + ';imageHeight=' + (imgSize - 4) + 9531 ';imageAlign=left;imageVerticalAlign=top;image=' + mapImgUrl(p.Photo); 9532 } 9533 9534 v.value = lbls; 9535 v.style += addAllStyles(v.style, p, a, v, true); 9536 9537 break; 9538 case 'DefaultTableBlock' : 9539 try 9540 { 9541 var rowsNum = p.RowHeights.length; 9542 var colsNum = p.ColWidths.length; 9543 var rowHs = [], colWs = []; 9544 9545 for (var i = 0; i < rowsNum; i++) 9546 { 9547 rowHs[i] = p.RowHeights[i] * scale; 9548 } 9549 9550 for (var j = 0; j < colsNum; j++) 9551 { 9552 colWs[j] = p.ColWidths[j] * scale; 9553 } 9554 9555 //TODO Apply table layout when it's ready 9556 v.style = 'group;dropTarget=0;'; 9557 9558 var bandedClr1 = p['BandedColor1']; 9559 var bandedClr2 = p['BandedColor2']; 9560 var bandedRows = p['BandedRows']; 9561 var bandedCols = p['BandedCols']; 9562 var hideH = p['HideH']; 9563 var hideV = p['HideV']; 9564 var tblVAlign = p['TextVAlign']; 9565 var tblFillClr = p['FillColor']; 9566 var tblStrokeStyle = p['StrokeStyle']; 9567 delete p['StrokeStyle']; 9568 var tblFillOp = getOpacity2(tblFillClr, 'fillOpacity'); 9569 var tblLnClr = p['LineColor']; 9570 var tblLnOp = getOpacity2(tblLnClr, 'strokeOpacity'); 9571 var y = 0; 9572 var skipCells = {}; 9573 9574 for (var i = 0; i < rowsNum; i++) 9575 { 9576 var x = 0; 9577 var h = rowHs[i]; 9578 9579 for (var j = 0; j < colsNum; j++) 9580 { 9581 var cellIndex = i + ',' + j; 9582 9583 if (skipCells[cellIndex]) 9584 { 9585 x += colWs[j]; 9586 continue; 9587 } 9588 9589 var fillClr = p['CellFill_' + cellIndex]; 9590 var noBand = p['NoBand_' + cellIndex]; 9591 var spans = p['CellSize_' + cellIndex]; 9592 var cellLbl = p['Cell_' + cellIndex]; 9593 var vAlign = p['Cell_' + cellIndex + '_VAlign']; 9594 var txtRot = p['Cell_' + cellIndex + '_TRotation']; 9595 var borderWH = p['CellBorderWidthH_' + cellIndex]; 9596 var borderClrH = p['CellBorderColorH_' + cellIndex]; 9597 var borderStyleH = p['CellBorderStrokeStyleH_' + cellIndex]; 9598 var borderWV = p['CellBorderWidthV_' + cellIndex]; 9599 var borderClrV = p['CellBorderColorV_' + cellIndex]; 9600 var borderStyleV = p['CellBorderStrokeStyleV_' + cellIndex]; 9601 var borderClr = hideH? borderClrV : borderClrH; //TODO Border color, width & opacity in more complex especially with different border color for horizontal and vertical 9602 var lnOp = getOpacity2(borderClr, 'strokeOpacity'); 9603 var borderW = hideH? borderWV : borderWH; 9604 var borderStyle = hideH? borderStyleV : borderStyleH; 9605 9606 fillClr = bandedRows && !noBand? (i % 2 == 0? bandedClr1: (bandedCols && !noBand? 9607 (j % 2 == 0? bandedClr1 : bandedClr2) : bandedClr2)) : (bandedCols && !noBand? 9608 (j % 2 == 0? bandedClr1 : bandedClr2) : fillClr); 9609 var fillOp = getOpacity2(fillClr, 'fillOpacity') || tblFillOp; 9610 9611 var w = colWs[j]; 9612 var ch = h; 9613 var cw = w; 9614 9615 //Spans 9616 for (var k = i + 1; k < i + spans.h; k++) 9617 { 9618 if (rowHs[k] == null) continue; 9619 9620 ch += rowHs[k]; 9621 skipCells[k + ',' + j] = true; 9622 9623 for (var l = j + 1; l < j + spans.w; l++) 9624 { 9625 skipCells[k + ',' + l] = true; 9626 } 9627 } 9628 9629 for (var k = j + 1; k < j + spans.w; k++) 9630 { 9631 if (colWs[k] == null) continue; 9632 9633 cw += colWs[k]; 9634 skipCells[i + ',' + k] = true; 9635 9636 for (var l = i + 1; l < i + spans.h; l++) 9637 { 9638 skipCells[l + ',' + k] = true; 9639 } 9640 } 9641 9642 var cell = new mxCell('', new mxGeometry(x, y, cw, ch), 'shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;' 9643 + (hideV? 'left=0;right=0;' : '') + (hideH? 'top=0;bottom=0;' : '') 9644 + getFillColor({FillColor: fillClr || tblFillClr}) 9645 + createStyle(mxConstants.STYLE_STROKECOLOR, getColor(borderClr), getColor(tblLnClr)) 9646 + (borderW != null ? createStyle(mxConstants.STYLE_STROKEWIDTH, Math.round(parseFloat(borderW) * scale), '1') : '') 9647 + (lnOp? lnOp : tblLnOp) 9648 + fillOp 9649 + 'verticalAlign=' + (vAlign? vAlign : (tblVAlign? tblVAlign : 'middle')) + ';' 9650 + getStrokeStyle({StrokeStyle : borderStyle? borderStyle : (tblStrokeStyle? tblStrokeStyle : 'solid')}) 9651 + (txtRot? 'horizontal=0;' : '')); 9652 9653 cell.vertex = true; 9654 cell.value = convertText(cellLbl); 9655 cell.style += 9656 addAllStyles(cell.style, p, a, cell, isLastLblHTML) + 9657 (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 9658 getFontSize(cellLbl) + 9659 getFontColor(cellLbl) + 9660 getFontStyle(cellLbl) + 9661 getTextAlignment(cellLbl, cell) + 9662 getTextLeftSpacing(cellLbl) + 9663 getTextRightSpacing(cellLbl) + 9664 getTextTopSpacing(cellLbl) + 9665 getTextBottomSpacing(cellLbl) 9666 ) + 9667 getTextGlobalSpacing(cellLbl) + 9668 getTextVerticalAlignment(cellLbl); 9669 v.insert(cell); 9670 x += w; 9671 } 9672 9673 y += h; 9674 } 9675 } 9676 catch(e) 9677 { 9678 console.log(e); 9679 } 9680 break; 9681 case 'VSMDedicatedProcessBlock' : 9682 case 'VSMProductionControlBlock' : 9683 v.style += 'shape=mxgraph.lean_mapping.manufacturing_process;spacingTop=15;'; 9684 9685 if (obj.Class == 'VSMDedicatedProcessBlock') 9686 { 9687 v.value = convertText(p.Text); 9688 } 9689 else if (obj.Class == 'VSMProductionControlBlock') 9690 { 9691 v.value = convertText(p.Resources); 9692 } 9693 9694 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9695 9696 if (obj.Class == 'VSMDedicatedProcessBlock') 9697 { 9698 var item1 = new mxCell('', new mxGeometry(0, 1, 11, 9), 'part=1;shape=mxgraph.lean_mapping.operator;'); 9699 item1.geometry.relative = true; 9700 item1.geometry.offset = new mxPoint(4, -13); 9701 item1.vertex = true; 9702 v.insert(item1); 9703 9704 item1.style += addAllStyles(item1.style, p, a, item1); 9705 } 9706 9707 var text1 = new mxCell('', new mxGeometry(0, 0, w, 15), 'strokeColor=none;fillColor=none;part=1;'); 9708 text1.vertex = true; 9709 v.insert(text1); 9710 text1.value = convertText(p.Title); 9711 text1.style += getLabelStyle(p.Title, isLastLblHTML); 9712 p.Text = null; 9713 break; 9714 9715 case 'VSMSharedProcessBlock' : 9716 v.style += 'shape=mxgraph.lean_mapping.manufacturing_process_shared;spacingTop=-5;verticalAlign=top;'; 9717 9718 v.value = convertText(p.Text); 9719 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9720 9721 var text1 = new mxCell('', new mxGeometry(w * 0.1, h * 0.3, w * 0.8, h * 0.6), 'part=1;'); 9722 text1.vertex = true; 9723 v.insert(text1); 9724 text1.value = convertText(p.Resource); 9725 text1.style += 9726 getLabelStyle(p.Resource, isLastLblHTML); 9727 text1.style += addAllStyles(text1.style, p, a, text1, isLastLblHTML); 9728 9729 break; 9730 9731 case 'VSMWorkcellBlock' : 9732 v.style += 'shape=mxgraph.lean_mapping.work_cell;verticalAlign=top;spacingTop=-2;'; 9733 v.value = convertText(p.Text); 9734 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9735 9736 break; 9737 case 'VSMSafetyBufferStockBlock' : 9738 case 'VSMDatacellBlock' : 9739 v.style += 'strokeColor=none;fillColor=none;'; 9740 v.style += addAllStyles(v.style, p, a, v); 9741 9742 var itemFullH = h; 9743 9744 var numItems = parseInt(p.Cells); 9745 9746 var st = addAllStyles('part=1;', p, a, v); 9747 9748 if (numItems > 0) 9749 { 9750 itemFullH = itemFullH / numItems; 9751 } 9752 9753 var item = new Array(); 9754 var line = new Array(); 9755 9756 for (var i = 1; i <= numItems; i++) 9757 { 9758 item[i] = new mxCell('', new mxGeometry(0, (i - 1) * itemFullH, w, itemFullH), st); 9759 item[i].vertex = true; 9760 v.insert(item[i]); 9761 item[i].value = convertText(p["cell_" + i]); 9762 item[i].style += getLabelStyle(p["cell_" + i], isLastLblHTML); 9763 } 9764 9765 break; 9766 case 'VSMInventoryBlock' : 9767 v.style += 'shape=mxgraph.lean_mapping.inventory_box;verticalLabelPosition=bottom;verticalAlign=top;'; 9768 v.value = convertText(p.Text); 9769 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9770 9771 break; 9772 case 'VSMSupermarketBlock' : 9773 v.style += 'strokeColor=none;'; 9774 v.style += addAllStyles(v.style, p, a, v); 9775 9776 var itemFullH = h; 9777 9778 var numItems = parseInt(p.Cells); 9779 9780 var st = addAllStyles('part=1;fillColor=none;', p, a, v); 9781 9782 if (numItems > 0) 9783 { 9784 itemFullH = itemFullH / numItems; 9785 } 9786 9787 var item = new Array(); 9788 var text = new Array(); 9789 9790 for (var i = 1; i <= numItems; i++) 9791 { 9792 item[i] = new mxCell('', new mxGeometry(w * 0.5, (i - 1) * itemFullH, w * 0.5, itemFullH), 'shape=partialRectangle;left=0;' + st); 9793 item[i].vertex = true; 9794 v.insert(item[i]); 9795 9796 text[i] = new mxCell('', new mxGeometry(0, (i - 1) * itemFullH, w, itemFullH), 'strokeColor=none;fillColor=none;part=1;'); 9797 text[i].vertex = true; 9798 v.insert(text[i]); 9799 text[i].value = convertText(p["cell_" + i]); 9800 text[i].style += getLabelStyle(p["cell_" + i], isLastLblHTML); 9801 } 9802 9803 break; 9804 case 'VSMFIFOLaneBlock' : 9805 v.style += 'shape=mxgraph.lean_mapping.fifo_sequence_flow;fontStyle=0;fontSize=18'; 9806 v.style += addAllStyles(v.style, p, a, v); 9807 v.value = 'FIFO'; 9808 break; 9809 case 'VSMGoSeeProductionBlock' : 9810 v.style += 'shape=ellipse;perimeter=ellipsePerimeter;'; 9811 v.value = convertText(p.Text); 9812 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9813 9814 var item1 = new mxCell('', new mxGeometry(w * 0.17, h * 0.2, 13, 6), 'shape=mxgraph.lean_mapping.go_see_production_scheduling;flipH=1;part=1;whiteSpace=wrap;html=1;'); 9815 item1.vertex = true; 9816 v.insert(item1); 9817 item1.style += addAllStyles(item1.style, p, a, item1); 9818 9819 break; 9820 case 'VSMProductionKanbanBatchBlock' : 9821 v.style += 'strokeColor=none;fillColor=none;' 9822 9823 var st = 'shape=card;size=18;flipH=1;part=1;'; 9824 9825 var item1 = new mxCell('', new mxGeometry(w * 0.1, 0, w * 0.9, h * 0.8), 'shape=mxgraph.lean_mapping.go_see_production_scheduling;flipH=1;part=1;' + st); 9826 item1.vertex = true; 9827 v.insert(item1); 9828 item1.style += addAllStyles(item1.style, p, a, item1); 9829 9830 var item2 = new mxCell('', new mxGeometry(w * 0.05, h * 0.1, w * 0.9, h * 0.8), 'shape=mxgraph.lean_mapping.go_see_production_scheduling;flipH=1;part=1;' + st); 9831 item2.vertex = true; 9832 v.insert(item2); 9833 item2.style += addAllStyles(item2.style, p, a, item2); 9834 9835 var item3 = new mxCell('', new mxGeometry(0, h * 0.2, w * 0.9, h * 0.8), 'shape=mxgraph.lean_mapping.go_see_production_scheduling;flipH=1;part=1;whiteSpace=wrap;html=1;spacing=2;' + st); 9836 item3.vertex = true; 9837 v.insert(item3); 9838 item3.value = convertText(p.Text); 9839 item3.style += addAllStyles(item3.style, p, a, item3, isLastLblHTML); 9840 9841 break; 9842 case 'VSMElectronicInformationArrow' : 9843 v.style = 'group;'; 9844 v.value = convertText(p.Title); 9845 v.style += getLabelStyle(p.Title, isLastLblHTML); 9846 var edge = new mxCell('', new mxGeometry(0, 0, w, h), 'shape=mxgraph.lean_mapping.electronic_info_flow_edge;html=1;entryX=0;entryY=1;exitX=1;exitY=0;'); 9847 edge.edge = true; 9848 edge.geometry.relative = 1; 9849 graph.addCell(edge, v, null, v, v); 9850 break; 9851 case 'AWSRoundedRectangleContainerBlock2' : 9852 v.style += 'strokeColor=none;fillColor=none;'; 9853 9854 if (p.Spotfleet) 9855 { 9856 var item1 = new mxCell('', new mxGeometry(0, 0, w, h - 20), 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'); 9857 item1.geometry.offset = new mxPoint(0, 20); 9858 item1.geometry.relative = true; 9859 item1.vertex = true; 9860 v.insert(item1); 9861 item1.value = convertText(p.Title); 9862 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9863 9864 var item2 = new mxCell('', new mxGeometry(0, 0, 35, 40), 'strokeColor=none;shape=mxgraph.aws3.spot_instance;fillColor=#f58536;'); 9865 item2.geometry.relative = true; 9866 item2.geometry.offset = new mxPoint(30, 0); 9867 item2.vertex = true; 9868 v.insert(item2); 9869 } 9870 else if (p.Beanstalk) 9871 { 9872 var item1 = new mxCell('', new mxGeometry(0, 0, w, h - 20), 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'); 9873 item1.geometry.offset = new mxPoint(0, 20); 9874 item1.geometry.relative = true; 9875 item1.vertex = true; 9876 v.insert(item1); 9877 item1.value = convertText(p.Title); 9878 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9879 9880 var item2 = new mxCell('', new mxGeometry(0, 0, 30, 40), 'strokeColor=none;shape=mxgraph.aws3.elastic_beanstalk;fillColor=#759C3E;'); 9881 item2.geometry.relative = true; 9882 item2.geometry.offset = new mxPoint(30, 0); 9883 item2.vertex = true; 9884 v.insert(item2); 9885 } 9886 else if (p.EC2) 9887 { 9888 var item1 = new mxCell('', new mxGeometry(0, 0, w, h - 20), 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'); 9889 item1.geometry.offset = new mxPoint(0, 20); 9890 item1.geometry.relative = true; 9891 item1.vertex = true; 9892 v.insert(item1); 9893 item1.value = convertText(p.Title); 9894 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9895 9896 var item2 = new mxCell('', new mxGeometry(0, 0, 32, 40), 'strokeColor=none;shape=mxgraph.aws3.ec2;fillColor=#F58534;'); 9897 item2.geometry.relative = true; 9898 item2.geometry.offset = new mxPoint(30, 0); 9899 item2.vertex = true; 9900 v.insert(item2); 9901 } 9902 else if (p.Subnet) 9903 { 9904 var item1 = new mxCell('', new mxGeometry(0, 0, w, h - 20), 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'); 9905 item1.geometry.offset = new mxPoint(0, 20); 9906 item1.geometry.relative = true; 9907 item1.vertex = true; 9908 v.insert(item1); 9909 item1.value = convertText(p.Title); 9910 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9911 9912 var item2 = new mxCell('', new mxGeometry(0, 0, 32, 40), 'strokeColor=none;shape=mxgraph.aws3.permissions;fillColor=#146EB4;'); 9913 item2.geometry.relative = true; 9914 item2.geometry.offset = new mxPoint(30, 0); 9915 item2.vertex = true; 9916 v.insert(item2); 9917 } 9918 else if (p.VPC) 9919 { 9920 var item1 = new mxCell('', new mxGeometry(0, 0, w, h - 20), 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'); 9921 item1.geometry.offset = new mxPoint(0, 20); 9922 item1.geometry.relative = true; 9923 item1.vertex = true; 9924 v.insert(item1); 9925 item1.value = convertText(p.Title); 9926 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9927 9928 var item2 = new mxCell('', new mxGeometry(0, 0, 60, 40), 'strokeColor=none;shape=mxgraph.aws3.virtual_private_cloud;fillColor=#146EB4;'); 9929 item2.geometry.relative = true; 9930 item2.geometry.offset = new mxPoint(30, 0); 9931 item2.vertex = true; 9932 v.insert(item2); 9933 } 9934 else if (p.AWS) 9935 { 9936 var item1 = new mxCell('', new mxGeometry(0, 0, w, h - 20), 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'); 9937 item1.geometry.offset = new mxPoint(0, 20); 9938 item1.geometry.relative = true; 9939 item1.vertex = true; 9940 v.insert(item1); 9941 item1.value = convertText(p.Title); 9942 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9943 9944 var item2 = new mxCell('', new mxGeometry(0, 0, 60, 40), 'strokeColor=none;shape=mxgraph.aws3.cloud;fillColor=#F58534;'); 9945 item2.geometry.relative = true; 9946 item2.geometry.offset = new mxPoint(30, 0); 9947 item2.vertex = true; 9948 v.insert(item2); 9949 } 9950 else if (p.Corporate) 9951 { 9952 var item1 = new mxCell('', new mxGeometry(0, 0, w, h - 20), 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'); 9953 item1.geometry.offset = new mxPoint(0, 20); 9954 item1.geometry.relative = true; 9955 item1.vertex = true; 9956 v.insert(item1); 9957 item1.value = convertText(p.Title); 9958 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 9959 9960 var item2 = new mxCell('', new mxGeometry(0, 0, 25, 40), 'strokeColor=none;shape=mxgraph.aws3.corporate_data_center;fillColor=#7D7C7C;'); 9961 item2.geometry.relative = true; 9962 item2.geometry.offset = new mxPoint(30, 0); 9963 item2.vertex = true; 9964 v.insert(item2); 9965 } 9966 else 9967 { 9968 v.style = 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;'; 9969 v.value = convertText(p.Title); 9970 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9971 } 9972 9973 break; 9974 case 'AWSElasticComputeCloudBlock2' : 9975 v.style += 'strokeColor=none;shape=mxgraph.aws3.ec2;verticalLabelPosition=bottom;align=center;verticalAlign=top;'; 9976 v.value = convertText(p.Title); 9977 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9978 9979 break; 9980 9981 case 'AWSRoute53Block2' : 9982 v.style += 'strokeColor=none;shape=mxgraph.aws3.route_53;verticalLabelPosition=bottom;align=center;verticalAlign=top;'; 9983 v.value = convertText(p.Title); 9984 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9985 9986 break; 9987 9988 case 'AWSRDBSBlock2' : 9989 v.style += 'strokeColor=none;shape=mxgraph.aws3.rds;verticalLabelPosition=bottom;align=center;verticalAlign=top;'; 9990 v.value = convertText(p.Title); 9991 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 9992 9993 break; 9994 9995 case 'NET_RingNetwork' : 9996 v.style += 'strokeColor=none;fillColor=none;'; 9997 9998 var cell = new mxCell('', new mxGeometry(w * 0.25, h * 0.25, w * 0.5, h * 0.5), 'ellipse;html=1;strokeColor=#29AAE1;strokeWidth=2;'); 9999 cell.vertex = true; 10000 v.insert(cell); 10001 var cells = [cell]; 10002 cell.style += getFillColor(p, a); 10003 10004 var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=none;dashed=0;html=1;strokeColor=#29AAE1;strokeWidth=2;'); 10005 edge.geometry.relative = true; 10006 edge.edge = true; 10007 10008 addRouterEdge(w * 0.5, 0, edge, select, graph, cells, v, cell); 10009 addRouterEdge(w * 0.855, h * 0.145, edge, select, graph, cells, v, cell); 10010 addRouterEdge(w, h * 0.5, edge, select, graph, cells, v, cell); 10011 addRouterEdge(w * 0.855, h * 0.855, edge, select, graph, cells, v, cell); 10012 addRouterEdge(w * 0.5, h, edge, select, graph, cells, v, cell); 10013 addRouterEdge(w * 0.145, h * 0.855, edge, select, graph, cells, v, cell); 10014 addRouterEdge(0, h * 0.5, edge, select, graph, cells, v, cell); 10015 addRouterEdge(w * 0.145, h * 0.145, edge, select, graph, cells, v, cell); 10016 break; 10017 10018 case 'NET_Ethernet' : 10019 v.style += 'strokeColor=none;fillColor=none;'; 10020 10021 var cell = new mxCell('', new mxGeometry(0, h * 0.5 - 10, w, 20), 'shape=mxgraph.networks.bus;gradientColor=none;gradientDirection=north;fontColor=#ffffff;perimeter=backbonePerimeter;backboneSize=20;fillColor=#29AAE1;strokeColor=#29AAE1;'); 10022 cell.vertex = true; 10023 v.insert(cell); 10024 var cells = [cell]; 10025 10026 var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'strokeColor=#29AAE1;edgeStyle=none;rounded=0;endArrow=none;html=1;strokeWidth=2;'); 10027 edge.geometry.relative = true; 10028 edge.edge = true; 10029 10030 var cells = [cell]; 10031 var stepX = w / p.NumTopNodes; 10032 10033 for (var i = 0; i < p.NumTopNodes; i++) 10034 { 10035 addRouterEdge(stepX * 0.5 + i * stepX, 0, edge, select, graph, cells, v, cell); 10036 } 10037 10038 stepX = w / p.NumBottomNodes; 10039 10040 for (var i = 0; i < p.NumBottomNodes; i++) 10041 { 10042 addRouterEdge(stepX * 0.5 + i * stepX, h, edge, select, graph, cells, v, cell); 10043 } 10044 10045 break; 10046 10047 case 'EE_OpAmp' : 10048 v.style += 'shape=mxgraph.electrical.abstract.operational_amp_1;'; 10049 v.value = convertText(p.Title); 10050 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10051 10052 if (p.ToggleCharge) 10053 { 10054 v.style += 'flipV=1;'; 10055 } 10056 10057 break; 10058 10059 case 'EIMessageChannelBlock' : 10060 case 'EIDatatypeChannelBlock' : 10061 case 'EIInvalidMessageChannelBlock' : 10062 case 'EIDeadLetterChannelBlock' : 10063 case 'EIGuaranteedDeliveryBlock' : 10064 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10065 v.value = convertText(p.Text); 10066 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10067 10068 if (obj.Class == 'EIMessageChannelBlock') 10069 { 10070 var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.messageChannel;fillColor=#818181;part=1;'); 10071 item1.geometry.offset = new mxPoint( - w * 0.45, 0); 10072 } 10073 else if (obj.Class == 'EIDatatypeChannelBlock') 10074 { 10075 var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.dataChannel;fillColor=#818181;part=1;'); 10076 item1.geometry.offset = new mxPoint( - w * 0.45, 0); 10077 } 10078 else if (obj.Class == 'EIInvalidMessageChannelBlock') 10079 { 10080 var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.invalidMessageChannel;fillColor=#818181;part=1;'); 10081 item1.geometry.offset = new mxPoint( - w * 0.45, 0); 10082 } 10083 else if (obj.Class == 'EIDeadLetterChannelBlock') 10084 { 10085 var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.deadLetterChannel;fillColor=#818181;part=1;'); 10086 item1.geometry.offset = new mxPoint( - w * 0.45, 0); 10087 } 10088 else if (obj.Class == 'EIGuaranteedDeliveryBlock') 10089 { 10090 var item1 = new mxCell('', new mxGeometry(0.5, 0.5, 20, 27), 'shape=cylinder;fillColor=#818181;part=1;'); 10091 item1.geometry.offset = new mxPoint( -10, -7); 10092 } 10093 10094 item1.geometry.relative = true; 10095 item1.vertex = true; 10096 v.insert(item1); 10097 10098 item1.style += addAllStyles(item1.style, p, a, item1); 10099 10100 var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=6;'); 10101 edge.geometry.relative = true; 10102 edge.edge = true; 10103 10104 addFloatingEdge(w * 0.15, h * 0.25, w * 0.85, h * 0.25, edge, select, graph, cells, v, cell); 10105 10106 break; 10107 10108 case 'EIChannelAdapterBlock' : 10109 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10110 v.value = convertText(p.Text); 10111 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10112 10113 var item1 = new mxCell('', new mxGeometry(0, h * 0.07, w * 0.21, h * 0.86), 'fillColor=#FFFF33;part=1;'); 10114 item1.vertex = true; 10115 v.insert(item1); 10116 item1.style += addAllStyles(item1.style, p, a, item1); 10117 10118 var item2 = new mxCell('', new mxGeometry(w * 0.26, h * 0.09, w * 0.2, h * 0.82), 'shape=mxgraph.eip.channel_adapter;fillColor=#4CA3D9;part=1;'); 10119 item2.vertex = true; 10120 v.insert(item2); 10121 item2.style += addAllStyles(item2.style, p, a, item2); 10122 10123 var item3 = new mxCell('', new mxGeometry(1, 0.5, w * 0.35, 20), 'shape=mxgraph.eip.messageChannel;fillColor=#818181;part=1;'); 10124 item3.geometry.relative = true; 10125 item3.geometry.offset = new mxPoint( - w * 0.4, -10); 10126 item3.vertex = true; 10127 v.insert(item3); 10128 item3.style += addAllStyles(item3.style, p, a, item3); 10129 10130 edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=1;exitY=0.5;entryX=0;entryY=0.5;endArrow=none;dashed=0;html=1;strokeWidth=1;endFill=1;endSize=2;'); 10131 edge1.geometry.relative = true; 10132 edge1.edge = true; 10133 item1.insertEdge(edge1, true); 10134 item2.insertEdge(edge1, false); 10135 edge1.style += getStrokeColor(p, a); 10136 10137 select.push(graph.addCell(edge1, null, null, null, null)); 10138 10139 edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=1;exitY=0.5;entryX=0;entryY=0.5;endArrow=block;startArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=2;startFill=1;startSize=2;'); 10140 edge2.geometry.relative = true; 10141 edge2.edge = true; 10142 item2.insertEdge(edge2, true); 10143 item3.insertEdge(edge2, false); 10144 10145 select.push(graph.addCell(edge2, null, null, null, null)); 10146 10147 break; 10148 10149 case 'EIMessageBlock' : 10150 case 'EICommandMessageBlock' : 10151 case 'EIDocumentMessageBlock' : 10152 case 'EIEventMessageBlock' : 10153 v.style += 'strokeColor=none;fillColor=none;verticalLabelPosition=bottom;verticalAlign=top;'; 10154 v.value = convertText(p.Text); 10155 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10156 10157 var item1 = new mxCell('', new mxGeometry(0, 0, 17, 17), 'ellipse;fillColor=#808080;part=1;'); 10158 item1.vertex = true; 10159 v.insert(item1); 10160 item1.style += addAllStyles(item1.style, p, a, item1); 10161 10162 var messagesNum = p.Messages; 10163 var oneH = (h - 17) / messagesNum; 10164 var item2 = new Array(); 10165 var edge = new Array(); 10166 10167 for (var i = 0; i < messagesNum; i++) 10168 { 10169 var currY = oneH * (i + 1) - 3; 10170 item2[i] = new mxCell('', new mxGeometry(w - 20, currY, 20, 20), 'part=1;'); 10171 item2[i].vertex = true; 10172 v.insert(item2[i]); 10173 10174 switch(obj.Class) 10175 { 10176 case 'EIMessageBlock' : 10177 item2[i].value = convertText(p['message_' + (i + 1)]); 10178 item2.style += getLabelStyle(p['message_' + (i + 1)], isLastLblHTML); 10179 break; 10180 case 'EICommandMessageBlock' : 10181 item2[i].value = 'C'; 10182 item2[i].style += 'fontStyle=1;fontSize=' + defaultFontSize + ';'; 10183 break; 10184 case 'EIDocumentMessageBlock' : 10185 item2[i].value = 'D'; 10186 item2[i].style += 'fontStyle=1;fontSize=' + defaultFontSize + ';'; 10187 break; 10188 case 'EIEventMessageBlock' : 10189 item2[i].value = 'E'; 10190 item2[i].style += 'fontStyle=1;fontSize=' + defaultFontSize + ';'; 10191 break; 10192 } 10193 10194 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 10195 edge[i] = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;'); 10196 edge[i].geometry.relative = true; 10197 edge[i].edge = true; 10198 item1.insertEdge(edge[i], false); 10199 item2[i].insertEdge(edge[i], true); 10200 edge[i].style += addAllStyles(edge[i].style, p, a, edge[i]); 10201 10202 var wp = new Array(); 10203 wp.push(new mxPoint(x + 8.5, y + currY + 10)); 10204 10205 edge[i].geometry.points = wp; 10206 select.push(graph.addCell(edge[i], null, null, null, null)); 10207 } 10208 10209 break; 10210 10211 case 'EIMessageEndpointBlock' : 10212 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10213 v.value = convertText(p.Text); 10214 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10215 10216 var item1 = new mxCell('', new mxGeometry(w * 0.45, h * 0.25, w * 0.3, h * 0.5), 'part=1;fillColor=#ffffff'); 10217 item1.vertex = true; 10218 v.insert(item1); 10219 10220 item1.style += addAllStyles(item1.style, p, a, item1); 10221 10222 var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=6;'); 10223 edge.geometry.relative = true; 10224 edge.edge = true; 10225 10226 addFloatingEdge(0, h * 0.5, w * 0.4, h * 0.5, edge, select, graph, cells, v, cell); 10227 10228 break; 10229 case 'EIPublishSubscribeChannelBlock' : 10230 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10231 v.value = convertText(p.Text); 10232 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10233 10234 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=6;'); 10235 edge1.geometry.relative = true; 10236 edge1.edge = true; 10237 addFloatingEdge(w * 0.05, h * 0.5, w * 0.85, h * 0.5, edge1, select, graph, cells, v, cell); 10238 10239 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=6;'); 10240 edge2.geometry.relative = true; 10241 edge2.edge = true; 10242 addFloatingEdge(w * 0.05, h * 0.5, w * 0.85, h * 0.15, edge2, select, graph, cells, v, cell); 10243 10244 var edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=6;'); 10245 edge3.geometry.relative = true; 10246 edge3.edge = true; 10247 addFloatingEdge(w * 0.05, h * 0.5, w * 0.85, h * 0.85, edge3, select, graph, cells, v, cell); 10248 10249 break; 10250 10251 case 'EIMessageBusBlock' : 10252 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10253 v.value = convertText(p.Text); 10254 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10255 10256 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=block;dashed=0;html=1;strokeWidth=1;endFill=1;endSize=4;startArrow=block;startFill=1;startSize=4;'); 10257 edge1.geometry.relative = true; 10258 edge1.edge = true; 10259 edge1.style += getStrokeColor(p, a); 10260 addFloatingEdge(w * 0.05, h * 0.5, w * 0.95, h * 0.5, edge1, select, graph, cells, v, cell); 10261 10262 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;dashed=0;html=1;strokeWidth=1;endFill=1;endSize=4;startArrow=block;startFill=1;startSize=4;'); 10263 edge2.geometry.relative = true; 10264 edge2.edge = true; 10265 edge2.style += getStrokeColor(p, a); 10266 addFloatingEdge(w * 0.3, h * 0.1, w * 0.3, h * 0.5, edge2, select, graph, cells, v, cell); 10267 10268 var edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;dashed=0;html=1;strokeWidth=1;endFill=1;endSize=4;startArrow=block;startFill=1;startSize=4;'); 10269 edge3.geometry.relative = true; 10270 edge3.edge = true; 10271 edge3.style += getStrokeColor(p, a); 10272 addFloatingEdge(w * 0.7, h * 0.1, w * 0.7, h * 0.5, edge3, select, graph, cells, v, cell); 10273 10274 var edge4 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;dashed=0;html=1;strokeWidth=1;endFill=1;endSize=4;startArrow=block;startFill=1;startSize=4;'); 10275 edge4.geometry.relative = true; 10276 edge4.edge = true; 10277 edge4.style += getStrokeColor(p, a); 10278 addFloatingEdge(w * 0.5, h * 0.5, w * 0.5, h * 0.9, edge4, select, graph, cells, v, cell); 10279 10280 break; 10281 10282 case 'EIRequestReplyBlock' : 10283 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10284 v.value = convertText(p.Text); 10285 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10286 10287 var item1 = new mxCell('', new mxGeometry(w * 0.2, h * 0.21, w * 0.16, h * 0.24), 'part=1;fillColor=#ffffff;'); 10288 item1.vertex = true; 10289 v.insert(item1); 10290 item1.style += addAllStyles(item1.style, p, a, item1); 10291 10292 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=6;'); 10293 edge1.geometry.relative = true; 10294 edge1.edge = true; 10295 10296 addFloatingEdge(w * 0.45, h * 0.33, w * 0.8, h * 0.33, edge1, select, graph, cells, v, cell); 10297 10298 var item2 = new mxCell('', new mxGeometry(w * 0.64, h * 0.55, w * 0.16, h * 0.24), 'part=1;fillColor=#ffffff;'); 10299 item2.vertex = true; 10300 v.insert(item2); 10301 item2.style += addAllStyles(item2.style, p, a, item2); 10302 10303 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=block;dashed=0;html=1;strokeColor=#818181;strokeWidth=1;endFill=1;endSize=6;'); 10304 edge2.geometry.relative = true; 10305 edge2.edge = true; 10306 10307 addFloatingEdge(w * 0.55, h * 0.67, w * 0.2, h * 0.67, edge2, select, graph, cells, v, cell); 10308 10309 break; 10310 10311 case 'EIReturnAddressBlock' : 10312 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10313 v.value = convertText(p.Text); 10314 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10315 10316 var item1 = new mxCell('', new mxGeometry(w * 0.1, h * 0.15, w * 0.8, h * 0.7), 'part=1;shape=mxgraph.eip.retAddr;fillColor=#FFE040;'); 10317 item1.vertex = true; 10318 v.insert(item1); 10319 item1.style += addAllStyles(item1.style, p, a, item1); 10320 10321 break; 10322 10323 case 'EICorrelationIDBlock' : 10324 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10325 v.value = convertText(p.Text); 10326 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10327 10328 var item1 = new mxCell('', new mxGeometry(w * 0.04, h * 0.06, w * 0.18, h * 0.28), 'ellipse;fillColor=#808080;part=1;'); 10329 item1.vertex = true; 10330 v.insert(item1); 10331 item1.style += addAllStyles(item1.style, p, a, item1); 10332 10333 item2 = new mxCell('', new mxGeometry(w * 0.2, h * 0.56, w * 0.2, h * 0.32), 'part=1;'); 10334 item2.vertex = true; 10335 v.insert(item2); 10336 10337 item2.value = 'A'; 10338 item2.style += 'fontStyle=1;fontSize=' + defaultFontSize + ';'; 10339 item1.style += addAllStyles(item1.style, p, a, item1); 10340 10341 edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;part=1;'); 10342 edge1.geometry.relative = true; 10343 edge1.edge = true; 10344 item1.insertEdge(edge1, false); 10345 item2.insertEdge(edge1, true); 10346 edge1.style += addAllStyles(edge1.style, p, a, edge1); 10347 10348 var wp = new Array(); 10349 wp.push(new mxPoint(x + w * 0.13, y + h * 0.72)); 10350 10351 edge1.geometry.points = wp; 10352 select.push(graph.addCell(edge1, null, null, null, null)); 10353 10354 var item3 = new mxCell('', new mxGeometry(w * 0.6, h * 0.06, w * 0.18, h * 0.28), 'ellipse;fillColor=#808080;part=1;'); 10355 item3.vertex = true; 10356 v.insert(item3); 10357 item3.style += 10358 getStrokeColor(p, a) + 10359 getStrokeWidth(p); 10360 item3.style += addAllStyles(item3.style, p, a, item3); 10361 10362 item4 = new mxCell('', new mxGeometry(w * 0.76, h * 0.56, w * 0.2, h * 0.32), 'part=1;'); 10363 item4.vertex = true; 10364 v.insert(item4); 10365 item4.style += 10366 getStrokeColor(p, a) + 10367 getOpacity(p, a, item4) + 10368 getStrokeWidth(p) + 10369 getStrokeStyle(p); 10370 10371 item4.value = 'B'; 10372 item4.style += 'fontStyle=1;fontSize=' + defaultFontSize + ';fillColor=#ffffff;'; 10373 item4.style += addAllStyles(item4.style, p, a, item4); 10374 10375 edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;part=1;'); 10376 edge2.geometry.relative = true; 10377 edge2.edge = true; 10378 item3.insertEdge(edge2, false); 10379 item4.insertEdge(edge2, true); 10380 edge2.style += addAllStyles(edge2.style, p, a, edge2); 10381 10382 var wp2 = new Array(); 10383 wp2.push(new mxPoint(x + w * 0.69, y + h * 0.72)); 10384 10385 edge2.geometry.points = wp2; 10386 select.push(graph.addCell(edge2, null, null, null, null)); 10387 10388 edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;endArrow=block;endFill=1;endSize=6;part=1;'); 10389 edge3.geometry.relative = true; 10390 edge3.edge = true; 10391 item1.insertEdge(edge3, false); 10392 item3.insertEdge(edge3, true); 10393 edge3.style += addAllStyles(edge3.style, p, a, edge3); 10394 10395 select.push(graph.addCell(edge3, null, null, null, null)); 10396 10397 break; 10398 10399 case 'EIMessageSequenceBlock' : 10400 10401 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10402 v.value = convertText(p.Text); 10403 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10404 10405 var item1 = new mxCell('1', new mxGeometry(w * 0.2, h * 0.4, w * 0.1, h * 0.19), 'fontStyle=1;fillColor=#ffffff;fontSize=' + defaultFontSize + ';part=1;'); 10406 item1.vertex = true; 10407 v.insert(item1); 10408 item1.style += addAllStyles(item1.style, p, a, item1); 10409 10410 var item2 = new mxCell('2', new mxGeometry(w * 0.45, h * 0.4, w * 0.1, h * 0.19), 'fontStyle=1;fillColor=#ffffff;fontSize=' + defaultFontSize + ';part=1;'); 10411 item2.vertex = true; 10412 v.insert(item2); 10413 item2.style += addAllStyles(item2.style, p, a, item2); 10414 10415 var item3 = new mxCell('3', new mxGeometry(w * 0.7, h * 0.4, w * 0.1, h * 0.19), 'fontStyle=1;fillColor=#ffffff;fontSize=' + defaultFontSize + ';part=1;'); 10416 item3.vertex = true; 10417 v.insert(item3); 10418 item3.style += addAllStyles(item3.style, p, a, item3); 10419 10420 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'curved=1;endArrow=block;html=1;endSize=3;part=1;'); 10421 item1.insertEdge(edge1, false); 10422 item2.insertEdge(edge1, true); 10423 10424 edge1.geometry.points = [new mxPoint(x + w * 0.375, y + h * 0.15)]; 10425 edge1.geometry.relative = true; 10426 edge1.edge = true; 10427 edge1.style += addAllStyles(edge1.style, p, a, edge1); 10428 select.push(graph.addCell(edge1, null, null, null, null)); 10429 10430 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'curved=1;endArrow=block;html=1;endSize=3;part=1;'); 10431 item2.insertEdge(edge2, false); 10432 item3.insertEdge(edge2, true); 10433 edge2.geometry.points = [new mxPoint(x + w * 0.675, y + h * 0.15)]; 10434 edge2.geometry.relative = true; 10435 edge2.edge = true; 10436 edge2.style += addAllStyles(edge2.style, p, a, edge2); 10437 select.push(graph.addCell(edge2, null, null, null, null)); 10438 10439 break; 10440 10441 case 'EIMessageExpirationBlock' : 10442 10443 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10444 v.value = convertText(p.Text); 10445 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10446 10447 var item1 = new mxCell('', new mxGeometry(w * 0.3, h * 0.2, w * 0.4, h * 0.6), 'shape=mxgraph.ios7.icons.clock;fillColor=#ffffff;flipH=1;part=1;'); 10448 item1.vertex = true; 10449 v.insert(item1); 10450 item1.style += addAllStyles(item1.style, p, a, item1); 10451 10452 break; 10453 10454 case 'EIMessageBrokerBlock' : 10455 v.style += 'strokeColor=none;fillColor=none;verticalLabelPosition=bottom;verticalAlign=top;'; 10456 v.value = convertText(p.Text); 10457 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10458 10459 var item1 = new mxCell('', new mxGeometry(w * 0.38, h * 0.42, w * 0.24, h * 0.16), 'part=1;fillColor=#aefe7d;'); 10460 item1.vertex = true; 10461 v.insert(item1); 10462 item1.style += addAllStyles(item1.style, p, a, item1); 10463 10464 var item2 = new mxCell('', new mxGeometry(w * 0.38, 0, w * 0.24, h * 0.16), 'part=1;'); 10465 item2.vertex = true; 10466 v.insert(item2); 10467 item2.style += addAllStyles(item2.style, p, a, item2); 10468 10469 var item3 = new mxCell('', new mxGeometry(w * 0.76, h * 0.23, w * 0.24, h * 0.16), ''); 10470 item3.vertex = true; 10471 v.insert(item3); 10472 item3.style = item2.style; 10473 10474 var item4 = new mxCell('', new mxGeometry(w * 0.76, h * 0.61, w * 0.24, h * 0.16), ''); 10475 item4.vertex = true; 10476 v.insert(item4); 10477 item4.style = item2.style; 10478 10479 var item5 = new mxCell('', new mxGeometry(w * 0.38, h * 0.84, w * 0.24, h * 0.16), ''); 10480 item5.vertex = true; 10481 v.insert(item5); 10482 item5.style = item2.style; 10483 10484 var item6 = new mxCell('', new mxGeometry(0, h * 0.61, w * 0.24, h * 0.16), ''); 10485 item6.vertex = true; 10486 v.insert(item6); 10487 item6.style = item2.style; 10488 10489 var item7 = new mxCell('', new mxGeometry(0, h * 0.23, w * 0.24, h * 0.16), ''); 10490 item7.vertex = true; 10491 v.insert(item7); 10492 item7.style = item2.style; 10493 10494 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;'); 10495 item1.insertEdge(edge1, false); 10496 item2.insertEdge(edge1, true); 10497 edge1.edge = true; 10498 edge1.style += addAllStyles(edge1.style, p, a, edge1); 10499 select.push(graph.addCell(edge1, null, null, null, null)); 10500 10501 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;'); 10502 item1.insertEdge(edge2, false); 10503 item3.insertEdge(edge2, true); 10504 edge2.edge = true; 10505 edge2.style += addAllStyles(edge2.style, p, a, edge2); 10506 select.push(graph.addCell(edge2, null, null, null, null)); 10507 10508 var edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;'); 10509 item1.insertEdge(edge3, false); 10510 item4.insertEdge(edge3, true); 10511 edge3.edge = true; 10512 edge3.style += addAllStyles(edge3.style, p, a, edge3); 10513 select.push(graph.addCell(edge3, null, null, null, null)); 10514 10515 var edge4 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;'); 10516 item1.insertEdge(edge4, false); 10517 item5.insertEdge(edge4, true); 10518 edge4.edge = true; 10519 edge4.style += addAllStyles(edge4.style, p, a, edge4); 10520 select.push(graph.addCell(edge4, null, null, null, null)); 10521 10522 var edge5 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;'); 10523 item1.insertEdge(edge5, false); 10524 item6.insertEdge(edge5, true); 10525 edge5.edge = true; 10526 edge5.style += addAllStyles(edge5.style, p, a, edge5); 10527 select.push(graph.addCell(edge5, null, null, null, null)); 10528 10529 var edge6 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;'); 10530 item1.insertEdge(edge6, false); 10531 item7.insertEdge(edge6, true); 10532 edge6.edge = true; 10533 edge6.style += addAllStyles(edge6.style, p, a, edge6); 10534 select.push(graph.addCell(edge6, null, null, null, null)); 10535 10536 break; 10537 case 'EIDurableSubscriberBlock' : 10538 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10539 v.value = convertText(p.Text); 10540 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10541 10542 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;endFill=1;endSize=6;'); 10543 edge1.geometry.relative = true; 10544 edge1.edge = true; 10545 addFloatingEdge(w * 0.05, h * 0.5, w * 0.6, h * 0.25, edge1, select, graph, cells, v, cell); 10546 10547 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;endFill=1;endSize=6;'); 10548 edge2.geometry.relative = true; 10549 edge2.edge = true; 10550 addFloatingEdge(w * 0.05, h * 0.5, w * 0.6, h * 0.75, edge2, select, graph, cells, v, cell); 10551 10552 var item1 = new mxCell('', new mxGeometry(w * 0.7, h * 0.1, w * 0.15, h * 0.32), 'shape=mxgraph.eip.durable_subscriber;part=1;fillColor=#818181;'); 10553 item1.vertex = true; 10554 v.insert(item1); 10555 item1.style += addAllStyles(item1.style, p, a, item1); 10556 10557 break; 10558 10559 case 'EIControlBusBlock' : 10560 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10561 v.value = convertText(p.Text); 10562 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10563 10564 var item1 = new mxCell('', new mxGeometry(w * 0.25, h * 0.25, w * 0.5, h * 0.5), 'shape=mxgraph.eip.control_bus;part=1;'); 10565 item1.vertex = true; 10566 v.insert(item1); 10567 item1.style += addAllStyles(item1.style, p, a, item1); 10568 10569 break; 10570 10571 case 'EIMessageHistoryBlock' : 10572 v.style += 'strokeColor=none;fillColor=none;verticalLabelPosition=bottom;verticalAlign=top;'; 10573 v.value = convertText(p.Text); 10574 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10575 10576 var item1 = new mxCell('', new mxGeometry(0, 0, 17, 17), 'ellipse;fillColor=#808080;part=1;'); 10577 item1.vertex = true; 10578 v.insert(item1); 10579 item1.style += addAllStyles(item1.style, p, a, item1); 10580 10581 var item3 = new mxCell('', new mxGeometry(w - 45, 30, 30, 20), 'shape=mxgraph.mockup.misc.mail2;fillColor=#FFE040;part=1;'); 10582 item3.vertex = true; 10583 v.insert(item3); 10584 item3.style += addAllStyles(item3.style, p, a, item3); 10585 10586 edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;'); 10587 edge3.geometry.relative = true; 10588 edge3.edge = true; 10589 item1.insertEdge(edge3, false); 10590 item3.insertEdge(edge3, true); 10591 edge3.style += addAllStyles(edge3.style, p, a, edge3); 10592 10593 edge3.geometry.points = [new mxPoint(x + 8.5, y + 40)]; 10594 select.push(graph.addCell(edge3, null, null, null, null)); 10595 10596 var item4 = new mxCell('', new mxGeometry(w - 45, h - 20, 20, 20), 'part=1;'); 10597 item4.vertex = true; 10598 v.insert(item4); 10599 item4.value = convertText(p.message_0); 10600 item4.style += getLabelStyle(p.message_0, isLastLblHTML); 10601 10602 item4.style += addAllStyles(item4.style, p, a, item4, isLastLblHTML); 10603 10604 edge4 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;'); 10605 edge4.geometry.relative = true; 10606 edge4.edge = true; 10607 10608 item1.insertEdge(edge4, false); 10609 item4.insertEdge(edge4, true); 10610 edge4.style += addAllStyles(edge4.style, p, a, edge4); 10611 10612 edge4.geometry.points = [new mxPoint(x + 8.5, y + h - 10)]; 10613 select.push(graph.addCell(edge4, null, null, null, null)); 10614 10615 var messagesNum = p.HistoryMessages; 10616 var oneH = (h - 75) / messagesNum; 10617 var item2 = new Array(); 10618 var edge = new Array(); 10619 10620 for (var i = 0; i < messagesNum; i++) 10621 { 10622 var currY = oneH * (i + 1) + 30; 10623 item2[i] = new mxCell('', new mxGeometry(w - 20, currY, 20, 20), 'part=1;'); 10624 item2[i].vertex = true; 10625 item2[i].value = convertText(p['message_' + (i + 1)]); 10626 item2.style += getLabelStyle(p['message_' + (i + 1)], isLastLblHTML); 10627 v.insert(item2[i]); 10628 10629 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 10630 10631 edge[i] = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;'); 10632 edge[i].geometry.relative = true; 10633 edge[i].edge = true; 10634 item3.insertEdge(edge[i], false); 10635 item2[i].insertEdge(edge[i], true); 10636 edge[i].style += addAllStyles(edge[i].style, p, a, edge[i]); 10637 10638 var wp = new Array(); 10639 wp.push(new mxPoint(x + w - 30, y + currY + 10)); 10640 10641 edge[i].geometry.points = wp; 10642 select.push(graph.addCell(edge[i], null, null, null, null)); 10643 } 10644 10645 break; 10646 10647 case 'Equation' : 10648 LucidImporter.hasMath = true; 10649 v.style += 'strokeColor=none;'; 10650 v.style += addAllStyles(v.style, p, a, v); 10651 v.value = '$$' + p.Latex + '$$'; 10652 break; 10653 case 'fpDoor' : 10654 v.style += 'shape=mxgraph.floorplan.doorRight;'; 10655 10656 if (p.DoorAngle < 0) 10657 { 10658 v.style += 'flipV=1;' 10659 } 10660 10661 v.style += addAllStyles(v.style, p, a, v); 10662 10663 break; 10664 case 'fpWall' : 10665 v.style += 'labelPosition=center;verticalAlign=bottom;verticalLabelPosition=top;'; 10666 v.value = convertText(p); 10667 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10668 v.style = v.style.replace('rotation=180;', ''); //180 rotation cause the labels to be upside down which doesn't match Lucid 10669 break; 10670 case 'fpDoubleDoor' : 10671 v.style += 'shape=mxgraph.floorplan.doorDouble;'; 10672 10673 if (p.DoorAngle > 0) 10674 { 10675 v.style += 'flipV=1;' 10676 } 10677 10678 v.style += addAllStyles(v.style, p, a, v); 10679 10680 break; 10681 10682 case 'fpRestroomLights' : 10683 v.style += 'strokeColor=none;fillColor=none;'; 10684 v.style += addAllStyles(v.style, p, a, v); 10685 10686 var item1 = new mxCell('', new mxGeometry(0, 0, w, h * 0.25), 'part=1;'); 10687 item1.vertex = true; 10688 v.insert(item1); 10689 item1.style += addAllStyles(item1.style, p, a, item1); 10690 10691 var item2 = new Array(); 10692 var lightOffset = w * 0.02; 10693 var lightW = (w - lightOffset * 2) / p.LightCount; 10694 var trueW = lightW * 0.8; 10695 10696 for (var i = 0; i < p.LightCount; i++) 10697 { 10698 item2[i] = new mxCell('', new mxGeometry(lightOffset + lightW * i + (lightW - trueW) / 2, h * 0.25, trueW, h * 0.75), 'ellipse;part=1;'); 10699 item2[i].vertex = true; 10700 v.insert(item2[i]); 10701 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 10702 } 10703 10704 break; 10705 10706 case 'fpRestroomSinks' : 10707 v.style += 'strokeColor=none;fillColor=none;'; 10708 v.style += addAllStyles(v.style, p, a, v); 10709 10710 var item1 = new Array(); 10711 var sinkW = w / p.SinkCount; 10712 10713 for (var i = 0; i < p.SinkCount; i++) 10714 { 10715 item1[i] = new mxCell('', new mxGeometry(sinkW * i, 0, sinkW, h), 'part=1;shape=mxgraph.floorplan.sink_2;'); 10716 item1[i].vertex = true; 10717 v.insert(item1[i]); 10718 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]); 10719 } 10720 10721 break; 10722 10723 case 'fpRestroomStalls' : 10724 v.style += 'strokeColor=none;fillColor=none;'; 10725 10726 var wallW = w * 0.1 / p.StallCount; 10727 10728 var item1 = new mxCell('', new mxGeometry(0, 0, wallW, h), 'fillColor=#000000;part=1;'); 10729 item1.vertex = true; 10730 v.insert(item1); 10731 item1.style += addAllStyles(item1.style, p, a, item1); 10732 10733 var stallW = (w - wallW) / p.StallCount; 10734 10735 var wall = new Array(); 10736 var toilet = new Array(); 10737 var door = new Array(); 10738 var paper = new Array(); 10739 10740 var fc = getStrokeColor(p, a); 10741 10742 if (fc == '') 10743 { 10744 fc = '#000000;' 10745 } 10746 else 10747 { 10748 fc = fc.replace('stokreColor=', ''); 10749 } 10750 10751 var wallStyle = 'part=1;fillColor=' + fc; 10752 wallStyle += addAllStyles(wallStyle, p, a, v); 10753 var otherStyle = addAllStyles('', p, a, v); 10754 10755 for (var i = 0; i < p.StallCount; i++) 10756 { 10757 wall[i] = new mxCell('', new mxGeometry((i + 1) * stallW, 0, wallW, h), wallStyle); 10758 wall[i].vertex = true; 10759 v.insert(wall[i]); 10760 10761 door[i] = new mxCell('', new mxGeometry(wallW + i * stallW + (stallW - wallW) * 0.05, h - (stallW - wallW) * 0.92, (stallW - wallW) * 0.9, (stallW - wallW) * 0.92), 'shape=mxgraph.floorplan.doorRight;flipV=1;part=1;'); 10762 door[i].vertex = true; 10763 v.insert(door[i]); 10764 door[i].style += otherStyle; 10765 10766 toilet[i] = new mxCell('', new mxGeometry(wallW + i * stallW + (stallW - wallW) * 0.2, 0, (stallW - wallW) * 0.6, (stallW - wallW) * 0.8), 'shape=mxgraph.floorplan.toilet;part=1;'); 10767 toilet[i].vertex = true; 10768 v.insert(toilet[i]); 10769 toilet[i].style += otherStyle; 10770 10771 paper[i] = new mxCell('', new mxGeometry(wallW + i * stallW, h * 0.42, (stallW - wallW) * 0.15, (stallW - wallW) * 0.12), 'part=1;'); 10772 paper[i].vertex = true; 10773 v.insert(paper[i]); 10774 paper[i].style += otherStyle; 10775 } 10776 10777 break; 10778 case 'PEOneToMany' : 10779 v.style += 'strokeColor=none;fillColor=none;'; 10780 10781 var edgeStyle = 'edgeStyle=none;endArrow=none;part=1;'; 10782 10783 var fc = getStrokeColor(p, a); 10784 10785 if (fc == '') 10786 { 10787 fc = '#000000;' 10788 } 10789 else 10790 { 10791 fc = fc.replace('strokeColor=', ''); 10792 } 10793 10794 var endStyle = 'shape=triangle;part=1;fillColor=' + fc; 10795 endStyle += addAllStyles(endStyle, p, a, v); 10796 10797 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), edgeStyle); 10798 edge1.geometry.relative = true; 10799 edge1.edge = true; 10800 10801 addFloatingEdge(0, h * 0.5, w * 0.65, h * 0.5, edge1, select, graph, cells, v, cell); 10802 10803 var itemH = h / p.numLines; 10804 var edge2 = new Array(); 10805 var endArrow = new Array(); 10806 10807 for (var i = 0; i < p.numLines; i++) 10808 { 10809 edge2[i] = new mxCell('', new mxGeometry(0, 0, 0, 0), edgeStyle); 10810 edge2[i].geometry.relative = true; 10811 edge2[i].edge = true; 10812 10813 addFloatingEdge(w * 0.65, h * 0.5, w * 0.96, (i + 0.5) * itemH, edge2[i], select, graph, cells, v, cell); 10814 10815 endArrow[i] = new mxCell('', new mxGeometry(w * 0.95, (i + 0.2) * itemH, w * 0.05, itemH * 0.6), endStyle); 10816 endArrow[i].vertex = true; 10817 v.insert(endArrow[i]); 10818 } 10819 10820 break; 10821 10822 case 'PEMultilines' : 10823 v.style += 'strokeColor=none;fillColor=none;'; 10824 10825 var edgeStyle = 'edgeStyle=none;endArrow=none;part=1;'; 10826 10827 var fc = getStrokeColor(p, a); 10828 10829 if (fc == '') 10830 { 10831 fc = '#000000;' 10832 } 10833 else 10834 { 10835 fc = fc.replace('strokeColor=', ''); 10836 } 10837 10838 var endStyle = 'shape=triangle;part=1;fillColor=' + fc; 10839 endStyle += addAllStyles(endStyle, p, a, v); 10840 10841 var itemH = h / p.numLines; 10842 var edge2 = new Array(); 10843 var endArrow = new Array(); 10844 10845 for (var i = 0; i < p.numLines; i++) 10846 { 10847 edge2[i] = new mxCell('', new mxGeometry(0, 0, 0, 0), edgeStyle); 10848 edge2[i].geometry.relative = true; 10849 edge2[i].edge = true; 10850 10851 addFloatingEdge(0, (i + 0.5) * itemH, w * 0.96, (i + 0.5) * itemH, edge2[i], select, graph, cells, v, cell); 10852 10853 endArrow[i] = new mxCell('', new mxGeometry(w * 0.95, (i + 0.2) * itemH, w * 0.05, itemH * 0.6), endStyle); 10854 endArrow[i].vertex = true; 10855 v.insert(endArrow[i]); 10856 } 10857 10858 break; 10859 10860 case 'PEVesselBlock' : 10861 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10862 v.value = convertText(p.Text); 10863 10864 switch (p.vesselType) 10865 { 10866 case 1 : 10867 v.style += 'shape=mxgraph.pid.vessels.pressurized_vessel;'; 10868 break; 10869 case 2 : 10870 v.style += 'shape=hexagon;perimeter=hexagonPerimeter2;size=0.10;direction=south;'; 10871 break; 10872 } 10873 10874 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10875 10876 break; 10877 10878 case 'PEClosedTankBlock' : 10879 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10880 v.value = convertText(p.Text); 10881 10882 if (p.peakedRoof == 1 && p.stumpType == 0) 10883 { 10884 v.style += 'shape=mxgraph.pid.vessels.tank_(conical_roof);'; 10885 } 10886 else if (p.stumpType == 1) 10887 { 10888 v.style += 'shape=mxgraph.pid.vessels.tank_(boot);'; 10889 } 10890 10891 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10892 break; 10893 10894 case 'PEColumnBlock' : 10895 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;'; 10896 v.value = convertText(p.Text); 10897 10898 if (p.columnType == 0) 10899 { 10900 v.style += 'shape=mxgraph.pid.vessels.pressurized_vessel;'; 10901 } 10902 else 10903 { 10904 v.style += 'shape=mxgraph.pid.vessels.tank;'; 10905 } 10906 10907 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10908 10909 break; 10910 10911 case 'PECompressorTurbineBlock' : 10912 v.style += 'strokeColor=none;fillColor=none;'; 10913 v.value = convertText(p.Text); 10914 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10915 10916 var item1 = new mxCell('', new mxGeometry(0, h * 0.2, w, h * 0.6), 'part=1;shape=trapezoid;perimeter=trapezoidPerimeter;direction=south;'); 10917 item1.vertex = true; 10918 v.insert(item1); 10919 item1.style += st; 10920 item1.style += addAllStyles(item1.style, p, a, item1); 10921 10922 var st = 'endSize=4;endArrow=block;endFill=1;'; 10923 10924 if (p.compressorType == 0) 10925 { 10926 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), ''); 10927 edge1.geometry.relative = true; 10928 edge1.edge = true; 10929 edge1.style += st; 10930 edge1.style += addAllStyles(edge1.style, p, a, edge1); 10931 10932 addFloatingEdge(0, 0, 0, h * 0.2, edge1, select, graph, cells, v, cell); 10933 10934 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), ''); 10935 edge2.geometry.relative = true; 10936 edge2.edge = true; 10937 edge2.style += st; 10938 edge2.style += addAllStyles(edge2.style, p, a, edge2); 10939 10940 addFloatingEdge(w, h * 0.67, w, h, edge2, select, graph, cells, v, cell); 10941 } 10942 else 10943 { 10944 10945 item1.style += 'flipH=1;' 10946 var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), ''); 10947 edge1.geometry.relative = true; 10948 edge1.edge = true; 10949 edge1.style += st; 10950 edge1.style += addAllStyles(edge1.style, p, a, edge1); 10951 10952 addFloatingEdge(0, 0, 0, h * 0.33, edge1, select, graph, cells, v, cell); 10953 10954 var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), ''); 10955 edge2.geometry.relative = true; 10956 edge2.edge = true; 10957 edge2.style += st; 10958 edge2.style += addAllStyles(edge2.style, p, a, edge2); 10959 10960 addFloatingEdge(w, h * 0.8, w, h, edge2, select, graph, cells, v, cell); 10961 } 10962 10963 if (p.centerLineType == 1) 10964 { 10965 var edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), ''); 10966 edge3.geometry.relative = true; 10967 edge3.edge = true; 10968 edge3.style += st; 10969 edge3.style += addAllStyles(edge3.style, p, a, edge3); 10970 10971 addFloatingEdge(w * 0.2, h * 0.5, w * 0.8, h * 0.5, edge3, select, graph, cells, v, cell); 10972 } 10973 10974 break; 10975 10976 case 'PEMotorDrivenTurbineBlock' : 10977 10978 v.style += 'shape=ellipse;perimeter=ellipsePerimeter;'; 10979 v.value = convertText(p.Text); 10980 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 10981 10982 var item1 = new mxCell('', new mxGeometry(w * 0.2, h * 0.2, w * 0.6, h * 0.6), 'part=1;shape=trapezoid;perimeter=trapezoidPerimeter;direction=south;'); 10983 item1.vertex = true; 10984 v.insert(item1); 10985 item1.style += addAllStyles(item1.style, p, a, item1); 10986 10987 break; 10988 10989 case 'PEFanBlades2Block' : 10990 break; 10991 case 'PECentrifugalPumpBlock' : 10992 break; 10993 case 'PEIndicatorBlock' : 10994 case 'PEIndicator2Block' : 10995 case 'PESharedIndicatorBlock' : 10996 case 'PEComputerIndicatorBlock' : 10997 case 'PESharedIndicator2Block' : 10998 case 'PEProgrammableIndicatorBlock' : 10999 switch(obj.Class) 11000 { 11001 case 'PEIndicatorBlock' : 11002 v.style += 'shape=mxgraph.pid2inst.discInst;'; 11003 break; 11004 case 'PEIndicator2Block' : 11005 v.style += 'shape=mxgraph.pid2inst.indicator;indType=inst;'; 11006 break; 11007 case 'PESharedIndicatorBlock' : 11008 v.style += 'shape=mxgraph.pid2inst.sharedCont;'; 11009 break; 11010 case 'PEComputerIndicatorBlock' : 11011 v.style += 'shape=mxgraph.pid2inst.compFunc;'; 11012 break; 11013 case 'PESharedIndicator2Block' : 11014 v.style += 'shape=mxgraph.pid2inst.indicator;indType=ctrl;'; 11015 break; 11016 case 'PEProgrammableIndicatorBlock' : 11017 v.style += 'shape=mxgraph.pid2inst.progLogCont;'; 11018 break; 11019 } 11020 11021 v.style += addAllStyles(v.style, p, a, v); 11022 11023 if (obj.Class == 'PEIndicator2Block' || obj.Class == 'PESharedIndicator2Block') 11024 { 11025 //scale labels to width 11026 var item1 = new mxCell('', new mxGeometry(0, 0, w, w * 0.5), 'part=1;strokeColor=none;fillColor=none;'); 11027 item1.vertex = true; 11028 v.insert(item1); 11029 item1.value = convertText(p.TopText); 11030 item1.style += getLabelStyle(p.TopText, isLastLblHTML); 11031 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 11032 11033 var item2 = new mxCell('', new mxGeometry(0, w * 0.5, w, w * 0.5), 'part=1;strokeColor=none;fillColor=none;'); 11034 item2.vertex = true; 11035 v.insert(item2); 11036 item2.value = convertText(p.BotText); 11037 item2.style += getLabelStyle(p.BotText, isLastLblHTML); 11038 item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML); 11039 } 11040 else 11041 { 11042 //scale labels as usual 11043 var item1 = new mxCell('', new mxGeometry(0, 0, w, h * 0.5), 'part=1;strokeColor=none;fillColor=none;'); 11044 item1.vertex = true; 11045 v.insert(item1); 11046 item1.value = convertText(p.TopText); 11047 item1.style += getLabelStyle(p.TopText, isLastLblHTML); 11048 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 11049 11050 var item2 = new mxCell('', new mxGeometry(0, h * 0.5, w, h * 0.5), 'part=1;strokeColor=none;fillColor=none;'); 11051 item2.vertex = true; 11052 v.insert(item2); 11053 item2.value = convertText(p.BotText); 11054 item2.style += getLabelStyle(p.BotText, isLastLblHTML); 11055 item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML); 11056 } 11057 11058 switch(p.instrumentLocation) 11059 { 11060 case 0 : 11061 v.style += 'mounting=field;'; 11062 break; 11063 case 1 : 11064 v.style += 'mounting=inaccessible;'; 11065 break; 11066 case 2 : 11067 v.style += 'mounting=room;'; 11068 break; 11069 case 3 : 11070 v.style += 'mounting=local;'; 11071 break; 11072 } 11073 11074 break; 11075 11076 case 'PEGateValveBlock' : 11077 case 'PEGlobeValveBlock' : 11078 case 'PEAngleValveBlock' : 11079 case 'PEAngleGlobeValveBlock' : 11080 case 'PEPoweredValveBlock' : 11081 11082 var actuator = false; 11083 11084 if (obj.Class == 'PEPoweredValveBlock') 11085 { 11086 if (p.poweredHandOperated != 1) 11087 { 11088 actuator = true; 11089 } 11090 } 11091 else 11092 { 11093 if (p.handOperated != 1) 11094 { 11095 actuator = true; 11096 } 11097 } 11098 11099 if (actuator) 11100 { 11101 var p = getAction(obj).Properties; 11102 var b = p.BoundingBox; 11103 11104 var oldH = b.h; 11105 11106 if (obj.Class == 'PEAngleValveBlock' || obj.Class == 'PEAngleGlobeValveBlock') 11107 { 11108 b.h = b.h * 0.7; 11109 } 11110 else 11111 { 11112 b.h = b.h * 0.6; 11113 } 11114 11115 v = new mxCell('', new mxGeometry(Math.round(b.x * scale + dx), Math.round((b.y + oldH - b.h) * scale + dy), 11116 Math.round(b.w * scale), Math.round(b.h * scale)), ''); 11117 v.vertex = true; 11118 updateCell(v, obj, graph); 11119 } 11120 11121 if (obj.Class == 'PEPoweredValveBlock') 11122 { 11123 v.style += 'shape=mxgraph.pid2valves.valve;verticalLabelPosition=bottom;verticalAlign=top;'; 11124 v.style += addAllStyles(v.style, p, a, v); 11125 11126 if (p.poweredHandOperated == 1) 11127 { 11128 v.style += 'valveType=gate;actuator=powered;'; 11129 11130 var item1 = new mxCell('', new mxGeometry(w * 0.325, 0, w * 0.35, h * 0.35), 'part=1;strokeColor=none;fillColor=none;spacingTop=2;'); 11131 item1.vertex = true; 11132 v.insert(item1); 11133 item1.value = convertText(p.PoweredText); 11134 item1.style += (isLastLblHTML? '' : 11135 getFontColor(p.PoweredText) + 11136 getFontStyle(p.PoweredText) + 11137 getTextAlignment(p.PoweredText) + 11138 getTextLeftSpacing(p.PoweredText) + 11139 getTextRightSpacing(p.PoweredText) + 11140 getTextBottomSpacing(p.PoweredText) + 11141 getTextGlobalSpacing(p.PoweredText) 11142 ) + 11143 'fontSize=6;' + 11144 getTextVerticalAlignment(p.PoweredText); 11145 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 11146 } 11147 else 11148 { 11149 v.style += 'valveType=gate;'; 11150 } 11151 } 11152 else 11153 { 11154 v.style += 'verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.pid2valves.valve;'; 11155 11156 v.value = convertText(p.Text); 11157 11158 switch (obj.Class) 11159 { 11160 case 'PEGateValveBlock' : 11161 v.style += 'valveType=gate;'; 11162 break; 11163 11164 case 'PEGlobeValveBlock' : 11165 v.style += 'valveType=globe;'; 11166 break; 11167 11168 case 'PEAngleValveBlock' : 11169 v.style += 'valveType=angle;'; 11170 break; 11171 11172 case 'PEAngleGlobeValveBlock' : 11173 v.style += 'valveType=angleGlobe;flipH=1;'; 11174 break; 11175 } 11176 11177 11178 if (p.handOperated == 1) 11179 { 11180 v.style += 'actuator=man;'; 11181 } 11182 } 11183 11184 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 11185 11186 break; 11187 11188 case 'UI2BrowserBlock' : 11189 v.style += 'shape=mxgraph.mockup.containers.browserWindow;mainText=;'; 11190 11191 if (p.vScroll == 1) 11192 { 11193 if (p.hScroll == 1) 11194 { 11195 var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 130), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11196 } 11197 else 11198 { 11199 var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 110), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11200 } 11201 11202 item3.geometry.relative = true; 11203 item3.geometry.offset = new mxPoint(-20, 110); 11204 item3.vertex = true; 11205 v.insert(item3); 11206 11207 v.style += 'spacingRight=20;'; 11208 } 11209 11210 if (p.hScroll == 1) 11211 { 11212 if (p.vScroll == 1) 11213 { 11214 var item4 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11215 } 11216 else 11217 { 11218 var item4 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11219 } 11220 11221 item4.geometry.relative = true; 11222 item4.geometry.offset = new mxPoint(0, -20); 11223 item4.vertex = true; 11224 v.insert(item4); 11225 } 11226 11227 v.style += addAllStyles(v.style, p, a, v); 11228 break; 11229 case 'UI2WindowBlock' : 11230 v.value = convertText(p.Title); 11231 v.style += 'shape=mxgraph.mockup.containers.window;mainText=;align=center;verticalAlign=top;spacing=5;' + 11232 (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' : 11233 getFontSize(p.Title) + 11234 getFontColor(p.Title) + 11235 getFontStyle(p.Title)); 11236 11237 if (p.vScroll == 1) 11238 { 11239 if (p.hScroll == 1) 11240 { 11241 var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 50), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11242 } 11243 else 11244 { 11245 var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 30), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11246 } 11247 11248 item3.geometry.relative = true; 11249 item3.geometry.offset = new mxPoint(-20, 30); 11250 item3.vertex = true; 11251 v.insert(item3); 11252 11253 v.style += 'spacingRight=20;'; 11254 } 11255 11256 if (p.hScroll == 1) 11257 { 11258 if (p.vScroll == 1) 11259 { 11260 var item4 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11261 } 11262 else 11263 { 11264 var item4 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11265 } 11266 11267 item4.geometry.relative = true; 11268 item4.geometry.offset = new mxPoint(0, -20); 11269 item4.vertex = true; 11270 v.insert(item4); 11271 } 11272 11273 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 11274 11275 break; 11276 case 'UI2DialogBlock' : 11277 v.value = convertText(p.Text); 11278 v.style += 11279 getLabelStyle(p.Text, isLastLblHTML); 11280 11281 var item1 = new mxCell('', new mxGeometry(0, 0, w, 30), 'part=1;resizeHeight=0;'); 11282 item1.vertex = true; 11283 v.insert(item1); 11284 item1.value = convertText(p.Title); 11285 item1.style += getLabelStyle(p.Title, isLastLblHTML); 11286 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 11287 11288 var item2 = new mxCell('', new mxGeometry(1, 0.5, 20, 20), 'ellipse;part=1;strokeColor=#008cff;resizable=0;fillColor=none;html=1;'); 11289 item2.geometry.relative = true; 11290 item2.geometry.offset = new mxPoint(-25, -10); 11291 item2.vertex = true; 11292 item1.insert(item2); 11293 11294 if (p.vScroll == 1) 11295 { 11296 if (p.hScroll == 1) 11297 { 11298 var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 50), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11299 } 11300 else 11301 { 11302 var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 30), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11303 } 11304 11305 item3.geometry.relative = true; 11306 item3.geometry.offset = new mxPoint(-20, 30); 11307 item3.vertex = true; 11308 v.insert(item3); 11309 11310 v.style += 'spacingRight=20;'; 11311 } 11312 11313 if (p.hScroll == 1) 11314 { 11315 if (p.vScroll == 1) 11316 { 11317 var item4 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11318 } 11319 else 11320 { 11321 var item4 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11322 } 11323 11324 item4.geometry.relative = true; 11325 item4.geometry.offset = new mxPoint(0, -20); 11326 item4.vertex = true; 11327 v.insert(item4); 11328 } 11329 11330 v.style += addAllStyles(v.style, p, a, v); 11331 p.Text = null; 11332 break; 11333 case 'UI2AccordionBlock' : 11334 11335 var item1 = new Array(); 11336 var itemH = 25; 11337 11338 for (var i = 0; i <= (p.Panels - 1); i++) 11339 { 11340 if (i < (p.Selected - 1)) 11341 { 11342 item1[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), 'part=1;fillColor=#000000;fillOpacity=25;'); 11343 item1[i].vertex = true; 11344 v.insert(item1[i]); 11345 item1[i].value = convertText(p['Panel_' + (i + 1)]); 11346 item1[i].style += 11347 getLabelStyle(p['Panel_' + (i + 1)], isLastLblHTML); 11348 } 11349 else if (i == (p.Selected - 1)) 11350 { 11351 item1[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), 'part=1;fillColor=none;'); 11352 item1[i].vertex = true; 11353 v.insert(item1[i]); 11354 item1[i].value = convertText(p['Panel_' + (i + 1)]); 11355 item1[i].style += 11356 getLabelStyle(p['Panel_' + (i + 1)], isLastLblHTML); 11357 } 11358 else 11359 { 11360 item1[i] = new mxCell('', new mxGeometry(0, h - (p.Panels - p.Selected) * itemH + (i - p.Selected) * itemH, w, itemH), 'part=1;fillColor=#000000;fillOpacity=25;'); 11361 item1[i].vertex = true; 11362 v.insert(item1[i]); 11363 item1[i].value = convertText(p['Panel_' + (i + 1)]); 11364 item1[i].style += 11365 getLabelStyle(p['Panel_' + (i + 1)], isLastLblHTML); 11366 } 11367 11368 if (item1[i].style.indexOf(';align=') < 0) 11369 { 11370 item1[i].style += 'align=left;spacingLeft=5;'; 11371 } 11372 } 11373 11374 var fc2 = getStrokeColor(p, a); 11375 fc2 = fc2.replace('strokeColor', 'fillColor2'); 11376 11377 if (fc2 == '') 11378 { 11379 fc2 = 'fillColor2=#000000;' 11380 } 11381 11382 if (p.vScroll == 1) 11383 { 11384 if (p.hScroll == 1) 11385 { 11386 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h - p.Selected * itemH -20 - (p.Panels - p.Selected) * itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11387 } 11388 else 11389 { 11390 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h - p.Selected * itemH - (p.Panels - p.Selected) * itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11391 } 11392 11393 item2.geometry.relative = true; 11394 item2.geometry.offset = new mxPoint(-20, p.Selected * itemH); 11395 item2.vertex = true; 11396 v.insert(item2); 11397 11398 v.style += 'spacingRight=20;'; 11399 11400 item2.style += fc2; 11401 item2.style += addAllStyles(item2.style, p, a, item2); 11402 } 11403 11404 if (p.hScroll == 1) 11405 { 11406 if (p.vScroll == 1) 11407 { 11408 var item3 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11409 } 11410 else 11411 { 11412 var item3 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11413 } 11414 11415 item3.geometry.relative = true; 11416 item3.geometry.offset = new mxPoint(0, -20 - (p.Panels - p.Selected) * itemH); 11417 item3.vertex = true; 11418 v.insert(item3); 11419 11420 item3.style += fc2; 11421 item3.style += addAllStyles(item3.style, p, a, item3); 11422 } 11423 11424 if (p.vScroll == 1) 11425 { 11426 item4 = new mxCell('', new mxGeometry(0, p.Selected * itemH, w - 20, h - p.Selected * itemH -20 - (p.Panels - p.Selected) * itemH), 'part=1;fillColor=none;strokeColor=none;'); 11427 } 11428 else 11429 { 11430 item4 = new mxCell('', new mxGeometry(0, p.Selected * itemH, w - 20, h - p.Selected * itemH - (p.Panels - p.Selected) * itemH), 'part=1;fillColor=none;strokeColor=none;'); 11431 } 11432 item4.vertex = true; 11433 v.insert(item4); 11434 item4.value = convertText(p['Content_1']); 11435 item4.style += 11436 getLabelStyle(p['Content_1'], isLastLblHTML); 11437 11438 if (!isLastLblHTML && item4.style.indexOf(';align=') < 0) 11439 { 11440 item4.style += 'align=left;spacingLeft=5;'; 11441 } 11442 11443 v.style += addAllStyles(v.style, p, a, v); 11444 11445 break; 11446 case 'UI2TabBarContainerBlock' : 11447 v.style += 'strokeColor=none;fillColor=none;'; 11448 11449 var item1 = new Array(); 11450 var item2 = new Array(); 11451 var itemH = 25; 11452 var itemS = 3; // tab spacing 11453 var itemW = (w + itemS) / (p.Tabs + 1); 11454 var startW = 10; 11455 11456 var bg = new mxCell('', new mxGeometry(0, itemH, w, h - itemH), 'part=1;'); 11457 bg.vertex = true; 11458 v.insert(bg); 11459 bg.style += addAllStyles(bg.style, p, a, bg); 11460 11461 for (var i = 0; i <= (p.Tabs - 1); i++) 11462 { 11463 if (i == (p.Selected - 1)) 11464 { 11465 item2[i] = new mxCell('', new mxGeometry(startW + i * itemW, 0, itemW - itemS, itemH), ''); 11466 item2[i].vertex = true; 11467 v.insert(item2[i]); 11468 item2[i].value = convertText(p['Tab_' + (i + 1)]); 11469 item2[i].style += 11470 getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML); 11471 } 11472 else 11473 { 11474 item1[i] = new mxCell('', new mxGeometry(startW + i * itemW, 0, itemW - itemS, itemH), 'strokeColor=none;'); 11475 item1[i].vertex = true; 11476 v.insert(item1[i]); 11477 item1[i].style += 11478 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]); 11479 11480 item2[i] = new mxCell('', new mxGeometry(0, 0, itemW - itemS, itemH), 'fillColor=#000000;fillOpacity=25;'); 11481 item2[i].vertex = true; 11482 item1[i].insert(item2[i]); 11483 item2[i].value = convertText(p['Tab_' + (i + 1)]); 11484 item2[i].style += 11485 getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML); 11486 } 11487 11488 if (item2[i].style.indexOf(';align=') < 0) 11489 { 11490 item2[i].style += 'align=left;spacingLeft=2;'; 11491 } 11492 11493 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 11494 } 11495 11496 var fc2 = getStrokeColor(p, a); 11497 fc2 = fc2.replace('strokeColor', 'fillColor2'); 11498 11499 if (fc2 == '') 11500 { 11501 fc2 = 'fillColor2=#000000;' 11502 } 11503 11504 if (p.vScroll == 1) 11505 { 11506 if (p.hScroll == 1) 11507 { 11508 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h -20 - itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11509 } 11510 else 11511 { 11512 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h - itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11513 } 11514 11515 item2.geometry.relative = true; 11516 item2.geometry.offset = new mxPoint(-20, itemH); 11517 item2.vertex = true; 11518 v.insert(item2); 11519 11520 v.style += 'spacingRight=20;'; 11521 11522 item2.style += fc2; 11523 item2.style += addAllStyles(item2.style, p, a, item2); 11524 } 11525 11526 if (p.hScroll == 1) 11527 { 11528 if (p.vScroll == 1) 11529 { 11530 var item3 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11531 } 11532 else 11533 { 11534 var item3 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11535 } 11536 11537 item3.geometry.relative = true; 11538 item3.geometry.offset = new mxPoint(0, -20); 11539 item3.vertex = true; 11540 v.insert(item3); 11541 11542 item3.style += fc2; 11543 item3.style += addAllStyles(item3.style, p, a, item3); 11544 } 11545 11546 break; 11547 11548 case 'UI2TabBar2ContainerBlock' : 11549 v.style += 'strokeColor=none;fillColor=none;'; 11550 11551 var item1 = new Array(); 11552 var item2 = new Array(); 11553 var itemH = 25; // tab height 11554 var itemS = 3; // tab spacing 11555 var itemW = (w + itemS) / p.Tabs; //tab width (including spacing) 11556 11557 var bg = new mxCell('', new mxGeometry(0, itemH, w, h - itemH), 'part=1;'); 11558 bg.vertex = true; 11559 v.insert(bg); 11560 bg.style += addAllStyles(bg.style, p, a, bg); 11561 11562 for (var i = 0; i <= (p.Tabs - 1); i++) 11563 { 11564 if (i == (p.Selected - 1)) 11565 { 11566 item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW - itemS, itemH), ''); 11567 item2[i].vertex = true; 11568 v.insert(item2[i]); 11569 item2[i].value = convertText(p['Tab_' + (i + 1)]); 11570 item2[i].style += 11571 getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML); 11572 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 11573 } 11574 else 11575 { 11576 item1[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW - itemS, itemH), 'strokeColor=none;'); 11577 item1[i].vertex = true; 11578 v.insert(item1[i]); 11579 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]); 11580 11581 item2[i] = new mxCell('', new mxGeometry(0, 0, itemW - itemS, itemH), 'fillColor=#000000;fillOpacity=25;'); 11582 item2[i].vertex = true; 11583 item1[i].insert(item2[i]); 11584 item2[i].value = convertText(p['Tab_' + (i + 1)]); 11585 item2[i].style += 11586 getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML); 11587 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 11588 } 11589 11590 if (item2[i].style.indexOf(';align=') < 0) 11591 { 11592 item2[i].style += 'align=left;spacingLeft=2;'; 11593 } 11594 } 11595 11596 var fc2 = getStrokeColor(p, a); 11597 fc2 = fc2.replace('strokeColor', 'fillColor2'); 11598 11599 if (fc2 == '') 11600 { 11601 fc2 = 'fillColor2=#000000;' 11602 } 11603 11604 if (p.vScroll == 1) 11605 { 11606 if (p.hScroll == 1) 11607 { 11608 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h -20 - itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11609 } 11610 else 11611 { 11612 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h - itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11613 } 11614 11615 item2.geometry.relative = true; 11616 item2.geometry.offset = new mxPoint(-20, itemH); 11617 item2.vertex = true; 11618 v.insert(item2); 11619 11620 v.style += 'spacingRight=20;'; 11621 11622 item2.style += fc2; 11623 item2.style += addAllStyles(item2.style, p, a, item2); 11624 } 11625 11626 if (p.hScroll == 1) 11627 { 11628 if (p.vScroll == 1) 11629 { 11630 var item3 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11631 } 11632 else 11633 { 11634 var item3 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11635 } 11636 11637 item3.geometry.relative = true; 11638 item3.geometry.offset = new mxPoint(0, -20); 11639 item3.vertex = true; 11640 v.insert(item3); 11641 11642 item3.style += fc2; 11643 item3.style += addAllStyles(item3.style, p, a, item3); 11644 } 11645 11646 break; 11647 11648 case 'UI2VTabBarContainerBlock' : 11649 v.style += 'strokeColor=none;fillColor=none;'; 11650 11651 var item1 = new Array(); 11652 var item2 = new Array(); 11653 var itemS = 3; // tab spacing 11654 var itemH = 25 + itemS; // tab height (including spacing) 11655 var itemW = 80; //tab width 11656 var startH = 10; 11657 11658 var bg = new mxCell('', new mxGeometry(itemW, 0, w - itemW, h), 'part=1;'); 11659 bg.vertex = true; 11660 v.insert(bg); 11661 bg.style += addAllStyles(bg.style, p, a, bg); 11662 11663 for (var i = 0; i <= (p.Tabs - 1); i++) 11664 { 11665 if (i == (p.Selected - 1)) 11666 { 11667 item2[i] = new mxCell('', new mxGeometry(0, startH + i * itemH, itemW, itemH - itemS), ''); 11668 item2[i].vertex = true; 11669 v.insert(item2[i]); 11670 item2[i].value = convertText(p['Tab_' + (i + 1)]); 11671 item2[i].style += 11672 getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML); 11673 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 11674 } 11675 else 11676 { 11677 item1[i] = new mxCell('', new mxGeometry(0, startH + i * itemH, itemW, itemH - itemS), 'strokeColor=none;'); 11678 item1[i].vertex = true; 11679 v.insert(item1[i]); 11680 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]); 11681 11682 item2[i] = new mxCell('', new mxGeometry(0, 0, itemW, itemH - itemS), 'fillColor=#000000;fillOpacity=25;'); 11683 item2[i].vertex = true; 11684 item1[i].insert(item2[i]); 11685 item2[i].value = convertText(p['Tab_' + (i + 1)]); 11686 item2[i].style += 11687 getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML); 11688 } 11689 11690 if (item2[i].style.indexOf(';align=') < 0) 11691 { 11692 item2[i].style += 'align=left;spacingLeft=2;'; 11693 } 11694 11695 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 11696 } 11697 11698 var fc2 = getStrokeColor(p, a); 11699 fc2 = fc2.replace('strokeColor', 'fillColor2'); 11700 11701 if (fc2 == '') 11702 { 11703 fc2 = 'fillColor2=#000000;' 11704 } 11705 11706 if (p.vScroll == 1) 11707 { 11708 if (p.hScroll == 1) 11709 { 11710 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h -20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11711 } 11712 else 11713 { 11714 var item2 = new mxCell('', new mxGeometry(1, 0, 20, h), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;'); 11715 } 11716 11717 item2.geometry.relative = true; 11718 item2.geometry.offset = new mxPoint(-20, 0); 11719 item2.vertex = true; 11720 v.insert(item2); 11721 11722 v.style += 'spacingRight=20;'; 11723 11724 item2.style += fc2; 11725 item2.style += addAllStyles(item2.style, p, a, item2); 11726 } 11727 11728 if (p.hScroll == 1) 11729 { 11730 if (p.vScroll == 1) 11731 { 11732 var item3 = new mxCell('', new mxGeometry(itemW, 1, w - 20 - itemW, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11733 } 11734 else 11735 { 11736 var item3 = new mxCell('', new mxGeometry(itemW, 1, w - itemW, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;'); 11737 } 11738 11739 item3.geometry.relative = true; 11740 item3.geometry.offset = new mxPoint(0, -20); 11741 item3.vertex = true; 11742 v.insert(item3); 11743 11744 item3.style += fc2; 11745 item3.style += addAllStyles(item3.style, p, a, item3); 11746 } 11747 11748 break; 11749 case 'UI2CheckBoxBlock' : 11750 v.style += 'strokeColor=none;fillColor=none;'; 11751 11752 var itemH = h / p.Options; 11753 var item1 = new Array(); //checkbox 11754 var item2 = new Array(); //checkmark 11755 11756 for (var i = 0; i < p.Options; i++) 11757 { 11758 item1[i] = new mxCell('', new mxGeometry(0, i * itemH + itemH * 0.5 - 5, 10, 10), 'labelPosition=right;part=1;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacingLeft=3;'); 11759 item1[i].vertex = true; 11760 v.insert(item1[i]); 11761 item1[i].value = convertText(p['Option_' + (i + 1)]); 11762 item1[i].style += 11763 getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML); 11764 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML); 11765 11766 if (p.Selected[i + 1] != null) 11767 { 11768 if (p.Selected[i + 1] == 1) 11769 { 11770 var fc = getStrokeColor(p, a); 11771 fc = fc.replace('strokeColor', 'fillColor'); 11772 11773 if (fc == '') 11774 { 11775 fc = 'fillColor=#000000;' 11776 } 11777 11778 item2[i] = new mxCell('', new mxGeometry(2, 2, 6, 6), 'shape=mxgraph.mscae.general.checkmark;part=1;'); 11779 item2[i].vertex = true; 11780 item1[i].insert(item2[i]); 11781 item2[i].style += fc; 11782 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 11783 } 11784 } 11785 11786 } 11787 11788 break; 11789 case 'UI2HorizontalCheckBoxBlock' : 11790 v.style += 'strokeColor=none;fillColor=none;'; 11791 11792 var itemW = w / p.Options; 11793 var item1 = new Array(); //checkbox 11794 var item2 = new Array(); //checkmark 11795 11796 for (var i = 0; i < p.Options; i++) 11797 { 11798 item1[i] = new mxCell('', new mxGeometry(i * itemW, h * 0.5 - 5, 10, 10), 'labelPosition=right;part=1;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacingLeft=3;'); 11799 item1[i].vertex = true; 11800 v.insert(item1[i]); 11801 item1[i].value = convertText(p['Option_' + (i + 1)]); 11802 item1[i].style += 11803 getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML); 11804 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML); 11805 11806 if (p.Selected[i + 1] != null) 11807 { 11808 if (p.Selected[i + 1] == 1) 11809 { 11810 var fc = getStrokeColor(p, a); 11811 fc = fc.replace('strokeColor', 'fillColor'); 11812 11813 if (fc == '') 11814 { 11815 fc = 'fillColor=#000000;' 11816 } 11817 11818 item2[i] = new mxCell('', new mxGeometry(2, 2, 6, 6), 'shape=mxgraph.mscae.general.checkmark;part=1;'); 11819 item2[i].vertex = true; 11820 item1[i].insert(item2[i]); 11821 item2[i].style += fc; 11822 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 11823 } 11824 } 11825 11826 } 11827 11828 break; 11829 case 'UI2RadioBlock' : 11830 v.style += 'strokeColor=none;fillColor=none;'; 11831 11832 var itemH = h / p.Options; 11833 var item1 = new Array(); //checkbox 11834 var item2 = new Array(); //checkmark 11835 11836 for (var i = 0; i < p.Options; i++) 11837 { 11838 item1[i] = new mxCell('', new mxGeometry(0, i * itemH + itemH * 0.5 - 5, 10, 10), 'ellipse;labelPosition=right;part=1;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacingLeft=3;'); 11839 item1[i].vertex = true; 11840 v.insert(item1[i]); 11841 item1[i].value = convertText(p['Option_' + (i + 1)]); 11842 item1[i].style += 11843 getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML); 11844 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML); 11845 11846 if (p.Selected != null) 11847 { 11848 if (p.Selected == (i + 1)) 11849 { 11850 var fc = getStrokeColor(p, a); 11851 fc = fc.replace('strokeColor', 'fillColor'); 11852 11853 if (fc == '') 11854 { 11855 fc = 'fillColor=#000000;' 11856 } 11857 11858 item2[i] = new mxCell('', new mxGeometry(2.5, 2.5, 5, 5), 'ellipse;'); 11859 item2[i].vertex = true; 11860 item1[i].insert(item2[i]); 11861 item2[i].style += fc; 11862 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 11863 } 11864 } 11865 } 11866 11867 break; 11868 case 'UI2HorizontalRadioBlock' : 11869 v.style += 'strokeColor=none;fillColor=none;'; 11870 11871 var itemW = w / p.Options; 11872 var item1 = new Array(); //checkbox 11873 var item2 = new Array(); //checkmark 11874 11875 for (var i = 0; i < p.Options; i++) 11876 { 11877 item1[i] = new mxCell('', new mxGeometry(i * itemW, h * 0.5 - 5, 10, 10), 'ellipse;labelPosition=right;part=1;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacingLeft=3;'); 11878 item1[i].vertex = true; 11879 v.insert(item1[i]); 11880 item1[i].value = convertText(p['Option_' + (i + 1)]); 11881 item1[i].style += 11882 getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML); 11883 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML); 11884 11885 if (p.Selected != null) 11886 { 11887 if (p.Selected == (i + 1)) 11888 { 11889 var fc = getStrokeColor(p, a); 11890 fc = fc.replace('strokeColor', 'fillColor'); 11891 11892 if (fc == '') 11893 { 11894 fc = 'fillColor=#000000;' 11895 } 11896 11897 item2[i] = new mxCell('', new mxGeometry(2, 2, 6, 6), 'ellipse;part=1;'); 11898 item2[i].vertex = true; 11899 item1[i].insert(item2[i]); 11900 item2[i].style += fc; 11901 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 11902 } 11903 } 11904 11905 } 11906 11907 break; 11908 case 'UI2SelectBlock' : 11909 v.style += 'shape=mxgraph.mockup.forms.comboBox;strokeColor=#999999;fillColor=#ddeeff;align=left;fillColor2=#aaddff;mainText=;fontColor=#666666'; 11910 v.value = convertText(p.Selected); 11911 break; 11912 case 'UI2HSliderBlock' : 11913 case 'UI2VSliderBlock' : 11914 v.style += 'shape=mxgraph.mockup.forms.horSlider;sliderStyle=basic;handleStyle=handle;'; 11915 11916 if (obj.Class == 'UI2VSliderBlock') 11917 { 11918 v.style += 'direction=south;'; 11919 } 11920 11921 v.style += 'sliderPos=' + (p.ScrollVal * 100) + ';'; 11922 v.style += addAllStyles(v.style, p, a, v); 11923 11924 break; 11925 11926 case 'UI2DatePickerBlock' : 11927 v.style += 'strokeColor=none;fillColor=none;'; 11928 11929 var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.6, h), 'part=1;'); 11930 item1.vertex = true; 11931 v.insert(item1); 11932 item1.value = convertText(p.Date); 11933 item1.style += 11934 getLabelStyle(p.Date, isLastLblHTML); 11935 v.style += addAllStyles(v.style, p, a, v); 11936 11937 var fc = getStrokeColor(p, a); 11938 fc = fc.replace('strokeColor', 'fillColor'); 11939 11940 if (fc == '') 11941 { 11942 fc = 'fillColor=#000000;' 11943 } 11944 11945 var item2 = new mxCell('', new mxGeometry(w * 0.75, 0, w * 0.25, h), 'part=1;shape=mxgraph.gmdl.calendar;'); 11946 item2.vertex = true; 11947 v.insert(item2); 11948 item2.style += fc; 11949 item2.style += addAllStyles(item2.style, p, a, item2); 11950 11951 break; 11952 11953 case 'UI2SearchBlock' : 11954 v.value = convertText(p.Search); 11955 v.style += 'shape=mxgraph.mockup.forms.searchBox;mainText=;flipH=1;align=left;spacingLeft=26;' + 11956 getLabelStyle(p.Search, isLastLblHTML); 11957 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 11958 11959 break; 11960 11961 case 'UI2NumericStepperBlock' : 11962 var fc = getStrokeColor(p, a); 11963 fc = fc.replace('strokeColor', 'fillColor'); 11964 11965 if (fc == '') 11966 { 11967 fc = 'fillColor=#000000;' 11968 } 11969 11970 v.value = convertText(p.Number); 11971 v.style += 'shape=mxgraph.mockup.forms.spinner;spinLayout=right;spinStyle=normal;adjStyle=triangle;mainText=;align=left;spacingLeft=8;' + fc + 11972 getLabelStyle(p.Number, isLastLblHTML); 11973 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 11974 11975 break; 11976 11977 case 'UI2TableBlock' : 11978 //Create table as HTML one 11979 try 11980 { 11981 var fillClr = getColor(p.FillColor), lineClr = getColor(p.LineColor), header, altRow, borderStyle = '', rowH = 20; 11982 v.style = 'html=1;overflow=fill;verticalAlign=top;spacing=0;'; 11983 var htmlTable = '<table style="width:100%;height:100%;border-collapse: collapse;border: 1px solid ' + lineClr + ';">'; 11984 var csvLines = p.Data.split('\n'); 11985 11986 if (!p.AltRow || p.AltRow == 'default') 11987 { 11988 altRow = getDarkerClr(fillClr, 0.95); 11989 } 11990 else if (p.AltRow == 'none') 11991 { 11992 altRow = fillClr; 11993 } 11994 else 11995 { 11996 altRow = getColor(p.AltRow); 11997 } 11998 11999 if (!p.Header || p.Header == 'default') 12000 { 12001 header = getDarkerClr(fillClr, 0.8); 12002 } 12003 else if (p.Header == 'none') 12004 { 12005 header = altRow; 12006 } 12007 else 12008 { 12009 header = getColor(p.Header); 12010 } 12011 12012 if (p.GridLines == 'full') 12013 { 12014 borderStyle = 'border: 1px solid ' + lineClr; 12015 rowH = 19; 12016 } 12017 else if (p.GridLines == 'row') 12018 { 12019 borderStyle = 'border-bottom: 1px solid ' + lineClr; 12020 rowH = 19; 12021 } 12022 else if (p.GridLines == 'default' || p.GridLines == 'column') 12023 { 12024 borderStyle = 'border-right: 1px solid ' + lineClr; 12025 } 12026 12027 csvLines = csvLines.filter(function(l) 12028 { 12029 return l; 12030 }); 12031 12032 if (/^\{[^}]*\}$/.test(csvLines[csvLines.length - 1])) 12033 { 12034 csvLines.pop(); 12035 } 12036 12037 var cols = csvLines[0].split(',').length; 12038 12039 var emptyRow = ''; 12040 12041 for (var j = 0; j < cols - 1; j++) 12042 { 12043 emptyRow += ' , '; 12044 } 12045 12046 for (var i = csvLines.length; i < Math.ceil(h / 20); i++) 12047 { 12048 csvLines.push(emptyRow) 12049 } 12050 12051 for (var i = 0; i < csvLines.length; i++) 12052 { 12053 htmlTable += '<tr style="height: ' + rowH + 'px;background:' + (i == 0? header : 12054 (i % 2? fillClr : altRow)) + '">'; 12055 var els = csvLines[i].split(','); 12056 12057 for (var j = 0; j < els.length; j++) 12058 { 12059 var cellProp = p['Cell_' + i + '_' + j]; 12060 var txtClr = cellProp && cellProp.m && cellProp.m[0] && cellProp.m[0].n == 'c'? getColor(cellProp.m[0].v) : lineClr; 12061 htmlTable += '<td style="height: ' + rowH + 'px;color:' + txtClr + ';' + borderStyle + '">' + mxUtils.htmlEntities(els[j]) + '</td>'; 12062 } 12063 12064 htmlTable += '</tr>'; 12065 } 12066 12067 htmlTable += '</table>'; 12068 v.value = htmlTable; 12069 } 12070 catch(e) 12071 { 12072 //Ignore 12073 console.log(e); 12074 } 12075 break; 12076 case 'UI2ButtonBarBlock' : 12077 v.style += addAllStyles(v.style, p, a, v); 12078 12079 var item1 = new Array(); 12080 var item2 = new Array(); 12081 var itemW = w / p.Buttons; 12082 12083 for (var i = 0; i <= (p.Buttons - 1); i++) 12084 { 12085 if (i == (p.Selected - 1)) 12086 { 12087 item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), ''); 12088 item2[i].vertex = true; 12089 v.insert(item2[i]); 12090 item2[i].value = convertText(p['Button_' + (i + 1)]); 12091 item2[i].style += 12092 getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML); 12093 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 12094 } 12095 else 12096 { 12097 item1[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'strokeColor=none;'); 12098 item1[i].vertex = true; 12099 v.insert(item1[i]); 12100 item1[i].style += 12101 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]); 12102 12103 item2[i] = new mxCell('', new mxGeometry(0, 0, itemW, h), 'fillColor=#000000;fillOpacity=25;'); 12104 item2[i].vertex = true; 12105 item1[i].insert(item2[i]); 12106 item2[i].value = convertText(p['Button_' + (i + 1)]); 12107 item2[i].style += 12108 getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML); 12109 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 12110 } 12111 } 12112 12113 break; 12114 12115 case 'UI2VerticalButtonBarBlock' : 12116 v.style += addAllStyles(v.style, p, a, v); 12117 12118 var item1 = new Array(); 12119 var item2 = new Array(); 12120 var itemH = h / p.Buttons; 12121 12122 for (var i = 0; i <= (p.Buttons - 1); i++) 12123 { 12124 if (i == (p.Selected - 1)) 12125 { 12126 item2[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), ''); 12127 item2[i].vertex = true; 12128 v.insert(item2[i]); 12129 item2[i].value = convertText(p['Button_' + (i + 1)]); 12130 item2[i].style += 12131 getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML); 12132 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 12133 } 12134 else 12135 { 12136 item1[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), 'strokeColor=none;'); 12137 item1[i].vertex = true; 12138 v.insert(item1[i]); 12139 item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]); 12140 12141 item2[i] = new mxCell('', new mxGeometry(0, 0, w, itemH), 'fillColor=#000000;fillOpacity=25;'); 12142 item2[i].vertex = true; 12143 item1[i].insert(item2[i]); 12144 item2[i].value = convertText(p['Button_' + (i + 1)]); 12145 item2[i].style += 12146 getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML); 12147 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML); 12148 } 12149 } 12150 12151 break; 12152 case 'UI2LinkBarBlock' : 12153 v.style += 'strokeColor=none;fillColor=none;'; 12154 v.style += addAllStyles(v.style, p, a, v); 12155 12156 var item1 = new Array(); 12157 var item2 = new Array(); 12158 var itemW = w / p.Links; 12159 12160 for (var i = 0; i < (p.Links); i++) 12161 { 12162 if (i != 0) 12163 { 12164 item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'shape=partialRectangle;top=0;bottom=0;right=0;fillColor=none;'); 12165 item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]); 12166 } 12167 else 12168 { 12169 item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'fillColor=none;strokeColor=none;'); 12170 } 12171 12172 item2[i].vertex = true; 12173 v.insert(item2[i]); 12174 item2[i].value = convertText(p['Link_' + (i + 1)]); 12175 item2[i].style += 12176 getLabelStyle(p['Link_' + (i + 1)], isLastLblHTML); 12177 } 12178 12179 break; 12180 12181 case 'UI2BreadCrumbsBlock' : 12182 v.style += 'strokeColor=none;fillColor=none;'; 12183 v.style += addAllStyles(v.style, p, a, v); 12184 12185 var item1 = new Array(); 12186 var item2 = new Array(); 12187 var itemW = w / p.Links; 12188 12189 for (var i = 0; i < (p.Links); i++) 12190 { 12191 item1[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'fillColor=none;strokeColor=none;'); 12192 item1[i].vertex = true; 12193 v.insert(item1[i]); 12194 item1[i].value = convertText(p['Link_' + (i + 1)]); 12195 item1[i].style += 12196 getLabelStyle(p['Link_' + (i + 1)], isLastLblHTML); 12197 } 12198 12199 for (var i = 1; i < (p.Links); i++) 12200 { 12201 item2[i] = new mxCell('', new mxGeometry(i / p.Links, 0.5, 6, 10), 'shape=mxgraph.ios7.misc.right;'); 12202 item2[i].geometry.relative = true; 12203 item2[i].geometry.offset = new mxPoint(-3, -5); 12204 item2[i].vertex = true; 12205 v.insert(item2[i]); 12206 } 12207 12208 break; 12209 case 'UI2MenuBarBlock' : 12210 v.style += 'strokeColor=none;'; 12211 v.style += addAllStyles(v.style, p, a, v); 12212 12213 var item1 = new Array(); 12214 var itemW = w / (p.Buttons + 1); 12215 12216 for (var i = 0; i <= (p.Buttons - 1); i++) 12217 { 12218 if (i != (p.Selected - 1)) 12219 { 12220 item1[i] = new mxCell('', new mxGeometry(0, 0, itemW, h), 'strokeColor=none;fillColor=none;resizeHeight=1;'); 12221 } 12222 else 12223 { 12224 item1[i] = new mxCell('', new mxGeometry(0, 0, itemW, h), 'fillColor=#000000;fillOpacity=25;strokeColor=none;resizeHeight=1;'); 12225 } 12226 12227 item1[i].geometry.relative = true; 12228 item1[i].geometry.offset = new mxPoint(i * itemW, 0); 12229 item1[i].vertex = true; 12230 v.insert(item1[i]); 12231 item1[i].value = convertText(p['MenuItem_' + (i + 1)]); 12232 item1[i].style += 12233 getLabelStyle(p['MenuItem_' + (i + 1)], isLastLblHTML); 12234 } 12235 12236 break; 12237 case 'UI2AtoZBlock' : 12238 v.style += 'fillColor=none;strokeColor=none;' + 12239 getLabelStyle(p['Text_0']); 12240 12241 v.value = '0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'; 12242 12243 break; 12244 12245 case 'UI2PaginationBlock' : 12246 v.style += 'fillColor=none;strokeColor=none;' + 12247 getLabelStyle(p.Text_prev); 12248 12249 v.value = convertText(p.Text_prev) + ' '; 12250 12251 for (var i = 0; i < p.Links; i++) 12252 { 12253 v.value += convertText(p['Link_' + (i + 1)]) + ' '; 12254 } 12255 12256 v.value += convertText(p.Text_next); 12257 12258 break; 12259 12260 case 'UI2ContextMenuBlock' : 12261 v.style += addAllStyles(v.style, p, a, v); 12262 12263 var item = new Array(); 12264 var icon = new Array(); 12265 var shortcut = new Array(); 12266 var itemH = h / p.Lines; 12267 var st = null; 12268 12269 for (var i = 0; i < p.Lines; i++) 12270 { 12271 //add label 12272 if (p['Item_' + (i + 1)] != null) 12273 { 12274 if (st == null) 12275 { 12276 st = '' + 12277 getFontSize(p['Item_' + (i + 1)]) + 12278 getFontColor(p['Item_' + (i + 1)]) + 12279 getFontStyle(p['Item_' + (i + 1)]); 12280 } 12281 12282 item[i] = new mxCell('', new mxGeometry(0, i * h / p.Lines, w, itemH), 'strokeColor=none;fillColor=none;spacingLeft=20;align=left;html=1;'); 12283 item[i].vertex = true; 12284 v.insert(item[i]); 12285 item[i].style += st; 12286 12287 item[i].value = convertText(p['Item_' + (i + 1)]); 12288 } 12289 12290 //add icon 12291 if (p.Icons[(i + 1)] != null && item[i] != null) 12292 { 12293 if (p.Icons[(i + 1)] == 'dot') 12294 { 12295 icon[i] = new mxCell('', new mxGeometry(0, 0.5, 8, 8), 'ellipse;strokeColor=none;'); 12296 icon[i].geometry.offset = new mxPoint(6, -4); 12297 } 12298 else if (p.Icons[(i + 1)] == 'check') 12299 { 12300 icon[i] = new mxCell('', new mxGeometry(0, 0.5, 7, 8), 'shape=mxgraph.mscae.general.checkmark;strokeColor=none;'); 12301 icon[i].geometry.offset = new mxPoint(6.5, -4); 12302 } 12303 12304 if (icon[i] != null) 12305 { 12306 icon[i].geometry.relative = true; 12307 icon[i].vertex = true; 12308 item[i].insert(icon[i]); 12309 12310 var fc = getStrokeColor(p, a); 12311 fc = fc.replace('strokeColor', 'fillColor'); 12312 12313 if (fc == '') 12314 { 12315 fc = 'fillColor=#000000;' 12316 } 12317 12318 icon[i].style += fc; 12319 } 12320 } 12321 12322 //add shortcut 12323 if (p['Shortcut_' + (i + 1)] != null) 12324 { 12325 if (st == null) 12326 { 12327 st = '' + 12328 getFontSize(p['Shortcut_' + (i + 1)]) + 12329 getFontColor(p['Shortcut_' + (i + 1)]) + 12330 getFontStyle(p['Shortcut_' + (i + 1)]); 12331 } 12332 12333 shortcut[i] = new mxCell('', new mxGeometry(w * 0.6, i * h / p.Lines, w * 0.4, itemH), 'strokeColor=none;fillColor=none;spacingRight=3;align=right;html=1;'); 12334 shortcut[i].vertex = true; 12335 v.insert(shortcut[i]); 12336 shortcut[i].style += st; 12337 12338 shortcut[i].value = convertText(p['Shortcut_' + (i + 1)]); 12339 } 12340 12341 //add line 12342 if (p.Dividers[(i + 1)] != null) 12343 { 12344 item[i] = new mxCell('', new mxGeometry(w * 0.05, i * h / p.Lines, w * 0.9, itemH), 'shape=line;strokeWidth=1;'); 12345 item[i].vertex = true; 12346 v.insert(item[i]); 12347 item[i].style += getStrokeColor(p, a); 12348 } 12349 } 12350 12351 break; 12352 case 'UI2TreePaneBlock' : 12353 break; 12354 12355 case 'UI2ProgressBarBlock' : 12356 v.style += 'shape=mxgraph.mockup.misc.progressBar;fillColor2=#888888;barPos=' + (p.ScrollVal * 100) + ';'; 12357 12358 break; 12359 12360 case 'CalloutSquareBlock': 12361 case 'UI2TooltipSquareBlock' : 12362 v.value = convertText(p.Tip || p.Text); 12363 v.style += 'html=1;shape=callout;flipV=1;base=13;size=7;position=0.5;position2=0.66;rounded=1;arcSize=' + (p.RoundCorners) + ';' + 12364 getLabelStyle(p.Tip || p.Text, isLastLblHTML); 12365 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12366 v.geometry.height += 10; 12367 break; 12368 case 'UI2CalloutBlock' : 12369 v.value = convertText(p.Txt); 12370 v.style += 'shape=ellipse;perimeter=ellipsePerimeter;' + 12371 getLabelStyle(p.Txt, isLastLblHTML); 12372 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12373 12374 break; 12375 12376 case 'UI2AlertBlock' : 12377 v.value = convertText(p.Txt); 12378 v.style += 12379 getLabelStyle(p.Txt, isLastLblHTML); 12380 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12381 12382 var item1 = new mxCell('', new mxGeometry(0, 0, w, 30), 'part=1;resizeHeight=0;'); 12383 item1.vertex = true; 12384 v.insert(item1); 12385 item1.value = convertText(p.Title); 12386 item1.style += 12387 getLabelStyle(p.Title, isLastLblHTML); 12388 item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML); 12389 12390 var item2 = new mxCell('', new mxGeometry(1, 0.5, 20, 20), 'ellipse;part=1;strokeColor=#008cff;resizable=0;fillColor=none;html=1;'); 12391 item2.geometry.relative = true; 12392 item2.geometry.offset = new mxPoint(-25, -10); 12393 item2.vertex = true; 12394 item1.insert(item2); 12395 12396 var bw = 45; 12397 var bh = 20; 12398 var bs = 10; 12399 var totalW = bw * p.Buttons + (bs * p.Buttons - 1) 12400 12401 item3 = new Array(); 12402 12403 for (var i = 0; i < p.Buttons; i++) 12404 { 12405 item3[i] = new mxCell('', new mxGeometry(0.5, 1, bw, bh), 'part=1;html=1;'); 12406 item3[i].geometry.relative = true; 12407 item3[i].geometry.offset = new mxPoint(-totalW * 0.5 + i * (bw + bs), -40); 12408 item3[i].vertex = true; 12409 v.insert(item3[i]); 12410 item3[i].value = convertText(p['Button_' + (i + 1)]); 12411 item3[i].style += 12412 getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML); 12413 item3[i].style += addAllStyles(item3[i].style, p, a, item3[i], isLastLblHTML); 12414 } 12415 12416 break; 12417 12418 case 'UMLClassBlock' : 12419 if (p.Simple == 0) 12420 { 12421 var st = getFillColor(p, a); 12422 var th = Math.round(p.TitleHeight * scale) || 25; 12423 st = st.replace('fillColor', 'swimlaneFillColor'); 12424 12425 if (st == '') 12426 { 12427 st = 'swimlaneFillColor=#ffffff;' 12428 } 12429 12430 v.value = convertText(p.Title); 12431 v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;fontStyle=0;marginBottom=0;' + st + 12432 'startSize=' + th + ';' + 12433 getLabelStyle(p.Title, isLastLblHTML); 12434 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12435 12436 var item = new Array(); 12437 var divider = new Array(); 12438 var currH = th / h; 12439 var curY = th; 12440 12441 for (var i = 0; i <= p.Attributes; i++) 12442 { 12443 if (i > 0) 12444 { 12445 divider[i] = new mxCell('', new mxGeometry(0, curY, 40, 8), 'line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;'); 12446 curY += 8; 12447 divider[i].vertex = true; 12448 v.insert(divider[i]); 12449 } 12450 12451 var itemH = 0; 12452 12453 //Text2 is used when p.Attributes is zero! 12454 if (p.Attributes == 0) 12455 { 12456 i = 1; 12457 itemH = 1; 12458 } 12459 else 12460 { 12461 if (i < p.Attributes) 12462 { 12463 itemH = p['Text' + (i + 1) + 'Percent']; 12464 currH += itemH; 12465 } 12466 else 12467 { 12468 itemH = 1 - currH; 12469 } 12470 } 12471 12472 var extH = p.ExtraHeightSet && i == 1? (p.ExtraHeight * scale) : 0; 12473 12474 var curH = Math.round((h - th) * itemH) + extH; 12475 item[i] = new mxCell('', new mxGeometry(0, curY, w, curH), 'part=1;html=1;whiteSpace=wrap;resizeHeight=0;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;'); 12476 curY += curH; 12477 item[i].vertex = true; 12478 v.insert(item[i]); 12479 item[i].style += st + 12480 getOpacity(p, a, item[i]) + 12481 getLabelStyle(p['Text' + (i + 1)], isLastLblHTML); 12482 12483 item[i].value = convertText(p['Text' + (i + 1)]); 12484 } 12485 } 12486 else 12487 { 12488 v.value = convertText(p.Title); 12489 v.style += 'align=center;'; 12490 v.style += 12491 getLabelStyle(p.Title, isLastLblHTML); 12492 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12493 } 12494 12495 break; 12496 12497 case 'ERDEntityBlock' : 12498 var st = getFillColor(p, a); 12499 var th = p.Name_h * scale; 12500 st = st.replace('fillColor', 'swimlaneFillColor'); 12501 12502 if (st == '') 12503 { 12504 st = 'swimlaneFillColor=#ffffff;' 12505 } 12506 12507 v.value = convertText(p.Name); 12508 v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;fontStyle=0;marginBottom=0;' + st + 12509 'startSize=' + th + ';' + 12510 getLabelStyle(p.Name, isLastLblHTML); 12511 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12512 12513 if (p.ShadedHeader) 12514 { 12515 var st = getColor(p.FillColor); 12516 var darkerClr = getDarkerClr(st, 0.85); 12517 v.style += 'fillColor=' + darkerClr + ';'; 12518 } 12519 else 12520 { 12521 v.style += getFillColor(p, a); 12522 } 12523 12524 var item = new Array(); 12525 var currH = th / h; 12526 var curY = th; 12527 12528 for (var i = 0; i < p.Fields; i++) 12529 { 12530 var itemH = 0; 12531 var curH = p['Field' + (i + 1) + '_h'] * scale; 12532 item[i] = new mxCell('', new mxGeometry(0, curY, w, curH), 'part=1;resizeHeight=0;strokeColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;html=1;whiteSpace=wrap;'); 12533 curY += curH; 12534 item[i].vertex = true; 12535 v.insert(item[i]); 12536 item[i].style += st + 12537 getLabelStyle(p['Field' + (i + 1)], isLastLblHTML); 12538 12539 if (p.AltRows == 1 && (i % 2 != 0)) 12540 { 12541 item[i].style += 'fillColor=#000000;opacity=5;'; 12542 } 12543 else 12544 { 12545 item[i].style += 'fillColor=none;' + 12546 getOpacity(p, a, item[i]); 12547 } 12548 12549 item[i].value = convertText(p['Field' + (i + 1)]); 12550 } 12551 12552 break; 12553 12554 case 'ERDEntityBlock2' : 12555 var st = getFillColor(p, a); 12556 var th = p.Name_h * scale; 12557 st = st.replace('fillColor', 'swimlaneFillColor'); 12558 12559 if (st == '') 12560 { 12561 st = 'swimlaneFillColor=#ffffff;' 12562 } 12563 12564 v.value = convertText(p.Name); 12565 v.style += 'swimlane;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;fontStyle=0;' + st + 12566 'startSize=' + th + ';' + 12567 getLabelStyle(p.Name, isLastLblHTML); 12568 12569 if (p.ShadedHeader) 12570 { 12571 v.style += 'fillColor=#e0e0e0;'; 12572 } 12573 else 12574 { 12575 v.style += getFillColor(p, a); 12576 } 12577 12578 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12579 12580 var item = new Array(); 12581 var key = new Array(); 12582 var currH = th; 12583 var keyW = 30; 12584 12585 if (p.Column1 != null) 12586 { 12587 keyW = p.Column1 * scale; 12588 } 12589 12590 for (var i = 0; i < p.Fields; i++) 12591 { 12592 var itemH = 0; 12593 12594 key[i] = new mxCell('', new mxGeometry(0, currH, keyW, p['Key' + (i + 1) + '_h'] * scale), 'strokeColor=none;part=1;resizeHeight=0;align=center;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;html=1;whiteSpace=wrap;'); 12595 key[i].vertex = true; 12596 v.insert(key[i]); 12597 key[i].style += st + 12598 getLabelStyle(p['Key' + (i + 1)], isLastLblHTML); 12599 12600 if (p.AltRows == 1 && (i % 2 != 0)) 12601 { 12602 key[i].style += 'fillColor=#000000;fillOpacity=5;'; 12603 } 12604 else 12605 { 12606 key[i].style += 'fillColor=none;' + 12607 getOpacity(p, a, key[i]); 12608 } 12609 12610 key[i].value = convertText(p['Key' + (i + 1)]); 12611 12612 item[i] = new mxCell('', new mxGeometry(keyW, currH, w - keyW, p['Field' + (i + 1) + '_h'] * scale), 'shape=partialRectangle;top=0;right=0;bottom=0;part=1;resizeHeight=0;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;html=1;whiteSpace=wrap;'); 12613 item[i].vertex = true; 12614 v.insert(item[i]); 12615 item[i].style += st + 12616 getLabelStyle(p['Field' + (i + 1)], isLastLblHTML); 12617 v.style += addAllStyles(v.style, p, a, v); 12618 12619 if (p.AltRows == 1 && (i % 2 != 0)) 12620 { 12621 item[i].style += 'fillColor=#000000;fillOpacity=5;'; 12622 } 12623 else 12624 { 12625 item[i].style += 'fillColor=none;' + 12626 getOpacity(p, a, item[i]); 12627 } 12628 12629 item[i].value = convertText(p['Field' + (i + 1)]); 12630 12631 currH += p['Key' + (i + 1) + '_h'] * scale; 12632 } 12633 12634 break; 12635 12636 case 'ERDEntityBlock3' : 12637 var st = getFillColor(p, a); 12638 var th = p.Name_h * scale; 12639 st = st.replace('fillColor', 'swimlaneFillColor'); 12640 12641 if (st == '') 12642 { 12643 st = 'swimlaneFillColor=#ffffff;' 12644 } 12645 12646 v.style += 'swimlane;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;fontStyle=0;' + st + 12647 'startSize=' + th + ';' + 12648 getLabelStyle(p.Name); 12649 12650 if (p.ShadedHeader) 12651 { 12652 v.style += 'fillColor=#e0e0e0;'; 12653 } 12654 else 12655 { 12656 v.style += getFillColor(p, a); 12657 } 12658 12659 v.value = convertText(p.Name); 12660 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12661 12662 var item = new Array(); 12663 var key = new Array(); 12664 var currH = th; 12665 var keyW = 30; 12666 12667 if (p.Column1 != null) 12668 { 12669 keyW = p.Column1 * scale; 12670 } 12671 12672 for (var i = 0; i < p.Fields; i++) 12673 { 12674 var itemH = 0; 12675 12676 key[i] = new mxCell('', new mxGeometry(0, currH, keyW, p['Field' + (i + 1) + '_h'] * scale), 'strokeColor=none;part=1;resizeHeight=0;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;'); 12677 key[i].vertex = true; 12678 v.insert(key[i]); 12679 key[i].style += st + 12680 getLabelStyle(p['Field' + (i + 1)], isLastLblHTML); 12681 12682 if (p.AltRows == 1 && (i % 2 != 0)) 12683 { 12684 key[i].style += 'fillColor=#000000;fillOpacity=5;'; 12685 } 12686 else 12687 { 12688 key[i].style += 'fillColor=none;' + 12689 getOpacity(p, a, key[i]); 12690 } 12691 12692 key[i].value = convertText(p['Field' + (i + 1)]); 12693 key[i].style += addAllStyles(key[i].style, p, a, key[i], isLastLblHTML); 12694 12695 item[i] = new mxCell('', new mxGeometry(keyW, currH, w - keyW, p['Type' + (i + 1) + '_h'] * scale), 'shape=partialRectangle;top=0;right=0;bottom=0;part=1;resizeHeight=0;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;'); 12696 item[i].vertex = true; 12697 v.insert(item[i]); 12698 item[i].style += st + 12699 getLabelStyle(p['Type' + (i + 1)], isLastLblHTML); 12700 12701 if (p.AltRows == 1 && (i % 2 != 0)) 12702 { 12703 item[i].style += 'fillColor=#000000;fillOpacity=5;'; 12704 } 12705 else 12706 { 12707 item[i].style += 'fillColor=none;' + 12708 getOpacity(p, a, item[i]); 12709 } 12710 12711 item[i].value = convertText(p['Type' + (i + 1)]); 12712 item[i].style += addAllStyles(item[i].style, p, a, item[i], isLastLblHTML); 12713 12714 currH += p['Field' + (i + 1) + '_h'] * scale; 12715 } 12716 12717 break; 12718 case 'ERDEntityBlock4' : 12719 var st = getFillColor(p, a); 12720 var th = p.Name_h * scale; 12721 st = st.replace('fillColor', 'swimlaneFillColor'); 12722 12723 if (st == '') 12724 { 12725 st = 'swimlaneFillColor=#ffffff;' 12726 } 12727 12728 v.style += 'swimlane;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;fontStyle=0;' + st + 12729 'startSize=' + th + ';' + 12730 getLabelStyle(p.Name); 12731 12732 if (p.ShadedHeader) 12733 { 12734 v.style += 'fillColor=#e0e0e0;'; 12735 } 12736 else 12737 { 12738 v.style += getFillColor(p, a); 12739 } 12740 12741 v.value = convertText(p.Name); 12742 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 12743 12744 var item = new Array(); 12745 var key = new Array(); 12746 var type = new Array(); 12747 var currH = th; 12748 var keyW = 30; 12749 var typeW = 40; 12750 12751 if (p.Column1 != null) 12752 { 12753 keyW = p.Column1 * scale; 12754 } 12755 12756 if (p.Column2 != null) 12757 { 12758 typeW = p.Column2 * scale; 12759 } 12760 12761 for (var i = 0; i < p.Fields; i++) 12762 { 12763 var itemH = 0; 12764 12765 key[i] = new mxCell('', new mxGeometry(0, currH, keyW, p['Key' + (i + 1) + '_h'] * scale), 'strokeColor=none;part=1;resizeHeight=0;align=center;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;'); 12766 key[i].vertex = true; 12767 v.insert(key[i]); 12768 key[i].style += st + 12769 getLabelStyle(p['Key' + (i + 1)], isLastLblHTML); 12770 12771 if (p.AltRows == 1 && (i % 2 != 0)) 12772 { 12773 key[i].style += 'fillColor=#000000;fillOpacity=5;'; 12774 } 12775 else 12776 { 12777 key[i].style += 'fillColor=none;' + 12778 getOpacity(p, a, key[i]); 12779 } 12780 12781 key[i].value = convertText(p['Key' + (i + 1)]); 12782 key[i].style += addAllStyles(key[i].style, p, a, key[i], isLastLblHTML); 12783 12784 item[i] = new mxCell('', new mxGeometry(keyW, currH, w - keyW - typeW, p['Field' + (i + 1) + '_h'] * scale), 'shape=partialRectangle;top=0;right=0;bottom=0;part=1;resizeHeight=0;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;'); 12785 item[i].vertex = true; 12786 v.insert(item[i]); 12787 item[i].style += st + 12788 getLabelStyle(p['Field' + (i + 1)], isLastLblHTML); 12789 12790 if (p.AltRows == 1 && (i % 2 != 0)) 12791 { 12792 item[i].style += 'fillColor=#000000;fillOpacity=5;'; 12793 } 12794 else 12795 { 12796 item[i].style += 'fillColor=none;' + 12797 getOpacity(p, a, item[i]); 12798 } 12799 12800 item[i].value = convertText(p['Field' + (i + 1)]); 12801 item[i].style += addAllStyles(item[i].style, p, a, item[i], isLastLblHTML); 12802 12803 type[i] = new mxCell('', new mxGeometry(w - typeW, currH, typeW, p['Type' + (i + 1) + '_h'] * scale), 'shape=partialRectangle;top=0;right=0;bottom=0;part=1;resizeHeight=0;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;'); 12804 type[i].vertex = true; 12805 v.insert(type[i]); 12806 type[i].style += st + 12807 getLabelStyle(p['Type' + (i + 1)], isLastLblHTML); 12808 12809 if (p.AltRows == 1 && (i % 2 != 0)) 12810 { 12811 type[i].style += 'fillColor=#000000;fillOpacity=5;'; 12812 } 12813 else 12814 { 12815 type[i].style += 'fillColor=none;' + 12816 getOpacity(p, a, type[i]); 12817 } 12818 12819 type[i].value = convertText(p['Type' + (i + 1)]); 12820 type[i].style += addAllStyles(type[i].style, p, a, type[i], isLastLblHTML); 12821 12822 currH += p['Key' + (i + 1) + '_h'] * scale; 12823 } 12824 12825 break; 12826 case 'GCPServiceCardApplicationSystemBlock' : 12827 addGCP2ServiceCard('application_system', w, h, v, p, a); 12828 break; 12829 case 'GCPServiceCardAuthorizationBlock' : 12830 addGCP2ServiceCard('internal_payment_authorization', w, h, v, p, a); 12831 break; 12832 case 'GCPServiceCardBlankBlock' : 12833 addGCP2ServiceCard('blank', w, h, v, p, a); 12834 break; 12835 case 'GCPServiceCardReallyBlankBlock' : 12836 addGCP2ServiceCard('blank', w, h, v, p, a); 12837 break; 12838 case 'GCPServiceCardBucketBlock' : 12839 addGCP2ServiceCard('bucket', w, h, v, p, a); 12840 break; 12841 case 'GCPServiceCardCDNInterconnectBlock' : 12842 addGCP2ServiceCard('google_network_edge_cache', w, h, v, p, a); 12843 break; 12844 case 'GCPServiceCardCloudDNSBlock' : 12845 addGCP2ServiceCard('blank', w, h, v, p, a); 12846 break; 12847 case 'GCPServiceCardClusterBlock' : 12848 addGCP2ServiceCard('cluster', w, h, v, p, a); 12849 break; 12850 case 'GCPServiceCardDiskSnapshotBlock' : 12851 addGCP2ServiceCard('persistent_disk_snapshot', w, h, v, p, a); 12852 break; 12853 case 'GCPServiceCardEdgePopBlock' : 12854 addGCP2ServiceCard('google_network_edge_cache', w, h, v, p, a); 12855 break; 12856 case 'GCPServiceCardFrontEndPlatformServicesBlock' : 12857 addGCP2ServiceCard('frontend_platform_services', w, h, v, p, a); 12858 break; 12859 case 'GCPServiceCardGatewayBlock' : 12860 addGCP2ServiceCard('gateway', w, h, v, p, a); 12861 break; 12862 case 'GCPServiceCardGoogleNetworkBlock' : 12863 addGCP2ServiceCard('google_network_edge_cache', w, h, v, p, a); 12864 break; 12865 case 'GCPServiceCardImageServicesBlock' : 12866 addGCP2ServiceCard('image_services', w, h, v, p, a); 12867 break; 12868 case 'GCPServiceCardLoadBalancerBlock' : 12869 addGCP2ServiceCard('network_load_balancer', w, h, v, p, a); 12870 break; 12871 case 'GCPServiceCardLocalComputeBlock' : 12872 addGCP2ServiceCard('dedicated_game_server', w, h, v, p, a); 12873 break; 12874 case 'GCPServiceCardLocalStorageBlock' : 12875 addGCP2ServiceCard('persistent_disk_snapshot', w, h, v, p, a); 12876 break; 12877 case 'GCPServiceCardLogsAPIBlock' : 12878 addGCP2ServiceCard('logs_api', w, h, v, p, a); 12879 break; 12880 case 'GCPServiceCardMemcacheBlock' : 12881 addGCP2ServiceCard('memcache', w, h, v, p, a); 12882 break; 12883 case 'GCPServiceCardNATBlock' : 12884 addGCP2ServiceCard('nat', w, h, v, p, a); 12885 break; 12886 case 'GCPServiceCardPaymentFormBlock' : 12887 addGCP2ServiceCard('external_payment_form', w, h, v, p, a); 12888 break; 12889 case 'GCPServiceCardPushNotificationsBlock' : 12890 addGCP2ServiceCard('push_notification_service', w, h, v, p, a); 12891 break; 12892 case 'GCPServiceCardScheduledTasksBlock' : 12893 addGCP2ServiceCard('scheduled_tasks', w, h, v, p, a); 12894 break; 12895 case 'GCPServiceCardServiceDiscoveryBlock' : 12896 addGCP2ServiceCard('service_discovery', w, h, v, p, a); 12897 break; 12898 case 'GCPServiceCardSquidProxyBlock' : 12899 addGCP2ServiceCard('squid_proxy', w, h, v, p, a); 12900 break; 12901 case 'GCPServiceCardTaskQueuesBlock' : 12902 addGCP2ServiceCard('task_queues', w, h, v, p, a); 12903 break; 12904 case 'GCPServiceCardVirtualFileSystemBlock' : 12905 addGCP2ServiceCard('virtual_file_system', w, h, v, p, a); 12906 break; 12907 case 'GCPServiceCardVPNGatewayBlock' : 12908 addGCP2ServiceCard('gateway', w, h, v, p, a); 12909 break; 12910 12911 case 'GCPInputDatabase' : 12912 addGCP2UserDeviceCard('database', 1, 0.9, w, h, v, p, a); 12913 break; 12914 case 'GCPInputRecord' : 12915 addGCP2UserDeviceCard('record', 1, 0.66, w, h, v, p, a); 12916 break; 12917 case 'GCPInputPayment' : 12918 addGCP2UserDeviceCard('payment', 1, 0.8, w, h, v, p, a); 12919 break; 12920 case 'GCPInputGateway' : 12921 addGCP2UserDeviceCard('gateway_icon', 1, 0.44, w, h, v, p, a); 12922 break; 12923 case 'GCPInputLocalCompute' : 12924 addGCP2UserDeviceCard('compute_engine_icon', 1, 0.89, w, h, v, p, a); 12925 break; 12926 case 'GCPInputBeacon' : 12927 addGCP2UserDeviceCard('beacon', 0.73, 1, w, h, v, p, a); 12928 break; 12929 case 'GCPInputStorage' : 12930 addGCP2UserDeviceCard('storage', 1, 0.8, w, h, v, p, a); 12931 break; 12932 case 'GCPInputList' : 12933 addGCP2UserDeviceCard('list', 0.89, 1, w, h, v, p, a); 12934 break; 12935 case 'GCPInputStream' : 12936 addGCP2UserDeviceCard('stream', 1, 0.82, w, h, v, p, a); 12937 break; 12938 case 'GCPInputMobileDevices' : 12939 addGCP2UserDeviceCard('mobile_devices', 1, 0.73, w, h, v, p, a); 12940 break; 12941 case 'GCPInputCircuitBoard' : 12942 addGCP2UserDeviceCard('circuit_board', 1, 0.9, w, h, v, p, a); 12943 break; 12944 case 'GCPInputLive' : 12945 addGCP2UserDeviceCard('live', 0.74, 1, w, h, v, p, a); 12946 break; 12947 case 'GCPInputUsers' : 12948 addGCP2UserDeviceCard('users', 1, 0.63, w, h, v, p, a); 12949 break; 12950 case 'GCPInputLaptop' : 12951 addGCP2UserDeviceCard('laptop', 1, 0.66, w, h, v, p, a); 12952 break; 12953 case 'GCPInputApplication' : 12954 addGCP2UserDeviceCard('application', 1, 0.8, w, h, v, p, a); 12955 break; 12956 case 'GCPInputLightbulb' : 12957 addGCP2UserDeviceCard('lightbulb', 0.7, 1, w, h, v, p, a); 12958 break; 12959 case 'GCPInputGame' : 12960 addGCP2UserDeviceCard('game', 1, 0.54, w, h, v, p, a); 12961 break; 12962 case 'GCPInputDesktop' : 12963 addGCP2UserDeviceCard('desktop', 1, 0.9, w, h, v, p, a); 12964 break; 12965 case 'GCPInputDesktopAndMobile' : 12966 addGCP2UserDeviceCard('desktop_and_mobile', 1, 0.66, w, h, v, p, a); 12967 break; 12968 case 'GCPInputWebcam' : 12969 addGCP2UserDeviceCard('webcam', 0.5, 1, w, h, v, p, a); 12970 break; 12971 case 'GCPInputSpeaker' : 12972 addGCP2UserDeviceCard('speaker', 0.7, 1, w, h, v, p, a); 12973 break; 12974 case 'GCPInputRetail' : 12975 addGCP2UserDeviceCard('retail', 1, 0.89, w, h, v, p, a); 12976 break; 12977 case 'GCPInputReport' : 12978 addGCP2UserDeviceCard('report', 1, 1, w, h, v, p, a); 12979 break; 12980 case 'GCPInputPhone' : 12981 addGCP2UserDeviceCard('phone', 0.64, 1, w, h, v, p, a); 12982 break; 12983 case 'GCPInputBlank' : 12984 addGCP2UserDeviceCard('transparent', 1, 1, w, h, v, p, a); 12985 break; 12986// no corresponding icons, only with shadows 12987// case 'GCPAppEngineProductCard' : 12988// addGCP2ExpandedProductCard('compute.app_engine', 1, 1, w, h, v, p, a); 12989// break; 12990// case 'GCPCloudDataflowProductCard' : 12991// addGCP2ExpandedProductCard('cloud_dataflow', 1, 1, w, h, v, p, a); 12992// break; 12993// case 'GCPCloudDataprocProductCard' : 12994// addGCP2ExpandedProductCard('cloud_dataproc', 1, 1, w, h, v, p, a); 12995// break; 12996// case 'GCPComputeEngineProductCard' : 12997// addGCP2ExpandedProductCard('compute_engine', 1, 1, w, h, v, p, a); 12998// break; 12999// case 'GCPContainerEngineProductCard' : 13000// addGCP2ExpandedProductCard('compute_engine', 1, 1, w, h, v, p, a); 13001// break; 13002 case 'PresentationFrameBlock' : 13003 if (p.ZOrder == 0) //These are hidden 13004 { 13005 v.style += 'strokeColor=none;fillColor=none;'; 13006 } 13007 else 13008 { 13009 v.style += getLabelStyle(p.Text); 13010 v.value = convertText(p.Text); 13011 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13012 } 13013 break; 13014 case 'SVGPathBlock2' : 13015 try 13016 { 13017 var strokeWidth = p.LineWidth; 13018 var strokeColor = p.LineColor; 13019 var fillColor = p.FillColor; 13020 13021 var drawData = p.DrawData.Data; 13022 var svg = '<svg viewBox="0 0 1 1" xmlns="http://www.w3.org/2000/svg">'; 13023 13024 for (var i = 0; i < drawData.length; i++) 13025 { 13026 var dd = drawData[i]; 13027 var path = dd.a; 13028 var sw = (dd.w == 'prop' || dd.w == null? strokeWidth : dd.w) / Math.min(w, h) * scale; //TODO Stroke width caclulationn needs review 13029 var sc = dd.s == 'prop' || dd.s == null? strokeColor : dd.s; 13030 var fc = dd.f == 'prop' || dd.f == null? fillColor : dd.f; 13031 13032 if (typeof fc == 'object') 13033 { 13034 fc = Array.isArray(fc.cs)? fc.cs[0].c : fillColor; //Approximation TODO Handle it 13035 } 13036 13037 svg += '<path d="' + path + '" fill="' + fc + '" stroke="' + sc + '" stroke-width="' + sw + '"/>'; 13038 } 13039 13040 svg += '</svg>'; 13041 13042 v.style = 'shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;' + 13043 'verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,' + ((window.btoa) ? btoa(svg) : Base64.encode(svg, true)) + ';'; 13044 } 13045 catch(e){} 13046 break; 13047 case 'BraceBlock': 13048 case 'BraceBlockRotated': 13049 case 'BracketBlock': 13050 case 'BracketBlockRotated': 13051 var bracketStyle = cls.indexOf('Bracket') == 0? 'size=0;arcSize=50;' : ''; 13052 var sideStyle = addAllStyles(v.style, p, a, v, isLastLblHTML); 13053 var rotation = getRotation(p, a, v); 13054 v.style = 'group;' + rotation; 13055 var sideWidth = Math.min((rotation? w : h) * 0.14, 100); 13056 var left = new mxCell('', new mxGeometry(0, 0, sideWidth, h), 'shape=curlyBracket;rounded=1;' + bracketStyle + sideStyle); 13057 left.vertex = true; 13058 left.geometry.relative = true; 13059 var right = new mxCell('', new mxGeometry(1 - sideWidth / w, 0, sideWidth, h), 'shape=curlyBracket;rounded=1;flipH=1;' + bracketStyle + sideStyle); 13060 right.vertex = true; 13061 right.geometry.relative = true; 13062 13063 v.insert(left); 13064 v.insert(right); 13065 break; 13066 case 'BPMNTextAnnotation': 13067 case 'NoteBlock': 13068 p.InsetMargin = null; 13069 v.value = convertText(p.Text); 13070 v.style = 'group;spacingLeft=8;align=left;spacing=0;strokeColor=none;'; 13071 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13072 13073 if (v.style.indexOf('verticalAlign') < 0) 13074 { 13075 v.style += 'verticalAlign=middle;'; 13076 } 13077 13078 var side = new mxCell('', new mxGeometry(0, 0, 8, h), 'shape=partialRectangle;right=0;fillColor=none;'); 13079 side.geometry.relative = true; 13080 side.vertex = true; 13081 side.style += addAllStyles(side.style, p, a, v, isLastLblHTML); 13082 13083 v.insert(side); 13084 break; 13085 case 'VSMTimelineBlock': 13086 case 'TimelineBlock': 13087 //TODO Timeline shapes are postponed, this code is a work-in-progress 13088 /* try 13089 { 13090 var daysMap = { 13091 'Sunday': 0, 13092 'Monday': 1, 13093 'Tuesday': 2, 13094 'Wednesday': 3, 13095 'Thursday': 4, 13096 'Friday': 5, 13097 'Saturday': 6 13098 }; 13099 var isLine = p.TimelineType == 'lineTimeline'; 13100 var startDate = new Date(p.StartDate); 13101 var endDate = new Date(p.FinishDate); 13102 var startOfWeek = daysMap[p.StartOfWeek]; 13103 var startOfFiscY = new Date(p.StartOfFiscalYear); 13104 var timeUnit = p.TimeUnit; 13105 var showStartEnd = p.DisplayStartFinishDates; 13106 var showTickLbl = p.DisplayInterimDates; 13107 var startTick, inc; 13108 13109 switch (timeUnit) 13110 { 13111 case 'second': 13112 startTick = inc = 1000; 13113 break; 13114 case 'minute': 13115 startTick = inc = 1000 * 60; 13116 break; 13117 case 'hour': 13118 startTick = inc = 1000 * 60 * 60; 13119 break; 13120 case 'day': 13121 startTick = inc = 1000 * 60 * 60 * 24; 13122 break; 13123 case 'week': 13124 var dayTillNextWeek = (7 - startDate.getDay() + startOfWeek) % 7; 13125 var nextWeek = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + dayTillNextWeek); 13126 startTick = nextWeek.getTime() - startDate.getTime(); 13127 inc = 1000 * 60 * 60 * 24 * 7; 13128 break; 13129 case 'month': 13130 var nextMonth = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 1); 13131 startTick = nextMonth.getTime() - startDate.getTime(); 13132 inc = 1000 * 60 * 60 * 24 * 30; 13133 break; 13134 case 'quarter': 13135 var monthToNextQtr = (12 - startDate.getMonth() + startOfFiscY.getMonth()) % 3; 13136 var nextQrt = new Date(startDate.getFullYear(), 13137 startDate.getMonth() + (monthToNextQtr == 0 && startDate.getDate() >= startOfFiscY.getDate()? 3 : monthToNextQtr), startOfFiscY.getDate()); 13138 startTick = nextQrt.getTime() - startDate.getTime(); 13139 inc = 1000 * 60 * 60 * 24 * 90; 13140 break; 13141 case 'year': 13142 var nextYear = new Date(startDate.getFullYear() + 1, 0, 1); 13143 startTick = nextYear.getTime() - startDate.getTime(); 13144 inc = 1000 * 60 * 60 * 24 * 365; 13145 break; 13146 } 13147 13148 var diff = endDate.getTime() - startDate.getTime(); 13149 var afterFirst = diff - startTick; 13150 var ticksCount = Math.round(afterFirst / inc); 13151 13152 var startX = startTick/diff * w; 13153 var ldx = inc/diff * w; 13154 console.log(startX, ldx, ticksCount) 13155 } 13156 catch(e) 13157 { 13158 console.log(e); //Ignore 13159 } 13160 break;*/ 13161 case 'TimelineMilestoneBlock': 13162 // break; 13163 case 'TimelineIntervalBlock': 13164 LucidImporter.hasTimeLine = true; 13165 LucidImporter.hasUnknownShapes = true; 13166 break; 13167 case 'FreehandBlock': 13168 try 13169 { 13170 var rotation = getRotation(p, a, v); 13171 v.style = 'group;' + rotation; 13172 13173 if (p.Stencil != null) 13174 { 13175 if (p.Stencil.id == null) 13176 { 13177 //Add a temporary stencil for embedded ones 13178 p.Stencil.id = '$$tmpId$$'; 13179 addStencil(p.Stencil.id, p.Stencil); 13180 } 13181 13182 var stencil = LucidImporter.stencilsMap[p.Stencil.id]; 13183 var cx = -stencil.x / stencil.w, cy = -stencil.y / stencil.h; 13184 13185 for (var i = 0; i < stencil.stencils.length; i++) 13186 { 13187 var shape = stencil.stencils[i]; 13188 var cell = new mxCell('', new mxGeometry(cx, cy, w, h), 'shape=' + shape.shapeStencil + ';'); 13189 var sfc = shape.FillColor, slc = shape.LineColor, slw = shape.LineWidth; 13190 13191 if (shape.FillColor == 'prop') 13192 { 13193 shape.FillColor = p.FillColor; 13194 } 13195 13196 if (shape.FillColor == null) 13197 { 13198 shape.FillColor = '#ffffff00'; //Transparent fillColor 13199 } 13200 13201 if (shape.LineColor == 'prop') 13202 { 13203 shape.LineColor = p.LineColor; 13204 } 13205 13206 if (shape.LineColor == null) 13207 { 13208 shape.LineColor = '#ffffff00'; //Transparent strokeColor 13209 } 13210 13211 if (shape.LineWidth == 'prop') 13212 { 13213 shape.LineWidth = p.LineWidth; 13214 } 13215 //Add stencil styles 13216 cell.style += addAllStyles(cell.style, shape, a, cell, isLastLblHTML); 13217 // Restore shape properties 13218 shape.FillColor = sfc; shape.LineColor = slc; shape.LineWidth = slw; 13219 //Add other styles from parent 13220 var fc = p.FillColor, lc = p.LineColor, lw = p.LineWidth; 13221 p.FillColor = null; p.LineColor = null; p.LineWidth = null; 13222 cell.style += addAllStyles(cell.style, p, a, cell, isLastLblHTML); 13223 p.FillColor = fc; p.LineColor = lc; p.LineWidth = lw; 13224 cell.vertex = true; 13225 cell.geometry.relative = true; 13226 v.insert(cell); 13227 } 13228 13229 var index = 0; 13230 var rotation = p.Rotation; 13231 13232 while (p['t' + index]) 13233 { 13234 var lblObj = p['t' + index]; 13235 var txt = convertText(lblObj); 13236 13237 if (txt) 13238 { 13239 var lbl = new mxCell(txt, new mxGeometry(0, 0, w, h), 'strokeColor=none;fillColor=none;overflow=visible;'); 13240 p.Rotation = 0; //Disable rotation of the parent since it is captured in the srencil below 13241 lbl.style += addAllStyles(lbl.style, lblObj, a, lbl, isLastLblHTML); 13242 lbl.style += addAllStyles(lbl.style, p, a, lbl, isLastLblHTML); 13243 p.Rotation = rotation; 13244 13245 if (stencil.text != null && stencil.text['t' + index] != null) 13246 { 13247 var gTxtObj = stencil.text['t' + index]; 13248 gTxtObj.Rotation = rotation + (gTxtObj.rotation? gTxtObj.rotation : 0) 13249 + (p['t' + index + '_TRotation']? p['t' + index + '_TRotation'] : 0) 13250 + (p['t' + index + '_TAngle']? p['t' + index + '_TAngle'] : 0); 13251 lbl.style += addAllStyles(lbl.style, gTxtObj, a, lbl, isLastLblHTML); 13252 var lblGeo = lbl.geometry; 13253 13254 if (gTxtObj.w) 13255 { 13256 lblGeo.width *= (gTxtObj.w / stencil.w); 13257 } 13258 if (gTxtObj.h) 13259 { 13260 lblGeo.height *= (gTxtObj.h / stencil.h); 13261 } 13262 if (gTxtObj.x) 13263 { 13264 lblGeo.x = gTxtObj.x / stencil.w; 13265 } 13266 if (gTxtObj.y) 13267 { 13268 lblGeo.y = gTxtObj.y / stencil.h; 13269 } 13270 13271 if (gTxtObj.fw) 13272 { 13273 lblGeo.width *= gTxtObj.fw * scale / w; 13274 } 13275 if (gTxtObj.fh) 13276 { 13277 lblGeo.height *= gTxtObj.fh * scale / h; 13278 } 13279 if (gTxtObj.fx) 13280 { 13281 lblGeo.x = (gTxtObj.fx > 0? 1 : 0) + gTxtObj.fx * scale / w; 13282 } 13283 if (gTxtObj.fy) 13284 { 13285 lblGeo.y = (gTxtObj.fy > 0? 1 : 0) + gTxtObj.fy * scale / h; 13286 } 13287 } 13288 13289 lbl.vertex = true; 13290 lbl.geometry.relative = true; 13291 v.insert(lbl); 13292 } 13293 13294 index++; 13295 } 13296 } 13297 13298 if (p.FillColor && p.FillColor.url) 13299 { 13300 var img = new mxCell('', new mxGeometry(0, 0, w, h), 'shape=image;html=1;'); 13301 img.style += getImage({}, {}, p.FillColor.url); 13302 img.vertex = true; 13303 img.geometry.relative = true; 13304 v.insert(img); 13305 } 13306 } 13307 catch(e) 13308 { 13309 console.log('Freehand error', e); 13310 } 13311 break; 13312 case 'RightArrowBlock': 13313 var arrowSize = p.Head * h / w; 13314 v.style = 'shape=singleArrow;arrowWidth=' + (1 - p.Notch * 2) + ';arrowSize=' + arrowSize; 13315 v.value = convertText(p); 13316 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13317 break; 13318 case 'DoubleArrowBlock': 13319 var arrowSize = p.Head * h / w; 13320 v.style = 'shape=doubleArrow;arrowWidth=' + (1 - p.Notch * 2) + ';arrowSize=' + arrowSize; 13321 v.value = convertText(p); 13322 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13323 break; 13324 case 'VPCSubnet2017': 13325 case 'VirtualPrivateCloudContainer2017': 13326 case 'ElasticBeanStalkContainer2017': 13327 case 'EC2InstanceContents2017': 13328 case 'AWSCloudContainer2017': 13329 case 'CorporateDataCenterContainer2017': 13330 //all use the same code, just icon is different 13331 var iconStyle, iconW, iconH; 13332 13333 switch(cls) 13334 { 13335 case 'VPCSubnet2017': 13336 iconStyle = 'shape=mxgraph.aws3.permissions;fillColor=#D9A741;'; 13337 iconW = 30; 13338 iconH = 35; 13339 break; 13340 case 'VirtualPrivateCloudContainer2017': 13341 iconStyle = 'shape=mxgraph.aws3.virtual_private_cloud;fillColor=#F58536;'; 13342 iconW = 52; 13343 iconH = 36; 13344 break; 13345 case 'ElasticBeanStalkContainer2017': 13346 iconStyle = 'shape=mxgraph.aws3.elastic_beanstalk;fillColor=#F58536;'; 13347 iconW = 30; 13348 iconH = 41; 13349 break; 13350 case 'EC2InstanceContents2017': 13351 iconStyle = 'shape=mxgraph.aws3.instance;fillColor=#F58536;'; 13352 iconW = 40; 13353 iconH = 41; 13354 break; 13355 case 'AWSCloudContainer2017': 13356 iconStyle = 'shape=mxgraph.aws3.cloud;fillColor=#F58536;'; 13357 iconW = 52; 13358 iconH = 36; 13359 break; 13360 case 'CorporateDataCenterContainer2017': 13361 iconStyle = 'shape=mxgraph.aws3.corporate_data_center;fillColor=#7D7C7C;'; 13362 iconW = 30; 13363 iconH = 42; 13364 break; 13365 } 13366 v.style = 'rounded=1;arcSize=10;dashed=0;verticalAlign=bottom;'; 13367 v.value = convertText(p); 13368 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13369 v.geometry.y += 20; 13370 v.geometry.height -= 20; 13371 var icon = new mxCell('', new mxGeometry(20, -20, iconW, iconH), iconStyle); 13372 icon.vertex = true; 13373 v.insert(icon); 13374 break; 13375 case 'FlexiblePolygonBlock': 13376 var parts = ["<shape strokewidth=\"inherit\"><foreground>"]; 13377 parts.push("<path>"); 13378 13379 for (var j = 0; j < p.Vertices.length; j++) 13380 { 13381 var line = p.Vertices[j]; 13382 13383 if (j == 0) 13384 { 13385 parts.push("<move x=\"" + (line.x * 100) + "\" y=\"" + (line.y * 100) + "\"/>"); 13386 } 13387 else 13388 { 13389 parts.push("<line x=\"" + (line.x * 100) + "\" y=\"" + (line.y * 100) + "\"/>"); 13390 } 13391 } 13392 13393 parts.push("</path>"); 13394 parts.push("<fillstroke/>"); 13395 parts.push("</foreground></shape>"); 13396 v.style = 'shape=stencil(' + Graph.compress(parts.join('')) + ');'; 13397 v.value = convertText(p); 13398 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13399 break; 13400 case 'InfographicsBlock': 13401 var min = p.ShapeData_1.Value; 13402 var max = p.ShapeData_2.Value - min; 13403 var val = p.ShapeData_3.Value - min; 13404 var thickness = p.ShapeData_4.Value * w / 200; //Percentage of half of width 13405 var index = p.InternalStencilId == 'ProgressBar'? 4 : 5; 13406 var fillClr = p['ShapeData_' + index].Value; 13407 fillClr = fillClr == '=fillColor()'? p.FillColor : fillClr; 13408 var bkgClr = p['ShapeData_' + (index + 1)].Value; 13409 13410 switch(p.InternalStencilId) 13411 { 13412 case 'ProgressDonut': 13413 v.style = 'shape=mxgraph.basic.donut;dx=' + thickness + ';strokeColor=none;fillColor=' + getColor(bkgClr) + ';' + getOpacity2(bkgClr, 'fillOpacity'); 13414 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13415 var inner = new mxCell('', new mxGeometry(0, 0, w, h), 'shape=mxgraph.basic.partConcEllipse;startAngle=0;endAngle=' + (val / max) + ';arcWidth=' + (thickness / w * 2) + 13416 ';strokeColor=none;fillColor=' + getColor(fillClr) + ';' + getOpacity2(fillClr, 'fillOpacity')); 13417 inner.style += addAllStyles(inner.style, p, a, inner, isLastLblHTML); 13418 inner.vertex = true; 13419 inner.geometry.relative = 1; 13420 v.insert(inner); 13421 break; 13422 case 'ProgressHalfDonut': 13423 //as a workaround do it as a circle 13424 v.geometry.height *= 2; 13425 v.geometry.rotate90(); //TODO fix shape rotation 13426 var angle = val / max / 2; 13427 v.style = 'shape=mxgraph.basic.partConcEllipse;startAngle=0;endAngle=' + angle + ';arcWidth=' + (thickness * 2 / w) + 13428 ';strokeColor=none;fillColor=' + getColor(fillClr) + ';' + getOpacity2(fillClr, 'fillOpacity') 13429 13430 p.Rotation -= Math.PI / 2; 13431 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13432 var inner = new mxCell('', new mxGeometry(0, 0, v.geometry.width, v.geometry.height), 'shape=mxgraph.basic.partConcEllipse;startAngle=0;endAngle=' + (0.5 - angle) + ';arcWidth=' + (thickness * 2 / w) + 13433 ';strokeColor=none;flipH=1;fillColor=' + getColor(bkgClr) + ';' + getOpacity2(bkgClr, 'fillOpacity')); 13434 p.Rotation += Math.PI; 13435 inner.style += addAllStyles(inner.style, p, a, inner, isLastLblHTML); 13436 inner.vertex = true; 13437 inner.geometry.relative = 1; 13438 v.insert(inner); 13439 break; 13440 case 'ProgressBar': 13441 v.style = 'strokeColor=none;fillColor=' + getColor(bkgClr) + ';' + getOpacity2(bkgClr, 'fillOpacity'); 13442 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13443 var inner = new mxCell('', new mxGeometry(0, 0, w * val / max, h), 'strokeColor=none;fillColor=' + getColor(fillClr) + ';' + getOpacity2(fillClr, 'fillOpacity')); 13444 inner.style += addAllStyles(inner.style, p, a, inner, isLastLblHTML); 13445 inner.vertex = true; 13446 inner.geometry.relative = 1; 13447 v.insert(inner); 13448 break; 13449 } 13450 break; 13451 case 'InternalStorageBlock': 13452 v.style += 'shape=internalStorage;dx=10;dy=10'; 13453 13454 //Adjust left and top spacing to handle the shape 13455 if (p.Text && p.Text.m) 13456 { 13457 var m = p.Text.m, isMT = false, isIL = false; 13458 13459 for (var i = 0; i < m.length; i++) 13460 { 13461 var currM = m[i]; 13462 13463 if (!isMT && currM.n == 'mt') 13464 { 13465 currM.v = 17 + (currM.v || 0); 13466 isMT = true; 13467 } 13468 else if (!isIL && currM.n == 'il') 13469 { 13470 currM.v = 17 + (currM.v || 0); 13471 isIL = true; 13472 } 13473 } 13474 13475 if (!isMT) 13476 { 13477 m.push({ 13478 "s": 0, 13479 "n": "mt", 13480 "v": 17 13481 }); 13482 } 13483 13484 if (!isIL) 13485 { 13486 m.push({ 13487 "s": 0, 13488 "n": "il", 13489 "v": 17 13490 }); 13491 } 13492 } 13493 13494 v.value = convertText(p); 13495 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13496 break; 13497 case 'PersonRoleBlock' : 13498 try 13499 { 13500 var st = getFillColor(p, a); 13501 var th = h/2; 13502 st = st.replace('fillColor', 'swimlaneFillColor'); 13503 13504 if (st == '') 13505 { 13506 st = 'swimlaneFillColor=#ffffff;' 13507 } 13508 13509 v.value = convertText(p.Role); 13510 v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;' + st + 13511 'startSize=' + th + ';spacingLeft=3;spacingRight=3;fontStyle=0;' + 13512 getLabelStyle(p.Role, isLastLblHTML); 13513 v.style += addAllStyles(v.style, p, a, v, isLastLblHTML); 13514 13515 var name = new mxCell('', new mxGeometry(0, h/2, w, h/2), 'part=1;html=1;resizeHeight=0;spacingTop=-1;spacingLeft=3;spacingRight=3;'); 13516 name.value = convertText(p.Name); 13517 name.vertex = true; 13518 v.insert(name); 13519 name.style += getLabelStyle(p.Name, isLastLblHTML); 13520 name.style += addAllStyles(name.style, p, a, name, isLastLblHTML); 13521 } 13522 catch(e) 13523 { 13524 //Ignore 13525 console.log(e); 13526 } 13527 break; 13528 } 13529 13530 if (v.style && v.style.indexOf('html') < 0) 13531 { 13532 v.style += 'html=1;'; 13533 } 13534 13535 if (p.Title && p.Title.t && p.Text && p.Text.t) 13536 { 13537 try 13538 { 13539 var geo = v.geometry; 13540 var title = new mxCell(convertText(p.Title), new mxGeometry(0, geo.height + 4,geo.width, 10), 13541 'strokeColor=none;fillColor=none;whiteSpace=wrap;verticalAlign=top;labelPosition=center;verticalLabelPosition=top;align=center;'); 13542 title.vertex = true; 13543 v.insert(title); 13544 v.style += getLabelStyle(p.Title, isLastLblHTML); 13545 } 13546 catch(e) 13547 { 13548 console.log(e); 13549 } 13550 } 13551 13552 handleTextRotation(v, p); 13553 addCustomData(v, p, graph); 13554 13555 if (p.Hidden) 13556 { 13557 v.visible = false; 13558 } 13559 13560 return v; 13561 }; 13562 13563 function handleTextRotation(v, p) 13564 { 13565 if (p.Text_TRotation || p.TextRotation) 13566 { 13567 try 13568 { 13569 var deg = mxUtils.toDegree(p.Text_TRotation || 0) + mxUtils.toDegree(p.TextRotation || 0); 13570 13571 if (!isNaN(deg) && deg != 0 && v.value) 13572 { 13573 var w = v.geometry.width, h = v.geometry.height; 13574 var lblW = w, lblH = h, x = 0, y = 0; 13575 13576 if (deg == -90 || deg == -270) 13577 { 13578 lblW = h; 13579 lblH = w; 13580 var diff = (h - w) / 2; 13581 x = -diff / w; 13582 y = diff/ h; 13583 } 13584 13585 deg += mxUtils.toDegree(p.Rotation); 13586 13587 //Remove fill and stroke colors + rotation from vertex style 13588 var style = v.style.split(';').filter(function(s) 13589 { 13590 return s.indexOf('fillColor=') < 0 && s.indexOf('strokeColor=') < 0 && s.indexOf('rotation=') < 0; 13591 }).join(';'); 13592 13593 var lbl = new mxCell(v.value, new mxGeometry(x, y, lblW, lblH), style + 'fillColor=none;strokeColor=none;rotation=' + deg + ';'); 13594 v.value = null; 13595 lbl.geometry.relative = true; 13596 lbl.vertex = true; 13597 v.insert(lbl); 13598 } 13599 } 13600 catch(e) 13601 { 13602 console.log(e); //Ignore 13603 } 13604 } 13605 }; 13606 13607 function createOrgChart(objId, props, data, graph, lookup) 13608 { 13609 function getLineTxtStyle(cellDefaultStyle, fieldName) 13610 { 13611 var style = ''; 13612 13613 try 13614 { 13615 for (var i = 0; i < cellDefaultStyle.text.length; i++) 13616 { 13617 var item = cellDefaultStyle.text[i]; 13618 13619 if (item[0] == 't_' + fieldName) 13620 { 13621 for (var key in item[1]) 13622 { 13623 var val = item[1][key]; 13624 13625 if (!val) continue; 13626 13627 switch(key) 13628 { 13629 case 'font': 13630 style += mapFontFamily(val); 13631 break; 13632 case 'bold': 13633 style += 'font-weight: bold;'; 13634 break; 13635 case 'italic': 13636 style += 'font-style: italic;'; 13637 break; 13638 case 'underline': 13639 style += 'text-decoration: underline;'; 13640 break; 13641 case 'size': 13642 style += 'font-size:' + fix1Digit(val * scale) + 'px;'; 13643 break; 13644 case 'color': 13645 style += 'color:' + rgbToHex(val).substring(0, 7) + ';'; 13646 break; 13647 case 'fill': 13648 style += 'background-color:' + rgbToHex(val).substring(0, 7) + ';'; 13649 break; 13650 case 'align': 13651 style += 'text-align:' + val + ';'; 13652 break; 13653 } 13654 } 13655 13656 break; 13657 } 13658 } 13659 } 13660 catch(e){} 13661 13662 return style; 13663 }; 13664 13665 try 13666 { 13667 //TODO Cell specific styles and chartType defaults 13668 var defImg = 'https://cdn4.iconfinder.com/data/icons/basic-user-interface-elements/700/user-account-profile-human-avatar-face-head--128.png'; 13669 var chartType = props.OrgChartBlockType; 13670 var pos = props.Location; 13671 var x = pos.x * scale, y = pos.y * scale; 13672 var chartGroup = new mxCell('', new mxGeometry(x, y, 200, 100), 'group'); 13673 chartGroup.vertex = true; 13674 graph.addCell(chartGroup); 13675 var fields = props.FieldNames; 13676 var layoutSettings = props.LayoutSettings; 13677 var cellDefaultStyle = props.BlockItemDefaultStyle || {props: {}}; 13678 var edgeDefaultStyle = props.EdgeItemDefaultStyle; 13679 var parents = {}; 13680 var idPrefix = (objId || Date.now()) + '_'; 13681 13682 if (chartType == 4) 13683 { 13684 cellDefaultStyle.props.LineWidth = 0; 13685 } 13686 13687 var txtStyles = [], marginW = 25, marginH = 40, imgSize = 54, hasImage = true, cellStyle = addAllStyles('', cellDefaultStyle.props, {}, chartGroup, true); 13688 13689 if (chartType == 0) //Image top-center 13690 { 13691 cellStyle += 'spacingTop=' + imgSize + ';imageWidth=' + imgSize + ';imageHeight=' + imgSize + ';imageAlign=center;imageVerticalAlign=top;image='; 13692 marginH += imgSize; 13693 } 13694 else if (chartType == 1 || chartType == 2) //Image to top-left (or outsize top-left which we don't support) 13695 { 13696 cellStyle += 'spacingLeft=' + imgSize + ';imageWidth=' + (imgSize - 4) + ';imageHeight=' + (imgSize - 4) + ';imageAlign=left;imageVerticalAlign=top;image='; 13697 marginW += imgSize; 13698 } 13699 else if (chartType >= 3) 13700 { 13701 hasImage = false; 13702 } 13703 13704 for (var j = 0; j < fields.length; j++) 13705 { 13706 txtStyles.push(getLineTxtStyle(cellDefaultStyle, fields[j])); 13707 } 13708 13709 13710 function createNode(pk, pId, dObj) 13711 { 13712 var id = idPrefix + pk; 13713 parents[id] = pId; 13714 var lbl = ''; 13715 13716 for (var j = 0; j < fields.length; j++) 13717 { 13718 lbl += '<div style="' + txtStyles[j] + '">' + 13719 (dObj[fields[j]] || ' ') + '</div>'; 13720 } 13721 13722 var size = mxUtils.getSizeForString(lbl); 13723 //TODO Is image always in Image/018__ImageUrl__? 13724 var imgUrl = mapImgUrl(dObj['Image'] || dObj['018__ImageUrl__']) || defImg; 13725 13726 var cell = new mxCell(lbl, new mxGeometry(0, 0, size.width + marginW, size.height + marginH), 13727 cellStyle + (hasImage? imgUrl : '')); 13728 cell.vertex = true; 13729 lookup[id] = cell; 13730 graph.addCell(cell, chartGroup); 13731 }; 13732 13733 if (data.Items) 13734 { 13735 var chartDataSrc = data.Items.n; 13736 13737 for (var i = 0; i < chartDataSrc.length; i++) 13738 { 13739 var d = chartDataSrc[i]; 13740 createNode(d.pk, d.ie[0]? d.ie[0].nf : null, d.f); 13741 } 13742 } 13743 else 13744 { 13745 var dataId, derivative = props.ContractMap.derivative; 13746 13747 if (derivative == null) 13748 { 13749 //We don't have enough samples of this format, TODO improve this 13750 var people = props.ContractMap.c.People; 13751 dataId = people.id; 13752 dataId = dataId.substr(0, dataId.lastIndexOf('_')); 13753 13754 for (var j = 0; j < fields.length; j++) 13755 { 13756 fields[j] = people.f[fields[j]] || fields[j]; 13757 } 13758 } 13759 else 13760 { 13761 for (var i = 0; i < derivative.length; i++) 13762 { 13763 if (derivative[i].type == 'ForeignKeyGraph') 13764 { 13765 dataId = derivative[i].c[0].id; 13766 dataId = dataId.substr(0, dataId.lastIndexOf('_')); 13767 } 13768 else if (derivative[i].type == 'MappedGraph') 13769 { 13770 for (var j = 0; j < fields.length; j++) 13771 { 13772 fields[j] = derivative[i].nfs[fields[j]] || fields[j]; 13773 } 13774 } 13775 } 13776 } 13777 13778 var chartDataSrc, foreignKey, primaryKey; 13779 13780 for (var key in data) 13781 { 13782 var d = data[key].Collections; 13783 13784 for (var key2 in d) 13785 { 13786 if (key2 == dataId) 13787 { 13788 chartDataSrc = d[key2].Items; 13789 } 13790 else if (d[key2].Properties.ForeignKeys && d[key2].Properties.ForeignKeys[0]) 13791 { 13792 foreignKey = d[key2].Properties.ForeignKeys[0].SourceFields[0]; 13793 primaryKey = d[key2].Properties.Schema.PrimaryKey[0]; 13794 } 13795 } 13796 13797 if (chartDataSrc) 13798 { 13799 break; 13800 } 13801 } 13802 13803 var dupMap = {}; 13804 13805 for (var id in chartDataSrc) 13806 { 13807 var d = chartDataSrc[id]; 13808 var pk = d[primaryKey], fk = d[foreignKey]; 13809 13810 //Special case where these nodes has duplicate id and should be connected somehow! 13811 if (pk == fk) 13812 { 13813 dupMap[pk] = pk + Date.now(); 13814 pk = dupMap[pk]; 13815 d[primaryKey] = pk; 13816 createNode(pk, fk, d); 13817 } 13818 else 13819 { 13820 createNode(pk, dupMap[fk] || fk, d); 13821 } 13822 } 13823 } 13824 13825 for (var key in parents) 13826 { 13827 var p = parents[key]; 13828 13829 if (p != null) 13830 { 13831 var src = lookup[idPrefix + p]; 13832 var trg = lookup[key]; 13833 13834 if (src != null && trg != null) 13835 { 13836 var e = new mxCell('', new mxGeometry(0, 0, 100, 100), ''); 13837 e.geometry.relative = true; 13838 e.edge = true; 13839 13840 if (edgeDefaultStyle != null && edgeDefaultStyle.props != null) 13841 { 13842 updateCell(e, edgeDefaultStyle.props, graph, null, null, true); 13843 } 13844 13845 graph.addCell(e, chartGroup, null, src, trg); 13846 } 13847 } 13848 } 13849 13850 //TODO Support other layout options like LayoutType 13851 var levelSps = layoutSettings.NodeSpacing.LevelSeparation * scale; 13852 var orgChartLayout = new mxOrgChartLayout(graph, 0, levelSps, layoutSettings.NodeSpacing.NeighborSeparation * scale); 13853 orgChartLayout.execute(chartGroup); 13854 13855 //Find out the group size and 13856 var maxX = 0, maxY = 0; 13857 13858 for (var i = 0; chartGroup.children && i < chartGroup.children.length; i++) 13859 { 13860 var geo = chartGroup.children[i].geometry; 13861 maxX = Math.max(maxX, geo.x + geo.width); 13862 maxY = Math.max(maxY, geo.y + geo.height); 13863 } 13864 13865 var gGeo = chartGroup.geometry; 13866 gGeo.y -= levelSps; //Our org chart layout leave a space on top 13867 gGeo.width = maxX; 13868 gGeo.height = maxY; 13869 } 13870 catch(e) 13871 { 13872 LucidImporter.hasUnknownShapes = true; 13873 LucidImporter.hasOrgChart = true; 13874 console.log(e); 13875 } 13876 }; 13877})(); 13878