From c9e167e9d447db4c89fe047eef94e885b3ac32f4 Mon Sep 17 00:00:00 2001 From: flip111 Date: Thu, 27 Jan 2022 23:25:34 +0100 Subject: [PATCH 01/15] NamedNodeMap & Attr --- .gitignore | 6 ++ packages.dhall | 104 ++++++++++++++++++++++++++++++++ spago.dhall | 26 ++++++++ src/Web/DOM/Attr.js | 29 +++++++++ src/Web/DOM/Attr.purs | 40 ++++++++++++ src/Web/DOM/Element.js | 9 +++ src/Web/DOM/Element.purs | 5 +- src/Web/DOM/Internal/Types.purs | 3 + src/Web/DOM/NamedNodeMap.js | 55 +++++++++++++++++ src/Web/DOM/NamedNodeMap.purs | 30 +++++++++ 10 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 packages.dhall create mode 100644 spago.dhall create mode 100644 src/Web/DOM/Attr.js create mode 100644 src/Web/DOM/Attr.purs create mode 100644 src/Web/DOM/NamedNodeMap.js create mode 100644 src/Web/DOM/NamedNodeMap.purs diff --git a/.gitignore b/.gitignore index a56845c..f97a7cb 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,9 @@ package-lock.json /node_modules/ /output/ /generated-docs/ +/.pulp-cache/ +/.psc-package/ +/.psc* +/.purs* +/.psa* +/.spago diff --git a/packages.dhall b/packages.dhall new file mode 100644 index 0000000..4df38ef --- /dev/null +++ b/packages.dhall @@ -0,0 +1,104 @@ +{- +Welcome to your new Dhall package-set! + +Below are instructions for how to edit this file for most use +cases, so that you don't need to know Dhall to use it. + +## Use Cases + +Most will want to do one or both of these options: +1. Override/Patch a package's dependency +2. Add a package not already in the default package set + +This file will continue to work whether you use one or both options. +Instructions for each option are explained below. + +### Overriding/Patching a package + +Purpose: +- Change a package's dependency to a newer/older release than the + default package set's release +- Use your own modified version of some dependency that may + include new API, changed API, removed API by + using your custom git repo of the library rather than + the package set's repo + +Syntax: +where `entityName` is one of the following: +- dependencies +- repo +- version +------------------------------- +let upstream = -- +in upstream + with packageName.entityName = "new value" +------------------------------- + +Example: +------------------------------- +let upstream = -- +in upstream + with halogen.version = "master" + with halogen.repo = "https://example.com/path/to/git/repo.git" + + with halogen-vdom.version = "v4.0.0" + with halogen-vdom.dependencies = [ "extra-dependency" ] # halogen-vdom.dependencies +------------------------------- + +### Additions + +Purpose: +- Add packages that aren't already included in the default package set + +Syntax: +where `` is: +- a tag (i.e. "v4.0.0") +- a branch (i.e. "master") +- commit hash (i.e. "701f3e44aafb1a6459281714858fadf2c4c2a977") +------------------------------- +let upstream = -- +in upstream + with new-package-name = + { dependencies = + [ "dependency1" + , "dependency2" + ] + , repo = + "https://example.com/path/to/git/repo.git" + , version = + "" + } +------------------------------- + +Example: +------------------------------- +let upstream = -- +in upstream + with benchotron = + { dependencies = + [ "arrays" + , "exists" + , "profunctor" + , "strings" + , "quickcheck" + , "lcg" + , "transformers" + , "foldable-traversable" + , "exceptions" + , "node-fs" + , "node-buffer" + , "node-readline" + , "datetime" + , "now" + ] + , repo = + "https://github.com/hdgarrood/purescript-benchotron.git" + , version = + "v7.0.0" + } +------------------------------- +-} +let upstream = + https://github.com/purescript/package-sets/releases/download/psc-0.14.5-20220127/packages.dhall sha256:8ccbd53dbc7dbfd92a9cba9cca7a8bf36cb120a0a3e21106bf19a16d3ad6863e + +in upstream diff --git a/spago.dhall b/spago.dhall new file mode 100644 index 0000000..83d5eff --- /dev/null +++ b/spago.dhall @@ -0,0 +1,26 @@ +{- +Welcome to a Spago project! +You can edit this file as you like. + +Need help? See the following resources: +- Spago documentation: https://github.com/purescript/spago +- Dhall language tour: https://docs.dhall-lang.org/tutorials/Language-Tour.html + +When creating a new Spago project, you can use +`spago init --no-comments` or `spago init -C` +to generate this file without the comments in this block. +-} +{ name = "web-dom" +, dependencies = + [ "effect" + , "enums" + , "maybe" + , "newtype" + , "nullable" + , "prelude" + , "unsafe-coerce" + , "web-events" + ] +, packages = ./packages.dhall +, sources = [ "src/**/*.purs" ] +} diff --git a/src/Web/DOM/Attr.js b/src/Web/DOM/Attr.js new file mode 100644 index 0000000..2ba4e15 --- /dev/null +++ b/src/Web/DOM/Attr.js @@ -0,0 +1,29 @@ +"use strict"; + +var getEffProp = function (name) { + return function (node) { + return function () { + return node[name]; + }; + }; +}; + +exports.namespaceURI = getEffProp("namespaceURI"); + +exports.prefix = getEffProp("prefix"); + +exports.localName = getEffProp("localName"); + +exports.name = getEffProp("name"); + +exports.getValue = getEffProp("getValue"); + +exports.setValue = function (value) { + return function (attr) { + return function () { + attr.value = value; + }; + }; +}; + +exports._ownerElement = getEffProp("_ownerElement"); diff --git a/src/Web/DOM/Attr.purs b/src/Web/DOM/Attr.purs new file mode 100644 index 0000000..bf225a7 --- /dev/null +++ b/src/Web/DOM/Attr.purs @@ -0,0 +1,40 @@ +module Web.DOM.Attr + ( module Exports + , namespaceURI + , prefix + , localName + , name + , getValue + , setValue + , ownerElement + ) where + +import Prelude + +import Data.Maybe +import Data.Nullable (Nullable, toMaybe) +import Effect (Effect) +import Web.DOM.Internal.Types (Attr) as Exports +import Web.DOM.Internal.Types (Attr, Element) + + +foreign import namespaceURI :: Attr -> Effect String + +foreign import prefix :: Attr -> Effect String + +foreign import localName :: Attr -> Effect String + +foreign import name :: Attr -> Effect String + +foreign import getValue :: Attr -> Effect String + +foreign import setValue :: Attr -> String -> Effect Unit + +-- | The element the attribute belongs to, unless the attribute is not (yet) +-- | attached to an element. +ownerElement :: Attr -> Effect (Maybe Element) +ownerElement = map toMaybe <<< _ownerElement + +foreign import _ownerElement :: Attr -> Effect (Nullable Element) + + diff --git a/src/Web/DOM/Element.js b/src/Web/DOM/Element.js index d8ee8eb..1a3e464 100644 --- a/src/Web/DOM/Element.js +++ b/src/Web/DOM/Element.js @@ -71,6 +71,15 @@ exports.getElementsByClassName = function (classNames) { }; }; +var getEffProp = function (name) { + return function (element) { + return function () { + return element[name]; + }; + }; +}; +exports.attributes = getEffProp("attributes"); + exports.setAttribute = function (name) { return function (value) { return function (element) { diff --git a/src/Web/DOM/Element.purs b/src/Web/DOM/Element.purs index fcae553..53d9a5a 100644 --- a/src/Web/DOM/Element.purs +++ b/src/Web/DOM/Element.purs @@ -22,6 +22,7 @@ module Web.DOM.Element , getElementsByTagName , getElementsByTagNameNS , getElementsByClassName + , attributes , setAttribute , getAttribute , hasAttribute @@ -51,7 +52,7 @@ import Unsafe.Coerce (unsafeCoerce) import Web.DOM.ChildNode (ChildNode) import Web.DOM.DOMTokenList (DOMTokenList) import Web.DOM.Internal.Types (Element) as Exports -import Web.DOM.Internal.Types (Element, HTMLCollection, Node) +import Web.DOM.Internal.Types (Element, HTMLCollection, Node, NamedNodeMap) import Web.DOM.NonDocumentTypeChildNode (NonDocumentTypeChildNode) import Web.DOM.ParentNode (QuerySelector) as Exports import Web.DOM.ParentNode (ParentNode, QuerySelector) @@ -115,6 +116,8 @@ foreign import _getElementsByTagNameNS :: Nullable String -> String -> Element - foreign import getElementsByClassName :: String -> Element -> Effect HTMLCollection +foreign import attributes :: Element -> Effect NamedNodeMap + foreign import setAttribute :: String -> String -> Element -> Effect Unit getAttribute :: String -> Element -> Effect (Maybe String) diff --git a/src/Web/DOM/Internal/Types.purs b/src/Web/DOM/Internal/Types.purs index 3aee62c..7c68a35 100644 --- a/src/Web/DOM/Internal/Types.purs +++ b/src/Web/DOM/Internal/Types.purs @@ -5,3 +5,6 @@ foreign import data NodeList :: Type foreign import data Element :: Type foreign import data HTMLCollection :: Type + +foreign import data NamedNodeMap :: Type +foreign import data Attr :: Type \ No newline at end of file diff --git a/src/Web/DOM/NamedNodeMap.js b/src/Web/DOM/NamedNodeMap.js new file mode 100644 index 0000000..621fe12 --- /dev/null +++ b/src/Web/DOM/NamedNodeMap.js @@ -0,0 +1,55 @@ +"use strict"; + +exports.getAttributes = function (namedNodeMap) { + return function () { + return Array.prototype.slice.call(namedNodeMap.attributes); + }; +}; + +exports.getNamedItem = function (namedNodeMap) { + return function (qualifiedName) { + return function () { + return namedNodeMap.getNamedItem(qualifiedName); + }; + }; +}; + +exports.getNamedItemNS = function (namedNodeMap) { + return function (qualifiedName) { + return function () { + return namedNodeMap.getNamedItemNS(qualifiedName); + }; + }; +}; + +exports.setNamedItem = function (namedNodeMap) { + return function (qualifiedName) { + return function () { + return namedNodeMap.setNamedItem(qualifiedName); + }; + }; +}; + +exports.setNamedItemNS = function (namedNodeMap) { + return function (qualifiedName) { + return function () { + return namedNodeMap.setNamedItemNS(qualifiedName); + }; + }; +}; + +exports.removeNamedItem = function (namedNodeMap) { + return function (qualifiedName) { + return function () { + return namedNodeMap.removeNamedItem(qualifiedName); + }; + }; +}; + +exports.removeNamedItemNS = function (namedNodeMap) { + return function (qualifiedName) { + return function () { + return namedNodeMap.removeNamedItemNS(qualifiedName); + }; + }; +}; diff --git a/src/Web/DOM/NamedNodeMap.purs b/src/Web/DOM/NamedNodeMap.purs new file mode 100644 index 0000000..7419483 --- /dev/null +++ b/src/Web/DOM/NamedNodeMap.purs @@ -0,0 +1,30 @@ +module Web.DOM.NamedNodeMap + ( module Exports + , getAttributes + , getNamedItem + , getNamedItemNS + , setNamedItem + , setNamedItemNS + , removeNamedItem + , removeNamedItemNS + ) where + +import Prelude + +import Effect (Effect) +import Web.DOM.Internal.Types (NamedNodeMap, Attr) +import Web.DOM.Internal.Types (NamedNodeMap) as Exports + +foreign import getAttributes :: NamedNodeMap -> Effect (Array Attr) + +foreign import getNamedItem :: NamedNodeMap -> String -> Effect Attr + +foreign import getNamedItemNS :: NamedNodeMap -> String -> Effect Attr + +foreign import setNamedItem :: NamedNodeMap -> Attr -> Effect Unit + +foreign import setNamedItemNS :: NamedNodeMap -> Attr -> Effect Unit + +foreign import removeNamedItem :: NamedNodeMap -> String -> Effect Unit + +foreign import removeNamedItemNS :: NamedNodeMap -> String -> Effect Unit From 4d29fcdab31a58f2266ede194ddb2e35965ebc29 Mon Sep 17 00:00:00 2001 From: flip111 Date: Thu, 27 Jan 2022 23:53:37 +0100 Subject: [PATCH 02/15] Fix getting attributes --- src/Web/DOM/NamedNodeMap.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Web/DOM/NamedNodeMap.js b/src/Web/DOM/NamedNodeMap.js index 621fe12..bd408d9 100644 --- a/src/Web/DOM/NamedNodeMap.js +++ b/src/Web/DOM/NamedNodeMap.js @@ -2,7 +2,14 @@ exports.getAttributes = function (namedNodeMap) { return function () { - return Array.prototype.slice.call(namedNodeMap.attributes); + var attributes = []; + var attributes_length = namedNodeMap.length; + + for (var i = 0; i < attributes_length; i++) { + attributes.push(namedNodeMap.item(i)); + } + + return attributes; }; }; From 2b4175de8a03a898743ac577c7afc340c8ed9be2 Mon Sep 17 00:00:00 2001 From: flip111 Date: Fri, 28 Jan 2022 00:21:21 +0100 Subject: [PATCH 03/15] fix Attr --- src/Web/DOM/Attr.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Web/DOM/Attr.js b/src/Web/DOM/Attr.js index 2ba4e15..4cb5537 100644 --- a/src/Web/DOM/Attr.js +++ b/src/Web/DOM/Attr.js @@ -1,9 +1,9 @@ "use strict"; var getEffProp = function (name) { - return function (node) { + return function (attr) { return function () { - return node[name]; + return attr[name]; }; }; }; @@ -16,10 +16,14 @@ exports.localName = getEffProp("localName"); exports.name = getEffProp("name"); -exports.getValue = getEffProp("getValue"); +exports.getValue = function (attr) { + return function () { + return attr.value; + }; +}; -exports.setValue = function (value) { - return function (attr) { +exports.setValue = function (attr) { + return function (value) { return function () { attr.value = value; }; From 091964b1bccf7e9306c2cd277c3f33cb32844a13 Mon Sep 17 00:00:00 2001 From: flip111 Date: Fri, 28 Jan 2022 11:57:48 +0100 Subject: [PATCH 04/15] DOMTokenList --- src/Web/DOM/Attr.purs | 4 +-- src/Web/DOM/DOMTokenList.js | 47 ++++++++++++++++++++++++++++++----- src/Web/DOM/DOMTokenList.purs | 20 ++++++++++++--- 3 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/Web/DOM/Attr.purs b/src/Web/DOM/Attr.purs index bf225a7..3afb570 100644 --- a/src/Web/DOM/Attr.purs +++ b/src/Web/DOM/Attr.purs @@ -9,9 +9,9 @@ module Web.DOM.Attr , ownerElement ) where -import Prelude +import Prelude (Unit, map, (<<<)) -import Data.Maybe +import Data.Maybe (Maybe) import Data.Nullable (Nullable, toMaybe) import Effect (Effect) import Web.DOM.Internal.Types (Attr) as Exports diff --git a/src/Web/DOM/DOMTokenList.js b/src/Web/DOM/DOMTokenList.js index a8fe4fb..3a577fc 100644 --- a/src/Web/DOM/DOMTokenList.js +++ b/src/Web/DOM/DOMTokenList.js @@ -32,20 +32,55 @@ exports.toggle = function(list) { }; }; -exports.toggleForce = function(list) { +exports._item = function(list) { + return function(index) { + return function() { + return list.item(index); + }; + }; +}; + +exports.replace = function(list) { return function(token) { - return function(force) { + return function(newToken) { return function() { - return list.toggle(token, force); + return list.replace(token, newToken); }; }; }; }; -exports._item = function(list) { - return function(index) { +exports.supports = function(list) { + return function(token) { return function() { - return list.item(index); + return list.supports(token); + }; + }; +}; + +exports.tokens = function (domTokenList) { + return function () { + var tokens = []; + var tokens_length = domTokenList.length; + + for (var i = 0; i < tokens_length; i++) { + tokens.push(domTokenList.item(i)); + } + + return tokens; + }; +}; + +exports.setValue = function(list) { + return function(token) { + return function() { + return list.setValue(token); }; }; }; + +exports.getValue = function(list) { + return function() { + return list.getValue(); + }; +}; diff --git a/src/Web/DOM/DOMTokenList.purs b/src/Web/DOM/DOMTokenList.purs index 488597e..eb9fd6c 100644 --- a/src/Web/DOM/DOMTokenList.purs +++ b/src/Web/DOM/DOMTokenList.purs @@ -1,11 +1,15 @@ module Web.DOM.DOMTokenList ( DOMTokenList , add - , contains - , item , remove + , contains , toggle - , toggleForce + , tokens + , replace + , supports + , setValue + , getValue + , item ) where import Prelude @@ -24,7 +28,15 @@ foreign import contains :: DOMTokenList -> String -> Effect Boolean foreign import toggle :: DOMTokenList -> String -> Effect Boolean -foreign import toggleForce :: DOMTokenList -> String -> Boolean -> Effect Boolean +foreign import tokens :: DOMTokenList -> Effect (Array String) + +foreign import replace :: DOMTokenList -> String -> String -> Effect Unit + +foreign import supports :: DOMTokenList -> String -> Effect Boolean + +foreign import setValue :: DOMTokenList -> String -> Effect Unit + +foreign import getValue :: DOMTokenList -> Effect String foreign import _item :: DOMTokenList -> Int -> Effect (Nullable String) From e8de6bb6ac1ac904afa41546a556ada967ad118a Mon Sep 17 00:00:00 2001 From: flip111 Date: Sun, 9 Oct 2022 18:27:07 +0200 Subject: [PATCH 05/15] Updated to ps 0.15 --- packages.dhall | 3 ++- src/Web/DOM/Attr.js | 16 +++++++--------- src/Web/DOM/DOMTokenList.js | 10 +++++----- src/Web/DOM/DOMTokenList.purs | 3 +++ src/Web/DOM/Element.js | 2 +- src/Web/DOM/NamedNodeMap.js | 16 +++++++--------- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages.dhall b/packages.dhall index 4df38ef..c080a2d 100644 --- a/packages.dhall +++ b/packages.dhall @@ -99,6 +99,7 @@ in upstream ------------------------------- -} let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.14.5-20220127/packages.dhall sha256:8ccbd53dbc7dbfd92a9cba9cca7a8bf36cb120a0a3e21106bf19a16d3ad6863e + https://github.com/purescript/package-sets/releases/download/psc-0.15.4-20220924/packages.dhall + sha256:81067801c9959b544ac870b392b8520d516b32bddaf9c98b32d40037200c071f in upstream diff --git a/src/Web/DOM/Attr.js b/src/Web/DOM/Attr.js index 4cb5537..9e21cb4 100644 --- a/src/Web/DOM/Attr.js +++ b/src/Web/DOM/Attr.js @@ -1,5 +1,3 @@ -"use strict"; - var getEffProp = function (name) { return function (attr) { return function () { @@ -8,21 +6,21 @@ var getEffProp = function (name) { }; }; -exports.namespaceURI = getEffProp("namespaceURI"); +exports function namespaceURI = () => getEffProp("namespaceURI"); -exports.prefix = getEffProp("prefix"); +exports function prefix = () => getEffProp("prefix"); -exports.localName = getEffProp("localName"); +exports function localName = () => getEffProp("localName"); -exports.name = getEffProp("name"); +exports function name = () => getEffProp("name"); -exports.getValue = function (attr) { +exports function getValue(attr) { return function () { return attr.value; }; }; -exports.setValue = function (attr) { +exports function setValue (attr) { return function (value) { return function () { attr.value = value; @@ -30,4 +28,4 @@ exports.setValue = function (attr) { }; }; -exports._ownerElement = getEffProp("_ownerElement"); +exports function _ownerElement = () => getEffProp("_ownerElement"); diff --git a/src/Web/DOM/DOMTokenList.js b/src/Web/DOM/DOMTokenList.js index 1ea3a27..3e25ff6 100644 --- a/src/Web/DOM/DOMTokenList.js +++ b/src/Web/DOM/DOMTokenList.js @@ -48,7 +48,7 @@ export function _item(list) { }; } -exports function replace(list) { +export function replace(list) { return function(token) { return function(newToken) { return function() { @@ -58,7 +58,7 @@ exports function replace(list) { }; }; -exports function supports(list) { +export function supports(list) { return function(token) { return function() { return list.supports(token); @@ -66,7 +66,7 @@ exports function supports(list) { }; }; -exports function tokens(domTokenList) { +export function tokens(domTokenList) { return function () { var tokens = []; var tokens_length = domTokenList.length; @@ -79,7 +79,7 @@ exports function tokens(domTokenList) { }; }; -exports function setValue(list) { +export function setValue(list) { return function(token) { return function() { return list.setValue(token); @@ -87,7 +87,7 @@ exports function setValue(list) { }; }; -exports function getValue(list) { +export function getValue(list) { return function() { return list.getValue(); }; diff --git a/src/Web/DOM/DOMTokenList.purs b/src/Web/DOM/DOMTokenList.purs index eb9fd6c..6aa8d63 100644 --- a/src/Web/DOM/DOMTokenList.purs +++ b/src/Web/DOM/DOMTokenList.purs @@ -4,6 +4,7 @@ module Web.DOM.DOMTokenList , remove , contains , toggle + , toggleForce , tokens , replace , supports @@ -28,6 +29,8 @@ foreign import contains :: DOMTokenList -> String -> Effect Boolean foreign import toggle :: DOMTokenList -> String -> Effect Boolean +foreign import toggleForce :: DOMTokenList -> String -> Boolean -> Effect Boolean + foreign import tokens :: DOMTokenList -> Effect (Array String) foreign import replace :: DOMTokenList -> String -> String -> Effect Unit diff --git a/src/Web/DOM/Element.js b/src/Web/DOM/Element.js index afd9511..f1d8c02 100644 --- a/src/Web/DOM/Element.js +++ b/src/Web/DOM/Element.js @@ -76,7 +76,7 @@ var getEffProp = function (name) { }; }; }; -exports attributes = getEffProp("attributes"); +export attributes = getEffProp("attributes"); export function setAttribute(name) { return function (value) { diff --git a/src/Web/DOM/NamedNodeMap.js b/src/Web/DOM/NamedNodeMap.js index bd408d9..05adcc1 100644 --- a/src/Web/DOM/NamedNodeMap.js +++ b/src/Web/DOM/NamedNodeMap.js @@ -1,6 +1,4 @@ -"use strict"; - -exports.getAttributes = function (namedNodeMap) { +export function getAttributes(namedNodeMap) { return function () { var attributes = []; var attributes_length = namedNodeMap.length; @@ -13,7 +11,7 @@ exports.getAttributes = function (namedNodeMap) { }; }; -exports.getNamedItem = function (namedNodeMap) { +export function getNamedItem(namedNodeMap) { return function (qualifiedName) { return function () { return namedNodeMap.getNamedItem(qualifiedName); @@ -21,7 +19,7 @@ exports.getNamedItem = function (namedNodeMap) { }; }; -exports.getNamedItemNS = function (namedNodeMap) { +export function getNamedItemNS(namedNodeMap) { return function (qualifiedName) { return function () { return namedNodeMap.getNamedItemNS(qualifiedName); @@ -29,7 +27,7 @@ exports.getNamedItemNS = function (namedNodeMap) { }; }; -exports.setNamedItem = function (namedNodeMap) { +export function setNamedItem(namedNodeMap) { return function (qualifiedName) { return function () { return namedNodeMap.setNamedItem(qualifiedName); @@ -37,7 +35,7 @@ exports.setNamedItem = function (namedNodeMap) { }; }; -exports.setNamedItemNS = function (namedNodeMap) { +export function setNamedItemNS(namedNodeMap) { return function (qualifiedName) { return function () { return namedNodeMap.setNamedItemNS(qualifiedName); @@ -45,7 +43,7 @@ exports.setNamedItemNS = function (namedNodeMap) { }; }; -exports.removeNamedItem = function (namedNodeMap) { +export function removeNamedItem(namedNodeMap) { return function (qualifiedName) { return function () { return namedNodeMap.removeNamedItem(qualifiedName); @@ -53,7 +51,7 @@ exports.removeNamedItem = function (namedNodeMap) { }; }; -exports.removeNamedItemNS = function (namedNodeMap) { +export function removeNamedItemNS(namedNodeMap) { return function (qualifiedName) { return function () { return namedNodeMap.removeNamedItemNS(qualifiedName); From a5993329990761ebc68084b8f09f4942b27935af Mon Sep 17 00:00:00 2001 From: flip111 Date: Sun, 9 Oct 2022 19:03:58 +0200 Subject: [PATCH 06/15] Fix es6 exports --- src/Web/DOM/Attr.js | 14 +++++++------- src/Web/DOM/Element.js | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Web/DOM/Attr.js b/src/Web/DOM/Attr.js index 9e21cb4..d7a2970 100644 --- a/src/Web/DOM/Attr.js +++ b/src/Web/DOM/Attr.js @@ -6,21 +6,21 @@ var getEffProp = function (name) { }; }; -exports function namespaceURI = () => getEffProp("namespaceURI"); +export function namespaceURI = () => getEffProp("namespaceURI"); -exports function prefix = () => getEffProp("prefix"); +export function prefix = () => getEffProp("prefix"); -exports function localName = () => getEffProp("localName"); +export function localName = () => getEffProp("localName"); -exports function name = () => getEffProp("name"); +export function name = () => getEffProp("name"); -exports function getValue(attr) { +export function getValue(attr) { return function () { return attr.value; }; }; -exports function setValue (attr) { +export function setValue (attr) { return function (value) { return function () { attr.value = value; @@ -28,4 +28,4 @@ exports function setValue (attr) { }; }; -exports function _ownerElement = () => getEffProp("_ownerElement"); +export function _ownerElement = () => getEffProp("_ownerElement"); diff --git a/src/Web/DOM/Element.js b/src/Web/DOM/Element.js index f1d8c02..5236483 100644 --- a/src/Web/DOM/Element.js +++ b/src/Web/DOM/Element.js @@ -76,7 +76,7 @@ var getEffProp = function (name) { }; }; }; -export attributes = getEffProp("attributes"); +export const attributes = getEffProp("attributes"); export function setAttribute(name) { return function (value) { From 00114fabcf336a6b193fec77b4b8233dee2e591f Mon Sep 17 00:00:00 2001 From: flip111 Date: Sun, 9 Oct 2022 19:08:41 +0200 Subject: [PATCH 07/15] Fix export again --- src/Web/DOM/Attr.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Web/DOM/Attr.js b/src/Web/DOM/Attr.js index d7a2970..bee523f 100644 --- a/src/Web/DOM/Attr.js +++ b/src/Web/DOM/Attr.js @@ -6,13 +6,13 @@ var getEffProp = function (name) { }; }; -export function namespaceURI = () => getEffProp("namespaceURI"); +export const namespaceURI = getEffProp("namespaceURI"); -export function prefix = () => getEffProp("prefix"); +export const prefix = getEffProp("prefix"); -export function localName = () => getEffProp("localName"); +export const localName = getEffProp("localName"); -export function name = () => getEffProp("name"); +export const name = getEffProp("name"); export function getValue(attr) { return function () { @@ -28,4 +28,4 @@ export function setValue (attr) { }; }; -export function _ownerElement = () => getEffProp("_ownerElement"); +export const _ownerElement = getEffProp("_ownerElement"); From 3b5d62c781f9d162a1e002d4c8699c3fde04dd44 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 24 Sep 2023 15:15:38 +0100 Subject: [PATCH 08/15] Make eslint happy --- src/Web/DOM/Attr.js | 4 ++-- src/Web/DOM/DOMTokenList.js | 10 +++++----- src/Web/DOM/NamedNodeMap.js | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/Web/DOM/Attr.js b/src/Web/DOM/Attr.js index bee523f..1e78c56 100644 --- a/src/Web/DOM/Attr.js +++ b/src/Web/DOM/Attr.js @@ -18,7 +18,7 @@ export function getValue(attr) { return function () { return attr.value; }; -}; +} export function setValue (attr) { return function (value) { @@ -26,6 +26,6 @@ export function setValue (attr) { attr.value = value; }; }; -}; +} export const _ownerElement = getEffProp("_ownerElement"); diff --git a/src/Web/DOM/DOMTokenList.js b/src/Web/DOM/DOMTokenList.js index 3e25ff6..3757ccf 100644 --- a/src/Web/DOM/DOMTokenList.js +++ b/src/Web/DOM/DOMTokenList.js @@ -56,7 +56,7 @@ export function replace(list) { }; }; }; -}; +} export function supports(list) { return function(token) { @@ -64,7 +64,7 @@ export function supports(list) { return list.supports(token); }; }; -}; +} export function tokens(domTokenList) { return function () { @@ -77,7 +77,7 @@ export function tokens(domTokenList) { return tokens; }; -}; +} export function setValue(list) { return function(token) { @@ -85,10 +85,10 @@ export function setValue(list) { return list.setValue(token); }; }; -}; +} export function getValue(list) { return function() { return list.getValue(); }; -}; +} diff --git a/src/Web/DOM/NamedNodeMap.js b/src/Web/DOM/NamedNodeMap.js index 05adcc1..d16ce49 100644 --- a/src/Web/DOM/NamedNodeMap.js +++ b/src/Web/DOM/NamedNodeMap.js @@ -9,7 +9,7 @@ export function getAttributes(namedNodeMap) { return attributes; }; -}; +} export function getNamedItem(namedNodeMap) { return function (qualifiedName) { @@ -17,7 +17,7 @@ export function getNamedItem(namedNodeMap) { return namedNodeMap.getNamedItem(qualifiedName); }; }; -}; +} export function getNamedItemNS(namedNodeMap) { return function (qualifiedName) { @@ -25,7 +25,7 @@ export function getNamedItemNS(namedNodeMap) { return namedNodeMap.getNamedItemNS(qualifiedName); }; }; -}; +} export function setNamedItem(namedNodeMap) { return function (qualifiedName) { @@ -33,7 +33,7 @@ export function setNamedItem(namedNodeMap) { return namedNodeMap.setNamedItem(qualifiedName); }; }; -}; +} export function setNamedItemNS(namedNodeMap) { return function (qualifiedName) { @@ -41,7 +41,7 @@ export function setNamedItemNS(namedNodeMap) { return namedNodeMap.setNamedItemNS(qualifiedName); }; }; -}; +} export function removeNamedItem(namedNodeMap) { return function (qualifiedName) { @@ -49,7 +49,7 @@ export function removeNamedItem(namedNodeMap) { return namedNodeMap.removeNamedItem(qualifiedName); }; }; -}; +} export function removeNamedItemNS(namedNodeMap) { return function (qualifiedName) { @@ -57,4 +57,4 @@ export function removeNamedItemNS(namedNodeMap) { return namedNodeMap.removeNamedItemNS(qualifiedName); }; }; -}; +} From f997499a5bb200ed17b62e0cef5eb9eaae300d83 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 24 Sep 2023 15:20:57 +0100 Subject: [PATCH 09/15] Drop spago files for now --- packages.dhall | 105 ------------------------------------------------- spago.dhall | 26 ------------ 2 files changed, 131 deletions(-) delete mode 100644 packages.dhall delete mode 100644 spago.dhall diff --git a/packages.dhall b/packages.dhall deleted file mode 100644 index c080a2d..0000000 --- a/packages.dhall +++ /dev/null @@ -1,105 +0,0 @@ -{- -Welcome to your new Dhall package-set! - -Below are instructions for how to edit this file for most use -cases, so that you don't need to know Dhall to use it. - -## Use Cases - -Most will want to do one or both of these options: -1. Override/Patch a package's dependency -2. Add a package not already in the default package set - -This file will continue to work whether you use one or both options. -Instructions for each option are explained below. - -### Overriding/Patching a package - -Purpose: -- Change a package's dependency to a newer/older release than the - default package set's release -- Use your own modified version of some dependency that may - include new API, changed API, removed API by - using your custom git repo of the library rather than - the package set's repo - -Syntax: -where `entityName` is one of the following: -- dependencies -- repo -- version -------------------------------- -let upstream = -- -in upstream - with packageName.entityName = "new value" -------------------------------- - -Example: -------------------------------- -let upstream = -- -in upstream - with halogen.version = "master" - with halogen.repo = "https://example.com/path/to/git/repo.git" - - with halogen-vdom.version = "v4.0.0" - with halogen-vdom.dependencies = [ "extra-dependency" ] # halogen-vdom.dependencies -------------------------------- - -### Additions - -Purpose: -- Add packages that aren't already included in the default package set - -Syntax: -where `` is: -- a tag (i.e. "v4.0.0") -- a branch (i.e. "master") -- commit hash (i.e. "701f3e44aafb1a6459281714858fadf2c4c2a977") -------------------------------- -let upstream = -- -in upstream - with new-package-name = - { dependencies = - [ "dependency1" - , "dependency2" - ] - , repo = - "https://example.com/path/to/git/repo.git" - , version = - "" - } -------------------------------- - -Example: -------------------------------- -let upstream = -- -in upstream - with benchotron = - { dependencies = - [ "arrays" - , "exists" - , "profunctor" - , "strings" - , "quickcheck" - , "lcg" - , "transformers" - , "foldable-traversable" - , "exceptions" - , "node-fs" - , "node-buffer" - , "node-readline" - , "datetime" - , "now" - ] - , repo = - "https://github.com/hdgarrood/purescript-benchotron.git" - , version = - "v7.0.0" - } -------------------------------- --} -let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.15.4-20220924/packages.dhall - sha256:81067801c9959b544ac870b392b8520d516b32bddaf9c98b32d40037200c071f - -in upstream diff --git a/spago.dhall b/spago.dhall deleted file mode 100644 index 83d5eff..0000000 --- a/spago.dhall +++ /dev/null @@ -1,26 +0,0 @@ -{- -Welcome to a Spago project! -You can edit this file as you like. - -Need help? See the following resources: -- Spago documentation: https://github.com/purescript/spago -- Dhall language tour: https://docs.dhall-lang.org/tutorials/Language-Tour.html - -When creating a new Spago project, you can use -`spago init --no-comments` or `spago init -C` -to generate this file without the comments in this block. --} -{ name = "web-dom" -, dependencies = - [ "effect" - , "enums" - , "maybe" - , "newtype" - , "nullable" - , "prelude" - , "unsafe-coerce" - , "web-events" - ] -, packages = ./packages.dhall -, sources = [ "src/**/*.purs" ] -} From 6ec4a2e0bcda8759fc62af603a38825ca25f0ab5 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 24 Sep 2023 15:33:11 +0100 Subject: [PATCH 10/15] Extract names into separate modules, fix some attr stuff --- src/Web/DOM/Attr.js | 34 +++++----------------- src/Web/DOM/Attr.purs | 23 ++++++++------- src/Web/DOM/AttrName.purs | 12 ++++++++ src/Web/DOM/ClassName.purs | 12 ++++++++ src/Web/DOM/Element.purs | 42 +++------------------------ src/Web/DOM/ElementId.purs | 12 ++++++++ src/Web/DOM/NonElementParentNode.purs | 3 +- src/Web/DOM/PropName.purs | 16 ++++++++++ 8 files changed, 78 insertions(+), 76 deletions(-) create mode 100644 src/Web/DOM/AttrName.purs create mode 100644 src/Web/DOM/ClassName.purs create mode 100644 src/Web/DOM/ElementId.purs create mode 100644 src/Web/DOM/PropName.purs diff --git a/src/Web/DOM/Attr.js b/src/Web/DOM/Attr.js index 1e78c56..0a60b69 100644 --- a/src/Web/DOM/Attr.js +++ b/src/Web/DOM/Attr.js @@ -1,31 +1,13 @@ -var getEffProp = function (name) { - return function (attr) { - return function () { - return attr[name]; - }; - }; -}; - -export const namespaceURI = getEffProp("namespaceURI"); +export const _namespaceURI = (attr) => attr.namespaceURI; -export const prefix = getEffProp("prefix"); +export const _prefix = (attr) => attr.prefix; -export const localName = getEffProp("localName"); +export const localName = (attr) => attr.localName; -export const name = getEffProp("name"); +export const getValue = (attr) => () => attr.value; -export function getValue(attr) { - return function () { - return attr.value; - }; -} - -export function setValue (attr) { - return function (value) { - return function () { - attr.value = value; - }; - }; -} +export const setValue = (attr) => (value) => () => { + attr.value = value; +}; -export const _ownerElement = getEffProp("_ownerElement"); +export const _ownerElement = (attr) => () => attr.ownerElement; diff --git a/src/Web/DOM/Attr.purs b/src/Web/DOM/Attr.purs index 3afb570..737d33c 100644 --- a/src/Web/DOM/Attr.purs +++ b/src/Web/DOM/Attr.purs @@ -3,38 +3,39 @@ module Web.DOM.Attr , namespaceURI , prefix , localName - , name , getValue , setValue , ownerElement ) where -import Prelude (Unit, map, (<<<)) +import Prelude import Data.Maybe (Maybe) import Data.Nullable (Nullable, toMaybe) import Effect (Effect) +import Web.DOM.AttrName (AttrName) import Web.DOM.Internal.Types (Attr) as Exports import Web.DOM.Internal.Types (Attr, Element) +foreign import _namespaceURI :: Attr -> Nullable String -foreign import namespaceURI :: Attr -> Effect String +namespaceURI :: Attr -> Maybe String +namespaceURI attr = toMaybe (_namespaceURI attr) -foreign import prefix :: Attr -> Effect String +foreign import _prefix :: Attr -> Nullable String -foreign import localName :: Attr -> Effect String +prefix :: Attr -> Maybe String +prefix attr = toMaybe (_prefix attr) -foreign import name :: Attr -> Effect String +foreign import localName :: Attr -> AttrName foreign import getValue :: Attr -> Effect String foreign import setValue :: Attr -> String -> Effect Unit +foreign import _ownerElement :: Attr -> Effect (Nullable Element) + -- | The element the attribute belongs to, unless the attribute is not (yet) -- | attached to an element. ownerElement :: Attr -> Effect (Maybe Element) -ownerElement = map toMaybe <<< _ownerElement - -foreign import _ownerElement :: Attr -> Effect (Nullable Element) - - +ownerElement attr = map toMaybe (_ownerElement attr) diff --git a/src/Web/DOM/AttrName.purs b/src/Web/DOM/AttrName.purs new file mode 100644 index 0000000..52e5185 --- /dev/null +++ b/src/Web/DOM/AttrName.purs @@ -0,0 +1,12 @@ +module Web.DOM.AttrName where + +import Prelude + +import Data.Newtype (class Newtype) + +-- | A wrapper for attribute names. +newtype AttrName = AttrName String + +derive instance newtypeAttrName :: Newtype AttrName _ +derive newtype instance eqAttrName :: Eq AttrName +derive newtype instance ordAttrName :: Ord AttrName diff --git a/src/Web/DOM/ClassName.purs b/src/Web/DOM/ClassName.purs new file mode 100644 index 0000000..9657ec5 --- /dev/null +++ b/src/Web/DOM/ClassName.purs @@ -0,0 +1,12 @@ +module Web.DOM.ClassName where + +import Prelude + +import Data.Newtype (class Newtype) + +-- | A wrapper for strings which are used as CSS classes. +newtype ClassName = ClassName String + +derive instance newtypeClassName :: Newtype ClassName _ +derive newtype instance eqClassName :: Eq ClassName +derive newtype instance ordClassName :: Ord ClassName diff --git a/src/Web/DOM/Element.purs b/src/Web/DOM/Element.purs index d6e930a..ac32765 100644 --- a/src/Web/DOM/Element.purs +++ b/src/Web/DOM/Element.purs @@ -43,26 +43,24 @@ module Web.DOM.Element , DOMRect , ShadowRootInit , attachShadow - , AttrName(..) - , ClassName(..) - , ElementId(..) - , PropName(..) ) where import Prelude import Data.Maybe (Maybe) -import Data.Newtype (class Newtype) import Data.Nullable (Nullable, toMaybe, toNullable) import Effect (Effect) import Unsafe.Coerce (unsafeCoerce) +import Web.DOM.AttrName (AttrName) import Web.DOM.ChildNode (ChildNode) +import Web.DOM.ClassName (ClassName) import Web.DOM.DOMTokenList (DOMTokenList) +import Web.DOM.ElementId (ElementId) import Web.DOM.Internal.Types (Element) as Exports import Web.DOM.Internal.Types (Element, HTMLCollection, Node, NamedNodeMap) import Web.DOM.NonDocumentTypeChildNode (NonDocumentTypeChildNode) -import Web.DOM.ParentNode (QuerySelector) as Exports import Web.DOM.ParentNode (ParentNode, QuerySelector) +import Web.DOM.ParentNode (QuerySelector) as Exports import Web.DOM.ShadowRoot (ShadowRoot, ShadowRootMode) import Web.Event.EventTarget (EventTarget) import Web.Internal.FFI (unsafeReadProtoTagged) @@ -187,35 +185,3 @@ initToProps init = { } foreign import _attachShadow :: ShadowRootProps -> Element -> Effect ShadowRoot - --- | A wrapper for property names. --- | --- | The phantom type `value` describes the type of value which this property --- | requires. -newtype PropName :: Type -> Type -newtype PropName value = PropName String - -derive instance newtypePropName :: Newtype (PropName value) _ -derive newtype instance eqPropName :: Eq (PropName value) -derive newtype instance ordPropName :: Ord (PropName value) - --- | A wrapper for attribute names. -newtype AttrName = AttrName String - -derive instance newtypeAttrName :: Newtype AttrName _ -derive newtype instance eqAttrName :: Eq AttrName -derive newtype instance ordAttrName :: Ord AttrName - --- | A wrapper for strings which are used as CSS classes. -newtype ClassName = ClassName String - -derive instance newtypeClassName :: Newtype ClassName _ -derive newtype instance eqClassName :: Eq ClassName -derive newtype instance ordClassName :: Ord ClassName - --- | A wrapper for strings which are used as element identifiers. -newtype ElementId = ElementId String - -derive instance newtypeElementId :: Newtype ElementId _ -derive newtype instance eqElementId :: Eq ElementId -derive newtype instance ordElementId :: Ord ElementId diff --git a/src/Web/DOM/ElementId.purs b/src/Web/DOM/ElementId.purs new file mode 100644 index 0000000..0a25e7d --- /dev/null +++ b/src/Web/DOM/ElementId.purs @@ -0,0 +1,12 @@ +module Web.DOM.ElementId where + +import Prelude + +import Data.Newtype (class Newtype) + +-- | A wrapper for strings which are used as element identifiers. +newtype ElementId = ElementId String + +derive instance newtypeElementId :: Newtype ElementId _ +derive newtype instance eqElementId :: Eq ElementId +derive newtype instance ordElementId :: Ord ElementId diff --git a/src/Web/DOM/NonElementParentNode.purs b/src/Web/DOM/NonElementParentNode.purs index 72bd340..c069694 100644 --- a/src/Web/DOM/NonElementParentNode.purs +++ b/src/Web/DOM/NonElementParentNode.purs @@ -8,7 +8,8 @@ import Prelude import Data.Maybe (Maybe) import Data.Nullable (Nullable, toMaybe) import Effect (Effect) -import Web.DOM.Element (Element, ElementId) +import Web.DOM.Element (Element) +import Web.DOM.ElementId (ElementId) foreign import data NonElementParentNode :: Type diff --git a/src/Web/DOM/PropName.purs b/src/Web/DOM/PropName.purs new file mode 100644 index 0000000..5024849 --- /dev/null +++ b/src/Web/DOM/PropName.purs @@ -0,0 +1,16 @@ +module Web.DOM.PropName where + +import Prelude + +import Data.Newtype (class Newtype) + +-- | A wrapper for property names. +-- | +-- | The phantom type `value` describes the type of value which this property +-- | requires. +newtype PropName :: Type -> Type +newtype PropName value = PropName String + +derive instance newtypePropName :: Newtype (PropName value) _ +derive newtype instance eqPropName :: Eq (PropName value) +derive newtype instance ordPropName :: Ord (PropName value) From e60dde15c19d217c912eb93200b3443cb8899db7 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 24 Sep 2023 15:43:08 +0100 Subject: [PATCH 11/15] Fix some stuff in `DOMTokenList` --- src/Web/DOM/DOMTokenList.js | 55 +++++++++++++++++------------------ src/Web/DOM/DOMTokenList.purs | 29 +++++++++--------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/src/Web/DOM/DOMTokenList.js b/src/Web/DOM/DOMTokenList.js index 3757ccf..0c4e759 100644 --- a/src/Web/DOM/DOMTokenList.js +++ b/src/Web/DOM/DOMTokenList.js @@ -1,23 +1,33 @@ -export function add(list) { +export const length = (list) => () => list.length; + +export function _item(list) { + return function(index) { + return function() { + return list.item(index); + }; + }; +} + +export function contains(list) { return function(token) { return function() { - return list.add(token); + return list.contains(token); }; }; } -export function remove(list) { +export function add(list) { return function(token) { return function() { - return list.remove(token); + return list.add(token); }; }; } -export function contains(list) { +export function remove(list) { return function(token) { return function() { - return list.contains(token); + return list.remove(token); }; }; } @@ -40,14 +50,6 @@ export function toggleForce(list) { }; } -export function _item(list) { - return function(index) { - return function() { - return list.item(index); - }; - }; -} - export function replace(list) { return function(token) { return function(newToken) { @@ -66,29 +68,26 @@ export function supports(list) { }; } -export function tokens(domTokenList) { - return function () { - var tokens = []; - var tokens_length = domTokenList.length; - - for (var i = 0; i < tokens_length; i++) { - tokens.push(domTokenList.item(i)); - } - - return tokens; +export function getValue(list) { + return function() { + return list.value; }; } export function setValue(list) { return function(token) { return function() { - return list.setValue(token); + list.value = token; }; }; } -export function getValue(list) { - return function() { - return list.getValue(); +export function tokens(list) { + return function () { + const result = []; + for (const token of list.tokens) { + result.push(token); + } + return result; }; } diff --git a/src/Web/DOM/DOMTokenList.purs b/src/Web/DOM/DOMTokenList.purs index 6aa8d63..d2753d7 100644 --- a/src/Web/DOM/DOMTokenList.purs +++ b/src/Web/DOM/DOMTokenList.purs @@ -1,16 +1,17 @@ module Web.DOM.DOMTokenList ( DOMTokenList + , length + , item + , contains , add , remove - , contains , toggle , toggleForce - , tokens , replace , supports - , setValue , getValue - , item + , setValue + , tokens ) where import Prelude @@ -21,27 +22,29 @@ import Data.Nullable (Nullable, toMaybe) foreign import data DOMTokenList :: Type -foreign import add :: DOMTokenList -> String -> Effect Unit +foreign import length :: DOMTokenList -> Effect Int -foreign import remove :: DOMTokenList -> String -> Effect Unit +foreign import _item :: DOMTokenList -> Int -> Effect (Nullable String) + +item :: DOMTokenList -> Int -> Effect (Maybe String) +item index = map toMaybe <<< _item index foreign import contains :: DOMTokenList -> String -> Effect Boolean +foreign import add :: DOMTokenList -> String -> Effect Unit + +foreign import remove :: DOMTokenList -> String -> Effect Unit + foreign import toggle :: DOMTokenList -> String -> Effect Boolean foreign import toggleForce :: DOMTokenList -> String -> Boolean -> Effect Boolean -foreign import tokens :: DOMTokenList -> Effect (Array String) - foreign import replace :: DOMTokenList -> String -> String -> Effect Unit foreign import supports :: DOMTokenList -> String -> Effect Boolean -foreign import setValue :: DOMTokenList -> String -> Effect Unit - foreign import getValue :: DOMTokenList -> Effect String -foreign import _item :: DOMTokenList -> Int -> Effect (Nullable String) +foreign import setValue :: DOMTokenList -> String -> Effect Unit -item :: DOMTokenList -> Int -> Effect (Maybe String) -item index = map toMaybe <<< _item index +foreign import tokens :: DOMTokenList -> Effect (Array String) From 486fca0d1106449e40b484ab50134c87148c38e2 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 24 Sep 2023 15:44:49 +0100 Subject: [PATCH 12/15] Drop `getEffProp` introduction --- src/Web/DOM/Element.js | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/Web/DOM/Element.js b/src/Web/DOM/Element.js index 5236483..cf9800e 100644 --- a/src/Web/DOM/Element.js +++ b/src/Web/DOM/Element.js @@ -69,14 +69,7 @@ export function getElementsByClassName(classNames) { }; } -var getEffProp = function (name) { - return function (element) { - return function () { - return element[name]; - }; - }; -}; -export const attributes = getEffProp("attributes"); +export const attributes = (element) => () => element.attributes; export function setAttribute(name) { return function (value) { From c40010ca7c24c97f9016ed33daa9bdaabaaf21a4 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Tue, 24 Oct 2023 02:56:53 +0100 Subject: [PATCH 13/15] Use conventional argument order --- src/Web/DOM/NamedNodeMap.js | 47 +++++++++++++++++------------------ src/Web/DOM/NamedNodeMap.purs | 15 ++++++----- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/Web/DOM/NamedNodeMap.js b/src/Web/DOM/NamedNodeMap.js index d16ce49..d3d1963 100644 --- a/src/Web/DOM/NamedNodeMap.js +++ b/src/Web/DOM/NamedNodeMap.js @@ -1,60 +1,59 @@ +export const length = (namedNodeMap) => () => namedNodeMap.length; + export function getAttributes(namedNodeMap) { return function () { - var attributes = []; - var attributes_length = namedNodeMap.length; - - for (var i = 0; i < attributes_length; i++) { - attributes.push(namedNodeMap.item(i)); + const result = []; + for (const attr of namedNodeMap) { + result.push(attr); } - - return attributes; + return result; }; } -export function getNamedItem(namedNodeMap) { - return function (qualifiedName) { +export function getNamedItem(name) { + return function (namedNodeMap) { return function () { - return namedNodeMap.getNamedItem(qualifiedName); + return namedNodeMap.getNamedItem(name); }; }; } -export function getNamedItemNS(namedNodeMap) { - return function (qualifiedName) { +export function getNamedItemNS(name) { + return function (namedNodeMap) { return function () { - return namedNodeMap.getNamedItemNS(qualifiedName); + return namedNodeMap.getNamedItemNS(name); }; }; } -export function setNamedItem(namedNodeMap) { - return function (qualifiedName) { +export function setNamedItem(name) { + return function (namedNodeMap) { return function () { - return namedNodeMap.setNamedItem(qualifiedName); + return namedNodeMap.setNamedItem(name); }; }; } -export function setNamedItemNS(namedNodeMap) { - return function (qualifiedName) { +export function setNamedItemNS(name) { + return function (namedNodeMap) { return function () { - return namedNodeMap.setNamedItemNS(qualifiedName); + return namedNodeMap.setNamedItemNS(name); }; }; } -export function removeNamedItem(namedNodeMap) { - return function (qualifiedName) { +export function removeNamedItem(name) { + return function (namedNodeMap) { return function () { - return namedNodeMap.removeNamedItem(qualifiedName); + return namedNodeMap.removeNamedItem(name); }; }; } export function removeNamedItemNS(namedNodeMap) { - return function (qualifiedName) { + return function (name) { return function () { - return namedNodeMap.removeNamedItemNS(qualifiedName); + return namedNodeMap.removeNamedItemNS(name); }; }; } diff --git a/src/Web/DOM/NamedNodeMap.purs b/src/Web/DOM/NamedNodeMap.purs index 7419483..900f682 100644 --- a/src/Web/DOM/NamedNodeMap.purs +++ b/src/Web/DOM/NamedNodeMap.purs @@ -1,5 +1,6 @@ module Web.DOM.NamedNodeMap ( module Exports + , length , getAttributes , getNamedItem , getNamedItemNS @@ -15,16 +16,18 @@ import Effect (Effect) import Web.DOM.Internal.Types (NamedNodeMap, Attr) import Web.DOM.Internal.Types (NamedNodeMap) as Exports +foreign import length :: NamedNodeMap -> Effect Int + foreign import getAttributes :: NamedNodeMap -> Effect (Array Attr) -foreign import getNamedItem :: NamedNodeMap -> String -> Effect Attr +foreign import getNamedItem :: String -> NamedNodeMap -> Effect Attr -foreign import getNamedItemNS :: NamedNodeMap -> String -> Effect Attr +foreign import getNamedItemNS :: String -> NamedNodeMap -> Effect Attr -foreign import setNamedItem :: NamedNodeMap -> Attr -> Effect Unit +foreign import setNamedItem :: Attr -> NamedNodeMap -> Effect Unit -foreign import setNamedItemNS :: NamedNodeMap -> Attr -> Effect Unit +foreign import setNamedItemNS :: Attr -> NamedNodeMap -> Effect Unit -foreign import removeNamedItem :: NamedNodeMap -> String -> Effect Unit +foreign import removeNamedItem :: String -> NamedNodeMap -> Effect Unit -foreign import removeNamedItemNS :: NamedNodeMap -> String -> Effect Unit +foreign import removeNamedItemNS :: String -> NamedNodeMap -> Effect Unit From ddbd57a7ba641ade2b564296e7b0b9141dd6c9d7 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Tue, 24 Oct 2023 04:00:37 +0100 Subject: [PATCH 14/15] Use more types --- src/Web/DOM/Attr.purs | 10 ++++++---- src/Web/DOM/Document.purs | 9 +++++---- src/Web/DOM/Element.purs | 10 ++++++---- src/Web/DOM/MutationRecord.purs | 14 ++++++++------ src/Web/DOM/NamedNodeMap.js | 20 ++++++++++++-------- src/Web/DOM/NamedNodeMap.purs | 12 +++++++----- src/Web/DOM/NamespacePrefix.purs | 11 +++++++++++ src/Web/DOM/NamespaceURI.purs | 11 +++++++++++ src/Web/DOM/Node.purs | 12 +++++++----- 9 files changed, 73 insertions(+), 36 deletions(-) create mode 100644 src/Web/DOM/NamespacePrefix.purs create mode 100644 src/Web/DOM/NamespaceURI.purs diff --git a/src/Web/DOM/Attr.purs b/src/Web/DOM/Attr.purs index 737d33c..6b6a34f 100644 --- a/src/Web/DOM/Attr.purs +++ b/src/Web/DOM/Attr.purs @@ -16,15 +16,17 @@ import Effect (Effect) import Web.DOM.AttrName (AttrName) import Web.DOM.Internal.Types (Attr) as Exports import Web.DOM.Internal.Types (Attr, Element) +import Web.DOM.NamespacePrefix (NamespacePrefix) +import Web.DOM.NamespaceURI (NamespaceURI) -foreign import _namespaceURI :: Attr -> Nullable String +foreign import _namespaceURI :: Attr -> Nullable NamespaceURI -namespaceURI :: Attr -> Maybe String +namespaceURI :: Attr -> Maybe NamespaceURI namespaceURI attr = toMaybe (_namespaceURI attr) -foreign import _prefix :: Attr -> Nullable String +foreign import _prefix :: Attr -> Nullable NamespacePrefix -prefix :: Attr -> Maybe String +prefix :: Attr -> Maybe NamespacePrefix prefix attr = toMaybe (_prefix attr) foreign import localName :: Attr -> AttrName diff --git a/src/Web/DOM/Document.purs b/src/Web/DOM/Document.purs index 981f135..cedae05 100644 --- a/src/Web/DOM/Document.purs +++ b/src/Web/DOM/Document.purs @@ -49,6 +49,7 @@ import Web.DOM.DocumentType (DocumentType) import Web.DOM.Element (Element) import Web.DOM.HTMLCollection (HTMLCollection) import Web.DOM.Internal.Types (Node) +import Web.DOM.NamespaceURI (NamespaceURI(..)) import Web.DOM.NonElementParentNode (NonElementParentNode) import Web.DOM.ParentNode (ParentNode) import Web.DOM.ProcessingInstruction (ProcessingInstruction) @@ -101,18 +102,18 @@ foreign import _documentElement :: Document -> Effect (Nullable Element) foreign import getElementsByTagName :: String -> Document -> Effect HTMLCollection -getElementsByTagNameNS :: Maybe String -> String -> Document -> Effect HTMLCollection +getElementsByTagNameNS :: Maybe NamespaceURI -> String -> Document -> Effect HTMLCollection getElementsByTagNameNS = _getElementsByTagNameNS <<< toNullable -foreign import _getElementsByTagNameNS :: Nullable String -> String -> Document -> Effect HTMLCollection +foreign import _getElementsByTagNameNS :: Nullable NamespaceURI -> String -> Document -> Effect HTMLCollection foreign import getElementsByClassName :: String -> Document -> Effect HTMLCollection foreign import createElement :: String -> Document -> Effect Element -createElementNS :: Maybe String -> String -> Document -> Effect Element +createElementNS :: Maybe NamespaceURI -> String -> Document -> Effect Element createElementNS = _createElementNS <<< toNullable -foreign import _createElementNS :: Nullable String -> String -> Document -> Effect Element +foreign import _createElementNS :: Nullable NamespaceURI -> String -> Document -> Effect Element foreign import createDocumentFragment :: Document -> Effect DocumentFragment foreign import createTextNode :: String -> Document -> Effect Text foreign import createComment :: String -> Document -> Effect Comment diff --git a/src/Web/DOM/Element.purs b/src/Web/DOM/Element.purs index ac32765..b876e66 100644 --- a/src/Web/DOM/Element.purs +++ b/src/Web/DOM/Element.purs @@ -58,6 +58,8 @@ import Web.DOM.DOMTokenList (DOMTokenList) import Web.DOM.ElementId (ElementId) import Web.DOM.Internal.Types (Element) as Exports import Web.DOM.Internal.Types (Element, HTMLCollection, Node, NamedNodeMap) +import Web.DOM.NamespacePrefix (NamespacePrefix) +import Web.DOM.NamespaceURI (NamespaceURI) import Web.DOM.NonDocumentTypeChildNode (NonDocumentTypeChildNode) import Web.DOM.ParentNode (ParentNode, QuerySelector) import Web.DOM.ParentNode (QuerySelector) as Exports @@ -95,14 +97,14 @@ toParentNode = unsafeCoerce toEventTarget :: Element -> EventTarget toEventTarget = unsafeCoerce -namespaceURI :: Element -> Maybe String +namespaceURI :: Element -> Maybe NamespaceURI namespaceURI = toMaybe <<< _namespaceURI -prefix :: Element -> Maybe String +prefix :: Element -> Maybe NamespacePrefix prefix = toMaybe <<< _prefix -foreign import _namespaceURI :: Element -> Nullable String -foreign import _prefix :: Element -> Nullable String +foreign import _namespaceURI :: Element -> Nullable NamespaceURI +foreign import _prefix :: Element -> Nullable NamespacePrefix foreign import localName :: Element -> String foreign import tagName :: Element -> String diff --git a/src/Web/DOM/MutationRecord.purs b/src/Web/DOM/MutationRecord.purs index 98c7e4e..0709b54 100644 --- a/src/Web/DOM/MutationRecord.purs +++ b/src/Web/DOM/MutationRecord.purs @@ -15,11 +15,13 @@ module Web.DOM.MutationRecord import Prelude +import Data.Maybe (Maybe) +import Data.Nullable (Nullable, toMaybe) import Effect (Effect) +import Web.DOM.AttrName (AttrName) +import Web.DOM.NamespaceURI (NamespaceURI) import Web.DOM.Node (Node) import Web.DOM.NodeList (NodeList) -import Data.Maybe (Maybe) -import Data.Nullable (Nullable, toMaybe) foreign import data MutationRecord :: Type @@ -54,14 +56,14 @@ foreign import _previousSibling :: MutationRecord -> Effect (Nullable Node) previousSibling :: MutationRecord -> Effect (Maybe Node) previousSibling = map toMaybe <<< _previousSibling -foreign import _attributeName :: MutationRecord -> Effect (Nullable String) +foreign import _attributeName :: MutationRecord -> Effect (Nullable AttrName) -attributeName :: MutationRecord -> Effect (Maybe String) +attributeName :: MutationRecord -> Effect (Maybe AttrName) attributeName = map toMaybe <<< _attributeName -foreign import _attributeNamespace :: MutationRecord -> Effect (Nullable String) +foreign import _attributeNamespace :: MutationRecord -> Effect (Nullable NamespaceURI) -attributeNamespace :: MutationRecord -> Effect (Maybe String) +attributeNamespace :: MutationRecord -> Effect (Maybe NamespaceURI) attributeNamespace = map toMaybe <<< _attributeNamespace foreign import _oldValue :: MutationRecord -> Effect (Nullable String) diff --git a/src/Web/DOM/NamedNodeMap.js b/src/Web/DOM/NamedNodeMap.js index d3d1963..0b5f209 100644 --- a/src/Web/DOM/NamedNodeMap.js +++ b/src/Web/DOM/NamedNodeMap.js @@ -18,10 +18,12 @@ export function getNamedItem(name) { }; } -export function getNamedItemNS(name) { - return function (namedNodeMap) { - return function () { - return namedNodeMap.getNamedItemNS(name); +export function getNamedItemNS(namespace) { + return function (name) { + return function (namedNodeMap) { + return function () { + return namedNodeMap.getNamedItemNS(namespace, name); + }; }; }; } @@ -50,10 +52,12 @@ export function removeNamedItem(name) { }; } -export function removeNamedItemNS(namedNodeMap) { - return function (name) { - return function () { - return namedNodeMap.removeNamedItemNS(name); +export function removeNamedItemNS(namespace) { + return function (namedNodeMap) { + return function (name) { + return function () { + return namedNodeMap.removeNamedItemNS(namespace, name); + }; }; }; } diff --git a/src/Web/DOM/NamedNodeMap.purs b/src/Web/DOM/NamedNodeMap.purs index 900f682..bbcd55b 100644 --- a/src/Web/DOM/NamedNodeMap.purs +++ b/src/Web/DOM/NamedNodeMap.purs @@ -13,21 +13,23 @@ module Web.DOM.NamedNodeMap import Prelude import Effect (Effect) -import Web.DOM.Internal.Types (NamedNodeMap, Attr) +import Web.DOM.AttrName (AttrName) import Web.DOM.Internal.Types (NamedNodeMap) as Exports +import Web.DOM.Internal.Types (NamedNodeMap, Attr) +import Web.DOM.Namespace (Namespace) foreign import length :: NamedNodeMap -> Effect Int foreign import getAttributes :: NamedNodeMap -> Effect (Array Attr) -foreign import getNamedItem :: String -> NamedNodeMap -> Effect Attr +foreign import getNamedItem :: AttrName -> NamedNodeMap -> Effect Attr -foreign import getNamedItemNS :: String -> NamedNodeMap -> Effect Attr +foreign import getNamedItemNS :: Namespace -> AttrName -> NamedNodeMap -> Effect Attr foreign import setNamedItem :: Attr -> NamedNodeMap -> Effect Unit foreign import setNamedItemNS :: Attr -> NamedNodeMap -> Effect Unit -foreign import removeNamedItem :: String -> NamedNodeMap -> Effect Unit +foreign import removeNamedItem :: AttrName -> NamedNodeMap -> Effect Unit -foreign import removeNamedItemNS :: String -> NamedNodeMap -> Effect Unit +foreign import removeNamedItemNS :: Namespace -> AttrName -> NamedNodeMap -> Effect Unit diff --git a/src/Web/DOM/NamespacePrefix.purs b/src/Web/DOM/NamespacePrefix.purs new file mode 100644 index 0000000..5624d1e --- /dev/null +++ b/src/Web/DOM/NamespacePrefix.purs @@ -0,0 +1,11 @@ +module Web.DOM.NamespacePrefix where + +import Prelude + +import Data.Newtype (class Newtype) + +newtype NamespacePrefix = NamespacePrefix String + +derive instance Newtype NamespacePrefix _ +derive newtype instance Eq NamespacePrefix +derive newtype instance Ord NamespacePrefix diff --git a/src/Web/DOM/NamespaceURI.purs b/src/Web/DOM/NamespaceURI.purs new file mode 100644 index 0000000..45122be --- /dev/null +++ b/src/Web/DOM/NamespaceURI.purs @@ -0,0 +1,11 @@ +module Web.DOM.NamespaceURI where + +import Prelude + +import Data.Newtype (class Newtype) + +newtype NamespaceURI = NamespaceURI String + +derive instance Newtype NamespaceURI _ +derive newtype instance Eq NamespaceURI +derive newtype instance Ord NamespaceURI diff --git a/src/Web/DOM/Node.purs b/src/Web/DOM/Node.purs index 46d60cd..f528fce 100644 --- a/src/Web/DOM/Node.purs +++ b/src/Web/DOM/Node.purs @@ -45,6 +45,8 @@ import Web.DOM.Document (Document) import Web.DOM.Element (Element) import Web.DOM.Internal.Types (Node) as Exports import Web.DOM.Internal.Types (Node, NodeList) +import Web.DOM.NamespacePrefix (NamespacePrefix(..)) +import Web.DOM.NamespaceURI (NamespaceURI(..)) import Web.DOM.NodeType (NodeType) import Web.Event.EventTarget (EventTarget) import Web.Internal.FFI (unsafeReadProtoTagged) @@ -163,17 +165,17 @@ foreign import compareDocumentPositionBits :: Node -> Node -> Effect Int -- | Checks whether the second node is contained within the first foreign import contains :: Node -> Node -> Effect Boolean -lookupPrefix :: String -> Node -> Effect (Maybe String) +lookupPrefix :: NamespaceURI -> Node -> Effect (Maybe NamespacePrefix) lookupPrefix p = map toMaybe <<< _lookupPrefix p -foreign import _lookupPrefix :: String -> Node -> Effect (Nullable String) +foreign import _lookupPrefix :: NamespaceURI -> Node -> Effect (Nullable NamespacePrefix) -lookupNamespaceURI :: String -> Node -> Effect (Maybe String) +lookupNamespaceURI :: NamespacePrefix -> Node -> Effect (Maybe NamespaceURI) lookupNamespaceURI ns = map toMaybe <<< _lookupNamespaceURI ns -foreign import _lookupNamespaceURI :: String -> Node -> Effect (Nullable String) +foreign import _lookupNamespaceURI :: NamespacePrefix -> Node -> Effect (Nullable NamespaceURI) -foreign import isDefaultNamespace :: String -> Node -> Effect Boolean +foreign import isDefaultNamespace :: NamespaceURI -> Node -> Effect Boolean -- | Inserts the first node before the second as a child of the third node. foreign import insertBefore :: Node -> Node -> Node -> Effect Unit From b565234db45a5b77a95c66ce429ed53e88e5adf9 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Sun, 29 Oct 2023 01:10:58 +0000 Subject: [PATCH 15/15] Use more types still --- src/Web/DOM/Document.js | 2 +- src/Web/DOM/Document.purs | 29 +++++++++++++++-------- src/Web/DOM/Document/CompatMode.purs | 18 ++++++++++++++ src/Web/DOM/Element.purs | 35 ++++++++++++++-------------- src/Web/DOM/ElementName.purs | 12 ++++++++++ src/Web/DOM/NamedNodeMap.purs | 6 ++--- src/Web/DOM/Node.purs | 4 ++-- 7 files changed, 73 insertions(+), 33 deletions(-) create mode 100644 src/Web/DOM/Document/CompatMode.purs create mode 100644 src/Web/DOM/ElementName.purs diff --git a/src/Web/DOM/Document.js b/src/Web/DOM/Document.js index 5b2d823..27244d7 100644 --- a/src/Web/DOM/Document.js +++ b/src/Web/DOM/Document.js @@ -9,7 +9,7 @@ var getEffProp = function (name) { export const url = getEffProp("URL"); export const documentURI = getEffProp("documentURI"); export const origin = getEffProp("origin"); -export const compatMode = getEffProp("compatMode"); +export const _compatMode = getEffProp("compatMode"); export const characterSet = getEffProp("characterSet"); export const contentType = getEffProp("contentType"); export function _doctype(doc) { diff --git a/src/Web/DOM/Document.purs b/src/Web/DOM/Document.purs index cedae05..f108d49 100644 --- a/src/Web/DOM/Document.purs +++ b/src/Web/DOM/Document.purs @@ -39,17 +39,21 @@ module Web.DOM.Document import Prelude -import Data.Maybe (Maybe) +import Data.Maybe (Maybe, fromMaybe) import Data.Nullable (Nullable, toMaybe, toNullable) import Effect (Effect) import Unsafe.Coerce (unsafeCoerce) +import Web.DOM.ClassName (ClassName) import Web.DOM.Comment (Comment) +import Web.DOM.Document.CompatMode (CompatMode) +import Web.DOM.Document.CompatMode as CompatMode import Web.DOM.DocumentFragment (DocumentFragment) import Web.DOM.DocumentType (DocumentType) import Web.DOM.Element (Element) +import Web.DOM.ElementName (ElementName) import Web.DOM.HTMLCollection (HTMLCollection) import Web.DOM.Internal.Types (Node) -import Web.DOM.NamespaceURI (NamespaceURI(..)) +import Web.DOM.NamespaceURI (NamespaceURI) import Web.DOM.NonElementParentNode (NonElementParentNode) import Web.DOM.ParentNode (ParentNode) import Web.DOM.ProcessingInstruction (ProcessingInstruction) @@ -86,7 +90,12 @@ toEventTarget = unsafeCoerce foreign import url :: Document -> Effect String foreign import documentURI :: Document -> Effect String foreign import origin :: Document -> Effect String -foreign import compatMode :: Document -> Effect String + +foreign import _compatMode :: Document -> Effect String + +compatMode :: Document -> Effect CompatMode +compatMode doc = fromMaybe CompatMode.CSS1Compat <<< CompatMode.parse <$> _compatMode doc + foreign import characterSet :: Document -> Effect String foreign import contentType :: Document -> Effect String @@ -100,20 +109,20 @@ documentElement = map toMaybe <<< _documentElement foreign import _documentElement :: Document -> Effect (Nullable Element) -foreign import getElementsByTagName :: String -> Document -> Effect HTMLCollection +foreign import getElementsByTagName :: ElementName -> Document -> Effect HTMLCollection -getElementsByTagNameNS :: Maybe NamespaceURI -> String -> Document -> Effect HTMLCollection +getElementsByTagNameNS :: Maybe NamespaceURI -> ElementName -> Document -> Effect HTMLCollection getElementsByTagNameNS = _getElementsByTagNameNS <<< toNullable -foreign import _getElementsByTagNameNS :: Nullable NamespaceURI -> String -> Document -> Effect HTMLCollection -foreign import getElementsByClassName :: String -> Document -> Effect HTMLCollection +foreign import _getElementsByTagNameNS :: Nullable NamespaceURI -> ElementName -> Document -> Effect HTMLCollection +foreign import getElementsByClassName :: ClassName -> Document -> Effect HTMLCollection -foreign import createElement :: String -> Document -> Effect Element +foreign import createElement :: ElementName -> Document -> Effect Element -createElementNS :: Maybe NamespaceURI -> String -> Document -> Effect Element +createElementNS :: Maybe NamespaceURI -> ElementName -> Document -> Effect Element createElementNS = _createElementNS <<< toNullable -foreign import _createElementNS :: Nullable NamespaceURI -> String -> Document -> Effect Element +foreign import _createElementNS :: Nullable NamespaceURI -> ElementName -> Document -> Effect Element foreign import createDocumentFragment :: Document -> Effect DocumentFragment foreign import createTextNode :: String -> Document -> Effect Text foreign import createComment :: String -> Document -> Effect Comment diff --git a/src/Web/DOM/Document/CompatMode.purs b/src/Web/DOM/Document/CompatMode.purs new file mode 100644 index 0000000..355ee0d --- /dev/null +++ b/src/Web/DOM/Document/CompatMode.purs @@ -0,0 +1,18 @@ +module Web.DOM.Document.CompatMode where + +import Data.Maybe (Maybe(..)) + +data CompatMode + = BackCompat + | CSS1Compat + +parse ∷ String -> Maybe CompatMode +parse = case _ of + "BackCompat" -> Just BackCompat + "CSS1Compat" -> Just CSS1Compat + _ -> Nothing + +print ∷ CompatMode -> String +print = case _ of + BackCompat → "BackCompat" + CSS1Compat → "CSS1Compat" diff --git a/src/Web/DOM/Element.purs b/src/Web/DOM/Element.purs index b876e66..1914523 100644 --- a/src/Web/DOM/Element.purs +++ b/src/Web/DOM/Element.purs @@ -56,6 +56,7 @@ import Web.DOM.ChildNode (ChildNode) import Web.DOM.ClassName (ClassName) import Web.DOM.DOMTokenList (DOMTokenList) import Web.DOM.ElementId (ElementId) +import Web.DOM.ElementName (ElementName) import Web.DOM.Internal.Types (Element) as Exports import Web.DOM.Internal.Types (Element, HTMLCollection, Node, NamedNodeMap) import Web.DOM.NamespacePrefix (NamespacePrefix) @@ -105,8 +106,8 @@ prefix = toMaybe <<< _prefix foreign import _namespaceURI :: Element -> Nullable NamespaceURI foreign import _prefix :: Element -> Nullable NamespacePrefix -foreign import localName :: Element -> String -foreign import tagName :: Element -> String +foreign import localName :: Element -> ElementName +foreign import tagName :: Element -> ElementName foreign import id :: Element -> Effect ElementId foreign import setId :: ElementId -> Element -> Effect Unit @@ -114,12 +115,12 @@ foreign import className :: Element -> Effect ClassName foreign import classList :: Element -> Effect DOMTokenList foreign import setClassName :: ClassName -> Element -> Effect Unit -foreign import getElementsByTagName :: String -> Element -> Effect HTMLCollection +foreign import getElementsByTagName :: ElementName -> Element -> Effect HTMLCollection -getElementsByTagNameNS :: Maybe String -> String -> Element -> Effect HTMLCollection +getElementsByTagNameNS :: Maybe NamespaceURI -> ElementName -> Element -> Effect HTMLCollection getElementsByTagNameNS = _getElementsByTagNameNS <<< toNullable -foreign import _getElementsByTagNameNS :: Nullable String -> String -> Element -> Effect HTMLCollection +foreign import _getElementsByTagNameNS :: Nullable NamespaceURI -> ElementName -> Element -> Effect HTMLCollection foreign import getElementsByClassName :: ClassName -> Element -> Effect HTMLCollection @@ -167,23 +168,23 @@ type DOMRect = foreign import getBoundingClientRect :: Element -> Effect DOMRect -type ShadowRootInit = { - mode :: ShadowRootMode, - delegatesFocus :: Boolean -} +type ShadowRootInit = + { mode :: ShadowRootMode + , delegatesFocus :: Boolean + } attachShadow :: ShadowRootInit -> Element -> Effect ShadowRoot attachShadow = _attachShadow <<< initToProps -type ShadowRootProps = { - mode :: String, - delegatesFocus :: Boolean -} +type ShadowRootProps = + { mode :: String + , delegatesFocus :: Boolean + } initToProps :: ShadowRootInit -> ShadowRootProps -initToProps init = { - mode: show init.mode, - delegatesFocus: init.delegatesFocus -} +initToProps init = + { mode: show init.mode + , delegatesFocus: init.delegatesFocus + } foreign import _attachShadow :: ShadowRootProps -> Element -> Effect ShadowRoot diff --git a/src/Web/DOM/ElementName.purs b/src/Web/DOM/ElementName.purs new file mode 100644 index 0000000..67b2672 --- /dev/null +++ b/src/Web/DOM/ElementName.purs @@ -0,0 +1,12 @@ +module Web.DOM.ElementName where + +import Prelude + +import Data.Newtype (class Newtype) + +-- | A wrapper for element names. +newtype ElementName = ElementName String + +derive instance newtypeElementName :: Newtype ElementName _ +derive newtype instance eqElementName :: Eq ElementName +derive newtype instance ordElementName :: Ord ElementName diff --git a/src/Web/DOM/NamedNodeMap.purs b/src/Web/DOM/NamedNodeMap.purs index bbcd55b..2541f96 100644 --- a/src/Web/DOM/NamedNodeMap.purs +++ b/src/Web/DOM/NamedNodeMap.purs @@ -16,7 +16,7 @@ import Effect (Effect) import Web.DOM.AttrName (AttrName) import Web.DOM.Internal.Types (NamedNodeMap) as Exports import Web.DOM.Internal.Types (NamedNodeMap, Attr) -import Web.DOM.Namespace (Namespace) +import Web.DOM.NamespaceURI (NamespaceURI) foreign import length :: NamedNodeMap -> Effect Int @@ -24,7 +24,7 @@ foreign import getAttributes :: NamedNodeMap -> Effect (Array Attr) foreign import getNamedItem :: AttrName -> NamedNodeMap -> Effect Attr -foreign import getNamedItemNS :: Namespace -> AttrName -> NamedNodeMap -> Effect Attr +foreign import getNamedItemNS :: NamespaceURI -> AttrName -> NamedNodeMap -> Effect Attr foreign import setNamedItem :: Attr -> NamedNodeMap -> Effect Unit @@ -32,4 +32,4 @@ foreign import setNamedItemNS :: Attr -> NamedNodeMap -> Effect Unit foreign import removeNamedItem :: AttrName -> NamedNodeMap -> Effect Unit -foreign import removeNamedItemNS :: Namespace -> AttrName -> NamedNodeMap -> Effect Unit +foreign import removeNamedItemNS :: NamespaceURI -> AttrName -> NamedNodeMap -> Effect Unit diff --git a/src/Web/DOM/Node.purs b/src/Web/DOM/Node.purs index f528fce..034dca6 100644 --- a/src/Web/DOM/Node.purs +++ b/src/Web/DOM/Node.purs @@ -45,8 +45,8 @@ import Web.DOM.Document (Document) import Web.DOM.Element (Element) import Web.DOM.Internal.Types (Node) as Exports import Web.DOM.Internal.Types (Node, NodeList) -import Web.DOM.NamespacePrefix (NamespacePrefix(..)) -import Web.DOM.NamespaceURI (NamespaceURI(..)) +import Web.DOM.NamespacePrefix (NamespacePrefix) +import Web.DOM.NamespaceURI (NamespaceURI) import Web.DOM.NodeType (NodeType) import Web.Event.EventTarget (EventTarget) import Web.Internal.FFI (unsafeReadProtoTagged)