shakespeare-js 1.0.1 → 1.0.2
raw patch · 5 files changed
+34/−12 lines, 5 filesdep +aesondep ~basedep ~textPVP ok
version bump matches the API change (PVP)
Dependencies added: aeson
Dependency ranges changed: base, text
API changes (from Hackage documentation)
+ Text.Julius: RawJavascript :: Builder -> RawJavascript
+ Text.Julius: class RawJS a
+ Text.Julius: instance RawJS Builder
+ Text.Julius: instance RawJS Text
+ Text.Julius: instance RawJS [Char]
+ Text.Julius: instance ToJavascript RawJavascript
+ Text.Julius: instance ToJavascript Value
+ Text.Julius: newtype RawJavascript
+ Text.Julius: rawJS :: RawJS a => a -> RawJavascript
Files
- Text/Julius.hs +19/−2
- shakespeare-js.cabal +6/−4
- test.hs +1/−1
- test/ShakespeareJsTest.hs +7/−4
- test/juliuses/external1.julius +1/−1
Text/Julius.hs view
@@ -10,8 +10,6 @@ -- You might consider trying 'Text.Coffee', which compiles down to Javascript. -- -- Further reading: <http://www.yesodweb.com/book/templates>------ This module is currently in an identity crisis. Originally called Julius, now being changed to just Javascript (shakespeare-javascript) module Text.Julius ( -- * Functions -- ** Template-Reading Functions@@ -29,9 +27,11 @@ -- * Datatypes , JavascriptUrl , Javascript (..)+ , RawJavascript (..) -- * Typeclass for interpolated variables , ToJavascript (..)+ , RawJS (..) -- ** Rendering Functions , renderJavascript@@ -50,6 +50,8 @@ import qualified Data.Text as TS import qualified Data.Text.Lazy as TL import Text.Shakespeare+import Data.Aeson (Value)+import Data.Aeson.Encode (fromValue) renderJavascript :: Javascript -> TL.Text renderJavascript (Javascript b) = toLazyText b@@ -77,11 +79,26 @@ -- | A typeclass for types that can be interpolated in CoffeeScript templates. class ToJavascript a where toJavascript :: a -> Builder+#ifndef SAFER_INTERPOLATION instance ToJavascript [Char] where toJavascript = fromLazyText . TL.pack instance ToJavascript TS.Text where toJavascript = fromText instance ToJavascript TL.Text where toJavascript = fromLazyText instance ToJavascript Javascript where toJavascript = unJavascript instance ToJavascript Builder where toJavascript = id+#endif+instance ToJavascript Value where toJavascript = fromValue++newtype RawJavascript = RawJavascript Builder+instance ToJavascript RawJavascript where+ toJavascript (RawJavascript a) = a++class RawJS a where+ rawJS :: a -> RawJavascript++instance RawJS [Char] where rawJS = RawJavascript . fromLazyText . TL.pack+instance RawJS TS.Text where rawJS = RawJavascript . fromText+instance RawJS TL.Text where rawJS = RawJavascript . fromLazyText+instance RawJS Builder where rawJS = RawJavascript javascriptSettings :: Q ShakespeareSettings javascriptSettings = do
shakespeare-js.cabal view
@@ -1,5 +1,5 @@ name: shakespeare-js-version: 1.0.1+version: 1.0.2 license: MIT license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -31,7 +31,8 @@ build-depends: base >= 4 && < 5 , shakespeare >= 1.0.2 && < 1.1 , template-haskell- , text >= 0.7 && < 0.12+ , text >= 0.7+ , aeson >= 0.5 exposed-modules: Text.Julius@@ -64,11 +65,12 @@ ghc-options: -Wall build-depends: shakespeare-js , shakespeare- , base >= 4 && < 5+ , base , HUnit , hspec >= 1.3- , text >= 0.7 && < 0.12+ , text , template-haskell+ , aeson -- cabal bug -- if flag(test_coffee)
test.hs view
@@ -1,4 +1,4 @@-import Test.Hspec.Monadic+import Test.Hspec import ShakespeareJsTest (specs) main :: IO ()
test/ShakespeareJsTest.hs view
@@ -18,6 +18,7 @@ import qualified Data.List as L import Data.Text (Text, pack, unpack) import Data.Monoid (mappend) +import Data.Aeson (toJSON) join :: [String] -> String #ifdef TEST_COFFEE @@ -31,7 +32,7 @@ it "julius" $ do let var = "x=2" let urlp = (Home, [(pack "p", pack "q")]) - flip jelper [quote|['שלום', @{Home}, #{var}, '@?{urlp}', ^{jmixin} ]|] + flip jelper [quote|['שלום', @{Home}, #{rawJS var}, '@?{urlp}', ^{jmixin} ]|] $ intercalate " " [ "['שלום'," , "url, " ++ var ++ "," @@ -83,7 +84,7 @@ #ifdef TEST_COFFEE [quote|[%{Data.List.reverse foo}, %{L.reverse foo}, %{show double}, %{show int}]|] #else - [quote|[#{Data.List.reverse foo}, #{L.reverse foo}, #{show double}, #{show int}]|] + [quote|[#{rawJS $ Data.List.reverse foo}, #{rawJS $ L.reverse foo}, #{rawJS $ show double}, #{rawJS $ show int}]|] #endif @@ -96,10 +97,12 @@ it "dollar operator" $ do let val = (1 :: Int, (2 :: Int, 3 :: Int)) - jelper "2" [quote|#{ show $ fst $ snd val }|] - jelper "2" [quote|#{ show $ fst $ snd $ val}|] + jelper "2" [quote|#{ rawJS $ show $ fst $ snd val }|] + jelper "2" [quote|#{ rawJS $ show $ fst $ snd $ val}|] it "empty file" $ jelper "" [quote||] + + it "JSON data" $ jelper "\"Hello \\\"World!\\\"\"" [julius|#{toJSON "Hello \"World!\""}|]
test/juliuses/external1.julius view
@@ -1,5 +1,5 @@ שלום-#{var}+#{rawJS var} @{Home} @?{urlp} ^{jmixin}