Home Identifier Source Repository

src/lib/prettify-courses.js

import map from 'lodash/collection/map'
import unescapeAllValues from './unescape-all-values'
import pick from 'lodash/object/pick'

const COURSE_TYPES = {
	IN: 'International',
	SE: 'SE',
	PS: 'PS',
	AD: 'AD',
}

function expandCourseType(type) {
	if (COURSE_TYPES.hasOwnProperty(type)) {
		return COURSE_TYPES[type]
	}
	return type
}

export default function prettifyCourses(jsonCourses) {
	return map(jsonCourses, function(course) {
		// remove all blank values that are filled with nbsps
		course = pick(course, (value, key) =>
			key.split(' ').join(' ').trim().length)

		if (course.inst !== '<span class="sis-help" title=""></span>') {
			course.institution = course.inst
		}
		delete course.inst

		course.credits = parseFloat(course.credit.replace(/\((.*)\)/, '$1'))
		delete course.credit

		if (course['g.e.']) {
			course.gereqs = course['g.e.'].trim().split(' ')
		}
		delete course['g.e.']

		course.num = parseInt(course.no)
		delete course.no

		course.semester = parseInt(course.term)
		course.year = parseInt(course.year)
		course.term = parseInt(String(course.year) + String(course.semester))

		course.deptnum = course.dept + ' ' + course.num
		course.level = course.level * 100
		course.depts = course.dept.split('/')

		course.name = course.title.trim()
		delete course.title

		// status is In-Progress or blank
		delete course.sts

		course.type = expandCourseType(course.type)

		return unescapeAllValues(course)
	})
}