Extensions.js 633 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152
  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)
  7. LucidImporter = {};
  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. var arcSize = 6;
  17. var edgeStyle = 'html=1;jettySize=18;';
  18. var vertexStyle = 'html=1;overflow=block;blockSpacing=1;whiteSpace=wrap;';
  19. var labelStyle = 'text;html=1;resizable=0;labelBackgroundColor=default;align=center;verticalAlign=middle;';
  20. var containerStyle = 'container=1;pointerEvents=0;collapsible=0;recursiveResize=0;';
  21. var groupStyle = 'group;dropTarget=0;pointerEvents=0;';
  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 = 'image;aspect=fixed;html=1;points=[];align=center;verticalAlign=top;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. //Instead of doing a massive code refactoring, thees ugly global variables are used
  31. var isLastLblHTML = false;
  32. var gFontFamilyStyle = '';
  33. //stencils to rotate counter clockwise 90 degrees
  34. var rccw = [
  35. 'AEUSBBlock',
  36. 'AGSCutandpasteBlock',
  37. 'iOSDeviceiPadLandscape',
  38. 'iOSDeviceiPadProLandscape'
  39. ];
  40. //stencils to rotate clockwise 180 degrees
  41. var rcw2 = [
  42. 'fpDoor'
  43. ];
  44. var edgeStyleMap = {
  45. 'None': 'none;',
  46. 'Arrow': 'block;xyzFill=1;',
  47. 'Hollow Arrow': 'block;xyzFill=0;',
  48. 'Open Arrow': 'open;',
  49. 'CFN ERD Zero Or More Arrow': 'ERzeroToMany;xyzSize=10;',
  50. 'CFN ERD One Or More Arrow': 'ERoneToMany;xyzSize=10;',
  51. 'CFN ERD Many Arrow': 'ERmany;xyzSize=10;',
  52. 'CFN ERD Exactly One Arrow': 'ERmandOne;xyzSize=10;',
  53. 'CFN ERD Zero Or One Arrow': 'ERzeroToOne;xyzSize=10;',
  54. 'CFN ERD One Arrow': 'ERone;xyzSize=16;',
  55. 'Generalization': 'block;xyzFill=0;xyzSize=12;',
  56. 'Big Open Arrow': 'open;xyzSize=10;',
  57. 'Asynch1': 'openAsync;flipV=1;xyzSize=10;',
  58. 'Asynch2': 'openAsync;xyzSize=10;',
  59. 'Aggregation': 'diamond;xyzFill=0;xyzSize=16;',
  60. 'Composition': 'diamond;xyzFill=1;xyzSize=16;',
  61. 'BlockEnd': 'box;xyzFill=0;xyzSize=16;',
  62. 'Measure': 'ERone;xyzSize=10;',
  63. 'CircleOpen': 'oval;xyzFill=0;xyzSize=16;',
  64. 'CircleClosed': 'oval;xyzFill=1;xyzSize=16;',
  65. 'BlockEndFill': 'box;xyzFill=1;xyzSize=16;',
  66. 'Nesting': 'circlePlus;xyzSize=7;xyzFill=0;',
  67. 'BPMN Conditional': 'diamond;xyzFill=0;',
  68. 'BPMN Default': 'dash;'
  69. };
  70. var styleMap = {
  71. //Standard
  72. 'DefaultTextBlockNew': 'strokeColor=none;fillColor=none',
  73. 'DefaultTextBlock': 'strokeColor=none;fillColor=none',
  74. 'DefaultSquareBlock': '',
  75. 'RectangleBlock': '',
  76. 'DefaultNoteBlock': 'shape=note;size=15',
  77. 'DefaultNoteBlockV2': 'shape=note;size=15',
  78. 'HotspotBlock': 'strokeColor=none;fillColor=none',
  79. 'ImageSearchBlock2': 'shape=image',
  80. 'UserImage2Block': 'shape=image',
  81. 'ExtShapeBoxBlock': '',
  82. 'DefaultStickyNoteBlock': 'shadow=1',
  83. //Flowchart
  84. 'ProcessBlock': '',
  85. 'DecisionBlock': 'rhombus',
  86. 'TerminatorBlock': 'rounded=1;arcSize=50',
  87. 'PredefinedProcessBlock': 'shape=process',
  88. 'DocumentBlock': 'shape=document;boundedLbl=1',
  89. 'MultiDocumentBlock': s + 'flowchart.multi-document',
  90. 'ManualInputBlock': 'shape=manualInput;size=15',
  91. 'PreparationBlock': 'shape=hexagon;perimeter=hexagonPerimeter2',
  92. 'DataBlock': 'shape=parallelogram;perimeter=parallelogramPerimeter;anchorPointDirection=0',
  93. 'DataBlockNew': 'shape=parallelogram;perimeter=parallelogramPerimeter;anchorPointDirection=0',
  94. 'DatabaseBlock': 'shape=cylinder3;size=4;anchorPointDirection=0;boundedLbl=1;',
  95. 'DirectAccessStorageBlock': 'shape=cylinder3;direction=south;size=10;anchorPointDirection=0;boundedLbl=1;',
  96. 'InternalStorageBlock': cs,
  97. 'PaperTapeBlock': 'shape=tape;size=0.2',
  98. 'ManualOperationBlockNew': 'shape=trapezoid;perimeter=trapezoidPerimeter;anchorPointDirection=0;flipV=1',
  99. 'DelayBlock': 'shape=delay',
  100. 'StoredDataBlock': 'shape=cylinder3;boundedLbl=1;size=15;lid=0;direction=south;',
  101. 'MergeBlock': 'triangle;direction=south;anchorPointDirection=0',
  102. 'ConnectorBlock': 'ellipse',
  103. 'OrBlock': s + 'flowchart.summing_function',
  104. 'SummingJunctionBlock': s + 'flowchart.or',
  105. 'DisplayBlock': 'shape=display',
  106. 'OffPageLinkBlock': 'shape=offPageConnector',
  107. 'BraceNoteBlock': cs,
  108. 'NoteBlock': cs,
  109. //Containers
  110. 'AdvancedSwimLaneBlock': cs,
  111. 'AdvancedSwimLaneBlockRotated': cs,
  112. 'RectangleContainerBlock': containerStyle,
  113. 'DiamondContainerBlock': 'shape=rhombus;' + containerStyle,
  114. 'RoundedRectangleContainerBlock': 'rounded=1;absoluteArcSize=1;arcSize=24;' + containerStyle,
  115. 'CircleContainerBlock': 'ellipse;' + containerStyle,
  116. 'PillContainerBlock': 'shape=mxgraph.flowchart.terminator;' + containerStyle,
  117. 'BraceBlock': cs,
  118. 'BracketBlock': cs,
  119. 'BraceBlockRotated': cs,
  120. 'BracketBlockRotated': cs,
  121. //Geometric shapes
  122. 'IsoscelesTriangleBlock': 'shape=mxgraph.basic.acute_triangle;dx=0.5;anchorPointDirection=0',
  123. 'RightTriangleBlock': s + 'basic.orthogonal_triangle',
  124. 'PentagonBlock': s + 'basic.pentagon',
  125. 'HexagonBlock': 'shape=hexagon;perimeter=hexagonPerimeter2',
  126. 'OctagonBlock': s + 'basic.octagon2;dx=15;',
  127. 'CrossBlock': 'shape=cross;size=0.6',
  128. 'CloudBlock': 'ellipse;shape=cloud',
  129. 'HeartBlock': s + 'basic.heart',
  130. 'RightArrowBlock': cs,
  131. 'DoubleArrowBlock': cs,
  132. 'CalloutBlock': s + 'basic.rectangular_callout',
  133. 'CalloutSquareBlock': cs,
  134. 'ShapeCircleBlock': 'ellipse',
  135. 'ShapePolyStarBlock': s + 'basic.star',
  136. 'ShapeDiamondBlock': 'rhombus',
  137. //Misc
  138. 'UI2HotspotBlock' : 'opacity=50;strokeColor=none',
  139. //Android Devices
  140. 'AndroidDevice' : cs,
  141. //Android Dialogs
  142. 'AndroidAlertDialog' : cs,
  143. 'AndroidDateDialog' : cs,
  144. 'AndroidTimeDialog' : cs,
  145. //Android Blocks
  146. 'AndroidListItems' : cs,
  147. 'AndroidTabs' : cs,
  148. 'AndroidProgressBar' : cs,
  149. 'AndroidImageBlock' : cs,
  150. 'AndroidTextBlock' : cs,
  151. 'AndroidActionBar' : cs,
  152. // 'AndroidBrowserBar' NA
  153. //Android Inputs
  154. 'AndroidButton' : cs,
  155. 'AndroidTextBox' : cs,
  156. 'AndroidRadioButton' : cs,
  157. 'AndroidCheckBox' : cs,
  158. 'AndroidToggle' : cs,
  159. 'AndroidSlider' : cs,
  160. //Android Icons (not working properly, needs specific code)
  161. 'AndroidIconCheck': s + 'ios7.misc.check',
  162. // 'AndroidIconBack' NA
  163. 'AndroidIconCancel' : s + 'atlassian.x',
  164. 'AndroidIconCollapse': s + 'ios7.misc.up',
  165. 'AndroidIconExpand': s + 'ios7.misc.down',
  166. // 'AndroidIconForward' NA
  167. 'AndroidIconNext': s + 'ios7.misc.right',
  168. 'AndroidIconPrevious': s + 'ios7.misc.left',
  169. 'AndroidIconRefresh' : + 'ios7.icons.repeat',
  170. 'AndroidIconInformation': s + 'ios7.icons.info',
  171. // 'AndroidIconHelp' NA
  172. 'AndroidIconSearch': s + 'ios7.icons.looking_glass',
  173. 'AndroidIconSettings': s + 'ios7.icons.volume;direction=south',
  174. // 'AndroidIconDislike' NA
  175. // 'AndroidIconLike' NA
  176. // 'AndroidIconDelete' NA
  177. // 'AndroidIconCopy' NA
  178. // 'AndroidIconCut' NA
  179. // 'AndroidIconPaste' NA
  180. 'AndroidIconTrash': s + 'ios7.icons.trashcan',
  181. 'AndroidIconEmail': s + 'mockup.misc.mail2',
  182. 'AndroidIconNew': s + 'ios7.misc.flagged',
  183. // 'AndroidIconImage' NA
  184. // 'AndroidIconUndo' NA
  185. // 'AndroidIconSharing' NA
  186. // 'AndroidIconDownload' NA
  187. // 'AndroidIconError' NA
  188. // 'AndroidIconWarning' NA
  189. //iOS mockups
  190. 'iOSDeviceiPhoneSE': s + 'ios7.misc.iphone',
  191. 'iOSDeviceiPhone6s': s + 'ios7.misc.iphone',
  192. 'iOSDeviceiPhone6sPlus': s + 'ios7.misc.iphone',
  193. 'iOSDeviceiPadPortrait': s + 'ios7.misc.ipad7inch',
  194. 'iOSDeviceiPadLandscape': s + 'ios7.misc.ipad7inch',
  195. 'iOSDeviceiPadProPortrait': s + 'ios7.misc.ipad7inch',
  196. 'iOSDeviceiPadProLandscape': s + 'ios7.misc.ipad10inch',
  197. //iOS UI components
  198. 'iOSButton': 'fillColor=none;strokeColor=none;',
  199. 'iOSSegmentedControl' : cs, //TODO
  200. 'iOSStepper': s + 'ios7.misc.adjust',
  201. 'iOSToggle': s + 'ios7ui.onOffButton;buttonState=on;strokeColor2=#aaaaaa;fillColor2=#ffffff',
  202. 'iOSSlider': cs,
  203. 'iOSProgressBar': cs,
  204. 'iOSPageControls': cs,
  205. 'iOSStatusBar' : cs,
  206. 'iOSSearchBar' : cs,
  207. 'iOSNavBar' : cs,
  208. 'iOSTabs' : cs,
  209. 'iOSUniversalKeyboard': s + 'ios.iKeybLett',
  210. 'iOSDatePicker' : cs,
  211. 'iOSTimePicker' : cs,
  212. 'iOSCountdownPicker' : cs,
  213. 'iOSBasicCell' : cs,
  214. 'iOSSubtitleCell' : cs,
  215. 'iOSRightDetailCell' : cs,
  216. 'iOSLeftDetailCell' : cs,
  217. 'iOSTableGroupedSectionBreak' : cs,
  218. 'iOSTablePlainHeaderFooter' : cs,
  219. //Mind Map
  220. 'MindMapBlock' : '',
  221. 'MindMapStadiumBlock' : 'arcSize=50',
  222. 'MindMapCloud' : 'shape=cloud',
  223. 'MindMapCircle' : 'ellipse',
  224. 'MindMapIsoscelesTriangleBlock' : 'shape=triangle;direction=north',
  225. 'MindMapDiamondBlock' : 'shape=rhombus',
  226. 'MindMapPentagonBlock' : s + 'basic.pentagon',
  227. 'MindMapHexagonBlock' : 'shape=hexagon;perimeter=hexagonPerimeter2',
  228. 'MindMapOctagonBlock' : s + 'basic.octagon2;dx=10;',
  229. 'MindMapCrossBlock' : s + 'basic.cross2;dx=20',
  230. //Entity Relationship
  231. 'ERDEntityBlock' : cs,
  232. 'ERDEntityBlock2' : cs,
  233. 'ERDEntityBlock3' : cs,
  234. 'ERDEntityBlock4' : cs,
  235. //UML Class Diagram
  236. 'UMLClassBlock': cs,
  237. 'UMLActiveClassBlock': 'shape=process',
  238. 'UMLMultiplicityBlock' : cs,
  239. // 'UMLPackageBlock': 'shape=folder;tabPosition=left',
  240. 'UMLPackageBlock': '',
  241. 'UMLConstraintBlock' : cs,
  242. 'UMLNoteBlock': 'shape=note;size=15',
  243. 'UMLNoteBlockV2': 'shape=note;size=15',
  244. 'UMLTextBlock': cs,
  245. //UML Use Case
  246. 'UMLActorBlock': 'shape=umlActor;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;whiteSpace=nowrap',
  247. 'UMLUseCaseBlock': 'ellipse',
  248. 'UMLCircleContainerBlock': 'ellipse;' + containerStyle,
  249. 'UMLRectangleContainerBlock': containerStyle,
  250. //UML State/Activity
  251. 'UMLOptionLoopBlock' : s + 'sysml.package2;xSize=90;overflow=fill',
  252. 'UMLAlternativeBlock2' : s + 'sysml.package2;xSize=90;overflow=fill',
  253. 'UMLStartBlock' : 'ellipse;fillColor=#000000',
  254. 'UMLStateBlock' : cs,
  255. 'UMLDecisionBlock' : 'shape=rhombus;',
  256. 'UMLHForkJoinBlock' : 'fillColor=#000000',
  257. 'UMLVForkJoinBlock' : 'fillColor=#000000',
  258. 'UMLFlowFinalBlock' : s + 'flowchart.or',
  259. 'UMLHistoryStateBlock' : 'ellipse',
  260. 'UMLEndBlock' : s + 'bpmn.shape;outline=end;symbol=terminate;strokeColor=#000000;fillColor=#ffffff',
  261. 'UMLObjectBlock' : '',
  262. 'UMLSendSignalBlock' : s + 'sysml.sendSigAct',
  263. 'UMLReceiveSignalBlock' : s + 'sysml.accEvent;flipH=1',
  264. 'UMLAcceptTimeEventActionBlock' : s + 'sysml.timeEvent',
  265. // 'UMLInterruptingEdgeBlock' NA
  266. 'UMLOffPageLinkBlock' : s + 'sysml.sendSigAct;direction=south',
  267. // 'UMLExpansionNodeBlock' NA
  268. 'UMLMultiLanePoolBlock' : cs,
  269. 'UMLMultiLanePoolRotatedBlock' : cs,
  270. 'UMLMultidimensionalSwimlane' : cs,
  271. //UML Sequence
  272. 'UMLActivationBlock' : '',
  273. 'UMLDeletionBlock' : s + 'sysml.x;strokeWidth=4',
  274. // 'UMLAlternativeBlock' NA
  275. 'UMLSeqEntityBlock' : s + 'electrical.radio.microphone_1;direction=north',
  276. // 'UMLBoundaryBlock' NA
  277. // 'UMLControlBlock'NA
  278. //UML Component
  279. 'UMLComponentBlock' : 'shape=component;align=left;spacingLeft=36',
  280. 'UMLComponentBlockV2' : 'shape=component;align=left;spacingLeft=36',
  281. 'UMLNodeBlock' : 'shape=cube;size=20;flipH=1;verticalAlign=top;spacingTop=22;spacingLeft=5',
  282. 'UMLNodeBlockV2' : 'shape=cube;size=20;flipH=1;verticalAlign=top;spacingTop=22;spacingLeft=5',
  283. 'UMLComponentInterfaceBlock' : 'ellipse',
  284. 'UMLComponentInterfaceBlockV2' : 'ellipse',
  285. 'UMLComponentBoxBlock' : cs,
  286. 'UMLComponentBoxBlockV2' : cs,
  287. 'UMLAssemblyConnectorBlock': cs,
  288. 'UMLAssemblyConnectorBlockV2': cs,
  289. 'UMLProvidedInterfaceBlock' : cs,
  290. 'UMLProvidedInterfaceBlockV2' :cs,
  291. 'UMLRequiredInterfaceBlock' : 'shape=requires;direction=north',
  292. 'UMLRequiredInterfaceBlockV2' : 'shape=requires;direction=north',
  293. 'UMLSwimLaneBlockV2': cs,
  294. 'UMLSwimLaneBlock': 'swimlane;startSize=25;dropTarget=0;fontStyle=0' + containerStyle,
  295. //UML Deployment
  296. //UML Entity Relationship
  297. 'UMLEntityBlock' : '',
  298. 'UMLWeakEntityBlock' : 'shape=ext;double=1',
  299. 'UMLAttributeBlock' : 'ellipse',
  300. 'UMLMultivaluedAttributeBlock' : 'shape=doubleEllipse',
  301. 'UMLRelationshipBlock' : 'shape=rhombus',
  302. 'UMLWeakRelationshipBlock' : 'shape=rhombus;double=1',
  303. //BPMN 2.0
  304. 'BPMNActivity' : cs,
  305. 'BPMNEvent' : cs,
  306. 'BPMNChoreography' : cs,
  307. 'BPMNConversation' : cs,
  308. 'BPMNGateway' : cs,
  309. 'BPMNData' : cs,
  310. 'BPMNDataStore' : 'shape=datastore',
  311. 'BPMNAdvancedPoolBlock' : cs,
  312. 'BPMNAdvancedPoolBlockRotated' : cs,
  313. 'BPMNBlackPool' : cs,
  314. 'BPMNTextAnnotation' : cs,
  315. //Data Flow
  316. 'DFDExternalEntityBlock' : cs,
  317. 'DFDExternalEntityBlock2' : '',
  318. 'YDMDFDProcessBlock' : 'ellipse',
  319. 'YDMDFDDataStoreBlock' : 'shape=partialRectangle;right=0;left=0',
  320. 'GSDFDProcessBlock' : cs,
  321. 'GSDFDProcessBlock2' : 'rounded=1;arcSize=10;',
  322. 'GSDFDDataStoreBlock' : cs,
  323. 'GSDFDDataStoreBlock2' : 'shape=partialRectangle;right=0',
  324. //Org Chart
  325. 'OrgBlock' : cs,
  326. //Tables
  327. 'DefaultTableBlock' : cs,
  328. //Value Stream Mapping
  329. //Processes
  330. 'VSMCustomerSupplierBlock' : s + 'lean_mapping.outside_sources',
  331. 'VSMDedicatedProcessBlock' : cs,
  332. 'VSMSharedProcessBlock' : cs,
  333. 'VSMWorkcellBlock' : cs,
  334. 'VSMDatacellBlock' : cs,
  335. //Materials
  336. 'VSMInventoryBlock' : cs,
  337. 'VSMSupermarketBlock' : cs,
  338. 'VSMPhysicalPullBlock' : s + 'lean_mapping.physical_pull;direction=south',
  339. 'VSMFIFOLaneBlock' : cs,
  340. 'VSMSafetyBufferStockBlock' : cs,
  341. //Shipments
  342. 'VSMExternalShipmentAirplaneBlock' : s + 'lean_mapping.airplane_7',
  343. 'VSMExternalShipmentForkliftBlock' : s + 'lean_mapping.move_by_forklift',
  344. 'VSMExternalShipmentTruckBlock' : s + 'lean_mapping.truck_shipment;align=left;',
  345. 'VSMExternalShipmentBoatBlock' : s + 'lean_mapping.boat_shipment;verticalAlign=bottom;',
  346. //Information
  347. 'VSMProductionControlBlock' : cs,
  348. 'VSMOtherInformationBlock' : '',
  349. // 'VSMHeijyunkaBoxBlock' NA
  350. 'VSMSequencedPullBallBlock' : s + 'lean_mapping.sequenced_pull_ball',
  351. 'VSMMRPERPBlock' : s + 'lean_mapping.mrp_erp;whiteSpace=wrap',
  352. 'VSMLoadLevelingBlock' : s + 'lean_mapping.load_leveling',
  353. 'VSMGoSeeBlock' : s + 'lean_mapping.go_see_production_scheduling;flipH=1',
  354. 'VSMGoSeeProductionBlock' : cs,
  355. 'VSMVerbalInfoBlock' : s + 'lean_mapping.verbal',
  356. //Value Stream Mapping
  357. 'VSMKaizenBurstBlock' : s + 'lean_mapping.kaizen_lightening_burst',
  358. 'VSMOperatorBlock' : s + 'lean_mapping.operator;flipV=1',
  359. 'VSMTimelineBlock' : cs, //TODO Timeline shape
  360. 'VSMQualityProblemBlock' : s + 'lean_mapping.quality_problem',
  361. //Kanban
  362. 'VSMProductionKanbanSingleBlock' : 'shape=card;size=18;flipH=1;',
  363. 'VSMProductionKanbanBatchBlock' : cs,
  364. 'VSMWithdrawalKanbanBlock' : s + 'lean_mapping.withdrawal_kanban',
  365. // 'VSMWithdrawalKanbanBatchBlock' NA
  366. 'VSMSignalKanbanBlock' : 'shape=triangle;direction=south;anchorPointDirection=0',
  367. 'VSMKanbanPostBlock' : s + 'lean_mapping.kanban_post',
  368. //Arrows
  369. 'VSMShipmentArrow': 'shape=singleArrow;arrowWidth=0.5;arrowSize=0.13',
  370. 'VSMPushArrow' : s + 'lean_mapping.push_arrow',
  371. 'VSMElectronicInformationArrow' : cs,
  372. //EC2
  373. 'AWSElasticComputeCloudBlock2' : cs,
  374. // 'AWSElasticComputeCloudBlock2' : ss + 'aws3.ec2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  375. 'AWSInstanceBlock2' : ss + 'aws3.instance',
  376. 'AWSInstancesBlock2' : ss + 'aws3.instances;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  377. 'AWSAMIBlock2' : ss + 'aws3.ami;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  378. 'AWSDBonInstanceBlock2' : ss + 'aws3.db_on_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  379. 'AWSInstanceCloudWatchBlock2' : ss + 'aws3.instance_with_cloudwatch;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  380. //'AmazonCloudWatch2017' : ss + 'aws3.instance_with_cloudwatch;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  381. 'AWSElasticIPBlock2' : ss + 'aws3.elastic_ip;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  382. 'AWSHDFSClusterBlock2' : ss + 'aws3.hdfs_cluster;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  383. 'AWSAutoScalingBlock2' : ss + 'aws3.auto_scaling;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  384. 'AWSEC2OptimizedInstance2' : ss + 'aws3.optimized_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  385. 'AWSAmazonEC2(Spotinstance)' : ss + 'aws3.spot_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  386. 'AWSAmazonECR' : ss + 'aws3.ecr;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  387. 'AWSAmazonECS' : ss + 'aws3.ecs;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  388. 'AWSLambda2' : ss + 'aws3.lambda;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  389. 'AWSElasticLoadBalancing' : ss + 'aws3.elastic_load_balancing;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  390. //Networking
  391. 'AWSElasticLoadBlock2' : ss + 'aws3.classic_load_balancer;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  392. 'AWSDirectConnectBlock3' : ss + 'aws3.direct_connect;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  393. 'AWSElasticNetworkBlock2' : ss + 'aws3.elastic_network_interface;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  394. 'AWSRoute53Block2' : cs,
  395. 'AWSHostedZoneBlock2' : ss + 'aws3.hosted_zone;fontColor=#ffffff;fontStyle=1',
  396. 'AWSRouteTableBlock2' : ss + 'aws3.route_table;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  397. 'AWSVPCBlock2' : ss + 'aws3.vpc;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  398. 'AWSVPNConnectionBlock2' : ss + 'aws3.vpn_connection;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  399. 'AWSVPNGatewayBlock2' : ss + 'aws3.vpn_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  400. 'AWSCustomerGatewayBlock2' : ss + 'aws3.customer_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  401. 'AWSCustomerGatewayBlock3' : ss + 'aws3.customer_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  402. 'AWSInternetGatewayBlock2' : ss + 'aws3.internet_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  403. 'AWSRouterBlock2' : ss + 'aws3.router;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  404. 'AWSRouterBlock3' : ss + 'aws3.router;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  405. 'AWSAmazonVPC(endpoints)' : ss + 'aws3.endpoints;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  406. 'AWSAmazonVPC(flowlogs)' : ss + 'aws3.flow_logs;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  407. 'AWSAmazonVPC(VPCNATgateway)' : ss + 'aws3.vpc_nat_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  408. 'AWSVPCPeering3' : ss + 'aws3.vpc_peering;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  409. //S3
  410. 'AWSSimpleStorageBlock2' : ss + 'aws3.s3;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  411. 'AWSBucketBlock2' : ss + 'aws3.bucket;fontStyle=1;fontColor=#ffffff',
  412. 'AWSBuckethWithObjectsBlock2' : ss + 'aws3.bucket_with_objects;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  413. 'AWSObjectBlock2' : ss + 'aws3.object;fontStyle=1;fontColor=#ffffff',
  414. 'AWSImportExportBlock2' : ss + 'aws3.import_export;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  415. 'AWSStorageGatewayBlock2' : ss + 'aws3.storage_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  416. 'AWSElasticBlockStorageBlock2' : ss + 'aws3.volume;fontStyle=1;fontColor=#ffffff',
  417. 'AWSVolumeBlock3' : ss + 'aws3.volume;fontStyle=1;fontColor=#ffffff',
  418. 'AWSSnapshotBlock2' : ss + 'aws3.snapshot;fontStyle=1;fontColor=#ffffff',
  419. 'AWSGlacierArchiveBlock3' : ss + 'aws3.archive;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  420. 'AWSGlacierVaultBlock3' : ss + 'aws3.vault;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  421. 'AWSAmazonEFS' : ss + 'aws3.efs;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  422. 'AWSGlacierBlock2' : ss + 'aws3.glacier;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  423. 'AWSAWSImportExportSnowball' : ss + 'aws3.snowball;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  424. 'AWSStorageGatewayCachedVolumn2' : ss + 'aws3.cached_volume;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  425. 'AWSStorageGatewayNon-CachedVolumn2' : ss + 'aws3.non_cached_volume;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  426. 'AWSStorageGatewayVirtualTapeLibrary2' : ss + 'aws3.virtual_tape_library;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  427. //Content Delivery
  428. 'AWSCloudFrontBlock2' : ss + 'aws3.cloudfront;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  429. 'AWSDownloadDistBlock2' : ss + 'aws3.download_distribution;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  430. 'AWSStreamingBlock2' : ss + 'aws3.streaming_distribution;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  431. 'AWSEdgeLocationBlock2' : ss + 'aws3.edge_location;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  432. //Database
  433. 'AWSItemBlock2' : ss + 'aws3.item;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  434. 'AWSItemsBlock2' : ss + 'aws3.items;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  435. 'AWSAttributeBlock2' : ss + 'aws3.attribute;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  436. 'AWSAttributesBlock2' : ss + 'aws3.attributes;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  437. 'AWSRDBSBlock2' : cs,
  438. 'AWSRDSInstanceBlock2' : ss + 'aws3.rds_db_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  439. 'AWSRDSStandbyBlock2' : ss + 'aws3.rds_db_instance_standby_multi_az;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  440. 'AWSRDSInstanceReadBlock2' : ss + 'aws3.rds_db_instance_read_replica;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  441. 'AWSOracleDBBlock2' : ss + 'aws3.oracle_db_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  442. 'AWSMySQLDBBlock2' : ss + 'aws3.mysql_db_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  443. 'AWSDynamoDBBlock2' : ss + 'aws3.dynamo_db;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  444. 'AWSSimpleDatabaseBlock3' : ss + 'aws2.database.simpledb;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  445. 'AWSSimpleDatabaseDomainBlock3' : ss + 'aws2.database.simpledb_domain;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  446. 'AWSTableBlock2' : ss + 'aws3.table;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  447. 'AWSAmazonRedShiftBlock3' : ss + 'aws3.redshift;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  448. 'AWSElastiCacheNodeBlock2' : ss + 'aws3.cache_node;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  449. 'AWSElastiCacheBlock2' : ss + 'aws3.elasticache;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  450. 'AWSDynamoDBGlobalSecondaryIndexes2' : ss + 'aws3.global_secondary_index;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  451. 'AWSAmazonElastiCacheMemcache2' : ss + 'aws3.memcached;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  452. 'AWSAmazonElastiCacheRedis2' : ss + 'aws3.redis;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  453. 'AWSAmazonRDSMSSQLInstance2' : ss + 'aws3.ms_sql_instance_2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  454. 'AWSMSSQLDBBlock3' : ss + 'aws3.ms_sql_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  455. 'AWSAmazonRDSMySQLDBInstance2' : ss + 'aws3.mysql_db_instance_2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  456. 'AWSAmazonRDSOracleDBInstance2' : ss + 'aws3.oracle_db_instance_2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  457. 'AWSRDSReplicasetswithPIOP2' : ss + 'aws3.piop;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  458. 'AWSAmazonRDSPostgreSQL2' : ss + 'aws3.postgre_sql_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  459. 'AWSRDSMasterSQL2' : ss + 'aws3.sql_master;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  460. 'AWSRDSSlaveSQL2' : ss + 'aws3.sql_slave;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  461. 'AWSAmazonRedshift(densecomputenode)' : ss + 'aws3.dense_compute_node;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  462. 'AWSAmazonRedshift(densestoragenode)' : ss + 'aws3.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  463. 'AWSAWSDatabaseMigrationService' : ss + 'aws3.database_migration_service;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  464. //Security Identity
  465. 'AWSACM' : ss + 'aws3.certificate_manager;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  466. 'AWSAmazonInspector' : ss + 'aws3.inspector;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  467. 'AWSAWSCloudHSM' : ss + 'aws3.cloudhsm;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  468. 'AWSDirectoryService2' : ss + 'aws3.directory_service;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  469. 'AWSAWSKMS' : ss + 'aws3.kms;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  470. 'AWSAWSWAF' : ss + 'aws3.waf;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  471. 'AWSACM(certificate-manager)' : ss + 'aws3.certificate_manager_2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  472. //App Services
  473. 'AWSSESBlock2' : ss + 'aws3.ses;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  474. 'AWSEmailBlock2' : ss + 'aws3.email;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  475. 'AWSSNSBlock2' : ss + 'aws3.sns;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  476. 'AWSSQSBlock3' : ss + 'aws3.sqs;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  477. 'AWSQueueBlock2' : ss + 'aws3.queue;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  478. 'AWSMessageBlock2' : ss + 'aws3.message;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  479. 'AWSDeciderBlock2' : ss + 'aws3.decider;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  480. 'AWSSWFBlock2' : ss + 'aws3.swf;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  481. 'AWSWorkerBlock2' : ss + 'aws3.worker;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  482. 'AWSCloudSearchBlock2' : ss + 'aws3.cloudsearch;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  483. 'AWSCloudSearchMetadataBlock3' : ss + 'aws3.search_documents;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  484. 'AWSElasticTranscoder3' : ss + 'aws3.elastic_transcoder;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  485. 'AWSAmazonAPIGateway' : ss + 'aws3.api_gateway;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  486. 'AWSAppStream2' : ss + 'aws3.appstream;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  487. //Deployment
  488. 'AWSCloudFormationBlock2' : ss + 'aws3.cloudformation;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  489. 'AWSDataPipelineBlock3' : ss + 'aws3.data_pipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  490. 'AWSDataPipelineBlock2' : ss + 'aws3.data_pipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  491. 'AWSTemplageBlock2' : ss + 'aws3.template;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  492. 'AWSStackBlock2' : ss + 'aws3.stack_aws_cloudformation;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  493. 'AWSBeanStockBlock2' : ss + 'aws3.elastic_beanstalk;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  494. 'AWSApplicationBlock2' : ss + 'aws3.application;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  495. 'AWSBeanstalkDeploymentBlock3' : ss + 'aws3.deployment;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  496. 'AWSIAMBlock3' : ss + 'aws3.iam;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  497. 'AWSIAMSTSBlock3' : ss + 'aws3.sts;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  498. 'AWSIAMAddonBlock2' : ss + 'aws3.add_on;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  499. 'AWSCloudWatchBlock3' : ss + 'aws3.cloudwatch;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  500. 'AWSCloudWatchAlarmBlock2' : ss + 'aws3.alarm;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  501. 'AWSIAMSecurityTokenService2' : ss + 'aws3.sts_2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  502. 'AWSIAMDataEncryptionKey2' : ss + 'aws3.data_encryption_key;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  503. 'AWSIAMEncryptedData2' : ss + 'aws3.encrypted_data;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  504. 'AWSAWSIAM(long-termsecuritycredential)' : ss + 'aws3.long_term_security_credential;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  505. 'AWSIAMMFAToken2' : ss + 'aws3.mfa_token;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  506. 'AWSIAMPermissions2' : ss + 'aws3.permissions_2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  507. 'AWSIAMRoles2' : ss + 'aws3.role;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  508. 'AWSAWSIAM(temporarysecuritycredential)' : ss + 'aws3.long_term_security_credential;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  509. 'AWSCloudTrail2' : ss + 'aws3.cloudtrail;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  510. 'AWSConfig2' : ss + 'aws3.config;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  511. 'AWSOpsWorksBlock3' : ss + 'aws3.opsworks;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  512. 'AWSAWSServiceCatalog' : ss + 'aws3.service_catalog;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  513. 'AWSTrustedAdvisor2' : ss + 'aws3.trusted_advisor;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  514. 'AWSOpsWorksApps2' : ss + 'aws3.apps;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  515. 'AWSOpsWorksDeployments2' : ss + 'aws3.deployments;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  516. 'AWSOpsWorksInstances2' : ss + 'aws3.instances_2;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  517. 'AWSOpsWorksLayers2' : ss + 'aws3.layers;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  518. 'AWSOpsWorksMonitoring2' : ss + 'aws3.monitoring;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  519. 'AWSOpsWorksPermissions2' : ss + 'aws3.permissions;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  520. 'AWSOpsWorksResources2' : ss + 'aws3.resources;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  521. 'AWSOpsWorksStack2' : ss + 'aws3.stack_aws_opsworks;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  522. //On-Demand
  523. 'AWSMechanicalTurkBlock3' : ss + 'aws3.mechanical_turk;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  524. 'AWSHumanITBlock2' : ss + 'aws3.human_intelligence_tasks_hit;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  525. 'AWSAssignmentTaskBlock2' : ss + 'aws3.requester;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  526. 'AWSWorkersBlock2' : ss + 'aws3.users;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  527. 'AWSRequesterBlock2' : ss + 'aws3.assignment_task;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  528. //SDKs
  529. 'AWSAndroidBlock3': ss + 'aws3.android;fillColor=#96BF3D;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  530. 'AWSiOSBlock3' : ss + 'aws3.android;fillColor=#CFCFCF;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  531. 'AWSJavaBlock3' : ss + 'aws3.android;fillColor=#EE472A;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  532. 'AWSJavaScript' : ss + 'aws3.android;fillColor=#205E00;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  533. 'AWSNetBlock3' : ss + 'aws3.android;fillColor=#115193;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  534. 'AWSNodeJSBlock3' : ss + 'aws3.android;fillColor=#8CC64F;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  535. 'AWSPHPBlock3' : ss + 'aws3.android;fillColor=#5A69A4;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  536. 'AWSPythonBlock3' : ss + 'aws3.android;fillColor=#FFD44F;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  537. 'AWSRubyBlock3' : ss + 'aws3.android;fillColor=#AE1F23;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  538. 'AWSXamarin' : ss + 'aws3.android;fillColor=#4090D7;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  539. 'AWSCLIBlock3' : ss + 'aws3.cli;fillColor=#444444;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  540. 'AWSEclipseToolkitBlock3' : ss + 'aws3.toolkit_for_eclipse;fillColor=#342074;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  541. 'AWSVisualStudioToolkitBlock3' : ss + 'aws3.toolkit_for_visual_studio;fillColor=#53B1CB;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  542. 'AWSWindowsPowershellToolkitBlock3' : ss + 'aws3.toolkit_for_windows_powershell;fillColor=#737373;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  543. //Analytics
  544. 'AWSAmazonElasticsearchService' : ss + 'aws3.elasticsearch_service;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  545. 'AWSElasticMapReduceBlock2' : ss + 'aws3.emr;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  546. 'AWSClusterBlock2' : ss + 'aws3.emr_cluster;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  547. 'AWSEMREngine2' : ss + 'aws3.emr_engine;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  548. 'AWSEMRMapRM3Engine2' : ss + 'aws3.emr_engine_mapr_m3;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  549. 'AWSEMRMapRM5Engine2' : ss + 'aws3.emr_engine_mapr_m5;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  550. 'AWSEMRMapRM7Engine2' : ss + 'aws3.emr_engine_mapr_m7;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  551. 'AWSKinesis2' : ss + 'aws3.kinesis;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  552. 'AWSAmazonKinesis(AmazonKinesisAnalytics)' : ss + 'aws3.kinesis;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  553. 'AWSKinesisEnabledApp2' : ss + 'aws3.kinesis_enabled_app;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  554. 'AWSAmazonKinesis(AmazonKinesisFirehose)' : ss + 'aws3.kinesis_firehose;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  555. 'AWSAmazonKinesis(AmazonKinesisStreams)' : ss + 'aws3.kinesis_streams;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  556. 'AWSAmazonMachineLearning' : ss + 'aws3.machine_learning;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  557. 'AWSAmazonQuickSight' : ss + 'aws3.quicksight;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  558. //Mobile Services
  559. 'AWSCognito2' : ss + 'aws3.cognito;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  560. 'AWSMobileAnalytics2' : ss + 'aws3.mobile_analytics;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  561. 'AWSAWSDeviceFarm' : ss + 'aws3.device_farm;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  562. 'AWSAWSMobileHub' : ss + 'aws3.mobile_hub;gradientColor=#AD688A;gradientDirection=east;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  563. 'AWSTopicBlock2' : ss + 'aws3.topic_2;fontStyle=1;fontColor=#ffffff;verticalAlign=top;spacingTop=-5',
  564. 'AWSEmailNotificationBlock2' : ss + 'aws3.email_notification;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  565. 'AWSHTTPNotificationBlock2' : ss + 'aws3.http_notification;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  566. //Developer Tools
  567. 'AWSAWSCodeCommit' : ss + 'aws3.codecommit;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  568. 'AWSCodeDeploy2' : ss + 'aws3.codedeploy;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  569. 'AWSAWSCodePipeline' : ss + 'aws3.codepipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  570. //Enterprise Application
  571. 'AWSWorkDocs2' : ss + 'aws3.workdocs;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  572. 'AWSAmazonWorkMail' : ss + 'aws3.workmail;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  573. 'AWSAmazonWorkSpaces2' : ss + 'aws3.workspaces;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  574. //Internet of Things
  575. 'AWSAWSIoT' : ss + 'aws3.aws_iot;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  576. 'AWSAWSIoT(action)' : ss + 'aws3.action;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  577. 'AWSAWSIoT(actuator)' : ss + 'aws3.actuator;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  578. 'AWSAWSIoT(certificate)' : ss + 'aws3.certificate;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  579. 'AWSAWSIoT(desiredstate)' : ss + 'aws3.desired_state;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  580. 'AWSAWSIoT(hardwareboard)' : ss + 'aws3.hardware_board;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  581. 'AWSAWSIoT(HTTP2protocol)' : ss + 'aws3.http_2_protocol;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  582. 'AWSAWSIoT(HTTPprotocol)' : ss + 'aws3.http_protocol;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  583. 'AWSAWSIoT(MQTTprotocol)' : ss + 'aws3.mqtt_protocol;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  584. 'AWSAWSIoT(policy)' : ss + 'aws3.policy;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  585. 'AWSAWSIoT(reportedstate)' : ss + 'aws3.reported_state;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  586. 'AWSAWSIoT(rule)' : ss + 'aws3.rule;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  587. 'AWSAWSIoT(sensor)' : ss + 'aws3.sensor;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  588. 'AWSAWSIoT(servo)' : ss + 'aws3.servo;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  589. 'AWSAWSIoT(shadow)' : ss + 'aws3.shadow;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  590. 'AWSAWSIoT(simulator)' : ss + 'aws3.simulator;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  591. 'AWSAWSIoT(thingbank)' : ss + 'aws3.bank;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  592. 'AWSAWSIoT(thingbicycle)' : ss + 'aws3.bicycle;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  593. 'AWSAWSIoT(thingcamera)' : ss + 'aws3.camera;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  594. 'AWSAWSIoT(thingcar)' : ss + 'aws3.car;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  595. 'AWSAWSIoT(thingcart)' : ss + 'aws3.cart;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  596. 'AWSAWSIoT(thingcoffeepot)' : ss + 'aws3.coffee_pot;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  597. 'AWSAWSIoT(thingdoorlock)' : ss + 'aws3.door_lock;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  598. 'AWSAWSIoT(thingfactory)' : ss + 'aws3.factory;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  599. 'AWSAWSIoT(thinggeneric)' : ss + 'aws3.generic;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  600. 'AWSAWSIoT(thinghouse)' : ss + 'aws3.house;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  601. 'AWSAWSIoT(thinglightbulb)' : ss + 'aws3.lightbulb;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  602. 'AWSAWSIoT(thingmedicalemergency)' : ss + 'aws3.medical_emergency;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  603. 'AWSAWSIoT(thingpoliceemergency)' : ss + 'aws3.police_emergency;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  604. 'AWSAWSIoT(thingthermostat)' : ss + 'aws3.thermostat;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  605. 'AWSAWSIoT(thingtravel)' : ss + 'aws3.travel;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  606. 'AWSAWSIoT(thingutility)' : ss + 'aws3.utility;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  607. 'AWSAWSIoT(thingwindfarm)' : ss + 'aws3.windfarm;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  608. 'AWSAWSIoT(topic)' : ss + 'aws3.topic;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  609. //AWS General
  610. 'AWSCloudBlock2' : ss + 'aws3.cloud;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  611. 'AWSVPCloudBlock3' : ss + 'aws3.virtual_private_cloud;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  612. 'AWSUserBlock2' : ss + 'aws3.user;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  613. 'AWSUsersBlock2' : ss + 'aws3.users;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  614. 'AWSClientBlock2' : ss + 'aws3.management_console;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  615. 'AWSMobileClientBlock2' : ss + 'aws3.mobile_client;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  616. 'AWSGenericDatabaseBlock3' : ss + 'aws3.generic_database;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  617. 'AWSDiskBlock3' : ss + 'aws3.disk;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  618. 'AWSTapeStorageBlock3' : ss + 'aws3.tape_storage;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  619. 'AWSMediaBlock2' : ss + 'aws3.multimedia;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  620. 'AWSDataCenterBlock2' : ss + 'aws3.corporate_data_center;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  621. 'AWSServerBlock2' : ss + 'aws3.traditional_server;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  622. 'AWSInternetBlock2' : ss + 'aws2.non-service_specific.internet;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  623. 'AWSForumsBlock3' : ss + 'aws3.forums;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  624. 'AWSManagementBlock2' : ss + 'aws3.management_console;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  625. 'AWSAmazonElasticCacheNode2' : ss + 'aws3.cache_node;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  626. 'AWSAmazonRedshiftDW1Cluster2' : ss + 'aws3.dense_compute_node;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  627. 'AWSAmazonRedshiftDW2Cluster2' : ss + 'aws3.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  628. 'AWSAmazonRedshiftSSDFamilyCluster2' : ss + 'aws3.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  629. 'AWSAmazonRoute53RouteTable2' : ss + 'aws3.route_table;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  630. // 'AWSExampleIAMBlock2' NA
  631. 'AWSSubnetBlock2' : ss + 'aws3.permissions;verticalLabelPosition=bottom;align=center;verticalAlign=top',
  632. //AWS Containers
  633. 'AWSRoundedRectangleContainerBlock2' : cs,
  634. 'AWSRoundedRectangleContainerBlock' : cs,
  635. //Azure Cloud
  636. 'ACAccessControlBlock' : ssAzure + 'azure.access_control',
  637. 'ACAPIAppsBlock' : ssAzure + 'mscae.cloud.api_app',
  638. 'ACAPIManagementBlock' : ssAzure + 'mscae.cloud.api_management',
  639. 'ACAppInsightsBlock' : ssAzure + 'mscae.cloud.application_insights',
  640. 'ACAppServicesBlock' : ssAzure + 'mscae.cloud.app_service',
  641. 'ACAutoscalingBlock' : ssAzure + 'azure.autoscale',
  642. 'ACAzureActiveDirectoryBlock' : ssAzure + 'azure.azure_active_directory',
  643. 'ACAzurealertBlock' : ssAzure + 'azure.azure_alert',
  644. 'ACAzureAutomationBlock' : ssAzure + 'azure.automation',
  645. 'ACAzureBatchBlock' : ssAzure + 'mscae.cloud.azure_batch',
  646. 'ACAzureRedisBlock' : ssAzure + 'azure.azure_cache',
  647. 'ACAzureFilesBlock' : ssAzure + 'mscae.cloud.azure_files_service',
  648. 'ACAzureloadbalancerBlock' : ssAzure + 'mscae.cloud.azure_automatic_load_balancer',
  649. 'ACAzureMarketplaceBlock' : ssAzure + 'azure.azure_marketplace',
  650. 'ACAzureRightManagementRMSBlock' : ssAzure + 'mscae.cloud.azure_rights_management_rms',
  651. 'ACAzureSDKBlock' : ssAzure + 'azure.azure_sdk',
  652. 'ACAzureSearchBlock' : ssAzure + 'mscae.cloud.azure_search',
  653. 'ACAzureSQLdatabaseBlock' : ssAzure + 'azure.sql_database_sql_azure',
  654. 'ACAzuresubscriptionBlock' : ssAzure + 'azure.azure_subscription',
  655. 'ACAzureWebsitesBlock' : ssAzure + 'azure.azure_website',
  656. 'ACBackupServiceBlock' : ssAzure + 'azure.backup_service',
  657. 'ACBitbucketcodesourceBlock' : ssAzure + 'azure.bitbucket_code_source',
  658. 'ACBizTalkServicesBlock' : ssAzure + 'azure.biztalk_services',
  659. 'ACCloudServiceBlock' : ssAzure + 'azure.cloud_service',
  660. 'ACCodePlexBlock' : ssAzure + 'azure.codeplex_code_source',
  661. // 'ACComputeBlock' NA
  662. 'ACContentDeliveryNetworkBlock' : ssAzure + 'azure.content_delivery_network',
  663. 'ACDataFactoryBlock' : ssAzure + 'mscae.cloud.data_factory',
  664. // 'ACDataservicesBlock' NA
  665. 'ACDocumentDBBlock' : ssAzure + 'mscae.cloud.documentdb',
  666. 'ACDropboxcodesourceBlock' : ssAzure + 'azure.dropbox_code_source',
  667. 'ACEventsHubBlock' : ssAzure + 'mscae.cloud.event_hubs',
  668. 'ACExpressRouteBlock' : ssAzure + 'azure.express_route',
  669. 'ACGitHubBlock' : ssAzure + 'azure.github_code',
  670. 'ACGitrepositoryBlock' : ssAzure + 'azure.git_repository',
  671. 'ACHDInsightBlock' : ssAzure + 'mscae.cloud.hdinsight',
  672. 'ACHealthmonitoringBlock' : ssAzure + 'azure.health_monitoring',
  673. 'ACHealthyBlock' : ssAzure + 'azure.healthy',
  674. 'ACHybridConnectionBlock' : ssAzure + 'mscae.cloud.hybrid_connections',
  675. 'ACBizTalkhybridconnectionBlock' : ssAzure + 'mscae.cloud.hybrid_connection_manager',
  676. 'ACKeyVaultBlock' : ssAzure + 'mscae.cloud.key_vault',
  677. 'ACLogicAppBlock' : ssAzure + 'mscae.cloud.logic_app',
  678. 'ACMachineLearningBlock' : ssAzure + 'mscae.cloud.machine_learning',
  679. 'ACMediaServicesBlock' : ssAzure + 'azure.media_service',
  680. 'ACMicrosoftaccountBlock' : ssAzure + 'mscae.cloud.microsoft_account',
  681. 'ACMicrosoftAzureBlock' : ssAzure + 'mscae.cloud.microsoft_azure',
  682. 'ACMobileEngagementBlock' : ssAzure + 'mscae.cloud.mobile_engagement',
  683. 'ACMobileServicesBlock' : ssAzure + 'mscae.cloud.mobile_app',
  684. 'ACMultiFactorAuthBlock' : ssAzure + 'azure.multi_factor_authentication',
  685. 'ACMySQLdatabaseBlock' : ssAzure + 'azure.mysql_database',
  686. 'ACNotificationHubsBlock' : ssAzure + 'azure.notification_hub',
  687. 'ACNotificationtopicBlock' : ssAzure + 'azure.notification_topic',
  688. 'ACOperationalInsightsBlock' : ssAzure + 'mscae.cloud.operational_insights',
  689. 'ACOSimageBlock' : ssAzure + 'azure.operating_system_image',
  690. 'ACRemoteAppBlock' : ssAzure + 'mscae.cloud.remoteapp',
  691. 'ACrpdRemotingfileBlock' : ssAzure + 'azure.rdp_remoting_file',
  692. 'ACSchedulerBlock' : ssAzure + 'azure.scheduler',
  693. 'ACServiceBusBlock' : ssAzure + 'azure.service_bus',
  694. 'ACServiceBusQueueBlock' : ssAzure + 'azure.service_bus_queues',
  695. 'ACServiceBusRelayBlock' : ssAzure + 'azure.service_bus_relay',
  696. 'ACServiceBusTopicBlock' : ssAzure + 'azure.service_bus_topics_and_subscriptions',
  697. 'ACServiceEndpointBlock' : ssAzure + 'mscae.cloud.service_endpoint',
  698. 'ACServicepackageBlock' : ssAzure + 'mscae.cloud.service_package',
  699. 'ACSiteRecoveryBlock' : ssAzure + 'azure.hyper_v_recovery_manager',
  700. 'ACSQLdatabasegenericBlock' : ssAzure + 'azure.sql_database',
  701. // 'ACSQLDatabasePremiumBlock' NA
  702. 'ACSQLdatasyncBlock' : ssAzure + 'azure.sql_datasync',
  703. 'ACSQLreportingdeprecatedBlock' : ssAzure + 'azure.sql_reporting',
  704. 'ACStartuptaskBlock' : ssAzure + 'azure.startup_task',
  705. 'ACStorageAzureBlock' : ssAzure + 'mscae.cloud.azure_storage',
  706. 'ACStorageblobBlock' : ssAzure + 'azure.storage_blob',
  707. 'ACStoragequeueBlock' : ssAzure + 'azure.storage_queue',
  708. 'ACStoragetableBlock' : ssAzure + 'azure.storage_table',
  709. 'ACStorSimpleBlock' : ssAzure + 'azure.storsimple',
  710. 'ACStreamAnalyticsBlock' : ssAzure + 'mscae.cloud.stream_analytics',
  711. 'ACTrafficManagerBlock' : ssAzure + 'azure.traffic_manager',
  712. 'ACAlienBlock' : ssAzure + 'azure.unidentified_code_object',
  713. 'ACVHDBlock' : ssAzure + 'azure.vhd',
  714. 'ACVHDdatadiskBlock' : ssAzure + 'azure.vhd_data_disk',
  715. 'ACVirtualmachineBlock' : ssAzure + 'azure.virtual_machine',
  716. 'ACVirtualmachinecontainerBlock' : ssAzure + 'mscae.cloud.virtual_machine_container',
  717. 'ACVirtualnetworkBlock' : ssAzure + 'azure.virtual_network',
  718. 'ACVisualStudioOnlineBlock' : ssAzure + 'azure.visual_studio_online',
  719. 'ACVMsymbolonlyBlock' : ssAzure + 'azure.virtual_machine_feature',
  720. 'ACWebJobsBlock' : ssAzure + 'mscae.cloud.webjobs',
  721. 'ACWebroleBlock' : ssAzure + 'azure.web_role',
  722. 'ACWebrolesBlock' : ssAzure + 'azure.web_roles',
  723. 'ACWorkaccountBlock' : ssAzure + 'mscae.cloud.work_account',
  724. 'ACWorkerroleBlock' : ssAzure + 'azure.worker_role',
  725. 'ACWorkerrolesBlock' : ssAzure + 'azure.worker_roles',
  726. 'ADNSBlock' : ssAzure + 'mscae.cloud.azure_dns',
  727. // 'AGatewayBlock' NA
  728. 'ACLoadBalancerBlock' : ssAzure + 'mscae.cloud.azure_load_balancer_feature',
  729. 'ACResourceGroupBlock' : ssAzure + 'mscae.cloud.resource_group',
  730. 'ACVPNGatewayBlock' : ssAzure + 'mscae.cloud.vpn_gateway',
  731. //Azure Enterprise
  732. 'AEActiveDirectoryFSPBlock' : ssAzure + 'mscae.enterprise.d',
  733. 'AEADFSBlock' : ssAzure + 'mscae.enterprise.ad_fs',
  734. 'AEAndroidPhoneBlock' : ssAzure + 'mscae.enterprise.android_phone',
  735. 'AEappblankfortextBlock' : ssAzure + 'mscae.enterprise.application_blank',
  736. 'AEAppGenericBlock' : ssAzure + 'mscae.enterprise.app_generic',
  737. 'AEAppserverBlock' : ssAzure + 'mscae.enterprise.application_server',
  738. 'AEBackuplocalBlock' : ssAzure + 'mscae.enterprise.backup_local',
  739. 'AEBackuponlineBlock' : ssAzure + 'mscae.enterprise.backup_online',
  740. 'AECalendarBlock' : ssAzure + 'mscae.general.calendar',
  741. 'AECertificateBlock' : ssAzure + 'azure.certificate',
  742. 'AEClientAppBlock' : ssAzure + 'mscae.enterprise.client_application',
  743. 'AECloudBlock' : ssAzure + 'mscae.enterprise.internet',
  744. 'AEClusterserverBlock' : ssAzure + 'mscae.enterprise.cluster_server',
  745. 'AECodefileBlock' : ssAzure + 'azure.code_file',
  746. 'AEConnectorsBlock' : ssAzure + 'mscae.enterprise.connectors',
  747. 'AEDatabasegenericBlock' : ssAzure + 'mscae.enterprise.database_generic',
  748. 'AEDatabaseserverBlock' : ssAzure + 'mscae.enterprise.database_server',
  749. 'AEDatabasesyncBlock' : ssAzure + 'mscae.enterprise.database_synchronization',
  750. 'AEDeviceBlock' : ssAzure + 'mscae.enterprise.device',
  751. 'AEDirectaccessBlock' : ssAzure + 'mscae.enterprise.direct_access_feature',
  752. 'AEDocumentBlock' : ssAzure + 'mscae.enterprise.document',
  753. 'AEDomaincontrollerBlock' : ssAzure + 'mscae.enterprise.domain_controller',
  754. 'AEEnterpriseBuildingBlock' : ssAzure + 'azure.enterprise',
  755. 'AEFilegeneralBlock' : ssAzure + 'azure.file',
  756. 'AEFilterBlock' : ssAzure + 'mscae.enterprise.filter',
  757. 'AEFirewallBlock' : ssAzure + 'mscae.enterprise.firewall',
  758. 'AEFolderBlock' : ssAzure + 'mscae.enterprise.folder',
  759. 'AEGatewayBlock' : ssAzure + 'mscae.enterprise.gateway',
  760. 'AEGenericcodeBlock' : ssAzure + 'azure.code_file',
  761. 'AEGraphBlock' : ssAzure + 'mscae.general.graph',
  762. 'AEHealthmonitoringBlock' : ssAzure + 'azure.health_monitoring',
  763. 'AEHealthyBlock' : ssAzure + 'azure.healthy',
  764. 'AEImportgenericBlock' : ssAzure + 'mscae.enterprise.import_generic',
  765. 'AEInternetBlock' : ssAzure + 'mscae.enterprise.internet',
  766. 'AEKeyboardBlock' : ssAzure + 'mscae.enterprise.keyboard',
  767. 'AEKeypermissionsBlock' : ssAzure + 'mscae.enterprise.key_permissions',
  768. 'AELaptopcomputerBlock' : ssAzure + 'azure.laptop',
  769. 'AELoadbalancerBlock' : ssAzure + 'azure.load_balancer_generic',
  770. 'AELoadTestingBlock' : ssAzure + 'mscae.enterprise.load_testing',
  771. 'AELockprotectedBlock' : ssAzure + 'mscae.enterprise.lock',
  772. 'AELockunprotectedBlock' : ssAzure + 'mscae.enterprise.lock_unlocked',
  773. 'AEMaintenanceBlock' : ssAzure + 'mscae.enterprise.maintenance',
  774. 'AEManagementconsoleBlock' : ssAzure + 'mscae.enterprise.management_console',
  775. 'AEMessageBlock' : ssAzure + 'azure.message',
  776. 'AEMonitorBlock' : ssAzure + 'azure.computer',
  777. 'AEMonitorrunningappsBlock' : ssAzure + 'mscae.enterprise.monitor_running_apps',
  778. 'AEMouseBlock' : ssAzure + 'mscae.enterprise.mouse',
  779. 'AENetworkcardBlock' : ssAzure + 'mscae.enterprise.network_card',
  780. 'AENotallowedBlock' : ssAzure + 'mscae.general.not_allowed',
  781. 'AEPerformanceBlock' : ssAzure + 'mscae.enterprise.performance',
  782. 'AEPerformancemonitorBlock' : ssAzure + 'mscae.enterprise.performance_monitor',
  783. 'AEPhoneBlock' : ssAzure + 'azure.mobile',
  784. 'AEPlugandplayBlock' : ssAzure + 'mscae.enterprise.plug_and_play',
  785. 'AEPowershellscriptfileBlock' : ssAzure + 'azure.powershell_file',
  786. 'AEProtocolstackBlock' : ssAzure + 'mscae.enterprise.protocol_stack',
  787. 'AEQueuegeneralBlock' : ssAzure + 'azure.queue_generic',
  788. 'AERMSconnectorBlock' : ssAzure + 'mscae.enterprise.rms_connector',
  789. 'AERouterBlock' : ssAzure + 'mscae.enterprise.router',
  790. 'AEScriptfileBlock' : ssAzure + 'azure.script_file',
  791. 'AESecurevirtualmachineBlock' : ssAzure + 'mscae.enterprise.secure_virtual_machine',
  792. 'AEServerbladeBlock' : ssAzure + 'azure.server',
  793. 'AEServerdirectoryBlock' : ssAzure + 'mscae.enterprise.server_directory',
  794. 'AEServerfarmBlock' : ssAzure + 'mscae.enterprise.server_farm',
  795. 'AEServergenericBlock' : ssAzure + 'mscae.enterprise.server_generic',
  796. 'AEServerrackBlock' : ssAzure + 'azure.server_rack',
  797. 'AESettingsBlock' : ssAzure + 'mscae.enterprise.settings',
  798. 'AESharedfolderBlock' : ssAzure + 'mscae.enterprise.shared_folder',
  799. 'AESmartcardBlock' : ssAzure + 'mscae.enterprise.smartcard',
  800. 'AEStorageBlock' : ssAzure + 'mscae.enterprise.storage',
  801. 'AETableBlock' : ssAzure + 'mscae.enterprise.table',
  802. 'AETabletBlock' : ssAzure + 'azure.tablet',
  803. 'AEToolBlock' : ssAzure + 'mscae.enterprise.tool',
  804. 'AETunnelBlock' : ssAzure + 'mscae.general.tunnel',
  805. 'AEUnhealthyBlock' : ssAzure + 'mscae.enterprise.unhealthy',
  806. 'AEUSBBlock' : ssAzure + 'mscae.enterprise.usb',
  807. 'AEUserBlock' : ssAzure + 'azure.user',
  808. 'AEVideoBlock' : ssAzure + 'mscae.general.video',
  809. 'AEVirtualmachineBlock' : ssAzure + 'azure.virtual_machine_feature',
  810. 'AEWebBlock' : ssAzure + 'mscae.enterprise.web',
  811. 'AEWebserverBlock' : ssAzure + 'mscae.enterprise.web_server',
  812. 'AEWindowsserverBlock' : ssAzure + 'mscae.enterprise.windows_server',
  813. 'AEWirelessconnectionBlock' : ssAzure + 'mscae.enterprise.wireless_connection',
  814. 'AEWorkstationclientBlock' : ssAzure + 'mscae.enterprise.workstation_client',
  815. 'AEXMLwebserviceBlock' : ssAzure + 'mscae.enterprise.xml_web_service',
  816. 'AGSAudioBlock' : ssAzure + 'mscae.general.audio',
  817. 'AGSBugBlock' : ssAzure + 'mscae.general.bug',
  818. 'AGSCablesettopTVboxBlock' : ssAzure + 'mscae.general.cable_settop_tv_box',
  819. 'AGSCalendarBlock' : ssAzure + 'mscae.general.calendar',
  820. 'AGSChartBlock' : ssAzure + 'mscae.general.chart',
  821. 'AGSCheckmarkSuccessBlock' : ssAzure + 'mscae.general.checkmark',
  822. 'AGSContinousCycleCircleBlock' : ssAzure + 'mscae.general.continuous_cycle',
  823. 'AGSCrossoutFailureBlock' : ssAzure + 'mscae.general.crossout',
  824. 'AGSCutandpasteBlock' : ssAzure + 'mscae.general.cut_and_paste',
  825. 'AGSFolderBlock' : ssAzure + 'mscae.enterprise.folder',
  826. 'AGSGamecontrollerBlock' : ssAzure + 'mscae.general.game_controller',
  827. 'AGSGearsBlock' : ssAzure + 'mscae.general.gears',
  828. 'AGSGraphBlock' : ssAzure + 'mscae.general.graph',
  829. 'AGSLikeBlock' : ssAzure + 'mscae.general.like',
  830. 'AGSNotallowedBlock' : ssAzure + 'mscae.general.not_allowed',
  831. 'AGSSliderbarhorizontalBlock' : ssAzure + 'mscae.general.slider_bar_horizontal',
  832. 'AGSSliderbarvertBlock' : ssAzure + 'mscae.general.slider_bar_vertical',
  833. 'AGSTasklistorBacklogBlock' : ssAzure + 'mscae.general.task_list',
  834. 'AGSTasksBlock' : ssAzure + 'mscae.general.tasks',
  835. 'AGSTunnelBlock' : ssAzure + 'mscae.general.tunnel',
  836. 'AGSUserBlock' : ssAzure + 'azure.user',
  837. 'AGSVideoBlock' : ssAzure + 'mscae.general.video',
  838. // Azure VMS
  839. 'AVMActiveDirectoryVMBlock' : 'shape=mxgraph.mscae.vm.active_directory;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  840. 'AVMActiveDirectoryVMmultiBlock' : 'shape=mxgraph.mscae.vm.active_directory_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  841. 'AVMAppServerVMBlock' : 'shape=mxgraph.mscae.vm.application_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  842. 'AVMAppServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.application_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  843. 'AVMDatabaseServerVMBlock' : 'shape=mxgraph.mscae.vm.database_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  844. 'AVMDatabaseServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.database_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  845. 'AVMDirectoryServerVMBlock' : 'shape=mxgraph.mscae.vm.directory_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  846. 'AVMDirectoryServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.directory_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  847. 'AVMDomainServerVMBlock' : 'shape=mxgraph.mscae.vm.domain_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  848. 'AVMDomainServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.domain_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  849. 'AVMFileServerVMBlock' : 'shape=mxgraph.mscae.vm.file_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  850. 'AVMFileServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.file_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  851. 'AVMWebServerVMBlock' : 'shape=mxgraph.mscae.vm.web_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  852. 'AVMWebServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.web_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  853. 'AVMWindowsServerVMBlock' : 'shape=mxgraph.mscae.vm.windows_server;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  854. 'AVMWindowsServerVMmultiBlock' : 'shape=mxgraph.mscae.vm.windows_server_multi;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=none',
  855. // Azure 2019
  856. 'AccessReviewAzure2019': azur19 + 'Access_Review.svg',
  857. 'ActiveDirectoryConnectHealthAzure2019': azur19 + 'Active_Directory_Health_Monitoring.svg',
  858. 'ActiveDirectoryAzure2019': azur19 + 'Active_Directory.svg',
  859. 'ActiveDirectoryAzure2019_': azur19 + 'ActiveDirectory.svg',
  860. 'ActiveDirectoryDomainAzure2019': azur19 + 'ActiveDirectoryDomain.svg',
  861. 'AddressSpaceAzure2019': azur19 + 'Address_Space.svg',
  862. 'AddTeamMemberAzure2019': azur19 + 'AddTeamMember.svg',
  863. 'ADFSAzure2019': azur19 + 'ADFS.svg',
  864. 'AdvisorAzure2019': azur19 + 'Advisor.svg',
  865. 'AlienAzure2019': azur19 + 'Alien.svg',
  866. 'AlienSadAzure2019': azur19 + 'AlienSad.svg',
  867. 'AnalysisServicesAzure2019': azur19 + 'Analysis_Services.svg',
  868. 'APIManagementServicesAzure2019': azur19 + 'API_Management.svg',
  869. 'APIAzure2019': azur19 + 'API.svg',
  870. 'APIDefinitionAzure2019': azur19 + 'APIDefinition.svg',
  871. 'AppConfigurationAzure2019': azur19 + 'App_Configuration.svg',
  872. 'AppRegistrationsAzure2019': azur19 + 'App_Registrations.svg',
  873. 'AppServiceAPIAppsAzure2019': azur19 + 'App_Service_API_Apps.svg',
  874. 'AppServiceFrontendAzure2019': azur19 + 'App_Service_Frontend.svg',
  875. 'PublicIPAddressesAzure2019': azur19 + 'App_Service_IPAddress.svg',
  876. 'AzureAppServiceMobileAzure2019': azur19 + 'App_Service_Mobile_App.svg',
  877. 'AppServiceWorkerPoolsAzure2019': azur19 + 'App_Service_Worker_Pools.svg',
  878. 'AppServiceAzure2019': azur19 + 'App_Service.svg',
  879. 'AppServicesAzure2019': azur19 + 'App_Services.svg',
  880. 'AppServiceEnvironmentsAzure2019': azur19 + 'App_Services.svg',
  881. 'ApplicationGatewayAzure2019': azur19 + 'Application_Gateway.svg',
  882. 'ApplicationInsightsAzure2019': azur19 + 'Application_Insights.svg',
  883. 'ApplicationSecurityGroupsAzure2019': azur19 + 'Application_Security_Groups.svg',
  884. 'AppServiceConnectivityAzure2019': azur19 + 'AppServiceConnectivity.svg',
  885. 'AppServiceEnvironmentAzure2019': azur19 + 'AppServiceEnvironment.svg',
  886. 'ArchiveStorageAzure2019': azur19 + 'Archive_Storage.svg',
  887. 'ARMExplorerAzure2019': azur19 + 'ARMExplorer.svg',
  888. 'AuditingAzure2019': azur19 + 'Auditing.svg',
  889. 'AuditingServerAzure2019': azur19 + 'AuditingServer.svg',
  890. 'AutoBackupAzure2019': azur19 + 'AutoBackup.svg',
  891. 'AutomationAccountsAzure2019': azur19 + 'Automation.svg',
  892. 'AvatarAzure2019': azur19 + 'Avatar.svg',
  893. 'AvatarDefaultAzure2019': azur19 + 'AvatarDefault.svg',
  894. 'AvatarUnknownAzure2019': azur19 + 'AvatarUnknown.svg',
  895. 'Azure API for FHIRAzure2019': azur19 + 'Azure API for FHIR.svg',
  896. 'AzureADB2CAzure2019': azur19 + 'Azure_AD_B2C.svg',
  897. 'AzureADDomainServicesAzure2019': azur19 + 'Azure_AD_Domain_Services.svg',
  898. 'AzureADIdentityProtectionAzure2019': azur19 + 'Azure_AD_Identity_Protection.svg',
  899. 'AzureADPrivilegedIdentityManagementAzure2019': azur19 + 'Azure_AD_Privileged_Identity_Management.svg',
  900. 'AzureAPIforFHIRAzure2019': azur19 + 'Azure_API_for_FHIR.svg',
  901. 'AzureArtifactsAzure2019': azur19 + 'Azure_Artifacts.svg',
  902. 'AzureBoardsAzure2019': azur19 + 'Azure_Boards.svg',
  903. 'AzureCacheforRedisAzure2019': azur19 + 'Azure_Cache_for_Redis.svg',
  904. 'AzureDataExplorerClustersAzure2019': azur19 + 'Azure_Data_Explorer_Clusters.svg',
  905. 'AzureDatabaseforMariaDBServersAzure2019': azur19 + 'Azure_Database_for_MariaDB_servers.svg',
  906. 'AzureDatabaseforMySQLServersAzure2019': azur19 + 'Azure_Database_for_MySQL_servers.svg',
  907. 'AzureDatabaseforPostgreSQLServersAzure2019': azur19 + 'Azure_Database_for_PostgreSQL_servers.svg',
  908. 'AzureDatabaseMigrationServicesAzure2019': azur19 + 'Azure_Database_Migration_Services.svg',
  909. 'AzureDevOpsAzure2019': azur19 + 'Azure_DevOps.svg',
  910. 'AzureDigitalTwinsAzure2019': azur19 + 'Azure_Digital_Twins.svg',
  911. 'AzureFirewallAzure2019': azur19 + 'Azure_Firewall.svg',
  912. 'AzureHomeAzure2019': azur19 + 'Azure_Home.svg',
  913. 'AzureIoTHubSecurityAzure2019': azur19 + 'Azure_IoT_Hub_Security.svg',
  914. 'AzureIoTHubAzure2019': azur19 + 'Azure_IoT_Hub.svg',
  915. 'AzureMapsAzure2019': azur19 + 'Azure_Maps.svg',
  916. 'AzureMediaPlayerAzure2019': azur19 + 'Azure_Media_Player.svg',
  917. 'AzureNetAppfilesAzure2019': azur19 + 'Azure_NetApp_files.svg',
  918. 'AzurePipelinesAzure2019': azur19 + 'Azure_Pipelines.svg',
  919. 'AzureReposAzure2019': azur19 + 'Azure_Repos.svg',
  920. 'AzureSentinelAzure2019': azur19 + 'Azure_Sentinel.svg',
  921. 'AzureSphereAzure2019': azur19 + 'Azure_Sphere.svg',
  922. 'AzureTestPlansAzure2019': azur19 + 'Azure_Test_Plans.svg',
  923. 'AzureFXTEdgeFilerAzure2019': azur19 + 'AzureFXTEdgeFiler.svg',
  924. 'BacklogAzure2019': azur19 + 'Backlog.svg',
  925. 'RecoveryServicesVaultsAzure2019': azur19 + 'Backup.svg',
  926. 'BatchAccountsAzure2019': azur19 + 'Batch_Accounts.svg',
  927. 'BatchAIAzure2019': azur19 + 'Batch_AI.svg',
  928. 'BatchTaskAzure2019': azur19 + 'Batch_Task.svg',
  929. 'BatchTaskVMAzure2019': azur19 + 'Batch_TaskVM.svg',
  930. 'BatchAzure2019': azur19 + 'Batch.svg',
  931. 'BillingHubAzure2019': azur19 + 'BillingHub.svg',
  932. 'BizTalkServicesHybridConnectionsAzure2019': azur19 + 'BizTalk_Services_Hybrid_Connections.svg',
  933. 'BizTalkServicesAzure2019': azur19 + 'BizTalk_Services.svg',
  934. 'BlobStorageAzure2019': azur19 + 'BlobBlock.svg',
  935. 'BlobPageAzure2019': azur19 + 'BlobPage.svg',
  936. 'BlockchainAzure2019': azur19 + 'Blockchain.svg',
  937. 'BlogStorageAzure2019': azur19 + 'Blog_Storage.svg',
  938. 'BlueprintsAzure2019': azur19 + 'Blueprints.svg',
  939. 'BookAzure2019': azur19 + 'Book.svg',
  940. 'BotServicesAzure2019': azur19 + 'Bot_Services.svg',
  941. 'BranchAzure2019': azur19 + 'Branch.svg',
  942. 'BrowserAzure2019': azur19 + 'Browser.svg',
  943. 'BugAzure2019': azur19 + 'Bug.svg',
  944. 'BuildingBlocksAzure2019': azur19 + 'Building_Blocks.svg',
  945. 'BuildsAzure2019': azur19 + 'Builds.svg',
  946. 'AzureCacheplusRedisAzure2019': azur19 + 'Cache_including_Redis.svg',
  947. 'AzureCacheRedisAzure2019': azur19 + 'Cache_Redis_Product.svg',
  948. 'CalendarAzure2019': azur19 + 'Calendar.svg',
  949. 'CDNrocketAzure2019': azur19 + 'CDNrocket.svg',
  950. 'CertificateAzure2019': azur19 + 'Certificate.svg',
  951. 'AppServiceCertificatesAzure2019': azur19 + 'Certificate.svg',
  952. 'MetricsAzure2019': azur19 + 'Chart.svg',
  953. 'CheckAzure2019': azur19 + 'Check.svg',
  954. 'CitrixVirtualDesktopsEssentialsAzure2019': azur19 + 'Citrix_Virtual_Desktops_Essentials.svg',
  955. 'ReservedIPAddressesClassicAzure2019': azur19 + 'ClassicIPAddress.svg',
  956. 'ClassicStorageAzure2019': azur19 + 'ClassicStorage.svg',
  957. 'ClientAppsAzure2019': azur19 + 'Client_Apps.svg',
  958. 'RecentAzure2019': azur19 + 'Clock.svg',
  959. 'CycleCloudAzure2019': azur19 + 'Cloud_Cycle.svg',
  960. 'CloudServicesAzure2019': azur19 + 'Cloud_Service.svg',
  961. 'CloudServicesClassicAzure2019': azur19 + 'Cloud_Services_Classic.svg',
  962. 'CloudSimpleNodesAzure2019': azur19 + 'CloudSimple_Nodes.svg',
  963. 'CloudSimpleServicesAzure2019': azur19 + 'CloudSimple_Services.svg',
  964. 'CloudSimpleVirtualMachinesAzure2019': azur19 + 'CloudSimple_Virtual_Machines.svg',
  965. 'CodeAzure2019': azur19 + 'Code.svg',
  966. 'CognitiveServicesComputerVisionAzure2019': azur19 + 'Cognitive_Services_Computer_Vision.svg',
  967. 'CognitiveServicesemotionAzure2019': azur19 + 'Cognitive_Services_emotion.svg',
  968. 'CognitiveServicesfaceAzure2019': azur19 + 'Cognitive_Services_face.svg',
  969. 'CognitiveServicesluisAzure2019': azur19 + 'Cognitive_Services_luis.svg',
  970. 'CognitiveServicesrecommendationsAzure2019': azur19 + 'Cognitive_Services_recommendations.svg',
  971. 'CognitiveServicesSpeechAzure2019': azur19 + 'Cognitive_Services_Speech.svg',
  972. 'CognitiveServicestextanalyticsAzure2019': azur19 + 'Cognitive_Services_textanalytics.svg',
  973. 'CognitiveServicesweblanguagemodelAzure2019': azur19 + 'Cognitive_Services_web_language_model.svg',
  974. 'CognitiveServicesAzure2019': azur19 + 'Cognitive_Services.svg',
  975. 'CommitsAzure2019': azur19 + 'Commits.svg',
  976. 'ConnectionAzure2019': azur19 + 'Connection.svg',
  977. 'ConnectionsAzure2019': azur19 + 'Connections.svg',
  978. 'ContactInfoAzure2019': azur19 + 'ContactInfo.svg',
  979. 'ContainerInstancesAzure2019': azur19 + 'Container_Instances.svg',
  980. 'ContainerRegistriesAzure2019': azur19 + 'Container_Registries.svg',
  981. 'ContainerServiceAzure2019': azur19 + 'Container_Service.svg',
  982. 'CDNProfilesAzure2019': azur19 + 'Content_Delivery_Network.svg',
  983. 'ContentProtectionAzure2019': azur19 + 'Content_Protection.svg',
  984. 'ContentManagementSystemAzure2019': azur19 + 'ContentManagementSystem.svg',
  985. 'ContinuousExportAzure2019': azur19 + 'ContinuousExport.svg',
  986. 'ControllersAzure2019': azur19 + 'Controllers.svg',
  987. 'ControlsAzure2019': azur19 + 'Controls.svg',
  988. 'ControlsHorizontalAzure2019': azur19 + 'ControlsHorizontal.svg',
  989. 'AzureCosmosDBAzure2019': azur19 + 'CosmosDB.svg',
  990. 'CounterAzure2019': azur19 + 'Counter.svg',
  991. 'CubesAzure2019': azur19 + 'Cubes.svg',
  992. 'CustomDomainAzure2019': azur19 + 'CustomDomain.svg',
  993. 'AppServiceDomainsAzure2019': azur19 + 'CustomDomain.svg',
  994. 'CustomerLockboxAzure2019': azur19 + 'Customer_Lockbox.svg',
  995. 'CustomerInsightsAzure2019': azur19 + 'CustomerInsights.svg',
  996. 'DataBoxEdgeDataBoxGatewayAzure2019': azur19 + 'Data_Box_Edge_Data_Box_Gateway.svg',
  997. 'DataBoxAzure2019': azur19 + 'Data_Box.svg',
  998. 'ImportExportJobsAzure2019': azur19 + 'Data_Box.svg',
  999. 'AzureDataCatalogAzure2019': azur19 + 'Data_Catalog.svg',
  1000. 'DataFactoriesAzure2019': azur19 + 'Data_Factory.svg',
  1001. 'DataLakeAnalyticsAzure2019': azur19 + 'Data_Lake_Analytics.svg',
  1002. 'DataLakeStorageAzure2019': azur19 + 'Data_Lake_Storage.svg',
  1003. 'DataLakeStoreGen1Azure2019': azur19 + 'Data_Lake_Store.svg',
  1004. 'DataLakeAzure2019': azur19 + 'Data_Lake.svg',
  1005. 'DataWarehouseAzure2019': azur19 + 'Data_Warehouse.svg',
  1006. 'AzureDatabaseGenericAzure2019': azur19 + 'Database_General.svg',
  1007. 'DatabaseRestoreAzure2019': azur19 + 'DatabaseRestore.svg',
  1008. 'AzureDatabricksAzure2019': azur19 + 'Databricks.svg',
  1009. 'dataExportAzure2019': azur19 + 'dataExport.svg',
  1010. 'dataRetentionAzure2019': azur19 + 'dataRetention.svg',
  1011. 'DataServicescategoryrollupAzure2019': azur19 + 'DataServices_category_rollup.svg',
  1012. 'DCOSAzure2019': azur19 + 'DC_OS.svg',
  1013. 'DDOSProtectionPlansAzure2019': azur19 + 'DDOS_Protection_Plans.svg',
  1014. 'DedicatedEventHubAzure2019': azur19 + 'Dedicated_Event_Hub.svg',
  1015. 'DevConsoleAzure2019': azur19 + 'DevConsole.svg',
  1016. 'DeveloperToolsAzure2019': azur19 + 'Developer_Tools.svg',
  1017. 'DeviceComplianceAzure2019': azur19 + 'Device_Compliance.svg',
  1018. 'DeviceConfigAzure2019': azur19 + 'Device_Config.svg',
  1019. 'DeviceProvisioningServicesAzure2019': azur19 + 'Device_Provisioning_Services.svg',
  1020. 'DevicesGroupsAzure2019': azur19 + 'Devices_Groups.svg',
  1021. 'AzureDevTestLabsAzure2019': azur19 + 'DevTest_Labs.svg',
  1022. 'DirectorySyncAzure2019': azur19 + 'DirectorySync.svg',
  1023. 'DiscardAzure2019': azur19 + 'Discard.svg',
  1024. 'DisksAzure2019': azur19 + 'Discs.svg',
  1025. 'DNSPrivateZonesAzure2019': azur19 + 'DNS_Private_Zones.svg',
  1026. 'DNSZonesAzure2019': azur19 + 'DNS.svg',
  1027. 'DockerAzure2019': azur19 + 'Docker.svg',
  1028. 'DocumentDBAzure2019': azur19 + 'DocumentDB.svg',
  1029. 'DownloadAzure2019': azur19 + 'Download.svg',
  1030. 'EBooksAzure2019': azur19 + 'eBooks.svg',
  1031. 'EducationAzure2019': azur19 + 'Education.svg',
  1032. 'ElasticDatabasePoolsAzure2019': azur19 + 'Elastic_Database_Pools.svg',
  1033. 'ElasticJobAgentsAzure2019': azur19 + 'Elastic_Job_Agents.svg',
  1034. 'EnrollmentAzure2019': azur19 + 'Enrollment.svg',
  1035. 'EnterpriseApplicationsAzure2019': azur19 + 'Enterprise_Applications.svg',
  1036. 'EventGridTopicsAzure2019': azur19 + 'Event_Grid_Topics.svg',
  1037. 'EventGridDomainsAzure2019': azur19 + 'Event_Grid.svg',
  1038. 'EventGridSubscriptionsAzure2019': azur19 + 'Event_Grid.svg',
  1039. 'EventHubClustersAzure2019': azur19 + 'Event_Hub_Clusters.svg',
  1040. 'EventHubsAzure2019': azur19 + 'Event_Hubs.svg',
  1041. 'EventLogAzure2019': azur19 + 'EventLog.svg',
  1042. 'ExchangeOnPremisesAccessAzure2019': azur19 + 'Exchange_On_premises_Access.svg',
  1043. 'ExpressRouteCircuitsAzure2019': azur19 + 'Express_Route.svg',
  1044. 'ExtensionsAzure2019': azur19 + 'Extensions.svg',
  1045. 'FavoriteAzure2019': azur19 + 'Favorite.svg',
  1046. 'FileAzure2019': azur19 + 'File.svg',
  1047. 'FilesAzure2019': azur19 + 'Files.svg',
  1048. 'FolderAzure2019': azur19 + 'Folder.svg',
  1049. 'FolderBlankAzure2019': azur19 + 'FolderBlank.svg',
  1050. 'FolderCubeAzure2019': azur19 + 'FolderCube.svg',
  1051. 'FolderWebsiteAzure2019': azur19 + 'FolderWebsite.svg',
  1052. 'ForPlacementOnlyAzure2019': azur19 + 'ForPlacementOnly.svg',
  1053. 'FreeServicesAzure2019': azur19 + 'Free_Services.svg',
  1054. 'FrontDoorsAzure2019': azur19 + 'Front_Doors.svg',
  1055. 'FtpAzure2019': azur19 + 'Ftp.svg',
  1056. 'FunctionAppsAzure2019': azur19 + 'Functions.svg',
  1057. 'GalleryManagementAzure2019': azur19 + 'GalleryManagement.svg',
  1058. 'GatewayAzure2019': azur19 + 'Gateway.svg',
  1059. 'Gear2Azure2019': azur19 + 'Gear_2.svg',
  1060. 'GearAzure2019': azur19 + 'Gear.svg',
  1061. 'GearAlternate2Azure2019': azur19 + 'GearAlternate_2.svg',
  1062. 'GearAlternateAzure2019': azur19 + 'GearAlternate.svg',
  1063. 'GeneralStorageAzure2019': azur19 + 'General_Storage.svg',
  1064. 'GenomicsAccountsAzure2019': azur19 + 'Genomics_Accounts.svg',
  1065. 'GeoReplicationPremiumAzure2019': azur19 + 'GeoReplicationPremium.svg',
  1066. 'GeoReplicationStandardAzure2019': azur19 + 'GeoReplicationStandard.svg',
  1067. 'GetMoreLicenseAzure2019': azur19 + 'GetMoreLicense.svg',
  1068. 'GetStartedAzure2019': azur19 + 'GetStarted.svg',
  1069. 'GiftAzure2019': azur19 + 'Gift.svg',
  1070. 'GlobeAzure2019': azur19 + 'Globe.svg',
  1071. 'GlobeErrorAzure2019': azur19 + 'GlobeError.svg',
  1072. 'GlobeSuccessAzure2019': azur19 + 'GlobeSuccess.svg',
  1073. 'GlobeWarningAzure2019': azur19 + 'GlobeWarning.svg',
  1074. 'GoAzure2019': azur19 + 'Go.svg',
  1075. 'GreatScottAzure2019': azur19 + 'GreatScott.svg',
  1076. 'GridAzure2019': azur19 + 'Grid.svg',
  1077. 'AllResourcesAzure2019': azur19 + 'Grid3x3.svg',
  1078. 'GuestAssignmentsAzure2019': azur19 + 'Guest_Assignments.svg',
  1079. 'Guide2Azure2019': azur19 + 'Guide_2.svg',
  1080. 'GuideAzure2019': azur19 + 'Guide.svg',
  1081. 'HammerAzure2019': azur19 + 'Hammer.svg',
  1082. 'HDInsightAzure2019': azur19 + 'HDInsight.svg',
  1083. 'HDInsightClustersAzure2019': azur19 + 'HDInsightClusters.svg',
  1084. 'HealthErrorBadgeAzure2019': azur19 + 'HealthErrorBadge.svg',
  1085. 'HealthWarningBadgeAzure2019': azur19 + 'HealthWarningBadge.svg',
  1086. 'HeartAzure2019': azur19 + 'Heart.svg',
  1087. 'HeartPulseAzure2019': azur19 + 'HeartPulse.svg',
  1088. 'HomeAzure2019': azur19 + 'Home.svg',
  1089. 'HybridConnectionEndpointAzure2019': azur19 + 'HybridConnectionEndpoint.svg',
  1090. 'IdentityGovernanceAzure2019': azur19 + 'Identity_Governance.svg',
  1091. 'ImageDefinitionsAzure2019': azur19 + 'Image_Definitions.svg',
  1092. 'ImageVersionsAzure2019': azur19 + 'Image_Versions.svg',
  1093. 'ImageAzure2019': azur19 + 'Image.svg',
  1094. 'InboundNATAzure2019': azur19 + 'InboundNAT.svg',
  1095. 'InboundRuleAzure2019': azur19 + 'InboundRule.svg',
  1096. 'InformationAzure2019': azur19 + 'Info_2.svg',
  1097. 'WhatsNewAzure2019': azur19 + 'Info.svg',
  1098. 'AzureTimeSeriesInsightsEventsSourcesAzure2019': azur19 + 'Input.svg',
  1099. 'InputOutputAzure2019': azur19 + 'InputOutput.svg',
  1100. 'InstallVisualStudioAzure2019': azur19 + 'InstallVisualStudio.svg',
  1101. 'IntegrationAccountsAzure2019': azur19 + 'Integration_Accounts.svg',
  1102. 'IntegrationServiceEnvironmentsAzure2019': azur19 + 'Integration_Service_Environments.svg',
  1103. 'IntuneAppProtectionAzure2019': azur19 + 'Intune_App_Protection.svg',
  1104. 'IntuneAzure2019': azur19 + 'Intune_App_Protection.svg',
  1105. 'IOTedgeAzure2019': azur19 + 'IOT_edge.svg',
  1106. 'JobAzure2019': azur19 + 'Job.svg',
  1107. 'JourneyHubAzure2019': azur19 + 'JourneyHub.svg',
  1108. 'KeyVaultsAzure2019': azur19 + 'Key_Vaults.svg',
  1109. 'SubscriptionsAzure2019': azur19 + 'Key.svg',
  1110. 'KeyboardShortcutsAzure2019': azur19 + 'KeyboardShortcuts.svg',
  1111. 'KeyVaultAzure2019': azur19 + 'KeyVault.svg',
  1112. 'KubernetesServicesAzure2019': azur19 + 'Kubernetes_Services.svg',
  1113. 'KubernetesAzure2019': azur19 + 'Kubernetes.svg',
  1114. 'KuduKnifeAzure2019': azur19 + 'KuduKnife.svg',
  1115. 'LaunchPortalAzure2019': azur19 + 'LaunchPortal.svg',
  1116. 'LoadBalancersAzure2019': azur19 + 'Load_Balancer_feature.svg',
  1117. 'LoadTestAzure2019': azur19 + 'LoadTest.svg',
  1118. 'LocalNetworkGatewaysAzure2019': azur19 + 'Local_Network_Gateways.svg',
  1119. 'LocalNetworkAzure2019': azur19 + 'LocalNetwork.svg',
  1120. 'LocationAzure2019': azur19 + 'Location.svg',
  1121. 'LogAnalyticsWorkspacesAzure2019': azur19 + 'Log_Analytics_Workspaces.svg',
  1122. 'ActivityLogAzure2019': azur19 + 'Log.svg',
  1123. 'DiagnosticSettingsAzure2019': azur19 + 'LogDiagnostics.svg',
  1124. 'LogicAppsCustomConnectorAzure2019': azur19 + 'Logic_Apps_Custom_Connector.svg',
  1125. 'LogicAppsAzure2019': azur19 + 'Logic_Apps.svg',
  1126. 'LogStreamingAzure2019': azur19 + 'LogStreaming.svg',
  1127. 'MachineLearningServiceWorkspacesAzure2019': azur19 + 'Machine_Learning_Service_Workspaces.svg',
  1128. 'MachineLearningStudioWebServicePlansAzure2019': azur19 + 'Machine_Learning_Studio_Web_Service_Plans.svg',
  1129. 'MachineLearningStudioWebServicesAzure2019': azur19 + 'Machine_Learning_Studio_Web_Services.svg',
  1130. 'MachineLearningStudioWorkspacesAzure2019': azur19 + 'Machine_Learning_Studio_Workspaces.svg',
  1131. 'MachineLearningAzure2019': azur19 + 'Machine_Learning.svg',
  1132. 'MachineLearningServicePlansAzure2019': azur19 + 'MachineLearningServicePlans.svg',
  1133. 'MachineLearningWebServicesAzure2019': azur19 + 'MachineLearningWebServices.svg',
  1134. 'MachineLearningWorkspacesAzure2019': azur19 + 'MachineLearningWorkspaces.svg',
  1135. 'ManagedApplicationsAzure2019': azur19 + 'Managed_Applications.svg',
  1136. 'ManagedDatabasesAzure2019': azur19 + 'Managed_Databases.svg',
  1137. 'ManagedDesktopAzure2019': azur19 + 'Managed_Desktop.svg',
  1138. 'ManagedIdentitiesAzure2019': azur19 + 'Managed_Identities.svg',
  1139. 'ManagedApplicationsAzure2019_': azur19 + 'ManagedApplications.svg',
  1140. 'ManagementGroupsAzure2019': azur19 + 'Management_Groups.svg',
  1141. 'ManagementPortalAzure2019': azur19 + 'Management_Portal.svg',
  1142. 'ManagePortalAzure2019': azur19 + 'ManagePortal.svg',
  1143. 'DiskSnapshotsAzure2019': azur19 + 'MD_snapshot.svg',
  1144. 'MediaEncodingAzure2019': azur19 + 'Media_Encoding.svg',
  1145. 'MediaOnDemandAzure2019': azur19 + 'Media_On_Demand.svg',
  1146. 'MediaServicesAzure2019': azur19 + 'Media_Services.svg',
  1147. 'AzureMediaServicesAzure2019': azur19 + 'Media_Services.svg',
  1148. 'MediaFileAzure2019': azur19 + 'MediaFile.svg',
  1149. 'MigrationProjectsAzure2019': azur19 + 'Migration_Projects.svg',
  1150. 'AzureMobileEngagementAzure2019': azur19 + 'Mobile_Engagement.svg',
  1151. 'ModuleAzure2019': azur19 + 'Module.svg',
  1152. 'MonitorAzure2019': azur19 + 'Monitor.svg',
  1153. 'MonitoringAzure2019': azur19 + 'Monitoring.svg',
  1154. 'MultiFactorAuthenticationAzure2019': azur19 + 'Multi_Factor_Authentication.svg',
  1155. 'MySQLClearDBdatabaseAzure2019': azur19 + 'MySQL_ClearDB_database.svg',
  1156. 'NetworkSecurityGroupsClassicAzure2019': azur19 + 'Network_Security_Groups_Classic.svg',
  1157. 'NetworkWatcherAzure2019': azur19 + 'Network_watcher.svg',
  1158. 'NetworkInterfacesAzure2019': azur19 + 'NetworkInterfaceCard.svg',
  1159. 'NewAzure2019': azur19 + 'New.svg',
  1160. 'NextBillAzure2019': azur19 + 'NextBill.svg',
  1161. 'NonAzureMachineAzure2019': azur19 + 'Non_Azure_Machine.svg',
  1162. 'NotificationHubsAzure2019': azur19 + 'Notification_Hubs.svg',
  1163. 'NotificationHubNamespacesAzure2019': azur19 + 'Notification_Hubs.svg',
  1164. 'AlertsAzure2019': azur19 + 'Notification.svg',
  1165. 'NSGAzure2019': azur19 + 'NSG.svg',
  1166. 'OfferAzure2019': azur19 + 'Offer.svg',
  1167. 'OnPremisesDataGatewaysAzure2019': azur19 + 'On_Premises_Data_Gateways.svg',
  1168. 'OnPremiseSetupAzure2019': azur19 + 'OnPremiseSetup.svg',
  1169. 'AzureOpenShiftAzure2019': azur19 + 'OpenShift.svg',
  1170. 'OperationsManagementSuiteAzure2019': azur19 + 'Operations_Management_Suite.svg',
  1171. 'OSImagesClassicAzure2019': azur19 + 'OS_Images_Classic.svg',
  1172. 'OutboundNATAzure2019': azur19 + 'OutboundNAT.svg',
  1173. 'OutboundRuleAzure2019': azur19 + 'OutboundRule.svg',
  1174. 'OutputAzure2019': azur19 + 'Output.svg',
  1175. 'overageCostsAzure2019': azur19 + 'overageCosts.svg',
  1176. 'PausedAzure2019': azur19 + 'Paused.svg',
  1177. 'PeeringsAzure2019': azur19 + 'Peerings.svg',
  1178. 'PendingAzure2019': azur19 + 'Pending.svg',
  1179. 'UserIconAzure2019': azur19 + 'Person.svg',
  1180. 'PersonWithFriendAzure2019': azur19 + 'PersonWithFriend.svg',
  1181. 'PhoneAzure2019': azur19 + 'Phone.svg',
  1182. 'PluralsightAzure2019': azur19 + 'PluralSight_mono.svg',
  1183. 'PolicyAzure2019': azur19 + 'Policy.svg',
  1184. 'PortalCurrentAzure2019': azur19 + 'PortalCurrent.svg',
  1185. 'PostponeAzure2019': azur19 + 'Postpone.svg',
  1186. 'PowerAzure2019': azur19 + 'Power.svg',
  1187. 'PowershellAzure2019': azur19 + 'Powershell.svg',
  1188. 'PowerUp2Azure2019': azur19 + 'PowerUp_2.svg',
  1189. 'PowerUpAzure2019': azur19 + 'PowerUp.svg',
  1190. 'PreviewRightAzure2019': azur19 + 'PreviewRight.svg',
  1191. 'ProbeAzure2019': azur19 + 'Probe.svg',
  1192. 'ProcessExplorerAzure2019': azur19 + 'ProcessExplorer.svg',
  1193. 'ProductionReadyDBAzure2019': azur19 + 'ProductionReadyDB.svg',
  1194. 'PublishAzure2019': azur19 + 'Publish.svg',
  1195. 'PullRequestAzure2019': azur19 + 'PullRequest.svg',
  1196. 'QSDiagnosticsAzure2019': azur19 + 'QSDiagnostics.svg',
  1197. 'QSFileAzure2019': azur19 + 'QSFile.svg',
  1198. 'QSMailAzure2019': azur19 + 'QSMail.svg',
  1199. 'QSWarningAzure2019': azur19 + 'QSWarning.svg',
  1200. 'QueuedAzure2019': azur19 + 'Queued.svg',
  1201. 'QueuesStorageAzure2019': azur19 + 'Queues_Storage.svg',
  1202. 'QuickStartCenterAzure2019': azur19 + 'Quick_Start_Center.svg',
  1203. 'QuickstartAzure2019': azur19 + 'Quickstart.svg',
  1204. 'QuotaAzure2019': azur19 + 'Quota.svg',
  1205. 'RainAzure2019': azur19 + 'Rain.svg',
  1206. 'RDMAAzure2019': azur19 + 'RDMA.svg',
  1207. 'RecommendationAzure2019': azur19 + 'Recommendation.svg',
  1208. 'RemoteAppAzure2019': azur19 + 'RemoteApp.svg',
  1209. 'ReservationsAzure2019': azur19 + 'Reservations.svg',
  1210. 'ResourceExplorerAzure2019': azur19 + 'Resource_Explorer.svg',
  1211. 'ResourceGraphExplorerAzure2019': azur19 + 'Resource_Graph_Explorer.svg',
  1212. 'ResourceGroupsAzure2019': azur19 + 'Resource_Groups.svg',
  1213. 'ResourceDefaultAzure2019': azur19 + 'ResourceDefault.svg',
  1214. 'ResourceGroupAzure2019': azur19 + 'ResourceGroup.svg',
  1215. 'ResourceLinkedAzure2019': azur19 + 'ResourceLinked.svg',
  1216. 'ResourceProviderAzure2019': azur19 + 'ResourceProvider.svg',
  1217. 'ResourceRoleAzure2019': azur19 + 'ResourceRole.svg',
  1218. 'RouteFiltersAzure2019': azur19 + 'Route_Filter.svg',
  1219. 'RuleAzure2019': azur19 + 'Rule.svg',
  1220. 'RunbooksAzure2019': azur19 + 'Runbooks.svg',
  1221. 'RunbookSourceAzure2019': azur19 + 'RunbookSource.svg',
  1222. 'SAPHANAonAzureAzure2019': azur19 + 'SAP_HANA_on_Azure.svg',
  1223. 'ScaleAzure2019': azur19 + 'Scale.svg',
  1224. 'ScaleAltAzure2019': azur19 + 'ScaleAlt.svg',
  1225. 'SchedulerJobAzure2019': azur19 + 'SchedulerJob.svg',
  1226. 'SchedulerJobCollectionsAzure2019': azur19 + 'SchedulerJobCollection.svg',
  1227. 'SDKAzure2019': azur19 + 'SDK.svg',
  1228. 'SearchAzure2019': azur19 + 'Search.svg',
  1229. 'AzureSearchAzure2019': azur19 + 'Search.svg',
  1230. 'SearchGridAzure2019': azur19 + 'SearchGrid.svg',
  1231. 'SecurityBaselinesAzure2019': azur19 + 'Security_Baselines.svg',
  1232. 'ConditionalAccessAzure2019': azur19 + 'Security_Center.svg',
  1233. 'SecurityCenterAzure2019': azur19 + 'Security_Center.svg',
  1234. 'SendGridAccountsAzure2019': azur19 + 'SendGrid_Accounts.svg',
  1235. 'ServerAzure2019': azur19 + 'Server.svg',
  1236. 'ServerFarmAzure2019': azur19 + 'ServerFarm.svg',
  1237. 'ServerProxyAzure2019': azur19 + 'ServerProxy.svg',
  1238. 'serversAndMobileDevicesAzure2019': azur19 + 'serversAndMobileDevices.svg',
  1239. 'ServiceBusQueuesAzure2019': azur19 + 'Service_Bus_Queues.svg',
  1240. 'AzureServiceBusRelaysAzure2019': azur19 + 'Service_Bus_Relay.svg',
  1241. 'ServiceBusTopicsAzure2019': azur19 + 'Service_Bus_Topics.svg',
  1242. 'AzureServiceBusAzure2019': azur19 + 'Service_Bus.svg',
  1243. 'ServiceCatalogManagedApplicationDefinitionsAzure2019': azur19 + 'Service_Catalog_Managed_Application_Definitions.svg',
  1244. 'ServiceEndpointPoliciesAzure2019': azur19 + 'Service_Endpoint_Policies.svg',
  1245. 'ServiceFabricClustersAzure2019': azur19 + 'Service_Fabric.svg',
  1246. 'ServiceHealthAzure2019': azur19 + 'ServiceHealth.svg',
  1247. 'SharedDashboardAzure2019': azur19 + 'Shared_Dashboard.svg',
  1248. 'SharedImageGalleriesAzure2019': azur19 + 'Shared_Image_Galleries.svg',
  1249. 'ShieldFirewallAzure2019': azur19 + 'ShieldFirewall.svg',
  1250. 'SignalRAzure2019': azur19 + 'SignalR.svg',
  1251. 'SiteRecoveryAzure2019': azur19 + 'Site_Recovery.svg',
  1252. 'SoftwareasaServiceSaaSAzure2019': azur19 + 'Software_as_a_Service.svg',
  1253. 'SoftwareUpdateAzure2019': azur19 + 'Software_Update.svg',
  1254. 'SolutionsAzure2019': azur19 + 'Solutions.svg',
  1255. 'SpatialAnchorAzure2019': azur19 + 'Spatial_Anchor.svg',
  1256. 'SQLDatabasesAzure2019': azur19 + 'SQL_Database_generic.svg',
  1257. 'AzureSQLDataWarehouseAzure2019': azur19 + 'SQL_DataWarehouse.svg',
  1258. 'SQLManagedInstancesAzure2019': azur19 + 'SQL_Managed_Instances.svg',
  1259. 'SQLServersAzure2019': azur19 + 'SQL_Servers.svg',
  1260. 'SQLStretchDatabaseAzure2019': azur19 + 'SQL_Stretch_Database.svg',
  1261. 'SQLServerStretchDatabasesAzure2019': azur19 + 'dep/SQL_Server_Stretch_DB.svg',
  1262. 'SQLQueryPerformanceCheckAzure2019': azur19 + 'SQLQueryPerformanceCheck.svg',
  1263. 'SSDAzure2019': azur19 + 'SSD.svg',
  1264. 'StackOverflowAzure2019': azur19 + 'StackOverflow.svg',
  1265. 'StorageAccountsAzure2019': azur19 + 'Storage_Accounts.svg',
  1266. 'StorageExplorerAzure2019': azur19 + 'Storage_Explorer.svg',
  1267. 'StorageSyncServicesAzure2019': azur19 + 'Storage_sync_service.svg',
  1268. 'StorageAzure2019': azur19 + 'Storage.svg',
  1269. 'StorageAzureFilesAzure2019': azur19 + 'StorageAzureFiles.svg',
  1270. 'StorageContainerAzure2019': azur19 + 'StorageContainer.svg',
  1271. 'StorageQueueAzure2019': azur19 + 'StorageQueue.svg',
  1272. 'StorageReplicaAzure2019': azur19 + 'StorageReplica.svg',
  1273. 'MarketplaceAzure2019': azur19 + 'Store_Marketplace.svg',
  1274. 'StorSimpleDataManagersAzure2019': azur19 + 'StorSimple_Data_Managers.svg',
  1275. 'AzureStorSimpleDeviceManagersAzure2019': azur19 + 'StorSimple.svg',
  1276. 'StorSimpleDeviceManagersAzure2019': azur19 + 'StorSimple.svg',
  1277. 'StreamAnalyticsJobsAzure2019': azur19 + 'Stream_Analytics.svg',
  1278. 'SubnetAzure2019': azur19 + 'Subnet.svg',
  1279. 'HelpSupportAzure2019': azur19 + 'Support_2.svg',
  1280. 'SupportRequestsAzure2019': azur19 + 'Support_Requests.svg',
  1281. 'SupportAzure2019': azur19 + 'Support.svg',
  1282. 'TableStorageAzure2019': azur19 + 'Table_Storage.svg',
  1283. 'TagAzure2019': azur19 + 'Tag.svg',
  1284. 'TagsAzure2019': azur19 + 'Tags.svg',
  1285. 'TaskAzure2019': azur19 + 'Task.svg',
  1286. 'TasksAzure2019': azur19 + 'Tasks.svg',
  1287. 'TasksPolychromaticAzure2019': azur19 + 'TasksPolychromatic.svg',
  1288. 'TaskVMAzure2019': azur19 + 'TaskVM.svg',
  1289. 'TaxAzure2019': azur19 + 'Tax.svg',
  1290. 'TeamProjectAzure2019': azur19 + 'TeamProject.svg',
  1291. 'TemplatesAzure2019': azur19 + 'Templates.svg',
  1292. 'TenantStatusAzure2019': azur19 + 'Tenant_Status.svg',
  1293. 'TFSVCRepositoryAzure2019': azur19 + 'TFSVCRepository.svg',
  1294. 'AzureTimeSeriesInsightsEnvironmentsAzure2019': azur19 + 'Time_Series_Insights_environments.svg',
  1295. 'TimeSeriesInsightsAzure2019': azur19 + 'TimeSeriesInsights.svg',
  1296. 'ToolboxAzure2019': azur19 + 'Toolbox.svg',
  1297. 'ToolsAzure2019': azur19 + 'Tools.svg',
  1298. 'TrafficManagerProfilesAzure2019': azur19 + 'Traffic_Manager.svg',
  1299. 'TrafficManagerDisabledAzure2019': azur19 + 'TrafficManagerDisabled.svg',
  1300. 'TrafficManagerEnabledAzure2019': azur19 + 'TrafficManagerEnabled.svg',
  1301. 'TwoUserIconAzure2019': azur19 + 'Two_User_Icon.svg',
  1302. 'UnidentifiedFeatureObjectAzure2019': azur19 + 'Unidentified_Feature_Object.svg',
  1303. 'UserHealthIconAzure2019': azur19 + 'User_Health_Icon.svg',
  1304. 'UserPrivacyAzure2019': azur19 + 'User_Privacy.svg',
  1305. 'UserResourceAzure2019': azur19 + 'User_Resource.svg',
  1306. 'RouteTablesAzure2019': azur19 + 'UserDefinedRoute.svg',
  1307. 'VariablesAzure2019': azur19 + 'Variables.svg',
  1308. 'VersionsAzure2019': azur19 + 'Versions.svg',
  1309. 'VirtualClustersAzure2019': azur19 + 'Virtual_Clusters.svg',
  1310. 'VirtualDatacenterAzure2019': azur19 + 'Virtual_Datacenter.svg',
  1311. 'VMClassicAzure2019': azur19 + 'Virtual_Machine_2.svg',
  1312. 'VMAzure2019': azur19 + 'Virtual_Machine.svg',
  1313. 'AvailabilitySetsAzure2019': azur19 + 'Virtual_Machines_Availability_Set.svg',
  1314. 'VirtualMachinesLinuxAzure2019': azur19 + 'Virtual_Machines_Linux.svg',
  1315. 'VirtualNetworkClassicAzure2019': azur19 + 'Virtual_Network_Classic.svg',
  1316. 'VirtualNetworksAzure2019': azur19 + 'Virtual_Network.svg',
  1317. 'VirtualWANsAzure2019': azur19 + 'Virtual_WANs.svg',
  1318. 'VirtualMachineLinuxAzure2019': azur19 + 'VirtualMachineLinux.svg',
  1319. 'VMWindowsAzure2019': azur19 + 'VirtualMachineWindows.svg',
  1320. 'VisualStudioTeamServicesCodePlexsourceAzure2019': azur19 + 'Visual_Studio_Team_Services_CodePlex_source.svg',
  1321. 'VMImagesAzure2019': azur19 + 'VM_Images.svg',
  1322. 'VMLinuxNonAzureAzure2019': azur19 + 'VM_Linux_Non_Azure.svg',
  1323. 'VMLinuxAzure2019': azur19 + 'VM_Linux.svg',
  1324. 'VMScaleSetsAzure2019': azur19 + 'VM_Scale_Set.svg',
  1325. 'VMWindowsNonAzureAzure2019': azur19 + 'VM_Windows_Non_Azure.svg',
  1326. 'VMScaleAzure2019': azur19 + 'VMScale.svg',
  1327. 'VirtualNetworkGatewaysAzure2019': azur19 + 'VPN_Gateway.svg',
  1328. 'VPNPointToSiteAzure2019': azur19 + 'VPNPointToSite.svg',
  1329. 'VPNSiteToSiteAzure2019': azur19 + 'VPNSiteToSite.svg',
  1330. 'WebAppFirewallAzure2019': azur19 + 'Web_App_Firewall.svg',
  1331. 'WebAppWebJobsAzure2019': azur19 + 'WebApp_WebJobs.svg',
  1332. 'UmbracoAzure2019': azur19 + 'WebAppUmbraco.svg',
  1333. 'WordPressAzure2019': azur19 + 'WebAppWordPress.svg',
  1334. 'WebEnvironmentAzure2019': azur19 + 'WebEnvironment.svg',
  1335. 'WebhooksAzure2019': azur19 + 'Webhooks.svg',
  1336. 'WebHostingAzure2019': azur19 + 'WebHosting.svg',
  1337. 'AppServicePlansAzure2019': azur19 + 'WebHosting.svg',
  1338. 'WebNetworkAzure2019': azur19 + 'WebNetwork.svg',
  1339. 'WebsitePowerAzure2019': azur19 + 'WebsitePower.svg',
  1340. 'WebsiteReplicatorAzure2019': azur19 + 'WebsiteReplicator.svg',
  1341. 'WebsiteSettingsAzure2019': azur19 + 'WebsiteSettings.svg',
  1342. 'WebsiteStagingAzure2019': azur19 + 'WebsiteStaging.svg',
  1343. 'WebSlotsAzure2019': azur19 + 'WebSlots.svg',
  1344. 'WebTestAzure2019': azur19 + 'WebTest.svg',
  1345. 'Windows10IoTCoreServicesAzure2019': azur19 + 'Windows_10_IoT_Core_Services.svg',
  1346. 'WorkflowAzure2019': azur19 + 'Workflow.svg',
  1347. 'WrenchAzure2019': azur19 + 'Wrench.svg',
  1348. 'XboxControllerAzure2019': azur19 + 'XboxController.svg',
  1349. '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',
  1350. 'AppServiceLogicAppAzure2019': azur19 + 'dep/App_Service_Logic_App.svg',
  1351. //'ApplicationGatewayAzure2019': azur19 + 'dep/Application_Gateway.svg',
  1352. 'ContentDeliveryNetworkAzure2019': azur19 + 'dep/Content_Delivery_Network.svg',
  1353. //'DataLakeAnalyticsAzure2019': azur19 + 'dep/Data_Lake_Analytics.svg',
  1354. 'DataLakeStoreAzure2019': azur19 + 'dep/Data_Lake_Store.svg',
  1355. //'DataLakeAzure2019': azur19 + 'dep/Data_Lake.svg',
  1356. //'DataWarehouseAzure2019': azur19 + 'dep/DataWarehouse.svg',
  1357. '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;',
  1358. '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',
  1359. //Cisco Basic
  1360. 'Cisco_cisco_androgenous_person' : s + 'cisco.people.androgenous_person;' + c,
  1361. 'Cisco_cisco_atm_switch' : s + 'cisco.switches.atm_switch;' + c,
  1362. 'Cisco_cisco_cloud' : s + 'cisco.storage.cloud;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897;fillColor=#ffffff',
  1363. 'Cisco_cisco_fileserver' : s + 'cisco.servers.fileserver;' + c,
  1364. 'Cisco_cisco_firewall' : s + 'cisco.security.firewall;' + c,
  1365. 'Cisco_cisco_generic_building' : s + 'cisco.buildings.generic_building;' + c,
  1366. 'Cisco_cisco_laptop' : s + 'cisco.computers_and_peripherals.laptop;' + c,
  1367. 'Cisco_cisco_lock' : s + 'cisco.security.lock;' + c,
  1368. 'Cisco_cisco_microwebserver' : s + 'cisco.servers.microwebserver;' + c,
  1369. 'Cisco_cisco_pc' : s + 'cisco.computers_and_peripherals.pc;' + c,
  1370. 'Cisco_cisco_pda' : s + 'cisco.misc.pda;' + c,
  1371. 'Cisco_cisco_phone' : s + 'cisco.modems_and_phones.hootphone;' + c,
  1372. 'Cisco_cisco_printer' : s + 'cisco.computers_and_peripherals.printer;' + c,
  1373. 'Cisco_cisco_relational_database' : s + 'cisco.storage.relational_database;' + c,
  1374. 'Cisco_cisco_router' : s + 'cisco.routers.router;' + c,
  1375. 'Cisco_cisco_standing_man' : s + 'cisco.people.standing_man;' + c,
  1376. 'Cisco_cisco_standing_woman' : s + 'cisco.people.standing_woman;' + c,
  1377. 'Cisco_cisco_ups' : s + 'cisco.misc.ups;' + c,
  1378. 'Cisco_cisco_wireless_router' : s + 'cisco.routers.wireless_router;' + c,
  1379. //Cisco Extended
  1380. 'Cisco_cisco_100baset_hub' : s + 'cisco.hubs_and_gateways.100baset_hub;' + c,
  1381. 'Cisco_cisco_10700' : s + 'cisco.routers.10700;' + c,
  1382. 'Cisco_cisco_10GE_FCoE' : s + 'cisco.controllers_and_modules.10ge_fcoe;' + c,
  1383. 'Cisco_cisco_15200' : s + 'cisco.misc.15200;' + c,
  1384. 'Cisco_cisco_3174__desktop_' : s + 'cisco.controllers_and_modules.3174_(desktop)_cluster_controller;' + c,
  1385. 'Cisco_cisco_3200_mobile_access_router' : s + 'cisco.routers.mobile_access_router;' + c,
  1386. 'Cisco_cisco_3x74__floor_' : s + 'cisco.controllers_and_modules.3x74_(floor)_cluster_controller;' + c,
  1387. 'Cisco_cisco_6700_series' : s + 'cisco.misc.6700_series;' + c,
  1388. 'Cisco_cisco_7500ars__7513_' : s + 'cisco.misc.7500ars_(7513);' + c,
  1389. // 'Cisco_cisco_access_gateway' NA
  1390. 'Cisco_cisco_accesspoint' : s + 'cisco.misc.access_point;' + c,
  1391. 'Cisco_cisco_ace' : s + 'cisco.misc.ace;' + c,
  1392. 'Cisco_cisco_ACS' : s + 'cisco.misc.acs;' + c,
  1393. 'Cisco_cisco_adm' : s + 'cisco.misc.adm;' + c,
  1394. 'Cisco_cisco_antenna' : s + 'cisco.wireless.antenna;' + c,
  1395. 'Cisco_cisco_asic_processor' : s + 'cisco.misc.asic_processor;' + c,
  1396. 'Cisco_cisco_ASR_1000_Series' : s + 'cisco.misc.asr_1000_series;' + c,
  1397. 'Cisco_cisco_ata' : s + 'cisco.misc.ata;' + c,
  1398. 'Cisco_cisco_atm_3800' : s + 'cisco.misc.atm_3800;' + c,
  1399. 'Cisco_cisco_atm_fast_gigabit_etherswitch' : s + 'cisco.switches.atm_fast_gigabit_etherswitch;' + c,
  1400. 'Cisco_cisco_atm_router' : s + 'cisco.routers.atm_router;' + c,
  1401. 'Cisco_cisco_atm_tag_switch_router' : s + 'cisco.routers.atm_tag_switch_router;' + c,
  1402. 'Cisco_cisco_avs' : s + 'cisco.misc.avs;' + c,
  1403. 'Cisco_cisco_AXP' : s + 'cisco.misc.axp;' + c,
  1404. // 'Cisco_cisco_bbfw_media' NA
  1405. // 'Cisco_cisco_bbfw' NA
  1406. 'Cisco_cisco_bbsm' : s + 'cisco.misc.bbsm;' + c,
  1407. 'Cisco_cisco_branch_office' : s + 'cisco.buildings.branch_office;' + c,
  1408. 'Cisco_cisco_breakout_box' : s + 'cisco.misc.breakout_box;' + c,
  1409. 'Cisco_cisco_bridge' : s + 'cisco.misc.bridge;' + c,
  1410. 'Cisco_cisco_broadband_router' : s + 'cisco.routers.broadcast_router;' + c,
  1411. 'Cisco_cisco_bts_10200' : s + 'cisco.misc.bts_10200;' + c,
  1412. 'Cisco_cisco_cable_modem' : s + 'cisco.modems_and_phones.cable_modem;' + c,
  1413. 'Cisco_cisco_callmanager' : s + 'cisco.misc.call_manager;' + c,
  1414. 'Cisco_cisco_car' : s + 'cisco.misc.car;' + c,
  1415. 'Cisco_cisco_carrier_routing_system' : s + 'cisco.misc.carrier_routing_system;' + c,
  1416. 'Cisco_cisco_cddi_fddi' : s + 'cisco.misc.cddi_fddi;' + c,
  1417. 'Cisco_cisco_cdm' : s + 'cisco.misc.cdm;' + c,
  1418. 'Cisco_cisco_cellular_phone' : s + 'cisco.modems_and_phones.cell_phone;' + c,
  1419. 'Cisco_cisco_centri_firewall' : s + 'cisco.security.centri_firewall;' + c,
  1420. 'Cisco_cisco_cisco_1000' : s + 'cisco.misc.cisco_1000;' + c,
  1421. 'Cisco_cisco_cisco_asa_5500' : s + 'cisco.misc.asa_5500;' + c,
  1422. 'Cisco_cisco_cisco_ca' : s + 'cisco.misc.cisco_ca;' + c,
  1423. 'Cisco_cisco_cisco_file_engine' : s + 'cisco.storage.cisco_file_engine;' + c,
  1424. 'Cisco_cisco_cisco_hub' : s + 'cisco.hubs_and_gateways.cisco_hub;' + c,
  1425. 'Cisco_cisco_ciscosecurity' : s + 'cisco.security.cisco_security;' + c,
  1426. // 'Cisco_cisco_Cisco_telepresence_manager' NA
  1427. 'Cisco_cisco_cisco_unified_presence_server' : s + 'cisco.servers.cisco_unified_presence_server;' + c,
  1428. 'Cisco_cisco_cisco_unityexpress' : s + 'cisco.misc.cisco_unity_express;' + c,
  1429. 'Cisco_cisco_ciscoworks' : s + 'cisco.misc.cisco_works;' + c,
  1430. 'Cisco_cisco_class_4_5_switch' : s + 'cisco.switches.class_4_5_switch;' + c,
  1431. 'Cisco_cisco_communications_server' : s + 'cisco.servers.communications_server;' + c,
  1432. 'Cisco_cisco_contact_center' : s + 'cisco.misc.contact_center;' + c,
  1433. 'Cisco_cisco_content_engine__cache_director_' : s + 'cisco.directors.content_engine_(cache_director);' + c,
  1434. 'Cisco_cisco_content_service_router' : s + 'cisco.routers.content_service_router;' + c,
  1435. 'Cisco_cisco_content_service_switch_1100' : s + 'cisco.switches.content_service_switch_1100;' + c,
  1436. 'Cisco_cisco_content_switch_module' : s + 'cisco.controllers_and_modules.content_switch_module;' + c,
  1437. 'Cisco_cisco_content_switch' : s + 'cisco.switches.content_switch;' + c,
  1438. 'Cisco_cisco_content_transformation_engine__cte_' : s + 'cisco.misc.content_transformation_engine_(cte);' + c,
  1439. 'Cisco_cisco_cs_mars' : s + 'cisco.misc.cs-mars;' + c,
  1440. 'Cisco_cisco_csm_s' : s + 'cisco.misc.csm-s;' + c,
  1441. 'Cisco_cisco_csu_dsu' : s + 'cisco.misc.csu_dsu;' + c,
  1442. 'Cisco_cisco_CUBE' : s + 'cisco.misc.cube;' + c,
  1443. 'Cisco_cisco_detector' : s + 'cisco.misc.detector;' + c,
  1444. 'Cisco_cisco_director_class_fibre_channel_director' : s + 'cisco.directors.director-class_fibre_channel_director;' + c,
  1445. 'Cisco_cisco_directory_server' : s + 'cisco.servers.directory_server;' + c,
  1446. 'Cisco_cisco_diskette' : s + 'cisco.storage.diskette;' + c,
  1447. 'Cisco_cisco_distributed_director' : s + 'cisco.directors.distributed_director;' + c,
  1448. 'Cisco_cisco_dot_dot' : s + 'cisco.misc.dot-dot;' + c,
  1449. 'Cisco_cisco_dpt' : s + 'cisco.misc.dpt;' + c,
  1450. 'Cisco_cisco_dslam' : s + 'cisco.misc.dslam;' + c,
  1451. 'Cisco_cisco_dual_mode_ap' : s + 'cisco.misc.dual_mode;' + c,
  1452. 'Cisco_cisco_dwdm_filter' : s + 'cisco.misc.dwdm_filter;' + c,
  1453. 'Cisco_cisco_end_office' : s + 'cisco.buildings.end_office;' + c,
  1454. 'Cisco_cisco_fax' : s + 'cisco.modems_and_phones.fax;' + c,
  1455. 'Cisco_cisco_fc_storage' : s + 'cisco.storage.fc_storage;' + c,
  1456. 'Cisco_cisco_fddi_ring' : s + 'cisco.misc.fddi_ring;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897;',
  1457. 'Cisco_cisco_fibre_channel_disk_subsystem' : s + 'cisco.storage.fibre_channel_disk_subsystem;' + c,
  1458. 'Cisco_cisco_fibre_channel_fabric_switch' : s + 'cisco.switches.fibre_channel_fabric_switch;' + c,
  1459. 'Cisco_cisco_file_cabinet' : s + 'cisco.storage.file_cabinet;' + c,
  1460. 'Cisco_cisco_file_server' : s + 'cisco.servers.file_server;' + c,
  1461. 'Cisco_cisco_firewall_service_module__fwsm_' : s + 'cisco.controllers_and_modules.firewall_service_module_(fwsm);' + c,
  1462. 'Cisco_cisco_front_end_processor' : s + 'cisco.misc.front_end_processor;' + c,
  1463. 'Cisco_cisco_gatekeeper' : s + 'cisco.security.gatekeeper;strokeColor=#036897;',
  1464. 'Cisco_cisco_general_applicance' : s + 'cisco.misc.general_appliance;' + c,
  1465. 'Cisco_cisco_generic_gateway' : s + 'cisco.hubs_and_gateways.generic_gateway;' + c,
  1466. 'Cisco_cisco_generic_processor' : s + 'cisco.misc.generic_processor;' + c,
  1467. 'Cisco_cisco_generic_softswitch' : s + 'cisco.switches.generic_softswitch;' + c,
  1468. 'Cisco_cisco_gigabit_switch_atm_tag_router' : s + 'cisco.routers.gigabit_switch_atm_tag_router;' + c,
  1469. 'Cisco_cisco_government_building' : s + 'cisco.buildings.government_building;' + c,
  1470. 'Cisco_cisco_Ground_terminal' : s + 'cisco.wireless.ground_terminal;' + c,
  1471. 'Cisco_cisco_guard' : s + 'cisco.security.guard;' + c,
  1472. 'Cisco_cisco_handheld' : s + 'cisco.misc.handheld;' + c,
  1473. 'Cisco_cisco_hootphone' : s + 'cisco.modems_and_phones.hootphone;' + c,
  1474. 'Cisco_cisco_host' : s + 'cisco.servers.host;' + c,
  1475. 'Cisco_cisco_hp_mini' : s + 'cisco.misc.hp_mini;' + c,
  1476. 'Cisco_cisco_h' : s + 'cisco.misc.h_323;' + c,
  1477. 'Cisco_cisco_hub' : s + 'cisco.hubs_and_gateways.hub;' + c,
  1478. 'Cisco_cisco_iad_router' : s + 'cisco.routers.iad_router;' + c,
  1479. 'Cisco_cisco_ibm_mainframe' : s + 'cisco.computers_and_peripherals.ibm_mainframe;' + c,
  1480. 'Cisco_cisco_ibm_mini_as400' : s + 'cisco.computers_and_peripherals.ibm_mini_as400;' + c,
  1481. 'Cisco_cisco_ibm_tower' : s + 'cisco.computers_and_peripherals.ibm_tower;' + c,
  1482. 'Cisco_cisco_icm' : s + 'cisco.misc.icm;' + c,
  1483. 'Cisco_cisco_ics' : s + 'cisco.misc.ics;' + c,
  1484. 'Cisco_cisco_intelliswitch_stack' : s + 'cisco.switches.intelliswitch_stack;' + c,
  1485. 'Cisco_cisco_ios_firewall' : s + 'cisco.security.ios_firewall;' + c,
  1486. 'Cisco_cisco_ios_slb' : s + 'cisco.misc.ios_slb;' + c,
  1487. 'Cisco_cisco_ip_communicator' : s + 'cisco.misc.ip_communicator;' + c,
  1488. 'Cisco_cisco_ip_dsl' : s + 'cisco.misc.ip_dsl;' + c,
  1489. 'Cisco_cisco_ip_phone' : s + 'cisco.modems_and_phones.ip_phone;' + c,
  1490. 'Cisco_cisco_ip' : s + 'cisco.misc.ip;' + c,
  1491. 'Cisco_cisco_iptc' : s + 'cisco.misc.iptc;' + c,
  1492. 'Cisco_cisco_ip_telephony_router' : s + 'cisco.routers.ip_telephony_router;' + c,
  1493. 'Cisco_cisco_iptv_content_manager' : s + 'cisco.misc.iptv_content_manager;' + c,
  1494. 'Cisco_cisco_iptv_server' : s + 'cisco.servers.iptv_server;' + c,
  1495. 'Cisco_cisco_iscsi_router' : s + 'cisco.routers.isci_router;' + c,
  1496. 'Cisco_cisco_isdn_switch' : s + 'cisco.switches.isdn_switch;' + c,
  1497. 'Cisco_cisco_itp' : s + 'cisco.misc.itp;' + c,
  1498. 'Cisco_cisco_jbod' : s + 'cisco.misc.jbod;' + c,
  1499. 'Cisco_cisco_key' : s + 'cisco.misc.key;' + c,
  1500. 'Cisco_cisco_keys' : s + 'cisco.misc.keys;' + c,
  1501. 'Cisco_cisco_lan_to_lan' : s + 'cisco.misc.lan_to_lan;' + c,
  1502. 'Cisco_cisco_layer_2_remote_switch' : s + 'cisco.switches.layer_2_remote_switch;' + c,
  1503. 'Cisco_cisco_layer_3_switch' : s + 'cisco.switches.layer_3_switch;' + c,
  1504. 'Cisco_cisco_lightweight_ap' : s + 'cisco.misc.lightweight_ap;' + c,
  1505. 'Cisco_cisco_localdirector' : s + 'cisco.directors.localdirector;' + c,
  1506. 'Cisco_cisco_longreach_cpe' : s + 'cisco.misc.longreach_cpe;' + c,
  1507. 'Cisco_cisco_macintosh' : s + 'cisco.computers_and_peripherals.macintosh;' + c,
  1508. 'Cisco_cisco_mac_woman' : s + 'cisco.people.mac_woman;' + c,
  1509. 'Cisco_cisco_man_woman' : s + 'cisco.people.man_woman;' + c,
  1510. 'Cisco_cisco_mas_gateway' : s + 'cisco.hubs_and_gateways.mas_gateway;' + c,
  1511. 'Cisco_cisco_mau' : s + 'cisco.misc.mau;' + c,
  1512. 'Cisco_cisco_mcu' : s + 'cisco.misc.mcu;' + c,
  1513. 'Cisco_cisco_mdu' : s + 'cisco.buildings.mdu;' + c,
  1514. 'Cisco_cisco_me_1100' : s + 'cisco.misc.me1100;' + c,
  1515. 'Cisco_cisco_Mediator' : s + 'cisco.misc.mediator;' + c,
  1516. 'Cisco_cisco_meetingplace' : s + 'cisco.misc.meetingplace;' + c,
  1517. 'Cisco_cisco_mesh_ap' : s + 'cisco.misc.mesh_ap;' + c,
  1518. 'Cisco_cisco_metro_1500' : s + 'cisco.misc.metro_1500;' + c,
  1519. 'Cisco_cisco_mgx_8000_multiservice_switch' : s + 'cisco.switches.mgx_8000_multiservice_switch;' + c,
  1520. 'Cisco_cisco_microphone' : s + 'cisco.computers_and_peripherals.microphone;' + c,
  1521. 'Cisco_cisco_mini_vax' : s + 'cisco.misc.mini_vax;' + c,
  1522. 'Cisco_cisco_mobile_access_ip_phone' : s + 'cisco.modems_and_phones.mobile_access_ip_phone;' + c,
  1523. 'Cisco_cisco_mobile_access_router' : s + 'cisco.routers.mobile_access_router;' + c,
  1524. 'Cisco_cisco_modem' : s + 'cisco.modems_and_phones.modem;' + c,
  1525. 'Cisco_cisco_moh_server' : s + 'cisco.servers.moh_server;' + c,
  1526. 'Cisco_cisco_MSE' : s + 'cisco.misc.mse;' + c,
  1527. 'Cisco_cisco_mulitswitch_device' : s + 'cisco.switches.multiswitch_device;' + c,
  1528. 'Cisco_cisco_multi_fabric_server_switch' : s + 'cisco.switches.multi-fabric_server_switch;' + c,
  1529. 'Cisco_cisco_multilayer_remote_switch' : s + 'cisco.switches.multilayer_remote_switch;' + c,
  1530. 'Cisco_cisco_mux' : s + 'cisco.misc.mux;' + c,
  1531. 'Cisco_cisco_MXE' : s + 'cisco.misc.mxe;' + c,
  1532. 'Cisco_cisco_nac_appliance' : s + 'cisco.misc.nac_appliance;' + c,
  1533. 'Cisco_cisco_NCE' : s + 'cisco.misc.nce;' + c,
  1534. 'Cisco_cisco_NCE_router' : s + 'cisco.routers.nce_router;' + c,
  1535. 'Cisco_cisco_netflow_router' : s + 'cisco.routers.netflow_router;' + c,
  1536. 'Cisco_cisco_netranger' : s + 'cisco.misc.netranger;' + c,
  1537. 'Cisco_cisco_netsonar' : s + 'cisco.misc.netsonar;' + c,
  1538. 'Cisco_cisco_network_management' : s + 'cisco.misc.network_management;' + c,
  1539. 'Cisco_cisco_Nexus_1000' : s + 'cisco.misc.nexus_1000;' + c,
  1540. 'Cisco_cisco_Nexus_2000' : s + 'cisco.misc.nexus_2000_fabric_extender;' + c,
  1541. 'Cisco_cisco_Nexus_5000' : s + 'cisco.misc.nexus_5000;' + c,
  1542. 'Cisco_cisco_Nexus_7000' : s + 'cisco.misc.nexus_7000;' + c,
  1543. 'Cisco_cisco_octel' : s + 'cisco.misc.octel;' + c,
  1544. 'Cisco_cisco_ons15500' : s + 'cisco.misc.ons15500;' + c,
  1545. 'Cisco_cisco_optical_amplifier' : s + 'cisco.misc.optical_amplifier;' + c,
  1546. 'Cisco_cisco_optical_services_router' : s + 'cisco.routers.optical_services_router;' + c,
  1547. 'Cisco_cisco_optical_transport' : s + 'cisco.misc.optical_transport;' + c,
  1548. 'Cisco_cisco_pad' : s + 'cisco.misc.pad_2;' + c,
  1549. 'Cisco_cisco_pad_x' : s + 'cisco.misc.pad_1;' + c,
  1550. 'Cisco_cisco_page_icon' : s + 'cisco.misc.page_icon;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897;',
  1551. 'Cisco_cisco_pbx' : s + 'cisco.misc.pbx;' + c,
  1552. 'Cisco_cisco_pbx_switch' : s + 'cisco.switches.pbx_switch;' + c,
  1553. 'Cisco_cisco_pc_adapter_card' : s + 'cisco.computers_and_peripherals.pc_adapter_card;' + c,
  1554. 'Cisco_cisco_pc_man' : s + 'cisco.people.pc_man;' + c,
  1555. 'Cisco_cisco_pc_routercard' : s + 'cisco.computers_and_peripherals.pc_routercard;' + c,
  1556. 'Cisco_cisco_pc_software' : s + 'cisco.misc.pc_software;' + c,
  1557. 'Cisco_cisco_pc_video' : s + 'cisco.misc.pc_video;' + c,
  1558. 'Cisco_cisco_phone_fax' : s + 'cisco.modems_and_phones.phone-fax;' + c,
  1559. 'Cisco_cisco_pix_firewall' : s + 'cisco.security.pix_firewall;' + c,
  1560. 'Cisco_cisco_pmc' : s + 'cisco.misc.pmc;' + c,
  1561. 'Cisco_cisco_programmable_switch' : s + 'cisco.switches.programmable_switch;' + c,
  1562. 'Cisco_cisco_protocol_translator' : s + 'cisco.misc.protocol_translator;' + c,
  1563. 'Cisco_cisco_pxf' : s + 'cisco.misc.pxf;' + c,
  1564. 'Cisco_cisco_radio_tower' : s + 'cisco.wireless.radio_tower;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897',
  1565. 'Cisco_cisco_ratemux' : s + 'cisco.misc.ratemux;' + c,
  1566. 'Cisco_cisco_repeater' : s + 'cisco.misc.repeater;' + c,
  1567. 'Cisco_cisco_RF_modem' : s + 'cisco.modems_and_phones.rf_modem;' + c,
  1568. 'Cisco_cisco_router_firewall' : s + 'cisco.security.router_firewall;' + c,
  1569. 'Cisco_cisco_routerin_building' : s + 'cisco.routers.router_in_building;' + c,
  1570. 'Cisco_cisco_router_with_silicon_switch' : s + 'cisco.routers.router_with_silicon_switch;' + c,
  1571. 'Cisco_cisco_route_switch_processor' : s + 'cisco.misc.route_switch_processor;' + c,
  1572. 'Cisco_cisco_rpsrps' : s + 'cisco.misc.rpsrps;' + c,
  1573. 'Cisco_cisco_running_man' : s + 'cisco.people.running_man;' + c,
  1574. 'Cisco_cisco_sattelite_dish' : s + 'cisco.wireless.satellite_dish;' + c,
  1575. 'Cisco_cisco_sattelite' : s + 'cisco.wireless.satellite;' + c,
  1576. 'Cisco_cisco_scanner' : s + 'cisco.computers_and_peripherals.scanner;' + c,
  1577. 'Cisco_cisco_server_switch' : s + 'cisco.switches.server_switch;' + c,
  1578. 'Cisco_cisco_server_with_router' : s + 'cisco.servers.server_with_router;' + c,
  1579. 'Cisco_cisco_service_control' : s + 'cisco.misc.service_control;' + c,
  1580. 'Cisco_cisco_Service_Module' : s + 'cisco.controllers_and_modules.service_module;' + c,
  1581. 'Cisco_cisco_Service_router' : s + 'cisco.routers.service_router;' + c,
  1582. 'Cisco_cisco_Services' : s + 'cisco.misc.services;' + c,
  1583. 'Cisco_cisco_Set_top_box' : s + 'cisco.misc.set_top_box;' + c,
  1584. 'Cisco_cisco_simulitlayer_switch' : s + 'cisco.switches.simultilayer_switch;' + c,
  1585. 'Cisco_cisco_sip_proxy_werver' : s + 'cisco.servers.sip_proxy_server;' + c,
  1586. 'Cisco_cisco_sitting_woman' : s + 'cisco.people.sitting_woman;' + c,
  1587. 'Cisco_cisco_small_business' : s + 'cisco.buildings.small_business;' + c,
  1588. 'Cisco_cisco_small_hub' : s + 'cisco.hubs_and_gateways.small_hub;' + c,
  1589. 'Cisco_cisco_softphone' : s + 'cisco.modems_and_phones.softphone;' + c,
  1590. 'Cisco_cisco_softswitch_pgw_mgc' : s + 'cisco.switches.softswitch_pgw_mgc;' + c,
  1591. 'Cisco_cisco_software_based_server' : s + 'cisco.servers.software_based_server;' + c,
  1592. // 'Cisco_cisco_Space_router' NA
  1593. 'Cisco_cisco_speaker' : s + 'cisco.computers_and_peripherals.speaker;' + c,
  1594. 'Cisco_cisco_ssc' : s + 'cisco.misc.ssc;' + c,
  1595. 'Cisco_cisco_ssl_terminator' : s + 'cisco.misc.ssl_terminator;' + c,
  1596. 'Cisco_cisco_standard_host' : s + 'cisco.servers.standard_host;' + c,
  1597. 'Cisco_cisco_stb' : s + 'cisco.misc.stb;' + c,
  1598. 'Cisco_cisco_storage_router' : s + 'cisco.routers.storage_router;' + c,
  1599. 'Cisco_cisco_storage_server' : s + 'cisco.servers.storage_server;' + c,
  1600. 'Cisco_cisco_stp' : s + 'cisco.misc.stp;' + c,
  1601. 'Cisco_cisco_streamer' : s + 'cisco.misc.streamer;' + c,
  1602. 'Cisco_cisco_sun_workstation' : s + 'cisco.computers_and_peripherals.workstation;' + c,
  1603. 'Cisco_cisco_supercomputer' : s + 'cisco.computers_and_peripherals.supercomputer;' + c,
  1604. 'Cisco_cisco_svx' : s + 'cisco.misc.svx;' + c,
  1605. 'Cisco_cisco_system_controller' : s + 'cisco.controllers_and_modules.system_controller;' + c,
  1606. 'Cisco_cisco_tablet' : s + 'cisco.computers_and_peripherals.tablet;' + c,
  1607. 'Cisco_cisco_tape_array' : s + 'cisco.storage.tape_array;' + c,
  1608. 'Cisco_cisco_tdm_router' : s + 'cisco.routers.tdm_router;' + c,
  1609. 'Cisco_cisco_telecommuter_house_pc' : s + 'cisco.buildings.telecommuter_house_pc;' + c,
  1610. 'Cisco_cisco_telecommuter_house' : s + 'cisco.buildings.telecommuter_house;' + c,
  1611. 'Cisco_cisco_telecommuter_icon' : s + 'cisco.misc.telecommuter_icon;' + c,
  1612. // 'Cisco_cisco_Telepresence_1000' NA
  1613. // 'Cisco_cisco_Telepresence_3000' NA
  1614. 'Cisco_cisco_Telepresence_3200' : s + 'cisco.misc.telepresence;' + c,
  1615. // 'Cisco_cisco_Telepresence_500' NA
  1616. 'Cisco_cisco_terminal' : s + 'cisco.computers_and_peripherals.terminal;' + c,
  1617. 'Cisco_cisco_token' : s + 'cisco.misc.token;verticalLabelPosition=bottom;verticalAlign=top;strokeColor=#036897',
  1618. 'Cisco_cisco_TP_MCU' : s + 'cisco.misc.tp_mcu;' + c,
  1619. 'Cisco_cisco_transpath' : s + 'cisco.misc.transpath;' + c,
  1620. 'Cisco_cisco_truck' : s + 'cisco.misc.truck;' + c,
  1621. 'Cisco_cisco_turret' : s + 'cisco.misc.turret;' + c,
  1622. 'Cisco_cisco_tv' : s + 'cisco.misc.tv;' + c,
  1623. 'Cisco_cisco_ubr910' : s + 'cisco.misc.ubr910;' + c,
  1624. 'Cisco_cisco_umg_series' : s + 'cisco.misc.umg_series;' + c,
  1625. 'Cisco_cisco_unity_server' : s + 'cisco.servers.unity_server;' + c,
  1626. 'Cisco_cisco_universal_gateway' : s + 'cisco.hubs_and_gateways.universal_gateway;' + c,
  1627. 'Cisco_cisco_university' : s + 'cisco.buildings.university;' + c,
  1628. 'Cisco_cisco_upc' : s + 'cisco.computers_and_peripherals.upc;' + c,
  1629. 'Cisco_cisco_vault' : s + 'cisco.misc.vault;' + c,
  1630. 'Cisco_cisco_video_camera' : s + 'cisco.computers_and_peripherals.video_camera;' + c,
  1631. 'Cisco_cisco_vip' : s + 'cisco.misc.vip;' + c,
  1632. 'Cisco_cisco_virtual_layer_switch' : s + 'cisco.switches.virtual_layer_switch;' + c,
  1633. 'Cisco_cisco_virtual_switch_controller__vsc3000_' : s + 'cisco.controllers_and_modules.virtual_switch_controller_(vsc3000);' + c,
  1634. 'Cisco_cisco_voice_atm_switch' : s + 'cisco.switches.voice_atm_switch;' + c,
  1635. 'Cisco_cisco_voice_commserver' : s + 'cisco.servers.voice_commserver;' + c,
  1636. 'Cisco_cisco_voice_router' : s + 'cisco.routers.voice_router;' + c,
  1637. 'Cisco_cisco_voice_switch' : s + 'cisco.switches.voice_switch;' + c,
  1638. 'Cisco_cisco_vpn_concentrator' : s + 'cisco.misc.vpn_concentrator;' + c,
  1639. 'Cisco_cisco_vpn_gateway' : s + 'cisco.hubs_and_gateways.vpn_gateway;' + c,
  1640. 'Cisco_cisco_VSS' : s + 'cisco.misc.vss;' + c,
  1641. 'Cisco_cisco_wae' : s + 'cisco.misc.wae;' + c,
  1642. 'Cisco_cisco_wavelength_router' : s + 'cisco.routers.wavelength_router;' + c,
  1643. 'Cisco_cisco_web_browser' : s + 'cisco.computers_and_peripherals.web_browser;' + c,
  1644. 'Cisco_cisco_web_cluster' : s + 'cisco.storage.web_cluster;' + c,
  1645. 'Cisco_cisco_wi_fi_tag' : s + 'cisco.wireless.wi-fi_tag;' + c,
  1646. 'Cisco_cisco_wireless_bridge' : s + 'cisco.wireless.wireless_bridge;' + c,
  1647. 'Cisco_cisco_wireless_location_appliance' : s + 'cisco.wireless.wireless_location_appliance;' + c,
  1648. 'Cisco_cisco_wireless' : s + 'cisco.wireless.wireless;' + c,
  1649. 'Cisco_cisco_wireless_transport' : s + 'cisco.wireless.wireless_transport;' + c,
  1650. 'Cisco_cisco_wism' : s + 'cisco.misc.wism;' + c,
  1651. 'Cisco_cisco_wlan_controller' : s + 'cisco.wireless.wlan_controller;' + c,
  1652. 'Cisco_cisco_workgroup_director' : s + 'cisco.directors.workgroup_director;' + c,
  1653. 'Cisco_cisco_workgroup_switch' : s + 'cisco.switches.workgroup_switch;' + c,
  1654. 'Cisco_cisco_workstation' : s + 'cisco.computers_and_peripherals.workstation;' + c,
  1655. 'Cisco_cisco_www_server' : s + 'cisco.servers.www_server;' + c,
  1656. //Computers and Monitors
  1657. 'NET_PC' : s + 'networks.pc;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1658. 'NET_Virtual-PC' : s + 'networks.virtual_pc;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1659. 'NET_Terminal' : s + 'networks.terminal;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1660. 'NET_DataPipe' : s + 'networks.bus;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1661. 'NET_SlateDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1662. 'NET_TabletDevice' : s + 'networks.tablet;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1663. 'NET_Laptop' : s + 'networks.laptop;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1664. 'NET_PDA' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1665. 'NET_CRTMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1666. 'NET_LCDMonitor' : s + 'networks.monitor;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1667. //Detailed Network Diagrams
  1668. // 'NET_ABSwitch' NA
  1669. // 'NET_Repeater' NA
  1670. // 'NET_DiagnosticDevice' NA
  1671. // 'NET_CardReader' NA
  1672. // 'NET_PatchPanel' NA
  1673. 'NET_RadioTower' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1674. // 'NET_BiometricReader' NA
  1675. 'NET_ExternalHardDrive' : s + 'networks.external_storage;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1676. // 'NET_WebService' NA
  1677. // 'NET_FiberOptic' NA
  1678. 'NET_SatelliteDish' : s + 'networks.satellite_dish;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1679. 'NET_Satellite' : s + 'networks.satellite;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1680. // 'NET_VoIPPhone' NA
  1681. // 'NET_PBX' NA
  1682. // 'NET_MLPS' NA
  1683. //Basic Network Shapes
  1684. 'NET_WirelessAccessPoint' : s + 'networks.radio_tower;fillColor=#29AAE1;strokeColor=#29AAE1;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1685. 'NET_RingNetwork' : cs,
  1686. 'NET_Ethernet' : cs,
  1687. 'NET_Server' : s + 'networks.server;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1688. // 'NET_ExternalMediaDrive' NA
  1689. 'NET_Mainframe' : s + 'networks.mainframe;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1690. 'NET_Router' : s + 'networks.wireless_hub;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1691. 'NET_Switch' : s + 'networks.switch;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1692. 'NET_Firewall' : s + 'networks.firewall;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1693. 'NET_User' : s + 'networks.user_male;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1694. 'NET_CommLink' : s + 'networks.comm_link_edge;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1695. 'NET_SuperComputer' : s + 'networks.supercomputer;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1696. 'NET_VirtualServer' : s + 'networks.virtual_server;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1697. 'NET_Printer' : s + 'networks.printer;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1698. // 'NET_Plotter' NA
  1699. 'NET_Scanner' : s + 'networks.scanner;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1700. 'NET_Copier' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1701. // 'NET_FaxMachine' NA
  1702. 'NET_MultiFunctionMachine' : s + 'networks.copier;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1703. 'NET_Projector' : s + 'networks.video_projector;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1704. 'NET_ProjectorScreen' : s + 'networks.video_projector_screen;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1705. 'NET_Bridge' : s + 'networks.router;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1706. 'NET_Hub' : s + 'networks.hub;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1707. 'NET_Modem' : s + 'networks.modem;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1708. 'NET_Telephone' : s + 'signs.tech.telephone_5;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1709. 'NET_CellPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1710. 'NET_SmartPhone' : s + 'networks.mobile;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1711. // 'NET_VideoPhone' NA
  1712. 'NET_Camera' : s + 'signs.tech.camera_2;fillColor=#29AAE1;strokeColor=#ffffff;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;',
  1713. // 'NET_VideoCamera' NA
  1714. //Server Racks
  1715. 'RackServerRack' : s + 'rackGeneral.container;childLayout=rack;marginLeft=9;marginRight=9;marginTop=21;marginBottom=22;textColor=#000000;numDisp=off' + containerStyle,
  1716. 'RackBlank' : s + 'rackGeneral.plate;strokeColor=#666666;labelPosition=left;align=right;spacingRight=15;fillColor=#e8e8e8',
  1717. 'RackRaidArray' : s + 'rack.cisco.cisco_carrier_packet_transport_50;labelPosition=left;align=right;spacingRight=15',
  1718. 'RackServer' : s + 'rack.oracle.sunfire_x4100;labelPosition=left;align=right;spacingRight=15',
  1719. 'RackEthernetSwitch' : s + 'rack.cisco.cisco_nexus_3016_switch;labelPosition=left;align=right;spacingRight=15',
  1720. 'RackPatchPanel' : s + 'rack.general.cat5e_rack_mount_patch_panel_24_ports;strokeColor=#666666;labelPosition=left;align=right;spacingRight=15',
  1721. 'RackRouter' : s + 'rack.cisco.cisco_asr_1001_router;labelPosition=left;align=right;spacingRight=15',
  1722. 'RackMonitor' : s + 'rack.ibm.ibm_1u_flat_panel_console_kit;labelPosition=left;align=right;spacingRight=15',
  1723. 'RackKeyboard' : s + 'rack.cisco.cisco_1905_serial_integrated_services_router;labelPosition=left;align=right;spacingRight=15',
  1724. 'RackPowerStrip' : s + 'rack.dell.power_strip;labelPosition=left;align=right;spacingRight=15',
  1725. 'RackPowerSupply' : s + 'rack.cisco.cisco_web_security_appliance_s170;labelPosition=left;align=right;spacingRight=15',
  1726. 'RackBridge' : s + 'rack.cisco.cisco_nexus_5548p_switch;labelPosition=left;align=right;spacingRight=15',
  1727. 'RackTapeDrive' : s + 'rack.ibm.ibm_1754_local_console_manager;labelPosition=left;align=right;spacingRight=15',
  1728. //Network
  1729. 'Image_network_server' : 'image;image=img/lib/clip_art/computers/Server_Tower_128x128.png;flipH=1',
  1730. 'Image_network_server_file' : 'image;image=img/lib/clip_art/computers/Server_128x128.png',
  1731. 'Image_network_server_net' : 'image;image=img/lib/clip_art/networking/Print_Server_128x128.png',
  1732. 'Image_network_server_net_large' : 'image;image=img/lib/clip_art/computers/Server_128x128.png',
  1733. 'Image_network_raid' : 'image;image=img/lib/clip_art/computers/Server_Tower_128x128.png;flipH=1',
  1734. 'Image_network_raid_large' : 'image;image=img/lib/clip_art/computers/Server_Tower_128x128.png;flipH=1',
  1735. 'Image_network_rack_server' : 'image;image=img/lib/clip_art/computers/Server_Rack_128x128.png',
  1736. 'Image_network_rack_tape' : 'image;image=img/lib/clip_art/computers/Server_Rack_Partial_128x128.png',
  1737. 'Image_network_printer_small' : 'image;image=img/lib/clip_art/computers/Printer_128x128.png;flipH=1',
  1738. 'Image_network_printer_large' : 'image;image=img/lib/clip_art/computers/Printer_128x128.png;flipH=1',
  1739. 'Image_network_printer_multipurpose' : 'image;image=img/lib/clip_art/computers/Printer_Commercial_128x128.png;flipH=1',
  1740. 'Image_network_copier_small' : 'image;image=img/lib/clip_art/computers/Printer_Commercial_128x128.png',
  1741. 'Image_network_copier_large' : 'image;image=img/lib/clip_art/computers/Printer_Commercial_128x128.png',
  1742. // 'Image_network_printer_largeformat' NA
  1743. 'Image_network_router' : 'image;image=img/lib/clip_art/networking/Router_128x128.png',
  1744. 'Image_network_router_wireless' : 'image;image=img/lib/clip_art/networking/Wireless_Router_128x128.png',
  1745. 'Image_network_ups' : 'image;image=img/lib/clip_art/networking/UPS_128x128.png',
  1746. //Electronics
  1747. // 'Image_electronics_speakers_2' NA
  1748. // 'Image_electronics_scanner_slide' NA
  1749. // 'Image_electronics_speakers_2_1' NA
  1750. // 'Image_electronics_speakers_5_1' NA
  1751. 'Image_electronics_lcd' : 'image;image=img/lib/clip_art/computers/Monitor_128x128.png',
  1752. 'Image_electronics_pda' : 'image;image=img/lib/clip_art/telecommunication/Palm_Treo_128x128.png',
  1753. 'Image_electronics_drive_cardreader' : 'image;image=img/lib/clip_art/finance/Credit_Card_128x128.png',
  1754. 'Image_electronics_camcorder' : 'image;image=img/lib/clip_art/networking/Ip_Camera_128x128.png',
  1755. // 'Image_electronics_headset' NA
  1756. // 'Image_electronics_calculator_simple' NA
  1757. // 'Image_electronics_scanner_flatbed' NA
  1758. 'Image_electronics_printer_photo' : 'image;image=img/lib/clip_art/computers/Printer_128x128.png;flipH=1',
  1759. // 'Image_electronics_scanner_photo' NA
  1760. // 'Image_electronics_projector' NA
  1761. 'Image_electronics_drive_firewire' : 'image;image=img/lib/clip_art/computers/Harddrive_128x128.png;flipH=1',
  1762. 'Image_electronics_drive_usb' : 'image;image=img/lib/clip_art/computers/Harddrive_128x128.png;flipH=1',
  1763. 'Image_electronics_modem_external' : 'image;image=img/lib/clip_art/networking/Modem_128x128.png;flipH=1',
  1764. // 'Image_electronics_tv_tuner_external' NA
  1765. // 'Image_electronics_mp3' NA
  1766. // 'Image_electronics_sound_box' NA
  1767. 'Image_electronics_lcd_wide' : 'image;image=img/lib/clip_art/computers/Monitor_128x128.png',
  1768. //Audio Equipment
  1769. // 'Image_audio_speakers_2' NA
  1770. // 'Image_audio_speakers_2_1' NA
  1771. // 'Image_audio_speakers_5_1' NA
  1772. // 'Image_audio_record_player' NA
  1773. // 'Image_audio_headset' NA
  1774. //Electrical
  1775. 'EE_Amplifier' : s + 'electrical.abstract.amplifier',
  1776. 'EE_OpAmp' : cs,
  1777. 'EE_ControlledAmp' : s + 'electrical.abstract.controlled_amplifier',
  1778. 'EE_Multiplexer' : 'shape=mxgraph.electrical.abstract.mux2',
  1779. 'EE_Demultiplexer' : 'shape=mxgraph.electrical.abstract.mux2;operation=demux',
  1780. 'EE_Capacitor1' : s + 'electrical.capacitors.capacitor_1',
  1781. 'EE_Capacitor2' : s + 'electrical.capacitors.capacitor_3',
  1782. 'EE_Diode' : s + 'electrical.diodes.diode',
  1783. 'EE_Resistor' : s + 'electrical.resistors.resistor_2',
  1784. 'EE_VarResistor' : s + 'electrical.resistors.variable_resistor_2',
  1785. 'EE_Potentiometer' : s + 'electrical.resistors.potentiometer_2',
  1786. 'EE_ProtGround' : s + 'electrical.signal_sources.protective_earth',
  1787. 'EE_SignalGround' : s + 'electrical.signal_sources.signal_ground',
  1788. 'EE_Transformer' : s + 'electrical.inductors.transformer_1',
  1789. 'EE_Inductor' : s + 'electrical.inductors.inductor_3',
  1790. 'EE_Variable Inductor' : s + 'electrical.inductors.variable_inductor',
  1791. 'EE_TwoWaySwitch' : s + 'electrical.electro-mechanical.2-way_switch',
  1792. 'EE_OnOffSwitch' : s + 'electrical.electro-mechanical.simple_switch',
  1793. 'EE_Loudspeaker' : s + 'electrical.electro-mechanical.loudspeaker',
  1794. 'EE_Motor' : s + 'electrical.electro-mechanical.motor_1',
  1795. 'EE_LED1' : s + 'electrical.opto_electronics.led_2',
  1796. 'EE_Lightbulb' : s + 'electrical.miscellaneous.light_bulb',
  1797. 'EE_IntegratedCircuit' : 'shape=mxgraph.electrical.logic_gates.dual_inline_ic',
  1798. //Power Sources
  1799. 'EE_AcSource' : s + 'electrical.signal_sources.ac_source;strokeWidth=1;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
  1800. 'EE_VoltageSource' : s + 'electrical.signal_sources.dc_source_3;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
  1801. 'EE_CurrentSource' : s + 'electrical.signal_sources.dc_source_2;direction=north;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
  1802. 'EE_ControlledCurrentSource' : s + 'electrical.signal_sources.dependent_source_2;direction=west;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
  1803. 'EE_ControlledVoltageSource' : s + 'electrical.signal_sources.dependent_source_3;verticalLabelPosition=middle;align=left;verticalAlign=top;labelPosition=right;',
  1804. 'EE_DcSource1' : s + 'electrical.miscellaneous.monocell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
  1805. 'EE_DcSource2' : s + 'electrical.miscellaneous.multicell_battery;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
  1806. 'EE_Vss' : s + 'electrical.signal_sources.vss2;verticalLabelPosition=top;verticalAlign=bottom;fontSize=24',
  1807. 'EE_Vdd' : s + 'electrical.signal_sources.vdd;verticalLabelPosition=bottom;verticalAlign=top',
  1808. //Transistors
  1809. 'EE_BJT_NPN1' : s + 'electrical.transistors.pnp_transistor_1',
  1810. 'EE_BJT_NPN1_V2' : s + 'electrical.transistors.npn_transistor_1;',
  1811. 'EE_BJT_PNP1' : s + 'electrical.transistors.npn_transistor_1',
  1812. 'EE_BJT_PNP1_V2' : s + 'electrical.transistors.pnp_transistor_1',
  1813. 'EE_JFET_P' : s + 'electrical.transistors.p-channel_jfet_1;flipV=1',
  1814. 'EE_JFET_P_V2' : s + 'electrical.transistors.p-channel_jfet_1;flipV=1',
  1815. 'EE_JFET_N' : s + 'electrical.transistors.n-channel_jfet_1',
  1816. 'EE_JFET_N_V2' : s + 'electrical.transistors.n-channel_jfet_1',
  1817. 'EE_MOSFET_P1' : s + 'electrical.mosfets1.mosfet_ic_p;flipV=1',
  1818. 'EE_MOSFET_P1_V2' : s + 'electrical.mosfets1.mosfet_ic_p;flipV=1',
  1819. 'EE_MOSFET_P2' : s + 'electrical.mosfets1.mosfet_p_no_bulk',
  1820. 'EE_MOSFET_P2_V2' : s + 'electrical.mosfets1.mosfet_p_no_bulk',
  1821. 'EE_MOSFET_P3' : s + 'electrical.mosfets1.p-channel_mosfet_1;flipV=1',
  1822. 'EE_MOSFET_P3_V2' : s + 'electrical.mosfets1.p-channel_mosfet_1;flipV=1',
  1823. 'EE_MOSFET_N1' : s + 'electrical.mosfets1.mosfet_ic_n',
  1824. 'EE_MOSFET_N1_V2' : s + 'electrical.mosfets1.mosfet_ic_n',
  1825. 'EE_MOSFET_N2' : s + 'electrical.mosfets1.mosfet_n_no_bulk',
  1826. 'EE_MOSFET_N2_V2' : s + 'electrical.mosfets1.mosfet_n_no_bulk',
  1827. 'EE_MOSFET_N3' : s + 'electrical.mosfets1.n-channel_mosfet_1',
  1828. 'EE_MOSFET_N3_V2' : s + 'electrical.mosfets1.n-channel_mosfet_1',
  1829. //Relays
  1830. // 'EE_SPST' NA
  1831. // 'EE_SPDT' NA
  1832. // 'EE_DPST' NA
  1833. // 'EE_DPDT' NA
  1834. //Logic Gates
  1835. 'EE_AND' : s + 'electrical.logic_gates.and',
  1836. 'EE_OR' : s + 'electrical.logic_gates.or',
  1837. 'EE_Inverter' : s + 'electrical.logic_gates.inverter',
  1838. 'EE_NAND' : s + 'electrical.logic_gates.nand',
  1839. 'EE_NOR' : s + 'electrical.logic_gates.nor',
  1840. 'EE_XOR' : s + 'electrical.logic_gates.xor',
  1841. 'EE_NXOR' : s + 'electrical.logic_gates.xnor',
  1842. 'EE_DTypeRSFlipFlop' : s + 'electrical.logic_gates.d_type_rs_flip-flop',
  1843. 'EE_DTypeFlipFlop' : s + 'electrical.logic_gates.d_type_flip-flop',
  1844. 'EE_DTypeFlipFlopWithClear' : s + 'electrical.logic_gates.d_type_flip-flop_with_clear',
  1845. 'EE_RSLatch' : s + 'electrical.logic_gates.rs_latch',
  1846. 'EE_SyncRSLatch' : s + 'electrical.logic_gates.synchronous_rs_latch',
  1847. 'EE_TTypeFlipFlop' : s + 'electrical.logic_gates.t_type_flip-flop',
  1848. //Miscellaneous
  1849. 'EE_Plus' : s + 'ios7.misc.flagged',
  1850. 'EE_Negative' : 'shape=line',
  1851. 'EE_InverterContact' : 'ellipse',
  1852. 'EE_Voltmeter' : s + 'electrical.instruments.voltmeter',
  1853. 'EE_Ammeter' : s + 'electrical.instruments.ampermeter',
  1854. 'EE_SineWave' : s + 'electrical.waveforms.sine_wave',
  1855. 'EE_Sawtooth' : s + 'electrical.waveforms.sawtooth',
  1856. 'EE_SquareWave' : s + 'electrical.waveforms.square_wave',
  1857. //Messaging Systems
  1858. 'EIChannelBlock' : s + 'eip.messageChannel;verticalLabelPosition=bottom;verticalAlign=top',
  1859. 'EIMessageChannelBlock' : cs,
  1860. 'EIMessageBlock' : cs,
  1861. 'EIMessageRouterBlock' : s + 'eip.content_based_router;verticalLabelPosition=bottom;verticalAlign=top',
  1862. 'EIMessageTranslatorBlock' : s + 'eip.message_translator;verticalLabelPosition=bottom;verticalAlign=top',
  1863. 'EIMessageEndpointBlock' : cs,
  1864. //Messaging Channels
  1865. 'EIPublishSubscribeChannelBlock' : cs,
  1866. 'EIDatatypeChannelBlock' : cs,
  1867. 'EIInvalidMessageChannelBlock' : cs,
  1868. 'EIDeadLetterChannelBlock' : cs,
  1869. 'EIGuaranteedDeliveryBlock' : cs,
  1870. 'EIChannelAdapterBlock' : cs,
  1871. 'EIMessagingBridgeBlock' : s + 'eip.messaging_bridge;verticalLabelPosition=bottom;verticalAlign=top',
  1872. 'EIMessageBusBlock' : cs,
  1873. //Message Construction
  1874. 'EICommandMessageBlock' : cs,
  1875. 'EIDocumentMessageBlock' : cs,
  1876. 'EIEventMessageBlock' : cs,
  1877. 'EIRequestReplyBlock' : cs,
  1878. 'EIReturnAddressBlock' : cs,
  1879. 'EICorrelationIDBlock' : cs,
  1880. 'EIMessageSequenceBlock' : cs,
  1881. 'EIMessageExpirationBlock' : cs,
  1882. //Message Routing
  1883. 'EIContentBasedRouterBlock' : s + 'eip.content_based_router;verticalLabelPosition=bottom;verticalAlign=top',
  1884. 'EIMessageFilterBlock' : s + 'eip.message_filter;verticalLabelPosition=bottom;verticalAlign=top',
  1885. 'EIDynamicRouterBlock' : s + 'eip.dynamic_router;verticalLabelPosition=bottom;verticalAlign=top',
  1886. 'EIRecipientListBlock' : s + 'eip.recipient_list;verticalLabelPosition=bottom;verticalAlign=top',
  1887. 'EISplitterBlock' : s + 'eip.splitter;verticalLabelPosition=bottom;verticalAlign=top',
  1888. 'EIAggregatorBlock' : s + 'eip.aggregator;verticalLabelPosition=bottom;verticalAlign=top',
  1889. 'EIResequencerBlock' : s + 'eip.resequencer;verticalLabelPosition=bottom;verticalAlign=top',
  1890. 'EIComposedMessageBlock' : s + 'eip.composed_message_processor;verticalLabelPosition=bottom;verticalAlign=top',
  1891. 'EIRoutingSlipBlock' : s + 'eip.routing_slip;verticalLabelPosition=bottom;verticalAlign=top',
  1892. 'EIProcessManagerBlock' : s + 'eip.process_manager;verticalLabelPosition=bottom;verticalAlign=top',
  1893. 'EIMessageBrokerBlock' : cs,
  1894. //Message Transformation
  1895. 'EIEnvelopeWrapperBlock' : s + 'eip.envelope_wrapper;verticalLabelPosition=bottom;verticalAlign=top',
  1896. 'EIContentEnricherBlock' : s + 'eip.content_enricher;verticalLabelPosition=bottom;verticalAlign=top',
  1897. 'EIContentFilterBlock' : s + 'eip.content_filter;verticalLabelPosition=bottom;verticalAlign=top',
  1898. 'EIClaimCheckBlock' : s + 'eip.claim_check;verticalLabelPosition=bottom;verticalAlign=top',
  1899. 'EINormalizerBlock' : s + 'eip.normalizer;verticalLabelPosition=bottom;verticalAlign=top',
  1900. //Messaging Endpoints
  1901. 'EIMessagingGatewayBlock' : s + 'eip.messaging_gateway;verticalLabelPosition=bottom;verticalAlign=top',
  1902. 'EITransactionalClientBlock' : s + 'eip.transactional_client;verticalLabelPosition=bottom;verticalAlign=top',
  1903. 'EIPollingConsumerBlock' : s + 'eip.polling_consumer;verticalLabelPosition=bottom;verticalAlign=top',
  1904. 'EIEventDrivenConsumerBlock' : s + 'eip.event_driven_consumer;verticalLabelPosition=bottom;verticalAlign=top',
  1905. 'EICompetingConsumersBlock' : s + 'eip.competing_consumers;verticalLabelPosition=bottom;verticalAlign=top',
  1906. 'EIMessageDispatcherBlock' : s + 'eip.message_dispatcher;verticalLabelPosition=bottom;verticalAlign=top',
  1907. 'EISelectiveConsumerBlock' : s + 'eip.selective_consumer;verticalLabelPosition=bottom;verticalAlign=top',
  1908. 'EIDurableSubscriberBlock' : cs,
  1909. 'EIServiceActivatorBlock' : s + 'eip.service_activator;verticalLabelPosition=bottom;verticalAlign=top',
  1910. //System Management
  1911. 'EIControlBusBlock' : cs,
  1912. 'EIDetourBlock' : s + 'eip.detour;verticalLabelPosition=bottom;verticalAlign=top',
  1913. 'EIWireTapBlock' : s + 'eip.wire_tap;verticalLabelPosition=bottom;verticalAlign=top',
  1914. 'EIMessageHistoryBlock' : cs,
  1915. 'EIMessageStoreBlock' : s + 'eip.message_store;verticalLabelPosition=bottom;verticalAlign=top',
  1916. 'EISmartProxyBlock' : s + 'eip.smart_proxy;verticalLabelPosition=bottom;verticalAlign=top',
  1917. 'EITestMessageBlock' : s + 'eip.test_message;verticalLabelPosition=bottom;verticalAlign=top',
  1918. 'EIChannelPurgerBlock' : s + 'eip.channel_purger;verticalLabelPosition=bottom;verticalAlign=top',
  1919. //Google Cloud Platform
  1920. 'GCPIconComputeEngineBlock' : gcpIcon + 'compute_engine',
  1921. 'GCPIconAppEngineBlock' : gcpIcon + 'app_engine',
  1922. 'GCPIconContainerEngineBlock' : gcpIcon + 'container_engine',
  1923. 'GCPIconContainerRegistryBlock' : gcpIcon + 'container_registry',
  1924. 'GCPIconCloudFunctionsBlock' : gcpIcon + 'cloud_functions',
  1925. 'GCPIconCloudStorageBlock' : gcpIcon + 'cloud_storage',
  1926. 'GCPIconCloudSQLBlock' : gcpIcon + 'cloud_sql',
  1927. 'GCPIconCloudBigtableBlock' : gcpIcon + 'cloud_bigtable',
  1928. 'GCPIconCloudDatastoreBlock' : gcpIcon + 'cloud_datastore',
  1929. 'GCPIconPersistentDiskBlock' : gcpIcon + 'persistent_disk',
  1930. 'GCPIconCloudVirtualNetworkBlock' : ss + 'gcp.networking.cloud_virtual_network;verticalLabelPosition=bottom;verticalAlign=top',
  1931. 'GCPIconCloudLoadBalancingBlock' : gcpIcon + 'cloud_load_balancing',
  1932. 'GCPIconCloudCDNBlock' : gcpIcon + 'cloud_cdn',
  1933. 'GCPIconCloudInterconnectBlock' : gcpIcon + 'dedicated_interconnect',
  1934. 'GCPIconCloudInterconnectBlock2' : gcpIcon + 'dedicated_interconnect',
  1935. 'GCPIconCloudDNSBlock' : gcpIcon + 'cloud_dns',
  1936. 'GCPIconBigQueryBlock' : gcpIcon + 'bigquery',
  1937. 'GCPIconCloudDataflowBlock' : gcpIcon + 'cloud_dataflow',
  1938. 'GCPIconCloudDataprocBlock' : gcpIcon + 'cloud_dataproc',
  1939. 'GCPIconCloudDatalabBlock' : gcpIcon + 'cloud_datalab',
  1940. 'GCPIconCloudPubSubBlock' : gcpIcon + 'cloud_pubsub',
  1941. 'GCPIconGenomicsBlock' : gcpIcon + 'genomics',
  1942. 'GCPIconCloudMachineLearningServicesBlock' : gcpIcon + 'cloud_machine_learning',
  1943. 'GCPIconCloudMachineLearningServicesBlock2' : gcpIcon + 'cloud_machine_learning',
  1944. 'GCPIconVisionAPIBlock' : gcpIcon + 'cloud_vision_api',
  1945. 'GCPIconVisionAPIBlock2' : gcpIcon + 'cloud_vision_api',
  1946. 'GCPIconSpeechAPIBlock' : gcpIcon + 'cloud_speech_api',
  1947. 'GCPIconSpeechAPIBlock2' : gcpIcon + 'cloud_speech_api',
  1948. 'GCPIconNaturalLanguageAPIBlock' : gcpIcon + 'cloud_natural_language_api',
  1949. 'GCPIconNaturalLanguageAPIBlock2' : gcpIcon + 'cloud_natural_language_api',
  1950. 'GCPIconTranslateAPIBlock' : gcpIcon + 'cloud_translation_api',
  1951. 'GCPIconTranslateAPIBlock2' : gcpIcon + 'cloud_translation_api',
  1952. 'GCPIconStackdriverOverviewBlock' : gcpIcon + 'stackdriver',
  1953. 'GCPIconStackdriverOverviewBlock2' : gcpIcon + 'stackdriver',
  1954. 'GCPIconMonitoringBlock' : gcpIcon + 'cloud_deployment_manager',
  1955. 'GCPIconLoggingBlock' : gcpIcon + 'logging',
  1956. 'GCPIconErrorReportingBlock' : gcpIcon + 'error_reporting',
  1957. 'GCPIconTraceBlock' : gcpIcon + 'trace',
  1958. 'GCPIconDebuggerBlock' : gcpIcon + 'debugger',
  1959. 'GCPIconDeploymentManagerBlock' : gcpIcon + 'cloud_deployment_manager',
  1960. 'GCPIconDeploymentManagerBlock2' : gcpIcon + 'cloud_deployment_manager',
  1961. 'GCPIconCloudEndpointsBlock' : gcpIcon + 'cloud_endpoints',
  1962. 'GCPIconCloudToolsForPowerShellBlock' : gcpIcon + 'cloud_tools_for_powershell',
  1963. 'GCPIconCloudToolsForVisualStudioBlock' : gcpIcon + 'cloud_tools_for_powershell',
  1964. 'GCPIconCloudIAMBlock' : gcpIcon + 'cloud_iam',
  1965. 'GCPIconGCPLogoBlock' : gcpIcon + 'placeholder',
  1966. 'GCPIconGCPLogoBlock2' : gcpIcon + 'placeholder',
  1967. 'GCPIconBlankBlock' : gcpIcon + 'blue_hexagon',
  1968. 'GCPIconBlankBlock2' : gcpIcon + 'blue_hexagon',
  1969. 'GCPIconAPIAnalyticsBlock' : gcpIcon + 'api_analytics',
  1970. 'GCPIconApigeeAPIPlatformBlock' : gcpIcon + 'apigee_api_platform',
  1971. 'GCPIconApigeeSenseBlock' : gcpIcon + 'apigee_sense',
  1972. 'GCPIconAPIMonetizationBlock' : gcpIcon + 'api_monetization',
  1973. 'GCPIconCloudEndpointsBlock2' : gcpIcon + 'cloud_endpoints',
  1974. 'GCPIconDeveloperPortalBlock' : gcpIcon + 'developer_portal',
  1975. 'GCPIconBigQueryBlock2' : gcpIcon + 'bigquery',
  1976. 'GCPIconCloudComposerBlock' : gcpIcon + 'cloud_composer',
  1977. 'GCPIconCloudDataflowBlock2' : gcpIcon + 'cloud_dataflow',
  1978. 'GCPIconCloudDatalabBlock2' : gcpIcon + 'cloud_datalab',
  1979. 'GCPIconCloudDataprepBlock' : gcpIcon + 'cloud_dataprep',
  1980. 'GCPIconCloudDataprocBlock2' : gcpIcon + 'cloud_dataproc',
  1981. 'GCPIconCloudPubSubBlock2' : gcpIcon + 'cloud_pubsub',
  1982. 'GCPIconDataStudioBlock' : gcpIcon + 'data_studio',
  1983. 'GCPIconGenomicsBlock2' : gcpIcon + 'genomics',
  1984. 'GCPIconAdvancedSolutionsLabBlock' : gcpIcon + 'advanced_solutions_lab',
  1985. 'GCPIconCloudAutoMLBlock' : gcpIcon + 'cloud_automl',
  1986. 'GCPIconCloudNaturalLanguageAPIBlock' : gcpIcon + 'cloud_natural_language_api',
  1987. 'GCPIconCloudJobsAPIBlock' : gcpIcon + 'cloud_jobs_api',
  1988. 'GCPIconCloudTPUBlock' : gcpIcon + 'cloud_tpu',
  1989. 'GCPIconCloudMachineLearningBlock' : gcpIcon + 'cloud_machine_learning',
  1990. 'GCPIconCloudVisionAPIBlock' : gcpIcon + 'cloud_vision_api',
  1991. 'GCPIconCloudTranslationAPIBlock' : gcpIcon + 'cloud_translation_api',
  1992. 'GCPIconDialogflowEnterpriseEditionBlock' : gcpIcon + 'dialogflow_enterprise_edition',
  1993. 'GCPIconCloudSpeechAPIBlock' : gcpIcon + 'cloud_speech_api',
  1994. 'GCPIconCloudTexttoSpeechBlock' : gcpIcon + 'cloud_text_to_speech',
  1995. 'GCPIconCloudVideoIntelligenceAPIBlock' : gcpIcon + 'cloud_video_intelligence_api',
  1996. 'GCPIconAppEngineBlock2' : gcpIcon + 'app_engine',
  1997. 'GCPIconCloudToolsforVisualStudioBlock' : gcpIcon + 'cloud_tools_for_powershell',
  1998. 'GCPIconCloudDeploymentManagerBlock' : gcpIcon + 'cloud_deployment_manager',
  1999. 'GCPIconCloudFunctionsBlock2' : gcpIcon + 'cloud_functions',
  2000. 'GCPIconContainerBuilderBlock' : gcpIcon + 'container_builder',
  2001. 'GCPIconCloudSDKBlock' : gcpIcon + 'placeholder',
  2002. 'GCPIconCloudSourceRepositoriesBlock' : gcpIcon + 'placeholder',
  2003. 'GCPIconContainerRegistryBlock2' : gcpIcon + 'container_registry',
  2004. 'GCPIconCloudTestLabBlock' : gcpIcon + 'placeholder',
  2005. 'GCPIconGPUBlock' : gcpIcon + 'gpu',
  2006. 'GCPIconContainerEngineBlock2' : gcpIcon + 'container_engine',
  2007. 'GCPIconTransferApplianceBlock' : gcpIcon + 'transfer_appliance',
  2008. 'GCPIconCloudToolsforPowerShellBlock' : gcpIcon + 'cloud_tools_for_powershell',
  2009. 'GCPIconCloudToolsforIntelliJBlock' : gcpIcon + 'placeholder',
  2010. 'GCPIconCloudToolsforAndroidStudioBlock' : gcpIcon + 'placeholder',
  2011. 'GCPIconGooglePluginforEclipseBlock' : gcpIcon + 'placeholder',
  2012. 'GCPIconContainerOptimizedOSBlock' : gcpIcon + 'container_optimized_os',
  2013. 'GCPIconComputeEngineBlock2' : gcpIcon + 'compute_engine',
  2014. 'GCPIconBeyondCorpBlock' : gcpIcon + 'beyondcorp',
  2015. 'GCPIconCloudIAMBlock2' : gcpIcon + 'cloud_iam',
  2016. 'GCPIconCloudResourceManagerBlock' : gcpIcon + 'cloud_iam',
  2017. 'GCPIconCloudSecurityCommandCenterBlock' : gcpIcon + 'cloud_security_command_center',
  2018. 'GCPIconCloudSecurityScannerBlock' : gcpIcon + 'cloud_security_scanner',
  2019. 'GCPIconDataLossPreventionAPIBlock' : gcpIcon + 'data_loss_prevention_api',
  2020. 'GCPIconIdentityAwareProxyBlock' : gcpIcon + 'identity_aware_proxy',
  2021. 'GCPIconKeyManagementServiceBlock' : gcpIcon + 'key_management_service',
  2022. 'GCPIconSecurityKeyEnforcementBlock' : gcpIcon + 'security_key_enforcement',
  2023. 'GCPIconCloudIoTCoreBlock' : gcpIcon + 'cloud_iot_core',
  2024. 'GCPIconCloudAPIsBlock' : gcpIcon + 'cloud_apis',
  2025. 'GCPIconCloudBillingAPIBlock' : gcpIcon + 'placeholder',
  2026. 'GCPIconCloudConsoleBlock' : gcpIcon + 'placeholder',
  2027. 'GCPIconCloudDeploymentManagerBlock2' : gcpIcon + 'cloud_deployment_manager',
  2028. 'GCPIconCloudMobileAppBlock' : gcpIcon + 'placeholder',
  2029. 'GCPIconCloudShellBlock' : gcpIcon + 'placeholder',
  2030. 'GCPIconDebuggerBlock2' : gcpIcon + 'debugger',
  2031. 'GCPIconErrorReportingBlock2' : gcpIcon + 'error_reporting',
  2032. 'GCPIconLoggingBlock2' : gcpIcon + 'logging',
  2033. 'GCPIconMonitoringBlock2' : gcpIcon + 'cloud_deployment_manager',
  2034. 'GCPIconStackdriverBlock' : gcpIcon + 'stackdriver',
  2035. 'GCPIconTraceBlock2' : gcpIcon + 'trace',
  2036. 'GCPIconCloudArmorBlock' : gcpIcon + 'cloud_armor',
  2037. 'GCPIconCloudCDNBlock2' : gcpIcon + 'cloud_cdn',
  2038. 'GCPIconCloudDNSBlock2' : gcpIcon + 'cloud_dns',
  2039. 'GCPIconCloudExternalIPAddressesBlock' : gcpIcon + 'cloud_external_ip_addresses',
  2040. 'GCPIconCloudFirewallRulesBlock' : gcpIcon + 'cloud_firewall_rules',
  2041. 'GCPIconCloudLoadBalancingBlock2' : gcpIcon + 'cloud_load_balancing',
  2042. 'GCPIconCloudNetworkBlock' : gcpIcon + 'cloud_network',
  2043. 'GCPIconCloudRouterBlock' : gcpIcon + 'cloud_router',
  2044. 'GCPIconCloudRoutesBlock' : gcpIcon + 'cloud_routes',
  2045. 'GCPIconCloudVPNBlock' : gcpIcon + 'cloud_vpn',
  2046. 'GCPIconDedicatedInterconnectBlock' : gcpIcon + 'dedicated_interconnect',
  2047. 'GCPIconPartnerInterconnectBlock' : gcpIcon + 'partner_interconnect',
  2048. 'GCPIconPremiumNetworkTierBlock' : gcpIcon + 'premium_network_tier',
  2049. 'GCPIconStandardNetworkTierBlock' : gcpIcon + 'standard_network_tier',
  2050. 'GCPIconVirtualPrivateCloudBlock' : gcpIcon + 'virtual_private_cloud',
  2051. 'GCPIconCloudBigtableBlock2' : gcpIcon + 'cloud_bigtable',
  2052. 'GCPIconCloudDatastoreBlock2' : gcpIcon + 'cloud_datastore',
  2053. 'GCPIconCloudFilestoreBlock' : gcpIcon + 'cloud_filestore',
  2054. 'GCPIconCloudMemorystoreBlock' : gcpIcon + 'cloud_memorystore',
  2055. 'GCPIconCloudSpannerBlock' : gcpIcon + 'cloud_spanner',
  2056. 'GCPIconCloudSQLBlock2' : gcpIcon + 'cloud_sql',
  2057. 'GCPIconCloudStorageBlock2' : gcpIcon + 'cloud_storage',
  2058. 'GCPIconPersistentDiskBlock2' : gcpIcon + 'persistent_disk',
  2059. 'GCPIconGoogleCloudPlatformBlock' : gcpIcon + 'google_cloud_platform',
  2060. 'GCPIconBlueHexagonBlock' : gcpIcon + 'blue_hexagon',
  2061. 'GCPIconGenericBlock' : gcpIcon + 'placeholder',
  2062. 'GCPIconPredictionAPIBlock' : gcpIcon + 'prediction_api',
  2063. //'GCPGoogleCloudPlatformLockupBlock' : gcpIcon + 'gcp_google_cloud_platform_lockup',
  2064. 'GCPAutoScalingModifier' : 'shape=mxgraph.gcp2.modifiers_autoscaling;fillColor=#757575;strokeColor=none;',
  2065. 'GCPCustomVirtualMachineModifier' : 'shape=mxgraph.gcp2.modifiers_custom_virtual_machine;fillColor=#757575;strokeColor=none;',
  2066. 'GCPHighCPUMachineModifier' : 'shape=mxgraph.gcp2.modifiers_high_cpu_machine;fillColor=#757575;strokeColor=none;',
  2067. 'GCPHighMemoryMachineModifier' : 'shape=mxgraph.gcp2.modifiers_high_memory_machine;fillColor=#757575;strokeColor=none;',
  2068. 'GCPPreemptableVSModifier' : 'shape=mxgraph.gcp2.modifiers_preemptable_vm;fillColor=#757575;strokeColor=none;',
  2069. 'GCPSharedCoreMachineF1Modifier' : 'shape=mxgraph.gcp2.modifiers_shared_core_machine_f1;fillColor=#757575;strokeColor=none;',
  2070. 'GCPSharedCoreMachineG1Modifier' : 'shape=mxgraph.gcp2.modifiers_shared_core_machine_g1;fillColor=#757575;strokeColor=none;',
  2071. 'GCPStandardMachineModifier' : 'shape=mxgraph.gcp2.modifiers_standard_machine;fillColor=#757575;strokeColor=none;',
  2072. 'GCPStorageModifier' : 'shape=mxgraph.gcp2.modifiers_storage;fillColor=#757575;strokeColor=none;',
  2073. 'GCPAppEngineProductCard' : cs,
  2074. 'GCPCloudDataflowProductCard' : cs,
  2075. 'GCPCloudDataprocProductCard' : cs,
  2076. 'GCPComputeEngineProductCard' : cs,
  2077. 'GCPContainerEngineProductCard' : cs,
  2078. //Kubernetes Icons
  2079. 'CronjobLabeledKub19' : kupIcon + 'cronjob',
  2080. 'CronjobKub19' : kupIcon + 'cronjob',
  2081. 'DeployLabeledKub19' : kupIcon + 'deploy',
  2082. 'DeployKub19' : kupIcon + 'deploy',
  2083. 'DsLabeledKub19' : kupIcon + 'ds',
  2084. 'DsKub19' : kupIcon + 'ds',
  2085. 'JobLabeledKub19' : kupIcon + 'job',
  2086. 'JobKub19' : kupIcon + 'job',
  2087. 'PodLabeledKub19' : kupIcon + 'pod',
  2088. 'PodKub19' : kupIcon + 'pod',
  2089. 'RsLabeledKub19' : kupIcon + 'rs',
  2090. 'RsKub19' : kupIcon + 'rs',
  2091. 'StsLabeledKub19' : kupIcon + 'sts',
  2092. 'StsKub19' : kupIcon + 'sts',
  2093. 'PvLabeledKub19' : kupIcon + 'pv',
  2094. 'PvKub19' : kupIcon + 'pv',
  2095. 'PvcLabeledKub19' : kupIcon + 'pvc',
  2096. 'PvcKub19' : kupIcon + 'pvc',
  2097. 'ScLabeledKub19' : kupIcon + 'sc',
  2098. 'ScKub19' : kupIcon + 'sc',
  2099. 'VolLabeledKub19' : kupIcon + 'vol',
  2100. 'VolKub19' : kupIcon + 'vol',
  2101. 'EpLabeledKub19' : kupIcon + 'ep',
  2102. 'EpKub19' : kupIcon + 'ep',
  2103. 'IngLabeledKub19' : kupIcon + 'ing',
  2104. 'IngKub19' : kupIcon + 'ing',
  2105. 'NetpolLabeledKub19' : kupIcon + 'netpol',
  2106. 'NetpolKub19' : kupIcon + 'netpol',
  2107. 'SvcLabeledKub19' : kupIcon + 'svc',
  2108. 'SvcKub19' : kupIcon + 'svc',
  2109. 'CrdLabeledKub19' : kupIcon + 'crd',
  2110. 'CrdKub19' : kupIcon + 'crd',
  2111. 'CroleLabeledKub19' : kupIcon + 'c_role',
  2112. 'CroleKub19' : kupIcon + 'c_role',
  2113. 'GroupLabeledKub19' : kupIcon + 'group',
  2114. 'GroupKub19' : kupIcon + 'group',
  2115. 'RbLabeledKub19' : kupIcon + 'rb',
  2116. 'RbKub19' : kupIcon + 'rb',
  2117. 'RoleLabeledKub19' : kupIcon + 'role',
  2118. 'RoleKub19' : kupIcon + 'role',
  2119. 'SaLabeledKub19' : kupIcon + 'sa',
  2120. 'SaKub19' : kupIcon + 'sa',
  2121. 'UserLabeledKub19' : kupIcon + 'user',
  2122. 'UserKub19' : kupIcon + 'user',
  2123. 'CmResourceLabeledKub19' : kupIcon + 'cm',
  2124. 'CmKub19' : kupIcon + 'cm',
  2125. 'SecretLabeledKub19' : kupIcon + 'secret',
  2126. 'SecretKub19' : kupIcon + 'secret',
  2127. 'HpaLabeledKub19' : kupIcon + 'hpa',
  2128. 'HpaKub19' : kupIcon + 'hpa',
  2129. 'LimitsLabeledKub19' : kupIcon + 'limits',
  2130. 'LimitsKub19' : kupIcon + 'limits',
  2131. 'QuotaLabeledKub19' : kupIcon + 'quota',
  2132. 'QuotaKub19' : kupIcon + 'quota',
  2133. 'CrbLabeledKub19' : kupIcon + 'crb',
  2134. 'CrbKub19' : kupIcon + 'crb',
  2135. 'LogoKub19' : 'image;aspect=fixed;html=1;align=center;image=img/lib/mscae/Kubernetes.svg',
  2136. 'NsLabeledKub19' : kupIcon + 'ns',
  2137. 'NsKub19' : kupIcon + 'ns',
  2138. 'PspLabeledKub19' : kupIcon + 'psp',
  2139. 'PspKub19' : kupIcon + 'psp',
  2140. 'EtcdLabeledKub19' : kupIcon + 'etcd',
  2141. 'EtcdKub19' : kupIcon + 'etcd',
  2142. 'MasterLabeledKub19' : kupIcon + 'master',
  2143. 'MasterKub19' : kupIcon + 'master',
  2144. 'NodeLabeledKub19' : kupIcon + 'node',
  2145. 'NodeKub19' : kupIcon + 'node',
  2146. 'ApiLabeledKub19' : kupIcon + 'api',
  2147. 'CcmLabeledKub19' : kupIcon + 'c_c_m',
  2148. 'CmLabeledKub19' : kupIcon + 'c_m',
  2149. 'KproxyLabeledKub19' : kupIcon + 'node',
  2150. 'KubeletLabeledKub19' : kupIcon + 'kubelet',
  2151. 'SchedLabeledKub19' : kupIcon + 'sched',
  2152. //Equation
  2153. 'Equation' : cs,
  2154. //Walls
  2155. 'fpWall' : cs,
  2156. //Rooms
  2157. //Doors & Windows
  2158. 'fpWindow' : s + 'floorplan.window;strokeWidth=3',
  2159. 'fpOpening' : 'shape=rect',
  2160. 'fpDoor' : cs,
  2161. 'fpDoubleDoor' : cs,
  2162. //Stairs
  2163. 'fpStairs' : s + 'floorplan.stairs;direction=north',
  2164. 'fpStairsDirectional' : s + 'floorplan.stairs;direction=north;verticalAlign=bottom',
  2165. // 'fpStairsCurved' NA
  2166. // 'fpStairsCurvedWide' NA
  2167. //Desks
  2168. // 'fpDeskEndSegment' NA
  2169. 'fpDeskLongSegment' : '',
  2170. 'fpDeskShortSegment' : '',
  2171. // 'fpDeskSmallCornerSegment' NA
  2172. 'fpDeskLargeCornerSegment' : s + 'floorplan.desk_corner',
  2173. // 'fpDeskMediumCornerSegment' NA
  2174. // 'fpDeskRoundedLSegment' NA
  2175. // 'fpDeskRoundedCornerSegment' NA
  2176. //Cubicle walls
  2177. 'fpCubiclePanel' : s + 'floorplan.wall;wallThickness=3',
  2178. 'fpCubicleWorkstation' : s + 'floorplan.wallU;wallThickness=3',
  2179. 'fpCubicleCorner5x5' : s + 'floorplan.wallCorner;wallThickness=3',
  2180. 'fpCubicleCorner6x6' : s + 'floorplan.wallCorner;wallThickness=3',
  2181. 'fpCubicleCorner8x8' : s + 'floorplan.wallCorner;wallThickness=3',
  2182. 'fpCubicleCorner8x6' : s + 'floorplan.wallCorner;wallThickness=3',
  2183. 'fpCubicleCornerOpen6x4' : s + 'floorplan.wallCorner;wallThickness=3',
  2184. 'fpCubicleDouble14x8' : s + 'floorplan.wallU;wallThickness=3',
  2185. 'fpCubicleEnclosed11x9' : s + 'floorplan.wallU;wallThickness=3',
  2186. //Tables & Chairs
  2187. 'fpTableConferenceOval' : 'ellipse',
  2188. 'fpTableConferenceBoat' : '',
  2189. 'fpTableConferenceRectangle' : '',
  2190. 'fpTableDiningRound' : 'ellipse',
  2191. 'fpTableDiningSquare' : '',
  2192. 'fpChairOffice' : s + 'floorplan.office_chair',
  2193. 'fpChairExecutive' : s + 'floorplan.office_chair',
  2194. 'fpChairLobby' : s + 'floorplan.office_chair',
  2195. 'fpChairDining' : s + 'floorplan.chair',
  2196. 'fpChairBarstool' : 'ellipse',
  2197. //Cubicles - Prebuilt
  2198. //Tables - Prebuilt
  2199. //Cabinets - we don't have corresponding stencils, just rounded rectangles
  2200. 'fpCabinetBasic' : '',
  2201. // 'fpCabinetCornerLarge' NA
  2202. 'fpCabinetDoubleWide' : '',
  2203. 'fpCabinetDoubleWithShelves' : '',
  2204. 'fpCabinetShelvesBasic' : '',
  2205. 'fpCabinetShelvesDouble' : '',
  2206. 'fpCabinetBasicWithShelves' : '',
  2207. 'fpCabinetsAboveDeskShelves' : '',
  2208. //Restroom
  2209. 'fpRestroomToiletPrivate' : s + 'floorplan.toilet',
  2210. 'fpRestroomToiletPublic' : s + 'floorplan.toilet',
  2211. // 'fpRestroomBidet' NA
  2212. 'fpRestroomLights' : cs,
  2213. 'fpRestroomSinks' : cs,
  2214. // 'fpRestroomGrabBar' NA
  2215. 'fpRestroomBathtub' : s + 'floorplan.bathtub;direction=south',
  2216. 'fpRestroomShower' : s + 'floorplan.shower;flipH=1',
  2217. // 'fpRestroomCornerSink' NA
  2218. 'fpRestroomPedastalSink' : s + 'floorplan.sink_1',
  2219. 'fpRestroomCountertop' : '',
  2220. 'fpRestroomMirror' : 'shape=line;strokeWidth=3',
  2221. // 'fpDresserOrnateMirror' NA
  2222. // 'fpRestroomToiletPaper' NA
  2223. 'fpRestroomStalls' : cs,
  2224. //Beds
  2225. 'fpBedDouble' : s + 'floorplan.bed_double',
  2226. 'fpBedSingle' : s + 'floorplan.bed_single',
  2227. 'fpBedQueen' : s + 'floorplan.bed_double',
  2228. 'fpBedKing' : s + 'floorplan.bed_double',
  2229. 'fpBedDoubleWithTrundle' : s + 'floorplan.bed_double',
  2230. 'fpBedBunk' : s + 'floorplan.bed_double',
  2231. // 'fpBedBunkL' NA
  2232. // 'fpBedCrib' NA
  2233. 'fpBedBassinet' : s + 'pid.fittings.compensator',
  2234. //Dressers
  2235. // 'fpDresserChest' NA
  2236. // 'fpDresserMirrorDresser' NA
  2237. // 'fpClosetRod' NA
  2238. // 'fpDresserOrnateMirror' NA
  2239. //Appliances
  2240. 'fpApplianceWasher' : '',
  2241. 'fpApplianceDryer' : '',
  2242. 'fpApplianceWaterHeater' : 'ellipse',
  2243. // 'fpApplianceRefrigerator' NA
  2244. 'fpApplianceStoveOven' : s + 'floorplan.range_1',
  2245. 'fpStoveOvenSixBurner' : s + 'floorplan.range_2',
  2246. 'fpApplianceDishwasher' : '',
  2247. //Kitchen
  2248. 'fpKitchenSink' : s + 'floorplan.sink_2',
  2249. 'fpKitchenDoubleSink' : s + 'floorplan.sink_double',
  2250. 'fpKitchenCountertop' : '',
  2251. 'fpKitchenCountertopCorner' : s + 'floorplan.desk_corner',
  2252. //Couches
  2253. 'fpCouchLoveSeat' : s + 'floorplan.couch',
  2254. 'fpCouchSofa' : s + 'floorplan.couch',
  2255. // 'fpCouchSectional' NA
  2256. 'fpCouchOttoman' : '',
  2257. // 'fpCouchPillow' NA
  2258. //Technology
  2259. 'fpMiscDesktopComputer' : s + 'floorplan.workstation',
  2260. 'fpMiscLaptopComputer' : s + 'floorplan.laptop',
  2261. 'fpComputerMonitor' : s + 'floorplan.flat_tv',
  2262. 'fpCRTTelevision' : s + 'floorplan.flat_tv',
  2263. // 'fpMiscProjector' NA
  2264. // 'fpMiscProjectorScreen' NA
  2265. //Misc Floorplan
  2266. 'fpMiscIndoorPlant' : s + 'floorplan.plant',
  2267. // 'fpMiscPodium' NA
  2268. 'fpPiano' : s + 'floorplan.piano',
  2269. // 'fpPianoBench' : 'absoluteArcSize=1;arcSize=' + arcSize + ';rounded=1',
  2270. //Equipment
  2271. 'PEAxialCompressor' : s + 'pid.compressors.centrifugal_compressor_-_turbine_driven;verticalLabelPosition=bottom;verticalAlign=top',
  2272. 'PECentrifugalCompressor' : s + 'pid.compressors.centrifugal_compressor;verticalLabelPosition=bottom;verticalAlign=top',
  2273. 'PECentrifugalCompressor2' : s + 'pid.compressors.centrifugal_compressor_-_turbine_driven;verticalLabelPosition=bottom;verticalAlign=top',
  2274. // 'PECentrifugalCompressor3' NA
  2275. 'PEReciprocationCompressor' : s + 'pid.compressors.reciprocating_compressor;verticalLabelPosition=bottom;verticalAlign=top',
  2276. 'PERotaryCompressorBlock' : s + 'pid.compressors.rotary_compressor;verticalLabelPosition=bottom;verticalAlign=top',
  2277. 'PERotaryCompressor2Block' : s + 'pid.compressors.compressor_and_silencers;verticalLabelPosition=bottom;verticalAlign=top',
  2278. 'PEConveyorBlock' : s + 'pid2misc.conveyor;verticalLabelPosition=bottom;verticalAlign=top',
  2279. // 'PEOverheadConveyorBlock' NA
  2280. // 'PEScraperConveyorBlock' NA
  2281. // 'PEScrewConveyorBlock' NA
  2282. // 'PEPositiveDisplacementBlock' NA
  2283. // 'PEPositiveDisplacement2' NA
  2284. 'PEElevator1Block' : s + 'pid.misc.bucket_elevator;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
  2285. // 'PEElevator2Block' NA
  2286. // 'PEHoistBlock' NA
  2287. // 'PESkipHoistBlock' NA
  2288. // 'PEMotorBlock' NA
  2289. // 'PEDieselMotorBlock' NA
  2290. // 'PEElectricMotorBlock' NA
  2291. // 'PELiquidRingVacuumBlock' NA
  2292. // 'PETurbineDriverBlock' NA
  2293. // 'PEDoubleFlowTurbineBlock' NA
  2294. 'PEAgitatorMixerBlock' : s + 'pid.agitators.agitator_(propeller);verticalLabelPosition=bottom;verticalAlign=top',
  2295. 'PEDrumBlock' : s + 'pid.vessels.drum_or_condenser;verticalLabelPosition=bottom;verticalAlign=top',
  2296. 'PETankEquipmentBlock' : s + 'pid.vessels.tank;verticalLabelPosition=bottom;verticalAlign=top',
  2297. // 'PECentrifugalBlower' NA
  2298. // 'PEAlkylationBlock' NA
  2299. // 'PEBoomLoaderBlock' NA
  2300. // 'PEFluidCatalyticCrackingBlock' NA
  2301. // 'PEFluidCookingBlock' NA
  2302. // 'PEFluidizedReactorBlock' NA
  2303. // 'PETubularBlock' NA
  2304. // 'PEReformerBlock' NA
  2305. 'PEMixingReactorBlock' : s + 'pid.vessels.mixing_reactor;verticalLabelPosition=bottom;verticalAlign=top',
  2306. // 'PEHydrodesulferizationBlock' NA
  2307. // 'PEHydrocrackingBlock' NA
  2308. 'PEPlateTowerBlock' : s + 'pid2misc.column;columnType=baffle;verticalLabelPosition=bottom;verticalAlign=top',
  2309. 'PEPackedTowerBlock' : s + 'pid2misc.column;columnType=fixed;verticalLabelPosition=bottom;verticalAlign=top',
  2310. // 'PEAutomaticStokerBlock' NA
  2311. // 'PEOilBurnerBlock' NA
  2312. // 'PECounterflowForcedDraftBlock' NA
  2313. // 'PECounterflowNaturalDraftBlock' NA
  2314. // 'PECrossflowInductedBlock' NA
  2315. 'PEFurnaceBlock' : s + 'pid.vessels.furnace;verticalLabelPosition=bottom;verticalAlign=top',
  2316. // 'PEChimneyTowerBlock' NA
  2317. //Piping
  2318. 'PEOneToMany' : cs, //TODO
  2319. 'PEMultilines' : cs, //TODO
  2320. 'PEMidArrow' : 'shape=triangle;anchorPointDirection=0',
  2321. 'PEButtWeld' : s + 'sysml.x',
  2322. 'PETopToTop' : s + 'pid.vessels.container,_tank,_cistern',
  2323. // 'PESonicSignal' NA
  2324. 'PENuclear' : s + 'electrical.waveforms.sine_wave',
  2325. // 'PEPneumatic' NA
  2326. // 'PEHydraulicSignalLine' NA
  2327. 'PEMechanicalLink' : 'ellipse',
  2328. 'PESolderedSolvent' : 'ellipse',
  2329. 'PEDoubleContainment' : 'shape=hexagon;perimeter=hexagonPerimeter2',
  2330. 'PEFlange' : s + 'pid.piping.double_flange',
  2331. 'PEFlange2' : s + 'pid.piping.flange_in;flipH=1',
  2332. 'PEEndCap' : s + 'pid.piping.cap',
  2333. 'PEEndCap2' : s + 'pid.vessels.container,_tank,_cistern;direction=north',
  2334. 'PEBreather' : s + 'pid.piping.breather',
  2335. 'PEElectronicallyInsulated' : s + 'pid.piping.double_flange',
  2336. 'PEReducer' : s + 'pid.piping.concentric_reducer',
  2337. 'PEInlineMixer' : s + 'pid.piping.in-line_mixer',
  2338. // 'PESeparator' NA
  2339. // 'PEBurstingDisc' NA
  2340. 'PEFlameArrester' : s + 'pid.piping.flame_arrestor',
  2341. // 'PEFlameArrester2' NA
  2342. 'PEDetonationArrester' : s + 'pid.piping.detonation_arrestor',
  2343. // 'PEDrainSilencer' NA
  2344. 'PETriangleSeparator' : 'shape=triangle;direction=west;anchorPointDirection=0',
  2345. // 'PETriangleSeparator2' NA
  2346. 'PETundish' : s + 'ios7.misc.left',
  2347. 'PEOpenVent' : s + 'pid.vessels.vent_(bent)',
  2348. // 'PESiphonDrain' NA
  2349. 'PERemovableSpool' : s + 'pid.piping.removable_spool',
  2350. 'PEYTypeStrainer' : s + 'pid.piping.y-type_strainer',
  2351. 'PEDiverterValve' : s + 'pid.piping.diverter_valve',
  2352. 'PEPulsationDampener' : s + 'pid.piping.pulsation_dampener',
  2353. 'PEDuplexStrainer' : s + 'pid.piping.duplex_strainer',
  2354. 'PEBasketStrainer' : s + 'pid.piping.basket_strainer',
  2355. 'PEVentSilencer' : s + 'pid.piping.vent_silencer',
  2356. 'PEInlineSilencer' : s + 'pid.piping.in-line_silencer',
  2357. 'PESteamTrap' : s + 'pid.piping.steam_trap',
  2358. 'PEDesuperheater' : s + 'pid.piping.desuper_heater',
  2359. 'PEEjectorOrEductor' : s + 'pid.fittings.injector',
  2360. 'PEExhaustHead' : s + 'pid.piping.exhaust_head',
  2361. 'PERotaryValve' : s + 'pid.piping.rotary_valve',
  2362. 'PEExpansionJoint' : s + 'pid.piping.expansion_joint',
  2363. //Vessels
  2364. 'PEVesselBlock' : cs,
  2365. 'PEOpenTankBlock' : s + 'pid.vessels.container,_tank,_cistern;verticalLabelPosition=bottom;verticalAlign=top', //not all versions supported
  2366. 'PEOpenTopTank' : s + 'pid.vessels.container,_tank,_cistern;verticalLabelPosition=bottom;verticalAlign=top',
  2367. 'PEClosedTankBlock' : cs,
  2368. 'PEStorageSphereBlock' : s + 'pid.vessels.storage_sphere;verticalLabelPosition=bottom;verticalAlign=top',
  2369. 'PEColumnBlock' : cs,
  2370. 'PEBagBlock' : s + 'pid.vessels.bag;verticalLabelPosition=bottom;verticalAlign=top',
  2371. 'PEGasCylinderBlock' : s + 'pid.vessels.gas_bottle;verticalLabelPosition=bottom;verticalAlign=top',
  2372. 'PEGasHolderBlock' : s + 'pid.vessels.gas_holder;verticalLabelPosition=bottom;verticalAlign=top',
  2373. 'PEClarifierBlock' : s + 'pid.vessels.bunker_(conical_bottom);verticalLabelPosition=bottom;verticalAlign=top',
  2374. 'PETankBlock' : s + 'pid.vessels.tank_(conical_roof);verticalLabelPosition=bottom;verticalAlign=top',
  2375. 'PETrayColumnBlock' : s + 'pid2misc.column;columnType=tray;verticalLabelPosition=bottom;verticalAlign=top',
  2376. 'PEReactionVesselBlock' : s + 'pid.vessels.reactor;verticalLabelPosition=bottom;verticalAlign=top',
  2377. 'PEBin' : s + 'pid.vessels.tank_(conical_bottom)',
  2378. 'PEDomeRoofTank' : s + 'pid.vessels.tank_(dished_roof)',
  2379. 'PEConeRoofTank' : s + 'pid.vessels.tank_(conical_roof)',
  2380. // 'PEInternalFloatingRoof' NA
  2381. // 'PEDoubleWallTank' NA
  2382. // 'PEOnionTank' NA
  2383. //Heat Exchangers
  2384. 'PEBoilerBlock' : s + 'pid.misc.boiler_(dome);verticalLabelPosition=bottom;verticalAlign=top',
  2385. 'PEEquipmentBoilerBlock' : s + 'pid.misc.boiler_(dome);verticalLabelPosition=bottom;verticalAlign=top',
  2386. 'PEReboilerBlock' : s + 'pid.heat_exchangers.reboiler;verticalLabelPosition=bottom;verticalAlign=top',
  2387. 'PECondenserBlock' : s + 'pid.heat_exchangers.heat_exchanger_(straight_tubes);verticalLabelPosition=bottom;verticalAlign=top',
  2388. 'PEEquipmentCondenserBlock' : s + 'pid.heat_exchangers.condenser;verticalLabelPosition=bottom;verticalAlign=top',
  2389. // 'PEEvaporativeCondenserBlock' NA
  2390. 'PECoolingTowerBlock' : s + 'pid.misc.cooling_tower;verticalLabelPosition=bottom;verticalAlign=top',
  2391. 'PEHeatExchangerBlock' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_1;verticalLabelPosition=bottom;verticalAlign=top',
  2392. // 'PEAirCooledExchangerBlock' NA
  2393. 'PEHairpinExchangerBlock' : s + 'pid.heat_exchangers.hairpin_exchanger;verticalLabelPosition=bottom;verticalAlign=top',
  2394. 'PEPlateAndFrameHeatExchangerBlock' : s + 'pid.heat_exchangers.plate_and_frame_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top',
  2395. 'PESpiralHeatExchanger' : s + 'pid.heat_exchangers.spiral_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top',
  2396. 'PEUTubeHeatExchangerBlock' : s + 'pid.heat_exchangers.u-tube_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top',
  2397. 'PEDoublePipeHeatBlock' : s + 'pid.heat_exchangers.double_pipe_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top',
  2398. 'PEShellAndTubeHeat1Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_1;verticalLabelPosition=bottom;verticalAlign=top',
  2399. 'PEShellAndTubeHeat2Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_2;verticalLabelPosition=bottom;verticalAlign=top',
  2400. 'PEShellAndTubeHeat3Block' : s + 'pid.heat_exchangers.shell_and_tube_heat_exchanger_1;direction=north;verticalLabelPosition=bottom;verticalAlign=top',
  2401. 'PESinglePassHeatBlock' : s + 'pid.heat_exchangers.single_pass_heat_exchanger;verticalLabelPosition=bottom;verticalAlign=top',
  2402. 'PEHeaterBlock' : s + 'pid.heat_exchangers.heater;verticalLabelPosition=bottom;verticalAlign=top',
  2403. //Pumps
  2404. 'PEEjectorInjectorBlock' : s + 'pid.fittings.injector;verticalLabelPosition=bottom;verticalAlign=top',
  2405. 'PECompressorTurbineBlock' : cs,
  2406. 'PEMotorDrivenTurbineBlock' : cs,
  2407. // 'PETripleFanBlades2Block' NA
  2408. // 'PEFanBlades2Block' : NA
  2409. 'PECentrifugalPumpBlock' : s + 'pid.pumps.gas_blower;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
  2410. 'PECentrifugalPump' : s + 'pid.pumps.centrifugal_pump_1;verticalLabelPosition=bottom;verticalAlign=top',
  2411. 'PECentrifugalPump2' : s + 'pid.pumps.centrifugal_pump_2;verticalLabelPosition=bottom;verticalAlign=top',
  2412. 'PECentrifugalPump3' : s + 'pid.pumps.centrifugal_pump_1;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
  2413. 'PEGearPumpBlock' : s + 'pid.pumps.gear_pump;verticalLabelPosition=bottom;verticalAlign=top',
  2414. 'PEHorizontalPump' : s + 'pid.pumps.horizontal_pump;verticalLabelPosition=bottom;verticalAlign=top',
  2415. 'PEProgressiveCavityPump' : s + 'pid.pumps.cavity_pump;flipH=1;flipV=1;verticalLabelPosition=bottom;verticalAlign=top',
  2416. 'PEScrewPump' : s + 'pid.pumps.screw_pump;verticalLabelPosition=bottom;verticalAlign=top',
  2417. 'PEScrewPump2' : s + 'pid.pumps.screw_pump_2;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
  2418. 'PESumpPump' : s + 'pid.pumps.sump_pump;verticalLabelPosition=bottom;verticalAlign=top',
  2419. 'PEVacuumPump' : s + 'pid.pumps.vacuum_pump;verticalLabelPosition=bottom;verticalAlign=top',
  2420. 'PEVerticalPump' : s + 'pid.pumps.vertical_pump;verticalLabelPosition=bottom;verticalAlign=top',
  2421. 'PEVerticalPump2' : s + 'pid.pumps.vertical_pump;verticalLabelPosition=bottom;verticalAlign=top',
  2422. //Instruments
  2423. 'PEIndicatorBlock' : cs,
  2424. 'PEIndicator2Block' : cs,
  2425. 'PEIndicator3Block' : s + 'pid2inst.discInst;mounting=field',
  2426. 'PEIndicator4Block' : s + 'pid2inst.indicator;mounting=field;indType=inst',
  2427. // 'PEIndicator5Block' NA
  2428. 'PESharedIndicatorBlock' : cs,
  2429. 'PESharedIndicator2Block' : cs,
  2430. 'PEComputerIndicatorBlock' : cs,
  2431. 'PEProgrammableIndicatorBlock' : cs,
  2432. //Valves
  2433. 'PEGateValveBlock' : cs, //TODO not all variants covered
  2434. 'PEGlobeValveBlock' : cs,
  2435. 'PEControlValveBlock' : s + 'pid2valves.valve;valveType=gate;actuator=diaph;verticalLabelPosition=bottom;verticalAlign=top', //TODO not all variants covered
  2436. 'PENeedleValveBlock' : s + 'pid2valves.valve;valveType=needle;verticalLabelPosition=bottom;verticalAlign=top',
  2437. // 'PEButterflyValveBlock' NA
  2438. 'PEButterflyValve2Block' : s + 'pid2valves.valve;flipH=1;valveType=butterfly;verticalLabelPosition=bottom;verticalAlign=top',
  2439. 'PEBallValveBlock' : s + 'pid2valves.valve;valveType=ball;verticalLabelPosition=bottom;verticalAlign=top',
  2440. 'PEDiaphragmBlock' : s + 'pid2valves.valve;valveType=ball;verticalLabelPosition=bottom;verticalAlign=top',
  2441. 'PEPlugValveBlock' : s + 'pid2valves.valve;valveType=ball;verticalLabelPosition=bottom;verticalAlign=top',
  2442. 'PECheckValveBlock' : s + 'pid2valves.valve;valveType=check;verticalLabelPosition=bottom;verticalAlign=top',
  2443. 'PECheckValve2Block' : s + 'pid2valves.valve;valveType=check;verticalLabelPosition=bottom;verticalAlign=top',
  2444. 'PEAngleValveBlock' : cs,
  2445. 'PEAngleGlobeValveBlock' : cs,
  2446. 'PEPoweredValveBlock' : cs,
  2447. 'PEFloatOperatedValveBlock' : s + 'pid2valves.valve;valveType=gate;actuator=singActing;verticalLabelPosition=bottom;verticalAlign=top',
  2448. 'PENeedleValve2Block' : s + 'pid2valves.valve;valveType=needle;verticalLabelPosition=bottom;verticalAlign=top',
  2449. 'PEThreeWayValveBlock' : s + 'pid2valves.valve;valveType=threeWay;actuator=none;verticalLabelPosition=bottom;verticalAlign=top',
  2450. // 'PEFourWayValveBlock' NA
  2451. // 'PEGaugeBlock' NA
  2452. 'PEBleederValveBlock' : s + 'pid2valves.blockBleedValve;actuator=none;verticalLabelPosition=bottom;verticalAlign=top',
  2453. // 'PEOrificeBlock' NA
  2454. 'PERotameterBlock' : s + 'pid.flow_sensors.rotameter;flipH=1;verticalLabelPosition=bottom;verticalAlign=top',
  2455. //Venn Gradient
  2456. 'VennGradientColor1' : 'ellipse;fillOpacity=35',
  2457. 'VennGradientColor2' : 'ellipse;fillOpacity=35',
  2458. 'VennGradientColor3' : 'ellipse;fillOpacity=35',
  2459. 'VennGradientColor4' : 'ellipse;fillOpacity=35',
  2460. 'VennGradientColor5' : 'ellipse;fillOpacity=35',
  2461. 'VennGradientColor6' : 'ellipse;fillOpacity=35',
  2462. 'VennGradientColor7' : 'ellipse;fillOpacity=35',
  2463. 'VennGradientColor8' : 'ellipse;fillOpacity=35',
  2464. //Venn Plain
  2465. 'VennPlainColor1' : 'ellipse;fillOpacity=35',
  2466. 'VennPlainColor2' : 'ellipse;fillOpacity=35',
  2467. 'VennPlainColor3' : 'ellipse;fillOpacity=35',
  2468. 'VennPlainColor4' : 'ellipse;fillOpacity=35',
  2469. 'VennPlainColor5' : 'ellipse;fillOpacity=35',
  2470. 'VennPlainColor6' : 'ellipse;fillOpacity=35',
  2471. 'VennPlainColor7' : 'ellipse;fillOpacity=35',
  2472. 'VennPlainColor8' : 'ellipse;fillOpacity=35',
  2473. //iOS Devices
  2474. 'iOS7DeviceiPhone5Portrait' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO
  2475. 'iOS7DeviceiPhone5Landscape' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO
  2476. 'iOS7DeviceiPadPortrait' : s + 'ios.iPad;bgStyle=bgGreen', //TODO
  2477. 'iOS7DeviceiPadLandscape' : s + 'ios.iPad;bgStyle=bgGreen', //TODO
  2478. 'iOS7DeviceiPhone6Portrait' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO
  2479. 'iOS7DeviceiPhone6Landscape' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO
  2480. 'iOS7DeviceiPhone6PlusPortrait' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO
  2481. 'iOS7DeviceiPhone6PlusLandscape' : s + 'ios.iPhone;bgStyle=bgGreen', //TODO
  2482. //iPhone Elements
  2483. 'iOS7StatusBariPhone' : s + 'ios7ui.appBar',
  2484. // 'iOS7NavBariPhone' NA
  2485. // 'iOS7TabsiPhone' : cs, //TODO
  2486. // 'iOS7iPhoneActionSheet' : cs, //TODO
  2487. 'iOS7iPhoneKeyboard' : s + 'ios7.misc.keyboard_(letters)',
  2488. // 'iOS7TableView' : cs, //TODO
  2489. //iPad Elements
  2490. 'iOS7StatusBariPad' : s + 'ios7ui.appBar',
  2491. // 'iOS7NavBariPad' : cs, //TODO
  2492. // 'iOS7TabsiPad' : cs, //TODO
  2493. // 'iOS7iPadActionSheet' : cs, //TODO
  2494. 'iOS7iPadKeyboard' : s + 'ios7.misc.keyboard_(letters)',
  2495. // 'iOS7SplitView'
  2496. // 'iOS7iPadPopover'
  2497. //Common Elements
  2498. // 'iOS7AlertDialog' : cs, //TODO
  2499. 'iOS7ProgressBar' : s + 'ios7ui.downloadBar', //TODO
  2500. 'iOS7Slider' : s + 'ios7ui.searchBox', //TODO
  2501. 'iOS7SearchBar' : s + 'ios7ui.searchBox',
  2502. 'iOS7Button' : '',
  2503. 'iOS7TextField' : '',
  2504. 'iOS7TextView' : '',
  2505. // 'iOS7SegmentedControl' : cs, //TODO
  2506. 'iOS7Toggle' : s + 'ios7ui.onOffButton;buttonState=on;strokeColor=#38D145;strokeColor2=#aaaaaa;fillColor=#38D145;fillColor2=#ffffff', //TODO
  2507. 'iOS7Stepper' : s + 'ios7.misc.adjust;fillColor=#ffffff;gradientColor=none',
  2508. 'iOS7PageControls' : s + 'ios7ui.pageControl;fillColor=#666666;strokeColor=#bbbbbb', //TODO
  2509. 'iOS7Block' : '',
  2510. // 'iOS7DatePicker' : cs, //TODO
  2511. // 'iOS7TimePicker' : cs, //TODO
  2512. // 'iOS7CountdownPicker' : cs, //TODO
  2513. //iOS Icons
  2514. 'iOS7IconArrow left' : s + 'ios7.misc.left',
  2515. 'iOS7IconArrow' : s + 'ios7.misc.right',
  2516. 'iOS7IconArrow up' : s + 'ios7.misc.up',
  2517. 'iOS7IconArrow down' : s + 'ios7.misc.down',
  2518. 'iOS7IconWifi' : s + 'ios7.icons.wifi',
  2519. 'iOS7IconBluetooth' : s + 'ios7.icons.bluetooth',
  2520. 'iOS7IconBattery' : s + 'ios7.icons.battery',
  2521. 'iOS7IconSiri' : s + 'ios7.icons.microphone',
  2522. 'iOS7IconCheck' : s + 'ios7.icons.select',
  2523. 'iOS7IconCreate' : s + 'ios7.icons.add',
  2524. 'iOS7IconInfo' : s + 'ios7.icons.info',
  2525. 'iOS7IconLocation' : s + 'ios7.icons.location_2',
  2526. 'iOS7IconQuestion' : s + 'ios7.icons.help',
  2527. 'iOS7IconSearch' : s + 'ios7.icons.looking_glass',
  2528. 'iOS7IconToolbox' : s + 'ios7.icons.briefcase',
  2529. 'iOS7IconOptions' : s + 'ios7.icons.options',
  2530. 'iOS7IconShare' : s + 'ios7.icons.share',
  2531. 'iOS7IconTyping' : s + 'ios7.icons.message',
  2532. 'iOS7IconCopy' : s + 'ios7.icons.folders_2',
  2533. 'iOS7IconChat' : s + 'ios7.icons.messages',
  2534. 'iOS7IconOrganize' : s + 'ios7.icons.folder',
  2535. 'iOS7IconTrash' : s + 'ios7.icons.trashcan',
  2536. 'iOS7IconReply' : s + 'ios7.icons.back',
  2537. 'iOS7IconArchive' : s + 'ios7.icons.box',
  2538. 'iOS7IconCompose' : s + 'ios7.icons.compose',
  2539. 'iOS7IconSend' : s + 'ios7.icons.pointer',
  2540. 'iOS7IconDrawer' : s + 'ios7.icons.storage',
  2541. 'iOS7IconMail' : s + 'ios7.icons.mail',
  2542. 'iOS7IconDocument' : s + 'ios7.icons.document',
  2543. 'iOS7IconFlag' : s + 'ios7.icons.flag',
  2544. 'iOS7IconBookmarks' : s + 'ios7.icons.book',
  2545. 'iOS7IconGlasses' : s + 'ios7.icons.glasses',
  2546. 'iOS7IconFiles' : s + 'ios7.icons.folders',
  2547. 'iOS7IconDownloads' : s + 'ios7.icons.down',
  2548. 'iOS7IconLock' : s + 'ios7.icons.locked',
  2549. // 'iOS7IconUnlock' NA
  2550. 'iOS7IconCloud' : s + 'ios7.icons.cloud',
  2551. // 'iOS7IconCloud-lock' NA
  2552. 'iOS7IconOrientation Lock' : s + 'ios7.icons.orientation_lock',
  2553. // 'iOS7IconNotification' NA
  2554. 'iOS7IconContacts' : s + 'ios7.icons.user',
  2555. 'iOS7IconGlobal' : s + 'ios7.icons.globe',
  2556. 'iOS7IconSettings' : s + 'ios7.icons.settings',
  2557. 'iOS7IconAirplay' : s + 'ios7.icons.move_to_folder',
  2558. 'iOS7IconCamera' : s + 'ios7.icons.camera',
  2559. 'iOS7IconAirplane' : s + 'signs.transportation.airplane_6;direction=south',
  2560. 'iOS7IconCalculator' : s + 'ios7.icons.calculator',
  2561. 'iOS7IconPreferences' : s + 'ios7.icons.most_viewed',
  2562. 'iOS7IconPhone' : s + 'signs.tech.telephone_3',
  2563. 'iOS7IconKeypad' : s + 'ios7.icons.keypad',
  2564. 'iOS7IconVoicemail' : s + 'ios7.icons.tape',
  2565. 'iOS7IconStar' : s + 'ios7.icons.star',
  2566. 'iOS7IconMost Viewed' : s + 'ios7.icons.most_viewed',
  2567. 'iOS7IconVideo' : s + 'ios7.icons.video_conversation',
  2568. 'iOS7IconVolumne Controls' : s + 'ios7.icons.volume',
  2569. 'iOS7IconLocation pin' : s + 'ios7.icons.location',
  2570. 'iOS7IconCalendar' : s + 'ios7.icons.calendar',
  2571. 'iOS7IconAlarm' : s + 'ios7.icons.alarm_clock',
  2572. 'iOS7IconClock' : s + 'ios7.icons.clock',
  2573. 'iOS7IconTimer' : s + 'ios7.icons.gauge',
  2574. 'iOS7IconVolume down' : s + 'ios7.icons.silent',
  2575. 'iOS7IconVolume' : s + 'ios7.icons.volume_2',
  2576. 'iOS7IconVolume up' : s + 'ios7.icons.loud',
  2577. 'iOS7IconRepeat' : s + 'ios7.icons.reload',
  2578. 'iOS7IconRewind' : s + 'ios7.icons.backward',
  2579. 'iOS7IconPlay' : s + 'ios7.icons.play',
  2580. 'iOS7IconPause' : s + 'ios7.icons.pause',
  2581. 'iOS7IconFast forward' : s + 'ios7.icons.forward',
  2582. // 'iOS7IconArtists' NA
  2583. // 'iOS7IconPlaylist' NA
  2584. 'iOS7IconControls' : s + 'ios7.icons.controls',
  2585. // 'iOS7IconShuffle' NA
  2586. 'iOS7IconPrivacy' : s + 'ios7.icons.privacy',
  2587. 'iOS7IconLink' : s + 'ios7.icons.link',
  2588. 'iOS7IconLight' : s + 'ios7.icons.flashlight',
  2589. 'iOS7IconBrightness' : s + 'ios7.icons.sun',
  2590. 'iOS7IconHeart' : s + 'ios7.icons.heart',
  2591. 'iOS7IconJava' : s + 'ios7.icons.cup',
  2592. 'iOS7IconBox' : s + 'ios7.icons.bag',
  2593. 'iOS7IconEye' : s + 'ios7.icons.eye',
  2594. 'iOS7IconDo not disturb' : s + 'ios7.icons.moon',
  2595. //iOS Activity
  2596. // 'iOS7ActivityAdd bookmark' NA
  2597. // 'iOS7ActivityAdd to home screen' NA
  2598. // 'iOS7ActivityAdd to reading list' NA
  2599. // 'iOS7ActivityAirplay' NA
  2600. // 'iOS7ActivityAssign to contact' NA
  2601. // 'iOS7ActivityCopy' NA
  2602. // 'iOS7ActivityPrint' NA
  2603. // 'iOS7ActivitySlideshow' NA
  2604. // 'iOS7ActivityUse as wallpaper' NA
  2605. //UI Containers
  2606. 'UI2BrowserBlock' : cs,
  2607. 'UI2WindowBlock' : cs,
  2608. 'UI2DialogBlock' : cs,
  2609. 'UI2AreaBlock' : 'rounded=1;arcSize=3',
  2610. 'UIAreaBlock' : 'rounded=1;arcSize=3;fillColor=none',
  2611. 'UI2ElementBlock' : '',
  2612. 'UI2AccordionBlock' : cs,
  2613. 'UI2TabBarContainerBlock' : cs,
  2614. 'UI2TabBar2ContainerBlock' : cs,
  2615. 'UI2VTabBarContainerBlock' : cs,
  2616. 'UI2VScrollBlock' : s + 'mockup.navigation.scrollBar;direction=north',
  2617. 'UI2HScrollBlock' : s + 'mockup.navigation.scrollBar',
  2618. 'UI2VerticalSplitterBlock' : s + 'mockup.forms.splitter;direction=north',
  2619. 'UI2HorizontalSplitterBlock' : s + 'mockup.forms.splitter',
  2620. //UI Widgets
  2621. 'UI2ImageBlock' : s + 'mockup.graphics.simpleIcon',
  2622. 'UI2VideoBlock' : s + 'mockup.containers.videoPlayer;barHeight=30',
  2623. 'UI2AudioBlock' : s + 'mockup.misc.playbackControls',
  2624. 'UI2MapBlock' : s + 'mockup.misc.map',
  2625. // 'UI2CalendarBlock' NA
  2626. 'UI2BarChartBlock' : s + 'mockup.graphics.barChart;strokeColor=none;strokeColor2=none',
  2627. 'UI2ColumnChartBlock' : s + 'mockup.graphics.columnChart;strokeColor=none;strokeColor2=none',
  2628. 'UI2LineChartBlock' : s + 'mockup.graphics.lineChart;strokeColor=none',
  2629. 'UI2PieChartBlock' : s + 'mockup.graphics.pieChart;parts=10,20,35',
  2630. 'UI2WebcamBlock' : s + 'mockup.containers.userMale',
  2631. 'UI2CaptchaBlock' : s + 'mockup.text.captcha;mainText=',
  2632. // 'Image_ui_formatting_toolbar2'
  2633. //UI Input
  2634. 'UI2ButtonBlock' : 'rounded=1;arcSize=25;',
  2635. 'UI2CheckBoxBlock' : cs,
  2636. 'UI2HorizontalCheckBoxBlock' : cs,
  2637. 'UI2RadioBlock' : cs,
  2638. 'UI2HorizontalRadioBlock' : cs,
  2639. 'UI2ColorPickerBlock' : s + 'mockup.forms.colorPicker;chosenColor=#aaddff',
  2640. 'UI2TextInputBlock' : '',
  2641. 'UI2SelectBlock' : cs,
  2642. 'UI2VSliderBlock' : cs,
  2643. 'UI2HSliderBlock' : cs,
  2644. 'UI2DatePickerBlock' : cs,
  2645. 'UI2SearchBlock' : cs,
  2646. 'UI2NumericStepperBlock' : cs,
  2647. 'UI2TableBlock' : cs,
  2648. //UI Menus
  2649. 'UI2ButtonBarBlock' : cs,
  2650. 'UI2VerticalButtonBarBlock' : cs,
  2651. 'UI2LinkBarBlock' : cs,
  2652. 'UI2BreadCrumbsBlock' : cs,
  2653. 'UI2MenuBarBlock' : cs,
  2654. 'UI2AtoZBlock' : cs,
  2655. 'UI2PaginationBlock' : cs,
  2656. 'UI2ContextMenuBlock' : cs,
  2657. // 'UI2TreePaneBlock' : cs, //TODO
  2658. 'UI2PlaybackControlsBlock' : s + 'mockup.misc.playbackControls;fillColor=#ffffff;strokeColor=#999999;fillColor2=#99ddff;strokeColor2=none;fillColor3=#ffffff;strokeColor3=none',
  2659. 'Image_ui_formatting_toolbar' : s + 'mockup.menus_and_buttons.font_style_selector_2',
  2660. //UI Misc
  2661. 'UI2ProgressBarBlock' : cs,
  2662. 'UI2HelpIconBlock' : s + 'mockup.misc.help_icon',
  2663. 'UI2BraceNoteBlock' : cs,
  2664. 'UI2TooltipBlock' : s + 'basic.rectangular_callout;flipV=1',
  2665. 'UI2TooltipSquareBlock' : cs,
  2666. 'UI2CalloutBlock' : cs,
  2667. 'UI2AlertBlock' : cs,
  2668. //iOS 6 iPad Elements
  2669. 'Image_ipad_ipad' : s + 'ios.iPad;bgStyle=bgGreen',
  2670. 'iPadGrayBackgroundBlock' : '',
  2671. 'Image_ipad_top_bar' : s + 'ios.iTopBar2;opacity=50;fillColor=#999999;strokeColor=#cccccc',
  2672. // 'Image_ipad_bar_gray' : '',
  2673. // 'Image_ipad_bar_semi_trans_black' : '',
  2674. // 'Image_ipad_bar_black' : '',
  2675. // 'Image_ipad_safari_top' NA
  2676. 'Image_ipad_search' : s + 'mockup.forms.searchBox;mainText=;flipH=1',
  2677. // 'Image_ipad_alert_dialog' : cs, //TODO
  2678. // 'Image_ipad_dialog' : cs, //TODO
  2679. 'Image_ipad_popover' : s + 'ios.iOption;barPos=50;pointerPos=top;buttonText=',
  2680. // 'Image_ipad_table' : cs, //TODO
  2681. // 'Image_ipad_vtab' : cs, //TODO
  2682. //iOS 6 iPad Controls
  2683. 'Image_ipad_button_black' : '',
  2684. 'Image_ipad_button_blue' : '',
  2685. 'Image_ipad_button_grayblue' : '',
  2686. 'Image_ipad_button_red' : '',
  2687. 'Image_ipad_back_button_gray' : s + 'ios.iButtonBack;buttonText=;fillColor=#eeeeee;fillColor2=#aaaaaa',
  2688. 'Image_ipad_back_button_black' : s + 'ios.iButtonBack;buttonText=;fillColor=#888888;fillColor2=#000000',
  2689. 'Image_ipad_sort_handle' : s + 'ios7.icons.options',
  2690. 'Image_ipad_dropdown' : s + 'ios.iComboBox;buttonText=;fillColor=#dddddd;fillColor2=#3D5565',
  2691. 'Image_ipad_email_name' : '',
  2692. 'Image_ipad_prev_next' : s + 'ios.iPrevNext;strokeColor=#444444;fillColor=#dddddd;fillColor2=#3D5565;fillColor3=#ffffff',
  2693. 'Image_ipad_keyboard_portrait' : s + 'ios.iKeybLett',
  2694. 'Image_ipad_keyboard_landscape' : s + 'ios.iKeybLett',
  2695. // 'Image_ipad_large_tabbed_button' : cs, //TODO
  2696. // 'Image_ipad_sort_button' : cs, //TODO
  2697. // 'Image_ipad_tab_bar' : cs, //TODO
  2698. 'Image_ipad_slider' : s + 'ios.iSlider;barPos=20',
  2699. // 'Image_ipad_switch_off'
  2700. //iOS 6 iPad Icons
  2701. 'Image_ipad_add_icon_blue' : s + 'ios.iAddIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff',
  2702. 'Image_ipad_add_icon_green' : s + 'ios.iAddIcon;fillColor=#7AdF78;fillColor2=#1A9917;strokeColor=#ffffff',
  2703. 'Image_ipad_remove_icon' : s + 'ios.iDeleteIcon;fillColor=#e8878E;fillColor2=#BD1421;strokeColor=#ffffff',
  2704. 'Image_ipad_arrow_icon' : s + 'ios.iArrowIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff',
  2705. 'Image_ipad_arrow' : s + 'ios7.misc.more',
  2706. 'Image_ipad_checkmark' : s + 'ios7.misc.check',
  2707. 'Image_ipad_check_off' : 'ellipse', //TODO
  2708. 'Image_ipad_location_dot' : 'ellipse',
  2709. 'Image_ipad_mark_as_read' : 'ellipse',
  2710. 'Image_ipad_pin_green' : s + 'ios.iPin;fillColor2=#00dd00;fillColor3=#004400;strokeColor=#006600',
  2711. 'Image_ipad_pin_red' : s + 'ios.iPin;fillColor2=#dd0000;fillColor3=#440000;strokeColor=#660000',
  2712. 'Image_ipad_radio_off' : 'ellipse', //TODO
  2713. 'Image_ipad_checkbox_off' : 'absoluteArcSize=1;arcSize=' + arcSize + ';rounded=1', //TODO
  2714. 'Image_ipad_indicator' : 'absoluteArcSize=1;arcSize=' + arcSize + ';rounded=1;fillColor=#e8878E;gradientColor=#BD1421;strokeColor=#ffffff',
  2715. //iOS 6 iPhone Elements
  2716. 'Image_iphone_iphone_4' : s + 'ios.iPhone;bg=bgGreen',
  2717. 'Image_iphone_bg_black' : '',
  2718. 'Image_iphone_bg_gray' : '',
  2719. 'Image_iphone_bg_stripe_drk' : s + 'ios.iBgStriped;strokeColor=#18211b;fillColor=#5D7585;strokeColor2=#657E8F',
  2720. 'Image_iphone_bg_stripe_lt' : s + 'ios.iBgStriped;strokeColor=#18211b;fillColor=#5D7585;strokeColor2=#657E8F',
  2721. 'Image_iphone_bg_white' : '',
  2722. 'Image_iphone_top_bar_app' : s + 'ios.iAppBar',
  2723. 'Image_iphone_top_bar_home' : s + 'ios.iTopBar2;opacity=50;fillColor=#999999;strokeColor=#cccccc;strokeWidth=1',
  2724. 'Image_iphone_bar_top' : '',
  2725. 'Image_iphone_bar_semi_trans_black' : '',
  2726. 'Image_iphone_bar_semi_trans_blue' : '',
  2727. 'Image_iphone_search' : s + 'mockup.forms.searchBox;mainText=;flipH=1',
  2728. // 'Image_iphone_table' : cs, //TODO
  2729. // 'Image_iphone_table_w_buttons' : cs, //TODO
  2730. // 'Image_iphone_table_w_icons' : cs, //TODO
  2731. // 'Image_iphone_list' : cs, //TODO
  2732. // 'Image_iphone_safari_top' NA
  2733. // 'Image_iphone_safari_bottom' NA
  2734. // 'Image_iphone_gray_grad_list' : '', //TODO
  2735. // 'Image_iphone_alert_bar' NA
  2736. // 'Image_iphone_alert_dialog' : cs, //TODO
  2737. // 'Image_iphone_dialog' : cs, //TODO
  2738. // 'Image_iphone_scroll_pane' : cs, //TODO
  2739. 'Image_iphone_alpha_list' : s + 'ios.iAlphaList',
  2740. //iOS 6 iPhone Controls
  2741. 'Image_iphone_button_black' : '',
  2742. 'Image_iphone_button_blue' : '',
  2743. 'Image_iphone_button_grayblue' : '',
  2744. 'Image_iphone_button_red' : '',
  2745. 'Image_iphone_button_lg_light' : '',
  2746. 'Image_iphone_button_lg_dark' : '',
  2747. 'Image_iphone_button_lg_green' : '',
  2748. 'Image_iphone_button_lg_red' : '',
  2749. 'Image_iphone_button_lg_yellow' : '',
  2750. 'Image_iphone_button_xl_green' : '',
  2751. 'Image_iphone_back_button' : s + 'ios.iButtonBack;strokeColor=#444444;buttonText=;fillColor=#dddddd;fillColor2=#3D5565',
  2752. 'Image_iphone_prev_next' : s + 'ios.iPrevNext;strokeColor=#444444;fillColor=#dddddd;fillColor2=#3D5565;fillColor3=#ffffff',
  2753. 'Image_iphone_sort_handle' : s + 'ios7.icons.options',
  2754. 'Image_iphone_slider' : s + 'ios.iSlider;barPos=60',
  2755. 'Image_iphone_dropdown' : s + 'ios.iComboBox;buttonText=;fillColor=#dddddd;fillColor2=#3D5565',
  2756. 'Image_iphone_email_name' : '',
  2757. 'Image_iphone_switch_off' : s + 'android.switch_off;fillColor=#666666', //TODO
  2758. 'Image_iphone_keyboard_button_blue' : '',
  2759. 'Image_iphone_keyboard_letters' : s + 'ios.iKeybLett',
  2760. 'Image_iphone_keyboard_landscape' : s + 'ios.iKeybLett',
  2761. // 'Image_iphone_large_tabbed_button' : cs, //TODO
  2762. // 'Image_iphone_sort_button' : cs, //TODO
  2763. // 'Image_iphone_tab_bar' : cs, //TODO
  2764. // 'Image_iphone_picker_multi' : cs, //TODO
  2765. // 'Image_iphone_picker_web' : cs, //TODO
  2766. //iOS 6 iPhone Icons
  2767. 'Image_iphone_add_icon_blue' : s + 'ios.iAddIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff',
  2768. 'Image_iphone_add_icon_green' : s + 'ios.iAddIcon;fillColor=#7AdF78;fillColor2=#1A9917;strokeColor=#ffffff',
  2769. 'Image_iphone_remove_icon' : s + 'ios.iDeleteIcon;fillColor=#e8878E;fillColor2=#BD1421;strokeColor=#ffffff',
  2770. 'Image_iphone_arrow_icon' : s + 'ios.iArrowIcon;fillColor=#8BbEff;fillColor2=#135Ec8;strokeColor=#ffffff',
  2771. 'Image_iphone_arrow' : s + 'ios7.misc.more',
  2772. 'Image_iphone_checkmark' : s + 'ios7.misc.check',
  2773. 'Image_iphone_check_off' : 'ellipse', //TODO
  2774. 'Image_iphone_location_dot' : 'ellipse',
  2775. 'Image_iphone_mark_as_read' : 'ellipse',
  2776. 'Image_iphone_pin_green' : s + 'ios.iPin;fillColor2=#00dd00;fillColor3=#004400;strokeColor=#006600',
  2777. 'Image_iphone_pin_red' : s + 'ios.iPin;fillColor2=#dd0000;fillColor3=#440000;strokeColor=#660000',
  2778. 'Image_iphone_radio_off' : 'ellipse', //TODO
  2779. // 'Image_iphone_checkbox_off' : '', //TODO
  2780. 'Image_iphone_indicator' : 'fillColor=#e8878E;gradientColor=#BD1421;strokeColor=#ffffff',
  2781. 'Image_iphone_thread_count' : '',
  2782. //***************************************************************************************************************
  2783. // 2019 mapping
  2784. //***************************************************************************************************************
  2785. // AWS 17 - Analytics
  2786. 'AmazonAthena2017' : 'shape=mxgraph.aws3.athena;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1;pointerEvents=1',
  2787. 'AmazonCloudSearch2017' : 'shape=mxgraph.aws3.cloudsearch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1;pointerEvents=1',
  2788. 'AmazonCloudSearchsearchdocuments2017' : 'shape=mxgraph.aws3.search_documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2789. 'AmazonEMR2017' : 'shape=mxgraph.aws3.emr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2790. 'AmazonEMRcluster2017' : 'shape=mxgraph.aws3.emr_cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2791. 'AmazonEMREMRengine2017' : 'shape=mxgraph.aws3.emr_engine;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2792. 'AmazonEMREMRengineMapRM32017' : 'shape=mxgraph.aws3.emr_engine_mapr_m3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2793. 'AmazonEMREMRengineMapRM52017' : 'shape=mxgraph.aws3.emr_engine_mapr_m5;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2794. 'AmazonEMREMRengineMapRM72017' : 'shape=mxgraph.aws3.emr_engine_mapr_m7;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2795. 'AmazonEMRHDFScluster2017' : 'shape=mxgraph.aws3.hdfs_cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2796. 'AmazonES2017' : 'shape=mxgraph.aws3.elasticsearch_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2797. 'AmazonKinesis2017' : 'shape=mxgraph.aws3.kinesis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2798. 'AmazonKinesisAmazonKinesisAnalytics2017' : 'shape=mxgraph.aws3.kinesis_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2799. 'AmazonKinesisAmazonKinesisenabledapp2017' : 'shape=mxgraph.aws3.kinesis_enabled_app;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2800. 'AmazonKinesisAmazonKinesisFirehose2017' : 'shape=mxgraph.aws3.kinesis_firehose;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2801. 'AmazonKinesisAmazonKinesisStreams2017' : 'shape=mxgraph.aws3.kinesis_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2802. 'AmazonQuickSight2017' : 'shape=mxgraph.aws3.quicksight;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2803. 'AmazonRedshift2017' : 'shape=mxgraph.aws3.redshift;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2804. 'AmazonRedshiftdensecomputenode2017' : 'shape=mxgraph.aws3.dense_compute_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2805. 'AmazonRedshiftdensestoragenode2017' : 'shape=mxgraph.aws3.dense_storage_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2806. 'AWSDataPipeline2017' : 'shape=mxgraph.aws3.data_pipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2807. 'AWSGlue2017' : 'shape=mxgraph.aws3.glue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2808. // AWS 17 - Application Services
  2809. 'AmazonAPIGateway2017' : 'shape=mxgraph.aws3.api_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2810. 'AmazonAppStream22017' : 'shape=mxgraph.aws3.appstream;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2811. 'AmazonElasticTranscoder2017' : 'shape=mxgraph.aws3.elastic_transcoder;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2812. 'AmazonSWF2017' : 'shape=mxgraph.aws3.swf;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2813. 'AmazonSWFdecider2017' : 'shape=mxgraph.aws3.decider;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2814. 'AmazonSWFworker2017' : 'shape=mxgraph.aws3.worker;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2815. 'AWSStepFunctions2017' : 'shape=mxgraph.aws3.step_functions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2816. // AWS 17 - Artificial Intelligence
  2817. 'AmazonLex2017' : 'shape=mxgraph.aws3.lex;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2818. 'AmazonMachineLearning2017' : 'shape=mxgraph.aws3.machine_learning;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2819. 'AmazonPolly2017' : 'shape=mxgraph.aws3.polly;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2820. 'AmazonRekognition2017' : 'shape=mxgraph.aws3.rekognition;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2821. // AWS 17 - Business Productivity
  2822. 'AmazonChime2017' : 'shape=mxgraph.aws3.chime;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2823. 'AmazonWorkMail2017' : 'shape=mxgraph.aws3.workmail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2824. 'AmazonWorkDocs2017' : 'shape=mxgraph.aws3.workdocs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2825. // AWS 17 - Compute
  2826. 'AmazonEC22017' : 'shape=mxgraph.aws3.ec2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2827. 'AmazonEC2AMI2017' : 'shape=mxgraph.aws3.ami;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2828. 'AmazonEC2AutoScaling2017' : 'shape=mxgraph.aws3.auto_scaling;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2829. 'AmazonEC2DBoninstance2017' : 'shape=mxgraph.aws3.db_on_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2830. 'AmazonEC2EC2rescue2017' : 'shape=mxgraph.aws3.rescue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2831. 'AmazonEC2ElasticIPaddress2017' : 'shape=mxgraph.aws3.elastic_ip;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2832. 'AmazonEC2instance2017' : 'shape=mxgraph.aws3.instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2833. 'AmazonEC2instances2017' : 'shape=mxgraph.aws3.instances;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2834. 'AmazonEC2instancewithCloudWatch2017' : 'shape=mxgraph.aws3.instance_with_cloudwatch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2835. 'AmazonEC2optimizedinstance2017' : 'shape=mxgraph.aws3.optimized_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2836. // 'AmazonEC2SpotFleet2017' : composite,
  2837. 'AmazonEC2SpotInstance2017' : 'shape=mxgraph.aws3.spot_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2838. 'AmazonEC2X1instance2017' : 'shape=mxgraph.aws3.x1_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2839. 'AmazonECR2017' : 'shape=mxgraph.aws3.ecr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2840. 'AmazonECRECRRegistry2017' : 'shape=mxgraph.aws3.ecr_registry;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2841. 'AmazonECS2017' : 'shape=mxgraph.aws3.ecs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2842. 'AmazonECSECScontainer2017' : 'shape=mxgraph.aws3.ec2_compute_container;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2843. 'AmazonECSECScontainerAlt12017' : 'shape=mxgraph.aws3.ec2_compute_container_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2844. 'AmazonECSECScontainerAlt22017' : 'shape=mxgraph.aws3.ec2_compute_container_3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2845. 'AmazonLightsail2017' : 'shape=mxgraph.aws3.lightsail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2846. 'AmazonVPC2017' : 'shape=mxgraph.aws3.vpc;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2847. 'AmazonVPCcustomergateway2017' : 'shape=mxgraph.aws3.customer_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2848. 'AmazonVPCelasticnetworkadapter2017' : 'shape=mxgraph.aws3.elastic_network_adapter;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2849. 'AmazonVPCelasticnetworkinterface2017' : 'shape=mxgraph.aws3.elastic_network_interface;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2850. 'AmazonVPCendpoints2017' : 'shape=mxgraph.aws3.endpoints;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2851. 'AmazonVPCflowlogs2017' : 'shape=mxgraph.aws3.flow_logs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2852. 'AmazonVPCInternetgateway2017' : 'shape=mxgraph.aws3.internet_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2853. 'AmazonVPCnetworkaccesscontrollist2017' : 'shape=mxgraph.aws3.network_access_controllist;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2854. 'AmazonVPCrouter2017' : 'shape=mxgraph.aws3.router;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2855. 'AmazonVPCVPCNATgateway2017' : 'shape=mxgraph.aws3.vpc_nat_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2856. 'AmazonVPCVPCpeering2017' : 'shape=mxgraph.aws3.vpc_peering;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2857. 'AmazonVPCVPNconnection2017' : 'shape=mxgraph.aws3.vpn_connection;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2858. 'AmazonVPCVPNgateway2017' : 'shape=mxgraph.aws3.vpn_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2859. 'AWSBatch2017' : 'shape=mxgraph.aws3.batch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2860. 'AWSElasticBeanstalk2017' : 'shape=mxgraph.aws3.elastic_beanstalk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2861. 'AWSElasticBeanstalkapplication2017' : 'shape=mxgraph.aws3.application;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2862. 'AWSElasticBeanstalkdeployment2017' : 'shape=mxgraph.aws3.deployment;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2863. 'AWSLambda2017' : 'shape=mxgraph.aws3.lambda;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2864. 'AWSLambdaLambdaFunction2017' : 'shape=mxgraph.aws3.lambda_function;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2865. 'ElasticLoadBalancing2017' : 'shape=mxgraph.aws3.elastic_load_balancing;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2866. 'ElasticLoadBalancingApplicationLoadBalancer2017' : 'shape=mxgraph.aws3.application_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2867. 'ElasticLoadBalancingELLoadBalancer2017' : 'shape=mxgraph.aws3.classic_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2868. // AWS 17 - Contact Center
  2869. 'AmazonConnect2017' : 'shape=mxgraph.aws3.connect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2870. // AWS 17 - Containers
  2871. 'AutoScalingGroup2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=8 3 1 3;verticalAlign=bottom',
  2872. 'AvailabilityZone2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=8 4;verticalAlign=bottom',
  2873. 'Region2017' : 'rounded=1;arcSize=10;dashed=1;dashPattern=1 1;verticalAlign=bottom',
  2874. 'SecurityGroup2017' : 'verticalAlign=bottom',
  2875. 'ElasticBeanStalkContainer2017' : cs,
  2876. 'EC2InstanceContents2017' : cs,
  2877. 'VPCSubnet2017' : cs,
  2878. 'ServerContents2017' : 'rounded=1;arcSize=10;dashed=0;fillColor=#DBDBDB;gradientColor=none;verticalAlign=bottom',
  2879. 'VirtualPrivateCloudContainer2017' : cs,
  2880. 'AWSCloudContainer2017' : cs,
  2881. 'CorporateDataCenterContainer2017' : cs,
  2882. // AWS 17 - Database
  2883. 'AmazonDynamoDB2017' : 'shape=mxgraph.aws3.dynamo_db;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2884. 'AmazonDynamoDBAccelerator2017' : 'shape=mxgraph.aws3.db_accelerator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2885. 'AmazonDynamoDBattribute2017' : 'shape=mxgraph.aws3.attribute;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2886. 'AmazonDynamoDBattributes2017' : 'shape=mxgraph.aws3.attributes;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2887. 'AmazonDynamoDBglobalsecondaryindex2017' : 'shape=mxgraph.aws3.global_secondary_index;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2888. 'AmazonDynamoDBitem2017' : 'shape=mxgraph.aws3.item;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2889. 'AmazonDynamoDBitems2017' : 'shape=mxgraph.aws3.items;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2890. 'AmazonDynamoDBtable2017' : 'shape=mxgraph.aws3.table;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2891. 'AmazonElasticCache2017' : 'shape=mxgraph.aws3.elasticache;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2892. 'AmazonElasticCachecachenode2017' : 'shape=mxgraph.aws3.cache_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2893. 'AmazonElasticCacheMemcached2017' : 'shape=mxgraph.aws3.memcached;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2894. 'AmazonElasticCacheRedis2017' : 'shape=mxgraph.aws3.redis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2895. 'AmazonRDS2017' : 'shape=mxgraph.aws3.rds;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2896. 'AmazonRDSDBinstance2017' : 'shape=mxgraph.aws3.rds_db_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2897. 'AmazonRDSinstancereadreplica2017' : 'shape=mxgraph.aws3.rds_db_instance_read_replica;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2898. 'AmazonRDSinstancestandby2017' : 'shape=mxgraph.aws3.rds_db_instance_standby_multi_az;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2899. 'AmazonRDSMSSQLinstance2017' : 'shape=mxgraph.aws3.ms_sql_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2900. 'AmazonRDSMSSQLinstancealternate2017' : 'shape=mxgraph.aws3.ms_sql_instance_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2901. 'AmazonRDSMySQLDBinstance2017' : 'shape=mxgraph.aws3.ms_sql_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2902. 'AmazonRDSMySQLinstancealternate2017' : 'shape=mxgraph.aws3.mysql_db_instance_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2903. 'AmazonRDSoracleDBinstance2017' : 'shape=mxgraph.aws3.oracle_db_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2904. 'AmazonRDSOracleDBinstancealternate2017' : 'shape=mxgraph.aws3.oracle_db_instance_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2905. 'AmazonRDSPIOP2017' : 'shape=mxgraph.aws3.piop;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2906. 'AmazonRDSPostgreSQLinstance2017' : 'shape=mxgraph.aws3.postgre_sql_instance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2907. 'AmazonRDSSQLmaster2017' : 'shape=mxgraph.aws3.sql_master;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2908. 'AmazonRDSSQLslave2017' : 'shape=mxgraph.aws3.sql_slave;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2909. 'AWSDMS2017' : 'shape=mxgraph.aws3.database_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2910. 'AWSDMSdatabasemigrationworkflowjob2017' : 'shape=mxgraph.aws3.database_migration_workflow_job;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2911. // AWS 17 - Desktop App Straning
  2912. 'AmazonWorkSpaces2017' : 'shape=mxgraph.aws3.workspaces;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2913. // AWS 17 - Developer Tools
  2914. 'AWSCodeBuild2017' : 'shape=mxgraph.aws3.codebuild;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2915. 'AWSCodeCommit2017' : 'shape=mxgraph.aws3.codecommit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2916. 'AWSCodeDeploy2017' : 'shape=mxgraph.aws3.codedeploy;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2917. 'AWSCodePipeline2017' : 'shape=mxgraph.aws3.codepipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2918. 'AWSCodeStar2017' : 'shape=mxgraph.aws3.codestar;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2919. 'AWSXRay2017' : 'shape=mxgraph.aws3.x_ray;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2920. // AWS 17 - Game Development
  2921. 'AmazonGameLift2017' : 'shape=mxgraph.aws3.gamelift;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2922. // AWS 17 - General
  2923. 'AWScloud2017' : 'shape=mxgraph.aws3.cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2924. 'AWSManagementConsole2017' : 'shape=mxgraph.aws3.management_console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2925. 'client2017' : 'shape=mxgraph.aws3.management_console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2926. 'corporatedatacenter2017' : 'shape=mxgraph.aws3.corporate_data_center;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2927. 'disk2017' : 'shape=mxgraph.aws3.disk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2928. 'forums2017' : 'shape=mxgraph.aws3.forums;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2929. 'genericdatabase2017' : 'shape=mxgraph.aws3.generic_database;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2930. 'Internet2017' : 'shape=mxgraph.aws3.internet;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2931. 'Internetalternate12017' : 'shape=mxgraph.aws3.internet_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2932. 'Internetalternate22017' : 'shape=mxgraph.aws3.internet_3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2933. 'mobileclient2017' : 'shape=mxgraph.aws3.mobile_client;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2934. 'multimedia2017' : 'shape=mxgraph.aws3.multimedia;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2935. 'officebuilding2017' : 'shape=mxgraph.aws3.office_building;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2936. 'SAMLtoken2017' : 'shape=mxgraph.aws3.saml_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2937. 'SSLpadlock2017' : 'shape=mxgraph.aws3.ssl_padlock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2938. 'tapestorage2017' : 'shape=mxgraph.aws3.tape_storage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2939. 'traditionalserver2017' : 'shape=mxgraph.aws3.traditional_server;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2940. 'user2017' : 'shape=mxgraph.aws3.user;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2941. 'users2017' : 'shape=mxgraph.aws3.users;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2942. 'virtualprivatecloud2017' : 'shape=mxgraph.aws3.virtual_private_cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2943. // AWS 17 - IoT
  2944. 'AWSIoTlambdafunction2017' : 'shape=mxgraph.aws3.lambda_function;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2945. 'AWSIoTfireTVstick2017' : 'shape=mxgraph.aws3.fire_tv_stick;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2946. 'AWSIoTfireTV2017' : 'shape=mxgraph.aws3.fire_tv;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2947. 'AWSIoTecho2017' : 'shape=mxgraph.aws3.echo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2948. 'AWSIoTAVSenableddevice2017' : 'shape=mxgraph.aws3.alexa_enabled_device;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2949. 'AWSIoTalexavoiceservice2017' : 'shape=mxgraph.aws3.alexa_voice_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2950. 'AWSIoTalexasmarthomeskill2017' : 'shape=mxgraph.aws3.alexa_smart_home_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2951. 'AWSIoTalexaskill2017' : 'shape=mxgraph.aws3.alexa_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2952. 'AWSIoTHTTPprotocol2017' : 'shape=mxgraph.aws3.http_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2953. 'AWSIoTHTTP2protocol2017' : 'shape=mxgraph.aws3.http_2_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2954. 'AWSIoThardwareboard2017' : 'shape=mxgraph.aws3.hardware_board;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2955. 'AWSIoTrule2017' : 'shape=mxgraph.aws3.rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2956. 'AWSIoTpolicy2017' : 'shape=mxgraph.aws3.policy;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2957. 'AWSIoTMQTTprotocol2017' : 'shape=mxgraph.aws3.mqtt_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2958. 'AWSIoTaction2017' : 'shape=mxgraph.aws3.action;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2959. 'AWSIoTtopic2017' : 'shape=mxgraph.aws3.topic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2960. 'AWSIoTshadow2017' : 'shape=mxgraph.aws3.shadow;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2961. 'AWSIoTdesiredstate2017' : 'shape=mxgraph.aws3.desired_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2962. 'AWSIoTcertificate2017' : 'shape=mxgraph.aws3.certificate;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2963. 'AWSIoTreportedstate2017' : 'shape=mxgraph.aws3.reported_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2964. 'AWSIoTsimulator2017' : 'shape=mxgraph.aws3.simulator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2965. 'AWSIoTservo2017' : 'shape=mxgraph.aws3.servo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2966. 'AWSIoTsensor2017' : 'shape=mxgraph.aws3.sensor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2967. 'AWSIoTactuator2017' : 'shape=mxgraph.aws3.actuator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2968. 'AWSIoTthingthermostat2017' : 'shape=mxgraph.aws3.thermostat;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2969. 'AWSIoTthingmedicalemergency2017' : 'shape=mxgraph.aws3.medical_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2970. 'AWSIoTthingtravel2017' : 'shape=mxgraph.aws3.travel;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2971. 'AWSIoTthingcoffeepot2017' : 'shape=mxgraph.aws3.coffee_pot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2972. 'AWSIoTthingcart2017' : 'shape=mxgraph.aws3.cart;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2973. 'AWSIoTthingcamera2017' : 'shape=mxgraph.aws3.camera;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2974. 'AWSIoTthingpoliceemergency2017' : 'shape=mxgraph.aws3.police_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2975. 'AWSIoTthingdoorlock2017' : 'shape=mxgraph.aws3.door_lock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2976. 'AWSIoTthingutility2017' : 'shape=mxgraph.aws3.utility;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2977. 'AWSIoTthingcar2017' : 'shape=mxgraph.aws3.car;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2978. 'AWSIoTthingbank2017' : 'shape=mxgraph.aws3.bank;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2979. 'AWSIoTthingwindfarm2017' : 'shape=mxgraph.aws3.windfarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2980. 'AWSIoTthingbicycle2017' : 'shape=mxgraph.aws3.bicycle;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2981. 'AWSIoTthinghouse2017' : 'shape=mxgraph.aws3.house;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2982. 'AWSIoTthingfactory2017' : 'shape=mxgraph.aws3.factory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2983. 'AWSIoTthinglightbulb2017' : 'shape=mxgraph.aws3.lightbulb;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2984. 'AWSIoTthinggeneric2017' : 'shape=mxgraph.aws3.generic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2985. 'AWSIoTAWSGreengrass2017' : 'shape=mxgraph.aws3.greengrass;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2986. 'AWSIoT2017' : 'shape=mxgraph.aws3.aws_iot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2987. // AWS 17 - Management
  2988. 'AmazonCloudWatch2017' : 'shape=mxgraph.aws3.cloudwatch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2989. 'AmazonCloudWatchalarm2017' : 'shape=mxgraph.aws3.alarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2990. 'AmazonCloudWatcheventeventbased2017' : 'shape=mxgraph.aws3.event_event_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2991. 'AmazonCloudWatcheventtimebased2017' : 'shape=mxgraph.aws3.event_time_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2992. 'AmazonCloudWatchrule2017' : 'shape=mxgraph.aws3.config_rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2993. 'AmazonEC2SystemsManager2017' : 'shape=mxgraph.aws3.ec2_systems_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2994. 'AmazonEC2SystemsManagerAutomation2017' : 'shape=mxgraph.aws3.automation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2995. 'AmazonEC2SystemsManagerdocuments2017' : 'shape=mxgraph.aws3.documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2996. 'AmazonEC2SystemsManagerInventory2017' : 'shape=mxgraph.aws3.inventory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2997. 'AmazonEC2SystemsManagerMaintenanceWindow2017' : 'shape=mxgraph.aws3.maintenance_window;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2998. 'AmazonEC2SystemsManagerParameterStore2017' : 'shape=mxgraph.aws3.parameter_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  2999. 'AmazonEC2SystemsManagerPatchManager2017' : 'shape=mxgraph.aws3.patch_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3000. 'AmazonEC2SystemsManagerRunCommand2017' : 'shape=mxgraph.aws3.run_command;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3001. 'AmazonEC2SystemsManagerStateManager2017' : 'shape=mxgraph.aws3.state_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3002. 'AWSCloudFormation2017' : 'shape=mxgraph.aws3.cloudformation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3003. 'AWSCloudFormationchangeset2017' : 'shape=mxgraph.aws3.change_set;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3004. 'AWSCloudFormationstack2017' : 'shape=mxgraph.aws3.stack_aws_cloudformation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3005. 'AWSCloudFormationtemplate2017' : 'shape=mxgraph.aws3.template;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3006. 'AWSCloudTrail2017' : 'shape=mxgraph.aws3.cloudtrail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3007. 'AWSConfig2017' : 'shape=mxgraph.aws3.config;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3008. 'AWSManagedServices2017' : 'shape=mxgraph.aws3.managed_services;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3009. 'AWSOpsWorks2017' : 'shape=mxgraph.aws3.opsworks;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3010. 'AWSOpsWorksapps2017' : 'shape=mxgraph.aws3.apps;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3011. 'AWSOpsWorksdeployments2017' : 'shape=mxgraph.aws3.deployments;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3012. 'AWSOpsWorksinstances2017' : 'shape=mxgraph.aws3.instances_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3013. 'AWSOpsWorkslayers2017' : 'shape=mxgraph.aws3.layers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3014. 'AWSOpsWorksmonitoring2017' : 'shape=mxgraph.aws3.monitoring;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3015. 'AWSOpsWorkspermissions2017' : 'shape=mxgraph.aws3.permissions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3016. 'AWSOpsWorksresources2017' : 'shape=mxgraph.aws3.resources;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3017. 'AWSOpsWorksstack2017' : 'shape=mxgraph.aws3.stack_aws_opsworks;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3018. 'AWSServiceCatalog2017' : 'shape=mxgraph.aws3.service_catalog;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3019. 'AWSTrustedAdvisor2017' : 'shape=mxgraph.aws3.trusted_advisor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3020. 'AWSTrustedAdvisorchecklist2017' : 'shape=mxgraph.aws3.checklist;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3021. 'AWSTrustedAdvisorchecklistcost2017' : 'shape=mxgraph.aws3.checklist_cost;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3022. 'AWSTrustedAdvisorchecklistfaulttolerance2017' : 'shape=mxgraph.aws3.checklist_fault_tolerance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3023. 'AWSTrustedAdvisorchecklistperformance2017' : 'shape=mxgraph.aws3.checklist_performance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3024. 'AWSTrustedAdvisorchecklistsecurity2017' : 'shape=mxgraph.aws3.checklist_security;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3025. // AWS 17 - Messaging
  3026. 'AmazonPinpoint2017' : 'shape=mxgraph.aws3.pinpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3027. 'AmazonSES2017' : 'shape=mxgraph.aws3.ses;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3028. 'AmazonSESemail2017' : 'shape=mxgraph.aws3.email;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3029. 'AmazonSNS2017' : 'shape=mxgraph.aws3.sns;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3030. 'AmazonSNSemailnotification2017' : 'shape=mxgraph.aws3.email_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3031. 'AmazonSNSHTTPnotification2017' : 'shape=mxgraph.aws3.http_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3032. 'AmazonSNStopic2017' : 'shape=mxgraph.aws3.topic_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3033. 'AmazonSQS2017' : 'shape=mxgraph.aws3.sqs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3034. 'AmazonSQSmessage2017' : 'shape=mxgraph.aws3.message;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3035. 'AmazonSQSqueue2017' : 'shape=mxgraph.aws3.queue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3036. // AWS 17 - Migration
  3037. 'AWSApplicationDiscoveryService2017' : 'shape=mxgraph.aws3.application_discovery_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3038. 'AWSMigrationHub2017' : 'shape=mxgraph.aws3.migration_hub_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3039. 'AWSSMS2017' : 'shape=mxgraph.aws3.server_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3040. 'AWSSnowball2017' : 'shape=mxgraph.aws3.snowball;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3041. 'AWSSnowballimportexport2017' : 'shape=mxgraph.aws3.import_export;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3042. // AWS 17 - Mobile Services
  3043. 'AmazonCognito2017' : 'shape=mxgraph.aws3.cognito;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3044. 'AmazonMobileAnalytics2017' : 'shape=mxgraph.aws3.mobile_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3045. 'AWSDeviceFarm2017' : 'shape=mxgraph.aws3.device_farm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3046. 'AWSMobileHub2017' : 'shape=mxgraph.aws3.mobile_hub;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fillColor=#AD688A;gradientColor=#F58435;gradientDirection=west;;pointerEvents=1',
  3047. // AWS 17 - Networking & Content Delivery
  3048. 'AmazonCloudFront2017' : 'shape=mxgraph.aws3.cloudfront;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3049. 'AmazonCloudFrontdownloaddistribution2017' : 'shape=mxgraph.aws3.download_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3050. 'AmazonCloudFrontedgelocation2017' : 'shape=mxgraph.aws3.edge_location;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3051. 'AmazonCloudFrontstreamingdistribution2017' : 'shape=mxgraph.aws3.streaming_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3052. 'AmazonRoute532017' : 'shape=mxgraph.aws3.route_53;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3053. 'AmazonRoute53hostedzone2017' : 'shape=mxgraph.aws3.hosted_zone;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3054. 'AmazonRoute53routetable2017' : 'shape=mxgraph.aws3.route_table;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3055. 'AmazonVPCinternetgateway2017' : 'shape=mxgraph.aws3.internet_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3056. 'AWSDirectConnect2017' : 'shape=mxgraph.aws3.direct_connect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3057. 'ElasticLoadBalancingClassicLoadBalancer2017' : 'shape=mxgraph.aws3.classic_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3058. // AWS 17 - On-Demand Workforce
  3059. 'AmazonMechanicalTurk2017' : 'shape=mxgraph.aws3.mechanical_turk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3060. 'AmazonMechanicalTurkassignmenttask2017' : 'shape=mxgraph.aws3.assignment_task;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3061. 'AmazonMechanicalTurkhumanintelligencetasks2017' : 'shape=mxgraph.aws3.human_intelligence_tasks_hit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3062. 'AmazonMechanicalTurkrequester2017' : 'shape=mxgraph.aws3.requester;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3063. 'AmazonMechanicalTurkworkers2017' : 'shape=mxgraph.aws3.users;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3064. // AWS 17 - SDKs
  3065. 'Xamarin2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3066. 'Ruby2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3067. 'Python2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3068. 'PHP2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3069. 'Nodejs2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3070. 'Net2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3071. 'JavaScript2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3072. 'Java2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3073. 'iOS2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3074. 'AWSToolsForWindowsPowerShell2017' : 'shape=mxgraph.aws3.toolkit_for_windows_powershell;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3075. 'AWSToolkitForVisualStudio2017' : 'shape=mxgraph.aws3.toolkit_for_visual_studio;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3076. 'AWSToolkitForEclipse2017' : 'shape=mxgraph.aws3.toolkit_for_eclipse;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3077. 'AWSCLI2017' : 'shape=mxgraph.aws3.cli;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3078. 'Android2017' : 'shape=mxgraph.aws3.android;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3079. // AWS 17 - Serurity Identity and Compliance
  3080. 'ACMcertificatemanager2017' : 'shape=mxgraph.aws3.certificate_manager_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3081. 'AmazonCloudDirectory2017' : 'shape=mxgraph.aws3.clouddirectory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3082. 'AmazonInspector2017' : 'shape=mxgraph.aws3.inspector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3083. 'AmazonInspectoragent2017' : 'shape=mxgraph.aws3.agent;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3084. 'AmazonMacie2017' : 'shape=mxgraph.aws3.macie;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3085. 'AWSArtifact2017' : 'shape=mxgraph.aws3.artifact;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3086. 'AWSCertificateManager2017' : 'shape=mxgraph.aws3.certificate_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3087. 'AWSCloudHSM2017' : 'shape=mxgraph.aws3.cloudhsm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3088. 'AWSDirectoryService2017' : 'shape=mxgraph.aws3.directory_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3089. 'AWSKMS2017' : 'shape=mxgraph.aws3.kms;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3090. 'AWSOrganizations2017' : 'shape=mxgraph.aws3.organizations;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3091. 'AWSShield2017' : 'shape=mxgraph.aws3.shield;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3092. 'AWSWAF2017' : 'shape=mxgraph.aws3.waf;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3093. 'AWSWAFfilteringrule2017' : 'shape=mxgraph.aws3.filtering_rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3094. 'IAM2017' : 'shape=mxgraph.aws3.iam;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3095. 'IAMaddon2017' : 'shape=mxgraph.aws3.add_on;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3096. 'IAMAWSSTS2017' : 'shape=mxgraph.aws3.sts;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3097. 'IAMAWSSTS22017' : 'shape=mxgraph.aws3.sts_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3098. 'IAMdataencryptionkey2017' : 'shape=mxgraph.aws3.data_encryption_key;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3099. 'IAMencrypteddata2017' : 'shape=mxgraph.aws3.encrypted_data;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3100. 'IAMlongtermsecuritycredential2017' : 'shape=mxgraph.aws3.long_term_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fillColor=#ffffff;pointerEvents=1',
  3101. 'IAMMFAtoken2017' : 'shape=mxgraph.aws3.mfa_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3102. 'IAMpermissions2017' : 'shape=mxgraph.aws3.permissions_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3103. 'IAMrole2017' : 'shape=mxgraph.aws3.role;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3104. 'IAMtemporarysecuritycredential2017' : 'shape=mxgraph.aws3.temporary_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fillColor=#ffffff;pointerEvents=1',
  3105. // AWS 17 - Storage
  3106. 'AmazonEBS2017' : 'shape=mxgraph.aws3.volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3107. 'AmazonEFS2017' : 'shape=mxgraph.aws3.efs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3108. 'AmazonEFSEFSfilesystem2017' : 'shape=mxgraph.aws3.efs_share;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3109. 'AmazonGlacier2017' : 'shape=mxgraph.aws3.glacier;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3110. 'AmazonGlacierarchive2017' : 'shape=mxgraph.aws3.archive;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3111. 'AmazonGlaciervault2017' : 'shape=mxgraph.aws3.vault;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3112. 'AmazonS32017' : 'shape=mxgraph.aws3.s3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3113. 'AmazonS3bucket2017' : 'shape=mxgraph.aws3.bucket;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3114. 'AmazonS3bucketwithobjects2017' : 'shape=mxgraph.aws3.bucket_with_objects;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3115. 'AmazonS3object2017' : 'shape=mxgraph.aws3.object;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3116. 'AWSStorageGateway2017' : 'shape=mxgraph.aws3.storage_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3117. 'AWSStorageGatewaycachedvolume2017' : 'shape=mxgraph.aws3.cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3118. 'AWSStorageGatewaynoncachedvolume2017' : 'shape=mxgraph.aws3.non_cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3119. 'AWSStorageGatewayvirtualtapelibrary2017' : 'shape=mxgraph.aws3.virtual_tape_library;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3120. 'snapshot2017' : 'shape=mxgraph.aws3.snapshot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3121. 'volume2017' : 'shape=mxgraph.aws3.volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3122. // AWS 19 Analytics
  3123. 'AnalyticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3124. 'AmazonAthenaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.athena;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3125. 'AmazonCloudSearchAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudsearch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3126. 'AmazonElasticsearchServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticsearch_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3127. 'AmazonEMRAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.emr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3128. 'AmazonKinesisAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3129. 'AmazonKinesisDataAnalyticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_data_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3130. 'AmazonKinesisDataFirehoseAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_data_firehose;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3131. 'AmazonKinesisDataStreamsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_data_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3132. 'AmazonKinesisVideoStreamsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_video_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3133. 'AmazonManagedStreamingforKafkaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.managed_streaming_for_kafka;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3134. 'AmazonQuickSightAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.quicksight;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3135. 'AmazonRedshiftAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.redshift;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3136. 'AWSDataPipelineAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.data_pipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3137. 'AWSGlueAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.glue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3138. 'AWSLakeFormationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lake_formation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3139. 'AmazonCloudSearch_SearchDocumentsAWS19' : 'shape=mxgraph.aws4.search_documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3140. 'AmazonEMR_ClusterAWS19' : 'shape=mxgraph.aws4.cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3141. 'AmazonEMR_EMREngineAWS19' : 'shape=mxgraph.aws4.emr_engine;;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3142. 'AmazonEMR_EMREngineMapRM3AWS19' : 'shape=mxgraph.aws4.emr_engine_mapr_m3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3143. 'AmazonEMR_EMREngineMapRM5AWS19' : 'shape=mxgraph.aws4.emr_engine_mapr_m5;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3144. 'AmazonEMR_EMREngineMapRM7AWS19' : 'shape=mxgraph.aws4.emr_engine_mapr_m7;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3145. 'AmazonRedshift_DenseComputeNodeAWS19' : 'shape=mxgraph.aws4.dense_compute_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3146. 'AmazonRedshift_DenseStorageNodeAWS19' : 'shape=mxgraph.aws4.dense_storage_node;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3147. 'AWSGlue_CrawlersAWS19' : 'shape=mxgraph.aws4.glue_crawlers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3148. 'AWSGlue_DataCatalogAWS19' : 'shape=mxgraph.aws4.glue_data_catalog;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3149. 'AmazonEMR_HDFSClusterAWS19' : 'shape=mxgraph.aws4.cluster;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3150. 'AWSDataLake_ResourceAWS19' : 'shape=mxgraph.aws4.data_lake_resource_icon;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3151. // AWS 19 - Application Integration
  3152. 'ApplicationIntegrationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.application_integration;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3153. 'AmazonMQAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.mq;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3154. 'AmazonSimpleNotificationServiceSNSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sns;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3155. 'AmazonSimpleQueueServiceSQSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3156. 'AWSAppSyncAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3157. 'AWSStepFunctionsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3158. 'AmazonSimpleNotificationServiceSNS_EmailNotificationAWS19' : 'shape=mxgraph.aws4.email_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3159. 'AmazonSimpleNotificationServiceSNS_HTTPNotificationAWS19' : 'shape=mxgraph.aws4.http_notification;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3160. 'AmazonSimpleNotificationServiceSNS_TopicAWS19' : 'shape=mxgraph.aws4.topic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3161. 'AmazonSimpleQueueServiceSQS_MessageAWS19' : 'shape=mxgraph.aws4.message;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3162. 'AmazonSimpleQueueServiceSQS_QueueAWS19' : 'shape=mxgraph.aws4.queue;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3163. 'AmazonAPIGateway_EndpointAWS19' : 'shape=mxgraph.aws4.endpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3164. 'AmazonEventBridgeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eventbridge;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3165. 'AWSElementalAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3166. // AWS 19 - AR & VR
  3167. 'ARVRAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ar_vr;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3168. 'AmazonSumerianAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sumerian;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3169. // AWS 19 - Blockchain
  3170. 'BlockchainAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.blockchain;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3171. 'AmazonManagedBlockchainAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.managed_blockchain;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3172. 'AmazonQuantumLedgerDatabaseQLDBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.quantum_ledger_database;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3173. // AWS 19 - Business Applications
  3174. 'BusinessApplicationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.business_application;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3175. 'AlexaForBusinessAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.alexa_for_business;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3176. 'AmazonChimeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.chime;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3177. 'AmazonWorkDocsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.workdocs;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3178. 'AmazonWorkMailAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.workmail;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3179. // AWS 19 - Compute
  3180. 'ComputeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.compute;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3181. 'AmazonEC2AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ec2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3182. 'AmazonEC2AutoScalingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.auto_scaling2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3183. 'AmazonEC2ContainerRegistryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ecr;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3184. 'AmazonElasticContainerServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ecs;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3185. 'AmazonElasticContainerServiceforKubernetesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eks;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3186. 'AmazonLightsailAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lightsail;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3187. 'AWSBatchAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.batch;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3188. 'AWSElasticBeanstalkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_beanstalk;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3189. 'AWSFargateAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fargate;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3190. 'AWSLambdaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3191. 'AWSOutpostsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.outposts;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3192. 'AWSServerlessApplicationRepositoryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.serverless_application_repository;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3193. 'ElasticLoadBalancingELBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_load_balancing;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3194. 'VMwareCloudOnAWSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.vmware_cloud_on_aws;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3195. 'AmazonEC2_AMIAWS19' : 'shape=mxgraph.aws4.ami;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3196. 'AmazonEC2_AutoScalingAWS19' : 'shape=mxgraph.aws4.auto_scaling2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3197. 'AmazonEC2ContainerRegistry_ImageAWS19' : 'shape=mxgraph.aws4.container_registry_image;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3198. 'AmazonEC2ContainerRegistry_RegistryAWS19' : 'shape=mxgraph.aws4.registry;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3199. 'AmazonEC2_ElasticIPAddressAWS19' : 'shape=mxgraph.aws4.elastic_ip_address;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3200. 'AmazonEC2_RescueAWS19' : 'shape=mxgraph.aws4.rescue;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3201. 'AmazonElasticContainerService_Container1AWS19' : 'shape=mxgraph.aws4.container_1;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1;pointerEvents=1',
  3202. 'AmazonElasticContainerService_Container2AWS19' : 'shape=mxgraph.aws4.container_2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3203. 'AmazonElasticContainerService_Container3AWS19' : 'shape=mxgraph.aws4.container_3;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3204. 'AmazonElasticContainerService_ServiceAWS19' : 'shape=mxgraph.aws4.ecs_service;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3205. 'AmazonElasticContainerService_TaskAWS19' : 'shape=mxgraph.aws4.ecs_task;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3206. 'AWSElasticBeanstalk_ApplicationAWS19' : 'shape=mxgraph.aws4.application;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3207. 'AWSElasticBeanstalk_DeploymentAWS19' : 'shape=mxgraph.aws4.deployment;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3208. 'AWSLambda_LambdaFunctionAWS19' : 'shape=mxgraph.aws4.lambda_function;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3209. 'AWSThinkboxDeadlineAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_deadline;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;;pointerEvents=1',
  3210. 'AWSThinkboxDraftAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_draft;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;;pointerEvents=1',
  3211. 'AWSThinkboxFrostAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_frost;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;;pointerEvents=1',
  3212. 'AWSThinkboxKrakatoaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_krakatoa;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;;pointerEvents=1',
  3213. 'AWSThinkboxSequoiaAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_sequoia;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;;pointerEvents=1',
  3214. 'AWSThinkboxStokeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_stoke;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;;pointerEvents=1',
  3215. 'AWSThinkboxXMeshAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.thinkbox_xmesh;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;;pointerEvents=1',
  3216. // AWS 19 - Cost Management
  3217. 'AWSCostManagementAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cost_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3218. 'AWSBudgetsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.budgets;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3219. 'AWSCostandUsageReportAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cost_and_usage_report;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3220. 'AWSCostExplorerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cost_explorer;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3221. 'ReservedInstanceReportingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.reserved_instance_reporting;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3222. // AWS 19 - Customer Engagement
  3223. 'CustomerEngagementAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.customer_engagement;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3224. 'AmazonConnectAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.connect;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3225. 'AmazonPinpointAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.pinpoint;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3226. 'AmazonSimpleEmailServiceSESAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.simple_email_service;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3227. 'AmazonSimpleEmailServiceSES_EmailAWS19' : 'shape=mxgraph.aws4.email;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3228. // AWS 19 - Database
  3229. 'DatabaseAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.database;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3230. 'AmazonAuroraAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.aurora;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3231. 'AmazonDocumentDBwithMongoDBcompatibilityAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.documentdb_with_mongodb_compatibility;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3232. 'AmazonDynamoDBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3233. 'AmazonElastiCacheAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticache;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3234. 'AmazonNeptuneAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.neptune;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3235. 'AmazonQuantumLedgerDatabase_QLDBAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.quantum_ledger_database;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3236. 'AmazonRDSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rds;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3237. 'AmazonRDSonVMwareAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rds_on_vmware;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3238. 'AmazonRedshift_blueAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.redshift;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3239. 'AmazonTimestreamAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.timestream;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3240. 'AWSDatabaseMigrationServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.database_migration_service;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3241. 'AmazonDynamoDB_AttributeAWS19' : 'shape=mxgraph.aws4.attribute;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3242. 'AmazonDynamoDB_AttributesAWS19' : 'shape=mxgraph.aws4.attributes;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3243. 'AmazonDynamoDB_GlobalSecondaryIndexAWS19' : 'shape=mxgraph.aws4.global_secondary_index;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3244. 'AmazonDynamoDB_ItemAWS19' : 'shape=mxgraph.aws4.item;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3245. 'AmazonDynamoDB_ItemsAWS19' : 'shape=mxgraph.aws4.items;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3246. 'AmazonDynamoDB_TableAWS19' : 'shape=mxgraph.aws4.table;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3247. 'AmazonElastiCache_CacheNodeAWS19' : 'shape=mxgraph.aws4.cache_node;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3248. 'AmazonElastiCache_ForMemcachedAWS19' : 'shape=mxgraph.aws4.elasticache_for_memcached;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3249. 'AmazonElastiCache_ForRedisAWS19' : 'shape=mxgraph.aws4.elasticache_for_redis;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3250. 'AmazonRedshift_DenseComputeNode_blueAWS19' : 'shape=mxgraph.aws4.dense_compute_node;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3251. 'AmazonRedshift_DenseStorageNode_blueAWS19' : 'shape=mxgraph.aws4.dense_storage_node;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3252. 'AWSDatabaseMigrationService_DatabaseMigrationWorkflowAWS19' : 'shape=mxgraph.aws4.database_migration_workflow_job;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3253. 'AmazonDynamoDBDAXAWS19' : 'shape=mxgraph.aws4.dynamodb_dax;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3254. // AWS 19 - Desktop App Streaming
  3255. 'DesktopandAppStreamingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.desktop_and_app_streaming;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3256. 'AmazonAppstream2AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.appstream_20;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3257. 'AmazonWorkspacesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.workspaces;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3258. // AWS 19 - Developer Tools
  3259. 'DeveloperToolsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.developer_tools;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3260. 'AWSCloud9AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud9;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3261. 'AWSCodeBuildAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codebuild;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3262. 'AWSCodeCommitAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codecommit;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3263. 'AWSCodeDeployAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codedeploy;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3264. 'AWSCodePipelineAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codepipeline;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3265. 'AWSCodeStarAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codestar;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3266. 'AWSCommandLineInterfaceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.command_line_interface;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3267. 'AWSToolsAndSDKsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.tools_and_sdks;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3268. 'AWSXRayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.xray;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3269. 'AWSCloudDevelopmentKitAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud_development_kit;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3270. // AWS 19 - EC2 Instance Types
  3271. 'AmazonEC2_InstanceAWS19' : 'shape=mxgraph.aws4.instance2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3272. 'AmazonEC2_InstancesAWS19' : 'shape=mxgraph.aws4.instances;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3273. 'AmazonEC2_InstancewithCloudWatchAWS19' : 'shape=mxgraph.aws4.instance_with_cloudwatch2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3274. 'AmazonEC2_DBonInstanceAWS19' : 'shape=mxgraph.aws4.db_on_instance2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3275. 'AmazonEC2_SpotInstanceAWS19' : 'shape=mxgraph.aws4.spot_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3276. 'AmazonEC2_HighMemoryInstanceAWS19' : 'shape=mxgraph.aws4.high_memory_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3277. 'AmazonEC2_A1InstanceAWS19' : 'shape=mxgraph.aws4.a1_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3278. 'AmazonEC2_OptimizedInstanceAWS19' : 'shape=mxgraph.aws4.optimized_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3279. 'AmazonEC2_C4InstanceAWS19' : 'shape=mxgraph.aws4.c4_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3280. 'AmazonEC2_C5InstanceAWS19' : 'shape=mxgraph.aws4.c5_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3281. 'AmazonEC2_C5nInstanceAWS19' : 'shape=mxgraph.aws4.c5n_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3282. 'AmazonEC2_D2InstanceAWS19' : 'shape=mxgraph.aws4.d2_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3283. 'AmazonEC2_F1InstanceAWS19' : 'shape=mxgraph.aws4.f1_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3284. 'AmazonEC2_G3InstanceAWS19' : 'shape=mxgraph.aws4.g3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3285. 'AmazonEC2_H1InstanceAWS19' : 'shape=mxgraph.aws4.h1_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3286. 'AmazonEC2_I3InstanceAWS19' : 'shape=mxgraph.aws4.i3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3287. 'AmazonEC2_M4InstanceAWS19' : 'shape=mxgraph.aws4.m4_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3288. 'AmazonEC2_M5aInstanceAWS19' : 'shape=mxgraph.aws4.m5a_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3289. 'AmazonEC2_M5InstanceAWS19' : 'shape=mxgraph.aws4.m5_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3290. 'AmazonEC2_P2InstanceAWS19' : 'shape=mxgraph.aws4.p2_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3291. 'AmazonEC2_P3InstanceAWS19' : 'shape=mxgraph.aws4.p3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3292. 'AmazonEC2_R4InstanceAWS19' : 'shape=mxgraph.aws4.r4_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3293. 'AmazonEC2_R5aInstanceAWS19' : 'shape=mxgraph.aws4.r5a_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3294. 'AmazonEC2_R5InstanceAWS19' : 'shape=mxgraph.aws4.r5_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3295. 'AmazonEC2_T2InstanceAWS19' : 'shape=mxgraph.aws4.t2_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3296. 'AmazonEC2_T3aInstanceAWS19' : 'shape=mxgraph.aws4.t3a_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3297. 'AmazonEC2_T3InstanceAWS19' : 'shape=mxgraph.aws4.t3_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3298. 'AmazonEC2_X1eInstanceAWS19' : 'shape=mxgraph.aws4.x1e_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3299. 'AmazonEC2_X1InstanceAWS19' : 'shape=mxgraph.aws4.x1_instance2;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3300. 'AmazonEC2_z1dInstanceAWS19' : 'shape=mxgraph.aws4.z1d_instance;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3301. 'AmazonWorkLinkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.worklink;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3302. // AWS 19 - Game Tech
  3303. 'GameTechAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.game_tech;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3304. 'AmazonGameLiftAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.gamelift;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3305. // AWS 19 - General
  3306. 'AWSMarketplaceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.marketplace;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3307. 'AWSGeneral_AWSCloudAWS19' : 'shape=mxgraph.aws4.aws_cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3308. 'AWSGeneral_CorporateDataCenterAWS19' : 'shape=mxgraph.aws4.corporate_data_center;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3309. 'AWSGeneral_DiskAWS19' : 'shape=mxgraph.aws4.disk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3310. 'AWSGeneral_ForumsAWS19' : 'shape=mxgraph.aws4.forums;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3311. 'AWSGeneral_GenericDatabaseAWS19' : 'shape=mxgraph.aws4.generic_database;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3312. 'AWSGeneral_InternetAlt1AWS19' : 'shape=mxgraph.aws4.internet;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3313. 'AWSGeneral_InternetAlt2AWS19' : 'shape=mxgraph.aws4.internet_alt1;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3314. 'AWSGeneral_InternetGatewayAWS19' : 'shape=mxgraph.aws4.internet_alt2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3315. 'AWSGeneral_MobileClientAWS19' : 'shape=mxgraph.aws4.mobile_client;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3316. 'AWSGeneral_MultimediaAWS19' : 'shape=mxgraph.aws4.multimedia;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3317. 'AWSGeneral_OfficeBuildingAWS19' : 'shape=mxgraph.aws4.office_building;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3318. 'AWSGeneral_SAMLTokenAWS19' : 'shape=mxgraph.aws4.saml_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3319. 'AWSGeneral_SDKAWS19' : 'shape=mxgraph.aws4.external_sdk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3320. 'AWSGeneral_SSLPadlockAWS19' : 'shape=mxgraph.aws4.ssl_padlock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3321. 'AWSGeneral_TapeStorageAWS19' : 'shape=mxgraph.aws4.tape_storage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3322. 'AWSGeneral_ToolkitAWS19' : 'shape=mxgraph.aws4.external_toolkit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3323. 'AWSGeneral_TraditionalServerAWS19' : 'shape=mxgraph.aws4.traditional_server;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3324. 'AWSGeneral_UserAWS19' : 'shape=mxgraph.aws4.user;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3325. 'AWSGeneral_UsersAWS19' : 'shape=mxgraph.aws4.users;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3326. 'AWSGeneral_VirtualPrivateCloudAWS19' : 'shape=mxgraph.aws4.virtual_private_cloud;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3327. 'ClientAWS19' : 'shape=mxgraph.aws4.client;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3328. 'External_SDKAWS19' : 'shape=mxgraph.aws4.external_sdk;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3329. 'External_ToolkitAWS19' : 'shape=mxgraph.aws4.external_toolkit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3330. // AWS 19 - Groups (Note: repeated below without _v2)
  3331. 'AWSCloudAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fillColor=none;' + containerStyle,
  3332. 'AWSCloudaltAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fillColor=none;' + containerStyle,
  3333. 'RegionAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;dashed=1;fontColor=#0E82B8;fillColor=none;' + containerStyle,
  3334. 'AvailabilityZoneAWS19_v2' : 'verticalAlign=top;fillColor=none;dashed=1;dashPattern=5 5;fontColor=#0E82B8;' + containerStyle,
  3335. 'SecuritygroupAWS19_v2' : 'verticalAlign=top;fillColor=none;' + containerStyle,
  3336. 'AutoScalingAWS19_v2' : 'shape=mxgraph.aws4.groupCenter;grIcon=mxgraph.aws4.group_auto_scaling_group;grStroke=1;verticalAlign=top;fillColor=none;fontColor=#D75F17;spacingTop=25;fillColor=none;' + containerStyle,
  3337. 'VirtualprivatecloudVPCAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_vpc;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#2C8723;fillColor=none;' + containerStyle,
  3338. 'PrivateSubnetAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;strokeColor=#0E82B8;fillColor=none;' + containerStyle,
  3339. 'PublicSubnetAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;strokeColor=#2C8723;fontColor=#2C8723;fillColor=none;' + containerStyle,
  3340. 'ServercontentsAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_on_premise;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#5A6C86;fillColor=none;' + containerStyle,
  3341. 'CorporatedatacenterAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_corporate_data_center;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#5A6C86;fillColor=none;' + containerStyle,
  3342. 'ElasticBeanstalkcontainerAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_elastic_beanstalk;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#D75F17;fillColor=none;' + containerStyle,
  3343. 'EC2instancecontentsAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_ec2_instance_contents;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#D75F17;fillColor=none;' + containerStyle,
  3344. 'SpotFleetAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_spot_fleet;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#D75F17;fillColor=none;' + containerStyle,
  3345. 'AWSStepFunctionAWS19_v2' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_step_functions_workflow;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#CB1261;fillColor=none;' + containerStyle,
  3346. 'GenericGroup1AWS19_v2' : 'verticalAlign=top;align=center;fillColor=none;dashed=1;dashPattern=5 5;strokeColor=#5A6C86;fontColor=#5A6C86;' + containerStyle,
  3347. 'GenericGroup2AWS19_v2' : 'verticalAlign=top;align=center;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;' + containerStyle,
  3348. //Repeated from the above
  3349. 'AWSCloudAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fillColor=none;' + containerStyle,
  3350. 'AWSCloudaltAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fillColor=none;' + containerStyle,
  3351. 'RegionAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;dashed=1;fontColor=#0E82B8;fillColor=none;' + containerStyle,
  3352. 'AvailabilityZoneAWS19' : 'verticalAlign=top;fillColor=none;dashed=1;dashPattern=5 5;fontColor=#0E82B8;strokeOpacity=100;strokeColor=#147eba;' + containerStyle,
  3353. 'SecuritygroupAWS19' : 'verticalAlign=top;fillColor=none;fontColor=#DD3522;' + containerStyle,
  3354. 'AutoScalingAWS19' : 'shape=mxgraph.aws4.groupCenter;grIcon=mxgraph.aws4.group_auto_scaling_group;grStroke=1;verticalAlign=top;fillColor=none;fontColor=#D75F17;spacingTop=25;fillColor=none;' + containerStyle,
  3355. 'VirtualprivatecloudVPCAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_vpc;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#2C8723;fillColor=none;' + containerStyle,
  3356. 'PrivateSubnetAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;strokeColor=#0E82B8;fontColor=#0E82B8;fillOpacity=13;fillColor=#147eba;' + containerStyle,
  3357. 'PublicSubnetAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_security_group;grStroke=0;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;strokeColor=#2C8723;fontColor=#2C8723;fillOpacity=13;fillColor=#248814;' + containerStyle,
  3358. 'ServercontentsAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_on_premise;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#5A6C86;fillColor=none;' + containerStyle,
  3359. 'CorporatedatacenterAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_corporate_data_center;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#5A6C86;fillColor=none;' + containerStyle,
  3360. 'ElasticBeanstalkcontainerAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_elastic_beanstalk;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#D75F17;fillColor=none;' + containerStyle,
  3361. 'EC2instancecontentsAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_ec2_instance_contents;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#D75F17;fillColor=none;' + containerStyle,
  3362. 'SpotFleetAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_spot_fleet;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#D75F17;fillColor=none;' + containerStyle,
  3363. 'AWSStepFunctionAWS19' : 'shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_step_functions_workflow;verticalAlign=top;align=left;grIconSize=40;spacingLeft=45;spacingTop=5;fontColor=#CB1261;fillColor=none;' + containerStyle,
  3364. 'GenericGroup1AWS19' : 'verticalAlign=top;align=center;fillColor=none;dashed=1;dashPattern=5 5;strokeColor=#5A6C86;fontColor=#5A6C86;' + containerStyle,
  3365. 'GenericGroup2AWS19' : 'verticalAlign=top;align=center;fillColor=#EAECEF;' + containerStyle,
  3366. // AWS 19 - Internet of Things
  3367. 'InternetofThingsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.internet_of_things;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3368. 'AmazonFreeRTOSlightbgAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.freertos;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3369. 'AWSIoT1ClickAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_1click;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3370. 'AWSIoTButtonAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_button;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3371. 'AWSIoTCoreAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_core;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3372. 'AWSIoTDeviceDefenderAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_device_defender;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3373. 'AWSIoTDeviceManagementAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_device_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3374. 'AWSIoTEventsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_events;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3375. 'AWSIoTGreengrassAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.greengrass;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3376. 'AWSIoTSiteWiseAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_sitewise;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3377. 'AWSIoTThingsGraphAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_things_graph;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3378. 'AWSIoTAnalyticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.iot_analytics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3379. 'AWSIoTAnalytics_ChannelAWS19' : 'shape=mxgraph.aws4.iot_analytics_channel;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3380. 'AWSIoTAnalytics_DataStoreAWS19' : 'shape=mxgraph.aws4.iot_analytics_data_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3381. 'AWSIoTAnalytics_PipelineAWS19' : 'shape=mxgraph.aws4.iot_analytics_pipeline;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3382. 'IoT_ActionAWS19' : 'shape=mxgraph.aws4.action;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3383. 'IoT_ActuatorAWS19' : 'shape=mxgraph.aws4.actuator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3384. 'IoT_AlexaEnabledDeviceAWS19' : 'shape=mxgraph.aws4.alexa_enabled_device;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3385. 'IoT_AlexaSkillAWS19' : 'shape=mxgraph.aws4.alexa_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3386. 'IoT_AlexaVoiceServiceAWS19' : 'shape=mxgraph.aws4.alexa_skill;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3387. 'IoT_BankAWS19' : 'shape=mxgraph.aws4.bank;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3388. 'IoT_BicycleAWS19' : 'shape=mxgraph.aws4.bycicle;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3389. 'IoT_CameraAWS19' : 'shape=mxgraph.aws4.camera;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3390. 'IoT_CarAWS19' : 'shape=mxgraph.aws4.car;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3391. 'IoT_CartAWS19' : 'shape=mxgraph.aws4.cart;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3392. 'IoT_CertificateManagerAWS19' : 'shape=mxgraph.aws4.certificate_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3393. 'IoT_CoffeePotAWS19' : 'shape=mxgraph.aws4.coffee_pot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3394. 'IoT_DesiredStateAWS19' : 'shape=mxgraph.aws4.desired_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3395. 'IoT_DeviceGatewayAWS19' : 'shape=mxgraph.aws4.iot_device_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3396. 'IoT_DoorLockAWS19' : 'shape=mxgraph.aws4.door_lock;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3397. 'IoT_EchoAWS19' : 'shape=mxgraph.aws4.echo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3398. 'IoT_FactoryAWS19' : 'shape=mxgraph.aws4.factory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3399. 'IoT_FireTVAWS19' : 'shape=mxgraph.aws4.firetv;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3400. 'IoT_FireTVStickAWS19' : 'shape=mxgraph.aws4.firetv_stick;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3401. 'IoT_GenericAWS19' : 'shape=mxgraph.aws4.generic;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3402. 'IoT_HardwareBoardAWS19' : 'shape=mxgraph.aws4.hardware_board;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3403. 'IoT_HouseAWS19' : 'shape=mxgraph.aws4.house;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3404. 'IoT_HTTP2ProtocolAWS19' : 'shape=mxgraph.aws4.http2_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3405. 'IoT_HTTPProtocolAWS19' : 'shape=mxgraph.aws4.http_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3406. 'IoT_LambdaFunctionAWS19' : 'shape=mxgraph.aws4.lambda_function;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3407. 'IoT_LightbulbAWS19' : 'shape=mxgraph.aws4.lightbulb;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3408. 'IoT_MedicalEmergencyAWS19' : 'shape=mxgraph.aws4.medical_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3409. 'IoT_MQTTProtocolAWS19' : 'shape=mxgraph.aws4.mqtt_protocol;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3410. 'IoT_OverTheAirUpdateAWS19' : 'shape=mxgraph.aws4.iot_over_the_air_update;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3411. 'IoT_PoliceEmergencyAWS19' : 'shape=mxgraph.aws4.police_emergency;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3412. 'IoT_PolicyAWS19' : 'shape=mxgraph.aws4.policy;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3413. 'IoT_ReportedStateAWS19' : 'shape=mxgraph.aws4.reported_state;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3414. 'IoT_RuleAWS19' : 'shape=mxgraph.aws4.rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3415. 'IoT_SensorAWS19' : 'shape=mxgraph.aws4.sensor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3416. 'IoT_ServoAWS19' : 'shape=mxgraph.aws4.servo;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3417. 'IoT_ShadowAWS19' : 'shape=mxgraph.aws4.shadow;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3418. 'IoT_SimulatorAWS19' : 'shape=mxgraph.aws4.simulator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3419. 'IoT_ThermostatAWS19' : 'shape=mxgraph.aws4.thermostat;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3420. 'IoT_TopicAWS19' : 'shape=mxgraph.aws4.topic_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3421. 'IoT_TravelAWS19' : 'shape=mxgraph.aws4.travel;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3422. 'IoT_UtilityAWS19' : 'shape=mxgraph.aws4.utility;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3423. 'IoT_WindfarmAWS19' : 'shape=mxgraph.aws4.windfarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3424. 'AWSIoTGreengrass_ConnectorAWS19' : 'shape=mxgraph.aws4.connector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3425. 'AWSIoTAnalytics_DataSetAWS19' : 'shape=mxgraph.aws4.data_set;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3426. 'AWSIoTAnalytics_NotebookAWS19' : 'shape=mxgraph.aws4.notebook;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3427. // AWS 19 - Machine Learning
  3428. 'MachineLearningAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.machine_learning;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3429. 'AmazonComprehendAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.comprehend;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3430. 'AmazonElasticInferenceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_inference;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3431. 'AmazonForecastAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.forecast;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3432. 'AmazonLexAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lex;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3433. 'AmazonPersonalizeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.personalize;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3434. 'AmazonPollyAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.polly;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3435. 'AmazonRekognitionAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.rekognition;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3436. 'AmazonSageMakerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sagemaker;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3437. 'AmazonSageMakerGroundTruthAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sagemaker_ground_truth;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3438. 'AmazonTextractAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.textract;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3439. 'AmazonTranscribeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.transcribe;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3440. 'AmazonTranslateAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.translate;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3441. 'ApacheMXNetonAWSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.apache_mxnet_on_aws;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3442. 'AWSDeepLearningAMIsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deep_learning_amis;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3443. 'AWSDeepLensAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deeplens;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3444. 'AWSDeepRacerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deepracer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3445. 'TensorFlowonAWSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.tensorflow_on_aws;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3446. 'AmazonSageMaker_ModelAWS19' : 'shape=mxgraph.aws4.sagemaker_model;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3447. 'AmazonSageMaker_NotebookAWS19' : 'shape=mxgraph.aws4.sagemaker_notebook;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3448. 'AmazonSageMaker_TrainAWS19' : 'shape=mxgraph.aws4.sagemaker_train;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3449. 'AmazonRekognition_ImageAWS19' : 'shape=mxgraph.aws4.rekognition_image;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3450. 'AmazonRekognition_VideoAWS19' : 'shape=mxgraph.aws4.rekognition_video;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3451. 'AWSDeepLearningContainersAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.deep_learning_containers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3452. // AWS 19 - Management & Governance
  3453. 'ManagementandGovernanceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.management_and_governance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3454. 'AmazonCloudWatchAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3455. 'AWSAutoScalingAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.autoscaling;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3456. 'AWSCloudFormationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudformation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3457. 'AWSCloudTrailAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudtrail;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3458. 'AWSCommandLineInterface_pinkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.command_line_interface;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3459. 'AWSConfigAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.config;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3460. 'AWSControlTowerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.control_tower;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3461. 'AWSLicenseManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.license_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3462. 'AWSManagedServicesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.managed_services;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3463. 'AWSManagementConsoleAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.management_console;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3464. 'AWSOpsWorksAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.opsworks;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3465. 'AWSPersonalHealthDashboardAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.personal_health_dashboard;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3466. 'AWSServiceCatalogAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.service_catalog;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3467. 'AWSSystemsManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.systems_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3468. 'AWSTrustedAdvisorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.trusted_advisor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3469. 'AWSWellArchitectedToolAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.well_architected_tool;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3470. 'AmazonCloudWatch_AlarmAWS19' : 'shape=mxgraph.aws4.alarm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3471. 'AmazonCloudWatch_EventEventBasedAWS19' : 'shape=mxgraph.aws4.event_event_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3472. 'AmazonCloudWatch_EventTimeBasedAWS19' : 'shape=mxgraph.aws4.event_time_based;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3473. 'AmazonCloudWatch_RuleAWS19' : 'shape=mxgraph.aws4.rule_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3474. 'AWSCloudFormation_ChangeSetAWS19' : 'shape=mxgraph.aws4.change_set;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3475. 'AWSCloudFormation_StackAWS19' : 'shape=mxgraph.aws4.stack;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3476. 'AWSCloudFormation_TemplateAWS19' : 'shape=mxgraph.aws4.template;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3477. 'AWSOpsWorks_AppsAWS19' : 'shape=mxgraph.aws4.opsworks_apps;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3478. 'AWSOpsWorks_DeploymentsAWS19' : 'shape=mxgraph.aws4.deployments;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3479. 'AWSOpsWorks_InstancesAWS19' : 'shape=mxgraph.aws4.instances_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3480. 'AWSOpsWorks_LayersAWS19' : 'shape=mxgraph.aws4.layers;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3481. 'AWSOpsWorks_MonitoringAWS19' : 'shape=mxgraph.aws4.monitoring;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3482. 'AWSOpsWorks_PermissionsAWS19' : 'shape=mxgraph.aws4.opsworks_permissions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3483. 'AWSOpsWorks_ResourcesAWS19' : 'shape=mxgraph.aws4.resources;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3484. 'AWSOpsWorks_Stack2AWS19' : 'shape=mxgraph.aws4.stack2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3485. 'AWSSystemsManager_AutomationAWS19' : 'shape=mxgraph.aws4.automation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3486. 'AWSSystemsManager_DocumentsAWS19' : 'shape=mxgraph.aws4.documents;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3487. 'AWSSystemsManager_InventoryAWS19' : 'shape=mxgraph.aws4.inventory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3488. 'AWSSystemsManager_MaintenanceWindowsAWS19' : 'shape=mxgraph.aws4.maintenance_windows;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3489. 'AWSSystemsManager_ParameterStoreAWS19' : 'shape=mxgraph.aws4.parameter_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3490. 'AWSSystemsManager_PatchManagerAWS19' : 'shape=mxgraph.aws4.patch_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3491. 'AWSSystemsManager_RunCommandAWS19' : 'shape=mxgraph.aws4.run_command;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3492. 'AWSSystemsManager_StateManagerAWS19' : 'shape=mxgraph.aws4.state_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3493. 'AWSTrustedAdvisor_ChecklistAWS19' : 'shape=mxgraph.aws4.checklist;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3494. 'AWSTrustedAdvisor_ChecklistCostAWS19' : 'shape=mxgraph.aws4.checklist_cost;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3495. 'AWSTrustedAdvisor_ChecklistFaultTolerantAWS19' : 'shape=mxgraph.aws4.checklist_fault_tolerant;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3496. 'AWSTrustedAdvisor_ChecklistPerformanceAWS19' : 'shape=mxgraph.aws4.checklist_performance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3497. 'AWSTrustedAdvisor_ChecklistSecurityAWS19' : 'shape=mxgraph.aws4.checklist_security;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3498. 'AWSOrganizationsAWS19_v2' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.organizations;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3499. 'AWSSystemsManagerOpsCenterAWS19' : 'shape=mxgraph.aws4.systems_manager_opscenter;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3500. // AWS 19 - Media Services
  3501. 'MediaServicesAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.media_services;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3502. 'AmazonElasticTranscoderAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_transcoder;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3503. 'AmazonKinesisVideoStreams_orangeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_video_streams;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3504. 'AWSElementalMediaConnectAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediaconnect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3505. 'AWSElementalMediaConvertAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediaconvert;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3506. 'AWSElementalMediaLiveAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_medialive;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3507. 'AWSElementalMediaPackageAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediapackage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3508. 'AWSElementalMediaStoreAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediastore;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3509. 'AWSElementalMediaTailorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elemental_mediatailor;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3510. // AWS 19 - Migration & Transfer
  3511. 'MigrationandTransferAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.migration_and_transfer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3512. 'AWSApplicationDiscoveryServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.application_discovery_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3513. 'AWSDatabaseMigrationService_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.database_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3514. 'AWSDataSyncAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.datasync;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3515. 'AWSMigrationHubAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.migration_hub;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3516. 'AWSServerMigrationServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.server_migration_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3517. 'AWSSnowballAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3518. 'AWSSnowballEdgeAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball_edge;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3519. 'AWSSnowmobileAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowmobile;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3520. 'AWSTransferforSFTPAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.transfer_for_sftp;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3521. 'AWSDataSync_AgentAWS19' : 'shape=mxgraph.aws4.agent2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3522. // AWS 19 - Mobile
  3523. 'MobileAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.mobile;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3524. 'AmazonAPIGatewayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3525. 'AmazonPinpoint_redAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.pinpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3526. 'AWSAmplifyAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.amplify;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3527. 'AWSAppSync_redAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.appsync;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3528. 'AWSDeviceFarmAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.device_farm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3529. // AWS 19 - Networking & Content Delivery
  3530. 'NetworkingandContentDeliveryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.networking_and_content_delivery;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3531. 'AmazonAPIGateway_purpleAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3532. 'AmazonCloudFrontAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3533. 'AmazonRoute53AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.route_53;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3534. 'AmazonVPCAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.vpc;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3535. 'AmazonVPCPrivateLinkAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.vpc_privatelink;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3536. 'AWSAppMeshAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.app_mesh;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3537. 'AWSClientVPNAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.client_vpn;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3538. 'AWSCloudMapAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud_map;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3539. 'AWSDirectConnectAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.direct_connect;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3540. 'AWSGlobalAcceleratorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.global_accelerator;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3541. 'AWSTransitGatewayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.transit_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3542. 'AmazonCloudFront_DownloadDistributionAWS19' : 'shape=mxgraph.aws4.download_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3543. 'AmazonCloudFront_EdgeLocationAWS19' : 'shape=mxgraph.aws4.edge_location;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3544. 'AmazonCloudFront_StreamingDistributionAWS19' : 'shape=mxgraph.aws4.streaming_distribution;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3545. 'AmazonRoute53_HostedZoneAWS19' : 'shape=mxgraph.aws4.hosted_zone;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3546. 'AmazonRoute53_RouteTableAWS19' : 'shape=mxgraph.aws4.route_table;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3547. 'AmazonVPC_CustomerGatewayAWS19' : 'shape=mxgraph.aws4.customer_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3548. 'AmazonVPC_ElasticNetworkAdapterAWS19' : 'shape=mxgraph.aws4.elastic_network_adapter;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3549. 'AmazonVPC_ElasticNetworkInterfaceAWS19' : 'shape=mxgraph.aws4.elastic_network_interface;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3550. 'AmazonVPC_EndpointsAWS19' : 'shape=mxgraph.aws4.endpoints;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3551. 'AmazonVPC_FlowLogsAWS19' : 'shape=mxgraph.aws4.flow_logs;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3552. 'AmazonVPC_InternetGatewayAWS19' : 'shape=mxgraph.aws4.internet_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3553. 'AmazonVPC_NATGatewayAWS19' : 'shape=mxgraph.aws4.nat_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3554. 'AmazonVPC_NetworkAccessControlListAWS19' : 'shape=mxgraph.aws4.network_access_control_list;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3555. 'AmazonVPC_PeeringAWS19' : 'shape=mxgraph.aws4.peering;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3556. 'AmazonVPC_RouterAWS19' : 'shape=mxgraph.aws4.router;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3557. 'AmazonVPC_VPNConnectionAWS19' : 'shape=mxgraph.aws4.vpn_connection;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3558. 'AmazonVPC_VPNGatewayAWS19' : 'shape=mxgraph.aws4.vpn_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3559. 'AmazonNetworkingAPIGateway_EndpointAWS19' : 'shape=mxgraph.aws4.endpoint;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3560. 'AmazonVPCTrafficMirroringAWS19' : 'shape=mxgraph.aws4.vpc_traffic_mirroring;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3561. 'AWSSitetoSiteVPNAWS19' : 'shape=mxgraph.aws4.site_to_site_vpn;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3562. 'ElasticLoadBalancing_ApplicationloadbalancerAWS19' : 'shape=mxgraph.aws4.application_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3563. 'ElasticLoadBalancingELBAWS19_v2' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_load_balancing;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3564. 'ElasticLoadBalancing_ClassicloadbalancerAWS19' : 'shape=mxgraph.aws4.classic_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3565. 'ElasticLoadBalancing_NetworkloadbalancerAWS19' : 'shape=mxgraph.aws4.network_load_balancer;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3566. // AWS 19 - Robotics
  3567. 'RoboticsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.robotics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3568. 'AWSRoboMakerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.robotics;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3569. 'AWSRoboMaker_CloudExtensionROSAWS19' : 'shape=mxgraph.aws4.cloud_extension_ros;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3570. 'AWSRoboMaker_DevelopmentEnvironmentAWS19' : 'shape=mxgraph.aws4.development_environment;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3571. 'AWSRoboMaker_FleetManagementAWS19' : 'shape=mxgraph.aws4.fleet_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3572. 'AWSRoboMaker_SimulationAWS19' : 'shape=mxgraph.aws4.simulation;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3573. // AWS 19 - Satellite
  3574. 'SatelliteAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.satellite;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3575. 'AWSGroundStationAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ground_station;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3576. // AWS 19 - Security, Identity & Compliance
  3577. 'SecurityIdentityandComplianceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.security_identity_and_compliance;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3578. 'AmazonCloudDirectoryAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloud_directory;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3579. 'AmazonCognitoAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cognito;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3580. 'AmazonGuardDutyAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.guardduty;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3581. 'AmazonInspectorAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.inspector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3582. 'AmazonMacieAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.macie;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3583. 'AWSArtifactAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.artifact;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3584. 'AWSCertificateManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.certificate_manager_3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3585. 'AWSCloudHSMAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudhsm;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3586. 'AWSDirectoryServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.directory_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3587. 'AWSFirewallManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.firewall_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3588. 'AWSIdentityandAccessManagement_IAMAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.identity_and_access_management;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3589. 'AWSKeyManagementServiceAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.key_management_service;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3590. 'AWSOrganizationsAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.organizations;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3591. 'AWSSecretsManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.secrets_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3592. 'AWSSecurityHubAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.security_hub;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3593. 'AWSShieldAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.shield;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3594. 'AWSSingleSignOnAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.single_sign_on;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3595. 'AWSWAFAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.waf;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3596. 'AmazonInspector_AgentAWS19' : 'shape=mxgraph.aws4.agent;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3597. 'AWSCertificateManager_CertificateManagerAWS19' : 'shape=mxgraph.aws4.certificate_manager_2;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3598. 'AWSIdentityandAccessManagementIAM_AddonAWS19' : 'shape=mxgraph.aws4.addon;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3599. 'AWSIdentityandAccessManagementIAM_AWSSTSAWS19' : 'shape=mxgraph.aws4.sts;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3600. 'AWSIdentityandAccessManagementIAM_AWSSTSAlternateAWS19' : 'shape=mxgraph.aws4.sts_alternate;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3601. 'AWSIdentityandAccessManagementIAM_DataEncryptionKeyAWS19' : 'shape=mxgraph.aws4.data_encryption_key;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3602. 'AWSIdentityandAccessManagementIAM_EncryptedDataAWS19' : 'shape=mxgraph.aws4.encrypted_data;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3603. 'AWSIdentityandAccessManagementIAM_LongtermSecurityCredentialAWS19' : 'shape=mxgraph.aws4.long_term_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3604. 'AWSIdentityandAccessManagementIAM_MFATokenAWS19' : 'shape=mxgraph.aws4.mfa_token;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3605. 'AWSIdentityandAccessManagementIAM_PermissionsAWS19' : 'shape=mxgraph.aws4.permissions;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3606. 'AWSIdentityandAccessManagementIAM_RoleAWS19' : 'shape=mxgraph.aws4.role;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3607. 'AWSIdentityandAccessManagementIAM_TemporarySecurityCredentialAWS19' : 'shape=mxgraph.aws4.temporary_security_credential;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3608. 'AWSOrganizations_AccountAWS19' : 'shape=mxgraph.aws4.organizations_account;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3609. 'AWSOrganizations_OrganizationalUnitAWS19' : 'shape=mxgraph.aws4.organizations_organizational_unit;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3610. 'AWSShield_ShieldAdvancedAWS19' : 'shape=mxgraph.aws4.shield_shield_advanced;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3611. 'AWSWAF_FilteringruleAWS19' : 'shape=mxgraph.aws4.filtering_rule;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3612. 'AWSADConnectorAWS19' : 'shape=mxgraph.aws4.ad_connector;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3613. 'AWSSimpleADAWS19' : 'shape=mxgraph.aws4.simple_ad;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3614. 'AWSManagedMicrosoftADAWS19' : 'shape=mxgraph.aws4.managed_ms_ad;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3615. 'AWSResourceAccessManagerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.resource_access_manager;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3616. // AWS 19 - Storage
  3617. 'StorageAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.storage;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;pointerEvents=1',
  3618. 'AmazonElasticBlockStoreEBSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_block_store;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3619. 'AmazonElasticFileSystem_EFSAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elastic_file_system;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3620. 'AmazonFSxAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fsx;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3621. 'AmazonFSxforLustreAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fsx_for_lustre;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3622. 'AmazonFSxforWindowsFileServerAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.fsx_for_windows_file_server;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3623. 'AmazonS3GlacierAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.glacier;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3624. 'AmazonSimpleStorageServiceS3AWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3625. 'AWSBackupAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.backup;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3626. 'AWSSnowball_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3627. 'AWSSnowballEdge_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowball_edge;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3628. 'AWSSnowmobile_greenAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.snowmobile;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3629. 'AWSStorageGatewayAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.storage_gateway;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3630. 'AmazonElasticBlockStoreEBS_SnapshotAWS19' : 'shape=mxgraph.aws4.snapshot;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3631. 'AmazonElasticBlockStoreEBS_VolumeAWS19' : 'shape=mxgraph.aws4.volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3632. 'AmazonS3Glacier_ArchiveAWS19' : 'shape=mxgraph.aws4.archive;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3633. 'AmazonS3Glacier_VaultAWS19' : 'shape=mxgraph.aws4.vault;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3634. 'AmazonSimpleStorageServiceS3_BucketAWS19' : 'shape=mxgraph.aws4.bucket;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3635. 'AmazonSimpleStorageServiceS3_BucketwithObjectsAWS19' : 'shape=mxgraph.aws4.bucket_with_objects;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3636. 'AmazonSimpleStorageServiceS3_ObjectAWS19' : 'shape=mxgraph.aws4.object;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3637. 'AWSSnowFamily_SnowballImportExportAWS19' : 'shape=mxgraph.aws4.import_export;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3638. 'AWSStorageGateway_CachedVolumeAWS19' : 'shape=mxgraph.aws4.cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3639. 'AWSStorageGateway_NonCachedVolumeAWS19' : 'shape=mxgraph.aws4.non_cached_volume;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3640. 'AWSStorageGateway_VirtualTapeLibraryAWS19' : 'shape=mxgraph.aws4.virtual_tape_library;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3641. 'AmazonElasticFileSystem_EFS_FilesystemAWS19' : 'shape=mxgraph.aws4.file_system;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=none;pointerEvents=1',
  3642. 'EFSInfrequentAccessAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.efs_infrequentaccess;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3643. 'EFSStandardAWS19' : 'shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.efs_standard;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;strokeColor=#ffffff;pointerEvents=1',
  3644. // GCP - Service Cards
  3645. 'GCPServiceCardApplicationSystemBlock' : cs,
  3646. 'GCPServiceCardAuthorizationBlock' : cs,
  3647. 'GCPServiceCardBlankBlock' : cs,
  3648. 'GCPServiceCardReallyBlankBlock' : cs,
  3649. 'GCPServiceCardBucketBlock' : cs,
  3650. 'GCPServiceCardCDNInterconnectBlock' : cs,
  3651. 'GCPServiceCardCloudDNSBlock' : cs,
  3652. 'GCPServiceCardClusterBlock' : cs,
  3653. 'GCPServiceCardDiskSnapshotBlock' : cs,
  3654. 'GCPServiceCardEdgePopBlock' : cs,
  3655. 'GCPServiceCardFrontEndPlatformServicesBlock' : cs,
  3656. 'GCPServiceCardGatewayBlock' : cs,
  3657. 'GCPServiceCardGoogleNetworkBlock' : cs,
  3658. 'GCPServiceCardImageServicesBlock' : cs,
  3659. 'GCPServiceCardLoadBalancerBlock' : cs,
  3660. 'GCPServiceCardLocalComputeBlock' : cs,
  3661. 'GCPServiceCardLocalStorageBlock' : cs,
  3662. 'GCPServiceCardLogsAPIBlock' : cs,
  3663. 'GCPServiceCardMemcacheBlock' : cs,
  3664. 'GCPServiceCardNATBlock' : cs,
  3665. 'GCPServiceCardPaymentFormBlock' : cs,
  3666. 'GCPServiceCardPushNotificationsBlock' : cs,
  3667. 'GCPServiceCardScheduledTasksBlock' : cs,
  3668. 'GCPServiceCardServiceDiscoveryBlock' : cs,
  3669. 'GCPServiceCardSquidProxyBlock' : cs,
  3670. 'GCPServiceCardTaskQueuesBlock' : cs,
  3671. 'GCPServiceCardVirtualFileSystemBlock' : cs,
  3672. 'GCPServiceCardVPNGatewayBlock' : cs,
  3673. // GCP - Device Cards
  3674. 'GCPInputDatabase' : cs,
  3675. 'GCPInputRecord' : cs,
  3676. 'GCPInputPayment' : cs,
  3677. 'GCPInputGateway' : cs,
  3678. 'GCPInputLocalCompute' : cs,
  3679. 'GCPInputBeacon' : cs,
  3680. 'GCPInputStorage' : cs,
  3681. 'GCPInputList' : cs,
  3682. 'GCPInputStream' : cs,
  3683. 'GCPInputMobileDevices' : cs,
  3684. 'GCPInputCircuitBoard' : cs,
  3685. 'GCPInputLive' : cs,
  3686. 'GCPInputUsers' : cs,
  3687. 'GCPInputLaptop' : cs,
  3688. 'GCPInputApplication' : cs,
  3689. 'GCPInputLightbulb' : cs,
  3690. 'GCPInputGame' : cs,
  3691. 'GCPInputDesktop' : cs,
  3692. 'GCPInputDesktopAndMobile' : cs,
  3693. 'GCPInputWebcam' : cs,
  3694. 'GCPInputSpeaker' : cs,
  3695. 'GCPInputRetail' : cs,
  3696. 'GCPInputReport' : cs,
  3697. 'GCPInputPhone' : cs,
  3698. 'GCPInputBlank' : cs,
  3699. // Site Map
  3700. 'SMPage' : cs,
  3701. 'SMHome' : s + 'sitemap.home;strokeColor=#000000;fillColor=#E6E6E6',
  3702. 'SMGallery' : s + 'sitemap.gallery;strokeColor=#000000;fillColor=#E6E6E6',
  3703. 'SMShopping' : s + 'sitemap.shopping;strokeColor=#000000;fillColor=#E6E6E6',
  3704. 'SMMap' : s + 'sitemap.map;strokeColor=#000000;fillColor=#E6E6E6',
  3705. 'SMAthletics' : s + 'sitemap.sports;strokeColor=#000000;fillColor=#E6E6E6',
  3706. 'SMLogin' : s + 'sitemap.login;strokeColor=#000000;fillColor=#E6E6E6',
  3707. 'SMPrint' : s + 'sitemap.print;strokeColor=#000000;fillColor=#E6E6E6',
  3708. 'SMScript' : s + 'sitemap.script;strokeColor=#000000;fillColor=#E6E6E6',
  3709. 'SMSearch' : s + 'sitemap.search;strokeColor=#000000;fillColor=#E6E6E6',
  3710. 'SMSettings' : s + 'sitemap.settings;strokeColor=#000000;fillColor=#E6E6E6',
  3711. 'SMSitemap' : s + 'sitemap.sitemap;strokeColor=#000000;fillColor=#E6E6E6',
  3712. 'SMSuccess' : s + 'sitemap.success;strokeColor=#000000;fillColor=#E6E6E6',
  3713. 'SMVideo' : s + 'sitemap.video;strokeColor=#000000;fillColor=#E6E6E6',
  3714. 'SMAudio' : s + 'sitemap.audio;strokeColor=#000000;fillColor=#E6E6E6',
  3715. 'SMBlog' : s + 'sitemap.blog;strokeColor=#000000;fillColor=#E6E6E6',
  3716. 'SMCalendar' : s + 'sitemap.calendar;strokeColor=#000000;fillColor=#E6E6E6',
  3717. 'SMChart' : s + 'sitemap.chart;strokeColor=#000000;fillColor=#E6E6E6',
  3718. 'SMCloud' : s + 'sitemap.cloud;strokeColor=#000000;fillColor=#E6E6E6',
  3719. 'SMDocument' : s + 'sitemap.document;strokeColor=#000000;fillColor=#E6E6E6',
  3720. 'SMDownload' : s + 'sitemap.download;strokeColor=#000000;fillColor=#E6E6E6',
  3721. 'SMError' : s + 'sitemap.error;strokeColor=#000000;fillColor=#E6E6E6',
  3722. 'SMForm' : s + 'sitemap.form;strokeColor=#000000;fillColor=#E6E6E6',
  3723. 'SMGame' : s + 'sitemap.game;strokeColor=#000000;fillColor=#E6E6E6',
  3724. 'SMJobs' : s + 'sitemap.jobs;strokeColor=#000000;fillColor=#E6E6E6',
  3725. 'SMLucid' : s + 'sitemap.home;strokeColor=#000000;fillColor=#E6E6E6',
  3726. 'SMNewspress' : s + 'sitemap.news;strokeColor=#000000;fillColor=#E6E6E6',
  3727. 'SMPhoto' : s + 'sitemap.photo;strokeColor=#000000;fillColor=#E6E6E6',
  3728. 'SMPortfolio' : s + 'sitemap.portfolio;strokeColor=#000000;fillColor=#E6E6E6',
  3729. 'SMPricing' : s + 'sitemap.pricing;strokeColor=#000000;fillColor=#E6E6E6',
  3730. 'SMProfile' : s + 'sitemap.profile;strokeColor=#000000;fillColor=#E6E6E6',
  3731. 'SMSlideshow' : s + 'sitemap.slideshow;strokeColor=#000000;fillColor=#E6E6E6',
  3732. 'SMUpload' : s + 'sitemap.upload;strokeColor=#000000;fillColor=#E6E6E6',
  3733. //SVG shapes
  3734. 'SVGPathBlock2' : cs,
  3735. //Special cases
  3736. 'PresentationFrameBlock' : cs,
  3737. //Timeline
  3738. //TODO Timeline shapes are postponed, this code is a work-in-progress
  3739. 'TimelineBlock' : cs,
  3740. 'TimelineMilestoneBlock' : cs,
  3741. 'TimelineIntervalBlock' : cs,
  3742. 'MinimalTextBlock' : 'strokeColor=none;fillColor=none',
  3743. //Freehand
  3744. 'FreehandBlock' : cs,
  3745. //ExtShapes
  3746. 'ExtShapeLaptopBlock': ss + 'citrix.laptop_2;verticalLabelPosition=bottom;verticalAlign=top',
  3747. 'ExtShapeServerBlock': ss + 'citrix.tower_server;verticalLabelPosition=bottom;verticalAlign=top',
  3748. 'ExtShapeCloudBlock': ss + 'citrix.cloud;verticalLabelPosition=bottom;verticalAlign=top',
  3749. 'ExtShapeUserBlock': ss + 'aws3d.end_user;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#073763',
  3750. 'ExtShapeWorkstationLCDBlock': ss + 'veeam.3d.workstation;verticalLabelPosition=bottom;verticalAlign=top',
  3751. //Infographics
  3752. 'InfographicsBlock': cs,
  3753. //Other
  3754. 'FlexiblePolygonBlock': cs,
  3755. 'PersonRoleBlock' : cs
  3756. };
  3757. function mapImgUrl(imgUrl)
  3758. {
  3759. if (imgUrl && LucidImporter.imgSrcRepl != null)
  3760. {
  3761. var attMap = LucidImporter.imgSrcRepl.attMap;
  3762. if (attMap[imgUrl])
  3763. {
  3764. imgUrl = attMap[imgUrl];
  3765. }
  3766. else
  3767. {
  3768. var imgRepl = LucidImporter.imgSrcRepl.imgRepl;
  3769. for (var i = 0; i < imgRepl.length; i++)
  3770. {
  3771. var repl = imgRepl[i];
  3772. imgUrl = imgUrl.replace(repl.searchVal, repl.replVal);
  3773. }
  3774. LucidImporter.hasExtImgs = true;
  3775. }
  3776. }
  3777. return imgUrl;
  3778. };
  3779. function mapFontFamily(fontFamily)
  3780. {
  3781. //We support a single font only since we can have one mapping only
  3782. gFontFamilyStyle = '';
  3783. try
  3784. {
  3785. if (fontFamily)
  3786. {
  3787. var mappedFont = null;
  3788. if (LucidImporter.advImpConfig && LucidImporter.advImpConfig.fontMapping)
  3789. {
  3790. mappedFont = LucidImporter.advImpConfig.fontMapping[fontFamily];
  3791. }
  3792. if (mappedFont)
  3793. {
  3794. for (var key in mappedFont)
  3795. {
  3796. gFontFamilyStyle += key + '=' + mappedFont[key] + ';';
  3797. }
  3798. return mappedFont['fontFamily']? 'font-family: ' + mappedFont['fontFamily'] : '';
  3799. }
  3800. else if (fontFamily != defaultLucidFont)
  3801. {
  3802. gFontFamilyStyle = 'fontFamily=' + fontFamily + ';';
  3803. return 'font-family: ' + fontFamily + ';';
  3804. }
  3805. }
  3806. }
  3807. catch(e) {}
  3808. return '';
  3809. };
  3810. function fix1Digit(num)
  3811. {
  3812. return Math.round(num * 10) / 10;
  3813. };
  3814. // actual code start
  3815. //TODO This can be optimized more
  3816. function convertTxt2Html(txt, srcM, props)
  3817. {
  3818. var blockStyles = {'a': true, 'il': true, 'ir': true, 'mt': true, 'mb': true, 'p': true, 't': true, 'l': true};
  3819. var nonBlockStyles = {'lk': true, 's': true, 'c': true, 'b': true, 'fc': true, 'i': true, 'u': true, 'k': true, 'f': true, 'ac': true};
  3820. srcM.sort(function(a, b)
  3821. {
  3822. return a.s - b.s;
  3823. });
  3824. var m = srcM.filter(function(m)
  3825. {
  3826. return nonBlockStyles[m.n];
  3827. });
  3828. //To prevent losing beginning of a label when first one is not at zero (links case)
  3829. if (m[0] && m[0].s != 0)
  3830. {
  3831. m.unshift({s: 0, n: 'dummy', v: '', e: m[0].s});
  3832. }
  3833. var globalStyles = srcM.filter(function(m)
  3834. {
  3835. return blockStyles[m.n];
  3836. });
  3837. //Add missing block that defauls to center
  3838. var newlines = [0], nl = 0;
  3839. while ((nl = txt.indexOf('\n', nl)) > 0)
  3840. {
  3841. nl++;
  3842. newlines.push(nl);
  3843. }
  3844. var expectedS = 0;
  3845. for (var i = 0; i < globalStyles.length; i++)
  3846. {
  3847. if (globalStyles[i].s > newlines[expectedS])
  3848. {
  3849. globalStyles.splice(i, 0, {s: newlines[expectedS], n: 'a', v: props.TextAlign || 'center'});
  3850. }
  3851. else
  3852. {
  3853. var skip = 0;
  3854. while(i + skip < globalStyles.length && globalStyles[i + skip].s == newlines[expectedS])
  3855. {
  3856. skip++;
  3857. }
  3858. if (skip > 1)
  3859. {
  3860. i += skip - 1; // -1 since loop will increment again
  3861. }
  3862. }
  3863. expectedS++;
  3864. }
  3865. if (newlines[expectedS] != null)
  3866. {
  3867. globalStyles.push({s: newlines[expectedS], n: 'a', v: props.TextAlign || 'center'});
  3868. }
  3869. var html = '', ends = m.slice();
  3870. ends.sort(function(a, b)
  3871. {
  3872. return a.e - b.e;
  3873. });
  3874. var i = 0, j = 0, k = 0, curStyles = {}, curBlockStyles = {}, openTags = [], openTagsCount = [],
  3875. openBlockTags = [], blockActive = false, listActive = false, listType;
  3876. function startBlockTag(styles, nonBlockStyles)
  3877. {
  3878. var str = '';
  3879. var t = styles['t'];
  3880. var l = styles['l'] || {v: t && t.v == 'ul'? 'auto' : 'decimal'};
  3881. if (t != null && (listActive == false || listActive != t.v || listType != l.v))
  3882. {
  3883. if (listActive)
  3884. {
  3885. str += endBlockTag(true);
  3886. }
  3887. listActive = t.v;
  3888. listType = l.v;
  3889. if (t.v == 'ul')
  3890. {
  3891. str += '<ul ';
  3892. openBlockTags.push('ul');
  3893. }
  3894. else
  3895. {
  3896. str += '<ol ';
  3897. openBlockTags.push('ol');
  3898. }
  3899. str += 'style="margin: 0px; padding-left: 10px;list-style-position: inside; list-style-type:';
  3900. if (t.v == 'hl')
  3901. {
  3902. str += 'upper-roman';
  3903. }
  3904. else
  3905. {
  3906. switch(l.v)
  3907. {
  3908. case 'auto':
  3909. str += 'disc';
  3910. break;
  3911. case 'inv': //Approx
  3912. str += 'circle';
  3913. break;
  3914. case 'disc':
  3915. str += 'circle';
  3916. break;
  3917. case 'trib': //Approx
  3918. str += 'square';
  3919. break;
  3920. case 'square':
  3921. str += 'square';
  3922. break;
  3923. case 'dash': //Approx
  3924. str += 'square';
  3925. break;
  3926. case 'heart': //Approx
  3927. str += 'disc';
  3928. break;
  3929. default:
  3930. str += 'decimal';
  3931. }
  3932. }
  3933. str += '">';
  3934. }
  3935. else if (t == null)
  3936. {
  3937. if (listActive)
  3938. {
  3939. str += endBlockTag(true);
  3940. listActive = false;
  3941. }
  3942. str += '<div style="';
  3943. openBlockTags.push('div');
  3944. }
  3945. if (t != null)
  3946. {
  3947. str += '<li style="text-align:' + (styles['a']? styles['a'].v : (props.TextAlign || 'center')) + ';';
  3948. var color, fontSize;
  3949. // Find font size/color
  3950. if (nonBlockStyles != null)
  3951. {
  3952. if (nonBlockStyles['c'])
  3953. {
  3954. color = nonBlockStyles['c'].v;
  3955. }
  3956. if (nonBlockStyles['s'])
  3957. {
  3958. fontSize = nonBlockStyles['s'].v;
  3959. }
  3960. }
  3961. try
  3962. {
  3963. var s = m[i], e = ends[j];
  3964. var it = i;
  3965. 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
  3966. {
  3967. var curS = s.s;
  3968. while(s != null && s.s == curS)
  3969. {
  3970. if (s.n == 's')
  3971. {
  3972. fontSize = s.v;
  3973. }
  3974. else if (s.n == 'c')
  3975. {
  3976. color = s.v;
  3977. }
  3978. s = m[++it];
  3979. }
  3980. }
  3981. }
  3982. catch(e)
  3983. {
  3984. console.log(e);
  3985. }
  3986. color = rgbToHex(color);
  3987. if (color != null)
  3988. {
  3989. color = color.substring(0, 7);
  3990. str += 'color:' + color + ';';
  3991. }
  3992. //Ignore zero font-size
  3993. if (fontSize)
  3994. {
  3995. str += 'font-size:' + fix1Digit(fontSize * scale) + 'px;';
  3996. }
  3997. str += '">';
  3998. openBlockTags.push('li');
  3999. str += '<span style="';
  4000. openBlockTags.push('span');
  4001. }
  4002. if (!listActive)
  4003. {
  4004. var tmp = styles['a']? styles['a'].v : (props.TextAlign || 'center');
  4005. var jc = tmp;
  4006. if (tmp == 'left')
  4007. {
  4008. jc = 'flex-start';
  4009. }
  4010. else if (tmp == 'right')
  4011. {
  4012. jc = 'flex-end';
  4013. }
  4014. str += 'display: flex; justify-content: ' + jc + '; text-align: ' + tmp + '; align-items: baseline; font-size: 0; line-height: 1.25;';
  4015. }
  4016. if (styles['il'])
  4017. {
  4018. str += 'margin-left: ' + Math.max(0, fix1Digit(styles['il'].v * scale - (listActive? 28 : 0))) + 'px;';
  4019. }
  4020. if (styles['ir'])
  4021. {
  4022. str += 'margin-right: ' + fix1Digit(styles['ir'].v * scale) + 'px;';
  4023. }
  4024. if (styles['mt'])
  4025. {
  4026. str += 'margin-top: ' + fix1Digit(styles['mt'].v * scale) + 'px;';
  4027. }
  4028. if (styles['mb'])
  4029. {
  4030. str += 'margin-bottom: ' + fix1Digit(styles['mb'].v * scale) + 'px;';
  4031. }
  4032. str += 'margin-top: -2px;">';
  4033. if (!listActive)
  4034. {
  4035. str += '<span>';// Is this needed?
  4036. openBlockTags.push('span');
  4037. }
  4038. return str;
  4039. };
  4040. function startTag(styles)
  4041. {
  4042. if (mxUtils.isEmptyObject(styles))
  4043. {
  4044. return '';
  4045. }
  4046. var str = '';
  4047. var tagCount = 0;
  4048. if (styles['lk'])
  4049. {
  4050. var lk = styles['lk'];
  4051. if (lk.v != null && lk.v.length > 0)
  4052. {
  4053. str += '<a href="' + getLink(lk.v[0]) + '">';
  4054. openTags.push('a');
  4055. tagCount++;
  4056. }
  4057. }
  4058. str += '<span style="';
  4059. openTags.push('span');
  4060. tagCount++;
  4061. //Ignore zero font-size
  4062. str += 'font-size:' + (styles['s'] && styles['s'].v? fix1Digit(styles['s'].v * scale) : defaultFontSize) + 'px;';
  4063. if (styles['c'])
  4064. {
  4065. var v = rgbToHex(styles['c'].v);
  4066. if (v != null)
  4067. {
  4068. v = v.substring(0, 7);
  4069. str += 'color:' + v + ';';
  4070. }
  4071. }
  4072. if ((styles['b'] && styles['b'].v) || (styles['fc'] && styles['fc'].v && styles['fc'].v.indexOf('Bold') == 0))
  4073. {
  4074. str += 'font-weight: bold;';
  4075. }
  4076. if (styles['i'] && styles['i'].v)
  4077. {
  4078. str += 'font-style: italic;';
  4079. }
  4080. if (styles['ac'] && styles['ac'].v)
  4081. {
  4082. str += 'text-transform: uppercase;';
  4083. }
  4084. var fontFamily = null;
  4085. if (styles['f'])
  4086. {
  4087. fontFamily = styles['f'].v;
  4088. }
  4089. else if (props.Font)
  4090. {
  4091. fontFamily = props.Font;
  4092. }
  4093. str += mapFontFamily(fontFamily);
  4094. var td = [];
  4095. if (styles['u'] && styles['u'].v)
  4096. {
  4097. td.push('underline');
  4098. }
  4099. if (styles['k'] && styles['k'].v)
  4100. {
  4101. td.push('line-through');
  4102. }
  4103. if (td.length > 0)
  4104. {
  4105. str += 'text-decoration: ' + td.join(' ') + ';';
  4106. }
  4107. str += '">'
  4108. openTagsCount.push(tagCount);
  4109. return str;
  4110. };
  4111. function endBlockTag(force)
  4112. {
  4113. var str = '';
  4114. do
  4115. {
  4116. var tag = openBlockTags.pop();
  4117. if (!force && listActive && (tag == 'ul' || tag == 'ol'))
  4118. {
  4119. openBlockTags.push(tag);
  4120. break;
  4121. }
  4122. str += '</' + tag + '>';
  4123. }
  4124. while(openBlockTags.length > 0);
  4125. return str;
  4126. };
  4127. function endTag(txt, curS, curE, all)
  4128. {
  4129. var str = txt? txt.substring(curS, curE) : '';
  4130. //TODO Check this is always the case. Most of the time this is correct, also, the empty tag should be removed
  4131. if (listActive)
  4132. {
  4133. str = str.trim();
  4134. }
  4135. //If an endTag is called with no open tags, add a dummy startTag to have a font size
  4136. if (openTags.length == 0 && str.length > 0)
  4137. {
  4138. str = startTag({dummy: 1}) + str;
  4139. }
  4140. str = str.replace(/</g, '&lt;').replace(/>/g, '&gt;');
  4141. do
  4142. {
  4143. var count = openTagsCount.pop();
  4144. for (var i = 0; i < count; i++)
  4145. {
  4146. var tag = openTags.pop();
  4147. str += '</' + tag + '>';
  4148. }
  4149. }
  4150. while(all && openTags.length > 0);
  4151. return str;
  4152. };
  4153. var curS = 0, curE = 0, maxE = txt.length, firstBlock = true;
  4154. while (k < globalStyles.length || firstBlock)
  4155. {
  4156. firstBlock = false;
  4157. if (k < globalStyles.length)
  4158. {
  4159. var bs = globalStyles[k], curBS = globalStyles[k].s;
  4160. if (blockActive)
  4161. {
  4162. curBlockStyles = {};
  4163. html += endTag(txt, curS, maxE, true); //End any open tag
  4164. curE = curS = maxE;
  4165. html += endBlockTag();
  4166. }
  4167. while(bs != null && bs.s == curBS)
  4168. {
  4169. curBlockStyles[bs.n] = bs;
  4170. bs = globalStyles[++k];
  4171. }
  4172. if (bs != null)
  4173. {
  4174. maxE = bs.s;
  4175. }
  4176. else
  4177. {
  4178. maxE = txt.length;
  4179. }
  4180. html += startBlockTag(curBlockStyles, curStyles);
  4181. if (blockActive)
  4182. {
  4183. html += startTag(curStyles);
  4184. }
  4185. blockActive = true;
  4186. }
  4187. while(i >= j && (i < m.length || j < ends.length))
  4188. {
  4189. var s = m[i], e = ends[j];
  4190. 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
  4191. {
  4192. if (s.s >= maxE) break;
  4193. curS = s.s;
  4194. if (curS - curE > 0)
  4195. {
  4196. //NOTE: After the fix in end where we add dummy start and end, this shouldn't be called
  4197. //End any open tag and add remaining text with current style
  4198. html += startTag(curStyles) + endTag(txt, curE, curS);
  4199. curE = curS;
  4200. }
  4201. while(s != null && s.s == curS)
  4202. {
  4203. curStyles[s.n] = s;
  4204. s = m[++i];
  4205. }
  4206. html += startTag(curStyles);
  4207. }
  4208. else if (e)
  4209. {
  4210. if (e.e > maxE) break;
  4211. curE = e.e;
  4212. do
  4213. {
  4214. delete curStyles[e.n];
  4215. e = ends[++j];
  4216. }
  4217. while(e != null && e.e == curE);
  4218. html += endTag(txt, curS, curE);
  4219. curS = curE;
  4220. //Next start should be immidiately after this end or we add a dummy one
  4221. if (openTagsCount.length == 0 && (s == null || s.s != curE))
  4222. {
  4223. m.splice(i, 0, {s: curE, n: 'dummy', v: ''});
  4224. ends.splice(j, 0, {e: s? s.s : maxE, n: 'dummy', v: ''});
  4225. }
  4226. }
  4227. else
  4228. {
  4229. break;
  4230. }
  4231. }
  4232. }
  4233. html += endTag(null, null, null, true); //End any open tag
  4234. if (blockActive)
  4235. {
  4236. if (curE != maxE)
  4237. {
  4238. html += startTag({dummy: 1}) + endTag(txt, curE, maxE);
  4239. }
  4240. html += endBlockTag(true);
  4241. }
  4242. return html;
  4243. };
  4244. function convertText(props, forceHTML)
  4245. {
  4246. isLastLblHTML = false;
  4247. var text = (props.Text != null && props.Text.t) ? props.Text :
  4248. ((props.Value != null && props.Value.t) ? props.Value :
  4249. ((props.Lane_0 != null && props.Lane_0.t) ? props.Lane_0 : null));
  4250. var text2 = null;
  4251. if (text == null && props.State != null)
  4252. {
  4253. if (props.State.t)
  4254. {
  4255. text = props.State;
  4256. }
  4257. }
  4258. else if (text == null && props.Note != null)
  4259. {
  4260. if (props.Note.t)
  4261. {
  4262. text = props.Note;
  4263. }
  4264. }
  4265. else if (text == null && props.Title != null)
  4266. {
  4267. if (props.Title.t)
  4268. {
  4269. text = props.Title;
  4270. }
  4271. }
  4272. else if (props.t)
  4273. {
  4274. text = props;
  4275. }
  4276. if (text == null && props.TextAreas != null)
  4277. {
  4278. if (props.TextAreas.Text != null)
  4279. {
  4280. if (props.TextAreas.Text.Value != null)
  4281. {
  4282. if (props.TextAreas.Text.Value.t)
  4283. {
  4284. text = props.TextAreas.Text.Value;
  4285. }
  4286. }
  4287. }
  4288. }
  4289. else if (text == null && props.t0 != null)
  4290. {
  4291. if (props.t0.t)
  4292. {
  4293. text = props.t0;
  4294. }
  4295. }
  4296. // TODO: Convert text object to HTML. One case is covered. Is there others?
  4297. // TODO: HTML text conversion looks stable now, maybe convert all using html?
  4298. if (text != null)
  4299. {
  4300. if (text.t != null)
  4301. {
  4302. var txt = text.t;
  4303. txt = txt.replace(/\u2028/g, '\n'); //Special unicide line separator
  4304. var m = text.m;
  4305. //Convert text object to HTML if needed
  4306. try
  4307. {
  4308. //If there are 3+ consecutive spaces, most probably it's spaces to create a new line
  4309. if (/ /.test(txt))
  4310. {
  4311. LucidImporter.hasUnknownShapes = true;
  4312. }
  4313. for (var i = 0; i < m.length; i++)
  4314. {
  4315. 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')
  4316. {
  4317. isLastLblHTML = true;
  4318. break;
  4319. }
  4320. }
  4321. isLastLblHTML = isLastLblHTML || forceHTML;
  4322. if (isLastLblHTML)
  4323. {
  4324. return convertTxt2Html(txt, m, props);
  4325. }
  4326. }
  4327. catch(e)
  4328. {
  4329. console.log(e);
  4330. }
  4331. txt = txt.replace(/</g, '&lt;');
  4332. txt = txt.replace(/>/g, '&gt;');
  4333. return txt;
  4334. }
  4335. if (text.Value != null)
  4336. {
  4337. if (text.Value.t != null)
  4338. {
  4339. text.Value.t = text.Value.t.replace(/</g, '&lt;');
  4340. text.Value.t = text.Value.t.replace(/>/g, '&gt;');
  4341. return text.Value.t;
  4342. }
  4343. }
  4344. }
  4345. return (text2 != null) ? text2 : '';
  4346. };
  4347. function getAction(obj)
  4348. {
  4349. if (obj.Action != null)
  4350. {
  4351. return obj.Action;
  4352. }
  4353. return obj;
  4354. };
  4355. function getTextM(properties)
  4356. {
  4357. if (properties.Text != null)
  4358. {
  4359. if (properties.Text.m != null)
  4360. {
  4361. return properties.Text.m;
  4362. }
  4363. }
  4364. else if(properties.TextAreas != null)
  4365. {
  4366. if (properties.TextAreas.Text != null)
  4367. {
  4368. if (properties.TextAreas.Text.Value != null)
  4369. {
  4370. if (properties.TextAreas.Text.Value.m != null)
  4371. {
  4372. return properties.TextAreas.Text.Value.m;
  4373. }
  4374. }
  4375. }
  4376. }
  4377. else if (properties.m != null)
  4378. {
  4379. return properties.m;
  4380. }
  4381. else if (properties.Title != null)
  4382. {
  4383. if (properties.Title.m != null)
  4384. {
  4385. return properties.Title.m;
  4386. }
  4387. }
  4388. else if (properties.State != null)
  4389. {
  4390. if (properties.State.m != null)
  4391. {
  4392. return properties.State.m;
  4393. }
  4394. }
  4395. else if (properties.Note != null)
  4396. {
  4397. if (properties.Note.m != null)
  4398. {
  4399. return properties.Note.m;
  4400. }
  4401. }
  4402. return null;
  4403. }
  4404. function getLabelStyle(properties, noLblStyle)
  4405. {
  4406. var style = 'whiteSpace=wrap;' + (noLblStyle?
  4407. 'overflow=block;blockSpacing=1;html=1;fontSize=' + defaultFontSize + ';' +
  4408. gFontFamilyStyle
  4409. :
  4410. getFontSize(properties) +
  4411. getFontFamily(properties) +
  4412. getFontColor(properties) +
  4413. getFontStyle(properties) +
  4414. getTextAlignment(properties) +
  4415. getTextLeftSpacing(properties) +
  4416. getTextRightSpacing(properties) +
  4417. getTextTopSpacing(properties) +
  4418. getTextBottomSpacing(properties)
  4419. ) +
  4420. getTextGlobalSpacing(properties) +
  4421. getTextVerticalAlignment(properties) +
  4422. getTextGlobalAlignment(properties);
  4423. gFontFamilyStyle = '';
  4424. return style;
  4425. }
  4426. function addAllStyles(style, properties, action, cell, noLblStyle, overrideNone)
  4427. {
  4428. overrideNone = (overrideNone == null) ? false : overrideNone;
  4429. var s = '';
  4430. var noStroke = false;
  4431. var noFill = false;
  4432. // Special case fillColor/strokeColor none is removed during processing
  4433. if (style != null)
  4434. {
  4435. if (overrideNone)
  4436. {
  4437. var tokens = style.split(';');
  4438. style = '';
  4439. for (var i = 0; i < tokens.length; i++)
  4440. {
  4441. if (tokens[i] == 'fillColor=none')
  4442. {
  4443. noFill = true;
  4444. }
  4445. else if (tokens[i] == 'strokeColor=none')
  4446. {
  4447. noStroke = true;
  4448. }
  4449. else if (tokens[i] != '')
  4450. {
  4451. style += tokens[i] + ';';
  4452. }
  4453. }
  4454. }
  4455. else if (style != '' && style.charAt(style.length - 1) != ';')
  4456. {
  4457. s = ';';
  4458. }
  4459. }
  4460. s += (!hasStyle(style, 'whiteSpace') ? 'whiteSpace=wrap;' : '') +
  4461. (noLblStyle? (hasStyle(style, 'overflow')? '' : 'overflow=block;blockSpacing=1;') +
  4462. (hasStyle(style, 'html')? '' : 'html=1;') + 'fontSize=' + defaultFontSize + ';' +
  4463. gFontFamilyStyle
  4464. :
  4465. addStyle(mxConstants.STYLE_FONTSIZE, style, properties, action, cell) +
  4466. addStyle(mxConstants.STYLE_FONTFAMILY, style, properties, action, cell) +
  4467. addStyle(mxConstants.STYLE_FONTCOLOR, style, properties, action, cell) +
  4468. addStyle(mxConstants.STYLE_FONTSTYLE, style, properties, action, cell) +
  4469. addStyle(mxConstants.STYLE_ALIGN, style, properties, action, cell) +
  4470. addStyle(mxConstants.STYLE_SPACING_LEFT, style, properties, action, cell) +
  4471. addStyle(mxConstants.STYLE_SPACING_RIGHT, style, properties, action, cell) +
  4472. addStyle(mxConstants.STYLE_SPACING_TOP, style, properties, action, cell) +
  4473. addStyle(mxConstants.STYLE_SPACING_BOTTOM, style, properties, action, cell)
  4474. ) +
  4475. addStyle(mxConstants.STYLE_ALIGN + 'Global', style, properties, action, cell) +
  4476. addStyle(mxConstants.STYLE_SPACING, style, properties, action, cell) +
  4477. addStyle(mxConstants.STYLE_VERTICAL_ALIGN, style, properties, action, cell) +
  4478. addStyle(mxConstants.STYLE_STROKECOLOR, style, properties, action, cell) +
  4479. addStyle(mxConstants.STYLE_OPACITY, style, properties, action, cell) +
  4480. addStyle(mxConstants.STYLE_ROUNDED, style, properties, action, cell) +
  4481. addStyle(mxConstants.STYLE_ROTATION, style, properties, action, cell) +
  4482. addStyle(mxConstants.STYLE_FLIPH, style, properties, action, cell) +
  4483. addStyle(mxConstants.STYLE_FLIPV, style, properties, action, cell) +
  4484. addStyle(mxConstants.STYLE_SHADOW, style, properties, action, cell) +
  4485. addStyle(mxConstants.STYLE_FILLCOLOR, style, properties, action, cell) +
  4486. addStyle(mxConstants.STYLE_DASHED, style, properties, action, cell) +
  4487. addStyle(mxConstants.STYLE_STROKEWIDTH, style, properties, action, cell) +
  4488. addStyle(mxConstants.STYLE_IMAGE, style, properties, action, cell) +
  4489. addStyle(mxConstants.STYLE_POINTER_EVENTS, style, properties, action, cell);
  4490. if (noFill && !hasStyle(s, mxConstants.STYLE_FILLCOLOR))
  4491. {
  4492. s += 'fillColor=none;';
  4493. }
  4494. if (noStroke && !hasStyle(s, mxConstants.STYLE_STROKECOLOR))
  4495. {
  4496. s += 'strokeColor=none;';
  4497. }
  4498. gFontFamilyStyle = '';
  4499. return s;
  4500. }
  4501. function addStyle(key, style, properties, action, cell)
  4502. {
  4503. if (!hasStyle(style, key))
  4504. {
  4505. switch(key)
  4506. {
  4507. case mxConstants.STYLE_FONTSIZE :
  4508. return getFontSize(properties);
  4509. case mxConstants.STYLE_FONTFAMILY :
  4510. return getFontFamily(properties);
  4511. case mxConstants.STYLE_FONTCOLOR :
  4512. return getFontColor(properties);
  4513. case mxConstants.STYLE_FONTSTYLE :
  4514. return getFontStyle(properties);
  4515. case mxConstants.STYLE_ALIGN :
  4516. return getTextAlignment(properties);
  4517. case mxConstants.STYLE_ALIGN + 'Global':
  4518. return getTextGlobalAlignment(properties);
  4519. case mxConstants.STYLE_SPACING_LEFT :
  4520. return getTextLeftSpacing(properties);
  4521. case mxConstants.STYLE_SPACING_RIGHT :
  4522. return getTextRightSpacing(properties);
  4523. case mxConstants.STYLE_SPACING_TOP :
  4524. return getTextTopSpacing(properties);
  4525. case mxConstants.STYLE_SPACING_BOTTOM :
  4526. return getTextBottomSpacing(properties);
  4527. case mxConstants.STYLE_SPACING :
  4528. return getTextGlobalSpacing(properties);
  4529. case mxConstants.STYLE_VERTICAL_ALIGN :
  4530. return getTextVerticalAlignment(properties);
  4531. case mxConstants.STYLE_STROKECOLOR :
  4532. return getStrokeColor(properties, action);
  4533. case mxConstants.STYLE_OPACITY :
  4534. return getOpacity(properties, action, cell);
  4535. case mxConstants.STYLE_ROUNDED :
  4536. return getRounded(properties, action, cell);
  4537. case mxConstants.STYLE_ROTATION :
  4538. return getRotation(properties, action, cell);
  4539. case mxConstants.STYLE_FLIPH :
  4540. return getFlipH(properties);
  4541. case mxConstants.STYLE_FLIPV :
  4542. return getFlipV(properties);
  4543. case mxConstants.STYLE_SHADOW :
  4544. return getShadow(properties);
  4545. case mxConstants.STYLE_FILLCOLOR :
  4546. return getFillColor(properties, action);
  4547. case mxConstants.STYLE_DASHED :
  4548. return getStrokeStyle(properties);
  4549. case mxConstants.STYLE_STROKEWIDTH :
  4550. return getStrokeWidth(properties);
  4551. case mxConstants.STYLE_IMAGE :
  4552. return getImage(properties, action);
  4553. case mxConstants.STYLE_POINTER_EVENTS :
  4554. return getPointerEvents(properties, action);
  4555. default :
  4556. break;
  4557. }
  4558. }
  4559. return '';
  4560. }
  4561. function getFontSize(properties)
  4562. {
  4563. //adds font size
  4564. var isV = false;
  4565. var m = getTextM(properties);
  4566. if (m != null)
  4567. {
  4568. var i = 0;
  4569. while ((!isV) && (i < m.length))
  4570. {
  4571. var currM = m[i];
  4572. if (currM.n == 's')
  4573. {
  4574. if (currM.v) //Ignore zero value also
  4575. {
  4576. isV = true;
  4577. return 'fontSize=' + fix1Digit(currM.v * scale) + ';';
  4578. }
  4579. }
  4580. i++;
  4581. }
  4582. }
  4583. if (isV == 0)
  4584. {
  4585. return 'fontSize=' + defaultFontSize + ';';
  4586. }
  4587. return '';
  4588. }
  4589. function getFontFamily(properties)
  4590. {
  4591. var m = getTextM(properties);
  4592. var fontFamily;
  4593. if (m != null)
  4594. {
  4595. for (var i = 0; i < m.length; i++)
  4596. {
  4597. if (m[i].n == 'f' && m[i].v)
  4598. {
  4599. fontFamily = m[i].v;
  4600. break;
  4601. }
  4602. }
  4603. }
  4604. if (!fontFamily && properties.Font)
  4605. {
  4606. fontFamily = properties.Font;
  4607. }
  4608. mapFontFamily(fontFamily);
  4609. return gFontFamilyStyle;
  4610. };
  4611. function getLink(lnk)
  4612. {
  4613. if (lnk.tp == 'ext')
  4614. {
  4615. return lnk.url;
  4616. }
  4617. else if (lnk.tp == 'ml')
  4618. {
  4619. return 'mailto:' + lnk.eml;
  4620. }
  4621. else if (lnk.tp == 'pg')
  4622. {
  4623. return 'data:page/id,' + (LucidImporter.pageIdsMap[lnk.id] || 0);
  4624. }
  4625. else if (lnk.tp == 'c') //Confluence content
  4626. {
  4627. return 'data:confluence/id,' + lnk.ccid;
  4628. }
  4629. else
  4630. {
  4631. return null;
  4632. }
  4633. };
  4634. function getFontColor(properties)
  4635. {
  4636. //adds font color
  4637. var isC = false;
  4638. var m = getTextM(properties);
  4639. if (m != null)
  4640. {
  4641. var i = 0;
  4642. while ((!isC) && (i < m.length))
  4643. {
  4644. var currM = m[i];
  4645. if (currM.n == 'c')
  4646. {
  4647. if (currM.v != null)
  4648. {
  4649. isC = true;
  4650. var currV = rgbToHex(currM.v).substring(0, 7);
  4651. if (currV == '#000000')
  4652. {
  4653. currV = 'default';
  4654. }
  4655. return mxConstants.STYLE_FONTCOLOR + '=' + currV + ';';
  4656. }
  4657. }
  4658. i++;
  4659. }
  4660. }
  4661. return '';
  4662. }
  4663. function getFontStyle(properties)
  4664. {
  4665. return getFontStyleString(getTextM(properties));
  4666. }
  4667. function getFontStyleString(m)
  4668. {
  4669. if (m != null)
  4670. {
  4671. var fontStyle = 0;
  4672. //check for bold text
  4673. var isBT = false;
  4674. if (m != null)
  4675. {
  4676. var i = 0;
  4677. while ((!isBT) && (i < m.length))
  4678. {
  4679. var currM = m[i];
  4680. if (currM.n == 'b')
  4681. {
  4682. if (currM.v != null && currM.v)
  4683. {
  4684. isBT = true;
  4685. fontStyle += 1;
  4686. }
  4687. }
  4688. else if (currM.n == 'fc' && currM.v == 'Bold')
  4689. {
  4690. isBT = true;
  4691. fontStyle += 1;
  4692. }
  4693. i++;
  4694. }
  4695. }
  4696. //check for italic text
  4697. var isIT = false;
  4698. if (m != null)
  4699. {
  4700. var i = 0;
  4701. while ((!isIT) && (i < m.length))
  4702. {
  4703. var currM = m[i];
  4704. if (currM.n == 'i')
  4705. {
  4706. if (currM.v != null && currM.v)
  4707. {
  4708. isIT = true;
  4709. fontStyle += 2;
  4710. }
  4711. }
  4712. i++;
  4713. }
  4714. }
  4715. //check for underline text
  4716. var isUT = false;
  4717. if (m != null)
  4718. {
  4719. var i = 0;
  4720. while ((!isUT) && (i < m.length))
  4721. {
  4722. var currM = m[i];
  4723. if (currM.n == 'u')
  4724. {
  4725. if (currM.v != null && currM.v)
  4726. {
  4727. isUT = true;
  4728. fontStyle += 4;
  4729. }
  4730. }
  4731. i++;
  4732. }
  4733. }
  4734. if (fontStyle > 0)
  4735. {
  4736. return 'fontStyle=' + fontStyle + ';';
  4737. }
  4738. }
  4739. return '';
  4740. }
  4741. function getTextAlignment(properties)
  4742. {
  4743. var m = getTextM(properties);
  4744. //adds text alignment
  4745. if (m != null)
  4746. {
  4747. var i = 0;
  4748. while (i < m.length)
  4749. {
  4750. var currM = m[i];
  4751. if (currM.n == 'a')
  4752. {
  4753. if (currM.v != null)
  4754. {
  4755. return 'align=' + currM.v + ';';
  4756. }
  4757. }
  4758. i++;
  4759. }
  4760. }
  4761. return '';
  4762. }
  4763. function getTextLeftSpacing(properties)
  4764. {
  4765. var m = getTextM(properties);
  4766. if (m != null)
  4767. {
  4768. //adds left spacing
  4769. var i = 0;
  4770. while (i < m.length)
  4771. {
  4772. var currM = m[i];
  4773. if (currM.v != null)
  4774. {
  4775. if (currM.n == 'il')
  4776. {
  4777. return 'spacingLeft=' + fix1Digit(currM.v * scale) + ';';
  4778. }
  4779. /*else
  4780. {
  4781. var align = getTextAlignment(properties);
  4782. if (currM.n == 's' && align != 'align=center;' && align != '')
  4783. {
  4784. // TODO: Fix condition to apply this only when necessary
  4785. //return 'spacingLeft=' + currM.v * scale + ';';
  4786. }
  4787. }*/
  4788. }
  4789. i++;
  4790. }
  4791. }
  4792. return '';
  4793. }
  4794. function getTextRightSpacing(properties)
  4795. {
  4796. //adds right spacing
  4797. var isIR = false;
  4798. var m = getTextM(properties);
  4799. if (m != null)
  4800. {
  4801. var i = 0;
  4802. while ((!isIR) && (i < m.length))
  4803. {
  4804. var currM = m[i];
  4805. if (currM.n == 'ir')
  4806. {
  4807. if (currM.v != null)
  4808. {
  4809. isIR = true;
  4810. return 'spacingRight=' + fix1Digit(currM.v * scale) + ';';
  4811. }
  4812. }
  4813. i++;
  4814. }
  4815. }
  4816. return '';
  4817. }
  4818. function getTextTopSpacing(properties)
  4819. {
  4820. //adds top spacing
  4821. var isMT = false;
  4822. var m = getTextM(properties);
  4823. if (m != null)
  4824. {
  4825. var i = 0;
  4826. while ((!isMT) && (i < m.length))
  4827. {
  4828. var currM = m[i];
  4829. if (currM.n == 'mt')
  4830. {
  4831. if (currM.v != null)
  4832. {
  4833. isMT = true;
  4834. return 'spacingTop=' + fix1Digit(currM.v * scale) + ';';
  4835. }
  4836. }
  4837. i++;
  4838. }
  4839. }
  4840. return '';
  4841. }
  4842. function getTextBottomSpacing(properties)
  4843. {
  4844. //adds bottom spacing
  4845. var isMB = false;
  4846. var m = getTextM(properties);
  4847. if (m != null)
  4848. {
  4849. var i = 0;
  4850. while ((!isMB) && (i < m.length))
  4851. {
  4852. var currM = m[i];
  4853. if (currM.n == 'mb')
  4854. {
  4855. if (currM.v != null)
  4856. {
  4857. isMB = true;
  4858. return 'spacingBottom=' + fix1Digit(currM.v * scale) + ';';
  4859. }
  4860. }
  4861. i++;
  4862. }
  4863. }
  4864. return '';
  4865. }
  4866. function getTextGlobalSpacing(properties)
  4867. {
  4868. //adds global spacing
  4869. if (typeof properties.InsetMargin === 'number')
  4870. {
  4871. return 'spacing=' + Math.max(0, fix1Digit((properties.InsetMargin) * scale)) + ';';
  4872. }
  4873. return '';
  4874. }
  4875. function getTextVerticalAlignment(properties)
  4876. {
  4877. // adds text vertical alignment
  4878. if (properties.Text_VAlign != null)
  4879. {
  4880. if (typeof properties.Text_VAlign === 'string')
  4881. {
  4882. return 'verticalAlign=' + properties.Text_VAlign + ';';
  4883. }
  4884. }
  4885. if (properties.Title_VAlign != null && typeof properties.Title_VAlign === 'string')
  4886. {
  4887. return 'verticalAlign=' + properties.Title_VAlign + ';';
  4888. }
  4889. return createStyle(mxConstants.STYLE_VERTICAL_ALIGN, properties.TextVAlign, 'middle');
  4890. }
  4891. function getTextGlobalAlignment(properties)
  4892. {
  4893. return createStyle(mxConstants.STYLE_ALIGN, properties.TextAlign, 'center');
  4894. }
  4895. function getStrokeColor(properties, action)
  4896. {
  4897. if (properties.LineWidth == 0)
  4898. {
  4899. return mxConstants.STYLE_STROKECOLOR + '=none;';
  4900. }
  4901. else
  4902. {
  4903. return createStyle(mxConstants.STYLE_STROKECOLOR, getColor(properties.LineColor), '#000000');
  4904. }
  4905. }
  4906. function getHeaderColor(color)
  4907. {
  4908. if (color != null)
  4909. {
  4910. return mxConstants.STYLE_FILLCOLOR + '=' + getColor(color) + ';';
  4911. }
  4912. return '';
  4913. }
  4914. function getLaneColor(color)
  4915. {
  4916. if (color != null)
  4917. {
  4918. return 'swimlaneFillColor=' + getColor(color) + ';';
  4919. }
  4920. return '';
  4921. }
  4922. function getOpacity(properties, action, cell)
  4923. {
  4924. var style = '';
  4925. if (typeof properties.LineColor === 'string')
  4926. {
  4927. properties.LineColor = rgbToHex(properties.LineColor);
  4928. if (properties.LineColor.length > 7)
  4929. {
  4930. var sOpac = "0x" + properties.LineColor.substring(properties.LineColor.length - 2, properties.LineColor.length);
  4931. if(!cell.style.includes('strokeOpacity'))
  4932. {
  4933. style += 'strokeOpacity=' + Math.round(parseInt(sOpac) / 2.55) + ';';
  4934. }
  4935. }
  4936. }
  4937. if (typeof properties.FillColor === 'string')
  4938. {
  4939. properties.FillColor = rgbToHex(properties.FillColor);
  4940. if (properties.FillColor.length > 7)
  4941. {
  4942. var fOpac = "0x" + properties.FillColor.substring(properties.FillColor.length - 2, properties.FillColor.length);
  4943. if(!cell.style.includes('fillOpacity'))
  4944. {
  4945. style += 'fillOpacity=' + Math.round(parseInt(fOpac) / 2.55) + ';';
  4946. }
  4947. }
  4948. }
  4949. return style;
  4950. }
  4951. function getRounded(properties, action, cell)
  4952. {
  4953. if (!cell.edge && !cell.style.includes('rounded'))
  4954. {
  4955. //rounding check
  4956. if (properties.Rounding != null)
  4957. {
  4958. if (properties.Rounding > 0)
  4959. {
  4960. return 'rounded=1;absoluteArcSize=1;arcSize=' + fix1Digit(properties.Rounding * scale) + ';';
  4961. }
  4962. }
  4963. // else if (properties.Rounding == null)
  4964. // {
  4965. // return 'rounded=1;absoluteArcSize=1;arcSize=8;';
  4966. // }
  4967. }
  4968. return '';
  4969. }
  4970. function getRotation(properties, action, cell)
  4971. {
  4972. var s = '';
  4973. // Converts rotation
  4974. if (properties.Rotation != null)
  4975. {
  4976. // KNOWN: TextRotation currently ignored
  4977. var deg = mxUtils.toDegree(parseFloat(properties.Rotation));
  4978. var h = true;
  4979. // Fixes the case for horizontal swimlanes where we use horizontal=0
  4980. // and Lucid uses rotation
  4981. 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))))
  4982. {
  4983. deg += 90;
  4984. cell.geometry.rotate90();
  4985. cell.geometry.isRotated = true;
  4986. h = false;
  4987. }
  4988. else if (mxUtils.indexOf(rccw, action.Class) >= 0)
  4989. {
  4990. deg -= 90;
  4991. cell.geometry.rotate90();
  4992. }
  4993. else if (mxUtils.indexOf(rcw2, action.Class) >= 0)
  4994. {
  4995. deg += 180;
  4996. }
  4997. if (deg != 0)
  4998. {
  4999. s += 'rotation=' + deg + ';'
  5000. }
  5001. if (!h)
  5002. {
  5003. s += 'horizontal=0;';
  5004. }
  5005. }
  5006. return s;
  5007. }
  5008. function getFlipH(properties)
  5009. {
  5010. if (properties.FlipX)
  5011. {
  5012. return 'flipH=1;';
  5013. }
  5014. return '';
  5015. }
  5016. function getFlipV(properties)
  5017. {
  5018. if (properties.FlipY)
  5019. {
  5020. return 'flipV=1;';
  5021. }
  5022. return '';
  5023. }
  5024. function getShadow(properties)
  5025. {
  5026. // Shadow is mapped simple shadow style
  5027. if (properties.Shadow != null)
  5028. {
  5029. return mxConstants.STYLE_SHADOW + '=1;';
  5030. }
  5031. return '';
  5032. }
  5033. function rgbToHex(color)
  5034. {
  5035. if (color)
  5036. {
  5037. if (typeof color === 'object')
  5038. {
  5039. try
  5040. {
  5041. color = color.cs[0].c; //TODO support gradient colors
  5042. }
  5043. catch(e)
  5044. {
  5045. console.log(e);
  5046. color = '#ffffff';
  5047. }
  5048. }
  5049. if (color.substring(0, 3) == 'rgb')
  5050. {
  5051. color = '#' + color.match(/\d+/g).map(function(n)
  5052. {
  5053. var s = parseInt(n).toString(16);
  5054. return (s.length == 1? '0' : '') + s;
  5055. }).join('');
  5056. }
  5057. else if (color.charAt(0) != '#')
  5058. {
  5059. color = '#' + color;
  5060. }
  5061. }
  5062. return color;
  5063. };
  5064. function getColor(color)
  5065. {
  5066. color = rgbToHex(color);
  5067. return color? color.substring(0, 7) : null;
  5068. }
  5069. function getOpacity2(color, style)
  5070. {
  5071. color = rgbToHex(color);
  5072. return color && color.length > 7? (style + '=' + Math.round(parseInt('0x' + color.substr(7)) / 2.55) + ';') : '';
  5073. }
  5074. function getFillColor(properties, action)
  5075. {
  5076. // Gradients and fill color
  5077. if (properties.FillColor != null)
  5078. {
  5079. if (typeof properties.FillColor === 'object')
  5080. {
  5081. if (properties.FillColor.cs != null && properties.FillColor.cs.length > 1)
  5082. {
  5083. return createStyle(mxConstants.STYLE_FILLCOLOR, getColor(properties.FillColor.cs[0].c)) +
  5084. createStyle(mxConstants.STYLE_GRADIENTCOLOR, getColor(properties.FillColor.cs[1].c));
  5085. }
  5086. }
  5087. else if (typeof properties.FillColor === 'string')
  5088. {
  5089. return createStyle(mxConstants.STYLE_FILLCOLOR, getColor(properties.FillColor), '#FFFFFF');
  5090. }
  5091. else
  5092. {
  5093. return createStyle(mxConstants.STYLE_FILLCOLOR, 'none');
  5094. }
  5095. }
  5096. return '';
  5097. }
  5098. function getStrokeStyle(properties)
  5099. {
  5100. // Stroke style
  5101. if (properties.StrokeStyle == 'dotted')
  5102. {
  5103. return 'dashed=1;fixDash=1;dashPattern=1 4;';
  5104. }
  5105. else if (properties.StrokeStyle == 'dashdot')
  5106. {
  5107. return 'dashed=1;fixDash=1;dashPattern=10 5 1 5;';
  5108. }
  5109. else if (properties.StrokeStyle == 'dashdotdot')
  5110. {
  5111. return 'dashed=1;fixDash=1;dashPattern=10 5 1 5 1 5;';
  5112. }
  5113. else if (properties.StrokeStyle == 'dotdotdot')
  5114. {
  5115. return 'dashed=1;fixDash=1;dashPattern=1 2;';
  5116. }
  5117. else if (properties.StrokeStyle == 'longdash')
  5118. {
  5119. return 'dashed=1;fixDash=1;dashPattern=16 6;';
  5120. }
  5121. else if (properties.StrokeStyle == 'dashlongdash')
  5122. {
  5123. return 'dashed=1;fixDash=1;dashPattern=10 6 16 6;';
  5124. }
  5125. else if (properties.StrokeStyle == 'dashed24')
  5126. {
  5127. return 'dashed=1;fixDash=1;dashPattern=3 8;';
  5128. }
  5129. else if (properties.StrokeStyle == 'dashed32')
  5130. {
  5131. return 'dashed=1;fixDash=1;dashPattern=6 5;';
  5132. }
  5133. else if (properties.StrokeStyle == 'dashed44')
  5134. {
  5135. return 'dashed=1;fixDash=1;dashPattern=8 8;';
  5136. }
  5137. else if (properties.StrokeStyle != null && properties.
  5138. StrokeStyle.substring(0, 6) == 'dashed')
  5139. {
  5140. return 'dashed=1;fixDash=1;';
  5141. }
  5142. return '';
  5143. }
  5144. function getPointerEvents(properties)
  5145. {
  5146. return properties.Magnetize ? containerStyle : '';
  5147. }
  5148. function getStrokeWidth(properties)
  5149. {
  5150. return properties.LineWidth != null? createStyle(mxConstants.STYLE_STROKEWIDTH, fix1Digit(parseFloat(properties.LineWidth) * scale), '1') : '';
  5151. }
  5152. function getImage(properties, action, url)
  5153. {
  5154. var imgUrl = url, extraStyles = '';
  5155. // Converts images
  5156. if (properties.FillColor && properties.FillColor.url)
  5157. {
  5158. imgUrl = properties.FillColor.url;
  5159. //Check if image is cropped, stretched, ...
  5160. if (properties.FillColor.pos == 'fill')
  5161. {
  5162. extraStyles = 'imageAspect=0;';
  5163. }
  5164. //TODO Support non-destructive cropping
  5165. /*else if (typeof properties.FillColor.pos == 'object')
  5166. {
  5167. "pos": {
  5168. "pin": {
  5169. "x": 0.5765582655826557,
  5170. "y": 0.6180376215526864
  5171. },
  5172. "size": {
  5173. "w": 0.7764227642276422,
  5174. "h": 1.5284871672246134
  5175. }
  5176. }
  5177. }*/
  5178. }
  5179. else if (action.Class == 'ImageSearchBlock2')
  5180. {
  5181. imgUrl = properties.URL;
  5182. }
  5183. else if (action.Class == 'UserImage2Block' && properties.ImageFillProps != null &&
  5184. properties.ImageFillProps.url != null)
  5185. {
  5186. imgUrl = properties.ImageFillProps.url;
  5187. }
  5188. if (imgUrl != null)
  5189. {
  5190. return 'image=' + mapImgUrl(imgUrl) + ';' + extraStyles;
  5191. }
  5192. return '';
  5193. }
  5194. // Adds metadata, link, converts placeholders
  5195. function addCustomData(cell, p, graph)
  5196. {
  5197. if (p.Link != null && p.Link.length > 0)
  5198. {
  5199. graph.setAttributeForCell(cell, 'link', getLink(p.Link[0]));
  5200. }
  5201. if (p.NoteHint != null && p.NoteHint.t)
  5202. {
  5203. graph.setAttributeForCell(cell, 'Notes', p.NoteHint.t);
  5204. }
  5205. replacePlaceholders(cell, graph);
  5206. for (var property in p)
  5207. {
  5208. if (p.hasOwnProperty(property) &&
  5209. property.toString().startsWith('ShapeData_'))
  5210. {
  5211. try
  5212. {
  5213. var data = p[property];
  5214. var key = mxUtils.trim(data.Label).replace(/[^a-z0-9]+/ig, '_').
  5215. replace(/^\d+/, '').replace(/_+$/, '');
  5216. setAttributeForCell(cell, key, data.Value, graph);
  5217. }
  5218. catch (e)
  5219. {
  5220. if (window.console)
  5221. {
  5222. console.log('Ignored ' + property + ':', e);
  5223. }
  5224. }
  5225. }
  5226. }
  5227. };
  5228. var placeholderPattern = new RegExp('{{(date\{.*\}|[^%^\{^\}]+)}}', 'g');
  5229. function replacePlaceholders(cell, graph)
  5230. {
  5231. var result = [];
  5232. var str = graph.convertValueToString(cell);
  5233. var doReplace = false;
  5234. if (str != null)
  5235. {
  5236. var last = 0;
  5237. while (match = placeholderPattern.exec(str))
  5238. {
  5239. var val = match[0];
  5240. doReplace = true;
  5241. if (val.length > 2)
  5242. {
  5243. var tmp = val.substring(2, val.length - 2);
  5244. if (tmp == 'documentName')
  5245. {
  5246. tmp = 'filename';
  5247. }
  5248. else if (tmp == 'pageName')
  5249. {
  5250. tmp = 'page';
  5251. }
  5252. else if (tmp == 'totalPages')
  5253. {
  5254. tmp = 'pagecount';
  5255. }
  5256. else if (tmp == 'page')
  5257. {
  5258. tmp = 'pagenumber';
  5259. }
  5260. else if (tmp.substring(0, 5) == 'date:')
  5261. {
  5262. // LATER: Convert more date masks
  5263. tmp = 'date{' + tmp.substring(5).replace(/MMMM/g, 'mmmm').replace(/MM/g, 'mm').replace(/YYYY/g, 'yyyy') + '}';
  5264. }
  5265. else if (tmp.substring(0, 16) == 'lastModifiedTime')
  5266. {
  5267. // LATER: Convert more date masks
  5268. tmp = tmp.replace(/MMMM/g, 'mmmm').replace(/MM/g, 'mm').replace(/YYYY/g, 'yyyy');
  5269. }
  5270. else if (tmp.substring(0, 9) == 'i18nDate:')
  5271. {
  5272. // LATER: Convert more named date masks
  5273. tmp = 'date{' + tmp.substring(9).replace(/i18nShort/g, 'shortDate')
  5274. .replace(/i18nMediumWithTime/g, 'mmm d, yyyy hh:MM TT') + '}';
  5275. }
  5276. tmp = '%' + tmp + '%';
  5277. result.push(str.substring(last, match.index) + ((tmp != null) ? tmp : val));
  5278. last = match.index + val.length;
  5279. }
  5280. }
  5281. if (doReplace)
  5282. {
  5283. result.push(str.substring(last));
  5284. graph.setAttributeForCell(cell, 'label', result.join(''));
  5285. graph.setAttributeForCell(cell, 'placeholders', '1');
  5286. }
  5287. }
  5288. };
  5289. function setAttributeForCell(cell, key, value, graph)
  5290. {
  5291. var currentKey = key;
  5292. var counter = 0;
  5293. // Resolves conflicts by adding counter postfix
  5294. while (graph.getAttributeForCell(cell, currentKey) != null)
  5295. {
  5296. counter++;
  5297. currentKey = key + '_' + counter;
  5298. }
  5299. graph.setAttributeForCell(cell, currentKey, (value != null) ? value : '');
  5300. };
  5301. function updateCell(cell, obj, graph, source, target, ignoreLabel)
  5302. {
  5303. var a = getAction(obj);
  5304. if (a != null)
  5305. {
  5306. var s = styleMap[a.Class];
  5307. if (s != null)
  5308. {
  5309. cell.style += s;
  5310. if (cell.style.charAt(cell.style.length - 1) != ';')
  5311. {
  5312. cell.style += ';';
  5313. }
  5314. }
  5315. else if (!cell.edge)
  5316. {
  5317. console.log('No mapping found for: ' + a.Class);
  5318. LucidImporter.hasUnknownShapes = true;
  5319. }
  5320. var p = (a.Properties != null) ? a.Properties : a;
  5321. if (p != null)
  5322. {
  5323. // Adds label
  5324. cell.value = (!ignoreLabel) ? convertText(p) : '';
  5325. cell.style += addAllStyles(cell.style, p, a, cell, isLastLblHTML, true);
  5326. if (!cell.style.includes('strokeColor'))
  5327. {
  5328. cell.style += getStrokeColor(p, a);
  5329. }
  5330. addCustomData(cell, p, graph);
  5331. if (p.Title && p.Title.t && p.Text && p.Text.t && a.Class.substr(0, 8) != 'ExtShape')
  5332. {
  5333. var geo = cell.geometry;
  5334. var title = new mxCell(convertText(p.Title), new mxGeometry(0, geo.height,geo.width, 10), 'strokeColor=none;fillColor=none;');
  5335. title.vertex = true;
  5336. cell.insert(title);
  5337. title.style += getLabelStyle(p.Title, isLastLblHTML);
  5338. }
  5339. // Edge style
  5340. if (cell.edge)
  5341. {
  5342. if (p.Rounding != null && p.Shape != 'diagonal') //No rounding for diagornal edges
  5343. {
  5344. cell.style += 'rounded=1;arcSize=' + p.Rounding + ';';
  5345. }
  5346. else
  5347. {
  5348. cell.style += 'rounded=0;';
  5349. }
  5350. var isCurved = p.Shape == 'curve';
  5351. if (isCurved)
  5352. {
  5353. cell.style += 'curved=1;';
  5354. }
  5355. else if (p.Shape != 'diagonal')
  5356. {
  5357. if (p.ElbowPoints != null && p.ElbowPoints.length > 0)
  5358. {
  5359. cell.geometry.points = [];
  5360. for (var i = 0; i < p.ElbowPoints.length; i++)
  5361. {
  5362. cell.geometry.points.push(new mxPoint(
  5363. Math.round(p.ElbowPoints[i].x * scale + dx),
  5364. Math.round(p.ElbowPoints[i].y * scale + dy)));
  5365. }
  5366. }
  5367. else if (p.Shape == 'elbow' || (p.Endpoint1.Block != null && p.Endpoint2.Block != null))
  5368. {
  5369. cell.style += 'edgeStyle=orthogonalEdgeStyle;';
  5370. }
  5371. }
  5372. if (p.LineJumps || LucidImporter.globalProps.LineJumps)
  5373. {
  5374. cell.style += 'jumpStyle=arc;';
  5375. }
  5376. if (p.Endpoint1.Style != null)
  5377. {
  5378. var startStyle = edgeStyleMap[p.Endpoint1.Style];
  5379. if (startStyle != null)
  5380. {
  5381. startStyle = startStyle.replace(/xyz/g, 'start');
  5382. cell.style += 'startArrow=' + startStyle + ';';
  5383. }
  5384. else
  5385. {
  5386. LucidImporter.hasUnknownShapes = true;
  5387. if (window.console)
  5388. {
  5389. console.log('Unknown endpoint style: ' + p.Endpoint1.Style);
  5390. }
  5391. }
  5392. }
  5393. if (p.Endpoint2.Style != null)
  5394. {
  5395. var endStyle = edgeStyleMap[p.Endpoint2.Style];
  5396. if (endStyle != null)
  5397. {
  5398. endStyle = endStyle.replace(/xyz/g, 'end');
  5399. cell.style += 'endArrow=' + endStyle + ';';
  5400. }
  5401. else
  5402. {
  5403. LucidImporter.hasUnknownShapes = true;
  5404. if (window.console)
  5405. {
  5406. console.log('Unknown endpoint style: ' + p.Endpoint2.Style);
  5407. }
  5408. }
  5409. }
  5410. var waypoints = p.ElbowControlPoints != null && p.ElbowControlPoints.length > 0? p.ElbowControlPoints : p.Joints;
  5411. if (isCurved && p.BezierJoints != null && p.BezierJoints.length > 0)
  5412. {
  5413. waypoints = [];
  5414. //Last point sometimes has incorrect x,y value!
  5415. var lpt = p.BezierJoints[p.BezierJoints.length - 1];
  5416. lpt.p.x = p.Endpoint2.x;
  5417. lpt.p.y = p.Endpoint2.y;
  5418. for (var i = 0; i < p.BezierJoints.length; i++)
  5419. {
  5420. var pt = p.BezierJoints[i];
  5421. //TODO This is best-effort approximation (close enouhh but not exact)
  5422. waypoints.push({x: pt.p.x + pt.nt.x * pt.lcps * .75, y: pt.p.y + pt.nt.y * pt.lcps * .75});
  5423. waypoints.push({x: pt.p.x + pt.nt.x * pt.rcps * .75, y: pt.p.y + pt.nt.y * pt.rcps * .75});
  5424. }
  5425. //remove first & last points
  5426. waypoints = waypoints.slice(1, waypoints.length - 1);
  5427. }
  5428. else if (isCurved) //Curved with the default waypoints
  5429. {
  5430. waypoints = [];
  5431. //TODO This is best-effort approximation (close enouhh but not exact)
  5432. waypoints.push({x: p.Endpoint1.x + (p.Endpoint1.LinkX < 0.1? -250 : (p.Endpoint1.LinkX > 0.9? 250 : 0) ),
  5433. y: p.Endpoint1.y + (p.Endpoint1.LinkY < 0.1? -250 : (p.Endpoint1.LinkY > 0.9? 250 : 0) )});
  5434. waypoints.push({x: p.Endpoint2.x + (p.Endpoint2.LinkX < 0.1? -250 : (p.Endpoint2.LinkX > 0.9? 250 : 0) ),
  5435. y: p.Endpoint2.y + (p.Endpoint2.LinkY < 0.1? -250 : (p.Endpoint2.LinkY > 0.9? 250 : 0) )});
  5436. }
  5437. if (waypoints != null)
  5438. {
  5439. cell.geometry.points = [];
  5440. for (var i = 0; i < waypoints.length; i++)
  5441. {
  5442. var pt = waypoints[i].p ? waypoints[i].p : waypoints[i];
  5443. cell.geometry.points.push(new mxPoint(
  5444. Math.round(pt.x * scale + dx),
  5445. Math.round(pt.y * scale + dy)));
  5446. }
  5447. }
  5448. // Inserts implicit or explicit control points for loops
  5449. var implicitY = false, implicitX = false;
  5450. if ((cell.geometry.points == null || cell.geometry.points.length == 0) &&
  5451. p.Endpoint1.Block != null && p.Endpoint1.Block == p.Endpoint2.Block &&
  5452. source != null && target != null)
  5453. {
  5454. {
  5455. var exit = new mxPoint(Math.round(source.geometry.x + source.geometry.width * p.Endpoint1.LinkX),
  5456. Math.round(source.geometry.y + source.geometry.height * p.Endpoint1.LinkY));
  5457. var entry = new mxPoint(Math.round(target.geometry.x + target.geometry.width * p.Endpoint2.LinkX),
  5458. Math.round(target.geometry.y + target.geometry.height * p.Endpoint2.LinkY));
  5459. dx = (exit.x == entry.x) ? (Math.abs(exit.x - source.geometry.x) < source.geometry.width / 2? -20 : 20) : 0;
  5460. dy = (exit.y == entry.y) ? (Math.abs(exit.y - source.geometry.y) < source.geometry.height / 2? -20 : 20) : 0;
  5461. var p1 = new mxPoint(exit.x + dx, exit.y + dy), p2 = new mxPoint(entry.x + dx, entry.y + dy);
  5462. p1.generated = true;
  5463. p2.generated = true;
  5464. cell.geometry.points = [p1, p2];
  5465. implicitX = (exit.y == entry.y); //TODO Check these implicit variables effect
  5466. implicitY = (exit.x == entry.x);
  5467. }
  5468. }
  5469. // Anchor points and arrows
  5470. var p1, p2;
  5471. if (source == null || !source.geometry.isRotated) //TODO Rotate the endpoint instead of ignoring it
  5472. {
  5473. p1 = updateEndpoint(cell, p.Endpoint1, true, implicitY, null, source);
  5474. }
  5475. if (source != null && p1 != null)
  5476. {
  5477. if (source.stylePoints == null)
  5478. {
  5479. source.stylePoints = [];
  5480. }
  5481. source.stylePoints.push(p1);
  5482. LucidImporter.stylePointsSet.add(source);
  5483. }
  5484. if (target == null || !target.geometry.isRotated) //TODO Rotate the endpoint instead of ignoring it
  5485. {
  5486. p2 = updateEndpoint(cell, p.Endpoint2, false, implicitY, null, target);
  5487. }
  5488. if (target != null && p2 != null)
  5489. {
  5490. if (target.stylePoints == null)
  5491. {
  5492. target.stylePoints = [];
  5493. }
  5494. target.stylePoints.push(p2);
  5495. LucidImporter.stylePointsSet.add(target);
  5496. }
  5497. }
  5498. }
  5499. }
  5500. if (obj.id != null)
  5501. {
  5502. cell.style += ';lucidId=' + obj.id + ';';
  5503. }
  5504. cell.lucidchartObject = obj;
  5505. };
  5506. function createVertex(obj, graph)
  5507. {
  5508. var a = getAction(obj);
  5509. var p = a.Properties;
  5510. var b = p.BoundingBox;
  5511. if (obj.Class != null && (obj.Class.substring(0, 3) === "AWS" || obj.Class.substring(0, 6) === "Amazon" ) && !obj.Class.includes('AWS19'))
  5512. {
  5513. b.h = b.h - 20;
  5514. }
  5515. v = new mxCell('', new mxGeometry(Math.round(b.x * scale + dx), Math.round(b.y * scale + dy),
  5516. Math.round(b.w * scale), Math.round(b.h * scale)), vertexStyle);
  5517. v.vertex = true;
  5518. updateCell(v, obj, graph);
  5519. //Store z-order to use it in groups
  5520. v.zOrder = p.ZOrder;
  5521. handleTextRotation(v, p);
  5522. if (p.Hidden)
  5523. {
  5524. v.visible = false;
  5525. }
  5526. return v;
  5527. };
  5528. function createEdge(obj, graph, source, target)
  5529. {
  5530. var e = new mxCell('', new mxGeometry(0, 0, 100, 100), edgeStyle);
  5531. e.geometry.relative = true;
  5532. e.edge = true;
  5533. updateCell(e, obj, graph, source, target, true);
  5534. // Adds text labels
  5535. var a = getAction(obj);
  5536. var p = a.Properties;
  5537. var ta = (p != null) ? p.TextAreas : obj.TextAreas;
  5538. if (ta != null)
  5539. {
  5540. var count = 0;
  5541. while (ta['t' + count] !== undefined) //Some files has null for some labels
  5542. {
  5543. var tmp = ta['t' + count];
  5544. if (tmp != null)
  5545. {
  5546. e = insertLabel(tmp, e, obj, source, target, graph)
  5547. }
  5548. count++;
  5549. }
  5550. count = 0;
  5551. while (ta['m' + count] !== undefined || count < 1)
  5552. {
  5553. var tmp = ta['m' + count];
  5554. if (tmp != null)
  5555. {
  5556. e = insertLabel(tmp, e, obj, source, target, graph)
  5557. }
  5558. count++;
  5559. }
  5560. if (ta.Text != null)
  5561. {
  5562. e = insertLabel(ta.Text, e, obj, source, target, graph)
  5563. }
  5564. var ta = (p != null) ? p.TextAreas : obj.TextAreas;
  5565. if (ta.Message != null)
  5566. {
  5567. e = insertLabel(ta.Message, e, obj, source, target, graph)
  5568. }
  5569. }
  5570. if (obj.Hidden)
  5571. {
  5572. e.visible = false;
  5573. }
  5574. return e;
  5575. }
  5576. function insertLabel(textArea, e, obj, src, trg, graph)
  5577. {
  5578. var x = (parseFloat(textArea.Location) - 0.5) * 2;
  5579. if (isNaN(x) && textArea.Text != null && textArea.Text.Location != null)
  5580. {
  5581. x = (parseFloat(textArea.Text.Location) - 0.5) * 2;
  5582. }
  5583. var lblTxt = convertText(textArea);
  5584. var lab = new mxCell(lblTxt, new mxGeometry((!isNaN(x)) ? x : 0, 0, 0, 0),
  5585. labelStyle + getEdgeLabelStyle(textArea, obj, isLastLblHTML));
  5586. lab.geometry.relative = true;
  5587. lab.vertex = true;
  5588. if (textArea.Side)
  5589. {
  5590. try
  5591. {
  5592. if (obj.Action && obj.Action.Properties)
  5593. {
  5594. obj = obj.Action.Properties;
  5595. }
  5596. var dx, dy;
  5597. //Sometimes x, y info in the Endpoint is incorrect when the edge is connected!
  5598. if (src != null && trg != null)
  5599. {
  5600. var srcGeo = src.geometry, trgGeo = trg.geometry;
  5601. dx = Math.abs((srcGeo.x + srcGeo.width * obj.Endpoint1.LinkX) -
  5602. (trgGeo.x + trgGeo.width * obj.Endpoint2.LinkX));
  5603. dy = Math.abs((srcGeo.y + srcGeo.height * obj.Endpoint1.LinkY) -
  5604. (trgGeo.y + trgGeo.height * obj.Endpoint2.LinkY));
  5605. }
  5606. else
  5607. {
  5608. dx = Math.abs(obj.Endpoint1.x - obj.Endpoint2.x);
  5609. dy = Math.abs(obj.Endpoint1.y - obj.Endpoint2.y);
  5610. }
  5611. var strSize = mxUtils.getSizeForString(lblTxt.replace(/\n/g, '<br>'));
  5612. if (dx == 0 || dx < dy)
  5613. {
  5614. lab.geometry.offset = new mxPoint(Math.sign(obj.Endpoint1.y - obj.Endpoint2.y) * textArea.Side * (strSize.width / 2 + 5 + dx), 0);
  5615. }
  5616. else
  5617. {
  5618. lab.geometry.offset = new mxPoint(0, Math.sign(obj.Endpoint2.x - obj.Endpoint1.x) * textArea.Side * (strSize.height / 2 + 5 + dy));
  5619. }
  5620. }
  5621. catch(e)
  5622. {
  5623. console.log(e);
  5624. }
  5625. }
  5626. lab.lucidchartObject = textArea;
  5627. e.insert(lab);
  5628. return e;
  5629. };
  5630. function getEdgeLabelStyle(obj, pObj, noLblStyle)
  5631. {
  5632. if (noLblStyle)
  5633. {
  5634. return gFontFamilyStyle;
  5635. }
  5636. var size = defaultFontSize;
  5637. var style = '';
  5638. if (obj != null && obj.Value != null && obj.Value.m != null)
  5639. {
  5640. style = getFontStyleString(obj.Value.m);
  5641. for (var i = 0; i < obj.Value.m.length; i++)
  5642. {
  5643. if (obj.Value.m[i].n == 's' && obj.Value.m[i].v) //Ignore zero value
  5644. {
  5645. size = fix1Digit(scale * parseFloat(obj.Value.m[i].v));
  5646. }
  5647. else if (obj.Value.m[i].n == 'c')
  5648. {
  5649. var v = rgbToHex(obj.Value.m[i].v);
  5650. if (v != null)
  5651. {
  5652. v = v.substring(0, 7);
  5653. }
  5654. if (v == '#000000')
  5655. {
  5656. v = 'default';
  5657. }
  5658. style += 'fontColor=' + v + ';'
  5659. }
  5660. }
  5661. style += getFontFamily(pObj);
  5662. gFontFamilyStyle = '';
  5663. }
  5664. return style + ';fontSize=' + size + ';';
  5665. };
  5666. function createStyle(key, prop, defaultValue, fn)
  5667. {
  5668. if (prop != null && fn != null)
  5669. {
  5670. prop = fn(prop);
  5671. }
  5672. if (prop != null && prop != defaultValue)
  5673. {
  5674. return key + '=' + prop + ';';
  5675. }
  5676. return '';
  5677. };
  5678. function updateEndpoint(cell, endpoint, source, ignoreX, ignoreY, endCell)
  5679. {
  5680. if (endpoint != null)
  5681. {
  5682. if (endpoint.LinkX != null && endpoint.LinkY != null)
  5683. {
  5684. endpoint.LinkX = Math.round(endpoint.LinkX * 1000) / 1000;
  5685. endpoint.LinkY = Math.round(endpoint.LinkY * 1000) / 1000;
  5686. if (endCell != null && endCell.style && endCell.style.indexOf('flipH=1') > -1)
  5687. {
  5688. endpoint.LinkX = 1 - endpoint.LinkX;
  5689. }
  5690. if (endCell != null && endCell.style && endCell.style.indexOf('flipV=1') > -1)
  5691. {
  5692. endpoint.LinkY = 1 - endpoint.LinkY;
  5693. }
  5694. cell.style += ((!ignoreX) ? ((source) ? 'exitX' : 'entryX') + '=' + endpoint.LinkX + ';' : '') +
  5695. ((!ignoreY) ? (((source) ? 'exitY' : 'entryY') + '=' + endpoint.LinkY + ';') : '') +
  5696. ((source) ? 'exitPerimeter' : 'entryPerimeter') + '=0;'; //perimeter as 0 works with both cases better
  5697. if (endpoint.Inside)
  5698. {
  5699. return '[' + endpoint.LinkX + ',' + endpoint.LinkY + ',0]';
  5700. }
  5701. }
  5702. }
  5703. };
  5704. function createGroup(obj, lookup, edgesGroups, blocksMap, graph)
  5705. {
  5706. try
  5707. {
  5708. if (obj.Action != null && obj.Action.Properties != null)
  5709. {
  5710. obj = obj.Action.Properties;
  5711. }
  5712. var group = new mxCell('', new mxGeometry(), groupStyle);
  5713. group.vertex = true;
  5714. //Store z-order to use it in groups
  5715. group.zOrder = obj.ZOrder;
  5716. var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
  5717. var members = obj.Members, memberCells = [];
  5718. for (var key in members)
  5719. {
  5720. var v = lookup[key];
  5721. if (v != null)
  5722. {
  5723. memberCells.push(v);
  5724. }
  5725. else if (blocksMap[key] != null)
  5726. {
  5727. memberCells.push(blocksMap[key]);
  5728. //Edges are not yet created, so, create a map for them
  5729. edgesGroups[key] = group;
  5730. }
  5731. }
  5732. memberCells.sort(function(a, b)
  5733. {
  5734. var ai = a.zOrder || a.ZOrder; // for edges we need ZOrder since they aren't created yet
  5735. var bi = b.zOrder || b.ZOrder;
  5736. return (ai != null && bi != null) ? (ai > bi? 1 : (ai < bi? -1 : 0)) : 0; //ZOrder can be negative
  5737. });
  5738. function updateMinMax(e, scaleIt)
  5739. {
  5740. if (e != null)
  5741. {
  5742. if (Array.isArray(e))
  5743. {
  5744. for (var i = 0; i < e.length; i++)
  5745. {
  5746. updateMinMax(e[i].p? e[i].p : e[i], scaleIt);
  5747. }
  5748. }
  5749. else
  5750. {
  5751. var s = scaleIt? scale : 1;
  5752. minX = Math.min(minX, e.x * s);
  5753. minY = Math.min(minY, e.y * s);
  5754. maxX = Math.max(maxX, (e.x + (e.width? e.width : 0)) * s);
  5755. maxY = Math.max(maxY, (e.y + (e.height? e.height : 0)) * s);
  5756. }
  5757. }
  5758. };
  5759. var index = 0;
  5760. for (var i = 0; i < memberCells.length; i++)
  5761. {
  5762. var v = memberCells[i];
  5763. if (v.vertex)
  5764. {
  5765. updateMinMax(v.geometry);
  5766. v.parent = group;
  5767. group.insert(v, index++);
  5768. }
  5769. else
  5770. {
  5771. var vProp = v.Action != null && v.Action.Properties? v.Action.Properties : v;
  5772. updateMinMax(vProp.Endpoint1, true);
  5773. updateMinMax(vProp.Endpoint2, true);
  5774. updateMinMax(vProp.ElbowPoints, true);
  5775. updateMinMax(vProp.ElbowControlPoints, true);
  5776. updateMinMax(vProp.BezierJoints, true);
  5777. updateMinMax(vProp.Joints, true);
  5778. }
  5779. }
  5780. group.geometry.x = minX;
  5781. group.geometry.y = minY;
  5782. group.geometry.width = maxX - minX;
  5783. group.geometry.height = maxY - minY;
  5784. if (group.children != null)
  5785. {
  5786. for (var i = 0; i < group.children.length; i++)
  5787. {
  5788. var geo = group.children[i].geometry;
  5789. geo.x -= minX;
  5790. geo.y -= minY;
  5791. }
  5792. }
  5793. if (obj.IsState)
  5794. {
  5795. group.lucidLayerInfo = {
  5796. name: obj.Name,
  5797. visible: !obj.Hidden,
  5798. locked: obj.Restrictions.b && obj.Restrictions.p && obj.Restrictions.c
  5799. };
  5800. group.style += 'container=1;collapsible=0;recursiveResize=0;';
  5801. }
  5802. else if (obj.Hidden)
  5803. {
  5804. group.visible = false;
  5805. }
  5806. group.lucidchartObject = obj;
  5807. return group;
  5808. }
  5809. catch(e)
  5810. {
  5811. console.log(e);
  5812. }
  5813. };
  5814. function importLucidPage(graph, g, noSelection)
  5815. {
  5816. LucidImporter.hasMath = false;
  5817. LucidImporter.stylePointsSet = new Set();
  5818. graph.getModel().beginUpdate();
  5819. try
  5820. {
  5821. var select = [];
  5822. var lookup = {};
  5823. var edgesGroups = {};
  5824. var blocksMap = {};
  5825. var queue = [];
  5826. if (g.Lines != null)
  5827. {
  5828. blocksMap = g.Lines;
  5829. }
  5830. // Vertices first (populates lookup table for connecting edges)
  5831. if (g.Blocks != null)
  5832. {
  5833. Object.assign(blocksMap, g.Blocks);
  5834. for (var key in g.Blocks)
  5835. {
  5836. var obj = g.Blocks[key];
  5837. obj.id = key;
  5838. var created = false;
  5839. if (styleMap[obj.Class] != null)
  5840. {
  5841. if (styleMap[obj.Class] == 'mxCompositeShape')
  5842. {
  5843. lookup[obj.id] = addCompositeShape(obj, select, graph);
  5844. queue.push(obj);
  5845. created = true;
  5846. }
  5847. }
  5848. if (!created)
  5849. {
  5850. lookup[obj.id] = createVertex(obj, graph);
  5851. queue.push(obj);
  5852. }
  5853. }
  5854. if (g.Generators != null)
  5855. {
  5856. for (var key in g.Generators)
  5857. {
  5858. if (g.Generators[key].ClassName == 'OrgChart2018')
  5859. {
  5860. LucidImporter.hasUnknownShapes = true;
  5861. createOrgChart(key, g.Generators[key], g.Data, graph, lookup);
  5862. }
  5863. else
  5864. {
  5865. LucidImporter.hasUnknownShapes = true;
  5866. }
  5867. }
  5868. }
  5869. }
  5870. else
  5871. {
  5872. for (var i = 0; i < g.Objects.length; i++)
  5873. {
  5874. var obj = g.Objects[i];
  5875. blocksMap[obj.id] = obj;
  5876. if (obj.Action != null && styleMap[obj.Action.Class] == 'mxCompositeShape')
  5877. {
  5878. lookup[obj.id] = addCompositeShape(obj, select, graph);
  5879. }
  5880. else if (obj.IsBlock && obj.Action != null && obj.Action.Properties != null)
  5881. {
  5882. lookup[obj.id] = createVertex(obj, graph);
  5883. }
  5884. else if (obj.IsGenerator && obj.GeneratorData && obj.GeneratorData.p)
  5885. {
  5886. if (obj.GeneratorData.p.ClassName == 'OrgChart2018')
  5887. {
  5888. LucidImporter.hasUnknownShapes = true;
  5889. createOrgChart(obj.GeneratorData.id, obj.GeneratorData.p, obj.GeneratorData.gs, graph, lookup);
  5890. }
  5891. else
  5892. {
  5893. LucidImporter.hasUnknownShapes = true;
  5894. }
  5895. }
  5896. queue.push(obj);
  5897. }
  5898. //Add groups
  5899. for (var i = 0; i < g.Objects.length; i++)
  5900. {
  5901. var obj = g.Objects[i];
  5902. if (obj.IsGroup)
  5903. {
  5904. var group = createGroup(obj, lookup, edgesGroups, blocksMap, graph);
  5905. if (group)
  5906. {
  5907. lookup[obj.id] = group;
  5908. queue.push(obj);
  5909. }
  5910. }
  5911. }
  5912. }
  5913. //Create groups
  5914. if (g.Groups != null)
  5915. {
  5916. try
  5917. {
  5918. for (var key in g.Groups)
  5919. {
  5920. var obj = g.Groups[key];
  5921. obj.id = key;
  5922. var group = createGroup(obj, lookup, edgesGroups, blocksMap, graph)
  5923. if (group)
  5924. {
  5925. lookup[obj.id] = group;
  5926. queue.push(obj);
  5927. }
  5928. }
  5929. }
  5930. catch(e)
  5931. {
  5932. console.log(e);
  5933. }
  5934. }
  5935. if (g.Lines != null)
  5936. {
  5937. for (var key in g.Lines)
  5938. {
  5939. var obj = g.Lines[key];
  5940. obj.id = key;
  5941. queue.push(obj);
  5942. }
  5943. }
  5944. // Sorts all cells by ZOrder
  5945. queue.sort(function(a, b)
  5946. {
  5947. a = getAction(a);
  5948. b = getAction(b);
  5949. var ai = (a.Properties != null) ? a.Properties.ZOrder : a.ZOrder;
  5950. var bi = (b.Properties != null) ? b.Properties.ZOrder : b.ZOrder;
  5951. return (ai != null && bi != null) ? (ai > bi? 1 : (ai < bi? -1 : 0)) : 0; //ZOrder can be negative
  5952. });
  5953. function addLine(obj, p)
  5954. {
  5955. var src = (p.Endpoint1.Block != null) ? lookup[p.Endpoint1.Block] : null;
  5956. var trg = (p.Endpoint2.Block != null) ? lookup[p.Endpoint2.Block] : null;
  5957. var e = createEdge(obj, graph, src, trg);
  5958. if ((p.Endpoint1 && p.Endpoint1.Line) || (p.Endpoint2 && p.Endpoint2.Line))
  5959. {
  5960. console.log('Edge to Edge case');
  5961. LucidImporter.hasUnknownShapes = true;
  5962. }
  5963. if (src == null && p.Endpoint1 != null)
  5964. {
  5965. e.geometry.setTerminalPoint(new mxPoint(Math.round(p.Endpoint1.x * scale),
  5966. Math.round(p.Endpoint1.y * scale)), true);
  5967. }
  5968. if (trg == null && p.Endpoint2 != null)
  5969. {
  5970. e.geometry.setTerminalPoint(new mxPoint(Math.round(p.Endpoint2.x * scale),
  5971. Math.round(p.Endpoint2.y * scale)), false);
  5972. }
  5973. var group = edgesGroups[obj.id];
  5974. function fixPoint(p, px, py)
  5975. {
  5976. if (p != null && !p.generated)
  5977. {
  5978. p.x -= px;
  5979. p.y -= py;
  5980. }
  5981. };
  5982. if (group != null)
  5983. {
  5984. //Correct edge geometry
  5985. var geo = e.geometry, px = 0, py = 0, prnt = group;
  5986. while (prnt != null && prnt.geometry != null)
  5987. {
  5988. px += prnt.geometry.x;
  5989. py += prnt.geometry.y;
  5990. prnt = prnt.parent;
  5991. }
  5992. fixPoint(geo.sourcePoint, px, py);
  5993. fixPoint(geo.targetPoint, px, py);
  5994. fixPoint(geo.offset, px, py);
  5995. var points = geo.points;
  5996. if (points != null)
  5997. {
  5998. for (var i = 0; i < points.length; i++)
  5999. {
  6000. fixPoint(points[i], px, py);
  6001. }
  6002. }
  6003. }
  6004. select.push(graph.addCell(e, group, null, src, trg));
  6005. };
  6006. // Inserts cells in ZOrder and connects edges via lookup
  6007. for (var i = 0; i < queue.length; i++)
  6008. {
  6009. var obj = queue[i];
  6010. var v = lookup[obj.id];
  6011. if (v != null)
  6012. {
  6013. if (v.parent == null)
  6014. {
  6015. if (v.lucidLayerInfo)
  6016. {
  6017. var layerCell = new mxCell();
  6018. graph.addCell(layerCell, graph.model.root);
  6019. layerCell.setVisible(v.lucidLayerInfo.visible);
  6020. if (v.lucidLayerInfo.locked)
  6021. {
  6022. layerCell.setStyle("locked=1;");
  6023. }
  6024. layerCell.setValue(v.lucidLayerInfo.name);
  6025. delete v.lucidLayerInfo;
  6026. graph.addCell(v, layerCell);
  6027. }
  6028. else
  6029. {
  6030. select.push(graph.addCell(v));
  6031. }
  6032. }
  6033. }
  6034. else if (obj.IsLine && obj.Action != null && obj.Action.Properties != null)
  6035. {
  6036. var p = obj.Action.Properties;
  6037. addLine(obj, p);
  6038. }
  6039. else if (obj.StrokeStyle != null)
  6040. {
  6041. addLine(obj, obj);
  6042. }
  6043. }
  6044. LucidImporter.stylePointsSet.forEach(function(v)
  6045. {
  6046. v.style = 'points=[' + v.stylePoints.join(',') + '];' + v.style;
  6047. delete v.stylePoints;
  6048. });
  6049. //Cleanup added properties
  6050. try
  6051. {
  6052. var allCells = graph.getModel().cells;
  6053. // Computes absolute points and bounds
  6054. // for edge label placement optimizer
  6055. graph.view.validate();
  6056. for (var id in allCells)
  6057. {
  6058. var c = allCells[id];
  6059. if (c != null)
  6060. {
  6061. normalizeGroup(graph, c);
  6062. normalizeStyle(graph, c);
  6063. normalizeEdge(graph, c);
  6064. if (urlParams['lucidchartObject'] == '1' &&
  6065. c.lucidchartObject != null)
  6066. {
  6067. setAttributeForCell(c, 'lucidchartObject',
  6068. JSON.stringify(c.lucidchartObject, null, 2),
  6069. graph);
  6070. }
  6071. delete c.lucidchartObject;
  6072. delete c.zOrder;
  6073. }
  6074. }
  6075. }
  6076. catch(e)
  6077. {
  6078. console.log(e);
  6079. }
  6080. if (!noSelection)
  6081. graph.setSelectionCells(select);
  6082. }
  6083. finally
  6084. {
  6085. graph.getModel().endUpdate();
  6086. }
  6087. };
  6088. // Optimizes edge routing and labels
  6089. function normalizeEdge(graph, cell)
  6090. {
  6091. if (graph.model.contains(cell) && cell.edge)
  6092. {
  6093. var state = graph.view.getState(cell);
  6094. // Keeps labels close to the edge
  6095. if (state != null && cell.children != null)
  6096. {
  6097. var box = mxRectangle.fromRectangle(state.paintBounds);
  6098. box.grow(5);
  6099. for (var i = 0; i < cell.children.length; i++)
  6100. {
  6101. var label = graph.view.getState(cell.children[i]);
  6102. if (label != null && !mxUtils.contains(box,
  6103. label.paintBounds.x, label.paintBounds.y))
  6104. {
  6105. label.cell.geometry.offset = new mxPoint(0, 0);
  6106. }
  6107. }
  6108. }
  6109. // Fixes simple elbow routing
  6110. var lo = cell.lucidchartObject;
  6111. if (lo != null && lo.Shape == 'elbow' &&
  6112. lo.ElbowControlPoints == null &&
  6113. lo.ElbowPoints == null &&
  6114. state.style['exitX'] != null &&
  6115. state.style['exitY'] != null &&
  6116. state.style['entryX'] != null &&
  6117. state.style['entryY'] != null)
  6118. {
  6119. var f = 20;
  6120. cell.style = mxUtils.setStyle(cell.style, 'exitX', Math.round(state.style['exitX'] * f) / f);
  6121. cell.style = mxUtils.setStyle(cell.style, 'exitY', Math.round(state.style['exitY'] * f) / f);
  6122. cell.style = mxUtils.setStyle(cell.style, 'entryX', Math.round(state.style['entryX'] * f) / f);
  6123. cell.style = mxUtils.setStyle(cell.style, 'entryY', Math.round(state.style['entryY'] * f) / f);
  6124. }
  6125. }
  6126. };
  6127. // Removes duplicate styles
  6128. function normalizeStyle(graph, cell)
  6129. {
  6130. if (graph.model.contains(cell) &&
  6131. cell.style != null &&
  6132. cell.style != '')
  6133. {
  6134. var entries = cell.style.split(';');
  6135. var styleMap = {};
  6136. var result = [];
  6137. for (var i = entries.length - 1; i >= 0; i--)
  6138. {
  6139. var tokens = entries[i].split('=');
  6140. if (tokens.length != 2 || styleMap[tokens[0]] == null)
  6141. {
  6142. styleMap[tokens[0]] = tokens[1];
  6143. if (entries[i] != '')
  6144. {
  6145. result.push(entries[i]);
  6146. }
  6147. }
  6148. }
  6149. cell.style = result.reverse().join(';') + ';';
  6150. }
  6151. };
  6152. // Merges groups with background cover cells
  6153. function normalizeGroup(graph, group)
  6154. {
  6155. if (graph.model.contains(group) && group.children != null &&
  6156. group.geometry != null && group.vertex &&
  6157. group.style == groupStyle)
  6158. {
  6159. var coverCell = null;
  6160. for (var i = 0; i < group.children.length; i++)
  6161. {
  6162. if (group.children[i].vertex)
  6163. {
  6164. var geo = group.children[i].geometry;
  6165. if (geo != null && geo.x == 0 && geo.y == 0 &&
  6166. geo.width == group.geometry.width &&
  6167. geo.height == group.geometry.height)
  6168. {
  6169. if (coverCell != null)
  6170. {
  6171. // Ignores multiple cover cells
  6172. return;
  6173. }
  6174. else
  6175. {
  6176. coverCell = group.children[i];
  6177. }
  6178. }
  6179. }
  6180. }
  6181. removeCellFromParent(graph, coverCell);
  6182. }
  6183. }
  6184. function removeCellFromParent(graph, cell)
  6185. {
  6186. if (cell != null)
  6187. {
  6188. var p = cell.parent;
  6189. if (graph.convertValueToString(p) == '')
  6190. {
  6191. // Moves edges to parent
  6192. if (cell.edges != null)
  6193. {
  6194. for (var i = 0; i < cell.edges.length; i++)
  6195. {
  6196. if (cell.edges[i].source == cell)
  6197. {
  6198. cell.edges[i].setTerminal(cell.parent, true);
  6199. }
  6200. if (cell.edges[i].target == cell)
  6201. {
  6202. cell.edges[i].setTerminal(cell.parent, false);
  6203. }
  6204. }
  6205. }
  6206. // Moves children to parent
  6207. if (cell.children != null && cell.children.length > 0)
  6208. {
  6209. var cells = cell.children.slice();
  6210. for (var i = 0; i < cells.length; i++)
  6211. {
  6212. p.insert(cells[i]);
  6213. }
  6214. }
  6215. graph.cellLabelChanged(p, graph.convertValueToString(cell));
  6216. p.style = mxUtils.setStyle(mxUtils.setStyle(
  6217. cell.style, 'container', '1'),
  6218. 'collapsible', '0');
  6219. cell.removeFromParent();
  6220. }
  6221. }
  6222. };
  6223. function createGraph()
  6224. {
  6225. //TODO Set the graph defaults
  6226. var graph = new Graph();
  6227. graph.setExtendParents(false);
  6228. graph.setExtendParentsOnAdd(false);
  6229. graph.setConstrainChildren(false);
  6230. graph.setHtmlLabels(true);
  6231. graph.getModel().maintainEdgeParent = false;
  6232. return graph;
  6233. };
  6234. //Code adopted from vsdx importer
  6235. /**
  6236. * Holds the NURBS array that is part of the VSDX NURBSTo element, together with some helper functions
  6237. */
  6238. function Nurbs(x1, y1, n1x, n1y, x2, y2, n2x, n2y)
  6239. {
  6240. this.nurbsValues = [1, 3, 0, 0,
  6241. (x1 + n1x) * 100,
  6242. 100 - (1 - (y1 + n1y)) * 100,
  6243. 0, 1,
  6244. (x2 + n2x) * 100,
  6245. 100 - (1 - (y2 + n2y)) * 100,
  6246. 0, 1
  6247. ];
  6248. }
  6249. /**
  6250. * @return {number} number of points, not including the last one (which is outside of the nurbs string)
  6251. */
  6252. Nurbs.prototype.getSize = function () {
  6253. return (((this.nurbsValues.length / 4 | 0)) - 1);
  6254. };
  6255. /**
  6256. * @return {number} the i-th X coordinate
  6257. * @param {number} i
  6258. */
  6259. Nurbs.prototype.getX = function (i) {
  6260. return Math.round(this.nurbsValues[(i + 1) * 4] * 100.0) / 100.0;;
  6261. };
  6262. /**
  6263. * @return {number} the i-th Y coordinate
  6264. * @param {number} i
  6265. */
  6266. Nurbs.prototype.getY = function (i) {
  6267. return Math.round(this.nurbsValues[(i + 1) * 4 + 1] * 100.0) / 100.0;;
  6268. };
  6269. //A: 0, B: 1, C: 0, D: 1
  6270. function NURBSTo(x, y, w, h, px1, py1, n1x, n1y, px2, py2, n2x, n2y)
  6271. {
  6272. var nurbs = new Nurbs(px1, py1, n1x, n1y, px2, py2, n2x, n2y);
  6273. if (nurbs.getSize() >= 2)
  6274. {
  6275. var x1 = nurbs.getX(0);
  6276. var y1 = nurbs.getY(0);
  6277. var x2 = nurbs.getX(1);
  6278. var y2 = nurbs.getY(1);
  6279. y = y * 100.0 / h;
  6280. x = x * 100.0 / w;
  6281. x = Math.round(x * 100.0) / 100.0;
  6282. y = Math.round(y * 100.0) / 100.0;
  6283. var cp1 = ([]);
  6284. var cp2 = ([]);
  6285. var nut = ([]);
  6286. var nurbsize = nurbs.getSize();
  6287. for (var i = 0; i < nurbsize - 1; i = i + 3)
  6288. {
  6289. cp1.push(new mxPoint(nurbs.getX(i), nurbs.getY(i)));
  6290. cp2.push(new mxPoint(nurbs.getX(i + 1), nurbs.getY(i + 1)));
  6291. if (i < nurbsize - 2) {
  6292. nut.push(new mxPoint(nurbs.getX(i + 2), nurbs.getY(i + 2)));
  6293. }
  6294. else {
  6295. nut.push(new mxPoint(x, y));
  6296. }
  6297. }
  6298. var result = "";
  6299. for (var i = 0; i < cp1.length; i++) {
  6300. 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 + "\"/>";
  6301. }
  6302. return result;
  6303. }
  6304. };
  6305. function addStencil(id, obj)
  6306. {
  6307. try
  6308. {
  6309. var stencils = [];
  6310. var w = obj.BoundingBox.w;
  6311. var h = obj.BoundingBox.h;
  6312. for (var i = 0; i < obj.Shapes.length; i++)
  6313. {
  6314. var shape = obj.Shapes[i];
  6315. var fillClr = shape.FillColor;
  6316. var strokeClr = shape.StrokeColor;
  6317. var lineW = shape.LineWidth;
  6318. var points = shape.Points;
  6319. var lines = shape.Lines;
  6320. var parts = ["<shape strokewidth=\"inherit\"><foreground>"];
  6321. parts.push("<path>");
  6322. var lastP = null;
  6323. for (var j = 0; j < lines.length; j++)
  6324. {
  6325. var line = lines[j];
  6326. if (lastP != line.p1) //Add move to when last point is different from current first poinnt
  6327. {
  6328. var x = points[line.p1].x, y = points[line.p1].y;
  6329. x = x * 100.0 / w;
  6330. y = y * 100.0 / h;
  6331. x = Math.round(x * 100.0) / 100.0;
  6332. y = Math.round(y * 100.0) / 100.0;
  6333. parts.push("<move x=\"" + x + "\" y=\"" + y + "\"/>");
  6334. }
  6335. if (line.n1 != null) // Curve
  6336. {
  6337. var curve = NURBSTo(points[line.p2].x, points[line.p2].y, w, h,
  6338. points[line.p1].x / w, points[line.p1].y / h, line.n1.x / w, line.n1.y / h,
  6339. points[line.p2].x / w, points[line.p2].y / h, line.n2.x / w, line.n2.y / h);
  6340. parts.push(curve);
  6341. }
  6342. else //line
  6343. {
  6344. var x = points[line.p2].x, y = points[line.p2].y;
  6345. x = x * 100.0 / w;
  6346. y = y * 100.0 / h;
  6347. x = Math.round(x * 100.0) / 100.0;
  6348. y = Math.round(y * 100.0) / 100.0;
  6349. parts.push("<line x=\"" + x + "\" y=\"" + y + "\"/>");
  6350. }
  6351. lastP = line.p2;
  6352. }
  6353. parts.push("</path>");
  6354. parts.push("<fillstroke/>");
  6355. parts.push("</foreground></shape>");
  6356. stencils.push({
  6357. shapeStencil: "stencil(" + Graph.compress(parts.join('')) + ")",
  6358. FillColor: fillClr,
  6359. LineColor: strokeClr,
  6360. LineWidth: lineW,
  6361. });
  6362. }
  6363. LucidImporter.stencilsMap[id] = {
  6364. text: obj.Text,
  6365. w: w,
  6366. h: h,
  6367. x: obj.BoundingBox.x,
  6368. y: obj.BoundingBox.y,
  6369. stencils: stencils
  6370. };
  6371. }
  6372. catch(e)
  6373. {
  6374. console.log('Stencil parsing error:', e);
  6375. }
  6376. };
  6377. LucidImporter.importState = function(state, imgSrcRepl, advImpConfig)
  6378. {
  6379. dx = 0;
  6380. dy = 0;
  6381. LucidImporter.stencilsMap = {}; //Reset stencils cache
  6382. LucidImporter.imgSrcRepl = imgSrcRepl; //Use LucidImporter object to store the map since it is used deep inside
  6383. LucidImporter.advImpConfig = advImpConfig;
  6384. LucidImporter.globalProps = {};
  6385. LucidImporter.pageIdsMap = {};
  6386. LucidImporter.hasUnknownShapes = false;
  6387. LucidImporter.hasOrgChart = false;
  6388. LucidImporter.hasTimeLine = false;
  6389. LucidImporter.hasExtImgs = false;
  6390. var xml = ['<?xml version=\"1.0\" encoding=\"UTF-8\"?>', '<mxfile type="Lucidchart-Import" version="' +
  6391. EditorUi.VERSION + '" host="' + mxUtils.htmlEntities(window.location.hostname) +
  6392. '" agent="' + mxUtils.htmlEntities(navigator.appVersion) +
  6393. '" modified="' + mxUtils.htmlEntities(new Date().toISOString()) + '">'];
  6394. if (advImpConfig && advImpConfig.transparentEdgeLabels)
  6395. {
  6396. labelStyle = labelStyle.replace('labelBackgroundColor=default;', 'labelBackgroundColor=none;');
  6397. }
  6398. // Extracts and sorts all pages
  6399. var pages = [];
  6400. function addPages(obj)
  6401. {
  6402. if (obj.state != null)
  6403. {
  6404. EditorUi.debug('convertLucidChart addPages', obj);
  6405. }
  6406. //Build stencils map
  6407. if (obj.Properties)
  6408. {
  6409. for (var key in obj.Properties)
  6410. {
  6411. if (key.substr(0, 8) == 'Stencil-')
  6412. {
  6413. addStencil(key.substr(8), obj.Properties[key]);
  6414. }
  6415. }
  6416. LucidImporter.globalProps = obj.Properties;
  6417. }
  6418. for (var id in obj.Pages)
  6419. {
  6420. var pg = obj.Pages[id];
  6421. pg.id = id;
  6422. pg.Data = obj.Data;
  6423. pages.push(pg);
  6424. }
  6425. pages.sort(function(a, b)
  6426. {
  6427. if (a.Properties.Order < b.Properties.Order)
  6428. {
  6429. return -1;
  6430. }
  6431. else if (a.Properties.Order > b.Properties.Order)
  6432. {
  6433. return 1;
  6434. }
  6435. else
  6436. {
  6437. return 0;
  6438. }
  6439. });
  6440. for (var i = 0; i < pages.length; i++)
  6441. {
  6442. LucidImporter.pageIdsMap[pages[i].id] = i;
  6443. }
  6444. };
  6445. if (state.state != null)
  6446. {
  6447. addPages(JSON.parse(state.state));
  6448. }
  6449. else if (state.Page == null && state.Pages != null)
  6450. {
  6451. addPages(state);
  6452. }
  6453. else
  6454. {
  6455. pages.push(state);
  6456. }
  6457. var graph = createGraph();
  6458. var codec = new mxCodec();
  6459. for (var i = 0; i < pages.length; i++)
  6460. {
  6461. xml.push('<diagram');
  6462. if (pages[i].Properties != null && pages[i].Properties.Title != null)
  6463. {
  6464. xml.push(' name="' + mxUtils.htmlEntities(pages[i].Properties.Title) + '"');
  6465. }
  6466. xml.push(' id="' + i + '"'); //Add page ids in case it is needed in aspects
  6467. importLucidPage(graph, pages[i], true);
  6468. var node = codec.encode(graph.getModel());
  6469. if (pages[i].Properties != null)
  6470. {
  6471. if (pages[i].Properties.FillColor && pages[i].Properties.FillColor != '#ffffff')
  6472. {
  6473. node.setAttribute('background', getColor(pages[i].Properties.FillColor));
  6474. }
  6475. if (pages[i].Properties.InfiniteCanvas)
  6476. {
  6477. node.setAttribute('page', 0);
  6478. }
  6479. else if (pages[i].Properties.Size != null)
  6480. {
  6481. node.setAttribute('page', 1);
  6482. node.setAttribute('pageWidth', pages[i].Properties.Size.w * scale);
  6483. node.setAttribute('pageHeight', pages[i].Properties.Size.h * scale);
  6484. }
  6485. if (pages[i].Properties.GridSpacing != null)
  6486. {
  6487. node.setAttribute('grid', 1);
  6488. node.setAttribute('gridSize', pages[i].Properties.GridSpacing * scale);
  6489. }
  6490. }
  6491. if (LucidImporter.hasMath)
  6492. {
  6493. node.setAttribute('math', 1);
  6494. }
  6495. graph.getModel().clear();
  6496. xml.push('>' + Graph.compress(mxUtils.getXml(node)) + '</diagram>');
  6497. }
  6498. xml.push('</mxfile>');
  6499. LucidImporter.imgSrcRepl = null; //Reset the map so it doesn't affect next calls
  6500. return xml.join('');
  6501. };
  6502. function addRouterEdge(x, y, edge, select, graph, cells, v, cell)
  6503. {
  6504. var dummy = new mxCell('', new mxGeometry(x, y, 0, 0), 'strokeColor=none;fillColor=none;');
  6505. dummy.vertex = true;
  6506. v.insert(dummy);
  6507. cells = [dummy];
  6508. var e = edge.clone();
  6509. cell.insertEdge(e, false);
  6510. dummy.insertEdge(e, true);
  6511. cells.push(e);
  6512. select.push(graph.addCell(e, null, null, null, null));
  6513. };
  6514. function addFloatingEdge(x1, y1, x2, y2, edge, select, graph, cells, v)
  6515. {
  6516. var dummy1 = new mxCell('', new mxGeometry(x1, y1, 0, 0), 'strokeColor=none;fillColor=none;');
  6517. dummy1.vertex = true;
  6518. v.insert(dummy1);
  6519. cells = [dummy1];
  6520. var dummy2 = new mxCell('', new mxGeometry(x2, y2, 0, 0), 'strokeColor=none;fillColor=none;');
  6521. dummy2.vertex = true;
  6522. v.insert(dummy2);
  6523. cells = [dummy2];
  6524. var e = edge.clone();
  6525. dummy1.insertEdge(e, true);
  6526. dummy2.insertEdge(e, false);
  6527. cells.push(e);
  6528. select.push(graph.addCell(e, null, null, null, null));
  6529. };
  6530. function addGCP2ServiceCard(icon, w, h, v, p, a)
  6531. {
  6532. v.style = 'rounded=1;absoluteArcSize=1;fillColor=#ffffff;arcSize=2;strokeColor=#dddddd;';
  6533. v.style += addAllStyles(v.style, p, a, v);
  6534. var label = convertText(p);
  6535. v.vertex = true;
  6536. var icon1 = new mxCell(label, new mxGeometry(0, 0.5, 24, 24),
  6537. '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;');
  6538. icon1.style += addAllStyles(icon1.style, p, a, icon1, isLastLblHTML);
  6539. icon1.geometry.relative = true;
  6540. icon1.geometry.offset = new mxPoint(5, -12);
  6541. icon1.vertex = true;
  6542. v.insert(icon1);
  6543. };
  6544. function addGCP2UserDeviceCard(icon, scaleX, scaleY, w, h, v, p, a)
  6545. {
  6546. if (icon != 'transparent')
  6547. {
  6548. var s = mxConstants.STYLE_SHAPE + '=mxgraph.gcp2.';
  6549. }
  6550. else
  6551. {
  6552. var s = mxConstants.STYLE_SHAPE + '=';
  6553. }
  6554. v.style = 'rounded=1;absoluteArcSize=1;arcSize=2;verticalAlign=bottom;fillColor=#ffffff;strokeColor=#dddddd;whiteSpace=wrap;';
  6555. v.style += addAllStyles(v.style, p, a, v);
  6556. v.value = convertText(p);
  6557. v.vertex = true;
  6558. var icon1 = new mxCell(null, new mxGeometry(0.5, 0, w * 0.7 * scaleX, w * 0.7 * scaleY),
  6559. s + icon + ';part=1;dashed=0;connectable=0;html=1;strokeColor=none;shadow=0;');
  6560. icon1.geometry.relative = true;
  6561. icon1.geometry.offset = new mxPoint(- scaleX * w * 0.35, 10 + (1 - scaleY) * w * 0.35);
  6562. icon1.vertex = true;
  6563. icon1.style += addAllStyles(icon1.style, p, a, icon1, isLastLblHTML);
  6564. v.insert(icon1);
  6565. };
  6566. function addGCP2ExpandedProductCard(icon, scaleX, scaleY, w, h, v, p, a)
  6567. {
  6568. if (icon != 'transparent')
  6569. {
  6570. var s = mxConstants.STYLE_SHAPE + '=mxgraph.gcp.';
  6571. }
  6572. else
  6573. {
  6574. var s = mxConstants.STYLE_SHAPE + '=';
  6575. }
  6576. v.style = 'rounded=1;absoluteArcSize=1;arcSize=2;verticalAlign=bottom;fillColor=#ffffff;strokeColor=#dddddd;whiteSpace=wrap;';
  6577. v.style += addAllStyles(v.style, p, a, v);
  6578. v.value = convertText(p);
  6579. v.vertex = true;
  6580. var icon1 = new mxCell(null, new mxGeometry(0.5, 0, w * 0.7 * scaleX, w * 0.7 * scaleY),
  6581. s + icon + ';part=1;dashed=0;connectable=0;html=1;strokeColor=none;shadow=0;');
  6582. icon1.geometry.relative = true;
  6583. icon1.geometry.offset = new mxPoint(- scaleX * w * 0.35, 10 + (1 - scaleY) * w * 0.35);
  6584. icon1.vertex = true;
  6585. icon1.style += addAllStyles(icon1.style, p, a, icon1, isLastLblHTML);
  6586. v.insert(icon1);
  6587. };
  6588. function hasStyle(style, key)
  6589. {
  6590. if (style != null && key != null)
  6591. {
  6592. if (key == mxConstants.STYLE_ALIGN + 'Global')
  6593. {
  6594. key = mxConstants.STYLE_ALIGN;
  6595. }
  6596. if (style.includes(';' + key + '='))
  6597. {
  6598. return true;
  6599. }
  6600. if (style.substring(0,key.length + 1) == (key + '='))
  6601. {
  6602. return true;
  6603. }
  6604. }
  6605. return false;
  6606. }
  6607. function getDarkerClr(clr, perc)
  6608. {
  6609. function modComp(comp)
  6610. {
  6611. var v = Math.round(parseInt('0x' + comp) * perc).toString(16);
  6612. return v.length == 1? '0' + v : v;
  6613. }
  6614. return '#' + modComp(clr.substr(1, 2)) +
  6615. modComp(clr.substr(3, 2)) +
  6616. modComp(clr.substr(5, 2));
  6617. };
  6618. //composite shapes
  6619. function addCompositeShape(obj, select, graph)
  6620. {
  6621. var a = getAction(obj);
  6622. var p = a.Properties;
  6623. var b = p.BoundingBox;
  6624. var w = Math.round(b.w * scale);
  6625. var h = Math.round(b.h * scale);
  6626. var x = Math.round(b.x * scale + dx);
  6627. var y = Math.round(b.y * scale + dy);
  6628. if (obj.Class != null &&
  6629. (obj.Class === "GCPInputDatabase" ||
  6630. obj.Class === "GCPInputRecord" ||
  6631. obj.Class === "GCPInputPayment" ||
  6632. obj.Class === "GCPInputGateway" ||
  6633. obj.Class === "GCPInputLocalCompute" ||
  6634. obj.Class === "GCPInputBeacon" ||
  6635. obj.Class === "GCPInputStorage" ||
  6636. obj.Class === "GCPInputList" ||
  6637. obj.Class === "GCPInputStream" ||
  6638. obj.Class === "GCPInputMobileDevices" ||
  6639. obj.Class === "GCPInputCircuitBoard" ||
  6640. obj.Class === "GCPInputLive" ||
  6641. obj.Class === "GCPInputUsers" ||
  6642. obj.Class === "GCPInputLaptop" ||
  6643. obj.Class === "GCPInputApplication" ||
  6644. obj.Class === "GCPInputLightbulb" ||
  6645. obj.Class === "GCPInputGame" ||
  6646. obj.Class === "GCPInputDesktop" ||
  6647. obj.Class === "GCPInputDesktopAndMobile" ||
  6648. obj.Class === "GCPInputWebcam" ||
  6649. obj.Class === "GCPInputSpeaker" ||
  6650. obj.Class === "GCPInputRetail" ||
  6651. obj.Class === "GCPInputReport" ||
  6652. obj.Class === "GCPInputPhone" ||
  6653. obj.Class === "GCPInputBlank"))
  6654. {
  6655. h = h + 20;
  6656. }
  6657. v = new mxCell('', new mxGeometry(x, y, w, h), vertexStyle);
  6658. v.vertex = true;
  6659. //Store z-order to use it in groups
  6660. v.zOrder = p.ZOrder;
  6661. var cls = (obj.Class != null) ? obj.Class : (a != null) ? a.Class : null;
  6662. //composite shapes
  6663. switch (cls)
  6664. {
  6665. case 'BraceNoteBlock' :
  6666. case 'UI2BraceNoteBlock' :
  6667. var isRightBrace = false;
  6668. if (p.BraceDirection != null)
  6669. {
  6670. if (p.BraceDirection == 'Right')
  6671. {
  6672. isRightBrace = true;
  6673. }
  6674. }
  6675. var brace = null;
  6676. var label = null;
  6677. var lbl = convertText(p);
  6678. //TODO Handle rotation of label correctly in all cases
  6679. var lblSize = p.Rotation? mxUtils.getSizeForString(lbl.replace(/\n/g, '<br>'), null, null, Math.abs(w - h * 0.125)) : {width: 0, height: 0};
  6680. if (isRightBrace)
  6681. {
  6682. brace = new mxCell('', new mxGeometry(w - h * 0.125, 0, h * 0.125, h), 'shape=curlyBracket;rounded=1;');
  6683. label = new mxCell('', new mxGeometry(lblSize.height, -2 * lblSize.width, w - h * 0.125, h), 'strokeColor=none;fillColor=none;');
  6684. }
  6685. else
  6686. {
  6687. brace = new mxCell('', new mxGeometry(0, 0, h * 0.125, h), 'shape=curlyBracket;rounded=1;flipH=1;');
  6688. label = new mxCell('', new mxGeometry(h * 0.125 - lblSize.height, lblSize.width, w - h * 0.125, h), 'strokeColor=none;fillColor=none;');
  6689. }
  6690. v.style = "strokeColor=none;fillColor=none;"
  6691. v.style += addAllStyles(v.style, p, a, v);
  6692. brace.vertex = true;
  6693. v.insert(brace);
  6694. brace.style +=
  6695. addAllStyles(brace.style, p, a, brace);
  6696. label.vertex = true;
  6697. label.value = lbl;
  6698. v.insert(label);
  6699. label.style +=
  6700. addAllStyles(label.style, p, a, label, isLastLblHTML);
  6701. break;
  6702. case 'BPMNAdvancedPoolBlockRotated' :
  6703. case 'UMLMultiLanePoolRotatedBlock' :
  6704. case 'UMLMultiLanePoolBlock' :
  6705. case 'BPMNAdvancedPoolBlock' :
  6706. case 'AdvancedSwimLaneBlockRotated' :
  6707. case 'AdvancedSwimLaneBlock' :
  6708. case 'UMLSwimLaneBlockV2':
  6709. //Lucid changed swimlanes format
  6710. var mainTxtFld = 'MainText', laneFld = null, headerFillFld = 'HeaderFill_', bodyFillFld = 'BodyFill_';
  6711. var mainTxtHeight = 25, laneTxtHeight = 25;
  6712. var lanesNum = 0;
  6713. if (p.Lanes != null)
  6714. {
  6715. lanesNum = p.Lanes.length;
  6716. }
  6717. else if (p.PrimaryLane != null)
  6718. {
  6719. lanesNum = p.PrimaryLane.length;
  6720. //In this format, boundingBox is not accurate!
  6721. w = 0, h = 0;
  6722. for (var i = 0; i < lanesNum; i++)
  6723. {
  6724. w += p.PrimaryLane[i];
  6725. }
  6726. for (var i = 0; i < p.SecondaryLane.length; i++)
  6727. {
  6728. h += p.SecondaryLane[i];
  6729. }
  6730. function fixTitleHeight(val)
  6731. {
  6732. if (!val)
  6733. {
  6734. return 0;
  6735. }
  6736. else if (val < 32)
  6737. {
  6738. val = 32;
  6739. }
  6740. else if (val > 208)
  6741. {
  6742. val = 208;
  6743. }
  6744. return val * scale;
  6745. };
  6746. mainTxtHeight = fixTitleHeight(p.PrimaryPoolTitleHeight);
  6747. laneTxtHeight = fixTitleHeight(p.PrimaryLaneTitleHeight);
  6748. w = w * scale;
  6749. h = h * scale + mainTxtHeight + laneTxtHeight;
  6750. v.geometry.width = w;
  6751. v.geometry.height = h;
  6752. mainTxtFld = 'poolPrimaryTitleKey';
  6753. headerFillFld = 'PrimaryLaneHeaderFill_';
  6754. bodyFillFld = 'CellFill_0,';
  6755. laneFld = p.PrimaryLaneTextAreaIds;
  6756. if (laneFld == null)
  6757. {
  6758. laneFld = [];
  6759. for (var i = 0; i < lanesNum; i++)
  6760. {
  6761. laneFld.push('Primary_' + i);
  6762. }
  6763. }
  6764. }
  6765. if (p.IsPrimaryLaneVertical == false)
  6766. {
  6767. p['Rotation'] = -1.5707963267948966; //-90
  6768. var origX = v.geometry.x;
  6769. var origY = v.geometry.y;
  6770. }
  6771. var rotatedSL = p['Rotation'] != 0;
  6772. var isPool = cls.indexOf('Pool') > 0;
  6773. var isBPMN = cls.indexOf('BPMN') == 0;
  6774. var hasTxt = p[mainTxtFld] != null;
  6775. v.style = (isPool? 'swimlane;startSize=' + mainTxtHeight + ';' : 'fillColor=none;strokeColor=none;pointerEvents=0;fontStyle=0;') +
  6776. 'html=1;whiteSpace=wrap;container=1;collapsible=0;childLayout=stackLayout;' +
  6777. 'resizeParent=1;dropTarget=0;' + (rotatedSL? 'horizontalStack=0;' : '');
  6778. v.style += addAllStyles(v.style, p, a, v);
  6779. if (hasTxt)
  6780. {
  6781. v.value = convertText(p[mainTxtFld]);
  6782. v.style += (isLastLblHTML? 'overflow=block;blockSpacing=1;fontSize=' + defaultFontSize + ';' +
  6783. gFontFamilyStyle
  6784. :
  6785. getFontSize(p[mainTxtFld]) +
  6786. getFontColor(p[mainTxtFld]) +
  6787. getFontFamily(p[mainTxtFld]) +
  6788. getFontStyle(p[mainTxtFld]) +
  6789. getTextAlignment(p[mainTxtFld], v) +
  6790. getTextLeftSpacing(p[mainTxtFld]) +
  6791. getTextRightSpacing(p[mainTxtFld]) +
  6792. getTextTopSpacing(p[mainTxtFld]) +
  6793. getTextBottomSpacing(p[mainTxtFld])
  6794. ) +
  6795. getTextGlobalSpacing(p[mainTxtFld]) +
  6796. getTextVerticalAlignment(p[mainTxtFld]);
  6797. }
  6798. var totalOffset = 0; //relative
  6799. var lane = new Array();
  6800. var laneStyle = 'swimlane;html=1;whiteSpace=wrap;container=1;connectable=0;collapsible=0;fontStyle=0;startSize=' + laneTxtHeight + ';dropTarget=0;rounded=0;' +
  6801. (rotatedSL? 'horizontal=0;': '') +
  6802. (isBPMN? 'swimlaneLine=0;fillColor=none;' : '');
  6803. p['Rotation'] = 0; //Override rotation such that it doesn't mess with our coordinates
  6804. for (var j = 0; j < lanesNum; j++)
  6805. {
  6806. if (laneFld == null)
  6807. {
  6808. var currOffset = parseFloat(p.Lanes[j].p);
  6809. var i = parseInt(p.Lanes[j].tid) || j;
  6810. var curLane = 'Lane_' + i;
  6811. }
  6812. else
  6813. {
  6814. var currOffset = (p.PrimaryLane[j] * scale)/ w;
  6815. var i = j;
  6816. var curLane = laneFld[j];
  6817. }
  6818. var childX = w * totalOffset;
  6819. var childY = isPool? mainTxtHeight : 0;
  6820. lane.push(new mxCell('', rotatedSL? new mxGeometry(childY, childX, h - childY, w * currOffset) :
  6821. new mxGeometry(childX, childY, w * currOffset, h - childY), laneStyle));
  6822. lane[j].vertex = true;
  6823. v.insert(lane[j]);
  6824. lane[j].value = convertText(p[curLane]);
  6825. lane[j].style +=
  6826. addAllStyles(lane[j].style, p, a, lane[j], isLastLblHTML) +
  6827. (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  6828. getFontSize(p[curLane]) +
  6829. getFontColor(p[curLane]) +
  6830. getFontStyle(p[curLane]) +
  6831. getTextAlignment(p[curLane], lane[j]) +
  6832. getTextLeftSpacing(p[curLane]) +
  6833. getTextRightSpacing(p[curLane]) +
  6834. getTextTopSpacing(p[curLane]) +
  6835. getTextBottomSpacing(p[curLane])
  6836. ) +
  6837. getTextGlobalSpacing(p[curLane]) +
  6838. getTextVerticalAlignment(p[curLane]) +
  6839. getHeaderColor(p[headerFillFld + i]) +
  6840. getLaneColor(p[bodyFillFld + i]);
  6841. totalOffset += currOffset;
  6842. }
  6843. if (origX != null)
  6844. {
  6845. v.geometry.x = origX;
  6846. v.geometry.y = origY;
  6847. }
  6848. break;
  6849. case 'UMLMultidimensionalSwimlane' :
  6850. var rowsNum = 0;
  6851. var colsNum = 0;
  6852. var rowFld = null, colFld = null;
  6853. if (p.Rows != null && p.Columns != null)
  6854. {
  6855. rowsNum = p.Rows.length;
  6856. colsNum = p.Columns.length;
  6857. var colStartSize = p.TitleHeight * scale || 25;
  6858. var rowStartSize = p.TitleWidth * scale || 25;
  6859. }
  6860. else if (p.PrimaryLane != null && p.SecondaryLane != null)
  6861. {
  6862. rowsNum = p.SecondaryLane.length;
  6863. colsNum = p.PrimaryLane.length;
  6864. var rowStartSize = p.SecondaryLaneTitleHeight * scale || 25;
  6865. var colStartSize = p.PrimaryLaneTitleHeight * scale || 25;
  6866. //In this format, boundingBox is not accurate!
  6867. w = 0, h = 0;
  6868. for (var i = 0; i < rowsNum; i++)
  6869. {
  6870. h += p.SecondaryLane[i];
  6871. }
  6872. for (var i = 0; i < colsNum; i++)
  6873. {
  6874. w += p.PrimaryLane[i];
  6875. }
  6876. w = w * scale + rowStartSize;
  6877. h = h * scale + colStartSize;
  6878. v.geometry.width = w;
  6879. v.geometry.height = h;
  6880. rowFld = p.SecondaryLaneTextAreaIds;
  6881. colFld = p.PrimaryLaneTextAreaIds;
  6882. }
  6883. v.style = 'group;';
  6884. var contStyle = 'fillColor=none;strokeColor=none;html=1;whiteSpace=wrap;container=1;collapsible=0;childLayout=stackLayout;' +
  6885. 'resizeParent=1;dropTarget=0;';
  6886. var rows = new mxCell('', new mxGeometry(0, colStartSize, w, h - colStartSize), contStyle + 'horizontalStack=0;');
  6887. rows.vertex = true;
  6888. var cols = new mxCell('', new mxGeometry(rowStartSize, 0, w - rowStartSize, h), contStyle);
  6889. cols.vertex = true;
  6890. v.insert(rows);
  6891. v.insert(cols);
  6892. var y = 0;
  6893. var rowStyle = 'swimlane;html=1;whiteSpace=wrap;container=1;connectable=0;collapsible=0;dropTarget=0;horizontal=0;fontStyle=0;startSize=' + rowStartSize + ';';
  6894. for (var j = 0; j < rowsNum; j++)
  6895. {
  6896. if (rowFld == null)
  6897. {
  6898. var rh = parseInt(p.Rows[j].height) * scale;
  6899. var i = parseInt(p.Rows[j].id) || j;
  6900. var curRow = 'Row_' + i;
  6901. }
  6902. else
  6903. {
  6904. var rh = p.SecondaryLane[j] * scale;
  6905. var curRow = rowFld[j];
  6906. }
  6907. var r = new mxCell('', new mxGeometry(0, y, w, rh), rowStyle);
  6908. y += rh;
  6909. r.vertex = true;
  6910. rows.insert(r);
  6911. r.value = convertText(p[curRow]);
  6912. r.style +=
  6913. addAllStyles(r.style, p, a, r, isLastLblHTML) +
  6914. (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  6915. getFontSize(p[curRow]) +
  6916. getFontColor(p[curRow]) +
  6917. getFontStyle(p[curRow]) +
  6918. getTextAlignment(p[curRow], r) +
  6919. getTextLeftSpacing(p[curRow]) +
  6920. getTextRightSpacing(p[curRow]) +
  6921. getTextTopSpacing(p[curRow]) +
  6922. getTextBottomSpacing(p[curRow])
  6923. ) +
  6924. getTextGlobalSpacing(p[curRow]) +
  6925. getTextVerticalAlignment(p[curRow]);
  6926. }
  6927. var colStyle = 'swimlane;html=1;whiteSpace=wrap;container=1;connectable=0;collapsible=0;dropTarget=0;fontStyle=0;startSize=' + colStartSize + ';';
  6928. var x = 0;
  6929. for (var j = 0; j < colsNum; j++)
  6930. {
  6931. if (colFld == null)
  6932. {
  6933. var cw = parseInt(p.Columns[j].width) * scale;
  6934. var i = parseInt(p.Columns[j].id) || j;
  6935. var curCol = 'Column_' + i;
  6936. }
  6937. else
  6938. {
  6939. var cw = p.PrimaryLane[j] * scale;
  6940. var curCol = colFld[j];
  6941. }
  6942. var c = new mxCell('', new mxGeometry(x, 0, cw, h), colStyle);
  6943. x += cw;
  6944. c.vertex = true;
  6945. cols.insert(c);
  6946. c.value = convertText(p[curCol]);
  6947. c.style +=
  6948. addAllStyles(c.style, p, a, c, isLastLblHTML) +
  6949. (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  6950. getFontSize(p[curCol]) +
  6951. getFontColor(p[curCol]) +
  6952. getFontStyle(p[curCol]) +
  6953. getTextAlignment(p[curCol], c) +
  6954. getTextLeftSpacing(p[curCol]) +
  6955. getTextRightSpacing(p[curCol]) +
  6956. getTextTopSpacing(p[curCol]) +
  6957. getTextBottomSpacing(p[curCol])
  6958. ) +
  6959. getTextGlobalSpacing(p[curCol]) +
  6960. getTextVerticalAlignment(p[curCol]);
  6961. }
  6962. break;
  6963. case 'UMLStateBlock' :
  6964. if (p.Composite == 0)
  6965. {
  6966. v.style = 'rounded=1;arcSize=20';
  6967. v.value = convertText(p.State, true);
  6968. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  6969. }
  6970. else
  6971. {
  6972. v.style = 'swimlane;startSize=25;html=1;whiteSpace=wrap;container=1;collapsible=0;childLayout=stackLayout;' +
  6973. 'resizeParent=1;dropTarget=0;rounded=1;arcSize=20;fontStyle=0;';
  6974. v.value = convertText(p.State, true);
  6975. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  6976. v.style += getFillColor(p, a).replace('fillColor', 'swimlaneFillColor');
  6977. var content = new mxCell('', new mxGeometry(0, 25, w, h - 25), 'rounded=1;arcSize=20;strokeColor=none;fillColor=none');
  6978. content.value = convertText(p.Action, true);
  6979. content.style += addAllStyles(content.style, p, a, content, isLastLblHTML);
  6980. content.vertex = true;
  6981. v.insert(content);
  6982. }
  6983. break;
  6984. case 'GSDFDProcessBlock' :
  6985. var startSize = Math.round(p.nameHeight * scale);
  6986. v.style = 'shape=swimlane;html=1;rounded=1;arcSize=10;collapsible=0;fontStyle=0;startSize=' + startSize;
  6987. v.value = convertText(p.Number, true);
  6988. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  6989. v.style += getFillColor(p, a).replace('fillColor', 'swimlaneFillColor');
  6990. var content = new mxCell('', new mxGeometry(0, startSize, w, h - startSize), 'rounded=1;arcSize=10;strokeColor=none;fillColor=none');
  6991. content.value = convertText(p.Text, true);
  6992. content.style += addAllStyles(content.style, p, a, content, isLastLblHTML);
  6993. content.vertex = true;
  6994. v.insert(content);
  6995. break;
  6996. case 'AndroidDevice' :
  6997. if (p.AndroidDeviceName != null)
  6998. {
  6999. var rotation = getRotation(p, a, v);
  7000. v.style = "fillColor=#000000;strokeColor=#000000;";
  7001. var background = null;
  7002. var keyboard = null;
  7003. var statusBar = null;
  7004. if (p.AndroidDeviceName == 'Tablet' || p.AndroidDeviceName == 'Mini Tablet' || (p.AndroidDeviceName == 'custom' && p.CustomDeviceType == 'Tablet'))
  7005. {
  7006. v.style += "shape=mxgraph.android.tab2;"
  7007. background = new mxCell('', new mxGeometry(0.112, 0.077, w * 0.77, h * 0.85), rotation);
  7008. if (p.KeyboardShown)
  7009. {
  7010. keyboard = new mxCell('', new mxGeometry(0.112, 0.727, w * 0.77, h * 0.2), 'shape=mxgraph.android.keyboard;' + rotation);
  7011. }
  7012. if (!p.FullScreen)
  7013. {
  7014. 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);
  7015. }
  7016. }
  7017. else if (p.AndroidDeviceName == 'Large Phone' || p.AndroidDeviceName == 'Phone' || (p.AndroidDeviceName == 'custom' && p.CustomDeviceType == 'Phone'))
  7018. {
  7019. v.style += "shape=mxgraph.android.phone2;"
  7020. background = new mxCell('', new mxGeometry(0.04, 0.092, w * 0.92, h * 0.816), rotation);
  7021. if (p.KeyboardShown)
  7022. {
  7023. keyboard = new mxCell('', new mxGeometry(0.04, 0.708, w * 0.92, h * 0.2), 'shape=mxgraph.android.keyboard;' + rotation);
  7024. }
  7025. if (!p.FullScreen)
  7026. {
  7027. 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);
  7028. }
  7029. }
  7030. background.vertex = true;
  7031. background.geometry.relative = true;
  7032. v.insert(background);
  7033. if (p.Scheme == "Dark")
  7034. {
  7035. background.style += "fillColor=#111111;"
  7036. }
  7037. else if (p.Scheme == "Light")
  7038. {
  7039. background.style += "fillColor=#ffffff;"
  7040. }
  7041. if (keyboard != null)
  7042. {
  7043. keyboard.vertex = true;
  7044. keyboard.geometry.relative = true;
  7045. v.insert(keyboard);
  7046. }
  7047. if (statusBar != null)
  7048. {
  7049. statusBar.vertex = true;
  7050. statusBar.geometry.relative = true;
  7051. v.insert(statusBar);
  7052. }
  7053. }
  7054. v.style += addAllStyles(v.style, p, a, v);
  7055. break;
  7056. case 'AndroidAlertDialog' :
  7057. var dialog = new mxCell('', new mxGeometry(0, 0, w, 30), 'strokeColor=none;fillColor=none;spacingLeft=9;');
  7058. dialog.vertex = true;
  7059. v.insert(dialog);
  7060. var line = new mxCell('', new mxGeometry(0, 25, w, 10), 'shape=line;strokeColor=#33B5E5;');
  7061. line.vertex = true;
  7062. v.insert(line);
  7063. var dialogText = new mxCell('', new mxGeometry(0, 30, w, h - 30), 'strokeColor=none;fillColor=none;verticalAlign=top;');
  7064. dialogText.vertex = true;
  7065. v.insert(dialogText);
  7066. var cancelButton = new mxCell('', new mxGeometry(0, h - 25, w * 0.5, 25), 'fillColor=none;');
  7067. cancelButton.vertex = true;
  7068. v.insert(cancelButton);
  7069. var okButton = new mxCell('', new mxGeometry(w * 0.5, h - 25, w * 0.5, 25), 'fillColor=none;');
  7070. okButton.vertex = true;
  7071. v.insert(okButton);
  7072. dialog.value = convertText(p.DialogTitle);
  7073. dialog.style += getLabelStyle(p.DialogTitle, isLastLblHTML);
  7074. dialogText.value = convertText(p.DialogText);
  7075. dialogText.style += getLabelStyle(p.DialogText, isLastLblHTML);
  7076. cancelButton.value = convertText(p.Button_0);
  7077. cancelButton.style += getLabelStyle(p.Button_0, isLastLblHTML);
  7078. okButton.value = convertText(p.Button_1);
  7079. okButton.style += getLabelStyle(p.Button_1, isLastLblHTML);
  7080. if (p.Scheme == 'Dark')
  7081. {
  7082. v.style += 'strokeColor=#353535;fillColor=#282828;shadow=1;';
  7083. cancelButton.style += 'strokeColor=#353535;';
  7084. okButton.style += 'strokeColor=#353535;';
  7085. }
  7086. else
  7087. {
  7088. v.style += 'strokeColor=none;fillColor=#ffffff;shadow=1;';
  7089. cancelButton.style += 'strokeColor=#E2E2E2;';
  7090. okButton.style += 'strokeColor=#E2E2E2;';
  7091. }
  7092. v.style += addAllStyles(v.style, p, a, v);
  7093. break;
  7094. case 'AndroidDateDialog' :
  7095. case 'AndroidTimeDialog' :
  7096. var dialog = new mxCell('', new mxGeometry(0, 0, w, 30), 'strokeColor=none;fillColor=none;spacingLeft=9;');
  7097. dialog.vertex = true;
  7098. v.insert(dialog);
  7099. dialog.value = convertText(p.DialogTitle);
  7100. dialog.style += getLabelStyle(p.DialogTitle, isLastLblHTML);
  7101. var line = new mxCell('', new mxGeometry(0, 25, w, 10), 'shape=line;strokeColor=#33B5E5;');
  7102. line.vertex = true;
  7103. v.insert(line);
  7104. var cancelButton = new mxCell('', new mxGeometry(0, h - 25, w * 0.5, 25), 'fillColor=none;');
  7105. cancelButton.vertex = true;
  7106. v.insert(cancelButton);
  7107. cancelButton.value = convertText(p.Button_0);
  7108. cancelButton.style += getLabelStyle(p.Button_0, isLastLblHTML);
  7109. var okButton = new mxCell('', new mxGeometry(w * 0.5, h - 25, w * 0.5, 25), 'fillColor=none;');
  7110. okButton.vertex = true;
  7111. v.insert(okButton);
  7112. okButton.value = convertText(p.Button_1);
  7113. okButton.style += getLabelStyle(p.Button_1, isLastLblHTML);
  7114. var triangle1 = new mxCell('', new mxGeometry(w * 0.5 - 4, 41, 8, 4), 'shape=triangle;direction=north;');
  7115. triangle1.vertex = true;
  7116. v.insert(triangle1);
  7117. var triangle2 = new mxCell('', new mxGeometry(w * 0.25 - 4, 41, 8, 4), 'shape=triangle;direction=north;');
  7118. triangle2.vertex = true;
  7119. v.insert(triangle2);
  7120. var triangle3 = new mxCell('', new mxGeometry(w * 0.75 - 4, 41, 8, 4), 'shape=triangle;direction=north;');
  7121. triangle3.vertex = true;
  7122. v.insert(triangle3);
  7123. var prevDate1 = new mxCell('', new mxGeometry(w * 0.375, 50, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7124. prevDate1.vertex = true;
  7125. v.insert(prevDate1);
  7126. prevDate1.value = convertText(p.Label_1);
  7127. prevDate1.style += getLabelStyle(p.Label_1, isLastLblHTML);
  7128. var prevDate2 = new mxCell('', new mxGeometry(w * 0.125, 50, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7129. prevDate2.vertex = true;
  7130. v.insert(prevDate2);
  7131. prevDate2.value = convertText(p.Label_0);
  7132. prevDate2.style += getLabelStyle(p.Label_0, isLastLblHTML);
  7133. var prevDate3 = null;
  7134. if (obj.Class == 'AndroidDateDialog')
  7135. {
  7136. prevDate3 = new mxCell('', new mxGeometry(w * 0.625, 50, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7137. prevDate3.vertex = true;
  7138. v.insert(prevDate3);
  7139. prevDate3.value = convertText(p.Label_2);
  7140. prevDate3.style += getLabelStyle(p.Label_2, isLastLblHTML);
  7141. }
  7142. var line1 = new mxCell('', new mxGeometry(w * 0.43, 60, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;');
  7143. line1.vertex = true;
  7144. v.insert(line1);
  7145. var line2 = new mxCell('', new mxGeometry(w * 0.18, 60, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;');
  7146. line2.vertex = true;
  7147. v.insert(line2);
  7148. var line3 = new mxCell('', new mxGeometry(w * 0.68, 60, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;');
  7149. line3.vertex = true;
  7150. v.insert(line3);
  7151. var date1 = new mxCell('', new mxGeometry(w * 0.375, 65, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7152. date1.vertex = true;
  7153. v.insert(date1);
  7154. date1.value = convertText(p.Label_4);
  7155. date1.style += getLabelStyle(p.Label_4, isLastLblHTML);
  7156. var sep = null;
  7157. if (obj.Class == 'AndroidTimeDialog')
  7158. {
  7159. sep = new mxCell('', new mxGeometry(w * 0.3, 65, w * 0.1, 15), 'strokeColor=none;fillColor=none;');
  7160. sep.vertex = true;
  7161. v.insert(sep);
  7162. sep.value = convertText(p.Label_Colon);
  7163. sep.style += getLabelStyle(p.Label_Colon, isLastLblHTML);
  7164. }
  7165. var date2 = new mxCell('', new mxGeometry(w * 0.125, 65, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7166. date2.vertex = true;
  7167. v.insert(date2);
  7168. date2.value = convertText(p.Label_3);
  7169. date2.style += getLabelStyle(p.Label_3, isLastLblHTML);
  7170. var date3 = new mxCell('', new mxGeometry(w * 0.625, 65, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7171. date3.vertex = true;
  7172. v.insert(date3);
  7173. date3.value = convertText(p.Label_5);
  7174. date3.style += getLabelStyle(p.Label_5, isLastLblHTML);
  7175. var line4 = new mxCell('', new mxGeometry(w * 0.43, 75, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;');
  7176. line4.vertex = true;
  7177. v.insert(line4);
  7178. var line5 = new mxCell('', new mxGeometry(w * 0.18, 75, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;');
  7179. line5.vertex = true;
  7180. v.insert(line5);
  7181. var line6 = new mxCell('', new mxGeometry(w * 0.68, 75, w * 0.14, 10), 'shape=line;strokeColor=#33B5E5;');
  7182. line6.vertex = true;
  7183. v.insert(line6);
  7184. var nextDate1 = new mxCell('', new mxGeometry(w * 0.375, 80, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7185. nextDate1.vertex = true;
  7186. v.insert(nextDate1);
  7187. nextDate1.value = convertText(p.Label_7);
  7188. nextDate1.style += getLabelStyle(p.Label_7, isLastLblHTML);
  7189. var nextDate2 = new mxCell('', new mxGeometry(w * 0.125, 80, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7190. nextDate2.vertex = true;
  7191. v.insert(nextDate2);
  7192. nextDate2.value = convertText(p.Label_6);
  7193. nextDate2.style += getLabelStyle(p.Label_6, isLastLblHTML);
  7194. var nextDate3 = new mxCell('', new mxGeometry(w * 0.625, 80, w * 0.2, 15), 'strokeColor=none;fillColor=none;');
  7195. nextDate3.vertex = true;
  7196. v.insert(nextDate3);
  7197. nextDate3.value = convertText(p.Label_8);
  7198. nextDate3.style += getLabelStyle(p.Label_8, isLastLblHTML);
  7199. var triangle4 = new mxCell('', new mxGeometry(w * 0.5 - 4, 99, 8, 4), 'shape=triangle;direction=south;');
  7200. triangle4.vertex = true;
  7201. v.insert(triangle4);
  7202. var triangle5 = new mxCell('', new mxGeometry(w * 0.25 - 4, 99, 8, 4), 'shape=triangle;direction=south;');
  7203. triangle5.vertex = true;
  7204. v.insert(triangle5);
  7205. var triangle6 = new mxCell('', new mxGeometry(w * 0.75 - 4, 99, 8, 4), 'shape=triangle;direction=south;');
  7206. triangle6.vertex = true;
  7207. v.insert(triangle6);
  7208. if (p.Scheme == 'Dark')
  7209. {
  7210. v.style += 'strokeColor=#353535;fillColor=#282828;shadow=1;';
  7211. cancelButton.style += 'strokeColor=#353535;';
  7212. okButton.style += 'strokeColor=#353535;';
  7213. triangle1.style += 'strokeColor=none;fillColor=#7E7E7E;';
  7214. triangle2.style += 'strokeColor=none;fillColor=#7E7E7E;';
  7215. triangle3.style += 'strokeColor=none;fillColor=#7E7E7E;';
  7216. triangle4.style += 'strokeColor=none;fillColor=#7E7E7E;';
  7217. triangle5.style += 'strokeColor=none;fillColor=#7E7E7E;';
  7218. triangle6.style += 'strokeColor=none;fillColor=#7E7E7E;';
  7219. }
  7220. else
  7221. {
  7222. v.style += 'strokeColor=none;fillColor=#ffffff;shadow=1;';
  7223. cancelButton.style += 'strokeColor=#E2E2E2;';
  7224. okButton.style += 'strokeColor=#E2E2E2;';
  7225. triangle1.style += 'strokeColor=none;fillColor=#939393;';
  7226. triangle2.style += 'strokeColor=none;fillColor=#939393;';
  7227. triangle3.style += 'strokeColor=none;fillColor=#939393;';
  7228. triangle4.style += 'strokeColor=none;fillColor=#939393;';
  7229. triangle5.style += 'strokeColor=none;fillColor=#939393;';
  7230. triangle6.style += 'strokeColor=none;fillColor=#939393;';
  7231. }
  7232. v.style += addAllStyles(v.style, p, a, v);
  7233. break;
  7234. case 'AndroidListItems' :
  7235. var itemFullH = h;
  7236. var startH = 0;
  7237. if (p.ShowHeader)
  7238. {
  7239. startH = 8;
  7240. var header = new mxCell('', new mxGeometry(0, 0, w, startH), 'strokeColor=none;fillColor=none;');
  7241. header.vertex = true;
  7242. v.insert(header);
  7243. header.value = convertText(p.Header);
  7244. header.style += getLabelStyle(p.Header, isLastLblHTML);
  7245. itemFullH -= startH;
  7246. var lineH = new mxCell('', new mxGeometry(0, startH - 2, w, 4), 'shape=line;strokeColor=#999999;');
  7247. lineH.vertex = true;
  7248. v.insert(lineH);
  7249. }
  7250. var numItems = parseInt(p.Items);
  7251. if (numItems > 0)
  7252. {
  7253. itemFullH = itemFullH / numItems;
  7254. }
  7255. var item = new Array();
  7256. var line = new Array();
  7257. for (var i = 0; i < numItems; i++)
  7258. {
  7259. item[i] = new mxCell('', new mxGeometry(0, startH + i * itemFullH, w, itemFullH), 'strokeColor=none;fillColor=none;');
  7260. item[i].vertex = true;
  7261. v.insert(item[i]);
  7262. item[i].value = convertText(p["Item_" + i]);
  7263. item[i].style += getLabelStyle(p["Item_" + i], isLastLblHTML);
  7264. if (i > 0)
  7265. {
  7266. line[i] = new mxCell('', new mxGeometry(0, startH + i * itemFullH - 2, w, 4), 'shape=line;');
  7267. line[i].vertex = true;
  7268. v.insert(line[i]);
  7269. if (p.Scheme == 'Dark')
  7270. {
  7271. line[i].style += 'strokeColor=#ffffff;';
  7272. }
  7273. else
  7274. {
  7275. line[i].style += 'strokeColor=#D9D9D9;';
  7276. }
  7277. }
  7278. }
  7279. if (p.Scheme == 'Dark')
  7280. {
  7281. v.style += 'strokeColor=none;fillColor=#111111;';
  7282. }
  7283. else
  7284. {
  7285. v.style += 'strokeColor=none;fillColor=#ffffff;';
  7286. }
  7287. v.style += addAllStyles(v.style, p, a, v);
  7288. break;
  7289. case 'AndroidTabs' :
  7290. var numTabs = parseInt(p.Tabs);
  7291. var tabFullW = w;
  7292. if (numTabs > 0)
  7293. {
  7294. tabFullW = tabFullW / numTabs;
  7295. }
  7296. var tab = new Array();
  7297. var line = new Array();
  7298. for (var i = 0; i < numTabs; i++)
  7299. {
  7300. tab[i] = new mxCell('', new mxGeometry(i * tabFullW, 0, tabFullW, h), 'strokeColor=none;fillColor=none;');
  7301. tab[i].vertex = true;
  7302. v.insert(tab[i]);
  7303. tab[i].value = convertText(p["Tab_" + i]);
  7304. tab[i].style += getLabelStyle(p["Tab_" + i], isLastLblHTML);
  7305. if (i > 0)
  7306. {
  7307. line[i] = new mxCell('', new mxGeometry(i * tabFullW - 2, h * 0.2, 4, h * 0.6), 'shape=line;direction=north;');
  7308. line[i].vertex = true;
  7309. v.insert(line[i]);
  7310. if (p.Scheme == 'Dark')
  7311. {
  7312. line[i].style += 'strokeColor=#484848;';
  7313. }
  7314. else
  7315. {
  7316. line[i].style += 'strokeColor=#CCCCCC;';
  7317. }
  7318. }
  7319. }
  7320. var selectedMarker = new mxCell('', new mxGeometry(p.Selected * tabFullW + 2, h - 3, tabFullW - 4, 3), 'strokeColor=none;fillColor=#33B5E5;');
  7321. selectedMarker.vertex = true;
  7322. v.insert(selectedMarker);
  7323. if (p.Scheme == 'Dark')
  7324. {
  7325. v.style += 'strokeColor=none;fillColor=#333333;';
  7326. }
  7327. else
  7328. {
  7329. v.style += 'strokeColor=none;fillColor=#DDDDDD;';
  7330. }
  7331. v.style += addAllStyles(v.style, p, a, v);
  7332. break;
  7333. case 'AndroidProgressBar' :
  7334. v = new mxCell('', new mxGeometry(Math.round(x), Math.round(y + h * 0.25), Math.round(w), Math.round(h * 0.5)), vertexStyle);
  7335. v.vertex = true;
  7336. var progressBar = new mxCell('', new mxGeometry(0, 0, w * p.BarPosition, Math.round(h * 0.5)), 'strokeColor=none;fillColor=#33B5E5;');
  7337. progressBar.vertex = true;
  7338. v.insert(progressBar);
  7339. if (p.Scheme == 'Dark')
  7340. {
  7341. v.style += 'strokeColor=none;fillColor=#474747;';
  7342. }
  7343. else
  7344. {
  7345. v.style += 'strokeColor=none;fillColor=#BBBBBB;';
  7346. }
  7347. v.style += addAllStyles(v.style, p, a, v);
  7348. break;
  7349. case 'AndroidImageBlock' :
  7350. if (p.Scheme == 'Dark')
  7351. {
  7352. v.style += 'shape=mxgraph.mockup.graphics.simpleIcon;strokeColor=#7E7E7E;fillColor=#111111;';
  7353. }
  7354. else
  7355. {
  7356. v.style += 'shape=mxgraph.mockup.graphics.simpleIcon;strokeColor=#939393;fillColor=#ffffff;';
  7357. }
  7358. v.style += addAllStyles(v.style, p, a, v);
  7359. break;
  7360. case 'AndroidTextBlock' :
  7361. if (p.Scheme == 'Dark')
  7362. {
  7363. if (p.ShowBorder)
  7364. {
  7365. v.style += 'fillColor=#111111;strokeColor=#ffffff;';
  7366. }
  7367. else
  7368. {
  7369. v.style += 'fillColor=#111111;strokeColor=none;';
  7370. }
  7371. }
  7372. else
  7373. {
  7374. if (p.ShowBorder)
  7375. {
  7376. v.style += 'fillColor=#ffffff;strokeColor=#000000;';
  7377. }
  7378. else
  7379. {
  7380. v.style += 'fillColor=#ffffff;strokeColor=none;';
  7381. }
  7382. }
  7383. v.value = convertText(p.Label);
  7384. v.style += getLabelStyle(p.Label, isLastLblHTML);
  7385. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  7386. break;
  7387. case 'AndroidActionBar' :
  7388. v.style += 'strokeColor=none;';
  7389. switch (p.BarBackground)
  7390. {
  7391. case 'Blue' :
  7392. v.style += 'fillColor=#002E3E;';
  7393. break;
  7394. case 'Gray' :
  7395. v.style += 'fillColor=#DDDDDD;';
  7396. break;
  7397. case 'Dark Gray' :
  7398. v.style += 'fillColor=#474747;';
  7399. break;
  7400. case 'White' :
  7401. v.style += 'fillColor=#ffffff;';
  7402. break;
  7403. }
  7404. if (p.HighlightShow)
  7405. {
  7406. var highlight = null;
  7407. if (p.HighlightTop)
  7408. {
  7409. highlight = new mxCell('', new mxGeometry(0, 0, w, 2), 'strokeColor=none;');
  7410. }
  7411. else
  7412. {
  7413. highlight = new mxCell('', new mxGeometry(0, h - 2, w, 2), 'strokeColor=none;');
  7414. }
  7415. highlight.vertex = true;
  7416. v.insert(highlight);
  7417. switch (p.HighlightColor)
  7418. {
  7419. case 'Blue' :
  7420. highlight.style += 'fillColor=#33B5E5;';
  7421. break;
  7422. case 'Dark Gray' :
  7423. highlight.style += 'fillColor=#B0B0B0;';
  7424. break;
  7425. case 'White' :
  7426. highlight.style += 'fillColor=#ffffff;';
  7427. break;
  7428. }
  7429. }
  7430. if (p.VlignShow)
  7431. {
  7432. var vLine = new mxCell('', new mxGeometry(20, 5, 2, h - 10), 'shape=line;direction=north;');
  7433. vLine.vertex = true;
  7434. v.insert(vLine);
  7435. switch (p.VlignColor)
  7436. {
  7437. case 'Blue' :
  7438. vLine.style += 'strokeColor=#244C5A;';
  7439. break;
  7440. case 'White' :
  7441. vLine.style += 'strokeColor=#ffffff;';
  7442. break;
  7443. }
  7444. }
  7445. v.style += addAllStyles(v.style, p, a, v);
  7446. break;
  7447. case 'AndroidButton' :
  7448. v.value = convertText(p.Label);
  7449. v.style += getLabelStyle(p.Label, isLastLblHTML) + 'shape=partialRectangle;left=0;right=0;';
  7450. if (p.Scheme == 'Dark')
  7451. {
  7452. v.style += 'fillColor=#474747;strokeColor=#C6C5C6;bottom=0;';
  7453. }
  7454. else
  7455. {
  7456. v.style += 'fillColor=#DFE0DF;strokeColor=#C6C5C6;top=0;';
  7457. }
  7458. v.style += addAllStyles(v.style, p, a, v);
  7459. break;
  7460. case 'AndroidTextBox' :
  7461. v.value = convertText(p.Label);
  7462. v.style += getLabelStyle(p.Label, isLastLblHTML);
  7463. var underline = new mxCell('', new mxGeometry(2, h - 6, w - 4, 4), 'shape=partialRectangle;top=0;fillColor=none;');
  7464. underline.vertex = true;
  7465. v.insert(underline);
  7466. if (p.Scheme == 'Dark')
  7467. {
  7468. v.style += 'fillColor=#111111;strokeColor=none;';
  7469. }
  7470. else
  7471. {
  7472. v.style += 'fillColor=#ffffff;strokeColor=none;';
  7473. }
  7474. if (p.TextFocused)
  7475. {
  7476. underline.style += 'strokeColor=#33B5E5;';
  7477. }
  7478. else
  7479. {
  7480. underline.style += 'strokeColor=#A9A9A9;';
  7481. }
  7482. v.style += addAllStyles(v.style, p, a, v);
  7483. break;
  7484. case 'AndroidRadioButton' :
  7485. var dot = null;
  7486. if (p.Checked)
  7487. {
  7488. dot = new mxCell('', new mxGeometry(w * 0.15, h * 0.15, w * 0.7, h * 0.7), 'ellipse;fillColor=#33B5E5;strokeWidth=1;');
  7489. dot.vertex = true;
  7490. v.insert(dot);
  7491. }
  7492. if (p.Scheme == 'Dark')
  7493. {
  7494. v.style += 'shape=ellipse;perimeter=ellipsePerimeter;strokeWidth=1;strokeColor=#272727;';
  7495. if (p.Checked)
  7496. {
  7497. dot.style += 'strokeColor=#1F5C73;';
  7498. v.style += 'fillColor=#193C49;';
  7499. }
  7500. else
  7501. {
  7502. v.style += 'fillColor=#111111;';
  7503. }
  7504. }
  7505. else
  7506. {
  7507. v.style += 'shape=ellipse;perimeter=ellipsePerimeter;strokeWidth=1;fillColor=#ffffff;strokeColor=#5C5C5C;';
  7508. if (p.Checked)
  7509. {
  7510. dot.style += 'strokeColor=#999999;';
  7511. }
  7512. }
  7513. v.style += addAllStyles(v.style, p, a, v);
  7514. break;
  7515. case 'AndroidCheckBox' :
  7516. var check = null;
  7517. if (p.Checked)
  7518. {
  7519. check = new mxCell('', new mxGeometry(w * 0.25, - h * 0.05, w, h * 0.8), 'shape=mxgraph.ios7.misc.check;strokeColor=#33B5E5;strokeWidth=2;');
  7520. check.vertex = true;
  7521. v.insert(check);
  7522. }
  7523. if (p.Scheme == 'Dark')
  7524. {
  7525. v.style += 'strokeWidth=1;strokeColor=#272727;fillColor=#111111;';
  7526. }
  7527. else
  7528. {
  7529. v.style += 'strokeWidth=1;strokeColor=#5C5C5C;fillColor=#ffffff;';
  7530. }
  7531. v.style += addAllStyles(v.style, p, a, v);
  7532. break;
  7533. case 'AndroidToggle' :
  7534. if (p.Scheme == 'Dark')
  7535. {
  7536. if (p.Checked)
  7537. {
  7538. v.style += 'shape=mxgraph.android.switch_on;fillColor=#666666;';
  7539. }
  7540. else
  7541. {
  7542. v.style += 'shape=mxgraph.android.switch_off;fillColor=#666666;';
  7543. }
  7544. }
  7545. else
  7546. {
  7547. if (p.Checked)
  7548. {
  7549. v.style += 'shape=mxgraph.android.switch_on;fillColor=#E6E6E6;';
  7550. }
  7551. else
  7552. {
  7553. v.style += 'shape=mxgraph.android.switch_off;fillColor=#E6E6E6;';
  7554. }
  7555. }
  7556. v.style += addAllStyles(v.style, p, a, v);
  7557. break;
  7558. case 'AndroidSlider' :
  7559. v.style += 'shape=mxgraph.android.progressScrubberFocused;dx=' + p.BarPosition + ';fillColor=#33b5e5;';
  7560. v.style += addAllStyles(v.style, p, a, v);
  7561. break;
  7562. case 'iOSSegmentedControl' :
  7563. var numTabs = parseInt(p.Tabs);
  7564. var tabFullW = w;
  7565. v.style += 'strokeColor=none;fillColor=none;';
  7566. if (numTabs > 0)
  7567. {
  7568. tabFullW = tabFullW / numTabs;
  7569. }
  7570. var tab = new Array();
  7571. var line = new Array();
  7572. for (var i = 0; i < numTabs; i++)
  7573. {
  7574. tab[i] = new mxCell('', new mxGeometry(i * tabFullW, 0, tabFullW, h), 'strokeColor=' + p.FillColor + ';');
  7575. tab[i].vertex = true;
  7576. v.insert(tab[i]);
  7577. tab[i].value = convertText(p["Tab_" + i]);
  7578. tab[i].style += getLabelStyle(p["Tab_" + i], isLastLblHTML);
  7579. if (p.Selected == i)
  7580. {
  7581. tab[i].style += getFillColor(p, a);
  7582. }
  7583. else
  7584. {
  7585. tab[i].style += 'fillColor=none;';
  7586. }
  7587. }
  7588. v.style += addAllStyles(v.style, p, a, v);
  7589. break;
  7590. case 'iOSSlider' :
  7591. v.style += 'shape=mxgraph.ios7ui.slider;strokeColor=' + p.FillColor + ';fillColor=#ffffff;strokeWidth=2;barPos=' + p.BarPosition * 100 + ';';
  7592. v.style += addAllStyles(v.style, p, a, v);
  7593. break;
  7594. case 'iOSProgressBar':
  7595. 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;');
  7596. v.vertex = true;
  7597. var progressBar = new mxCell('', new mxGeometry(0, 0, w * p.BarPosition, Math.round(h * 0.5)), 'strokeColor=none;' + getFillColor(p, a));
  7598. progressBar.vertex = true;
  7599. v.insert(progressBar);
  7600. v.style += addAllStyles(v.style, p, a, v);
  7601. break;
  7602. case 'iOSPageControls' :
  7603. v.style += 'shape=mxgraph.ios7ui.pageControl;strokeColor=#D6D6D6;';
  7604. v.style += addAllStyles(v.style, p, a, v);
  7605. break;
  7606. case 'iOSStatusBar' :
  7607. v.style += 'shape=mxgraph.ios7ui.appBar;strokeColor=#000000;';
  7608. var text1 = new mxCell(convertText(p.Text), new mxGeometry(w * 0.35, 0, w * 0.3, h), 'strokeColor=none;fillColor=none;');
  7609. text1.vertex = true;
  7610. v.insert(text1);
  7611. text1.style += getLabelStyle(p.Text, isLastLblHTML);
  7612. var text2 = new mxCell(convertText(p.Carrier), new mxGeometry(w * 0.09, 0, w * 0.2, h), 'strokeColor=none;fillColor=none;');
  7613. text2.vertex = true;
  7614. v.insert(text2);
  7615. text2.style += getLabelStyle(p.Carrier, isLastLblHTML);
  7616. v.style += addAllStyles(v.style, p, a, v);
  7617. break;
  7618. case 'iOSSearchBar' :
  7619. v.value = convertText(p.Search);
  7620. v.style += 'strokeColor=none;';
  7621. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML) +
  7622. getLabelStyle(p.Search, isLastLblHTML);
  7623. 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;');
  7624. icon1.vertex = true;
  7625. v.insert(icon1);
  7626. break;
  7627. case 'iOSNavBar' :
  7628. v.value = convertText(p.Title);
  7629. v.style += 'shape=partialRectangle;top=0;right=0;left=0;strokeColor=#979797;'
  7630. + getLabelStyle(p.Title, isLastLblHTML);
  7631. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  7632. var text1 = new mxCell(convertText(p.LeftText), new mxGeometry(w * 0.03, 0, w * 0.3, h), 'strokeColor=none;fillColor=none;');
  7633. text1.vertex = true;
  7634. v.insert(text1);
  7635. text1.style += getLabelStyle(p.LeftText, isLastLblHTML);
  7636. var text2 = new mxCell(convertText(p.RightText), new mxGeometry(w * 0.65, 0, w * 0.3, h), 'strokeColor=none;fillColor=none;');
  7637. text2.vertex = true;
  7638. v.insert(text2);
  7639. text2.style += getLabelStyle(p.RightText, isLastLblHTML);
  7640. 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;');
  7641. icon1.vertex = true;
  7642. v.insert(icon1);
  7643. break;
  7644. case 'iOSTabs' :
  7645. var numTabs = parseInt(p.Tabs);
  7646. var tabFullW = w;
  7647. v.style += 'shape=partialRectangle;right=0;left=0;bottom=0;strokeColor=#979797;';
  7648. v.style += addAllStyles(v.style, p, a, v);
  7649. if (numTabs > 0)
  7650. {
  7651. tabFullW = tabFullW / numTabs;
  7652. }
  7653. var tab = new Array();
  7654. var line = new Array();
  7655. for (var i = 0; i < numTabs; i++)
  7656. {
  7657. tab[i] = new mxCell('', new mxGeometry(i * tabFullW, 0, tabFullW, h), 'strokeColor=none;');
  7658. tab[i].vertex = true;
  7659. v.insert(tab[i]);
  7660. tab[i].value = convertText(p["Tab_" + i]);
  7661. tab[i].style += (isLastLblHTML? 'overflow=block;blockSpacing=1;html=1;fontSize=' + defaultFontSize + ';' +
  7662. gFontFamilyStyle
  7663. :
  7664. getFontSize(p["Tab_" + i]) +
  7665. getFontFamily(p["Tab_" + i]) +
  7666. getFontColor(p["Tab_" + i]) +
  7667. getFontStyle(p["Tab_" + i]) +
  7668. getTextAlignment(p["Tab_" + i]) +
  7669. getTextLeftSpacing(p["Tab_" + i]) +
  7670. getTextRightSpacing(p["Tab_" + i]) +
  7671. getTextTopSpacing(p["Tab_" + i]) +
  7672. getTextBottomSpacing(p["Tab_" + i]) +
  7673. getTextGlobalSpacing(p["Tab_" + i]));
  7674. tab[i].style += 'verticalAlign=bottom;';
  7675. if (p.Selected == i)
  7676. {
  7677. tab[i].style += 'fillColor=#BBBBBB;';
  7678. }
  7679. else
  7680. {
  7681. tab[i].style += 'fillColor=none;';
  7682. }
  7683. }
  7684. break;
  7685. case 'iOSDatePicker' :
  7686. var firstDate1 = new mxCell('', new mxGeometry(0, 0, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;');
  7687. firstDate1.vertex = true;
  7688. v.insert(firstDate1);
  7689. firstDate1.value = convertText(p.Option11);
  7690. firstDate1.style += getLabelStyle(p.Option11, isLastLblHTML);
  7691. var firstDate2 = new mxCell('', new mxGeometry(w * 0.5, 0, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7692. firstDate2.vertex = true;
  7693. v.insert(firstDate2);
  7694. firstDate2.value = convertText(p.Option21);
  7695. firstDate2.style += getLabelStyle(p.Option21, isLastLblHTML);
  7696. var firstDate3 = new mxCell('', new mxGeometry(w * 0.65, 0, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7697. firstDate3.vertex = true;
  7698. v.insert(firstDate3);
  7699. firstDate3.value = convertText(p.Option31);
  7700. firstDate3.style += getLabelStyle(p.Option31, isLastLblHTML);
  7701. var secondDate1 = new mxCell('', new mxGeometry(0, h * 0.2, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;');
  7702. secondDate1.vertex = true;
  7703. v.insert(secondDate1);
  7704. secondDate1.value = convertText(p.Option12);
  7705. secondDate1.style += getLabelStyle(p.Option12, isLastLblHTML);
  7706. var secondDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.2, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7707. secondDate2.vertex = true;
  7708. v.insert(secondDate2);
  7709. secondDate2.value = convertText(p.Option22);
  7710. secondDate2.style += getLabelStyle(p.Option22, isLastLblHTML);
  7711. var secondDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.2, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7712. secondDate3.vertex = true;
  7713. v.insert(secondDate3);
  7714. secondDate3.value = convertText(p.Option32);
  7715. secondDate3.style += getLabelStyle(p.Option32, isLastLblHTML);
  7716. var currDate1 = new mxCell('', new mxGeometry(0, h * 0.4, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;');
  7717. currDate1.vertex = true;
  7718. v.insert(currDate1);
  7719. currDate1.value = convertText(p.Option13);
  7720. currDate1.style += getLabelStyle(p.Option13, isLastLblHTML);
  7721. var currDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7722. currDate2.vertex = true;
  7723. v.insert(currDate2);
  7724. currDate2.value = convertText(p.Option23);
  7725. currDate2.style += getLabelStyle(p.Option23, isLastLblHTML);
  7726. var currDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7727. currDate3.vertex = true;
  7728. v.insert(currDate3);
  7729. currDate3.value = convertText(p.Option33);
  7730. currDate3.style += getLabelStyle(p.Option33, isLastLblHTML);
  7731. var currDate4 = new mxCell('', new mxGeometry(w * 0.80, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7732. currDate4.vertex = true;
  7733. v.insert(currDate4);
  7734. currDate4.value = convertText(p.Option43);
  7735. currDate4.style += getLabelStyle(p.Option43, isLastLblHTML);
  7736. var fourthDate1 = new mxCell('', new mxGeometry(0, h * 0.6, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;');
  7737. fourthDate1.vertex = true;
  7738. v.insert(fourthDate1);
  7739. fourthDate1.value = convertText(p.Option14);
  7740. fourthDate1.style += getLabelStyle(p.Option14, isLastLblHTML);
  7741. var fourthDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7742. fourthDate2.vertex = true;
  7743. v.insert(fourthDate2);
  7744. fourthDate2.value = convertText(p.Option24);
  7745. fourthDate2.style += getLabelStyle(p.Option24, isLastLblHTML);
  7746. var fourthDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7747. fourthDate3.vertex = true;
  7748. v.insert(fourthDate3);
  7749. fourthDate3.value = convertText(p.Option34);
  7750. fourthDate3.style += getLabelStyle(p.Option34, isLastLblHTML);
  7751. var fourthDate4 = new mxCell('', new mxGeometry(w * 0.8, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7752. fourthDate4.vertex = true;
  7753. v.insert(fourthDate4);
  7754. fourthDate4.value = convertText(p.Option44);
  7755. fourthDate4.style += getLabelStyle(p.Option44, isLastLblHTML);
  7756. var fifthDate1 = new mxCell('', new mxGeometry(0, h * 0.8, w * 0.5, h * 0.2), 'strokeColor=none;fillColor=none;');
  7757. fifthDate1.vertex = true;
  7758. v.insert(fifthDate1);
  7759. fifthDate1.value = convertText(p.Option15);
  7760. fifthDate1.style += getLabelStyle(p.Option15, isLastLblHTML);
  7761. var fifthDate2 = new mxCell('', new mxGeometry(w * 0.5, h * 0.8, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7762. fifthDate2.vertex = true;
  7763. v.insert(fifthDate2);
  7764. fifthDate2.value = convertText(p.Option25);
  7765. fifthDate2.style += getLabelStyle(p.Option25, isLastLblHTML);
  7766. var fifthDate3 = new mxCell('', new mxGeometry(w * 0.65, h * 0.8, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7767. fifthDate3.vertex = true;
  7768. v.insert(fifthDate3);
  7769. fifthDate3.value = convertText(p.Option35);
  7770. fifthDate3.style += getLabelStyle(p.Option35, isLastLblHTML);
  7771. var line1 = new mxCell('', new mxGeometry(0, h * 0.4 - 2, w, 4), 'shape=line;strokeColor=#888888;');
  7772. line1.vertex = true;
  7773. v.insert(line1);
  7774. var line2 = new mxCell('', new mxGeometry(0, h * 0.6 - 2, w, 4), 'shape=line;strokeColor=#888888;');
  7775. line2.vertex = true;
  7776. v.insert(line2);
  7777. v.style += 'strokeColor=none;';
  7778. v.style += addAllStyles(v.style, p, a, v);
  7779. break;
  7780. case 'iOSTimePicker' :
  7781. var firstDate1 = new mxCell('', new mxGeometry(0, 0, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7782. firstDate1.vertex = true;
  7783. v.insert(firstDate1);
  7784. firstDate1.value = convertText(p.Option11);
  7785. firstDate1.style += getLabelStyle(p.Option11, isLastLblHTML);
  7786. var firstDate2 = new mxCell('', new mxGeometry(w * 0.25, 0, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;');
  7787. firstDate2.vertex = true;
  7788. v.insert(firstDate2);
  7789. firstDate2.value = convertText(p.Option21);
  7790. firstDate2.style += getLabelStyle(p.Option21, isLastLblHTML);
  7791. var secondDate1 = new mxCell('', new mxGeometry(0, h * 0.2, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7792. secondDate1.vertex = true;
  7793. v.insert(secondDate1);
  7794. secondDate1.value = convertText(p.Option12);
  7795. secondDate1.style += getLabelStyle(p.Option12, isLastLblHTML);
  7796. var secondDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.2, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;');
  7797. secondDate2.vertex = true;
  7798. v.insert(secondDate2);
  7799. secondDate2.value = convertText(p.Option22);
  7800. secondDate2.style += getLabelStyle(p.Option22, isLastLblHTML);
  7801. var currDate1 = new mxCell('', new mxGeometry(0, h * 0.4, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7802. currDate1.vertex = true;
  7803. v.insert(currDate1);
  7804. currDate1.value = convertText(p.Option13);
  7805. currDate1.style += getLabelStyle(p.Option13, isLastLblHTML);
  7806. var currDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.4, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;');
  7807. currDate2.vertex = true;
  7808. v.insert(currDate2);
  7809. currDate2.value = convertText(p.Option23);
  7810. currDate2.style += getLabelStyle(p.Option23, isLastLblHTML);
  7811. var currDate4 = new mxCell('', new mxGeometry(w * 0.7, h * 0.4, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7812. currDate4.vertex = true;
  7813. v.insert(currDate4);
  7814. currDate4.value = convertText(p.Option33);
  7815. currDate4.style += getLabelStyle(p.Option33, isLastLblHTML);
  7816. var fourthDate1 = new mxCell('', new mxGeometry(0, h * 0.6, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7817. fourthDate1.vertex = true;
  7818. v.insert(fourthDate1);
  7819. fourthDate1.value = convertText(p.Option14);
  7820. fourthDate1.style += getLabelStyle(p.Option14, isLastLblHTML);
  7821. var fourthDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.6, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;');
  7822. fourthDate2.vertex = true;
  7823. v.insert(fourthDate2);
  7824. fourthDate2.value = convertText(p.Option24);
  7825. fourthDate2.style += getLabelStyle(p.Option24, isLastLblHTML);
  7826. var fourthDate4 = new mxCell('', new mxGeometry(w * 0.7, h * 0.6, w * 0.15, h * 0.2), 'strokeColor=none;fillColor=none;');
  7827. fourthDate4.vertex = true;
  7828. v.insert(fourthDate4);
  7829. fourthDate4.value = convertText(p.Option34);
  7830. fourthDate4.style += getLabelStyle(p.Option34, isLastLblHTML);
  7831. var fifthDate1 = new mxCell('', new mxGeometry(0, h * 0.8, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7832. fifthDate1.vertex = true;
  7833. v.insert(fifthDate1);
  7834. fifthDate1.value = convertText(p.Option15);
  7835. fifthDate1.style += getLabelStyle(p.Option15, isLastLblHTML);
  7836. var fifthDate2 = new mxCell('', new mxGeometry(w * 0.25, h * 0.8, w * 0.3, h * 0.2), 'strokeColor=none;fillColor=none;');
  7837. fifthDate2.vertex = true;
  7838. v.insert(fifthDate2);
  7839. fifthDate2.value = convertText(p.Option25);
  7840. fifthDate2.style += getLabelStyle(p.Option25, isLastLblHTML);
  7841. var line1 = new mxCell('', new mxGeometry(0, h * 0.4 - 2, w, 4), 'shape=line;strokeColor=#888888;');
  7842. line1.vertex = true;
  7843. v.insert(line1);
  7844. var line2 = new mxCell('', new mxGeometry(0, h * 0.6 - 2, w, 4), 'shape=line;strokeColor=#888888;');
  7845. line2.vertex = true;
  7846. v.insert(line2);
  7847. v.style += 'strokeColor=none;';
  7848. v.style += addAllStyles(v.style, p, a, v);
  7849. break;
  7850. case 'iOSCountdownPicker' :
  7851. var firstDate3 = new mxCell('', new mxGeometry(w * 0.45, 0, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;');
  7852. firstDate3.vertex = true;
  7853. v.insert(firstDate3);
  7854. firstDate3.value = convertText(p.Option31);
  7855. firstDate3.style += getLabelStyle(p.Option31, isLastLblHTML);
  7856. var secondDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.2, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;');
  7857. secondDate3.vertex = true;
  7858. v.insert(secondDate3);
  7859. secondDate3.value = convertText(p.Option32);
  7860. secondDate3.style += getLabelStyle(p.Option32, isLastLblHTML);
  7861. var currDate1 = new mxCell('', new mxGeometry(0, h * 0.4, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7862. currDate1.vertex = true;
  7863. v.insert(currDate1);
  7864. currDate1.value = convertText(p.Option13);
  7865. currDate1.style += getLabelStyle(p.Option13, isLastLblHTML);
  7866. var currDate2 = new mxCell('', new mxGeometry(w * 0.2, h * 0.4, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7867. currDate2.vertex = true;
  7868. v.insert(currDate2);
  7869. currDate2.value = convertText(p.Option23);
  7870. currDate2.style += getLabelStyle(p.Option23, isLastLblHTML);
  7871. var currDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.4, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;');
  7872. currDate3.vertex = true;
  7873. v.insert(currDate3);
  7874. currDate3.value = convertText(p.Option33);
  7875. currDate3.style += getLabelStyle(p.Option33, isLastLblHTML);
  7876. var currDate4 = new mxCell('', new mxGeometry(w * 0.6, h * 0.4, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;');
  7877. currDate4.vertex = true;
  7878. v.insert(currDate4);
  7879. currDate4.value = convertText(p.Option43);
  7880. currDate4.style += getLabelStyle(p.Option43, isLastLblHTML);
  7881. var fourthDate1 = new mxCell('', new mxGeometry(0, h * 0.6, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7882. fourthDate1.vertex = true;
  7883. v.insert(fourthDate1);
  7884. fourthDate1.value = convertText(p.Option14);
  7885. fourthDate1.style += getLabelStyle(p.Option14, isLastLblHTML);
  7886. var fourthDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.6, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;');
  7887. fourthDate3.vertex = true;
  7888. v.insert(fourthDate3);
  7889. fourthDate3.value = convertText(p.Option34);
  7890. fourthDate3.style += getLabelStyle(p.Option34, isLastLblHTML);
  7891. var fifthDate1 = new mxCell('', new mxGeometry(0, h * 0.8, w * 0.25, h * 0.2), 'strokeColor=none;fillColor=none;');
  7892. fifthDate1.vertex = true;
  7893. v.insert(fifthDate1);
  7894. fifthDate1.value = convertText(p.Option15);
  7895. fifthDate1.style += getLabelStyle(p.Option15, isLastLblHTML);
  7896. var fifthDate3 = new mxCell('', new mxGeometry(w * 0.45, h * 0.8, w * 0.2, h * 0.2), 'strokeColor=none;fillColor=none;');
  7897. fifthDate3.vertex = true;
  7898. v.insert(fifthDate3);
  7899. fifthDate3.value = convertText(p.Option35);
  7900. fifthDate3.style += getLabelStyle(p.Option35, isLastLblHTML);
  7901. var line1 = new mxCell('', new mxGeometry(0, h * 0.4 - 2, w, 4), 'shape=line;strokeColor=#888888;');
  7902. line1.vertex = true;
  7903. v.insert(line1);
  7904. var line2 = new mxCell('', new mxGeometry(0, h * 0.6 - 2, w, 4), 'shape=line;strokeColor=#888888;');
  7905. line2.vertex = true;
  7906. v.insert(line2);
  7907. v.style += 'strokeColor=none;';
  7908. v.style += addAllStyles(v.style, p, a, v);
  7909. break;
  7910. case 'iOSBasicCell' :
  7911. v.value = convertText(p.text);
  7912. v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;spacing=0;align=left;spacingLeft=' + (p.SeparatorInset * scale) + ';';
  7913. v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  7914. getFontSize(p.text) +
  7915. getFontColor(p.text) +
  7916. getFontStyle(p.text)) +
  7917. getTextVerticalAlignment(p.text);
  7918. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  7919. switch (p.AccessoryIndicatorType)
  7920. {
  7921. case 'Disclosure' :
  7922. 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;');
  7923. icon1.vertex = true;
  7924. v.insert(icon1);
  7925. break;
  7926. case 'DetailDisclosure' :
  7927. 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;');
  7928. icon1.vertex = true;
  7929. v.insert(icon1);
  7930. 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;');
  7931. icon2.vertex = true;
  7932. v.insert(icon2);
  7933. break;
  7934. case 'DetailIndicator' :
  7935. 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;');
  7936. icon2.vertex = true;
  7937. v.insert(icon2);
  7938. break;
  7939. case 'CheckMark' :
  7940. 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;');
  7941. icon1.vertex = true;
  7942. v.insert(icon1);
  7943. break;
  7944. }
  7945. break;
  7946. case 'iOSSubtitleCell' :
  7947. v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;align=left;spacing=0;verticalAlign=top;spacingLeft=' + (p.SeparatorInset * scale) + ';';
  7948. v.value = convertText(p.subtext);
  7949. v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  7950. getFontSize(p.subtext) +
  7951. getFontColor(p.subtext) +
  7952. getFontStyle(p.subtext));
  7953. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  7954. 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) + ';');
  7955. subtext.vertex = true;
  7956. v.insert(subtext);
  7957. subtext.value = convertText(p.text);
  7958. subtext.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' +
  7959. gFontFamilyStyle
  7960. :
  7961. getFontSize(p.text) +
  7962. getFontFamily(p.text) +
  7963. getFontColor(p.text) +
  7964. getFontStyle(p.text));
  7965. switch (p.AccessoryIndicatorType)
  7966. {
  7967. case 'Disclosure' :
  7968. 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;');
  7969. icon1.vertex = true;
  7970. v.insert(icon1);
  7971. break;
  7972. case 'DetailDisclosure' :
  7973. 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;');
  7974. icon1.vertex = true;
  7975. v.insert(icon1);
  7976. 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;');
  7977. icon2.vertex = true;
  7978. v.insert(icon2);
  7979. break;
  7980. case 'DetailIndicator' :
  7981. 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;');
  7982. icon2.vertex = true;
  7983. v.insert(icon2);
  7984. break;
  7985. case 'CheckMark' :
  7986. 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;');
  7987. icon1.vertex = true;
  7988. v.insert(icon1);
  7989. break;
  7990. }
  7991. break;
  7992. case 'iOSRightDetailCell' :
  7993. v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;align=left;spacing=0;verticalAlign=middle;spacingLeft=' + (p.SeparatorInset * scale) + ';';
  7994. v.value = convertText(p.subtext);
  7995. v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  7996. getFontSize(p.subtext) +
  7997. getFontColor(p.subtext) +
  7998. getFontStyle(p.subtext));
  7999. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8000. var subtext = null;
  8001. switch (p.AccessoryIndicatorType)
  8002. {
  8003. case 'Disclosure' :
  8004. 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;');
  8005. icon1.vertex = true;
  8006. v.insert(icon1);
  8007. subtext = new mxCell('', new mxGeometry(w * 0.55, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;');
  8008. break;
  8009. case 'DetailDisclosure' :
  8010. 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;');
  8011. icon1.vertex = true;
  8012. v.insert(icon1);
  8013. 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;');
  8014. icon2.vertex = true;
  8015. v.insert(icon2);
  8016. subtext = new mxCell('', new mxGeometry(w * 0.45, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;');
  8017. break;
  8018. case 'DetailIndicator' :
  8019. 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;');
  8020. icon2.vertex = true;
  8021. v.insert(icon2);
  8022. subtext = new mxCell('', new mxGeometry(w * 0.52, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;');
  8023. break;
  8024. case 'CheckMark' :
  8025. 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;');
  8026. icon1.vertex = true;
  8027. v.insert(icon1);
  8028. subtext = new mxCell('', new mxGeometry(w * 0.55, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;');
  8029. break;
  8030. default :
  8031. subtext = new mxCell('', new mxGeometry(w * 0.65, 0, w * 0.3, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;');
  8032. }
  8033. subtext.vertex = true;
  8034. v.insert(subtext);
  8035. subtext.value = convertText(p.text);
  8036. subtext.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' +
  8037. gFontFamilyStyle
  8038. :
  8039. getFontSize(p.text) +
  8040. getFontFamily(p.text) +
  8041. getFontColor(p.text) +
  8042. getFontStyle(p.text));
  8043. break;
  8044. case 'iOSLeftDetailCell' :
  8045. v.style += 'shape=partialRectangle;left=0;top=0;right=0;fillColor=#ffffff;strokeColor=#C8C7CC;';
  8046. v.style += addAllStyles(v.style, p, a, v);
  8047. var text = new mxCell('', new mxGeometry(0, 0, w * 0.25, h), 'fillColor=none;strokeColor=none;spacing=0;align=right;verticalAlign=middle;spacingRight=3;');
  8048. text.vertex = true;
  8049. v.insert(text);
  8050. text.value = convertText(p.subtext);
  8051. text.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' +
  8052. gFontFamilyStyle
  8053. :
  8054. getFontSize(p.subtext) +
  8055. getFontFamily(p.subtext) +
  8056. getFontColor(p.subtext) +
  8057. getFontStyle(p.subtext));
  8058. 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;');
  8059. subtext.vertex = true;
  8060. v.insert(subtext);
  8061. subtext.value = convertText(p.text);
  8062. subtext.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' +
  8063. gFontFamilyStyle
  8064. :
  8065. getFontSize(p.text) +
  8066. getFontFamily(p.text) +
  8067. getFontColor(p.text) +
  8068. getFontStyle(p.text));
  8069. switch (p.AccessoryIndicatorType)
  8070. {
  8071. case 'Disclosure' :
  8072. 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;');
  8073. icon1.vertex = true;
  8074. v.insert(icon1);
  8075. break;
  8076. case 'DetailDisclosure' :
  8077. 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;');
  8078. icon1.vertex = true;
  8079. v.insert(icon1);
  8080. 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;');
  8081. icon2.vertex = true;
  8082. v.insert(icon2);
  8083. break;
  8084. case 'DetailIndicator' :
  8085. 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;');
  8086. icon2.vertex = true;
  8087. v.insert(icon2);
  8088. break;
  8089. case 'CheckMark' :
  8090. 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;');
  8091. icon1.vertex = true;
  8092. v.insert(icon1);
  8093. break;
  8094. }
  8095. break;
  8096. case 'iOSTableGroupedSectionBreak' :
  8097. v.style += 'shape=partialRectangle;left=0;right=0;fillColor=#EFEFF4;strokeColor=#C8C7CC;';
  8098. var text1 = new mxCell('', new mxGeometry(0, 0, w, h * 0.4), 'fillColor=none;strokeColor=none;spacing=10;align=left;');
  8099. text1.vertex = true;
  8100. v.insert(text1);
  8101. text1.value = convertText(p.text);
  8102. text1.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' +
  8103. gFontFamilyStyle
  8104. :
  8105. getFontSize(p.text) +
  8106. getFontFamily(p.text) +
  8107. getFontColor(p.text) +
  8108. getFontStyle(p.text));
  8109. var text2 = new mxCell('', new mxGeometry(0, h * 0.6, w, h * 0.4), 'fillColor=none;strokeColor=none;spacing=10;align=left;');
  8110. text2.vertex = true;
  8111. v.insert(text2);
  8112. text2.value = convertText(p["bottom-text"]);
  8113. text2.style += (isLastLblHTML? 'html=1;fontSize=' + defaultFontSize + ';' +
  8114. gFontFamilyStyle
  8115. :
  8116. getFontSize(p["bottom-text"]) +
  8117. getFontFamily(p["bottom-text"]) +
  8118. getFontColor(p["bottom-text"]) +
  8119. getFontStyle(p["bottom-text"]));
  8120. break;
  8121. case 'iOSTablePlainHeaderFooter' :
  8122. v.style += 'fillColor=#F7F7F7;strokeColor=none;align=left;spacingLeft=5;spacing=0;';
  8123. v.value = convertText(p.text);
  8124. v.style += (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  8125. getFontSize(p.text) +
  8126. getFontColor(p.text) +
  8127. getFontStyle(p.text));
  8128. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8129. break;
  8130. case 'SMPage' :
  8131. //TODO Link icon (p.Url != "")
  8132. if (p.Group)
  8133. {
  8134. v.style += 'strokeColor=none;fillColor=none;'
  8135. var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.9, h * 0.9), 'rounded=1;arcSize=3;part=1;');
  8136. item1.vertex = true;
  8137. v.insert(item1);
  8138. item1.style += getStrokeColor(p, a) +
  8139. getFillColor(p, a) +
  8140. getOpacity(p, a, item1) +
  8141. getShadow(p) +
  8142. getStrokeWidth(p);
  8143. var item2 = new mxCell('', new mxGeometry(w * 0.1, h * 0.1, w * 0.9, h * 0.9), 'rounded=1;arcSize=3;part=1;');
  8144. item2.vertex = true;
  8145. v.insert(item2);
  8146. item2.value = convertText(p.Text);
  8147. item2.style += getStrokeColor(p, a) +
  8148. getFillColor(p, a) +
  8149. getOpacity(p, a, item2) +
  8150. getShadow(p) +
  8151. getStrokeWidth(p) +
  8152. getLabelStyle(p, isLastLblHTML);
  8153. if (p.Future)
  8154. {
  8155. item1.style += 'dashed=1;fixDash=1;';
  8156. item2.style += 'dashed=1;fixDash=1;';
  8157. }
  8158. }
  8159. else
  8160. {
  8161. v.style += 'rounded=1;arcSize=3;';
  8162. if (p.Future)
  8163. {
  8164. v.style += 'dashed=1;fixDash=1;';
  8165. }
  8166. v.value = convertText(p.Text);
  8167. v.style += getStrokeColor(p, a) +
  8168. getFillColor(p, a) +
  8169. getOpacity(p, a, v) +
  8170. getShadow(p) +
  8171. getStrokeWidth(p) +
  8172. getLabelStyle(p, isLastLblHTML);
  8173. }
  8174. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8175. break;
  8176. case 'SMHome' :
  8177. case 'SMPrint' :
  8178. case 'SMSearch' :
  8179. case 'SMSettings' :
  8180. case 'SMSitemap' :
  8181. case 'SMSuccess' :
  8182. case 'SMVideo' :
  8183. case 'SMAudio' :
  8184. case 'SMCalendar' :
  8185. case 'SMChart' :
  8186. case 'SMCloud' :
  8187. case 'SMDocument' :
  8188. case 'SMForm' :
  8189. case 'SMGame' :
  8190. case 'SMUpload' :
  8191. var item1 = null;
  8192. switch (obj.Class)
  8193. {
  8194. case 'SMHome' :
  8195. 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;');
  8196. break;
  8197. case 'SMPrint' :
  8198. 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;');
  8199. break;
  8200. case 'SMSearch' :
  8201. 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;');
  8202. break;
  8203. case 'SMSettings' :
  8204. 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;');
  8205. break;
  8206. case 'SMSitemap' :
  8207. 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;');
  8208. break;
  8209. case 'SMSuccess' :
  8210. 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;');
  8211. break;
  8212. case 'SMVideo' :
  8213. 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;');
  8214. break;
  8215. case 'SMAudio' :
  8216. 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;');
  8217. break;
  8218. case 'SMCalendar' :
  8219. 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;');
  8220. break;
  8221. case 'SMChart' :
  8222. var fc = getFillColor(p, a);
  8223. if (fc == '')
  8224. {
  8225. fc = '#ffffff;'
  8226. }
  8227. else
  8228. {
  8229. fc = fc.replace('fillColor=', '');
  8230. }
  8231. 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);
  8232. break;
  8233. case 'SMCloud' :
  8234. 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;');
  8235. break;
  8236. case 'SMDocument' :
  8237. 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;');
  8238. break;
  8239. case 'SMForm' :
  8240. 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;');
  8241. break;
  8242. case 'SMGame' :
  8243. 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;');
  8244. break;
  8245. case 'SMUpload' :
  8246. 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;');
  8247. break;
  8248. }
  8249. item1.vertex = true;
  8250. v.insert(item1);
  8251. item1.value = convertText(p.Text);
  8252. item1.style += getLabelStyle(p, isLastLblHTML);
  8253. v.style += addAllStyles(v.style, p, a, v);
  8254. break;
  8255. case 'UMLMultiplicityBlock' :
  8256. v.style += 'strokeColor=none;fillColor=none;'
  8257. var item1 = new mxCell('', new mxGeometry(w * 0.1, 0, w * 0.9, h * 0.9), 'part=1;');
  8258. item1.vertex = true;
  8259. v.insert(item1);
  8260. item1.style += addAllStyles(item1.style, p, a, item1);
  8261. var item2 = new mxCell('', new mxGeometry(0, h * 0.1, w * 0.9, h * 0.9), 'part=1;');
  8262. item2.vertex = true;
  8263. v.insert(item2);
  8264. item2.value = convertText(p.Text);
  8265. item2.style +=
  8266. getLabelStyle(p.Text, isLastLblHTML);
  8267. item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML);
  8268. break;
  8269. case 'UMLConstraintBlock' :
  8270. var brace1 = new mxCell('', new mxGeometry(0, 0, h * 0.25, h), 'shape=curlyBracket;rounded=1;');
  8271. brace1.vertex = true;
  8272. v.insert(brace1);
  8273. var brace2 = new mxCell('', new mxGeometry(w - h * 0.25, 0, h * 0.25, h), 'shape=curlyBracket;rounded=1;flipH=1;');
  8274. brace2.vertex = true;
  8275. v.insert(brace2);
  8276. var label = new mxCell('', new mxGeometry(h * 0.25, 0, w - h * 0.5, h), 'strokeColor=none;fillColor=none;');
  8277. label.vertex = true;
  8278. label.value = convertText(p);
  8279. v.insert(label);
  8280. v.style = "strokeColor=none;fillColor=none;"
  8281. v.style += addAllStyles(v.style, p, a, v);
  8282. brace1.style +=
  8283. getOpacity(p, a, brace1);
  8284. brace2.style +=
  8285. getOpacity(p, a, brace2);
  8286. label.style +=
  8287. getFontColor(p, label);
  8288. brace1.style += addAllStyles(brace1.style, p, a, brace1);
  8289. brace2.style += addAllStyles(brace2.style, p, a, brace2);
  8290. label.style += addAllStyles(label.style, p, a, label, isLastLblHTML);
  8291. break;
  8292. case 'UMLTextBlock' :
  8293. v.value = convertText(p.Text);
  8294. v.style += 'strokeColor=none;' +
  8295. getLabelStyle(p.Text, isLastLblHTML);
  8296. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8297. break;
  8298. case 'UMLProvidedInterfaceBlock' :
  8299. case 'UMLProvidedInterfaceBlockV2' :
  8300. var rotation = getRotation(p, a, v);
  8301. p.Rotatio = null;
  8302. var allStyle = addAllStyles(v.style, p, a, v, isLastLblHTML);
  8303. if (allStyle.indexOf(mxConstants.STYLE_STROKEWIDTH) == -1)
  8304. {
  8305. allStyle = mxConstants.STYLE_STROKEWIDTH + '=1;' + allStyle;
  8306. }
  8307. v.style = groupStyle + rotation;
  8308. var circleW = w * 0.8;
  8309. var lineW = w - circleW;
  8310. var circle = new mxCell('', new mxGeometry(0.2, 0, circleW, h), 'shape=ellipse;' + allStyle);
  8311. circle.vertex = true;
  8312. circle.geometry.relative = true;
  8313. v.insert(circle);
  8314. var line = new mxCell('', new mxGeometry(0, 0.5, lineW, 1), 'line;' + allStyle);
  8315. line.geometry.relative = true;
  8316. line.vertex = true;
  8317. v.insert(line);
  8318. break;
  8319. case 'UMLComponentBoxBlock' :
  8320. case 'UMLComponentBoxBlockV2':
  8321. v.value = convertText(p);
  8322. v.style = 'html=1;dropTarget=0;' + addAllStyles(v.style, p, a, v, isLastLblHTML);
  8323. var icon = new mxCell('', new mxGeometry(1, 0, 15, 15), 'shape=component;jettyWidth=8;jettyHeight=4;');
  8324. icon.geometry.relative = true;
  8325. icon.geometry.offset = new mxPoint(-20, 5);
  8326. icon.vertex = true;
  8327. v.insert(icon);
  8328. break;
  8329. case 'UMLAssemblyConnectorBlock':
  8330. case 'UMLAssemblyConnectorBlockV2':
  8331. var rotation = getRotation(p, a, v);
  8332. p.Rotatio = null;
  8333. var allStyle = addAllStyles(v.style, p, a, v, isLastLblHTML);
  8334. if (allStyle.indexOf(mxConstants.STYLE_STROKEWIDTH) == -1)
  8335. {
  8336. allStyle = mxConstants.STYLE_STROKEWIDTH + '=1;' + allStyle;
  8337. }
  8338. v.style = groupStyle + rotation;
  8339. var line1W = w * 0.225;
  8340. var line2W = w * 0.1;
  8341. var circleW = w - line1W - line2W;
  8342. var circle = new mxCell('', new mxGeometry(0.225, 0, circleW, h), 'shape=providedRequiredInterface;verticalLabelPosition=bottom;' + allStyle);
  8343. circle.vertex = true;
  8344. circle.geometry.relative = true;
  8345. v.insert(circle);
  8346. var line1 = new mxCell('', new mxGeometry(0, 0.5, line1W, 1), 'line;' + allStyle);
  8347. line1.geometry.relative = true;
  8348. line1.vertex = true;
  8349. v.insert(line1);
  8350. var line2 = new mxCell('', new mxGeometry(0.9, 0.5, line2W, 1), 'line;' + allStyle);
  8351. line2.geometry.relative = true;
  8352. line2.vertex = true;
  8353. v.insert(line2);
  8354. break;
  8355. case 'BPMNActivity' :
  8356. v.value = convertText(p.Text);
  8357. switch (p.bpmnActivityType)
  8358. {
  8359. case 1:
  8360. v.style +=
  8361. getLabelStyle(p.Text, isLastLblHTML);
  8362. break
  8363. case 2:
  8364. v.style += 'shape=ext;double=1;' +
  8365. getLabelStyle(p.Text, isLastLblHTML);
  8366. break
  8367. case 3:
  8368. v.style += 'shape=ext;dashed=1;dashPattern=2 5;' +
  8369. getLabelStyle(p.Text, isLastLblHTML);
  8370. break
  8371. case 4:
  8372. v.style += 'shape=ext;strokeWidth=2;' +
  8373. getLabelStyle(p.Text, isLastLblHTML);
  8374. break
  8375. }
  8376. if (p.bpmnTaskType != 0)
  8377. {
  8378. switch (p.bpmnTaskType)
  8379. {
  8380. case 1:
  8381. var item1 = new mxCell('', new mxGeometry(0, 0, 19, 12), 'shape=message;');
  8382. item1.geometry.offset = new mxPoint(4, 7);
  8383. break;
  8384. case 2:
  8385. var item1 = new mxCell('', new mxGeometry(0, 0, 19, 12), 'shape=message;');
  8386. item1.geometry.offset = new mxPoint(4, 7);
  8387. break;
  8388. case 3:
  8389. var item1 = new mxCell('', new mxGeometry(0, 0, 15, 15), 'shape=mxgraph.bpmn.user_task;');
  8390. item1.geometry.offset = new mxPoint(4, 5);
  8391. break;
  8392. case 4:
  8393. var item1 = new mxCell('', new mxGeometry(0, 0, 15, 10), 'shape=mxgraph.bpmn.manual_task;');
  8394. item1.geometry.offset = new mxPoint(4, 7);
  8395. break;
  8396. case 5:
  8397. var item1 = new mxCell('', new mxGeometry(0, 0, 18, 13), 'shape=mxgraph.bpmn.business_rule_task;');
  8398. item1.geometry.offset = new mxPoint(4, 7);
  8399. break;
  8400. case 6:
  8401. var item1 = new mxCell('', new mxGeometry(0, 0, 15, 15), 'shape=mxgraph.bpmn.service_task;');
  8402. item1.geometry.offset = new mxPoint(4, 5);
  8403. break;
  8404. case 7:
  8405. var item1 = new mxCell('', new mxGeometry(0, 0, 15, 15), 'shape=mxgraph.bpmn.script_task;');
  8406. item1.geometry.offset = new mxPoint(4, 5);
  8407. break;
  8408. }
  8409. if (p.bpmnTaskType == 1)
  8410. {
  8411. var sc = getFillColor(p, a);
  8412. var fc = getStrokeColor(p, a);
  8413. fc = fc.replace('strokeColor', 'fillColor');
  8414. sc = sc.replace('fillColor', 'strokeColor');
  8415. if (fc == '')
  8416. {
  8417. fc = 'fillColor=#000000;'
  8418. }
  8419. if (sc == '')
  8420. {
  8421. sc = 'strokeColor=#ffffff;'
  8422. }
  8423. item1.style += sc + fc + 'part=1;';
  8424. }
  8425. else
  8426. {
  8427. item1.style += getFillColor(p, a) + getStrokeColor(p, a) + 'part=1;';
  8428. }
  8429. item1.geometry.relative = true;
  8430. item1.vertex = true;
  8431. v.insert(item1);
  8432. }
  8433. var numIcons = 0;
  8434. if (p.bpmnActivityMarker1 != 0)
  8435. {
  8436. numIcons++;
  8437. }
  8438. if (p.bpmnActivityMarker2 != 0)
  8439. {
  8440. numIcons++;
  8441. }
  8442. var iconX = 0;
  8443. var iconY = h - 20;
  8444. if (numIcons == 1)
  8445. {
  8446. iconX = -7.5;
  8447. }
  8448. else if (numIcons == 2)
  8449. {
  8450. iconX = -19;
  8451. }
  8452. if (p.bpmnActivityMarker1 != 0)
  8453. {
  8454. switch (p.bpmnActivityMarker1)
  8455. {
  8456. case 1:
  8457. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=plus;part=1;');
  8458. item1.geometry.offset = new mxPoint(iconX, -20);
  8459. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8460. break;
  8461. case 2:
  8462. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=mxgraph.bpmn.loop;part=1;');
  8463. item1.geometry.offset = new mxPoint(iconX, -20);
  8464. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8465. break;
  8466. case 3:
  8467. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;part=1;');
  8468. item1.geometry.offset = new mxPoint(iconX, -20);
  8469. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8470. break;
  8471. case 4:
  8472. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;direction=south;part=1;');
  8473. item1.geometry.offset = new mxPoint(iconX, -20);
  8474. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8475. break;
  8476. case 5:
  8477. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 10), 'shape=mxgraph.bpmn.ad_hoc;strokeColor=none;flipH=1;part=1;');
  8478. item1.geometry.offset = new mxPoint(iconX, -17);
  8479. var fc = getStrokeColor(p, a);
  8480. fc = fc.replace('strokeColor', 'fillColor');
  8481. if (fc == '')
  8482. {
  8483. fc = 'fillColor=#000000;'
  8484. }
  8485. item1.style += fc;
  8486. break;
  8487. case 6:
  8488. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 11), 'shape=mxgraph.bpmn.compensation;part=1;');
  8489. item1.geometry.offset = new mxPoint(iconX, -18);
  8490. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8491. break;
  8492. }
  8493. item1.geometry.relative = true;
  8494. item1.vertex = true;
  8495. v.insert(item1);
  8496. }
  8497. if (numIcons == 2)
  8498. {
  8499. iconX = 5;
  8500. }
  8501. if (p.bpmnActivityMarker2 != 0)
  8502. {
  8503. switch (p.bpmnActivityMarker2)
  8504. {
  8505. case 1:
  8506. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=plus;part=1;');
  8507. item1.geometry.offset = new mxPoint(iconX, -20);
  8508. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8509. break;
  8510. case 2:
  8511. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=mxgraph.bpmn.loop;part=1;');
  8512. item1.geometry.offset = new mxPoint(iconX, -20);
  8513. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8514. break;
  8515. case 3:
  8516. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;part=1;');
  8517. item1.geometry.offset = new mxPoint(iconX, -20);
  8518. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8519. break;
  8520. case 4:
  8521. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 15), 'shape=parallelMarker;direction=south;part=1;');
  8522. item1.geometry.offset = new mxPoint(iconX, -20);
  8523. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8524. break;
  8525. case 5:
  8526. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 10), 'shape=mxgraph.bpmn.ad_hoc;strokeColor=none;flipH=1;part=1;');
  8527. item1.geometry.offset = new mxPoint(iconX, -17);
  8528. var fc = getStrokeColor(p, a);
  8529. fc = fc.replace('strokeColor', 'fillColor');
  8530. if (fc == '')
  8531. {
  8532. fc = 'fillColor=#000000;'
  8533. }
  8534. item1.style += fc;
  8535. break;
  8536. case 6:
  8537. var item1 = new mxCell('', new mxGeometry(0.5, 1, 15, 11), 'shape=mxgraph.bpmn.compensation;part=1;');
  8538. item1.geometry.offset = new mxPoint(iconX, -18);
  8539. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8540. break;
  8541. }
  8542. item1.geometry.relative = true;
  8543. item1.vertex = true;
  8544. v.insert(item1);
  8545. }
  8546. v.style += addAllStyles(v.style, p, a, v);
  8547. break;
  8548. case 'BPMNEvent' :
  8549. v.style += 'shape=mxgraph.bpmn.shape;verticalLabelPosition=bottom;verticalAlign=top;';
  8550. v.value = convertText(p.Text);
  8551. if (p.bpmnDashed == true)
  8552. {
  8553. switch (p.bpmnEventGroup)
  8554. {
  8555. case 0:
  8556. v.style += 'outline=eventNonint;';
  8557. break;
  8558. case 1:
  8559. v.style += 'outline=boundNonint;';
  8560. break;
  8561. case 2:
  8562. v.style += 'outline=end;';
  8563. break;
  8564. }
  8565. }
  8566. else
  8567. {
  8568. switch (p.bpmnEventGroup)
  8569. {
  8570. case 0:
  8571. v.style += 'outline=standard;';
  8572. break;
  8573. case 1:
  8574. v.style += 'outline=throwing;';
  8575. break;
  8576. case 2:
  8577. v.style += 'outline=end;';
  8578. break;
  8579. }
  8580. }
  8581. switch(p.bpmnEventType)
  8582. {
  8583. case 1:
  8584. v.style += 'symbol=message;';
  8585. break;
  8586. case 2:
  8587. v.style += 'symbol=timer;';
  8588. break;
  8589. case 3:
  8590. v.style += 'symbol=escalation;';
  8591. break;
  8592. case 4:
  8593. v.style += 'symbol=conditional;';
  8594. break;
  8595. case 5:
  8596. v.style += 'symbol=link;';
  8597. break;
  8598. case 6:
  8599. v.style += 'symbol=error;';
  8600. break;
  8601. case 7:
  8602. v.style += 'symbol=cancel;';
  8603. break;
  8604. case 8:
  8605. v.style += 'symbol=compensation;';
  8606. break;
  8607. case 9:
  8608. v.style += 'symbol=signal;';
  8609. break;
  8610. case 10:
  8611. v.style += 'symbol=multiple;';
  8612. break;
  8613. case 11:
  8614. v.style += 'symbol=parallelMultiple;';
  8615. break;
  8616. case 12:
  8617. v.style += 'symbol=terminate;';
  8618. break;
  8619. }
  8620. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8621. break;
  8622. case 'BPMNChoreography' :
  8623. try
  8624. {
  8625. var st = getColor(p.FillColor);
  8626. var darkerClr = getDarkerClr(st, 0.75);
  8627. var fz = getFontSize(p.Name).match(/\d+/);
  8628. var th = Math.max(mxUtils.getSizeForString(p.Name.t, fz? fz[0] : defaultFontSize, null, w - 10).height, 24);
  8629. st = 'swimlaneFillColor=' + darkerClr + ';'
  8630. v.value = convertText(p.Name);
  8631. v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;' + st +
  8632. 'startSize=' + th + ';spacingLeft=3;spacingRight=3;fontStyle=0;' +
  8633. getLabelStyle(p.Name, isLastLblHTML);
  8634. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8635. var curY = th;
  8636. var fz = getFontSize(p.TaskName).match(/\d+/);
  8637. var curH = p.TaskHeight? p.TaskHeight * scale : Math.max(mxUtils.getSizeForString(p.TaskName.t, fz? fz[0] : defaultFontSize, null, w - 10).height + 15, 24);
  8638. var task = new mxCell('', new mxGeometry(0, curY, w, curH), 'part=1;html=1;resizeHeight=0;spacingTop=-1;spacingLeft=3;spacingRight=3;');
  8639. task.value = convertText(p.TaskName);
  8640. task.vertex = true;
  8641. v.insert(task);
  8642. task.style += getLabelStyle(p.TaskName, isLastLblHTML);
  8643. task.style += addAllStyles(task.style, p, a, task, isLastLblHTML);
  8644. curY += curH;
  8645. var item = [];
  8646. for (var i = 0; i < p.Fields; i++)
  8647. {
  8648. var pTxt = p['Participant' + (i + 1)];
  8649. var fz = getFontSize(pTxt).match(/\d+/);
  8650. var curH = Math.max(mxUtils.getSizeForString(pTxt.t, fz? fz[0] : defaultFontSize, null, w - 10).height, 24);
  8651. item[i] = new mxCell('', new mxGeometry(0, curY, w, curH), 'part=1;html=1;resizeHeight=0;fillColor=none;spacingTop=-1;spacingLeft=3;spacingRight=3;');
  8652. curY += curH;
  8653. item[i].vertex = true;
  8654. v.insert(item[i]);
  8655. item[i].style += getLabelStyle(pTxt, isLastLblHTML);
  8656. item[i].style += addAllStyles(item[i].style, p, a, item[i], isLastLblHTML);
  8657. item[i].value = convertText(pTxt);
  8658. }
  8659. /*
  8660. TODO: Add support for the following
  8661. "bpmnChoreographyType": 0, //Plus sign
  8662. "initiatingMessage": 0, //Envelop before
  8663. "responseMessage": 0, //Envelop after
  8664. */
  8665. }
  8666. catch(e)
  8667. {
  8668. //Ignore
  8669. console.log(e);
  8670. }
  8671. break;
  8672. case 'BPMNConversation' :
  8673. v.style += 'shape=hexagon;perimeter=hexagonPerimeter2;';
  8674. v.value = convertText(p.Text);
  8675. if (p.bpmnConversationType == 0)
  8676. {
  8677. v.style += getStrokeWidth(p);
  8678. }
  8679. else
  8680. {
  8681. v.style += 'strokeWidth=2;';
  8682. }
  8683. if (p.bpmnIsSubConversation)
  8684. {
  8685. var item1 = new mxCell('', new mxGeometry(0.5, 1, 12, 12), 'shape=plus;part=1;');
  8686. item1.geometry.offset = new mxPoint(-6, -17);
  8687. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8688. item1.geometry.relative = true;
  8689. item1.vertex = true;
  8690. v.insert(item1);
  8691. }
  8692. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8693. break;
  8694. case 'BPMNGateway' :
  8695. v.style += 'shape=mxgraph.bpmn.shape;perimeter=rhombusPerimeter;background=gateway;verticalLabelPosition=bottom;verticalAlign=top;';
  8696. switch (p.bpmnGatewayType)
  8697. {
  8698. case 0:
  8699. v.style += 'outline=none;symbol=general;';
  8700. break;
  8701. case 1:
  8702. v.style += 'outline=none;symbol=exclusiveGw;';
  8703. break;
  8704. case 2:
  8705. v.style += 'outline=catching;symbol=multiple;';
  8706. break;
  8707. case 3:
  8708. v.style += 'outline=none;symbol=parallelGw;';
  8709. break;
  8710. case 4:
  8711. v.style += 'outline=end;symbol=general;';
  8712. break;
  8713. case 5:
  8714. v.style += 'outline=standard;symbol=multiple;';
  8715. break;
  8716. case 6:
  8717. v.style += 'outline=none;symbol=complexGw;';
  8718. break;
  8719. case 7:
  8720. v.style += 'outline=standard;symbol=parallelMultiple;';
  8721. break;
  8722. }
  8723. v.style += addAllStyles(v.style, p, a, v);
  8724. v.value = convertText(p.Text);
  8725. v.style += getLabelStyle(p, isLastLblHTML);
  8726. break;
  8727. case 'BPMNData' :
  8728. v.style += 'shape=note;size=14;';
  8729. switch (p.bpmnDataType)
  8730. {
  8731. case 0:
  8732. v.value = convertText(p.Text);
  8733. if (p.Text && !p.Text.t)
  8734. {
  8735. p.Text.t = ' '; //Such that Title is catched and added later!
  8736. }
  8737. break;
  8738. case 1:
  8739. var item1 = new mxCell('', new mxGeometry(0.5, 1, 12, 10), 'shape=parallelMarker;part=1;');
  8740. item1.geometry.offset = new mxPoint(-6, -15);
  8741. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8742. item1.geometry.relative = true;
  8743. item1.vertex = true;
  8744. v.insert(item1);
  8745. break;
  8746. case 2:
  8747. var item1 = new mxCell('', new mxGeometry(0, 0, 12, 10), 'shape=singleArrow;part=1;arrowWidth=0.4;arrowSize=0.4;');
  8748. item1.geometry.offset = new mxPoint(3, 3);
  8749. item1.style += getFillColor(p, a) + getStrokeColor(p, a);
  8750. item1.geometry.relative = true;
  8751. item1.vertex = true;
  8752. v.insert(item1);
  8753. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  8754. var text1 = new mxCell('', new mxGeometry(0, 0, w, 20), 'strokeColor=none;fillColor=none;');
  8755. text1.geometry.offset = new mxPoint(0, 14);
  8756. text1.geometry.relative = true;
  8757. text1.vertex = true;
  8758. v.insert(text1);
  8759. text1.value = convertText(p.Text);
  8760. text1.style += getLabelStyle(p, isLastLblHTML);
  8761. break;
  8762. case 3:
  8763. var item1 = new mxCell('', new mxGeometry(0, 0, 12, 10), 'shape=singleArrow;part=1;arrowWidth=0.4;arrowSize=0.4;');
  8764. item1.geometry.offset = new mxPoint(3, 3);
  8765. item1.style += getStrokeColor(p, a);
  8766. item1.geometry.relative = true;
  8767. item1.vertex = true;
  8768. v.insert(item1);
  8769. var fc = getStrokeColor(p, a);
  8770. fc = fc.replace('strokeColor', 'fillColor');
  8771. if (fc == '')
  8772. {
  8773. fc = 'fillColor=#000000;'
  8774. }
  8775. item1.style += fc;
  8776. var text1 = new mxCell('', new mxGeometry(0, 0, w, 20), 'strokeColor=none;fillColor=none;');
  8777. text1.geometry.offset = new mxPoint(0, 14);
  8778. text1.geometry.relative = true;
  8779. text1.vertex = true;
  8780. v.insert(text1);
  8781. text1.value = convertText(p.Text);
  8782. text1.style += getLabelStyle(p, isLastLblHTML);
  8783. break;
  8784. }
  8785. v.style += addAllStyles(v.style, p, a, v);
  8786. break;
  8787. case 'BPMNBlackPool' :
  8788. v.value = convertText(p.Text);
  8789. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8790. var item1 = new mxCell('', new mxGeometry(0, 0, w, h), 'fillColor=#000000;strokeColor=none;opacity=30;');
  8791. item1.vertex = true;
  8792. v.insert(item1);
  8793. break;
  8794. case 'DFDExternalEntityBlock' :
  8795. v.style += 'strokeColor=none;fillColor=none;';
  8796. v.style += addAllStyles(v.style, p, a, v);
  8797. var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.95, h * 0.95), 'part=1;');
  8798. item1.vertex = true;
  8799. v.insert(item1);
  8800. item1.style += addAllStyles(item1.style, p, a, item1);
  8801. var item2 = new mxCell('', new mxGeometry(w * 0.05, h * 0.05, w * 0.95, h * 0.95), 'part=1;');
  8802. item2.vertex = true;
  8803. v.insert(item2);
  8804. item2.value = convertText(p.Text);
  8805. item2.style +=
  8806. getLabelStyle(p.Text, isLastLblHTML);
  8807. item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML);
  8808. break;
  8809. case 'GSDFDDataStoreBlock' :
  8810. v.value = convertText(p.Text);
  8811. v.style += 'shape=partialRectangle;right=0;' +
  8812. getLabelStyle(p.Text, isLastLblHTML);
  8813. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8814. var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.2, h), 'part=1;');
  8815. item1.vertex = true;
  8816. v.insert(item1);
  8817. item1.value = convertText(p.Number);
  8818. item1.style +=
  8819. getLabelStyle(p.Number, isLastLblHTML);
  8820. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  8821. break;
  8822. case 'OrgBlock' :
  8823. var lbls = '';
  8824. for (var key in p.Active)
  8825. {
  8826. if (key == 'Photo' || !p.Active[key]) continue;
  8827. lbls += convertText(p[key], true);
  8828. }
  8829. if (p.Active.Photo)
  8830. {
  8831. var imgSize = w * 0.4;
  8832. v.style += 'spacingLeft=' + imgSize + ';imageWidth=' + (imgSize - 4) + ';imageHeight=' + (imgSize - 4) +
  8833. ';imageAlign=left;imageVerticalAlign=top;image=' + mapImgUrl(p.Photo);
  8834. }
  8835. v.value = lbls;
  8836. v.style += addAllStyles(v.style, p, a, v, true);
  8837. break;
  8838. case 'DefaultTableBlock' :
  8839. try
  8840. {
  8841. var rowsNum = p.RowHeights.length;
  8842. var colsNum = p.ColWidths.length;
  8843. var rowHs = [], colWs = [];
  8844. for (var i = 0; i < rowsNum; i++)
  8845. {
  8846. rowHs[i] = p.RowHeights[i] * scale;
  8847. }
  8848. for (var j = 0; j < colsNum; j++)
  8849. {
  8850. colWs[j] = p.ColWidths[j] * scale;
  8851. }
  8852. //TODO Apply table layout when it's ready
  8853. v.style = groupStyle;
  8854. var bandedClr1 = p['BandedColor1'];
  8855. var bandedClr2 = p['BandedColor2'];
  8856. var bandedRows = p['BandedRows'];
  8857. var bandedCols = p['BandedCols'];
  8858. var hideH = p['HideH'];
  8859. var hideV = p['HideV'];
  8860. var tblVAlign = p['TextVAlign'];
  8861. var tblFillClr = p['FillColor'];
  8862. var tblStrokeStyle = p['StrokeStyle'];
  8863. delete p['StrokeStyle'];
  8864. var tblFillOp = getOpacity2(tblFillClr, 'fillOpacity');
  8865. var tblLnClr = p['LineColor'];
  8866. var tblLnOp = getOpacity2(tblLnClr, 'strokeOpacity');
  8867. var y = 0;
  8868. var skipCells = {};
  8869. for (var i = 0; i < rowsNum; i++)
  8870. {
  8871. var x = 0;
  8872. var h = rowHs[i];
  8873. for (var j = 0; j < colsNum; j++)
  8874. {
  8875. var cellIndex = i + ',' + j;
  8876. if (skipCells[cellIndex])
  8877. {
  8878. x += colWs[j];
  8879. continue;
  8880. }
  8881. var fillClr = p['CellFill_' + cellIndex];
  8882. var noBand = p['NoBand_' + cellIndex];
  8883. var spans = p['CellSize_' + cellIndex];
  8884. var cellLbl = p['Cell_' + cellIndex];
  8885. var vAlign = p['Cell_' + cellIndex + '_VAlign'];
  8886. var txtRot = p['Cell_' + cellIndex + '_TRotation'];
  8887. var borderWH = p['CellBorderWidthH_' + cellIndex];
  8888. var borderClrH = p['CellBorderColorH_' + cellIndex];
  8889. var borderStyleH = p['CellBorderStrokeStyleH_' + cellIndex];
  8890. var borderWV = p['CellBorderWidthV_' + cellIndex];
  8891. var borderClrV = p['CellBorderColorV_' + cellIndex];
  8892. var borderStyleV = p['CellBorderStrokeStyleV_' + cellIndex];
  8893. var borderClr = hideH? borderClrV : borderClrH; //TODO Border color, width & opacity in more complex especially with different border color for horizontal and vertical
  8894. var lnOp = getOpacity2(borderClr, 'strokeOpacity');
  8895. var borderW = hideH? borderWV : borderWH;
  8896. var borderStyle = hideH? borderStyleV : borderStyleH;
  8897. fillClr = bandedRows && !noBand? (i % 2 == 0? bandedClr1: (bandedCols && !noBand?
  8898. (j % 2 == 0? bandedClr1 : bandedClr2) : bandedClr2)) : (bandedCols && !noBand?
  8899. (j % 2 == 0? bandedClr1 : bandedClr2) : fillClr);
  8900. var fillOp = getOpacity2(fillClr, 'fillOpacity') || tblFillOp;
  8901. var w = colWs[j];
  8902. var ch = h;
  8903. var cw = w;
  8904. //Spans
  8905. for (var k = i + 1; k < i + spans.h; k++)
  8906. {
  8907. if (rowHs[k] == null) continue;
  8908. ch += rowHs[k];
  8909. skipCells[k + ',' + j] = true;
  8910. for (var l = j + 1; l < j + spans.w; l++)
  8911. {
  8912. skipCells[k + ',' + l] = true;
  8913. }
  8914. }
  8915. for (var k = j + 1; k < j + spans.w; k++)
  8916. {
  8917. if (colWs[k] == null) continue;
  8918. cw += colWs[k];
  8919. skipCells[i + ',' + k] = true;
  8920. for (var l = i + 1; l < i + spans.h; l++)
  8921. {
  8922. skipCells[l + ',' + k] = true;
  8923. }
  8924. }
  8925. var cell = new mxCell('', new mxGeometry(x, y, cw, ch), 'shape=partialRectangle;html=1;whiteSpace=wrap;connectable=0;'
  8926. + (hideV? 'left=0;right=0;' : '') + (hideH? 'top=0;bottom=0;' : '')
  8927. + getFillColor({FillColor: fillClr || tblFillClr})
  8928. + createStyle(mxConstants.STYLE_STROKECOLOR, getColor(borderClr), getColor(tblLnClr))
  8929. + (borderW != null ? createStyle(mxConstants.STYLE_STROKEWIDTH, Math.round(parseFloat(borderW) * scale), '1') : '')
  8930. + (lnOp? lnOp : tblLnOp)
  8931. + fillOp
  8932. + 'verticalAlign=' + (vAlign? vAlign : (tblVAlign? tblVAlign : 'middle')) + ';'
  8933. + getStrokeStyle({StrokeStyle : borderStyle? borderStyle : (tblStrokeStyle? tblStrokeStyle : 'solid')})
  8934. + (txtRot? 'horizontal=0;' : ''));
  8935. cell.vertex = true;
  8936. cell.value = convertText(cellLbl);
  8937. cell.style +=
  8938. addAllStyles(cell.style, p, a, cell, isLastLblHTML) +
  8939. (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  8940. getFontSize(cellLbl) +
  8941. getFontColor(cellLbl) +
  8942. getFontStyle(cellLbl) +
  8943. getTextAlignment(cellLbl, cell) +
  8944. getTextLeftSpacing(cellLbl) +
  8945. getTextRightSpacing(cellLbl) +
  8946. getTextTopSpacing(cellLbl) +
  8947. getTextBottomSpacing(cellLbl)
  8948. ) +
  8949. getTextGlobalSpacing(cellLbl) +
  8950. getTextVerticalAlignment(cellLbl);
  8951. v.insert(cell);
  8952. x += w;
  8953. }
  8954. y += h;
  8955. }
  8956. }
  8957. catch(e)
  8958. {
  8959. console.log(e);
  8960. }
  8961. break;
  8962. case 'VSMDedicatedProcessBlock' :
  8963. case 'VSMProductionControlBlock' :
  8964. v.style += 'shape=mxgraph.lean_mapping.manufacturing_process;spacingTop=15;';
  8965. if (obj.Class == 'VSMDedicatedProcessBlock')
  8966. {
  8967. v.value = convertText(p.Text);
  8968. }
  8969. else if (obj.Class == 'VSMProductionControlBlock')
  8970. {
  8971. v.value = convertText(p.Resources);
  8972. }
  8973. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8974. if (obj.Class == 'VSMDedicatedProcessBlock')
  8975. {
  8976. var item1 = new mxCell('', new mxGeometry(0, 1, 11, 9), 'part=1;shape=mxgraph.lean_mapping.operator;');
  8977. item1.geometry.relative = true;
  8978. item1.geometry.offset = new mxPoint(4, -13);
  8979. item1.vertex = true;
  8980. v.insert(item1);
  8981. item1.style += addAllStyles(item1.style, p, a, item1);
  8982. }
  8983. var text1 = new mxCell('', new mxGeometry(0, 0, w, 15), 'strokeColor=none;fillColor=none;part=1;');
  8984. text1.vertex = true;
  8985. v.insert(text1);
  8986. text1.value = convertText(p.Title);
  8987. text1.style += getLabelStyle(p.Title, isLastLblHTML);
  8988. p.Text = null;
  8989. break;
  8990. case 'VSMSharedProcessBlock' :
  8991. v.style += 'shape=mxgraph.lean_mapping.manufacturing_process_shared;spacingTop=-5;verticalAlign=top;';
  8992. v.value = convertText(p.Text);
  8993. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  8994. var text1 = new mxCell('', new mxGeometry(w * 0.1, h * 0.3, w * 0.8, h * 0.6), 'part=1;');
  8995. text1.vertex = true;
  8996. v.insert(text1);
  8997. text1.value = convertText(p.Resource);
  8998. text1.style +=
  8999. getLabelStyle(p.Resource, isLastLblHTML);
  9000. text1.style += addAllStyles(text1.style, p, a, text1, isLastLblHTML);
  9001. break;
  9002. case 'VSMWorkcellBlock' :
  9003. v.style += 'shape=mxgraph.lean_mapping.work_cell;verticalAlign=top;spacingTop=-2;';
  9004. v.value = convertText(p.Text);
  9005. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9006. break;
  9007. case 'VSMSafetyBufferStockBlock' :
  9008. case 'VSMDatacellBlock' :
  9009. v.style += 'strokeColor=none;fillColor=none;';
  9010. v.style += addAllStyles(v.style, p, a, v);
  9011. var itemFullH = h;
  9012. var numItems = parseInt(p.Cells);
  9013. var st = addAllStyles('part=1;', p, a, v);
  9014. if (numItems > 0)
  9015. {
  9016. itemFullH = itemFullH / numItems;
  9017. }
  9018. var item = new Array();
  9019. var line = new Array();
  9020. for (var i = 1; i <= numItems; i++)
  9021. {
  9022. item[i] = new mxCell('', new mxGeometry(0, (i - 1) * itemFullH, w, itemFullH), st);
  9023. item[i].vertex = true;
  9024. v.insert(item[i]);
  9025. item[i].value = convertText(p["cell_" + i]);
  9026. item[i].style += getLabelStyle(p["cell_" + i], isLastLblHTML);
  9027. }
  9028. break;
  9029. case 'VSMInventoryBlock' :
  9030. v.style += 'shape=mxgraph.lean_mapping.inventory_box;verticalLabelPosition=bottom;verticalAlign=top;';
  9031. v.value = convertText(p.Text);
  9032. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9033. break;
  9034. case 'VSMSupermarketBlock' :
  9035. v.style += 'strokeColor=none;';
  9036. v.style += addAllStyles(v.style, p, a, v);
  9037. var itemFullH = h;
  9038. var numItems = parseInt(p.Cells);
  9039. var st = addAllStyles('part=1;fillColor=none;', p, a, v);
  9040. if (numItems > 0)
  9041. {
  9042. itemFullH = itemFullH / numItems;
  9043. }
  9044. var item = new Array();
  9045. var text = new Array();
  9046. for (var i = 1; i <= numItems; i++)
  9047. {
  9048. item[i] = new mxCell('', new mxGeometry(w * 0.5, (i - 1) * itemFullH, w * 0.5, itemFullH), 'shape=partialRectangle;left=0;' + st);
  9049. item[i].vertex = true;
  9050. v.insert(item[i]);
  9051. text[i] = new mxCell('', new mxGeometry(0, (i - 1) * itemFullH, w, itemFullH), 'strokeColor=none;fillColor=none;part=1;');
  9052. text[i].vertex = true;
  9053. v.insert(text[i]);
  9054. text[i].value = convertText(p["cell_" + i]);
  9055. text[i].style += getLabelStyle(p["cell_" + i], isLastLblHTML);
  9056. }
  9057. break;
  9058. case 'VSMFIFOLaneBlock' :
  9059. v.style += 'shape=mxgraph.lean_mapping.fifo_sequence_flow;fontStyle=0;fontSize=18';
  9060. v.style += addAllStyles(v.style, p, a, v);
  9061. v.value = 'FIFO';
  9062. break;
  9063. case 'VSMGoSeeProductionBlock' :
  9064. v.style += 'shape=ellipse;perimeter=ellipsePerimeter;';
  9065. v.value = convertText(p.Text);
  9066. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9067. 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;');
  9068. item1.vertex = true;
  9069. v.insert(item1);
  9070. item1.style += addAllStyles(item1.style, p, a, item1);
  9071. break;
  9072. case 'VSMProductionKanbanBatchBlock' :
  9073. v.style += 'strokeColor=none;fillColor=none;'
  9074. var st = 'shape=card;size=18;flipH=1;part=1;';
  9075. 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);
  9076. item1.vertex = true;
  9077. v.insert(item1);
  9078. item1.style += addAllStyles(item1.style, p, a, item1);
  9079. 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);
  9080. item2.vertex = true;
  9081. v.insert(item2);
  9082. item2.style += addAllStyles(item2.style, p, a, item2);
  9083. 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);
  9084. item3.vertex = true;
  9085. v.insert(item3);
  9086. item3.value = convertText(p.Text);
  9087. item3.style += addAllStyles(item3.style, p, a, item3, isLastLblHTML);
  9088. break;
  9089. case 'VSMElectronicInformationArrow' :
  9090. v.style = 'group;';
  9091. v.value = convertText(p.Title);
  9092. v.style += getLabelStyle(p.Title, isLastLblHTML);
  9093. 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;');
  9094. edge.edge = true;
  9095. edge.geometry.relative = 1;
  9096. graph.addCell(edge, v, null, v, v);
  9097. break;
  9098. case 'AWSRoundedRectangleContainerBlock2' :
  9099. case 'AWSRoundedRectangleContainerBlock' :
  9100. v.style += 'strokeColor=none;fillColor=none;';
  9101. if (p.Spotfleet)
  9102. {
  9103. 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;');
  9104. item1.geometry.offset = new mxPoint(0, 20);
  9105. item1.geometry.relative = true;
  9106. item1.vertex = true;
  9107. v.insert(item1);
  9108. item1.value = convertText(p.Title);
  9109. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  9110. var item2 = new mxCell('', new mxGeometry(0, 0, 35, 40), 'strokeColor=none;shape=mxgraph.aws3.spot_instance;fillColor=#f58536;');
  9111. item2.geometry.relative = true;
  9112. item2.geometry.offset = new mxPoint(30, 0);
  9113. item2.vertex = true;
  9114. v.insert(item2);
  9115. }
  9116. else if (p.Beanstalk)
  9117. {
  9118. 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;');
  9119. item1.geometry.offset = new mxPoint(0, 20);
  9120. item1.geometry.relative = true;
  9121. item1.vertex = true;
  9122. v.insert(item1);
  9123. item1.value = convertText(p.Title);
  9124. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  9125. var item2 = new mxCell('', new mxGeometry(0, 0, 30, 40), 'strokeColor=none;shape=mxgraph.aws3.elastic_beanstalk;fillColor=#759C3E;');
  9126. item2.geometry.relative = true;
  9127. item2.geometry.offset = new mxPoint(30, 0);
  9128. item2.vertex = true;
  9129. v.insert(item2);
  9130. }
  9131. else if (p.EC2)
  9132. {
  9133. 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;');
  9134. item1.geometry.offset = new mxPoint(0, 20);
  9135. item1.geometry.relative = true;
  9136. item1.vertex = true;
  9137. v.insert(item1);
  9138. item1.value = convertText(p.Title);
  9139. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  9140. var item2 = new mxCell('', new mxGeometry(0, 0, 32, 40), 'strokeColor=none;shape=mxgraph.aws3.ec2;fillColor=#F58534;');
  9141. item2.geometry.relative = true;
  9142. item2.geometry.offset = new mxPoint(30, 0);
  9143. item2.vertex = true;
  9144. v.insert(item2);
  9145. }
  9146. else if (p.Subnet)
  9147. {
  9148. 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;');
  9149. item1.geometry.offset = new mxPoint(0, 20);
  9150. item1.geometry.relative = true;
  9151. item1.vertex = true;
  9152. v.insert(item1);
  9153. item1.value = convertText(p.Title);
  9154. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  9155. var item2 = new mxCell('', new mxGeometry(0, 0, 32, 40), 'strokeColor=none;shape=mxgraph.aws3.permissions;fillColor=#146EB4;');
  9156. item2.geometry.relative = true;
  9157. item2.geometry.offset = new mxPoint(30, 0);
  9158. item2.vertex = true;
  9159. v.insert(item2);
  9160. }
  9161. else if (p.VPC)
  9162. {
  9163. 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;');
  9164. item1.geometry.offset = new mxPoint(0, 20);
  9165. item1.geometry.relative = true;
  9166. item1.vertex = true;
  9167. v.insert(item1);
  9168. item1.value = convertText(p.Title);
  9169. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  9170. var item2 = new mxCell('', new mxGeometry(0, 0, 60, 40), 'strokeColor=none;shape=mxgraph.aws3.virtual_private_cloud;fillColor=#146EB4;');
  9171. item2.geometry.relative = true;
  9172. item2.geometry.offset = new mxPoint(30, 0);
  9173. item2.vertex = true;
  9174. v.insert(item2);
  9175. }
  9176. else if (p.AWS)
  9177. {
  9178. 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;');
  9179. item1.geometry.offset = new mxPoint(0, 20);
  9180. item1.geometry.relative = true;
  9181. item1.vertex = true;
  9182. v.insert(item1);
  9183. item1.value = convertText(p.Title);
  9184. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  9185. var item2 = new mxCell('', new mxGeometry(0, 0, 60, 40), 'strokeColor=none;shape=mxgraph.aws3.cloud;fillColor=#F58534;');
  9186. item2.geometry.relative = true;
  9187. item2.geometry.offset = new mxPoint(30, 0);
  9188. item2.vertex = true;
  9189. v.insert(item2);
  9190. }
  9191. else if (p.Corporate)
  9192. {
  9193. 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;');
  9194. item1.geometry.offset = new mxPoint(0, 20);
  9195. item1.geometry.relative = true;
  9196. item1.vertex = true;
  9197. v.insert(item1);
  9198. item1.value = convertText(p.Title);
  9199. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  9200. var item2 = new mxCell('', new mxGeometry(0, 0, 25, 40), 'strokeColor=none;shape=mxgraph.aws3.corporate_data_center;fillColor=#7D7C7C;');
  9201. item2.geometry.relative = true;
  9202. item2.geometry.offset = new mxPoint(30, 0);
  9203. item2.vertex = true;
  9204. v.insert(item2);
  9205. }
  9206. else
  9207. {
  9208. v.style = 'resizeWidth=1;resizeHeight=1;fillColor=none;align=center;verticalAlign=bottom;spacing=2;rounded=1;arcSize=10;';
  9209. v.value = convertText(p.Title);
  9210. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9211. }
  9212. break;
  9213. case 'AWSElasticComputeCloudBlock2' :
  9214. v.style += 'strokeColor=none;shape=mxgraph.aws3.ec2;verticalLabelPosition=bottom;align=center;verticalAlign=top;';
  9215. v.value = convertText(p.Title);
  9216. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9217. break;
  9218. case 'AWSRoute53Block2' :
  9219. v.style += 'strokeColor=none;shape=mxgraph.aws3.route_53;verticalLabelPosition=bottom;align=center;verticalAlign=top;';
  9220. v.value = convertText(p.Title);
  9221. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9222. break;
  9223. case 'AWSRDBSBlock2' :
  9224. v.style += 'strokeColor=none;shape=mxgraph.aws3.rds;verticalLabelPosition=bottom;align=center;verticalAlign=top;';
  9225. v.value = convertText(p.Title);
  9226. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9227. break;
  9228. case 'NET_RingNetwork' :
  9229. v.style += 'strokeColor=none;fillColor=none;';
  9230. 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;');
  9231. cell.vertex = true;
  9232. v.insert(cell);
  9233. var cells = [cell];
  9234. cell.style += getFillColor(p, a);
  9235. var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=none;rounded=0;endArrow=none;dashed=0;html=1;strokeColor=#29AAE1;strokeWidth=2;');
  9236. edge.geometry.relative = true;
  9237. edge.edge = true;
  9238. addRouterEdge(w * 0.5, 0, edge, select, graph, cells, v, cell);
  9239. addRouterEdge(w * 0.855, h * 0.145, edge, select, graph, cells, v, cell);
  9240. addRouterEdge(w, h * 0.5, edge, select, graph, cells, v, cell);
  9241. addRouterEdge(w * 0.855, h * 0.855, edge, select, graph, cells, v, cell);
  9242. addRouterEdge(w * 0.5, h, edge, select, graph, cells, v, cell);
  9243. addRouterEdge(w * 0.145, h * 0.855, edge, select, graph, cells, v, cell);
  9244. addRouterEdge(0, h * 0.5, edge, select, graph, cells, v, cell);
  9245. addRouterEdge(w * 0.145, h * 0.145, edge, select, graph, cells, v, cell);
  9246. break;
  9247. case 'NET_Ethernet' :
  9248. v.style += 'strokeColor=none;fillColor=none;';
  9249. 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;');
  9250. cell.vertex = true;
  9251. v.insert(cell);
  9252. var cells = [cell];
  9253. var edge = new mxCell('', new mxGeometry(0, 0, 0, 0), 'strokeColor=#29AAE1;edgeStyle=none;rounded=0;endArrow=none;html=1;strokeWidth=2;');
  9254. edge.geometry.relative = true;
  9255. edge.edge = true;
  9256. var cells = [cell];
  9257. var stepX = w / p.NumTopNodes;
  9258. for (var i = 0; i < p.NumTopNodes; i++)
  9259. {
  9260. addRouterEdge(stepX * 0.5 + i * stepX, 0, edge, select, graph, cells, v, cell);
  9261. }
  9262. stepX = w / p.NumBottomNodes;
  9263. for (var i = 0; i < p.NumBottomNodes; i++)
  9264. {
  9265. addRouterEdge(stepX * 0.5 + i * stepX, h, edge, select, graph, cells, v, cell);
  9266. }
  9267. break;
  9268. case 'EE_OpAmp' :
  9269. v.style += 'shape=mxgraph.electrical.abstract.operational_amp_1;';
  9270. v.value = convertText(p.Title);
  9271. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9272. if (p.ToggleCharge)
  9273. {
  9274. v.style += 'flipV=1;';
  9275. }
  9276. break;
  9277. case 'EIMessageChannelBlock' :
  9278. case 'EIDatatypeChannelBlock' :
  9279. case 'EIInvalidMessageChannelBlock' :
  9280. case 'EIDeadLetterChannelBlock' :
  9281. case 'EIGuaranteedDeliveryBlock' :
  9282. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9283. v.value = convertText(p.Text);
  9284. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9285. if (obj.Class == 'EIMessageChannelBlock')
  9286. {
  9287. var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.messageChannel;fillColor=#818181;part=1;');
  9288. item1.geometry.offset = new mxPoint( - w * 0.45, 0);
  9289. }
  9290. else if (obj.Class == 'EIDatatypeChannelBlock')
  9291. {
  9292. var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.dataChannel;fillColor=#818181;part=1;');
  9293. item1.geometry.offset = new mxPoint( - w * 0.45, 0);
  9294. }
  9295. else if (obj.Class == 'EIInvalidMessageChannelBlock')
  9296. {
  9297. var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.invalidMessageChannel;fillColor=#818181;part=1;');
  9298. item1.geometry.offset = new mxPoint( - w * 0.45, 0);
  9299. }
  9300. else if (obj.Class == 'EIDeadLetterChannelBlock')
  9301. {
  9302. var item1 = new mxCell('', new mxGeometry(0.5, 0.5, w * 0.9, 20), 'shape=mxgraph.eip.deadLetterChannel;fillColor=#818181;part=1;');
  9303. item1.geometry.offset = new mxPoint( - w * 0.45, 0);
  9304. }
  9305. else if (obj.Class == 'EIGuaranteedDeliveryBlock')
  9306. {
  9307. var item1 = new mxCell('', new mxGeometry(0.5, 0.5, 20, 27), 'shape=cylinder;fillColor=#818181;part=1;');
  9308. item1.geometry.offset = new mxPoint( -10, -7);
  9309. }
  9310. item1.geometry.relative = true;
  9311. item1.vertex = true;
  9312. v.insert(item1);
  9313. item1.style += addAllStyles(item1.style, p, a, item1);
  9314. 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;');
  9315. edge.geometry.relative = true;
  9316. edge.edge = true;
  9317. addFloatingEdge(w * 0.15, h * 0.25, w * 0.85, h * 0.25, edge, select, graph, cells, v, cell);
  9318. break;
  9319. case 'EIChannelAdapterBlock' :
  9320. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9321. v.value = convertText(p.Text);
  9322. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9323. var item1 = new mxCell('', new mxGeometry(0, h * 0.07, w * 0.21, h * 0.86), 'fillColor=#FFFF33;part=1;');
  9324. item1.vertex = true;
  9325. v.insert(item1);
  9326. item1.style += addAllStyles(item1.style, p, a, item1);
  9327. 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;');
  9328. item2.vertex = true;
  9329. v.insert(item2);
  9330. item2.style += addAllStyles(item2.style, p, a, item2);
  9331. var item3 = new mxCell('', new mxGeometry(1, 0.5, w * 0.35, 20), 'shape=mxgraph.eip.messageChannel;fillColor=#818181;part=1;');
  9332. item3.geometry.relative = true;
  9333. item3.geometry.offset = new mxPoint( - w * 0.4, -10);
  9334. item3.vertex = true;
  9335. v.insert(item3);
  9336. item3.style += addAllStyles(item3.style, p, a, item3);
  9337. 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;');
  9338. edge1.geometry.relative = true;
  9339. edge1.edge = true;
  9340. item1.insertEdge(edge1, true);
  9341. item2.insertEdge(edge1, false);
  9342. edge1.style += getStrokeColor(p, a);
  9343. select.push(graph.addCell(edge1, null, null, null, null));
  9344. 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;');
  9345. edge2.geometry.relative = true;
  9346. edge2.edge = true;
  9347. item2.insertEdge(edge2, true);
  9348. item3.insertEdge(edge2, false);
  9349. select.push(graph.addCell(edge2, null, null, null, null));
  9350. break;
  9351. case 'EIMessageBlock' :
  9352. case 'EICommandMessageBlock' :
  9353. case 'EIDocumentMessageBlock' :
  9354. case 'EIEventMessageBlock' :
  9355. v.style += 'strokeColor=none;fillColor=none;verticalLabelPosition=bottom;verticalAlign=top;';
  9356. v.value = convertText(p.Text);
  9357. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9358. var item1 = new mxCell('', new mxGeometry(0, 0, 17, 17), 'ellipse;fillColor=#808080;part=1;');
  9359. item1.vertex = true;
  9360. v.insert(item1);
  9361. item1.style += addAllStyles(item1.style, p, a, item1);
  9362. var messagesNum = p.Messages;
  9363. var oneH = (h - 17) / messagesNum;
  9364. var item2 = new Array();
  9365. var edge = new Array();
  9366. for (var i = 0; i < messagesNum; i++)
  9367. {
  9368. var currY = oneH * (i + 1) - 3;
  9369. item2[i] = new mxCell('', new mxGeometry(w - 20, currY, 20, 20), 'part=1;');
  9370. item2[i].vertex = true;
  9371. v.insert(item2[i]);
  9372. switch(obj.Class)
  9373. {
  9374. case 'EIMessageBlock' :
  9375. item2[i].value = convertText(p['message_' + (i + 1)]);
  9376. item2.style += getLabelStyle(p['message_' + (i + 1)], isLastLblHTML);
  9377. break;
  9378. case 'EICommandMessageBlock' :
  9379. item2[i].value = 'C';
  9380. item2[i].style += 'fontStyle=1;fontSize=' + defaultFontSize + ';';
  9381. break;
  9382. case 'EIDocumentMessageBlock' :
  9383. item2[i].value = 'D';
  9384. item2[i].style += 'fontStyle=1;fontSize=' + defaultFontSize + ';';
  9385. break;
  9386. case 'EIEventMessageBlock' :
  9387. item2[i].value = 'E';
  9388. item2[i].style += 'fontStyle=1;fontSize=' + defaultFontSize + ';';
  9389. break;
  9390. }
  9391. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  9392. 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;');
  9393. edge[i].geometry.relative = true;
  9394. edge[i].edge = true;
  9395. item1.insertEdge(edge[i], false);
  9396. item2[i].insertEdge(edge[i], true);
  9397. edge[i].style += addAllStyles(edge[i].style, p, a, edge[i]);
  9398. var wp = new Array();
  9399. wp.push(new mxPoint(x + 8.5, y + currY + 10));
  9400. edge[i].geometry.points = wp;
  9401. select.push(graph.addCell(edge[i], null, null, null, null));
  9402. }
  9403. break;
  9404. case 'EIMessageEndpointBlock' :
  9405. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9406. v.value = convertText(p.Text);
  9407. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9408. var item1 = new mxCell('', new mxGeometry(w * 0.45, h * 0.25, w * 0.3, h * 0.5), 'part=1;fillColor=#ffffff');
  9409. item1.vertex = true;
  9410. v.insert(item1);
  9411. item1.style += addAllStyles(item1.style, p, a, item1);
  9412. 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;');
  9413. edge.geometry.relative = true;
  9414. edge.edge = true;
  9415. addFloatingEdge(0, h * 0.5, w * 0.4, h * 0.5, edge, select, graph, cells, v, cell);
  9416. break;
  9417. case 'EIPublishSubscribeChannelBlock' :
  9418. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9419. v.value = convertText(p.Text);
  9420. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9421. 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;');
  9422. edge1.geometry.relative = true;
  9423. edge1.edge = true;
  9424. addFloatingEdge(w * 0.05, h * 0.5, w * 0.85, h * 0.5, edge1, select, graph, cells, v, cell);
  9425. 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;');
  9426. edge2.geometry.relative = true;
  9427. edge2.edge = true;
  9428. addFloatingEdge(w * 0.05, h * 0.5, w * 0.85, h * 0.15, edge2, select, graph, cells, v, cell);
  9429. 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;');
  9430. edge3.geometry.relative = true;
  9431. edge3.edge = true;
  9432. addFloatingEdge(w * 0.05, h * 0.5, w * 0.85, h * 0.85, edge3, select, graph, cells, v, cell);
  9433. break;
  9434. case 'EIMessageBusBlock' :
  9435. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9436. v.value = convertText(p.Text);
  9437. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9438. 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;');
  9439. edge1.geometry.relative = true;
  9440. edge1.edge = true;
  9441. edge1.style += getStrokeColor(p, a);
  9442. addFloatingEdge(w * 0.05, h * 0.5, w * 0.95, h * 0.5, edge1, select, graph, cells, v, cell);
  9443. 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;');
  9444. edge2.geometry.relative = true;
  9445. edge2.edge = true;
  9446. edge2.style += getStrokeColor(p, a);
  9447. addFloatingEdge(w * 0.3, h * 0.1, w * 0.3, h * 0.5, edge2, select, graph, cells, v, cell);
  9448. 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;');
  9449. edge3.geometry.relative = true;
  9450. edge3.edge = true;
  9451. edge3.style += getStrokeColor(p, a);
  9452. addFloatingEdge(w * 0.7, h * 0.1, w * 0.7, h * 0.5, edge3, select, graph, cells, v, cell);
  9453. 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;');
  9454. edge4.geometry.relative = true;
  9455. edge4.edge = true;
  9456. edge4.style += getStrokeColor(p, a);
  9457. addFloatingEdge(w * 0.5, h * 0.5, w * 0.5, h * 0.9, edge4, select, graph, cells, v, cell);
  9458. break;
  9459. case 'EIRequestReplyBlock' :
  9460. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9461. v.value = convertText(p.Text);
  9462. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9463. var item1 = new mxCell('', new mxGeometry(w * 0.2, h * 0.21, w * 0.16, h * 0.24), 'part=1;fillColor=#ffffff;');
  9464. item1.vertex = true;
  9465. v.insert(item1);
  9466. item1.style += addAllStyles(item1.style, p, a, item1);
  9467. 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;');
  9468. edge1.geometry.relative = true;
  9469. edge1.edge = true;
  9470. addFloatingEdge(w * 0.45, h * 0.33, w * 0.8, h * 0.33, edge1, select, graph, cells, v, cell);
  9471. var item2 = new mxCell('', new mxGeometry(w * 0.64, h * 0.55, w * 0.16, h * 0.24), 'part=1;fillColor=#ffffff;');
  9472. item2.vertex = true;
  9473. v.insert(item2);
  9474. item2.style += addAllStyles(item2.style, p, a, item2);
  9475. 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;');
  9476. edge2.geometry.relative = true;
  9477. edge2.edge = true;
  9478. addFloatingEdge(w * 0.55, h * 0.67, w * 0.2, h * 0.67, edge2, select, graph, cells, v, cell);
  9479. break;
  9480. case 'EIReturnAddressBlock' :
  9481. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9482. v.value = convertText(p.Text);
  9483. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9484. 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;');
  9485. item1.vertex = true;
  9486. v.insert(item1);
  9487. item1.style += addAllStyles(item1.style, p, a, item1);
  9488. break;
  9489. case 'EICorrelationIDBlock' :
  9490. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9491. v.value = convertText(p.Text);
  9492. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9493. var item1 = new mxCell('', new mxGeometry(w * 0.04, h * 0.06, w * 0.18, h * 0.28), 'ellipse;fillColor=#808080;part=1;');
  9494. item1.vertex = true;
  9495. v.insert(item1);
  9496. item1.style += addAllStyles(item1.style, p, a, item1);
  9497. item2 = new mxCell('', new mxGeometry(w * 0.2, h * 0.56, w * 0.2, h * 0.32), 'part=1;');
  9498. item2.vertex = true;
  9499. v.insert(item2);
  9500. item2.value = 'A';
  9501. item2.style += 'fontStyle=1;fontSize=' + defaultFontSize + ';';
  9502. item1.style += addAllStyles(item1.style, p, a, item1);
  9503. 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;');
  9504. edge1.geometry.relative = true;
  9505. edge1.edge = true;
  9506. item1.insertEdge(edge1, false);
  9507. item2.insertEdge(edge1, true);
  9508. edge1.style += addAllStyles(edge1.style, p, a, edge1);
  9509. var wp = new Array();
  9510. wp.push(new mxPoint(x + w * 0.13, y + h * 0.72));
  9511. edge1.geometry.points = wp;
  9512. select.push(graph.addCell(edge1, null, null, null, null));
  9513. var item3 = new mxCell('', new mxGeometry(w * 0.6, h * 0.06, w * 0.18, h * 0.28), 'ellipse;fillColor=#808080;part=1;');
  9514. item3.vertex = true;
  9515. v.insert(item3);
  9516. item3.style +=
  9517. getStrokeColor(p, a) +
  9518. getStrokeWidth(p);
  9519. item3.style += addAllStyles(item3.style, p, a, item3);
  9520. item4 = new mxCell('', new mxGeometry(w * 0.76, h * 0.56, w * 0.2, h * 0.32), 'part=1;');
  9521. item4.vertex = true;
  9522. v.insert(item4);
  9523. item4.style +=
  9524. getStrokeColor(p, a) +
  9525. getOpacity(p, a, item4) +
  9526. getStrokeWidth(p) +
  9527. getStrokeStyle(p);
  9528. item4.value = 'B';
  9529. item4.style += 'fontStyle=1;fontSize=' + defaultFontSize + ';fillColor=#ffffff;';
  9530. item4.style += addAllStyles(item4.style, p, a, item4);
  9531. 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;');
  9532. edge2.geometry.relative = true;
  9533. edge2.edge = true;
  9534. item3.insertEdge(edge2, false);
  9535. item4.insertEdge(edge2, true);
  9536. edge2.style += addAllStyles(edge2.style, p, a, edge2);
  9537. var wp2 = new Array();
  9538. wp2.push(new mxPoint(x + w * 0.69, y + h * 0.72));
  9539. edge2.geometry.points = wp2;
  9540. select.push(graph.addCell(edge2, null, null, null, null));
  9541. edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;endArrow=block;endFill=1;endSize=6;part=1;');
  9542. edge3.geometry.relative = true;
  9543. edge3.edge = true;
  9544. item1.insertEdge(edge3, false);
  9545. item3.insertEdge(edge3, true);
  9546. edge3.style += addAllStyles(edge3.style, p, a, edge3);
  9547. select.push(graph.addCell(edge3, null, null, null, null));
  9548. break;
  9549. case 'EIMessageSequenceBlock' :
  9550. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9551. v.value = convertText(p.Text);
  9552. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9553. 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;');
  9554. item1.vertex = true;
  9555. v.insert(item1);
  9556. item1.style += addAllStyles(item1.style, p, a, item1);
  9557. 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;');
  9558. item2.vertex = true;
  9559. v.insert(item2);
  9560. item2.style += addAllStyles(item2.style, p, a, item2);
  9561. 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;');
  9562. item3.vertex = true;
  9563. v.insert(item3);
  9564. item3.style += addAllStyles(item3.style, p, a, item3);
  9565. var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'curved=1;endArrow=block;html=1;endSize=3;part=1;');
  9566. item1.insertEdge(edge1, false);
  9567. item2.insertEdge(edge1, true);
  9568. edge1.geometry.points = [new mxPoint(x + w * 0.375, y + h * 0.15)];
  9569. edge1.geometry.relative = true;
  9570. edge1.edge = true;
  9571. edge1.style += addAllStyles(edge1.style, p, a, edge1);
  9572. select.push(graph.addCell(edge1, null, null, null, null));
  9573. var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'curved=1;endArrow=block;html=1;endSize=3;part=1;');
  9574. item2.insertEdge(edge2, false);
  9575. item3.insertEdge(edge2, true);
  9576. edge2.geometry.points = [new mxPoint(x + w * 0.675, y + h * 0.15)];
  9577. edge2.geometry.relative = true;
  9578. edge2.edge = true;
  9579. edge2.style += addAllStyles(edge2.style, p, a, edge2);
  9580. select.push(graph.addCell(edge2, null, null, null, null));
  9581. break;
  9582. case 'EIMessageExpirationBlock' :
  9583. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9584. v.value = convertText(p.Text);
  9585. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9586. 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;');
  9587. item1.vertex = true;
  9588. v.insert(item1);
  9589. item1.style += addAllStyles(item1.style, p, a, item1);
  9590. break;
  9591. case 'EIMessageBrokerBlock' :
  9592. v.style += 'strokeColor=none;fillColor=none;verticalLabelPosition=bottom;verticalAlign=top;';
  9593. v.value = convertText(p.Text);
  9594. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9595. var item1 = new mxCell('', new mxGeometry(w * 0.38, h * 0.42, w * 0.24, h * 0.16), 'part=1;fillColor=#aefe7d;');
  9596. item1.vertex = true;
  9597. v.insert(item1);
  9598. item1.style += addAllStyles(item1.style, p, a, item1);
  9599. var item2 = new mxCell('', new mxGeometry(w * 0.38, 0, w * 0.24, h * 0.16), 'part=1;');
  9600. item2.vertex = true;
  9601. v.insert(item2);
  9602. item2.style += addAllStyles(item2.style, p, a, item2);
  9603. var item3 = new mxCell('', new mxGeometry(w * 0.76, h * 0.23, w * 0.24, h * 0.16), '');
  9604. item3.vertex = true;
  9605. v.insert(item3);
  9606. item3.style = item2.style;
  9607. var item4 = new mxCell('', new mxGeometry(w * 0.76, h * 0.61, w * 0.24, h * 0.16), '');
  9608. item4.vertex = true;
  9609. v.insert(item4);
  9610. item4.style = item2.style;
  9611. var item5 = new mxCell('', new mxGeometry(w * 0.38, h * 0.84, w * 0.24, h * 0.16), '');
  9612. item5.vertex = true;
  9613. v.insert(item5);
  9614. item5.style = item2.style;
  9615. var item6 = new mxCell('', new mxGeometry(0, h * 0.61, w * 0.24, h * 0.16), '');
  9616. item6.vertex = true;
  9617. v.insert(item6);
  9618. item6.style = item2.style;
  9619. var item7 = new mxCell('', new mxGeometry(0, h * 0.23, w * 0.24, h * 0.16), '');
  9620. item7.vertex = true;
  9621. v.insert(item7);
  9622. item7.style = item2.style;
  9623. var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;');
  9624. item1.insertEdge(edge1, false);
  9625. item2.insertEdge(edge1, true);
  9626. edge1.edge = true;
  9627. edge1.style += addAllStyles(edge1.style, p, a, edge1);
  9628. select.push(graph.addCell(edge1, null, null, null, null));
  9629. var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;');
  9630. item1.insertEdge(edge2, false);
  9631. item3.insertEdge(edge2, true);
  9632. edge2.edge = true;
  9633. edge2.style += addAllStyles(edge2.style, p, a, edge2);
  9634. select.push(graph.addCell(edge2, null, null, null, null));
  9635. var edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;');
  9636. item1.insertEdge(edge3, false);
  9637. item4.insertEdge(edge3, true);
  9638. edge3.edge = true;
  9639. edge3.style += addAllStyles(edge3.style, p, a, edge3);
  9640. select.push(graph.addCell(edge3, null, null, null, null));
  9641. var edge4 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;');
  9642. item1.insertEdge(edge4, false);
  9643. item5.insertEdge(edge4, true);
  9644. edge4.edge = true;
  9645. edge4.style += addAllStyles(edge4.style, p, a, edge4);
  9646. select.push(graph.addCell(edge4, null, null, null, null));
  9647. var edge5 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;');
  9648. item1.insertEdge(edge5, false);
  9649. item6.insertEdge(edge5, true);
  9650. edge5.edge = true;
  9651. edge5.style += addAllStyles(edge5.style, p, a, edge5);
  9652. select.push(graph.addCell(edge5, null, null, null, null));
  9653. var edge6 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'endArrow=none;part=1;');
  9654. item1.insertEdge(edge6, false);
  9655. item7.insertEdge(edge6, true);
  9656. edge6.edge = true;
  9657. edge6.style += addAllStyles(edge6.style, p, a, edge6);
  9658. select.push(graph.addCell(edge6, null, null, null, null));
  9659. break;
  9660. case 'EIDurableSubscriberBlock' :
  9661. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9662. v.value = convertText(p.Text);
  9663. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9664. var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;endFill=1;endSize=6;');
  9665. edge1.geometry.relative = true;
  9666. edge1.edge = true;
  9667. addFloatingEdge(w * 0.05, h * 0.5, w * 0.6, h * 0.25, edge1, select, graph, cells, v, cell);
  9668. var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=elbowEdgeStyle;rounded=0;endArrow=block;endFill=1;endSize=6;');
  9669. edge2.geometry.relative = true;
  9670. edge2.edge = true;
  9671. addFloatingEdge(w * 0.05, h * 0.5, w * 0.6, h * 0.75, edge2, select, graph, cells, v, cell);
  9672. 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;');
  9673. item1.vertex = true;
  9674. v.insert(item1);
  9675. item1.style += addAllStyles(item1.style, p, a, item1);
  9676. break;
  9677. case 'EIControlBusBlock' :
  9678. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9679. v.value = convertText(p.Text);
  9680. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9681. 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;');
  9682. item1.vertex = true;
  9683. v.insert(item1);
  9684. item1.style += addAllStyles(item1.style, p, a, item1);
  9685. break;
  9686. case 'EIMessageHistoryBlock' :
  9687. v.style += 'strokeColor=none;fillColor=none;verticalLabelPosition=bottom;verticalAlign=top;';
  9688. v.value = convertText(p.Text);
  9689. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9690. var item1 = new mxCell('', new mxGeometry(0, 0, 17, 17), 'ellipse;fillColor=#808080;part=1;');
  9691. item1.vertex = true;
  9692. v.insert(item1);
  9693. item1.style += addAllStyles(item1.style, p, a, item1);
  9694. var item3 = new mxCell('', new mxGeometry(w - 45, 30, 30, 20), 'shape=mxgraph.mockup.misc.mail2;fillColor=#FFE040;part=1;');
  9695. item3.vertex = true;
  9696. v.insert(item3);
  9697. item3.style += addAllStyles(item3.style, p, a, item3);
  9698. edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;');
  9699. edge3.geometry.relative = true;
  9700. edge3.edge = true;
  9701. item1.insertEdge(edge3, false);
  9702. item3.insertEdge(edge3, true);
  9703. edge3.style += addAllStyles(edge3.style, p, a, edge3);
  9704. edge3.geometry.points = [new mxPoint(x + 8.5, y + 40)];
  9705. select.push(graph.addCell(edge3, null, null, null, null));
  9706. var item4 = new mxCell('', new mxGeometry(w - 45, h - 20, 20, 20), 'part=1;');
  9707. item4.vertex = true;
  9708. v.insert(item4);
  9709. item4.value = convertText(p.message_0);
  9710. item4.style += getLabelStyle(p.message_0, isLastLblHTML);
  9711. item4.style += addAllStyles(item4.style, p, a, item4, isLastLblHTML);
  9712. edge4 = new mxCell('', new mxGeometry(0, 0, 0, 0), 'edgeStyle=orthogonalEdgeStyle;rounded=0;exitX=0;exitY=0.5;endArrow=none;dashed=0;html=1;');
  9713. edge4.geometry.relative = true;
  9714. edge4.edge = true;
  9715. item1.insertEdge(edge4, false);
  9716. item4.insertEdge(edge4, true);
  9717. edge4.style += addAllStyles(edge4.style, p, a, edge4);
  9718. edge4.geometry.points = [new mxPoint(x + 8.5, y + h - 10)];
  9719. select.push(graph.addCell(edge4, null, null, null, null));
  9720. var messagesNum = p.HistoryMessages;
  9721. var oneH = (h - 75) / messagesNum;
  9722. var item2 = new Array();
  9723. var edge = new Array();
  9724. for (var i = 0; i < messagesNum; i++)
  9725. {
  9726. var currY = oneH * (i + 1) + 30;
  9727. item2[i] = new mxCell('', new mxGeometry(w - 20, currY, 20, 20), 'part=1;');
  9728. item2[i].vertex = true;
  9729. item2[i].value = convertText(p['message_' + (i + 1)]);
  9730. item2.style += getLabelStyle(p['message_' + (i + 1)], isLastLblHTML);
  9731. v.insert(item2[i]);
  9732. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  9733. 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;');
  9734. edge[i].geometry.relative = true;
  9735. edge[i].edge = true;
  9736. item3.insertEdge(edge[i], false);
  9737. item2[i].insertEdge(edge[i], true);
  9738. edge[i].style += addAllStyles(edge[i].style, p, a, edge[i]);
  9739. var wp = new Array();
  9740. wp.push(new mxPoint(x + w - 30, y + currY + 10));
  9741. edge[i].geometry.points = wp;
  9742. select.push(graph.addCell(edge[i], null, null, null, null));
  9743. }
  9744. break;
  9745. case 'Equation' :
  9746. LucidImporter.hasMath = true;
  9747. v.style += 'strokeColor=none;';
  9748. v.style += addAllStyles(v.style, p, a, v);
  9749. v.value = '$$' + p.Latex + '$$';
  9750. break;
  9751. case 'fpDoor' :
  9752. v.style += 'shape=mxgraph.floorplan.doorRight;';
  9753. if (p.DoorAngle < 0)
  9754. {
  9755. v.style += 'flipV=1;'
  9756. }
  9757. v.style += addAllStyles(v.style, p, a, v);
  9758. break;
  9759. case 'fpWall' :
  9760. v.style += 'labelPosition=center;verticalAlign=bottom;verticalLabelPosition=top;';
  9761. v.value = convertText(p);
  9762. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9763. v.style = v.style.replace('rotation=180;', ''); //180 rotation cause the labels to be upside down which doesn't match Lucid
  9764. break;
  9765. case 'fpDoubleDoor' :
  9766. v.style += 'shape=mxgraph.floorplan.doorDouble;';
  9767. if (p.DoorAngle > 0)
  9768. {
  9769. v.style += 'flipV=1;'
  9770. }
  9771. v.style += addAllStyles(v.style, p, a, v);
  9772. break;
  9773. case 'fpRestroomLights' :
  9774. v.style += 'strokeColor=none;fillColor=none;';
  9775. v.style += addAllStyles(v.style, p, a, v);
  9776. var item1 = new mxCell('', new mxGeometry(0, 0, w, h * 0.25), 'part=1;');
  9777. item1.vertex = true;
  9778. v.insert(item1);
  9779. item1.style += addAllStyles(item1.style, p, a, item1);
  9780. var item2 = new Array();
  9781. var lightOffset = w * 0.02;
  9782. var lightW = (w - lightOffset * 2) / p.LightCount;
  9783. var trueW = lightW * 0.8;
  9784. for (var i = 0; i < p.LightCount; i++)
  9785. {
  9786. item2[i] = new mxCell('', new mxGeometry(lightOffset + lightW * i + (lightW - trueW) / 2, h * 0.25, trueW, h * 0.75), 'ellipse;part=1;');
  9787. item2[i].vertex = true;
  9788. v.insert(item2[i]);
  9789. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  9790. }
  9791. break;
  9792. case 'fpRestroomSinks' :
  9793. v.style += 'strokeColor=none;fillColor=none;';
  9794. v.style += addAllStyles(v.style, p, a, v);
  9795. var item1 = new Array();
  9796. var sinkW = w / p.SinkCount;
  9797. for (var i = 0; i < p.SinkCount; i++)
  9798. {
  9799. item1[i] = new mxCell('', new mxGeometry(sinkW * i, 0, sinkW, h), 'part=1;shape=mxgraph.floorplan.sink_2;');
  9800. item1[i].vertex = true;
  9801. v.insert(item1[i]);
  9802. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]);
  9803. }
  9804. break;
  9805. case 'fpRestroomStalls' :
  9806. v.style += 'strokeColor=none;fillColor=none;';
  9807. var wallW = w * 0.1 / p.StallCount;
  9808. var item1 = new mxCell('', new mxGeometry(0, 0, wallW, h), 'fillColor=#000000;part=1;');
  9809. item1.vertex = true;
  9810. v.insert(item1);
  9811. item1.style += addAllStyles(item1.style, p, a, item1);
  9812. var stallW = (w - wallW) / p.StallCount;
  9813. var wall = new Array();
  9814. var toilet = new Array();
  9815. var door = new Array();
  9816. var paper = new Array();
  9817. var fc = getStrokeColor(p, a);
  9818. if (fc == '')
  9819. {
  9820. fc = '#000000;'
  9821. }
  9822. else
  9823. {
  9824. fc = fc.replace('stokreColor=', '');
  9825. }
  9826. var wallStyle = 'part=1;fillColor=' + fc;
  9827. wallStyle += addAllStyles(wallStyle, p, a, v);
  9828. var otherStyle = addAllStyles('', p, a, v);
  9829. for (var i = 0; i < p.StallCount; i++)
  9830. {
  9831. wall[i] = new mxCell('', new mxGeometry((i + 1) * stallW, 0, wallW, h), wallStyle);
  9832. wall[i].vertex = true;
  9833. v.insert(wall[i]);
  9834. 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;');
  9835. door[i].vertex = true;
  9836. v.insert(door[i]);
  9837. door[i].style += otherStyle;
  9838. 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;');
  9839. toilet[i].vertex = true;
  9840. v.insert(toilet[i]);
  9841. toilet[i].style += otherStyle;
  9842. paper[i] = new mxCell('', new mxGeometry(wallW + i * stallW, h * 0.42, (stallW - wallW) * 0.15, (stallW - wallW) * 0.12), 'part=1;');
  9843. paper[i].vertex = true;
  9844. v.insert(paper[i]);
  9845. paper[i].style += otherStyle;
  9846. }
  9847. break;
  9848. case 'PEOneToMany' :
  9849. v.style += 'strokeColor=none;fillColor=none;';
  9850. var edgeStyle = 'edgeStyle=none;endArrow=none;part=1;';
  9851. var fc = getStrokeColor(p, a);
  9852. if (fc == '')
  9853. {
  9854. fc = '#000000;'
  9855. }
  9856. else
  9857. {
  9858. fc = fc.replace('strokeColor=', '');
  9859. }
  9860. var endStyle = 'shape=triangle;part=1;fillColor=' + fc;
  9861. endStyle += addAllStyles(endStyle, p, a, v);
  9862. var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), edgeStyle);
  9863. edge1.geometry.relative = true;
  9864. edge1.edge = true;
  9865. addFloatingEdge(0, h * 0.5, w * 0.65, h * 0.5, edge1, select, graph, cells, v, cell);
  9866. var itemH = h / p.numLines;
  9867. var edge2 = new Array();
  9868. var endArrow = new Array();
  9869. for (var i = 0; i < p.numLines; i++)
  9870. {
  9871. edge2[i] = new mxCell('', new mxGeometry(0, 0, 0, 0), edgeStyle);
  9872. edge2[i].geometry.relative = true;
  9873. edge2[i].edge = true;
  9874. addFloatingEdge(w * 0.65, h * 0.5, w * 0.96, (i + 0.5) * itemH, edge2[i], select, graph, cells, v, cell);
  9875. endArrow[i] = new mxCell('', new mxGeometry(w * 0.95, (i + 0.2) * itemH, w * 0.05, itemH * 0.6), endStyle);
  9876. endArrow[i].vertex = true;
  9877. v.insert(endArrow[i]);
  9878. }
  9879. break;
  9880. case 'PEMultilines' :
  9881. v.style += 'strokeColor=none;fillColor=none;';
  9882. var edgeStyle = 'edgeStyle=none;endArrow=none;part=1;';
  9883. var fc = getStrokeColor(p, a);
  9884. if (fc == '')
  9885. {
  9886. fc = '#000000;'
  9887. }
  9888. else
  9889. {
  9890. fc = fc.replace('strokeColor=', '');
  9891. }
  9892. var endStyle = 'shape=triangle;part=1;fillColor=' + fc;
  9893. endStyle += addAllStyles(endStyle, p, a, v);
  9894. var itemH = h / p.numLines;
  9895. var edge2 = new Array();
  9896. var endArrow = new Array();
  9897. for (var i = 0; i < p.numLines; i++)
  9898. {
  9899. edge2[i] = new mxCell('', new mxGeometry(0, 0, 0, 0), edgeStyle);
  9900. edge2[i].geometry.relative = true;
  9901. edge2[i].edge = true;
  9902. addFloatingEdge(0, (i + 0.5) * itemH, w * 0.96, (i + 0.5) * itemH, edge2[i], select, graph, cells, v, cell);
  9903. endArrow[i] = new mxCell('', new mxGeometry(w * 0.95, (i + 0.2) * itemH, w * 0.05, itemH * 0.6), endStyle);
  9904. endArrow[i].vertex = true;
  9905. v.insert(endArrow[i]);
  9906. }
  9907. break;
  9908. case 'PEVesselBlock' :
  9909. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9910. v.value = convertText(p.Text);
  9911. switch (p.vesselType)
  9912. {
  9913. case 1 :
  9914. v.style += 'shape=mxgraph.pid.vessels.pressurized_vessel;';
  9915. break;
  9916. case 2 :
  9917. v.style += 'shape=hexagon;perimeter=hexagonPerimeter2;size=0.10;direction=south;';
  9918. break;
  9919. }
  9920. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9921. break;
  9922. case 'PEClosedTankBlock' :
  9923. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9924. v.value = convertText(p.Text);
  9925. if (p.peakedRoof == 1 && p.stumpType == 0)
  9926. {
  9927. v.style += 'shape=mxgraph.pid.vessels.tank_(conical_roof);';
  9928. }
  9929. else if (p.stumpType == 1)
  9930. {
  9931. v.style += 'shape=mxgraph.pid.vessels.tank_(boot);';
  9932. }
  9933. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9934. break;
  9935. case 'PEColumnBlock' :
  9936. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;';
  9937. v.value = convertText(p.Text);
  9938. if (p.columnType == 0)
  9939. {
  9940. v.style += 'shape=mxgraph.pid.vessels.pressurized_vessel;';
  9941. }
  9942. else
  9943. {
  9944. v.style += 'shape=mxgraph.pid.vessels.tank;';
  9945. }
  9946. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9947. break;
  9948. case 'PECompressorTurbineBlock' :
  9949. v.style += 'strokeColor=none;fillColor=none;';
  9950. v.value = convertText(p.Text);
  9951. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  9952. var item1 = new mxCell('', new mxGeometry(0, h * 0.2, w, h * 0.6), 'part=1;shape=trapezoid;perimeter=trapezoidPerimeter;direction=south;');
  9953. item1.vertex = true;
  9954. v.insert(item1);
  9955. item1.style += st;
  9956. item1.style += addAllStyles(item1.style, p, a, item1);
  9957. var st = 'endSize=4;endArrow=block;endFill=1;';
  9958. if (p.compressorType == 0)
  9959. {
  9960. var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), '');
  9961. edge1.geometry.relative = true;
  9962. edge1.edge = true;
  9963. edge1.style += st;
  9964. edge1.style += addAllStyles(edge1.style, p, a, edge1);
  9965. addFloatingEdge(0, 0, 0, h * 0.2, edge1, select, graph, cells, v, cell);
  9966. var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), '');
  9967. edge2.geometry.relative = true;
  9968. edge2.edge = true;
  9969. edge2.style += st;
  9970. edge2.style += addAllStyles(edge2.style, p, a, edge2);
  9971. addFloatingEdge(w, h * 0.67, w, h, edge2, select, graph, cells, v, cell);
  9972. }
  9973. else
  9974. {
  9975. item1.style += 'flipH=1;'
  9976. var edge1 = new mxCell('', new mxGeometry(0, 0, 0, 0), '');
  9977. edge1.geometry.relative = true;
  9978. edge1.edge = true;
  9979. edge1.style += st;
  9980. edge1.style += addAllStyles(edge1.style, p, a, edge1);
  9981. addFloatingEdge(0, 0, 0, h * 0.33, edge1, select, graph, cells, v, cell);
  9982. var edge2 = new mxCell('', new mxGeometry(0, 0, 0, 0), '');
  9983. edge2.geometry.relative = true;
  9984. edge2.edge = true;
  9985. edge2.style += st;
  9986. edge2.style += addAllStyles(edge2.style, p, a, edge2);
  9987. addFloatingEdge(w, h * 0.8, w, h, edge2, select, graph, cells, v, cell);
  9988. }
  9989. if (p.centerLineType == 1)
  9990. {
  9991. var edge3 = new mxCell('', new mxGeometry(0, 0, 0, 0), '');
  9992. edge3.geometry.relative = true;
  9993. edge3.edge = true;
  9994. edge3.style += st;
  9995. edge3.style += addAllStyles(edge3.style, p, a, edge3);
  9996. addFloatingEdge(w * 0.2, h * 0.5, w * 0.8, h * 0.5, edge3, select, graph, cells, v, cell);
  9997. }
  9998. break;
  9999. case 'PEMotorDrivenTurbineBlock' :
  10000. v.style += 'shape=ellipse;perimeter=ellipsePerimeter;';
  10001. v.value = convertText(p.Text);
  10002. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  10003. 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;');
  10004. item1.vertex = true;
  10005. v.insert(item1);
  10006. item1.style += addAllStyles(item1.style, p, a, item1);
  10007. break;
  10008. case 'PEFanBlades2Block' :
  10009. break;
  10010. case 'PECentrifugalPumpBlock' :
  10011. break;
  10012. case 'PEIndicatorBlock' :
  10013. case 'PEIndicator2Block' :
  10014. case 'PESharedIndicatorBlock' :
  10015. case 'PEComputerIndicatorBlock' :
  10016. case 'PESharedIndicator2Block' :
  10017. case 'PEProgrammableIndicatorBlock' :
  10018. switch(obj.Class)
  10019. {
  10020. case 'PEIndicatorBlock' :
  10021. v.style += 'shape=mxgraph.pid2inst.discInst;';
  10022. break;
  10023. case 'PEIndicator2Block' :
  10024. v.style += 'shape=mxgraph.pid2inst.indicator;indType=inst;';
  10025. break;
  10026. case 'PESharedIndicatorBlock' :
  10027. v.style += 'shape=mxgraph.pid2inst.sharedCont;';
  10028. break;
  10029. case 'PEComputerIndicatorBlock' :
  10030. v.style += 'shape=mxgraph.pid2inst.compFunc;';
  10031. break;
  10032. case 'PESharedIndicator2Block' :
  10033. v.style += 'shape=mxgraph.pid2inst.indicator;indType=ctrl;';
  10034. break;
  10035. case 'PEProgrammableIndicatorBlock' :
  10036. v.style += 'shape=mxgraph.pid2inst.progLogCont;';
  10037. break;
  10038. }
  10039. v.style += addAllStyles(v.style, p, a, v);
  10040. if (obj.Class == 'PEIndicator2Block' || obj.Class == 'PESharedIndicator2Block')
  10041. {
  10042. //scale labels to width
  10043. var item1 = new mxCell('', new mxGeometry(0, 0, w, w * 0.5), 'part=1;strokeColor=none;fillColor=none;');
  10044. item1.vertex = true;
  10045. v.insert(item1);
  10046. item1.value = convertText(p.TopText);
  10047. item1.style += getLabelStyle(p.TopText, isLastLblHTML);
  10048. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  10049. var item2 = new mxCell('', new mxGeometry(0, w * 0.5, w, w * 0.5), 'part=1;strokeColor=none;fillColor=none;');
  10050. item2.vertex = true;
  10051. v.insert(item2);
  10052. item2.value = convertText(p.BotText);
  10053. item2.style += getLabelStyle(p.BotText, isLastLblHTML);
  10054. item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML);
  10055. }
  10056. else
  10057. {
  10058. //scale labels as usual
  10059. var item1 = new mxCell('', new mxGeometry(0, 0, w, h * 0.5), 'part=1;strokeColor=none;fillColor=none;');
  10060. item1.vertex = true;
  10061. v.insert(item1);
  10062. item1.value = convertText(p.TopText);
  10063. item1.style += getLabelStyle(p.TopText, isLastLblHTML);
  10064. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  10065. var item2 = new mxCell('', new mxGeometry(0, h * 0.5, w, h * 0.5), 'part=1;strokeColor=none;fillColor=none;');
  10066. item2.vertex = true;
  10067. v.insert(item2);
  10068. item2.value = convertText(p.BotText);
  10069. item2.style += getLabelStyle(p.BotText, isLastLblHTML);
  10070. item2.style += addAllStyles(item2.style, p, a, item2, isLastLblHTML);
  10071. }
  10072. switch(p.instrumentLocation)
  10073. {
  10074. case 0 :
  10075. v.style += 'mounting=field;';
  10076. break;
  10077. case 1 :
  10078. v.style += 'mounting=inaccessible;';
  10079. break;
  10080. case 2 :
  10081. v.style += 'mounting=room;';
  10082. break;
  10083. case 3 :
  10084. v.style += 'mounting=local;';
  10085. break;
  10086. }
  10087. break;
  10088. case 'PEGateValveBlock' :
  10089. case 'PEGlobeValveBlock' :
  10090. case 'PEAngleValveBlock' :
  10091. case 'PEAngleGlobeValveBlock' :
  10092. case 'PEPoweredValveBlock' :
  10093. var actuator = false;
  10094. if (obj.Class == 'PEPoweredValveBlock')
  10095. {
  10096. if (p.poweredHandOperated != 1)
  10097. {
  10098. actuator = true;
  10099. }
  10100. }
  10101. else
  10102. {
  10103. if (p.handOperated != 1)
  10104. {
  10105. actuator = true;
  10106. }
  10107. }
  10108. if (actuator)
  10109. {
  10110. var p = getAction(obj).Properties;
  10111. var b = p.BoundingBox;
  10112. var oldH = b.h;
  10113. if (obj.Class == 'PEAngleValveBlock' || obj.Class == 'PEAngleGlobeValveBlock')
  10114. {
  10115. b.h = b.h * 0.7;
  10116. }
  10117. else
  10118. {
  10119. b.h = b.h * 0.6;
  10120. }
  10121. v = new mxCell('', new mxGeometry(Math.round(b.x * scale + dx), Math.round((b.y + oldH - b.h) * scale + dy),
  10122. Math.round(b.w * scale), Math.round(b.h * scale)), '');
  10123. v.vertex = true;
  10124. updateCell(v, obj, graph);
  10125. }
  10126. if (obj.Class == 'PEPoweredValveBlock')
  10127. {
  10128. v.style += 'shape=mxgraph.pid2valves.valve;verticalLabelPosition=bottom;verticalAlign=top;';
  10129. v.style += addAllStyles(v.style, p, a, v);
  10130. if (p.poweredHandOperated == 1)
  10131. {
  10132. v.style += 'valveType=gate;actuator=powered;';
  10133. var item1 = new mxCell('', new mxGeometry(w * 0.325, 0, w * 0.35, h * 0.35), 'part=1;strokeColor=none;fillColor=none;spacingTop=2;');
  10134. item1.vertex = true;
  10135. v.insert(item1);
  10136. item1.value = convertText(p.PoweredText);
  10137. item1.style += (isLastLblHTML? '' :
  10138. getFontColor(p.PoweredText) +
  10139. getFontStyle(p.PoweredText) +
  10140. getTextAlignment(p.PoweredText) +
  10141. getTextLeftSpacing(p.PoweredText) +
  10142. getTextRightSpacing(p.PoweredText) +
  10143. getTextBottomSpacing(p.PoweredText) +
  10144. getTextGlobalSpacing(p.PoweredText)
  10145. ) +
  10146. 'fontSize=6;' +
  10147. getTextVerticalAlignment(p.PoweredText);
  10148. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  10149. }
  10150. else
  10151. {
  10152. v.style += 'valveType=gate;';
  10153. }
  10154. }
  10155. else
  10156. {
  10157. v.style += 'verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.pid2valves.valve;';
  10158. v.value = convertText(p.Text);
  10159. switch (obj.Class)
  10160. {
  10161. case 'PEGateValveBlock' :
  10162. v.style += 'valveType=gate;';
  10163. break;
  10164. case 'PEGlobeValveBlock' :
  10165. v.style += 'valveType=globe;';
  10166. break;
  10167. case 'PEAngleValveBlock' :
  10168. v.style += 'valveType=angle;';
  10169. break;
  10170. case 'PEAngleGlobeValveBlock' :
  10171. v.style += 'valveType=angleGlobe;flipH=1;';
  10172. break;
  10173. }
  10174. if (p.handOperated == 1)
  10175. {
  10176. v.style += 'actuator=man;';
  10177. }
  10178. }
  10179. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  10180. break;
  10181. case 'UI2BrowserBlock' :
  10182. v.style += 'shape=mxgraph.mockup.containers.browserWindow;mainText=;';
  10183. if (p.vScroll == 1)
  10184. {
  10185. if (p.hScroll == 1)
  10186. {
  10187. var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 130), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10188. }
  10189. else
  10190. {
  10191. var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 110), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10192. }
  10193. item3.geometry.relative = true;
  10194. item3.geometry.offset = new mxPoint(-20, 110);
  10195. item3.vertex = true;
  10196. v.insert(item3);
  10197. v.style += 'spacingRight=20;';
  10198. }
  10199. if (p.hScroll == 1)
  10200. {
  10201. if (p.vScroll == 1)
  10202. {
  10203. var item4 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10204. }
  10205. else
  10206. {
  10207. var item4 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10208. }
  10209. item4.geometry.relative = true;
  10210. item4.geometry.offset = new mxPoint(0, -20);
  10211. item4.vertex = true;
  10212. v.insert(item4);
  10213. }
  10214. v.style += addAllStyles(v.style, p, a, v);
  10215. break;
  10216. case 'UI2WindowBlock' :
  10217. v.value = convertText(p.Title);
  10218. v.style += 'shape=mxgraph.mockup.containers.window;mainText=;align=center;verticalAlign=top;spacing=5;' +
  10219. (isLastLblHTML? 'fontSize=' + defaultFontSize + ';' :
  10220. getFontSize(p.Title) +
  10221. getFontColor(p.Title) +
  10222. getFontStyle(p.Title));
  10223. if (p.vScroll == 1)
  10224. {
  10225. if (p.hScroll == 1)
  10226. {
  10227. var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 50), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10228. }
  10229. else
  10230. {
  10231. var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 30), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10232. }
  10233. item3.geometry.relative = true;
  10234. item3.geometry.offset = new mxPoint(-20, 30);
  10235. item3.vertex = true;
  10236. v.insert(item3);
  10237. v.style += 'spacingRight=20;';
  10238. }
  10239. if (p.hScroll == 1)
  10240. {
  10241. if (p.vScroll == 1)
  10242. {
  10243. var item4 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10244. }
  10245. else
  10246. {
  10247. var item4 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10248. }
  10249. item4.geometry.relative = true;
  10250. item4.geometry.offset = new mxPoint(0, -20);
  10251. item4.vertex = true;
  10252. v.insert(item4);
  10253. }
  10254. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  10255. break;
  10256. case 'UI2DialogBlock' :
  10257. v.value = convertText(p.Text);
  10258. v.style +=
  10259. getLabelStyle(p.Text, isLastLblHTML);
  10260. var item1 = new mxCell('', new mxGeometry(0, 0, w, 30), 'part=1;resizeHeight=0;');
  10261. item1.vertex = true;
  10262. v.insert(item1);
  10263. item1.value = convertText(p.Title);
  10264. item1.style += getLabelStyle(p.Title, isLastLblHTML);
  10265. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  10266. var item2 = new mxCell('', new mxGeometry(1, 0.5, 20, 20), 'ellipse;part=1;strokeColor=#008cff;resizable=0;fillColor=none;html=1;');
  10267. item2.geometry.relative = true;
  10268. item2.geometry.offset = new mxPoint(-25, -10);
  10269. item2.vertex = true;
  10270. item1.insert(item2);
  10271. if (p.vScroll == 1)
  10272. {
  10273. if (p.hScroll == 1)
  10274. {
  10275. var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 50), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10276. }
  10277. else
  10278. {
  10279. var item3 = new mxCell('', new mxGeometry(1, 0, 20, h - 30), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10280. }
  10281. item3.geometry.relative = true;
  10282. item3.geometry.offset = new mxPoint(-20, 30);
  10283. item3.vertex = true;
  10284. v.insert(item3);
  10285. v.style += 'spacingRight=20;';
  10286. }
  10287. if (p.hScroll == 1)
  10288. {
  10289. if (p.vScroll == 1)
  10290. {
  10291. var item4 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10292. }
  10293. else
  10294. {
  10295. var item4 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10296. }
  10297. item4.geometry.relative = true;
  10298. item4.geometry.offset = new mxPoint(0, -20);
  10299. item4.vertex = true;
  10300. v.insert(item4);
  10301. }
  10302. v.style += addAllStyles(v.style, p, a, v);
  10303. p.Text = null;
  10304. break;
  10305. case 'UI2AccordionBlock' :
  10306. var item1 = new Array();
  10307. var itemH = 25;
  10308. for (var i = 0; i <= (p.Panels - 1); i++)
  10309. {
  10310. if (i < (p.Selected - 1))
  10311. {
  10312. item1[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), 'part=1;fillColor=#000000;fillOpacity=25;');
  10313. item1[i].vertex = true;
  10314. v.insert(item1[i]);
  10315. item1[i].value = convertText(p['Panel_' + (i + 1)]);
  10316. item1[i].style +=
  10317. getLabelStyle(p['Panel_' + (i + 1)], isLastLblHTML);
  10318. }
  10319. else if (i == (p.Selected - 1))
  10320. {
  10321. item1[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), 'part=1;fillColor=none;');
  10322. item1[i].vertex = true;
  10323. v.insert(item1[i]);
  10324. item1[i].value = convertText(p['Panel_' + (i + 1)]);
  10325. item1[i].style +=
  10326. getLabelStyle(p['Panel_' + (i + 1)], isLastLblHTML);
  10327. }
  10328. else
  10329. {
  10330. 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;');
  10331. item1[i].vertex = true;
  10332. v.insert(item1[i]);
  10333. item1[i].value = convertText(p['Panel_' + (i + 1)]);
  10334. item1[i].style +=
  10335. getLabelStyle(p['Panel_' + (i + 1)], isLastLblHTML);
  10336. }
  10337. if (item1[i].style.indexOf(';align=') < 0)
  10338. {
  10339. item1[i].style += 'align=left;spacingLeft=5;';
  10340. }
  10341. }
  10342. var fc2 = getStrokeColor(p, a);
  10343. fc2 = fc2.replace('strokeColor', 'fillColor2');
  10344. if (fc2 == '')
  10345. {
  10346. fc2 = 'fillColor2=#000000;'
  10347. }
  10348. if (p.vScroll == 1)
  10349. {
  10350. if (p.hScroll == 1)
  10351. {
  10352. 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;');
  10353. }
  10354. else
  10355. {
  10356. 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;');
  10357. }
  10358. item2.geometry.relative = true;
  10359. item2.geometry.offset = new mxPoint(-20, p.Selected * itemH);
  10360. item2.vertex = true;
  10361. v.insert(item2);
  10362. v.style += 'spacingRight=20;';
  10363. item2.style += fc2;
  10364. item2.style += addAllStyles(item2.style, p, a, item2);
  10365. }
  10366. if (p.hScroll == 1)
  10367. {
  10368. if (p.vScroll == 1)
  10369. {
  10370. var item3 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10371. }
  10372. else
  10373. {
  10374. var item3 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10375. }
  10376. item3.geometry.relative = true;
  10377. item3.geometry.offset = new mxPoint(0, -20 - (p.Panels - p.Selected) * itemH);
  10378. item3.vertex = true;
  10379. v.insert(item3);
  10380. item3.style += fc2;
  10381. item3.style += addAllStyles(item3.style, p, a, item3);
  10382. }
  10383. if (p.vScroll == 1)
  10384. {
  10385. 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;');
  10386. }
  10387. else
  10388. {
  10389. 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;');
  10390. }
  10391. item4.vertex = true;
  10392. v.insert(item4);
  10393. item4.value = convertText(p['Content_1']);
  10394. item4.style +=
  10395. getLabelStyle(p['Content_1'], isLastLblHTML);
  10396. if (!isLastLblHTML && item4.style.indexOf(';align=') < 0)
  10397. {
  10398. item4.style += 'align=left;spacingLeft=5;';
  10399. }
  10400. v.style += addAllStyles(v.style, p, a, v);
  10401. break;
  10402. case 'UI2TabBarContainerBlock' :
  10403. v.style += 'strokeColor=none;fillColor=none;';
  10404. var item1 = new Array();
  10405. var item2 = new Array();
  10406. var itemH = 25;
  10407. var itemS = 3; // tab spacing
  10408. var itemW = (w + itemS) / (p.Tabs + 1);
  10409. var startW = 10;
  10410. var bg = new mxCell('', new mxGeometry(0, itemH, w, h - itemH), 'part=1;');
  10411. bg.vertex = true;
  10412. v.insert(bg);
  10413. bg.style += addAllStyles(bg.style, p, a, bg);
  10414. for (var i = 0; i <= (p.Tabs - 1); i++)
  10415. {
  10416. if (i == (p.Selected - 1))
  10417. {
  10418. item2[i] = new mxCell('', new mxGeometry(startW + i * itemW, 0, itemW - itemS, itemH), '');
  10419. item2[i].vertex = true;
  10420. v.insert(item2[i]);
  10421. item2[i].value = convertText(p['Tab_' + (i + 1)]);
  10422. item2[i].style +=
  10423. getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML);
  10424. }
  10425. else
  10426. {
  10427. item1[i] = new mxCell('', new mxGeometry(startW + i * itemW, 0, itemW - itemS, itemH), 'strokeColor=none;');
  10428. item1[i].vertex = true;
  10429. v.insert(item1[i]);
  10430. item1[i].style +=
  10431. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]);
  10432. item2[i] = new mxCell('', new mxGeometry(0, 0, itemW - itemS, itemH), 'fillColor=#000000;fillOpacity=25;');
  10433. item2[i].vertex = true;
  10434. item1[i].insert(item2[i]);
  10435. item2[i].value = convertText(p['Tab_' + (i + 1)]);
  10436. item2[i].style +=
  10437. getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML);
  10438. }
  10439. if (item2[i].style.indexOf(';align=') < 0)
  10440. {
  10441. item2[i].style += 'align=left;spacingLeft=2;';
  10442. }
  10443. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  10444. }
  10445. var fc2 = getStrokeColor(p, a);
  10446. fc2 = fc2.replace('strokeColor', 'fillColor2');
  10447. if (fc2 == '')
  10448. {
  10449. fc2 = 'fillColor2=#000000;'
  10450. }
  10451. if (p.vScroll == 1)
  10452. {
  10453. if (p.hScroll == 1)
  10454. {
  10455. 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;');
  10456. }
  10457. else
  10458. {
  10459. var item2 = new mxCell('', new mxGeometry(1, 0, 20, h - itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10460. }
  10461. item2.geometry.relative = true;
  10462. item2.geometry.offset = new mxPoint(-20, itemH);
  10463. item2.vertex = true;
  10464. v.insert(item2);
  10465. v.style += 'spacingRight=20;';
  10466. item2.style += fc2;
  10467. item2.style += addAllStyles(item2.style, p, a, item2);
  10468. }
  10469. if (p.hScroll == 1)
  10470. {
  10471. if (p.vScroll == 1)
  10472. {
  10473. var item3 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10474. }
  10475. else
  10476. {
  10477. var item3 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10478. }
  10479. item3.geometry.relative = true;
  10480. item3.geometry.offset = new mxPoint(0, -20);
  10481. item3.vertex = true;
  10482. v.insert(item3);
  10483. item3.style += fc2;
  10484. item3.style += addAllStyles(item3.style, p, a, item3);
  10485. }
  10486. break;
  10487. case 'UI2TabBar2ContainerBlock' :
  10488. v.style += 'strokeColor=none;fillColor=none;';
  10489. var item1 = new Array();
  10490. var item2 = new Array();
  10491. var itemH = 25; // tab height
  10492. var itemS = 3; // tab spacing
  10493. var itemW = (w + itemS) / p.Tabs; //tab width (including spacing)
  10494. var bg = new mxCell('', new mxGeometry(0, itemH, w, h - itemH), 'part=1;');
  10495. bg.vertex = true;
  10496. v.insert(bg);
  10497. bg.style += addAllStyles(bg.style, p, a, bg);
  10498. for (var i = 0; i <= (p.Tabs - 1); i++)
  10499. {
  10500. if (i == (p.Selected - 1))
  10501. {
  10502. item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW - itemS, itemH), '');
  10503. item2[i].vertex = true;
  10504. v.insert(item2[i]);
  10505. item2[i].value = convertText(p['Tab_' + (i + 1)]);
  10506. item2[i].style +=
  10507. getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML);
  10508. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  10509. }
  10510. else
  10511. {
  10512. item1[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW - itemS, itemH), 'strokeColor=none;');
  10513. item1[i].vertex = true;
  10514. v.insert(item1[i]);
  10515. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]);
  10516. item2[i] = new mxCell('', new mxGeometry(0, 0, itemW - itemS, itemH), 'fillColor=#000000;fillOpacity=25;');
  10517. item2[i].vertex = true;
  10518. item1[i].insert(item2[i]);
  10519. item2[i].value = convertText(p['Tab_' + (i + 1)]);
  10520. item2[i].style +=
  10521. getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML);
  10522. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  10523. }
  10524. if (item2[i].style.indexOf(';align=') < 0)
  10525. {
  10526. item2[i].style += 'align=left;spacingLeft=2;';
  10527. }
  10528. }
  10529. var fc2 = getStrokeColor(p, a);
  10530. fc2 = fc2.replace('strokeColor', 'fillColor2');
  10531. if (fc2 == '')
  10532. {
  10533. fc2 = 'fillColor2=#000000;'
  10534. }
  10535. if (p.vScroll == 1)
  10536. {
  10537. if (p.hScroll == 1)
  10538. {
  10539. 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;');
  10540. }
  10541. else
  10542. {
  10543. var item2 = new mxCell('', new mxGeometry(1, 0, 20, h - itemH), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10544. }
  10545. item2.geometry.relative = true;
  10546. item2.geometry.offset = new mxPoint(-20, itemH);
  10547. item2.vertex = true;
  10548. v.insert(item2);
  10549. v.style += 'spacingRight=20;';
  10550. item2.style += fc2;
  10551. item2.style += addAllStyles(item2.style, p, a, item2);
  10552. }
  10553. if (p.hScroll == 1)
  10554. {
  10555. if (p.vScroll == 1)
  10556. {
  10557. var item3 = new mxCell('', new mxGeometry(0, 1, w - 20, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10558. }
  10559. else
  10560. {
  10561. var item3 = new mxCell('', new mxGeometry(0, 1, w, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10562. }
  10563. item3.geometry.relative = true;
  10564. item3.geometry.offset = new mxPoint(0, -20);
  10565. item3.vertex = true;
  10566. v.insert(item3);
  10567. item3.style += fc2;
  10568. item3.style += addAllStyles(item3.style, p, a, item3);
  10569. }
  10570. break;
  10571. case 'UI2VTabBarContainerBlock' :
  10572. v.style += 'strokeColor=none;fillColor=none;';
  10573. var item1 = new Array();
  10574. var item2 = new Array();
  10575. var itemS = 3; // tab spacing
  10576. var itemH = 25 + itemS; // tab height (including spacing)
  10577. var itemW = 80; //tab width
  10578. var startH = 10;
  10579. var bg = new mxCell('', new mxGeometry(itemW, 0, w - itemW, h), 'part=1;');
  10580. bg.vertex = true;
  10581. v.insert(bg);
  10582. bg.style += addAllStyles(bg.style, p, a, bg);
  10583. for (var i = 0; i <= (p.Tabs - 1); i++)
  10584. {
  10585. if (i == (p.Selected - 1))
  10586. {
  10587. item2[i] = new mxCell('', new mxGeometry(0, startH + i * itemH, itemW, itemH - itemS), '');
  10588. item2[i].vertex = true;
  10589. v.insert(item2[i]);
  10590. item2[i].value = convertText(p['Tab_' + (i + 1)]);
  10591. item2[i].style +=
  10592. getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML);
  10593. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  10594. }
  10595. else
  10596. {
  10597. item1[i] = new mxCell('', new mxGeometry(0, startH + i * itemH, itemW, itemH - itemS), 'strokeColor=none;');
  10598. item1[i].vertex = true;
  10599. v.insert(item1[i]);
  10600. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]);
  10601. item2[i] = new mxCell('', new mxGeometry(0, 0, itemW, itemH - itemS), 'fillColor=#000000;fillOpacity=25;');
  10602. item2[i].vertex = true;
  10603. item1[i].insert(item2[i]);
  10604. item2[i].value = convertText(p['Tab_' + (i + 1)]);
  10605. item2[i].style +=
  10606. getLabelStyle(p['Tab_' + (i + 1)], isLastLblHTML);
  10607. }
  10608. if (item2[i].style.indexOf(';align=') < 0)
  10609. {
  10610. item2[i].style += 'align=left;spacingLeft=2;';
  10611. }
  10612. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  10613. }
  10614. var fc2 = getStrokeColor(p, a);
  10615. fc2 = fc2.replace('strokeColor', 'fillColor2');
  10616. if (fc2 == '')
  10617. {
  10618. fc2 = 'fillColor2=#000000;'
  10619. }
  10620. if (p.vScroll == 1)
  10621. {
  10622. if (p.hScroll == 1)
  10623. {
  10624. var item2 = new mxCell('', new mxGeometry(1, 0, 20, h -20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10625. }
  10626. else
  10627. {
  10628. var item2 = new mxCell('', new mxGeometry(1, 0, 20, h), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=95;direction=north;resizeHeight=1;');
  10629. }
  10630. item2.geometry.relative = true;
  10631. item2.geometry.offset = new mxPoint(-20, 0);
  10632. item2.vertex = true;
  10633. v.insert(item2);
  10634. v.style += 'spacingRight=20;';
  10635. item2.style += fc2;
  10636. item2.style += addAllStyles(item2.style, p, a, item2);
  10637. }
  10638. if (p.hScroll == 1)
  10639. {
  10640. if (p.vScroll == 1)
  10641. {
  10642. var item3 = new mxCell('', new mxGeometry(itemW, 1, w - 20 - itemW, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10643. }
  10644. else
  10645. {
  10646. var item3 = new mxCell('', new mxGeometry(itemW, 1, w - itemW, 20), 'part=1;shape=mxgraph.mockup.navigation.scrollBar;barPos=5;resizeWidth=1;');
  10647. }
  10648. item3.geometry.relative = true;
  10649. item3.geometry.offset = new mxPoint(0, -20);
  10650. item3.vertex = true;
  10651. v.insert(item3);
  10652. item3.style += fc2;
  10653. item3.style += addAllStyles(item3.style, p, a, item3);
  10654. }
  10655. break;
  10656. case 'UI2CheckBoxBlock' :
  10657. v.style += 'strokeColor=none;fillColor=none;';
  10658. var itemH = h / p.Options;
  10659. var item1 = new Array(); //checkbox
  10660. var item2 = new Array(); //checkmark
  10661. for (var i = 0; i < p.Options; i++)
  10662. {
  10663. 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;');
  10664. item1[i].vertex = true;
  10665. v.insert(item1[i]);
  10666. item1[i].value = convertText(p['Option_' + (i + 1)]);
  10667. item1[i].style +=
  10668. getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML);
  10669. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML);
  10670. if (p.Selected[i + 1] != null)
  10671. {
  10672. if (p.Selected[i + 1] == 1)
  10673. {
  10674. var fc = getStrokeColor(p, a);
  10675. fc = fc.replace('strokeColor', 'fillColor');
  10676. if (fc == '')
  10677. {
  10678. fc = 'fillColor=#000000;'
  10679. }
  10680. item2[i] = new mxCell('', new mxGeometry(2, 2, 6, 6), 'shape=mxgraph.mscae.general.checkmark;part=1;');
  10681. item2[i].vertex = true;
  10682. item1[i].insert(item2[i]);
  10683. item2[i].style += fc;
  10684. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  10685. }
  10686. }
  10687. }
  10688. break;
  10689. case 'UI2HorizontalCheckBoxBlock' :
  10690. v.style += 'strokeColor=none;fillColor=none;';
  10691. var itemW = w / p.Options;
  10692. var item1 = new Array(); //checkbox
  10693. var item2 = new Array(); //checkmark
  10694. for (var i = 0; i < p.Options; i++)
  10695. {
  10696. 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;');
  10697. item1[i].vertex = true;
  10698. v.insert(item1[i]);
  10699. item1[i].value = convertText(p['Option_' + (i + 1)]);
  10700. item1[i].style +=
  10701. getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML);
  10702. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML);
  10703. if (p.Selected[i + 1] != null)
  10704. {
  10705. if (p.Selected[i + 1] == 1)
  10706. {
  10707. var fc = getStrokeColor(p, a);
  10708. fc = fc.replace('strokeColor', 'fillColor');
  10709. if (fc == '')
  10710. {
  10711. fc = 'fillColor=#000000;'
  10712. }
  10713. item2[i] = new mxCell('', new mxGeometry(2, 2, 6, 6), 'shape=mxgraph.mscae.general.checkmark;part=1;');
  10714. item2[i].vertex = true;
  10715. item1[i].insert(item2[i]);
  10716. item2[i].style += fc;
  10717. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  10718. }
  10719. }
  10720. }
  10721. break;
  10722. case 'UI2RadioBlock' :
  10723. v.style += 'strokeColor=none;fillColor=none;';
  10724. var itemH = h / p.Options;
  10725. var item1 = new Array(); //checkbox
  10726. var item2 = new Array(); //checkmark
  10727. for (var i = 0; i < p.Options; i++)
  10728. {
  10729. 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;');
  10730. item1[i].vertex = true;
  10731. v.insert(item1[i]);
  10732. item1[i].value = convertText(p['Option_' + (i + 1)]);
  10733. item1[i].style +=
  10734. getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML);
  10735. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML);
  10736. if (p.Selected != null)
  10737. {
  10738. if (p.Selected == (i + 1))
  10739. {
  10740. var fc = getStrokeColor(p, a);
  10741. fc = fc.replace('strokeColor', 'fillColor');
  10742. if (fc == '')
  10743. {
  10744. fc = 'fillColor=#000000;'
  10745. }
  10746. item2[i] = new mxCell('', new mxGeometry(2.5, 2.5, 5, 5), 'ellipse;');
  10747. item2[i].vertex = true;
  10748. item1[i].insert(item2[i]);
  10749. item2[i].style += fc;
  10750. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  10751. }
  10752. }
  10753. }
  10754. break;
  10755. case 'UI2HorizontalRadioBlock' :
  10756. v.style += 'strokeColor=none;fillColor=none;';
  10757. var itemW = w / p.Options;
  10758. var item1 = new Array(); //checkbox
  10759. var item2 = new Array(); //checkmark
  10760. for (var i = 0; i < p.Options; i++)
  10761. {
  10762. 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;');
  10763. item1[i].vertex = true;
  10764. v.insert(item1[i]);
  10765. item1[i].value = convertText(p['Option_' + (i + 1)]);
  10766. item1[i].style +=
  10767. getLabelStyle(p['Option_' + (i + 1)], isLastLblHTML);
  10768. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i], isLastLblHTML);
  10769. if (p.Selected != null)
  10770. {
  10771. if (p.Selected == (i + 1))
  10772. {
  10773. var fc = getStrokeColor(p, a);
  10774. fc = fc.replace('strokeColor', 'fillColor');
  10775. if (fc == '')
  10776. {
  10777. fc = 'fillColor=#000000;'
  10778. }
  10779. item2[i] = new mxCell('', new mxGeometry(2, 2, 6, 6), 'ellipse;part=1;');
  10780. item2[i].vertex = true;
  10781. item1[i].insert(item2[i]);
  10782. item2[i].style += fc;
  10783. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  10784. }
  10785. }
  10786. }
  10787. break;
  10788. case 'UI2SelectBlock' :
  10789. v.style += 'shape=mxgraph.mockup.forms.comboBox;strokeColor=#999999;fillColor=#ddeeff;align=left;fillColor2=#aaddff;mainText=;fontColor=#666666';
  10790. v.value = convertText(p.Selected);
  10791. break;
  10792. case 'UI2HSliderBlock' :
  10793. case 'UI2VSliderBlock' :
  10794. v.style += 'shape=mxgraph.mockup.forms.horSlider;sliderStyle=basic;handleStyle=handle;';
  10795. if (obj.Class == 'UI2VSliderBlock')
  10796. {
  10797. v.style += 'direction=south;';
  10798. }
  10799. v.style += 'sliderPos=' + (p.ScrollVal * 100) + ';';
  10800. v.style += addAllStyles(v.style, p, a, v);
  10801. break;
  10802. case 'UI2DatePickerBlock' :
  10803. v.style += 'strokeColor=none;fillColor=none;';
  10804. var item1 = new mxCell('', new mxGeometry(0, 0, w * 0.6, h), 'part=1;');
  10805. item1.vertex = true;
  10806. v.insert(item1);
  10807. item1.value = convertText(p.Date);
  10808. item1.style +=
  10809. getLabelStyle(p.Date, isLastLblHTML);
  10810. v.style += addAllStyles(v.style, p, a, v);
  10811. var fc = getStrokeColor(p, a);
  10812. fc = fc.replace('strokeColor', 'fillColor');
  10813. if (fc == '')
  10814. {
  10815. fc = 'fillColor=#000000;'
  10816. }
  10817. var item2 = new mxCell('', new mxGeometry(w * 0.75, 0, w * 0.25, h), 'part=1;shape=mxgraph.gmdl.calendar;');
  10818. item2.vertex = true;
  10819. v.insert(item2);
  10820. item2.style += fc;
  10821. item2.style += addAllStyles(item2.style, p, a, item2);
  10822. break;
  10823. case 'UI2SearchBlock' :
  10824. v.value = convertText(p.Search);
  10825. v.style += 'shape=mxgraph.mockup.forms.searchBox;mainText=;flipH=1;align=left;spacingLeft=26;' +
  10826. getLabelStyle(p.Search, isLastLblHTML);
  10827. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  10828. break;
  10829. case 'UI2NumericStepperBlock' :
  10830. var fc = getStrokeColor(p, a);
  10831. fc = fc.replace('strokeColor', 'fillColor');
  10832. if (fc == '')
  10833. {
  10834. fc = 'fillColor=#000000;'
  10835. }
  10836. v.value = convertText(p.Number);
  10837. v.style += 'shape=mxgraph.mockup.forms.spinner;spinLayout=right;spinStyle=normal;adjStyle=triangle;mainText=;align=left;spacingLeft=8;' + fc +
  10838. getLabelStyle(p.Number, isLastLblHTML);
  10839. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  10840. break;
  10841. case 'UI2TableBlock' :
  10842. //Create table as HTML one
  10843. try
  10844. {
  10845. var fillClr = getColor(p.FillColor), lineClr = getColor(p.LineColor), header, altRow, borderStyle = '', rowH = 20;
  10846. v.style = 'html=1;overflow=fill;verticalAlign=top;spacing=0;';
  10847. var htmlTable = '<table style="width:100%;height:100%;border-collapse: collapse;border: 1px solid ' + lineClr + ';">';
  10848. var csvLines = p.Data.split('\n');
  10849. if (!p.AltRow || p.AltRow == 'default')
  10850. {
  10851. altRow = getDarkerClr(fillClr, 0.95);
  10852. }
  10853. else if (p.AltRow == 'none')
  10854. {
  10855. altRow = fillClr;
  10856. }
  10857. else
  10858. {
  10859. altRow = getColor(p.AltRow);
  10860. }
  10861. if (!p.Header || p.Header == 'default')
  10862. {
  10863. header = getDarkerClr(fillClr, 0.8);
  10864. }
  10865. else if (p.Header == 'none')
  10866. {
  10867. header = altRow;
  10868. }
  10869. else
  10870. {
  10871. header = getColor(p.Header);
  10872. }
  10873. if (p.GridLines == 'full')
  10874. {
  10875. borderStyle = 'border: 1px solid ' + lineClr;
  10876. rowH = 19;
  10877. }
  10878. else if (p.GridLines == 'row')
  10879. {
  10880. borderStyle = 'border-bottom: 1px solid ' + lineClr;
  10881. rowH = 19;
  10882. }
  10883. else if (p.GridLines == 'default' || p.GridLines == 'column')
  10884. {
  10885. borderStyle = 'border-right: 1px solid ' + lineClr;
  10886. }
  10887. csvLines = csvLines.filter(function(l)
  10888. {
  10889. return l;
  10890. });
  10891. if (/^\{[^}]*\}$/.test(csvLines[csvLines.length - 1]))
  10892. {
  10893. csvLines.pop();
  10894. }
  10895. var cols = csvLines[0].split(',').length;
  10896. var emptyRow = '';
  10897. for (var j = 0; j < cols - 1; j++)
  10898. {
  10899. emptyRow += ' , ';
  10900. }
  10901. for (var i = csvLines.length; i < Math.ceil(h / 20); i++)
  10902. {
  10903. csvLines.push(emptyRow)
  10904. }
  10905. for (var i = 0; i < csvLines.length; i++)
  10906. {
  10907. htmlTable += '<tr style="height: ' + rowH + 'px;background:' + (i == 0? header :
  10908. (i % 2? fillClr : altRow)) + '">';
  10909. var els = csvLines[i].split(',');
  10910. for (var j = 0; j < els.length; j++)
  10911. {
  10912. var cellProp = p['Cell_' + i + '_' + j];
  10913. var txtClr = cellProp && cellProp.m && cellProp.m[0] && cellProp.m[0].n == 'c'? getColor(cellProp.m[0].v) : lineClr;
  10914. htmlTable += '<td style="height: ' + rowH + 'px;color:' + txtClr + ';' + borderStyle + '">' + mxUtils.htmlEntities(els[j]) + '</td>';
  10915. }
  10916. htmlTable += '</tr>';
  10917. }
  10918. htmlTable += '</table>';
  10919. v.value = htmlTable;
  10920. }
  10921. catch(e)
  10922. {
  10923. //Ignore
  10924. console.log(e);
  10925. }
  10926. break;
  10927. case 'UI2ButtonBarBlock' :
  10928. v.style += addAllStyles(v.style, p, a, v);
  10929. var item1 = new Array();
  10930. var item2 = new Array();
  10931. var itemW = w / p.Buttons;
  10932. for (var i = 0; i <= (p.Buttons - 1); i++)
  10933. {
  10934. if (i == (p.Selected - 1))
  10935. {
  10936. item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), '');
  10937. item2[i].vertex = true;
  10938. v.insert(item2[i]);
  10939. item2[i].value = convertText(p['Button_' + (i + 1)]);
  10940. item2[i].style +=
  10941. getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML);
  10942. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  10943. }
  10944. else
  10945. {
  10946. item1[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'strokeColor=none;');
  10947. item1[i].vertex = true;
  10948. v.insert(item1[i]);
  10949. item1[i].style +=
  10950. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]);
  10951. item2[i] = new mxCell('', new mxGeometry(0, 0, itemW, h), 'fillColor=#000000;fillOpacity=25;');
  10952. item2[i].vertex = true;
  10953. item1[i].insert(item2[i]);
  10954. item2[i].value = convertText(p['Button_' + (i + 1)]);
  10955. item2[i].style +=
  10956. getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML);
  10957. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  10958. }
  10959. }
  10960. break;
  10961. case 'UI2VerticalButtonBarBlock' :
  10962. v.style += addAllStyles(v.style, p, a, v);
  10963. var item1 = new Array();
  10964. var item2 = new Array();
  10965. var itemH = h / p.Buttons;
  10966. for (var i = 0; i <= (p.Buttons - 1); i++)
  10967. {
  10968. if (i == (p.Selected - 1))
  10969. {
  10970. item2[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), '');
  10971. item2[i].vertex = true;
  10972. v.insert(item2[i]);
  10973. item2[i].value = convertText(p['Button_' + (i + 1)]);
  10974. item2[i].style +=
  10975. getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML);
  10976. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  10977. }
  10978. else
  10979. {
  10980. item1[i] = new mxCell('', new mxGeometry(0, i * itemH, w, itemH), 'strokeColor=none;');
  10981. item1[i].vertex = true;
  10982. v.insert(item1[i]);
  10983. item1[i].style += addAllStyles(item1[i].style, p, a, item1[i]);
  10984. item2[i] = new mxCell('', new mxGeometry(0, 0, w, itemH), 'fillColor=#000000;fillOpacity=25;');
  10985. item2[i].vertex = true;
  10986. item1[i].insert(item2[i]);
  10987. item2[i].value = convertText(p['Button_' + (i + 1)]);
  10988. item2[i].style +=
  10989. getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML);
  10990. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i], isLastLblHTML);
  10991. }
  10992. }
  10993. break;
  10994. case 'UI2LinkBarBlock' :
  10995. v.style += 'strokeColor=none;fillColor=none;';
  10996. v.style += addAllStyles(v.style, p, a, v);
  10997. var item1 = new Array();
  10998. var item2 = new Array();
  10999. var itemW = w / p.Links;
  11000. for (var i = 0; i < (p.Links); i++)
  11001. {
  11002. if (i != 0)
  11003. {
  11004. item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'shape=partialRectangle;top=0;bottom=0;right=0;fillColor=none;');
  11005. item2[i].style += addAllStyles(item2[i].style, p, a, item2[i]);
  11006. }
  11007. else
  11008. {
  11009. item2[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'fillColor=none;strokeColor=none;');
  11010. }
  11011. item2[i].vertex = true;
  11012. v.insert(item2[i]);
  11013. item2[i].value = convertText(p['Link_' + (i + 1)]);
  11014. item2[i].style +=
  11015. getLabelStyle(p['Link_' + (i + 1)], isLastLblHTML);
  11016. }
  11017. break;
  11018. case 'UI2BreadCrumbsBlock' :
  11019. v.style += 'strokeColor=none;fillColor=none;';
  11020. v.style += addAllStyles(v.style, p, a, v);
  11021. var item1 = new Array();
  11022. var item2 = new Array();
  11023. var itemW = w / p.Links;
  11024. for (var i = 0; i < (p.Links); i++)
  11025. {
  11026. item1[i] = new mxCell('', new mxGeometry(i * itemW, 0, itemW, h), 'fillColor=none;strokeColor=none;');
  11027. item1[i].vertex = true;
  11028. v.insert(item1[i]);
  11029. item1[i].value = convertText(p['Link_' + (i + 1)]);
  11030. item1[i].style +=
  11031. getLabelStyle(p['Link_' + (i + 1)], isLastLblHTML);
  11032. }
  11033. for (var i = 1; i < (p.Links); i++)
  11034. {
  11035. item2[i] = new mxCell('', new mxGeometry(i / p.Links, 0.5, 6, 10), 'shape=mxgraph.ios7.misc.right;');
  11036. item2[i].geometry.relative = true;
  11037. item2[i].geometry.offset = new mxPoint(-3, -5);
  11038. item2[i].vertex = true;
  11039. v.insert(item2[i]);
  11040. }
  11041. break;
  11042. case 'UI2MenuBarBlock' :
  11043. v.style += 'strokeColor=none;';
  11044. v.style += addAllStyles(v.style, p, a, v);
  11045. var item1 = new Array();
  11046. var itemW = w / (p.Buttons + 1);
  11047. for (var i = 0; i <= (p.Buttons - 1); i++)
  11048. {
  11049. if (i != (p.Selected - 1))
  11050. {
  11051. item1[i] = new mxCell('', new mxGeometry(0, 0, itemW, h), 'strokeColor=none;fillColor=none;resizeHeight=1;');
  11052. }
  11053. else
  11054. {
  11055. item1[i] = new mxCell('', new mxGeometry(0, 0, itemW, h), 'fillColor=#000000;fillOpacity=25;strokeColor=none;resizeHeight=1;');
  11056. }
  11057. item1[i].geometry.relative = true;
  11058. item1[i].geometry.offset = new mxPoint(i * itemW, 0);
  11059. item1[i].vertex = true;
  11060. v.insert(item1[i]);
  11061. item1[i].value = convertText(p['MenuItem_' + (i + 1)]);
  11062. item1[i].style +=
  11063. getLabelStyle(p['MenuItem_' + (i + 1)], isLastLblHTML);
  11064. }
  11065. break;
  11066. case 'UI2AtoZBlock' :
  11067. v.style += 'fillColor=none;strokeColor=none;' +
  11068. getLabelStyle(p['Text_0']);
  11069. 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';
  11070. break;
  11071. case 'UI2PaginationBlock' :
  11072. v.style += 'fillColor=none;strokeColor=none;' +
  11073. getLabelStyle(p.Text_prev);
  11074. v.value = convertText(p.Text_prev) + ' ';
  11075. for (var i = 0; i < p.Links; i++)
  11076. {
  11077. v.value += convertText(p['Link_' + (i + 1)]) + ' ';
  11078. }
  11079. v.value += convertText(p.Text_next);
  11080. break;
  11081. case 'UI2ContextMenuBlock' :
  11082. v.style += addAllStyles(v.style, p, a, v);
  11083. var item = new Array();
  11084. var icon = new Array();
  11085. var shortcut = new Array();
  11086. var itemH = h / p.Lines;
  11087. var st = null;
  11088. for (var i = 0; i < p.Lines; i++)
  11089. {
  11090. //add label
  11091. if (p['Item_' + (i + 1)] != null)
  11092. {
  11093. if (st == null)
  11094. {
  11095. st = '' +
  11096. getFontSize(p['Item_' + (i + 1)]) +
  11097. getFontColor(p['Item_' + (i + 1)]) +
  11098. getFontStyle(p['Item_' + (i + 1)]);
  11099. }
  11100. item[i] = new mxCell('', new mxGeometry(0, i * h / p.Lines, w, itemH), 'strokeColor=none;fillColor=none;spacingLeft=20;align=left;html=1;');
  11101. item[i].vertex = true;
  11102. v.insert(item[i]);
  11103. item[i].style += st;
  11104. item[i].value = convertText(p['Item_' + (i + 1)]);
  11105. }
  11106. //add icon
  11107. if (p.Icons[(i + 1)] != null && item[i] != null)
  11108. {
  11109. if (p.Icons[(i + 1)] == 'dot')
  11110. {
  11111. icon[i] = new mxCell('', new mxGeometry(0, 0.5, 8, 8), 'ellipse;strokeColor=none;');
  11112. icon[i].geometry.offset = new mxPoint(6, -4);
  11113. }
  11114. else if (p.Icons[(i + 1)] == 'check')
  11115. {
  11116. icon[i] = new mxCell('', new mxGeometry(0, 0.5, 7, 8), 'shape=mxgraph.mscae.general.checkmark;strokeColor=none;');
  11117. icon[i].geometry.offset = new mxPoint(6.5, -4);
  11118. }
  11119. if (icon[i] != null)
  11120. {
  11121. icon[i].geometry.relative = true;
  11122. icon[i].vertex = true;
  11123. item[i].insert(icon[i]);
  11124. var fc = getStrokeColor(p, a);
  11125. fc = fc.replace('strokeColor', 'fillColor');
  11126. if (fc == '')
  11127. {
  11128. fc = 'fillColor=#000000;'
  11129. }
  11130. icon[i].style += fc;
  11131. }
  11132. }
  11133. //add shortcut
  11134. if (p['Shortcut_' + (i + 1)] != null)
  11135. {
  11136. if (st == null)
  11137. {
  11138. st = '' +
  11139. getFontSize(p['Shortcut_' + (i + 1)]) +
  11140. getFontColor(p['Shortcut_' + (i + 1)]) +
  11141. getFontStyle(p['Shortcut_' + (i + 1)]);
  11142. }
  11143. 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;');
  11144. shortcut[i].vertex = true;
  11145. v.insert(shortcut[i]);
  11146. shortcut[i].style += st;
  11147. shortcut[i].value = convertText(p['Shortcut_' + (i + 1)]);
  11148. }
  11149. //add line
  11150. if (p.Dividers[(i + 1)] != null)
  11151. {
  11152. item[i] = new mxCell('', new mxGeometry(w * 0.05, i * h / p.Lines, w * 0.9, itemH), 'shape=line;strokeWidth=1;');
  11153. item[i].vertex = true;
  11154. v.insert(item[i]);
  11155. item[i].style += getStrokeColor(p, a);
  11156. }
  11157. }
  11158. break;
  11159. case 'UI2TreePaneBlock' :
  11160. break;
  11161. case 'UI2ProgressBarBlock' :
  11162. v.style += 'shape=mxgraph.mockup.misc.progressBar;fillColor2=#888888;barPos=' + (p.ScrollVal * 100) + ';';
  11163. break;
  11164. case 'CalloutSquareBlock':
  11165. case 'UI2TooltipSquareBlock' :
  11166. v.value = convertText(p.Tip || p.Text);
  11167. v.style += 'html=1;shape=callout;flipV=1;base=13;size=7;position=0.5;position2=0.66;rounded=1;arcSize=' + (p.RoundCorners) + ';' +
  11168. getLabelStyle(p.Tip || p.Text, isLastLblHTML);
  11169. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11170. v.geometry.height += 10;
  11171. break;
  11172. case 'UI2CalloutBlock' :
  11173. v.value = convertText(p.Txt);
  11174. v.style += 'shape=ellipse;perimeter=ellipsePerimeter;' +
  11175. getLabelStyle(p.Txt, isLastLblHTML);
  11176. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11177. break;
  11178. case 'UI2AlertBlock' :
  11179. v.value = convertText(p.Txt);
  11180. v.style +=
  11181. getLabelStyle(p.Txt, isLastLblHTML);
  11182. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11183. var item1 = new mxCell('', new mxGeometry(0, 0, w, 30), 'part=1;resizeHeight=0;');
  11184. item1.vertex = true;
  11185. v.insert(item1);
  11186. item1.value = convertText(p.Title);
  11187. item1.style +=
  11188. getLabelStyle(p.Title, isLastLblHTML);
  11189. item1.style += addAllStyles(item1.style, p, a, item1, isLastLblHTML);
  11190. var item2 = new mxCell('', new mxGeometry(1, 0.5, 20, 20), 'ellipse;part=1;strokeColor=#008cff;resizable=0;fillColor=none;html=1;');
  11191. item2.geometry.relative = true;
  11192. item2.geometry.offset = new mxPoint(-25, -10);
  11193. item2.vertex = true;
  11194. item1.insert(item2);
  11195. var bw = 45;
  11196. var bh = 20;
  11197. var bs = 10;
  11198. var totalW = bw * p.Buttons + (bs * p.Buttons - 1)
  11199. item3 = new Array();
  11200. for (var i = 0; i < p.Buttons; i++)
  11201. {
  11202. item3[i] = new mxCell('', new mxGeometry(0.5, 1, bw, bh), 'part=1;html=1;');
  11203. item3[i].geometry.relative = true;
  11204. item3[i].geometry.offset = new mxPoint(-totalW * 0.5 + i * (bw + bs), -40);
  11205. item3[i].vertex = true;
  11206. v.insert(item3[i]);
  11207. item3[i].value = convertText(p['Button_' + (i + 1)]);
  11208. item3[i].style +=
  11209. getLabelStyle(p['Button_' + (i + 1)], isLastLblHTML);
  11210. item3[i].style += addAllStyles(item3[i].style, p, a, item3[i], isLastLblHTML);
  11211. }
  11212. break;
  11213. case 'UMLClassBlock' :
  11214. if (p.Simple == 0)
  11215. {
  11216. var st = getFillColor(p, a);
  11217. var th = Math.round(p.TitleHeight * scale) || 25;
  11218. st = st.replace('fillColor', 'swimlaneFillColor');
  11219. if (st == '')
  11220. {
  11221. st = 'swimlaneFillColor=#ffffff;'
  11222. }
  11223. v.value = convertText(p.Title);
  11224. v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;fontStyle=0;marginBottom=0;' + st +
  11225. 'startSize=' + th + ';' +
  11226. getLabelStyle(p.Title, isLastLblHTML);
  11227. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11228. var item = new Array();
  11229. var divider = new Array();
  11230. var currH = th / h;
  11231. var curY = th;
  11232. for (var i = 0; i <= p.Attributes; i++)
  11233. {
  11234. if (i > 0)
  11235. {
  11236. 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;');
  11237. curY += 8;
  11238. divider[i].vertex = true;
  11239. v.insert(divider[i]);
  11240. }
  11241. var itemH = 0;
  11242. //Text2 is used when p.Attributes is zero!
  11243. if (p.Attributes == 0)
  11244. {
  11245. i = 1;
  11246. itemH = 1;
  11247. }
  11248. else
  11249. {
  11250. if (i < p.Attributes)
  11251. {
  11252. itemH = p['Text' + (i + 1) + 'Percent'];
  11253. currH += itemH;
  11254. }
  11255. else
  11256. {
  11257. itemH = 1 - currH;
  11258. }
  11259. }
  11260. var extH = p.ExtraHeightSet && i == 1? (p.ExtraHeight * scale) : 0;
  11261. var curH = Math.round((h - th) * itemH) + extH;
  11262. 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;');
  11263. curY += curH;
  11264. item[i].vertex = true;
  11265. v.insert(item[i]);
  11266. item[i].style += st +
  11267. getOpacity(p, a, item[i]) +
  11268. getLabelStyle(p['Text' + (i + 1)], isLastLblHTML);
  11269. item[i].value = convertText(p['Text' + (i + 1)]);
  11270. }
  11271. }
  11272. else
  11273. {
  11274. v.value = convertText(p.Title);
  11275. v.style += 'align=center;';
  11276. v.style +=
  11277. getLabelStyle(p.Title, isLastLblHTML);
  11278. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11279. }
  11280. break;
  11281. case 'ERDEntityBlock' :
  11282. var st = getFillColor(p, a);
  11283. var th = p.Name_h * scale;
  11284. st = st.replace('fillColor', 'swimlaneFillColor');
  11285. if (st == '')
  11286. {
  11287. st = 'swimlaneFillColor=#ffffff;'
  11288. }
  11289. v.value = convertText(p.Name);
  11290. v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;fontStyle=0;marginBottom=0;' + st +
  11291. 'startSize=' + th + ';' +
  11292. getLabelStyle(p.Name, isLastLblHTML);
  11293. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11294. if (p.ShadedHeader)
  11295. {
  11296. var st = getColor(p.FillColor);
  11297. var darkerClr = getDarkerClr(st, 0.85);
  11298. v.style += 'fillColor=' + darkerClr + ';';
  11299. }
  11300. else
  11301. {
  11302. v.style += getFillColor(p, a);
  11303. }
  11304. var item = new Array();
  11305. var currH = th / h;
  11306. var curY = th;
  11307. for (var i = 0; i < p.Fields; i++)
  11308. {
  11309. var itemH = 0;
  11310. var curH = p['Field' + (i + 1) + '_h'] * scale;
  11311. 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;');
  11312. curY += curH;
  11313. item[i].vertex = true;
  11314. v.insert(item[i]);
  11315. item[i].style += st +
  11316. getLabelStyle(p['Field' + (i + 1)], isLastLblHTML);
  11317. if (p.AltRows == 1 && (i % 2 != 0))
  11318. {
  11319. item[i].style += 'fillColor=#000000;opacity=5;';
  11320. }
  11321. else
  11322. {
  11323. item[i].style += 'fillColor=none;' +
  11324. getOpacity(p, a, item[i]);
  11325. }
  11326. item[i].value = convertText(p['Field' + (i + 1)]);
  11327. }
  11328. break;
  11329. case 'ERDEntityBlock2' :
  11330. var st = getFillColor(p, a);
  11331. var th = p.Name_h * scale;
  11332. st = st.replace('fillColor', 'swimlaneFillColor');
  11333. if (st == '')
  11334. {
  11335. st = 'swimlaneFillColor=#ffffff;'
  11336. }
  11337. v.value = convertText(p.Name);
  11338. v.style += 'swimlane;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;fontStyle=0;' + st +
  11339. 'startSize=' + th + ';' +
  11340. getLabelStyle(p.Name, isLastLblHTML);
  11341. if (p.ShadedHeader)
  11342. {
  11343. v.style += 'fillColor=#e0e0e0;';
  11344. }
  11345. else
  11346. {
  11347. v.style += getFillColor(p, a);
  11348. }
  11349. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11350. var item = new Array();
  11351. var key = new Array();
  11352. var currH = th;
  11353. var keyW = 30;
  11354. if (p.Column1 != null)
  11355. {
  11356. keyW = p.Column1 * scale;
  11357. }
  11358. for (var i = 0; i < p.Fields; i++)
  11359. {
  11360. var itemH = 0;
  11361. 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;');
  11362. key[i].vertex = true;
  11363. v.insert(key[i]);
  11364. key[i].style += st +
  11365. getLabelStyle(p['Key' + (i + 1)], isLastLblHTML);
  11366. if (p.AltRows == 1 && (i % 2 != 0))
  11367. {
  11368. key[i].style += 'fillColor=#000000;fillOpacity=5;';
  11369. }
  11370. else
  11371. {
  11372. key[i].style += 'fillColor=none;' +
  11373. getOpacity(p, a, key[i]);
  11374. }
  11375. key[i].value = convertText(p['Key' + (i + 1)]);
  11376. 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;');
  11377. item[i].vertex = true;
  11378. v.insert(item[i]);
  11379. item[i].style += st +
  11380. getLabelStyle(p['Field' + (i + 1)], isLastLblHTML);
  11381. v.style += addAllStyles(v.style, p, a, v);
  11382. if (p.AltRows == 1 && (i % 2 != 0))
  11383. {
  11384. item[i].style += 'fillColor=#000000;fillOpacity=5;';
  11385. }
  11386. else
  11387. {
  11388. item[i].style += 'fillColor=none;' +
  11389. getOpacity(p, a, item[i]);
  11390. }
  11391. item[i].value = convertText(p['Field' + (i + 1)]);
  11392. currH += p['Key' + (i + 1) + '_h'] * scale;
  11393. }
  11394. break;
  11395. case 'ERDEntityBlock3' :
  11396. var st = getFillColor(p, a);
  11397. var th = p.Name_h * scale;
  11398. st = st.replace('fillColor', 'swimlaneFillColor');
  11399. if (st == '')
  11400. {
  11401. st = 'swimlaneFillColor=#ffffff;'
  11402. }
  11403. v.style += 'swimlane;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;fontStyle=0;' + st +
  11404. 'startSize=' + th + ';' +
  11405. getLabelStyle(p.Name);
  11406. if (p.ShadedHeader)
  11407. {
  11408. v.style += 'fillColor=#e0e0e0;';
  11409. }
  11410. else
  11411. {
  11412. v.style += getFillColor(p, a);
  11413. }
  11414. v.value = convertText(p.Name);
  11415. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11416. var item = new Array();
  11417. var key = new Array();
  11418. var currH = th;
  11419. var keyW = 30;
  11420. if (p.Column1 != null)
  11421. {
  11422. keyW = p.Column1 * scale;
  11423. }
  11424. for (var i = 0; i < p.Fields; i++)
  11425. {
  11426. var itemH = 0;
  11427. 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;');
  11428. key[i].vertex = true;
  11429. v.insert(key[i]);
  11430. key[i].style += st +
  11431. getLabelStyle(p['Field' + (i + 1)], isLastLblHTML);
  11432. if (p.AltRows == 1 && (i % 2 != 0))
  11433. {
  11434. key[i].style += 'fillColor=#000000;fillOpacity=5;';
  11435. }
  11436. else
  11437. {
  11438. key[i].style += 'fillColor=none;' +
  11439. getOpacity(p, a, key[i]);
  11440. }
  11441. key[i].value = convertText(p['Field' + (i + 1)]);
  11442. key[i].style += addAllStyles(key[i].style, p, a, key[i], isLastLblHTML);
  11443. 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;');
  11444. item[i].vertex = true;
  11445. v.insert(item[i]);
  11446. item[i].style += st +
  11447. getLabelStyle(p['Type' + (i + 1)], isLastLblHTML);
  11448. if (p.AltRows == 1 && (i % 2 != 0))
  11449. {
  11450. item[i].style += 'fillColor=#000000;fillOpacity=5;';
  11451. }
  11452. else
  11453. {
  11454. item[i].style += 'fillColor=none;' +
  11455. getOpacity(p, a, item[i]);
  11456. }
  11457. item[i].value = convertText(p['Type' + (i + 1)]);
  11458. item[i].style += addAllStyles(item[i].style, p, a, item[i], isLastLblHTML);
  11459. currH += p['Field' + (i + 1) + '_h'] * scale;
  11460. }
  11461. break;
  11462. case 'ERDEntityBlock4' :
  11463. var st = getFillColor(p, a);
  11464. var th = p.Name_h * scale;
  11465. st = st.replace('fillColor', 'swimlaneFillColor');
  11466. if (st == '')
  11467. {
  11468. st = 'swimlaneFillColor=#ffffff;'
  11469. }
  11470. v.style += 'swimlane;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;fontStyle=0;' + st +
  11471. 'startSize=' + th + ';' +
  11472. getLabelStyle(p.Name);
  11473. if (p.ShadedHeader)
  11474. {
  11475. v.style += 'fillColor=#e0e0e0;';
  11476. }
  11477. else
  11478. {
  11479. v.style += getFillColor(p, a);
  11480. }
  11481. v.value = convertText(p.Name);
  11482. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11483. var item = new Array();
  11484. var key = new Array();
  11485. var type = new Array();
  11486. var currH = th;
  11487. var keyW = 30;
  11488. var typeW = 40;
  11489. if (p.Column1 != null)
  11490. {
  11491. keyW = p.Column1 * scale;
  11492. }
  11493. if (p.Column2 != null)
  11494. {
  11495. typeW = p.Column2 * scale;
  11496. }
  11497. for (var i = 0; i < p.Fields; i++)
  11498. {
  11499. var itemH = 0;
  11500. 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;');
  11501. key[i].vertex = true;
  11502. v.insert(key[i]);
  11503. key[i].style += st +
  11504. getLabelStyle(p['Key' + (i + 1)], isLastLblHTML);
  11505. if (p.AltRows == 1 && (i % 2 != 0))
  11506. {
  11507. key[i].style += 'fillColor=#000000;fillOpacity=5;';
  11508. }
  11509. else
  11510. {
  11511. key[i].style += 'fillColor=none;' +
  11512. getOpacity(p, a, key[i]);
  11513. }
  11514. key[i].value = convertText(p['Key' + (i + 1)]);
  11515. key[i].style += addAllStyles(key[i].style, p, a, key[i], isLastLblHTML);
  11516. 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;');
  11517. item[i].vertex = true;
  11518. v.insert(item[i]);
  11519. item[i].style += st +
  11520. getLabelStyle(p['Field' + (i + 1)], isLastLblHTML);
  11521. if (p.AltRows == 1 && (i % 2 != 0))
  11522. {
  11523. item[i].style += 'fillColor=#000000;fillOpacity=5;';
  11524. }
  11525. else
  11526. {
  11527. item[i].style += 'fillColor=none;' +
  11528. getOpacity(p, a, item[i]);
  11529. }
  11530. item[i].value = convertText(p['Field' + (i + 1)]);
  11531. item[i].style += addAllStyles(item[i].style, p, a, item[i], isLastLblHTML);
  11532. 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;');
  11533. type[i].vertex = true;
  11534. v.insert(type[i]);
  11535. type[i].style += st +
  11536. getLabelStyle(p['Type' + (i + 1)], isLastLblHTML);
  11537. if (p.AltRows == 1 && (i % 2 != 0))
  11538. {
  11539. type[i].style += 'fillColor=#000000;fillOpacity=5;';
  11540. }
  11541. else
  11542. {
  11543. type[i].style += 'fillColor=none;' +
  11544. getOpacity(p, a, type[i]);
  11545. }
  11546. type[i].value = convertText(p['Type' + (i + 1)]);
  11547. type[i].style += addAllStyles(type[i].style, p, a, type[i], isLastLblHTML);
  11548. currH += p['Key' + (i + 1) + '_h'] * scale;
  11549. }
  11550. break;
  11551. case 'GCPServiceCardApplicationSystemBlock' :
  11552. addGCP2ServiceCard('application_system', w, h, v, p, a);
  11553. break;
  11554. case 'GCPServiceCardAuthorizationBlock' :
  11555. addGCP2ServiceCard('internal_payment_authorization', w, h, v, p, a);
  11556. break;
  11557. case 'GCPServiceCardBlankBlock' :
  11558. addGCP2ServiceCard('blank', w, h, v, p, a);
  11559. break;
  11560. case 'GCPServiceCardReallyBlankBlock' :
  11561. addGCP2ServiceCard('blank', w, h, v, p, a);
  11562. break;
  11563. case 'GCPServiceCardBucketBlock' :
  11564. addGCP2ServiceCard('bucket', w, h, v, p, a);
  11565. break;
  11566. case 'GCPServiceCardCDNInterconnectBlock' :
  11567. addGCP2ServiceCard('google_network_edge_cache', w, h, v, p, a);
  11568. break;
  11569. case 'GCPServiceCardCloudDNSBlock' :
  11570. addGCP2ServiceCard('blank', w, h, v, p, a);
  11571. break;
  11572. case 'GCPServiceCardClusterBlock' :
  11573. addGCP2ServiceCard('cluster', w, h, v, p, a);
  11574. break;
  11575. case 'GCPServiceCardDiskSnapshotBlock' :
  11576. addGCP2ServiceCard('persistent_disk_snapshot', w, h, v, p, a);
  11577. break;
  11578. case 'GCPServiceCardEdgePopBlock' :
  11579. addGCP2ServiceCard('google_network_edge_cache', w, h, v, p, a);
  11580. break;
  11581. case 'GCPServiceCardFrontEndPlatformServicesBlock' :
  11582. addGCP2ServiceCard('frontend_platform_services', w, h, v, p, a);
  11583. break;
  11584. case 'GCPServiceCardGatewayBlock' :
  11585. addGCP2ServiceCard('gateway', w, h, v, p, a);
  11586. break;
  11587. case 'GCPServiceCardGoogleNetworkBlock' :
  11588. addGCP2ServiceCard('google_network_edge_cache', w, h, v, p, a);
  11589. break;
  11590. case 'GCPServiceCardImageServicesBlock' :
  11591. addGCP2ServiceCard('image_services', w, h, v, p, a);
  11592. break;
  11593. case 'GCPServiceCardLoadBalancerBlock' :
  11594. addGCP2ServiceCard('network_load_balancer', w, h, v, p, a);
  11595. break;
  11596. case 'GCPServiceCardLocalComputeBlock' :
  11597. addGCP2ServiceCard('dedicated_game_server', w, h, v, p, a);
  11598. break;
  11599. case 'GCPServiceCardLocalStorageBlock' :
  11600. addGCP2ServiceCard('persistent_disk_snapshot', w, h, v, p, a);
  11601. break;
  11602. case 'GCPServiceCardLogsAPIBlock' :
  11603. addGCP2ServiceCard('logs_api', w, h, v, p, a);
  11604. break;
  11605. case 'GCPServiceCardMemcacheBlock' :
  11606. addGCP2ServiceCard('memcache', w, h, v, p, a);
  11607. break;
  11608. case 'GCPServiceCardNATBlock' :
  11609. addGCP2ServiceCard('nat', w, h, v, p, a);
  11610. break;
  11611. case 'GCPServiceCardPaymentFormBlock' :
  11612. addGCP2ServiceCard('external_payment_form', w, h, v, p, a);
  11613. break;
  11614. case 'GCPServiceCardPushNotificationsBlock' :
  11615. addGCP2ServiceCard('push_notification_service', w, h, v, p, a);
  11616. break;
  11617. case 'GCPServiceCardScheduledTasksBlock' :
  11618. addGCP2ServiceCard('scheduled_tasks', w, h, v, p, a);
  11619. break;
  11620. case 'GCPServiceCardServiceDiscoveryBlock' :
  11621. addGCP2ServiceCard('service_discovery', w, h, v, p, a);
  11622. break;
  11623. case 'GCPServiceCardSquidProxyBlock' :
  11624. addGCP2ServiceCard('squid_proxy', w, h, v, p, a);
  11625. break;
  11626. case 'GCPServiceCardTaskQueuesBlock' :
  11627. addGCP2ServiceCard('task_queues', w, h, v, p, a);
  11628. break;
  11629. case 'GCPServiceCardVirtualFileSystemBlock' :
  11630. addGCP2ServiceCard('virtual_file_system', w, h, v, p, a);
  11631. break;
  11632. case 'GCPServiceCardVPNGatewayBlock' :
  11633. addGCP2ServiceCard('gateway', w, h, v, p, a);
  11634. break;
  11635. case 'GCPInputDatabase' :
  11636. addGCP2UserDeviceCard('database', 1, 0.9, w, h, v, p, a);
  11637. break;
  11638. case 'GCPInputRecord' :
  11639. addGCP2UserDeviceCard('record', 1, 0.66, w, h, v, p, a);
  11640. break;
  11641. case 'GCPInputPayment' :
  11642. addGCP2UserDeviceCard('payment', 1, 0.8, w, h, v, p, a);
  11643. break;
  11644. case 'GCPInputGateway' :
  11645. addGCP2UserDeviceCard('gateway_icon', 1, 0.44, w, h, v, p, a);
  11646. break;
  11647. case 'GCPInputLocalCompute' :
  11648. addGCP2UserDeviceCard('compute_engine_icon', 1, 0.89, w, h, v, p, a);
  11649. break;
  11650. case 'GCPInputBeacon' :
  11651. addGCP2UserDeviceCard('beacon', 0.73, 1, w, h, v, p, a);
  11652. break;
  11653. case 'GCPInputStorage' :
  11654. addGCP2UserDeviceCard('storage', 1, 0.8, w, h, v, p, a);
  11655. break;
  11656. case 'GCPInputList' :
  11657. addGCP2UserDeviceCard('list', 0.89, 1, w, h, v, p, a);
  11658. break;
  11659. case 'GCPInputStream' :
  11660. addGCP2UserDeviceCard('stream', 1, 0.82, w, h, v, p, a);
  11661. break;
  11662. case 'GCPInputMobileDevices' :
  11663. addGCP2UserDeviceCard('mobile_devices', 1, 0.73, w, h, v, p, a);
  11664. break;
  11665. case 'GCPInputCircuitBoard' :
  11666. addGCP2UserDeviceCard('circuit_board', 1, 0.9, w, h, v, p, a);
  11667. break;
  11668. case 'GCPInputLive' :
  11669. addGCP2UserDeviceCard('live', 0.74, 1, w, h, v, p, a);
  11670. break;
  11671. case 'GCPInputUsers' :
  11672. addGCP2UserDeviceCard('users', 1, 0.63, w, h, v, p, a);
  11673. break;
  11674. case 'GCPInputLaptop' :
  11675. addGCP2UserDeviceCard('laptop', 1, 0.66, w, h, v, p, a);
  11676. break;
  11677. case 'GCPInputApplication' :
  11678. addGCP2UserDeviceCard('application', 1, 0.8, w, h, v, p, a);
  11679. break;
  11680. case 'GCPInputLightbulb' :
  11681. addGCP2UserDeviceCard('lightbulb', 0.7, 1, w, h, v, p, a);
  11682. break;
  11683. case 'GCPInputGame' :
  11684. addGCP2UserDeviceCard('game', 1, 0.54, w, h, v, p, a);
  11685. break;
  11686. case 'GCPInputDesktop' :
  11687. addGCP2UserDeviceCard('desktop', 1, 0.9, w, h, v, p, a);
  11688. break;
  11689. case 'GCPInputDesktopAndMobile' :
  11690. addGCP2UserDeviceCard('desktop_and_mobile', 1, 0.66, w, h, v, p, a);
  11691. break;
  11692. case 'GCPInputWebcam' :
  11693. addGCP2UserDeviceCard('webcam', 0.5, 1, w, h, v, p, a);
  11694. break;
  11695. case 'GCPInputSpeaker' :
  11696. addGCP2UserDeviceCard('speaker', 0.7, 1, w, h, v, p, a);
  11697. break;
  11698. case 'GCPInputRetail' :
  11699. addGCP2UserDeviceCard('retail', 1, 0.89, w, h, v, p, a);
  11700. break;
  11701. case 'GCPInputReport' :
  11702. addGCP2UserDeviceCard('report', 1, 1, w, h, v, p, a);
  11703. break;
  11704. case 'GCPInputPhone' :
  11705. addGCP2UserDeviceCard('phone', 0.64, 1, w, h, v, p, a);
  11706. break;
  11707. case 'GCPInputBlank' :
  11708. addGCP2UserDeviceCard('transparent', 1, 1, w, h, v, p, a);
  11709. break;
  11710. // no corresponding icons, only with shadows
  11711. // case 'GCPAppEngineProductCard' :
  11712. // addGCP2ExpandedProductCard('compute.app_engine', 1, 1, w, h, v, p, a);
  11713. // break;
  11714. // case 'GCPCloudDataflowProductCard' :
  11715. // addGCP2ExpandedProductCard('cloud_dataflow', 1, 1, w, h, v, p, a);
  11716. // break;
  11717. // case 'GCPCloudDataprocProductCard' :
  11718. // addGCP2ExpandedProductCard('cloud_dataproc', 1, 1, w, h, v, p, a);
  11719. // break;
  11720. // case 'GCPComputeEngineProductCard' :
  11721. // addGCP2ExpandedProductCard('compute_engine', 1, 1, w, h, v, p, a);
  11722. // break;
  11723. // case 'GCPContainerEngineProductCard' :
  11724. // addGCP2ExpandedProductCard('compute_engine', 1, 1, w, h, v, p, a);
  11725. // break;
  11726. case 'PresentationFrameBlock' :
  11727. if (p.ZOrder == 0) //These are hidden
  11728. {
  11729. v.style += 'strokeColor=none;fillColor=none;';
  11730. }
  11731. else
  11732. {
  11733. v.style += getLabelStyle(p.Text);
  11734. v.value = convertText(p.Text);
  11735. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11736. }
  11737. break;
  11738. case 'SVGPathBlock2' :
  11739. try
  11740. {
  11741. var strokeWidth = p.LineWidth;
  11742. var strokeColor = p.LineColor;
  11743. var fillColor = p.FillColor;
  11744. var drawData = p.DrawData.Data;
  11745. var svg = '<svg viewBox="0 0 1 1" xmlns="http://www.w3.org/2000/svg">';
  11746. var imgUrlStyle = null;
  11747. for (var i = 0; i < drawData.length; i++)
  11748. {
  11749. var dd = drawData[i];
  11750. var path = dd.a;
  11751. var sw = (dd.w == 'prop' || dd.w == null? strokeWidth : dd.w) / Math.min(w, h) * scale; //TODO Stroke width caclulationn needs review
  11752. var sc = dd.s == 'prop' || dd.s == null? strokeColor : dd.s;
  11753. var fc = dd.f == 'prop' || dd.f == null? fillColor : dd.f;
  11754. if (typeof fc == 'object')
  11755. {
  11756. if (fc.url != null)
  11757. {
  11758. imgUrlStyle = 'shape=image;image=' + mapImgUrl(fc.url) + ';';
  11759. }
  11760. fc = Array.isArray(fc.cs)? fc.cs[0].c : fillColor; //Approximation TODO Handle it
  11761. }
  11762. svg += '<path d="' + path + '" fill="' + fc + '" stroke="' + sc + '" stroke-width="' + sw + '"/>';
  11763. }
  11764. svg += '</svg>';
  11765. v.style = imgUrlStyle? imgUrlStyle : 'shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;' +
  11766. 'verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,' + ((window.btoa) ? btoa(svg) : Base64.encode(svg, true)) + ';';
  11767. }
  11768. catch(e){}
  11769. break;
  11770. case 'BraceBlock':
  11771. case 'BraceBlockRotated':
  11772. case 'BracketBlock':
  11773. case 'BracketBlockRotated':
  11774. var bracketStyle = cls.indexOf('Bracket') == 0? 'size=0;arcSize=50;' : '';
  11775. var sideStyle = addAllStyles(v.style, p, a, v, isLastLblHTML);
  11776. var rotation = getRotation(p, a, v);
  11777. v.style = 'group;' + rotation;
  11778. var sideWidth = Math.min((rotation? w : h) * 0.14, 100);
  11779. var left = new mxCell('', new mxGeometry(0, 0, sideWidth, h), 'shape=curlyBracket;rounded=1;' + bracketStyle + sideStyle);
  11780. left.vertex = true;
  11781. left.geometry.relative = true;
  11782. var right = new mxCell('', new mxGeometry(1 - sideWidth / w, 0, sideWidth, h), 'shape=curlyBracket;rounded=1;flipH=1;' + bracketStyle + sideStyle);
  11783. right.vertex = true;
  11784. right.geometry.relative = true;
  11785. v.insert(left);
  11786. v.insert(right);
  11787. break;
  11788. case 'BPMNTextAnnotation':
  11789. case 'NoteBlock':
  11790. p.InsetMargin = null;
  11791. v.value = convertText(p.Text);
  11792. v.style = 'group;spacingLeft=8;align=left;spacing=0;strokeColor=none;';
  11793. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  11794. if (v.style.indexOf('verticalAlign') < 0)
  11795. {
  11796. v.style += 'verticalAlign=middle;';
  11797. }
  11798. var side = new mxCell('', new mxGeometry(0, 0, 8, h), 'shape=partialRectangle;right=0;fillColor=none;');
  11799. side.geometry.relative = true;
  11800. side.vertex = true;
  11801. side.style += addAllStyles(side.style, p, a, v, isLastLblHTML);
  11802. v.insert(side);
  11803. break;
  11804. case 'VSMTimelineBlock':
  11805. case 'TimelineBlock':
  11806. //TODO Timeline shapes are postponed, this code is a work-in-progress
  11807. /* try
  11808. {
  11809. var daysMap = {
  11810. 'Sunday': 0,
  11811. 'Monday': 1,
  11812. 'Tuesday': 2,
  11813. 'Wednesday': 3,
  11814. 'Thursday': 4,
  11815. 'Friday': 5,
  11816. 'Saturday': 6
  11817. };
  11818. var isLine = p.TimelineType == 'lineTimeline';
  11819. var startDate = new Date(p.StartDate);
  11820. var endDate = new Date(p.FinishDate);
  11821. var startOfWeek = daysMap[p.StartOfWeek];
  11822. var startOfFiscY = new Date(p.StartOfFiscalYear);
  11823. var timeUnit = p.TimeUnit;
  11824. var showStartEnd = p.DisplayStartFinishDates;
  11825. var showTickLbl = p.DisplayInterimDates;
  11826. var startTick, inc;
  11827. switch (timeUnit)
  11828. {
  11829. case 'second':
  11830. startTick = inc = 1000;
  11831. break;
  11832. case 'minute':
  11833. startTick = inc = 1000 * 60;
  11834. break;
  11835. case 'hour':
  11836. startTick = inc = 1000 * 60 * 60;
  11837. break;
  11838. case 'day':
  11839. startTick = inc = 1000 * 60 * 60 * 24;
  11840. break;
  11841. case 'week':
  11842. var dayTillNextWeek = (7 - startDate.getDay() + startOfWeek) % 7;
  11843. var nextWeek = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + dayTillNextWeek);
  11844. startTick = nextWeek.getTime() - startDate.getTime();
  11845. inc = 1000 * 60 * 60 * 24 * 7;
  11846. break;
  11847. case 'month':
  11848. var nextMonth = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 1);
  11849. startTick = nextMonth.getTime() - startDate.getTime();
  11850. inc = 1000 * 60 * 60 * 24 * 30;
  11851. break;
  11852. case 'quarter':
  11853. var monthToNextQtr = (12 - startDate.getMonth() + startOfFiscY.getMonth()) % 3;
  11854. var nextQrt = new Date(startDate.getFullYear(),
  11855. startDate.getMonth() + (monthToNextQtr == 0 && startDate.getDate() >= startOfFiscY.getDate()? 3 : monthToNextQtr), startOfFiscY.getDate());
  11856. startTick = nextQrt.getTime() - startDate.getTime();
  11857. inc = 1000 * 60 * 60 * 24 * 90;
  11858. break;
  11859. case 'year':
  11860. var nextYear = new Date(startDate.getFullYear() + 1, 0, 1);
  11861. startTick = nextYear.getTime() - startDate.getTime();
  11862. inc = 1000 * 60 * 60 * 24 * 365;
  11863. break;
  11864. }
  11865. var diff = endDate.getTime() - startDate.getTime();
  11866. var afterFirst = diff - startTick;
  11867. var ticksCount = Math.round(afterFirst / inc);
  11868. var startX = startTick/diff * w;
  11869. var ldx = inc/diff * w;
  11870. console.log(startX, ldx, ticksCount)
  11871. }
  11872. catch(e)
  11873. {
  11874. console.log(e); //Ignore
  11875. }
  11876. break;*/
  11877. case 'TimelineMilestoneBlock':
  11878. // break;
  11879. case 'TimelineIntervalBlock':
  11880. LucidImporter.hasTimeLine = true;
  11881. LucidImporter.hasUnknownShapes = true;
  11882. break;
  11883. case 'FreehandBlock':
  11884. try
  11885. {
  11886. var rotation = getRotation(p, a, v);
  11887. v.style = 'group;' + rotation;
  11888. if (p.Stencil != null)
  11889. {
  11890. if (p.Stencil.id == null)
  11891. {
  11892. //Add a temporary stencil for embedded ones
  11893. p.Stencil.id = '$$tmpId$$';
  11894. addStencil(p.Stencil.id, p.Stencil);
  11895. }
  11896. var stencil = LucidImporter.stencilsMap[p.Stencil.id];
  11897. var cx = -stencil.x / stencil.w, cy = -stencil.y / stencil.h;
  11898. for (var i = 0; i < stencil.stencils.length; i++)
  11899. {
  11900. var shape = stencil.stencils[i];
  11901. var cell = new mxCell('', new mxGeometry(cx, cy, w, h), 'shape=' + shape.shapeStencil + ';');
  11902. var sfc = shape.FillColor, slc = shape.LineColor, slw = shape.LineWidth;
  11903. if (shape.FillColor == 'prop')
  11904. {
  11905. shape.FillColor = p.FillColor;
  11906. }
  11907. if (shape.FillColor == null)
  11908. {
  11909. shape.FillColor = '#ffffff00'; //Transparent fillColor
  11910. }
  11911. if (shape.LineColor == 'prop')
  11912. {
  11913. shape.LineColor = p.LineColor;
  11914. }
  11915. if (shape.LineColor == null)
  11916. {
  11917. shape.LineColor = '#ffffff00'; //Transparent strokeColor
  11918. }
  11919. if (shape.LineWidth == 'prop')
  11920. {
  11921. shape.LineWidth = p.LineWidth;
  11922. }
  11923. //Add stencil styles
  11924. cell.style += addAllStyles(cell.style, shape, a, cell, isLastLblHTML);
  11925. // Restore shape properties
  11926. shape.FillColor = sfc; shape.LineColor = slc; shape.LineWidth = slw;
  11927. //Add other styles from parent
  11928. var fc = p.FillColor, lc = p.LineColor, lw = p.LineWidth;
  11929. p.FillColor = null; p.LineColor = null; p.LineWidth = null;
  11930. cell.style += addAllStyles(cell.style, p, a, cell, isLastLblHTML);
  11931. p.FillColor = fc; p.LineColor = lc; p.LineWidth = lw;
  11932. cell.vertex = true;
  11933. cell.geometry.relative = true;
  11934. v.insert(cell);
  11935. }
  11936. var index = 0;
  11937. var rotation = p.Rotation;
  11938. while (p['t' + index])
  11939. {
  11940. var lblObj = p['t' + index];
  11941. var txt = convertText(lblObj);
  11942. if (txt)
  11943. {
  11944. var lbl = new mxCell(txt, new mxGeometry(0, 0, w, h), 'strokeColor=none;fillColor=none;overflow=visible;');
  11945. p.Rotation = 0; //Disable rotation of the parent since it is captured in the srencil below
  11946. lbl.style += addAllStyles(lbl.style, lblObj, a, lbl, isLastLblHTML);
  11947. lbl.style += addAllStyles(lbl.style, p, a, lbl, isLastLblHTML);
  11948. p.Rotation = rotation;
  11949. if (stencil.text != null && stencil.text['t' + index] != null)
  11950. {
  11951. var gTxtObj = stencil.text['t' + index];
  11952. gTxtObj.Rotation = rotation + (gTxtObj.rotation? gTxtObj.rotation : 0)
  11953. + (p['t' + index + '_TRotation']? p['t' + index + '_TRotation'] : 0)
  11954. + (p['t' + index + '_TAngle']? p['t' + index + '_TAngle'] : 0);
  11955. lbl.style += addAllStyles(lbl.style, gTxtObj, a, lbl, isLastLblHTML);
  11956. var lblGeo = lbl.geometry;
  11957. if (gTxtObj.w)
  11958. {
  11959. lblGeo.width *= (gTxtObj.w / stencil.w);
  11960. }
  11961. if (gTxtObj.h)
  11962. {
  11963. lblGeo.height *= (gTxtObj.h / stencil.h);
  11964. }
  11965. if (gTxtObj.x)
  11966. {
  11967. lblGeo.x = gTxtObj.x / stencil.w;
  11968. }
  11969. if (gTxtObj.y)
  11970. {
  11971. lblGeo.y = gTxtObj.y / stencil.h;
  11972. }
  11973. if (gTxtObj.fw)
  11974. {
  11975. lblGeo.width *= gTxtObj.fw * scale / w;
  11976. }
  11977. if (gTxtObj.fh)
  11978. {
  11979. lblGeo.height *= gTxtObj.fh * scale / h;
  11980. }
  11981. if (gTxtObj.fx)
  11982. {
  11983. lblGeo.x = (gTxtObj.fx > 0? 1 : 0) + gTxtObj.fx * scale / w;
  11984. }
  11985. if (gTxtObj.fy)
  11986. {
  11987. lblGeo.y = (gTxtObj.fy > 0? 1 : 0) + gTxtObj.fy * scale / h;
  11988. }
  11989. }
  11990. lbl.vertex = true;
  11991. lbl.geometry.relative = true;
  11992. v.insert(lbl);
  11993. }
  11994. index++;
  11995. }
  11996. }
  11997. if (p.FillColor && p.FillColor.url)
  11998. {
  11999. var img = new mxCell('', new mxGeometry(0, 0, w, h), 'shape=image;html=1;');
  12000. img.style += getImage({}, {}, p.FillColor.url);
  12001. img.vertex = true;
  12002. img.geometry.relative = true;
  12003. v.insert(img);
  12004. }
  12005. }
  12006. catch(e)
  12007. {
  12008. console.log('Freehand error', e);
  12009. }
  12010. break;
  12011. case 'RightArrowBlock':
  12012. var arrowSize = p.Head * h / w;
  12013. v.style = 'shape=singleArrow;arrowWidth=' + (1 - p.Notch * 2) + ';arrowSize=' + arrowSize;
  12014. v.value = convertText(p);
  12015. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12016. break;
  12017. case 'DoubleArrowBlock':
  12018. var arrowSize = p.Head * h / w;
  12019. v.style = 'shape=doubleArrow;arrowWidth=' + (1 - p.Notch * 2) + ';arrowSize=' + arrowSize;
  12020. v.value = convertText(p);
  12021. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12022. break;
  12023. case 'VPCSubnet2017':
  12024. case 'VirtualPrivateCloudContainer2017':
  12025. case 'ElasticBeanStalkContainer2017':
  12026. case 'EC2InstanceContents2017':
  12027. case 'AWSCloudContainer2017':
  12028. case 'CorporateDataCenterContainer2017':
  12029. //all use the same code, just icon is different
  12030. var iconStyle, iconW, iconH;
  12031. switch(cls)
  12032. {
  12033. case 'VPCSubnet2017':
  12034. iconStyle = 'shape=mxgraph.aws3.permissions;fillColor=#D9A741;';
  12035. iconW = 30;
  12036. iconH = 35;
  12037. break;
  12038. case 'VirtualPrivateCloudContainer2017':
  12039. iconStyle = 'shape=mxgraph.aws3.virtual_private_cloud;fillColor=#F58536;';
  12040. iconW = 52;
  12041. iconH = 36;
  12042. break;
  12043. case 'ElasticBeanStalkContainer2017':
  12044. iconStyle = 'shape=mxgraph.aws3.elastic_beanstalk;fillColor=#F58536;';
  12045. iconW = 30;
  12046. iconH = 41;
  12047. break;
  12048. case 'EC2InstanceContents2017':
  12049. iconStyle = 'shape=mxgraph.aws3.instance;fillColor=#F58536;';
  12050. iconW = 40;
  12051. iconH = 41;
  12052. break;
  12053. case 'AWSCloudContainer2017':
  12054. iconStyle = 'shape=mxgraph.aws3.cloud;fillColor=#F58536;';
  12055. iconW = 52;
  12056. iconH = 36;
  12057. break;
  12058. case 'CorporateDataCenterContainer2017':
  12059. iconStyle = 'shape=mxgraph.aws3.corporate_data_center;fillColor=#7D7C7C;';
  12060. iconW = 30;
  12061. iconH = 42;
  12062. break;
  12063. }
  12064. v.style = 'rounded=1;arcSize=10;dashed=0;verticalAlign=bottom;';
  12065. v.value = convertText(p);
  12066. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12067. v.geometry.y += 20;
  12068. v.geometry.height -= 20;
  12069. var icon = new mxCell('', new mxGeometry(20, -20, iconW, iconH), iconStyle);
  12070. icon.vertex = true;
  12071. v.insert(icon);
  12072. break;
  12073. case 'FlexiblePolygonBlock':
  12074. var parts = ["<shape strokewidth=\"inherit\"><foreground>"];
  12075. parts.push("<path>");
  12076. for (var j = 0; j < p.Vertices.length; j++)
  12077. {
  12078. var line = p.Vertices[j];
  12079. if (j == 0)
  12080. {
  12081. parts.push("<move x=\"" + (line.x * 100) + "\" y=\"" + (line.y * 100) + "\"/>");
  12082. }
  12083. else
  12084. {
  12085. parts.push("<line x=\"" + (line.x * 100) + "\" y=\"" + (line.y * 100) + "\"/>");
  12086. }
  12087. }
  12088. parts.push("</path>");
  12089. parts.push("<fillstroke/>");
  12090. parts.push("</foreground></shape>");
  12091. v.style = 'shape=stencil(' + Graph.compress(parts.join('')) + ');';
  12092. v.value = convertText(p);
  12093. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12094. break;
  12095. case 'InfographicsBlock':
  12096. var min = p.ShapeData_1.Value;
  12097. var max = p.ShapeData_2.Value - min;
  12098. var val = p.ShapeData_3.Value - min;
  12099. var thickness = p.ShapeData_4.Value * w / 200; //Percentage of half of width
  12100. var index = p.InternalStencilId == 'ProgressBar'? 4 : 5;
  12101. var fillClr = p['ShapeData_' + index].Value;
  12102. fillClr = fillClr == '=fillColor()'? p.FillColor : fillClr;
  12103. var bkgClr = p['ShapeData_' + (index + 1)].Value;
  12104. switch(p.InternalStencilId)
  12105. {
  12106. case 'ProgressDonut':
  12107. v.style = 'shape=mxgraph.basic.donut;dx=' + thickness + ';strokeColor=none;fillColor=' + getColor(bkgClr) + ';' + getOpacity2(bkgClr, 'fillOpacity');
  12108. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12109. var inner = new mxCell('', new mxGeometry(0, 0, w, h), 'shape=mxgraph.basic.partConcEllipse;startAngle=0;endAngle=' + (val / max) + ';arcWidth=' + (thickness / w * 2) +
  12110. ';strokeColor=none;fillColor=' + getColor(fillClr) + ';' + getOpacity2(fillClr, 'fillOpacity'));
  12111. inner.style += addAllStyles(inner.style, p, a, inner, isLastLblHTML);
  12112. inner.vertex = true;
  12113. inner.geometry.relative = 1;
  12114. v.insert(inner);
  12115. break;
  12116. case 'ProgressHalfDonut':
  12117. //as a workaround do it as a circle
  12118. v.geometry.height *= 2;
  12119. v.geometry.rotate90(); //TODO fix shape rotation
  12120. var angle = val / max / 2;
  12121. v.style = 'shape=mxgraph.basic.partConcEllipse;startAngle=0;endAngle=' + angle + ';arcWidth=' + (thickness * 2 / w) +
  12122. ';strokeColor=none;fillColor=' + getColor(fillClr) + ';' + getOpacity2(fillClr, 'fillOpacity')
  12123. p.Rotation -= Math.PI / 2;
  12124. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12125. 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) +
  12126. ';strokeColor=none;flipH=1;fillColor=' + getColor(bkgClr) + ';' + getOpacity2(bkgClr, 'fillOpacity'));
  12127. p.Rotation += Math.PI;
  12128. inner.style += addAllStyles(inner.style, p, a, inner, isLastLblHTML);
  12129. inner.vertex = true;
  12130. inner.geometry.relative = 1;
  12131. v.insert(inner);
  12132. break;
  12133. case 'ProgressBar':
  12134. v.style = 'strokeColor=none;fillColor=' + getColor(bkgClr) + ';' + getOpacity2(bkgClr, 'fillOpacity');
  12135. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12136. var inner = new mxCell('', new mxGeometry(0, 0, w * val / max, h), 'strokeColor=none;fillColor=' + getColor(fillClr) + ';' + getOpacity2(fillClr, 'fillOpacity'));
  12137. inner.style += addAllStyles(inner.style, p, a, inner, isLastLblHTML);
  12138. inner.vertex = true;
  12139. inner.geometry.relative = 1;
  12140. v.insert(inner);
  12141. break;
  12142. }
  12143. break;
  12144. case 'InternalStorageBlock':
  12145. v.style += 'shape=internalStorage;dx=10;dy=10';
  12146. //Adjust left and top spacing to handle the shape
  12147. if (p.Text && p.Text.m)
  12148. {
  12149. var m = p.Text.m, isMT = false, isIL = false;
  12150. for (var i = 0; i < m.length; i++)
  12151. {
  12152. var currM = m[i];
  12153. if (!isMT && currM.n == 'mt')
  12154. {
  12155. currM.v = 17 + (currM.v || 0);
  12156. isMT = true;
  12157. }
  12158. else if (!isIL && currM.n == 'il')
  12159. {
  12160. currM.v = 17 + (currM.v || 0);
  12161. isIL = true;
  12162. }
  12163. }
  12164. if (!isMT)
  12165. {
  12166. m.push({
  12167. "s": 0,
  12168. "n": "mt",
  12169. "v": 17
  12170. });
  12171. }
  12172. if (!isIL)
  12173. {
  12174. m.push({
  12175. "s": 0,
  12176. "n": "il",
  12177. "v": 17
  12178. });
  12179. }
  12180. }
  12181. v.value = convertText(p);
  12182. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12183. break;
  12184. case 'PersonRoleBlock' :
  12185. try
  12186. {
  12187. var st = getFillColor(p, a);
  12188. var th = h/2;
  12189. st = st.replace('fillColor', 'swimlaneFillColor');
  12190. if (st == '')
  12191. {
  12192. st = 'swimlaneFillColor=#ffffff;'
  12193. }
  12194. v.value = convertText(p.Role);
  12195. v.style += 'swimlane;childLayout=stackLayout;horizontal=1;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;' + st +
  12196. 'startSize=' + th + ';spacingLeft=3;spacingRight=3;fontStyle=0;' +
  12197. getLabelStyle(p.Role, isLastLblHTML);
  12198. v.style += addAllStyles(v.style, p, a, v, isLastLblHTML);
  12199. var name = new mxCell('', new mxGeometry(0, h/2, w, h/2), 'part=1;html=1;resizeHeight=0;spacingTop=-1;spacingLeft=3;spacingRight=3;');
  12200. name.value = convertText(p.Name);
  12201. name.vertex = true;
  12202. v.insert(name);
  12203. name.style += getLabelStyle(p.Name, isLastLblHTML);
  12204. name.style += addAllStyles(name.style, p, a, name, isLastLblHTML);
  12205. }
  12206. catch(e)
  12207. {
  12208. //Ignore
  12209. console.log(e);
  12210. }
  12211. break;
  12212. }
  12213. if (v.style && v.style.indexOf('html') < 0)
  12214. {
  12215. v.style += 'html=1;';
  12216. }
  12217. if (p.Title && p.Title.t && p.Text && p.Text.t)
  12218. {
  12219. try
  12220. {
  12221. var geo = v.geometry;
  12222. var title = new mxCell(convertText(p.Title), new mxGeometry(0, geo.height + 4,geo.width, 10),
  12223. 'strokeColor=none;fillColor=none;whiteSpace=wrap;verticalAlign=top;labelPosition=center;verticalLabelPosition=top;align=center;');
  12224. title.vertex = true;
  12225. v.insert(title);
  12226. v.style += getLabelStyle(p.Title, isLastLblHTML);
  12227. }
  12228. catch(e)
  12229. {
  12230. console.log(e);
  12231. }
  12232. }
  12233. handleTextRotation(v, p);
  12234. addCustomData(v, p, graph);
  12235. if (p.Hidden)
  12236. {
  12237. v.visible = false;
  12238. }
  12239. return v;
  12240. };
  12241. function handleTextRotation(v, p)
  12242. {
  12243. if (p.Text_TRotation || p.TextRotation)
  12244. {
  12245. try
  12246. {
  12247. var deg = mxUtils.toDegree(p.Text_TRotation || 0) + mxUtils.toDegree(p.TextRotation || 0);
  12248. if (!isNaN(deg) && deg != 0 && v.value)
  12249. {
  12250. var w = v.geometry.width, h = v.geometry.height;
  12251. var lblW = w, lblH = h, x = 0, y = 0;
  12252. if (deg == -90 || deg == -270)
  12253. {
  12254. lblW = h;
  12255. lblH = w;
  12256. var diff = (h - w) / 2;
  12257. x = -diff / w;
  12258. y = diff/ h;
  12259. }
  12260. deg += mxUtils.toDegree(p.Rotation);
  12261. //Remove fill and stroke colors + rotation from vertex style
  12262. var style = v.style.split(';').filter(function(s)
  12263. {
  12264. return s.indexOf('fillColor=') < 0 && s.indexOf('strokeColor=') < 0 && s.indexOf('rotation=') < 0;
  12265. }).join(';');
  12266. var lbl = new mxCell(v.value, new mxGeometry(x, y, lblW, lblH), style + 'fillColor=none;strokeColor=none;rotation=' + deg + ';');
  12267. v.value = null;
  12268. lbl.geometry.relative = true;
  12269. lbl.vertex = true;
  12270. v.insert(lbl);
  12271. }
  12272. }
  12273. catch(e)
  12274. {
  12275. console.log(e); //Ignore
  12276. }
  12277. }
  12278. };
  12279. function createOrgChart(objId, props, data, graph, lookup)
  12280. {
  12281. function getLineTxtStyle(cellDefaultStyle, fieldName)
  12282. {
  12283. var style = '';
  12284. try
  12285. {
  12286. for (var i = 0; i < cellDefaultStyle.text.length; i++)
  12287. {
  12288. var item = cellDefaultStyle.text[i];
  12289. if (item[0] == 't_' + fieldName)
  12290. {
  12291. for (var key in item[1])
  12292. {
  12293. var val = item[1][key];
  12294. if (!val) continue;
  12295. switch(key)
  12296. {
  12297. case 'font':
  12298. style += mapFontFamily(val);
  12299. break;
  12300. case 'bold':
  12301. style += 'font-weight: bold;';
  12302. break;
  12303. case 'italic':
  12304. style += 'font-style: italic;';
  12305. break;
  12306. case 'underline':
  12307. style += 'text-decoration: underline;';
  12308. break;
  12309. case 'size':
  12310. style += 'font-size:' + fix1Digit(val * scale) + 'px;';
  12311. break;
  12312. case 'color':
  12313. style += 'color:' + rgbToHex(val).substring(0, 7) + ';';
  12314. break;
  12315. case 'fill':
  12316. style += 'background-color:' + rgbToHex(val).substring(0, 7) + ';';
  12317. break;
  12318. case 'align':
  12319. style += 'text-align:' + val + ';';
  12320. break;
  12321. }
  12322. }
  12323. break;
  12324. }
  12325. }
  12326. }
  12327. catch(e){}
  12328. return style;
  12329. };
  12330. try
  12331. {
  12332. //TODO Cell specific styles and chartType defaults
  12333. var defImg = 'https://cdn4.iconfinder.com/data/icons/basic-user-interface-elements/700/user-account-profile-human-avatar-face-head--128.png';
  12334. var chartType = props.OrgChartBlockType;
  12335. var pos = props.Location;
  12336. var x = pos.x * scale, y = pos.y * scale;
  12337. var chartGroup = new mxCell('', new mxGeometry(x, y, 200, 100), 'group');
  12338. chartGroup.vertex = true;
  12339. graph.addCell(chartGroup);
  12340. var fields = props.FieldNames;
  12341. var layoutSettings = props.LayoutSettings;
  12342. var cellDefaultStyle = props.BlockItemDefaultStyle || {props: {}};
  12343. var edgeDefaultStyle = props.EdgeItemDefaultStyle;
  12344. var parents = {};
  12345. var idPrefix = (objId || Date.now()) + '_';
  12346. if (chartType == 4)
  12347. {
  12348. cellDefaultStyle.props.LineWidth = 0;
  12349. }
  12350. var txtStyles = [], marginW = 25, marginH = 40, imgSize = 54, hasImage = true, cellStyle = addAllStyles('', cellDefaultStyle.props, {}, chartGroup, true);
  12351. if (chartType == 0) //Image top-center
  12352. {
  12353. cellStyle += 'spacingTop=' + imgSize + ';imageWidth=' + imgSize + ';imageHeight=' + imgSize + ';imageAlign=center;imageVerticalAlign=top;image=';
  12354. marginH += imgSize;
  12355. }
  12356. else if (chartType == 1 || chartType == 2) //Image to top-left (or outsize top-left which we don't support)
  12357. {
  12358. cellStyle += 'spacingLeft=' + imgSize + ';imageWidth=' + (imgSize - 4) + ';imageHeight=' + (imgSize - 4) + ';imageAlign=left;imageVerticalAlign=top;image=';
  12359. marginW += imgSize;
  12360. }
  12361. else if (chartType >= 3)
  12362. {
  12363. hasImage = false;
  12364. }
  12365. for (var j = 0; j < fields.length; j++)
  12366. {
  12367. txtStyles.push(getLineTxtStyle(cellDefaultStyle, fields[j]));
  12368. }
  12369. function createNode(pk, pId, dObj)
  12370. {
  12371. var id = idPrefix + pk;
  12372. parents[id] = pId;
  12373. var lbl = '';
  12374. for (var j = 0; j < fields.length; j++)
  12375. {
  12376. lbl += '<div style="' + txtStyles[j] + '">' +
  12377. (dObj[fields[j]] || '&nbsp;') + '</div>';
  12378. }
  12379. var size = mxUtils.getSizeForString(lbl);
  12380. //TODO Is image always in Image/018__ImageUrl__?
  12381. var imgUrl = mapImgUrl(dObj['Image'] || dObj['018__ImageUrl__']) || defImg;
  12382. var cell = new mxCell(lbl, new mxGeometry(0, 0, size.width + marginW, size.height + marginH),
  12383. cellStyle + (hasImage? imgUrl : ''));
  12384. cell.vertex = true;
  12385. lookup[id] = cell;
  12386. graph.addCell(cell, chartGroup);
  12387. };
  12388. if (data.Items)
  12389. {
  12390. var chartDataSrc = data.Items.n;
  12391. for (var i = 0; i < chartDataSrc.length; i++)
  12392. {
  12393. var d = chartDataSrc[i];
  12394. createNode(d.pk, d.ie[0]? d.ie[0].nf : null, d.f);
  12395. }
  12396. }
  12397. else
  12398. {
  12399. var dataId, derivative = props.ContractMap.derivative;
  12400. if (derivative == null)
  12401. {
  12402. //We don't have enough samples of this format, TODO improve this
  12403. var people = props.ContractMap.c.People;
  12404. dataId = people.id;
  12405. dataId = dataId.substr(0, dataId.lastIndexOf('_'));
  12406. for (var j = 0; j < fields.length; j++)
  12407. {
  12408. fields[j] = people.f[fields[j]] || fields[j];
  12409. }
  12410. }
  12411. else
  12412. {
  12413. for (var i = 0; i < derivative.length; i++)
  12414. {
  12415. if (derivative[i].type == 'ForeignKeyGraph')
  12416. {
  12417. dataId = derivative[i].c[0].id;
  12418. dataId = dataId.substr(0, dataId.lastIndexOf('_'));
  12419. }
  12420. else if (derivative[i].type == 'MappedGraph')
  12421. {
  12422. for (var j = 0; j < fields.length; j++)
  12423. {
  12424. fields[j] = derivative[i].nfs[fields[j]] || fields[j];
  12425. }
  12426. }
  12427. }
  12428. }
  12429. var chartDataSrc, foreignKey, primaryKey;
  12430. for (var key in data)
  12431. {
  12432. var d = data[key].Collections;
  12433. for (var key2 in d)
  12434. {
  12435. if (key2 == dataId)
  12436. {
  12437. chartDataSrc = d[key2].Items;
  12438. }
  12439. else if (d[key2].Properties.ForeignKeys && d[key2].Properties.ForeignKeys[0])
  12440. {
  12441. foreignKey = d[key2].Properties.ForeignKeys[0].SourceFields[0];
  12442. primaryKey = d[key2].Properties.Schema.PrimaryKey[0];
  12443. }
  12444. }
  12445. if (chartDataSrc)
  12446. {
  12447. break;
  12448. }
  12449. }
  12450. var dupMap = {};
  12451. for (var id in chartDataSrc)
  12452. {
  12453. var d = chartDataSrc[id];
  12454. var pk = d[primaryKey], fk = d[foreignKey];
  12455. //Special case where these nodes has duplicate id and should be connected somehow!
  12456. if (pk == fk)
  12457. {
  12458. dupMap[pk] = pk + Date.now();
  12459. pk = dupMap[pk];
  12460. d[primaryKey] = pk;
  12461. createNode(pk, fk, d);
  12462. }
  12463. else
  12464. {
  12465. createNode(pk, dupMap[fk] || fk, d);
  12466. }
  12467. }
  12468. }
  12469. for (var key in parents)
  12470. {
  12471. var p = parents[key];
  12472. if (p != null)
  12473. {
  12474. var src = lookup[idPrefix + p];
  12475. var trg = lookup[key];
  12476. if (src != null && trg != null)
  12477. {
  12478. var e = new mxCell('', new mxGeometry(0, 0, 100, 100), '');
  12479. e.geometry.relative = true;
  12480. e.edge = true;
  12481. if (edgeDefaultStyle != null && edgeDefaultStyle.props != null)
  12482. {
  12483. updateCell(e, edgeDefaultStyle.props, graph, null, null, true);
  12484. }
  12485. graph.addCell(e, chartGroup, null, src, trg);
  12486. }
  12487. }
  12488. }
  12489. //TODO Support other layout options like LayoutType
  12490. var levelSps = layoutSettings.NodeSpacing.LevelSeparation * scale;
  12491. var orgChartLayout = new mxOrgChartLayout(graph, 0, levelSps, layoutSettings.NodeSpacing.NeighborSeparation * scale);
  12492. orgChartLayout.execute(chartGroup);
  12493. //Find out the group size and
  12494. var maxX = 0, maxY = 0;
  12495. for (var i = 0; chartGroup.children && i < chartGroup.children.length; i++)
  12496. {
  12497. var geo = chartGroup.children[i].geometry;
  12498. maxX = Math.max(maxX, geo.x + geo.width);
  12499. maxY = Math.max(maxY, geo.y + geo.height);
  12500. }
  12501. var gGeo = chartGroup.geometry;
  12502. gGeo.y -= levelSps; //Our org chart layout leave a space on top
  12503. gGeo.width = maxX;
  12504. gGeo.height = maxY;
  12505. }
  12506. catch(e)
  12507. {
  12508. LucidImporter.hasUnknownShapes = true;
  12509. LucidImporter.hasOrgChart = true;
  12510. console.log(e);
  12511. }
  12512. };
  12513. })();