diff --git a/src/Html/Styled/Lazy.elm b/src/Html/Styled/Lazy.elm index ccf77716..4a44ae67 100644 --- a/src/Html/Styled/Lazy.elm +++ b/src/Html/Styled/Lazy.elm @@ -1,7 +1,11 @@ -module Html.Styled.Lazy exposing (lazy, lazy2, lazy3, lazy4, lazy5, lazy6, lazy7) +module Html.Styled.Lazy exposing + ( lazy, lazy2, lazy3, lazy4, lazy5, lazy6, lazy7 + , lazyWithNonce, lazy2WithNonce, lazy3WithNonce, lazy4WithNonce, lazy5WithNonce, lazy6WithNonce + ) -{-| **NOTE:** `Html.Lazy` goes up to `lazy8`, but `Html.Styled.Lazy` can only go -up to `lazy7` because it uses one of the arguments to track styling info. +{-| **NOTE:** `Html.Lazy` goes up to `lazy8` and `lazy7WithNonce`, but +`Html.Styled.Lazy` can only go up to `lazy7` and `lazy6WithNonce` because it +uses one of the arguments to track styling info. Since all Elm functions are pure we have a guarantee that the same input @@ -17,6 +21,7 @@ This is a really cheap test and often makes things a lot faster, but definitely benchmark to be sure! @docs lazy, lazy2, lazy3, lazy4, lazy5, lazy6, lazy7 +@docs lazyWithNonce, lazy2WithNonce, lazy3WithNonce, lazy4WithNonce, lazy5WithNonce, lazy6WithNonce -} @@ -78,3 +83,51 @@ lazy6 = lazy7 : (a -> b -> c -> d -> e -> f -> g -> Html msg) -> a -> b -> c -> d -> e -> f -> g -> Html msg lazy7 = VirtualDom.Styled.lazy7 + + +{-| Same as [`lazy`](#lazy) but adds a +[nonce](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce) +to the style tag so that it is compliant with the Content Security Policy of +your website. + +If you don't need a nonce, you should use [`lazy`](#lazy). + +-} +lazyWithNonce : String -> (a -> Html msg) -> a -> Html msg +lazyWithNonce = + VirtualDom.Styled.lazyWithNonce + + +{-| Same as `lazy2` but adds a nonce to the style tag. +-} +lazy2WithNonce : String -> (a -> b -> Html msg) -> a -> b -> Html msg +lazy2WithNonce = + VirtualDom.Styled.lazy2WithNonce + + +{-| Same as `lazy3` but adds a nonce to the style tag. +-} +lazy3WithNonce : String -> (a -> b -> c -> Html msg) -> a -> b -> c -> Html msg +lazy3WithNonce = + VirtualDom.Styled.lazy3WithNonce + + +{-| Same as `lazy4` but adds a nonce to the style tag. +-} +lazy4WithNonce : String -> (a -> b -> c -> d -> Html msg) -> a -> b -> c -> d -> Html msg +lazy4WithNonce = + VirtualDom.Styled.lazy4WithNonce + + +{-| Same as `lazy5` but adds a nonce to the style tag. +-} +lazy5WithNonce : String -> (a -> b -> c -> d -> e -> Html msg) -> a -> b -> c -> d -> e -> Html msg +lazy5WithNonce = + VirtualDom.Styled.lazy5WithNonce + + +{-| Same as `lazy6` but adds a nonce to the style tag. +-} +lazy6WithNonce : String -> (a -> b -> c -> d -> e -> f -> Html msg) -> a -> b -> c -> d -> e -> f -> Html msg +lazy6WithNonce = + VirtualDom.Styled.lazy6WithNonce diff --git a/src/VirtualDom/Styled.elm b/src/VirtualDom/Styled.elm index 37297ad4..527d1256 100644 --- a/src/VirtualDom/Styled.elm +++ b/src/VirtualDom/Styled.elm @@ -17,11 +17,17 @@ module VirtualDom.Styled exposing , keyedNodeNS , lazy , lazy2 + , lazy2WithNonce , lazy3 + , lazy3WithNonce , lazy4 + , lazy4WithNonce , lazy5 + , lazy5WithNonce , lazy6 + , lazy6WithNonce , lazy7 + , lazyWithNonce , makeSnippet , map , mapAttribute @@ -256,6 +262,78 @@ lazyHelp7 fn arg1 arg2 arg3 arg4 arg5 arg6 arg7 = |> toUnstyled +lazyWithNonce : String -> (a -> Node msg) -> a -> Node msg +lazyWithNonce nonce fn arg = + VirtualDom.lazy3 lazyHelpWithNonce nonce fn arg + |> Unstyled + + +lazyHelpWithNonce : String -> (a -> Node msg) -> a -> VirtualDom.Node msg +lazyHelpWithNonce nonce fn arg = + fn arg + |> toNonceUnstyled nonce + + +lazy2WithNonce : String -> (a -> b -> Node msg) -> a -> b -> Node msg +lazy2WithNonce nonce fn arg1 arg2 = + VirtualDom.lazy4 lazyHelp2WithNonce nonce fn arg1 arg2 + |> Unstyled + + +lazyHelp2WithNonce : String -> (a -> b -> Node msg) -> a -> b -> VirtualDom.Node msg +lazyHelp2WithNonce nonce fn arg1 arg2 = + fn arg1 arg2 + |> toNonceUnstyled nonce + + +lazy3WithNonce : String -> (a -> b -> c -> Node msg) -> a -> b -> c -> Node msg +lazy3WithNonce nonce fn arg1 arg2 arg3 = + VirtualDom.lazy5 lazyHelp3WithNonce nonce fn arg1 arg2 arg3 + |> Unstyled + + +lazyHelp3WithNonce : String -> (a -> b -> c -> Node msg) -> a -> b -> c -> VirtualDom.Node msg +lazyHelp3WithNonce nonce fn arg1 arg2 arg3 = + fn arg1 arg2 arg3 + |> toNonceUnstyled nonce + + +lazy4WithNonce : String -> (a -> b -> c -> d -> Node msg) -> a -> b -> c -> d -> Node msg +lazy4WithNonce nonce fn arg1 arg2 arg3 arg4 = + VirtualDom.lazy6 lazyHelp4WithNonce nonce fn arg1 arg2 arg3 arg4 + |> Unstyled + + +lazyHelp4WithNonce : String -> (a -> b -> c -> d -> Node msg) -> a -> b -> c -> d -> VirtualDom.Node msg +lazyHelp4WithNonce nonce fn arg1 arg2 arg3 arg4 = + fn arg1 arg2 arg3 arg4 + |> toNonceUnstyled nonce + + +lazy5WithNonce : String -> (a -> b -> c -> d -> e -> Node msg) -> a -> b -> c -> d -> e -> Node msg +lazy5WithNonce nonce fn arg1 arg2 arg3 arg4 arg5 = + VirtualDom.lazy7 lazyHelp5WithNonce nonce fn arg1 arg2 arg3 arg4 arg5 + |> Unstyled + + +lazyHelp5WithNonce : String -> (a -> b -> c -> d -> e -> Node msg) -> a -> b -> c -> d -> e -> VirtualDom.Node msg +lazyHelp5WithNonce nonce fn arg1 arg2 arg3 arg4 arg5 = + fn arg1 arg2 arg3 arg4 arg5 + |> toNonceUnstyled nonce + + +lazy6WithNonce : String -> (a -> b -> c -> d -> e -> f -> Node msg) -> a -> b -> c -> d -> e -> f -> Node msg +lazy6WithNonce nonce fn arg1 arg2 arg3 arg4 arg5 arg6 = + VirtualDom.lazy8 lazyHelp6WithNonce nonce fn arg1 arg2 arg3 arg4 arg5 arg6 + |> Unstyled + + +lazyHelp6WithNonce : String -> (a -> b -> c -> d -> e -> f -> Node msg) -> a -> b -> c -> d -> e -> f -> VirtualDom.Node msg +lazyHelp6WithNonce nonce fn arg1 arg2 arg3 arg4 arg5 arg6 = + fn arg1 arg2 arg3 arg4 arg5 arg6 + |> toNonceUnstyled nonce + + type Scope = Scope String