+ let cachedHints = [];
+
+ function _processDirections(route) {
+ const INSTRUCTION_TEMPLATE = {
+ "continue": "continue",
+ "merge right": "merge_right",
+ "merge left": "merge_left",
+ "off ramp right": "offramp_right",
+ "off ramp left": "offramp_left",
+ "on ramp right": "onramp_right",
+ "on ramp left": "onramp_left",
+ "fork right": "fork_right",
+ "fork left": "fork_left",
+ "end of road right": "endofroad_right",
+ "end of road left": "endofroad_left",
+ "turn straight": "continue",
+ "turn slight right": "slight_right",
+ "turn right": "turn_right",
+ "turn sharp right": "sharp_right",
+ "turn uturn": "uturn",
+ "turn sharp left": "sharp_left",
+ "turn left": "turn_left",
+ "turn slight left": "slight_left",
+ "roundabout": "roundabout",
+ "rotary": "roundabout",
+ "exit roundabout": "exit_roundabout",
+ "exit rotary": "exit_roundabout",
+ "depart": "start",
+ "arrive": "destination"
+ };
+ const ICON_MAP = {
+ "continue": 0,
+ "merge right": 21,
+ "merge left": 20,
+ "off ramp right": 24,
+ "off ramp left": 25,
+ "on ramp right": 2,
+ "on ramp left": 6,
+ "fork right": 18,
+ "fork left": 19,
+ "end of road right": 22,
+ "end of road left": 23,
+ "turn straight": 0,
+ "turn slight right": 1,
+ "turn right": 2,
+ "turn sharp right": 3,
+ "turn uturn": 4,
+ "turn slight left": 5,
+ "turn left": 6,
+ "turn sharp left": 7,
+ "roundabout": 10,
+ "rotary": 10,
+ "exit roundabout": 10,
+ "exit rotary": 10,
+ "depart": 8,
+ "arrive": 14
+ };
+ function numToWord(num) {
+ return ["first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth"][num - 1];
+ }
+ function getManeuverId(maneuver) {
+ // special case handling
+ switch (maneuver.type) {
+ case "on ramp":
+ case "off ramp":
+ case "merge":
+ case "end of road":
+ case "fork":
+ return maneuver.type + " " + (maneuver.modifier.indexOf("left") >= 0 ? "left" : "right");
+ case "depart":
+ case "arrive":
+ case "roundabout":
+ case "rotary":
+ case "exit roundabout":
+ case "exit rotary":
+ return maneuver.type;
+ case "roundabout turn":
+ case "turn":
+ return "turn " + maneuver.modifier;
+ // for unknown types the fallback is turn
+ default:
+ return "turn " + maneuver.modifier;
+ }
+ }