- function Endpoint(input, iconUrl) {
- var endpoint = {};
-
- endpoint.marker = L.marker([0, 0], {
- icon: L.icon({
- iconUrl: iconUrl,
- iconSize: [25, 41],
- iconAnchor: [12, 41],
- popupAnchor: [1, -34],
- shadowUrl: OSM.MARKER_SHADOW,
- shadowSize: [41, 41]
- }),
- draggable: true
- });
-
- endpoint.marker.on('drag dragend', function (e) {
- var dragging = (e.type === 'drag');
- if (dragging && !chosenEngine.draggable) return;
- if (dragging && awaitingRoute) return;
- endpoint.setLatLng(e.target.getLatLng());
- if (map.hasLayer(polyline)) {
- getRoute(false, !dragging);
- }
- });
-
- input.on("keydown", function() {
- input.removeClass("error");
- });
-
- input.on("change", function (e) {
- awaitingGeocode = true;
-
- // make text the same in both text boxes
- var value = e.target.value;
- endpoint.setValue(value);
- });
-
- endpoint.setValue = function(value, latlng) {
- endpoint.value = value;
- delete endpoint.latlng;
- input.val(value);
-
- if (latlng) {
- endpoint.setLatLng(latlng);
- } else {
- endpoint.getGeocode();
- }
- };
-
- endpoint.getGeocode = function() {
- // if no one has entered a value yet, then we can't geocode, so don't
- // even try.
- if (!endpoint.value) {
- return;
- }
-
- endpoint.awaitingGeocode = true;
-
- $.getJSON(OSM.NOMINATIM_URL + 'search?q=' + encodeURIComponent(endpoint.value) + '&format=json', function (json) {
- endpoint.awaitingGeocode = false;
- endpoint.hasGeocode = true;
- if (json.length === 0) {
- input.addClass("error");
- alert(I18n.t('javascripts.directions.errors.no_place', {place: endpoint.value}));
- return;
- }
-
- endpoint.setLatLng(L.latLng(json[0]));
-
- input.val(json[0].display_name);