{"version":3,"sources":["components/App/Colors.js","images/hero.jpg","images/header_edge_gray.png","images/header_edge_green.png","images/header_edge_yellow.png","images/skanetrafiken_logotype.png","components/App/Footer.jsx","components/App/Header.jsx","components/App/JourneyMessage.jsx","components/App/Utilities.js","components/App/CanceledBox.jsx","components/App/JourneyCanceledMessage.jsx","components/App/BusJourneyItem.jsx","components/App/BusTableHeader.jsx","components/App/JourneyListFullscreenMessage.jsx","components/App/MiscTrafficJourneyItem.jsx","components/App/SmallTrainJourneyItem.jsx","components/App/SmallTrainTableHeader.jsx","components/App/TrainJourneyItem.jsx","components/App/TrainTableHeader.jsx","components/App/JourneyList.jsx","components/App/TrafficBox.jsx","components/App/App.jsx","components/Config/DownloadBatPage.jsx","components/Config/SearchBox.jsx","components/Config/ConfigApp.jsx","images/region_skane.png","registerServiceWorker.js","index.js"],"names":["Gray","Green","Yellow","Purple","module","exports","Object","freeze","Red","PurpleTrain","Train","LocalBus","RegionBus","MixedBus","Black","White","CommercialBus","ConfiguratorHeader","Footer","d","className","style","Date","getHours","getMinutes","slice","height","paddingBottom","src","logo","alt","Component","Header","this","props","type","version","x","y","width","viewBox","fill","getColor","color","Colors","backgroundImage","headerEdgeGray","headerEdgeGreen","headerEdgeYellow","backgroundColor","maxTitleWidth","background","getBackgroundColor","renderIcon","position","top","right","getBackground","backgroundRepeat","backgroundSize","whiteSpace","maxWidth","lineHeight","fontSize","display","zIndex","title","JourneyMessage","state","overThreeRows","textAlign","text","length","hoverToStop","loop","getFormattedTime","date","substr","getFormattedNumMinutes","from","to","numMin","diff","Math","round","calcDiffMin","hours","result","CanceledBox","JourneyCanceledMessage","colSpan","textCols","showCanceledSign","canceledSignCols","defaultProps","BusJourneyItem","getBusColor","textColor","getBusTextColor","number","journey","line","isNaN","match","transform","message","canceled","renderCanceledMessage","renderInfoMessage","index","countdownTime","updatedTime","time","plusHour","setHours","getTime","directionMaxWidth","direction","updatedStopPoint","platform","awaitTime","renderMessage","BusTableHeader","directionText","isDepartures","JourneyListFullscreenMessage","minHeight","header","body","MiscTrafficJourneyItem","CanceledSignCols","SmallTrainJourneyItem","SmallTrainTableHeader","timeText","TrainJourneyItem","innerIconHtml","inlineAbsolute","absolute","left","scaling","marginLeft","pagatagStyle","minWidth","renderCountDownTime","TrainTableHeader","JourneyList","remainingHeight","count","journeys","sort","a","b","map","typeIsBus","renderTableHeader","renderJourneyItems","renderJourneyTable","TrafficBox","displayClass","horizontalMode","App","traffic","updateWindowDimensions","bind","fetchData","setTimeout","window","location","reload","refetchData","fetch","method","headers","apiKey","JSON","stringify","stationKey","stationId","stationName","trafficTypes","parse","arriving","departure","stopPoint","currentTime","then","response","status","setState","error","clearTimeout","json","undefined","catch","data","forEach","horizontal","trafficBoxWidth","trafficBoxHeight","trafficBoxes","box","departures","document","bottom","role","marginRight","addEventListener","removeEventListener","innerWidth","innerHeight","DownloadBatPage","protocol","hostname","port","queryParams","query","downloadLink","molnskyltUrl","marginBottom","listStyleType","padding","marginTop","defaultValue","id","borderRadius","onClick","urlValue","getElementById","value","navigator","clipboard","writeText","boxSizing","verticalAlign","border","fontWeight","href","name","SearchBox","items","inputStyle","placeholder","onChange","event","handleChange","renderItems","resultsLimit","min","item","i","e","handleSelection","selectedItem","onSelected","target","loading","onTextChanged","onSearch","handleSearchResults","ConfigApp","fromPoint","points","getWidth","invalidApiKey","createBtnText","createBtnLoading","onresize","callback","xhr","XMLHttpRequest","withCredentials","open","encodeURIComponent","onload","resultObject","pointsDictionary","startPoints","send","checked","push","indexOf","splice","setRequestHeader","showDownload","paddingLeft","flex","getMatchingPoints","fromChanged","onTrafficTypeChanged","htmlFor","alignItems","disabled","validateApiKey","toString","getQuery","max","scrollWidth","documentElement","offsetWidth","clientWidth","paddingRight","fontFamily","renderDownloadPage","renderConfigurationForm","isLocalhost","Boolean","registerValidSW","swUrl","config","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","console","log","onUpdate","onSuccess","cleanUri","uri","replace","url","search","newQuery","urlParams","get","createNewQuery","URLSearchParams","encodeURI","origin","rootElement","ReactDOM","render","URL","process","contentType","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"kFAAA,IAAMA,EAAO,UACPC,EAAQ,UACRC,EAAS,UAETC,EAAS,UAMfC,EAAOC,QAAUC,OAAOC,OAAO,CAC3BP,KAAMA,EACNC,MAAOA,EACPC,OAAQA,EACRM,IAXQ,UAYRL,OAAQA,EACRM,YAAaN,EACbO,MAAOV,EACPW,SAAUV,EACVW,UAAWV,EACXW,SAAUb,EACVc,MAfU,UAgBVC,MAjBU,UAkBVC,cAhBmB,UAiBnBC,mBAhBqB,a,mPCRV,G,aAAA,IAA0B,kCCA1B,MAA0B,6CCA1B,MAA0B,8CCA1B,MAA0B,+CCA1B,MAA0B,mDCgB1BC,E,uKAXZ,IAAqBC,EAEpB,OACE,sBAAKC,UAAU,SAAf,UACD,qBAAKC,MAAO,CAAC,MAAS,QAAtB,UAJmBF,EAI0B,IAAIG,KAJ7B,UAAOH,EAAEI,WAAT,aAAwB,KAAQJ,EAAEK,cAAeC,OAAO,OAKzE,qBAAKJ,MAAO,CAAC,MAAS,SAAtB,SAAgC,qBAAKA,MAAO,CAACK,OAAQ,GAAIC,cAAe,GAAIC,IAAKC,EAAMC,IAAI,c,GAP9EC,a,iBCqGNC,E,2KA/FX,MAAuB,UAApBC,KAAKC,MAAMC,KAEV,sBAAKf,UAAU,uBAAuBgB,QAAQ,MAAMC,EAAE,MAAMC,EAAE,MAAMC,MAAM,OAAOb,OAAO,OAAOc,QAAQ,YAAvG,UACE,sBAAMrB,EAAE,+2BACR,sBAAMA,EAAE,8UAMV,qBAAKC,UAAU,uBAAuBgB,QAAQ,MAAMC,EAAE,MAAMC,EAAE,MAAMC,MAAM,OAAOb,OAAO,OAAOc,QAAQ,YAAvG,SACE,sBAAMnB,MAAO,CAACoB,KAAMR,KAAKS,YAAavB,EAAE,gmC,iCAO9C,IAAIwB,EACJ,OAAOV,KAAKC,MAAMC,MAChB,IAAK,YACHQ,EAAQC,IAAO9B,MACf,MACF,QACE6B,EAAQC,IAAO7B,MAEnB,OAAO4B,I,sCAIP,IAAIE,EACJ,OAAOZ,KAAKC,MAAMC,MAChB,IAAK,QACHU,EAAkBC,EAClB,MACF,IAAK,WACHD,EAAkBE,EAClB,MACF,IAAK,YACHF,EAAkBG,EAClB,MACF,IAAK,WACHH,EAAkBC,EAClB,MACF,IAAK,OACHD,EAAkBE,EAClB,MAEF,QACEF,EAAkBC,EAEtB,OAAOD,I,2CAIP,IAAII,EACJ,OAAOhB,KAAKC,MAAMC,MAChB,IAAK,QACHc,EAAkBL,IAAOlC,MACzB,MACF,IAAK,WACHuC,EAAkBL,IAAOjC,SACzB,MACF,IAAK,YACHsC,EAAkBL,IAAOhC,UACzB,MACF,IAAK,WACHqC,EAAkBL,IAAO/B,SACzB,MACF,IAAK,OACHoC,EAAkBL,IAAOjC,SACzB,MACF,QACEsC,EAAkBL,IAAO5C,KAE7B,OAAOiD,I,+BAKP,IAEIC,GAAiBjB,KAAKC,MAAMK,OAAS,KAAM,IAE/C,OACE,sBAAKnB,UAAU,SAASC,MAAO,CAAC8B,WAAYlB,KAAKmB,sBAAjD,UACGnB,KAAKoB,aACN,qBAAKhC,MAAO,CAAC8B,WAAY,UAAWG,SAAU,WAAYC,IAAK,EAAGC,MAAO,EAAG9B,OAAQ,GAAIa,MAAO,MAC/F,qBAAKlB,MAAO,CAAC8B,WAAY,UAAWN,gBAAiB,OAASZ,KAAKwB,gBAAkB,IAAKC,iBAAkB,YAAaC,eAAgB,YAAaL,SAAU,WAAYC,IAAK,EAAGC,MAAO,EAAG9B,OAAQ,GAAIa,MAAO,MACjN,qBAAKnB,UAAU,QAAQC,MAAO,CAACuC,WAAW,SAAUC,SAAUX,EAAeP,MAAOV,KAAKS,WAAYoB,WARxF,IAQgHC,SATlH,GASsIT,SAAU,WAAYU,QAAS,eAAgBC,OAAQ,IAAxM,SAA8MhC,KAAKC,MAAMgC,e,GA3F5MnC,a,kBCeNoC,E,kDAlBb,WAAYjC,GAAO,IAAD,8BACnB,cAAMA,IACDkC,MAAQ,CAACC,eAAe,GAFV,E,qDAKjB,IAAIC,EAAYrC,KAAKC,MAAMqC,KAAKC,OAAS,GAAK,OAAS,SAGlDH,EAAgBpC,KAAKC,MAAMqC,KAAKC,OADT,KACuC,EAAKvC,KAAKC,MAAMK,MAAM,GAExF,OACE,qBAAKnB,UAAU,iBAAiBC,MAAO,CAAC8B,WAAY,UAAWmB,YAAWT,UAAW5B,KAAKC,MAAMK,OAAO,IAAI,IAA3G,SACE8B,EAAgB,cAAC,IAAD,CAASI,aAAW,EAACC,MAAI,EAACH,KAAMtC,KAAKC,MAAMqC,OAAUtC,KAAKC,MAAMqC,W,GAb3DxC,aCHtB,SAAS4C,EAAiBC,GAC7B,OAAQ,KAAOA,EAAKrD,YAAYsD,QAAQ,EAAG,GAAK,KAAO,KAAOD,EAAKpD,cAAcqD,QAAQ,EAAG,GAazF,SAASC,EAAuBC,EAAMC,GAIzC,IAHA,IAAIC,EAPD,SAAqBF,EAAMC,GAC9B,IAAIE,EAAOF,EAAKD,EAEhB,OADcI,KAAKC,MAAOF,EAAO,IAAQ,IAK5BG,CAAYN,EAAMC,GAE3BM,EAAQ,EACLL,GAAU,IACbA,GAAU,GACVK,IAEJ,GAAIL,GAAU,GAAKK,GAAS,EACxB,MAAO,QAEP,IAAIC,EAAS,GASb,OAPID,EAAQ,IACRC,EAASD,EAAQ,KAGjBL,EAAS,IACTM,GAAU,IAAMN,EAAS,QAEtBM,EChCf,IAAMC,EAAc,SAACtD,GACnB,OACC,qBAAKd,UAAU,gBAAf,0BCCGqE,E,uKAEF,OACE,+BACA,oBAAIC,QAASzD,KAAKC,MAAMyD,SAAUvE,UAAU,yBAA5C,SACG,qBAAKA,UAAU,eAAf,SAA+Ba,KAAKC,MAAMqC,SAE5CtC,KAAKC,MAAM0D,iBAAmB,oBAAIF,QAASzD,KAAKC,MAAM2D,iBAAkBxE,MAAO,CAACiD,UAAW,SAA7D,SAAuE,cAAC,EAAD,MAAsB,Y,GAP7FvC,aAmBrC0D,EAAuBK,aAAe,CACpCF,kBAAkB,GAGLH,QCkEAM,E,2KAnFT,IAAIpD,EAAQV,KAAK+D,cACbC,EAAYhE,KAAKiE,kBAEnBC,EAASlE,KAAKC,MAAMkE,QAAQC,KAKhC,OAJIC,MAAMH,KACRA,EAASA,EAAOI,MAAM,SAItB,qBAAKnF,UAAU,gBAAf,SACE,sBAAKA,UAAU,eAAeC,MAAO,CAACmF,UAAW,eAAjD,UACE,qBAAKpF,UAAU,aAAaC,MAAO,CAACsB,MAAOsD,GAA3C,SAAwDE,IACxD,qBAAK/E,UAAU,WAAWiB,EAAE,MAAMC,EAAE,MAAMC,MAAM,OAAOb,OAAO,OAAOc,QAAQ,iBAA7E,SACE,sBAAMC,KAAME,EAAOxB,EAAE,uI,wCAO7B,MAAmC,eAA5Bc,KAAKC,MAAMkE,QAAQjE,MAAqD,sBAA5BF,KAAKC,MAAMkE,QAAQjE,KAA4BS,IAAO9B,MAAQ8B,IAAO7B,Q,oCAIxH,MAAmC,cAA5BkB,KAAKC,MAAMkE,QAAQjE,MAAoD,gBAA5BF,KAAKC,MAAMkE,QAAQjE,KAAsBS,IAAOjC,SAAuC,eAA5BsB,KAAKC,MAAMkE,QAAQjE,MAAqD,sBAA5BF,KAAKC,MAAMkE,QAAQjE,KAA4BS,IAAOhC,UAAYgC,IAAO5B,gB,0CAIlO,OACE,6BACE,oBAAI0E,QAAQ,IAAZ,SACE,cAAC,EAAD,CAAgBnB,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,c,8CAM1E,OACM,cAAC,EAAD,CAAwBoD,SAAU,EAAGE,iBAAkB,EAAGtB,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,U,sCAIpH,OAAIN,KAAKC,MAAMkE,QAAQM,SACdzE,KAAK0E,wBAEL1E,KAAKC,MAAMkE,QAAQK,QACnBxE,KAAK2E,oBAEP,O,2CAGP,OAAO3E,KAAKC,MAAM2E,MAAQ,IAAM,EAAIjE,IAAO7B,MAAQ,Y,+BAGnD,IAAI+F,EAAgBnC,EAAiB1C,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQY,MAE1F,IAAK/E,KAAKC,MAAMkE,QAAQM,SAAU,CAC9B,IACIO,EAAW,IAAI3F,KACnB2F,EAASC,SAASD,EAAS1F,WAAa,IACpCU,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQY,MAAMG,UAAYF,EAASE,UAHnE,OAIjBL,EAAgBhC,EAAuB,IAAIxD,KAAQW,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQY,OAI5G,IAAII,GAAqBnF,KAAKC,MAAMK,OAAS,KAAO,IAEpD,OACE,wBAAOlB,MAAO,CAAC8B,WAAYlB,KAAKmB,sBAAhC,UACE,qBAAIhC,UAAU,6BAAd,UACE,oBAAIA,UAAU,qCAAd,SAAoDa,KAAKoB,eACzD,oBAAIjC,UAAU,YAAYC,MAAO,CAACwC,SAAUuD,GAA5C,SAAiEnF,KAAKC,MAAMkE,QAAQiB,YACpF,oBAAIjG,WAAYa,KAAKC,MAAMkE,QAAQM,UAAYzE,KAAKC,MAAMkE,QAAQkB,iBAAmB,UAAY,IAAM,YAAvG,SAAqHrF,KAAKC,MAAMkE,QAAQmB,WACxI,oBAAInG,WAAYa,KAAKC,MAAMkE,QAAQM,SAAW,UAAY,IAAM,YAAhE,SAA8EzE,KAAKC,MAAMkE,QAAQkB,mBACjG,oBAAIlG,WAAYa,KAAKC,MAAMkE,QAAQM,UAAYzE,KAAKC,MAAMkE,QAAQoB,UAAY,UAAY,IAAM,iBAAhG,SAAmHV,OAEpH7E,KAAKwF,uB,GA9Ee1F,aCSd2F,E,uKAbZ,IAAIC,GAAgB1F,KAAKC,MAAM0F,aAAe,OAC7C,OACE,qBAAIxG,UAAU,mCAAd,UACA,uCACM,6BAAKuG,IACL,yCACA,oBAAIvG,UAAU,eACd,oBAAIC,MAAO,CAACiD,UAAW,SAAvB,uB,GATiBvC,aCYd8F,E,uKAXb,OACC,qBAAKzG,UAAU,+BAA+BC,MAAO,CAACyG,UAAW7F,KAAKC,MAAMR,QAA5E,SACC,sBAAKN,UAAU,kCAAf,UACC,qBAAKA,UAAU,qCAAf,SAAqDa,KAAKC,MAAM6F,SAChE,qBAAK3G,UAAU,mCAAf,SAAmDa,KAAKC,MAAM8F,gB,GANxBjG,aC4D5BkG,E,kLApDX,OACE,6BACE,oBAAIvC,QAAQ,IAAZ,SACE,cAAC,EAAD,CAAgBnB,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,c,8CAM1E,OACM,cAAC,EAAD,CAAwBoD,SAAU,EAAGuC,iBAAkB,EAAG3D,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,U,sCAIpH,OAAIN,KAAKC,MAAMkE,QAAQM,SACdzE,KAAK0E,wBAEL1E,KAAKC,MAAMkE,QAAQK,QACnBxE,KAAK2E,oBAEP,O,2CAGP,OAAO3E,KAAKC,MAAM2E,MAAQ,IAAM,EAAI,UAAY,Y,+BAIhD,IAAIC,EAAgB,GAElBA,EADE7E,KAAKC,MAAMkE,QAAQM,SACL/B,EAAiB1C,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQY,MAEtElC,EAAuB,IAAIxD,KAAQW,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQY,MAG1G,IAAII,GAAqBnF,KAAKC,MAAMK,OAAS,KAAO,IAEpD,OACE,wBAAOlB,MAAO,CAAC8B,WAAYlB,KAAKmB,sBAAhC,UACE,qBAAIhC,UAAU,qCAAd,UACE,uBACA,oBAAIA,UAAU,YAAYC,MAAO,CAACwC,SAAUuD,GAA5C,SAAiEnF,KAAKC,MAAMkE,QAAQiB,YACpF,oBAAIjG,WAAYa,KAAKC,MAAMkE,QAAQM,UAAYzE,KAAKC,MAAMkE,QAAQkB,iBAAmB,UAAY,IAAM,YAAvG,SAAqHrF,KAAKC,MAAMkE,QAAQmB,WACxI,oBAAInG,WAAYa,KAAKC,MAAMkE,QAAQM,SAAW,UAAY,IAAM,YAAhE,SAA8EzE,KAAKC,MAAMkE,QAAQkB,mBACjG,oBAAIlG,WAAYa,KAAKC,MAAMkE,QAAQM,SAAW,UAAY,IAAM,iBAAhE,SAAmFI,OAEpF7E,KAAKwF,uB,GA/CuB1F,aCmEtBoG,E,2KAhET,IAAIxF,EAAoC,kBAA5BV,KAAKC,MAAMkE,QAAQjE,MAAkD,oBAA5BF,KAAKC,MAAMkE,QAAQjE,MAAoD,0BAA5BF,KAAKC,MAAMkE,QAAQjE,KAA6BS,IAAOnC,YAAcmC,IAAOlC,MAC9K,OACE,qBAAKU,UAAU,gBAAf,SACI,sBAAKA,UAAU,uBAAuBC,MAAO,CAAC,KAAQsB,GAAQP,QAAQ,MAAMC,EAAE,MAAMC,EAAE,MAAMC,MAAM,OAAOb,OAAO,OAAOc,QAAQ,YAA/H,UACA,sBAAMrB,EAAE,+2BACR,sBAAMA,EAAE,kV,0CAOd,OACE,6BACE,oBAAIuE,QAAQ,IAAZ,SACE,cAAC,EAAD,CAAgBnB,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,c,8CAO1E,OACE,cAAC,EAAD,CAAwBoD,SAAU,EAAGE,iBAAkB,EAAGtB,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,U,sCAKhH,OAAIN,KAAKC,MAAMkE,QAAQM,SACdzE,KAAK0E,wBAEL1E,KAAKC,MAAMkE,QAAQK,QACnBxE,KAAK2E,oBAEP,O,2CAIP,OAAO3E,KAAKC,MAAM2E,MAAQ,IAAM,EAAI,UAAY,Y,+BAIhD,IACIG,EAAOrC,EAAiB1C,KAAKC,MAAMkE,QAAQY,MAC3CD,EAAc9E,KAAKC,MAAMkE,QAAQW,YAAcpC,EAAiB1C,KAAKC,MAAMkE,QAAQW,aAAe,GAElGK,GAAqBnF,KAAKC,MAAMK,OAJH,SAMjC,OACE,wBAAOlB,MAAO,CAAC8B,WAAYlB,KAAKmB,sBAAhC,UACE,qBAAIhC,UAAU,cAAd,UACC,oBAAIA,UAAU,kBAAkBC,MAAO,CAACwC,SAAU,IAAlD,SAAwD5B,KAAKoB,eAC5D,oBAAIjC,UAAU,YAAYC,MAAO,CAACwC,SAAUuD,GAA5C,SAAiEnF,KAAKC,MAAMkE,QAAQiB,YACpF,oBAAIjG,UAAWa,KAAKC,MAAMkE,QAAQM,UAAYzE,KAAKC,MAAMkE,QAAQkB,iBAAmB,UAAY,GAAhG,SAAqGrF,KAAKC,MAAMkE,QAAQmB,WACxH,oBAAInG,UAAWa,KAAKC,MAAMkE,QAAQM,SAAW,UAAY,GAAzD,SAA8DzE,KAAKC,MAAMkE,QAAQkB,mBACjF,oBAAIlG,UAAWa,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQM,UAAYzE,KAAKC,MAAMkE,QAAQoB,UAAY,UAAY,GAA3H,SAAgIR,IAChI,oBAAI5F,UAAU,cAAd,SAA6B2F,OAE9B9E,KAAKwF,uB,GA5DsB1F,aCWrBqG,E,uKAfX,IAAIT,GAAgB1F,KAAKC,MAAM0F,aAAe,OAC1CS,EAAWpG,KAAKC,MAAM0F,aAAe,WAAU,WACnD,OACE,qBAAIxG,UAAU,qCAAd,UACA,wCACM,6BAAKuG,IACL,yCACA,oBAAIvG,UAAU,eACd,6BAAKiH,IACL,oBAAIjH,UAAU,sB,GAXUW,a,QCmHrBuG,E,2KAzGX,IAaIC,EARAC,EAAiB,CAACxE,QAAS,eAAgBV,SAAU,YACrDmF,EAAW,CAACnF,SAAU,YACtBQ,EAAa,CAACA,WAAY,QAC1B4E,EAAO,CAACA,KAAM,QACdC,EAAU,CAACjH,OAAQ,GAAI8E,UAAW,cAAeoC,WAAY,GAE7DC,EAAY,mDAAOJ,GAAa3E,GAAe4E,GAAS,CAAC3E,SAAU,OAAQ6E,WAAY,MAAO3F,gBAAiBL,IAAOnC,cAqB1H,OAjBI8H,EAD8B,kBAA5BtG,KAAKC,MAAMkE,QAAQjE,MAAkD,oBAA5BF,KAAKC,MAAMkE,QAAQjE,MAAoD,0BAA5BF,KAAKC,MAAMkE,QAAQjE,KAErG,sBAAKf,UAAU,wBAAwBC,MAAOsH,EAA9C,UACI,qBAAKtH,MAAOmH,EAAZ,SAA4B,qBAAKpH,UAAU,iBAAiBC,MAAK,2BAAMoH,GAAN,IAAgBhG,KAAMG,IAAOnC,cAAc2B,QAAQ,MAAMG,MAAM,OAAOb,OAAO,OAAOc,QAAQ,YAAjI,SAA6I,sBAAMrB,EAjB7K,2EAkBF,qBAAKC,UAAU,8BAA8BC,MAAOwH,IACpD,qBAAKxH,MAAK,2BAAMmH,GAAmB,CAAEE,KAAM,UAA3C,SAAsD,qBAAKtH,UAAU,iBAAiBC,MAAK,2BAAMoH,GAAN,IAAgBhG,KAAMG,IAAOnC,cAAc2B,QAAQ,MAAMG,MAAM,OAAOb,OAAO,OAAOc,QAAQ,YAAjI,SAA6I,sBAAMrB,EAlBvM,8EAuBN,sBAAKC,UAAW,iBAAmBa,KAAKC,MAAMkE,QAAQjE,OAAS,oBAAgB,cAAgB,WAAYd,MAAOsH,EAAlH,UACI,qBAAKtH,MAAOmH,EAAZ,SAA4B,qBAAKpH,UAAU,qBAAqBC,MAAK,2BAAMoH,GAAN,IAAgBhG,KAAMG,IAAOlC,QAAQ0B,QAAQ,MAAMG,MAAM,OAAOb,OAAO,OAAOc,QAAQ,YAA/H,SAA2I,sBAAMrB,EAvBzK,2EAwBJ,qBAAKC,UAAuC,sBAA5Ba,KAAKC,MAAMkE,QAAQjE,KAAyB,sCAAwC,gCAAiCd,MAAK,mDAAMoH,GAAa3E,GAAe4E,GAAS,CAACzF,gBAAiBL,IAAOlC,MAAOqD,SAAU,OAAQ6E,WAAY,WACnP,qBAAKvH,MAAK,2BAAMmH,GAAmB,CAACE,KAAM,UAA1C,SAAqD,qBAAKtH,UAAU,qBAAqBC,MAAK,2BAAMoH,GAAN,IAAgBhG,KAAMG,IAAOlC,QAAQ0B,QAAQ,MAAMG,MAAM,OAAOb,OAAO,OAAOc,QAAQ,YAA/H,SAA2I,sBAAMrB,EAxBnM,8EA8Bb,qBAAKC,UAAU,gBAAf,SACKmH,M,0CAMP,OACE,6BACE,oBAAI7C,QAAQ,IAAZ,SACE,cAAC,EAAD,CAAgBnB,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,c,8CAO1E,OACE,cAAC,EAAD,CAAwBoD,SAAU,EAAGE,iBAAkB,EAAGD,kBAAkB,EAAOrB,KAAMtC,KAAKC,MAAMkE,QAAQK,QAASlE,MAAON,KAAKC,MAAMK,U,sCAKzI,OAAIN,KAAKC,MAAMkE,QAAQM,SACdzE,KAAK0E,wBAEL1E,KAAKC,MAAMkE,QAAQK,QACnBxE,KAAK2E,oBAEP,O,2CAIP,OAAO3E,KAAKC,MAAM2E,MAAQ,IAAM,EAAI,UAAY,Y,0CAG9BT,GAClB,OAAIA,EAAQM,SACA,cAAC,EAAD,IAEHN,EAAQoB,UACN,SAGa1C,EAAuB,IAAIxD,KAAQW,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQY,Q,+BAMhH,IAAIA,EAAOrC,EAAiB1C,KAAKC,MAAMkE,QAAQY,MAC3CD,EAAc9E,KAAKC,MAAMkE,QAAQW,YAAcpC,EAAiB1C,KAAKC,MAAMkE,QAAQW,aAAe,GAElGK,GAAqBnF,KAAKC,MAAMK,OAAS,KAAO,IAEpD,OACE,wBAAOlB,MAAO,CAAC8B,WAAYlB,KAAKmB,sBAAhC,UACE,qBAAIhC,UAAU,+BAAd,UACD,oBAAIA,UAAU,kBAAkBC,MAAO,CAACyH,SAAU,IAAKjF,SAAU,KAAjE,SAAwE5B,KAAKoB,eAC1E,oBAAIjC,UAAU,YAAYC,MAAO,CAACwC,SAAUuD,GAA5C,SAAiEnF,KAAKC,MAAMkE,QAAQiB,YACpF,oBAAIjG,UAAWa,KAAKC,MAAMkE,QAAQM,UAAYzE,KAAKC,MAAMkE,QAAQkB,iBAAmB,UAAY,GAAhG,SAAqGrF,KAAKC,MAAMkE,QAAQmB,WACxH,oBAAInG,UAAWa,KAAKC,MAAMkE,QAAQM,SAAW,UAAY,GAAzD,SAA8DzE,KAAKC,MAAMkE,QAAQkB,mBACjF,oBAAIlG,UAAWa,KAAKC,MAAMkE,QAAQW,aAAe9E,KAAKC,MAAMkE,QAAQM,UAAYzE,KAAKC,MAAMkE,QAAQoB,UAAY,UAAY,GAA3H,SAAgIR,IAChI,oBAAI5F,UAAU,cAAd,SAA6B2F,IAC7B,oBAAI3F,UAAU,gBAAd,SAAgCa,KAAK8G,oBAAoB9G,KAAKC,MAAMkE,cAErEnE,KAAKwF,uB,GArGiB1F,aCUhBiH,E,uKAhBZ,IAAIrB,GAAgB1F,KAAKC,MAAM0F,aAAe,OACzCS,EAAWpG,KAAKC,MAAM0F,aAAe,WAAU,WACnD,OACE,qBAAIxG,UAAU,qCAAd,UACA,wCACM,6BAAKuG,IACL,yCACA,oBAAIvG,UAAU,eACd,6BAAKiH,IACL,oBAAIjH,UAAU,eACd,oBAAIC,MAAO,CAACiD,UAAW,SAAvB,uB,GAZmBvC,aCiGhBkH,E,mLAlFS,IAAD,OAQfC,EAAkBjH,KAAKC,MAAMR,OAHP,GACA,GAGtByH,EAAQ,EAGRC,EAAWnH,KAAKC,MAAMkH,UAAY,GAwBtC,MAvBwB,UAApBnH,KAAKC,MAAMC,MACbiH,EAASC,MAAK,SAACC,EAAEC,GAAK,OAAQD,EAAEvC,aAAeuC,EAAEtC,OAASuC,EAAExC,aAAewC,EAAEvC,SAG5DoC,EAASI,KAAI,SAACpD,EAASS,GACxC,IAAMnF,EAAU0E,EAAQM,UAAYN,EAAQK,QAhB5B,IACG,GAuBnB,OAPIyC,GAAmBxH,GACrBwH,GAAoCxH,EACpCyH,EAAQtC,EAAQ,GAEhBqC,EAAkB,EAGI,UAApB,EAAKhH,MAAMC,KACN,EAAKD,MAAMK,MA/BF,IA+B6B,cAAC,EAAD,CAAuB6D,QAASA,EAAqBS,MAAOA,EAAOtE,MAAO,EAAKL,MAAMK,OAAvCsE,GAAoD,cAAC,EAAD,CAAkBT,QAASA,EAAqBS,MAAOA,EAAOtE,MAAO,EAAKL,MAAMK,OAAvCsE,GAC/K,EAAK4C,UAAU,EAAKvH,MAAMC,OAA6B,SAApB,EAAKD,MAAMC,KAC/C,cAAC,EAAD,CAAgBiE,QAASA,EAAqBS,MAAOA,EAAOtE,MAAO,EAAKL,MAAMK,OAAvCsE,GAGvC,cAAC,EAAD,CAAwBT,QAASA,EAAqBS,MAAOA,EAAOtE,MAAO,EAAKL,MAAMK,OAAvCsE,MAIvCpF,MAAM,EAAG0H,K,gCAGrBhH,GACN,MAAgB,aAATA,GAAgC,cAATA,GAAiC,aAATA,GAAgC,eAATA,I,0CAI/E,MAAwB,UAApBF,KAAKC,MAAMC,KACL,cAAC,EAAD,CAAgByF,aAAc3F,KAAKC,MAAM0F,eAE1C3F,KAAKC,MAAMK,MAnDA,IAmD2B,cAAC,EAAD,CAAuBqF,aAAc3F,KAAKC,MAAM0F,eAAoB,cAAC,EAAD,CAAkBA,aAAc3F,KAAKC,MAAM0F,iB,sCAK9J,OACI,cAAC,EAAD,CAA8BlG,OAAQO,KAAKC,MAAMR,OAAQqG,OAAQ,qCAAmCC,KAAM,+F,2CAK9G,OACE,kCACI,gCACG/F,KAAKyH,sBAEPzH,KAAK0H,0B,+BAMZ,OACE,qBAAKvI,UAAU,cAAcC,MAAO,CAACyG,UAAW7F,KAAKC,MAAMR,QAA3D,UACIO,KAAKC,MAAMkH,UAAY,IAAI5E,OAAS,EAAIvC,KAAK2H,qBAAuB3H,KAAKwF,sB,GAzEzD1F,aCEX8H,E,uKATX,OACE,sBAAKzI,UAAW,cAAgBa,KAAKC,MAAM4H,aAAczI,MAAO,CAACkB,MAAON,KAAKC,MAAMK,OAAS,GAA5F,UACE,cAAC,EAAD,CAAQJ,KAAMF,KAAKC,MAAMC,KAAM+B,MAAOjC,KAAKC,MAAMgC,MAAO3B,MAAON,KAAKC,MAAMK,MAAOwH,eAAgB9H,KAAKC,MAAM6H,iBAC5G,cAAC,EAAD,CAAaX,SAAUnH,KAAKC,MAAMkH,SAAUjH,KAAMF,KAAKC,MAAMC,KAAMyF,aAAc3F,KAAKC,MAAM0F,aAAcrF,MAAON,KAAKC,MAAMK,MAAOb,OAAQO,KAAKC,MAAMR,OALxI,Y,GAFGK,aCoIViI,E,kDA7Hb,WAAY9H,GAAO,IAAD,8BAChB,cAAMA,IACCkC,MAAQ,CAAE7B,MAAO,EAAGb,OAAQ,EAAGuI,QAAS,IAC7C,EAAKC,uBAAyB,EAAKA,uBAAuBC,KAA5B,gBAE9B,EAAKC,YACLC,YAAW,WACPC,OAAOC,SAASC,OAAO,KACxB,OARW,E,wDAWH,IACLC,EADI,OAERC,MAAM,6BAA8B,CAChCC,OAAQ,OACRC,QAAS,CACL,OAAU,mBACV,eAAgB,mBAChB,YAAa3I,KAAKC,MAAM2I,QAE5B7C,KAAM8C,KAAKC,UAAU,CACjBC,WAAY/I,KAAKC,MAAM+I,UACvBC,YAAajJ,KAAKC,MAAMgJ,YACxBC,aAAcL,KAAKM,MAAMnJ,KAAKC,MAAMiJ,cACpCE,SAAmC,MAAzBpJ,KAAKC,MAAMoJ,UACrBC,UAAWtJ,KAAKC,MAAMqJ,UACtBC,YAAavJ,KAAKC,MAAMsJ,YAAc,IAAIlK,KAAKW,KAAKC,MAAMsJ,YAAc,SAAU,SAGzFC,MAAK,SAAAC,GACF,OAAwB,MAApBA,EAASC,QACT,EAAKC,SAAS,CAAE3B,QAAS,GAAI4B,MAAO,iBACpCC,aAAarB,GACNiB,EAASK,SAEpB,EAAKH,SAAS,CAAE3B,QAAS,GAAI4B,WAAOG,IAC7BN,EAASK,WAEnBE,OAAM,SAAAJ,GAAK,OAAI,EAAKD,SAAS,CAAEC,MAAOA,OACtCJ,MAAK,SAAAS,GACEA,GAAQA,EAAKjC,WACZiC,EAAKjC,SAAW,IAAIkC,SAAQ,SAAClC,GAC1BA,EAAQb,SAAS+C,SAAQ,SAAC/F,GACtBA,EAAQY,KAAO,IAAI1F,KAAK8E,EAAQY,MAC5BZ,EAAQW,cACRX,EAAQW,YAAc,IAAIzF,KAAK8E,EAAQW,oBAInD,EAAK6E,SAAS,CAAE3B,QAASiC,EAAKjC,cAItCQ,EAAcJ,YAAW,WACrB,EAAKD,cACN,O,+BAGG,IAAD,OACDN,EAAgB7H,KAAKmC,MAAM6F,QAAQzF,OAAS,GAAKvC,KAAKmC,MAAMgI,WAAc,cAAgB,GAC1FC,EAAkB,EAElBA,EADApK,KAAKmC,MAAM6F,QAAQzF,QAAU,IAAMvC,KAAKmC,MAAMgI,WAC5BnK,KAAKmC,MAAM7B,MAEVN,KAAKmC,MAAM7B,MAAQ,EAAK,GAG/C,IAAI+J,EAAmB,EAGnBA,EADArK,KAAKmC,MAAM6F,QAAQzF,QAAU,GAAKvC,KAAKmC,MAAMgI,WAC1BnK,KAAKmC,MAAM1C,OAFb,GAIEO,KAAKmC,MAAM1C,OAAS,EAJtB,GAOrB,IAAI6K,EAAetK,KAAKmC,MAAM6F,QAAQT,KAAI,SAACgD,EAAK3F,GAC5C,OAAQ,cAAC,EAAD,CAAYe,aAAc4E,EAAIC,WAAYlK,MAAO8J,EAAiB3K,OAAQ4K,EAAkBvC,eAAgB,EAAK3F,MAAMgI,WAAYtC,aAAcA,EAA0B3H,KAAMqK,EAAIrK,KAAM+B,MAAOsI,EAAItI,MAAOkF,SAAUoD,EAAIpD,UAAvDvC,MAOhL,OAJI5E,KAAKmC,MAAMyH,OAA8B,iBAArB5J,KAAKmC,MAAMyH,QAC/Ba,SAAS1E,KAAK3G,MAAQ,wBAItB,qCAC0B,iBAArBY,KAAKmC,MAAMyH,OACR,sBAAKzK,UAAU,wBAAf,UACI,mBAAGA,UAAU,sBAAb,wCACA,mBAAGA,UAAU,sBAAb,kHAEA,qBAAKA,UAAU,mCAAf,SACI,qBAAKC,MAAO,CAAEK,OAAQ,IAAME,IAAKC,EAAMC,IAAI,2BAKrDG,KAAKmC,MAAMyH,OACT,sBAAKzK,UAAU,MAAf,UACKmL,EACD,cAAC,EAAD,IACCtK,KAAKmC,MAAMyH,OAA8B,iBAArB5J,KAAKmC,MAAMyH,OAA6B,qBAAKxK,MAAO,CAAEiC,SAAU,WAAYqJ,OAAQ,EAAGpK,MAAO,OAAQb,OAAQ,GAAI4C,UAAW,UAArF,SACzD,qBAAKlD,UAAU,qBAAqBwL,KAAK,QAAQvL,MAAO,CAAEkB,MAAO,IAAKqG,WAAY,OAAQiE,YAAY,QAAtG,wD,0CAWpB5K,KAAKiI,yBACLI,OAAOwC,iBAAiB,SAAU7K,KAAKiI,0B,6CAIvCI,OAAOyC,oBAAoB,SAAU9K,KAAKiI,0B,+CAI1CjI,KAAK2J,SAAS,CAAErJ,MAAO+H,OAAO0C,WAAYtL,OAAQ4I,OAAO2C,YAAab,WAAY9B,OAAO0C,WAAa1C,OAAO2C,aAAe3C,OAAO0C,WAAa,W,GA3HtIjL,aC4DHmL,G,4LAjEP,IAAMC,EAAW7C,OAAOC,SAAS4C,SAC3BC,EAAW9C,OAAOC,SAAS6C,SAC7BC,EAAO,GACkB,OAAzB/C,OAAOC,SAAS8C,MAA0C,QAAzB/C,OAAOC,SAAS8C,OACjDA,EAAO,IAAM/C,OAAOC,SAAS8C,MAEjC,IAAMC,EAAcrL,KAAKC,MAAMqL,MACzBC,EAAeL,EAAW,KAAOC,EAAWC,EAAO,8BAAgCC,EACnFG,EAAeN,EAAW,KAAOC,EAAWC,EAAQC,EAQ1D,OACI,sBAAKlM,UAAU,6BAAf,UACI,qBAAKA,UAAU,4BAAf,SACI,oBAAIA,UAAU,sBAAd,iCAEJ,sBAAKA,UAAU,uBAAf,UACI,qBAAKA,UAAU,OAAOC,MAAO,CAAE0C,SAAU,GAAI2J,aAAc,IAA3D,kDACA,mcACA,uBACA,qBAAKtM,UAAU,OAAOC,MAAO,CAAE0C,SAAU,IAAzC,6DACA,qBAAI1C,MAAO,CAACsM,cAAe,OAAQC,QAAS,EAAGC,UAAW,IAA1D,UACI,qBAAIxM,MAAO,CAAEqM,aAAc,QAA3B,UACI,mBAAGtM,UAAU,OAAb,mCACA,uBAAOe,KAAK,OAAO2L,aAAcL,EAAcM,GAAG,UAAU3M,UAAU,qBAAqBC,MAAO,CAAE2C,QAAS,eAAgBgK,aAAc,yBAC3I,wBAAQC,QApB5B,WACI,IAAMC,EAAWxB,SAASyB,eAAe,WAAWC,MACpDC,UAAUC,UAAUC,UAAUL,GAC9BxB,SAASyB,eAAe,mBAAmB9M,MAAM2C,QAAU,SAiBT5C,UAAU,6BAA6BC,MAAO,CAAEmN,UAAW,aAAc9M,OAAQ,8BAA+BqC,SAAU,OAAQiK,aAAc,sBAAuBS,cAAe,YAAxN,qBACA,mBAAGV,GAAG,kBAAkB1M,MAAO,CAAEsB,MAAO,QAASqB,QAAS,QAA1D,0BAEJ,+BACI,mBAAG5C,UAAU,OAAb,2EACA,qJAAwG,qBAAKA,UAAU,OAAOC,MAAO,CAAEqN,OAAQ,iBAAkBV,aAAc,SAAU/K,gBAAiB,UAAW2K,QAAS,EAAG7J,SAAU,QAASpB,MAAO,QAASgM,WAAY,kBAAxK,iBAAxG,2BACA,mBAAGvN,UAAU,OAAb,0BAGR,uBACA,qBAAKA,UAAU,OAAOC,MAAO,CAAE0C,SAAU,IAAzC,6CACA,qBAAI1C,MAAO,CAACsM,cAAe,OAAQC,QAAS,EAAGC,UAAW,IAA1D,UACI,+BACI,mBAAGzM,UAAU,OAAb,2CACA,qBAAKC,MAAO,CAAEqM,aAAc,IAA5B,SAAkC,oBAAGkB,KAAMpB,EAAT,wCAAgDvL,KAAKC,MAAM2M,UAE7F,qRAEJ,+BACI,mBAAGzN,UAAU,OAAb,gDAEA,8IAEA,mBAAGA,UAAU,OAAb,oBAEA,yKAEJ,oC,GA5DMW,cCExB+M,G,yDACF,WAAY5M,GAAQ,IAAD,8BACf,cAAMA,IACDkC,MAAQ,CAAEgK,MAAO,GAAIW,MAAO,IAFlB,E,qDAKT,IAAD,OACL,OACI,sBAAK3N,UAAU,YAAYC,MAAOY,KAAKC,MAAMb,MAA7C,UACI,uBAAOA,MAAOY,KAAKC,MAAM8M,WAAYZ,MAAOnM,KAAKmC,MAAMgK,MAAOa,YAAahN,KAAKC,MAAM+M,YAAaC,SAAU,SAACC,GAAD,OAAW,EAAKC,aAAaD,MACzIlN,KAAKoN,mB,oCAKH,IAAD,OACV,GAAgC,IAA5BpN,KAAKmC,MAAM2K,MAAMvK,OACjB,OAAO,KAGX,IAAIuK,EAAQ9M,KAAKmC,MAAM2K,MAKvB,OAJIA,GAAS9M,KAAKC,MAAMoN,aAAe,IACnCP,EAAQA,EAAMtN,MAAM,EAAG0D,KAAKoK,IAAItN,KAAKC,MAAMoN,aAAcP,EAAMvK,UAI/D,oBAAIpD,UAAU,WAAd,SACK2N,EAAMvF,IAAMuF,EAAMvF,KAAI,SAACgG,EAAMC,GAC1B,OACI,oBAAYxB,QAAS,SAACyB,GAAQ,EAAKC,gBAAgBD,EAAGF,IAAtD,SAAgEA,EAAKX,MAAQW,GAApEC,MAEZ,S,sCAKDC,EAAGF,GACfvN,KAAK2J,SAAS,CAAEgE,aAAcJ,EAAMpB,MAAOoB,EAAKX,MAAQW,EAAMT,MAAO,KACrE9M,KAAKC,MAAM2N,WAAWL,K,mCAGbE,GAAI,IAAD,OACZzN,KAAK2J,SAAS,CAAEwC,MAAOsB,EAAEI,OAAO1B,MAAO2B,SAAS,IAC5C9N,KAAKC,MAAM8N,eACX/N,KAAKC,MAAM8N,cAAcN,EAAEI,OAAO1B,OAEtCnM,KAAKC,MAAM+N,SAASP,EAAEI,OAAO1B,OAAO,SAACW,GAAY,EAAKmB,oBAAoBnB,Q,0CAG1DA,GAChB9M,KAAK2J,SAAS,CAAEmD,MAAOA,GAAS,GAAIgB,SAAS,Q,GAlD7BhO,cAsDxB+M,EAAUhJ,aAAe,CACrBmJ,YAAa,GACbK,aAAc,GAUHR,QCkJAqB,E,kDA1MX,WAAYjO,GAAQ,IAAD,8BACf,cAAMA,IACDkC,MAAQ,CAAEgM,eAAWpE,EAAWjH,KAAM,GAAIsL,OAAQ,GAAI/E,UAAW,EAAGH,aAAc,GAAII,UAAW,GAAIhJ,MAAO,EAAK+N,WAAYzF,OAAQ,GAAI0F,eAAe,EAAOC,cAAe,QAASC,kBAAkB,GAC9MnG,OAAOoG,SAAW,WACd,EAAK9E,SAAS,CAAErJ,MAAO,EAAK+N,cAJjB,E,wDAQPd,GACRvN,KAAK2J,SAAS,CAAEwE,UAAWZ,M,wCAGbjL,EAAMoM,GACpB,GAAIpM,EAAKC,OAAS,EACdmM,EAAS,SAIb,GAA+B,MAA3B1O,KAAKmC,MAAMiM,OAAO9L,IAAiBtC,KAAKmC,MAAMiM,OAAO9L,GAAMC,OAAS,EACpEmM,EAAS1O,KAAKmC,MAAMiM,OAAO9L,QAD/B,CAKA,IAAIqM,EAAM,IAAIC,eACdD,EAAIE,iBAAkB,EACtBF,EAAIG,KAAK,MAAO,oCAAsCC,mBAAmBzM,IAAQ,GACjFqM,EAAIK,OAAS,WACT,GAAmB,MAAfL,EAAIjF,OAAR,CAIA,IAAIuF,EAAepG,KAAKM,MAAMwF,EAAIlF,UAC9ByF,EAAmBlP,KAAKmC,MAAMiM,OAClCc,EAAiB5M,GAAQ2M,EAAaE,YACtCnP,KAAK2J,SAAS,CAAEyE,OAAQc,IACxBR,EAASQ,EAAiB5M,SAPtBtC,KAAK2J,SAAS,CAAEC,MAAsB,MAAf+E,EAAIjF,OAAiB,2BAA6B,gBAAiBoE,SAAS,KAQzG5F,KAAKlI,MACP2O,EAAIS,U,2CAGajD,EAAOe,GACxB,IAAIhE,EAAelJ,KAAKmC,MAAM+G,aAC9B,GAAIgE,EAAMW,OAAOwB,QACbnG,EAAaoG,KAAKnD,OACf,CACH,IAAIvH,EAAQsE,EAAaqG,QAAQpD,GAC7BvH,GAAS,GACTsE,EAAasG,OAAO5K,EAAO,GAGnC5E,KAAK2J,SAAS,CAACT,aAAcA,M,qCAGlBN,GACX5I,KAAK2J,SAAS,CAAC4E,cAAe,YAAaC,kBAAkB,IAC7D,IAAIG,EAAM,IAAIC,eACdD,EAAIE,iBAAkB,EACtBF,EAAIG,KAAK,MAAO,+BAA+B,GAC/CH,EAAIc,iBAAiB,YAAazP,KAAKmC,MAAMyG,QAC7C+F,EAAIK,OAAS,WACU,MAAfL,EAAIjF,OAIR1J,KAAK2J,SAAS,CAAE+F,cAAc,IAH1B1P,KAAK2J,SAAS,CAAC4E,cAAe,QAASC,kBAAkB,EAAOF,eAAe,KAIrFpG,KAAKlI,MACP2O,EAAIS,S,gDAGkB,IAAD,OAErB,OACI,sBAAKjQ,UAAU,qCAAqCC,MAAO,CAAEwM,UAAW,OAAQH,aAAc,QAA9F,UACI,qBAAKtM,UAAU,4BAAf,SACI,oBAAIA,UAAU,sBAAd,qCAEJ,sBAAKA,UAAU,uBAAf,UACI,sBAAKA,UAAU,cAAf,UACI,qBAAKA,UAAU,sBAAf,SACI,qBAAKC,MAAO,CAAEkB,MAAO,GAAIU,gBAAiB,SAAW7B,UAAU,wBAA/D,SAAwFa,KAAKmC,MAAMkH,UAAY,OAAS,cAE5H,cAAC,EAAD,CACI2D,YAAY,eACZD,WAAY,CAAEtN,OAAQ,GAAIsM,aAAc,kBAAmB4D,YAAa,IACxEvQ,MAAO,CAAEwQ,KAAM,WAAY7D,aAAc,mBACzCiC,SAAU,SAAC1L,EAAMoM,GACb,EAAK/E,SAAS,CAAEwE,eAAWpE,IAC3B,EAAK8F,kBAAkBvN,EAAMoM,IAEjCd,WAAY,SAACL,GACT,EAAKuC,YAAYvC,IAErBF,aAAc,OAEtB,uBACA,sBAAKlO,UAAU,cAAf,UACI,qBAAKA,UAAU,sBAAf,SACI,qBAAKA,UAAU,wBAAwBC,MAAO,CAAEkB,MAAO,GAAIU,gBAAgB,SAA3E,uBAEJ,uBAAO5B,MAAO,CAAEK,OAAQ,IAAMS,KAAK,OAAOf,UAAU,8BAA8BgN,MAAOnM,KAAKmC,MAAMmH,UAAW2D,SAAU,SAACC,GAAD,OAAW,EAAKvD,SAAS,CAAEL,UAAW4D,EAAMW,OAAO1B,cAGhL,uBASA,uBAAOhN,UAAU,OAAOC,MAAO,CAACqM,aAAc,IAA9C,gCAEA,sBAAKtM,UAAU,aAAf,UACI,uBAAOA,UAAU,yCAAyCe,KAAK,WAAW4L,GAAG,WAAWuD,QAASrP,KAAKmC,MAAM+G,aAAaqG,QAAQ,IAAM,EAAGtC,SAAU,SAACC,GAAY,EAAK6C,qBAAqB,EAAG7C,MAC9L,uBAAO/N,UAAU,+CAA+C6Q,QAAQ,WAAxE,0BAEJ,sBAAK7Q,UAAU,aAAf,UACI,uBAAOA,UAAU,yCAAyCe,KAAK,WAAW4L,GAAG,YAAYuD,QAASrP,KAAKmC,MAAM+G,aAAaqG,QAAQ,IAAM,EAAGtC,SAAU,SAACC,GAAY,EAAK6C,qBAAqB,EAAG7C,MAC/L,uBAAO/N,UAAU,+CAA+C6Q,QAAQ,YAAxE,2BAEJ,sBAAK7Q,UAAU,aAAf,UACI,uBAAOA,UAAU,yCAAyCe,KAAK,WAAW4L,GAAG,OAAOuD,QAASrP,KAAKmC,MAAM+G,aAAaqG,QAAQ,IAAM,EAAGtC,SAAU,SAACC,GAAY,EAAK6C,qBAAqB,EAAG7C,MAC1L,uBAAO/N,UAAU,+CAA+C6Q,QAAQ,OAAxE,4BAEJ,sBAAK7Q,UAAU,aAAf,UACI,uBAAOA,UAAU,yCAAyCe,KAAK,WAAW4L,GAAG,QAAQuD,QAASrP,KAAKmC,MAAM+G,aAAaqG,QAAQ,IAAM,EAAGtC,SAAU,SAACC,GAAY,EAAK6C,qBAAqB,EAAG7C,MAC3L,uBAAO/N,UAAU,+CAAgD6Q,QAAQ,QAAzE,uBAQJ,uBACA,uBAAO7Q,UAAU,OAAjB,gCACA,qBAAKA,UAAS,sBAAiBa,KAAKmC,MAAMmM,cAAgB,gBAAkB,IAA5E,SACI,uBAAOlP,MAAO,CAAEK,OAAQ,IAAMS,KAAK,OAAOf,UAAU,eAAegN,MAAOnM,KAAKmC,MAAMyG,OAAQqE,SAAU,SAACC,GAAD,OAAW,EAAKvD,SAAS,CAAEf,OAAQsE,EAAMW,OAAO1B,aAE3J,qBAAKhN,UAAS,wBAAmBa,KAAKmC,MAAMmM,cAAgB,UAAY,UAAxE,uHAOA,uBACA,uBACA,qBAAKlP,MAAO,CAACkB,MAAO,OAAQ2P,WAAY,SAAU5N,UAAW,SAAU3C,cAAe,IAAtF,SACI,wBAAQwQ,UAAWlQ,KAAKmC,MAAMgM,WAAgD,IAAnCnO,KAAKmC,MAAM+G,aAAa3G,QAAsC,KAAtBvC,KAAKmC,MAAMyG,QAAiB5I,KAAKmC,MAAMqM,iBAAmBrP,UAAW,uBAAwB6M,QAAS,WACjL,EAAK7J,MAAMgM,WAAa,EAAKhM,MAAMyG,QACnC,EAAKuH,eAAe,EAAKhO,MAAMyG,SAEpCxJ,MAAO,CACNuM,QAAQ,iBALZ,SAMI3L,KAAKmC,MAAMoM,0B,iCAQ/B,MAAO,cAAgBvO,KAAKmC,MAAMgM,UAAUrC,GAAK,gBAAiBiD,mBAAmB/O,KAAKmC,MAAMgM,UAAUvB,MAAO,kBAAkB5M,KAAKmC,MAAM+G,aAAakH,WAAa,eAAiBpQ,KAAKmC,MAAMkH,UAAY,cAAerJ,KAAKmC,MAAMmH,UAAY,WAAatJ,KAAKmC,MAAMyG,S,2CAI9Q,IAAI0C,EAAQtL,KAAKqQ,WACjB,OACI,cAAC,EAAD,CAAiB/E,MAAOA,EAAOsB,KAAM5M,KAAKmC,MAAMgM,UAAUvB,S,iCAK9D,OAAO1J,KAAKoN,IACR7F,SAAS1E,KAAKwK,YACd9F,SAAS+F,gBAAgBD,YACzB9F,SAAS1E,KAAK0K,YACdhG,SAAS+F,gBAAgBC,YACzBhG,SAAS+F,gBAAgBE,e,+BAM7B,OACI,sBAAKvR,UAAU,MAAMC,MAAO,CAAEiC,SAAU,WAAYW,OAAQ,EAAGhB,gBAAiB,mBAAqBvB,OAAQ,OAAQsC,QAAS,QAASzB,MAAO,QAA9I,UACKN,KAAKmC,MAAM7B,MAAQ,KAAO,qBAAKlB,MAAO,CAAEiC,SAAU,WAAYC,IAAK,IAAKmF,KAAM,EAAGlF,MAAO,EAAGS,OAAQ,GAAzE,SAA8E,qBAAK5C,MAAO,CAAEkB,MAAO,QAAUX,IAAKuB,EAAYrB,IAAI,OAC7J,sBAAKV,UAAU,qBAAf,UACI,qBAAKC,MAAO,CAAEK,OAAQ,GAAIkR,aAAc,IAAMhR,IAAKC,EAAMC,IAAI,qBAC7D,sBAAMT,MAAO,CAAEyC,WAAY,EAAG6K,WAAY,IAAKrL,SAAU,WAAYqJ,OAAQ,EAAGiF,YAAa,GAAIjP,MAAO,UAAWoB,SAAU,GAAI8O,WAN1H,mBAMP,0BAEJ,qBAAKxR,MAAO,CAAEiC,SAAU,WAAYqJ,OAAQ,GAAInJ,MAAO,IAAvD,SAA6D,qBAAKnC,MAAO,CAAEK,OAAQ,GAAIkM,QAAS,IAAMhM,IC/MvG,i5RD+M6HE,IAAI,OAChI,qBAAKV,UAAU,iDAAf,SACMa,KAAKmC,MAAMuN,aAA+C1P,KAAK6Q,qBAAtC7Q,KAAK8Q,mC,GArM5BhR,aEAlBiR,EAAcC,QACW,cAA7B3I,OAAOC,SAAS6C,UAEe,UAA7B9C,OAAOC,SAAS6C,UAEhB9C,OAAOC,SAAS6C,SAAS7G,MAAM,2DAqCnC,SAAS2M,EAAgBC,EAAOC,GAC9B/E,UAAUgF,cACPC,SAASH,GACT1H,MAAK,SAAC8H,GACLA,EAAaC,cAAgB,WAC3B,IAAMC,EAAmBF,EAAaG,WACd,MAApBD,IAGJA,EAAiBE,cAAgB,WACA,cAA3BF,EAAiBrP,QACfiK,UAAUgF,cAAcO,YAI1BC,QAAQC,IACN,+GAKEV,GAAUA,EAAOW,UACnBX,EAAOW,SAASR,KAMlBM,QAAQC,IAAI,sCAGRV,GAAUA,EAAOY,WACnBZ,EAAOY,UAAUT,WAO5BtH,OAAM,SAACJ,GACNgI,QAAQhI,MAAM,4CAA6CA,MCnFjE,IAAIoI,EAAW,SAASC,GACpB,OAAOA,EACFC,QAAQ,QAAS,UACjBA,QAAQ,QAAS,UACjBA,QAAQ,QAAS,UACjBA,QAAQ,QAAS,UACjBA,QAAQ,QAAS,UACjBA,QAAQ,QAAS,WAG1B,GAAI7J,OAAOC,SAASqE,KAAK4C,QAAQ,wBAA0B,GAAKlH,OAAOC,SAASqE,KAAK4C,QAAQ,cAAgB,EAAG,CAC5G,IASI4C,EAAMH,EAAS3J,OAAOC,SAAS8J,QAE/BC,EAXiB,SAASC,GAC1B,IAAMtJ,EAAYsJ,EAAUC,IAAI,uBAC1BtJ,EAAcqJ,EAAUC,IAAI,oBAC5BrJ,EAAeoJ,EAAUC,IAAI,eAC7BlJ,EAAYiJ,EAAUC,IAAI,gBAC1BjJ,EAAYgJ,EAAUC,IAAI,WAEhC,MAAO,cAAgBvJ,EAAY,gBAAkBC,EAAc,kBAAoBC,EAAagJ,QAAQ,QAAS,KAAKA,QAAQ,OAAQ,KAAKA,QAAQ,MAAO,KAAO,eAAiB7I,EAAY,cAAgBC,EAIvMkJ,CAAe,IAAIC,gBAAgBN,IAClD9J,OAAOC,SAAS4J,QAAQQ,UAAUrK,OAAOC,SAASqK,OAASN,QACxD,CACH,IAAMO,EAAcnI,SAASyB,eAAe,QACtCoG,EAAY,IAAIG,gBAAgBT,EAAS3J,OAAOC,SAAS8J,SACzDpJ,EAAYsJ,EAAUC,IAAI,aAC1BtJ,EAAcqJ,EAAUC,IAAI,eAC5BrJ,GAAeoJ,EAAUC,IAAI,gBAC7BlJ,GAAYiJ,EAAUC,IAAI,aAC1BjJ,GAAYgJ,EAAUC,IAAI,aAC1BhJ,GAAc+I,EAAUC,IAAI,eAC5B3J,GAAS0J,EAAUC,IAAI,UAMzBvJ,GAAaX,OAAOC,SAASqE,KAAK4C,QAAQ,mBAAqB,EAC/DsD,IAASC,OAAQ,cACb,EADa,CACT9J,UACAA,EAEJC,YACIA,EAEJC,aACIA,GAEJG,UACIA,GAEJC,UACIA,GAEJC,YACIA,GAEJX,OACIA,KAGJgK,GAEJC,IAASC,OAAQ,cACb,EADa,IAEbF,ID1DL,SAAkBzB,GACvB,GAA6C,kBAAmB/E,UAAW,CAGzE,GADkB,IAAI2G,IAAIC,GAAwB3K,OAAOC,SAASqE,MACpDgG,SAAWtK,OAAOC,SAASqK,OAIvC,OAGFtK,OAAOwC,iBAAiB,QAAQ,WAC9B,IAAMqG,EAAK,UAAM8B,GAAN,sBAEPjC,IAgEV,SAAiCG,EAAOC,GAEtC1I,MAAMyI,EAAO,CACXvI,QAAS,CAAE,iBAAkB,YAE5Ba,MAAK,SAACC,GAEL,IAAMwJ,EAAcxJ,EAASd,QAAQ4J,IAAI,gBAEnB,MAApB9I,EAASC,QACO,MAAfuJ,IAA8D,IAAvCA,EAAY1D,QAAQ,cAG5CnD,UAAUgF,cAAc8B,MAAM1J,MAAK,SAAC8H,GAClCA,EAAa6B,aAAa3J,MAAK,WAC7BnB,OAAOC,SAASC,eAKpB0I,EAAgBC,EAAOC,MAG1BnH,OAAM,WACL4H,QAAQC,IAAI,oEAtFVuB,CAAwBlC,EAAOC,GAI/B/E,UAAUgF,cAAc8B,MAAM1J,MAAK,WACjCoI,QAAQC,IACN,+GAMJZ,EAAgBC,EAAOC,OCkC/BkC,K","file":"static/js/main.d747f158.chunk.js","sourcesContent":["const Gray = \"#6E6065\";\r\nconst Green = \"#37990D\";\r\nconst Yellow = \"#F6A200\";\r\nconst Red = '#e00201';\r\nconst Purple = '#6660c3';\r\nconst White = '#FFFFFF';\r\nconst Black = '#000000';\r\nconst CommercialGray = '#6E6065';\r\nconst ConfiguratorGray = '#c3c0bd';\r\n\r\nmodule.exports = Object.freeze({\r\n Gray: Gray,\r\n Green: Green,\r\n Yellow: Yellow,\r\n Red: Red,\r\n Purple: Purple,\r\n PurpleTrain: Purple,\r\n Train: Gray,\r\n LocalBus: Green,\r\n RegionBus: Yellow,\r\n MixedBus: Gray,\r\n Black: Black,\r\n White: White,\r\n CommercialBus: CommercialGray,\r\n ConfiguratorHeader: ConfiguratorGray,\r\n});\r\n","export default __webpack_public_path__ + \"static/media/hero.e427fc1a.jpg\";","export default __webpack_public_path__ + \"static/media/header_edge_gray.e39965a6.png\";","export default __webpack_public_path__ + \"static/media/header_edge_green.48615bd9.png\";","export default __webpack_public_path__ + \"static/media/header_edge_yellow.e5aa5c2f.png\";","export default __webpack_public_path__ + \"static/media/skanetrafiken_logotype.acf65d6f.png\";","import React, { Component } from 'react';\r\nimport {logo} from '../Images.js'\r\n\r\nclass Footer extends Component {\r\n render() {\r\n \tconst dateToString = d => `${d.getHours()}:${('00' + (d.getMinutes())).slice(-2)}` \r\n\r\n return (\r\n
\r\n \t
{dateToString(new Date())}
\r\n
\"\"/
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Footer;\r\n","import '../Monitor.css';\r\n\r\nimport React, { Component } from 'react';\r\n\r\nimport Colors from './Colors.js';\r\nimport { headerEdgeGray, headerEdgeGreen, headerEdgeYellow } from '../Images.js';\r\n\r\nclass Header extends Component {\r\n renderIcon(){ \r\n if(this.props.type === \"train\") {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n else {\r\n return (\r\n \r\n \r\n \r\n );\r\n } \r\n }\r\n\r\n getColor(){\r\n var color;\r\n switch(this.props.type){\r\n case \"regionBus\":\r\n color = Colors.Black;\r\n break;\r\n default:\r\n color = Colors.White;\r\n }\r\n return color;\r\n }\r\n\r\n getBackground(){\r\n var backgroundImage;\r\n switch(this.props.type) {\r\n case \"train\":\r\n backgroundImage = headerEdgeGray;\r\n break;\r\n case \"localBus\":\r\n backgroundImage = headerEdgeGreen;\r\n break;\r\n case \"regionBus\":\r\n backgroundImage = headerEdgeYellow;\r\n break;\r\n case \"mixedBus\":\r\n backgroundImage = headerEdgeGray;\r\n break;\r\n case \"tram\":\r\n backgroundImage = headerEdgeGreen;\r\n break;\r\n\r\n default:\r\n backgroundImage = headerEdgeGray;\r\n }\r\n return backgroundImage;\r\n }\r\n\r\n getBackgroundColor(){\r\n var backgroundColor;\r\n switch(this.props.type) {\r\n case \"train\":\r\n backgroundColor = Colors.Train;\r\n break;\r\n case \"localBus\":\r\n backgroundColor = Colors.LocalBus;\r\n break;\r\n case \"regionBus\":\r\n backgroundColor = Colors.RegionBus;\r\n break;\r\n case \"mixedBus\":\r\n backgroundColor = Colors.MixedBus;\r\n break;\r\n case \"tram\":\r\n backgroundColor = Colors.LocalBus;\r\n break;\r\n default:\r\n backgroundColor = Colors.Gray;\r\n }\r\n return backgroundColor;\r\n \r\n }\r\n\r\n render() {\r\n var fontSize = 40;\r\n var lineHeight = 0.95;\r\n var maxTitleWidth = (this.props.width || 180) -180;\r\n \r\n return (\r\n
\r\n {this.renderIcon()}\r\n
\r\n
\r\n
{this.props.title}
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Header;\r\n","import React, { Component } from 'react';\r\nimport Marquee from 'react-marquee';\r\n\r\nclass JourneyMessage extends Component {\r\n constructor(props){\r\n\tsuper(props);\r\n\tthis.state = {overThreeRows: false};\r\n }\r\n render() {\r\n \tvar textAlign = this.props.text.length > 60 ? \"left\" : \"center\";\r\n\r\n const charactersPerWidth = 0.093; \r\n var overThreeRows = this.props.text.length / charactersPerWidth / 3 > (this.props.width-60);\r\n\r\n return (\r\n
\r\n \t{overThreeRows ? : this.props.text}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default JourneyMessage;\r\n","export function getFormattedTime(date) {\r\n return (\"00\" + date.getHours()).substr(-2, 2) + \":\" + (\"00\" + date.getMinutes()).substr(-2, 2);\r\n}\r\n\r\nexport function addMinutes(date, minutes) {\r\n return new Date(date.getTime() + minutes * 60000);\r\n}\r\n\r\nexport function calcDiffMin(from, to) {\r\n var diff = to - from;\r\n var minutes = Math.round((diff / 1000) / 60);\r\n return minutes;\r\n}\r\n\r\nexport function getFormattedNumMinutes(from, to) {\r\n var numMin = calcDiffMin(from, to);\r\n\r\n var hours = 0;\r\n while (numMin >= 60) {\r\n numMin -= 60;\r\n hours++;\r\n }\r\n if (numMin <= 0 && hours <= 0)\r\n return \"0 min\";\r\n else {\r\n var result = \"\";\r\n // If we have hours exceeding 0 add these:\r\n if (hours > 0) {\r\n result = hours + \"h\";\r\n }\r\n // If we have minutes that exceed 0 add these to result:\r\n if (numMin > 0) {\r\n result += \" \" + numMin + \" min\";\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nfunction getNumLines(textDiv) {\r\n var divHeight = textDiv.offsetHeight;\r\n var lineHeight = parseInt(textDiv.style.lineHeight);\r\n var lines = divHeight / lineHeight;\r\n return lines;\r\n}\r\n\r\nexport function scaleToFit(textDiv) {\r\n var failsafe = 0;\r\n textDiv.style.lineHeight = \"12px\";\r\n while (getNumLines(textDiv) > 1 && failsafe < 200) {\r\n var style = window.getComputedStyle(textDiv, null).getPropertyValue('font-size');\r\n var fontSize = parseFloat(style);\r\n textDiv.style.fontSize = (fontSize - 1) + 'px';\r\n failsafe++;\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nconst CanceledBox = (props) => {\r\n return(\r\n \t
INSTÄLLD
\r\n );\r\n}\r\n\r\nexport {CanceledBox}\r\n","import PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\n\r\nimport { CanceledBox } from './CanceledBox';\r\n\r\nclass JourneyCanceledMessage extends Component {\r\n render() {\r\n return (\r\n \r\n \r\n \t
{this.props.text}
\r\n \r\n {this.props.showCanceledSign? (): null}\r\n \r\n );\r\n }\r\n}\r\n\r\nJourneyCanceledMessage.propTypes = {\r\n text: PropTypes.string,\r\n canceledSignCols: PropTypes.number,\r\n textCols: PropTypes.number\r\n};\r\n\r\nJourneyCanceledMessage.defaultProps = {\r\n showCanceledSign: true\r\n};\r\n\r\nexport default JourneyCanceledMessage;\r\n","import '../Monitor.css';\r\n\r\nimport React, { Component } from 'react';\r\n\r\nimport Colors from './Colors.js';\r\nimport JourneyMessage from './JourneyMessage.jsx';\r\nimport { getFormattedNumMinutes, getFormattedTime } from './Utilities';\r\nimport JourneyCanceledMessage from './JourneyCanceledMessage.jsx';\r\n\r\nclass BusJourneyItem extends Component {\r\n renderIcon(){\r\n var color = this.getBusColor();\r\n var textColor = this.getBusTextColor();\r\n\r\n var number = this.props.journey.line;\r\n if (isNaN(number)) {\r\n number = number.match(/\\d+/g);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
{number}
\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n getBusTextColor() {\r\n return this.props.journey.type === \"Regionbuss\" || this.props.journey.type === \"SkåneExpressen\" ? Colors.Black : Colors.White;\r\n }\r\n\r\n getBusColor() {\r\n return this.props.journey.type === \"Stadsbuss\" || this.props.journey.type === \"Spårvagn\" ? Colors.LocalBus : this.props.journey.type === \"Regionbuss\" || this.props.journey.type === \"SkåneExpressen\" ? Colors.RegionBus : Colors.CommercialBus;\r\n }\r\n\r\n renderInfoMessage(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n renderCanceledMessage(){\r\n return (\r\n \r\n );\r\n }\r\n renderMessage() {\r\n if (this.props.journey.canceled) {\r\n return this.renderCanceledMessage();\r\n }\r\n else if (this.props.journey.message){\r\n return this.renderInfoMessage();\r\n }\r\n return null;\r\n }\r\n getBackgroundColor() {\r\n return this.props.index % 2 !== 0 ? Colors.White : \"#e2e5ec\";\r\n }\r\n render() {\r\n var countdownTime = getFormattedTime(this.props.journey.updatedTime || this.props.journey.time);\r\n \r\n if (!this.props.journey.canceled) {\r\n const ONE_HOUR = 60 * 60 * 1000; \r\n var plusHour = new Date();\r\n plusHour.setHours(plusHour.getHours() + 1); \r\n if (((this.props.journey.updatedTime || this.props.journey.time).getTime() - plusHour.getTime()) < ONE_HOUR) {\r\n countdownTime = getFormattedNumMinutes(new Date(), this.props.journey.updatedTime || this.props.journey.time);\r\n }\r\n }\r\n \r\n var directionMaxWidth = (this.props.width || 400) - 400;\r\n\r\n return (\r\n \r\n \r\n {this.renderIcon()}\r\n {this.props.journey.direction}\r\n {this.props.journey.platform}\r\n {this.props.journey.updatedStopPoint}\r\n {countdownTime}\r\n \r\n {this.renderMessage()}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default BusJourneyItem;\r\n","import React, { Component } from 'react';\r\nimport '../Monitor.css';\r\n\r\nclass BusTableHeader extends Component {\r\n render() {\r\n \tvar directionText = this.props.isDepartures ? \"Mot\": \"Mot\";\r\n return (\r\n \r\n\t\t Linje\r\n {directionText}\r\n Läge\r\n \r\n Om\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default BusTableHeader;\r\n","import React, { Component } from 'react';\r\n\r\nclass JourneyListFullscreenMessage extends Component {\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
{this.props.header}
\r\n\t\t\t\t\t
{this.props.body}
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default JourneyListFullscreenMessage;\r\n","import '../Monitor.css';\r\n\r\nimport React, { Component } from 'react';\r\n\r\nimport JourneyCanceledMessage from './JourneyCanceledMessage.jsx';\r\nimport JourneyMessage from './JourneyMessage.jsx';\r\nimport { getFormattedNumMinutes, getFormattedTime } from './Utilities';\r\n\r\nclass MiscTrafficJourneyItem extends Component {\r\n renderInfoMessage(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n renderCanceledMessage(){\r\n return (\r\n \r\n );\r\n }\r\n renderMessage() {\r\n if (this.props.journey.canceled) {\r\n return this.renderCanceledMessage();\r\n }\r\n else if (this.props.journey.message){\r\n return this.renderInfoMessage();\r\n }\r\n return null;\r\n }\r\n getBackgroundColor() {\r\n return this.props.index % 2 !== 0 ? \"#ffffff\" : \"#e2e5ec\";\r\n }\r\n render() {\r\n \r\n var countdownTime = \"\"\r\n if (this.props.journey.canceled) {\r\n countdownTime = getFormattedTime(this.props.journey.updatedTime || this.props.journey.time);\r\n } else {\r\n countdownTime = getFormattedNumMinutes(new Date(), this.props.journey.updatedTime || this.props.journey.time);\r\n }\r\n \r\n var directionMaxWidth = (this.props.width || 400) - 400;\r\n\r\n return (\r\n \r\n \r\n \r\n {this.props.journey.direction}\r\n {this.props.journey.platform}\r\n {this.props.journey.updatedStopPoint}\r\n {countdownTime}\r\n \r\n {this.renderMessage()}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default MiscTrafficJourneyItem;\r\n","import '../Monitor.css';\r\n\r\nimport React, { Component } from 'react';\r\n\r\nimport Colors from './Colors.js';\r\nimport JourneyCanceledMessage from './JourneyCanceledMessage.jsx';\r\nimport JourneyMessage from './JourneyMessage.jsx';\r\nimport { getFormattedTime } from './Utilities';\r\n\r\nclass SmallTrainJourneyItem extends Component {\r\n renderIcon() {\r\n var color = this.props.journey.type === \"Pågatåg\" || this.props.journey.type === \"Pågatågen\" || this.props.journey.type === \"Pågatåg Express\" ? Colors.PurpleTrain : Colors.Train;\r\n return ( \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n renderInfoMessage(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n renderCanceledMessage(){\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderMessage() {\r\n if (this.props.journey.canceled) {\r\n return this.renderCanceledMessage();\r\n }\r\n else if (this.props.journey.message){\r\n return this.renderInfoMessage();\r\n }\r\n return null;\r\n }\r\n\r\n getBackgroundColor() {\r\n return this.props.index % 2 !== 0 ? \"#ffffff\" : \"#e2e5ec\";\r\n }\r\n\r\n render() {\r\n const directionMaxDefaultWidth = 550\r\n var time = getFormattedTime(this.props.journey.time);\r\n var updatedTime = this.props.journey.updatedTime ? getFormattedTime(this.props.journey.updatedTime) : \"\";\r\n\r\n var directionMaxWidth = (this.props.width || directionMaxDefaultWidth) - directionMaxDefaultWidth;\r\n\r\n return (\r\n \r\n \r\n \t {this.renderIcon()}\r\n {this.props.journey.direction}\r\n {this.props.journey.platform}\r\n {this.props.journey.updatedStopPoint}\r\n {time}\r\n {updatedTime}\r\n \r\n {this.renderMessage()}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SmallTrainJourneyItem;\r\n","import React, { Component } from 'react';\r\nimport '../Monitor.css';\r\n\r\nclass SmallTrainTableHeader extends Component {\r\n render() {\r\n var directionText = this.props.isDepartures ? \"Mot\" : \"Mot\";\r\n var timeText = this.props.isDepartures ? \"Avgår\" : \"Ankommer\";\r\n return (\r\n \r\n\t\t Tåg\r\n {directionText}\r\n Spår\r\n \r\n {timeText}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SmallTrainTableHeader;\r\n","import '../Monitor.css';\r\n\r\nimport React, { Component } from 'react';\r\n\r\nimport { CanceledBox } from './CanceledBox';\r\nimport Colors from './Colors.js';\r\nimport JourneyCanceledMessage from './JourneyCanceledMessage.jsx';\r\nimport JourneyMessage from './JourneyMessage.jsx';\r\nimport { getFormattedNumMinutes, getFormattedTime } from './Utilities';\r\n\r\n\r\nclass TrainJourneyItem extends Component {\r\n renderIcon() {\r\n var pathOne = \"M4.8,40C2.2,40,0,37.9,0,35.2V4.8C0,2.1,2.2,0,4.8,0L20,0v40L4.8,40z\";\r\n var pathTwo = \"M20,35.3C18.6,24.5,10,0,0,0h0v40h0h15.2C17.8,40,20.3,37.9,20,35.3z\";\r\n var pathThree = \"M4.8,40C2.2,40,0,37.9,0,35.2V4.8C0,2.1,2.2,0,4.8,0L20,0v40L4.8,40z\";\r\n var pathFour = \"M20,35.3C18.6,24.5,10,0,0,0h0v40h0h15.2C17.8,40,20.3,37.9,20,35.3z\";\r\n\r\n var inlineAbsolute = {display: 'inline-block', position: 'absolute'}; \r\n var absolute = {position: 'absolute'};\r\n var lineHeight = {lineHeight: '40px'};\r\n var left = {left: '15px'};\r\n var scaling = {height: 40, transform: 'scale(0.90)', marginLeft: 6};\r\n\r\n var pagatagStyle = {...absolute, ...lineHeight, ...left, ...{fontSize: '17pt', marginLeft: '4px', backgroundColor: Colors.PurpleTrain}};\r\n\r\n var innerIconHtml;\r\n if (this.props.journey.type === \"Pågatåg\" || this.props.journey.type === \"Pågatågen\" || this.props.journey.type === \"Pågatåg Express\") {\r\n innerIconHtml = (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n } else {\r\n innerIconHtml = (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return ( \r\n
\r\n {innerIconHtml}\r\n
\r\n );\r\n }\r\n\r\n renderInfoMessage(){\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n renderCanceledMessage(){\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderMessage() {\r\n if (this.props.journey.canceled) {\r\n return this.renderCanceledMessage();\r\n }\r\n else if (this.props.journey.message){\r\n return this.renderInfoMessage();\r\n }\r\n return null;\r\n }\r\n\r\n getBackgroundColor() {\r\n return this.props.index % 2 !== 0 ? \"#ffffff\" : \"#e2e5ec\";\r\n }\r\n\r\n renderCountDownTime(journey) {\r\n if (journey.canceled) {\r\n return ();\r\n }\r\n else if (journey.awaitTime) {\r\n return '-- min';\r\n }\r\n else {\r\n var countdownTime = getFormattedNumMinutes(new Date(), this.props.journey.updatedTime || this.props.journey.time);\r\n return countdownTime;\r\n }\r\n }\r\n\r\n render() {\r\n var time = getFormattedTime(this.props.journey.time);\r\n var updatedTime = this.props.journey.updatedTime ? getFormattedTime(this.props.journey.updatedTime) : \"\";\r\n\r\n var directionMaxWidth = (this.props.width || 584) - 584;\r\n\r\n return (\r\n \r\n \r\n \t {this.renderIcon()}\r\n {this.props.journey.direction}\r\n {this.props.journey.platform}\r\n {this.props.journey.updatedStopPoint}\r\n {time}\r\n {updatedTime}\r\n { this.renderCountDownTime(this.props.journey) }\r\n \r\n {this.renderMessage()}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TrainJourneyItem;\r\n","import React, { Component } from 'react';\r\nimport '../Monitor.css';\r\n\r\nclass TrainTableHeader extends Component {\r\n render() {\r\n \tvar directionText = this.props.isDepartures ? \"Mot\" : \"Mot\";\r\n var timeText = this.props.isDepartures ? \"Avgår\" : \"Ankommer\";\r\n return (\r\n \r\n\t\t Tåg\r\n {directionText}\r\n Spår\r\n \r\n {timeText}\r\n \r\n Om\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TrainTableHeader;\r\n","import '../Monitor.css';\r\n\r\nimport PropTypes from 'prop-types';\r\nimport React, { Component } from 'react';\r\n\r\nimport BusJourneyItem from './BusJourneyItem.jsx';\r\nimport BusTableHeader from './BusTableHeader.jsx';\r\nimport JourneyListFullscreenMessage from './JourneyListFullscreenMessage.jsx';\r\nimport MiscTrafficJourneyItem from './MiscTrafficJourneyItem.jsx';\r\nimport SmallTrainJourneyItem from './SmallTrainJourneyItem.jsx';\r\nimport SmallTrainTableHeader from './SmallTrainTableHeader.jsx';\r\nimport TrainJourneyItem from './TrainJourneyItem.jsx';\r\nimport TrainTableHeader from './TrainTableHeader.jsx';\r\n\r\nconst smallTrainWidth = 850;\r\n\r\nclass JourneyList extends Component {\r\n \r\n renderJourneyItems() {\r\n\r\n const maxHeight = 146;\r\n const noInfoHeight = 92;\r\n\r\n const listPaddingHeight = 20;\r\n const tableHeaderHeight = 27;\r\n\r\n var remainingHeight = this.props.height - listPaddingHeight - tableHeaderHeight;\r\n var count = 0;\r\n\r\n\r\n var journeys = this.props.journeys || []\r\n if (this.props.type !== 'train'){\r\n journeys.sort((a,b)=>{return (a.updatedTime || a.time) - (b.updatedTime || b.time)}); \r\n }\r\n \r\n var journeyItems = journeys.map((journey, index)=>{\r\n const height = (journey.canceled || journey.message)? maxHeight : noInfoHeight;\r\n if (remainingHeight >= height) {\r\n remainingHeight = remainingHeight - height;\r\n count = index + 1;\r\n } else {\r\n remainingHeight = 0;\r\n }\r\n\r\n if (this.props.type === \"train\"){\r\n return this.props.width < smallTrainWidth ? () : (); \r\n } else if (this.typeIsBus(this.props.type) || this.props.type === \"tram\"){\r\n return (); \r\n }\r\n else {\r\n return ();\r\n }\r\n });\r\n\r\n return journeyItems.slice(0, count);\r\n }\r\n\r\n typeIsBus(type) {\r\n return type === \"localBus\" || type === \"regionBus\" || type === \"mixedBus\" || type === \"commercial\"\r\n }\r\n\r\n renderTableHeader() {\r\n if (this.props.type !== \"train\"){\r\n return ();\r\n } else {\r\n return this.props.width < smallTrainWidth ? () : ();\r\n }\r\n }\r\n\r\n renderMessage(){\r\n return (\r\n \r\n ); \r\n }\r\n\r\n renderJourneyTable(){\r\n return (\r\n \r\n \r\n {this.renderTableHeader()}\r\n \r\n {this.renderJourneyItems()}\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {(this.props.journeys || []).length > 0 ? this.renderJourneyTable() : this.renderMessage()}\r\n
\r\n );\r\n }\r\n}\r\n\r\nJourneyList.propTypes = {\r\n height: PropTypes.number,\r\n journeys: PropTypes.arrayOf(PropTypes.object) \r\n};\r\n\r\nexport default JourneyList;\r\n","import React, { Component } from 'react';\r\nimport '../Monitor.css';\r\nimport Header from './Header.jsx'\r\nimport JourneyList from './JourneyList.jsx'\r\n\r\nclass TrafficBox extends Component {\r\n render() {\r\n\tconst headerHeight = 90;\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default TrafficBox;\r\n","import '../Monitor.css';\r\nimport 'url-search-params-polyfill';\r\n\r\nimport React, { Component } from 'react';\r\n\r\nimport Footer from './Footer.jsx';\r\nimport TrafficBox from './TrafficBox.jsx';\r\n\r\nimport { logo } from '../Images.js';\r\n\r\nclass App extends Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.state = { width: 0, height: 0, traffic: [] };\r\n this.updateWindowDimensions = this.updateWindowDimensions.bind(this);\r\n\r\n this.fetchData();\r\n setTimeout(function () {\r\n window.location.reload(1);\r\n }, 1000 * 60 * 60 * 24);\r\n }\r\n\r\n fetchData() {\r\n var refetchData;\r\n fetch('api/Journey/searchjourneys', {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'x-api-key': this.props.apiKey\r\n },\r\n body: JSON.stringify({\r\n stationKey: this.props.stationId,\r\n stationName: this.props.stationName,\r\n trafficTypes: JSON.parse(this.props.trafficTypes),\r\n arriving: this.props.departure === \"1\",\r\n stopPoint: this.props.stopPoint,\r\n currentTime: this.props.currentTime ? new Date(this.props.currentTime + \"+0000\"): null\r\n })\r\n })\r\n .then(response => {\r\n if( response.status === 401 ) {\r\n this.setState({ traffic: [], error: 'Unauthorized' })\r\n clearTimeout(refetchData);\r\n return response.json();\r\n } \r\n this.setState({ traffic: [], error: undefined })\r\n return response.json()\r\n })\r\n .catch(error => this.setState({ error: error }))\r\n .then(data => {\r\n if (data && data.traffic) {\r\n (data.traffic || []).forEach((traffic) => {\r\n traffic.journeys.forEach((journey) => {\r\n journey.time = new Date(journey.time);\r\n if (journey.updatedTime) {\r\n journey.updatedTime = new Date(journey.updatedTime);\r\n }\r\n })\r\n });\r\n this.setState({ traffic: data.traffic });\r\n }\r\n });\r\n\r\n refetchData = setTimeout(() => {\r\n this.fetchData();\r\n }, 1000 * 60);\r\n }\r\n\r\n render() {\r\n var displayClass = (this.state.traffic.length > 1 && this.state.horizontal) ? \"InlineBlock\" : \"\"; \r\n var trafficBoxWidth = 0;\r\n if (this.state.traffic.length <= 1 || !this.state.horizontal){\r\n trafficBoxWidth = this.state.width;\r\n } else {\r\n trafficBoxWidth = (this.state.width / 2) - 10;\r\n }\r\n\r\n var trafficBoxHeight = 0;\r\n const footerHeight = 55;\r\n if (this.state.traffic.length <= 1 || this.state.horizontal){\r\n trafficBoxHeight = this.state.height - footerHeight;\r\n } else {\r\n trafficBoxHeight = this.state.height / 2 - footerHeight;\r\n }\r\n\r\n var trafficBoxes = this.state.traffic.map((box, index) => {\r\n return ();\r\n });\r\n\r\n if( this.state.error && this.state.error === 'Unauthorized' ) {\r\n document.body.style = 'background: #f2efe9;';\r\n }\r\n\r\n return (\r\n <>\r\n {this.state.error === 'Unauthorized' && (\r\n
\r\n

Ogiltig säkerhetsnyckel

\r\n

Vänligen kontakta Skånetrafikens företagsservice på 0771-77 75 75 för mer information

\r\n\r\n
\r\n \"skånetrafiken\"/\r\n
\r\n
\r\n )}\r\n \r\n {!this.state.error && (\r\n
\r\n {trafficBoxes}\r\n
\r\n {this.state.error && this.state.error !== 'Unauthorized' && (
\r\n
\r\n Fel uppstod vid vid uppdatering.\r\n
\r\n
)}\r\n
\r\n )}\r\n \r\n );\r\n }\r\n\r\n componentDidMount() {\r\n this.updateWindowDimensions();\r\n window.addEventListener('resize', this.updateWindowDimensions);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateWindowDimensions);\r\n }\r\n\r\n updateWindowDimensions() {\r\n this.setState({ width: window.innerWidth, height: window.innerHeight, horizontal: window.innerWidth > window.innerHeight && window.innerWidth > 1280});\r\n }\r\n}\r\n\r\nexport default App;\r\n\r\n","import React, {Component} from 'react'\r\n\r\nclass DownloadBatPage extends Component{\r\n render() {\r\n // Create Download Url\r\n const protocol = window.location.protocol;\r\n const hostname = window.location.hostname;\r\n let port = '';\r\n if( window.location.port !== '80' && window.location.port !== '443' ) {\r\n port = ':' + window.location.port;\r\n }\r\n const queryParams = this.props.query;\r\n const downloadLink = protocol + '//' + hostname + port + '/api/Config/downloadmonitor' + queryParams;\r\n const molnskyltUrl = protocol + '//' + hostname + port + queryParams;\r\n\r\n function copyToClipboard() {\r\n const urlValue = document.getElementById('copyUrl').value;\r\n navigator.clipboard.writeText(urlValue);\r\n document.getElementById('copiedIndicator').style.display = 'block';\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
Konfigurera skylt
\r\n
\r\n
\r\n
Skylt skapad. Du är snart klar...
\r\n

Du har nu två alternativ. Alternativ 1 rekommenderas om du använder en modern webbläsare (ex. Chrome) eller om du har behov av att klistra in webbadressen i en separat applikation. Alternativ 2 är till för dig som använder dig av Windows och vill använda tjänsten på samma sätt som tidigare genom att vi skapar upp en fil som automatiskt öppnar upp en Molnskylt på din Windowsdator.

\r\n
\r\n
Alternativ 1: Använd befintlig webbläsare
\r\n
    \r\n
  1. \r\n

    1. Kopiera länken:

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

    Kopierad!

    \r\n
  2. \r\n
  3. \r\n

    2. Klista in länken i din applikation eller webbläsare:

    \r\n

    Observera att du manuellt behöver dölja adressfältet i din webbläsare. Detta gör du genom att trycka F11 i Windows och Linux.

    \r\n

    Klart!

    \r\n
  4. \r\n
\r\n
\r\n
Alternativ 2: Ladda ned BAT-fil
\r\n
    \r\n
  1. \r\n

    1. Ladda ner följande fil:

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

    Filen innehåller länk till molnskylt för den valda hållplatsen. Klicka på länken ovan och välj \"Spara\" för att ladda hem filen. Du kan också testa molnskylten genom att klicka på länken och välja \"kör\".

    \r\n
  2. \r\n
  3. \r\n

    2. Lägg till filen i Autostart:

    \r\n\r\n

    Högerklicka på \"Autostart\" (under Start/Program) och välj öppna. Lägg filen i Autostartmappen.

    \r\n\r\n

    Klart!

    \r\n\r\n

    Starta om Windows för att testa din konfiguration. Se över inställningar för autologon (automatisk nätverksinloggning)

    \r\n
  4. \r\n
    \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default DownloadBatPage;\r\n","import React, { Component } from 'react';\r\nimport pt from 'prop-types';\r\nimport './SearchBox.css';\r\n\r\nclass SearchBox extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { value: '', items: [] };\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n this.handleChange(event)} />\r\n {this.renderItems()}\r\n
\r\n );\r\n }\r\n\r\n renderItems() {\r\n if (this.state.items.length === 0) {\r\n return null;\r\n }\r\n\r\n var items = this.state.items;\r\n if (items && this.props.resultsLimit > 0){\r\n items = items.slice(0, Math.min(this.props.resultsLimit, items.length));\r\n }\r\n\r\n return (\r\n
    \r\n {items.map ? items.map((item, i) => {\r\n return (\r\n
  • { this.handleSelection(e, item) }}>{item.name || item}
  • \r\n );\r\n }) : null}\r\n
\r\n );\r\n }\r\n\r\n handleSelection(e, item) {\r\n this.setState({ selectedItem: item, value: item.name || item, items: [] });\r\n this.props.onSelected(item);\r\n }\r\n\r\n handleChange(e) {\r\n this.setState({ value: e.target.value, loading: true });\r\n if (this.props.onTextChanged) {\r\n this.props.onTextChanged(e.target.value);\r\n }\r\n this.props.onSearch(e.target.value, (items) => { this.handleSearchResults(items) });\r\n }\r\n\r\n handleSearchResults(items) {\r\n this.setState({ items: items || [], loading: false });\r\n }\r\n}\r\n\r\nSearchBox.defaultProps = {\r\n placeholder: '',\r\n resultsLimit: 0\r\n};\r\n\r\nSearchBox.propTypes = {\r\n onSelect: pt.func,\r\n onTextChanged: pt.func,\r\n onSearch: pt.func,\r\n resultsLimit: pt.number,\r\n};\r\n\r\nexport default SearchBox\r\n","import './ConfigApp.css';\r\nimport './ContentSizing.css';\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\n\r\nimport React, { Component } from 'react';\r\n\r\nimport { background, logo, regionSkaneLogo } from '../Images.js';\r\nimport DownloadBatPage from './DownloadBatPage';\r\nimport SearchBox from './SearchBox.jsx';\r\nimport { Red } from '../App/Colors';\r\n\r\n\r\nclass ConfigApp extends Component {\r\n\r\n constructor(props) {\r\n super(props); \r\n this.state = { fromPoint: undefined, from: '', points: {}, departure: 0, trafficTypes: [], stopPoint: '', width: this.getWidth(), apiKey: '', invalidApiKey: false, createBtnText: 'Skapa', createBtnLoading: false }\r\n window.onresize = () => {\r\n this.setState({ width: this.getWidth()});\r\n };\r\n }\r\n\r\n fromChanged(item) {\r\n this.setState({ fromPoint: item });\r\n }\r\n\r\n getMatchingPoints(text, callback) {\r\n if (text.length < 3) {\r\n callback([]);\r\n return;\r\n }\r\n\r\n if (this.state.points[text] != null && this.state.points[text].length > 0) {\r\n callback(this.state.points[text]);\r\n return;\r\n }\r\n \r\n var xhr = new XMLHttpRequest();\r\n xhr.withCredentials = true;\r\n xhr.open('get', \"api/Config/searchstoppoints?text=\" + encodeURIComponent(text) , true);\r\n xhr.onload = function () {\r\n if (xhr.status !== 200) {\r\n this.setState({ error: xhr.status === 401 ? 'Unauthorized use of page' : 'Unknown error', loading: false });\r\n return;\r\n }\r\n var resultObject = JSON.parse(xhr.response);\r\n var pointsDictionary = this.state.points;\r\n pointsDictionary[text] = resultObject.startPoints;\r\n this.setState({ points: pointsDictionary });\r\n callback(pointsDictionary[text]);\r\n }.bind(this);\r\n xhr.send();\r\n }\r\n\r\n onTrafficTypeChanged(value, event) {\r\n var trafficTypes = this.state.trafficTypes;\r\n if (event.target.checked) {\r\n trafficTypes.push(value);\r\n } else {\r\n var index = trafficTypes.indexOf(value);\r\n if (index > -1) {\r\n trafficTypes.splice(index, 1);\r\n }\r\n }\r\n this.setState({trafficTypes: trafficTypes})\r\n }\r\n\r\n validateApiKey(apiKey) {\r\n this.setState({createBtnText: \"Skapar...\", createBtnLoading: true});\r\n var xhr = new XMLHttpRequest();\r\n xhr.withCredentials = true;\r\n xhr.open('get', \"api/Config/validate-api-key\", true);\r\n xhr.setRequestHeader('x-api-key', this.state.apiKey);\r\n xhr.onload = function () {\r\n if (xhr.status === 401) {\r\n this.setState({createBtnText: \"Skapa\", createBtnLoading: false, invalidApiKey: true});\r\n return;\r\n }\r\n this.setState({ showDownload: true });\r\n }.bind(this);\r\n xhr.send();\r\n }\r\n\r\n renderConfigurationForm(){\r\n \r\n return (\r\n
\r\n
\r\n
Skapa avgångstavla
\r\n
\r\n
\r\n
\r\n
\r\n
{this.state.departure ? 'Till' : 'Från' }
\r\n
\r\n {\r\n this.setState({ fromPoint: undefined });\r\n this.getMatchingPoints(text, callback);\r\n }}\r\n onSelected={(item) => {\r\n this.fromChanged(item);\r\n }}\r\n resultsLimit={7} />\r\n
\r\n
\r\n
\r\n
\r\n
Läge
\r\n
\r\n this.setState({ stopPoint: event.target.value })} />\r\n
\r\n \r\n
\r\n {/* Arrivals is not currently supported \r\n \r\n
*/}\r\n \r\n \r\n
\r\n -1} onChange={(event) => { this.onTrafficTypeChanged(1, event)}}/>\r\n \r\n
\r\n
\r\n -1} onChange={(event) => { this.onTrafficTypeChanged(2, event) }}/>\r\n \r\n
\r\n
\r\n -1} onChange={(event) => { this.onTrafficTypeChanged(8, event) }} />\r\n \r\n
\r\n
\r\n -1} onChange={(event) => { this.onTrafficTypeChanged(4, event) }}/>\r\n \r\n
\r\n {/* Commercial bus is currently not supported\r\n
\r\n -1} onChange={(event) => { this.onTrafficTypeChanged(16, event) }}/>\r\n \r\n
*/}\r\n \r\n
\r\n \r\n
\r\n this.setState({ apiKey: event.target.value })} />\r\n
\r\n
\r\n Ogiltig säkerhetsnyckel. Vänligen kontakta Skånetrafikens företagsservice på 0771-77 75 75\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 getQuery(){\r\n return \"?stationId=\" + this.state.fromPoint.id + \"&stationName=\" +encodeURIComponent(this.state.fromPoint.name)+ \"&trafficTypes=[\"+this.state.trafficTypes.toString() + \"]&departure=\" + this.state.departure + \"&stopPoint=\" +this.state.stopPoint + \"&apiKey=\" + this.state.apiKey;\r\n }\r\n\r\n renderDownloadPage(){\r\n var query = this.getQuery();\r\n return (\r\n \r\n );\r\n }\r\n\r\n getWidth() {\r\n return Math.max(\r\n document.body.scrollWidth,\r\n document.documentElement.scrollWidth,\r\n document.body.offsetWidth,\r\n document.documentElement.offsetWidth,\r\n document.documentElement.clientWidth\r\n );\r\n }\r\n \r\n render() {\r\n var configHeader = \"'Bitter', serif\"\r\n return (\r\n
\r\n {this.state.width > 450 &&
\"\"/
}\r\n
\r\n \"skånetrafiken\"/\r\n Molnskylt\r\n
\r\n
\"\"/
\r\n
\r\n {!this.state.showDownload? this.renderConfigurationForm() : this.renderDownloadPage()}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ConfigApp;\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABFCAYAAAACRBuaAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF62lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOS0wMS0xMlQyMjo0MTowNCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0xMlQyMjo0MTowNCswMTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTktMDEtMTJUMjI6NDE6MDQrMDE6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M2U0MzhmMDQtOTViNC05YTRlLTkwOGMtZTk2ZTU5ZTk5Nzc0IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6NjhmYTU1YTgtZmJkZi00NjRhLThiMmMtNzhiMjcwYjBiNzMzIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OWZhMWIwMDktMDc5Ni0yODQxLThiNzEtYzViYmVjYjEzYWFhIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ZmExYjAwOS0wNzk2LTI4NDEtOGI3MS1jNWJiZWNiMTNhYWEiIHN0RXZ0OndoZW49IjIwMTktMDEtMTJUMjI6NDE6MDQrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjNlNDM4ZjA0LTk1YjQtOWE0ZS05MDhjLWU5NmU1OWU5OTc3NCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0xMlQyMjo0MTowNCswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz694eI/AAAUVElEQVR4nM2ceZxcVZXHv79X1VvoLJCFNMTsQUhQNgng4ATBBMywCSgQVmUVccOPqIzKoiwqI8KgIosgA/pRUBAHxwUXNpEtIBpIgJCQjaxAOiHpdLrrzB/33fvue1VJqjrBmfP5dKree3c553fPds99Fdki/q9oJ+AgYF9gN2AEsCuwCNgdWFtov1fa7l5gXdVoBujtYtVR+e0dvoq2B04HTgL22USbAUBS4/7xwBeALuA3wA+BX4WnbzNQbIKpt4N2Am4BXge+zaaBAqcjVuP+3ulnK3A0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\"","// This optional code is used to register a service worker.\r\n// register() is not called by default.\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 subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://cra.link/PWA\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.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n);\r\n\r\nexport function register(config) {\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.href);\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/facebook/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. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://cra.link/PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://cra.link/PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\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 // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\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, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.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, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\n\r\nimport './index.css';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './components/App/App';\r\nimport ConfigApp from './components/Config/ConfigApp';\r\nimport { register as registerServiceWorker } from './registerServiceWorker';\r\n\r\nvar cleanUri = function(uri) {\r\n return uri\r\n .replace(/%C5/ig, \"%C3%85\")\r\n .replace(/%C4/ig, \"%C3%84\")\r\n .replace(/%D6/ig, \"%C3%96\")\r\n .replace(/%E5/ig, \"%C3%A5\")\r\n .replace(/%E4/ig, \"%C3%A4\")\r\n .replace(/%F6/ig, \"%C3%B6\");\r\n}\r\n\r\nif (window.location.href.indexOf('selSingleStationKey') >= 0 || window.location.href.indexOf('cmdAction') >= 0) {\r\n var createNewQuery = function(urlParams) {\r\n const stationId = urlParams.get('selSingleStationKey');\r\n const stationName = urlParams.get('selSingleStation');\r\n const trafficTypes = urlParams.get('TrafficMask');\r\n const departure = urlParams.get('selDirection');\r\n const stopPoint = urlParams.get('inpStop');\r\n\r\n return \"?stationId=\" + stationId + \"&stationName=\" + stationName + \"&trafficTypes=[\" + trafficTypes.replace(/%%2c/g, ',').replace(/%%,/g, ',').replace(/%,/g, ',') + \"]&departure=\" + departure + \"&stopPoint=\" + stopPoint;\r\n }\r\n var url = cleanUri(window.location.search);\r\n\r\n var newQuery = createNewQuery(new URLSearchParams(url));\r\n window.location.replace(encodeURI(window.location.origin + newQuery));\r\n} else {\r\n const rootElement = document.getElementById('root');\r\n const urlParams = new URLSearchParams(cleanUri(window.location.search));\r\n const stationId = urlParams.get('stationId');\r\n const stationName = urlParams.get('stationName');\r\n const trafficTypes = urlParams.get('trafficTypes');\r\n const departure = urlParams.get('departure');\r\n const stopPoint = urlParams.get('stopPoint');\r\n const currentTime = urlParams.get('currentTime');\r\n const apiKey = urlParams.get('apiKey')\r\n\r\n // remove api from browser address field\r\n //urlParams.delete('apiKey');\r\n //window.history.replaceState(null, null, window.location.pathname + \"?\" + urlParams.toString());\r\n\r\n if (stationId && window.location.href.indexOf('downloadmonitor') < 0) {\r\n ReactDOM.render( <\r\n App stationId = {\r\n stationId\r\n }\r\n stationName = {\r\n stationName\r\n }\r\n trafficTypes = {\r\n trafficTypes\r\n }\r\n departure = {\r\n departure\r\n }\r\n stopPoint = {\r\n stopPoint\r\n }\r\n currentTime = {\r\n currentTime\r\n }\r\n apiKey = {\r\n apiKey\r\n }\r\n />,\r\n rootElement);\r\n } else {\r\n ReactDOM.render( <\r\n ConfigApp / > ,\r\n rootElement);\r\n }\r\n}\r\n\r\nregisterServiceWorker();\r\n"],"sourceRoot":""}