{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DoRec #-} module Hbro.Core ( -- * Browsing goHome, -- * Scrolling goTop, goBottom, goLeft, goRight, -- * Misc printPage, executeJSFile ) where -- {{{ Imports import Hbro.Types import Hbro.Util import Data.Foldable import Graphics.UI.Gtk.Misc.Adjustment import Graphics.UI.Gtk.Scrolling.ScrolledWindow import Graphics.UI.Gtk.WebKit.WebDataSource import Graphics.UI.Gtk.WebKit.WebFrame import Graphics.UI.Gtk.WebKit.WebView hiding(webViewGetUri, webViewLoadUri) import Network.URI import System.Console.CmdArgs -- }}} -- {{{ Browsing -- | Load homepage (set from configuration file). goHome :: WebView -> Config -> IO () goHome webView config@Config{ mHomePage = homeURI } = forM_ (parseURIReference homeURI) $ webViewLoadUri webView -- }}} -- {{{ Scrolling -- | Scroll up to top of web page. Provided for convenience. goTop :: ScrolledWindow -> IO () goTop window = do adjustment <- scrolledWindowGetVAdjustment window lower <- adjustmentGetLower adjustment adjustmentSetValue adjustment lower -- | Scroll down to bottom of web page. Provided for convenience. goBottom :: ScrolledWindow -> IO () goBottom window = do adjustment <- scrolledWindowGetVAdjustment window upper <- adjustmentGetUpper adjustment adjustmentSetValue adjustment upper -- | Scroll to the left edge of web page. Provided for convenience. goLeft :: ScrolledWindow -> IO () goLeft window = do adjustment <- scrolledWindowGetHAdjustment window lower <- adjustmentGetLower adjustment adjustmentSetValue adjustment lower -- | Scroll to the right edge of web page. Provided for convenience. goRight :: ScrolledWindow -> IO () goRight window = do adjustment <- scrolledWindowGetHAdjustment window upper <- adjustmentGetUpper adjustment adjustmentSetValue adjustment upper -- }}} -- {{{ Misc -- | Wrapper around webFramePrint function, provided for convenience. printPage :: WebView -> IO () printPage webView = webViewGetMainFrame webView >>= webFramePrint -- | Execute a javascript file on current webpage. executeJSFile :: FilePath -> WebView -> IO () executeJSFile filePath webView = do whenNormal $ putStrLn ("Executing Javascript file: " ++ filePath) script <- readFile filePath let script' = unwords . map (\line -> line ++ "\n") . lines $ script webViewExecuteScript webView script' -- }}} -- | Save current web page to a file, -- along with all its resources in a separated directory. -- Doesn't work for now, because web_resource_get_data's binding is missing... _savePage :: String -> WebView -> IO () _savePage _path webView = do frame <- webViewGetMainFrame webView dataSource <- webFrameGetDataSource frame _mainResource <- webDataSourceGetMainResource dataSource _subResources <- webDataSourceGetSubresources dataSource return ()