LoginSignup
0
0

More than 1 year has passed since last update.

【Simple Calendar】ラジオボタンでカレンダーの表示日数を切り替える機能を実装した

Last updated at Posted at 2021-03-07

※2022年から技術系の記事は個人ブログに投稿しております。ぜひこちらもご覧ください→yamaday0u Blog

Railsのsimple calendar gemとJavaScriptを使って、ラジオボタンをクリックしてカレンダー の表示日数を切り替える機能を実装しました。

Image from Gyazo

app/views/calendars/index.html.erb
<div class="content">
  <div class="my-page">
    <div class="calendar">

      <div id="month_calendar"><%# Default calendar%>
        <%= month_calendar events:@calendars do |date, calendars| %>
          <%= date.day %>

          <% calendars.each do |calendar| %>
            <div class="schedule">
              <%= link_to "#{calendar.title}[#{calendar.start_time.strftime('%H:%M')}-#{calendar.end_time.strftime('%H:%M')}]", calendar_path(calendar.id) %>
            </div>
          <% end %>
        <% end %>
      </div>

      <div id="week_calendar">
        <%= week_calendar events:@calendars do |date, calendars| %>
          <%= date.day %>

          <% calendars.each do |calendar| %>
            <div class="schedule">
              <%= link_to "#{calendar.title}[#{calendar.start_time.strftime('%H:%M')}-#{calendar.end_time.strftime('%H:%M')}]", calendar_path(calendar.id) %>
            </div>
          <% end %>
        <% end %>
      </div>

      <div id="custom_calendar">
        <%= calendar events:@calendars do |date, calendars| %>
          <%= date.day %>

          <% calendars.each do |calendar| %>
            <div class="schedule">
              <%= link_to "#{calendar.title}[#{calendar.start_time.strftime('%H:%M')}-#{calendar.end_time.strftime('%H:%M')}]", calendar_path(calendar.id) %>
            </div>
          <% end %>
        <% end %>
      </div>

    </div>

    <div class="switch-calendar-wrap">
      <p>switch calendar</p>
      <div class="calendars">
        <%= radio_button_tag "calendar", "month", checked: "true" %>
        <%= label "calendar", "month" %>
        <%= radio_button_tag "calendar", "week" %>
        <%= label "calendar", "week" %>
        <%= radio_button_tag "calendar", "custom" %>
        <%= label "calendar", "custom" %>
      </div>
    </div>

  </div>
</div>
app/assets/stylesheets/calendar.scss
#week_calendar {
  display: none;
}

#custom_calendar {
  display: none;
}
app/javascript/switch_calendar.js
const displayCalendar = () => {
  const monthCalendarElement = document.getElementById("month_calendar");
  const weekCalendarElement = document.getElementById("week_calendar");
  const customCalendarElement = document.getElementById("custom_calendar");

  const monthCalendar = document.getElementById("calendar_month");
  const weekCalendar = document.getElementById("calendar_week");
  const customCalendar = document.getElementById("calendar_custom");

  const switchCalendar = () => {
    if (monthCalendar.checked) {
      monthCalendarElement.style.display="block";
      weekCalendarElement.style.display="none";
      customCalendarElement.style.display="none";
    }else if(weekCalendar.checked) {
      monthCalendarElement.style.display="none";
      weekCalendarElement.style.display="block";
      customCalendarElement.style.display="none";
    }else if (customCalendar.checked) {
      monthCalendarElement.style.display="none";
      weekCalendarElement.style.display="none";
      customCalendarElement.style.display="block";
    }
  }
  window.addEventListener("click", switchCalendar);
} 
window.addEventListener("load", displayCalendar);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0