diff options
| -rw-r--r-- | haddock.cabal | 23 | ||||
| -rw-r--r-- | html/haddock-DEBUG.css | 173 | ||||
| -rw-r--r-- | html/haddock.css | 297 | ||||
| -rw-r--r-- | html/themes/Classic/haskell_icon.gif (renamed from html/haskell_icon.gif) | bin | 911 -> 911 bytes | |||
| -rw-r--r-- | html/themes/Classic/minus.gif (renamed from html/minus.gif) | bin | 56 -> 56 bytes | |||
| -rw-r--r-- | html/themes/Classic/plus.gif (renamed from html/plus.gif) | bin | 59 -> 59 bytes | |||
| -rw-r--r-- | html/themes/Classic/xhaddock.css (renamed from html/xhaddock.css) | 0 | ||||
| -rw-r--r-- | html/themes/Ocean/hslogo-16.png (renamed from html/hslogo-16.png) | bin | 1684 -> 1684 bytes | |||
| -rw-r--r-- | html/themes/Ocean/minus.gif | bin | 0 -> 56 bytes | |||
| -rw-r--r-- | html/themes/Ocean/ocean.css (renamed from html/nhaddock.css) | 0 | ||||
| -rw-r--r-- | html/themes/Ocean/plus.gif | bin | 0 -> 59 bytes | |||
| -rw-r--r-- | html/themes/Snappy/minus.gif | bin | 0 -> 56 bytes | |||
| -rw-r--r-- | html/themes/Snappy/plus.gif | bin | 0 -> 59 bytes | |||
| -rw-r--r-- | html/themes/Snappy/s_haskell_icon.gif (renamed from html/s_haskell_icon.gif) | bin | 607 -> 607 bytes | |||
| -rw-r--r-- | html/themes/Snappy/snappy.css (renamed from html/shaddock.css) | 0 | ||||
| -rw-r--r-- | html/themes/Tibbe/haskell_icon.gif | bin | 0 -> 911 bytes | |||
| -rw-r--r-- | html/themes/Tibbe/minus.gif | bin | 0 -> 56 bytes | |||
| -rw-r--r-- | html/themes/Tibbe/plus.gif | bin | 0 -> 59 bytes | |||
| -rw-r--r-- | html/themes/Tibbe/tibbe.css (renamed from html/thaddock.css) | 0 | ||||
| -rw-r--r-- | src/Haddock/Backends/Xhtml.hs | 2 | ||||
| -rw-r--r-- | src/Haddock/Backends/Xhtml/Themes.hs | 89 | ||||
| -rw-r--r-- | src/Haddock/Backends/Xhtml/Utils.hs | 2 | ||||
| -rw-r--r-- | src/Haddock/Utils.hs | 6 | 
23 files changed, 67 insertions, 525 deletions
| diff --git a/haddock.cabal b/haddock.cabal index 1ae9a656..0058cb59 100644 --- a/haddock.cabal +++ b/haddock.cabal @@ -50,13 +50,24 @@ extra-source-files:    src/haddock.sh  data-files: -  html/haddock-DEBUG.css -  html/haddock.css -  html/haddock-util.js -  html/haskell_icon.gif -  html/minus.gif -  html/plus.gif    html/frames.html +  html/haddock-util.js +  html/themes/Classic/haskell_icon.gif +  html/themes/Classic/minus.gif +  html/themes/Classic/plus.gif +  html/themes/Classic/xhaddock.css +  html/themes/Ocean/hslogo-16.png +  html/themes/Ocean/minus.gif +  html/themes/Ocean/ocean.css +  html/themes/Ocean/plus.gif +  html/themes/Snappy/minus.gif +  html/themes/Snappy/plus.gif +  html/themes/Snappy/s_haskell_icon.gif +  html/themes/Snappy/snappy.css +  html/themes/Tibbe/haskell_icon.gif +  html/themes/Tibbe/minus.gif +  html/themes/Tibbe/plus.gif +  html/themes/Tibbe/tibbe.css    latex/haddock.sty  flag in-ghc-tree diff --git a/html/haddock-DEBUG.css b/html/haddock-DEBUG.css deleted file mode 100644 index 06f4fc04..00000000 --- a/html/haddock-DEBUG.css +++ /dev/null @@ -1,173 +0,0 @@ -/* -------- Global things --------- */ - -BODY {  -  background-color: #ffffff; -  color: #000000; -  font-family: sans-serif; -  }  - -A:link    { color: #0000e0; text-decoration: none } -A:visited { color: #0000a0; text-decoration: none } -A:hover   { background-color: #e0e0ff; text-decoration: none } - -TABLE.vanilla { -  width: 100%; -  border-width: 0px; -  background-color: #ffe0e0; -  /* I can't seem to specify cellspacing or cellpadding properly using CSS... */ -} - -TD { -  border-width: 0px; -} - -TABLE.narrow { -  border-width: 0px; -} - -/* --------- Documentation elements ---------- */ - -TD.children { -  padding-left: 25px; -  } - -TD.synopsis { -  padding: 2px; -  background-color: #f0f0f0; -  font-family: monospace - } - -TD.decl {  -  padding: 2px; -  background-color: #f0f0f0;  -  font-family: monospace; -  white-space: nowrap; -  vertical-align: top; -  } - -TD.recfield { padding-left: 20px } - -TD.doc  {  -  padding-top: 2px; -  padding-left: 10px; -  background-color: #e0ffe0; -  } - -TD.ndoc  {  -  padding: 2px; -  background-color: #e0ffe0; -  } - -TD.rdoc  {  -  padding: 2px; -  padding-left: 10px; -  background-color: #e0ffe0; -  width: 100%; -  } - -TD.body  {  -  padding-left: 10px -  } - -/* ------- Section Headings ------- */ - -TD.section1 { -  padding-top: 15px; -  font-weight: bold; -  font-size: 150% -  } - -TD.section2 { -  padding-top: 10px; -  font-weight: bold; -  font-size: 130% -  } - -TD.section3 { -  padding-top: 5px; -  font-weight: bold; -  font-size: 110% -  } - -TD.section4 { -  font-weight: bold; -  font-size: 100% -  } - -/* -------------- The title bar at the top of the page */ - -TD.infohead { -  color: #ffffff; -  font-weight: bold; -  padding-right: 10px; -  text-align: left; -} - -TD.infoval { -  color: #ffffff; -  padding-right: 10px; -  text-align: left; -} - -TD.topbar { -  background-color: #000099; -  padding: 5px; -} - -TD.title { -  color: #ffffff; -  padding-left: 10px; -  width: 100% -  } - -TD.topbut { -  padding-left: 5px; -  padding-right: 5px; -  border-left-width: 1px; -  border-left-color: #ffffff; -  border-left-style: solid; -  white-space: nowrap; -  } - -TD.topbut A:link { -  color: #ffffff -  } - -TD.topbut A:visited { -  color: #ffff00 -  } - -TD.topbut A:hover { -  background-color: #6060ff; -  } - -TD.topbut:hover { -  background-color: #6060ff -  } - -TD.modulebar {  -  background-color: #0077dd; -  padding: 5px; -  border-top-width: 1px; -  border-top-color: #ffffff; -  border-top-style: solid; -  } - -/* --------- The page footer --------- */ - -TD.botbar { -  background-color: #000099; -  color: #ffffff; -  padding: 5px -  } -TD.botbar A:link { -  color: #ffffff; -  text-decoration: underline -  } -TD.botbar A:visited { -  color: #ffff00 -  } -TD.botbar A:hover { -  background-color: #6060ff -  } - diff --git a/html/haddock.css b/html/haddock.css deleted file mode 100644 index 35a078d1..00000000 --- a/html/haddock.css +++ /dev/null @@ -1,297 +0,0 @@ -/* -------- Global things --------- */ - -BODY {  -  background-color: #ffffff; -  color: #000000; -  font-family: sans-serif; -  padding: 0 0; -  }  - -A:link    { color: #0000e0; text-decoration: none } -A:visited { color: #0000a0; text-decoration: none } -A:hover   { background-color: #e0e0ff; text-decoration: none } - -TABLE.vanilla { -  width: 100%; -  border-width: 0px; -  /* I can't seem to specify cellspacing or cellpadding properly using CSS... */ -} - -TABLE.vanilla2 { -  border-width: 0px; -} - -/* <TT> font is a little too small in MSIE */ -TT  { font-size: 100%; } -PRE { font-size: 100%; } - -LI P { margin: 0pt }  - -TD { -  border-width: 0px; -} - -TABLE.narrow { -  border-width: 0px; -} - -TD.s8  {  height: 8px;  } -TD.s15 {  height: 15px; } - -SPAN.keyword { text-decoration: underline; } - -/* Resize the buttom image to match the text size */ -IMG.coll { width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em } - -/* --------- Contents page ---------- */ - -DIV.node { -  padding-left: 3em; -} - -DIV.cnode { -  padding-left: 1.75em; -} - -SPAN.pkg { -  position: absolute; -  left: 50em; -} - -/* --------- Documentation elements ---------- */ - -TD.children { -  padding-left: 25px; -  } - -TD.synopsis { -  padding: 2px; -  background-color: #f0f0f0; -  font-family: monospace - } - -TD.decl {  -  padding: 2px; -  background-color: #f0f0f0;  -  font-family: monospace; -  vertical-align: top; -  } - -TD.topdecl { -  padding: 2px; -  background-color: #f0f0f0; -  font-family: monospace; -  vertical-align: top; -} - -TABLE.declbar { -  border-spacing: 0px; - } - -TD.declname { -  width: 100%; - } - -TD.declbut { -  padding-left: 5px; -  padding-right: 5px; -  border-left-width: 1px; -  border-left-color: #000099; -  border-left-style: solid; -  white-space: nowrap; -  font-size: small; - } - -/*  -  arg is just like decl, except that wrapping is not allowed.  It is -  used for function and constructor arguments which have a text box -  to the right, where if wrapping is allowed the text box squashes up -  the declaration by wrapping it. -*/ -TD.arg {  -  padding: 2px; -  background-color: #f0f0f0;  -  font-family: monospace; -  vertical-align: top; -  white-space: nowrap; -  } - -TD.recfield { padding-left: 20px } - -TD.doc  {  -  padding-top: 2px; -  padding-left: 10px; -  } - -TD.ndoc  {  -  padding: 2px; -  } - -TD.rdoc  {  -  padding: 2px; -  padding-left: 10px; -  width: 100%; -  } - -TD.body  {  -  padding-left: 10px -  } - -TD.pkg { -  width: 100%; -  padding-left: 10px -} - -TABLE.indexsearch TR.indexrow { -  display: none; -} -TABLE.indexsearch TR.indexshow { -  display: table-row; -} - -TD.indexentry { -  vertical-align: top; -  padding-right: 10px -  } - -TD.indexannot { -  vertical-align: top; -  padding-left: 20px; -  white-space: nowrap -  } - -TD.indexlinks { -  width: 100% -  } - -/* ------- Section Headings ------- */ - -TD.section1 { -  padding-top: 15px; -  font-weight: bold; -  font-size: 150% -  } - -TD.section2 { -  padding-top: 10px; -  font-weight: bold; -  font-size: 130% -  } - -TD.section3 { -  padding-top: 5px; -  font-weight: bold; -  font-size: 110% -  } - -TD.section4 { -  font-weight: bold; -  font-size: 100% -  } - -/* -------------- The title bar at the top of the page */ - -TD.infohead { -  color: #ffffff; -  font-weight: bold; -  padding-right: 10px; -  text-align: left; -} - -TD.infoval { -  color: #ffffff; -  padding-right: 10px; -  text-align: left; -} - -TD.topbar { -  background-color: #000099; -  padding: 5px; -} - -TD.title { -  color: #ffffff; -  padding-left: 10px; -  width: 100% -  } - -TD.topbut { -  padding-left: 5px; -  padding-right: 5px; -  border-left-width: 1px; -  border-left-color: #ffffff; -  border-left-style: solid; -  white-space: nowrap; -  } - -TD.topbut A:link { -  color: #ffffff -  } - -TD.topbut A:visited { -  color: #ffff00 -  } - -TD.topbut A:hover { -  background-color: #6060ff; -  } - -TD.topbut:hover { -  background-color: #6060ff -  } - -TD.modulebar {  -  background-color: #0077dd; -  padding: 5px; -  border-top-width: 1px; -  border-top-color: #ffffff; -  border-top-style: solid; -  } - -/* --------- The page footer --------- */ - -TD.botbar { -  background-color: #000099; -  color: #ffffff; -  padding: 5px -  } -TD.botbar A:link { -  color: #ffffff; -  text-decoration: underline -  } -TD.botbar A:visited { -  color: #ffff00 -  } -TD.botbar A:hover { -  background-color: #6060ff -  } - -/* --------- Mini Synopsis for Frame View --------- */ - -.outer { -  margin: 0 0; -  padding: 0 0; -} - -.mini-synopsis { -  padding: 0.25em 0.25em; -} - -.mini-synopsis H1 { font-size: 130%; } -.mini-synopsis H2 { font-size: 110%; } -.mini-synopsis H3 { font-size: 100%; } -.mini-synopsis H1, .mini-synopsis H2, .mini-synopsis H3 { -  margin-top: 0.5em; -  margin-bottom: 0.25em; -  padding: 0 0; -} - -.mini-synopsis H1 { border-bottom: 1px solid #ccc; } - -.mini-topbar { -  font-size: 130%; -  background: #0077dd; -  padding: 0.25em; -} - - diff --git a/html/haskell_icon.gif b/html/themes/Classic/haskell_icon.gifBinary files differ index 10589f91..10589f91 100644 --- a/html/haskell_icon.gif +++ b/html/themes/Classic/haskell_icon.gif diff --git a/html/minus.gif b/html/themes/Classic/minus.gifBinary files differ index 1deac2fe..1deac2fe 100644 --- a/html/minus.gif +++ b/html/themes/Classic/minus.gif diff --git a/html/plus.gif b/html/themes/Classic/plus.gifBinary files differ index 2d15c141..2d15c141 100644 --- a/html/plus.gif +++ b/html/themes/Classic/plus.gif diff --git a/html/xhaddock.css b/html/themes/Classic/xhaddock.css index 35f4b469..35f4b469 100644 --- a/html/xhaddock.css +++ b/html/themes/Classic/xhaddock.css diff --git a/html/hslogo-16.png b/html/themes/Ocean/hslogo-16.pngBinary files differ index 0ff8579f..0ff8579f 100644 --- a/html/hslogo-16.png +++ b/html/themes/Ocean/hslogo-16.png diff --git a/html/themes/Ocean/minus.gif b/html/themes/Ocean/minus.gifBinary files differ new file mode 100644 index 00000000..1deac2fe --- /dev/null +++ b/html/themes/Ocean/minus.gif diff --git a/html/nhaddock.css b/html/themes/Ocean/ocean.css index f671a170..f671a170 100644 --- a/html/nhaddock.css +++ b/html/themes/Ocean/ocean.css diff --git a/html/themes/Ocean/plus.gif b/html/themes/Ocean/plus.gifBinary files differ new file mode 100644 index 00000000..2d15c141 --- /dev/null +++ b/html/themes/Ocean/plus.gif diff --git a/html/themes/Snappy/minus.gif b/html/themes/Snappy/minus.gifBinary files differ new file mode 100644 index 00000000..1deac2fe --- /dev/null +++ b/html/themes/Snappy/minus.gif diff --git a/html/themes/Snappy/plus.gif b/html/themes/Snappy/plus.gifBinary files differ new file mode 100644 index 00000000..2d15c141 --- /dev/null +++ b/html/themes/Snappy/plus.gif diff --git a/html/s_haskell_icon.gif b/html/themes/Snappy/s_haskell_icon.gifBinary files differ index cb2a8158..cb2a8158 100644 --- a/html/s_haskell_icon.gif +++ b/html/themes/Snappy/s_haskell_icon.gif diff --git a/html/shaddock.css b/html/themes/Snappy/snappy.css index 52215f93..52215f93 100644 --- a/html/shaddock.css +++ b/html/themes/Snappy/snappy.css diff --git a/html/themes/Tibbe/haskell_icon.gif b/html/themes/Tibbe/haskell_icon.gifBinary files differ new file mode 100644 index 00000000..10589f91 --- /dev/null +++ b/html/themes/Tibbe/haskell_icon.gif diff --git a/html/themes/Tibbe/minus.gif b/html/themes/Tibbe/minus.gifBinary files differ new file mode 100644 index 00000000..1deac2fe --- /dev/null +++ b/html/themes/Tibbe/minus.gif diff --git a/html/themes/Tibbe/plus.gif b/html/themes/Tibbe/plus.gifBinary files differ new file mode 100644 index 00000000..2d15c141 --- /dev/null +++ b/html/themes/Tibbe/plus.gif diff --git a/html/thaddock.css b/html/themes/Tibbe/tibbe.css index d92c269b..d92c269b 100644 --- a/html/thaddock.css +++ b/html/themes/Tibbe/tibbe.css diff --git a/src/Haddock/Backends/Xhtml.hs b/src/Haddock/Backends/Xhtml.hs index 00f8e30b..94ee6347 100644 --- a/src/Haddock/Backends/Xhtml.hs +++ b/src/Haddock/Backends/Xhtml.hs @@ -119,7 +119,7 @@ copyHtmlBits odir libdir themes = do          copyLibFile f = do             copyFile (joinPath [libhtmldir, f]) (joinPath [odir, f])    mapM_ copyCssFile (cssFiles themes) -  mapM_ copyLibFile [ plusFile, minusFile, jsFile, framesFile ] +  mapM_ copyLibFile [ jsFile, framesFile ]  headHtml :: String -> Maybe String -> Themes -> Html diff --git a/src/Haddock/Backends/Xhtml/Themes.hs b/src/Haddock/Backends/Xhtml/Themes.hs index 43339791..3274b842 100644 --- a/src/Haddock/Backends/Xhtml/Themes.hs +++ b/src/Haddock/Backends/Xhtml/Themes.hs @@ -22,12 +22,12 @@ import Haddock.Options  import Control.Monad (liftM)  import Data.Char (toLower)  import Data.Either (lefts, rights) -import Data.List (nub) +import Data.List (nub, partition)  import Data.Maybe (isJust, listToMaybe)  import System.Directory  import System.FilePath -import Text.XHtml hiding ( name, title, p, quote ) +import Text.XHtml hiding ( name, title, p, quote, (</>) )  import qualified Text.XHtml as XHtml @@ -41,67 +41,57 @@ data CssTheme = CssTheme {    themeFiles :: [FilePath]    } +  type Themes = [CssTheme] --- | Standard theme used by default -standardTheme :: FilePath -> CssTheme -standardTheme libDir = locateIn libDir $ -  CssTheme "Ocean"   "nhaddock.css" ["nhaddock.css", "hslogo-16.png"] +type PossibleTheme = Either String CssTheme +type PossibleThemes = Either String Themes --- | Default themes that are part of Haddock; added with --default-themes -defaultThemes :: FilePath -> Themes -defaultThemes libDir = standardTheme libDir : -  (map (locateIn libDir) $ [ -    CssTheme "Classic" "xhaddock.css" ["xhaddock.css", "haskell_icon.gif"], -    CssTheme "Tibbe"   "thaddock.css" ["thaddock.css", "haskell_icon.gif"], -    CssTheme "Snappy"  "shaddock.css" ["shaddock.css", "s_haskell_icon.gif"] -    ] -  ) +-- | Standard theme used by default +standardTheme :: FilePath -> IO PossibleThemes +standardTheme libDir = liftM (liftEither (take 1)) (defaultThemes libDir) -locateIn :: FilePath -> CssTheme -> CssTheme -locateIn libDir t = t { themeFiles = map loc (themeFiles t) } -  where loc = combine libDir . combine "html" +-- | Default themes that are part of Haddock; added with --default-themes +defaultThemes :: FilePath -> IO PossibleThemes +defaultThemes libDir = do +  themeDirs <- getDirectoryItems (libDir </> "html" </> "themes") +  themes <- mapM directoryTheme themeDirs +  return $ liftEither shuffle $ sequenceEither themes +  where +    shuffle ts = let (a,b) = partition isStd ts in a ++ b +    isStd c = themeName c == "Ocean" -findTheme :: Themes -> String -> Maybe CssTheme -findTheme ts s = listToMaybe $ filter ((== ls).lower.themeName) ts +findTheme :: String -> Themes -> Maybe CssTheme +findTheme s = listToMaybe . filter ((== ls).lower.themeName)    where lower = map toLower          ls = lower s -isThemeName :: Themes -> String ->  Bool -isThemeName ts = isJust . findTheme ts - - -builtInTheme :: Themes -> String -> Either String CssTheme -builtInTheme ts = maybe (Left "not found") Right . findTheme ts - -  --------------------------------------------------------------------------------  -- * CSS Theme Arguments  -------------------------------------------------------------------------------- -type PossibleTheme = Either String CssTheme  -- | Process input flags for CSS Theme arguments  getThemes :: FilePath -> [Flag] -> IO (Either String Themes)  getThemes libDir flags = -  liftM (someTheme . concatEither) (mapM themeFlag flags) +  liftM concatEither (mapM themeFlag flags) >>= someTheme    where      themeFlag :: Flag -> IO (Either String Themes)      themeFlag (Flag_CSS path) = (liftM . liftEither) (:[]) (theme path) -    themeFlag (Flag_BuiltInThemes) = retRight builtIns +    themeFlag (Flag_BuiltInThemes) = builtIns      themeFlag _ = retRight []      theme :: FilePath -> IO PossibleTheme      theme path = pick path        [(doesFileExist,                 singleFileTheme),         (doesDirectoryExist,            directoryTheme), -       (return . isThemeName builtIns, return . builtInTheme builtIns)] -      "css theme path not found" +       (doesBuiltInExist builtIns,     builtInTheme builtIns)] +      "Theme not found"      pick :: FilePath        -> [(FilePath -> IO Bool, FilePath -> IO PossibleTheme)] -> String @@ -111,43 +101,56 @@ getThemes libDir flags =        pass <- test path        if pass then build path else pick path opts msg -    someTheme :: Either String Themes -> Either String Themes -    someTheme (Right []) = Right [standardTheme libDir] -    someTheme est = est + +    someTheme :: Either String Themes -> IO (Either String Themes) +    someTheme (Right []) = standardTheme libDir +    someTheme est = return est      builtIns = defaultThemes libDir  errMessage :: String -> FilePath -> IO (Either String a) -errMessage msg path = return (Left (msg ++ ": \"" ++ path ++ "\"")) +errMessage msg path = return (Left msg') +  where msg' = "Error: " ++ msg ++ ": \"" ++ path ++ "\"\n"  retRight :: a -> IO (Either String a)  retRight = return . Right -singleFileTheme :: FilePath -> IO (Either String CssTheme) +singleFileTheme :: FilePath -> IO PossibleTheme  singleFileTheme path =    if isCssFilePath path        then retRight $ CssTheme name file [path] -      else errMessage "file extension isn't .css" path +      else errMessage "File extension isn't .css" path    where      name = takeBaseName path      file = takeFileName path -directoryTheme :: FilePath -> IO (Either String CssTheme) +directoryTheme :: FilePath -> IO PossibleTheme  directoryTheme path = do    items <- getDirectoryItems path    case filter isCssFilePath items of -    [] -> errMessage "no .css file in theme directory" path      [cf] -> retRight $ CssTheme (takeBaseName path) (takeFileName cf) items -    _ -> errMessage "more than one .css file in theme directory" path +    [] -> errMessage "No .css file in theme directory" path +    _ -> errMessage "More than one .css file in theme directory" path + + +doesBuiltInExist :: IO PossibleThemes -> String -> IO Bool +doesBuiltInExist pts s = pts >>= return . either (const False) test +  where test = isJust . findTheme s + + +builtInTheme :: IO PossibleThemes -> String -> IO PossibleTheme +builtInTheme pts s = pts >>= return . either Left fetch +  where fetch = maybe (Left ("Unknown theme: " ++ s)) Right . findTheme s  getDirectoryItems :: FilePath -> IO [FilePath]  getDirectoryItems path = -  getDirectoryContents path >>= return . map (combine path) +  getDirectoryContents path >>= return . map (combine path) . filter notDot +  where notDot s = s /= "." && s /= ".."  isCssFilePath :: FilePath -> Bool diff --git a/src/Haddock/Backends/Xhtml/Utils.hs b/src/Haddock/Backends/Xhtml/Utils.hs index a914d2e8..61f0894d 100644 --- a/src/Haddock/Backends/Xhtml/Utils.hs +++ b/src/Haddock/Backends/Xhtml/Utils.hs @@ -184,7 +184,7 @@ linkedAnchor n = anchor ! [href ('#':n)]  collapsebutton :: String -> Html  collapsebutton id_ = -  image ! [ src minusFile, theclass "coll", onclick ("toggle(this,'" ++ id_ ++ "')"), alt "show/hide" ] +  image ! [ src "minus.gif", theclass "coll", onclick ("toggle(this,'" ++ id_ ++ "')"), alt "show/hide" ]  -- A quote is a valid part of a Haskell identifier, but it would interfere with diff --git a/src/Haddock/Utils.hs b/src/Haddock/Utils.hs index 003706cd..ed253433 100644 --- a/src/Haddock/Utils.hs +++ b/src/Haddock/Utils.hs @@ -22,7 +22,7 @@ module Haddock.Utils (    frameIndexHtmlFile,    moduleIndexFrameName, mainFrameName, synopsisFrameName,    subIndexHtmlFile, -  jsFile, plusFile, minusFile, framesFile, +  jsFile, framesFile,    -- * Anchor and URL utilities    moduleNameUrl, moduleUrl, @@ -257,10 +257,8 @@ makeAnchorId (f:r) = escape isAlpha f ++ concatMap (escape isLegal) r  ------------------------------------------------------------------------------- -jsFile, plusFile, minusFile, framesFile :: String +jsFile, framesFile :: String  jsFile    = "haddock-util.js" -plusFile  = "plus.gif" -minusFile = "minus.gif"  framesFile = "frames.html" | 
