content: {-# LANGUAGE CPP #-}
  {-# LANGUAGE OverloadedStrings #-}
  
  --
  -- Based on the Elm VegaLite ImageTests.elm as of version 2.0
  --
  module ImageTests (testSpecs) where
  
  -- import qualified Data.Aeson as A
  import qualified Data.Text as T
  
  -- import Data.Aeson ((.=))
  -- import Data.Function ((&))
  
  #if !(MIN_VERSION_base(4, 12, 0))
  import Data.Monoid ((<>))
  #endif
  
  import Graphics.Vega.VegaLite
  
  import Prelude hiding (filter)
  
  testSpecs :: [(String, VegaLite)]
  testSpecs = [ ("image1", image1)
              , ("image2", image2)
              , ("image3", image3)
              , ("image4", image4)
              , ("image5", image5)
              , ("image6", image6)
              , ("image7", image7)
              , ("image8", image8)
              , ("image9", image9)
              , ("image10", image10)
              {-
              , ("image11", image11)
              , ("image12", image12)
              -}
              ]
  
  
  base :: T.Text
  base = "https://vega.github.io/vega-lite/data/"
  
  
  imgUrls :: DataValues
  imgUrls = Strings (map (base <>) [ "ffox.png", "gimp.png", "7zip.png" ])
  
                        
  imageEnc :: ([DataColumn] -> [DataColumn]) -> (BuildEncodingSpecs) -> VegaLite
  imageEnc dataSupp encSupp =
    let axVals = Numbers [ 0.5, 1.5, 2.5 ]
        dvals = dataFromColumns []
                . dataColumn "x" axVals
                . dataColumn "y" axVals
                . dataSupp
  
        enc = encoding
              . position X [ PName "x", PmType Quantitative ]
              . position Y [ PName "y", PmType Quantitative ]
              . encSupp
  
    in toVegaLite [ dvals [], enc [], mark Image [ MWidth 25, MHeight 25 ] ]
  
  
  image1 :: VegaLite
  image1 = imageEnc (const []) (url [ HString (base <> "ffox.png") ])
  
  
  image2 :: VegaLite
  image2 =
    imageEnc
      (dataColumn "img" imgUrls)
      (url [ HName "img", HmType Nominal ])
  
  
  lakeImage :: [MarkProperty] -> VegaLite
  lakeImage mProps =
    let col lbl = dataColumn lbl (Numbers [ 5 ])
        dvals = dataFromColumns [] . col "x" . col "y"
  
        pos t l = position t [ PName l
                             , PmType Quantitative
                             , PScale [ SDomain (DNumbers [0, 10]) ]
                             ]
        enc = encoding . pos X "x" . pos Y "y"
        encImage = enc . url [ HString "https://gicentre.github.io/data/images/LillyTarn.jpg" ]
        
    in toVegaLite
          [ dvals []
          , layer
              [ asSpec [ encImage [], mark Image mProps ]
              , asSpec [ enc [], mark Circle [ MColor "red", MSize 100, MOpacity 0.5 ] ]
              ]
          ]
  
  
  image3 :: VegaLite
  image3 = lakeImage [ MWidth 100, MAspect True ]
  
  
  image4 :: VegaLite
  image4 =
      lakeImage [ MWidth 100, MHeight 100, MAspect False ]
  
  
  image5 :: VegaLite
  image5 =
      lakeImage [ MWidth 100, MHeight 61, MAlign AlignLeft ]
  
  
  image6 :: VegaLite
  image6 =
      lakeImage [ MWidth 100, MHeight 61, MAlign AlignCenter ]
  
  
  image7 :: VegaLite
  image7 =
      lakeImage [ MWidth 100, MHeight 61, MAlign AlignRight ]
  
  
  image8 :: VegaLite
  image8 =
      lakeImage [ MWidth 100, MHeight 61, MBaseline AlignTop ]
  
  
  image9 :: VegaLite
  image9 =
      lakeImage [ MWidth 100, MHeight 61, MBaseline AlignMiddle ]
  
  
  image10 :: VegaLite
  image10 =
      lakeImage [ MWidth 100, MHeight 61, MBaseline AlignBottom ]
  
  
  {-
  
  These two are valid according to the 4.0.2 schema, but when viewed in
  the Vega Editor a warning message is displayed about how the size
  channel is incompatible with the image mark and so is dropped.
  
  image11 :: VegaLite
  image11 =
    imageEnc
      (dataColumn "img" imgUrls . dataColumn "mag" (Numbers [ 1, 1, 1 ]))
      (url [ HName "img", HmType Nominal ] . size [ MName "mag", MmType Quantitative ])
  
  
  image12 :: VegaLite
  image12 =
    imageEnc
      (dataColumn "img" imgUrls . dataColumn "mag" (Numbers [ 1, 2, 1 ]))
      (url [ HName "img", HmType Nominal ] . size [ MName "mag", MmType Quantitative ])
  
  -}
  