Rails lazy_high_charts: как форматировать метку всплывающей подсказки - PullRequest
0 голосов
/ 23 октября 2018

Я хотел бы напечатать в своих диаграммах часы и минуты, например, "development: 27 h 30 m".

Теперь у меня есть это:

enter image description here

В моем скрипте «данные» представляют «часы»

{
  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

enter image description here

Ответы [ 2 ]

0 голосов
/ 23 октября 2018
["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"]
0 голосов
/ 23 октября 2018

Может быть, вы могли бы ввести две переменные, 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часов;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...