profiteur 0.4.3.0 → 0.4.4.0
raw patch · 8 files changed
+120/−63 lines, 8 filesdep +file-embeddep +template-haskell
Dependencies added: file-embed, template-haskell
Files
- CHANGELOG.md +6/−0
- data/js/node.js +4/−23
- data/js/tree-map.js +2/−0
- profiteur.cabal +17/−2
- src/Main.hs +45/−38
- src/Profiteur/DataFile/Internal.hs +8/−0
- src/embed/Profiteur/DataFile.hs +22/−0
- src/noembed/Profiteur/DataFile.hs +16/−0
CHANGELOG.md view
@@ -1,3 +1,9 @@+- 0.4.4.0+ * Add a flag to embed the datafiles (by Nikolay Yakimov)+ * Allow passing in an output path (by Nikolay Yakimov)+ * Use HSL instead of RGB for random color generation (by David+ Luposchainsky)+ - 0.4.3.0 * Add `--version` flag * Bump `aeson` dependency to 1.2
data/js/node.js view
@@ -85,29 +85,10 @@ hash = (hash << 5) + hash + str.charCodeAt(i); } - hash = hash % 0xffffff;- var r = (hash & 0xff0000) >> 16;- var g = (hash & 0x00ff00) >> 8;- var b = (hash & 0x0000ff);-- r = (r) / 2;- g = (g) / 2;- b = (b) / 2;-- function hex2(x) {- var str = x.toString(16);- if (str.length < 2) {- for (var i = 0; i < 2 - str.length; i++) {- str = '0' + str;- }- }- return str;- }-- return '#' +- hex2(Math.round(r)) +- hex2(Math.round(g)) +- hex2(Math.round(b));+ var h = hash % 360;+ var s = "100%";+ var l = "40%";+ return 'hsl(' + h + ', ' + s + ', ' + l + ')'; }; Node.prototype.getCost = function() {
data/js/tree-map.js view
@@ -219,6 +219,8 @@ // Fill entire area context.fillStyle = node.getColor(); context.fillRect(rect.x, rect.y, rect.w, rect.h);+ context.strokeStyle = 'black';+ context.strokeRect(rect.x, rect.y, rect.w, rect.h); // Draw children on top. if (node.children.length > 0) {
profiteur.cabal view
@@ -1,5 +1,5 @@ Name: profiteur-Version: 0.4.3.0+Version: 0.4.4.0 Synopsis: Treemap visualiser for GHC prof files Description: Treemap visualiser for GHC prof files Homepage: http://github.com/jaspervdj/profiteur@@ -8,7 +8,7 @@ Author: Jasper Van der Jeugt <m@jaspervdj.be> Maintainer: Jasper Van der Jeugt <m@jaspervdj.be> Copyright: 2014 Jasper Van der Jeugt-Category: Development+Category: Development, Profiling Build-type: Simple Cabal-version: >= 1.8 @@ -31,6 +31,11 @@ data/js/unicode.js data/js/zoom.js +Flag embed-data-files+ description: Embed data files into the executable (needed for ghcjs packaging)+ default: False+ manual: True+ Source-repository head Type: git Location: git://github.com/jaspervdj/profiteur.git@@ -43,6 +48,9 @@ Other-modules: Profiteur.Core Profiteur.Parser+ Profiteur.DataFile+ Profiteur.DataFile.Internal+ Paths_profiteur Build-depends: aeson >= 0.6 && < 1.3,@@ -56,3 +64,10 @@ text >= 0.11 && < 1.3, unordered-containers >= 0.2 && < 0.3, vector >= 0.10 && < 0.13++ if flag(embed-data-files)+ Build-depends: file-embed >= 0.0.10 && < 0.0.11,+ template-haskell >= 2.11 && < 2.12+ Hs-source-dirs: src/embed+ else+ Hs-source-dirs: src/noembed
src/Main.hs view
@@ -13,7 +13,6 @@ import qualified Data.Text.Encoding as T import qualified Data.Text.Lazy.IO as TL import Data.Version (showVersion)-import qualified Language.Javascript.JQuery as JQuery import System.Environment (getArgs, getProgName) import System.Exit (exitFailure) import System.FilePath (takeBaseName)@@ -21,20 +20,15 @@ ---------------------------------------------------------------------------------import Paths_profiteur (getDataFileName, version)+import Paths_profiteur (version) import Profiteur.Core import Profiteur.Parser------------------------------------------------------------------------------------includeFile :: IO.Handle -> FilePath -> IO ()-includeFile h filePath =- BL.hPutStr h =<< BL.readFile filePath+import Profiteur.DataFile ---------------------------------------------------------------------------------writeReport :: String -> NodeMap -> IO ()-writeReport profFile prof = IO.withBinaryFile htmlFile IO.WriteMode $ \h -> do+writeReport :: IO.Handle -> String -> NodeMap -> IO ()+writeReport h profFile prof = do BC8.hPutStrLn h $ "<!DOCTYPE html>\n\ \<html>\n\@@ -47,57 +41,70 @@ BC8.hPutStrLn h ";</script>" BC8.hPutStrLn h "<style>"- includeFile h =<< getDataFileName "data/css/main.css"+ includeFile h "data/css/main.css" BC8.hPutStrLn h "</style>" - includeJs h =<< JQuery.file- includeJs h =<< getDataFileName "data/js/unicode.js"- includeJs h =<< getDataFileName "data/js/model.js"- includeJs h =<< getDataFileName "data/js/resizing-canvas.js"- includeJs h =<< getDataFileName "data/js/node.js"- includeJs h =<< getDataFileName "data/js/selection.js"- includeJs h =<< getDataFileName "data/js/zoom.js"- includeJs h =<< getDataFileName "data/js/details.js"- includeJs h =<< getDataFileName "data/js/sorting.js"- includeJs h =<< getDataFileName "data/js/tree-map.js"- includeJs h =<< getDataFileName "data/js/tree-browser.js"- includeJs h =<< getDataFileName "data/js/main.js"+ includeJs JQueryFile+ includeJs "data/js/unicode.js"+ includeJs "data/js/model.js"+ includeJs "data/js/resizing-canvas.js"+ includeJs "data/js/node.js"+ includeJs "data/js/selection.js"+ includeJs "data/js/zoom.js"+ includeJs "data/js/details.js"+ includeJs "data/js/sorting.js"+ includeJs "data/js/tree-map.js"+ includeJs "data/js/tree-browser.js"+ includeJs "data/js/main.js" BC8.hPutStrLn h " </head>\n\ \ <body>"- includeFile h =<< getDataFileName "data/html/body.html"+ includeFile h "data/html/body.html" BC8.hPutStrLn h " </body>\ \</html>"-- putStrLn $ "Wrote " ++ htmlFile where- htmlFile = profFile ++ ".html" title = T.pack $ takeBaseName profFile - includeJs h file = do+ includeJs file = do BC8.hPutStrLn h "<script type=\"text/javascript\">" includeFile h file BC8.hPutStrLn h "</script>" +--------------------------------------------------------------------------------+makeReport :: IO.Handle -> FilePath -> IO ()+makeReport h profFile = do+ profOrErr <- decode <$> TL.readFile profFile+ case profOrErr of+ Right prof ->+ writeReport h profFile $ nodeMapFromCostCentre prof+ Left err -> do+ putStrLnErr $ profFile ++ ": " ++ err+ exitFailure --------------------------------------------------------------------------------+putStrLnErr :: String -> IO ()+putStrLnErr = IO.hPutStrLn IO.stderr++-------------------------------------------------------------------------------- main :: IO () main = do progName <- getProgName args <- getArgs case args of _ | "--version" `elem` args ->- putStrLn (showVersion version)- [profFile] -> do- profOrErr <- decode <$> TL.readFile profFile- case profOrErr of- Right prof ->- writeReport profFile $ nodeMapFromCostCentre prof- Left err -> do- putStrLn $ profFile ++ ": " ++ err- exitFailure+ putStrLnErr (showVersion version)+ [profFile] ->+ let htmlFile = profFile ++ ".html"+ in IO.withBinaryFile htmlFile IO.WriteMode $ \h ->+ makeReport h profFile+ [profFile, "-"] ->+ makeReport IO.stdout profFile+ [profFile, htmlFile] ->+ IO.withBinaryFile htmlFile IO.WriteMode $ \h ->+ makeReport h profFile _ -> do- putStrLn $ "Usage: " ++ progName ++ " <prof file>"+ putStrLnErr $ "Usage: " ++ progName ++ " <prof file> [<output file>]"+ putStrLnErr " <output file> \"-\" means STDOUT" exitFailure
+ src/Profiteur/DataFile/Internal.hs view
@@ -0,0 +1,8 @@+module Profiteur.DataFile.Internal where++import Data.String++data DataType = JQueryFile | DataFile FilePath deriving (Show)++instance IsString DataType where+ fromString = DataFile
+ src/embed/Profiteur/DataFile.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE TemplateHaskell #-}+module Profiteur.DataFile (+ includeFile,+ module Profiteur.DataFile.Internal+ ) where++import Profiteur.DataFile.Internal+import System.IO (Handle)+import qualified Data.ByteString as B+import Data.FileEmbed+import Control.Arrow+import qualified Language.Javascript.JQuery as JQuery+import Language.Haskell.TH (runIO)+import Data.Maybe++includeFile :: Handle -> DataType -> IO ()+includeFile h filePath = B.hPutStr h $ data' filePath+ where+ data' JQueryFile = $(embedFile =<< runIO JQuery.file)+ data' (DataFile fp) =+ fromMaybe (error $ "No such datafile: " ++ fp) $ lookup fp dataDirContents+ dataDirContents = map (first ("data/" ++)) $(embedDir "data")
+ src/noembed/Profiteur/DataFile.hs view
@@ -0,0 +1,16 @@+module Profiteur.DataFile (+ includeFile,+ module Profiteur.DataFile.Internal+ ) where++import Paths_profiteur (getDataFileName)+import System.IO (Handle)+import qualified Data.ByteString.Lazy as BL+import qualified Language.Javascript.JQuery as JQuery+import Profiteur.DataFile.Internal++includeFile :: Handle -> DataType -> IO ()+includeFile h JQueryFile =+ BL.hPutStr h =<< BL.readFile =<< JQuery.file+includeFile h (DataFile filePath) =+ BL.hPutStr h =<< BL.readFile =<< getDataFileName filePath