-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | JavaScript and Css files concat for http optimization -- -- You need to add static resources to your web page. For production you -- want to decrease number of files. For development you need them -- separated. Support for distinct sets of JS and CSS files for different -- views. @package static-resources @version 0.1.2 -- | All types used by this module. module Static.Resources.Types -- | All resources have to be typed data ResourceType -- | CSS file CSS :: ResourceType -- | JavaScript file JS :: ResourceType -- | Special JavaScript. System will not join this one with other scripts. JSX :: ResourceType -- | Resource is a file with a type. data Resource Resource :: !ResourceType -> !FilePath -> Resource rtype :: Resource -> !ResourceType path :: Resource -> !FilePath -- | ResourceSet is named list of resources. data ResourceSet ResourceSet :: !String -> ![Resource] -> ResourceSet name :: ResourceSet -> !String resources :: ResourceSet -> ![Resource] -- | ResourceSpec is a list of ResourceSet and list of files -- or directories that can be ignored by check function. data ResourceSpec ResourceSpec :: ![ResourceSet] -> ![FilePath] -> ResourceSpec sets :: ResourceSpec -> ![ResourceSet] ignored :: ResourceSpec -> ![FilePath] -- | We can import resources for development (no joined, gziped or -- minified) or for production. data ImportType Development :: ImportType Production :: ImportType -- | ResourceSet that is ready to be imported. It's all you need to -- generate import list for html. data ResourceSetForImport ResourceSetForImport :: !ResourceSet -> ![FilePath] -> ![FilePath] -> ResourceSetForImport set :: ResourceSetForImport -> !ResourceSet cssFiles :: ResourceSetForImport -> ![FilePath] jsFiles :: ResourceSetForImport -> ![FilePath] -- | Set of ResourceSetForImport newtype ResourceSetsForImport ResourceSetsForImport :: [ResourceSetForImport] -> ResourceSetsForImport -- | Utils for getting specyfic parts of ResourceSet filterByType :: (ResourceType -> Bool) -> ResourceSet -> [Resource] instance Typeable ResourceType instance Show ResourceType instance Data ResourceType instance Eq ResourceType instance Show Resource instance Show ResourceSet instance Show ResourceSpec instance Show ImportType instance Show ResourceSetForImport instance Show ResourceSetsForImport -- | Parsing static resources spec. -- --
-- ignore main.css -- -- set a -- js a.js -- css a.css -- css common.css -- -- set b -- js b.js -- css b.css -- css common.css --module Static.Resources.Spec parseSpec :: FilePath -> IO ResourceSpec -- | Basic consistency checker. module Static.Resources.Checker -- | Performs check. Left is error with some description. * Fails with css -- and js files avaible but not listed in spec. * Fails with css and js -- files that are in spec, but not avaible. check :: ResourceSpec -> IO (Either String ()) -- | Module for generaing joined js and css files from spec module Static.Resources.Generation generateResources :: ImportType -> ResourceSpec -> IO ResourceSetsForImport -- | Generating list of imports to be embedded in html module Static.Resources.Import -- | Generating import list for HTML resources htmlImportList :: String -> ResourceSetsForImport -> String -- | Put resources.spec into your public HTTP directory. List there your -- css and js files. Devide them over some sets. -- -- Sample resources.spec: -- --
-- set mainPage -- css mainPage.css -- js mainPage.js -- js jQuery.js ---- -- Usage: -- --
-- do -- rs <- getResourceSetsForImport Development "public/resources.js" -- return "<html><head>"++(htmlImportList "mainPage" rs)++"</head><body/></html>" --module Static.Resources -- | Generating import list for HTML resources htmlImportList :: String -> ResourceSetsForImport -> String -- | Make ResourceSetsForImport ready. It will generate agregated -- css and js files if needed. It will change directory to one of spec -- file. It agregates will be placed there. When done it will change back -- to the oryginal dir getResourceSetsForImport :: ImportType -> FilePath -> IO (Either String ResourceSetsForImport) -- | Cleans all files that could be created by this system based on spec. -- It requires current directory to be in specification file directory cleanResourceFiles :: ResourceSpec -> IO () -- | ResourceSpec is a list of ResourceSet and list of files -- or directories that can be ignored by check function. data ResourceSpec parseSpec :: FilePath -> IO ResourceSpec -- | Performs check. Left is error with some description. * Fails with css -- and js files avaible but not listed in spec. * Fails with css and js -- files that are in spec, but not avaible. check :: ResourceSpec -> IO (Either String ()) -- | We can import resources for development (no joined, gziped or -- minified) or for production. data ImportType Development :: ImportType Production :: ImportType -- | Set of ResourceSetForImport newtype ResourceSetsForImport ResourceSetsForImport :: [ResourceSetForImport] -> ResourceSetsForImport generateResources :: ImportType -> ResourceSpec -> IO ResourceSetsForImport