diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a4733f..ad2136d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Notable changes to this project are documented in this file. The format is based Breaking changes: +- `clipboard` now returns `Effect (Maybe Clipboard)` instead of `Effect Clipboard`. + This is because insecure contexts don't have the clipboard available, see + [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/clipboard). + New features: Bugfixes: diff --git a/src/Web/Clipboard/Clipboard.js b/src/Web/Clipboard/Clipboard.js index 1808ff6..ff60356 100644 --- a/src/Web/Clipboard/Clipboard.js +++ b/src/Web/Clipboard/Clipboard.js @@ -1,6 +1,12 @@ -export function clipboard(navigator) { +export function clipboardWrapper(just, nothing, navigator) { return function () { - return navigator.clipboard; + var clp = navigator.clipboard; + if (typeof clp === "undefined") { + // This is expected if we don't have a SecureContext (see w3 spec). + return nothing; + } else { + return just(clp); + } }; } diff --git a/src/Web/Clipboard/Clipboard.purs b/src/Web/Clipboard/Clipboard.purs index 6d3c6af..916a683 100644 --- a/src/Web/Clipboard/Clipboard.purs +++ b/src/Web/Clipboard/Clipboard.purs @@ -1,8 +1,16 @@ -module Web.Clipboard where +module Web.Clipboard + ( clipboard + , Clipboard + , toEventTarget + , fromEventTarget + , readText + , writeText + ) where import Prelude -import Data.Maybe (Maybe) +import Data.Function.Uncurried (Fn3, runFn3) +import Data.Maybe (Maybe(..)) import Effect (Effect) import Promise (Promise) import Unsafe.Coerce (unsafeCoerce) @@ -10,7 +18,10 @@ import Web.Event.Internal.Types (EventTarget) import Web.HTML (Navigator) import Web.Internal.FFI (unsafeReadProtoTagged) -foreign import clipboard :: Navigator -> Effect Clipboard +foreign import clipboardWrapper :: Fn3 (forall a. a -> Maybe a) (forall a. Maybe a) Navigator (Effect (Maybe Clipboard)) + +clipboard :: Navigator -> Effect (Maybe Clipboard) +clipboard = runFn3 clipboardWrapper Just Nothing foreign import data Clipboard :: Type