{-# LANGUAGE DeriveDataTypeable #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Diagrams.Backend.SVG.Attributes
-- Copyright   :  (c) 2015 Diagrams team (see LICENSE)
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  diagrams-discuss@googlegroups.com
--
-- Attributes that are specific to the SVG backend. The intent
-- of this module is to allow adding the attributes class,
-- and id attributes to an SVG. For those embedding
-- the resulting SVG into a webpage, this allows some
-- interactivity with javascript and stylesheets.
--
-----------------------------------------------------------------------------

module Diagrams.Backend.SVG.Attributes (
  -- * Id
    SvgId(..)
  , svgId

  -- * Class
  , SvgClass(..)
  , svgClass

  ) where

import         Diagrams.Core.Style (AttributeClass, HasStyle, applyAttr)
import         Data.Semigroup
import         Data.Typeable       (Typeable)

-----------------------------------------------------------------
--  Id
-----------------------------------------------------------------

-- | The SVG id attribute.
newtype SvgId = SvgId {getSvgId :: String}
  deriving Typeable

instance Semigroup SvgId where
  _ <> a = a
instance AttributeClass SvgId

-- | Set the Id attribute.
svgId :: HasStyle a => String -> a -> a
svgId = applyAttr . SvgId

-----------------------------------------------------------------
--  Class
-----------------------------------------------------------------

-- | The SVG class attribute.
newtype SvgClass = SvgClass {getSvgClass :: String}
  deriving Typeable

instance Semigroup SvgClass where
  _ <> a = a

instance AttributeClass SvgClass

-- | Set the class attribute.
svgClass :: HasStyle a => String -> a -> a
svgClass = applyAttr . SvgClass