Rails lazy_high_charts: как форматировать метку всплывающей подсказки
Я хотел бы напечатать в своих графиках часы и минуты, например, "развитие: 27 ч 30 м".
Теперь у меня есть это:
В моем сценарии "данные" представляет "часы"
{
name: value.blank? ? "other" : value,
data: all_weeks.merge(data_weeks.to_h).values.map do |data_value|
data_value.nil? ? 0 : ( data_value.to_f / 60 ).round(2)
end
}
....
f.tooltip(
pointFormat: "<span style='color:{series.color}'>{series.name}</span>: <b>{point.y} h</b><br/>",
split: true
)
Я пытался установить point.y
в pointFormat
но не имеют последствий. (Изменить: pointFormat будет общая строка!)
Как я могу решить? Заранее спасибо.
Редактировать:
Я решил добавить:
LazyHighCharts::HighChart.new("container") do |f|
f.tooltip(
formatter: "\
function() { \
var s = []; \
s.push(this.x); \
this.points.forEach(function(point) { \
s.push('<b>' + point.series.name + '</b>: ' + Math.floor(point.y) + ' h ' + Math.floor((point.y % 1) * 60) + ' m'); \
}); \
return s; \
}".js_code,
split: true
)
....
end
2 ответа
["dev: 27.5 h", "dev: 22 h", "dev: 0.3h"].map do |s|
s.gsub(/\d+(\.\d+)?\s*h/i) do |h|
h, m = h.to_f.divmod(1)
[
("#{h} h" unless h.zero?),
("#{(60 * m).round} m" unless m.zero?)
].compact.join(" ")
end
end
#⇒ ["dev: 27 h 30 m", "dev: 22 h", "dev: 18 m"]
Может быть, вы могли бы ввести две переменные, data_hours
а также data_minutes
и напишите интерполяцию строки с этими переменными.
data_hours = data_value.to_i
data_minutes = ((data_value - data_hours) * 60).to_i
data_to_display = "#{data_hours} h #{data_minutes} m"
Надеюсь, это поможет!
Написано за 0,12 часа;)