packages feed

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 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}