miso 1.8.0.0 → 1.8.1.0
raw patch · 6 files changed
+45/−133 lines, 6 filesdep −jsaddle-warpdep −jsaddle-wkwebviewPVP ok
version bump matches the API change (PVP)
Dependencies removed: jsaddle-warp, jsaddle-wkwebview
API changes (from Hackage documentation)
Files
- README.md +3/−3
- exe/Main.hs +0/−66
- jsbits/delegate.js +15/−4
- miso.cabal +22/−59
- src/Miso.hs +4/−0
- src/Miso/Html/Types.hs +1/−1
README.md view
@@ -130,9 +130,9 @@ Write a `default.nix` (this will fetch a recent version of `miso`). `miso` will provide you with a working `nixpkgs` named `pkgs`. `callCabal2nix` will automatically produce a nix expression that builds your cabal file. ```nix-with (import (builtins.fetchTarball {- url = "https://github.com/dmjio/miso/archive/ea25964565074e73d4052b56b60b6e101fa08bc5.tar.gz";- sha256 = "1yb9yvc0ln4yn1jk2k5kwwa1s32310abawz40yd8cqqkm1z7w6wg";+with (import (builtins.fetchGit {+ url = "https://github.com/dmjio/miso";+ ref = "refs/tags/1.8"; }) {}); pkgs.haskell.packages.ghcjs.callCabal2nix "app" ./. {} ```
− exe/Main.hs
@@ -1,66 +0,0 @@--- | Haskell language pragma-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE CPP #-}---- | Haskell module declaration-module Main where---- | Miso framework import-import Miso-import Miso.String--import Control.Monad.IO.Class--#ifdef IOS-import Language.Javascript.JSaddle.WKWebView as JSaddle--runApp :: JSM () -> IO ()-runApp = JSaddle.run-#else-import Language.Javascript.JSaddle.Warp as JSaddle--runApp :: JSM () -> IO ()-runApp = JSaddle.run 8080-#endif---- | Type synonym for an application model-type Model = Int---- | Sum type for application events-data Action- = AddOne- | SubtractOne- | NoOp- | SayHelloWorld- deriving (Show, Eq)---- | Entry point for a miso application-main :: IO ()-main = runApp $ miso $ \_ -> App {..}- where- initialAction = SayHelloWorld -- initial action to be executed on application load- model = 0 -- initial model- update = updateModel -- update function- view = viewModel -- view function- events = defaultEvents -- default delegated events- subs = [] -- empty subscription list- mountPoint = Nothing -- mount point for application (Nothing defaults to 'body')- logLevel = Off -- Used to copy DOM into VDOM, applies only to `miso` function---- | Updates model, optionally introduces side effects-updateModel :: Action -> Model -> Effect Action Model-updateModel AddOne m = noEff (m + 1)-updateModel SubtractOne m = noEff (m - 1)-updateModel NoOp m = noEff m-updateModel SayHelloWorld m = m <# do- liftIO (putStrLn "Hello World") >> pure NoOp---- | Constructs a virtual DOM from a model-viewModel :: Model -> View Action-viewModel x = div_ [] [- button_ [ onClick AddOne ] [ text "+" ]- , text (ms x)- , button_ [ onClick SubtractOne ] [ text "-" ]- , rawHtml "<div><p>hey expandable!</div></p>"- ]
jsbits/delegate.js view
@@ -106,7 +106,7 @@ /* If obj is a list-like object */ var newObj;- if (obj instanceof Array) {+ if (obj instanceof Array || ('length' in obj && obj['localName'] !== 'select')) { newObj = []; for (var i = 0; i < obj.length; i++) newObj.push(window['objectToJSON']([], obj[i]));@@ -115,15 +115,26 @@ /* If obj is a non-list-like object */ newObj = {};- var isInput = obj['localName'] === 'input';- for (var i in obj){+ for (var i in getAllPropertyNames(obj)){ /* bug in safari, throws TypeError if the following fields are referenced on a checkbox */ /* https://stackoverflow.com/a/25569117/453261 */ /* https://html.spec.whatwg.org/multipage/input.html#do-not-apply */- if (isInput && (i === 'selectionDirection' || i === 'selectionStart' || i === 'selectionEnd'))+ if ((obj['localName'] === 'input') && (i === 'selectionDirection' || i === 'selectionStart' || i === 'selectionEnd')) continue; if (typeof obj[i] == 'string' || typeof obj[i] == 'number' || typeof obj[i] == 'boolean') newObj[i] = obj[i]; } return newObj;+};++/* get static and dynamic properties */+function getAllPropertyNames(obj) {+ var props = {}, i = 0;+ do {+ var names = Object.getOwnPropertyNames(obj);+ for (i = 0; i < names.length; i++) {+ props [names[i]] = null;+ }+ } while (obj = Object.getPrototypeOf(obj));+ return props; };
miso.cabal view
@@ -1,5 +1,5 @@ name: miso-version: 1.8.0.0+version: 1.8.1.0 category: Web, Miso, Data Structures license: BSD3 license-file: LICENSE@@ -38,37 +38,6 @@ description: Cross compile to iOS -executable simple- main-is:- Main.hs- if !impl(ghcjs) && !flag(jsaddle)- buildable: False- else- ghcjs-options:- -dedupe- cpp-options:- -DGHCJS_BROWSER- hs-source-dirs:- exe- build-depends:- aeson,- base < 5,- containers,- miso,- transformers- default-language:- Haskell2010- if flag(ios)- cpp-options:- -DIOS- ghc-options:- -threaded- build-depends:- jsaddle-wkwebview- else- build-depends:- jsaddle-warp- executable tests main-is: Main.hs@@ -140,18 +109,26 @@ Miso.Svg.Attribute Miso.Svg.Element Miso.Svg.Event- Miso.TypeLevel Miso.Types Miso.Mathml Miso.Mathml.Element Miso.String Miso.WebSocket+ if !impl(ghcjs)+ exposed-modules:+ Miso.TypeLevel other-modules: Miso.Concurrent ghc-options: -Wall hs-source-dirs: src+ if impl(ghcjs)+ hs-source-dirs:+ ghcjs-src+ else+ hs-source-dirs:+ ghc-src build-depends: aeson, base < 5,@@ -164,39 +141,25 @@ lucid, network-uri, servant,- servant-lucid, tagsoup, text, transformers- if impl(ghcjs) || flag (jsaddle)- if impl(ghcjs)- build-depends:- ghcjs-base- if flag(jsaddle)- if flag (ios)- cpp-options:- -DIOS- else- js-sources:- jsbits/diff.js- jsbits/delegate.js- jsbits/isomorphic.js- jsbits/util.js+ if impl(ghcjs) build-depends:- containers,- scientific,- unordered-containers,- transformers,- vector+ ghcjs-base else build-depends:- vector+ servant-lucid+ if impl(ghcjs) || flag (jsaddle)+ if flag (ios)+ cpp-options:+ -DIOS if impl(ghcjs)- hs-source-dirs:- ghcjs-src- else- hs-source-dirs:- ghc-src+ js-sources:+ jsbits/diff.js+ jsbits/delegate.js+ jsbits/isomorphic.js+ jsbits/util.js source-repository head type: git
src/Miso.hs view
@@ -26,7 +26,9 @@ , module Miso.Event , module Miso.Html , module Miso.Subscription+#ifndef __GHCJS__ , module Miso.TypeLevel+#endif , module Miso.Types , module Miso.Router , module Miso.Util@@ -65,7 +67,9 @@ import Miso.Html import Miso.Router import Miso.Subscription+#ifndef __GHCJS__ import Miso.TypeLevel+#endif import Miso.Types import Miso.Util import Miso.WebSocket
src/Miso/Html/Types.hs view
@@ -40,7 +40,7 @@ , onBeforeDestroyed ) where -import Control.Monad (forM_, (<=<), guard)+import Control.Monad (forM_, (<=<)) import Control.Monad.IO.Class (liftIO) import Data.Aeson (ToJSON, Value, toJSON) import qualified Data.Aeson as A