liftie
Version:
Clean, simple, easy to read, fast ski resort lift status
165 lines (152 loc) • 4.78 kB
text/jade
mixin overlay(resort, text)
.opening-date
if resort.href
a(href=resort.href,
title='Go to official #{ resort.name } page',
target='_blank'
rel='noopener'
)!= text
else
a!= text
mixin header(resort, widget)
if resort.href
a.icon-alone.resort-link(
href=resort.href,
title='Go to official #{ resort.name } page',
target='_blank'
rel='noopener'
)
span.ls-external
a.resort-name(href='/resort/#{ resort.id }' target=widget && "_blank")= resort.name
if !widget
if !single
if resort.deals
a.icon-alone(title=resort.deals.title, href=resort.deals.href, target="_blank", rel="nofollow noopener")
span.ls-deal
a.right.icon-alone.star
span.ls-star
if !single
a.right.icon-alone.minimax
span.ls-minimax
mixin lifts(resort)
.lifts-status
if resort.opening
+overlay(resort, 'Opens on <b>' + resort.opening + '</b>')
else if !resort.lifts
+overlay(resort, 'Lift status coming soon')
ul.lifts.expandable
if resort.lifts
for status, name in resort.lifts.status
li.lift
span.name #{name}
span.status(class='ls-#{status}')
mixin stats(resort)
.summary-color-bar
for key in ['open', 'hold', 'scheduled', 'closed']
div(class='#{key}', style='width:#{ resort.lifts ? resort.lifts.stats.percentage[key] : 25 }%;')
ul.summary
for key in ['open', 'hold', 'scheduled', 'closed']
li
span(class='ls-#{key}')= resort.lifts ? resort.lifts.stats[key] : 0
span #{key}
.auto-refresh-reminder
span Next update in
span.time-to-refresh 60
span seconds
mixin weather(resort)
.weather.tile(class= resort.weather ? 'visible' : 'hidden')
.weather-icon
ul
li(class= resort.weather ? resort.weather.icon[0] : '')
li(class= resort.weather ? resort.weather.icon[1] : '')
.temperature
.snow-conditions
span.conditions
span.snowforecast
.text
.notice Forecast by
a(target="_blank", href=resort.weather && resort.weather.notice && resort.weather.notice.href, rel='noopener')
img(src=resort.weather && resort.weather.notice && resort.weather.notice.img)
mixin snow(resort)
.snow.tile(class= resort.snow ? 'visible' : 'hidden')
.snowfall
span.value
span "
span snowfall in the last 48 hours
.depth
span.value
span "
span snow base
span.condition
span -
span.value
.notice
!= resort.snow && resort.snow.notice
mixin addToTrip(resort)
if resort.ll
a.add-to-trip(href='https://trips.furkot.com/trip?#{addToTrip(resort)}', target='_blank', rel='noopener')
span.ls-furkot
span Plan trip to #{resort.name}
mixin webcam(webcam)
.webcam
a(target="_blank", rel='noopener')
.title
img.active(src="")
img.inactive(src="")
.notice
!= webcam?.notice
mixin webcams(resort)
.tile.webcams(class= resort.webcams?.length ? 'visible' : 'hidden')
.swipe
ul
li
+webcam(resort.webcams?.[0])
.pager
mixin bestDeal(resort)
if resort.deals && resort.deals.discount
.deal
span= resort.deals.title
a(title=resort.deals.title, href=resort.deals.href, target="_blank", rel="nofollow noopener")= resort.deals.discount
mixin deals(resort)
.deals.tile.visible
for deal in resort.deals.deals
.deal
span= deal.title
a(title=resort.deals.title, href=resort.deals.href, target="_blank", rel="nofollow noopener")= deal.discount
mixin resort(resort, widget)
section.panel.resort(
data-resort=resort.id,
data-timestamp=resort.timestamp,
data-opening=resort.opening,
data-name=resort.name,
data-ll=resort.ll && resort.ll.join(),
data-weather=single && resort.weather,
data-webcams=single && resort.webcams,
data-snow=single && resort.snow,
class=resort.open ? 'open' : ''
)
header
+header(resort, widget)
.expandable
.basics
if !widget && !single
+bestDeal(resort)
+lifts(resort)
footer
+stats(resort)
if !widget && !single
+addToTrip(resort)
if !widget && single
section.panel.extras.open(class= single ? 'visible' : 'hidden' )
header
+addToTrip(resort)
+weather(resort)
+snow(resort)
+webcams(resort)
if resort.deals && resort.deals.deals
section.panel.extras.open(class= single ? 'visible' : 'hidden' )
header
a(href=resort.deals.href, target="_blank", rel="nofollow noopener")
span.ls-deal
span= resort.deals.title
+deals(resort)