From 11920da6b08d23f2e33d6de988af1a849b69bab3 Mon Sep 17 00:00:00 2001 From: Luigi Sgro Date: Wed, 6 Jan 2021 15:56:45 +0100 Subject: [PATCH 1/4] Update compiler version to rc5 in CI config --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2e4c7a1..66354b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: - uses: purescript-contrib/setup-purescript@main with: - purescript: "0.14.0-rc3" + purescript: "0.14.0-rc5" - uses: actions/setup-node@v1 with: From 4697783db4fae53748e4ebe6f9e689e6995857a0 Mon Sep 17 00:00:00 2001 From: Luigi Sgro Date: Wed, 6 Jan 2021 16:04:58 +0100 Subject: [PATCH 2/4] Add ShadowRoot module --- src/Web/DOM/ShadowRoot.js | 19 +++++++++++++++ src/Web/DOM/ShadowRoot.purs | 47 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/Web/DOM/ShadowRoot.js create mode 100644 src/Web/DOM/ShadowRoot.purs diff --git a/src/Web/DOM/ShadowRoot.js b/src/Web/DOM/ShadowRoot.js new file mode 100644 index 0000000..349805f --- /dev/null +++ b/src/Web/DOM/ShadowRoot.js @@ -0,0 +1,19 @@ +"use strict"; + +exports._attachShadow = function(props) { + return function (el) { + return function() { + return el.attachShadow(props); + }; + }; +}; + +exports._mode = function (el) { + return el.mode; +}; + +exports.host = function (el) { + return function() { + return el.host; + }; +}; diff --git a/src/Web/DOM/ShadowRoot.purs b/src/Web/DOM/ShadowRoot.purs new file mode 100644 index 0000000..75e468f --- /dev/null +++ b/src/Web/DOM/ShadowRoot.purs @@ -0,0 +1,47 @@ +module Web.DOM.ShadowRoot + ( ShadowRoot + , ShadowRootMode (..) + , attachShadow + , host + , mode + , toNode + ) where + +import Prelude +import Data.Maybe (Maybe(..)) +import Effect (Effect) +import Unsafe.Coerce (unsafeCoerce) +import Web.DOM.Internal.Types (Element, Node) + +foreign import data ShadowRoot :: Type + +data ShadowRootMode = Open | Closed + +instance showShadowRootMode :: Show ShadowRootMode where + show Open = "open" + show Closed = "closed" + +attachShadow :: ShadowRootMode -> Element -> Effect ShadowRoot +attachShadow = _attachShadow <<< modeToProps + +mode :: ShadowRoot -> Maybe ShadowRootMode +mode = modeFromString <<< _mode + +foreign import host :: ShadowRoot -> Effect Element + +toNode :: ShadowRoot -> Node +toNode = unsafeCoerce + +type ShadowRootProps = { mode :: String } + +foreign import _attachShadow :: ShadowRootProps -> Element -> Effect ShadowRoot +foreign import _mode :: ShadowRoot -> String + +modeToProps :: ShadowRootMode -> ShadowRootProps +modeToProps m = { mode: (show m) } + +modeFromString :: String -> Maybe ShadowRootMode +modeFromString m = case m of + "open" -> Just Open + "closed" -> Just Closed + _ -> Nothing From 38dcd765bca9beb3ace6596879d8a5d9f554a0d5 Mon Sep 17 00:00:00 2001 From: Luigi Sgro Date: Wed, 6 Jan 2021 16:55:54 +0100 Subject: [PATCH 3/4] Move element-related members to Element module --- src/Web/DOM/Element.js | 8 ++++++++ src/Web/DOM/Element.purs | 24 ++++++++++++++++++++++++ src/Web/DOM/ShadowRoot.js | 8 -------- src/Web/DOM/ShadowRoot.purs | 10 ---------- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/Web/DOM/Element.js b/src/Web/DOM/Element.js index cf7dd6a..3ca6e1d 100644 --- a/src/Web/DOM/Element.js +++ b/src/Web/DOM/Element.js @@ -170,3 +170,11 @@ exports.clientHeight = function (el) { return el.clientHeight; }; }; + +exports._attachShadow = function(props) { + return function (el) { + return function() { + return el.attachShadow(props); + }; + }; +}; diff --git a/src/Web/DOM/Element.purs b/src/Web/DOM/Element.purs index 58e9ed1..1013e73 100644 --- a/src/Web/DOM/Element.purs +++ b/src/Web/DOM/Element.purs @@ -36,6 +36,8 @@ module Web.DOM.Element , clientLeft , clientWidth , clientHeight + , ShadowRootInit + , attachShadow ) where import Prelude @@ -50,6 +52,7 @@ import Web.DOM.Internal.Types (Element) as Exports import Web.DOM.Internal.Types (Element, HTMLCollection, Node) import Web.DOM.NonDocumentTypeChildNode (NonDocumentTypeChildNode) import Web.DOM.ParentNode (ParentNode) +import Web.DOM.ShadowRoot (ShadowRoot, ShadowRootMode) import Web.Event.EventTarget (EventTarget) import Web.Internal.FFI (unsafeReadProtoTagged) @@ -130,3 +133,24 @@ foreign import clientTop :: Element -> Effect Number foreign import clientLeft :: Element -> Effect Number foreign import clientWidth :: Element -> Effect Number foreign import clientHeight :: Element -> Effect Number + +type ShadowRootInit = { + mode :: ShadowRootMode, + delegatesFocus :: Boolean +} + +type ShadowRootProps = { + mode :: String, + delegatesFocus :: Boolean +} + +attachShadow :: ShadowRootInit -> Element -> Effect ShadowRoot +attachShadow = _attachShadow <<< initToProps + +initToProps :: ShadowRootInit -> ShadowRootProps +initToProps init = { + mode: show init.mode, + delegatesFocus: init.delegatesFocus +} + +foreign import _attachShadow :: ShadowRootProps -> Element -> Effect ShadowRoot diff --git a/src/Web/DOM/ShadowRoot.js b/src/Web/DOM/ShadowRoot.js index 349805f..24a0cba 100644 --- a/src/Web/DOM/ShadowRoot.js +++ b/src/Web/DOM/ShadowRoot.js @@ -1,13 +1,5 @@ "use strict"; -exports._attachShadow = function(props) { - return function (el) { - return function() { - return el.attachShadow(props); - }; - }; -}; - exports._mode = function (el) { return el.mode; }; diff --git a/src/Web/DOM/ShadowRoot.purs b/src/Web/DOM/ShadowRoot.purs index 75e468f..45dfbf0 100644 --- a/src/Web/DOM/ShadowRoot.purs +++ b/src/Web/DOM/ShadowRoot.purs @@ -1,7 +1,6 @@ module Web.DOM.ShadowRoot ( ShadowRoot , ShadowRootMode (..) - , attachShadow , host , mode , toNode @@ -21,9 +20,6 @@ instance showShadowRootMode :: Show ShadowRootMode where show Open = "open" show Closed = "closed" -attachShadow :: ShadowRootMode -> Element -> Effect ShadowRoot -attachShadow = _attachShadow <<< modeToProps - mode :: ShadowRoot -> Maybe ShadowRootMode mode = modeFromString <<< _mode @@ -32,14 +28,8 @@ foreign import host :: ShadowRoot -> Effect Element toNode :: ShadowRoot -> Node toNode = unsafeCoerce -type ShadowRootProps = { mode :: String } - -foreign import _attachShadow :: ShadowRootProps -> Element -> Effect ShadowRoot foreign import _mode :: ShadowRoot -> String -modeToProps :: ShadowRootMode -> ShadowRootProps -modeToProps m = { mode: (show m) } - modeFromString :: String -> Maybe ShadowRootMode modeFromString m = case m of "open" -> Just Open From 9741c14e7d0e67ee64f56acfb1bcb9332f235a44 Mon Sep 17 00:00:00 2001 From: Luigi Sgro Date: Wed, 6 Jan 2021 17:09:57 +0100 Subject: [PATCH 4/4] Improve code style --- src/Web/DOM/Element.purs | 6 +++--- src/Web/DOM/ShadowRoot.purs | 20 +++++++++----------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/Web/DOM/Element.purs b/src/Web/DOM/Element.purs index 1013e73..5c1c10c 100644 --- a/src/Web/DOM/Element.purs +++ b/src/Web/DOM/Element.purs @@ -139,14 +139,14 @@ type ShadowRootInit = { delegatesFocus :: Boolean } +attachShadow :: ShadowRootInit -> Element -> Effect ShadowRoot +attachShadow = _attachShadow <<< initToProps + type ShadowRootProps = { mode :: String, delegatesFocus :: Boolean } -attachShadow :: ShadowRootInit -> Element -> Effect ShadowRoot -attachShadow = _attachShadow <<< initToProps - initToProps :: ShadowRootInit -> ShadowRootProps initToProps init = { mode: show init.mode, diff --git a/src/Web/DOM/ShadowRoot.purs b/src/Web/DOM/ShadowRoot.purs index 45dfbf0..c51e89a 100644 --- a/src/Web/DOM/ShadowRoot.purs +++ b/src/Web/DOM/ShadowRoot.purs @@ -1,9 +1,9 @@ module Web.DOM.ShadowRoot ( ShadowRoot , ShadowRootMode (..) + , toNode , host , mode - , toNode ) where import Prelude @@ -14,6 +14,9 @@ import Web.DOM.Internal.Types (Element, Node) foreign import data ShadowRoot :: Type +toNode :: ShadowRoot -> Node +toNode = unsafeCoerce + data ShadowRootMode = Open | Closed instance showShadowRootMode :: Show ShadowRootMode where @@ -22,16 +25,11 @@ instance showShadowRootMode :: Show ShadowRootMode where mode :: ShadowRoot -> Maybe ShadowRootMode mode = modeFromString <<< _mode + where + modeFromString = case _ of + "open" -> Just Open + "closed" -> Just Closed + _ -> Nothing foreign import host :: ShadowRoot -> Effect Element - -toNode :: ShadowRoot -> Node -toNode = unsafeCoerce - foreign import _mode :: ShadowRoot -> String - -modeFromString :: String -> Maybe ShadowRootMode -modeFromString m = case m of - "open" -> Just Open - "closed" -> Just Closed - _ -> Nothing