@@ -20,8 +20,41 @@ function MapboxBrowserLanguage(options) {
20
20
} , options ) ;
21
21
}
22
22
23
- function isNameField ( field ) {
24
- return typeof field === 'string' && field . startsWith ( '{name' ) ;
23
+ function isNameStringField ( property ) {
24
+ return typeof property === 'string' && property . startsWith ( '{name' ) ;
25
+ }
26
+
27
+ function isNameFunctionField ( property ) {
28
+ return property . stops && property . stops . filter ( function ( stop ) {
29
+ return stop [ 1 ] . startsWith ( '{name' ) ;
30
+ } ) . length > 0 ;
31
+ }
32
+
33
+ function adaptPropertyLanguage ( property , languageFieldName ) {
34
+ if ( isNameStringField ( property ) ) return languageFieldName ;
35
+ if ( isNameFunctionField ( property ) ) {
36
+ const newStops = property . stops . map ( function ( stop ) {
37
+ if ( stop [ 1 ] . startsWith ( '{name' ) ) {
38
+ return [ stop [ 0 ] , languageFieldName ] ;
39
+ }
40
+ return stop ;
41
+ } ) ;
42
+ return Object . assign ( { } , property , {
43
+ stops : newStops
44
+ } ) ;
45
+ }
46
+ return property ;
47
+ }
48
+
49
+ function changeLayerTextProperty ( layer , languageFieldName ) {
50
+ if ( layer . layout && layer . layout [ 'text-field' ] ) {
51
+ return Object . assign ( { } , layer , {
52
+ layout : Object . assign ( { } , layer . layout , {
53
+ 'text-field' : adaptPropertyLanguage ( layer . layout [ 'text-field' ] , languageFieldName )
54
+ } )
55
+ } ) ;
56
+ }
57
+ return layer ;
25
58
}
26
59
27
60
/**
@@ -32,14 +65,7 @@ MapboxBrowserLanguage.prototype.changeLanguage = function (style) {
32
65
var field = this . options . getLanguageField ( ) ;
33
66
34
67
var changedLayers = style . layers . map ( function ( layer ) {
35
- if ( layer . layout && layer . layout [ 'text-field' ] && isNameField ( layer . layout [ 'text-field' ] ) ) {
36
- return Object . assign ( { } , layer , {
37
- layout : Object . assign ( { } , layer . layout , {
38
- 'text-field' : field
39
- } )
40
- } ) ;
41
- }
42
- return layer ;
68
+ return changeLayerTextProperty ( layer , field ) ;
43
69
} ) ;
44
70
45
71
var languageStyle = Object . assign ( { } , style , {
0 commit comments