Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: CI

on:
push:
branches: [master]
pull_request:
branches: [master]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- uses: purescript-contrib/setup-purescript@main
with:
purescript: "0.14.0-rc3"

- uses: actions/setup-node@v1
with:
node-version: "10"

- name: Install dependencies
run: |
npm install -g bower
npm install
bower install --production

- name: Build source
run: npm run-script build

- name: Run tests
run: |
bower install
npm run-script test --if-present
19 changes: 19 additions & 0 deletions src/Web/DOM/ShadowRoot.js
Original file line number Diff line number Diff line change
@@ -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;
};
};
47 changes: 47 additions & 0 deletions src/Web/DOM/ShadowRoot.purs
Original file line number Diff line number Diff line change
@@ -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