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 +2/−1
- changelog +4/−0
- src/Data/Aviation/Casr/Logbook.hs +4/−1
- src/Data/Aviation/Casr/Logbook/ARN.hs +6/−1
- src/Data/Aviation/Casr/Logbook/Aircraft.hs +44/−2
- src/Data/Aviation/Casr/Logbook/DOB.hs +6/−1
- src/Data/Aviation/Casr/Logbook/Date.hs +14/−0
- src/Data/Aviation/Casr/Logbook/DayNight.hs +17/−0
- src/Data/Aviation/Casr/Logbook/Engine.hs +7/−0
- src/Data/Aviation/Casr/Logbook/FlightLog.hs +53/−2
- src/Data/Aviation/Casr/Logbook/FlightLogEntries.hs +11/−0
- src/Data/Aviation/Casr/Logbook/FlightLogEntry.hs +59/−5
- src/Data/Aviation/Casr/Logbook/FlightPath.hs +25/−6
- src/Data/Aviation/Casr/Logbook/Hours.hs +17/−1
- src/Data/Aviation/Casr/Logbook/Image.hs +17/−1
- src/Data/Aviation/Casr/Logbook/ImageType.hs +7/−0
- src/Data/Aviation/Casr/Logbook/Images.hs +9/−0
- src/Data/Aviation/Casr/Logbook/Name.hs +6/−1
- src/Data/Aviation/Casr/Logbook/PiC.hs +16/−1
- src/Data/Aviation/Casr/Logbook/PoB.hs +19/−1
- src/Data/Aviation/Casr/Logbook/Printer/Html.hs +40/−0
- src/Data/Aviation/Casr/Logbook/Printer/Markdown.hs +12/−0
- src/Data/Aviation/Casr/Logbook/Sequence.hs +15/−1
- src/Data/Aviation/Casr/Logbook/Totals.hs +75/−1
- src/Data/Aviation/Casr/Logbook/TrackLog.hs +86/−34
- src/Data/Aviation/Casr/Logbook/TrackLogType.hs +11/−0
- src/Data/Aviation/Casr/Logbook/TrackLogs.hs +23/−0
- src/Data/Aviation/Casr/Logbook/Video.hs +74/−0
- src/Data/Aviation/Casr/Logbook/VideoType.hs +9/−0
- src/Data/Aviation/Casr/Logbook/Videos.hs +23/−0
- src/Data/Aviation/Casr/Logbook/Visualisation.hs +27/−0
- src/Data/Aviation/Casr/Logbook/VisualisationType.hs +7/−1
- src/Data/Aviation/Casr/Logbook/Visualisations.hs +23/−0
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 & 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 — "+ , 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 " & " (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 '&' =+ "&"+ 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 & 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&cc_load_policy=1&color=white&controls=1&disablekb=0&fs=1&iv_load_policy=0&loop=0&modestbranding=1&rel=0&showinfo=0\">"+ , "</iframe>" + ]+ Bambuser ->+ concat+ [ + "<iframe width=\"560\" height=\"315\" allowfullscreen=\"allowfullscreen\" src=\"https://embed.bambuser.com/broadcast/"+ , uri+ , "?chat=1&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>"+ ]+