All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.graphhopper.maps.js.main-template.js Maven / Gradle / Ivy

There is a newer version: 10.0
Show newest version
var Flatpickr = require('flatpickr');
require('flatpickr/dist/l10n');

var L = require('leaflet');
require('leaflet-contextmenu');
require('leaflet-loading');
require('leaflet.heightgraph');
var moment = require('moment');
require('./lib/leaflet_numbered_markers.js');

global.jQuery = require('jquery');
global.$ = global.jQuery;
require('./lib/jquery-ui-custom-1.12.0.min.js');
require('./lib/jquery.history.js');
require('./lib/jquery.autocomplete.js');

var ghenv = require("./config/options.js").options;
console.log(ghenv.environment);

var GHInput = require('./graphhopper/GHInput.js');
var GHRequest = require('./graphhopper/GHRequest.js');
var host = ghenv.routing.host;
if (!host) {
    if (location.port === '') {
        host = location.protocol + '//' + location.hostname;
    } else {
        host = location.protocol + '//' + location.hostname + ":" + location.port;
    }
}

var AutoComplete = require('./autocomplete.js');
if (ghenv.environment === 'development') {
    var autocomplete = AutoComplete.prototype.createStub();
} else {
    var autocomplete = new AutoComplete(ghenv.geocoding.host, ghenv.geocoding.api_key);
}

var mapLayer = require('./map.js');
var nominatim = require('./nominatim.js');
var routeManipulation = require('./routeManipulation.js');
var gpxExport = require('./gpxexport.js');
var messages = require('./messages.js');
var translate = require('./translate.js');
var customModelEditor = require('custom-model-editor/dist/index.js');

var format = require('./tools/format.js');
var urlTools = require('./tools/url.js');
var tileLayers = require('./config/tileLayers.js');
if(ghenv.with_tiles)
   tileLayers.enableVectorTiles();

var debug = false;
var ghRequest = new GHRequest(host, ghenv.routing.api_key);
var bounds = {};
var metaVersionInfo;

// usage: log('inside coolFunc',this,arguments);
// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
if (global.window) {
    window.log = function () {
        log.history = log.history || [];   // store logs to an array for reference
        log.history.push(arguments);
        if (this.console && debug) {
            console.log(Array.prototype.slice.call(arguments));
        }
    };
}

$(document).ready(function (e) {
    // fixing cross domain support e.g in Opera
    jQuery.support.cors = true;

    gpxExport.addGpxExport(ghRequest);
    // we start without encoded values, they will be loaded later
    var cmEditor = customModelEditor.create({}, function (element) {
        $("#custom-model-editor").append(element);
    });

    cmEditor.validListener = function(valid) {
        $("#custom-model-search-button").prop('disabled', !valid);
    };
    ghRequest.cmEditor = cmEditor;
    ghRequest.cmEditorActive = false;
    var toggleCustomModelBox = function(sendRoute) {
        $("#custom-model-box").toggle();
        ghRequest.cmEditorActive = !ghRequest.cmEditorActive;
        // avoid default action, so use a different search button
        $("#searchButton").toggle();
        mapLayer.adjustMapSize();
        cmEditor.cm.refresh();
        cmEditor.cm.focus();
        cmEditor.cm.setCursor(cmEditor.cm.lineCount());
        if (sendRoute)
            sendCustomData();
    };
    $("#custom-model-button").click(function() {
        toggleCustomModelBox(true);
    });
    function showCustomModelExample() {
        cmEditor.value =
            "{"
            + "\n \"speed\": ["
            + "\n  {"
            + "\n   \"if\": \"road_class == MOTORWAY\","
            + "\n   \"multiply_by\": 0.8"
            + "\n  }"
            + "\n ],"
            + "\n \"priority\": ["
            + "\n  {"
            + "\n   \"if\": \"road_environment == TUNNEL\","
            + "\n   \"multiply_by\": 0.0"
            + "\n  },"
            + "\n  {"
            + "\n   \"if\": \"max_weight < 3\","
            + "\n   \"multiply_by\": 0.0"
            + "\n  }"
            + "\n ]"
            + "\n}";
        cmEditor.cm.focus();
        cmEditor.cm.setCursor(0);
        cmEditor.cm.execCommand('selectAll');
        cmEditor.cm.refresh();
    }
    $("#custom-model-example").click(function () {
        showCustomModelExample();
        return false;
    });

    $("#export-link").click(function (e) {
        try {
          e.preventDefault();
          var url = location.href;
          if(url.indexOf("?") > 0)
            url = url.substring(0, url.indexOf("?")) + ghRequest.createHistoryURL() + "&layer=" + encodeURIComponent(tileLayers.activeLayerName);
          if(ghRequest.cmEditorActive) {
            var text = cmEditor.value.replaceAll("&","%26");
            url += "&custom_model=" + new URLSearchParams(JSON.stringify(JSON.parse(text))).toString();
          }
          navigator.clipboard.writeText(url).then(() => { alert('Link copied to clipboard'); });
        } catch(e) { console.warn(e); }
    });

    var sendCustomData = function () {
        ghRequest.ignoreCustomErrors = false;
        mySubmit();
    };

    var sendCustomDataIgnoreErrors = function () {
        ghRequest.ignoreCustomErrors = true;
        mySubmit();
    }

    cmEditor.setExtraKey('Ctrl-Enter', sendCustomDataIgnoreErrors);
    $("#custom-model-search-button").click(sendCustomData);

    if (isProduction())
        $('#hosting').show();

    var History = window.History;
    if (History.enabled) {
        History.Adapter.bind(window, 'statechange', function () {
            // No need for workaround?
            // Chrome and Safari always emit a popstate event on page load, but Firefox doesn’t
            // https://github.com/defunkt/jquery-pjax/issues/143#issuecomment-6194330

            var state = History.getState();
            initFromParams(state.data, true);
        });
    }

    $('#locationform').submit(function (e) {
        // no page reload
        e.preventDefault();
        mySubmit();
    });

    var urlParams = urlTools.parseUrlWithHisto();

    var customModelJSON = urlParams.custom_model;
    if(customModelJSON) {
        toggleCustomModelBox(false);
        cmEditor.value = customModelJSON; // if json parsing fails we still have the partial custom model in the box
        try {
            var tmpObj = JSON.parse(customModelJSON);
            cmEditor.value = JSON.stringify(tmpObj, null, 2);
        } catch(e) {
            console.warn('cannot pretty print custom model: ' + e);
        }

    } else {
        // todo: the idea was to highlight everything so if we start typing the example is overwritten. But unfortunately
        // this does not work. And not even sure this is so useful?
        showCustomModelExample();
    }

    $.when(ghRequest.fetchTranslationMap(urlParams.locale), ghRequest.getInfo())
            .then(function (arg1, arg2) {
                // init translation retrieved from first call (fetchTranslationMap)
                var translations = arg1[0];
                autocomplete.setLocale(translations.locale);
                ghRequest.setLocale(translations.locale);
                translate.init(translations);

                // init bounding box from getInfo result
                var json = arg2[0];
                var tmp = json.bbox;
                bounds.initialized = true;
                bounds.minLon = tmp[0];
                bounds.minLat = tmp[1];
                bounds.maxLon = tmp[2];
                bounds.maxLat = tmp[3];
                nominatim.setBounds(bounds);
                var profilesDiv = $("#profiles");

                function createButton(profile, hide) {
                    var vehicle = profile.vehicle;
                    var profileName = profile.name;
                    var button = $("




© 2015 - 2024 Weber Informatics LLC | Privacy Policy