{-# LANGUAGE DeriveDataTypeable, PatternGuards, FlexibleContexts, TypeFamilies, OverloadedStrings, QuasiQuotes #-} module HSP.Google.Analytics ( UACCT(..) , analytics , analyticsAsync , universalAnalytics ) where import Data.Generics (Data, Typeable) import Data.Text.Lazy (Text,pack) import HSP import Prelude hiding (head) import Language.Haskell.HSX.QQ (hsx) newtype UACCT = UACCT String -- ^ The UACCT provided to you by Google (looks like: @UA-XXXXX-X@) deriving (Read, Show, Eq, Ord, Typeable, Data) -- | create the google analytics asynchronous tracking script tag -- -- This uses the now dubbed 'classic google analytics' -- -- NOTE: you must put this right before the \<\/head\> tag -- see also: universalAnalytics analyticsAsync :: (XMLGenerator m, StringType m ~ Text) => UACCT -- ^ web property ID (looks like: @UA-XXXXX-X@) -> GenXML m analyticsAsync (UACCT uacct) = [hsx| |] universalAnalytics :: (XMLGenerator m, StringType m ~ Text) => UACCT -- ^ web property ID (looks like: @UA-XXXXX-X@) -> GenXML m universalAnalytics (UACCT uacct) = [hsx| |] -- | create the (even older) google analytics script tags -- -- NOTE: you must put the <% analytics yourUACCT %> immediately before the tag -- -- You probably want to use 'analyticsAsync' instead. -- -- See also: 'addAnalytics', 'analyticsAsync', 'universalAnalytics' analytics :: (XMLGenerator m, StringType m ~ Text) => UACCT -> GenXMLList m analytics (UACCT uacct) = do a <- [hsx| |] b <- [hsx| |] return [a,b] {- removed because the hsx qq does not currently support patterns. -- | automatically add the google analytics scipt tags immediately before the element -- NOTE: this function is not idepotent addAnalytics :: ( AppendChild m XML , EmbedAsChild m XML , EmbedAsAttr m Attribute , XMLGenerator m , XMLType m ~ XML , StringType m ~ Text ) => UACCT -> XMLGenT m XML -> GenXML m addAnalytics uacct pg = do page <- pg a <- analytics uacct case page of [hsx| <[ head, body ]> |] -> [hsx| <% head %> <% body <: (a :: [XML]) %> |] o -> error ("Failed to add analytics." ++ show o) -} {- Example Analytics Code from Google: -}