{"version":3,"file":"app.bundle.js","mappings":"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","sources":["webpack://anyride/./src/js/jquery.autocomplete.min.js","webpack://anyride/./src/js/jquery.scrollintoview.min.js","webpack://anyride/./src/js/jquery.wait-overlay.js","webpack://anyride/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://anyride/./src/anyride.ts","webpack://anyride/./src/ko-bootstrap.ts"],"sourcesContent":["/**\n* Ajax Autocomplete for jQuery, version 1.4.7\n* (c) 2017 Tomas Kirda\n*\n* Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.\n* For details, see the web site: https://github.com/devbridge/jQuery-Autocomplete\n*/\n!function(a){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],a):a(\"object\"==typeof exports&&\"function\"==typeof require?require(\"jquery\"):jQuery)}(function(a){\"use strict\";function b(c,d){var e=this;e.element=c,e.el=a(c),e.suggestions=[],e.badQueries=[],e.selectedIndex=-1,e.currentValue=e.element.value,e.timeoutId=null,e.cachedResponse={},e.onChangeTimeout=null,e.onChange=null,e.isLocal=!1,e.suggestionsContainer=null,e.noSuggestionsContainer=null,e.options=a.extend({},b.defaults,d),e.classes={selected:\"autocomplete-selected\",suggestion:\"autocomplete-suggestion\"},e.hint=null,e.hintValue=\"\",e.selection=null,e.initialize(),e.setOptions(d)}function c(a,b,c){return a.value.toLowerCase().indexOf(c)!==-1}function d(b){return\"string\"==typeof b?a.parseJSON(b):b}function e(a,b){if(!b)return a.value;var c=\"(\"+g.escapeRegExChars(b)+\")\";return a.value.replace(new RegExp(c,\"gi\"),\"$1\").replace(/&/g,\"&\").replace(//g,\">\").replace(/\"/g,\""\").replace(/<(\\/?strong)>/g,\"<$1>\")}function f(a,b){return'
'+b+\"
\"}var g=function(){return{escapeRegExChars:function(a){return a.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\")},createNode:function(a){var b=document.createElement(\"div\");return b.className=a,b.style.position=\"absolute\",b.style.display=\"none\",b}}}(),h={ESC:27,TAB:9,RETURN:13,LEFT:37,UP:38,RIGHT:39,DOWN:40},i=a.noop;b.utils=g,a.Autocomplete=b,b.defaults={ajaxSettings:{},autoSelectFirst:!1,appendTo:\"body\",serviceUrl:null,lookup:null,onSelect:null,width:\"auto\",minChars:1,maxHeight:300,deferRequestBy:0,params:{},formatResult:e,formatGroup:f,delimiter:null,zIndex:9999,type:\"GET\",noCache:!1,onSearchStart:i,onSearchComplete:i,onSearchError:i,preserveInput:!1,containerClass:\"autocomplete-suggestions\",tabDisabled:!1,dataType:\"text\",currentRequest:null,triggerSelectOnValidInput:!0,preventBadQueries:!0,lookupFilter:c,paramName:\"query\",transformResult:d,showNoSuggestionNotice:!1,noSuggestionNotice:\"No results\",orientation:\"bottom\",forceFixPosition:!1},b.prototype={initialize:function(){var c,d=this,e=\".\"+d.classes.suggestion,f=d.classes.selected,g=d.options;d.element.setAttribute(\"autocomplete\",\"off\"),d.noSuggestionsContainer=a('
').html(this.options.noSuggestionNotice).get(0),d.suggestionsContainer=b.utils.createNode(g.containerClass),c=a(d.suggestionsContainer),c.appendTo(g.appendTo||\"body\"),\"auto\"!==g.width&&c.css(\"width\",g.width),c.on(\"mouseover.autocomplete\",e,function(){d.activate(a(this).data(\"index\"))}),c.on(\"mouseout.autocomplete\",function(){d.selectedIndex=-1,c.children(\".\"+f).removeClass(f)}),c.on(\"click.autocomplete\",e,function(){d.select(a(this).data(\"index\"))}),c.on(\"click.autocomplete\",function(){clearTimeout(d.blurTimeoutId)}),d.fixPositionCapture=function(){d.visible&&d.fixPosition()},a(window).on(\"resize.autocomplete\",d.fixPositionCapture),d.el.on(\"keydown.autocomplete\",function(a){d.onKeyPress(a)}),d.el.on(\"keyup.autocomplete\",function(a){d.onKeyUp(a)}),d.el.on(\"blur.autocomplete\",function(){d.onBlur()}),d.el.on(\"focus.autocomplete\",function(){d.onFocus()}),d.el.on(\"change.autocomplete\",function(a){d.onKeyUp(a)}),d.el.on(\"input.autocomplete\",function(a){d.onKeyUp(a)})},onFocus:function(){var a=this;a.fixPosition(),a.el.val().length>=a.options.minChars&&a.onValueChange()},onBlur:function(){var a=this;a.blurTimeoutId=setTimeout(function(){a.hide()},200)},abortAjax:function(){var a=this;a.currentRequest&&(a.currentRequest.abort(),a.currentRequest=null)},setOptions:function(b){var c=this,d=a.extend({},c.options,b);c.isLocal=Array.isArray(d.lookup),c.isLocal&&(d.lookup=c.verifySuggestionsFormat(d.lookup)),d.orientation=c.validateOrientation(d.orientation,\"bottom\"),a(c.suggestionsContainer).css({\"max-height\":d.maxHeight+\"px\",width:d.width+\"px\",\"z-index\":d.zIndex}),this.options=d},clearCache:function(){this.cachedResponse={},this.badQueries=[]},clear:function(){this.clearCache(),this.currentValue=\"\",this.suggestions=[]},disable:function(){var a=this;a.disabled=!0,clearTimeout(a.onChangeTimeout),a.abortAjax()},enable:function(){this.disabled=!1},fixPosition:function(){var b=this,c=a(b.suggestionsContainer),d=c.parent().get(0);if(d===document.body||b.options.forceFixPosition){var e=b.options.orientation,f=c.outerHeight(),g=b.el.outerHeight(),h=b.el.offset(),i={top:h.top,left:h.left};if(\"auto\"===e){var j=a(window).height(),k=a(window).scrollTop(),l=-k+h.top-f,m=k+j-(h.top+g+f);e=Math.max(l,m)===l?\"top\":\"bottom\"}if(\"top\"===e?i.top+=-f:i.top+=g,d!==document.body){var n,o=c.css(\"opacity\");b.visible||c.css(\"opacity\",0).show(),n=c.offsetParent().offset(),i.top-=n.top,i.top+=d.scrollTop,i.left-=n.left,b.visible||c.css(\"opacity\",o).hide()}\"auto\"===b.options.width&&(i.width=b.el.outerWidth()+\"px\"),c.css(i)}},isCursorAtEnd:function(){var a,b=this,c=b.el.val().length,d=b.element.selectionStart;return\"number\"==typeof d?d===c:!document.selection||(a=document.selection.createRange(),a.moveStart(\"character\",-c),c===a.text.length)},onKeyPress:function(a){var b=this;if(!b.disabled&&!b.visible&&a.which===h.DOWN&&b.currentValue)return void b.suggest();if(!b.disabled&&b.visible){switch(a.which){case h.ESC:b.el.val(b.currentValue),b.hide();break;case h.RIGHT:if(b.hint&&b.options.onHint&&b.isCursorAtEnd()){b.selectHint();break}return;case h.TAB:if(b.hint&&b.options.onHint)return void b.selectHint();if(b.selectedIndex===-1)return void b.hide();if(b.select(b.selectedIndex),b.options.tabDisabled===!1)return;break;case h.RETURN:if(b.selectedIndex===-1)return void b.hide();b.select(b.selectedIndex);break;case h.UP:b.moveUp();break;case h.DOWN:b.moveDown();break;default:return}a.stopImmediatePropagation(),a.preventDefault()}},onKeyUp:function(a){var b=this;if(!b.disabled){switch(a.which){case h.UP:case h.DOWN:return}clearTimeout(b.onChangeTimeout),b.currentValue!==b.el.val()&&(b.findBestHint(),b.options.deferRequestBy>0?b.onChangeTimeout=setTimeout(function(){b.onValueChange()},b.options.deferRequestBy):b.onValueChange())}},onValueChange:function(){if(this.ignoreValueChange)return void(this.ignoreValueChange=!1);var b=this,c=b.options,d=b.el.val(),e=b.getQuery(d);return b.selection&&b.currentValue!==e&&(b.selection=null,(c.onInvalidateSelection||a.noop).call(b.element)),clearTimeout(b.onChangeTimeout),b.currentValue=d,b.selectedIndex=-1,c.triggerSelectOnValidInput&&b.isExactMatch(e)?void b.select(0):void(e.lengthh&&(c.suggestions=c.suggestions.slice(0,h)),c},getSuggestions:function(b){var c,d,e,f,g=this,h=g.options,i=h.serviceUrl;if(h.params[h.paramName]=b,h.onSearchStart.call(g.element,h.params)!==!1){if(d=h.ignoreParams?null:h.params,a.isFunction(h.lookup))return void h.lookup(b,function(a){g.suggestions=a.suggestions,g.suggest(),h.onSearchComplete.call(g.element,b,a.suggestions)});g.isLocal?c=g.getSuggestionsLocal(b):(a.isFunction(i)&&(i=i.call(g.element,b)),e=i+\"?\"+a.param(d||{}),c=g.cachedResponse[e]),c&&Array.isArray(c.suggestions)?(g.suggestions=c.suggestions,g.suggest(),h.onSearchComplete.call(g.element,b,c.suggestions)):g.isBadQuery(b)?h.onSearchComplete.call(g.element,b,[]):(g.abortAjax(),f={url:i,data:d,type:h.type,dataType:h.dataType},a.extend(f,h.ajaxSettings),g.currentRequest=a.ajax(f).done(function(a){var c;g.currentRequest=null,c=h.transformResult(a,b),g.processResponse(c,b,e),h.onSearchComplete.call(g.element,b,c.suggestions)}).fail(function(a,c,d){h.onSearchError.call(g.element,b,a,c,d)}))}},isBadQuery:function(a){if(!this.options.preventBadQueries)return!1;for(var b=this.badQueries,c=b.length;c--;)if(0===a.indexOf(b[c]))return!0;return!1},hide:function(){var b=this,c=a(b.suggestionsContainer);a.isFunction(b.options.onHide)&&b.visible&&b.options.onHide.call(b.element,c),b.visible=!1,b.selectedIndex=-1,clearTimeout(b.onChangeTimeout),a(b.suggestionsContainer).hide(),b.signalHint(null)},suggest:function(){if(!this.suggestions.length)return void(this.options.showNoSuggestionNotice?this.noSuggestions():this.hide());var b,c=this,d=c.options,e=d.groupBy,f=d.formatResult,g=c.getQuery(c.currentValue),h=c.classes.suggestion,i=c.classes.selected,j=a(c.suggestionsContainer),k=a(c.noSuggestionsContainer),l=d.beforeRender,m=\"\",n=function(a,c){var f=a.data[e];return b===f?\"\":(b=f,d.formatGroup(a,b))};return d.triggerSelectOnValidInput&&c.isExactMatch(g)?void c.select(0):(a.each(c.suggestions,function(a,b){e&&(m+=n(b,g,a)),m+='
'+f(b,g,a)+\"
\"}),this.adjustContainerWidth(),k.detach(),j.html(m),a.isFunction(l)&&l.call(c.element,j,c.suggestions),c.fixPosition(),j.show(),d.autoSelectFirst&&(c.selectedIndex=0,j.scrollTop(0),j.children(\".\"+h).first().addClass(i)),c.visible=!0,void c.findBestHint())},noSuggestions:function(){var b=this,c=b.options.beforeRender,d=a(b.suggestionsContainer),e=a(b.noSuggestionsContainer);this.adjustContainerWidth(),e.detach(),d.empty(),d.append(e),a.isFunction(c)&&c.call(b.element,d,b.suggestions),b.fixPosition(),d.show(),b.visible=!0},adjustContainerWidth:function(){var b,c=this,d=c.options,e=a(c.suggestionsContainer);\"auto\"===d.width?(b=c.el.outerWidth(),e.css(\"width\",b>0?b:300)):\"flex\"===d.width&&e.css(\"width\",\"\")},findBestHint:function(){var b=this,c=b.el.val().toLowerCase(),d=null;c&&(a.each(b.suggestions,function(a,b){var e=0===b.value.toLowerCase().indexOf(c);return e&&(d=b),!e}),b.signalHint(d))},signalHint:function(b){var c=\"\",d=this;b&&(c=d.currentValue+b.value.substr(d.currentValue.length)),d.hintValue!==c&&(d.hintValue=c,d.hint=b,(this.options.onHint||a.noop)(c))},verifySuggestionsFormat:function(b){return b.length&&\"string\"==typeof b[0]?a.map(b,function(a){return{value:a,data:null}}):b},validateOrientation:function(b,c){return b=a.trim(b||\"\").toLowerCase(),a.inArray(b,[\"auto\",\"bottom\",\"top\"])===-1&&(b=c),b},processResponse:function(a,b,c){var d=this,e=d.options;a.suggestions=d.verifySuggestionsFormat(a.suggestions),e.noCache||(d.cachedResponse[c]=a,e.preventBadQueries&&!a.suggestions.length&&d.badQueries.push(b)),b===d.getQuery(d.currentValue)&&(d.suggestions=a.suggestions,d.suggest())},activate:function(b){var c,d=this,e=d.classes.selected,f=a(d.suggestionsContainer),g=f.find(\".\"+d.classes.suggestion);return f.find(\".\"+e).removeClass(e),d.selectedIndex=b,d.selectedIndex!==-1&&g.length>d.selectedIndex?(c=g.get(d.selectedIndex),a(c).addClass(e),c):null},selectHint:function(){var b=this,c=a.inArray(b.hint,b.suggestions);b.select(c)},select:function(a){var b=this;b.hide(),b.onSelect(a)},moveUp:function(){var b=this;if(b.selectedIndex!==-1)return 0===b.selectedIndex?(a(b.suggestionsContainer).children(\".\"+b.classes.suggestion).first().removeClass(b.classes.selected),b.selectedIndex=-1,b.ignoreValueChange=!1,b.el.val(b.currentValue),void b.findBestHint()):void b.adjustScroll(b.selectedIndex-1)},moveDown:function(){var a=this;a.selectedIndex!==a.suggestions.length-1&&a.adjustScroll(a.selectedIndex+1)},adjustScroll:function(b){var c=this,d=c.activate(b);if(d){var e,f,g,h=a(d).outerHeight();e=d.offsetTop,f=a(c.suggestionsContainer).scrollTop(),g=f+c.options.maxHeight-h,eg&&a(c.suggestionsContainer).scrollTop(e-c.options.maxHeight+h),c.options.preserveInput||(c.ignoreValueChange=!0,c.el.val(c.getValue(c.suggestions[b].value))),c.signalHint(null)}},onSelect:function(b){var c=this,d=c.options.onSelect,e=c.suggestions[b];c.currentValue=c.getValue(e.value),c.currentValue===c.el.val()||c.options.preserveInput||c.el.val(c.currentValue),c.signalHint(null),c.suggestions=[],c.selection=e,a.isFunction(d)&&d.call(c.element,e)},getValue:function(a){var b,c,d=this,e=d.options.delimiter;return e?(b=d.currentValue,c=b.split(e),1===c.length?a:b.substr(0,b.length-c[c.length-1].length)+a):a},dispose:function(){var b=this;b.el.off(\".autocomplete\").removeData(\"autocomplete\"),a(window).off(\"resize.autocomplete\",b.fixPositionCapture),a(b.suggestionsContainer).remove()}},a.fn.devbridgeAutocomplete=function(c,d){var e=\"autocomplete\";return arguments.length?this.each(function(){var f=a(this),g=f.data(e);\"string\"==typeof c?g&&\"function\"==typeof g[c]&&g[c](d):(g&&g.dispose&&g.dispose(),g=new b(this,c),f.data(e,g))}):this.first().data(e)},a.fn.autocomplete||(a.fn.autocomplete=a.fn.devbridgeAutocomplete)});","/*\r\n * jQuery scrollintoview() plugin and :scrollable selector filter\r\n *\r\n * Version 1.8 (14 Jul 2011)\r\n * Requires jQuery 1.4 or newer\r\n *\r\n * Copyright (c) 2011 Robert Koritnik\r\n * Licensed under the terms of the MIT license\r\n * http://www.opensource.org/licenses/mit-license.php\r\n */\r\n(function (f) { var c = { vertical: { x: false, y: true }, horizontal: { x: true, y: false }, both: { x: true, y: true }, x: { x: true, y: false }, y: { x: false, y: true } }; var b = { duration: \"fast\", direction: \"both\" }; var e = /^(?:html)$/i; var g = function (k, j) { j = j || (document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(k, null) : k.currentStyle); var i = document.defaultView && document.defaultView.getComputedStyle ? true : false; var h = { top: (parseFloat(i ? j.borderTopWidth : f.css(k, \"borderTopWidth\")) || 0), left: (parseFloat(i ? j.borderLeftWidth : f.css(k, \"borderLeftWidth\")) || 0), bottom: (parseFloat(i ? j.borderBottomWidth : f.css(k, \"borderBottomWidth\")) || 0), right: (parseFloat(i ? j.borderRightWidth : f.css(k, \"borderRightWidth\")) || 0) }; return { top: h.top, left: h.left, bottom: h.bottom, right: h.right, vertical: h.top + h.bottom, horizontal: h.left + h.right } }; var d = function (h) { var j = f(window); var i = e.test(h[0].nodeName); return { border: i ? { top: 0, left: 0, bottom: 0, right: 0 } : g(h[0]), scroll: { top: (i ? j : h).scrollTop(), left: (i ? j : h).scrollLeft() }, scrollbar: { right: i ? 0 : h.innerWidth() - h[0].clientWidth, bottom: i ? 0 : h.innerHeight() - h[0].clientHeight }, rect: (function () { var k = h[0].getBoundingClientRect(); return { top: i ? 0 : k.top, left: i ? 0 : k.left, bottom: i ? h[0].clientHeight : k.bottom, right: i ? h[0].clientWidth : k.right } })() } }; f.fn.extend({ scrollintoview: function (j) { j = f.extend({}, b, j); j.direction = c[typeof (j.direction) === \"string\" && j.direction.toLowerCase()] || c.both; var n = \"\"; if (j.direction.x === true) { n = \"horizontal\" } if (j.direction.y === true) { n = n ? \"both\" : \"vertical\" } var l = this.eq(0); var i = l.closest(\":scrollable(\" + n + \")\"); if (i.length > 0) { i = i.eq(0); var m = { e: d(l), s: d(i) }; var h = { top: m.e.rect.top - (m.s.rect.top + m.s.border.top), bottom: m.s.rect.bottom - m.s.border.bottom - m.s.scrollbar.bottom - m.e.rect.bottom, left: m.e.rect.left - (m.s.rect.left + m.s.border.left), right: m.s.rect.right - m.s.border.right - m.s.scrollbar.right - m.e.rect.right }; var k = {}; if (j.direction.y === true) { if (h.top < 0) { k.scrollTop = m.s.scroll.top + h.top } else { if (h.top > 0 && h.bottom < 0) { k.scrollTop = m.s.scroll.top + Math.min(h.top, -h.bottom) } } } if (j.direction.x === true) { if (h.left < 0) { k.scrollLeft = m.s.scroll.left + h.left } else { if (h.left > 0 && h.right < 0) { k.scrollLeft = m.s.scroll.left + Math.min(h.left, -h.right) } } } if (!f.isEmptyObject(k)) { if (e.test(i[0].nodeName)) { i = f(\"html,body\") } i.animate(k, j.duration).eq(0).queue(function (o) { f.isFunction(j.complete) && j.complete.call(i[0]); o() }) } else { f.isFunction(j.complete) && j.complete.call(i[0]) } } return this } }); var a = { auto: true, scroll: true, visible: false, hidden: false }; f.extend(f.expr[\":\"], { scrollable: function (k, i, n, h) { var m = c[typeof (n[3]) === \"string\" && n[3].toLowerCase()] || c.both; var l = (document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(k, null) : k.currentStyle); var o = { x: a[l.overflowX.toLowerCase()] || false, y: a[l.overflowY.toLowerCase()] || false, isRoot: e.test(k.nodeName) }; if (!o.x && !o.y && !o.isRoot) { return false } var j = { height: { scroll: k.scrollHeight, client: k.clientHeight }, width: { scroll: k.scrollWidth, client: k.clientWidth }, scrollableX: function () { return (o.x || o.isRoot) && this.width.scroll > this.width.client }, scrollableY: function () { return (o.y || o.isRoot) && this.height.scroll > this.height.client } }; return m.y && j.scrollableY() || m.x && j.scrollableX() } }) })(jQuery);\r\n\r\n","/*global jQuery:false */\n/*global window:false */\n// https://github.com/fluffynuts/jquery-wait-overlay\n(function ($) {\n \"use strict\";\n var defaultOptions = {\n title: \"\",\n text: \"\",\n extraCssClasses: [],\n overrideGeometry: {\n top: undefined,\n left: undefined,\n width: undefined,\n height: undefined\n }\n };\n var WaitOverlay = function(overlayThis, options) {\n this._waitCount = 0;\n this._parent = overlayThis;\n this._options = $.extend({}, defaultOptions, options);\n };\n WaitOverlay.prototype = {\n get waitCount() {\n return this._waitCount;\n },\n show: function() {\n if (this._waitCount++) {\n return;\n }\n this._buildAndDisplay();\n this._parent.data(\"waitOverlay\", this);\n },\n unshow: function() {\n if (--this._waitCount === 0) {\n this._removeSelf();\n }\n },\n _buildAndDisplay: function() {\n var self = this;\n this._createOverlay()\n ._addTitle()\n ._addText()\n ._addWaitClassArea()\n ._waitForParentToStabilize()\n .done(function() {\n self._display();\n });\n },\n _createOverlay: function() {\n return this._parentIsWindow() ? this._createWindowOverlay() : this._createRegularOverlay();\n },\n _createWindowOverlay: function() {\n this._overlay = $(\"
\")\n .css(\"position\", \"fixed\")\n .css(\"display\", \"table\")\n .css(\"z-index\", \"9999\")\n .css(\"width\", \"100%\")\n .css(\"height\", \"100%\")\n .css(\"top\", \"0\")\n .css(\"left\", \"0\")\n .css(\"margin-left\", \"0\")\n .css(\"margin-top\", \"0\")\n .addClass(\"wait-overlay\")\n .addClass(\"wait-overlay-window\");\n this._ensureOverlayIsNotTransparent();\n this._applyExtraCssClassesTo(this._overlay);\n return this;\n },\n _createRegularOverlay: function() {\n var parent = $(this._parent);\n var parentPosition = parent.position();\n var parentMargins = this._getMarginsOf(parent);\n this._overlay = $(\"
\")\n .css(\"position\", \"absolute\")\n .css(\"display\", \"table\")\n .css(\"z-index\", \"9999\")\n .width(parent.outerWidth())\n .height(parent.outerHeight())\n .css(\"left\", parentPosition.left)\n .css(\"top\", parentPosition.top)\n .css(parentMargins)\n .addClass(\"wait-overlay\");\n this._applyExtraCssClassesTo(this._overlay);\n return this;\n },\n _getMarginsOf: function(el) {\n return {\n marginLeft: el.css('margin-left'),\n marginRight: el.css('margin-right'),\n marginTop: el.css('margin-top'),\n marginBottom: el.css('margin-bottom')\n };\n },\n _applyExtraCssClassesTo: function(el) {\n this._options.extraCssClasses.forEach(function(className) {\n el.addClass(className);\n });\n },\n _getParentGeometry: function() {\n if (this._options.overrideGeometry) {\n return this._options.overrideGeometry;\n }\n var offset = $(this._parent).offset();\n return {\n left: offset.left,\n top: offset.top,\n width: $(this._parent).outerWidth(),\n height: $(this._parent).outerHeight(),\n marginLeft: $(this._parent).css('margin-left'),\n marginRight: $(this._parent).css('margin-right')\n };\n },\n _addWaitClassArea: function() {\n var waitAreaInner = $(\"
\")\n .addClass(\"wait\");\n var waitAreaLens = $(\"
\")\n .addClass(\"wait-lens\");\n var area = $(\"
\");\n area.append(waitAreaInner);\n area.append(waitAreaLens);\n this._overlay.append(area);\n this._waitArea = area;\n return this;\n },\n _addTitle: function() {\n if (this._options.title) {\n var titleArea = $(\"
\")\n .css(\"text-align\", \"center\")\n .css(\"margin\", \"0px\")\n .addClass(\"wait-title-container\");\n var title = $(\"\")\n .css(\"margin\", \"0px\")\n .text(this._options.title)\n .addClass(\"wait-title\");\n titleArea.append(title);\n this._titleArea = titleArea;\n this._overlay.append(titleArea);\n }\n return this;\n },\n _addText: function() {\n if (this._options.text) {\n var textArea = $(\"
\").addClass(\"wait-text-container\")\n .css(\"margin\", \"0px\")\n .css(\"width\", \"100%\");\n var textBody = $(\"\")\n .text(this._options.text)\n .css(\"white-space\", \"pre-wrap\")\n .addClass(\"wait-text\");\n textArea.append(textBody);\n this._textArea = textArea;\n this._overlay.append(textArea);\n }\n return this;\n },\n _display: function() {\n if (this._parentIsWindow()) {\n $(\"body\").append(this._overlay);\n } else {\n $(this._parent.parent()).append(this._overlay);\n }\n this._keepSizeInSync();\n },\n _checkIfParentHasStabilised: function(usingDeferred, lastGeometry) {\n if (!this._waitCount) {\n usingDeferred.reject();\n }\n var currentGeometry = this._getParentGeometry();\n var waitSomeMore = (lastGeometry === undefined);\n if (!waitSomeMore) {\n for (var k in currentGeometry) {\n if (currentGeometry[k] !== lastGeometry[k]) {\n waitSomeMore = true;\n break;\n }\n }\n }\n if (waitSomeMore) {\n var self = this;\n window.setTimeout(function() {\n self._checkIfParentHasStabilised(usingDeferred, currentGeometry);\n }, 50);\n return;\n }\n usingDeferred.resolve(currentGeometry);\n },\n _waitForParentToStabilize: function() {\n var usingDeferred = new $.Deferred();\n this._checkIfParentHasStabilised(usingDeferred);\n return usingDeferred.promise();\n },\n _keepSizeInSync: function() {\n if (this._parent.is(\":visible\")) {\n var grandparent = (this._parent.parent &&\n this._parent.parent()) ||\n this._parent;\n if (grandparent.length === 0) {\n grandparent = $(\"html\");\n }\n if (grandparent.find(\".wait-overlay\").length) {\n var resized = this._resizeInnerContentToFit();\n var self = this;\n window.setTimeout(function() {\n self._keepSizeInSync(true);\n }, resized ? 25 : 100);\n }\n }\n },\n _resizeInnerContentToFit: function() {\n var resized = false;\n if (this._textArea) {\n resized = this._resizedTextArea();\n } else {\n resized = this._resizedWaitArea();\n }\n return resized;\n },\n _resizedWaitArea: function() {\n var originalHeight = this._waitArea.height();\n var waitAreaHeight = this._getParentHeight();\n if (this._titleArea) {\n waitAreaHeight -= this._titleArea.outerHeight();\n }\n if (originalHeight !== waitAreaHeight) {\n this._waitArea.height(waitAreaHeight);\n return true;\n }\n return false;\n },\n _resizedTextArea: function() {\n var originalHeight = this._textArea.height();\n var textAreaHeight = this._getParentHeight() - this._waitArea.outerHeight();\n if (this._titleArea) {\n textAreaHeight -= this._titleArea.outerHeight();\n }\n if (originalHeight !== textAreaHeight) {\n this._textArea.height(textAreaHeight);\n return true;\n }\n return false;\n },\n _parentIsWindow: function() {\n return this._parent[0] === window;\n },\n _createBackingOverlay: function() {\n if (this._parentIsWindow()) {\n return;\n }\n this._backingOverlay = $(this._parent).clone();\n this._backingOverlay\n .addClass(\"wait-overlay-backing\")\n .css(\"opacity\", this._options.backingOverlayOpacity);\n $(this._backingOverlay).find(\"*\").attr(\"disabled\", \"disabled\");\n $(this._parent.parent()).append(this._backingOverlay);\n this._parent.hide();\n },\n _removeSelf: function() {\n this._parent.data(\"waitOverlay\", null);\n this._overlay.remove();\n if (this._backingOverlay) {\n this._backingOverlay.remove();\n }\n this._parent.show();\n },\n _getParentWidth: function() {\n /* sometimes margins and stuff make child elements go south ): */\n var width = this._parent.width();\n var parentLeft = this._parent.offset().left;\n var parentRight = parentLeft + width;\n var children = this._parent.find(\"*:visible\");\n var childLeft, childRight;\n for (var i = 0; i < children.length; i++) {\n childLeft = $(children[i]).offset().left;\n childRight = childLeft + $(children[i]).width();\n childRight += this._getCssIntVal(children[i], \"padding-left\");\n childRight += this._getCssIntVal(children[i], \"padding-right\");\n if (childRight > parentRight) {\n parentRight = childRight;\n }\n }\n return parentRight - parentLeft;\n },\n _getParentHeight: function() {\n if (this._options.overrideGeometry.height !== undefined) {\n return this._options.overrideGeometry.height;\n }\n /* sometimes margins and stuff make child elements go south ): */\n var height = this._parent.height();\n var parentTop = this._parent.offset().top;\n var parentBottom = parentTop + height;\n var children = this._parent.find(\"*:visible\");\n var childTop, childBottom;\n for (var i = 0; i < children.length; i++) {\n childTop = $(children[i]).offset().top;\n childBottom = childTop + $(children[i]).height();\n childBottom += this._getCssIntVal(children[i], \"padding-top\");\n childBottom += this._getCssIntVal(children[i], \"padding-bottom\");\n if (childBottom > parentBottom) {\n parentBottom = childBottom;\n }\n }\n return parentBottom - parentTop;\n },\n _getCssIntVal: function(el, prop) {\n var val = $(el).css(prop);\n if (!val) {\n return 0;\n }\n val = val.replace(/px/, \"\");\n try {\n return parseInt(val, 10);\n } catch (e) {\n return 0;\n }\n }\n };\n $.fn.wait = function(options) {\n var deferred = new $.Deferred();\n if (this.length === 0) {\n return deferred.promise();\n }\n options = options || {};\n for (var i = 0; i < this.length; i++) {\n var el = this[i];\n if (el === window) {\n options.overrideGeometry = {\n left: 0,\n top: 0,\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n var existingOverlay = $(el).data(\"waitOverlay\");\n var waitOverlay = existingOverlay || new WaitOverlay($(el), options);\n waitOverlay.show();\n }\n return deferred.promise();\n };\n $.fn.unwait = function() {\n for (var i = 0; i < this.length; i++) {\n var el = $(this.get(i));\n var existingOverlay = el.data(\"waitOverlay\");\n if (existingOverlay) {\n existingOverlay.unshow();\n }\n }\n };\n window.TestExports = window.TestExports || {};\n window.TestExports = $.extend({}, window.TestExports, {WaitOverlay: WaitOverlay});\n // spy on wait for parent to prevent async problems with testing\n if (window.jasmine) {\n WaitOverlay.prototype._waitForParentToStabilize = function() {\n var deferred = new $.Deferred();\n deferred.resolve({});\n return deferred.promise();\n };\n }\n})(jQuery);\n","var map = {\n\t\"./af\": 5177,\n\t\"./af.js\": 5177,\n\t\"./ar\": 1509,\n\t\"./ar-dz\": 1488,\n\t\"./ar-dz.js\": 1488,\n\t\"./ar-kw\": 8676,\n\t\"./ar-kw.js\": 8676,\n\t\"./ar-ly\": 2353,\n\t\"./ar-ly.js\": 2353,\n\t\"./ar-ma\": 4496,\n\t\"./ar-ma.js\": 4496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 2682,\n\t\"./ar-sa.js\": 2682,\n\t\"./ar-tn\": 9756,\n\t\"./ar-tn.js\": 9756,\n\t\"./ar.js\": 1509,\n\t\"./az\": 5533,\n\t\"./az.js\": 5533,\n\t\"./be\": 8959,\n\t\"./be.js\": 8959,\n\t\"./bg\": 7777,\n\t\"./bg.js\": 7777,\n\t\"./bm\": 4903,\n\t\"./bm.js\": 4903,\n\t\"./bn\": 1290,\n\t\"./bn-bd\": 7357,\n\t\"./bn-bd.js\": 7357,\n\t\"./bn.js\": 1290,\n\t\"./bo\": 1545,\n\t\"./bo.js\": 1545,\n\t\"./br\": 1470,\n\t\"./br.js\": 1470,\n\t\"./bs\": 4429,\n\t\"./bs.js\": 4429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 6464,\n\t\"./cs.js\": 6464,\n\t\"./cv\": 3635,\n\t\"./cv.js\": 3635,\n\t\"./cy\": 4226,\n\t\"./cy.js\": 4226,\n\t\"./da\": 3601,\n\t\"./da.js\": 3601,\n\t\"./de\": 7853,\n\t\"./de-at\": 6111,\n\t\"./de-at.js\": 6111,\n\t\"./de-ch\": 4697,\n\t\"./de-ch.js\": 4697,\n\t\"./de.js\": 7853,\n\t\"./dv\": 708,\n\t\"./dv.js\": 708,\n\t\"./el\": 4691,\n\t\"./el.js\": 4691,\n\t\"./en-au\": 3872,\n\t\"./en-au.js\": 3872,\n\t\"./en-ca\": 8298,\n\t\"./en-ca.js\": 8298,\n\t\"./en-gb\": 6195,\n\t\"./en-gb.js\": 6195,\n\t\"./en-ie\": 6584,\n\t\"./en-ie.js\": 6584,\n\t\"./en-il\": 5543,\n\t\"./en-il.js\": 5543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 9402,\n\t\"./en-nz.js\": 9402,\n\t\"./en-sg\": 3004,\n\t\"./en-sg.js\": 3004,\n\t\"./eo\": 2934,\n\t\"./eo.js\": 2934,\n\t\"./es\": 7650,\n\t\"./es-do\": 838,\n\t\"./es-do.js\": 838,\n\t\"./es-mx\": 7730,\n\t\"./es-mx.js\": 7730,\n\t\"./es-us\": 6575,\n\t\"./es-us.js\": 6575,\n\t\"./es.js\": 7650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 527,\n\t\"./fi.js\": 527,\n\t\"./fil\": 5995,\n\t\"./fil.js\": 5995,\n\t\"./fo\": 2477,\n\t\"./fo.js\": 2477,\n\t\"./fr\": 5498,\n\t\"./fr-ca\": 6435,\n\t\"./fr-ca.js\": 6435,\n\t\"./fr-ch\": 7892,\n\t\"./fr-ch.js\": 7892,\n\t\"./fr.js\": 5498,\n\t\"./fy\": 7071,\n\t\"./fy.js\": 7071,\n\t\"./ga\": 1734,\n\t\"./ga.js\": 1734,\n\t\"./gd\": 217,\n\t\"./gd.js\": 217,\n\t\"./gl\": 7329,\n\t\"./gl.js\": 7329,\n\t\"./gom-deva\": 2124,\n\t\"./gom-deva.js\": 2124,\n\t\"./gom-latn\": 3383,\n\t\"./gom-latn.js\": 3383,\n\t\"./gu\": 5050,\n\t\"./gu.js\": 5050,\n\t\"./he\": 1713,\n\t\"./he.js\": 1713,\n\t\"./hi\": 3861,\n\t\"./hi.js\": 3861,\n\t\"./hr\": 6308,\n\t\"./hr.js\": 6308,\n\t\"./hu\": 609,\n\t\"./hu.js\": 609,\n\t\"./hy-am\": 7160,\n\t\"./hy-am.js\": 7160,\n\t\"./id\": 4063,\n\t\"./id.js\": 4063,\n\t\"./is\": 9374,\n\t\"./is.js\": 9374,\n\t\"./it\": 8383,\n\t\"./it-ch\": 1827,\n\t\"./it-ch.js\": 1827,\n\t\"./it.js\": 8383,\n\t\"./ja\": 3827,\n\t\"./ja.js\": 3827,\n\t\"./jv\": 9722,\n\t\"./jv.js\": 9722,\n\t\"./ka\": 1794,\n\t\"./ka.js\": 1794,\n\t\"./kk\": 7088,\n\t\"./kk.js\": 7088,\n\t\"./km\": 6870,\n\t\"./km.js\": 6870,\n\t\"./kn\": 4451,\n\t\"./kn.js\": 4451,\n\t\"./ko\": 3164,\n\t\"./ko.js\": 3164,\n\t\"./ku\": 8174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 8174,\n\t\"./ky\": 8474,\n\t\"./ky.js\": 8474,\n\t\"./lb\": 9680,\n\t\"./lb.js\": 9680,\n\t\"./lo\": 5867,\n\t\"./lo.js\": 5867,\n\t\"./lt\": 5766,\n\t\"./lt.js\": 5766,\n\t\"./lv\": 9532,\n\t\"./lv.js\": 9532,\n\t\"./me\": 8076,\n\t\"./me.js\": 8076,\n\t\"./mi\": 1848,\n\t\"./mi.js\": 1848,\n\t\"./mk\": 306,\n\t\"./mk.js\": 306,\n\t\"./ml\": 3739,\n\t\"./ml.js\": 3739,\n\t\"./mn\": 9053,\n\t\"./mn.js\": 9053,\n\t\"./mr\": 6169,\n\t\"./mr.js\": 6169,\n\t\"./ms\": 3386,\n\t\"./ms-my\": 2297,\n\t\"./ms-my.js\": 2297,\n\t\"./ms.js\": 3386,\n\t\"./mt\": 7075,\n\t\"./mt.js\": 7075,\n\t\"./my\": 2264,\n\t\"./my.js\": 2264,\n\t\"./nb\": 2274,\n\t\"./nb.js\": 2274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 2572,\n\t\"./nl-be\": 3784,\n\t\"./nl-be.js\": 3784,\n\t\"./nl.js\": 2572,\n\t\"./nn\": 4566,\n\t\"./nn.js\": 4566,\n\t\"./oc-lnc\": 9330,\n\t\"./oc-lnc.js\": 9330,\n\t\"./pa-in\": 9849,\n\t\"./pa-in.js\": 9849,\n\t\"./pl\": 4418,\n\t\"./pl.js\": 4418,\n\t\"./pt\": 9834,\n\t\"./pt-br\": 8303,\n\t\"./pt-br.js\": 8303,\n\t\"./pt.js\": 9834,\n\t\"./ro\": 4457,\n\t\"./ro.js\": 4457,\n\t\"./ru\": 2271,\n\t\"./ru.js\": 2271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 3478,\n\t\"./se.js\": 3478,\n\t\"./si\": 7538,\n\t\"./si.js\": 7538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 6637,\n\t\"./sl.js\": 6637,\n\t\"./sq\": 6794,\n\t\"./sq.js\": 6794,\n\t\"./sr\": 5719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 5719,\n\t\"./ss\": 6000,\n\t\"./ss.js\": 6000,\n\t\"./sv\": 1011,\n\t\"./sv.js\": 1011,\n\t\"./sw\": 748,\n\t\"./sw.js\": 748,\n\t\"./ta\": 1025,\n\t\"./ta.js\": 1025,\n\t\"./te\": 1885,\n\t\"./te.js\": 1885,\n\t\"./tet\": 8861,\n\t\"./tet.js\": 8861,\n\t\"./tg\": 6571,\n\t\"./tg.js\": 6571,\n\t\"./th\": 5802,\n\t\"./th.js\": 5802,\n\t\"./tk\": 9527,\n\t\"./tk.js\": 9527,\n\t\"./tl-ph\": 9231,\n\t\"./tl-ph.js\": 9231,\n\t\"./tlh\": 1052,\n\t\"./tlh.js\": 1052,\n\t\"./tr\": 5096,\n\t\"./tr.js\": 5096,\n\t\"./tzl\": 9846,\n\t\"./tzl.js\": 9846,\n\t\"./tzm\": 1765,\n\t\"./tzm-latn\": 7711,\n\t\"./tzm-latn.js\": 7711,\n\t\"./tzm.js\": 1765,\n\t\"./ug-cn\": 8414,\n\t\"./ug-cn.js\": 8414,\n\t\"./uk\": 6618,\n\t\"./uk.js\": 6618,\n\t\"./ur\": 158,\n\t\"./ur.js\": 158,\n\t\"./uz\": 7609,\n\t\"./uz-latn\": 2475,\n\t\"./uz-latn.js\": 2475,\n\t\"./uz.js\": 7609,\n\t\"./vi\": 1135,\n\t\"./vi.js\": 1135,\n\t\"./x-pseudo\": 4051,\n\t\"./x-pseudo.js\": 4051,\n\t\"./yo\": 2218,\n\t\"./yo.js\": 2218,\n\t\"./zh-cn\": 2648,\n\t\"./zh-cn.js\": 2648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 1541,\n\t\"./zh-mo.js\": 1541,\n\t\"./zh-tw\": 304,\n\t\"./zh-tw.js\": 304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5358;","import * as $ from \"jquery\";\r\nimport * as ko from \"knockout\";\r\nimport * as L from \"leaflet\";\r\nimport * as _ from \"lodash\";\r\nimport * as moment from \"moment\";\r\nimport \"./ko-bootstrap\";\r\nimport \"../src/js/jquery.wait-overlay\";\r\nimport \"../src/js/jquery.autocomplete.min\";\r\nimport \"../src/js/jquery.scrollintoview.min\";\r\n\r\n// polyfill\r\nif (!Object.values) Object.values = (o) => Object.keys(o).map((k) => o[k]);\r\n\r\nfunction leftPad(value, length, padding) {\r\n let output = value + \"\";\r\n while (output.length < length) {\r\n output = padding + output;\r\n }\r\n return output;\r\n}\r\n\r\nfunction leftPadZero(number, length) {\r\n return leftPad(number, length, \"0\");\r\n}\r\n\r\nconst isNumber = (value) => {\r\n if (typeof value !== \"number\") {\r\n return false;\r\n }\r\n if (value !== Number(value)) {\r\n return false;\r\n }\r\n if (value === Infinity || value === -Infinity) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nfunction getHashParameters(hash) {\r\n return hash\r\n ? hash\r\n .replace(/(^\\#)/, \"\")\r\n .split(\"&\")\r\n .map(\r\n function (n, _, array) {\r\n return (\r\n (n = n.split(\"=\")),\r\n (array[n[0]] = decodeURIComponent(n[1].replace(/\\+/g, \"%20\"))),\r\n array\r\n );\r\n }.bind({})\r\n )[0]\r\n : {};\r\n}\r\n\r\nfunction Compare(x, y) {\r\n return x < y ? -1 : y < x ? 1 : 0;\r\n}\r\n\r\nfunction AlphanumComparer(s1, s2) {\r\n if (typeof s1 !== \"string\" || typeof s1 !== \"string\") return Compare(s1, s2);\r\n\r\n var result = 0;\r\n var i1 = 0,\r\n i2 = 0,\r\n z1 = 0,\r\n z2 = 0;\r\n while (i1 < s1.length && i2 < s2.length) {\r\n var start1 = i1;\r\n var start2 = i2;\r\n\r\n for (; i1 < s1.length && s1[i1] >= \"0\" && s1[i1] <= \"9\"; i1++);\r\n for (; i2 < s2.length && s2[i2] >= \"0\" && s2[i2] <= \"9\"; i2++);\r\n\r\n var alpha1 = start1 === i1;\r\n var alpha2 = start2 === i2;\r\n\r\n result = Compare(alpha1 ? s1[i1] : \"0\", alpha2 ? s2[i2] : \"0\"); // Num before Alpha ex: 123 < 'A'\r\n if (result !== 0) break;\r\n\r\n for (; start1 < s1.length && s1[start1] === \"0\"; start1++, z1++);\r\n for (; start2 < s2.length && s2[start2] === \"0\"; start2++, z2++);\r\n\r\n result = Compare(i1 - start1, i2 - start2); // Short number before long ex: 22 < 111\r\n if (result !== 0) break;\r\n\r\n while (result === 0 && start1 < i1 && start2 < i2)\r\n result = Compare(s1[start1++], s2[start2++]); // if equal length then compare left to right ex: 1211 < 1300\r\n if (result !== 0) break;\r\n\r\n result = Compare(z1, z2); // less total preceding zeroes ex: 00 < 000\r\n if (result !== 0) break;\r\n\r\n i1 += alpha1 ? 1 : 0;\r\n i2 += alpha2 ? 1 : 0;\r\n }\r\n\r\n if (result === 0) result = Compare(s1.length - i1, s2.length - i2); // '111' < '111_'\r\n\r\n return result;\r\n}\r\n\r\n(moment as any).duration.fn.units = {\r\n seconds: /s/,\r\n minutes: /m/,\r\n hours: /H/,\r\n};\r\n\r\n(moment as any).duration.fn.customFormatTokens = {\r\n MaybeTotalHours: {\r\n regex: /\\[HHH:\\]/g,\r\n value: function (mom) {\r\n return mom.asHours() > 1 ? Math.floor(mom.asHours()) + \":\" : \"\";\r\n },\r\n },\r\n TotalHours: {\r\n regex: /HHH/g,\r\n value: function (mom) {\r\n return Math.floor(mom.asHours());\r\n },\r\n },\r\n MaybeTotalMinutes: {\r\n regex: /\\[mmm:\\]/g,\r\n value: function (mom) {\r\n return mom.asMinutes() > 1 ? Math.floor(mom.asMinutes()) + \":\" : \"\";\r\n },\r\n },\r\n TotalMinutes: {\r\n regex: /mmm/g,\r\n value: function (mom) {\r\n return Math.floor(mom.asMinutes());\r\n },\r\n },\r\n Minutes: {\r\n regex: /mm/g,\r\n value: function (mom) {\r\n return leftPadZero(mom.minutes(), 2);\r\n },\r\n },\r\n MaybeTotalSeconds: {\r\n regex: /\\[sss:\\]/g,\r\n value: function (mom) {\r\n return mom.asMinutes() > 1 ? Math.floor(mom.asMinutes()) + \":\" : \"\";\r\n },\r\n },\r\n TotalSeconds: {\r\n regex: /sss/g,\r\n value: function (mom) {\r\n return Math.floor(mom.asSeconds());\r\n },\r\n },\r\n Seconds: {\r\n regex: /ss/g,\r\n value: function (mom) {\r\n return leftPadZero(mom.seconds(), 2);\r\n },\r\n },\r\n};\r\n\r\ndeclare module \"moment\" {\r\n interface Duration {\r\n formatI4m(format: string): string;\r\n }\r\n}\r\n\r\n(moment as any).duration.fn.formatI4m = function (format: string): string {\r\n let lowestUnit = null;\r\n for (let tokenName in (moment as any).duration.fn.units) {\r\n let token = (moment as any).duration.fn.units[tokenName];\r\n if (token.test(format)) {\r\n lowestUnit = tokenName;\r\n break;\r\n }\r\n }\r\n\r\n let actualDuration = this;\r\n if (lowestUnit) {\r\n actualDuration = moment.duration(\r\n Math.round(this.as(lowestUnit)),\r\n lowestUnit\r\n );\r\n }\r\n\r\n let result = format;\r\n for (let tokenName in (moment as any).duration.fn.customFormatTokens) {\r\n let token = (moment as any).duration.fn.customFormatTokens[tokenName];\r\n if (token.regex.test(result)) {\r\n var replacement = token.value(actualDuration);\r\n result = result.replace(token.regex, replacement);\r\n }\r\n }\r\n return result;\r\n};\r\n\r\ninterface ForecastTimeFormatInput {\r\n datetime: moment.Moment;\r\n duration: moment.Duration;\r\n isRealtime: boolean;\r\n isCancelled: boolean;\r\n isCongestion: boolean;\r\n}\r\ntype ForecastTimeFormatResult = { success: boolean; time: string };\r\ntype ForecastTimeFormatFunction = (\r\n input: ForecastTimeFormatInput\r\n) => ForecastTimeFormatResult;\r\n\r\nclass ForecastTimeFormatter {\r\n constructor(config: Configuration, model: Model) {\r\n this.config = config;\r\n this.model = model;\r\n this.parse(this.config);\r\n }\r\n\r\n config: Configuration;\r\n model: Model;\r\n invocations: ForecastTimeFormatFunction[] = [];\r\n\r\n settingsNow = { time: 30 };\r\n settingsRelative = { time: null };\r\n\r\n public reset() {\r\n this.invocations = [];\r\n this.settingsNow = { time: 30 };\r\n this.settingsRelative = { time: null };\r\n }\r\n\r\n public parse(config) {\r\n this.reset();\r\n let forecastConfigurations = config.formatForecastTime;\r\n\r\n //for (let c of configurations) {\r\n for (let index in forecastConfigurations) {\r\n let c = forecastConfigurations[index];\r\n let param = c;\r\n switch (c.type.toLowerCase()) {\r\n case \"forecastnow\":\r\n {\r\n let settings = this.settingsNow;\r\n if (param && param.time) {\r\n settings.time = moment.duration(param.time).asSeconds();\r\n }\r\n let lamda: ForecastTimeFormatFunction = (\r\n input: ForecastTimeFormatInput\r\n ): ForecastTimeFormatResult => {\r\n return this.tryNowTime(input);\r\n };\r\n this.invocations.push(lamda);\r\n }\r\n break;\r\n case \"absolutetime\":\r\n {\r\n const lamda: ForecastTimeFormatFunction = (\r\n input: ForecastTimeFormatInput\r\n ): ForecastTimeFormatResult => {\r\n return this.tryAbsoluteForecastTime(input);\r\n };\r\n this.invocations.push(lamda);\r\n }\r\n break;\r\n case \"relativetime\":\r\n {\r\n let settings = this.settingsRelative;\r\n if (param && param.time) {\r\n settings.time = moment.duration(param.time).asSeconds();\r\n }\r\n const lamda: ForecastTimeFormatFunction = (\r\n input: ForecastTimeFormatInput\r\n ): ForecastTimeFormatResult => {\r\n return this.tryRelativeForecastTime(input);\r\n };\r\n this.invocations.push(lamda);\r\n }\r\n break;\r\n default:\r\n let msg = \"Unknown type: \" + c.Type;\r\n console.error(msg);\r\n throw msg;\r\n }\r\n }\r\n return this.invocations;\r\n }\r\n\r\n public formatTime(input: ForecastTimeFormatInput): string {\r\n if (input.isCancelled) {\r\n return this.model.viewModel.textCancelled();\r\n }\r\n\r\n //if (input.isCongestion && this.model.isShowingCongestion) {\r\n // return model.viewModel.textCongestionText();\r\n //}\r\n\r\n for (let index in this.invocations) {\r\n let invocation = this.invocations[index];\r\n var result = invocation(input);\r\n if (result && result.success) {\r\n return result.time;\r\n }\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n public absoluteTime(datetime: moment.Moment): string {\r\n var formattedTime = datetime.format(this.model.config.formatAbsoluteTime);\r\n return formattedTime;\r\n }\r\n\r\n public relativetime(duration: moment.Duration): string {\r\n //var result = Math.round(duration.asMinutes());\r\n //let formattedTime = (result | 0).toString() + ' ' + model.viewModel.textMin();\r\n //return formattedTime;\r\n let formattedTime = duration.formatI4m(\r\n this.model.config.formatRelativeTime\r\n );\r\n return formattedTime;\r\n }\r\n\r\n private tryNowTime(input: ForecastTimeFormatInput): ForecastTimeFormatResult {\r\n if (\r\n input.isRealtime &&\r\n this.settingsNow.time &&\r\n input.duration.asSeconds() <= this.settingsNow.time\r\n ) {\r\n return { success: true, time: this.model.viewModel.textNow() };\r\n }\r\n\r\n return { success: false, time: null };\r\n }\r\n\r\n private tryAbsoluteForecastTime(\r\n input: ForecastTimeFormatInput\r\n ): ForecastTimeFormatResult {\r\n if (input.datetime) {\r\n var formattedTime = this.absoluteForecastTime(input);\r\n return { success: true, time: formattedTime };\r\n }\r\n return { success: false, time: null };\r\n }\r\n\r\n private absoluteForecastTime(input: ForecastTimeFormatInput): string {\r\n let formattedTime = this.absoluteTime(input.datetime);\r\n if (!input.isRealtime && this.model.config.useNonForcastIndicator) {\r\n formattedTime = this.model.viewModel.textCa() + \" \" + formattedTime;\r\n }\r\n return formattedTime;\r\n }\r\n\r\n private tryRelativeForecastTime(\r\n input: ForecastTimeFormatInput\r\n ): ForecastTimeFormatResult {\r\n if (\r\n !this.settingsRelative.time ||\r\n input.duration.asSeconds() <= this.settingsRelative.time\r\n ) {\r\n let time = this.relativeForecastTime(input);\r\n return { success: true, time: time };\r\n }\r\n\r\n return { success: false, time: null };\r\n }\r\n\r\n private relativeForecastTime(input: ForecastTimeFormatInput): string {\r\n let formattedTime =\r\n this.relativetime(input.duration) + \" \" + this.model.viewModel.textMin();\r\n if (!input.isRealtime && this.model.config.useNonForcastIndicator) {\r\n formattedTime = this.model.viewModel.textCa() + \" \" + formattedTime;\r\n }\r\n return formattedTime;\r\n }\r\n}\r\n\r\nclass Model {\r\n config: Configuration = null;\r\n viewModel: ViewModel = null;\r\n resourceModel: ResourceModel = null;\r\n translationModel: TranslationModel = null;\r\n bootstrap: Bootstrap = null;\r\n timeFormatter: ForecastTimeFormatter = null;\r\n}\r\n\r\nclass Appearance {\r\n constructor() {\r\n this.clear();\r\n }\r\n background = ko.observable(\"\");\r\n foreground = ko.observable(\"\");\r\n fontStyle = ko.observable(\"\");\r\n\r\n update(api: any) {\r\n this.background(api.background);\r\n this.foreground(api.foreground);\r\n this.fontStyle(api.fontStyle);\r\n }\r\n\r\n clear() {\r\n this.background(\"\");\r\n this.foreground(\"\");\r\n this.fontStyle(\"\");\r\n }\r\n}\r\n\r\nclass Location {\r\n latitude = ko.observable(null);\r\n longitude = ko.observable(null);\r\n\r\n update(api: any) {\r\n this.latitude(api.lat);\r\n this.longitude(api.lon);\r\n }\r\n\r\n toLeaflet() {\r\n let latLng = L.latLng(this.latitude(), this.longitude());\r\n return latLng;\r\n }\r\n}\r\n\r\nclass PositionMap {\r\n timestamp = ko.observable(null);\r\n heading = ko.observable(null);\r\n location = ko.observable(null);\r\n\r\n update(api: any) {\r\n this.timestamp(api.timestamp);\r\n this.heading(api.heading);\r\n this.location(null);\r\n if (api.location) {\r\n this.location(new Location());\r\n this.location().update(api.location);\r\n }\r\n }\r\n}\r\n\r\nclass VehiclePosition extends PositionMap {\r\n id = ko.observable(null);\r\n displayName = ko.observable(null);\r\n classes = ko.observable([]);\r\n\r\n update(api: any) {\r\n super.update(api);\r\n this.id(api.id);\r\n this.displayName(api.displayName);\r\n this.classes(api.classes);\r\n }\r\n}\r\n\r\nclass Line {\r\n id = ko.observable(0);\r\n text = ko.observable(\"\");\r\n\r\n update(api: any) {\r\n this.id(api.id);\r\n this.text(api.text);\r\n }\r\n}\r\n\r\nclass StopArea {\r\n id = ko.observable(0);\r\n text = ko.observable(\"\");\r\n location: ko.Observable = ko.observable(null);\r\n\r\n update(api: any) {\r\n this.id(api.id);\r\n this.text(api.text);\r\n this.location(null);\r\n if (api.location) {\r\n let loc = new Location();\r\n loc.update(api.location);\r\n this.location(loc);\r\n }\r\n }\r\n}\r\n\r\nclass Direction {\r\n id = ko.observable(0);\r\n text = ko.observable(\"\");\r\n\r\n update(api: any) {\r\n this.id(api.id);\r\n this.text(api.text);\r\n }\r\n}\r\n\r\nclass Message {\r\n id: ko.Observable = ko.observable(0);\r\n text = ko.observable(\"\");\r\n lines = ko.observableArray([]);\r\n AffectedCalls = ko.observableArray([]);\r\n isDisturbance = ko.observable(false);\r\n isInfo = ko.observable(false);\r\n getIconClass = ko.pureComputed(() => {\r\n return this.isDisturbance()\r\n ? \"icon-exclamation\"\r\n : \"icon-image-exclam-minor\";\r\n });\r\n getDisturbanceColors = ko.pureComputed(() => {\r\n return this.isDisturbance() ? \"disturbance-color\" : \"\";\r\n });\r\n\r\n update(api: any) {\r\n this.id(api.id);\r\n this.text(api.text);\r\n this.isDisturbance(api.isDisturbance);\r\n this.isInfo(api.isInfo);\r\n\r\n let affectedCallIds = [];\r\n api.affectedCalls.forEach((element) => {\r\n affectedCallIds.push(element);\r\n });\r\n this.AffectedCalls(affectedCallIds);\r\n\r\n const lines = [];\r\n api.lines.forEach((element) => {\r\n let line = new MessageLine();\r\n line.lineId(element.lineId);\r\n line.bgLineColor(element.bgLineColor);\r\n line.fgLineColor(element.fgLineColor);\r\n line.lineColor(element.lineColor);\r\n line.lineName(element.lineName);\r\n lines.push(line);\r\n });\r\n\r\n this.lines(lines);\r\n }\r\n}\r\n\r\nclass MessageLine {\r\n lineId = ko.observable(0);\r\n lineName = ko.observable(\"\");\r\n\r\n bgLineColor = ko.observable(\"\");\r\n bgLineColorHex = ko.pureComputed(() => {\r\n return \"#\" + this.bgLineColor();\r\n });\r\n fgLineColor = ko.observable(\"\");\r\n fgLineColorHex = ko.pureComputed(() => {\r\n return \"#\" + this.fgLineColor();\r\n });\r\n lineColor = ko.observable(\"\");\r\n lineColorHex = ko.pureComputed(() => {\r\n return \"#\" + this.lineColor();\r\n });\r\n}\r\n\r\nenum JourneyType {\r\n Undefined = \"Undefined\",\r\n Normal = \"Normal\",\r\n Extra = \"Extra\",\r\n}\r\n\r\n// enum ForecastQuality {\r\n// UNDEFINED = 'UNDEFINED',\r\n// TIMETABLE = 'TIMETABLE',\r\n// REALTIME = 'REALTIME',\r\n// CANCELLED = 'CANCELLED'\r\n// };\r\n\r\nclass Forecast {\r\n constructor(call: Call) {\r\n this.call = call;\r\n }\r\n\r\n call: Call;\r\n\r\n PlannedTime = ko.observable(moment(0));\r\n ForecastTime = ko.observable(moment(0));\r\n\r\n ForecastType = ko.observable(\"\");\r\n Quality = ko.observable(\"\");\r\n Attributes = ko.observableArray([]);\r\n\r\n JourneyType = ko.observable(JourneyType.Undefined);\r\n VehicleType = ko.observable(\"\");\r\n Designation = ko.observable(\"\");\r\n OccupancyPercent = ko.observable(null);\r\n\r\n update(api: any) {\r\n this.PlannedTime(moment(api.forecastTime));\r\n this.ForecastTime(moment(api.plannedTime));\r\n this.Quality(api.quality);\r\n this.Attributes(api.attributes);\r\n\r\n let journeyType = JourneyType.Undefined;\r\n if (typeof api.journeyType === \"string\") {\r\n switch (api.journeyType.toLowerCase()) {\r\n case \"extra\":\r\n case \"reinforcement\":\r\n journeyType = JourneyType.Extra;\r\n break;\r\n default:\r\n journeyType = JourneyType.Normal;\r\n }\r\n }\r\n this.JourneyType(journeyType);\r\n this.VehicleType(api.vehicleType);\r\n this.Designation(api.designation);\r\n this.OccupancyPercent(\r\n isNumber(api.occupancyPercent) ? api.occupancyPercent : null\r\n );\r\n }\r\n}\r\n\r\nclass Call {\r\n constructor(row: Row, model: Model) {\r\n this.row = row;\r\n this.model = model;\r\n }\r\n\r\n row: Row;\r\n model: Model;\r\n Key = ko.observable(\"\");\r\n\r\n // current viewed/focused forecast - now always departure, future maybe arrival\r\n CurrentForecast = ko.pureComputed(() => {\r\n return this.Departure();\r\n });\r\n Arrival = ko.observable(null);\r\n Departure = ko.observable(null);\r\n\r\n update(api: any) {\r\n this.Key(api.key);\r\n\r\n if (!api.arrival) {\r\n this.Arrival(null);\r\n } else {\r\n let fc = this.Arrival();\r\n if (fc == null) {\r\n fc = new Forecast(this);\r\n fc.ForecastType(\"arrival\");\r\n this.Arrival(fc);\r\n }\r\n fc.update(api.arrival);\r\n }\r\n\r\n if (!api.departure) {\r\n this.Departure(null);\r\n } else {\r\n let fc = this.Departure();\r\n if (fc == null) {\r\n fc = new Forecast(this);\r\n fc.ForecastType(\"departure\");\r\n this.Departure(fc);\r\n }\r\n fc.update(api.departure);\r\n }\r\n }\r\n}\r\n\r\nclass Row {\r\n constructor(id: number, model: Model) {\r\n this.Id = id;\r\n this.model = model;\r\n }\r\n\r\n Id: number;\r\n model: Model;\r\n\r\n Calls = ko.observableArray([]);\r\n\r\n NextCall = this.GetCall(0);\r\n AfterCall = this.GetCall(1);\r\n\r\n getRowDisturbances = ko.pureComputed(() => {\r\n let messages = [];\r\n const NextCall = this.GetCall(0);\r\n const AfterCall = this.GetCall(1);\r\n if (!NextCall && !AfterCall) {\r\n return messages;\r\n }\r\n\r\n messages = this.model.viewModel\r\n .messages()\r\n .filter((x) => x.AffectedCalls().length > 0);\r\n \r\n messages = messages.filter(\r\n (x) =>\r\n x.AffectedCalls().includes(NextCall()?.Key()) ||\r\n x.AffectedCalls().includes(AfterCall()?.Key())\r\n );\r\n\r\n\r\n const TotalIndexes = this.model.viewModel\r\n .calls()\r\n .reduce((total, x) => total + x.Calls().length, 0);\r\n\r\n if (TotalIndexes != 1) {\r\n messages = messages.filter(\r\n (x) => x.AffectedCalls().length !== TotalIndexes\r\n );\r\n }\r\n\r\n return messages;\r\n });\r\n\r\n getDisturbanceColor = (callIndex) => {\r\n const call = this.GetCall(callIndex);\r\n if (!call) {\r\n return \"\";\r\n }\r\n \r\n const messages = this.model.viewModel\r\n .messages()\r\n .filter(\r\n (x) =>\r\n x.AffectedCalls().length > 0 &&\r\n x.AffectedCalls().includes(call()?.Key())\r\n );\r\n \r\n const TotalIndexes = this.model.viewModel\r\n .calls()\r\n .reduce((total, x) => total + x.Calls().length, 0);\r\n \r\n const allIndexesAffected = messages.every(message =>\r\n message.AffectedCalls().length === TotalIndexes\r\n );\r\n \r\n return messages.length > 0 && !allIndexesAffected\r\n ? \"disturbance-color center-text-override rounded-corners bold\"\r\n : \"\";\r\n };\r\n \r\n getNextDisturbanceColors = ko.pureComputed(() => {\r\n return this.getDisturbanceColor(0);\r\n });\r\n\r\n getAfterDisturbanceColors = ko.pureComputed(() => {\r\n return this.getDisturbanceColor(1);\r\n });\r\n\r\n public GetCall(index: number): ko.PureComputed {\r\n return ko.pureComputed(() => {\r\n return this.Calls()[index];\r\n }, this);\r\n }\r\n\r\n Next = ko.observable(\"\");\r\n NextHhMm = ko.observable(\"\");\r\n After = ko.observable(\"\");\r\n AfterHhMm = ko.observable(\"\");\r\n\r\n RowLabel = ko.pureComputed(() => {\r\n switch (this.model.config.rowLabel) {\r\n case \"Line\":\r\n return this.Line();\r\n case \"Journey\":\r\n return this.Journey();\r\n }\r\n return \"\";\r\n });\r\n\r\n CallId = ko.observable(\"\");\r\n RouteId = ko.observable(0);\r\n JourneyId = ko.observable(0);\r\n Journey = ko.observable(\"\");\r\n Line = ko.observable(\"\");\r\n LineAppearance = ko.observable(new Appearance());\r\n Dest = ko.observable(\"\");\r\n Subdest = ko.observable(\"\");\r\n SubdestText = ko.pureComputed(() => {\r\n const call = this.NextCall();\r\n if (!call) {\r\n return this.Subdest();\r\n }\r\n const forecast = call.CurrentForecast();\r\n if (!forecast) {\r\n return this.Subdest();\r\n }\r\n\r\n const state = this.model.viewModel.frameStateMap.get(\r\n FrameSourceType.Destination\r\n );\r\n if (state == null) {\r\n return this.Subdest();\r\n }\r\n\r\n const frame = state.frame();\r\n if (frame == null) {\r\n return this.Subdest();\r\n }\r\n\r\n const frameType: DestinationFrameType =\r\n DestinationFrameTypeMap[frame.template.toLowerCase()];\r\n const isReinforcement = forecast.JourneyType() == JourneyType.Extra;\r\n let textReinforcement = null;\r\n if (isReinforcement) {\r\n textReinforcement = this.model.translationModel.getTranslation(\r\n \"textReinforcement\",\r\n { row: this }\r\n )();\r\n }\r\n\r\n switch (frameType) {\r\n case DestinationFrameType.Reinforcement:\r\n if (isReinforcement) {\r\n return textReinforcement;\r\n }\r\n case DestinationFrameType.Default:\r\n default:\r\n return this.Subdest() || textReinforcement;\r\n break;\r\n }\r\n });\r\n\r\n NextWheelchairAdapted = ko.observable(false);\r\n AfterWheelchairAdapted = ko.observable(false);\r\n\r\n NextRealtime = ko.observable(false);\r\n NextAttr = ko.computed(() => {\r\n return this.NextWheelchairAdapted() || this.NextRealtime();\r\n });\r\n\r\n NextAttrImgSrc = ko.pureComputed(() => {\r\n if (this.NextWheelchairAdapted()) {\r\n return this.model.viewModel.iconWheelchair();\r\n } else if (this.NextRealtime()) {\r\n return this.model.viewModel.iconRealtime();\r\n }\r\n return this.model.viewModel.iconHash();\r\n });\r\n\r\n NextCss = ko.pureComputed(() => {\r\n let qualityCss = this.NextForecastQualityCss();\r\n return qualityCss.trim();\r\n });\r\n\r\n NextForecastQualityCss = ko.pureComputed(() => {\r\n let css = \"\";\r\n if (this.IsNextCancelled()) {\r\n css = \"fc-quality-cancelled\";\r\n } else if (this.NextRealtime()) {\r\n css = \"fc-quality-realtime\";\r\n } else if (this.Next()) {\r\n css = \"fc-quality-timetable\";\r\n }\r\n if (!css) {\r\n css = \"fc-quality-nodata\";\r\n }\r\n\r\n return css;\r\n });\r\n\r\n NextDeparture = ko.observable(moment(0));\r\n IsNextCancelled = ko.observable(false);\r\n\r\n IsAfterRealtime = ko.observable(false);\r\n AfterDeparture = ko.observable(null);\r\n CreatedTime = ko.observable(moment(0));\r\n IsAfterCancelled = ko.observable(false);\r\n\r\n AfterAttr = ko.computed(() => {\r\n return this.AfterWheelchairAdapted() || this.IsAfterRealtime();\r\n });\r\n\r\n AfterAttrImgSrc = ko.pureComputed(() => {\r\n if (this.AfterWheelchairAdapted()) {\r\n return this.model.viewModel.iconWheelchair();\r\n } else if (this.IsAfterRealtime()) {\r\n return this.model.viewModel.iconRealtime();\r\n }\r\n return this.model.viewModel.iconHash();\r\n });\r\n\r\n AfterCss = ko.pureComputed(() => {\r\n let qualityCss = this.AfterForecastQualityCss();\r\n return qualityCss.trim();\r\n });\r\n\r\n AfterForecastQualityCss = ko.pureComputed(() => {\r\n let css = \"\";\r\n if (this.IsAfterCancelled()) {\r\n css = \"fc-quality-cancelled\";\r\n } else if (this.IsAfterRealtime()) {\r\n css = \"fc-quality-realtime\";\r\n } else if (this.After()) {\r\n css = \"fc-quality-timetable\";\r\n }\r\n if (!css) {\r\n css = \"fc-quality-nodata\";\r\n }\r\n\r\n return css;\r\n });\r\n\r\n private getOccupancyPercentage(callType: \"NextCall\" | \"AfterCall\") {\r\n const call = this[callType]();\r\n if (!call) {\r\n return null;\r\n }\r\n const forecast = call.CurrentForecast();\r\n if (!forecast) {\r\n return null;\r\n }\r\n return forecast.OccupancyPercent();\r\n }\r\n\r\n // Utility function to get occupancy configuration based on the percentage\r\n private getOccupancyConfiguration(occupancy: number) {\r\n if (!isNumber(occupancy)) {\r\n return null;\r\n }\r\n\r\n let level: OccupancyLevel = null;\r\n for (let l of this.model.config.occupancy.levels) {\r\n let match = true;\r\n if (isNumber(l.from)) {\r\n match = match && l.from <= occupancy;\r\n }\r\n if (isNumber(l.to)) {\r\n match = match && occupancy <= l.to;\r\n }\r\n if (match) {\r\n level = l;\r\n break;\r\n }\r\n }\r\n return level;\r\n }\r\n\r\n // Utility function to get image or alt text source based on configuration\r\n private getResourceSrc(\r\n configKey: string,\r\n resourceType: \"imageKey\" | \"labelKey\"\r\n ) {\r\n const config = this[configKey]();\r\n if (!config) {\r\n return null;\r\n }\r\n\r\n if (resourceType === \"imageKey\") {\r\n return this.model.resourceModel.getResource(config.imageKey)();\r\n } else if (resourceType === \"labelKey\") {\r\n return this.model.translationModel.getTranslation(config.labelKey)();\r\n }\r\n }\r\n\r\n // Computed observables for occupancy percentages\r\n OccupancyPercentageNext = ko.pureComputed(() =>\r\n this.getOccupancyPercentage(\"NextCall\")\r\n );\r\n OccupancyPercentageAfter = ko.pureComputed(() =>\r\n this.getOccupancyPercentage(\"AfterCall\")\r\n );\r\n\r\n // Computed observables for occupancy configurations\r\n OccupancyConfiguration = ko.pureComputed(() =>\r\n this.getOccupancyConfiguration(this.OccupancyPercentageNext())\r\n );\r\n OccupancyConfigurationAfter = ko.pureComputed(() =>\r\n this.getOccupancyConfiguration(this.OccupancyPercentageAfter())\r\n );\r\n\r\n // Computed observables for image sources\r\n OccupancyImgSrc = ko.pureComputed(() =>\r\n this.getResourceSrc(\"OccupancyConfiguration\", \"imageKey\")\r\n );\r\n OccupancyAfterImgSrc = ko.pureComputed(() =>\r\n this.getResourceSrc(\"OccupancyConfigurationAfter\", \"imageKey\")\r\n );\r\n\r\n // Computed observables for showing occupancy images\r\n ShowOccupancy = ko.pureComputed(() => !!this.OccupancyImgSrc());\r\n ShowOccupancyAfter = ko.pureComputed(() => !!this.OccupancyAfterImgSrc());\r\n\r\n // Computed observables for image alt texts\r\n OccupancyImgAlt = ko.pureComputed(() =>\r\n this.getResourceSrc(\"OccupancyConfiguration\", \"labelKey\")\r\n );\r\n OccupancyAfterImgAlt = ko.pureComputed(() =>\r\n this.getResourceSrc(\"OccupancyConfigurationAfter\", \"labelKey\")\r\n );\r\n\r\n OccupancyTooltipTitle = ko.computed<(this: Element) => string | Element>(\r\n () => {\r\n if (!this.ShowOccupancy()) return null;\r\n if (this.model.viewModel.size() !== SizeMode.Normal) {\r\n return null;\r\n }\r\n\r\n const creator = function (this: Element): string | Element {\r\n // const $element = $(this);\r\n // const tooltipData = $element.data(\"bs.tooltip\");\r\n // console.log(tooltipData);\r\n const data = ko.dataFor(this);\r\n if (!data) return null;\r\n return data.model.viewModel.tooltip(this);\r\n };\r\n\r\n return creator;\r\n }\r\n );\r\n\r\n IsDirty = ko.observable(false);\r\n IsExpanded = ko.observable(false);\r\n StopAreaNumber = ko.observable(\"\");\r\n NextStopAreaNumber = ko.observable(\"\");\r\n}\r\n\r\nclass Bootstrap {\r\n configLoaded = false;\r\n pageLoaded = false;\r\n profileLoaded = false;\r\n themeLoaded = false;\r\n\r\n callbacks: { (b: Bootstrap): boolean }[] = [];\r\n\r\n onUpdate() {\r\n for (let i = 0; i < this.callbacks.length; i++) {\r\n if (this.callbacks[i](this)) {\r\n this.callbacks.splice(i--, 1);\r\n }\r\n }\r\n\r\n if (this.callbacks.length === 0) {\r\n console.log(\"startup complete\");\r\n }\r\n }\r\n\r\n addOnUpdate(callback: { (b: Bootstrap): boolean }) {\r\n this.callbacks.push(callback);\r\n this.onUpdate();\r\n }\r\n}\r\n\r\nclass Configuration {\r\n api: ConfigurationApi = new ConfigurationApi();\r\n locale: any = null;\r\n formatClock: string = \"\";\r\n am_pm: boolean = true;\r\n useNonForcastIndicator: boolean = true;\r\n formatAbsoluteTime: string = \"\";\r\n formatRelativeTime: string = \"\";\r\n formatForecastTime: string[] = [];\r\n\r\n resultTable: ConfigurationResultTable = new ConfigurationResultTable();\r\n map: ConfigurationMap = new ConfigurationMap();\r\n frames: ConfigurationFrames = new ConfigurationFrames();\r\n occupancy: ConfigurationOccupancy = new ConfigurationOccupancy();\r\n\r\n rowGrouping: any[] = []; // How to group calls into rows\r\n rowOrder: any[] = []; // How to order rows\r\n rowData: any[] = []; // Additional row data needed\r\n\r\n rowLabel: string = \"Line\";\r\n}\r\n\r\nclass ConfigurationApi {\r\n baseUri: string = \"\";\r\n}\r\n\r\nclass ConfigurationMap {\r\n centerLat: number = 0;\r\n centerLon: number = 0;\r\n // same defaults as in default.json\r\n maxCount: number = 100;\r\n maxDistance: number = 750;\r\n zoom: number = null;\r\n minZoom: number = null;\r\n tilesUrl: string = \"\";\r\n tilesOptions: any = {};\r\n}\r\n\r\nclass ConfigurationResultTable {\r\n showOccupancy = ko.observable(true);\r\n showExpander = ko.observable(true);\r\n showStopAreaNumber = ko.observable(false);\r\n}\r\n\r\nclass ConfigurationFrames {\r\n frameMap = new Map();\r\n\r\n static parse(config: any): ConfigurationFrames {\r\n const result = new ConfigurationFrames();\r\n if (!config) {\r\n return result;\r\n }\r\n\r\n if (config.destination) {\r\n const frames = [];\r\n let index = 0;\r\n for (let c of config.destination) {\r\n var f = Frame.parse(c);\r\n f.index = index++;\r\n frames.push(f);\r\n }\r\n result.frameMap.set(FrameSourceType.Destination, frames);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nclass ConfigurationOccupancy {\r\n levels: OccupancyLevel[] = [];\r\n\r\n static parse(config: any): ConfigurationOccupancy {\r\n const result = new ConfigurationOccupancy();\r\n if (!config) {\r\n return result;\r\n }\r\n\r\n if (config.levels) {\r\n const levels = [];\r\n let index = 0;\r\n for (let c of config.levels) {\r\n var l = OccupancyLevel.parse(c);\r\n l.index = index++;\r\n levels.push(l);\r\n }\r\n result.levels = levels;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nclass OccupancyLevel {\r\n index: number = 1;\r\n from: number = null;\r\n to: number = null;\r\n imageKey: string = \"\";\r\n labelKey: string = \"\";\r\n descriptionKey: string = \"\";\r\n\r\n static parse(config: any): OccupancyLevel {\r\n if (!config) {\r\n return null;\r\n }\r\n\r\n const occupancy = new OccupancyLevel();\r\n occupancy.from = config.from;\r\n occupancy.to = config.to;\r\n occupancy.imageKey = config.image;\r\n occupancy.labelKey = config.label;\r\n occupancy.descriptionKey = config.description;\r\n return occupancy;\r\n }\r\n}\r\n\r\nclass Frame {\r\n index: number = 1;\r\n seconds: number = 1;\r\n template: string = \"default\";\r\n\r\n static parse(config: any): Frame {\r\n if (!config) {\r\n return null;\r\n }\r\n\r\n const frame = new Frame();\r\n frame.seconds = config.seconds;\r\n frame.template = config.template;\r\n return frame;\r\n }\r\n}\r\n\r\nenum VehicleMarkerIconType {\r\n Normal,\r\n Detailed,\r\n}\r\n\r\nclass VehicleLocationMarker {\r\n id: string = \"\";\r\n title: string = \"\";\r\n latlng: L.LatLng = null;\r\n marker: L.Marker = null;\r\n iconDetailed: L.DivIcon = null;\r\n iconNormal: L.Icon = null;\r\n vehicleDiv: HTMLDivElement;\r\n vehicleImg: HTMLImageElement;\r\n vehicleArrowImg: HTMLImageElement;\r\n iconType = VehicleMarkerIconType.Normal;\r\n heading: number | null = null;\r\n\r\n public updatePosition(position: PositionMap) {\r\n this.latlng = position.location().toLeaflet();\r\n this.marker.setLatLng(this.latlng);\r\n }\r\n\r\n public updateHeading(position: PositionMap) {\r\n if (position && position.heading() != null) {\r\n this.heading = this.rotateHeading(this.heading, position.heading());\r\n this.vehicleArrowImg.style.display = \"block\";\r\n this.vehicleArrowImg.style.transform =\r\n \"rotate(\" + Math.round(this.heading) + \"deg)\";\r\n } else {\r\n this.vehicleArrowImg.style.display = \"none\";\r\n this.heading = null;\r\n }\r\n }\r\n\r\n private rotateHeading(\r\n prevHeading: number | null,\r\n nextHeading: number | null\r\n ): number {\r\n let result = nextHeading;\r\n if (nextHeading == null || isNaN(nextHeading)) return result;\r\n nextHeading = Math.round(nextHeading);\r\n if (prevHeading == null || isNaN(prevHeading)) return result;\r\n\r\n let div = Math.floor(prevHeading / 360);\r\n let rem = prevHeading % 360;\r\n if (rem < 0) {\r\n rem += 360;\r\n }\r\n if (rem - nextHeading > 180) {\r\n result = (div + 1) * 360 + nextHeading;\r\n } else if (nextHeading - rem > 180) {\r\n result = (div - 1) * 360 + nextHeading;\r\n } else {\r\n result = (div + 0) * 360 + nextHeading;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nclass MapRoute {\r\n polyline: L.Polyline = null;\r\n polylineDirection: L.PolylineDecorator = null;\r\n\r\n addTo(map: L.Map): void {\r\n this.polyline.addTo(map);\r\n this.polylineDirection.addTo(map);\r\n }\r\n\r\n removeFrom(map: L.Map): void {\r\n this.polyline.removeFrom(map);\r\n this.polylineDirection.removeFrom(map);\r\n }\r\n\r\n getBounds(): L.LatLngBounds {\r\n return this.polyline.getBounds();\r\n }\r\n}\r\n\r\nclass SearchParameters {\r\n fromStopAreaQuery = ko.observable(\"\");\r\n toStopAreaQuery = ko.observable(\"\");\r\n lineId = ko.observable(0);\r\n directionId = ko.observable(0);\r\n callLineDest = ko.observable(\"\");\r\n\r\n hasData = ko.pureComputed(() => {\r\n let data = false;\r\n data = data || !!this.fromStopAreaQuery();\r\n data = data || !!this.toStopAreaQuery();\r\n data = data || !!this.lineId();\r\n data = data || !!this.directionId();\r\n data = data || !!this.callLineDest();\r\n\r\n return !!data;\r\n });\r\n\r\n updateUri() {\r\n let params: any = {};\r\n if (this.fromStopAreaQuery()) {\r\n params.f = this.fromStopAreaQuery();\r\n }\r\n if (this.toStopAreaQuery()) {\r\n params.t = this.toStopAreaQuery();\r\n }\r\n if (this.lineId()) {\r\n params.l = this.lineId();\r\n }\r\n if (this.directionId()) {\r\n params.d = this.directionId();\r\n }\r\n if (this.callLineDest()) {\r\n params.c = this.callLineDest();\r\n }\r\n\r\n let path = \"#\" + $.param(params);\r\n\r\n //X $.pathchange.changeTo(path);\r\n window.history.pushState(null, null, path);\r\n $(window).trigger(\"pathchange\");\r\n }\r\n\r\n setFromUri() {\r\n let params = getHashParameters(window.location.hash);\r\n\r\n if (params.hasOwnProperty(\"f\")) {\r\n this.fromStopAreaQuery(params.f);\r\n }\r\n if (params.hasOwnProperty(\"t\")) {\r\n this.toStopAreaQuery(params.t);\r\n }\r\n if (params.hasOwnProperty(\"l\")) {\r\n this.lineId(params.l);\r\n }\r\n if (params.hasOwnProperty(\"d\")) {\r\n this.directionId(params.d);\r\n }\r\n if (params.hasOwnProperty(\"c\")) {\r\n this.callLineDest(params.c);\r\n }\r\n }\r\n}\r\n\r\nvar CloseMapControl = L.Control.extend({\r\n onAdd(map: L.Map): HTMLElement {\r\n var button = L.DomUtil.create(\"a\");\r\n button.textContent = \"X\";\r\n button.style.cursor = \"pointer\";\r\n return button;\r\n },\r\n onRemove(map: L.Map) {},\r\n});\r\n\r\nvar closeMapControl = function (options) {\r\n return new (CloseMapControl as any)(options);\r\n};\r\n\r\nenum FrameSourceType {\r\n Destination,\r\n}\r\n\r\nenum DestinationFrameType {\r\n Default,\r\n Reinforcement,\r\n}\r\n\r\n// Lowercase map\r\nconst DestinationFrameTypeMap: { [lowercase: string]: DestinationFrameType } =\r\n Object.values(DestinationFrameType)\r\n .filter((value) => typeof value === \"string\")\r\n .reduce((map, key) => {\r\n map[key.toString().toLowerCase()] = DestinationFrameType[key];\r\n return map;\r\n }, {});\r\n\r\nclass ViewModelFrameState {\r\n startTick: number | null = null;\r\n frame = ko.observable(null);\r\n}\r\n\r\nclass ResourceModel {\r\n private resources = ko.observable(null);\r\n\r\n public setSource(resources: any) {\r\n this.resources(resources);\r\n }\r\n\r\n public getResource(key: string, options: any = null): ko.PureComputed {\r\n const resource = ko.pureComputed(() => {\r\n return this.internalGetTranslation(this.resources(), key, options);\r\n });\r\n return resource;\r\n }\r\n\r\n private internalGetTranslation(\r\n source: any,\r\n key: string,\r\n options: any\r\n ): string {\r\n let resource = null;\r\n if (!key) {\r\n return null;\r\n }\r\n\r\n if (!resource) {\r\n if (source[key]) {\r\n resource = source[key];\r\n }\r\n }\r\n\r\n return resource;\r\n }\r\n}\r\n\r\nclass TranslationModel {\r\n private translations = ko.observable(null);\r\n\r\n public setSource(translations: any) {\r\n this.translations(translations);\r\n }\r\n\r\n public getTranslation(\r\n translationKey: string,\r\n options: any = null\r\n ): ko.PureComputed {\r\n const translation = ko.pureComputed(() => {\r\n return this.internalGetTranslation(\r\n this.translations(),\r\n translationKey,\r\n options\r\n );\r\n });\r\n return translation;\r\n }\r\n\r\n private internalGetTranslation(\r\n translationSource: any,\r\n translationKey: string,\r\n options: any\r\n ): string {\r\n let translation = null;\r\n if (!translationKey) {\r\n return null;\r\n }\r\n\r\n if (options) {\r\n if (\r\n !translation &&\r\n options.forecast &&\r\n options.forecast instanceof Forecast\r\n ) {\r\n const fc = options.forecast;\r\n if (translationSource.VehicleType) {\r\n let vehicleType = fc.VehicleType();\r\n if (\r\n translationSource.VehicleType[vehicleType] &&\r\n translationSource.VehicleType[vehicleType][translationKey]\r\n ) {\r\n translation =\r\n translationSource.VehicleType[vehicleType][translationKey];\r\n }\r\n }\r\n }\r\n\r\n if (!translation && options.row && options.row instanceof Row) {\r\n const row = options.row;\r\n if (translationSource.VehicleType) {\r\n let vehicleType = row.NextCall().CurrentForecast().VehicleType();\r\n if (\r\n translationSource.VehicleType[vehicleType] &&\r\n translationSource.VehicleType[vehicleType][translationKey]\r\n ) {\r\n translation =\r\n translationSource.VehicleType[vehicleType][translationKey];\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!translation) {\r\n if (translationSource[translationKey]) {\r\n translation = translationSource[translationKey];\r\n }\r\n }\r\n\r\n return translation;\r\n }\r\n}\r\n\r\nclass ViewModel {\r\n constructor(model: Model) {\r\n this.model = model;\r\n (ko as any).observableArray.fn[\"insertAt\"] = function (index, value) {\r\n this.valueWillMutate();\r\n this.splice(index, 0, value);\r\n this.valueHasMutated();\r\n return this;\r\n };\r\n\r\n (ko as any).observableArray.fn[\"removeAt\"] = function (index) {\r\n this.valueWillMutate();\r\n this.splice(index, 1);\r\n this.valueHasMutated();\r\n return this;\r\n };\r\n\r\n this.selectedLine.subscribe((value) => {\r\n this.directions([]);\r\n this.stopPoints([]);\r\n\r\n if (typeof value !== \"undefined\") {\r\n if (this.useDirection()) {\r\n this.getDirections();\r\n } else {\r\n this.getStopPoints();\r\n }\r\n }\r\n });\r\n\r\n this.selectedDirection.subscribe((value) => {\r\n if (typeof value !== \"undefined\") {\r\n this.getStopPoints();\r\n }\r\n });\r\n }\r\n\r\n start() {\r\n this.getConfigOptions();\r\n }\r\n\r\n size = ko.observable(SizeMode.Normal);\r\n totalTicks: number = 0;\r\n frameStateMap = new Map();\r\n elapsedSeconds = 0;\r\n TIMEOUT_INTERVAL_SECONDS = 15;\r\n\r\n selectedRow: Row = null;\r\n selectedMapRoute: MapRoute = null;\r\n systemDateTimeOffset = 0;\r\n mqListMedium = window.matchMedia(\"(min-width: 768px)\");\r\n mqListLarge = window.matchMedia(\"(min-width: 992px)\");\r\n\r\n getNow(this: ViewModel): Date {\r\n return new Date(Date.now() + this.systemDateTimeOffset);\r\n }\r\n\r\n model: Model;\r\n showVehicleLocations = false;\r\n showAllStopsCancelledText = ko.observable(false);\r\n searchMap: L.Map = null;\r\n searchMapStopAreaMarkers = [];\r\n resultMap: L.Map = null;\r\n currentPosMarker: L.Marker = null;\r\n vehicleMarker: VehicleLocationMarker = null;\r\n\r\n searchParameters: ko.Observable = ko.observable(null);\r\n\r\n isLoadingResultList = ko.observable(false);\r\n\r\n year = new Date().getFullYear();\r\n calls = ko.observableArray();\r\n header = ko.pureComputed(() => {\r\n let result = \"\";\r\n if (this.searchParameters() && this.searchParameters().hasData()) {\r\n result = this.resultStopArea() ? this.resultStopArea().text() : \"\";\r\n } else {\r\n result = this.textPleaseDefineYourSearch();\r\n }\r\n return result;\r\n });\r\n messages = ko.observableArray();\r\n\r\n messagesWithoutAffected = ko.pureComputed(() => {\r\n if (this.useNewTable()) {\r\n const TotalIndexes = this.calls().reduce(\r\n (total, x) => total + x.Calls().length,\r\n 0\r\n );\r\n if (TotalIndexes == 1) {\r\n return this.messages().filter(\r\n (x) => (x.isInfo() && x.AffectedCalls().length == 0)\r\n );\r\n }\r\n\r\n return this.messages().filter(\r\n (x) => x.AffectedCalls().length === TotalIndexes || (x.isInfo() && x.AffectedCalls().length == 0)\r\n );\r\n } else {\r\n return this.messages();\r\n }\r\n });\r\n\r\n resultStopArea = ko.observable(null);\r\n resultMapStopAreaMarker = ko.observable(null);\r\n\r\n // Select by route, direction and stop point.\r\n lines = ko.observableArray();\r\n selectedLine = ko.observable();\r\n directions = ko.observableArray();\r\n selectedDirection = ko.observable();\r\n stopPoints = ko.observableArray([]);\r\n selectedStopPoint = ko.observable();\r\n useDirection = ko.observable(false);\r\n useNewTable = ko.observable(false);\r\n displayRowMapExpanded = ko.observable(false);\r\n hideRouteStopSelection = ko.observable(false);\r\n isCallListFocused = ko.observable(false);\r\n //stopNameFocus = () => $('#StopName').val('');\r\n\r\n top_pushpin = ko.observable(\"\");\r\n logo = ko.observable(\"\");\r\n logo_top = ko.observable(\"\");\r\n hrefCustomer = ko.observable(\"\");\r\n iconWheelchair = ko.observable(\"\");\r\n iconRealtime = ko.observable(\"\");\r\n iconHash = ko.observable(\"#\");\r\n\r\n ariaHasSuggestionPopup = ko.observable(false);\r\n\r\n tableDetailsShowNext = ko.observable(true);\r\n tableDetailsShowAfter = ko.observable(true);\r\n tableDetailsShowMap = ko.observable(true);\r\n tableDetailsShowOccupancyLegend = ko.observable(true);\r\n\r\n textRowLabelHeader = ko.pureComputed(() => {\r\n switch (this.model.config.rowLabel) {\r\n case \"Line\":\r\n return this.textLine();\r\n case \"Journey\":\r\n return this.textJourney();\r\n }\r\n return \"\";\r\n });\r\n\r\n clearStopName() {\r\n $(\"#StopName\").val(\"\");\r\n }\r\n\r\n textAllStopsCancelledString = ko.observable(\"\");\r\n textSelectYourStop = ko.observable(\"\");\r\n textDoYouKnowStop = ko.observable(\"\");\r\n textUseGPS = ko.observable(\"\");\r\n textStopNameOrNumber = ko.observable(\"\");\r\n textChooseLineStop = ko.observable(\"\");\r\n textChooseLineDirectionStop = ko.observable(\"\");\r\n textGetChooseHeader = ko.pureComputed(() => {\r\n if (this.useDirection()) return this.textChooseLineDirectionStop();\r\n return this.textChooseLineStop();\r\n });\r\n textDirection = ko.observable(\"\");\r\n textDestination = ko.observable(\"\");\r\n textOccupancy = ko.observable(\"\");\r\n textLine = ko.observable(\"\");\r\n textJourney = ko.observable(\"\");\r\n textStop = ko.observable(\"\");\r\n textSelectLine = ko.observable(\"\");\r\n textSelectDirection = ko.observable(\"\");\r\n textLoadingDirection = ko.observable(\"\");\r\n textSelectStop = ko.observable(\"\");\r\n textLoadingStop = ko.observable(\"\");\r\n textNext = ko.observable(\"\");\r\n textStopAreaNumber = ko.observable(\"\");\r\n textNextDepartureIn = ko.observable(\"\");\r\n textOr = ko.observable(\"\");\r\n textAfter = ko.observable(\"\");\r\n textMin = ko.observable(\"\");\r\n textViewLiveMap = ko.observable(\"\");\r\n textCopyright = ko.observable(\"\");\r\n htmlPoweredBy = ko.observable(\"\");\r\n textNoDataFound = ko.observable(\"\");\r\n textLiveBusTimes = ko.observable(\"\");\r\n textCancelled = ko.observable(\"\");\r\n textNoFollowingDeparture = ko.observable(\"\");\r\n textCa = ko.observable(\"\");\r\n textNow = ko.observable(\"\");\r\n textFailedGpsLocation = ko.observable(\"\");\r\n textAriaLabelGps = ko.observable(\"\");\r\n textAriaLabelSearch = ko.observable(\"\");\r\n textAriaOr = ko.observable(\"\");\r\n textPleaseDefineYourSearch = ko.observable(\"\");\r\n\r\n vehicleLocationMarkers: VehicleLocationMarker[] = [];\r\n secToLocationUpdate = -1;\r\n\r\n findKoCall(rowId): Row {\r\n var length = this.calls().length;\r\n for (var i = 0; i < length; i++) {\r\n if (this.calls()[i].Id === rowId) {\r\n return this.calls()[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n purgeCalls() {\r\n for (var i = this.calls().length - 1; 0 <= i; i--) {\r\n let call = this.calls()[i];\r\n if (!call.IsDirty()) {\r\n (this.calls as any).removeAt(i);\r\n }\r\n call.IsDirty(false);\r\n }\r\n }\r\n\r\n getDirections() {\r\n $(\"#SelectedStopPoint\").unwait();\r\n $(\"#SelectedDirection\").wait();\r\n $(\"#SelectedDirection\").attr(\"aria-busy\", \"true\");\r\n $(\"#SelectedDirection\")\r\n .find(\"option:first-child\")\r\n .text(this.textLoadingDirection());\r\n\r\n let data = { lineId: this.selectedLine().id() };\r\n $.ajax({\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetDirections\",\r\n data: data,\r\n dataType: \"json\",\r\n success: (response) => {\r\n let directions = response.map(function (api) {\r\n let dir = new Direction();\r\n dir.update(api);\r\n return dir;\r\n });\r\n this.directions(directions);\r\n $(\"#SelectedDirection\").unwait();\r\n $(\"#SelectedDirection\")\r\n .find(\"option:first-child\")\r\n .text(this.textSelectDirection());\r\n $(\"#SelectedDirection\").attr(\"aria-busy\", \"false\");\r\n },\r\n error: (response) => {\r\n console.error(\"Failed: GetDirections\");\r\n $(\"#SelectedDirection\").unwait();\r\n $(\"#SelectedDirection\")\r\n .find(\"option:first-child\")\r\n .text(this.textSelectDirection());\r\n $(\"#SelectedDirection\").attr(\"aria-busy\", \"false\");\r\n },\r\n });\r\n }\r\n\r\n getStopPoints() {\r\n this.stopPoints([]);\r\n\r\n $(\"#SelectedStopPoint\").wait();\r\n $(\"#SelectedStopPoint\").attr(\"aria-busy\", \"true\");\r\n $(\"#SelectedStopPoint\")\r\n .find(\"option:first-child\")\r\n .text(this.textLoadingStop());\r\n\r\n let data = {\r\n lineId: this.selectedLine().id(),\r\n directionId: this.useDirection() ? this.selectedDirection().id() : null,\r\n };\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetStopAreas\",\r\n data: JSON.stringify(data),\r\n dataType: \"json\",\r\n success: (response) => {\r\n let areas = response.map(function (api) {\r\n let area = new StopArea();\r\n area.update(api);\r\n return area;\r\n });\r\n this.stopPoints(areas);\r\n $(\"#SelectedStopPoint\").unwait();\r\n $(\"#SelectedStopPoint\")\r\n .find(\"option:first-child\")\r\n .text(this.textSelectStop());\r\n $(\"#SelectedStopPoint\").attr(\"aria-busy\", \"false\");\r\n },\r\n error: (response) => {\r\n console.error(\"Failed: GetStopAreas\");\r\n $(\"#SelectedStopPoint\").unwait();\r\n $(\"#SelectedStopPoint\")\r\n .find(\"option:first-child\")\r\n .text(this.textSelectStop());\r\n $(\"#SelectedStopPoint\").attr(\"aria-busy\", \"false\");\r\n },\r\n });\r\n }\r\n\r\n //\r\n // self.selectedStopPoint.subscribe(function (value) {\r\n // if (typeof value !== 'undefined'); else;\r\n // });\r\n\r\n selectRow = (call: Row, evt: any): boolean => {\r\n this.selectedRow = call;\r\n if (this.resultMap) {\r\n L.DomUtil.remove(this.resultMap.getContainer());\r\n this.resultMap.remove();\r\n this.resultMap = undefined;\r\n }\r\n\r\n this.searchParameters().callLineDest(\"\");\r\n const length = this.calls().length;\r\n for (var i = 0; i < length; i++) {\r\n var c = this.calls()[i];\r\n if (c.Id !== call.Id) {\r\n c.IsExpanded(false);\r\n } else {\r\n if (this.useNewTable()) {\r\n this.toggleCollapse(call, i);\r\n }\r\n\r\n if (c.IsExpanded()) {\r\n if (this.displayRowMapExpanded()) {\r\n this.toggleShowOnMap(call, i);\r\n this.searchParameters().callLineDest(\r\n call.Line() + \"-\" + call.Dest()\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.searchParameters().updateUri();\r\n this.callresize();\r\n return true;\r\n };\r\n\r\n toggleCollapse(row: Row, index) {\r\n this.closeAllToggles();\r\n // Optionally toggle the aria-expanded attribute for accessibility\r\n row.IsExpanded(!row.IsExpanded());\r\n\r\n // Toggle display of the content\r\n const collapseContent = document.querySelector(\r\n \"#collapse-\" + index\r\n ) as HTMLElement;\r\n if (row.IsExpanded()) {\r\n collapseContent.style.display = \"block\";\r\n } else {\r\n collapseContent.style.display = \"none\";\r\n }\r\n }\r\n\r\n closeAllToggles() {\r\n const allAccordions = document.getElementsByClassName(\r\n \"accordion-content\"\r\n ) as HTMLCollectionOf;\r\n\r\n for (let i = 0; i < allAccordions.length; i++) {\r\n const collapseContent = document.querySelector(\r\n \"#collapse-\" + i\r\n ) as HTMLElement;\r\n collapseContent.style.display = \"none\";\r\n\r\n const button = allAccordions[i] as HTMLButtonElement;\r\n button.ariaExpanded = \"false\";\r\n }\r\n }\r\n\r\n toggleShowOnMap(row: Row, index: number) {\r\n const isShown: boolean = !!this.resultMap;\r\n\r\n if (isShown) {\r\n this.hideRowMap(row, index);\r\n } else {\r\n this.showRowMap(row, index);\r\n }\r\n }\r\n\r\n hideRowMap(row: Row, index: number) {\r\n this.removeJourneyVehicleMarker();\r\n if (this.resultMap) {\r\n L.DomUtil.remove(this.resultMap.getContainer());\r\n this.resultMap.remove();\r\n this.resultMap = undefined;\r\n }\r\n }\r\n\r\n showRowMap(row: Row, index: number) {\r\n this.removeJourneyVehicleMarker();\r\n\r\n if (this.selectedMapRoute !== null) {\r\n if (this.resultMap) {\r\n this.selectedMapRoute.removeFrom(this.resultMap);\r\n }\r\n this.selectedMapRoute = null;\r\n }\r\n\r\n let areaMarker = this.resultMapStopAreaMarker();\r\n if (areaMarker) {\r\n if (this.resultMap) {\r\n this.resultMap.removeLayer(areaMarker);\r\n }\r\n this.resultMapStopAreaMarker(null);\r\n }\r\n\r\n let data = { routeId: row.RouteId() };\r\n $.ajax({\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetMapRoute\",\r\n data: data,\r\n dataType: \"json\",\r\n success: (response) => {\r\n // const rgb = response.lineAppearance.background;\r\n const rgb = \"#FF0000\";\r\n const latlngs = new Array(),\r\n polylineOptions = { color: rgb };\r\n\r\n for (var i in response.locations) {\r\n latlngs.push([response.locations[i].lat, response.locations[i].lon]);\r\n }\r\n\r\n if (this.resultMap) {\r\n L.DomUtil.remove(this.resultMap.getContainer());\r\n this.resultMap.remove();\r\n this.resultMap = undefined;\r\n }\r\n if (this.useNewTable()) {\r\n L.DomUtil.create(\"div\", \"\", L.DomUtil.get(\"map-\" + index)).id =\r\n \"resultmap\";\r\n } else {\r\n L.DomUtil.create(\"div\", \"\", L.DomUtil.get(\"mapold-\" + index)).id =\r\n \"resultmap\";\r\n }\r\n this.resultMap = L.map(\"resultmap\", {\r\n center: [\r\n this.model.config.map.centerLat,\r\n this.model.config.map.centerLon,\r\n ],\r\n zoom: this.model.config.map.zoom,\r\n zoomAnimation: false,\r\n fadeAnimation: false,\r\n markerZoomAnimation: false,\r\n });\r\n\r\n this.selectedMapRoute = new MapRoute();\r\n\r\n this.selectedMapRoute.polyline = L.polyline(latlngs, polylineOptions);\r\n this.selectedMapRoute.polylineDirection = L.polylineDecorator(\r\n this.selectedMapRoute.polyline,\r\n {\r\n patterns: [\r\n {\r\n offset: 50,\r\n repeat: 50,\r\n symbol: L.Symbol.arrowHead({\r\n pixelSize: 10,\r\n pathOptions: { fillOpacity: 1, weight: 0, color: rgb },\r\n }),\r\n },\r\n ],\r\n }\r\n );\r\n\r\n this.selectedMapRoute.addTo(this.resultMap);\r\n\r\n let tileLayer = this.createTileLayer();\r\n tileLayer.addTo(this.resultMap);\r\n\r\n this.resultMap.fitBounds(this.selectedMapRoute.getBounds(), {});\r\n\r\n let area = this.resultStopArea();\r\n if (area) {\r\n let latLng = area.location().toLeaflet();\r\n let marker = L.marker(latLng, {\r\n title: area.text(),\r\n icon: L.icon({\r\n iconUrl: \"assets/img/stop-icon.svg\",\r\n iconSize: [25, 41],\r\n iconAnchor: [13, 42],\r\n className: \"marker-stop\",\r\n }),\r\n }).addTo(this.resultMap);\r\n this.resultMapStopAreaMarker(marker);\r\n }\r\n\r\n if (row.NextRealtime() && this.selectedRow != null) {\r\n this.getVehicleLocation(this.selectedRow.CallId(), true);\r\n }\r\n\r\n this.callresize();\r\n },\r\n error: (response) => {\r\n console.error(\"Failed: GetMapRoute\");\r\n this.callresize();\r\n },\r\n });\r\n }\r\n\r\n getVehicleLocation(callId: string, isNew: boolean): void {\r\n $.ajax({\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetVehiclePosition\",\r\n data: { callId: callId },\r\n dataType: \"json\",\r\n success: (response) => {\r\n if (response) {\r\n const vehiclePosition = new VehiclePosition();\r\n vehiclePosition.update(response);\r\n if (isNew) {\r\n this.addJourneyVehicleMarker(vehiclePosition);\r\n } else {\r\n this.vehicleMarker\r\n ? this.updateJourneyVehicleMarker(\r\n this.vehicleMarker,\r\n vehiclePosition\r\n )\r\n : this.addJourneyVehicleMarker(vehiclePosition);\r\n }\r\n } else {\r\n this.removeJourneyVehicleMarker();\r\n }\r\n },\r\n error: function (response) {\r\n console.error(\"Failed: GetVehiclePosition\");\r\n },\r\n });\r\n }\r\n\r\n getVehicleLocations() {\r\n $.ajax({\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetVehiclePositions\",\r\n data: {},\r\n dataType: \"json\",\r\n success: (response) => {\r\n if (response) {\r\n this.searchMap\r\n .getPane(\"markerPane\")\r\n .setAttribute(\"animation\", \"true\");\r\n const vehiclePositions = _.map(response, (api) => {\r\n const vehiclePosition = new VehiclePosition();\r\n vehiclePosition.update(api);\r\n return vehiclePosition;\r\n });\r\n this.updateVehicleLocations(vehiclePositions);\r\n this.secToLocationUpdate = 3;\r\n }\r\n },\r\n error: function (response) {\r\n console.error(\"Failed: GetVehiclePositions\");\r\n },\r\n });\r\n }\r\n\r\n updateVehicleLocations(locations: VehiclePosition[]): void {\r\n const locMap = _.keyBy(locations, (o) => {\r\n return o.id();\r\n });\r\n const updatedLocations = [];\r\n const markerMap = _.keyBy(this.vehicleLocationMarkers, (o) => {\r\n return o.id;\r\n });\r\n for (let i = 0; i < this.vehicleLocationMarkers.length; i++) {\r\n if (!_.has(locMap, this.vehicleLocationMarkers[i].id)) {\r\n this.vehicleLocationMarkers[i].marker.remove(); // Remove marker\r\n }\r\n }\r\n for (let i = 0; i < locations.length; i++) {\r\n let m: VehicleLocationMarker = null;\r\n const loc = locations[i];\r\n if (!_.has(markerMap, loc.id())) {\r\n m = this.createVehicleMarker(loc);\r\n m.marker.addTo(this.searchMap);\r\n } else {\r\n m = markerMap[loc.id()];\r\n m.updatePosition(loc);\r\n m.updateHeading(loc);\r\n }\r\n updatedLocations.push(m);\r\n }\r\n this.vehicleLocationMarkers = updatedLocations;\r\n this.updateVehicleMarkerIcons();\r\n }\r\n\r\n updateVehicleMarkerIcons(): void {\r\n let zoomLevel = this.searchMap.getZoom();\r\n let mapBounds = this.searchMap.getBounds();\r\n for (let i = 0; i < this.vehicleLocationMarkers.length; i++) {\r\n let m = this.vehicleLocationMarkers[i];\r\n if (zoomLevel >= 12 && mapBounds.contains(m.latlng)) {\r\n if (m.iconType !== VehicleMarkerIconType.Detailed) {\r\n m.marker.setIcon(m.iconDetailed);\r\n m.iconType = VehicleMarkerIconType.Detailed;\r\n }\r\n } else {\r\n if (m.iconType !== VehicleMarkerIconType.Normal) {\r\n m.marker.setIcon(m.iconNormal);\r\n m.iconType = VehicleMarkerIconType.Normal;\r\n }\r\n }\r\n }\r\n }\r\n\r\n compareRows = (r1: Row, r2: Row) => {\r\n let result = 0;\r\n for (let index = 0; index < this.model.config.rowOrder.length; index++) {\r\n if (result !== 0) break;\r\n\r\n let rowOrder = this.model.config.rowOrder[index];\r\n switch (rowOrder) {\r\n case \"Line\":\r\n result = AlphanumComparer(r1.Line(), r2.Line());\r\n break;\r\n case \"Journey\":\r\n result = AlphanumComparer(r1.Journey(), r2.Journey());\r\n break;\r\n case \"Destination\":\r\n result = AlphanumComparer(r1.Dest(), r2.Dest());\r\n break;\r\n case \"Time\":\r\n result = Compare(r1.NextDeparture(), r2.NextDeparture());\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n compareLines(l1: Line, l2: Line) {\r\n return AlphanumComparer(l1.text(), l2.text());\r\n }\r\n\r\n compareStopAreas(a1: StopArea, a2: StopArea) {\r\n return AlphanumComparer(a1.text(), a2.text());\r\n }\r\n\r\n compareText(d1: Direction, d2: Direction) {\r\n return AlphanumComparer(d1.text(), d2.text());\r\n }\r\n\r\n clickUpdateVehicles() {\r\n this.getVehicleLocations();\r\n }\r\n\r\n clearAllSearchMapStopAreaMarkers() {\r\n if (!this.searchMap) {\r\n return;\r\n }\r\n\r\n this.searchMapStopAreaMarkers.map((marker) => {\r\n this.searchMap.removeLayer(marker);\r\n });\r\n\r\n this.searchMapStopAreaMarkers = [];\r\n }\r\n\r\n onStopAreaMarkerClick(e) {\r\n // Get the name of the stop and remove the first word (distance).\r\n var words = e.target.options.title.split(\" \");\r\n words.shift();\r\n\r\n $(\"#StopName\").val(words.join(\" \"));\r\n let searchParameters = new SearchParameters();\r\n searchParameters.fromStopAreaQuery($(\"#StopName\").val().toString());\r\n this.search(searchParameters);\r\n if (this.searchMap) {\r\n this.toggleSearchMap();\r\n }\r\n }\r\n\r\n createTileLayer(): L.TileLayer {\r\n const options = {};\r\n _.assign(options, this.model.config.map.tilesOptions);\r\n options[\"minZoom\"] = this.model.config.map.minZoom;\r\n const tileLayer = L.tileLayer(this.model.config.map.tilesUrl, options);\r\n return tileLayer;\r\n }\r\n\r\n createVehicleMarker(position: VehiclePosition): VehicleLocationMarker {\r\n const marker = new VehicleLocationMarker();\r\n marker.id = position.id();\r\n\r\n marker.vehicleDiv = document.createElement(\"div\");\r\n marker.vehicleImg = document.createElement(\"img\");\r\n marker.vehicleImg.classList.add(\"icon-vehicle\");\r\n marker.vehicleImg.style.position = \"absolute\";\r\n marker.vehicleImg.style.zIndex = \"1\";\r\n marker.vehicleImg.src = \"assets/img/vehicleIcon68.png\";\r\n\r\n marker.vehicleArrowImg = document.createElement(\"img\");\r\n marker.vehicleArrowImg.classList.add(\"heading\");\r\n marker.vehicleArrowImg.style.position = \"absolute\";\r\n marker.vehicleArrowImg.style.zIndex = \"2\";\r\n marker.vehicleArrowImg.src = \"assets/img/vehicleArrowIcon68.png\";\r\n\r\n marker.vehicleArrowImg.style.transition = \"all 1s ease-in\";\r\n marker.vehicleDiv.style.transition = \"all 1s ease-in\";\r\n\r\n marker.vehicleDiv.appendChild(marker.vehicleImg);\r\n marker.vehicleDiv.appendChild(marker.vehicleArrowImg);\r\n\r\n let classesDetailed = \"marker-vehicle detailed\";\r\n let classesNormal = \"marker-vehicle normal\";\r\n if (position.classes()) {\r\n classesDetailed = `${classesDetailed} ${position.classes().join(\" \")}`;\r\n classesNormal = `${classesNormal} ${position.classes().join(\" \")}`;\r\n }\r\n marker.iconDetailed = L.divIcon({\r\n className: classesDetailed,\r\n html: marker.vehicleDiv as any,\r\n iconSize: [69, 69],\r\n });\r\n marker.iconNormal = L.icon({\r\n iconUrl: \"assets/img/vehicleArrow.svg\",\r\n iconSize: [40, 40],\r\n iconAnchor: [20, 20],\r\n popupAnchor: [-3, -76],\r\n className: classesNormal,\r\n //,shadowUrl: 'my-icon-shadow.png',\r\n //shadowSize: [68, 95],\r\n //shadowAnchor: [22, 94]\r\n });\r\n\r\n marker.marker = L.marker(marker.latlng, {\r\n title: marker.title,\r\n icon: marker.iconNormal,\r\n });\r\n marker.iconType = VehicleMarkerIconType.Normal;\r\n\r\n marker.title = position.displayName();\r\n marker.updatePosition(position);\r\n marker.updateHeading(position);\r\n return marker;\r\n }\r\n\r\n addVehicleMarker(\r\n target: L.Map | L.LayerGroup,\r\n marker: VehicleLocationMarker\r\n ) {\r\n marker.marker.addTo(target);\r\n marker.marker.getElement().style.transition = \"all 1s ease-in\";\r\n }\r\n\r\n addJourneyVehicleMarker(vehiclePosition: VehiclePosition): void {\r\n this.removeJourneyVehicleMarker();\r\n\r\n if (this.resultMap) {\r\n this.vehicleMarker = this.createVehicleMarker(vehiclePosition);\r\n this.vehicleMarker.iconType = VehicleMarkerIconType.Detailed;\r\n this.vehicleMarker.marker.setIcon(this.vehicleMarker.iconDetailed);\r\n this.vehicleMarker.marker.addTo(this.resultMap);\r\n }\r\n }\r\n\r\n updateJourneyVehicleMarker(\r\n marker: VehicleLocationMarker,\r\n vehiclePosition: VehiclePosition\r\n ): void {\r\n if (!marker) return;\r\n\r\n marker.updatePosition(vehiclePosition);\r\n marker.updateHeading(vehiclePosition);\r\n }\r\n\r\n removeJourneyVehicleMarker(): void {\r\n if (this.vehicleMarker !== null) {\r\n if (this.resultMap) {\r\n this.resultMap.removeLayer(this.vehicleMarker.marker);\r\n }\r\n this.vehicleMarker = null;\r\n }\r\n }\r\n\r\n addAllSearchMapStopAreaMarkers(stopAreas) {\r\n if (!this.searchMap) {\r\n return;\r\n }\r\n\r\n stopAreas.map((stopArea) => {\r\n let latLng = stopArea.location().toLeaflet();\r\n var marker = L.marker(latLng, {\r\n title: stopArea.text(),\r\n zIndexOffset: -1000,\r\n icon: L.icon({\r\n iconUrl: \"assets/img/stopPoint50.png\",\r\n iconSize: [33, 50],\r\n iconAnchor: [16, 50],\r\n }),\r\n }).addTo(this.searchMap);\r\n\r\n marker.on(\"click\", this.onStopAreaMarkerClick.bind(this));\r\n\r\n this.searchMapStopAreaMarkers.push(marker);\r\n });\r\n }\r\n\r\n gpsLocation = (position: GeolocationPosition) => {\r\n $(\"#GpsButton\").wait();\r\n\r\n let latitude = position.coords.latitude;\r\n let longitude = position.coords.longitude;\r\n\r\n this.clearAllSearchMapStopAreaMarkers();\r\n\r\n if (this.currentPosMarker === null) {\r\n this.currentPosMarker = L.marker(L.latLng(latitude, longitude), {\r\n title: \"You are here\",\r\n icon: L.icon({\r\n iconUrl: \"assets/img/youAreHereIcon136.png\",\r\n iconSize: [64, 64],\r\n iconAnchor: [32, 64],\r\n }),\r\n }).addTo(this.searchMap);\r\n } else {\r\n this.currentPosMarker.setLatLng(L.latLng(latitude, longitude));\r\n }\r\n\r\n this.searchMap.setView([latitude, longitude], 16);\r\n this.findStopsNearLocation();\r\n };\r\n\r\n findStopsNearLocation() {\r\n let center = this.searchMap.getCenter();\r\n let data = {\r\n coordinate: {\r\n lat: center.lat,\r\n lon: center.lng,\r\n },\r\n maxDistance: this.model.config.map.maxCount,\r\n maxCount: this.model.config.map.maxDistance,\r\n };\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/FindStopsNearLocation\",\r\n data: JSON.stringify(data),\r\n dataType: \"json\",\r\n success: (response) => {\r\n let areas = response.map((api) => {\r\n let area = new StopArea();\r\n area.update(api);\r\n let latLng = area.location().toLeaflet();\r\n let distance = (\r\n Math.round(\r\n this.currentPosMarker.getLatLng().distanceTo(latLng) / 10\r\n ) * 10\r\n ).toFixed(0);\r\n area.text(distance.toString() + \"m \" + area.text());\r\n return area;\r\n });\r\n\r\n this.clearAllSearchMapStopAreaMarkers();\r\n this.addAllSearchMapStopAreaMarkers(areas);\r\n $(\"#GpsButton\").unwait();\r\n },\r\n error: function (response) {\r\n console.error(\"Failed: FindStopsNearLocation\");\r\n $(\"#GpsButton\").unwait();\r\n },\r\n });\r\n }\r\n\r\n gpsLocationError = (positionerror) => {\r\n console.log(\r\n \"failed gpsLocation(\" + positionerror.code + \"): \" + positionerror.message\r\n );\r\n alert(this.textFailedGpsLocation());\r\n this.gpsLocation({\r\n coords: {\r\n latitude: this.model.config.map.centerLat,\r\n longitude: this.model.config.map.centerLon,\r\n accuracy: null,\r\n altitude: null,\r\n altitudeAccuracy: null,\r\n heading: null,\r\n speed: null,\r\n },\r\n timestamp: null,\r\n });\r\n };\r\n\r\n populateRoutesDDL() {\r\n $(\"#SelectedLine\").wait();\r\n $(\"#SelectedLine\").find(\"option:first-child\").text(\"Loading\");\r\n $.ajax({\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetLines\",\r\n dataType: \"json\",\r\n success: (response) => {\r\n $(\"#SelectedLine\").unwait();\r\n $(\"#SelectedLine\")\r\n .find(\"option:first-child\")\r\n .text(this.textSelectLine());\r\n let guiLines = response.map(function (l) {\r\n var line = new Line();\r\n line.update(l);\r\n return line;\r\n });\r\n this.lines(guiLines);\r\n },\r\n error: function (response) {\r\n console.error(\"Failed: GetLines\");\r\n },\r\n });\r\n }\r\n\r\n getCalls(\r\n params: SearchParameters,\r\n fn: (search: SearchParameters, data: any) => void\r\n ) {\r\n if (!params) {\r\n return;\r\n }\r\n\r\n let request = {\r\n query: {\r\n fromStopAreaQuery: params.fromStopAreaQuery(),\r\n toStopAreaName: params.toStopAreaQuery(),\r\n lineId: params.lineId(),\r\n directionId: params.directionId(),\r\n },\r\n configuration: {\r\n grouping: this.model.config.rowGrouping,\r\n //,order: model.config.rowOrder\r\n //,data: model.config.rowData\r\n },\r\n };\r\n\r\n showSpinner();\r\n this.isLoadingResultList(true);\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetCalls\",\r\n data: JSON.stringify(request),\r\n dataType: \"json\",\r\n success: (response) => {\r\n fn(params, response);\r\n this.callresize();\r\n },\r\n error: (response) => {\r\n console.error(\"Failed: GetCalls\");\r\n },\r\n complete: () => {\r\n hideSpinner();\r\n this.isLoadingResultList(false);\r\n },\r\n });\r\n }\r\n\r\n handleCalls = (params: SearchParameters, info: any) => {\r\n this.calls([]);\r\n\r\n this.updateCalls(params, info);\r\n\r\n this.isCallListFocused(true);\r\n\r\n if (this.mqListMedium.matches) {\r\n $(\"#resulty\").scrollintoview({ duration: \"normal\" });\r\n }\r\n\r\n if (this.displayRowMapExpanded() && this.calls().length > 0) {\r\n var call = this.calls()[0];\r\n var cl = this.searchParameters().callLineDest();\r\n if (cl.length > 0) {\r\n var index = _.findIndex(\r\n this.calls(),\r\n (c) =>\r\n cl.startsWith(c.Line()) &&\r\n cl[c.Line().length] === \"-\" &&\r\n cl.endsWith(c.Dest())\r\n );\r\n if (index === -1) {\r\n index = _.findIndex(this.calls(), (c) => cl.endsWith(c.Dest()));\r\n }\r\n if (index === -1) {\r\n index = _.findIndex(\r\n this.calls(),\r\n (c) => cl.startsWith(c.Line()) && cl[c.Line().length] === \"-\"\r\n );\r\n }\r\n if (index >= 0) {\r\n call = this.calls()[index];\r\n }\r\n }\r\n\r\n this.selectRow(call.IsExpanded(true), null);\r\n }\r\n };\r\n\r\n updateCalls = (params: SearchParameters, info: any) => {\r\n if (info && info.calls) {\r\n const length = info.calls.length;\r\n for (let i = 0; i < length; i++) {\r\n var newCall = info.calls[i];\r\n let koCall = this.findKoCall(newCall.id);\r\n\r\n if (!koCall) {\r\n koCall = new Row(newCall.id, this.model);\r\n if (i < this.calls().length) {\r\n (this as any).calls.insertAt(i, koCall);\r\n } else {\r\n this.calls.push(koCall);\r\n }\r\n }\r\n\r\n this.updateCall(koCall, newCall);\r\n this.updateCallFormat(koCall);\r\n koCall.IsDirty(true);\r\n }\r\n }\r\n\r\n this.purgeCalls();\r\n\r\n let messages = [];\r\n if (info && info.messages) {\r\n const length = info.messages.length;\r\n for (let i = 0; i < length; i++) {\r\n let m = new Message();\r\n let api = info.messages[i];\r\n m.update(api);\r\n messages.push(m);\r\n }\r\n }\r\n\r\n if (info && info.isStopCancelled && this.showAllStopsCancelledText()) {\r\n let m = new Message();\r\n m.text(this.textAllStopsCancelledString());\r\n m.isDisturbance(true);\r\n messages.unshift(m);\r\n }\r\n\r\n if (this.calls().length === 0 && messages.length === 0) {\r\n let m = new Message();\r\n m.text(this.textNoDataFound());\r\n messages.unshift(m);\r\n }\r\n\r\n this.messages(messages);\r\n };\r\n\r\n updateCall(koCall: Row, callRow: any) {\r\n let call = callRow.calls[0];\r\n let next = callRow.calls[1];\r\n\r\n while (koCall.Calls().length > callRow.calls.length) {\r\n koCall.Calls.pop();\r\n }\r\n\r\n for (let index = 0; index < callRow.calls.length; index++) {\r\n const apiCall = callRow.calls[index];\r\n let viewCall = koCall.Calls()[index];\r\n if (viewCall == null) {\r\n viewCall = new Call(koCall, this.model);\r\n koCall.Calls.push(viewCall);\r\n }\r\n viewCall.update(apiCall);\r\n }\r\n\r\n koCall.CallId(call.id);\r\n koCall.RouteId(call.routeId);\r\n koCall.JourneyId(call.journeyId);\r\n koCall.Line(call.line);\r\n koCall.Journey(call.journey);\r\n koCall.StopAreaNumber(call?.departure?.designation ?? \"\");\r\n koCall.NextStopAreaNumber(next?.departure?.designation ?? \"\");\r\n if (call.lineAppearance) {\r\n koCall.LineAppearance().update(call.lineAppearance);\r\n } else {\r\n koCall.LineAppearance().clear();\r\n }\r\n koCall.Dest(call.destination);\r\n koCall.Subdest(call.subdestination);\r\n\r\n // koCall.NextWheelchairAdapted(false); // call.departure.attributes.indexOf('wheelchair') > -1 - configuration = false in previous/overrides realtime\r\n koCall.NextWheelchairAdapted(\r\n call.departure.attributes.indexOf(\"wheelchair\") > -1\r\n );\r\n koCall.NextRealtime(call.departure.quality === \"realtime\");\r\n koCall.NextDeparture(moment(call.departure.forecastTime));\r\n koCall.IsNextCancelled(\r\n call.departure.attributes.indexOf(\"departureCancelled\") > -1\r\n );\r\n\r\n if (!next) {\r\n koCall.IsAfterRealtime(false);\r\n koCall.AfterDeparture(null);\r\n koCall.IsAfterCancelled(false);\r\n } else {\r\n koCall.AfterWheelchairAdapted(\r\n next.departure.attributes.indexOf(\"wheelchair\") > -1\r\n );\r\n koCall.IsAfterRealtime(next.departure.quality === \"realtime\");\r\n koCall.AfterDeparture(moment(next.departure.forecastTime));\r\n koCall.IsAfterCancelled(\r\n next.departure.attributes.indexOf(\"departureCancelled\") > -1\r\n );\r\n }\r\n\r\n koCall.CreatedTime(moment(call.createdTime));\r\n }\r\n\r\n updateCallFormat(koCall: Row) {\r\n koCall.Next(\r\n this.formatTime(\r\n koCall.NextRealtime(),\r\n koCall.NextDeparture(),\r\n koCall.CreatedTime(),\r\n false,\r\n koCall.IsNextCancelled()\r\n )\r\n );\r\n koCall.NextHhMm(\r\n this.formatTime(\r\n koCall.NextRealtime(),\r\n koCall.NextDeparture(),\r\n koCall.CreatedTime(),\r\n true,\r\n koCall.IsNextCancelled()\r\n )\r\n );\r\n\r\n koCall.After(\r\n this.formatTime(\r\n koCall.IsAfterRealtime(),\r\n koCall.AfterDeparture(),\r\n koCall.CreatedTime(),\r\n false,\r\n koCall.IsAfterCancelled()\r\n )\r\n );\r\n koCall.AfterHhMm(\r\n this.formatTime(\r\n koCall.IsAfterRealtime(),\r\n koCall.AfterDeparture(),\r\n koCall.CreatedTime(),\r\n true,\r\n koCall.IsAfterCancelled()\r\n )\r\n );\r\n }\r\n\r\n tooltip(element: Element): string | Element {\r\n const tooltipRef = $(element).data(\"tooltip\");\r\n const tooltipHtml = $(\"#\" + tooltipRef)\r\n .first()\r\n .clone()[0];\r\n return tooltipHtml;\r\n }\r\n\r\n formatTime(\r\n isRealtime: boolean,\r\n departureTime,\r\n createdTime,\r\n hhmm,\r\n isCancelled: boolean\r\n ) {\r\n if (!departureTime) {\r\n return this.textNoFollowingDeparture();\r\n }\r\n\r\n let departure = moment(departureTime);\r\n let created = moment(createdTime);\r\n let duration = moment.duration(departure.diff(created));\r\n if (duration.asSeconds() < 0) {\r\n duration = moment.duration(0, \"seconds\");\r\n }\r\n let formattedTime = this.textNoFollowingDeparture();\r\n if (departure && departure.year() < 9999) {\r\n if (hhmm) {\r\n formattedTime = this.model.timeFormatter.absoluteTime(departure);\r\n } else {\r\n formattedTime = this.model.timeFormatter.formatTime({\r\n datetime: departure,\r\n duration,\r\n isRealtime,\r\n isCancelled,\r\n isCongestion: false,\r\n });\r\n }\r\n }\r\n return formattedTime;\r\n }\r\n\r\n respondToUrl() {\r\n let searchParameters = new SearchParameters();\r\n searchParameters.setFromUri();\r\n this.search(searchParameters);\r\n }\r\n\r\n getSimpleStopArea(stopAreaName) {\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/FindStopArea\",\r\n data: JSON.stringify({ StopAreaQuery: stopAreaName }),\r\n dataType: \"json\",\r\n success: (response) => {\r\n let area = null;\r\n if (response) {\r\n area = new StopArea();\r\n area.update(response);\r\n }\r\n\r\n this.resultStopArea(area);\r\n },\r\n error: function (response) {\r\n console.error(\"Failed: FindStopArea\");\r\n },\r\n });\r\n }\r\n\r\n search(searchParameters) {\r\n this.clearResult();\r\n\r\n if (!searchParameters.fromStopAreaQuery()) {\r\n this.searchParameters(null);\r\n return;\r\n }\r\n\r\n this.searchParameters(searchParameters);\r\n this.searchParameters().updateUri();\r\n this.getCalls(this.searchParameters(), this.handleCalls);\r\n this.getSimpleStopArea(this.searchParameters().fromStopAreaQuery());\r\n }\r\n\r\n clearResult() {\r\n this.elapsedSeconds = 0;\r\n this.resultStopArea(null);\r\n if (this.selectedMapRoute !== null) {\r\n if (this.resultMap) {\r\n this.selectedMapRoute.removeFrom(this.searchMap);\r\n }\r\n this.selectedMapRoute = null;\r\n }\r\n\r\n if (this.resultMap) {\r\n L.DomUtil.remove(this.resultMap.getContainer());\r\n this.resultMap.remove();\r\n this.resultMap = undefined;\r\n }\r\n\r\n this.messages([]);\r\n }\r\n\r\n resizeTables() {\r\n var h1 = $(\"#resulty\").outerHeight();\r\n var h2 = $(\"#searchy\").outerHeight();\r\n var footer = $(\".content-footer\").outerHeight();\r\n var largestTable = Math.max(h1, h2);\r\n if (largestTable < window.innerHeight - footer) {\r\n $(\".content-area\").height(window.innerHeight - footer);\r\n $(\".content-area-header\").height(window.innerHeight - footer);\r\n $(\"#header\").height(window.innerHeight - footer);\r\n $(\"#headerimage\").height(window.innerHeight - footer);\r\n } else {\r\n $(\".content-area\").height(largestTable);\r\n $(\".content-area-header\").height(largestTable);\r\n $(\"#header\").height(window.innerHeight - footer);\r\n $(\"#headerimage\").height(largestTable);\r\n }\r\n }\r\n\r\n resizeTablesSm() {\r\n $(\"#header\").height(100);\r\n $(\".content-area-header\").height(100);\r\n var h1 = $(\"#resulty\").outerHeight();\r\n var h2 = $(\"#searchy\").outerHeight();\r\n var footer = $(\".content-footer\").outerHeight();\r\n var header = $(\".content-area-header\").outerHeight();\r\n var largestTable = Math.max(h1, h2);\r\n if (largestTable < window.innerHeight - footer - header) {\r\n $(\".content-area\").height(window.innerHeight - footer - header);\r\n } else {\r\n $(\".content-area\").height(largestTable);\r\n }\r\n $(\"#headerimage\").css(\"height\", \"100%\");\r\n }\r\n\r\n resizeTablesXs() {\r\n $(\"#header\").height(100);\r\n $(\".content-area-header\").height(100);\r\n $(\".content-area\").css(\"height\", \"auto\");\r\n $(\"#header\").css(\"height\", \"100%\");\r\n }\r\n\r\n resizeCallTable() {\r\n const columnLineElements = $(\".line, .lineHeader\");\r\n columnLineElements.css({ width: \"\", \"min-width\": \"\", \"max-width\": \"\" });\r\n\r\n const columnDestinationElements = $(\".destination, .destinationHeader\");\r\n columnDestinationElements.css({\r\n width: \"\",\r\n \"min-width\": \"\",\r\n \"max-width\": \"\",\r\n });\r\n\r\n const columnNextElements = $(\".next, .nextHeader\");\r\n columnNextElements.css({ width: \"\", \"min-width\": \"\", \"max-width\": \"\" });\r\n\r\n const columnStopAreaNumberElements = $(\r\n \".stopAreaNumber, .stopAreaNumberHeader\"\r\n );\r\n columnStopAreaNumberElements.css({\r\n width: \"\",\r\n \"min-width\": \"\",\r\n \"max-width\": \"\",\r\n });\r\n\r\n const columnOccupancyElements = $(\".occupancy, .occupancyHeader\");\r\n columnOccupancyElements.css({\r\n width: \"\",\r\n \"min-width\": \"\",\r\n \"max-width\": \"\",\r\n });\r\n\r\n const columnExpanderElements = $(\".expander, .expanderHeader\");\r\n columnExpanderElements.css({ width: \"\", \"min-width\": \"\", \"max-width\": \"\" });\r\n\r\n const columnLineWidth = this.maxOuterWidth(columnLineElements);\r\n if (!isNaN(columnLineWidth)) {\r\n columnLineElements.css({\r\n \"min-width\": `${columnLineWidth}px`,\r\n \"max-width\": `${columnLineWidth}px`,\r\n });\r\n }\r\n\r\n const columnNextWidth = this.maxOuterWidth(columnNextElements);\r\n if (!isNaN(columnNextWidth)) {\r\n columnNextElements.css({\r\n \"min-width\": `${columnNextWidth}px`,\r\n \"max-width\": `${columnNextWidth}px`,\r\n });\r\n }\r\n\r\n const columnStopAreaNumberWidth = this.maxOuterWidth(\r\n columnStopAreaNumberElements\r\n );\r\n if (!isNaN(columnStopAreaNumberWidth)) {\r\n columnStopAreaNumberElements.css({\r\n \"min-width\": `${columnStopAreaNumberWidth}px`,\r\n \"max-width\": `${columnStopAreaNumberWidth}px`,\r\n });\r\n }\r\n\r\n const columnOccupancyWidth = this.maxOuterWidth($(\".occupancyHeader\"));\r\n if (!isNaN(columnOccupancyWidth)) {\r\n columnOccupancyElements.css({\r\n \"min-width\": `${columnOccupancyWidth}px`,\r\n \"max-width\": `${columnOccupancyWidth}px`,\r\n });\r\n }\r\n\r\n const columnExpanderWidth = this.maxOuterWidth($(\".expanderHeader\"));\r\n if (!isNaN(columnExpanderWidth)) {\r\n columnExpanderElements.css({\r\n \"min-width\": `${columnExpanderWidth}px`,\r\n \"max-width\": `${columnExpanderWidth}px`,\r\n });\r\n }\r\n const tableWidth = $(\".tc2\").innerWidth();\r\n\r\n const columnDestinationWidth =\r\n tableWidth -\r\n (columnExpanderWidth || 0) -\r\n (columnOccupancyWidth || 0) -\r\n (columnNextWidth || 0) -\r\n (columnStopAreaNumberWidth || 0) -\r\n (columnLineWidth || 0);\r\n if (!isNaN(columnDestinationWidth)) {\r\n columnDestinationElements.css({\r\n \"min-width\": `${columnDestinationWidth}px`,\r\n \"max-width\": `${columnDestinationWidth}px`,\r\n });\r\n }\r\n }\r\n\r\n maxOuterWidthElement(query: globalThis.JQuery): HTMLElement {\r\n let element: HTMLElement = null;\r\n let maxWidth: number = NaN;\r\n query.each(function () {\r\n let itemWidth: number = NaN;\r\n const selector = $(this);\r\n if (selector.is(\":visible\")) {\r\n itemWidth = $(this).outerWidth(true);\r\n }\r\n if (isNaN(itemWidth)) {\r\n return;\r\n }\r\n if (isNaN(maxWidth)) {\r\n maxWidth = itemWidth;\r\n element = this;\r\n } else {\r\n if (itemWidth > maxWidth) {\r\n element = this;\r\n }\r\n }\r\n });\r\n\r\n return element;\r\n }\r\n\r\n maxOuterWidth(\r\n query: globalThis.JQuery,\r\n def: number = NaN\r\n ): number {\r\n let maxWidth: number = NaN;\r\n query.each(function () {\r\n let itemWidth: number = NaN;\r\n const selector = $(this);\r\n if (selector.is(\":visible\")) {\r\n itemWidth = $(this).outerWidth(true);\r\n }\r\n if (isNaN(itemWidth)) {\r\n return;\r\n }\r\n if (isNaN(maxWidth)) {\r\n maxWidth = itemWidth;\r\n } else {\r\n maxWidth = Math.max(maxWidth, itemWidth);\r\n }\r\n });\r\n\r\n if (isNaN(maxWidth)) {\r\n maxWidth = def;\r\n }\r\n return maxWidth;\r\n }\r\n\r\n callresize() {\r\n if (this.mqListLarge.matches) {\r\n this.model.viewModel.size(SizeMode.Normal);\r\n this.resizeTables();\r\n } else if (this.mqListMedium.matches) {\r\n this.model.viewModel.size(SizeMode.Small);\r\n this.resizeTablesSm();\r\n } else {\r\n this.model.viewModel.size(SizeMode.ExtraSmall);\r\n this.resizeTablesXs();\r\n }\r\n this.resizeCallTable();\r\n }\r\n\r\n clock(date: Date) {\r\n let time = moment(date);\r\n if (!this.model.config.am_pm) {\r\n $(\"#clockcontent\").html(time.format(this.model.config.formatClock));\r\n } else {\r\n let suffix = time.format(\"A\");\r\n $(\"#clockcontent\").html(\r\n time.format(this.model.config.formatClock) +\r\n \" \" +\r\n '' +\r\n suffix +\r\n \"\"\r\n );\r\n }\r\n }\r\n\r\n tick(date: Date) {\r\n this.totalTicks++;\r\n\r\n this.clock(date);\r\n this.updateFrameState();\r\n\r\n if (!this.isLoadingResultList()) {\r\n let searchParams = this.searchParameters();\r\n if (\r\n searchParams &&\r\n ++this.elapsedSeconds === this.TIMEOUT_INTERVAL_SECONDS\r\n ) {\r\n this.getCalls(searchParams, this.updateCalls);\r\n\r\n if (this.selectedRow && this.resultMap) {\r\n this.getVehicleLocation(this.selectedRow.CallId(), false);\r\n }\r\n\r\n this.elapsedSeconds = 0;\r\n }\r\n }\r\n\r\n if (this.showVehicleLocations && this.searchMap) {\r\n if (this.secToLocationUpdate > 0) {\r\n this.secToLocationUpdate -= 1;\r\n } else if (this.secToLocationUpdate === 0) {\r\n this.secToLocationUpdate = -1;\r\n this.getVehicleLocations();\r\n }\r\n }\r\n }\r\n\r\n private updateFrameState(): void {\r\n const currentTicks = this.totalTicks;\r\n const sources: (keyof typeof FrameSourceType)[] = <\r\n (keyof typeof FrameSourceType)[]\r\n >Object.keys(FrameSourceType);\r\n for (let source of sources) {\r\n const sourceType: FrameSourceType = FrameSourceType[source];\r\n let frameState = this.model.viewModel.frameStateMap.get(sourceType);\r\n let frameConf = this.model.config.frames.frameMap.get(sourceType);\r\n if (frameConf == null) {\r\n continue;\r\n }\r\n let transition = false;\r\n let newFrame: Frame = null;\r\n if (frameState == null) {\r\n frameState = new ViewModelFrameState();\r\n this.model.viewModel.frameStateMap.set(sourceType, frameState);\r\n newFrame = frameConf[0];\r\n transition = true;\r\n } else if (\r\n frameState.frame() &&\r\n currentTicks - frameState.startTick >= frameState.frame().seconds\r\n ) {\r\n const nextFrameIndex =\r\n (frameState.frame().index + 1) % frameConf.length;\r\n newFrame = frameConf[nextFrameIndex];\r\n transition = true;\r\n }\r\n\r\n if (transition) {\r\n frameState.startTick = currentTicks;\r\n frameState.frame(newFrame);\r\n }\r\n }\r\n }\r\n\r\n toggleSearchMap() {\r\n if (this.showVehicleLocations) {\r\n if (!this.searchMap) {\r\n $(\"#map_overlay_div\").show();\r\n\r\n this.searchMap = L.map(\"map_overlay_div\", {\r\n center: [\r\n this.model.config.map.centerLat,\r\n this.model.config.map.centerLon,\r\n ],\r\n zoom: this.model.config.map.zoom,\r\n zoomAnimation: false,\r\n fadeAnimation: false,\r\n markerZoomAnimation: false,\r\n });\r\n\r\n let tileLayer = this.createTileLayer();\r\n tileLayer.addTo(this.searchMap);\r\n\r\n let closeMeControl = closeMapControl({ options: \"topright\" });\r\n closeMeControl.addTo(this.searchMap);\r\n L.DomEvent.on(closeMeControl.getContainer(), \"click\", (event) => {\r\n this.toggleSearchMap();\r\n });\r\n\r\n this.searchMap.on(\"moveend\", (ev) => {\r\n this.findStopsNearLocation();\r\n this.updateVehicleMarkerIcons();\r\n });\r\n this.searchMap.on(\"zoomstart\", (ev) => {\r\n this.searchMap\r\n .getPane(\"markerPane\")\r\n .setAttribute(\"animation\", \"false\");\r\n });\r\n this.searchMap.on(\"zoomend\", (ev) => {});\r\n\r\n this.getVehicleLocations();\r\n\r\n this.callresize();\r\n return true;\r\n } else {\r\n this.updateVehicleLocations([]);\r\n this.searchMap.remove();\r\n this.currentPosMarker = null;\r\n this.searchMap = null;\r\n $(\"#map_overlay_div\").hide();\r\n return false;\r\n }\r\n } else {\r\n if (!this.searchMap) {\r\n $('
').prependTo(\r\n \"#search_map_div\"\r\n );\r\n\r\n this.searchMap = L.map(\"searchmap\", {\r\n center: [\r\n this.model.config.map.centerLat,\r\n this.model.config.map.centerLon,\r\n ],\r\n zoom: this.model.config.map.zoom,\r\n zoomAnimation: false,\r\n fadeAnimation: false,\r\n markerZoomAnimation: false,\r\n });\r\n\r\n let tileLayer = this.createTileLayer();\r\n tileLayer.addTo(this.searchMap);\r\n\r\n this.callresize();\r\n return true;\r\n } else {\r\n $(\"#searchmap\").remove();\r\n this.currentPosMarker = null;\r\n this.searchMap = null;\r\n this.callresize();\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n getConfigOptions() {\r\n ko.applyBindings(this);\r\n\r\n $.ajax({\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url:\r\n this.model.config.api.baseUri +\r\n \"api/GetConfigOptions?profile=\" +\r\n param(\"profile\") +\r\n \"&language=\" +\r\n param(\"language\"),\r\n dataType: \"json\",\r\n success: (response) => {\r\n if (response) {\r\n document.title = response.title;\r\n document.documentElement.lang = response.textLanguage;\r\n $(\"link[rel*='icon']\").attr(\"href\", response.favicon);\r\n let profileData = param(\"profileData\");\r\n if (!profileData) {\r\n profileData = param(\"data\");\r\n }\r\n if (!profileData) {\r\n profileData = response.profileData;\r\n }\r\n let profileDisplay = param(\"profile\");\r\n if (!profileDisplay) {\r\n profileDisplay = response.profileDisplay;\r\n }\r\n const headers = {};\r\n if (profileData) {\r\n headers[\"anyride-profile-data\"] = profileData;\r\n }\r\n if (profileDisplay) {\r\n headers[\"anyride-profile-display\"] = profileDisplay;\r\n }\r\n $.ajaxSetup({\r\n headers: headers,\r\n });\r\n\r\n if (response.customCss.length > 0) {\r\n let customCss = $(\r\n ''\r\n );\r\n let finallyCustomCss = () => {\r\n this.model.bootstrap.themeLoaded = true;\r\n this.model.bootstrap.onUpdate();\r\n };\r\n customCss.on(\"load\", finallyCustomCss);\r\n customCss.on(\"error\", finallyCustomCss);\r\n $(\"head\").append(customCss);\r\n } else {\r\n this.model.bootstrap.themeLoaded = true;\r\n this.model.bootstrap.onUpdate();\r\n }\r\n\r\n this.model.config.locale = response.locale;\r\n if (!this.model.config.locale) {\r\n this.model.config.locale =\r\n window.navigator[\"userLanguage\"] || window.navigator.language;\r\n }\r\n moment.locale(this.model.config.locale);\r\n\r\n this.model.resourceModel.setSource(response);\r\n this.model.config.map.centerLat = response.centerLat;\r\n this.model.config.map.centerLon = response.centerLon;\r\n this.model.config.map.maxCount = response.mapMaxCount;\r\n this.model.config.map.maxDistance = response.mapMaxDistance;\r\n this.model.config.map.zoom = response.zoom;\r\n this.model.config.map.minZoom = response.minZoom;\r\n let hostname = this.model.config.api.baseUri;\r\n let index = hostname.indexOf(\"//\");\r\n if (index >= 0) {\r\n hostname = hostname.substring(index + 2);\r\n }\r\n index = hostname.indexOf(\"/\");\r\n if (index >= 0) {\r\n hostname = hostname.substring(0, index);\r\n }\r\n this.model.config.map.tilesUrl = response.tiles.urlTemplate.replace(\r\n \"{host}\",\r\n hostname\r\n );\r\n _.forEach(response.tiles.options, (value) => {\r\n _.assign(this.model.config.map.tilesOptions, value);\r\n });\r\n\r\n this.model.config.frames = ConfigurationFrames.parse(response.frames);\r\n this.model.config.occupancy = ConfigurationOccupancy.parse(\r\n response.occupancy\r\n );\r\n\r\n this.model.config.formatClock = response.formatClock;\r\n this.model.config.am_pm = response.am_pm;\r\n this.model.config.formatAbsoluteTime = response.formatAbsoluteTime;\r\n this.model.config.formatRelativeTime = response.formatRelativeTime;\r\n this.model.config.formatForecastTime = response.formatForecastTime;\r\n this.model.config.useNonForcastIndicator =\r\n response.useNonForcastIndicator;\r\n\r\n this.model.config.rowGrouping = response.rowGrouping;\r\n this.model.config.rowOrder = response.rowOrder;\r\n this.model.config.rowData = response.rowData;\r\n this.model.config.rowLabel = response.rowLabel;\r\n\r\n this.model.config.resultTable.showStopAreaNumber(\r\n response.showStopAreaNumber\r\n );\r\n this.model.config.resultTable.showOccupancy(\r\n response.tableShowOccupancy\r\n );\r\n this.model.config.resultTable.showExpander(\r\n response.tableShowExpander\r\n );\r\n this.useNewTable(response.useNewTable);\r\n\r\n this.tableDetailsShowNext(response.tableDetailsShowNext);\r\n this.tableDetailsShowAfter(response.tableDetailsShowAfter);\r\n this.tableDetailsShowMap(response.tableDetailsShowMap);\r\n this.tableDetailsShowOccupancyLegend(\r\n response.tableDetailsShowOccupancyLegend\r\n );\r\n\r\n this.iconWheelchair(response.iconWheelchair);\r\n this.iconRealtime(response.iconRealtime);\r\n\r\n this.showVehicleLocations = response.showVehicleLocations;\r\n this.showAllStopsCancelledText(response.showAllStopsCancelledText);\r\n this.useDirection(response.useDirection);\r\n this.displayRowMapExpanded(response.displayRowMapExpanded);\r\n this.hideRouteStopSelection(response.hideRouteStopSelection);\r\n this.logo(response.logo);\r\n this.logo_top(response.logo_top);\r\n this.hrefCustomer(response.hrefCustomer);\r\n this.top_pushpin(response.top_pushpin);\r\n\r\n this.model.translationModel.setSource(response);\r\n this.textAllStopsCancelledString(\r\n response.textAllStopsCancelledString\r\n );\r\n this.textSelectYourStop(response.textSelectYourStop);\r\n this.textDoYouKnowStop(response.textDoYouKnowStop);\r\n this.textUseGPS(response.textUseGPS);\r\n this.textStopNameOrNumber(response.textStopNameOrNumber);\r\n this.textChooseLineStop(response.textChooseLineStop);\r\n this.textChooseLineDirectionStop(\r\n response.textChooseLineDirectionStop\r\n );\r\n this.textDirection(response.textDirection);\r\n this.textDestination(response.textDestination);\r\n this.textOccupancy(response.textOccupancy);\r\n this.textLine(response.textLine);\r\n this.textJourney(response.textJourney);\r\n this.textStop(response.textStop);\r\n this.textSelectLine(response.textSelectLine);\r\n this.textSelectDirection(response.textSelectDirection);\r\n this.textLoadingDirection(response.textLoadingDirection);\r\n this.textSelectStop(response.textSelectStop);\r\n this.textLoadingStop(response.textLoadingStop);\r\n this.textNext(response.textNext);\r\n this.textStopAreaNumber(response.textStopAreaNumber);\r\n this.textNextDepartureIn(response.textNextDepartureIn);\r\n this.textOr(response.textOr);\r\n this.textAfter(response.textAfter);\r\n this.textMin(response.textMin);\r\n this.textViewLiveMap(response.textViewLiveMap);\r\n this.textCopyright(response.textCopyright);\r\n this.htmlPoweredBy(response.htmlPoweredBy);\r\n this.textNoDataFound(response.textNoDataFound);\r\n this.textLiveBusTimes(response.textLiveBusTimes);\r\n this.textCancelled(response.textCancelled);\r\n this.textNoFollowingDeparture(response.textNoFollowingDeparture);\r\n this.textCa(response.textForecastQualityTimetable);\r\n this.textNow(response.textNow);\r\n this.textFailedGpsLocation(response.textFailedGpsLocation);\r\n this.textAriaLabelGps(response.textAriaLabelGps);\r\n this.textAriaLabelSearch(response.textAriaLabelSearch);\r\n this.textAriaOr(response.textAriaOr);\r\n this.textPleaseDefineYourSearch(response.textPleaseDefineYourSearch);\r\n\r\n this.model.bootstrap.profileLoaded = true;\r\n this.model.bootstrap.onUpdate();\r\n\r\n if (\r\n Array.isArray(response.googleAnalytics) &&\r\n response.googleAnalytics.length > 0\r\n ) {\r\n (window as any).gtag(\"js\", new Date());\r\n\r\n for (var i = 0; i < response.googleAnalytics.length; i++) {\r\n (window as any).gtag(\r\n \"config\",\r\n response.googleAnalytics[i].trackingId\r\n );\r\n }\r\n\r\n var head =\r\n document.head || document.getElementsByTagName(\"head\")[0];\r\n const script = document.createElement(\"script\");\r\n script.async = true;\r\n script.src =\r\n \"https://www.googletagmanager.com/gtag/js?id=\" +\r\n response.googleAnalytics[0].trackingId;\r\n head.appendChild(script);\r\n }\r\n } else {\r\n console.log(\"Failed to get GetConfigOptions.\");\r\n }\r\n },\r\n error: function (response) {\r\n console.log(\"Failed to get GetConfigOptions.\");\r\n },\r\n }).done(() => this.initAfterSetConfigOptions());\r\n }\r\n\r\n initAfterSetConfigOptions() {\r\n this.model.timeFormatter = new ForecastTimeFormatter(\r\n this.model.config,\r\n this.model\r\n );\r\n // this.mqListMedium.addListener(() => this.callresize());\r\n // this.mqListLarge.addListener(() => this.callresize());\r\n\r\n $(window).bind(\"resize\", () => {\r\n this.callresize();\r\n });\r\n\r\n this.callresize();\r\n\r\n this.getSystemDateTime();\r\n }\r\n\r\n getSystemDateTime() {\r\n $.ajax({\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n url: this.model.config.api.baseUri + \"api/GetSystemTimestamp\",\r\n data: { clientTimestamp: moment().format() },\r\n dataType: \"json\",\r\n success: (response) => {\r\n if (response) {\r\n var now = moment();\r\n\r\n var cdt = moment(response.ClientDateTime);\r\n var sdt = moment(response.SystemDateTime);\r\n\r\n var elapsedMilliSeconds = now.valueOf() - cdt.valueOf();\r\n\r\n sdt = moment(sdt.valueOf() - Math.floor(elapsedMilliSeconds / 2));\r\n this.systemDateTimeOffset = sdt.valueOf() - now.valueOf();\r\n\r\n console.log(\"systemDateTimeOffset: %d ms\", this.systemDateTimeOffset);\r\n } else {\r\n console.log(\"Failed to get GetSystemDateTime.\");\r\n }\r\n },\r\n error: function (response) {\r\n console.log(\"Failed to get GetSystemDateTime.\");\r\n },\r\n }).done(() => this.initAfterSyncWithSystemDateTime());\r\n }\r\n\r\n initAfterSyncWithSystemDateTime() {\r\n this.tick(this.getNow());\r\n window.setInterval(() => {\r\n this.tick(this.getNow());\r\n }, 1000);\r\n\r\n $(\"#GpsButton\").on(\"click\", () => {\r\n if (navigator.geolocation) {\r\n if (!this.toggleSearchMap()) {\r\n return;\r\n }\r\n navigator.geolocation.getCurrentPosition(\r\n this.gpsLocation,\r\n this.gpsLocationError\r\n );\r\n } else {\r\n alert(this.textFailedGpsLocation());\r\n }\r\n });\r\n\r\n $(\"#SubmitStopButton\").on(\"click\", () => {\r\n $(\"#results\").attr(\"aria-busy\", \"true\");\r\n let searchParameters = new SearchParameters();\r\n searchParameters.fromStopAreaQuery($(\"#StopName\").val().toString());\r\n this.search(searchParameters);\r\n $(\"#results\").attr(\"aria-busy\", \"false\");\r\n });\r\n\r\n $(\"#SubmitRDSButton\").on(\"click\", () => {\r\n $(\"#results\").attr(\"aria-busy\", \"true\");\r\n if (\r\n this.selectedStopPoint() &&\r\n this.selectedLine() &&\r\n (!this.useDirection() || this.selectedDirection())\r\n ) {\r\n let searchParameters = new SearchParameters();\r\n searchParameters.fromStopAreaQuery(this.selectedStopPoint().text());\r\n searchParameters.lineId(this.selectedLine().id());\r\n searchParameters.directionId(\r\n this.useDirection() ? this.selectedDirection().id() : 0\r\n );\r\n this.search(searchParameters);\r\n }\r\n $(\"#results\").attr(\"aria-busy\", \"false\");\r\n });\r\n\r\n $(\"#StopName\").autocomplete({\r\n ajaxSettings: {\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n },\r\n triggerSelectOnValidInput: false,\r\n serviceUrl: this.model.config.api.baseUri + \"api/Autocomplete\",\r\n transformResult: function (response) {\r\n return {\r\n suggestions: response,\r\n };\r\n },\r\n beforeRender: (container, suggestions) => {\r\n this.model.viewModel.ariaHasSuggestionPopup(true);\r\n },\r\n onHide: (container) => {\r\n this.model.viewModel.ariaHasSuggestionPopup(false);\r\n },\r\n onSelect: (suggestion) => {\r\n let searchParameters = new SearchParameters();\r\n searchParameters.fromStopAreaQuery(suggestion.value);\r\n this.search(searchParameters);\r\n },\r\n });\r\n\r\n this.respondToUrl();\r\n\r\n if (!this.hideRouteStopSelection()) {\r\n this.populateRoutesDDL();\r\n }\r\n\r\n hideSpinner();\r\n }\r\n}\r\n\r\nenum SizeMode {\r\n Normal,\r\n Small,\r\n ExtraSmall,\r\n}\r\n\r\nfunction toggleResultRow(event: KeyboardEvent) {\r\n let toggle = false;\r\n if (event.key == \"Enter\") {\r\n toggle = true;\r\n } else if (event.keyCode === 13) {\r\n toggle = true;\r\n }\r\n\r\n if (toggle) {\r\n (event.target).click();\r\n }\r\n}\r\n\r\nconst _global = (window /* browser */ || global) /* node */ as any;\r\n_global.toggleResultRow = toggleResultRow;\r\n\r\nfunction param(name: string): string {\r\n return (location.search.split(name + \"=\")[1] || \"\").split(\"&\")[0];\r\n}\r\n\r\nfunction showSpinner() {\r\n $(\"#spinner\").show();\r\n}\r\n\r\nfunction hideSpinner() {\r\n setTimeout(function () {\r\n $(\"#spinner\").hide();\r\n }, 1000);\r\n}\r\n\r\n// Startup\r\nexport function InitAnyRide() {\r\n const model = new Model();\r\n window[\"model\"] = model;\r\n model.config = new Configuration();\r\n model.bootstrap = new Bootstrap();\r\n model.resourceModel = new ResourceModel();\r\n model.translationModel = new TranslationModel();\r\n model.viewModel = new ViewModel(model);\r\n\r\n $.ajaxSetup({ cache: false });\r\n\r\n $.getJSON(\"app.config.json\")\r\n .done((config) => {\r\n let apiUri = config.apiUri;\r\n apiUri = apiUri\r\n .replace(\"{protocol}\", window.location.protocol)\r\n .replace(\"{host}\", window.location.hostname);\r\n apiUri = apiUri + (apiUri.charAt(apiUri.length - 1) === \"/\" ? \"\" : \"/\");\r\n model.config.api.baseUri = apiUri;\r\n model.bootstrap.configLoaded = true;\r\n model.bootstrap.onUpdate();\r\n })\r\n .fail(() => {\r\n alert(\"config error\");\r\n });\r\n\r\n $(document).ready(function () {\r\n model.bootstrap.pageLoaded = true;\r\n model.bootstrap.onUpdate();\r\n });\r\n\r\n model.bootstrap.addOnUpdate(function (b) {\r\n if (b.pageLoaded && b.profileLoaded && b.themeLoaded) {\r\n $(\"#splash\").hide();\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n model.bootstrap.addOnUpdate(function (b) {\r\n if (b.configLoaded && b.pageLoaded) {\r\n model.viewModel.start();\r\n return true;\r\n }\r\n return false;\r\n });\r\n}\r\n","import * as ko from \"knockout\";\r\nimport { TooltipOption } from 'bootstrap';\r\n\r\n\r\n// Old bootstrap\r\n// https://github.com/faulknercs/Knockstrap\r\n// https://github.com/billpull/knockout-bootstrap/blob/master/src/knockout-bootstrap.js\r\n// https://stackoverflow.com/questions/16875773/bootstraps-tooltip-not-working-with-knockout-bindings-w-fiddle\r\n\r\nko.bindingHandlers[\"tooltip\"] = {\r\n 'init': function (element, valueAccessor) {\r\n const $element = $(element);\r\n \r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n if ($element.data('bs.tooltip')) {\r\n $element.tooltip('dispose');\r\n }\r\n });\r\n },\r\n 'update': function (element, valueAccessor) {\r\n const $element = $(element);\r\n const options = ko.unwrap(valueAccessor());\r\n const optionsJson = ko.toJS(options);\r\n \r\n if(optionsJson && optionsJson.title === null) {\r\n optionsJson.title = '';\r\n } \r\n\r\n let tooltipData = $element.data('bs.tooltip');\r\n if (!tooltipData) {\r\n $element.tooltip(optionsJson);\r\n } else {\r\n ko.utils.extend(tooltipData.config, optionsJson);\r\n }\r\n }\r\n };"],"names":["a","define","b","c","d","e","this","element","el","suggestions","badQueries","selectedIndex","currentValue","value","timeoutId","cachedResponse","onChangeTimeout","onChange","isLocal","suggestionsContainer","noSuggestionsContainer","options","extend","defaults","classes","selected","suggestion","hint","hintValue","selection","initialize","setOptions","g","escapeRegExChars","replace","createNode","document","createElement","className","style","position","display","h","i","noop","utils","Autocomplete","ajaxSettings","autoSelectFirst","appendTo","serviceUrl","lookup","onSelect","width","minChars","maxHeight","deferRequestBy","params","formatResult","RegExp","formatGroup","delimiter","zIndex","type","noCache","onSearchStart","onSearchComplete","onSearchError","preserveInput","containerClass","tabDisabled","dataType","currentRequest","triggerSelectOnValidInput","preventBadQueries","lookupFilter","toLowerCase","indexOf","paramName","transformResult","parseJSON","showNoSuggestionNotice","noSuggestionNotice","orientation","forceFixPosition","prototype","f","setAttribute","html","get","css","on","activate","data","children","removeClass","select","clearTimeout","blurTimeoutId","fixPositionCapture","visible","fixPosition","window","onKeyPress","onKeyUp","onBlur","onFocus","val","length","onValueChange","setTimeout","hide","abortAjax","abort","Array","isArray","verifySuggestionsFormat","validateOrientation","clearCache","clear","disable","disabled","enable","parent","body","outerHeight","offset","top","left","j","height","k","scrollTop","l","m","Math","max","n","o","show","offsetParent","outerWidth","isCursorAtEnd","selectionStart","createRange","moveStart","text","which","onHint","selectHint","moveUp","moveDown","stopImmediatePropagation","preventDefault","suggest","findBestHint","ignoreValueChange","getQuery","onInvalidateSelection","call","isExactMatch","getSuggestions","split","trim","getSuggestionsLocal","parseInt","lookupLimit","grep","slice","ignoreParams","isFunction","param","isBadQuery","url","ajax","done","processResponse","fail","onHide","signalHint","groupBy","beforeRender","each","adjustContainerWidth","detach","first","addClass","noSuggestions","empty","append","substr","map","inArray","push","find","adjustScroll","offsetTop","getValue","dispose","off","removeData","remove","fn","devbridgeAutocomplete","arguments","autocomplete","vertical","x","y","horizontal","both","duration","direction","defaultView","getComputedStyle","currentStyle","parseFloat","borderTopWidth","borderLeftWidth","bottom","borderBottomWidth","right","borderRightWidth","test","nodeName","border","scroll","scrollLeft","scrollbar","innerWidth","clientWidth","innerHeight","clientHeight","rect","getBoundingClientRect","scrollintoview","eq","closest","s","min","isEmptyObject","complete","animate","queue","auto","hidden","expr","scrollable","overflowX","overflowY","isRoot","scrollHeight","client","scrollWidth","scrollableX","scrollableY","$","defaultOptions","title","extraCssClasses","overrideGeometry","undefined","WaitOverlay","overlayThis","_waitCount","_parent","_options","waitCount","_buildAndDisplay","unshow","_removeSelf","self","_createOverlay","_addTitle","_addText","_addWaitClassArea","_waitForParentToStabilize","_display","_parentIsWindow","_createWindowOverlay","_createRegularOverlay","_overlay","_ensureOverlayIsNotTransparent","_applyExtraCssClassesTo","parentPosition","parentMargins","_getMarginsOf","marginLeft","marginRight","marginTop","marginBottom","forEach","_getParentGeometry","waitAreaInner","waitAreaLens","area","_waitArea","titleArea","_titleArea","textArea","textBody","_textArea","_keepSizeInSync","_checkIfParentHasStabilised","usingDeferred","lastGeometry","reject","currentGeometry","waitSomeMore","resolve","Deferred","promise","is","grandparent","resized","_resizeInnerContentToFit","_resizedTextArea","_resizedWaitArea","originalHeight","waitAreaHeight","_getParentHeight","textAreaHeight","_createBackingOverlay","_backingOverlay","clone","backingOverlayOpacity","attr","_getParentWidth","childRight","parentLeft","parentRight","_getCssIntVal","childBottom","parentTop","parentBottom","prop","wait","deferred","unwait","existingOverlay","TestExports","jasmine","webpackContext","req","id","webpackContextResolve","__webpack_require__","Error","code","keys","Object","module","exports","leftPadZero","number","padding","output","leftPad","valueAccessor","$element","domNodeDisposal","addDisposeCallback","tooltip","optionsJson","tooltipData","config","values","isNumber","Number","Infinity","Compare","AlphanumComparer","s1","s2","result","i1","i2","z1","z2","start1","start2","alpha1","alpha2","moment","units","seconds","minutes","hours","customFormatTokens","MaybeTotalHours","regex","mom","asHours","floor","TotalHours","MaybeTotalMinutes","asMinutes","TotalMinutes","Minutes","MaybeTotalSeconds","TotalSeconds","asSeconds","Seconds","formatI4m","format","lowestUnit","tokenName","token","actualDuration","round","as","replacement","JourneyType","model","invocations","settingsNow","time","settingsRelative","parse","reset","forecastConfigurations","formatForecastTime","index","settings","lamda","input","tryNowTime","tryAbsoluteForecastTime","tryRelativeForecastTime","msg","Type","console","error","formatTime","isCancelled","viewModel","textCancelled","invocation","success","absoluteTime","datetime","formatAbsoluteTime","relativetime","formatRelativeTime","isRealtime","textNow","absoluteForecastTime","formattedTime","useNonForcastIndicator","textCa","relativeForecastTime","textMin","background","foreground","fontStyle","update","api","latitude","longitude","lat","lon","toLeaflet","displayName","timestamp","heading","location","Location","loc","lines","AffectedCalls","isDisturbance","isInfo","getIconClass","getDisturbanceColors","affectedCallIds","affectedCalls","line","MessageLine","lineId","bgLineColor","fgLineColor","lineColor","lineName","bgLineColorHex","fgLineColorHex","lineColorHex","VehicleMarkerIconType","PlannedTime","ForecastTime","ForecastType","Quality","Attributes","Undefined","VehicleType","Designation","OccupancyPercent","forecastTime","plannedTime","quality","attributes","journeyType","Extra","Normal","vehicleType","designation","occupancyPercent","row","Key","CurrentForecast","Departure","Arrival","fc","key","arrival","Forecast","departure","Calls","NextCall","GetCall","AfterCall","getRowDisturbances","messages","filter","includes","TotalIndexes","calls","reduce","total","getDisturbanceColor","callIndex","allIndexesAffected","every","message","getNextDisturbanceColors","getAfterDisturbanceColors","Next","NextHhMm","After","AfterHhMm","RowLabel","rowLabel","Line","Journey","CallId","RouteId","JourneyId","LineAppearance","Appearance","Dest","Subdest","SubdestText","forecast","state","frameStateMap","FrameSourceType","Destination","frame","frameType","DestinationFrameTypeMap","template","isReinforcement","textReinforcement","translationModel","getTranslation","DestinationFrameType","Reinforcement","Default","NextWheelchairAdapted","AfterWheelchairAdapted","NextRealtime","NextAttr","NextAttrImgSrc","iconWheelchair","iconRealtime","iconHash","NextCss","NextForecastQualityCss","IsNextCancelled","NextDeparture","IsAfterRealtime","AfterDeparture","CreatedTime","IsAfterCancelled","AfterAttr","AfterAttrImgSrc","AfterCss","AfterForecastQualityCss","OccupancyPercentageNext","getOccupancyPercentage","OccupancyPercentageAfter","OccupancyConfiguration","getOccupancyConfiguration","OccupancyConfigurationAfter","OccupancyImgSrc","getResourceSrc","OccupancyAfterImgSrc","ShowOccupancy","ShowOccupancyAfter","OccupancyImgAlt","OccupancyAfterImgAlt","OccupancyTooltipTitle","size","SizeMode","IsDirty","IsExpanded","StopAreaNumber","NextStopAreaNumber","Id","callType","occupancy","level","levels","match","from","to","configKey","resourceType","resourceModel","getResource","imageKey","labelKey","configLoaded","pageLoaded","profileLoaded","themeLoaded","callbacks","onUpdate","splice","log","addOnUpdate","callback","baseUri","centerLat","centerLon","maxCount","maxDistance","zoom","minZoom","tilesUrl","tilesOptions","showOccupancy","showExpander","showStopAreaNumber","frameMap","Map","ConfigurationFrames","destination","Frame","set","ConfigurationOccupancy","OccupancyLevel","descriptionKey","image","label","description","latlng","marker","iconDetailed","iconNormal","iconType","updatePosition","setLatLng","updateHeading","rotateHeading","vehicleArrowImg","transform","prevHeading","nextHeading","isNaN","div","rem","polyline","polylineDirection","addTo","removeFrom","getBounds","fromStopAreaQuery","toStopAreaQuery","directionId","callLineDest","hasData","updateUri","t","path","history","pushState","trigger","setFromUri","hash","_","array","decodeURIComponent","bind","hasOwnProperty","CloseMapControl","onAdd","button","create","textContent","cursor","onRemove","toString","startTick","resources","setSource","internalGetTranslation","source","resource","translations","translationKey","translationSource","translation","Row","totalTicks","elapsedSeconds","TIMEOUT_INTERVAL_SECONDS","selectedRow","selectedMapRoute","systemDateTimeOffset","mqListMedium","matchMedia","mqListLarge","showVehicleLocations","showAllStopsCancelledText","searchMap","searchMapStopAreaMarkers","resultMap","currentPosMarker","vehicleMarker","searchParameters","isLoadingResultList","year","Date","getFullYear","header","resultStopArea","textPleaseDefineYourSearch","messagesWithoutAffected","useNewTable","resultMapStopAreaMarker","selectedLine","directions","selectedDirection","stopPoints","selectedStopPoint","useDirection","displayRowMapExpanded","hideRouteStopSelection","isCallListFocused","top_pushpin","logo","logo_top","hrefCustomer","ariaHasSuggestionPopup","tableDetailsShowNext","tableDetailsShowAfter","tableDetailsShowMap","tableDetailsShowOccupancyLegend","textRowLabelHeader","textLine","textJourney","textAllStopsCancelledString","textSelectYourStop","textDoYouKnowStop","textUseGPS","textStopNameOrNumber","textChooseLineStop","textChooseLineDirectionStop","textGetChooseHeader","textDirection","textDestination","textOccupancy","textStop","textSelectLine","textSelectDirection","textLoadingDirection","textSelectStop","textLoadingStop","textNext","textStopAreaNumber","textNextDepartureIn","textOr","textAfter","textViewLiveMap","textCopyright","htmlPoweredBy","textNoDataFound","textLiveBusTimes","textNoFollowingDeparture","textFailedGpsLocation","textAriaLabelGps","textAriaLabelSearch","textAriaOr","vehicleLocationMarkers","secToLocationUpdate","selectRow","evt","getContainer","toggleCollapse","toggleShowOnMap","callresize","compareRows","r1","r2","rowOrder","gpsLocation","coords","clearAllSearchMapStopAreaMarkers","icon","iconUrl","iconSize","iconAnchor","setView","findStopsNearLocation","gpsLocationError","positionerror","alert","accuracy","altitude","altitudeAccuracy","speed","handleCalls","info","updateCalls","matches","cl","startsWith","endsWith","newCall","koCall","findKoCall","insertAt","updateCall","updateCallFormat","purgeCalls","Message","isStopCancelled","unshift","valueWillMutate","valueHasMutated","subscribe","getDirections","getStopPoints","start","getConfigOptions","getNow","now","clearStopName","rowId","removeAt","contentType","response","dir","Direction","JSON","stringify","areas","StopArea","closeAllToggles","collapseContent","querySelector","allAccordions","getElementsByClassName","ariaExpanded","hideRowMap","showRowMap","removeJourneyVehicleMarker","areaMarker","removeLayer","routeId","rgb","latlngs","polylineOptions","color","locations","center","zoomAnimation","fadeAnimation","markerZoomAnimation","MapRoute","patterns","repeat","symbol","arrowHead","pixelSize","pathOptions","fillOpacity","weight","createTileLayer","fitBounds","latLng","getVehicleLocation","callId","isNew","vehiclePosition","VehiclePosition","addJourneyVehicleMarker","updateJourneyVehicleMarker","getVehicleLocations","getPane","vehiclePositions","updateVehicleLocations","locMap","updatedLocations","markerMap","createVehicleMarker","updateVehicleMarkerIcons","zoomLevel","getZoom","mapBounds","contains","Detailed","setIcon","compareLines","l1","l2","compareStopAreas","a1","a2","compareText","d1","d2","clickUpdateVehicles","onStopAreaMarkerClick","words","target","shift","join","SearchParameters","search","toggleSearchMap","VehicleLocationMarker","vehicleDiv","vehicleImg","classList","add","src","transition","appendChild","classesDetailed","classesNormal","popupAnchor","addVehicleMarker","getElement","addAllSearchMapStopAreaMarkers","stopAreas","stopArea","zIndexOffset","getCenter","coordinate","lng","distance","getLatLng","distanceTo","toFixed","populateRoutesDDL","guiLines","getCalls","request","query","toStopAreaName","configuration","grouping","rowGrouping","hideSpinner","callRow","next","pop","apiCall","viewCall","Call","journeyId","journey","lineAppearance","subdestination","createdTime","tooltipRef","departureTime","hhmm","created","diff","timeFormatter","isCongestion","respondToUrl","getSimpleStopArea","stopAreaName","StopAreaQuery","clearResult","resizeTables","h1","h2","footer","largestTable","resizeTablesSm","resizeTablesXs","resizeCallTable","columnLineElements","columnDestinationElements","columnNextElements","columnStopAreaNumberElements","columnOccupancyElements","columnExpanderElements","columnLineWidth","maxOuterWidth","columnNextWidth","columnStopAreaNumberWidth","columnOccupancyWidth","columnExpanderWidth","columnDestinationWidth","maxOuterWidthElement","maxWidth","NaN","itemWidth","def","Small","ExtraSmall","clock","date","am_pm","suffix","formatClock","tick","updateFrameState","searchParams","currentTicks","sourceType","frameState","frameConf","frames","newFrame","ViewModelFrameState","closeMeControl","event","ev","prependTo","documentElement","lang","textLanguage","favicon","profileData","profileDisplay","headers","customCss","finallyCustomCss","bootstrap","locale","navigator","language","mapMaxCount","mapMaxDistance","hostname","substring","tiles","urlTemplate","rowData","resultTable","tableShowOccupancy","tableShowExpander","textForecastQualityTimetable","googleAnalytics","gtag","trackingId","head","getElementsByTagName","script","async","initAfterSetConfigOptions","ForecastTimeFormatter","getSystemDateTime","clientTimestamp","cdt","ClientDateTime","sdt","SystemDateTime","elapsedMilliSeconds","valueOf","initAfterSyncWithSystemDateTime","setInterval","geolocation","getCurrentPosition","container","name","toggleResultRow","toggle","keyCode","click","ConfigurationApi","ConfigurationResultTable","ConfigurationMap","Bootstrap","ResourceModel","TranslationModel","ViewModel","cache","apiUri","protocol","charAt","ready"],"sourceRoot":""}