@@ -69,6 +69,45 @@ module.exports = function(version, _options) {
69
69
70
70
return config . join ( '' ) ;
71
71
} ,
72
+ getWayName : function ( language , step , options ) {
73
+ var classes = options ? options . classes || [ ] : [ ] ;
74
+ if ( typeof step !== 'object' ) throw new Error ( 'step must be an Object' ) ;
75
+ if ( ! Array . isArray ( classes ) ) throw new Error ( 'classes must be an Array or undefined' ) ;
76
+
77
+ var wayName ;
78
+ var name = step . name || '' ;
79
+ var ref = ( step . ref || '' ) . split ( ';' ) [ 0 ] ;
80
+
81
+ // Remove hacks from Mapbox Directions mixing ref into name
82
+ if ( name === step . ref ) {
83
+ // if both are the same we assume that there used to be an empty name, with the ref being filled in for it
84
+ // we only need to retain the ref then
85
+ name = '' ;
86
+ }
87
+ name = name . replace ( ' (' + step . ref + ')' , '' ) ;
88
+
89
+ // In attempt to avoid using the highway name of a way,
90
+ // check and see if the step has a class which should signal
91
+ // the ref should be used instead of the name.
92
+ var wayMotorway = classes . indexOf ( 'motorway' ) !== - 1 ;
93
+
94
+ if ( name && ref && name !== ref && ! wayMotorway ) {
95
+ var phrase = instructions [ language ] [ version ] . phrase [ 'name and ref' ] ||
96
+ instructions . en [ version ] . phrase [ 'name and ref' ] ;
97
+ wayName = this . tokenize ( language , phrase , {
98
+ name : name ,
99
+ ref : ref
100
+ } ) ;
101
+ } else if ( name && ref && wayMotorway && ( / \d / ) . test ( ref ) ) {
102
+ wayName = ref ;
103
+ } else if ( ! name && ref ) {
104
+ wayName = ref ;
105
+ } else {
106
+ wayName = name ;
107
+ }
108
+
109
+ return wayName ;
110
+ } ,
72
111
compile : function ( language , step , options ) {
73
112
if ( ! language ) throw new Error ( 'No language code provided' ) ;
74
113
if ( languages . supportedCodes . indexOf ( language ) === - 1 ) throw new Error ( 'language code ' + language + ' not loaded' ) ;
@@ -127,40 +166,7 @@ module.exports = function(version, _options) {
127
166
}
128
167
129
168
// Decide way_name with special handling for name and ref
130
- var wayName ;
131
- var name = step . name || '' ;
132
- var ref = ( step . ref || '' ) . split ( ';' ) [ 0 ] ;
133
-
134
- // Remove hacks from Mapbox Directions mixing ref into name
135
- if ( name === step . ref ) {
136
- // if both are the same we assume that there used to be an empty name, with the ref being filled in for it
137
- // we only need to retain the ref then
138
- name = '' ;
139
- }
140
- name = name . replace ( ' (' + step . ref + ')' , '' ) ;
141
-
142
- // In attempt to avoid using the highway name of a way,
143
- // check and see if the step has a class which should signal
144
- // the ref should be used instead of the name.
145
- var wayMotorway = false ;
146
- if ( options && options . classes ) {
147
- wayMotorway = options . classes . indexOf ( 'motorway' ) !== - 1 ;
148
- }
149
-
150
- if ( name && ref && name !== ref && ! wayMotorway ) {
151
- var phrase = instructions [ language ] [ version ] . phrase [ 'name and ref' ] ||
152
- instructions . en [ version ] . phrase [ 'name and ref' ] ;
153
- wayName = this . tokenize ( language , phrase , {
154
- name : name ,
155
- ref : ref
156
- } ) ;
157
- } else if ( name && ref && wayMotorway && ( / \d / ) . test ( ref ) ) {
158
- wayName = ref ;
159
- } else if ( ! name && ref ) {
160
- wayName = ref ;
161
- } else {
162
- wayName = name ;
163
- }
169
+ var wayName = this . getWayName ( language , step , options ) ;
164
170
165
171
// Decide which instruction string to use
166
172
// Destination takes precedence over name
0 commit comments