From 248b76b4dc77dbbdbb0f7a2081188c81ee35ca77 Mon Sep 17 00:00:00 2001 From: Mark Lentczner Date: Tue, 20 Jul 2010 17:25:52 +0000 Subject: move CSS Theme functions into Themes.hs --- src/Haddock/Backends/Xhtml/Themes.hs | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/Haddock/Backends/Xhtml/Themes.hs (limited to 'src/Haddock/Backends/Xhtml/Themes.hs') diff --git a/src/Haddock/Backends/Xhtml/Themes.hs b/src/Haddock/Backends/Xhtml/Themes.hs new file mode 100644 index 00000000..c02a8265 --- /dev/null +++ b/src/Haddock/Backends/Xhtml/Themes.hs @@ -0,0 +1,66 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Haddock.Backends.Html.Themes +-- Copyright : (c) Mark Lentczner 2010 +-- License : BSD-like +-- +-- Maintainer : haddock@projects.haskell.org +-- Stability : experimental +-- Portability : portable +----------------------------------------------------------------------------- +module Haddock.Backends.Xhtml.Themes ( + CssTheme(..), + + cssFiles, styleSheet, stylePickers, styleMenu + ) + where + +import Haddock.Backends.Xhtml.Utils (onclick) +import Haddock.Utils (iconFile) + +import Data.List (nub) + +import Text.XHtml hiding ( name, title, p, quote ) +import qualified Text.XHtml as XHtml + + +-- Standard set of style sheets, first is the preferred + +data CssTheme = CssTheme { + themeName :: String, + themeHref :: String, + themeFiles :: [FilePath] + } + + +themes :: [CssTheme] +themes = [ + CssTheme "Classic" "xhaddock.css" ["xhaddock.css", iconFile], + CssTheme "Tibbe" "thaddock.css" ["thaddock.css", iconFile], + CssTheme "Snappy" "shaddock.css" ["shaddock.css", iconFile] + ] + +cssFiles :: [String] +cssFiles = nub (concatMap themeFiles themes) + +styleSheet :: Html +styleSheet = toHtml $ zipWith mkLink themes rels + where + rels = ("stylesheet" : repeat "alternate stylesheet") + mkLink (CssTheme aTitle aRef _) aRel = + (thelink ! [href aRef, rel aRel, thetype "text/css", XHtml.title aTitle]) noHtml + +stylePickers :: [Html] +stylePickers = map mkPicker themes + where + mkPicker (CssTheme aTitle aRef _) = + let js = "setActiveStyleSheet('" ++ aRef ++ "'); return false;" in + anchor ! [href "#", onclick js] << aTitle + +styleMenu :: Html +styleMenu = thediv ! [identifier "style-menu-holder"] << [ + anchor ! [ href "#", onclick js ] << "Style\9662", + unordList stylePickers ! [ identifier "style-menu", theclass "hide" ] + ] + where + js = "styleMenu(); return false;" -- cgit v1.2.3