{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/CourseSection.tsx","webpack:///./src/components/CourseScheduleContent.tsx","webpack:///./src/components/CourseSectionDetailsDialog.tsx","webpack:///./src/components/CourseSchedule.tsx","webpack:///./src/main.tsx","webpack:///./src/utils/browserSupport.ts","webpack:///./src/utils/theme.tsx","webpack:///./src/components/AlertDialog.tsx","webpack:///./src/css/site.css?c232","webpack:///./src/css/site.css"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","shouldComponentUpdate","nextProps","visible","this","props","render","sectionName","Subject","CourseNumber","SectionNumber","enrollment","ActiveStudentCount","Capacity","className","tabIndex","role","onClick","handleShowCourseSectionDetails","Id","Session","ShortTitle","FacultyInfo","MeetingInfo","isLoading","content","id","keys","map","k","currentCategory","isHidden","anchor","courseSections","cs","IsHidden","href","Component","CourseSectionDetailsDialog","courseSection","course","meetings","sectionTitle","bookstoreLink","Term","isVisible","open","onClose","scroll","Fragment","style","paddingBottom","Description","variant","padding","instructionalMethod","dateRange","days","time","classroom","PrintedComments","target","upcomingCourseSections","Status","academicLevelOptions","all","UGNSL","UG","MR","DR","sectionStatusOptions","A","P","C","H","filteredResultsCount","courseSectionCache","spanningIcon","title","classes","spanningRegex","RegExp","sessionHelp","spanningSessionWarning","warning","fetchInitialData","dataUrl","term","fetch","then","handleFetchError","response","json","alertDialog","message","termData","selectedTerm","selectableTerms","setState","instructionalMethods","subjects","categories","mappings","buildCategories","filterMethod","methods","catch","e","showErrorMessage","fetchTermData","termId","runFilters","preventDefault","sectionId","currentTarget","dataset","sectionid","modalCourseSectionDetails","state","filterSectionFromUpcoming","forEach","ok","Error","statusText","retVal","filter","sessions","methodsSet","Set","subjectName","currentCategories","catId","SortName","toUpperCase","InstructionalMethods","im","add","categoryName","catName","replace","toLowerCase","Array","from","ordered","sort","a","b","buildFilterStateDescription","filterLevel","filterSeatsAvailable","filterSession","isMethodFiltered","join","temp","tempCS","coursePassesFilter","some","includes","Types","indexOf","handleClearFilters","handleDrawerToggle","isDrawerVisible","handleCloseCourseDetailsModal","handleCloseErrorModal","handleSessionFilterChange","handleLevelFilterChange","handleSeatsAvailableFilterChange","checked","handleMethodFilterChange","handleTermChange","history","pushState","smoothScroll","document","getElementById","hash","focus","componentDidMount","helpIcon","drawerPaper","flexRow","filterStateDescription","drawer","onChange","input","test","ContainerProps","multiple","renderValue","list","control","label","color","theme","position","flexGrow","paper","ModalProps","keepMounted","textAlign","AlertDialog","width","white","border","whiteUnderline","fontSize","borderBottom","display","fontStyle","grow","callback","requestedTerm","String","endsWith","url","js","createElement","src","onload","onerror","head","appendChild","loadPolyfills","palette","primary","main","secondary","typography","useNextVariants","options","transform","undefined","locals"],"mappings":"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","file":"cs-main.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([279,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import * as React from 'react';\r\nimport { ICourseSection} from '../CourseScheduleModels';\r\nimport { SyntheticEvent } from 'react';\r\n\r\n\r\ninterface ICourseSectionProps extends ICourseSection {\r\n visible: boolean;\r\n handleShowCourseSectionDetails: (e: SyntheticEvent) => any;\r\n}\r\n\r\nexport default class CourseSection extends React.Component{\r\n shouldComponentUpdate(nextProps: ICourseSectionProps) {\r\n return (nextProps.visible != this.props.visible);\r\n }\r\n\r\n render() {\r\n let sectionName = this.props.Subject + \"-\" + this.props.CourseNumber + \"-\" + this.props.SectionNumber;\r\n let enrollment = \"Enr/Cap: \" + this.props.ActiveStudentCount + \"/\" + this.props.Capacity;\r\n return (\r\n this.props.visible ?\r\n
\r\n
\r\n {sectionName} ({this.props.Session}) {this.props.ShortTitle} ({this.props.Id})\r\n \r\n {this.props.FacultyInfo}\r\n
\r\n {this.props.MeetingInfo &&\r\n
\r\n {this.props.MeetingInfo}\r\n \r\n {enrollment}\r\n
\r\n }\r\n
\r\n : null\r\n );\r\n }\r\n}","import React, { SyntheticEvent } from \"react\";\r\nimport { ICourseSection, ITermData, ICategoryData, ICategoryDictionary } from \"../CourseScheduleModels\";\r\nimport CourseSection from \"./CourseSection\";\r\n\r\ninterface ICourseScheduleContentProps {\r\n isLoading: boolean;\r\n content: ICategoryDictionary;\r\n handleShowCourseSectionDetails: (e: SyntheticEvent) => any;\r\n}\r\n\r\nexport default class CourseScheduleContent extends React.Component{\r\n\r\n render() {\r\n var { isLoading, content } = this.props;\r\n return (\r\n
\r\n {isLoading ?
Loading course schedule data.
Please wait.
:\r\n content &&\r\n Object.keys(content).map(k => {\r\n let currentCategory = content[k];\r\n return (!currentCategory.isHidden &&\r\n );\r\n })\r\n }\r\n
\r\n );\r\n }\r\n}","import Dialog from \"@material-ui/core/Dialog/Dialog\";\r\nimport React, { SyntheticEvent } from \"react\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent/DialogContent\";\r\nimport Table from \"@material-ui/core/Table/Table\";\r\nimport TableHead from \"@material-ui/core/TableHead/TableHead\";\r\nimport TableRow from \"@material-ui/core/TableRow/TableRow\";\r\nimport TableCell from \"@material-ui/core/TableCell/TableCell\";\r\nimport TableBody from \"@material-ui/core/TableBody/TableBody\";\r\nimport Typography from \"@material-ui/core/Typography/Typography\";\r\nimport IconButton from \"@material-ui/core/IconButton/IconButton\";\r\nimport Icon from \"@material-ui/core/Icon/Icon\";\r\nimport { ICourseSectionResult } from \"../CourseScheduleModels\";\r\n\r\nexport interface ICourseSectionDetailsDialogProps {\r\n isLoading: boolean;\r\n isVisible: boolean;\r\n data: ICourseSectionResult;\r\n sectionId?: string;\r\n onClose?: (e: SyntheticEvent) => any;\r\n}\r\n\r\nexport function CourseSectionDetailsDialog(props:ICourseSectionDetailsDialogProps) {\r\n const { courseSection, course, meetings } = props.data;\r\n const sectionTitle = courseSection && courseSection.Subject + \"-\" + courseSection.CourseNumber + \"-\" + courseSection.SectionNumber + \": \" + courseSection.ShortTitle;\r\n const bookstoreLink = courseSection && `https://spalding.textbookx.com/classes/${courseSection.Id}-${courseSection.Term}`;\r\n return (props.isVisible && \r\n
\r\n {props.isLoading ? Loading :\r\n \r\n {sectionTitle}close\r\n \r\n

{course.course.Description}

\r\n {meetings && meetings.length > 0 &&\r\n \r\n Meeting schedule:\r\n DeliveryDatesDaysTimeRoom\r\n \r\n {meetings.map((m, i) =>\r\n {m.instructionalMethod}{m.dateRange}{m.days}{m.time}{m.classroom}\r\n )}\r\n \r\n
\r\n
\r\n }\r\n

{courseSection.PrintedComments}

\r\n

Purchase books

\r\n Other opportunities to take this course:\r\n {course.upcomingCourseSections.length ?\r\n \r\n TermSection NameStatus\r\n \r\n {course.upcomingCourseSections.map(cs =>\r\n {cs.Term}{cs.Subject}-{cs.CourseNumber}-{cs.SectionNumber}{cs.Status}\r\n )}\r\n \r\n
\r\n
:\r\n There are no future sessions of this course currently scheduled.\r\n }\r\n
\r\n
\r\n }\r\n
\r\n
);\r\n}","import * as React from 'react';\r\nimport { ICourseSection, ITerm, IDictionarySS, ICourseScheduleDataResult, ITermData, ICategoryDictionary, ITermResult, ICategoryDict, IMappingDict, IMapping, ICourseSectionCache, ICourseSectionResult } from '../CourseScheduleModels';\r\nimport CourseSection from './CourseSection';\r\nimport { theme } from '../utils/theme';\r\n\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Select from '@material-ui/core/Select/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem/MenuItem';\r\nimport CssBaseline from '@material-ui/core/CssBaseline/CssBaseline';\r\nimport MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider';\r\nimport Button from '@material-ui/core/Button/Button';\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport Input from '@material-ui/core/Input/Input';\r\nimport IconButton from '@material-ui/core/IconButton/IconButton';\r\nimport Icon from '@material-ui/core/Icon/Icon';\r\nimport Tooltip from '@material-ui/core/Tooltip/Tooltip';\r\nimport Typography from '@material-ui/core/Typography'\r\nimport Hidden from '@material-ui/core/Hidden/Hidden';\r\nimport Drawer from '@material-ui/core/Drawer/Drawer';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox/Checkbox';\r\nimport smoothScroll from 'smoothscroll/smoothscroll';\r\nimport { PositionProperty, DisplayProperty, TextAlignProperty, FontStyleProperty } from 'csstype';\r\nimport { SyntheticEvent } from 'react';\r\nimport CourseScheduleContent from './CourseScheduleContent';\r\nimport { IAlertDialogProps, AlertDialog } from './AlertDialog';\r\nimport { ICourseSectionDetailsDialogProps, CourseSectionDetailsDialog } from './CourseSectionDetailsDialog';\r\nimport { Chip } from '@material-ui/core';\r\n\r\n\r\n\r\ninterface ICourseScheduleState {\r\n isLoading: boolean;\r\n isDrawerVisible: boolean;\r\n filterSession: string;\r\n filterLevel: string;\r\n filterMethod: string[];\r\n //filterOnline: boolean;\r\n filterSeatsAvailable: boolean;\r\n termData: ITermData;\r\n instructionalMethods?: IDictionarySS;\r\n selectableTerms?: IDictionarySS;\r\n subjects?: IDictionarySS;\r\n categories?: ICategoryDict;\r\n mappings?: IMappingDict;\r\n modalCourseSectionDetails: ICourseSectionDetailsDialogProps;\r\n alertDialog: IAlertDialogProps;\r\n}\r\n\r\ninterface ICourseScheduleProps {\r\n term?: string\r\n classes?: any\r\n}\r\n\r\nconst drawerWidth = 240;\r\n\r\nclass CourseSchedule extends React.Component{\r\n academicLevelOptions: IDictionarySS = {\r\n all: \"All academic levels\",\r\n UGNSL: \"Traditional Undergraduate\",\r\n UG: \"All Undergraduate\",\r\n MR: \"Master's\",\r\n DR: \"Doctoral\"\r\n }\r\n sectionStatusOptions: IDictionarySS = {\r\n A: \"Confirmed\",\r\n P: \"Proposed\",\r\n C: \"Canceled\",\r\n H: \"On Hold\"\r\n }\r\n filteredResultsCount: number = 0\r\n courseSectionCache: ICourseSectionCache = {}\r\n spanningIcon = linear_scale\r\n spanningRegex = new RegExp(/^S[A-Za-z]{1}/)\r\n sessionHelp =
Note: Spalding courses are categorized into sessions that reflect each course's approximate date range. Some courses span multiple six-week sessions and are allocated to special \"spanning sessions.\" If you select one of these spanning sessions in the session filter, you will only see results for courses that are explicitly associated with that spanning session (you won't see any standard six-week courses that are entirely contained within a single \"non-spanning\" session). Spanning sessions will be denoted by the spanning ({this.spanningIcon}) icon.If you are unsure which specific session your course is associated to, you may opt to leave the session filter set to 'All Sessions.'
\r\n spanningSessionWarning =
Warning: You have selected a spanning session as a session filter criteria. Only courses that span the all of the indicated sessions will be displayed.
\r\n constructor(props: ICourseScheduleProps) {\r\n super(props);\r\n this.state = {\r\n isLoading: true,\r\n isDrawerVisible: false,\r\n filterSession: \"all\",\r\n filterLevel: \"all\",\r\n filterMethod: [],\r\n //filterOnline: false,\r\n filterSeatsAvailable: false,\r\n termData: { selectedTerm: { Id: \"\", Description: \"\" }, sessions: {}, categories: {}, methods:[] },\r\n selectableTerms: null,\r\n subjects: null,\r\n categories: {},\r\n modalCourseSectionDetails: { isLoading: true, isVisible: false, data: {} },\r\n alertDialog: { isVisible: false, title: \"\", message: \"\" }\r\n };\r\n };\r\n componentDidMount() {\r\n this.fetchInitialData();\r\n };\r\n fetchInitialData = () => {\r\n let dataUrl = '/Data/All' + (this.props.term && (\"/\" + this.props.term));\r\n fetch(dataUrl)\r\n .then(this.handleFetchError)\r\n .then(response => response.json())\r\n .then((data: ICourseScheduleDataResult) => {\r\n var alertDialog: IAlertDialogProps = { isVisible: false, message: \"\", title: \"\" };\r\n if (!data.termData.selectedTerm) {\r\n alertDialog = { isVisible: true, message: \"Unable to find the term with id: \" + this.props.term + \". Please provide the correct term id, or choose an item from the terms selection list\", title: \"Unable to load term: \" + this.props.term }\r\n }\r\n //this line is important if a user chooses a term that was not fetched as one of the nearby terms. \r\n //we need to add the selected term's Id and Description to the selectableTerms list or it the terms selection box will display a blank value\r\n if (data.termData.selectedTerm && !data.selectableTerms[data.termData.selectedTerm.Id]) { data.selectableTerms[data.termData.selectedTerm.Id] = data.termData.selectedTerm.Description };\r\n\r\n //push all of the general fetched data into state. we need to further process the selected term's\r\n //information and we do that in the setState callback because the buildCategories function relies on data stored in the state\r\n \r\n this.setState({ instructionalMethods: data.instructionalMethods, selectableTerms: data.selectableTerms, subjects: data.subjects, categories: data.categories, mappings:data.mappings, alertDialog }, () => {\r\n var result = this.buildCategories(data.termData);\r\n\r\n this.setState({ isLoading: false, termData: result, filterMethod: result.methods });\r\n });\r\n \r\n })\r\n .catch((e:Error) => {\r\n this.showErrorMessage(\"Unable to fetch data from server\", e.message);\r\n });\r\n\r\n }\r\n fetchTermData = (termId: string) => {\r\n fetch('/Data/Term/' + termId)\r\n .then(this.handleFetchError)\r\n .then(response => response.json())\r\n .then((data: ITermResult) => {\r\n var result = this.buildCategories(data);\r\n this.setState({ termData: result, filterMethod:result.methods }, this.runFilters);\r\n })\r\n .catch((e:Error) => {\r\n this.showErrorMessage(\"Unable to fetch data from server\", e.message);\r\n });\r\n\r\n }\r\n handleShowCourseSectionDetails = (e: SyntheticEvent) => {\r\n e.preventDefault();\r\n let sectionId = e.currentTarget.dataset.sectionid;\r\n if (!sectionId) { return false; }\r\n if (this.courseSectionCache[sectionId]) {\r\n this.setState({ modalCourseSectionDetails: { ...this.state.modalCourseSectionDetails, data: this.filterSectionFromUpcoming(this.courseSectionCache[sectionId], sectionId), isLoading: false, isVisible: true, sectionId: sectionId } });\r\n }\r\n else {\r\n this.setState({ modalCourseSectionDetails: { ...this.state.modalCourseSectionDetails, isLoading: true, isVisible: true, data: {} } }, () => {\r\n fetch('/Data/CourseSection/' + sectionId)\r\n .then(this.handleFetchError)\r\n .then(response => response.json())\r\n .then((data: ICourseSectionResult) => {\r\n //convert sec statuses to display values before caching and displaying\r\n data.course.upcomingCourseSections.forEach(cs => cs.Status = this.sectionStatusOptions[cs.Status] || cs.Status);\r\n //convert instructional methods to display values before caching and displaying\r\n data.meetings.forEach(m => m.instructionalMethod = this.state.instructionalMethods[m.instructionalMethod] || m.instructionalMethod);\r\n this.courseSectionCache[sectionId] = data;\r\n this.setState({ modalCourseSectionDetails: { ...this.state.modalCourseSectionDetails, isLoading: false, data: this.filterSectionFromUpcoming(data, sectionId) } });\r\n })\r\n .catch((e:Error) => {\r\n this.setState({ modalCourseSectionDetails: { isLoading: false, isVisible: false, data: {} } }, () => {\r\n this.showErrorMessage(\"Unable to fetch data from server\", e.message)\r\n });\r\n });\r\n });\r\n\r\n }\r\n }\r\n handleFetchError = (response) => {\r\n if (!response.ok) {\r\n throw Error(response.statusText);\r\n }\r\n return response;\r\n }\r\n showErrorMessage = (title: string, message: string) => {\r\n this.setState({ alertDialog: { isVisible: true, title, message } });\r\n }\r\n\r\n //our modal dialog shows upcoming courses that match the clicked course, so a user can see alternate options for taking the course\r\n //however, we obviously don't want the user to see the clicked course in the alternates list, and we don't want to simply remove the\r\n //current course from the alternates list (if we did, and then the user accessed the cache entry from another\r\n //course section, this course section wouldn't show as a result). Instead, make a copy of the data and filter\r\n //current course section from it. pass the temp value to the state for the current dialog\r\n filterSectionFromUpcoming = (data: ICourseSectionResult, sectionId: string) =>\r\n {\r\n let retVal: ICourseSectionResult = { ...data };\r\n retVal.course.upcomingCourseSections = retVal.course.upcomingCourseSections.filter(cs => cs.Id != sectionId);\r\n return retVal;\r\n }\r\n\r\n //this function converts an ITermResult into ITermData. The only distiction being\r\n //that ITermResult contains raw course sections data, while ITermData contains the\r\n //course sections data, modified with a sort key and category reference. The course sections are\r\n //organized into a hashtable of course categories(sorted by Key) as a sorted array of course sections \r\n buildCategories = (data: ITermResult) => {\r\n const { courseSections, sessions, selectedTerm } = data;\r\n var retVal: ITermData = { sessions, selectedTerm, categories: {}, methods:[] };\r\n if (courseSections === null) return retVal;\r\n const { subjects, categories, mappings } = this.state;\r\n var methodsSet: Set = new Set();\r\n\r\n courseSections.forEach((cs) => {\r\n //if the course has a subject code that is in the subjects list, use the description from the subject\r\n //list, otherwise, just use the subject's abbreviation (i.e the id) (we wouldn't expect this to happen)\r\n let subjectName = subjects[cs.Subject] || cs.Subject;\r\n\r\n //if there is a mapping for this subject (to one or more categories) extract the categories' names into an array\r\n //otherwise, just use the current subject name as the category\r\n let currentCategories = (mappings[cs.Subject] && mappings[cs.Subject].map(catId => categories[catId] || catId)) || [subjectName];\r\n //build a sort name for the current course\r\n cs.SortName = (cs.Subject + cs.CourseNumber + cs.SectionNumber).toUpperCase();\r\n\r\n //add this course's instructional methods to the comprehensive list of available methods\r\n cs.InstructionalMethods.forEach(im => methodsSet.add(im));\r\n\r\n //finally, push this course in the hierarchical object under the correct categor(y/ies)\r\n currentCategories.forEach(categoryName => {\r\n if (!retVal.categories[categoryName]) {\r\n let catName = categories[categoryName] || categoryName;\r\n retVal.categories[categoryName] = { courseSections: [], isHidden: false, anchor: (\"#category_\" + catName).replace(/[^\\d\\w#]/g, \"\").toLowerCase() };\r\n }\r\n retVal.categories[categoryName].courseSections.push(cs);\r\n });\r\n });\r\n retVal.methods = Array.from(methodsSet);\r\n\r\n //now sort the categories and sections within each category\r\n var ordered = {};\r\n Object.keys(retVal.categories).sort().forEach(k => ordered[k] = retVal.categories[k]);\r\n retVal.categories = ordered;\r\n Object.keys(retVal.categories).forEach(k => {\r\n retVal.categories[k].courseSections.sort((a, b) => a.SortName > b.SortName ? 1 : -1);\r\n })\r\n return retVal;\r\n };\r\n buildFilterStateDescription = () => {\r\n const { filterLevel, filterMethod, filterSeatsAvailable, filterSession } = this.state;\r\n var isMethodFiltered = filterMethod.length !== this.state.termData.methods.length;\r\n if (filterLevel === \"all\" && filterSession === \"all\" && !isMethodFiltered && filterSeatsAvailable === false)\r\n return false;\r\n let retval =
The following filters are currently active. Click this button to clear all filters:\r\n
    \r\n {filterSession != \"all\" &&
  • Session: {this.state.termData.sessions[filterSession]}
  • }\r\n {filterLevel != \"all\" &&
  • Academic Level: {this.academicLevelOptions[filterLevel]}
  • }\r\n {isMethodFiltered &&
  • Only show these instructional methods: {filterMethod.join(\", \")}
  • }\r\n {filterSeatsAvailable &&
  • Only show courses with seats available: {filterSeatsAvailable ? \"Yes\" : \"No\"}
  • }\r\n
\r\n
\r\n return retval;\r\n }\r\n runFilters = () => {\r\n //to adhere to React standards, we don't want to modify the state outside of a setState call\r\n //but we don't want to run a setState for every single category and course. Instead,\r\n //lets build a temp object with the results of the filter, then when the filtering is finished,\r\n //we'll call a single setState to update the mainData object within the state\r\n let temp: ICategoryDictionary = {};\r\n this.filteredResultsCount = 0;\r\n const { selectedTerm, sessions, categories, methods } = this.state.termData;\r\n Object.keys(categories).forEach(k => {\r\n let currentCategory = categories[k]\r\n if (!temp[k]) temp[k] = { courseSections: [], isHidden: true, anchor: currentCategory.anchor }\r\n currentCategory.courseSections.forEach(cs => {\r\n var tempCS: ICourseSection = { ...cs, IsHidden: !this.coursePassesFilter(cs) }\r\n temp[k].courseSections.push(tempCS); \r\n if (!tempCS.IsHidden) {\r\n temp[k].isHidden = false;\r\n this.filteredResultsCount++;\r\n }\r\n });\r\n });\r\n \r\n this.setState({ termData: {selectedTerm, sessions, categories: temp, methods }, isLoading:false });\r\n }\r\n coursePassesFilter = (cs: ICourseSection) => {\r\n const { filterMethod, filterSession, filterLevel, filterSeatsAvailable } = this.state;\r\n //if we have a specified session filter (i.e. filterSession is not \"all\")\r\n //and if the specified session filter does not match the current course section's Session value\r\n //return false\r\n if (filterSession != \"all\" && cs.Session != filterSession) return false; \r\n ////if we have a filter for showing online courses only, check the course section's instructional methods for the OL,OLA,REM code\r\n ////if (filterOnline && !cs.InstructionalMethods.some(m => [\"OL\", \"OLA\", \"REM\"].indexOf(m) >= 0)) return false;\r\n if (!cs.InstructionalMethods.some(im => filterMethod.includes(im))) return false;\r\n //if we have a filter for showing courses that are not full, compare the course section's active student count to the maximum capacity\r\n if (filterSeatsAvailable && cs.ActiveStudentCount >= cs.Capacity) return false;\r\n //if we have a specified level filter (i.e. filterLevel is not \"all\")\r\n if (filterLevel != \"all\") {\r\n switch (filterLevel) {\r\n case \"UGNSL\": //undergraduate courses - not SL (accelerated)\r\n //check to make sure we have a UG value and no SL value in the course section's Types list\r\n if (cs.Types.indexOf(\"UG\") === -1 || cs.Types.indexOf(\"SL\") >= 0) return false;\r\n break;\r\n case \"UG\": //any undergraduate\r\n case \"SL\": //any SL course (accelerated)\r\n case \"MR\": //any master's level\r\n case \"DR\": //any doctoral level\r\n //check to make sure we have the corresponding value in the course section's Types list\r\n if (cs.Types.indexOf(filterLevel) === -1) return false;\r\n break;\r\n }\r\n }\r\n \r\n //if we haven't returned false by this point, the course section is not filtered out, return true\r\n return true;\r\n }\r\n handleClearFilters = () => {\r\n this.setState({ filterLevel: \"all\", filterMethod: [...this.state.termData.methods], filterSeatsAvailable: false, filterSession: \"all\" }, this.runFilters);\r\n }\r\n handleDrawerToggle = () => {\r\n this.setState({ isDrawerVisible: !this.state.isDrawerVisible });\r\n };\r\n handleCloseCourseDetailsModal = () => {\r\n this.setState({ modalCourseSectionDetails: { ...this.state.modalCourseSectionDetails, isVisible: false } });\r\n }\r\n handleCloseErrorModal = () => {\r\n this.setState({ alertDialog: {isVisible:false, title:\"\", message:\"\"}});\r\n }\r\n handleSessionFilterChange = (e: React.ChangeEvent) => {\r\n this.setState({ filterSession: e.target.value }, this.runFilters);\r\n }\r\n handleLevelFilterChange = (e: React.ChangeEvent) => {\r\n this.setState({ filterLevel: e.target.value }, this.runFilters);\r\n }\r\n handleSeatsAvailableFilterChange = (e, checked:boolean) =>{\r\n this.setState({ filterSeatsAvailable: checked }, this.runFilters);\r\n }\r\n handleMethodFilterChange = (e: React.ChangeEvent) => {\r\n this.setState({ filterMethod: [...e.target.value] }, this.runFilters);\r\n }\r\n handleTermChange = (e: React.ChangeEvent) => {\r\n let selectedTerm = e.target.value;\r\n this.setState({ isLoading: true, filterSession: \"all\" }, () => {\r\n window.history.pushState({ term: selectedTerm }, this.state.selectableTerms[e.target.value], \"/\" + selectedTerm);\r\n this.fetchTermData(e.target.value);\r\n });\r\n };\r\n smoothScroll = (e: SyntheticEvent) => {\r\n e.preventDefault();\r\n if (this.state.isDrawerVisible) this.handleDrawerToggle();\r\n let target = document.getElementById(e.currentTarget.hash);\r\n \r\n smoothScroll(target, 500, ()=>target.focus());\r\n }\r\n render() {\r\n const { helpIcon, drawerPaper, flexRow } = this.props.classes;\r\n const { selectableTerms } = this.state;\r\n const { sessions, categories, selectedTerm, methods } = this.state.termData;\r\n const filterStateDescription = this.buildFilterStateDescription();\r\n const drawer = \r\n \r\n\r\n return (\r\n \r\n Skip to content\r\n \r\n \r\n \r\n \r\n menu\r\n Course Schedule\r\n
\r\n
\r\n
\r\n \r\n \r\n {drawer}\r\n \r\n \r\n
\r\n {!this.state.isLoading && Object.keys(categories).length === 0 &&
There are no active courses in the selected term. Please select a different term.
}\r\n {!this.state.isLoading && Object.keys(categories).length > 0 && filterStateDescription && this.filteredResultsCount === 0 &&
The selected filters have eliminated all results. Please adjust or remove your selected filters.
}\r\n {!this.state.isLoading &&
{drawer}
}\r\n \r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst styles = theme => ({\r\n drawerPaper: {\r\n width: drawerWidth\r\n },\r\n white: {\r\n color: \"#fff !important\",\r\n border: \"none\"\r\n },\r\n whiteUnderline: {\r\n color: \"#fff !important\",\r\n fontSize:\"1.3em\",\r\n '&:after':{ borderBottom: \"2px solid #fff\" },\r\n '&:before': { borderBottom: \"1px solid #aaa\" },\r\n '&:hover:before': { borderBottom: \"2px solid #fff !important\" }\r\n },\r\n helpIcon: {\r\n fontSize: \"inherit\",\r\n color:\"#0d47a1\"\r\n },\r\n spanningIcon: {\r\n fontSize: \"1.5em\",\r\n color: \"#f33\"\r\n },\r\n flexRow: {\r\n display: \"flex\" as DisplayProperty\r\n },\r\n warning: {\r\n color: \"#c00\",\r\n textAlign: \"center\" as TextAlignProperty,\r\n fontSize: \".8em\",\r\n fontStyle: \"italic\" as FontStyleProperty\r\n } ,\r\n grow: {\r\n flexGrow: 1\r\n }\r\n});\r\n\r\nexport default withStyles(styles)(CourseSchedule);\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport CourseSchedule from './components/CourseSchedule';\r\nimport \"./css/site.css\"\r\nimport { browserSupport } from './utils/browserSupport';\r\nvar e = document.getElementById('root');\r\ndeclare var requestedTerm: string;\r\n\r\nbrowserSupport(()=>ReactDOM.render(, e));\r\n","const polyfillUrl = \"https://cdn.polyfill.io/v2/polyfill.min.js?features=String.prototype.includes,fetch,String.prototype.endsWith\";\r\nexport function browserSupport(callback) {\r\n if (browserSupportsAllFeatures()) {\r\n callback();\r\n } else {\r\n loadPolyfills(polyfillUrl, callback);\r\n }\r\n}\r\nfunction browserSupportsAllFeatures() {\r\n return String.prototype.includes && window.fetch && String.prototype.endsWith;\r\n}\r\nfunction loadPolyfills(url, callback) {\r\n var js = document.createElement('script');\r\n js.src = url;\r\n js.onload = function () {\r\n callback();\r\n };\r\n js.onerror = function () {\r\n callback(new Error('Failed to load script ' + url));\r\n };\r\n document.head.appendChild(js);\r\n}","import createMuiTheme, { Theme } from \"@material-ui/core/styles/createMuiTheme\";\r\n\r\nexport const theme: Theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: \"#0d47a1\"\r\n },\r\n secondary: {\r\n main: \"#f9c22d\"\r\n },\r\n },\r\n typography: {\r\n useNextVariants: true\r\n }\r\n});","import Dialog from \"@material-ui/core/Dialog/Dialog\";\r\nimport React, { SyntheticEvent } from \"react\";\r\nimport DialogTitle from \"@material-ui/core/DialogTitle/DialogTitle\";\r\nimport DialogContent from \"@material-ui/core/DialogContent/DialogContent\";\r\nimport IconButton from \"@material-ui/core/IconButton/IconButton\";\r\nimport Icon from \"@material-ui/core/Icon/Icon\";\r\n\r\n\r\nexport interface IAlertDialogProps {\r\n isVisible: boolean;\r\n title: string;\r\n message: string;\r\n onClose?: (e: SyntheticEvent) => any;\r\n}\r\n\r\nexport function AlertDialog(props: IAlertDialogProps) {\r\n return (props.isVisible &&\r\n \r\n
\r\n {props.title}close\r\n \r\n
{props.message}
\r\n
\r\n
\r\n
\r\n );\r\n}","\nvar content = require(\"!!../../node_modules/css-loader/index.js!./site.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/index.js!./site.css\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/index.js!./site.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"body { font-family: Roboto; }\\r\\n#content-container {margin: 0 auto}\\r\\n#course-schedule-content { padding-bottom: 50vh; margin-left:285px; margin-top:75px;}\\r\\n#permanent-nav {width: 275px;float: left;border: 1px solid #ccc;overflow: auto;position: fixed;bottom: 0;top: 64px; background-color:#f5f5f5}\\r\\n#admin-content { margin:0 10px;}\\r\\n.menuButton { display:none !important }\\r\\n.contentCategory { position:relative }\\r\\n.contentCategoryTarget { position:absolute; top:-64px}\\r\\n.contentCategoryHeading { font-size:14pt; font-weight:500; text-align:center; margin-top:15px; position:relative;}\\r\\n.drawerHeaderIcon { vertical-align: middle; margin: 0 10px 0 -3em;}\\r\\n.drawerSectionHeader { background-color:rgba(216, 216, 216, 0.5); border-top: 1px solid #e1e1e1; border-bottom: 1px solid #e1e1e1; text-align:center; padding: 5px 0 }\\r\\n.drawerSectionBody { padding: 1em}\\r\\n.dialogCloseButton { position: absolute !important; right:0; top:0}\\r\\n.dialogRow { height: auto !important; vertical-align:top !important; }\\r\\n.dialogRow td, .dialogRow th{ padding: 0 3px 0 0}\\r\\n.sectionHead{font-size: 1.2em;font-weight: 500;}\\r\\n.sectionLine {display:flex}\\r\\n.courseSection{margin: 0 0 2px 1em; border: 1px solid #d6d6d6; border-radius: 3px;}\\r\\n.secName{cursor: pointer;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;padding-right: 1em;text-decoration: none;color: inherit;}\\r\\n.secName:hover{color:#555}\\r\\n.secFaculty {white-space: nowrap;text-overflow: ellipsis;overflow: hidden;}\\r\\n.secMeeting.more{cursor: pointer;}\\r\\n.secMeeting.more:hover {color:#555}\\r\\n.smalllink {text-decoration:none; cursor:pointer; font-size:smaller; margin-left:10px;}\\r\\n.smalllink a:link {color: #889;}\\r\\n.smalllink a:visited{color: #889;}\\r\\n.smalllink a:hover{color: #889;}\\r\\n.smalllink a:active{color: #889;}\\r\\n.jumplist { list-style: none; padding: 0; margin: 0;}\\r\\n.jumplist a { text-decoration:none; color:inherit }\\r\\n.jumplist a:hover { color:#ccc }\\r\\n.jumplist li { padding: 3px 0;}\\r\\n.loading {text-align:center}\\r\\n.l1 {font-size: smaller; font-weight: 500; background-color: #f2f2f2;padding: 1px .5em}\\r\\n.l2 {font-size: smaller; padding:1px .5em 1px 1em}\\r\\n.l3 {font-size: smaller; padding:1px .5em 1px 1.5em}\\r\\n.l4 {font-size: smaller; padding:1px .5em 1px 2em; display: none;}\\r\\n.l4 td {padding:2px 5px;}\\r\\n.l4 th {border-bottom:1px solid black}\\r\\n.alt {background: #EEEEEE;}\\r\\n.l5 {font-size: smaller; padding-left: 20px; display : none; border-top:1px solid #EEEEEE;}\\r\\n.l6 {font-size: smaller; padding-left: 20px; display : none; border-top:1px solid #EEEEEE;}\\r\\n.activeTerm {font-weight:bolder;}\\r\\n.flexGrow {flex-grow: 1}\\r\\n.pointer {cursor:pointer}\\r\\n.categoryItem{ border: 1px solid #aaa; padding:0 .5em; border-radius:3px; margin:-1px; display:flex}\\r\\n.categoryItem.d0{margin-top: 1em; background-color:#fcfbf1; font-weight:500; width:350px}\\r\\n.categoryItem.d0.s { font-style: italic}\\r\\n.categoryItem.d1 { background-color: #edf8fb; width:342px}\\r\\n.compactList{padding:0 .5em;list-style:none;}\\r\\n.bookstore { text-align:center }\\r\\n\\r\\n.screenReaderShortcut{ position:absolute; top:-9999em; padding:2px 1em; background-color:white; border:1px solid #666; border-radius:4px; text-decoration:none}\\r\\n.screenReaderShortcut:focus{ position: fixed; top:0; left:0; z-index:9999; }\\r\\n:focus{outline: 1px solid #74bbff !important}\\r\\n/*below 600 cut the page margin, shrink and move the title, remove course section borders and shading, and hide section details */\\r\\n@media only screen and (max-width: 600px) {\\r\\n #course-schedule-content{margin-left:5px}\\r\\n .courseSection{border:none; border-bottom:1px solid #d6d6d6; border-radius:0}\\r\\n .l1{background-color:transparent}\\r\\n .appBarLabel{position:absolute; right:20px; top:-2px; font-size:.8em !important}\\r\\n .l2,.l3{display:none}\\r\\n}\\r\\n\\r\\n/*below 1024 hide the permanent-nav, show the menu button to toggle the drawer, get rid of the permanent-nav margin*/\\r\\n@media only screen and (max-width: 1024px) {\\r\\n #permanent-nav{display:none}\\r\\n #permanent-nav:focus{display:block}\\r\\n #course-schedule-content{margin-left:15px}\\r\\n .menuButton { display:inherit !important}\\r\\n}\\r\\n\\r\\n\\r\\n\", \"\"]);\n\n// exports\n"],"sourceRoot":""}