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         I18n.t('javascripts.directions.instructions.continue_on'),      // 1
 
  16         I18n.t('javascripts.directions.instructions.slight_right'),     // 2
 
  17         I18n.t('javascripts.directions.instructions.turn_right'),       // 3
 
  18         I18n.t('javascripts.directions.instructions.sharp_right'),      // 4
 
  19         I18n.t('javascripts.directions.instructions.uturn'),            // 5
 
  20         I18n.t('javascripts.directions.instructions.sharp_left'),       // 6
 
  21         I18n.t('javascripts.directions.instructions.turn_left'),        // 7
 
  22         I18n.t('javascripts.directions.instructions.slight_left'),      // 8
 
  23         I18n.t('javascripts.directions.instructions.via_point'),        // 9
 
  24         I18n.t('javascripts.directions.instructions.follow'),           // 10
 
  25         I18n.t('javascripts.directions.instructions.roundabout'),       // 11
 
  26         I18n.t('javascripts.directions.instructions.leave_roundabout'), // 12
 
  27         I18n.t('javascripts.directions.instructions.stay_roundabout'),  // 13
 
  28         I18n.t('javascripts.directions.instructions.start'),            // 14
 
  29         I18n.t('javascripts.directions.instructions.destination'),      // 15
 
  30         I18n.t('javascripts.directions.instructions.against_oneway'),   // 16
 
  31         I18n.t('javascripts.directions.instructions.end_oneway')        // 17
 
  34       var url = document.location.protocol + "//router.project-osrm.org/viaroute?z=14&output=json&instructions=true";
 
  36       for (var i = 0; i < points.length; i++) {
 
  37         url += "&loc=" + points[i].lat + ',' + points[i].lng;
 
  38         if (hintData && previousPoints && previousPoints[i].equals(points[i])) {
 
  39           url += "&hint=" + hintData.locations[i];
 
  43       if (hintData && hintData.checksum) {
 
  44         url += "&checksum=" + hintData.checksum;
 
  50         success: function (data) {
 
  51           if (data.status === 207)
 
  52             return callback(true);
 
  54           previousPoints = points;
 
  55           hintData = data.hint_data;
 
  57           var line = L.PolylineUtil.decode(data.route_geometry, {
 
  62           for (i = 0; i < data.route_instructions.length; i++) {
 
  63             var s = data.route_instructions[i];
 
  65             var instCodes = s[0].split('-');
 
  66             var instText = "<b>" + (i + 1) + ".</b> ";
 
  67             instText += TURN_INSTRUCTIONS[instCodes[0]];
 
  69               instText += I18n.t('javascripts.directions.instructions.exit', { exit: instCodes[1] } );
 
  71             if (instCodes[0] !== 15) {
 
  73               instText += s[1] ? "<b>" + s[1] + "</b>" : I18n.t('javascripts.directions.instructions.unnamed');
 
  75             if ((i + 1) < data.route_instructions.length) {
 
  76               linesegend = data.route_instructions[i + 1][3] + 1;
 
  78               linesegend = s[3] + 1;
 
  80             steps.push([line[s[3]], s[0].split('-')[0], instText, s[2], line.slice(s[3], linesegend)]);
 
  86             distance: data.route_summary.total_distance,
 
  87             time: data.route_summary.total_time
 
  95 OSM.Directions.addEngine(new OSRMEngine(), true);