@@ -200,6 +200,7 @@ export class Property<T extends ViewBase, U> implements TypedPropertyDescriptor<
200200 let affectsLayout : boolean = options . affectsLayout ;
201201 let valueChanged = options . valueChanged ;
202202 let valueConverter = options . valueConverter ;
203+ let overrideConverter = false ;
203204
204205 this . overrideHandlers = function ( options : PropertyOptions < T , U > ) {
205206 if ( typeof options . equalityComparer !== 'undefined' ) {
@@ -213,6 +214,7 @@ export class Property<T extends ViewBase, U> implements TypedPropertyDescriptor<
213214 }
214215 if ( typeof options . valueConverter !== 'undefined' ) {
215216 valueConverter = options . valueConverter ;
217+ overrideConverter = true ;
216218 }
217219 } ;
218220
@@ -229,7 +231,7 @@ export class Property<T extends ViewBase, U> implements TypedPropertyDescriptor<
229231 value = wrapped ? WrappedValue . unwrap ( boxedValue ) : boxedValue ;
230232
231233 if ( valueConverter && typeof value === 'string' ) {
232- value = valueConverter ( value ) ;
234+ value = overrideConverter ? valueConverter . call ( this , value ) : valueConverter ( value ) ;
233235 }
234236 }
235237
@@ -372,7 +374,7 @@ export class CoercibleProperty<T extends ViewBase, U> extends Property<T, U> imp
372374 let valueChanged = options . valueChanged ;
373375 let valueConverter = options . valueConverter ;
374376 let coerceCallback = options . coerceValue ;
375-
377+ let overrideConverter = false ;
376378 const property = this ;
377379
378380 this . overrideHandlers = function ( options : CoerciblePropertyOptions < T , U > ) {
@@ -387,6 +389,7 @@ export class CoercibleProperty<T extends ViewBase, U> extends Property<T, U> imp
387389 }
388390 if ( typeof options . valueConverter !== 'undefined' ) {
389391 valueConverter = options . valueConverter ;
392+ overrideConverter = true ;
390393 }
391394 if ( typeof options . coerceValue !== 'undefined' ) {
392395 coerceCallback = options . coerceValue ;
@@ -411,7 +414,7 @@ export class CoercibleProperty<T extends ViewBase, U> extends Property<T, U> imp
411414 value = wrapped ? WrappedValue . unwrap ( boxedValue ) : boxedValue ;
412415
413416 if ( valueConverter && typeof value === 'string' ) {
414- value = valueConverter ( value ) ;
417+ value = overrideConverter ? valueConverter . call ( this , value ) : valueConverter ( value ) ;
415418 }
416419
417420 this [ coerceKey ] = value ;
@@ -615,6 +618,7 @@ export class CssProperty<T extends Style, U> {
615618 let equalityComparer = options . equalityComparer ;
616619 let valueChanged = options . valueChanged ;
617620 let valueConverter = options . valueConverter ;
621+ let overrideConverter = false ;
618622
619623 this . overrideHandlers = function ( options : CssPropertyOptions < T , U > ) {
620624 if ( typeof options . equalityComparer !== 'undefined' ) {
@@ -628,6 +632,7 @@ export class CssProperty<T extends Style, U> {
628632 }
629633 if ( typeof options . valueConverter !== 'undefined' ) {
630634 valueConverter = options . valueConverter ;
635+ overrideConverter = true ;
631636 }
632637 } ;
633638
@@ -649,7 +654,7 @@ export class CssProperty<T extends Style, U> {
649654 delete this [ sourceKey ] ;
650655 } else {
651656 this [ sourceKey ] = ValueSource . Local ;
652- value = valueConverter && typeof newValue === 'string' ? valueConverter ( newValue ) : < U > newValue ;
657+ value = valueConverter && typeof newValue === 'string' ? ( overrideConverter ? valueConverter . call ( view , newValue ) : valueConverter ( newValue ) ) : < U > newValue ;
653658 }
654659
655660 const oldValue = < U > ( key in this ? this [ key ] : defaultValue ) ;
@@ -732,7 +737,7 @@ export class CssProperty<T extends Style, U> {
732737 value = defaultValue ;
733738 delete this [ sourceKey ] ;
734739 } else {
735- value = valueConverter && typeof newValue === 'string' ? valueConverter ( newValue ) : < U > newValue ;
740+ value = valueConverter && typeof newValue === 'string' ? ( overrideConverter ? valueConverter . call ( view , newValue ) : valueConverter ( newValue ) ) : < U > newValue ;
736741 this [ sourceKey ] = ValueSource . Css ;
737742 }
738743
@@ -1071,6 +1076,7 @@ export class InheritedCssProperty<T extends Style, U> extends CssProperty<T, U>
10711076 let equalityComparer = options . equalityComparer ;
10721077 let valueChanged = options . valueChanged ;
10731078 let valueConverter = options . valueConverter ;
1079+ let overrideHandlers = false ;
10741080
10751081 const property = this ;
10761082
@@ -1086,6 +1092,7 @@ export class InheritedCssProperty<T extends Style, U> extends CssProperty<T, U>
10861092 }
10871093 if ( typeof options . valueConverter !== 'undefined' ) {
10881094 valueConverter = options . valueConverter ;
1095+ overrideHandlers = true ;
10891096 }
10901097 } ;
10911098
@@ -1132,7 +1139,7 @@ export class InheritedCssProperty<T extends Style, U> extends CssProperty<T, U>
11321139 } else {
11331140 this [ sourceKey ] = valueSource ;
11341141 if ( valueConverter && typeof boxedValue === 'string' ) {
1135- value = valueConverter ( boxedValue ) ;
1142+ value = overrideHandlers ? valueConverter . call ( this , boxedValue ) : valueConverter ( boxedValue ) ;
11361143 } else {
11371144 value = boxedValue ;
11381145 }
0 commit comments