miso-examples 1.8.5.0 → 1.8.6.0
raw patch · 4 files changed
+140/−34 lines, 4 files
Files
- canvas2d/Main.hs +30/−3
- file-reader/Main.hs +22/−0
- miso-examples.cabal +31/−31
- three/Main.hs +57/−0
canvas2d/Main.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} module Main where@@ -19,9 +20,9 @@ main :: IO () main = do [sun, moon, earth] <- replicateM 3 newImage- setSrc sun "https://mdn.mozillademos.org/files/1456/Canvas_sun.png"- setSrc moon "https://mdn.mozillademos.org/files/1443/Canvas_moon.png"- setSrc earth "https://mdn.mozillademos.org/files/1429/Canvas_earth.png"+ setSrc sun "https://7b40c187-5088-4a99-9118-37d20a2f875e.mdnplay.dev/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations/canvas_sun.png"+ setSrc moon "https://7b40c187-5088-4a99-9118-37d20a2f875e.mdnplay.dev/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations/canvas_moon.png"+ setSrc earth "https://7b40c187-5088-4a99-9118-37d20a2f875e.mdnplay.dev/en-US/docs/Web/API/Canvas_API/Tutorial/Basic_animations/canvas_earth.png" startApp App { initialAction = GetTime , update = updateModel (sun,moon,earth) , ..@@ -70,6 +71,31 @@ drawImage sun 0 0 300 300 ctx pure GetTime +#ifndef ghcjs_HOST_OS+foreign import javascript unsafe "((x) => { x.globalCompositeOperation = 'destination-over'; })"+ setGlobalCompositeOperation :: Context -> IO ()++foreign import javascript unsafe "((x, y, z, w) => { w.drawImage(x,y,z); })"+ drawImage' :: Image -> Double -> Double -> Context -> IO ()++foreign import javascript unsafe "(() => { return document.getElementById('canvas').getContext('2d'); })"+ getCtx :: IO Context++foreign import javascript unsafe "(() => { return new Image(); })"+ newImage :: IO Image++foreign import javascript unsafe "((x, y) => { x.src = y; })"+ setSrc :: Image -> MisoString -> IO ()++foreign import javascript unsafe "(() => { return new Date(); })"+ newDate :: IO JSVal++foreign import javascript unsafe "((x) => { return x.getSeconds(); })"+ getSecs :: JSVal -> IO Double++foreign import javascript unsafe "((x) => { return x.getMilliseconds(); })"+ getMillis :: JSVal -> IO Double+#else foreign import javascript unsafe "$1.globalCompositeOperation = 'destination-over';" setGlobalCompositeOperation :: Context -> IO () @@ -93,4 +119,5 @@ foreign import javascript unsafe "$r = $1.getMilliseconds();" getMillis :: JSVal -> IO Double+#endif
file-reader/Main.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -12,7 +13,11 @@ import Control.Concurrent.MVar import GHCJS.Types+#ifndef ghcjs_HOST_OS+import GHC.JS.Foreign.Callback+#else import GHCJS.Foreign.Callback+#endif -- | Model data Model@@ -71,6 +76,22 @@ , div_ [] [ text info ] ] +#ifndef ghcjs_HOST_OS+foreign import javascript unsafe "(() => { return new FileReader(); })"+ newReader :: IO JSVal++foreign import javascript unsafe "((x) => { return x.files[0]; })"+ getFile :: JSVal -> IO JSVal++foreign import javascript unsafe "((x, y) => { x.onload = y; })"+ setOnLoad :: JSVal -> Callback (IO ()) -> IO ()++foreign import javascript unsafe "((x) => { return x.result; })"+ getResult :: JSVal -> IO MisoString++foreign import javascript unsafe "((x, y) => { x.readAsText(y); })"+ readText :: JSVal -> JSVal -> IO ()+#else foreign import javascript unsafe "$r = new FileReader();" newReader :: IO JSVal @@ -85,3 +106,4 @@ foreign import javascript unsafe "$1.readAsText($2);" readText :: JSVal -> JSVal -> IO ()+#endif
miso-examples.cabal view
@@ -1,16 +1,16 @@+cabal-version: 2.2 name: miso-examples-version: 1.8.5.0+version: 1.8.6.0 category: Web, Miso, Data Structures-author: David M. Johnson <djohnson.m@gmail.com>-maintainer: David M. Johnson <djohnson.m@gmail.com>+author: David M. Johnson <code@dmj.io>+maintainer: David M. Johnson <code@dmj.io> homepage: http://github.com/dmjio/miso-copyright: Copyright (c) 2017-2020 David M. Johnson+copyright: Copyright (c) 2016-2025 David M. Johnson bug-reports: https://github.com/dmjio/miso/issues build-type: Simple-cabal-version: 1.22-synopsis: A tasty Haskell front-end framework+synopsis: A tasty Haskell front-end web framework description: Examples for miso-license: BSD3+license: BSD-3-Clause license-file: LICENSE extra-source-files:@@ -31,6 +31,8 @@ Cross compile to iOS executable simple+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !flag(jsaddle)@@ -48,8 +50,6 @@ containers, miso, transformers- default-language:- Haskell2010 if flag(ios) cpp-options: -DIOS@@ -62,6 +62,8 @@ jsaddle-warp executable todo-mvc+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript) && !flag(jsaddle)@@ -82,8 +84,6 @@ containers, miso, transformers- default-language:- Haskell2010 if flag(ios) cpp-options: -DIOS@@ -96,6 +96,8 @@ jsaddle-warp executable threejs+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript)@@ -113,10 +115,10 @@ ghcjs-base, containers, miso- default-language:- Haskell2010 executable file-reader+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript)@@ -134,10 +136,10 @@ containers, ghcjs-base, miso- default-language:- Haskell2010 executable xhr+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript)@@ -155,10 +157,10 @@ containers, ghcjs-base, miso- default-language:- Haskell2010 executable canvas2d+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript)@@ -175,10 +177,10 @@ base < 5, ghcjs-base, miso- default-language:- Haskell2010 executable router+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript) && !flag(jsaddle)@@ -200,8 +202,6 @@ miso, servant, transformers- default-language:- Haskell2010 if flag(ios) cpp-options: -DIOS@@ -214,6 +214,8 @@ jsaddle-warp executable websocket+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript) && !flag(jsaddle)@@ -234,8 +236,6 @@ containers, miso, transformers- default-language:- Haskell2010 if flag(ios) cpp-options: -DIOS@@ -248,6 +248,8 @@ jsaddle-warp executable mario+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript) && !flag(jsaddle)@@ -282,10 +284,10 @@ if !flag(ios) build-depends: jsaddle-warp- default-language:- Haskell2010 executable svg+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript)@@ -304,10 +306,10 @@ containers, aeson, miso- default-language:- Haskell2010 executable compose-update+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript)@@ -322,10 +324,10 @@ build-depends: base < 5, miso- default-language:- Haskell2010 executable mathml+ default-language:+ Haskell2010 main-is: Main.hs if !impl(ghcjs) && !arch(javascript)@@ -340,5 +342,3 @@ build-depends: base < 5, miso- default-language:- Haskell2010
three/Main.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Main where@@ -97,6 +98,61 @@ updateModel _ (SetTime m) _ = m <# pure GetTime +#ifndef ghcjs_HOST_OS+foreign import javascript unsafe "(() => { return new Stats(); })"+ newStats :: IO JSVal++foreign import javascript unsafe "((x) => { x.begin(); })"+ statsBegin :: JSVal -> IO ()++foreign import javascript unsafe "((x) => { x.end(); })"+ statsEnd :: JSVal -> IO ()++foreign import javascript unsafe "((x) => { x.showPanel(0); })"+ showPanel :: JSVal -> IO ()++foreign import javascript unsafe "(() => { return new THREE.Scene();})"+ newScene :: IO JSVal++foreign import javascript unsafe "((x,y,z) => { return new THREE.BoxGeometry(x,y,z); })"+ newBoxGeometry :: Int -> Int -> Int -> IO JSVal++foreign import javascript unsafe "(() => { return new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 ); })"+ newCamera :: IO JSVal++foreign import javascript unsafe "((x,y) => { return new THREE.Mesh( x, y ); })"+ newMesh :: JSVal -> JSVal -> IO JSVal++foreign import javascript unsafe "(() => { return new THREE.MeshBasicMaterial( { color: 0x00ff00 } ); })"+ newMeshBasicMaterial :: IO JSVal++foreign import javascript unsafe "((x) => { return new THREE.WebGLRenderer({canvas:x, antialias : true}); })"+ newRenderer :: JSVal -> IO JSVal++foreign import javascript unsafe "((x) => { x.setSize( window.innerWidth, window.innerHeight ); })"+ setSize :: JSVal -> IO ()++foreign import javascript unsafe "((x, y) => { x.add(y); })"+ addToScene :: JSVal -> JSVal -> IO ()++foreign import javascript unsafe "((x, y) => { x.position.z = y; })"+ cameraZ :: JSVal -> Int -> IO ()++foreign import javascript unsafe "((a, y) => { a.rotation.x += y; })"+ rotateX :: JSVal -> Double -> IO ()++foreign import javascript unsafe "((x, a) => { x.rotation.y += a; })"+ rotateY :: JSVal -> Double -> IO ()++foreign import javascript unsafe "((x, y, z) => { x.render(y, z); })"+ render :: JSVal -> JSVal -> JSVal -> IO ()++foreign import javascript unsafe "((x, y) => { x.position.z = y; })"+ positionCamera :: JSVal -> Double -> IO ()++foreign import javascript unsafe "((x, y) => { x.appendChild( y.domElement ); })"+ addStatsToDOM :: JSVal -> JSVal -> IO ()+#else foreign import javascript unsafe "$r = new Stats();" newStats :: IO JSVal @@ -150,3 +206,4 @@ foreign import javascript unsafe "$1.appendChild( $2.domElement );" addStatsToDOM :: JSVal -> JSVal -> IO ()+#endif