Нет описания

Stream.elm 1.9KB

    module Stream where import Date import Date (Date) import FormatDate (formatDate) import Html (..) import Html.Attributes as Attr import List import String import PrettyDate (prettyDate) type alias Post = { title:String, content:String, created:Date } date s = case (Date.fromString s) of Ok d -> d Err e -> Date.fromTime 0 posts : List Post posts = [{title = "Something else", content = "Well, I can say more than \"Hello\", I guess!", created = date "2015-03-01T14:03"}, {title = "Hello, Other Things?", content = "There are other things?", created = date "2015-03-01T12:53:21"}, {title = "Hello, World!", content = "This is my very first post!", created = date "2015-03-01T12:27:00"}, {title = "Blog setup", content = "I guess I should post something now?", created = date "2014-12-24T10:57:03"}, {title = "Ancient history", content = "Teenage angst!!!!", created = date "2009-06-07T02:54:29"} ] referenceDate = date "2015-03-01T14:09" viewDate : Date -> Html viewDate d = let dateString = prettyDate referenceDate d isoDate = formatDate "%Y-%m-%dT%H:%M:%SZ" d in time [Attr.title isoDate, Attr.datetime isoDate] [(text dateString)] viewPost : Post -> Html viewPost post = div [] [ h3 [] [text post.title], p [] [text post.content], span [] [text "Written ", viewDate post.created] ] flipOrder : Order -> Order flipOrder o = case o of LT -> GT EQ -> EQ GT -> LT flipCompare : (a -> a -> Order) -> a -> a -> Order flipCompare compare' a b = flipOrder <| compare' a b compareBy : (a -> comparable) -> a -> a -> Order compareBy f a b = compare (f a) (f b) sortByDate = List.sortBy (.created >> Date.toTime) sortByDateReverse = List.sortWith (flipCompare <| compareBy (.created >> Date.toTime)) main = div [] (List.map viewPost (sortByDateReverse posts))