Commit dd151f62 authored by Zach Perkins's avatar Zach Perkins
Browse files

Merge branch '26-model-filters' of https://git.gmu.edu/srct/schedules into 26-model-filters

parents adf55a62 dc9634b8
Pipeline #2996 passed with stage
in 2 minutes and 16 seconds
......@@ -4,7 +4,7 @@
class Schedule {
constructor() {
this.isOpen = false;
this._ids = Array.from(document.getElementById('schedule').children).map(e => Number(e.id.split('-')[1]));
this._ids = Array.from(document.getElementById('schedule').children).map(e => e.dataset.crn);
}
get ids() {
......@@ -51,7 +51,7 @@ class Schedule {
const section = cart.querySelector(`#section-${id}`);
cart.removeChild(section);
this.ids = this.ids.filter(_id => _id != Number(id));
this.ids = this.ids.filter(_id => _id != id);
}
_constructSectionCard(section) {
......@@ -70,8 +70,8 @@ class Schedule {
}
class Search {
sectionWithId(sectionId) {
return document.getElementById('search-list').querySelector(`#${sectionId}`);
sectionWithCrn(crn) {
return document.getElementById('search-list').querySelector(`[data-crn="${crn}"]`);
}
}
......@@ -80,14 +80,13 @@ const toggleSchedule = () => this.schedule.toggle();
const addToSchedule = (event, section) => {
section.classList.add('selected');
// this.schedule.addToSchedule(JSON.parse(section.dataset.section));
this.schedule.addToSchedule(section.cloneNode(true));
event.stopPropagation();
};
const removeFromSchedule = section => {
this.search.sectionWithId(section.id).classList.remove('selected');
this.search.sectionWithCrn(section.dataset.crn).classList.remove('selected');
this.schedule.removeFromSchedule(section.id.split('-')[1]);
};
......@@ -115,8 +114,3 @@ const addToSystemCalendar = async () => {
const url = `webcal://${window.location.hostname}/api/schedule?crns=${this.schedule.ids.join(',')}`;
window.open(url, '_self');
};
document.addEventListener('DOMContentLoaded', () => {
this.schedule = new Schedule();
this.search = new Search();
});
class SearchController < ApplicationController
def index
@courses = Course.where(subject: params[:q]).select do |course|
@courses = Course.fetch(params).select do |course|
course.course_sections.count.positive?
end
end
def update
puts params[:ids]
cookies[:ids] = params[:ids]
end
end
<%= render partial: 'shared/navbar' %>
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
<!DOCTYPE html>
<html>
<head>
<title>Schedules</title>
<%= csrf_meta_tags %>
<link href="https://srct.gmu.io/masonstrap/css/masonstrap.min.css" rel="stylesheet">
<script src="https://srct.gmu.io/masonstrap/js/masonstrap.min.js"></script>
<head>
<title>Schedules</title>
<%= csrf_meta_tags %>
<link href="https://srct.gmu.io/masonstrap/css/masonstrap.min.css" rel="stylesheet">
<script src="https://srct.gmu.io/masonstrap/js/masonstrap.min.js"></script>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= yield %>
</body>
<body>
<%= render partial: 'shared/navbar' %>
<%= yield %>
<%= render partial: 'shared/cart'%>
</body>
</html>
<%= render partial: 'shared/navbar' %>
<div class="container-fluid">
<!-- The main screen consists of a row with two columns: the search results, and the cart -->
<div class="row">
<!-- Search result, List of Courses -->
<div class="col-lg-7 col-md-10 mx-auto order-2 order-lg-0" id="search-list">
<% if @courses.any? %>
<%= render partial: 'shared/course', collection: @courses %>
<% else %>
<h1>Sorry, we couldn't find anything matching your search.</h1>
<p>Please try again!</p>
<% end %>
</div>
<!-- List of sections in the cart -->
<div class="col order-1 order-lg-1" id="cart">
<div class="card">
<div class="card-body">
<h3 class="card-title">Your Schedule</h3>
</div>
<ul class="list-group list-group-flush" id="schedule">
<%= render partial: 'shared/section', collection: @cart, locals: { in_cart: true } %>
</ul>
<div class="card-body">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" onclick="setUrlInModal()">
Export schedule
</button>
</div>
</div>
</div>
</div>
</div>
<% if @courses.any? %>
<%= render partial: 'shared/course', collection: @courses %>
<% else %>
<h1>Sorry, we couldn't find anything matching your search.</h1>
<p>Please try again!</p>
<% end %>
<!-- Export Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
......@@ -71,3 +43,10 @@
</div>
</div>
</div>
<%= javascript_tag do %>
document.addEventListener('DOMContentLoaded', () => {
this.schedule = new Schedule();
this.search = new Search();
});
<% end %>
</div>
<!-- List of sections in the cart -->
<div class="col order-1 order-lg-1" id="cart">
<div class="card">
<div class="card-body">
<h3 class="card-title">Your Schedule</h3>
</div>
<ul class="list-group list-group-flush" id="schedule">
<%= render partial: 'shared/section', collection: @cart, locals: { in_cart: true } %>
</ul>
<div class="card-body">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" onclick="setUrlInModal()">
Export schedule
</button>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row align-left align-sm-center align-md-right" id="navbar">
<div class="col-8 col-sm align-center">
<a href="/search" id="logo">
<a href="/" id="logo">
<i class="fas fa-calendar-alt"></i>
Schedules
</a>
......@@ -9,7 +9,6 @@
<div class="col-4 col-sm align-center order-0 order-sm-1" onclick="toggleSchedule()">
<h1 style="margin-top:24px">
<!-- <h2><i class="fas fa-shopping-cart" id="schedule-icon"></i></h2> -->
<span class="fa-layers fa-fw" id="schedule-icon">
<i class="fas fa-shopping-cart"></i>
<span class="fa-layers fa-fw">
......@@ -26,7 +25,7 @@
<form action="/search" class="form-inline">
<div class="form-group">
<div class="input-group">
<input name="q" type="text" class="form-control" placeholder="Search by CRN, course, professor..." aria-describedby="basic-addon2">
<input name="query" type="text" class="form-control" placeholder="Search by CRN, course, professor..." aria-describedby="basic-addon2">
<div class="input-group-append">
<button class="btn btn-secondary" type="button">
<i class="fas fa-search"></i>
......@@ -38,3 +37,10 @@
</div>
</div>
</div>
<div class="container-fluid">
<!-- The main screen consists of a row with two columns: the search results, and the cart -->
<div class="row">
<!-- Search result, List of Courses -->
<div class="col-lg-7 col-md-10 mx-auto order-2 order-lg-0" id="search-list">
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment