1010'use strict' ;
1111
1212var d3 = require ( 'd3' ) ;
13+ var Color = require ( '../../components/color' ) ;
1314var Drawing = require ( '../../components/drawing' ) ;
15+ var Lib = require ( '../../lib' ) ;
1416var Registry = require ( '../../registry' ) ;
1517
18+ var attributes = require ( './attributes' ) ,
19+ attributeTextFont = attributes . textfont ,
20+ attributeInsideTextFont = attributes . insidetextfont ,
21+ attributeOutsideTextFont = attributes . outsidetextfont ;
22+ var helpers = require ( './helpers' ) ;
23+
1624function style ( gd , cd ) {
1725 var s = cd ? cd [ 0 ] . node3 : d3 . select ( gd ) . selectAll ( 'g.trace.bars' ) ;
1826 var barcount = s . size ( ) ;
@@ -50,21 +58,8 @@ function stylePoints(sel, trace, gd) {
5058
5159 txs . each ( function ( d ) {
5260 var tx = d3 . select ( this ) ;
53- var textFont ;
54-
55- if ( tx . classed ( 'bartext-inside' ) ) {
56- textFont = trace . insidetextfont ;
57- } else if ( tx . classed ( 'bartext-outside' ) ) {
58- textFont = trace . outsidetextfont ;
59- }
60- if ( ! textFont ) textFont = trace . textfont ;
61-
62- function cast ( k ) {
63- var cont = textFont [ k ] ;
64- return Array . isArray ( cont ) ? cont [ d . i ] : cont ;
65- }
66-
67- Drawing . font ( tx , cast ( 'family' ) , cast ( 'size' ) , cast ( 'color' ) ) ;
61+ var font = determineFont ( tx , d , trace , gd ) ;
62+ Drawing . font ( tx , font ) ;
6863 } ) ;
6964}
7065
@@ -73,14 +68,105 @@ function styleOnSelect(gd, cd) {
7368 var trace = cd [ 0 ] . trace ;
7469
7570 if ( trace . selectedpoints ) {
76- Drawing . selectedPointStyle ( s . selectAll ( 'path' ) , trace ) ;
77- Drawing . selectedTextStyle ( s . selectAll ( 'text' ) , trace ) ;
71+ stylePointsInSelectionMode ( s , trace , gd ) ;
7872 } else {
7973 stylePoints ( s , trace , gd ) ;
8074 }
8175}
8276
77+ function stylePointsInSelectionMode ( s , trace , gd ) {
78+ Drawing . selectedPointStyle ( s . selectAll ( 'path' ) , trace ) ;
79+ styleTextInSelectionMode ( s . selectAll ( 'text' ) , trace , gd ) ;
80+ }
81+
82+ function styleTextInSelectionMode ( txs , trace , gd ) {
83+ txs . each ( function ( d ) {
84+ var tx = d3 . select ( this ) ;
85+ var font ;
86+
87+ if ( d . selected ) {
88+ font = Lib . extendFlat ( { } , determineFont ( tx , d , trace , gd ) ) ;
89+
90+ var selectedFontColor = trace . selected . textfont && trace . selected . textfont . color ;
91+ if ( selectedFontColor ) {
92+ font . color = selectedFontColor ;
93+ }
94+
95+ Drawing . font ( tx , font ) ;
96+ } else {
97+ Drawing . selectedTextStyle ( tx , trace ) ;
98+ }
99+ } ) ;
100+ }
101+
102+ function determineFont ( tx , d , trace , gd ) {
103+ var layoutFont = gd . _fullLayout . font ;
104+ var textFont = trace . textfont ;
105+
106+ if ( tx . classed ( 'bartext-inside' ) ) {
107+ var barColor = getBarColor ( d , trace ) ;
108+ textFont = getInsideTextFont ( trace , d . i , layoutFont , barColor ) ;
109+ } else if ( tx . classed ( 'bartext-outside' ) ) {
110+ textFont = getOutsideTextFont ( trace , d . i , layoutFont ) ;
111+ }
112+
113+ return textFont ;
114+ }
115+
116+ function getTextFont ( trace , index , defaultValue ) {
117+ return getFontValue (
118+ attributeTextFont , trace . textfont , index , defaultValue ) ;
119+ }
120+
121+ function getInsideTextFont ( trace , index , layoutFont , barColor ) {
122+ var defaultFont = getTextFont ( trace , index , layoutFont ) ;
123+
124+ var wouldFallBackToLayoutFont =
125+ ( trace . _input . textfont === undefined || trace . _input . textfont . color === undefined ) ||
126+ ( Array . isArray ( trace . textfont . color ) && trace . textfont . color [ index ] === undefined ) ;
127+ if ( wouldFallBackToLayoutFont ) {
128+ defaultFont = {
129+ color : Color . contrast ( barColor ) ,
130+ family : defaultFont . family ,
131+ size : defaultFont . size
132+ } ;
133+ }
134+
135+ return getFontValue (
136+ attributeInsideTextFont , trace . insidetextfont , index , defaultFont ) ;
137+ }
138+
139+ function getOutsideTextFont ( trace , index , layoutFont ) {
140+ var defaultFont = getTextFont ( trace , index , layoutFont ) ;
141+ return getFontValue (
142+ attributeOutsideTextFont , trace . outsidetextfont , index , defaultFont ) ;
143+ }
144+
145+ function getFontValue ( attributeDefinition , attributeValue , index , defaultValue ) {
146+ attributeValue = attributeValue || { } ;
147+
148+ var familyValue = helpers . getValue ( attributeValue . family , index ) ,
149+ sizeValue = helpers . getValue ( attributeValue . size , index ) ,
150+ colorValue = helpers . getValue ( attributeValue . color , index ) ;
151+
152+ return {
153+ family : helpers . coerceString (
154+ attributeDefinition . family , familyValue , defaultValue . family ) ,
155+ size : helpers . coerceNumber (
156+ attributeDefinition . size , sizeValue , defaultValue . size ) ,
157+ color : helpers . coerceColor (
158+ attributeDefinition . color , colorValue , defaultValue . color )
159+ } ;
160+ }
161+
162+ function getBarColor ( cd , trace ) {
163+ return cd . mc || trace . marker . color ;
164+ }
165+
83166module . exports = {
84167 style : style ,
85- styleOnSelect : styleOnSelect
168+ styleOnSelect : styleOnSelect ,
169+ getInsideTextFont : getInsideTextFont ,
170+ getOutsideTextFont : getOutsideTextFont ,
171+ getBarColor : getBarColor
86172} ;
0 commit comments