Haml - if-else с разными отступами - PullRequest
2 голосов
/ 21 апреля 2010

Я пытаюсь сделать календарь с помощью Rails и Haml .

Используемые даты взяты из переменной с именем @dates. Это диапазон Date, который содержит первый и последний дни, которые будут представлены в календаре. Первый день - всегда воскресенье, а последний - всегда понедельник.

Я планирую сделать типичный календарь с одним столбцом в день недели (воскресенье будет первым днем ​​недели) с использованием таблицы HTML.

Итак, мне нужно поставить %tr с последующим %td по воскресеньям, но в остальное время мне просто нужен %td.

У меня проблемы с моделированием в Хамле. Кажется, для этого требуются разные уровни отступов, и это не нравится. Вот моя неудачная попытка:

%table
  %tr
    %th= t('date.day_names')[0] # Sunday
    %th= t('date.day_names')[1]
    %th= t('date.day_names')[2]
    %th= t('date.day_names')[3]
    %th= t('date.day_names')[4]
    %th= t('date.day_names')[5]
    %th= t('date.day_names')[6] # Monday
  -@dates.each do |date|
    - if(date.wday == 0) # if date is sunday
      %tr
        %td=date.to_s
    - else
      %td=date.to_s

Это не работает так, как я хочу. %td s для не воскресных дней появляются за пределами %tr:

      <tr>
        <td>2010-04-24</td>
      </tr>
      <td>2010-04-25</td>
      <td>2010-04-26</td>
      <td>2010-04-27</td>
      <td>2010-04-28</td>
      <td>2010-04-29</td>
      <td>2010-04-30</td>
      <tr>
        <td>2010-05-01</td>
      </tr>
      <td>2010-05-02</td>
      <td>2010-05-03</td>
      ...

Я попытался добавить еще два пробела к else, но потом Хэмл пожаловался на неправильный отступ.

Какой лучший способ сделать это?

Примечание. Меня не интересует рендеринг календаря с использованием неупорядоченных списков. Пожалуйста, рассмотрите возможность использования таблицы в качестве одного из ограничений проблемы.

Ответы [ 2 ]

4 голосов
/ 21 апреля 2010

Комментарий Евгения поставил меня на правильный путь.

Вот решение, которое работает, используя rails ' in_groups_of (ссылка сейчас не работает):

%table(cellspacing="0" cellpadding="0")
  %tr
    %th= t('date.day_names')[0]
    %th= t('date.day_names')[1]
    %th= t('date.day_names')[2]
    %th= t('date.day_names')[3]
    %th= t('date.day_names')[4]
    %th= t('date.day_names')[5]
    %th= t('date.day_names')[6]

  - @dates.to_a.in_groups_of(7) do |week|
    %tr
      - week.each do |day|
        %td=day.to_s

Обратите внимание, что мне пришлось преобразовать Range в массив - кажется, диапазоны не реализуют in_groups_of.

1 голос
/ 21 апреля 2010
%table
  %tr
    %th= t('date.day_names')[0] # Sunday
    %th= t('date.day_names')[1]
    %th= t('date.day_names')[2]
    %th= t('date.day_names')[3]
    %th= t('date.day_names')[4]
    %th= t('date.day_names')[5]
    %th= t('date.day_names')[6] # Monday
  %tr
    -@dates.each do |date|
      %td=date.to_s

Это должно дать вам

<tr>
  <td>2010-04-24</td>
  <td>2010-04-25</td>
  <td>2010-04-26</td>
  <td>2010-04-27</td>
  <td>2010-04-28</td>
  <td>2010-04-29</td>
  <td>2010-04-30</td>
</tr>
...