packages feed

casr-logbook 0.0.6 → 0.0.7

raw patch · 33 files changed

+768/−61 lines, 33 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Data.Aviation.Casr.Logbook.ARN: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.ARN.ARN
+ Data.Aviation.Casr.Logbook.Aircraft: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Aircraft.Aircraft
+ Data.Aviation.Casr.Logbook.DOB: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.DOB.DOB
+ Data.Aviation.Casr.Logbook.Date: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Date.Date
+ Data.Aviation.Casr.Logbook.DayNight: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.DayNight.DayNight
+ Data.Aviation.Casr.Logbook.Engine: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Engine.Engine
+ Data.Aviation.Casr.Logbook.FlightLog: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.FlightLog.FlightLog
+ Data.Aviation.Casr.Logbook.FlightLogEntries: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.FlightLogEntries.FlightLogEntries
+ Data.Aviation.Casr.Logbook.FlightLogEntry: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.FlightLogEntry.FlightLogEntry
+ Data.Aviation.Casr.Logbook.FlightPath: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.FlightPath.FlightPath
+ Data.Aviation.Casr.Logbook.FlightPath: pathlist :: FlightPath -> [String]
+ Data.Aviation.Casr.Logbook.Hours: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Hours.Hours
+ Data.Aviation.Casr.Logbook.Image: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Image.Image
+ Data.Aviation.Casr.Logbook.ImageType: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.ImageType.ImageType
+ Data.Aviation.Casr.Logbook.Images: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Images.Images
+ Data.Aviation.Casr.Logbook.Name: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Name.Name
+ Data.Aviation.Casr.Logbook.PiC: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.PiC.PiC
+ Data.Aviation.Casr.Logbook.PoB: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.PoB.PoB
+ Data.Aviation.Casr.Logbook.Printer.Html: class Html s
+ Data.Aviation.Casr.Logbook.Printer.Html: html :: Html s => s -> String
+ Data.Aviation.Casr.Logbook.Printer.Html: instance Data.Aviation.Casr.Logbook.Printer.Html.Html GHC.Types.Char
+ Data.Aviation.Casr.Logbook.Printer.Html: instance Data.Aviation.Casr.Logbook.Printer.Html.Html GHC.Types.Int
+ Data.Aviation.Casr.Logbook.Printer.Html: instance Data.Aviation.Casr.Logbook.Printer.Html.Html a => Data.Aviation.Casr.Logbook.Printer.Html.Html [a]
+ Data.Aviation.Casr.Logbook.Printer.Html: printHtml :: Html s => s -> IO ()
+ Data.Aviation.Casr.Logbook.Printer.Html: writeHtmlFile :: Html s => FilePath -> s -> IO ()
+ Data.Aviation.Casr.Logbook.Printer.Markdown: instance Data.Aviation.Casr.Logbook.Printer.Markdown.Markdown GHC.Types.Char
+ Data.Aviation.Casr.Logbook.Printer.Markdown: instance Data.Aviation.Casr.Logbook.Printer.Markdown.Markdown GHC.Types.Int
+ Data.Aviation.Casr.Logbook.Printer.Markdown: instance Data.Aviation.Casr.Logbook.Printer.Markdown.Markdown a => Data.Aviation.Casr.Logbook.Printer.Markdown.Markdown [a]
+ Data.Aviation.Casr.Logbook.Sequence: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Sequence.Sequence
+ Data.Aviation.Casr.Logbook.Totals: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Totals.Totals
+ Data.Aviation.Casr.Logbook.TrackLog: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.TrackLog.TrackLog
+ Data.Aviation.Casr.Logbook.TrackLogType: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.TrackLogType.TrackLogType
+ Data.Aviation.Casr.Logbook.TrackLogs: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.TrackLogs.TrackLogs
+ Data.Aviation.Casr.Logbook.Video: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Video.Video
+ Data.Aviation.Casr.Logbook.VideoType: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.VideoType.VideoType
+ Data.Aviation.Casr.Logbook.Videos: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Videos.Videos
+ Data.Aviation.Casr.Logbook.Visualisation: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Visualisation.Visualisation
+ Data.Aviation.Casr.Logbook.VisualisationType: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.VisualisationType.VisualisationType
+ Data.Aviation.Casr.Logbook.Visualisations: instance Data.Aviation.Casr.Logbook.Printer.Html.Html Data.Aviation.Casr.Logbook.Visualisations.Visualisations
- Data.Aviation.Casr.Logbook.FlightLogEntry: FlightLogEntry :: Name -> Sequence -> Date -> Aircraft -> Hours -> PoB -> FlightPath -> DayNight -> PiC -> TrackLogs -> Visualisations -> Images -> Videos -> FlightLogEntry
+ Data.Aviation.Casr.Logbook.FlightLogEntry: FlightLogEntry :: Sequence -> Date -> Aircraft -> Hours -> PoB -> FlightPath -> DayNight -> PiC -> TrackLogs -> Visualisations -> Images -> Videos -> FlightLogEntry
- Data.Aviation.Casr.Logbook.VisualisationType: Doarama :: VisualisationType
+ Data.Aviation.Casr.Logbook.VisualisationType: Doarama :: String -> VisualisationType

