module ClassSchedule.View exposing (..) import ClassSchedule.Model exposing (..) import Html exposing (Html, div, text, table, td, th, tr, span, input, h1) import Html.Attributes exposing (class, classList, type_) import Tuple exposing (..) import Dict exposing (..) viewDept : Department -> String viewDept d = case d of ComputerScience -> "CS" Mathematics -> "MTH" Art -> "ART" Biology -> "BIO" viewCrn : Crn -> String viewCrn (d, i) = viewDept d ++ " " ++ (String.pad 3 '0' <| String.fromInt i) viewTimeNumber : Int -> String viewTimeNumber i = String.pad 2 '0' <| String.fromInt i viewDayHalf : DayHalf -> String viewDayHalf dh = case dh of AM -> "AM" PM -> "PM" viewTime : Time -> String viewTime (m, h, dh) = viewTimeNumber m ++ ":" ++ viewTimeNumber h ++ viewDayHalf dh viewTimeRange : (Time, Time) -> String viewTimeRange (t1, t2) = viewTime t1 ++ " to " ++ viewTime t2 viewDayCode : DayOfWeek -> String viewDayCode dw = case dw of Monday -> "M" Tuesday -> "T" Wednesday -> "W" Thursday -> "R" Friday -> "F" Saturday -> "S" Sunday -> "U" unique : List eq -> List eq unique l = case l of [] -> [] (x::xs) -> x :: unique (List.filter ((/=) x) xs) extractTimes : Course -> List (Time, Time) extractTimes c = let extractTime (d, t1, t2) = (t2, t2) in unique <| List.map extractTime (c.times) extractClasses : Course -> (Time, Time) -> List DayOfWeek extractClasses c (t1, t2) = let matches (d, tt1, tt2) = if tt1 == t1 && tt2 == t2 then Just d else Nothing in List.filterMap matches (c.times) extractTimeCodes : Course -> List String extractTimeCodes c = let fromTime tr = let dayCodes = String.concat <| List.map viewDayCode <| extractClasses c tr in dayCodes ++ " " ++ viewTimeRange tr in List.map fromTime <| extractTimes c viewClass : Course -> Html Msg viewClass c = tr [] [ td [] [ text <| viewCrn (c.crn) ] , td [] [ text <| c.name ] , td [] [ text <| String.join ", " <| c.instructors ] , td [] [ text <| String.join ", " <| extractTimeCodes c ] ] viewClassTable : List (CourseStatus, Course) -> Html Msg viewClassTable = let header = tr [] [ th [] [ text "Crn." ] , th [] [ text "Course Name" ] , th [] [ text "Instructors" ] , th [] [ text "Times" ] ] in table [] << (::) header << List.map (viewClass << second) viewToolbar : Model -> Html Msg viewToolbar m = div [] [ span [] [ text "Search: " , input [ type_ "text" ] [] ] ] viewClassList : Model -> Html Msg viewClassList m = div [] [ viewToolbar m , case get (m.term) (m.terms) of Just cs -> viewClassTable cs Nothing -> text "Please select a term!" ] viewClassSchedule : Model -> Html Msg viewClassSchedule m = text "Class schedule goes here!" viewModel : Model -> Html Msg viewModel m = div [ class "main" ] [ h1 [] [ text "Oregon State University Course Schedule" ] , div [ class "split-pane" ] [ div [ class "split-elem" ] [ viewClassList m ] , div [ class "split-elem" ] [ viewClassSchedule m ] ] ]