2 // Doesn't yet support hints
 
   4 function OSRMEngine() {
 
   5   var previousPoints, hintData;
 
   9     creditline: '<a href="http://project-osrm.org/" target="_blank">OSRM</a>',
 
  12     getRoute: function (points, callback) {
 
  13       var TURN_INSTRUCTIONS = [
 
  15         'javascripts.directions.instructions.continue',         // 1
 
  16         'javascripts.directions.instructions.slight_right',     // 2
 
  17         'javascripts.directions.instructions.turn_right',       // 3
 
  18         'javascripts.directions.instructions.sharp_right',      // 4
 
  19         'javascripts.directions.instructions.uturn',            // 5
 
  20         'javascripts.directions.instructions.sharp_left',       // 6
 
  21         'javascripts.directions.instructions.turn_left',        // 7
 
  22         'javascripts.directions.instructions.slight_left',      // 8
 
  23         'javascripts.directions.instructions.via_point',        // 9
 
  24         'javascripts.directions.instructions.follow',           // 10
 
  25         'javascripts.directions.instructions.roundabout',       // 11
 
  26         'javascripts.directions.instructions.leave_roundabout', // 12
 
  27         'javascripts.directions.instructions.stay_roundabout',  // 13
 
  28         'javascripts.directions.instructions.start',            // 14
 
  29         'javascripts.directions.instructions.destination',      // 15
 
  30         'javascripts.directions.instructions.against_oneway',   // 16
 
  31         'javascripts.directions.instructions.end_oneway',       // 17
 
  32         'javascripts.directions.instructions.ferry'             // 18
 
  36         { name: "z", value: "14" },
 
  37         { name: "output", value: "json" },
 
  38         { name: "instructions", value: true }
 
  41       for (var i = 0; i < points.length; i++) {
 
  42         params.push({ name: "loc", value: points[i].lat + "," + points[i].lng });
 
  44         if (hintData && previousPoints && previousPoints[i].equals(points[i])) {
 
  45           params.push({ name: "hint", value: hintData.locations[i] });
 
  49       if (hintData && hintData.checksum) {
 
  50         params.push({ name: "checksum", value: hintData.checksum });
 
  54         url: document.location.protocol + OSM.OSRM_URL,
 
  57         success: function (data) {
 
  58           if (data.status === 207)
 
  59             return callback(true);
 
  61           previousPoints = points;
 
  62           hintData = data.hint_data;
 
  64           var line = L.PolylineUtil.decode(data.route_geometry, {
 
  69           for (i = 0; i < data.route_instructions.length; i++) {
 
  70             var s = data.route_instructions[i];
 
  72             var instCodes = s[0].split('-');
 
  74               /* indicates a ferry in car routing mode, see https://github.com/Project-OSRM/osrm-backend/blob/6cbbd1e5a1b441eb27055f56956e1bac14832a58/profiles/car.lua#L151 */
 
  77             var instText = "<b>" + (i + 1) + ".</b> ";
 
  78             var name = s[1] ? "<b>" + s[1] + "</b>" : I18n.t('javascripts.directions.instructions.unnamed');
 
  79             if (instCodes[0] === "11" && instCodes[1]) {
 
  80               instText += I18n.t(TURN_INSTRUCTIONS[instCodes[0]] + '_with_exit', { exit: instCodes[1], name: name } );
 
  82               instText += I18n.t(TURN_INSTRUCTIONS[instCodes[0]] + '_without_exit', { name: name });
 
  84             if ((i + 1) < data.route_instructions.length) {
 
  85               linesegend = data.route_instructions[i + 1][3] + 1;
 
  87               linesegend = s[3] + 1;
 
  89             steps.push([line[s[3]], instCodes[0], instText, s[2], line.slice(s[3], linesegend)]);
 
  95             distance: data.route_summary.total_distance,
 
  96             time: data.route_summary.total_time
 
 107 OSM.Directions.addEngine(new OSRMEngine(), true);