Skip to content

Commit 9841646

Browse files
committed
implement (x|y)other hovertemplate
1 parent 14b31a1 commit 9841646

File tree

2 files changed

+46
-21
lines changed

2 files changed

+46
-21
lines changed

src/components/fx/hover.js

+15-8
Original file line numberDiff line numberDiff line change
@@ -1270,14 +1270,17 @@ function getHoverLabelText(d, showCommonLabel, hovermode, fullLayout, t0, g) {
12701270
name = plainText(d.name, d.nameLength);
12711271
}
12721272

1273+
var h0 = hovermode.charAt(0);
1274+
var h1 = h0 === 'x' ? 'y' : 'x';
1275+
12731276
if(d.zLabel !== undefined) {
12741277
if(d.xLabel !== undefined) text += 'x: ' + d.xLabel + '<br>';
12751278
if(d.yLabel !== undefined) text += 'y: ' + d.yLabel + '<br>';
12761279
if(d.trace.type !== 'choropleth' && d.trace.type !== 'choroplethmapbox') {
12771280
text += (text ? 'z: ' : '') + d.zLabel;
12781281
}
1279-
} else if(showCommonLabel && d[hovermode.charAt(0) + 'Label'] === t0) {
1280-
text = d[(hovermode.charAt(0) === 'x' ? 'y' : 'x') + 'Label'] || '';
1282+
} else if(showCommonLabel && d[h0 + 'Label'] === t0) {
1283+
text = d[h1 + 'Label'] || '';
12811284
} else if(d.xLabel === undefined) {
12821285
if(d.yLabel !== undefined && d.trace.type !== 'scattercarpet') {
12831286
text = d.yLabel;
@@ -1306,16 +1309,20 @@ function getHoverLabelText(d, showCommonLabel, hovermode, fullLayout, t0, g) {
13061309
}
13071310

13081311
// hovertemplate
1309-
var d3locale = fullLayout._d3locale;
13101312
var hovertemplate = d.hovertemplate || false;
1311-
var hovertemplateLabels = d.hovertemplateLabels || d;
1312-
var eventData = d.eventData[0] || {};
13131313
if(hovertemplate) {
1314+
var labels = d.hovertemplateLabels || d;
1315+
1316+
if(d[h0 + 'Label'] !== t0) {
1317+
labels[h0 + 'other'] = labels[h0 + 'Val'];
1318+
labels[h0 + 'otherLabel'] = labels[h0 + 'Label'];
1319+
}
1320+
13141321
text = Lib.hovertemplateString(
13151322
hovertemplate,
1316-
hovertemplateLabels,
1317-
d3locale,
1318-
eventData,
1323+
labels,
1324+
fullLayout._d3locale,
1325+
d.eventData[0] || {},
13191326
d.trace._meta
13201327
);
13211328

src/lib/index.js

+31-13
Original file line numberDiff line numberDiff line change
@@ -1043,21 +1043,33 @@ function templateFormatString(string, labels, d3locale) {
10431043
// just in case it speeds things up *slightly*:
10441044
var getterCache = {};
10451045

1046+
10461047
return string.replace(lib.TEMPLATE_STRING_REGEX, function(match, key, format) {
1047-
var obj, value, i;
1048-
for(i = 3; i < args.length; i++) {
1049-
obj = args[i];
1050-
if(!obj) continue;
1051-
if(obj.hasOwnProperty(key)) {
1052-
value = obj[key];
1053-
break;
1054-
}
1048+
var isOther =
1049+
key === 'xother' ||
1050+
key === 'yother';
1051+
1052+
var value;
1053+
if(isOther) {
1054+
value = labels[key];
1055+
if(value === undefined) return '';
1056+
} else {
1057+
var obj, i;
1058+
for(i = 3; i < args.length; i++) {
1059+
obj = args[i];
1060+
if(!obj) continue;
1061+
if(obj.hasOwnProperty(key)) {
1062+
value = obj[key];
1063+
break;
1064+
}
10551065

1056-
if(!SIMPLE_PROPERTY_REGEX.test(key)) {
1057-
value = getterCache[key] || lib.nestedProperty(obj, key).get();
1058-
if(value) getterCache[key] = value;
1066+
if(!SIMPLE_PROPERTY_REGEX.test(key)) {
1067+
value = lib.nestedProperty(obj, key).get();
1068+
value = getterCache[key] || lib.nestedProperty(obj, key).get();
1069+
if(value) getterCache[key] = value;
1070+
}
1071+
if(value !== undefined) break;
10591072
}
1060-
if(value !== undefined) break;
10611073
}
10621074

10631075
if(value === undefined && opts) {
@@ -1087,8 +1099,14 @@ function templateFormatString(string, labels, d3locale) {
10871099
value = lib.formatDate(ms, format.replace(TEMPLATE_STRING_FORMAT_SEPARATOR, ''), false, fmt);
10881100
}
10891101
} else {
1090-
if(labels.hasOwnProperty(key + 'Label')) value = labels[key + 'Label'];
1102+
var keyLabel = key + 'Label';
1103+
if(labels.hasOwnProperty(keyLabel)) value = labels[keyLabel];
1104+
}
1105+
1106+
if(isOther) {
1107+
value = '(' + value + ')';
10911108
}
1109+
10921110
return value;
10931111
});
10941112
}

0 commit comments

Comments
 (0)