module Hbro.Extra.Misc where -- {{{ Imports --import Hbro.Core --import Hbro.Types import Hbro.Util import Data.Maybe import qualified Data.Text as T import qualified Data.Text.IO as T import Graphics.UI.Gtk.Display.Label import Graphics.UI.Gtk.WebKit.WebBackForwardList import Graphics.UI.Gtk.WebKit.WebHistoryItem import Graphics.UI.Gtk.WebKit.WebView import System.IO -- }}} -- | Same as goBack function from Hbro.Core, -- but with feedback in case of failure. --goForward :: WebView -> IO () --goForward webView = do -- result <- webViewCanGoForward webView -- feedbackLabel <- builderGetObject builder castToLabel "feedback" -- -- case result of -- True -> webViewGoForward webView -- _ -> labelSetMarkupTemporary feedbackLabel "Unable to go forward !" 5000 >> return () -- -- where -- webView = mWebView $ mGUI browser -- builder = mBuilder $ mGUI browser -- ---- | Same as goBack function from Hbro.Core, ---- but with feedback in case of failure. --goBack :: Browser -> IO () --goBack browser = do -- result <- webViewCanGoBack webView -- feedbackLabel <- builderGetObject builder castToLabel "feedback" -- -- case result of -- True -> webViewGoBack webView -- _ -> labelSetMarkupTemporary feedbackLabel "Unable to go back !" 5000 >> return () -- -- where -- webView = mWebView $ mGUI browser -- builder = mBuilder $ mGUI browser -- | List preceding URIs in dmenu and let the user select which one to load. goBackList :: WebView -> [String] -> IO (Maybe String) goBackList webView dmenuOptions = do list <- webViewGetBackForwardList webView n <- webBackForwardListGetBackLength list backList <- webBackForwardListGetBackListWithLimit list n dmenuList <- mapM itemToEntry backList selection <- dmenu dmenuOptions $ (T.pack . unlines) (catMaybes dmenuList) case words selection of uri:_ -> return $ Just uri _ -> return Nothing -- | List succeeding URIs in dmenu and let the user select which one to load. goForwardList :: WebView -> [String] -> IO (Maybe String) goForwardList webView dmenuOptions = do list <- webViewGetBackForwardList webView n <- webBackForwardListGetForwardLength list forwardList <- webBackForwardListGetForwardListWithLimit list n dmenuList <- mapM itemToEntry forwardList selection <- dmenu dmenuOptions $ (T.pack . unlines) (catMaybes dmenuList) case words selection of uri:_ -> return $ Just uri _ -> return Nothing itemToEntry :: WebHistoryItem -> IO (Maybe String) itemToEntry item = do title <- webHistoryItemGetTitle item uri <- webHistoryItemGetUri item case uri of Just u -> return $ Just (u ++ " | " ++ (maybe "Untitled" id title)) _ -> return Nothing -- | Toggle source display. -- Current implementation forces a refresh of current web page, which may be undesired. toggleSourceMode :: WebView -> IO () toggleSourceMode webView = do currentMode <- webViewGetViewSourceMode webView webViewSetViewSourceMode webView (not currentMode) webViewReload webView