diff --git a/src/DOM/Node/DOMTokenList.js b/src/DOM/Node/DOMTokenList.js new file mode 100644 index 0000000..8eabd90 --- /dev/null +++ b/src/DOM/Node/DOMTokenList.js @@ -0,0 +1,69 @@ +/* global exports */ +"use strict"; + +// module DOM.Node.DOMTokenList + +exports.length = function (list) { + return function () { + return list.length; + }; +}; + +exports.item = function (index) { + return function (list) { + return function () { + return list.item(index); + }; + }; +}; + +exports.contains = function(token) { + return function (list) { + return function () { + return list.contains(token); + } + } +} + +exports.add = function(tokens) { + return function (list) { + return function () { + return list.add.apply(list, tokens); + } + } +} + +exports.remove = function(tokens) { + return function (list) { + return function () { + return list.remove.apply(list, tokens); + } + } +} + +exports.toggle = function(token) { + return function (list) { + return function () { + return list.toggle(token); + } + } +} + +exports.replace = function(token) { + return function (newToken) { + return function (list) { + return function () { + return list.replace(token, newToken); + } + } + } +} + +exports.supports = function(token) { + return function (list) { + return function () { + return list.supports(token); + } + } +} + diff --git a/src/DOM/Node/DOMTokenList.purs b/src/DOM/Node/DOMTokenList.purs new file mode 100644 index 0000000..0f92fe6 --- /dev/null +++ b/src/DOM/Node/DOMTokenList.purs @@ -0,0 +1,42 @@ +module DOM.Node.DOMTokenList where + +import Prelude + +import Control.Monad.Eff (Eff()) + +import Data.Nullable (Nullable()) + +import DOM +import DOM.Node.Types + + +-- | The number of tokens in a DOMTokenList. +foreign import length :: forall eff. DOMTokenList -> Eff (dom :: DOM | eff) Int + +-- | The token in a DOMTokenList at the specified index, or null if no such +-- | token exists. +foreign import item :: forall eff. Int -> DOMTokenList -> Eff (dom :: DOM | eff) (Nullable String) + +-- | Test whether or not the DOMTokenList contains the given token. +foreign import contains :: forall eff. String -> DOMTokenList -> Eff (dom :: DOM | eff) Boolean + +-- | Add the given array tokens to the DOMTokenList; duplicate items are +-- | automatically pruned. +foreign import add :: forall eff. Array String -> DOMTokenList -> Eff (dom :: DOM | eff) Unit + +-- | Remove the given tokens from the DOMTokenList if they exist in it. +foreign import remove :: forall eff. Array String -> DOMTokenList -> Eff (dom :: DOM | eff) Unit + +-- | Toggle the presence of the given token in the DOMTokenList. Returns +-- | whether or not the token was originally in the DOMTokenList. +foreign import toggle :: forall eff. String -> DOMTokenList -> Eff (dom :: DOM | eff) Boolean + +-- | Replaces an occurrence of the token string with the first token. If the +-- | first token is not in the DOMTokenList, nothing happens. +foreign import replace :: forall eff. String -> String -> DOMTokenList -> Eff (dom :: DOM | eff) Unit + +-- | Returns whether or not the DOMTokenList supports containing the given token. +-- | +-- | TODO: This doesn't actually do this; it actually always returns false, +-- | unless the token is not valid. If it isn't, it throws an exception. +foreign import supports :: forall eff. String -> DOMTokenList -> Eff (dom :: DOM | eff) Boolean diff --git a/src/DOM/Node/Element.js b/src/DOM/Node/Element.js index 9d4e3cf..7e55439 100644 --- a/src/DOM/Node/Element.js +++ b/src/DOM/Node/Element.js @@ -88,3 +88,9 @@ exports.getAttribute = function (name) { }; }; }; + +exports.classList = function (element) { + return function () { + return element.classList; + }; +}; diff --git a/src/DOM/Node/Element.purs b/src/DOM/Node/Element.purs index b4842e9..6d4c047 100644 --- a/src/DOM/Node/Element.purs +++ b/src/DOM/Node/Element.purs @@ -25,3 +25,6 @@ foreign import getElementsByClassName :: forall eff. String -> Element -> Eff (d foreign import setAttribute :: forall eff. String -> String -> Element -> Eff (dom :: DOM | eff) Unit foreign import getAttribute :: forall eff. String -> Element -> Eff (dom :: DOM | eff) (Nullable String) + +-- | A (mutatable) DOMTokenList representing the classes of the element. +foreign import classList :: forall eff. Element -> Eff (dom :: DOM | eff) DOMTokenList