From 674850c417404897c230ce4c4c675fc547cc15c4 Mon Sep 17 00:00:00 2001 From: Kevin Lin <kevinl@cs.uw.edu> Date: Mon, 25 May 2020 14:05:13 -0700 Subject: [PATCH] Represent schedules as collections --- _config.yml | 16 +++++-- _includes/schedule.html | 48 ------------------- _layouts/schedule.html | 32 +++++++++++++ _sass/custom/schedule.scss | 6 ++- .../weekly.yml => _schedules/weekly.md | 35 ++++++++------ schedule.md | 4 +- 6 files changed, 72 insertions(+), 69 deletions(-) delete mode 100644 _includes/schedule.html create mode 100644 _layouts/schedule.html rename _data/schedule/weekly.yml => _schedules/weekly.md (69%) diff --git a/_config.yml b/_config.yml index 1cb664a..22e41d2 100644 --- a/_config.yml +++ b/_config.yml @@ -37,11 +37,17 @@ footer_content: # Collections for website data collections: - - modules - - announcements - - staffers + announcements: + modules: + schedules: + staffers: # Default layouts for each collection type defaults: + - scope: + path: '' + type: announcements + values: + layout: announcement - scope: path: '' type: modules @@ -49,9 +55,9 @@ defaults: layout: module - scope: path: '' - type: announcements + type: schedules values: - layout: announcement + layout: schedule - scope: path: '' type: staffers diff --git a/_includes/schedule.html b/_includes/schedule.html deleted file mode 100644 index 0fbaa85..0000000 --- a/_includes/schedule.html +++ /dev/null @@ -1,48 +0,0 @@ -{% capture schedule_workspace %} - {% comment %} - Return the HTML for the schedule corresponding to the given data. - - Parameters: - `data` (site data): site data file containing the requested schedule. - `interval` (integer): time in minutes between each timeline tick. - `row_height` (integer): row height in pixels. - `min_day_width` (integer): minimum width reserved for each day in pixels. - `header_tag` (string): HTML tag for the schedule-header, default: 'h3'. - {% endcomment %} - - {% assign header_tag = include.header_tag | default: 'h3' %} - {% assign timeline_first = include.data.timeline | first %} - {% capture offset %}{% include minutes.liquid time=timeline_first %}{% endcapture %} -{% endcapture %}{% assign schedule_workspace = '' %} -<div class="schedule"> - <ul class="schedule-timeline" style="margin-top: {{ include.row_height }}px; min-width: {{ include.data.schedule | size | times: include.min_day_width }}px"> - {% for time in include.data.timeline %} - <li class="schedule-time" style="height: {{ include.row_height }}px"> - {{- time -}} - </li> - {% endfor %} - </ul> - <ul class="schedule-group"> - {% for day in include.data.schedule %} - <li class="schedule-day" style="min-width: {{ include.min_day_width }}px"> - <{{ header_tag }} class="schedule-header" style="height: {{ include.row_height }}px">{{ day.name }}</{{ header_tag }}> - {% if day.events %} - <ul class="schedule-events" style="height: {{ include.data.timeline | size | times: include.row_height }}px"> - {% for event in day.events %} - {%- capture start -%}{% include minutes.liquid time=event.start %}{%- endcapture -%} - {%- capture end -%}{% include minutes.liquid time=event.end %}{%- endcapture -%} - {%- assign top = start | minus: offset | times: include.row_height | divided_by: include.interval -%} - {%- assign height = end | minus: start | times: include.row_height | divided_by: include.interval -%} - <li class="schedule-event {{ event.class }}" - style="top: {{ top }}px; height: {{ height }}px;"> - <div class="name">{{ event.name }}</div> - <div class="time">{{ event.start }}–{{ event.end }}</div> - <div class="location">{{ event.location }}</div> - </li> - {% endfor %} - </ul> - {% endif %} - </li> - {% endfor %} - </ul> -</div> diff --git a/_layouts/schedule.html b/_layouts/schedule.html new file mode 100644 index 0000000..bea9c9d --- /dev/null +++ b/_layouts/schedule.html @@ -0,0 +1,32 @@ +{% assign start_time = page.timeline | first %} +{% capture offset %}{% include minutes.liquid time=start_time %}{% endcapture %} +<div class="schedule"> + <ul class="schedule-timeline" style="min-width: {{ page.schedule | size | times: 130 }}px"> + {% for time in page.timeline %} + <li class="schedule-time">{{ time }} </li> + {% endfor %} + </ul> + <ul class="schedule-group"> + {% for day in page.schedule %} + <li class="schedule-day"> + <h2 class="schedule-header">{{ day.name }}</h2> + {% if day.events %} + <ul class="schedule-events" style="height: {{ page.timeline | size | times: 40 }}px"> + {% for event in day.events %} + {% capture start %}{% include minutes.liquid time=event.start %}{% endcapture %} + {% capture end %}{% include minutes.liquid time=event.end %}{% endcapture %} + {% assign top = start | minus: offset | times: 40 | divided_by: 30 %} + {% assign height = end | minus: start | times: 40 | divided_by: 30 %} + <li class="schedule-event {% if event.class %}{{ event.class }}{% else %}{{ event.name | slugify }}{% endif %}" + style="top: {{ top }}px; height: {{ height }}px;"> + <div class="name">{{ event.name }}</div> + <div class="time">{{ event.start }}–{{ event.end }}</div> + <div class="location">{{ event.location }}</div> + </li> + {% endfor %} + </ul> + {% endif %} + </li> + {% endfor %} + </ul> +</div> diff --git a/_sass/custom/schedule.scss b/_sass/custom/schedule.scss index 1325945..b979021 100644 --- a/_sass/custom/schedule.scss +++ b/_sass/custom/schedule.scss @@ -15,7 +15,7 @@ } .schedule-timeline { - margin-bottom: 0; + margin: 40px auto 0; position: absolute; width: 100%; } @@ -23,6 +23,7 @@ .schedule-time { @extend .fs-2; color: $grey-dk-000; + height: 40px; margin: 0; padding: $sp-2; position: relative; @@ -48,6 +49,7 @@ border-left: $border $border-color; flex: 1 0 0; margin: 0; + min-width: 130px; &:first-of-type { border-left: 0; @@ -58,6 +60,8 @@ @extend .fw-700; align-items: center; display: flex; + font-size: 18px !important; + height: 40px; justify-content: center; margin: 0; } diff --git a/_data/schedule/weekly.yml b/_schedules/weekly.md similarity index 69% rename from _data/schedule/weekly.yml rename to _schedules/weekly.md index efb41b0..cd0851c 100644 --- a/_data/schedule/weekly.yml +++ b/_schedules/weekly.md @@ -1,23 +1,35 @@ -timeline: [ - '9:00 AM', '9:30 AM', '10:00 AM', '10:30 AM', '11:00 AM', '11:30 AM', - '12:00 PM', '12:30 PM', '1:00 PM', '1:30 PM', '2:00 PM', '2:30 PM', - '3:00 PM', '3:30 PM', '4:00 PM', '4:30 PM', '5:00 PM', '5:30 PM', -] +--- +timeline: + - '9:00 AM' + - '9:30 AM' + - '10:00 AM' + - '10:30 AM' + - '11:00 AM' + - '11:30 AM' + - '12:00 PM' + - '12:30 PM' + - '1:00 PM' + - '1:30 PM' + - '2:00 PM' + - '2:30 PM' + - '3:00 PM' + - '3:30 PM' + - '4:00 PM' + - '4:30 PM' + - '5:00 PM' + - '5:30 PM' schedule: - name: Monday events: - name: Lecture - class: lecture start: 9:30 AM end: 10:30 AM location: 150 Wheeler - name: Section - class: section start: 11:30 AM end: 12:30 PM location: 310 Soda - name: Office Hours - class: office-hours start: 12:30 PM end: 2:00 PM location: 271 Soda @@ -25,17 +37,14 @@ schedule: - name: Wednesday events: - name: Lecture - class: lecture start: 9:30 AM end: 10:30 AM location: 150 Wheeler - name: Section - class: section start: 11:30 AM end: 12:30 PM location: 310 Soda - name: Office Hours - class: office-hours start: 12:30 PM end: 2:00 PM location: 271 Soda @@ -43,17 +52,15 @@ schedule: - name: Friday events: - name: Lecture - class: lecture start: 9:30 AM end: 10:30 AM location: 150 Wheeler - name: Section - class: section start: 11:30 AM end: 12:30 PM location: 310 Soda - name: Office Hours - class: office-hours start: 12:30 PM end: 2:00 PM location: 271 Soda +--- diff --git a/schedule.md b/schedule.md index d77e2b9..6bafd35 100644 --- a/schedule.md +++ b/schedule.md @@ -7,4 +7,6 @@ description: The weekly event schedule. # Weekly Schedule -{% include schedule.html data=site.data.schedule.weekly interval=30 row_height=40 min_day_width=130 %} +{% for schedule in site.schedules %} +{{ schedule }} +{% endfor %} -- GitLab