{"version":3,"sources":["components/NavMenu.js","components/Layout.js","components/SliderStyle.js","components/Marker.js","components/ReportIssue.js","components/PersonPage.js","components/EventPage.js","components/Home.js","components/Play.js","App.js","registerServiceWorker.js","index.js"],"names":["NavMenu","props","toggleNavbar","bind","state","collapsed","this","setState","Navbar","className","light","class","NavbarBrand","tag","Link","to","NavbarToggler","onClick","Collapse","isOpen","navbar","NavItem","NavLink","Component","displayName","name","Layout","children","Track","styled","Tick","TickLabel","Segment","index","Handle","active","YearSlide","values","setValues","useRanger","min","max","stepSize","onChange","getTrackProps","ticks","segments","handles","map","value","getTickProps","i","getSegmentProps","getHandleProps","style","appearance","border","background","outline","Markers","events","onEventClicked","selectedEvent","hevent","icon","zindex","uuid","position","lat","lng","key","zIndex","options","strokeColor","strokeOpacity","strokeWeight","fillColor","fillOpacity","clickable","draggable","editable","visible","radius","paths","EventPolyline","path","forEach","event","push","ReportIssue","type","useState","notificationVisible","setNotificationVisible","showNotification","setTimeout","xhr","XMLHttpRequest","open","setRequestHeader","onload","status","alert","onerror","data","send","JSON","stringify","containerStyle","height","formatYear","year","PersonCard","person","linkUrl","dobYear","dodYear","description","stringToColor","string","hash","length","charCodeAt","color","toString","slice","PersonImage","Tooltip","title","textDecoration","Avatar","sx","bgcolor","split","PersonPage","handleEventClicked","highlightedCardRef","React","createRef","populatePeopleData","current","scrollIntoView","behavior","block","fetch","match","params","response","json","document","center","Grid","container","spacing","item","xs","googleMapsApiKey","mapContainerStyle","zoom","width","direction","justify","overflowY","alignItems","hevents","formatDate","month","day","date","HistoryEvent","he","highlight","useStyles","makeStyles","theme","root","maxWidth","marginTop","leftAlignItem","marginRight","rightAlignItem","marginLeft","parentFlexLeft","display","justifyContent","parentFlexRight","parentFlexSplit","HistoryDetailEvent","classes","Card","minWidth","backgroundColor","margin","variant","ref","CardContent","Typography","fontSize","gutterBottom","component","location","overflow","textOverflow","WebkitLineClamp","WebkitBoxOrient","content","CardActions","disableSpacing","people","p","Button","EventPage","historyEvent","populateEventData","initialCenter","QuickMap","timeMaps","setCenter","setyear","tm","startYear","endYear","Home","changeCenter","newCenter","nz","_map","panTo","markerArray","yearRange","boundsChanged","updateYearRange","yr","then","catch","error","console","ltlat","ltlng","rblat","rblng","fyear","tyear","onBoundsChanged","id","e","bounds","getBounds","ne","getNorthEast","sw","getSouthWest","clearTimeout","timer","PlayPage","historyEvents","playIndex","isPlaying","isPaused","pageIndex","handleClick","playNext","handlePauseClick","handlePreviousClick","handleNextClick","clearInterval","setInterval","pagesize","pageindex","playerindex","nextPlayIndex","pageInde","PAGE_SIZE","playPrevious","target","App","exact","isLocalhost","Boolean","window","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","log","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","render","basename","URL","process","origin","addEventListener","headers","get","indexOf","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"0SAKaA,G,MAAb,kDAGE,WAAaC,GAAQ,IAAD,8BAClB,cAAMA,IAEDC,aAAe,EAAKA,aAAaC,KAAlB,gBACpB,EAAKC,MAAQ,CACXC,WAAW,GALK,EAHtB,2DAaIC,KAAKC,SAAS,CACZF,WAAYC,KAAKF,MAAMC,cAd7B,+BAmBI,OACE,gCACE,kBAACG,EAAA,EAAD,CAAQC,UAAU,+EAA+EC,OAAK,GACpG,yBAAKC,MAAM,mBACT,kBAACC,EAAA,EAAD,CAAaC,IAAKC,IAAMC,GAAG,KAAI,cAC/B,kBAACC,EAAA,EAAD,CAAeC,QAASX,KAAKJ,aAAcO,UAAU,SACrD,kBAACS,EAAA,EAAD,CAAUT,UAAU,uCAAuCU,QAASb,KAAKF,MAAMC,UAAWe,QAAM,GAC9F,wBAAIX,UAAU,wBACZ,kBAACY,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,CAAST,IAAKC,IAAML,UAAU,YAAYM,GAAG,KAAI,SAGrD,kBAACM,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,CAAST,IAAKC,IAAML,UAAU,YAAYM,GAAG,SAAQ,uBAhCzE,GAA6BQ,cAAhBvB,EACJwB,YAAcxB,EAAQyB,KCHxB,IAAMC,EAAb,uKAII,OACE,6BACE,kBAAC,EAAD,MACGpB,KAAKL,MAAM0B,cAPtB,GAA4BJ,aAAfG,EACJF,YAAcE,EAAOD,K,sqCCAvB,IAAMG,EAAQC,YAAO,MAAPA,CAAH,KAOLC,EAAOD,YAAO,MAAPA,CAAH,KAYJE,EAAYF,YAAO,MAAPA,CAAH,KASTG,EAAUH,YAAO,MAAPA,CAAH,KACJ,SAAA5B,GAAK,OACG,IAAhBA,EAAMgC,MACA,UACgB,IAAhBhC,EAAMgC,MACF,UACgB,IAAhBhC,EAAMgC,MACF,UACA,aAITC,EAASL,YAAO,MAAPA,CAAH,KAWF,SAAA5B,GAAK,OAAKA,EAAMkC,OAAS,OAAS,YACpC,SAAAlC,GAAK,OACZA,EAAMkC,OAAS,+BAAiC,8BAKjD,SAASC,EAAT,GAA2C,IAAtBC,EAAqB,EAArBA,OAAQC,EAAa,EAAbA,UAAa,EAEOC,YAAU,CAC1DC,IAAK,KACLC,IAAK,KACLC,SAAU,EACVL,SACAM,SAAUL,IALNM,EAFqC,EAErCA,cAAeC,EAFsB,EAEtBA,MAAOC,EAFe,EAEfA,SAAUC,EAFK,EAELA,QASxC,OACI,6BACI,4BAAI,4BAA0BV,EAAO,GAAG,MAAIA,EAAO,IACnD,kBAACT,EAAUgB,IACNC,EAAMG,KAAI,gBAAGC,EAAH,EAAGA,MAAOC,EAAV,EAAUA,aAAV,OACP,kBAACpB,EAASoB,IACN,kBAACnB,EAAD,KAAYkB,OAGnBH,EAASE,KAAI,WAAsBG,GAAtB,IAAGC,EAAH,EAAGA,gBAAH,OACV,kBAACpB,EAAD,iBAAaoB,IAAb,CAAgCnB,MAAOkB,QAE1CJ,EAAQC,KAAI,gBAAGC,EAAH,EAAGA,MAAOd,EAAV,EAAUA,OAAQkB,EAAlB,EAAkBA,eAAlB,OACT,2BACQA,EAAe,CACfC,MAAO,CACHC,WAAY,OACZC,OAAQ,OACRC,WAAY,cACZC,QAAS,UAIjB,kBAACxB,EAAD,CAAQC,OAAQA,GAASc,QAIrC,6BACA,8B,sBChGCU,EAAU,SAAC,GAA+C,IAA7CC,EAA4C,EAA5CA,OAAQC,EAAoC,EAApCA,eAAgBC,EAAoB,EAApBA,cAC9C,OAAOF,EAAOZ,KAAI,SAAAe,GACd,IAIIC,EARQ,gGASRC,EAAS,EAKb,OAJqB,MAAjBH,GAAyBC,EAAOG,MAAQJ,EAAcI,OACtDF,EAVS,mGAWTC,EAAS,KAGT,kBAAC,IAAD,CAAQE,SAAU,CAAEC,IAAKL,EAAOK,IAAKC,IAAKN,EAAOM,KAAOpD,QAXxC,WAChB4C,EAAeE,IAU+DO,IAAKP,EAAOG,KAAMF,KAAMA,EAAMO,OAAQN,QAK1HO,EAAU,CACZC,YAAa,UACbC,cAAe,GACfC,aAAc,EACdC,UAAW,UACXC,YAAa,IACbC,WAAW,EACXC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAQ,IACRC,MAAO,GAEPZ,OAAQ,GAGCa,EAAgB,SAAC,GAAgB,IAAdxB,EAAa,EAAbA,OACtByB,EAAO,GAIb,OAHAzB,EAAO0B,SAAQ,SAACC,GAAYF,EAAKG,KAAK,CAAEpB,IAAKmB,EAAMnB,IAAKC,IAAKkB,EAAMlB,SAEnEG,EAAQW,MAAQE,EAEZ,kBAAC,IAAD,CAAUA,KAAMA,EACZb,QAASA,K,iBCENiB,MA9Cf,YAAsC,IAAfC,EAAc,EAAdA,KAAMxB,EAAQ,EAARA,KAAQ,EACqByB,oBAAS,GAD9B,mBAC1BC,EAD0B,KACLC,EADK,KAwB3BC,EAAmB,WACrBD,GAAuB,GACvBE,YAAW,WACPF,GAAuB,KACxB,MAGP,OACI,oCACI,4BAAQpF,UAAU,gBAAgBQ,QA9BtB,WAChB,IAAM+E,EAAM,IAAIC,eAChBD,EAAIE,KAAK,OAAQ,2BAA2B,GAC5CF,EAAIG,iBAAiB,eAAgB,kCACrCH,EAAII,OAAS,WACU,MAAfJ,EAAIK,OACJP,IAEAQ,MAAM,4BAGdN,EAAIO,QAAU,WACVD,MAAM,mBAEV,IAAME,EAAO,CACTd,KAAMA,EACNxB,KAAMA,GAEV8B,EAAIS,KAAKC,KAAKC,UAAUH,MAahB,0BAAM/F,UAAU,eAAc,kBAC9B,uBAAGA,UAAU,+BAEhBmF,GACG,yBAAKnF,UAAU,gBAAe,2CC7BxCmG,EAAiB,CACnBC,OAAQ,SAENC,EAAa,SAACC,GAChB,OAAY,GAARA,EACO,UAEJA,GAEEC,EAAa,SAAC,GAAgB,IAAdC,EAAa,EAAbA,OACnBH,EAAa,SAACC,GAChB,OAAY,GAARA,EACO,UAEJA,GAEPG,EAAU,WAAaD,EAAO/C,KAClC,OACI,yBAAKvD,MAAM,cACP,6BAAK,2BAAG,kBAAC,IAAD,CAAMI,GAAImG,GAAWD,EAAOxF,MAAY,KAAGqF,EAAWG,EAAOE,SAAS,MAAIL,EAAWG,EAAOG,SAAS,MAC7G,6BAAMH,EAAOI,eAKzB,SAASC,EAAcC,GACnB,IACIpE,EADAqE,EAAO,EAIX,IAAKrE,EAAI,EAAGA,EAAIoE,EAAOE,OAAQtE,GAAK,EAChCqE,EAAOD,EAAOG,WAAWvE,KAAOqE,GAAQ,GAAKA,GAGjD,IAAIG,EAAQ,IAEZ,IAAKxE,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CAEvBwE,GAAS,aADMH,GAAa,EAAJrE,EAAU,KACdyE,SAAS,KAAMC,OAAO,GAI9C,OAAOF,EAaJ,IAAMG,EAAc,SAAC,GAAgB,IAVtBrG,EAUQwF,EAAa,EAAbA,OAC1B,OACI,kBAACc,EAAA,EAAD,CACIC,MAAOf,EAAOxF,MACd,kBAAC,IAAD,CAAMV,GAAE,kBAAakG,EAAO/C,MAAQZ,MAAO,CAAE2E,eAAgB,SACzD,kBAACC,EAAA,EAdN,CACHC,GAAI,CACAC,QAASd,EAHC7F,EAemBwF,EAAOxF,OAVxCE,SAAqC,IAA3BF,EAAK4G,MAAM,KAAKZ,OAAehG,EAAK,GAApC,UAA4CA,EAAK4G,MAAM,KAAK,GAAG,IAA/D,OAAoE5G,EAAK4G,MAAM,KAAK,GAAG,SAgB5FC,EAAb,kDACI,WAAYrI,GAAQ,IAAD,8BACf,cAAMA,IACDG,MAAQ,CAAE6G,OAAQ,KAAMnD,cAAe,MAC5C,EAAKyE,mBAAqB,EAAKA,mBAAmBpI,KAAxB,gBAC1B,EAAKqI,mBAAqBC,IAAMC,YAJjB,EADvB,gEASQpI,KAAKqI,uBATb,yCAYuB5E,GAAS,IAAD,OACvBzD,KAAKC,SAAS,CAAEuD,cAAeC,IAAU,WACjC,EAAKyE,mBAAmBI,SACxB,EAAKJ,mBAAmBI,QAAQC,eAAe,CAAEC,SAAU,SAAUC,MAAO,gBAf5F,6KAqB+BC,MAAM,cAAD,OAAe1I,KAAKL,MAAMgJ,MAAMC,OAAOhF,OArB3E,cAqBciF,EArBd,gBAsB2BA,EAASC,OAtBpC,OAsBc5C,EAtBd,OAuBQlG,KAAKC,SAAS,CAAE0G,OAAQT,IACxB6C,SAASrB,MAAQ1H,KAAKF,MAAM6G,OAAOxF,KAxB3C,qIA4BQ,GAAyB,MAArBnB,KAAKF,MAAM6G,OACX,OACI,6BAAK,4BAAI,YAIjB,IAAIqC,EAAS,CAAElF,IAAK9D,KAAKF,MAAM6G,OAAOrD,OAAO,GAAGQ,IAAKC,IAAK/D,KAAKF,MAAM6G,OAAOrD,OAAO,GAAGS,KAKtF,OAJgC,MAA5B/D,KAAKF,MAAM0D,gBACXwF,EAAS,CAAElF,IAAK9D,KAAKF,MAAM0D,cAAcM,IAAKC,IAAK/D,KAAKF,MAAM0D,cAAcO,MAI5E,8BACI,4BAAQ1D,MAAM,eACV,yBAAKA,MAAM,uBACP,4BAAKL,KAAKF,MAAM6G,OAAOxF,MACvB,uBAAGd,MAAM,QAAQmG,EAAWxG,KAAKF,MAAM6G,OAAOE,SAAS,MAAIL,EAAWxG,KAAKF,MAAM6G,OAAOG,WAE5F,kBAAC,EAAD,CAAa1B,KAAM,EAAGxB,KAAM5D,KAAKF,MAAM6G,OAAO/C,QAElD,6BAASvD,MAAM,iBACX,4BAAI,sBACJ,2BAAIL,KAAKF,MAAM6G,OAAOI,cAE1B,6BAAS1G,MAAM,iBACX,4BAAI,0BACJ,kBAAC4I,EAAA,EAAD,CAAMC,WAAS,EAACC,QAAS,GACrB,kBAACF,EAAA,EAAD,CAAMG,MAAI,EAACC,IAAE,GACb,kBAAC,IAAD,CACIC,iBAAiB,2CAErB,kBAAC,IAAD,CACIC,kBAAmBjD,EACnB0C,OAAQA,EACRQ,KAAM,IAEN,kBAAC,EAAD,CAASlG,OAAQtD,KAAKF,MAAM6G,OAAOrD,OAAQC,eAAgBvD,KAAKiI,mBAAoBzE,cAAexD,KAAKF,MAAM0D,gBAC9G,kBAAC,EAAD,CAAeF,OAAQtD,KAAKF,MAAM6G,OAAOrD,YAK7C,kBAAC2F,EAAA,EAAD,CAAMC,WAAS,EAAClG,MAAO,CAAEyG,MAAO,QAASlD,OAAQ,SAC7CmD,UAAU,MACVC,QAAQ,aACR9B,GAAI,CAAE+B,UAAW,QACjBC,WAAW,cACX,kBAAC,GAAD,CAAcC,QAAS9J,KAAKF,MAAM6G,OAAOrD,OAAQE,cAAexD,KAAKF,MAAM0D,cAAeD,eAAgBvD,KAAKiI,mBAAoBC,mBAAoBlI,KAAKkI,6BA3ExL,GAAgCjH,a,4DC3D1BqF,GAAiB,CACnBmD,MAAO,SACPlD,OAAQ,SAGNwD,GAAa,SAACtD,EAAMuD,EAAOC,GAC7B,IAAIC,EAAOzD,EAAKa,WAOhB,OANI0C,EAAQ,GAAKA,EAAQ,KACrBE,GAAQ,IAAMF,EAAM1C,YAEpB2C,EAAM,GAAKA,EAAM,KACjBC,GAAQ,IAAMD,EAAI3C,YAEf4C,GAGEC,GAAe,SAAC,GAAqE,IAAnEL,EAAkE,EAAlEA,QAASvG,EAAyD,EAAzDA,eAAgBC,EAAyC,EAAzCA,cAAe0E,EAA0B,EAA1BA,mBACnE,OAAO4B,EAAQpH,KAAI,SAAA0H,GACf,OAAqB,MAAjB5G,GAAyB4G,EAAGxG,MAAQJ,EAAcI,KAC3C,kBAAC,GAAD,CAAoByG,WAAW,EAAMD,GAAIA,EAAI7G,eAAgBA,EAAgB2E,mBAAoBA,IAGxG,kBAAC,GAAD,CAAoBmC,WAAW,EAAOD,GAAIA,EAAI7G,eAAgBA,EAAgB2E,mBAAoBA,QAoBxGoC,GAAYC,cAAW,SAACC,GAAD,MAAY,CACrCC,KAAM,CACFC,SAAU,IACVC,UAAW,GAEfC,cAAe,CACXC,YAAa,QAEjBC,eAAgB,CACZC,WAAY,QAEhBC,eAAgB,CACZC,QAAS,OACTC,eAAgB,cAEpBC,gBAAiB,CACbF,QAAS,OACTC,eAAgB,YAEpBE,gBAAiB,CACbH,QAAS,OACTC,eAAgB,qBAMXG,GAAqB,SAAC,GAA2D,IAAzDhB,EAAwD,EAAxDA,UAAWD,EAA6C,EAA7CA,GAAI7G,EAAyC,EAAzCA,eAAgB2E,EAAyB,EAAzBA,mBAK1DoD,GAJqBlB,EAAGxG,KAId0G,MAEhB,OACI,kBAACiB,GAAA,EAAD,CAAM1D,GAAI,CAAE2D,SAAU,IAAKd,SAAU,IAAKe,gBAAiBpB,EAAY,YAAc,QAASqB,OAAQ,GAClG/K,QAPY,WAChB4C,EAAe6G,IAOXuB,QAAStB,EAAY,QAAU,WAC/BuB,IAAKvB,EAAYnC,EAAqB,MACtC,kBAAC2D,GAAA,EAAD,KACK,kBAACC,GAAA,EAAD,CAAYjE,GAAI,CAAEkE,SAAU,IAAM1E,MAAM,iBAAiB2E,cAAY,GACnEjC,GAAWK,EAAG3D,KAAM2D,EAAGJ,MAAOI,EAAGH,MAEnC,kBAAC6B,GAAA,EAAD,CAAYH,QAAQ,KAAKM,UAAU,OAC/B7B,EAAG8B,UAER,kBAACJ,GAAA,EAAD,CAAYH,QAAQ,QAAQ9D,GAAI,CAACsE,SAAU,SAC3CC,aAAc,WACdnB,QAAS,cACToB,gBAAiB,IAC7BC,gBAAiB,aAEIlC,EAAGmC,SAGZ,kBAACC,GAAA,EAAD,CAAaC,gBAAc,GACT,MAAbrC,EAAGsC,QACCtC,EAAGsC,OAAOhK,KAAI,SAAAiK,GAAC,OAAK,kBAAC,EAAD,CAAahG,OAAQgG,OAE9C,kBAACC,GAAA,EAAD,CAAQzM,UAAWmL,EAAQR,eACvBmB,UAAWzL,IACXC,GAAE,kBAAa2J,EAAGxG,MAClB+H,QAAQ,YACRtE,MAAM,WACT,oBAWRwF,GAAb,kDACI,WAAYlN,GAAQ,IAAD,8BACf,cAAMA,IACDG,MAAQ,CAAEgN,aAAc,MAFd,EADvB,gEAOQ9M,KAAK+M,oBACLhE,SAASrB,MAAQ,iBARzB,4KAY+BgB,MAAM,oBAAD,OAAqB1I,KAAKL,MAAMgJ,MAAMC,OAAOhF,OAZjF,cAYciF,EAZd,gBAa2BA,EAASC,OAbpC,OAac5C,EAbd,OAcQlG,KAAKC,SAAS,CAAE6M,aAAc5G,IAdtC,qIAkBQ,GAA+B,MAA3BlG,KAAKF,MAAMgN,aACX,OACI,6BAAK,4BAAI,YAIjB,IAAI9D,EAAS,CAAElF,IAAK9D,KAAKF,MAAMgN,aAAahJ,IAAKC,IAAK/D,KAAKF,MAAMgN,aAAa/I,KAE9E,OACI,8BACI,4BAAQ1D,MAAM,eACV,4BAAK0J,GAAW/J,KAAKF,MAAMgN,aAAarG,KAAMzG,KAAKF,MAAMgN,aAAa9C,MAAOhK,KAAKF,MAAMgN,aAAa7C,MACrG,kBAAC,EAAD,CAAa7E,KAAM,EAAGxB,KAAM5D,KAAKF,MAAMgN,aAAalJ,QAExD,6BAASvD,MAAM,iBACX,4BAAI,qBACJ,2BAAIL,KAAKF,MAAMgN,aAAaP,UAEhC,6BAASlM,MAAM,iBACX,4BAAI,kBACJ,2BAAIL,KAAKF,MAAMgN,aAAaZ,UAChC,kBAAC,IAAD,CACI5C,iBAAiB,2CAEjB,kBAAC,IAAD,CACIC,kBAAmBjD,GACnB0C,OAAQA,EACRQ,KAAM,IAEN,kBAAC,IAAD,CAAQ3F,SAAUmF,EAAQhF,IAAKhE,KAAKL,MAAMgJ,MAAMC,OAAOhF,UAK5B,MAAlC5D,KAAKF,MAAMgN,aAAaJ,QAErB,6BAASrM,MAAM,mBACX,4BAAI,mBAEAL,KAAKF,MAAMgN,aAAaJ,OAAOhK,KAAI,SAAAiE,GAC/B,OACI,kBAAC,EAAD,CAAYA,OAAQA,aA3DxD,GAA+B1F,aC9HzBqF,GAAiB,CACnBC,OAAQ,SAONyG,GAAgB,CAClBlJ,IAAK,OACLC,KAAM,OASGkJ,GAAW,SAAC,GAAsC,IAApCC,EAAmC,EAAnCA,SAAUC,EAAyB,EAAzBA,UAAWC,EAAc,EAAdA,QAO5C,OAAQ,yBAAK/M,MAAM,oBACf,wBAAIA,MAAM,0BAAyB,oBACnC,yBAAKA,MAAM,oBACX6M,EAASxK,KAAI,SAAA2K,GAET,OACI,4BAAQhN,MAAM,eAAeM,QAAS,kBAXvB,SAAC0M,GACxBF,EAAU,CAACrJ,IAAKuJ,EAAGvJ,IAAIC,IAAKsJ,EAAGtJ,KAAOsJ,EAAG7D,MACzC4D,EAAQ,CAACC,EAAGC,UAAWD,EAAGE,UAS0BtF,CAAmBoF,KAAK,IAAEA,EAAG3F,MAAM,QAG1F,OAGQ8F,GAAb,kDAEI,WAAY7N,GAAQ,IAAD,8BACf,cAAMA,IAyCV8N,aAAe,SAACC,EAAWC,GACvB,EAAK1N,SAAS,CAAE+I,OAAQ0E,EAAWlE,KAAMmE,IACrC,EAAKC,KAAKtF,SACV,EAAKsF,KAAKtF,QAAQuF,MAAMH,IA1C5B,EAAK5N,MAAQ,CAAEgO,YAAa,GAAItK,cAAe,KAAMuK,UAAW,CAAC,KAAM,MAAO/E,OAAQgE,GAAexD,KAAM,EAAG0D,SAAU,IACxH,EAAKc,cAAgB,EAAKA,cAAcnO,KAAnB,gBACrB,EAAKoI,mBAAqB,EAAKA,mBAAmBpI,KAAxB,gBAC1B,EAAKoO,gBAAkB,EAAKA,gBAAgBpO,KAArB,gBACvB,EAAK4N,aAAe,EAAKA,aAAa5N,KAAlB,gBACpB,EAAKqI,mBAAqBC,IAAMC,YARjB,EAFvB,4DAaoB8F,GACZlO,KAAKC,SAAS,CAAE8N,UAAWG,IAC3BlO,KAAKgO,cAAc,QAf3B,yCAkBuBvK,GAAS,IAAD,OACvBzD,KAAKC,SAAS,CAAEuD,cAAeC,IAAU,WACjC,EAAKyE,mBAAmBI,SACxB,EAAKJ,mBAAmBI,QAAQC,eAAe,CAAEC,SAAU,SAAUC,MAAO,gBArB5F,0CA0ByB,IAAD,OAEhBC,MAAM,qBACDyF,MAAK,SAAAtF,GAAQ,OAAIA,EAASC,UAC1BqF,MAAK,SAAAjI,GACF,EAAKjG,SAAS,CAAEiN,SAAUhH,OAE7BkI,OAAM,SAAAC,GACHC,QAAQD,MAAM,gCAAiCA,QAlC/D,iFAsC4BE,EAAOC,EAAOC,EAAOC,EAAOC,EAAOC,GAtC/D,yFAuC+BlG,MAAM,0BAAD,OAA2B6F,EAA3B,kBAA0CC,EAA1C,kBAAyDC,EAAzD,kBAAwEC,EAAxE,kBAAuFC,EAAvF,kBAAsGC,IAvC1I,cAuCc/F,EAvCd,gBAwC2BA,EAASC,OAxCpC,OAwCc5C,EAxCd,OAyCQlG,KAAKC,SAAS,CAAE6N,YAAa5H,IAzCrC,gJAmDa,IAAD,OACN,OACI,yBAAK/F,UAAU,SACX,6BACI,kBAAC2B,EAAD,CAAWC,OAAQ/B,KAAKF,MAAMiO,UAAW/L,UAAWhC,KAAKiO,mBAE7D,kBAAChF,EAAA,EAAD,CAAMC,WAAS,EAACC,QAAS,GACrB,kBAACF,EAAA,EAAD,CAAMG,MAAI,EAACC,IAAE,GACT,kBAAC,IAAD,CACIC,iBAAiB,2CAEjB,kBAAC,IAAD,CACIsC,IAAK,SAAClJ,GAAD,OAAS,EAAKkL,KAAOlL,GAC1B6G,kBAAmBjD,GACnB0C,OAAQhJ,KAAKF,MAAMkJ,OACnBQ,KAAMxJ,KAAKF,MAAM0J,KACjBqF,gBAAiB7O,KAAKgO,eAEtB,kBAAC,EAAD,CAAS1K,OAAQtD,KAAKF,MAAMgO,YAAavK,eAAgBvD,KAAKiI,mBAAoBzE,cAAexD,KAAKF,MAAM0D,kBAGpH,kBAAC,GAAD,CAAU0J,SAAUlN,KAAKF,MAAMoN,SAAUC,UAAWnN,KAAKyN,aAAcL,QAASpN,KAAKiO,mBAEzF,kBAAChF,EAAA,EAAD,CAAMC,WAAS,EAAClG,MAAO,CAAEyG,MAAO,QAASlD,OAAQ,SAC7CmD,UAAU,MACVC,QAAQ,aACR9B,GAAI,CAAG+B,UAAW,QAClBC,WAAW,cACX,kBAAC,GAAD,CAAcC,QAAS9J,KAAKF,MAAMgO,YAAatK,cAAexD,KAAKF,MAAM0D,cAAeD,eAAgBvD,KAAKiI,mBAAoBC,mBAAoBlI,KAAKkI,uBAIlK,yBAAK4G,GAAG,oBAnFtB,oCA2FkBC,GAAI,IAAD,OACTC,EAAShP,KAAK4N,KAAK9N,MAAM4C,IAAIuM,YAC7BC,EAAKF,EAAOG,eACZC,EAAKJ,EAAOK,eACZd,EAAQW,EAAGpL,MACX2K,EAAQW,EAAGtL,MACX4K,EAAQQ,EAAGnL,MACXyK,EAAQY,EAAGrL,MACfuL,aAAatP,KAAKuP,OAClBvP,KAAKuP,MAAQ9J,YAAW,WAAQ,EAAKsH,kBAAkBwB,EAAOC,EAAOC,EAAOC,EAAO,EAAK5O,MAAMiO,UAAU,GAAI,EAAKjO,MAAMiO,UAAU,MAAQ,SApGjJ,GAA0B9M,aAAbuM,GACFtM,YAAcsM,GAAKrM,KC5C9B,IAAMmF,GAAiB,CACnBmD,MAAO,SACPlD,OAAQ,SAKCiJ,GAAb,kDACI,WAAY7P,GAAQ,IAAD,8BACf,cAAMA,IACDG,MAAQ,CAAE2P,cAAe,GAAIC,UAAW,EAAGC,WAAW,EAAOC,UAAU,EAAOtC,UAAW,KAAMuC,UAAW,GAC/G,EAAKC,YAAc,EAAKA,YAAYjQ,KAAjB,gBACnB,EAAKkQ,SAAW,EAAKA,SAASlQ,KAAd,gBAChB,EAAKmQ,iBAAmB,EAAKA,iBAAiBnQ,KAAtB,gBACxB,EAAKoQ,oBAAsB,EAAKA,oBAAoBpQ,KAAzB,gBAC3B,EAAKqQ,gBAAkB,EAAKA,gBAAgBrQ,KAArB,gBAPR,EADvB,0DAYYG,KAAKF,MAAM6P,WACXQ,cAAcnQ,KAAKuP,OACnBvP,KAAKC,SAAS,CAAE0P,WAAW,MAG3B3P,KAAKC,SAAS,CAAE0P,WAAW,EAAME,UAAW,IAC5C7P,KAAK+M,kBAAkB/M,KAAKF,MAAMwN,UApB5B,GAoBkDtN,KAAKF,MAAM+P,UAAW,MAlB1F,yCAsBwB,IAAD,OACV7P,KAAKF,MAAM6P,YAIhBQ,cAAcnQ,KAAKuP,OACfvP,KAAKF,MAAM8P,UACX5P,KAAKuP,MAAQa,aAAY,WAAQ,EAAKL,aAAc,KACpD/P,KAAKC,SAAS,CAAE2P,UAAU,KAE1B5P,KAAKC,SAAS,CAAE2P,UAAU,OAhCtC,iFAoC4BjB,EAAO0B,EAAUC,EAAWC,GApCxD,gGAqC+B7H,MAAM,+BAAD,OAAgCiG,EAAhC,qBAAkD0B,EAAlD,sBAAwEC,IArC5G,cAqCczH,EArCd,gBAsC2BA,EAASC,OAtCpC,OAsCc5C,EAtCd,OAuCQlG,KAAKC,SAAS,CAAEwP,cAAevJ,EAAMyJ,WAAW,EAAMD,UAAWa,IACjEJ,cAAcnQ,KAAKuP,OACnBvP,KAAKuP,MAAQa,aAAY,WAAQ,EAAKL,aAAc,KAzC5D,8IA6CQ,IAAIS,EAAgBxQ,KAAKF,MAAM4P,UAAY,EACvCc,EAhDM,IAgDuBA,EAAgBxQ,KAAKF,MAAM2P,cAActI,OACtEnH,KAAKC,SAAS,CAAEyP,UAAWc,KAE3BxQ,KAAKC,SAAS,CAAE4P,UAAW7P,KAAKF,MAAM+P,UAAY,IAClD7P,KAAK+M,kBAAkB/M,KAAKF,MAAMwN,UApD5B,GAoDkDtN,KAAKF,MAAM+P,UAAW,MAlD1F,qCAuDQ,IAAIW,EAAgBxQ,KAAKF,MAAM4P,UAAY,EAC3C,GAAIc,GAAiB,GAAKxQ,KAAKF,MAAM2P,cAActI,OAAS,EACxDnH,KAAKC,SAAS,CAAEyP,UAAWc,QACxB,CACH,GAA4B,GAAxBxQ,KAAKF,MAAM+P,UACX,OAGiB,GAAjBW,GAAsBxQ,KAAKF,MAAM+P,UAAY,IAC7C7P,KAAKC,SAAS,CAAE4P,UAAW7P,KAAKF,MAAM+P,UAAY,IAClD7P,KAAK+M,kBAAkB/M,KAAKF,MAAMwN,UAnEhC,GAmEsDtN,KAAKF,MAAM2Q,SAAUC,QAjE7F,4CAuEQ1Q,KAAK2Q,iBAvEb,wCA2EQ3Q,KAAK+P,aA3Eb,+BA6Ec,IAAD,OACD/G,EAAS,CAAElF,IAAK,EAAGC,IAAK,GAI5B,OAHI/D,KAAKF,MAAM6P,WAAa3P,KAAKF,MAAM2P,cAActI,OAAS,IAC1D6B,EAAS,CAAElF,IAAK9D,KAAKF,MAAM2P,cAAczP,KAAKF,MAAM4P,WAAW5L,IAAKC,IAAK/D,KAAKF,MAAM2P,cAAczP,KAAKF,MAAM4P,WAAW3L,MAGxH,6BACI,6BAAK,eAAY,2BACbqB,KAAK,OACLzC,MAAO3C,KAAKF,MAAMwN,UAClBjL,SAAU,SAAA0M,GAAC,OAAI,EAAK9O,SAAS,CAAEqN,UAAWyB,EAAE6B,OAAOjO,WAEnD,4BAAQhC,QAASX,KAAK8P,aACjB9P,KAAKF,MAAM6P,UAAY,OAAS,SAEnC3P,KAAKF,MAAM6P,WACT,4BAAQhP,QAASX,KAAKgQ,kBACjBhQ,KAAKF,MAAM8P,SAAW,SAAW,SAGzC5P,KAAKF,MAAM8P,UACR,6BACA,4BAAQjP,QAASX,KAAKiQ,qBAAqB,KAE3C,4BAAQtP,QAASX,KAAKkQ,iBAAiB,OAI/C,kBAAC,IAAD,CACI5G,iBAAiB,2CAEjB,kBAAC,IAAD,CACIC,kBAAmBjD,GACnB0C,OAAQA,EACRQ,KAAM,GAEN,kBAAC,IAAD,CAAQ3F,SAAUmF,MAIzBhJ,KAAKF,MAAM6P,WAAa3P,KAAKF,MAAM2P,cAActI,OAAS,GACnD,kBAAC,GAAD,CAAoBiD,GAAIpK,KAAKF,MAAM2P,cAAczP,KAAKF,MAAM4P,kBAtHpF,GAA8BzO,aCDT4P,I,8KAIjB,OACE,kBAAC,EAAD,KACM,kBAAC,IAAD,CAAOC,OAAK,EAAC/L,KAAK,IAAIkH,UAAWuB,KACjC,kBAAC,IAAD,CAAOzI,KAAK,QAAQkH,UAAWuD,KAC/B,kBAAC,IAAD,CAAOzK,KAAK,gBAAgBkH,UAAWY,KACvC,kBAAC,IAAD,CAAO9H,KAAK,gBAAgBkH,UAAWjE,S,GATlB/G,cAAZ4P,GACZ3P,YAAc2P,GAAI1P,KCD3B,IAAM4P,GAAcC,QACW,cAA7BC,OAAO/E,SAASgF,UAEa,UAA7BD,OAAO/E,SAASgF,UAEhBD,OAAO/E,SAASgF,SAASvI,MACvB,2DA6BJ,SAASwI,GAAiBC,GACxBC,UAAUC,cACPC,SAASH,GACTjD,MAAK,SAAAqD,GACJA,EAAaC,cAAgB,WAC3B,IAAMC,EAAmBF,EAAaG,WACtCD,EAAiBE,cAAgB,WACA,cAA3BF,EAAiB5R,QACfuR,UAAUC,cAAcO,WAK1BvD,QAAQwD,IAAI,6CAKZxD,QAAQwD,IAAI,4CAMrB1D,OAAM,SAAAC,GACLC,QAAQD,MAAM,4CAA6CA,MC/DjE,IAAM0D,GAAUhJ,SAASiJ,qBAAqB,QAAQ,GAAGC,aAAa,QAChEC,GAAcnJ,SAASoJ,eAAe,QAE5CC,IAASC,OACP,kBAAC,IAAD,CAAeC,SAAUP,IACvB,kBAAC,GAAD,OAEFG,IDMa,WACb,GAA6C,kBAAmBb,UAAW,CAGzE,GADkB,IAAIkB,IAAIC,GAAwBvB,OAAO/E,UAC3CuG,SAAWxB,OAAO/E,SAASuG,OAIvC,OAGFxB,OAAOyB,iBAAiB,QAAQ,WAC9B,IAAMtB,EAAK,UAAMoB,GAAN,sBAEPzB,GAwCV,SAAkCK,GAEhC1I,MAAM0I,GACHjD,MAAK,SAAAtF,GAGkB,MAApBA,EAAS9C,SACuD,IAAhE8C,EAAS8J,QAAQC,IAAI,gBAAgBC,QAAQ,cAG7CxB,UAAUC,cAAcwB,MAAM3E,MAAK,SAAAqD,GACjCA,EAAauB,aAAa5E,MAAK,WAC7B8C,OAAO/E,SAAS8G,eAKpB7B,GAAgBC,MAGnBhD,OAAM,WACLE,QAAQwD,IACN,oEA5DAmB,CAAwB7B,GAGxBD,GAAgBC,OCvBxB8B,I","file":"static/js/main.509a9037.chunk.js","sourcesContent":["import React, { Component } from 'react';\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport './NavMenu.css';\r\n\r\nexport class NavMenu extends Component {\r\n static displayName = NavMenu.name;\r\n\r\n constructor (props) {\r\n super(props);\r\n\r\n this.toggleNavbar = this.toggleNavbar.bind(this);\r\n this.state = {\r\n collapsed: true\r\n };\r\n }\r\n\r\n toggleNavbar () {\r\n this.setState({\r\n collapsed: !this.state.collapsed\r\n });\r\n }\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n
\r\n Historedia\r\n \r\n \r\n
    \r\n \r\n Home\r\n \r\n \r\n \r\n Play Mode\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport styled from \"styled-components\";\r\nimport { useRanger } from \"react-ranger\";\r\n\r\nexport const Track = styled(\"div\")`\r\n display: inline-block;\r\n height: 8px;\r\n width: 95%;\r\n margin: 0 2%;\r\n`;\r\n\r\nexport const Tick = styled(\"div\")`\r\n :before {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n background: rgba(0, 0, 0, 0.2);\r\n height: 5px;\r\n width: 2px;\r\n transform: translate(-50%, 0.7rem);\r\n }\r\n`;\r\n\r\nexport const TickLabel = styled(\"div\")`\r\n position: absolute;\r\n font-size: 0.6rem;\r\n color: rgba(0, 0, 0, 0.5);\r\n top: 100%;\r\n transform: translate(-50%, 1.2rem);\r\n white-space: nowrap;\r\n`;\r\n\r\nexport const Segment = styled(\"div\")`\r\n background: ${props =>\r\n props.index === 0\r\n ? \"#3e8aff\"\r\n : props.index === 1\r\n ? \"#00d5c0\"\r\n : props.index === 2\r\n ? \"#f5c200\"\r\n : \"#ff6050\"};\r\n height: 100%;\r\n`;\r\n\r\nexport const Handle = styled(\"div\")`\r\n background: #ff1a6b;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 1.6rem;\r\n height: 1.6rem;\r\n border-radius: 100%;\r\n font-size: 0.7rem;\r\n white-space: nowrap;\r\n color: white;\r\n font-weight: ${props => (props.active ? \"bold\" : \"normal\")};\r\n transform: ${props =>\r\n props.active ? \"translateY(-100%) scale(1.3)\" : \"translateY(0) scale(0.9)\"};\r\n transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);\r\n`;\r\n\r\n\r\nexport function YearSlide({ values, setValues }) {\r\n\r\n const { getTrackProps, ticks, segments, handles } = useRanger({\r\n min: 1500,\r\n max: 1899,\r\n stepSize: 1,\r\n values,\r\n onChange: setValues\r\n });\r\n\r\n\r\n return (\r\n
\r\n

Choose Time Range(YEAR): {values[0]} - {values[1]}

\r\n \r\n {ticks.map(({ value, getTickProps }) => (\r\n \r\n {value}\r\n \r\n ))}\r\n {segments.map(({ getSegmentProps }, i) => (\r\n \r\n ))}\r\n {handles.map(({ value, active, getHandleProps }) => (\r\n \r\n {value}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n}","import React from 'react';\r\nimport { Marker, Polyline } from '@react-google-maps/api';\r\n\r\nconst defaulticon = \"https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_red.png\"\r\nconst selectedicon = \"https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_purple.png\"\r\nexport const Markers = ({ events, onEventClicked, selectedEvent }) => {\r\n return events.map(hevent => {\r\n const handleClick = () => {\r\n onEventClicked(hevent);\r\n };\r\n\r\n var icon = defaulticon;\r\n var zindex = 1;\r\n if (selectedEvent != null && hevent.uuid == selectedEvent.uuid) {\r\n icon = selectedicon;\r\n zindex = 999;\r\n }\r\n return (\r\n \r\n );\r\n });\r\n};\r\n\r\nconst options = {\r\n strokeColor: '#FF0000',\r\n strokeOpacity: 0.8,\r\n strokeWeight: 2,\r\n fillColor: '#FF0000',\r\n fillOpacity: 0.35,\r\n clickable: false,\r\n draggable: false,\r\n editable: false,\r\n visible: true,\r\n radius: 30000,\r\n paths: [\r\n ],\r\n zIndex: 1\r\n};\r\n\r\nexport const EventPolyline = ({ events }) => {\r\n const path = []\r\n events.forEach((event) => { path.push({ lat: event.lat, lng: event.lng }) });\r\n\r\n options.paths = path;\r\n return (\r\n \r\n );\r\n};","import React, { useState } from 'react';\r\n\r\nfunction ReportIssue({ type, uuid }) {\r\n const [notificationVisible, setNotificationVisible] = useState(false);\r\n\r\n const reportIssue = () => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('POST', '/api/issue/report-issue', true);\r\n xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');\r\n xhr.onload = function () {\r\n if (xhr.status === 200) {\r\n showNotification();\r\n } else {\r\n alert('Failed to report issue.');\r\n }\r\n };\r\n xhr.onerror = function () {\r\n alert('Request error.');\r\n };\r\n const data = {\r\n type: type,\r\n uuid: uuid\r\n };\r\n xhr.send(JSON.stringify(data));\r\n };\r\n\r\n const showNotification = () => {\r\n setNotificationVisible(true);\r\n setTimeout(() => {\r\n setNotificationVisible(false);\r\n }, 3000); // Hide the notification after 3 seconds\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {notificationVisible && (\r\n
\r\n Thank you! Your report has been sent.\r\n
\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default ReportIssue;","import React, { Component } from 'react';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Avatar from '@mui/material/Avatar';\r\nimport { GoogleMap, LoadScript } from '@react-google-maps/api';\r\nimport { Link } from 'react-router-dom';\r\nimport { HistoryEvent } from './EventPage'\r\nimport { Markers, EventPolyline } from './Marker'\r\nimport Grid from '@mui/material/Grid';\r\nimport './NavMenu.css';\r\nimport ReportIssue from './ReportIssue'\r\n\r\nconst containerStyle = {\r\n height: '800px'\r\n};\r\nconst formatYear = (year) => {\r\n if (year == 0) {\r\n return \"Unknown\";\r\n }\r\n return year;\r\n};\r\nexport const PersonCard = ({ person }) => {\r\n const formatYear = (year) => {\r\n if (year == 0) {\r\n return \"Unknown\";\r\n }\r\n return year;\r\n };\r\n var linkUrl = \"/people/\" + person.uuid\r\n return (\r\n
\r\n
{person.name} ({formatYear(person.dobYear)} - {formatYear(person.dodYear)})
\r\n
{person.description}
\r\n
\r\n );\r\n}\r\n\r\nfunction stringToColor(string) {\r\n let hash = 0;\r\n let i;\r\n\r\n /* eslint-disable no-bitwise */\r\n for (i = 0; i < string.length; i += 1) {\r\n hash = string.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n\r\n let color = '#';\r\n\r\n for (i = 0; i < 3; i += 1) {\r\n const value = (hash >> (i * 8)) & 0xff;\r\n color += `00${value.toString(16)}`.slice(-2);\r\n }\r\n /* eslint-enable no-bitwise */\r\n\r\n return color;\r\n}\r\n\r\nfunction stringAvatar(name) {\r\n return {\r\n sx: {\r\n bgcolor: stringToColor(name),\r\n },\r\n children: name.split(' ').length === 1 ? name[0] : `${name.split(' ')[0][0]}${name.split(' ')[1][0]}`,\r\n };\r\n}\r\n\r\n\r\nexport const PersonImage = ({ person }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport class PersonPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { person: null, selectedEvent: null };\r\n this.handleEventClicked = this.handleEventClicked.bind(this);\r\n this.highlightedCardRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.populatePeopleData();\r\n }\r\n\r\n handleEventClicked(hevent) {\r\n this.setState({ selectedEvent: hevent }, () => {\r\n if (this.highlightedCardRef.current) {\r\n this.highlightedCardRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n });\r\n }\r\n\r\n async populatePeopleData() {\r\n const response = await fetch(`api/people/${this.props.match.params.uuid}`);\r\n const data = await response.json();\r\n this.setState({ person: data });\r\n document.title = this.state.person.name;\r\n }\r\n\r\n render() {\r\n if (this.state.person == null) {\r\n return (\r\n

Loading

\r\n );\r\n }\r\n\r\n var center = { lat: this.state.person.events[0].lat, lng: this.state.person.events[0].lng };\r\n if (this.state.selectedEvent != null) {\r\n center = { lat: this.state.selectedEvent.lat, lng: this.state.selectedEvent.lng };\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n

{this.state.person.name}

\r\n

{formatYear(this.state.person.dobYear)} - {formatYear(this.state.person.dodYear)}

\r\n
\r\n \r\n
\r\n
\r\n

People Description

\r\n

{this.state.person.description}

\r\n
\r\n
\r\n

People Events Location

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n \r\n\r\n}","import React, { Component, useState, useRef, useEffect} from 'react';\r\nimport { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';\r\nimport { PersonCard, PersonImage } from './PersonPage'\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport Card from '@mui/material/Card';\r\nimport Button from '@mui/material/Button';\r\nimport CardActions from '@mui/material/CardActions';\r\nimport CardContent from '@mui/material/CardContent';\r\nimport Typography from '@mui/material/Typography';\r\n\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport IconButton from '@mui/material/IconButton';\r\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\r\n\r\nimport ReportIssue from './ReportIssue'\r\n\r\n\r\nconst containerStyle = {\r\n width: '1110px',\r\n height: '600px'\r\n};\r\n\r\nconst formatDate = (year, month, day) => {\r\n var date = year.toString();\r\n if (month > 0 && month < 13) {\r\n date += \"-\" + month.toString();\r\n }\r\n if (day > 0 && day < 32) {\r\n date += \"-\" + day.toString();\r\n }\r\n return date;\r\n}\r\n\r\nexport const HistoryEvent = ({ hevents, onEventClicked, selectedEvent, highlightedCardRef }) => {\r\n return hevents.map(he => {\r\n if (selectedEvent != null && he.uuid == selectedEvent.uuid) {\r\n return ;\r\n }\r\n return (\r\n \r\n //\r\n );\r\n });\r\n}\r\n\r\n\r\nexport const HistoryBriefEvent = ({ he, onEventClicked }) => {\r\n const handleClick = () => {\r\n onEventClicked(he);\r\n };\r\n \r\n return (\r\n
\r\n
{formatDate(he.year, he.month, he.day)}
\r\n
{he.location}
\r\n
\r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n maxWidth: 350,\r\n marginTop: 4\r\n },\r\n leftAlignItem: {\r\n marginRight: \"auto\"\r\n },\r\n rightAlignItem: {\r\n marginLeft: \"auto\"\r\n },\r\n parentFlexLeft: {\r\n display: \"flex\",\r\n justifyContent: \"flex-start\"\r\n },\r\n parentFlexRight: {\r\n display: \"flex\",\r\n justifyContent: \"flex-end\"\r\n },\r\n parentFlexSplit: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\"\r\n }\r\n}));\r\n\r\n\r\n\r\nexport const HistoryDetailEvent = ({ highlight, he, onEventClicked, highlightedCardRef }) => {\r\n var linkUrl = \"/events/\" + he.uuid\r\n const handleClick = () => {\r\n onEventClicked(he);\r\n };\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n {formatDate(he.year, he.month, he.day)}\r\n \r\n \r\n {he.location}\r\n \r\n \r\n \r\n {he.content}\r\n \r\n \r\n \r\n {he.people != null &&\r\n he.people.map(p => ()) \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport class EventPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { historyEvent: null };\r\n }\r\n\r\n componentDidMount() {\r\n this.populateEventData();\r\n document.title = \"Event Detail\";\r\n }\r\n\r\n async populateEventData() {\r\n const response = await fetch(`api/historyevent/${this.props.match.params.uuid}`);\r\n const data = await response.json();\r\n this.setState({ historyEvent: data });\r\n }\r\n\r\n render() {\r\n if (this.state.historyEvent == null) {\r\n return (\r\n

Loading

\r\n );\r\n }\r\n\r\n var center = { lat: this.state.historyEvent.lat, lng: this.state.historyEvent.lng };\r\n\r\n return (\r\n \r\n
\r\n

{formatDate(this.state.historyEvent.year, this.state.historyEvent.month, this.state.historyEvent.day)}

\r\n \r\n
\r\n
\r\n

Event Description

\r\n

{this.state.historyEvent.content}

\r\n
\r\n
\r\n

Event Location

\r\n

{this.state.historyEvent.location}

\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n {this.state.historyEvent.people != null &&\r\n\r\n
\r\n

People Involved

\r\n {\r\n this.state.historyEvent.people.map(person => {\r\n return (\r\n \r\n )\r\n })\r\n }\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { GoogleMap, LoadScript } from '@react-google-maps/api';\r\nimport { YearSlide } from './SliderStyle'\r\nimport { HistoryEvent } from './EventPage'\r\nimport { Markers } from './Marker'\r\n\r\nimport Grid from '@mui/material/Grid';\r\nimport './NavMenu.css';\r\n\r\nconst containerStyle = {\r\n height: '800px'\r\n};\r\n\r\nconst divStyle = {\r\n padding: \"0 50px 0 50px\"\r\n}\r\n\r\nconst initialCenter = {\r\n lat: 50.745,\r\n lng: -3.523\r\n};\r\n\r\n/*\r\nconst timeMaps = [{ title: 'Glorious Revolution', startYear: 1687, endYear: 1690, center: { lat: 52.7078296, lng: -1.3138272 }, zoom: 7},\r\n { title: 'French Revolution', startYear: 1788, endYear: 1800, center: { lat: 46.821222, lng: 4.7497835 }, zoom: 7 },\r\n { title: 'The Revolutionary War', startYear: 1775, endYear: 1783, center: { lat: 40.6895582, lng: -75.5352849}, zoom: 8 }];\r\n*/\r\n\r\nexport const QuickMap = ({ timeMaps, setCenter, setyear }) => {\r\n\r\n const handleEventClicked = (tm) => {\r\n setCenter({lat: tm.lat,lng: tm.lng }, tm.zoom);\r\n setyear([tm.startYear, tm.endYear]);\r\n };\r\n\r\n return (
\r\n

Quick Navigation

\r\n
{\r\n timeMaps.map(tm => {\r\n\r\n return (\r\n \r\n );\r\n })\r\n }
);\r\n};\r\n\r\nexport class Home extends Component {\r\n static displayName = Home.name;\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { markerArray: [], selectedEvent: null, yearRange: [1600, 1730], center: initialCenter, zoom: 9, timeMaps: [], };\r\n this.boundsChanged = this.boundsChanged.bind(this);\r\n this.handleEventClicked = this.handleEventClicked.bind(this);\r\n this.updateYearRange = this.updateYearRange.bind(this);\r\n this.changeCenter = this.changeCenter.bind(this);\r\n this.highlightedCardRef = React.createRef();\r\n }\r\n\r\n updateYearRange(yr) {\r\n this.setState({ yearRange: yr });\r\n this.boundsChanged(null);\r\n }\r\n\r\n handleEventClicked(hevent) {\r\n this.setState({ selectedEvent: hevent }, () => {\r\n if (this.highlightedCardRef.current) {\r\n this.highlightedCardRef.current.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n //this.populateEventData();\r\n fetch('api/NavigateEvent')\r\n .then(response => response.json())\r\n .then(data => {\r\n this.setState({ timeMaps: data });\r\n })\r\n .catch(error => {\r\n console.error('Error fetching configuration:', error);\r\n });\r\n }\r\n\r\n async populateEventData(ltlat, ltlng, rblat, rblng, fyear, tyear) {\r\n const response = await fetch(`api/historyevent?ltlat=${ltlat}<lng=${ltlng}&rblat=${rblat}&rblng=${rblng}&fyear=${fyear}&tyear=${tyear}`);\r\n const data = await response.json();\r\n this.setState({ markerArray: data});\r\n }\r\n\r\n changeCenter = (newCenter, nz) => {\r\n this.setState({ center: newCenter, zoom: nz });\r\n if (this._map.current) {\r\n this._map.current.panTo(newCenter);\r\n }\r\n };\r\n\r\n render () {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n this._map = map}\r\n mapContainerStyle={containerStyle}\r\n center={this.state.center}\r\n zoom={this.state.zoom}\r\n onBoundsChanged={this.boundsChanged}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n );\r\n }\r\n\r\n static timer;\r\n\r\n boundsChanged(e) {\r\n var bounds = this._map.state.map.getBounds();\r\n var ne = bounds.getNorthEast();\r\n var sw = bounds.getSouthWest();\r\n var ltlat = ne.lat();\r\n var rblat = sw.lat();\r\n var rblng = ne.lng();\r\n var ltlng = sw.lng();\r\n clearTimeout(this.timer)\r\n this.timer = setTimeout(() => { this.populateEventData(ltlat, ltlng, rblat, rblng, this.state.yearRange[0], this.state.yearRange[1]); }, 1000);\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { GoogleMap, LoadScript, Marker } from '@react-google-maps/api';\r\nimport { HistoryDetailEvent } from './EventPage'\r\n\r\nconst containerStyle = {\r\n width: '1110px',\r\n height: '600px'\r\n};\r\n\r\nconst PAGE_SIZE = 20;\r\n\r\nexport class PlayPage extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { historyEvents: [], playIndex: 0, isPlaying: false, isPaused: false, startYear: 1500, pageIndex: 0 };\r\n this.handleClick = this.handleClick.bind(this);\r\n this.playNext = this.playNext.bind(this);\r\n this.handlePauseClick = this.handlePauseClick.bind(this);\r\n this.handlePreviousClick = this.handlePreviousClick.bind(this);\r\n this.handleNextClick = this.handleNextClick.bind(this);\r\n }\r\n static timer;\r\n handleClick() {\r\n if (this.state.isPlaying) {\r\n clearInterval(this.timer);\r\n this.setState({ isPlaying: false });\r\n }\r\n else {\r\n this.setState({ isPlaying: true, pageIndex: 0 });\r\n this.populateEventData(this.state.startYear, PAGE_SIZE, this.state.pageIndex, 0);\r\n }\r\n }\r\n\r\n handlePauseClick() {\r\n if (!this.state.isPlaying) {\r\n return;\r\n }\r\n\r\n clearInterval(this.timer);\r\n if (this.state.isPaused) {\r\n this.timer = setInterval(() => { this.playNext() }, 5000)\r\n this.setState({ isPaused: false });\r\n } else {\r\n this.setState({ isPaused: true });\r\n }\r\n }\r\n\r\n async populateEventData(fyear, pagesize, pageindex, playerindex) {\r\n const response = await fetch(`api/historyevent/date?fyear=${fyear}&pagesize=${pagesize}&pageindex=${pageindex}`);\r\n const data = await response.json();\r\n this.setState({ historyEvents: data, isPlaying: true, playIndex: playerindex });\r\n clearInterval(this.timer);\r\n this.timer = setInterval(() => { this.playNext() }, 5000)\r\n }\r\n\r\n playNext() {\r\n var nextPlayIndex = this.state.playIndex + 1;\r\n if (nextPlayIndex < PAGE_SIZE && nextPlayIndex < this.state.historyEvents.length) {\r\n this.setState({ playIndex: nextPlayIndex })\r\n } else {\r\n this.setState({ pageIndex: this.state.pageIndex + 1 })\r\n this.populateEventData(this.state.startYear, PAGE_SIZE, this.state.pageIndex, 0);\r\n }\r\n }\r\n\r\n playPrevious() {\r\n var nextPlayIndex = this.state.playIndex - 1;\r\n if (nextPlayIndex >= 0 && this.state.historyEvents.length > 0) {\r\n this.setState({ playIndex: nextPlayIndex })\r\n } else {\r\n if (this.state.pageIndex == 0) {\r\n return;\r\n }\r\n\r\n if (nextPlayIndex == 0 && this.state.pageIndex > 0) {\r\n this.setState({ pageIndex: this.state.pageIndex - 1 })\r\n this.populateEventData(this.state.startYear, PAGE_SIZE, this.state.pageInde, PAGE_SIZE - 1);\r\n }\r\n }\r\n }\r\n\r\n handlePreviousClick() {\r\n this.playPrevious();\r\n }\r\n\r\n handleNextClick() {\r\n this.playNext();\r\n }\r\n render() {\r\n var center = { lat: 0, lng: 0 };\r\n if (this.state.isPlaying && this.state.historyEvents.length > 0) {\r\n center = { lat: this.state.historyEvents[this.state.playIndex].lat, lng: this.state.historyEvents[this.state.playIndex].lng }\r\n }\r\n return (\r\n
\r\n
Start Year: this.setState({ startYear: e.target.value })}\r\n />\r\n \r\n { this.state.isPlaying &&\r\n \r\n }\r\n {this.state.isPaused &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n {this.state.isPlaying && this.state.historyEvents.length > 0 &&\r\n \r\n }\r\n\r\n \r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Layout } from './components/Layout';\r\nimport { Home } from './components/Home';\r\nimport { EventPage } from './components/EventPage'\r\nimport { PersonPage } from './components/PersonPage'\r\nimport { PlayPage } from './components/Play'\r\n\r\nimport './custom.css'\r\n\r\nexport default class App extends Component {\r\n static displayName = App.name;\r\n\r\n render () {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n"],"sourceRoot":""}