From cdb5505d547d989cc18b7be2d01ad8b64906eb4c Mon Sep 17 00:00:00 2001
From: Meaghan Harty <1829246+meagonqz@users.noreply.github.com>
Date: Fri, 19 Jul 2019 17:08:37 -0400
Subject: [PATCH] Schedules | Finder Tool - Trip Details (#99)
---
apps/site/assets/css/_accordion-ui.scss | 6 +
apps/site/assets/css/_modal-component.scss | 2 +
apps/site/assets/css/_schedule-page.scss | 70 +
.../schedule/__tests__/ScheduleFinderTest.tsx | 173 +-
.../schedule/__tests__/ScheduleTableTest.tsx | 71 +-
.../__tests__/ServiceSelectorTest.tsx | 3 -
.../__snapshots__/ScheduleTableTest.tsx.snap | 17711 ++++++++++------
.../ServiceSelectorTest.tsx.snap | 8 +-
.../ts/schedule/__tests__/crServiceData.json | 2 +-
.../ts/schedule/__tests__/serviceData.json | 2 +-
.../ts/schedule/components/__schedule.d.ts | 19 +-
.../schedule-finder/ScheduleTable.tsx | 55 +
.../schedule-finder/ServiceSelector.tsx | 93 +-
.../components/schedule-finder/TableRow.tsx | 219 +
apps/site/lib/site/base_fare.ex | 13 +-
.../controllers/schedule/schedule_api.ex | 92 +-
.../schedule/schedule_api_test.exs | 59 +
17 files changed, 12344 insertions(+), 6254 deletions(-)
create mode 100644 apps/site/assets/ts/schedule/components/schedule-finder/ScheduleTable.tsx
create mode 100644 apps/site/assets/ts/schedule/components/schedule-finder/TableRow.tsx
create mode 100644 apps/site/test/site_web/controllers/schedule/schedule_api_test.exs
diff --git a/apps/site/assets/css/_accordion-ui.scss b/apps/site/assets/css/_accordion-ui.scss
index 80961cbca2..512cda6b77 100644
--- a/apps/site/assets/css/_accordion-ui.scss
+++ b/apps/site/assets/css/_accordion-ui.scss
@@ -108,6 +108,12 @@
font-family: FontAwesome;
}
+.c-expandable-block__header-caret--white {
+ color: $white;
+ float: right;
+ font-family: FontAwesome;
+}
+
.c-expandable-block__panel {
border: 1px solid $gray-lightest;
padding: $base-spacing $base-spacing / 2;
diff --git a/apps/site/assets/css/_modal-component.scss b/apps/site/assets/css/_modal-component.scss
index d37cd3b02f..8ed187759c 100644
--- a/apps/site/assets/css/_modal-component.scss
+++ b/apps/site/assets/css/_modal-component.scss
@@ -36,6 +36,7 @@
left: 50%;
transform: translate(-50%, -50%);
width: 75%;
+ min-height: 50%;
}
@include media-breakpoint-up(lg) {
@@ -51,6 +52,7 @@
.c-modal__close {
margin: $base-spacing;
+ padding: $base-spacing / 4;
position: absolute;
right: 0;
top: 0;
diff --git a/apps/site/assets/css/_schedule-page.scss b/apps/site/assets/css/_schedule-page.scss
index e35ef51ec5..cc3ec0105a 100644
--- a/apps/site/assets/css/_schedule-page.scss
+++ b/apps/site/assets/css/_schedule-page.scss
@@ -288,6 +288,15 @@
justify-content: space-between;
}
+// Separate class instead of modifier to avoid complicated nth-child selector
+.schedule-table__row-selected {
+ background: $brand-primary;
+ border: 1px solid $brand-primary;
+ color: $white;
+ display: flex;
+ padding: $base-spacing / 2;
+}
+
.schedule-table__row:nth-child(even) {
background: $gray-bordered-background;
}
@@ -305,6 +314,7 @@
.schedule-table__time {
font-variant-numeric: tabular-nums;
text-align: right;
+ white-space: nowrap;
&--delayed {
font-weight: normal;
@@ -319,6 +329,7 @@
display: flex;
font-weight: bold;
justify-content: space-between;
+ overflow: hidden;
}
.schedule-table__row-header-label {
@@ -371,6 +382,10 @@
padding: $base-spacing / 2;
}
+.schedule-finder__spinner-container {
+ height: 20 * $base-spacing;
+}
+
.schedule-finder__spinner,
.schedule-finder__spinner::before,
.schedule-finder__spinner::after {
@@ -418,3 +433,58 @@
box-shadow: 0 2.5em 0 0;
}
}
+
+.schedule-table__subtable {
+ width: 100%;
+}
+
+.schedule-table__subtable-trip-info {
+ display: flex;
+}
+
+.schedule-table__subtable-trip-info-title {
+ margin-right: $base-spacing;
+}
+
+.schedule-table__subtable-trip-info-link {
+ margin-left: $base-spacing;
+}
+
+.schedule-table__subtable-tr {
+ display: flex;
+ padding: $base-spacing / 2;
+}
+
+.schedule-table__subtable-container {
+ display: flex;
+}
+
+.schedule-table__subtable-data {
+ padding: $base-spacing / 4 0;
+
+ &--right-adjusted {
+ text-align: right;
+ }
+}
+
+.schedule-table__subtable-row {
+ border-top: 1px solid $gray-lightest;
+}
+
+.schedule-table__subtable-td {
+ border: 2px solid $brand-primary;
+ border-top: 0;
+ padding: $base-spacing / 2;
+ width: 100%;
+}
+
+.schedule-table__td--flex-end {
+ flex-grow: 1;
+ margin-right: $base-spacing / 2;
+}
+
+.schedule-table--empty {
+ font-weight: bold;
+ text-align: center;
+}
+
diff --git a/apps/site/assets/ts/schedule/__tests__/ScheduleFinderTest.tsx b/apps/site/assets/ts/schedule/__tests__/ScheduleFinderTest.tsx
index e1ab71b8c0..dc8ea729c4 100644
--- a/apps/site/assets/ts/schedule/__tests__/ScheduleFinderTest.tsx
+++ b/apps/site/assets/ts/schedule/__tests__/ScheduleFinderTest.tsx
@@ -3,6 +3,7 @@ import renderer from "react-test-renderer";
import { mount } from "enzyme";
import { createReactRoot } from "../../app/helpers/testUtils";
import ScheduleFinder from "../components/ScheduleFinder";
+import ScheduleFinderAccordion from "../components/ScheduleFinderAccordion";
import { EnhancedRoute, ServiceWithServiceDate } from "../../__v3api";
import serviceData from "./serviceData.json";
import { ServiceSchedule } from "../components/__schedule";
@@ -12,12 +13,12 @@ const services: ServiceWithServiceDate[] = [
valid_days: [1, 2, 3, 4, 5],
typicality: "typical_service",
type: "weekday",
- start_date: "2019-07-02",
- service_date: "2019-07-09",
- removed_dates_notes: { "2019-07-04": "Independence Day" },
- removed_dates: ["2019-07-04"],
+ start_date: "2019-07-08",
+ service_date: "2019-07-16",
+ removed_dates_notes: {},
+ removed_dates: [],
name: "Weekday",
- id: "BUS319-O-Wdy-02",
+ id: "BUS319-J-Wdy-02",
end_date: "2019-08-30",
description: "Weekday schedule",
added_dates_notes: {},
@@ -27,12 +28,12 @@ const services: ServiceWithServiceDate[] = [
valid_days: [6],
typicality: "typical_service",
type: "saturday",
- start_date: "2019-07-06",
- service_date: "2019-07-09",
+ start_date: "2019-07-13",
+ service_date: "2019-07-16",
removed_dates_notes: {},
removed_dates: [],
name: "Saturday",
- id: "BUS319-P-Sa-02",
+ id: "BUS319-K-Sa-02",
end_date: "2019-08-31",
description: "Saturday schedule",
added_dates_notes: {},
@@ -42,19 +43,19 @@ const services: ServiceWithServiceDate[] = [
valid_days: [7],
typicality: "typical_service",
type: "sunday",
- start_date: "2019-07-07",
- service_date: "2019-07-09",
+ start_date: "2019-07-14",
+ service_date: "2019-07-16",
removed_dates_notes: {},
removed_dates: [],
name: "Sunday",
- id: "BUS319-Q-Su-02",
+ id: "BUS319-L-Su-02",
end_date: "2019-08-25",
description: "Sunday schedule",
added_dates_notes: {},
added_dates: []
}
-] as ServiceWithServiceDate[];
-const serviceSchedules: ServiceSchedule = (serviceData as unknown) as ServiceSchedule;
+];
+const serviceSchedules: ServiceSchedule = serviceData as ServiceSchedule;
// the enzyme test was done as one test because there was
// an issue mounting it more than once due to the focus-trap
// dependency that the Modal component depends on
@@ -314,3 +315,149 @@ it("modal renders route pill for silver line", () => {
expect(busWrapper.exists(".schedule-finder__modal-route-pill")).toBeTruthy();
expect(busWrapper.exists(".u-bg--silver-line")).toBeTruthy();
});
+
+it("modal renders within ScheduleFinderAccordion", () => {
+ const subwayWrapper = mount(
+
@@ -40,5710 +40,10704 @@ Array [
-
,
-]
+
+
-
-
- 05:36 AM
-
-
-
-
-
-
- 05:46 AM
-
-
-
-
-
-
- 05:55 AM
-
-
-
-
-
-
- 06:03 AM
-
-
-
-
-
-
- 06:10 AM
-
-
-
-
-
-
- 06:17 AM
-
-
-
-
-
-
- 06:24 AM
-
-
-
-
-
-
- 06:31 AM
-
-
-
-
-
-
- 06:37 AM
-
-
-
-
-
-
- 06:43 AM
-
-
-
-
-
-
- 06:49 AM
-
-
-
-
-
-
- 06:54 AM
-
-
-
-
-
-
- 06:59 AM
-
-
-
-
-
-
- 07:03 AM
-
-
-
-
-
-
- 07:05 AM
-
-
-
-
-
-
- 07:09 AM
-
-
-
-
-
-
- 07:10 AM
-
-
-
-
-
-
- 07:13 AM
-
-
-
-
-
-
- 07:14 AM
-
-
-
-
-
-
- 07:19 AM
-
-
-
-
-
-
- 07:21 AM
-
-
-
-
-
-
- 07:24 AM
-
-
-
-
-
-
- 07:26 AM
-
-
-
-
-
-
- 07:27 AM
-
-
-
-
-
-
- 07:32 AM
-
-
-
-
-
-
- 07:33 AM
-
-
-
-
-
-
- 07:37 AM
-
-
-
-
-
-
- 07:39 AM
-
-
-
-
-
-
- 07:42 AM
-
-
-
-
-
-
- 07:44 AM
-
-
-
-
-
-
- 07:46 AM
-
-
-
-
-
-
- 07:50 AM
-
-
-
-
-
-
- 07:51 AM
-
-
-
-
-
-
- 07:55 AM
-
-
-
-
-
-
- 07:57 AM
-
-
-
-
-
-
- 07:59 AM
-
-
-
-
-
-
- 08:01 AM
-
-
-
-
-
-
- 08:03 AM
-
-
-
-
-
-
- 08:07 AM
-
-
-
-
-
-
- 08:08 AM
-
-
-
-
-
-
- 08:12 AM
-
-
-
-
-
-
- 08:15 AM
-
-
-
-
-
-
- 08:17 AM
-
-
-
-
-
-
- 08:21 AM
-
-
-
-
-
-
- 08:22 AM
-
-
-
-
-
-
- 08:25 AM
-
-
-
-
-
-
- 08:26 AM
-
-
-
-
-
-
- 08:31 AM
-
-
-
-
-
-
- 08:33 AM
-
-
-
-
-
-
- 08:35 AM
-
-
-
-
-
-
- 08:38 AM
-
-
-
-
-
-
- 08:39 AM
-
-
-
-
-
-
- 08:43 AM
-
-
-
-
-
-
- 08:45 AM
-
-
-
-
-
-
- 08:48 AM
-
-
-
-
-
-
- 08:51 AM
-
-
-
-
-
-
- 08:53 AM
-
-
-
-
-
-
- 08:56 AM
-
-
-
-
-
-
- 08:57 AM
-
-
-
-
-
-
- 09:03 AM
-
-
-
-
-
-
- 09:05 AM
-
-
-
-
-
-
- 09:09 AM
-
-
-
-
-
-
- 09:13 AM
-
-
-
-
-
-
- 09:14 AM
-
-
-
-
-
-
- 09:20 AM
-
-
-
-
-
-
- 09:23 AM
-
-
-
-
-
-
- 09:27 AM
-
-
-
-
-
-
- 09:31 AM
-
-
-
-
-
-
- 09:33 AM
-
-
-
-
-
-
- 09:39 AM
-
-
-
-
-
-
- 09:40 AM
-
-
-
-
-
-
- 09:50 AM
-
-
-
-
-
-
- 10:05 AM
-
-
-
-
-
-
- 10:17 AM
-
-
-
-
-
-
- 10:20 AM
-
-
-
-
-
-
- 10:35 AM
-
-
-
-
-
-
- 10:44 AM
-
-
-
-
-
-
- 10:50 AM
-
-
-
-
-
-
- 10:56 AM
-
-
-
-
-
-
- 11:05 AM
-
-
-
-
-
-
- 11:20 AM
-
-
-
-
-
-
- 11:35 AM
-
-
-
-
-
-
- 11:50 AM
-
-
-
-
-
-
- 11:53 AM
-
-
-
-
-
-
- 12:05 PM
-
-
-
-
-
-
- 12:08 PM
-
-
-
-
-
-
- 12:14 PM
-
-
-
-
-
-
- 12:24 PM
-
-
-
-
-
-
- 12:34 PM
-
-
-
-
-
-
- 12:36 PM
-
-
-
-
-
-
- 12:44 PM
-
-
-
-
-
-
- 12:54 PM
-
-
-
-
-
-
- 01:02 PM
-
-
-
-
-
-
- 01:04 PM
-
-
-
-
-
-
- 01:14 PM
-
-
-
-
-
-
- 01:23 PM
-
-
-
-
-
-
- 01:24 PM
-
-
-
-
-
-
- 01:32 PM
-
-
-
-
-
-
- 01:34 PM
-
-
-
-
-
-
- 01:44 PM
-
-
-
-
-
-
- 01:54 PM
-
-
-
-
-
-
- 02:04 PM
-
-
-
-
-
-
- 02:14 PM
-
-
-
-
-
-
- 02:24 PM
-
-
-
-
-
-
- 02:33 PM
-
-
-
-
-
-
- 02:38 PM
-
-
-
-
-
-
- 02:43 PM
-
-
-
-
-
-
- 02:53 PM
-
-
-
-
-
-
- 03:02 PM
-
-
-
-
-
-
- 03:12 PM
-
-
-
-
-
-
- 03:23 PM
-
-
-
-
-
-
- 03:32 PM
-
-
-
-
-
-
- 03:42 PM
-
-
-
-
-
-
- 03:45 PM
-
-
-
-
-
-
- 03:52 PM
-
-
-
-
-
-
- 03:53 PM
-
-
-
-
-
-
- 04:01 PM
-
-
-
-
-
-
- 04:03 PM
-
-
-
-
-
-
- 04:09 PM
-
-
-
-
-
-
- 04:13 PM
-
-
-
-
-
-
- 04:19 PM
-
-
-
-
-
-
- 04:22 PM
-
-
-
-
-
-
- 04:24 PM
-
-
-
-
-
-
- 04:27 PM
-
-
-
-
-
-
- 04:31 PM
-
-
-
-
-
-
- 04:33 PM
-
-
-
-
-
-
- 04:38 PM
-
-
-
-
-
-
- 04:39 PM
-
-
-
-
-
-
- 04:43 PM
-
-
-
-
-
-
- 04:45 PM
-
-
-
-
-
-
- 04:48 PM
-
-
-
-
-
-
- 04:51 PM
-
-
-
-
-
-
- 04:53 PM
-
-
-
-
-
-
- 04:54 PM
-
-
-
-
-
-
- 04:58 PM
-
-
-
-
-
-
- 05:00 PM
-
-
-
-
-
-
- 05:03 PM
-
-
-
-
-
-
- 05:06 PM
-
-
-
-
-
-
- 05:08 PM
-
-
-
-
-
-
- 05:12 PM
-
-
-
-
-
-
- 05:13 PM
-
-
-
-
-
-
- 05:18 PM
-
-
-
-
-
-
- 05:20 PM
-
-
-
-
-
-
- 05:23 PM
-
-
-
-
-
-
- 05:27 PM
-
-
-
-
-
-
- 05:28 PM
-
-
-
-
-
-
- 05:32 PM
-
-
-
-
-
-
- 05:33 PM
-
-
-
-
-
-
- 05:38 PM
-
-
-
-
-
-
- 05:41 PM
-
-
-
-
-
-
- 05:43 PM
-
-
-
-
-
-
- 05:47 PM
-
-
-
-
-
-
- 05:48 PM
-
-
-
-
-
-
- 05:53 PM
-
-
-
-
-
-
- 05:55 PM
-
-
-
-
-
-
- 05:58 PM
-
-
-
-
-
-
- 06:01 PM
-
-
-
-
-
-
- 06:02 PM
-
-
-
-
-
-
- 06:07 PM
-
-
-
-
-
-
- 06:09 PM
-
-
-
-
-
-
- 06:12 PM
-
-
-
-
-
-
- 06:16 PM
-
-
-
-
-
-
- 06:17 PM
-
-
-
-
-
-
- 06:22 PM
-
-
-
-
-
-
- 06:23 PM
-
-
-
-
-
-
- 06:27 PM
-
-
-
-
-
-
- 06:32 PM
-
-
-
-
-
-
- 06:37 PM
-
-
-
-
-
-
- 06:42 PM
-
-
-
-
-
-
- 06:47 PM
-
-
-
-
-
-
- 06:52 PM
-
-
-
-
-
-
- 06:57 PM
-
-
-
-
-
-
- 07:02 PM
-
-
-
-
-
-
- 07:06 PM
-
-
-
-
-
-
- 07:12 PM
-
-
-
-
-
-
- 07:17 PM
-
-
-
-
-
-
- 07:23 PM
-
-
-
-
-
-
- 07:25 PM
-
-
-
-
-
-
- 07:29 PM
-
-
-
-
-
-
- 07:38 PM
-
-
-
-
-
-
- 07:46 PM
-
-
-
-
-
-
- 07:49 PM
-
-
-
-
-
-
- 07:53 PM
-
-
-
-
-
-
- 07:59 PM
-
-
-
-
-
-
- 08:09 PM
-
-
-
-
-
-
- 08:18 PM
-
-
-
-
-
-
- 08:25 PM
-
-
-
-
-
-
- 08:38 PM
-
-
-
-
-
-
- 08:48 PM
-
-
-
-
-
-
- 08:51 PM
-
-
-
-
-
-
- 09:04 PM
-
-
-
-
-
-
- 09:17 PM
-
-
-
-
-
-
- 09:30 PM
-
-
-
-
-
-
- 09:43 PM
-
-
-
-
-
-
- 09:48 PM
-
-
-
-
-
-
- 09:56 PM
-
-
-
-
-
-
- 10:09 PM
-
-
-
-
-
-
- 10:12 PM
-
-
-
-
-
-
- 10:22 PM
-
-
-
-
-
-
- 10:35 PM
-
-
-
-
-
-
- 10:48 PM
-
-
-
-
-
-
- 11:01 PM
-
-
-
-
-
-
- 11:14 PM
-
-
-
-
-
-
- 11:29 PM
-
-
-
-
-
-
- 11:44 PM
-
-
-
-
-
-
- 11:59 PM
-
-
-
-
-
-
- 12:14 AM
-
-
-
-
-
-
- 12:24 AM
-
-
-
-
-
-
- 12:30 AM
-
-
-
-
-
-
- 12:50 AM
-
-
-
-
-
+
- 01:02 AM
-
-
-
-
+
+
+ 05:36 AM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Stops
+
+
+ Arrival
+
+
+
+
+
+ South Station
+
+
+
+ 05:36 AM
+
+
+
+
+
+ Courthouse
+
+
+
+ 05:38 AM
+
+
+
+
+
+ World Trade Center
+
+
+
+ 05:40 AM
+
+
+
+
+
+
+ Silver Line Way after Manulife Building
+
+
+
+ 05:42 AM
+
+
+
+
+ 05:46 AM
+
+
+
+
+
+
+
+
+
+ 05:55 AM
+
+
+
+
+
+
+
+
+
+ 06:03 AM
+
+
+
+
+
+
+
+
+
+ 06:10 AM
+
+
+
+
+
+
+
+
+
+ 06:17 AM
+
+
+
+
+
+
+
+
+
+ 06:24 AM
+
+
+
+
+
+
+
+
+
+ 06:31 AM
+
+
+
+
+
+
+
+
+
+ 06:37 AM
+
+
+
+
+
+
+
+
+
+ 06:43 AM
+
+
+
+
+
+
+
+
+
+ 06:49 AM
+
+
+
+
+
+
+
+
+
+ 06:54 AM
+
+
+
+
+
+
+
+
+
+ 06:59 AM
+
+
+
+
+
+
+
+
+
+ 07:03 AM
+
+
+
+
+
+
+
+
+
+ 07:05 AM
+
+
+
+
+
+
+
+
+
+ 07:09 AM
+
+
+
+
+
+
+
+
+
+ 07:10 AM
+
+
+
+
+
+
+
+
+
+ 07:13 AM
+
+
+
+
+
+
+
+
+
+ 07:14 AM
+
+
+
+
+
+
+
+
+
+ 07:19 AM
+
+
+
+
+
+
+
+
+
+ 07:21 AM
+
+
+
+
+
+
+
+
+
+ 07:24 AM
+
+
+
+
+
+
+
+
+
+ 07:26 AM
+
+
+
+
+
+
+
+
+
+ 07:27 AM
+
+
+
+
+
+
+
+
+
+ 07:32 AM
+
+
+
+
+
+
+
+
+
+ 07:33 AM
+
+
+
+
+
+
+
+
+
+ 07:37 AM
+
+
+
+
+
+
+
+
+
+ 07:39 AM
+
+
+
+
+
+
+
+
+
+ 07:42 AM
+
+
+
+
+
+
+
+
+
+ 07:44 AM
+
+
+
+
+
+
+
+
+
+ 07:46 AM
+
+
+
+
+
+
+
+
+
+ 07:50 AM
+
+
+
+
+
+
+
+
+
+ 07:51 AM
+
+
+
+
+
+
+
+
+
+ 07:55 AM
+
+
+
+
+
+
+
+
+
+ 07:57 AM
+
+
+
+
+
+
+
+
+
+ 07:59 AM
+
+
+
+
+
+
+
+
+
+ 08:01 AM
+
+
+
+
+
+
+
+
+
+ 08:03 AM
+
+
+
+
+
+
+
+
+
+ 08:07 AM
+
+
+
+
+
+
+
+
+
+ 08:08 AM
+
+
+
+
+
+
+
+
+
+ 08:12 AM
+
+
+
+
+
+
+
+
+
+ 08:15 AM
+
+
+
+
+
+
+
+
+
+ 08:17 AM
+
+
+
+
+
+
+
+
+
+ 08:21 AM
+
+
+
+
+
+
+
+
+
+ 08:22 AM
+
+
+
+
+
+
+
+
+
+ 08:25 AM
+
+
+
+
+
+
+
+
+
+ 08:26 AM
+
+
+
+
+
+
+
+
+
+ 08:31 AM
+
+
+
+
+
+
+
+
+
+ 08:33 AM
+
+
+
+
+
+
+
+
+
+ 08:35 AM
+
+
+
+
+
+
+
+
+
+ 08:38 AM
+
+
+
+
+
+
+
+
+
+ 08:39 AM
+
+
+
+
+
+
+
+
+
+ 08:43 AM
+
+
+
+
+
+
+
+
+
+ 08:45 AM
+
+
+
+
+
+
+
+
+
+ 08:48 AM
+
+
+
+
+
+
+
+
+
+ 08:51 AM
+
+
+
+
+
+
+
+
+
+ 08:53 AM
+
+
+
+
+
+
+
+
+
+ 08:56 AM
+
+
+
+
+
+
+
+
+
+ 08:57 AM
+
+
+
+
+
+
+
+
+
+ 09:03 AM
+
+
+
+
+
+
+
+
+
+ 09:05 AM
+
+
+
+
+
+
+
+
+
+ 09:09 AM
+
+
+
+
+
+
+
+
+
+ 09:13 AM
+
+
+
+
+
+
+
+
+
+ 09:14 AM
+
+
+
+
+
+
+
+
+
+ 09:20 AM
+
+
+
+
+
+
+
+
+
+ 09:23 AM
+
+
+
+
+
+
+
+
+
+ 09:27 AM
+
+
+
+
+
+
+
+
+
+ 09:31 AM
+
+
+
+
+
+
+
+
+
+ 09:33 AM
+
+
+
+
+
+
+
+
+
+ 09:39 AM
+
+
+
+
+
+
+
+
+
+ 09:40 AM
+
+
+
+
+
+
+
+
+
+ 09:50 AM
+
+
+
+
+
+
+
+
+
+ 10:05 AM
+
+
+
+
+
+
+
+
+
+ 10:17 AM
+
+
+
+
+
+
+
+
+
+ 10:20 AM
+
+
+
+
+
+
+
+
+
+ 10:35 AM
+
+
+
+
+
+
+
+
+
+ 10:44 AM
+
+
+
+
+
+
+
+
+
+ 10:50 AM
+
+
+
+
+
+
+
+
+
+ 10:56 AM
+
+
+
+
+
+
+
+
+
+ 11:05 AM
+
+
+
+
+
+
+
+
+
+ 11:20 AM
+
+
+
+
+
+
+
+
+
+ 11:35 AM
+
+
+
+
+
+
+
+
+
+ 11:50 AM
+
+
+
+
+
+
+
+
+
+ 11:53 AM
+
+
+
+
+
+
+
+
+
+ 12:05 PM
+
+
+
+
+
+
+
+
+
+ 12:08 PM
+
+
+
+
+
+
+
+
+
+ 12:14 PM
+
+
+
+
+
+
+
+
+
+ 12:24 PM
+
+
+
+
+
+
+
+
+
+ 12:34 PM
+
+
+
+
+
+
+
+
+
+ 12:36 PM
+
+
+
+
+
+
+
+
+
+ 12:44 PM
+
+
+
+
+
+
+
+
+
+ 12:54 PM
+
+
+
+
+
+
+
+
+
+ 01:02 PM
+
+
+
+
+
+
+
+
+
+ 01:04 PM
+
+
+
+
+
+
+
+
+
+ 01:14 PM
+
+
+
+
+
+
+
+
+
+ 01:23 PM
+
+
+
+
+
+
+
+
+
+ 01:24 PM
+
+
+
+
+
+
+
+
+
+ 01:32 PM
+
+
+
+
+
+
+
+
+
+ 01:34 PM
+
+
+
+
+
+
+
+
+
+ 01:44 PM
+
+
+
+
+
+
+
+
+
+ 01:54 PM
+
+
+
+
+
+
+
+
+
+ 02:04 PM
+
+
+
+
+
+
+
+
+
+ 02:14 PM
+
+
+
+
+
+
+
+
+
+ 02:24 PM
+
+
+
+
+
+
+
+
+
+ 02:33 PM
+
+
+
+
+
+
+
+
+
+ 02:38 PM
+
+
+
+
+
+
+
+
+
+ 02:43 PM
+
+
+
+
+
+
+
+
+
+ 02:53 PM
+
+
+
+
+
+
+
+
+
+ 03:02 PM
+
+
+
+
+
+
+
+
+
+ 03:12 PM
+
+
+
+
+
+
+
+
+
+ 03:23 PM
+
+
+
+
+
+
+
+
+
+ 03:32 PM
+
+
+
+
+
+
+
+
+
+ 03:42 PM
+
+
+
+
+
+
+
+
+
+ 03:45 PM
+
+
+
+
+
+
+
+
+
+ 03:52 PM
+
+
+
+
+
+
+
+
+
+ 03:53 PM
+
+
+
+
+
+
+
+
+
+ 04:01 PM
+
+
+
+
+
+
+
+
+
+ 04:03 PM
+
+
+
+
+
+
+
+
+
+ 04:09 PM
+
+
+
+
+
+
+
+
+
+ 04:13 PM
+
+
+
+
+
+
+
+
+
+ 04:19 PM
+
+
+
+
+
+
+
+
+
+ 04:22 PM
+
+
+
+
+
+
+
+
+
+ 04:24 PM
+
+
+
+
+
+
+
+
+
+ 04:27 PM
+
+
+
+
+
+
+
+
+
+ 04:31 PM
+
+
+
+
+
+
+
+
+
+ 04:33 PM
+
+
+
+
+
+
+
+
+
+ 04:38 PM
+
+
+
+
+
+
+
+
+
+ 04:39 PM
+
+
+
+
+
+
+
+
+
+ 04:43 PM
+
+
+
+
+
+
+
+
+
+ 04:45 PM
+
+
+
+
+
+
+
+
+
+ 04:48 PM
+
+
+
+
+
+
+
+
+
+ 04:51 PM
+
+
+
+
+
+
+
+
+
+ 04:53 PM
+
+
+
+
+
+
+
+
+
+ 04:54 PM
+
+
+
+
+
+
+
+
+
+ 04:58 PM
+
+
+
+
+
+
+
+
+
+ 05:00 PM
+
+
+
+
+
+
+
+
+
+ 05:03 PM
+
+
+
+
+
+
+
+
+
+ 05:06 PM
+
+
+
+
+
+
+
+
+
+ 05:08 PM
+
+
+
+
+
+
+
+
+
+ 05:12 PM
+
+
+
+
+
+
+
+
+
+ 05:13 PM
+
+
+
+
+
+
+
+
+
+ 05:18 PM
+
+
+
+
+
+
+
+
+
+ 05:20 PM
+
+
+
+
+
+
+
+
+
+ 05:23 PM
+
+
+
+
+
+
+
+
+
+ 05:27 PM
+
+
+
+
+
+
+
+
+
+ 05:28 PM
+
+
+
+
+
+
+
+
+
+ 05:32 PM
+
+
+
+
+
+
+
+
+
+ 05:33 PM
+
+
+
+
+
+
+
+
+
+ 05:38 PM
+
+
+
+
+
+
+
+
+
+ 05:41 PM
+
+
+
+
+
+
+
+
+
+ 05:43 PM
+
+
+
+
+
+
+
+
+
+ 05:47 PM
+
+
+
+
+
+
+
+
+
+ 05:48 PM
+
+
+
+
+
+
+
+
+
+ 05:53 PM
+
+
+
+
+
+
+
+
+
+ 05:55 PM
+
+
+
+
+
+
+
+
+
+ 05:58 PM
+
+
+
+
+
+
+
+
+
+ 06:01 PM
+
+
+
+
+
+
+
+
+
+ 06:02 PM
+
+
+
+
+
+
+
+
+
+ 06:07 PM
+
+
+
+
+
+
+
+
+
+ 06:09 PM
+
+
+
+
+
+
+
+
+
+ 06:12 PM
+
+
+
+
+
+
+
+
+
+ 06:16 PM
+
+
+
+
+
+
+
+
+
+ 06:17 PM
+
+
+
+
+
+
+
+
+
+ 06:22 PM
+
+
+
+
+
+
+
+
+
+ 06:23 PM
+
+
+
+
+
+
+
+
+
+ 06:27 PM
+
+
+
+
+
+
+
+
+
+ 06:32 PM
+
+
+
+
+
+
+
+
+
+ 06:37 PM
+
+
+
+
+
+
+
+
+
+ 06:42 PM
+
+
+
+
+
+
+
+
+
+ 06:47 PM
+
+
+
+
+
+
+
+
+
+ 06:52 PM
+
+
+
+
+
+
+
+
+
+ 06:57 PM
+
+
+
+
+
+
+
+
+
+ 07:02 PM
+
+
+
+
+
+
+
+
+
+ 07:06 PM
+
+
+
+
+
+
+
+
+
+ 07:12 PM
+
+
+
+
+
+
+
+
+
+ 07:17 PM
+
+
+
+
+
+
+
+
+
+ 07:23 PM
+
+
+
+
+
+
+
+
+
+ 07:25 PM
+
+
+
+
+
+
+
+
+
+ 07:29 PM
+
+
+
+
+
+
+
+
+
+ 07:38 PM
+
+
+
+
+
+
+
+
+
+ 07:46 PM
+
+
+
+
+
+
+
+
+
+ 07:49 PM
+
+
+
+
+
+
+
+
+
+ 07:53 PM
+
+
+
+
+
+
+
+
+
+ 07:59 PM
+
+
+
+
+
+
+
+
+
+ 08:09 PM
+
+
+
+
+
+
+
+
+
+ 08:18 PM
+
+
+
+
+
+
+
+
+
+ 08:25 PM
+
+
+
+
+
+
+
+
+
+ 08:38 PM
+
+
+
+
+
+
+
+
+
+ 08:48 PM
+
+
+
+
+
+
+
+
+
+ 08:51 PM
+
+
+
+
+
+
+
+
+
+ 09:04 PM
+
+
+
+
+
+
+
+
+
+ 09:17 PM
+
+
+
+
+
+
+
+
+
+ 09:30 PM
+
+
+
+
+
+
+
+
+
+ 09:43 PM
+
+
+
+
+
+
+
+
+
+ 09:48 PM
+
+
+
+
+
+
+
+
+
+ 09:56 PM
+
+
+
+
+
+
+
+
+
+ 10:09 PM
+
+
+
+
+
+
+
+
+
+ 10:12 PM
+
+
+
+
+
+
+
+
+
+ 10:22 PM
+
+
+
+
+
+
+
+
+
+ 10:35 PM
+
+
+
+
+
+
+
+
+
+ 10:48 PM
+
+
+
+
+
+
+
+
+
+ 11:01 PM
+
+
+
+
+
+
+
+
+
+ 11:14 PM
+
+
+
+
+
+
+
+
+
+ 11:29 PM
+
+
+
+
+
+
+
+
+
+ 11:44 PM
+
+
+
+
+
+
+
+
+
+ 11:59 PM
+
+
+
+
+
+
+
+
+
+ 12:14 AM
+
+
+
+
+
+
+
+
+
+ 12:24 AM
+
+
+
+
+
+
+
+
+
+ 12:30 AM
+
+
+
+
+
+
+
+
+
+ 12:50 AM
+
+
+
+
+
+
+
+
+
+ 01:02 AM
+
+
+
+
+
+
+
@@ -5787,403 +10781,918 @@ Array [
-
,
-]
+
+
-
-
-
-
- 033
-
-
-
-
- Kingston
-
-
-
-
-
-
- 061
-
-
-
-
- Kingston
-
-
-
-
-
-
- 063
-
-
-
-
- Plymouth
-
-
-
-
-
-
- 065
-
-
-
-
- Plymouth
-
-
-
-
-
-
- 041
-
-
-
-
- Kingston
-
-
-
-
-
-
- 043
-
-
-
-
- Kingston
-
-
-
-
-
-
- 045
-
-
-
-
- Kingston
-
-
-
-
-
-
- 047
-
-
-
-
- Kingston
-
-
-
-
-
-
- 067
-
-
-
-
- Plymouth
-
-
-
-
-
-
- 051
-
-
-
-
- Kingston
-
-
-
-
-
-
- 055
-
-
-
-
- Kingston
-
-
-
+
-
-
- 057
-
-
-
-
- Kingston
-
-
+
+
+
+
+ 033
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Stops
+
+
+ Fare
+
+
+ Arrival
+
+
+
+
+
+ South Station
+
+
+
+
+ 07:11 AM
+
+
+
+
+
+ Braintree
+
+
+
+ $7.00
+
+
+ 07:32 AM
+
+
+
+
+
+ South Weymouth
+
+
+
+ $8.00
+
+
+ 07:39 AM
+
+
+
+
+
+ Abington
+
+
+
+ $8.75
+
+
+ 07:44 AM
+
+
+
+
+
+ Whitman
+
+
+
+ $9.75
+
+
+ 07:47 AM
+
+
+
+
+
+ Hanson
+
+
+
+ $10.50
+
+
+ 07:57 AM
+
+
+
+
+
+ Halifax
+
+
+
+ $11.00
+
+
+ 08:02 AM
+
+
+
+
+
+
+ Kingston
+
+
+
+ $12.25
+
+
+ 08:12 AM
+
+
+
+
+
+
+ 061
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+ 063
+
+
+
+
+ Plymouth
+
+
+
+
+
+
+
+
+
+ 065
+
+
+
+
+ Plymouth
+
+
+
+
+
+
+
+
+
+ 041
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+ 043
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+ 045
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+ 047
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+ 067
+
+
+
+
+ Plymouth
+
+
+
+
+
+
+
+
+
+ 051
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+ 055
+
+
+
+
+ Kingston
+
+
+
+
+
+
+
+
+
+ 057
+
+
+
+
+ Kingston
+
+
+
+
+