{"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","molnskyltUrl","query","marginBottom","listStyleType","padding","marginTop","verticalAlign","href","target","rel","onClick","urlValue","navigator","clipboard","writeText","getElementById","boxSizing","borderRadius","id","border","fontWeight","SearchBox","value","items","inputStyle","placeholder","onChange","event","handleChange","renderItems","resultsLimit","min","item","i","e","handleSelection","name","selectedItem","onSelected","loading","onTextChanged","onSearch","handleSearchResults","ConfigApp","handleScreenRotationChange","layout","tableRows","getLayoutDefaultTableRows","stopsNr","screenRotation","rotation","handleDropdownChange","handleTableRowsChange","Number","parseInt","fromPointData","fromPoint","selectedStopPoints","stopLimitHit","points","getWidth","invalidApiKey","createBtnText","createBtnLoading","iterations","onresize","getAreas","maxStops","xhr","XMLHttpRequest","withCredentials","open","onload","resultObject","areas","send","callback","searchResults","filter","area","normalizeText","includes","toLowerCase","startsWithA","startsWith","startsWithB","replace","checked","stop","push","typeIndex","indexOf","splice","hasMixedSelection","isTrainSelected","some","trafficType","isOtherSelected","fromPointisMixed","setRequestHeader","createConfiguration","DataSubscription","o","typeFilters","transportType","categoryType","console","warn","transportTypeFilter","categoryTypeFilter","point","StopPointId","LayoutName","getLayoutId","showDownload","paddingLeft","flex","getMatchingPoints","fromChanged","updatedFromPointData","blur","stopPoints","onSelectedStopPointsChanged","htmlFor","designation","disabled","onTrafficTypeChanged","pop","Array","keys","renderStopPointConfig","defaultChecked","fromPointIsMixed","alignItems","dataIsInputted","validateApiKey","isAllDataInputted","p","max","scrollWidth","documentElement","offsetWidth","clientWidth","paddingRight","fontFamily","renderDownloadPage","renderConfigurationForm","isLocalhost","Boolean","hostname","registerValidSW","swUrl","config","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","log","onUpdate","onSuccess","cleanUri","uri","url","search","newQuery","urlParams","get","createNewQuery","URLSearchParams","encodeURI","origin","rootElement","ReactDOM","render","URL","process","contentType","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.f20f8ab3.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 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 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\" ? 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)){\r\n return (); \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\r\n const molnskyltUrl = this.props.query;\r\n\r\n function copyToClipboard() {\r\n const urlValue = molnskyltUrl;\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\r\n
    \r\n
  1. \r\n

    1. Kopiera länken:

    \r\n
    \r\n {molnskyltUrl}\r\n
    \r\n
    \r\n \r\n

    Kopierad!

    \r\n
    \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\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\n\r\nclass ConfigApp extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n fromPointData: [{\r\n fromPoint: null, selectedStopPoints: [], trafficTypes: []\r\n }],\r\n stopLimitHit: false,\r\n points: {},\r\n departure: 0,\r\n width: this.getWidth(),\r\n apiKey: '',\r\n invalidApiKey: false,\r\n createBtnText: 'Skapa',\r\n createBtnLoading: false,\r\n query: '',\r\n screenRotation: 'Landscape',\r\n layout: 'departureBoard',\r\n tableRows: 6,\r\n stopsNr: 1,\r\n iterations: [0]\r\n }\r\n window.onresize = () => {\r\n this.setState({ width: this.getWidth() });\r\n };\r\n this.getAreas();\r\n this.maxStops = 4;\r\n }\r\n\r\n getAreas() {\r\n var xhr = new XMLHttpRequest();\r\n xhr.withCredentials = true;\r\n xhr.open('get', \"api/Config/GetAreas\", 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 this.setState({ areas: resultObject.areas });\r\n }.bind(this);\r\n xhr.send();\r\n }\r\n\r\n fromChanged(item, index) {\r\n var fromPointData = this.state.fromPointData;\r\n fromPointData[index].fromPoint = item;\r\n this.setState({ fromPointData: fromPointData });\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] && this.state.points[text].length > 0) {\r\n callback(this.state.points[text]);\r\n return;\r\n }\r\n\r\n var searchResults = this.state.areas.filter(area => this.normalizeText(area.name).includes(this.normalizeText(text)));\r\n\r\n searchResults = searchResults\r\n .sort((a, b) => {\r\n return a.name.toLowerCase() > b.name.toLowerCase() ? -1 : (a.name.toLowerCase() < b.name.toLowerCase() ? 1 : 0);\r\n })\r\n .sort((a, b) => {\r\n const startsWithA = a.name.toLowerCase().startsWith(text.toLowerCase());\r\n const startsWithB = b.name.toLowerCase().startsWith(text.toLowerCase());\r\n if (startsWithA)\r\n return -1;\r\n else if (startsWithB)\r\n return 1;\r\n else\r\n return 0;\r\n });\r\n\r\n this.setState({ points: searchResults });\r\n callback(searchResults);\r\n }\r\n\r\n normalizeText(text) {\r\n return text.toLowerCase().replace(/\\s/g, '')\r\n }\r\n\r\n onSelectedStopPointsChanged(value, index, event) {\r\n var fromPointData = this.state.fromPointData;\r\n var selectedStopPoints = this.state.fromPointData[index].selectedStopPoints;\r\n if (event.target.checked) {\r\n fromPointData[index].selectedStopPoints = [...selectedStopPoints, value];\r\n this.setState({ fromPointData: fromPointData });\r\n }\r\n else {\r\n fromPointData[index].selectedStopPoints = selectedStopPoints.filter(stop => stop !== value);\r\n this.setState({ fromPointData: fromPointData });\r\n }\r\n }\r\n\r\n onTrafficTypeChanged(value, index, event) {\r\n var fromPointData = this.state.fromPointData;\r\n var trafficTypes = fromPointData[index].trafficTypes;\r\n if (event.target.checked) {\r\n trafficTypes.push(value);\r\n } else {\r\n var typeIndex = trafficTypes.indexOf(value);\r\n if (typeIndex > -1) {\r\n trafficTypes.splice(typeIndex, 1);\r\n }\r\n }\r\n\r\n var layout = this.state.layout;\r\n // Do not allow trains mixed with other trafficTypes for multistops\r\n if (this.state.stopsNr > 1) {\r\n if (value === 4)\r\n trafficTypes = trafficTypes.filter(type => type === value);\r\n else\r\n trafficTypes = trafficTypes.filter(type => type !== 4);\r\n }\r\n // Fallback to mixed traffic compatible layout if mixed traffic is selected\r\n else {\r\n const hasMixedSelection = this.state.fromPointData.map(fromPoint => {\r\n const isTrainSelected = fromPoint.trafficTypes.some(trafficType => trafficType === 4);\r\n const isOtherSelected = fromPoint.trafficTypes.some(trafficType => trafficType !== 4);\r\n return isTrainSelected && isOtherSelected;\r\n });\r\n if(this.state.layout !== 'departureBoard' && hasMixedSelection.some(fromPointisMixed => fromPointisMixed))\r\n layout = 'departureBoard';\r\n }\r\n\r\n fromPointData[index].trafficTypes = trafficTypes;\r\n this.setState({ fromPointData: fromPointData, layout: layout });\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.createConfiguration();\r\n }.bind(this);\r\n xhr.send();\r\n }\r\n\r\n createConfiguration() {\r\n var DataSubscription = []\r\n this.state.fromPointData.forEach((o => {\r\n\r\n var typeFilters = o.trafficTypes.map((type) => {\r\n var transportType;\r\n var categoryType = null;\r\n\r\n switch (type) {\r\n case 1: //city bus\r\n transportType = 1;\r\n categoryType = 0;\r\n break;\r\n case 2: //regional bus\r\n transportType = 1;\r\n categoryType = 1;\r\n break;\r\n case 3: //tram\r\n transportType = 2;\r\n break;\r\n case 4: //train\r\n transportType = 3;\r\n break;\r\n default: //unknown\r\n console.warn(`WARNING: Unknown traffic type '${type}'`);\r\n }\r\n if (categoryType === null) {\r\n return { transportTypeFilter: transportType};\r\n }\r\n else {\r\n return { transportTypeFilter: transportType, categoryTypeFilter: categoryType };\r\n }\r\n \r\n \r\n })\r\n\r\n o.selectedStopPoints.forEach(point => {\r\n typeFilters.forEach(type => {\r\n DataSubscription.push({ StopPointId: point.id, ...type });\r\n });\r\n });\r\n }))\r\n\r\n var body = {\r\n LayoutName: this.getLayoutId(this.state.layout),\r\n DataSubscription\r\n }\r\n\r\n var xhr = new XMLHttpRequest();\r\n xhr.withCredentials = true;\r\n xhr.open('POST', \"api/Config/CreateWeblayoutConfig\", true);\r\n xhr.setRequestHeader('x-api-key', this.state.apiKey);\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, createBtnText: \"Skapa\", createBtnLoading: false });\r\n return;\r\n }\r\n this.setState({ query: xhr.response });\r\n this.setState({ showDownload: true });\r\n }.bind(this);\r\n xhr.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\r\n xhr.send(JSON.stringify(body));\r\n }\r\n\r\n renderStopPointConfig(index) {\r\n const isTrainSelected = this.state.fromPointData[index].trafficTypes.some(trafficType => trafficType === 4);\r\n \r\n return (\r\n
\r\n \r\n
\r\n
\r\n
{this.state.departure ? 'Till' : 'Från'}
\r\n
\r\n {\r\n var fromPointData = this.state.fromPointData;\r\n fromPointData[index].fromPoint = undefined;\r\n this.setState({ fromPointData: fromPointData });\r\n this.getMatchingPoints(text, callback);\r\n }}\r\n onSelected={(item) => {\r\n this.fromChanged(item, index);\r\n }}\r\n resultsLimit={7} />\r\n
\r\n
\r\n {\r\n this.state.fromPointData[index].fromPoint && (\r\n
\r\n \r\n
\r\n {\r\n this.state.fromPointData[index].selectedStopPoints.length !== 0 ?\r\n :\r\n \r\n }\r\n\r\n\r\n {this.state.fromPointData[index].fromPoint.stopPoints.map(stop => (\r\n
\r\n { this.onSelectedStopPointsChanged(stop, index, event) }} />\r\n \r\n
\r\n ))}\r\n
\r\n )\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 && (!isTrainSelected || this.state.stopsNr === 1)}\r\n disabled={this.state.stopsNr > 1 && isTrainSelected}\r\n onChange={(event) => { this.onTrafficTypeChanged(1, index, event) }}\r\n />\r\n \r\n
\r\n
\r\n -1 && (!isTrainSelected || this.state.stopsNr === 1)}\r\n disabled={this.state.stopsNr > 1 && isTrainSelected}\r\n onChange={(event) => { this.onTrafficTypeChanged(2, index, event) }}\r\n />\r\n \r\n
\r\n
\r\n -1 && (!isTrainSelected || this.state.stopsNr === 1)}\r\n disabled={this.state.stopsNr > 1 && isTrainSelected}\r\n onChange={(event) => { this.onTrafficTypeChanged(3, index, event) }}\r\n />\r\n \r\n
\r\n
\r\n -1 && (!this.state.fromPointData[index].trafficTypes.some(trafficType => trafficType !== 4) || this.state.stopsNr === 1)}\r\n disabled={this.state.stopsNr > 1 && this.state.fromPointData[index].trafficTypes.some(trafficType => trafficType !== 4)}\r\n onChange={(event) => { this.onTrafficTypeChanged(4, index, event) }}\r\n />\r\n \r\n
\r\n
\r\n\r\n
);\r\n }\r\n\r\n renderConfigurationForm() {\r\n const hasMixedSelection = this.state.fromPointData.map(fromPoint => {\r\n const isTrainSelected = fromPoint.trafficTypes.some(trafficType => trafficType === 4);\r\n const isOtherSelected = fromPoint.trafficTypes.some(trafficType => trafficType !== 4);\r\n return isTrainSelected && isOtherSelected;\r\n });\r\n\r\n return (\r\n
\r\n
\r\n
Skapa avgångstavla
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n

Max 4 hållplatser kan visas samtidigt.

\r\n
\r\n\r\n
\r\n \r\n {this.state.iterations.map(\r\n index => {\r\n return this.renderStopPointConfig(index);\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 {hasMixedSelection.some(fromPointIsMixed => fromPointIsMixed) &&
Vissa layouter är inte valbara pga att de inte stödjer tågtrafik kombinerat med andra trafikslag.
}\r\n
\r\n \r\n
\r\n \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 handleScreenRotationChange = (event) => {\r\n // One_Table in portrait is same as departureBoard\r\n var layout = this.state.layout;\r\n if (event.target.value === 'Portrait' && this.state.layout === 'departureBoard_OneTable')\r\n layout = 'departureBoard';\r\n var tableRows = this.getLayoutDefaultTableRows(layout, event.target.value, this.state.stopsNr);\r\n\r\n this.setState({ screenRotation: event.target.value, layout: layout, tableRows: tableRows });\r\n };\r\n\r\n getLayoutId(layout) {\r\n return `${layout}_${this.state.screenRotation}_${this.state.tableRows}`;\r\n };\r\n\r\n dataIsInputted() {\r\n var isAllDataInputted = true;\r\n this.state.fromPointData.forEach((p) => {\r\n if (!(p.fromPoint && p.selectedStopPoints.length !== 0 && p.trafficTypes.length !== 0)) {\r\n isAllDataInputted = false;\r\n }\r\n })\r\n return isAllDataInputted;\r\n }\r\n \r\n getLayoutDefaultTableRows = (layout, rotation, stopsNr) => {\r\n if (layout === 'departureBoard' && rotation === 'Landscape')\r\n return 6;\r\n else if (layout === 'departureBoard_OneTable')\r\n return 4;\r\n else if (layout === 'departureBoard' && rotation === 'Portrait')\r\n return 4;\r\n else if (layout === 'countdown' && rotation === 'Landscape')\r\n return 1;\r\n else if (layout === 'countdown' && rotation === 'Portrait')\r\n return 2;\r\n else if (layout === 'mixed_CountdownAndDepartureBoard' && rotation === 'Landscape')\r\n return 6;\r\n else if (layout === 'mixed_CountdownAndDepartureBoard' && rotation === 'Portrait')\r\n return 6;\r\n else if (layout === `departureBoard_Multistop_2x` && rotation === 'Landscape')\r\n return 6;\r\n else if (layout === `departureBoard_Multistop_2x` && rotation === 'Portrait')\r\n return 4;\r\n else if (layout === `departureBoard_Multistop_${stopsNr}x` && rotation === 'Landscape')\r\n return 3;\r\n else if (layout === `departureBoard_Multistop_${stopsNr}x` && rotation === 'Portrait')\r\n return 3;\r\n };\r\n\r\n handleDropdownChange = (event) => {\r\n var tableRows = this.getLayoutDefaultTableRows(event.target.value, this.state.screenRotation, this.state.stopsNr);\r\n this.setState({\r\n layout: event.target.value,\r\n tableRows: tableRows\r\n });\r\n };\r\n\r\n handleTableRowsChange = (event) => {\r\n this.setState({ tableRows: Number.parseInt(event.target.value) });\r\n };\r\n\r\n renderDownloadPage() {\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":""}