{-# LANGUAGE DeriveDataTypeable #-}

-- | Module for accessing minified chart code (<http://www.chartjs.org/>).
--   As an example:
--
-- > import qualified Language.Javascript.Chart as Chart
-- >
-- > main = do
-- >     putStrLn $ "Chart version " ++ show Chart.version ++ " source:"
-- >     putStrLn =<< readFile =<< Chart.file Chart.Chart
--
--   This package installs data files containing the @chart.js@ sources, which must be available at runtime.
--   If you want to produce an executable with no dependency on associated data files, you can use the
--   @file-embed@ library (<https://hackage.haskell.org/package/file-embed>):
--
-- > {-# LANGUAGE TemplateHaskell #-}
-- >
-- > import Data.FileEmbed
-- > import qualified Data.ByteString as BS
-- > import qualified Language.Javascript.Chart as Chart
-- > import Language.Haskell.TH.Syntax
-- >
-- > main = print chartContents
-- >
-- > chartContents :: BS.ByteString
-- > chartContents = $(embedFile =<< runIO (Chart.file Chart.Chart))
module Language.Javascript.Chart
  ( Chart (..),
    version,
    file,
  )
where

import Data.Char
import Data.Data
import Data.Version
import qualified Paths_js_chart as Paths

-- | The Chart code to obtain.
data Chart
  = -- | The base @chart.js@ system.
    Chart
  | -- | The base system, plus a compliant version of the <https://momentjs.com/ moment.js> time and date library.
    ChartBundle
  | -- | @chart.js@ CSS, usually unnecessary. See <https://www.chartjs.org/docs/latest/getting-started/integration.html#content-security-policy here>.
    ChartCSS
  deriving (Chart -> Chart -> Bool
(Chart -> Chart -> Bool) -> (Chart -> Chart -> Bool) -> Eq Chart
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Chart -> Chart -> Bool
$c/= :: Chart -> Chart -> Bool
== :: Chart -> Chart -> Bool
$c== :: Chart -> Chart -> Bool
Eq, Eq Chart
Eq Chart
-> (Chart -> Chart -> Ordering)
-> (Chart -> Chart -> Bool)
-> (Chart -> Chart -> Bool)
-> (Chart -> Chart -> Bool)
-> (Chart -> Chart -> Bool)
-> (Chart -> Chart -> Chart)
-> (Chart -> Chart -> Chart)
-> Ord Chart
Chart -> Chart -> Bool
Chart -> Chart -> Ordering
Chart -> Chart -> Chart
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Chart -> Chart -> Chart
$cmin :: Chart -> Chart -> Chart
max :: Chart -> Chart -> Chart
$cmax :: Chart -> Chart -> Chart
>= :: Chart -> Chart -> Bool
$c>= :: Chart -> Chart -> Bool
> :: Chart -> Chart -> Bool
$c> :: Chart -> Chart -> Bool
<= :: Chart -> Chart -> Bool
$c<= :: Chart -> Chart -> Bool
< :: Chart -> Chart -> Bool
$c< :: Chart -> Chart -> Bool
compare :: Chart -> Chart -> Ordering
$ccompare :: Chart -> Chart -> Ordering
$cp1Ord :: Eq Chart
Ord, Int -> Chart -> ShowS
[Chart] -> ShowS
Chart -> String
(Int -> Chart -> ShowS)
-> (Chart -> String) -> ([Chart] -> ShowS) -> Show Chart
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Chart] -> ShowS
$cshowList :: [Chart] -> ShowS
show :: Chart -> String
$cshow :: Chart -> String
showsPrec :: Int -> Chart -> ShowS
$cshowsPrec :: Int -> Chart -> ShowS
Show, ReadPrec [Chart]
ReadPrec Chart
Int -> ReadS Chart
ReadS [Chart]
(Int -> ReadS Chart)
-> ReadS [Chart]
-> ReadPrec Chart
-> ReadPrec [Chart]
-> Read Chart
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Chart]
$creadListPrec :: ReadPrec [Chart]
readPrec :: ReadPrec Chart
$creadPrec :: ReadPrec Chart
readList :: ReadS [Chart]
$creadList :: ReadS [Chart]
readsPrec :: Int -> ReadS Chart
$creadsPrec :: Int -> ReadS Chart
Read, Chart
Chart -> Chart -> Bounded Chart
forall a. a -> a -> Bounded a
maxBound :: Chart
$cmaxBound :: Chart
minBound :: Chart
$cminBound :: Chart
Bounded, Int -> Chart
Chart -> Int
Chart -> [Chart]
Chart -> Chart
Chart -> Chart -> [Chart]
Chart -> Chart -> Chart -> [Chart]
(Chart -> Chart)
-> (Chart -> Chart)
-> (Int -> Chart)
-> (Chart -> Int)
-> (Chart -> [Chart])
-> (Chart -> Chart -> [Chart])
-> (Chart -> Chart -> [Chart])
-> (Chart -> Chart -> Chart -> [Chart])
-> Enum Chart
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Chart -> Chart -> Chart -> [Chart]
$cenumFromThenTo :: Chart -> Chart -> Chart -> [Chart]
enumFromTo :: Chart -> Chart -> [Chart]
$cenumFromTo :: Chart -> Chart -> [Chart]
enumFromThen :: Chart -> Chart -> [Chart]
$cenumFromThen :: Chart -> Chart -> [Chart]
enumFrom :: Chart -> [Chart]
$cenumFrom :: Chart -> [Chart]
fromEnum :: Chart -> Int
$cfromEnum :: Chart -> Int
toEnum :: Int -> Chart
$ctoEnum :: Int -> Chart
pred :: Chart -> Chart
$cpred :: Chart -> Chart
succ :: Chart -> Chart
$csucc :: Chart -> Chart
Enum, Typeable Chart
DataType
Constr
Typeable Chart
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Chart -> c Chart)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Chart)
-> (Chart -> Constr)
-> (Chart -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Chart))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Chart))
-> ((forall b. Data b => b -> b) -> Chart -> Chart)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r)
-> (forall u. (forall d. Data d => d -> u) -> Chart -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Chart -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Chart -> m Chart)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Chart -> m Chart)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Chart -> m Chart)
-> Data Chart
Chart -> DataType
Chart -> Constr
(forall b. Data b => b -> b) -> Chart -> Chart
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Chart -> c Chart
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Chart
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Chart -> u
forall u. (forall d. Data d => d -> u) -> Chart -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Chart -> m Chart
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Chart -> m Chart
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Chart
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Chart -> c Chart
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Chart)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Chart)
$cChartCSS :: Constr
$cChartBundle :: Constr
$cChart :: Constr
$tChart :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Chart -> m Chart
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Chart -> m Chart
gmapMp :: (forall d. Data d => d -> m d) -> Chart -> m Chart
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Chart -> m Chart
gmapM :: (forall d. Data d => d -> m d) -> Chart -> m Chart
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Chart -> m Chart
gmapQi :: Int -> (forall d. Data d => d -> u) -> Chart -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Chart -> u
gmapQ :: (forall d. Data d => d -> u) -> Chart -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Chart -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Chart -> r
gmapT :: (forall b. Data b => b -> b) -> Chart -> Chart
$cgmapT :: (forall b. Data b => b -> b) -> Chart -> Chart
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Chart)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Chart)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Chart)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Chart)
dataTypeOf :: Chart -> DataType
$cdataTypeOf :: Chart -> DataType
toConstr :: Chart -> Constr
$ctoConstr :: Chart -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Chart
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Chart
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Chart -> c Chart
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Chart -> c Chart
$cp1Data :: Typeable Chart
Data, Typeable)

-- | A local file containing the minified chart.js code for 'version'.
file :: Chart -> IO FilePath
file :: Chart -> IO String
file = String -> IO String
Paths.getDataFileName (String -> IO String) -> (Chart -> String) -> Chart -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Chart -> String
name

name :: Chart -> String
name :: Chart -> String
name Chart
Chart = String
"Chart.min.js"
name Chart
ChartBundle = String
"Chart.bundle.min.js"
name Chart
ChartCSS = String
"Chart.min.css"

-- | The version of Chart provided by this package. Not necessarily the version of this package,
--   but the versions will match in the first three digits.
version :: Version
version :: Version
version = [Int] -> [String] -> Version
Version (Int -> [Int] -> [Int]
forall a. Int -> [a] -> [a]
take Int
3 ([Int] -> [Int]) -> [Int] -> [Int]
forall a b. (a -> b) -> a -> b
$ Version -> [Int]
versionBranch Version
Paths.version) []