{-# LANGUAGE OverloadedStrings, StandaloneDeriving #-}

module Lucid.DataTables where

import qualified Data.Aeson as Aeson
import qualified Data.ByteString.Lazy as BSL
import Lucid
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import Lucid.PreEscaped
import Data.Monoid

dataTablesCDN :: Monad m => HtmlT m ()
dataTablesCDN
  =  scriptSrc "https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"

-- | Additional properties to pass to the table.
--   See https://datatables.net/reference/option/ for values
--   we might wish to use here.
activateDataTable :: Monad m => T.Text
                  -> Maybe (Aeson.Value)
                  -> HtmlT m ()
activateDataTable elm props = script_ $
    "$(document).ready(function(){ $('"<> elm<>"').DataTable("<> propStr <> "); })"
  where
    propStr = case props of
      Just val -> T.decodeUtf8 . BSL.toStrict . Aeson.encode $ val
      Nothing -> ""

dataTablesCssCDN :: Monad m => HtmlT m ()
dataTablesCssCDN =
  link_ [rel_ "stylesheet",
         href_ "https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css"]