PageSourceSearch

https://originair.co.nz/uploads/assets/js/tf/route-map.js

js originair.co.nz collected 2026-10-02 12:10:31 UTC 8,672 bytes, 280 lines download raw bytes

1/* global $ */
2/* global google */
3var routeMap = function () {
4    var _map;
5    var _settings;
6    var _airports;
7    var _routes;
8    var _polylines = [];
9    var _markers = [];
10    var _infoWindow;
11    
12function clearMap() {
13    // Clear all polylines
14    for (var i = 0; i < _polylines.length; i++) {
15        _polylines[i].setMap(null);
16    }
17    _polylines = [];
18
19    // Clear all markers
20    for (var i = 0; i < _markers.length; i++) {
21        _markers[i].setMap(null);
22    }
23    _markers = [];
24}
25    
26function init(settings) {
27    _settings = settings;
28    _routes = _settings.routes;
29    _map = new google.maps.Map(document.getElementById(_settings.containerId), _settings.options);
30    _infoWindow = new google.maps.InfoWindow();
31    
32    // Set airports
33    _airports = getAirports(_routes);
34    
35    // Populate 'from' destinations
36    initDropdowns();
37    
38    // Clear the map only if `showAllRoutesOnLoad` is false
39    if (!_settings.showAllRoutesOnLoad) {
40        clearMap();
41    } else {
42        drawRoutes(_routes); // Ensure all routes are drawn if setting is true
43    }
44}
45    
46    function initDropdowns() {
47        var options = "";
48        if(typeof _settings.optGroupLabel != 'undefined' || _settings.optGroupLabel != null){
49            options += '<optgroup label=' + _settings.optGroupLabel + '>';
50        }else{
51            options += "<option></option>";
52        }
53        
54        var sortedAirports = $.map(_airports, function(el) { return el });
55
56        sortedAirports.sort(function(a,b) {
57                                if(a.sortIndex == b.sortIndex){
58                                    return (a.name.toUpperCase() > b.name.toUpperCase()) ? 1 : ((b.name.toUpperCase() > a.name.toUpperCase()) ? -1 : 0); 
59                                }else{
60                                    return a.sortIndex - b.sortIndex;
61                                }
62                            });       
63
64        
65        for(var i = 0; i < sortedAirports.length; i++){
66            options += "<option>" + sortedAirports[i].name + "</option>";
67        }
68        
69        if(typeof _settings.optGroupLabel != 'undefined' || _settings.optGroupLabel != null){
70            options +='</optgroup>'
71        }        
72        
73        $("#" + _settings.fromId).append(options);
74        
75        $("#" + _settings.fromId).change(fromAirportChanged);
76        $("#" + _settings.toId).change(toAirportChanged);
77    }
78    
79    function fromAirportChanged(){
80        
81     // Always clear the map first if `showAllRoutesOnLoad` is false
82    if (!_settings.showAllRoutesOnLoad) {
83        clearMap();
84    }
85
86    // If no selection is made, stop here
87    if (this.value === "") {
88        return;
89    }
90    
91        var routes = getRoutes(_airports[this.value]);
92        
93        drawRoutes(routes);
94         
95        $("#" + _settings.toId).find('option').remove();
96        
97        if(this.value == ""){
98            return;
99        }
100        
101        $("#" + _settings.toId).append("<option></option>");
102        
103        for(var i = 0; i < routes.length; i++){
104            $("#" + _settings.toId).append("<option>
104" + routes[i].To + "</option>");
105        }
106        
107        _settings.toAirportsChanged();
108    };
109    
110    function toAirportChanged(){
111        //if value is blank show all from routes
112        if(this.value == ""){
113            drawRoutes(getRoutes(_airports[$("#" + _settings.fromId).val()]));
114        }else{
115            var fromAirport = _airports[$("#" + _settings.fromId).val()];
116            var toAirport = _airports[$("#" + _settings.toId).val()];
117
118            for(var i = 0; i < _routes.length; i++){
119                if(_routes[i].From == fromAirport.name && _routes[i].To == toAirport.name){
120                    drawRoutes([_routes[i]]);
121                }
122            }            
123        }
124    };
125        
126    function getAirports(routes){
127        if(routes == null || typeof routes == "undefined"){
128            routes = _routes;
129        };
130        
131        var airports = {};
132        
133        for(var i = 0; i < routes.length; i++){
134            if(!(routes[i].From in airports)){
135                airports[routes[i].From] = {
136                    name: routes[i].From,
137                    lat: parseFloat(routes[i].FromLat),
138                    lng: parseFloat(routes[i].FromLon),
139                    surface: routes[i].FromSurface,
140                    sortIndex: (routes[i].FromSortOrder == "") ? 10000 : parseInt(routes[i].FromSortOrder)
141                }
142            }
143            
144            if(!(routes[i].To in airports)){
145                airports[routes[i].To] = {
146                    name: routes[i].To,
147                    lat: parseFloat(routes[i].ToLat),
148                    lng: parseFloat(routes[i].ToLon),
149                    surface: routes[i].ToSurface,
150                    sortIndex: (routes[i].ToSortOrder == "") ? 10000 : parseInt(routes[i].ToSortOrder)
151                }
152            }            
153        }
154        
155        return airports;
156    };
157    
158    function getRoutes(airport){
159         if(airport == null || typeof airport == "undefined"){
160            return _routes;
161        };
162               
163        var routes = [];
164        
165        for(var i = 0; i < _routes.length; i++){
166            if(_routes[i].From == airport.name){
167                routes.push(_routes[i])
168            }
169        }
170        
171        return routes;
172    }
173    
174    function addMarkers(routes){
175        //clear existing markers
176        for(var i = 0; i < _markers.length; i++){
177            _markers[i].setMap(null);
178        }
179        
180        _markers = [];        
181        
182        var airports = getAirports(routes);
183        var airport;
184        
185        for(var key in airports){
186            airport = airports[key];
187            
188            var icon;
189            
190            if(airport.name == $("#" + _settings.fromId).val()){
191                icon = _settings.fromMarkerIcon;
192            }else{
193                icon = _settings.toMarkerIcon;
194            }
195            
196            var marker = new google.maps.Marker({
197                position: {lat: airport.lat, lng: airport.lng},
198                map: _map,
199                icon: icon,
200                title: airport.name,
201                airport: airport
202            });
203            
204            google.maps.event.addListener(marker, "click", markerClicked);            
205                  
206            _markers.push(marker);
207            
208            
209        }
210        
211        fitBounds();
212    }
213    
214    function markerClicked(){
215        _infoWindow.setContent(_settings.infoWindowHtml(this.airport));
216        _infoWindow.open(_map, this);        
217    }
218    
219    function drawRoutes(routes){
220        //clear existing lines
221        for(var i = 0; i < _polylines.length; i++){
222            _polylines[i].setMap(null);
223        }
224        
225        _polylines = [];
226        
227        if(routes == null || typeof routes == "undefined"){
228            addMarkers(_routes);
229            return;
230        }
231        
232        addMarkers(routes);
233           
234        if(!_settings.drawPolylines){
235            return;
236        }           
237                
238        for(var i = 0; i < routes.length; i++){
239            var flightPath = new google.maps.Polyline({
240                path: [
241                        {lat: _airports[routes[i].From].lat, lng: _airports[routes[i].From].lng},
242                        {lat: _airports[routes[i].To].lat, lng: _airports[routes[i].To].lng}
243                      ],
244                geodesic: true,
245                strokeColor: _settings.strokeColor,
246                strokeOpacity: _settings.strokeOpacity,
247                strokeWeight: _settings.strokeWeight
248            });
249
250            flightPath.setMap(_map);
251            
252            _polylines.push(flightPath);
253        }
254    }
255    
256    function fitBounds() {
257        if(!_settings.fitBounds){
258            return;
259        }
260        
261        var bounds = new google.maps.LatLngBounds();
262        
263        for (var i = 0; i < _markers.length; i++) {
264        bounds.extend(_markers[i].getPosition());
265        }
266
267       // _map.fitBounds(bounds);    
268        
269        _map.panTo(bounds.getCenter());
270        
271        google.maps.event.addListenerOnce(_map, 'idle', function() {
272            _map.fitBounds(bounds);
273        });            
274    }
275                
276    //Public methods/properties
277    return{
278        init: init,
279    };       
280}();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.