Files

casr-logbook.cabal view
@@ -1,5 +1,5 @@ name:               casr-logbook-version:            0.0.6+version:            0.0.7 license:            OtherLicense license-file:       LICENSE author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>@@ -58,6 +58,7 @@                     Data.Aviation.Casr.Logbook.Images                     Data.Aviation.Casr.Logbook.ImageType                     Data.Aviation.Casr.Logbook.Printer.Markdown+                    Data.Aviation.Casr.Logbook.Printer.Html                     Data.Aviation.Casr.Logbook.Name                     Data.Aviation.Casr.Logbook.PiC                     Data.Aviation.Casr.Logbook.PoB
changelog view
@@ -1,3 +1,7 @@+0.0.7++* HTML output printer.+ 0.0.6  * Fix bug in bambuser video type.
src/Data/Aviation/Casr/Logbook.hs view
@@ -1,4 +1,6 @@-module Data.Aviation.Casr.Logbook(+{-# LANGUAGE OverloadedStrings #-}++module Data.Aviation.Casr.Logbook (   module L ) where @@ -16,6 +18,7 @@ import Data.Aviation.Casr.Logbook.Image as L import Data.Aviation.Casr.Logbook.Images as L import Data.Aviation.Casr.Logbook.ImageType as L+import Data.Aviation.Casr.Logbook.Printer.Html as L import Data.Aviation.Casr.Logbook.Printer.Markdown as L import Data.Aviation.Casr.Logbook.Name as L import Data.Aviation.Casr.Logbook.PiC as L
src/Data/Aviation/Casr/Logbook/ARN.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.String  newtype ARN =@@ -16,4 +17,8 @@      instance Markdown ARN where   markdown (ARN s) =-    "* Aviation Reference Number: **`" ++ s ++ "`**\n"+    "* Aviation Reference Number: **`" ++ markdown s ++ "`**\n"++instance Html ARN where+  html (ARN s) =+    "<span class=\"heading arnheading\">ARN: </span><span class=\"arninfo\">" ++ html s ++ "</span>"
src/Data/Aviation/Casr/Logbook/Aircraft.hs view
@@ -4,6 +4,7 @@  import Data.Aviation.Casr.Logbook.Engine import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  data Aircraft =   Aircraft@@ -18,10 +19,51 @@       [         "* Aircraft"       , "\n  * Type: **"-      , t+      , markdown t       , "**\n  * Registration: **`"-      , r+      , markdown r       , "`**\n  * Engine: **`"       , markdown e       , "`**\n"+      ]++instance Html Aircraft where+  html (Aircraft t r e) =+    concat+      [+        "<span class=\"heading aircraftheading\">"+      , "Aircraft"+      , "</span>"+      , ": "+      , "<div class=\"info aircraftinfo\">"+      , "<ul>"+      , "<li>"+      , "<span class=\"heading aircrafttypeheading\">"+      , "Type"+      , "</span>"+      , ": "+      , "<span class=\"info aircrafttypeinfo\">"+      , html t+      , "</span>"+      , "</li>"+      , "<li>"+      , "<span class=\"heading aircraftregistrationheading\">"+      , "Registration"+      , "</span>"+      , ": "+      , "<span class=\"info aircraftregistrationinfo\">"+      , html r+      , "</span>"+      , "</li>"+      , "<li>"+      , "<span class=\"heading aircraftengineheading\">"+      , "Engine"+      , "</span>"+      , ": "+      , "<span class=\"info aircraftengineinfo\">"+      , html e+      , "</span>"+      , "</li>"+      , "</ul>"+      , "</div>"       ]
src/Data/Aviation/Casr/Logbook/DOB.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.String  newtype DOB =@@ -16,4 +17,8 @@  instance Markdown DOB where   markdown (DOB s) =-    "* Date of Birth: **`" ++ s ++ "`**\n"+    "* Date of Birth: **`" ++ markdown s ++ "`**\n"++instance Html DOB where+  html (DOB s) =+    "<span class=\"heading dobheading\">Date of Birth: </span><span class=\"dobinfo\">" ++ html s ++ "</span>"
src/Data/Aviation/Casr/Logbook/Date.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.String      newtype Date =@@ -17,3 +18,16 @@ instance Markdown Date where   markdown (Date s) =     "* Date: **`" ++ s ++ "`**\n"++instance Html Date where+  html (Date s) =+    concat+      [+        "<span class=\"heading dateheading\">"+      , "Date"+      , "</span>"+      , ": "+      , "<span class=\"info dateinfo\">"+      , html s+      , "</span>"+      ]
src/Data/Aviation/Casr/Logbook/DayNight.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  data DayNight =   Day@@ -20,4 +21,20 @@           Night -> "Night"           DayNight -> "Day & Night"       , "**\n"+      ]+    +instance Html DayNight where+  html x =+    concat+      [+        "<span class=\"heading daynightheading\">"+      , "Day/Night"+      , "</span>"+      , ": "+      , "<span class=\"info daynightinfo\">"+      , case x of+          Day -> "Day"+          Night -> "Night"+          DayNight -> "Day &amp; Night"+      , "</span>"       ]
src/Data/Aviation/Casr/Logbook/Engine.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  data Engine =   Single@@ -13,4 +14,10 @@   markdown Single =     "single"   markdown Multi =+    "multi"++instance Html Engine where+  html Single =+    "single"+  html Multi =     "multi"
src/Data/Aviation/Casr/Logbook/FlightLog.hs view
@@ -7,6 +7,7 @@ import Data.Aviation.Casr.Logbook.FlightLogEntries import Data.Aviation.Casr.Logbook.Name import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Totals  data FlightLog =@@ -18,13 +19,13 @@   deriving (Eq, Ord, Show)      instance Markdown FlightLog where-  markdown (FlightLog (Name name) dob arn entries) =+  markdown (FlightLog (Name name') dob arn entries) =     concat       [         "# Pilot Personal Log Book\n"       , "### Civil Aviation Safety Regulation 1998 (61.345) [*austlii.edu.au*](http://www.austlii.edu.au/au/legis/cth/consol_reg/casr1998333/s61.345.html)\n\n"       , "* "-      , name+      , markdown name'       , "\n"       , markdown dob       , markdown arn@@ -32,4 +33,54 @@       , markdown (totals entries)       , "\n----\n\n"       , markdown entries+      ]+    +instance Html FlightLog where+  html (FlightLog name@(Name name') dob arn@(ARN arn') entries) =+    concat+      [+        "<!DOCTYPE HTML>"+      , "<html lang=\"en\">"+      , "<head>"+      , "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"+      , "<title>Pilot Personal Log Book &mdash; "+      , html name'+      , " ("+      , html arn'+      , ")"+      , "</title>"+      , "<link href=\"https://fonts.googleapis.com/css?family=Inconsolata:400,700\" rel=\"stylesheet\" type=\"text/css\">"+      , "<link rel=\"stylesheet\" type=\"text/css\" href=\"casr-logbook.css\">"+      , "<link rel=\"alternate\" type=\"application/atom+xml\" href=\"/atom.xml\" title=\"Atom feed\">"+      , "<script type=\"text/javascript\" src=\"http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"></script>"+      , "<script type=\"text/javascript\" src=\"https://raw.github.com/Mathapedia/LaTeX2HTML5/master/latex2html5.min.js\"></script>"+      , "</head>"+      , "<body class=\"casr-logbook\">"    +      , "<div class=\"title\">"+      , "<h1>Pilot Personal Log Book</h1>"+      , "</div>"+      , "<div class=\"subtitle\">"+      , "<h2>Civil Aviation Safety Regulation 1998 (61.345) <span class=\"austlii\"><a href=\"http://www.austlii.edu.au/au/legis/cth/consol_reg/casr1998333/s61.345.html\">austlii.edu.au</a></span></h2>"+      , "</div>" +      , "<div class=\"personal\">"     +      , "<ul>"+      , "<li>"+      , html name+      , "</li>"+      , "<li>"+      , html dob+      , "</li>"+      , "<li>"+      , html arn+      , "</li>"+      , "</ul>"            +      , "</div>"+      , "<hr>"+      , html (totals entries)+      , "<hr>"+      , "<div class=\"flightlogentries\">"+      , html entries+      , "</div> "+      , "</body>"+      , "</html>"       ]
src/Data/Aviation/Casr/Logbook/FlightLogEntries.hs view
@@ -4,6 +4,7 @@  import Data.Aviation.Casr.Logbook.FlightLogEntry import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.List  newtype FlightLogEntries =@@ -20,3 +21,13 @@ instance Markdown FlightLogEntries where   markdown (FlightLogEntries g) =     intercalate "\n\n----\n\n" (fmap markdown g)++instance Html FlightLogEntries where+  html (FlightLogEntries g) =+    (\h -> concat+             [+               "<div class=\"flightlogentry\">"+              , html h+              , "</div>"+              , "<hr>"+              ]) =<< g
src/Data/Aviation/Casr/Logbook/FlightLogEntry.hs view
@@ -8,10 +8,10 @@ import Data.Aviation.Casr.Logbook.FlightPath import Data.Aviation.Casr.Logbook.Hours import Data.Aviation.Casr.Logbook.Images-import Data.Aviation.Casr.Logbook.Name import Data.Aviation.Casr.Logbook.PiC import Data.Aviation.Casr.Logbook.PoB import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Sequence import Data.Aviation.Casr.Logbook.TrackLogs import Data.Aviation.Casr.Logbook.Videos@@ -25,7 +25,6 @@ -} data FlightLogEntry =   FlightLogEntry-    Name     Sequence     Date      Aircraft@@ -41,11 +40,10 @@   deriving (Eq, Ord, Show)      instance Markdown FlightLogEntry where-  markdown (FlightLogEntry name sequ date aircraft hours pob flightpath daynight pic tracklogs visualisations images videos) =+  markdown (FlightLogEntry sequ date aircraft hours pob flightpath daynight pic tracklogs visualisations images videos) =     concat       [-        markdown name-      , markdown date+        markdown date       , markdown sequ       , markdown aircraft       , markdown hours@@ -58,3 +56,59 @@       , markdown visualisations       , markdown images       ]++instance Html FlightLogEntry where+  html (FlightLogEntry sequ date aircraft hours pob flightpath daynight pic tracklogs visualisations images videos) =+    let onethen x c r = concat $+                 case r of+                   [] ->+                     []+                   _ ->+                     [+                       "<"+                     , x+                     , " class=\""+                     , c+                     , "\">"+                     , r +                     , "</"+                     , x+                     , ">"+                     ]+        li = onethen "li"+        div' = onethen "div"             +    in  concat+          [+            "<div class=\"flightlogsequence\">"+          , "<h3 class=\"sequence\">"+          , html sequ+          , "</h3>"+          , "</div>"+          , "<ul>"+          , "<li class=\"date\">"+          , html date+          , "</li>"+          , "<li class=\"aircraft\">"+          , html aircraft+          , "</li>"+          , "<li class=\"hours\">"+          , html hours+          , "</li>"+          , "<li class=\"pob\">"+          , html pob+          , "</li>"+          , "<li class=\"flightpath\">"+          , html flightpath+          , "</li>"+          , "<li class=\"daynight\">"+          , html daynight+          , "</li>"+          , "<li class=\"pic\">"+          , html pic+          , "</li>"+          , li "tracklogs" (html tracklogs)+          , li "videos" (html videos) +          , li "visualisations" (html visualisations) +          , "</ul>"+          , div' "images" (html images) +          ]
src/Data/Aviation/Casr/Logbook/FlightPath.hs view
@@ -1,9 +1,12 @@ module Data.Aviation.Casr.Logbook.FlightPath (   FlightPath(..)+, pathlist , directPath ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html+import Data.List  data FlightPath =   FlightPath@@ -22,14 +25,30 @@     []     to +pathlist ::+  FlightPath+  -> [String]+pathlist (FlightPath s x e) =+  s : (x ++ [e])+ instance Markdown FlightPath where-  markdown (FlightPath s x e) =+  markdown p =     concat       [-        "* Path: **"-      , s-      , x >>= (" - " ++)-      , " - "-      , e+        "* Flight path: **"+      , intercalate " - " (map markdown (pathlist p))       , "**\n"+      ]++instance Html FlightPath where+  html p =+    concat+      [+        "<span class=\"heading flightpathheading\">"+      , "Flight path"+      , "</span>"+      , ": "+      , "<span class=\"info flightpathinfo\">"+      , intercalate " &amp; " (map html (pathlist p))+      , "</span>"       ]
src/Data/Aviation/Casr/Logbook/Hours.hs view
@@ -6,6 +6,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  -- abstract data Hours =@@ -35,8 +36,23 @@  instance Markdown Hours where   markdown (Hours t p) =-    "* Hours: **`" ++ show t ++ "." ++ show p ++ "`**\n"+    "* Hours: **`" ++ markdown t ++ "." ++ markdown p ++ "`**\n" +instance Html Hours where+  html (Hours t p) =+    concat+      [+        "<span class=\"heading hoursheading\">"+      , "Hours"+      , "</span>"+      , ": "+      , "<span class=\"info hoursinfo\">"+      , html t+      , "."+      , html p+      , "</span>"+      ]+       fractionalHours ::   Fractional a =>   Hours
src/Data/Aviation/Casr/Logbook/Image.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.ImageType+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Printer.Markdown import Data.Maybe @@ -25,5 +26,20 @@           , uri           , "\" width=\"120\" alt=\""           , n-          , "\"/></a>"+          , "\"></a>"+          ]++instance Html Image where+  html (Image uri name itype) =+    let t = html itype+        n = fromMaybe ("Image (" ++ t ++ ")") name+    in  concat+          [+            "<a href=\""+          , uri+          , "\"><img src=\""+          , uri+          , "\" width=\"120\" alt=\""+          , n+          , "\"></a>"           ]
src/Data/Aviation/Casr/Logbook/ImageType.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  data ImageType =   Png@@ -13,4 +14,10 @@   markdown Png =     "png"   markdown Jpg =+    "jpg"++instance Html ImageType where+  html Png =+    "png"+  html Jpg =     "jpg"
src/Data/Aviation/Casr/Logbook/Images.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Image+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Printer.Markdown  newtype Images =@@ -23,3 +24,11 @@         []               _ ->         "\n<div style=\"text-align: justify\">\n" ++ (i >>= \j -> markdown j ++ "\n") ++ "</div>"++instance Html Images where+  html (Images i) =+    case i of+      [] ->+        []        +      _ ->+        "<div style=\"text-align: justify\">" ++ (i >>= html) ++ "</div>"
src/Data/Aviation/Casr/Logbook/Name.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.String  newtype Name =@@ -16,4 +17,8 @@  instance Markdown Name where   markdown (Name s) =-    "### " ++ s ++ "\n"+    "### " ++ markdown s ++ "\n"++instance Html Name where+  html (Name s) =+    "<span class=\"heading nameheading\">Name: </span><span class=\"nameinfo\">" ++ html s ++ "</span>"
src/Data/Aviation/Casr/Logbook/PiC.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.String  newtype PiC =@@ -16,4 +17,18 @@      instance Markdown PiC where   markdown (PiC s) =-    "* Pilot in Command: **" ++ s ++ "**\n"+    "* Pilot in Command: **" ++ markdown s ++ "**\n"++instance Html PiC where+  html (PiC s) =+    concat+      [+        "<span class=\"heading picheading\">"+      , "Pilot in Command"+      , "</span>"+      , ": "+      , "<span class=\"info picinfo\">"+      , html s+      , "</span>"+      ]+    
src/Data/Aviation/Casr/Logbook/PoB.hs view
@@ -5,6 +5,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  data PoB =   PoB Int@@ -29,6 +30,23 @@           0 -> "unmanned"           1 -> "solo"           2 -> "dual"-          _ -> show n+          _ -> markdown n       , "`**\n"+      ]++instance Html PoB where  +  html (PoB n) =+    concat+      [+        "<span class=\"heading pobheading\">"+      , "PoB"+      , "</span>"+      , ": "+      , "<span class=\"info pobinfo\">"+      , case n of+          0 -> "unmanned"+          1 -> "solo"+          2 -> "dual"+          _ -> html n+      , "</span>"       ]
+ src/Data/Aviation/Casr/Logbook/Printer/Html.hs view
@@ -0,0 +1,40 @@+module Data.Aviation.Casr.Logbook.Printer.Html (+  Html(..)+, printHtml+, writeHtmlFile+) where++class Html s where+  html ::+    s+    -> String++instance Html Char where+  html '&' =+    "&amp;"+  html c =+    [c]+    +instance Html Int where+  html =+    show+    +instance Html a => Html [a] where+  html =+    (=<<) html++printHtml ::+  Html s =>+  s+  -> IO ()+printHtml =+  putStrLn . html++writeHtmlFile ::+  Html s =>+  FilePath+  -> s+  -> IO ()+writeHtmlFile p =+  writeFile p . html+  
src/Data/Aviation/Casr/Logbook/Printer/Markdown.hs view
@@ -9,6 +9,18 @@     s     -> String +instance Markdown Char where+  markdown =+    pure++instance Markdown Int where+  markdown =+    show++instance Markdown a => Markdown [a] where+  markdown =+    (=<<) markdown+ printMarkdown ::   Markdown s =>   s
src/Data/Aviation/Casr/Logbook/Sequence.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.String  newtype Sequence =@@ -16,4 +17,17 @@  instance Markdown Sequence where   markdown (Sequence s) =-    "* Sequence: **" ++ s ++ "**\n"+    "* Sequence: **" ++ markdown s ++ "**\n"++instance Html Sequence where+  html (Sequence s) =+    concat+      [+        "<span class=\"heading sequenceheading\">"+      , "Sequence"+      , "</span>"+      , ": "+      , "<span class=\"info sequenceinfo\">"+      , html s+      , "</span>"+      ]
src/Data/Aviation/Casr/Logbook/Totals.hs view
@@ -15,6 +15,7 @@ import Data.Aviation.Casr.Logbook.PoB import Data.Aviation.Casr.Logbook.PiC import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Foldable(foldl') import Data.Map(Map) import qualified Data.Map as Map@@ -76,6 +77,79 @@           , displayMap "Hours with PiC" pic                       ] +instance Html Totals where+  html (Totals total dualhours solohours intype inreg singleengine multiengine day night daynight pic) =+    let displayHours (Hours f p) =+          show f ++ "." ++ show p+        displayPoint x h q =+          concat+            [+              "<li class=\"summarypoint\">"+            , "<span class=\"heading summarypointheading summarypointheading"+            , q+            , "\">"+            , x            +            , "</span>: <span class=\"summarypoint summarypoint"+            , q+            , "\">"            +            , displayHours h+            , "</span></li>"+            ]+        displayMap x m q =+          concat+            [+              "<li class=\"summarypoint summarypoint"+            , q+            , "\">"+            , "<span class=\"heading summarypointheading summarypointheading"+            , q+            , "\">"+            , x            +            , "</span>: <div class=\"summarypoint summarypoint"+            , q+            , "\"><ul>"+            , Map.foldrWithKey (\k h s -> concat [+                                                   "<li class=\"subsummarypoint subsummarypoint"+                                                 , q+                                                 , "\">"+                                                 , "<span class=\"heading subsummarypointheading subsummarypointheading"+                                                 , q+                                                 , "\">"+                                                 , k+                                                 , "</span>: <span class=\"subsummarypointhours subsummarypointhours"+                                                 , q+                                                 , "\">"+                                                 , displayHours h+                                                 , "</span> <span class=\"subsummarypointpercentage subsummarypointpercentage"+                                                 , q+                                                 , "\">("+                                                 , printf "%.2f" (fractionalHours h / fractionalHours total * 100 :: Double)+                                                 , "%)</span>"+                                                 , "</li>"+                                                 , s+                                                 ]) "" m+            , "</ul></div></li>"+            ]        +    in  concat+          [+            "<div class=\"totals\">"+          , "<h5>Summary</h5>"+          , "<ul>"+          , displayPoint "Total Hours" total "totalhours"+          , displayPoint "Dual Hours" dualhours "dualhours"+          , displayPoint "Solo Hours" solohours "solohours"+          , displayMap "Hours in type" intype "hoursintype"+          , displayMap "Hours in registration" inreg "hoursinregistration"+          , displayPoint "Single-engine Hours" singleengine "singleenginehours"+          , displayPoint "Multi-engine Hours" multiengine "multienginehours"+          , displayPoint "Day Hours" day "dayhours"+          , displayPoint "Night Hours" night "nighthours"+          , displayPoint "Day &amp; Night Hours" daynight "daynighthours"+          , displayMap "Hours with PiC" pic "pichours"           +          , "</ul>"+          , "</div>"+          ]+ zeroTotals ::   Totals zeroTotals =@@ -95,7 +169,7 @@ singleTotals ::  FlightLogEntry  -> Totals-singleTotals (FlightLogEntry _ _ _ (Aircraft atype areg aeng) hours (PoB pob) _ dn (PiC pic) _ _ _ _) =+singleTotals (FlightLogEntry _ _ (Aircraft atype areg aeng) hours (PoB pob) _ dn (PiC pic) _ _ _ _) =   Totals     hours     (
src/Data/Aviation/Casr/Logbook/TrackLog.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.TrackLogType import Data.Maybe @@ -17,37 +18,88 @@   markdown (TrackLog uri name ttype) =     let t = markdown ttype                 n = fmap (\z -> "**" ++ z ++ "**") name-    in  case ttype of -          ImageLog _ ->-            concat-              [-                "  * "-              , case n of-                  Nothing ->-                    "*" ++ t ++ "*"-                  Just n' ->-                    n'-              , "\n\n    "-              , "<a href=\""-              , uri-              , "\"><img src=\""-              , uri-              , "\" width=\"360\" alt=\""-              , fromMaybe t name-              , "\"/></a>"-              ]-          _ ->-            concat-              [-                "  * "-              , case n of-                  Nothing ->-                    ""-                  Just n' ->-                    n' ++ ": "-              , "["-              , t-              , "]("-              , uri-              , ")"-              ]+    in  concat $ +          case ttype of +            ImageLog _ ->              +                [+                  "  * "+                , case n of+                    Nothing ->+                      "*" ++ t ++ "*"+                    Just n' ->+                      n'+                , "\n\n    "+                , "<a href=\""+                , uri+                , "\"><img src=\""+                , uri+                , "\" width=\"360\" alt=\""+                , fromMaybe t name+                , "\"></a>"+                ]+            _ ->              +                [+                  "  * "+                , case n of+                    Nothing ->+                      ""+                    Just n' ->+                      n' ++ ": "+                , "["+                , t+                , "]("+                , uri+                , ")"+                ]++instance Html TrackLog where+  html (TrackLog uri name ttype) =+    let t = html ttype   +        n = fmap html name+    in  concat [+            "<div class=\"tracklog\">"+          , concat $ +              case ttype of +                ImageLog _ ->+                  [+                    fromMaybe (concat+                          [+                            "<a href=\""+                          , uri+                          , "\">"+                          , "<span class=\"tracklogtype\">"+                          , t+                          , "</span>"+                          , "</a>"+                          ]) n+                  , "<p>"+                  , "<a href=\""+                  , uri+                  , "\">"+                  , "<span class=\"tracklogimage\">"+                  , "<img src=\""+                  , uri+                  , "\" width=\"360\" alt=\""+                  , fromMaybe t n+                  , "\">"+                  , "</span>"+                  , "</a>"+                  , "</p>"+                  ]+                _ ->+                  [+                    case n of+                      Nothing ->+                        ""+                      Just n' ->+                        n' ++ ": "+                  , "<a href=\""+                  , uri+                  , "\">"+                  , "<span class=\"tracklogtype\">"+                  , t+                  , "</span>"+                  , "</a>"+                  ]+             , "</div>"+          ]
src/Data/Aviation/Casr/Logbook/TrackLogType.hs view
@@ -4,6 +4,7 @@  import Data.Aviation.Casr.Logbook.ImageType import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  data TrackLogType =   Gpx@@ -21,3 +22,13 @@     "kmz"   markdown (ImageLog i) =     markdown i++instance Html TrackLogType where+  html Gpx =+    "gpx"+  html Kml =+    "kml"+  html Kmz =+    "kmz"+  html (ImageLog i) =+    html i
src/Data/Aviation/Casr/Logbook/TrackLogs.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.TrackLog  newtype TrackLogs =@@ -23,3 +24,25 @@         ""       _ ->         "* **Track**\n" ++ (t >>= \u -> markdown u ++ "\n")++instance Html TrackLogs where+  html (TrackLogs t) =+    case t of+      [] ->+        ""+      _ ->+        concat+          [+            "<span class=\"heading tracklogheading\">"+          , "Track"+          , "</span>"+          , "<ul>"+          , t >>= \u -> concat+                          [+                            "<li>"+                          , html u+                          , "</li>"+                          ]+          , "</ul>"+          ]+        
src/Data/Aviation/Casr/Logbook/Video.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.VideoType import Data.Maybe @@ -24,6 +25,79 @@           , ":** ["           , t           , "]("+          , "https://www.youtube.com/watch?v="           , uri           , ")"+          ]++instance Html Video where+  html (Video uri name vtype) =+    let t = html vtype+        n = fromMaybe ("Video (" ++ t ++ ")") name+    in  concat+          [+            "<div>"+          , case vtype of+              YouTube ->+                concat+                  [+                    "<a href=\"https://www.youtube.com/watch?v="+                  , uri+                  , "\">"+                  , "<span class=\"videoname\">"+                  , html n+                  , "</span>"+                  , "</a>"+                  ]+              Bambuser ->+                concat+                  [+                    "<a href=\"https://bambuser.com/v/"+                  , uri+                  , "\">"+                  , "<span class=\"videoname\">"+                  , html n+                  , "</span>"+                  , "</a>"+                  ]+              Vimeo ->+                concat+                  [+                    "<a href=\"https://vimeo.com/"+                  , uri+                  , "\">"+                  , "<span class=\"videoname\">"+                  , html n+                  , "</span>"+                  , "</a>"+                   ]+          , "</div>"+          , "<p>"+          , case vtype of+              YouTube ->+                concat+                  [  +                    "<iframe width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\" src=\"http://www.youtube.com/embed/"+                  , uri+                  , "?autohide=1&amp;cc_load_policy=1&amp;color=white&amp;controls=1&amp;disablekb=0&amp;fs=1&amp;iv_load_policy=0&amp;loop=0&amp;modestbranding=1&amp;rel=0&amp;showinfo=0\">"+                  , "</iframe>"                                  +                  ]+              Bambuser ->+                concat+                  [                 +                    "<iframe width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\" src=\"https://embed.bambuser.com/broadcast/"+                  , uri+                  , "?chat=1&amp;mute=0"+                  , "\">"+                  , "</iframe>"                   +                  ]+              Vimeo ->+                concat+                  [ +                    "<iframe width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\" src=\"https://player.vimeo.com/video/"+                  , uri+                  , "\">"+                  , "</iframe>"                                  +                  ]+            , "</p>"           ]
src/Data/Aviation/Casr/Logbook/VideoType.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html  data VideoType =   YouTube@@ -16,4 +17,12 @@   markdown Vimeo =     "vimeo"   markdown Bambuser =+    "bambuser"++instance Html VideoType where+  html YouTube =+    "youtube"+  html Vimeo =+    "vimeo"+  html Bambuser =     "bambuser"
src/Data/Aviation/Casr/Logbook/Videos.hs view
@@ -3,6 +3,7 @@ ) where  import Data.Aviation.Casr.Logbook.Printer.Markdown+import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Video  newtype Videos =@@ -23,3 +24,25 @@         ""       _ ->         "* **Videos**\n" ++ (v >>= \w -> "  * " ++ markdown w ++ "\n")++instance Html Videos where+  html (Videos v) =+    case v of+      [] ->+        ""+      _ ->+        concat+          [+            "<span class=\"heading videoheading\">"+          , "Video"+          , "</span>"+          , "<ul>"+          , v >>= \u -> concat+                          [+                            "<li>"+                          , html u+                          , "</li>"+                          ]+          , "</ul>"+          ]+        
src/Data/Aviation/Casr/Logbook/Visualisation.hs view
@@ -2,8 +2,10 @@   Visualisation(..) ) where +import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Printer.Markdown import Data.Aviation.Casr.Logbook.VisualisationType+import Data.Maybe  data Visualisation =   Visualisation@@ -26,4 +28,29 @@           , "]("           , uri           , ")"+          ]++instance Html Visualisation where+  html (Visualisation uri name vtype) =+    let t = html vtype+        n = fromMaybe t name+    in  concat+          [+            "<a href=\""+          , uri+          , "\">"+          , "<span class=\"visualisationheading\">"+          , html n+          , "</span>"+          , "</a>"+          , "<p>"+          , case vtype of+              Doarama e ->+                concat+                  [+                    "<iframe src=\"http://www.doarama.com/embed?k="+                  , e+                  , "\" width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\">"+                  , "</iframe>"+                  ]           ]
src/Data/Aviation/Casr/Logbook/VisualisationType.hs view
@@ -2,12 +2,18 @@   VisualisationType(..) ) where +import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Printer.Markdown  data VisualisationType =   Doarama+    String -- http://oembed.frdnspnzr.de/   deriving (Eq, Ord, Show)  instance Markdown VisualisationType where-  markdown Doarama =+  markdown (Doarama _) =+    "doarama"++instance Html VisualisationType where+  html (Doarama _) =     "doarama"
src/Data/Aviation/Casr/Logbook/Visualisations.hs view
@@ -2,6 +2,7 @@   Visualisations(..) ) where +import Data.Aviation.Casr.Logbook.Printer.Html import Data.Aviation.Casr.Logbook.Printer.Markdown import Data.Aviation.Casr.Logbook.Visualisation @@ -23,3 +24,25 @@         ""       _ ->         "* **Visualisations**\n" ++ (v >>= \w -> "  * " ++ markdown w ++ "\n")++instance Html Visualisations where+  html (Visualisations v) =+    case v of+      [] ->+        ""+      _ ->+        concat+          [+            "<span class=\"heading visualisationheading\">"+          , "Visualisation"+          , "</span>"+          , "<ul>"+          , v >>= \u -> concat+                          [+                            "<li>"+                          , html u+                          , "</li>"+                          ]+          , "</ul>"+          ]+