happstack-hsp 7.2.4 → 7.3.0
raw patch · 2 files changed
+49/−24 lines, 2 filesdep +hsx2hsdep ~text
Dependencies added: hsx2hs
Dependency ranges changed: text
Files
- happstack-hsp.cabal +3/−2
- src/HSP/Google/Analytics.hs +46/−22
happstack-hsp.cabal view
@@ -1,5 +1,5 @@ Name: happstack-hsp-Version: 7.2.4+Version: 7.3.0 Synopsis: Support for using HSP templates in Happstack Description: Happstack is a web application framework. HSP is an XML templating solution. This package makes it easy to use HSP templates with Happstack. Homepage: http://www.happstack.com/@@ -32,9 +32,10 @@ happstack-server >= 6.0 && < 7.4, harp >= 0.4 && < 0.5, hsp >= 0.9.2 && < 0.11,+ hsx2hs >= 0.13.0 && < 0.14, mtl >= 1.1 && < 2.2, utf8-string == 0.3.*, syb >= 0.3 && < 0.5,- text >= 0.10 && < 1.1+ text >= 0.10 && < 1.2 -- Build-tools: hsx2hs
src/HSP/Google/Analytics.hs view
@@ -1,31 +1,34 @@-{-# LANGUAGE DeriveDataTypeable, PatternGuards, FlexibleContexts, TypeFamilies, OverloadedStrings #-}-{-# OPTIONS_GHC -F -pgmFhsx2hs #-}+{-# LANGUAGE DeriveDataTypeable, PatternGuards, FlexibleContexts, TypeFamilies, OverloadedStrings, QuasiQuotes #-} module HSP.Google.Analytics ( UACCT(..) , analytics- , addAnalytics , analyticsAsync+ , universalAnalytics ) where import Data.Generics (Data, Typeable)-import Data.Text.Lazy (Text)+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) =+analyticsAsync (UACCT uacct) = [hsx| <script type="text/javascript"> var _gaq = _gaq || [];- _gaq.push(['_setAccount', '<% uacct %>']);+ _gaq.push(['_setAccount', '<% pack uacct %>']); _gaq.push(['_trackPageview']); (function() {@@ -34,27 +37,46 @@ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); - </script>+ </script> |] --- | create the (old) google analytics script tags+universalAnalytics :: (XMLGenerator m, StringType m ~ Text) =>+ UACCT -- ^ web property ID (looks like: @UA-XXXXX-X@)+ -> GenXML m+universalAnalytics (UACCT uacct) = [hsx|+ <script type="text/javascript">+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');++ ga('create', '<% pack uacct %>', 'auto');+ ga('send', 'pageview');+ </script> |]+++-- | create the (even older) google analytics script tags -- -- NOTE: you must put the <% analytics yourUACCT %> immediately before the </body> tag -- -- You probably want to use 'analyticsAsync' instead. ----- See also: 'addAnalytics', 'analyticsAsync'+-- See also: 'addAnalytics', 'analyticsAsync', 'universalAnalytics' analytics :: (XMLGenerator m, StringType m ~ Text) => UACCT -> GenXMLList m analytics (UACCT uacct) =- do a <- <script type="text/javascript">+ do a <- [hsx|+ <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));- </script>- b <- <script type="text/javascript">- var pageTracker = _gat._getTracker("<% uacct %>");- pageTracker._initData();- pageTracker._trackPageview();- </script>+ </script> |]+ b <- [hsx|+ <script type="text/javascript">+ var pageTracker = _gat._getTracker("<% pack uacct %>");+ pageTracker._initData();+ pageTracker._trackPageview();+ </script> |] return [a,b]+{-+removed because the hsx qq does not currently support patterns. -- | automatically add the google analytics scipt tags immediately before the </body> element -- NOTE: this function is not idepotent@@ -72,13 +94,15 @@ do page <- pg a <- analytics uacct case page of- <html hattrs><[ head, body ]></html> ->- <html hattrs>- <% head %>- <% body <: (a :: [XML]) %>- </html>+ [hsx| <html hattrs><[ head, body ]></html> |] ->+ [hsx|+ <html hattrs>+ <% head %>+ <% body <: (a :: [XML]) %>+ </html>+ |] o -> error ("Failed to add analytics." ++ show o)-+-} {- Example Analytics Code from Google: <script type="text/javascript">