@@ -10,6 +10,7 @@ var Colorscale = require('../../components/colorscale');
1010var Drawing = require ( '../../components/drawing' ) ;
1111var makeBubbleSizeFn = require ( '../scatter/make_bubble_size_func' ) ;
1212var subTypes = require ( '../scatter/subtypes' ) ;
13+ var isSupportedFont = require ( './constants' ) . isSupportedFont ;
1314var convertTextOpts = require ( '../../plots/mapbox/convert_text_opts' ) ;
1415var appendArrayPointValue = require ( '../../components/fx/helpers' ) . appendArrayPointValue ;
1516
@@ -372,13 +373,20 @@ function getTextFont(trace) {
372373 var family = font . family ;
373374 var style = font . style ;
374375 var weight = font . weight ;
375- var str = '' ;
376376
377- if ( weight === 'bold' ) {
377+ var parts = family . split ( ' ' ) ;
378+ var isItalic = parts [ parts . length - 1 ] === 'Italic' ;
379+ if ( isItalic ) parts . pop ( ) ;
380+ isItalic = isItalic || style === 'italic' ;
381+
382+ var str = parts . join ( ' ' ) ;
383+ if ( weight === 'bold' && parts . indexOf ( 'Bold' ) === - 1 ) {
378384 str += ' Bold' ;
379385 } else if ( weight <= 1000 ) { // numeric font-weight
380386 // See supportedFonts
381- if ( family . slice ( 10 ) === 'Metropolis' ) {
387+
388+ if ( parts [ 0 ] === 'Metropolis' ) {
389+ str = 'Metropolis' ;
382390 if ( weight > 850 ) str += ' Black' ;
383391 else if ( weight > 750 ) str += ' Extra Bold' ;
384392 else if ( weight > 650 ) str += ' Bold' ;
@@ -387,26 +395,35 @@ function getTextFont(trace) {
387395 else if ( weight > 350 ) str += ' Regular' ;
388396 else if ( weight > 250 ) str += ' Light' ;
389397 else if ( weight > 150 ) str += ' Extra Light' ;
390- str += ' Thin' ;
391- } else if ( family . slice ( 9 ) === 'Open Sans' ) {
392- if ( weight > 750 ) str += ' Extra Bold' ;
393- else if ( weight > 650 ) str += ' Bold' ;
398+ else str += ' Thin' ;
399+ } else if ( parts [ 0 ] === 'Open' && parts [ 1 ] === 'Sans' ) {
400+ str = 'Open Sans' ;
401+
402+ // N.B.Extra Bold is not supported although is listed as supported!
403+ /* if(weight > 750) str += ' Extra Bold';
404+ else */ if ( weight > 650 ) str += ' Bold' ;
394405 else if ( weight > 550 ) str += ' Semibold' ;
395- else if ( weight > 450 ) str += ' Medium' ;
396406 else if ( weight > 350 ) str += ' Regular' ;
397- else if ( weight > 250 ) str += ' Light' ;
398- else if ( weight > 150 ) str += ' Extra Light' ;
399- str += ' Thin' ;
407+ else str += ' Light' ;
400408 } else { // Other families
401- if ( weight > 500 ) str += ' Bold' ;
402- str += ' Regular' ;
409+ str = 'Klokantech Noto Sans' ;
410+ if ( parts [ 3 ] === 'CJK' ) str += ' CJK' ;
411+ str += ( weight > 500 ) ? ' Bold' : ' Regular' ;
403412 }
404413 }
405414
406- if ( style === 'italic' ) str += ' Italic' ;
415+ if ( isItalic ) str += ' Italic' ;
416+
417+ if ( str === 'Open Sans Regular Italic' ) str = 'Open Sans Italic' ;
418+ else if ( str === 'Open Sans Regular Bold' ) str = 'Open Sans Bold' ;
419+ else if ( str === 'Open Sans Regular Bold Italic' ) str = 'Open Sans Bold Italic' ;
420+ else if ( str === 'Klokantech Noto Sans Regular Italic' ) str = 'Klokantech Noto Sans Italic' ;
421+
422+ // Ensure the result is a supported font
423+ if ( ! isSupportedFont ( str ) ) {
424+ str = family ;
425+ }
407426
408- var textFont = family ;
409- if ( str ) textFont = textFont . replace ( ' Regular' , str ) ;
410- textFont = textFont . split ( ', ' ) ;
427+ var textFont = str . split ( ', ' ) ;
411428 return textFont ;
412429}
0 commit comments