diff --git a/src/common/HaskellDo/Compilation/State.hs b/src/common/HaskellDo/Compilation/State.hs index 08467c0..91a48f2 100644 --- a/src/common/HaskellDo/Compilation/State.hs +++ b/src/common/HaskellDo/Compilation/State.hs @@ -95,7 +95,6 @@ buildOutput state = do System.ExitSuccess -> return state { compiledOutput = preprocessOutput out, compilationError = "", dirtyCompile = True } - preprocessOutput :: String -> String preprocessOutput out = Text.pack out diff --git a/src/common/HaskellDo/State.hs b/src/common/HaskellDo/State.hs index a485650..72a5b0a 100644 --- a/src/common/HaskellDo/State.hs +++ b/src/common/HaskellDo/State.hs @@ -168,4 +168,3 @@ handleRead :: Either SomeException String -> IO (Maybe String) handleRead = \case Left _ -> return Nothing Right txt -> return (Just txt) - diff --git a/src/common/HaskellDo/Toolbar/State.hs b/src/common/HaskellDo/Toolbar/State.hs index bbecc08..b59d461 100644 --- a/src/common/HaskellDo/Toolbar/State.hs +++ b/src/common/HaskellDo/Toolbar/State.hs @@ -17,6 +17,9 @@ module HaskellDo.Toolbar.State where import System.Directory (listDirectory, doesFileExist, doesDirectoryExist, getHomeDirectory, createDirectory) import System.FilePath (()) +import System.Process (callCommand, shell,readCreateProcessWithExitCode) +--import Data.List (isInfixOf) +import System.Exit import Control.Monad (filterM, unless) @@ -134,7 +137,25 @@ update ToggleError state = do localIO toggleError return state +update ConvertToPDF state = do + (errorCode,_,_) <- atRemote . localIO $ readCreateProcessWithExitCode (shell "which wkhtmltopdf") "" + let environmentVar = checkError errorCode :: Bool + let path = projectPath state + if (environmentVar == True) && ((projectOpened state) == True) + then do + localIO $ openModal "#convertToPDFModal" + atRemote . localIO $ callCommand ("cd " ++ path ++ " && stack exec run-test > index.html && wkhtmltopdf index.html index.pdf" :: String) + else + localIO $ openModal "#convertToPDFModalFail" + return state + update _ state = return state +checkError :: ExitCode -> Bool +checkError exitCode = + case exitCode of + ExitSuccess -> True + ExitFailure _ -> False + shakeErrorDisplay :: IO () shakeErrorDisplay = shake "#errorDisplay" diff --git a/src/common/HaskellDo/Toolbar/Types.hs b/src/common/HaskellDo/Toolbar/Types.hs index ca2fe95..636b8fc 100644 --- a/src/common/HaskellDo/Toolbar/Types.hs +++ b/src/common/HaskellDo/Toolbar/Types.hs @@ -40,4 +40,5 @@ data Action | ClosePackageModal | ToggleEditor | ToggleError + | ConvertToPDF deriving (Read, Show) diff --git a/src/common/HaskellDo/Toolbar/View.hs b/src/common/HaskellDo/Toolbar/View.hs index e2b791f..f517a8e 100644 --- a/src/common/HaskellDo/Toolbar/View.hs +++ b/src/common/HaskellDo/Toolbar/View.hs @@ -40,9 +40,12 @@ toolbar = rawHtml $ do li ! id "packageEditorButton" $ noHtml li ! id "toggleEditorButton" $ noHtml li ! id "toggleErrorButton" $ noHtml + li ! id "convertToPDFButton" $ noHtml packageEditorModal -- Apparently, if we put this line openProjectModal -- under this one. The open project modal doesn't work modalPromptPlaceholder "newDirectoryModal" "New Directory" "Choose a name for the new directory" + convertToPDFModal + convertToPDFModalFail openProjectModal :: Perch openProjectModal = @@ -62,8 +65,20 @@ openProjectModal = div ! atr "class" "modal-footer" $ div ! id "closeModalButton" $ noHtml +convertToPDFModal :: Perch +convertToPDFModal = + div ! id "convertToPDFModal" ! atr "class" "modal" $ do + div ! atr "class" "modal-content" $ do + h4 ("PDF saved on project path" :: String) + +convertToPDFModalFail :: Perch +convertToPDFModalFail = + div ! id "convertToPDFModalFail" ! atr "class" "modal" $ do + div ! atr "class" "modal-content red darken-1 white-text" $ do + h4 ("Error: wkhtmltopdf is not installed or a project has not been loaded" :: String) + modalPromptPlaceholder :: String -> String -> String -> Perch -modalPromptPlaceholder id' htitle text = +modalPromptPlaceholder id' htitle text = div ! id id' ! atr "class" "modal" $ do div ! atr "class" "modal-content" $ do if (not . null) htitle then h4 htitle else noHtml @@ -125,6 +140,11 @@ toggleErrorButton _ = Ulmus.newWidget "toggleErrorButton" $ wlink ToggleError $ a ! atr "class" "btn-floating purple darken-2 tooltipped" ! atr "data-position" "bottom" ! atr "data-tooltip" "Toggle error" ! atr "data-delay" "50"$ i ! atr "class" "material-icons" $ ("error" :: String) +convertToPDFButton :: State -> Widget Action +convertToPDFButton _ = Ulmus.newWidget "convertToPDFButton" $ wlink ConvertToPDF $ + a ! atr "class" "btn-floating purple darken-2 tooltipped" ! atr "data-position" "bottom" ! atr "data-tooltip" "Convert to PDF" ! atr "data-delay" "50"$ + i ! atr "class" "material-icons" $ ("picture_as_pdf" :: String) + closeModalButton :: State -> Widget Action closeModalButton _ = Ulmus.newWidget "closeModalButton" $ wlink LoadProject $ diff --git a/src/common/HaskellDo/View.hs b/src/common/HaskellDo/View.hs index 5a98644..a3f9100 100644 --- a/src/common/HaskellDo/View.hs +++ b/src/common/HaskellDo/View.hs @@ -68,6 +68,7 @@ widgets state = do **> packageEditorButtonWidget **> toggleEditorButtonWidget **> toggleErrorButtonWidget + **> convertToPDFButtonWidget **> compileButtonWidget **> pathInputWidget **> closeModalButtonWidget @@ -98,6 +99,9 @@ widgets state = do toggleErrorButtonWidget = Ulmus.mapAction ToolbarAction $ Toolbar.toggleErrorButton (toolbarState state) + convertToPDFButtonWidget = Ulmus.mapAction ToolbarAction $ + Toolbar.convertToPDFButton (toolbarState state) + pathInputWidget = Ulmus.mapAction ToolbarAction $ Toolbar.pathInput (toolbarState state)