blob: 2e83e7eee619f769ffbc1f3910ffa88ec8ef42c0 [file] [log] [blame]
#!/usr/bin/env ruby
$LOAD_PATH.unshift '/srv/whimsy/lib'
require 'whimsy/asf'
require 'wunderbar/bootstrap'
require 'active_support/time'
require 'date'
calendar = IO.read("#{ASF::SVN['board']}/calendar.txt")
pattern = /\s*\*\) (.*),/
zones = [
TZInfo::Timezone.get('America/Los_Angeles'),
TZInfo::Timezone.get('America/New_York'),
TZInfo::Timezone.get('Europe/Brussels'),
TZInfo::Timezone.get('Asia/Kuala_Lumpur'),
TZInfo::Timezone.get('Australia/Sydney')
]
prev = {}
if CGI.new.params['format'] == ['txt']
_text do
@time ||= '21:30'
@zone ||= 'UTC'
base = TZInfo::Timezone.get(@zone)
rotate = (@rotate || 0).to_i
calendar.scan(pattern).flatten.each_with_index do |date, index|
date = Date.parse(date)
next if date <= Date.today
time = base.local_to_utc(Time.parse("#{date}T#{@time}"))
@time = (base.utc_to_local(time) + rotate.hour).strftime("%H:%M")
_ '' unless index == 0
_ time.strftime("*) %a, %d %B %Y, %H:%M UTC")
end
end
exit
end
_html do
@time ||= '21:30'
@zone ||= 'UTC'
base = TZInfo::Timezone.get(@zone)
rotate = (@rotate || 0).to_i
_h2 'Proposed board meeting times'
_p %{
Future meeting times, presuming that the time of the meeting is
set to #{@time} #{@zone}, rotating each meeting time by #{rotate} hours.
}
if rotate == 0
_p.bg_danger %{
This background color indicate a local time change from the previous
month.
}
end
_table.table do
_thead do
_tr do
_th
_th 'UTC'
_th 'Los Angeles'
_th 'New York'
_th 'Brussels'
_th 'Kuala Lumpur'
_th 'Sydney'
end
end
_tbody calendar.scan(pattern).flatten do |date|
date = Date.parse(date)
next if date <= Date.today
time = base.local_to_utc(Time.parse("#{date}T#{@time}"))
@time = (base.utc_to_local(time) + rotate.hour).strftime("%H:%M")
timeurl = 'https://www.timeanddate.com/worldclock/fixedtime.html?iso='
_tr do
_td date
_td do
_a time.strftime('%H:%M'), href: "#{timeurl}#{time.iso8601}"
end
zones.each do |zone|
if zone.to_s.include? 'Asia' or zone.to_s.include? 'Europe'
local = time.in_time_zone(zone).strftime("%H:%M")
else
local = time.in_time_zone(zone).strftime("%-I:%M%P")
end
if prev[zone] != local and prev[zone] and rotate == 0
_td.bg_danger local
else
_td local
end
prev[zone] = local
end
end
end
end
end