Initial import of PhotoGroove
This commit is contained in:
commit
3d2c74b8fc
7 changed files with 5744 additions and 0 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
use flake
|
||||||
24
elm.json
Normal file
24
elm.json
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"type": "application",
|
||||||
|
"source-directories": [
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"elm-version": "0.19.1",
|
||||||
|
"dependencies": {
|
||||||
|
"direct": {
|
||||||
|
"elm/browser": "1.0.2",
|
||||||
|
"elm/core": "1.0.5",
|
||||||
|
"elm/html": "1.0.0"
|
||||||
|
},
|
||||||
|
"indirect": {
|
||||||
|
"elm/json": "1.1.3",
|
||||||
|
"elm/time": "1.0.0",
|
||||||
|
"elm/url": "1.0.0",
|
||||||
|
"elm/virtual-dom": "1.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test-dependencies": {
|
||||||
|
"direct": {},
|
||||||
|
"indirect": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
244
flake.lock
generated
Normal file
244
flake.lock
generated
Normal file
|
|
@ -0,0 +1,244 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"elm-spa": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"mkElmDerivation",
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"mkElmDerivation",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1680551213,
|
||||||
|
"narHash": "sha256-Sjrb0dwsEhSBqnylFl/dGThiR16QdrjEw3+bRdRTi5M=",
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "elm-spa",
|
||||||
|
"rev": "cc3a5921367df5fd2c29397c7c51b559a5b784f2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "elm-spa",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"elm-watch": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"mkElmDerivation",
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"mkElmDerivation",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"npm-fix": "npm-fix",
|
||||||
|
"npmlock2nix": "npmlock2nix"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681842996,
|
||||||
|
"narHash": "sha256-xJy/sARdwOn9YCIkuVQdPRZRlhRJhY+Bwpu2alys8nI=",
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "elm-watch",
|
||||||
|
"rev": "5a358bf479f0ae3b5d7adb5c6f32bdf224cfe044",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "elm-watch",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"elmSnapshot": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687544254,
|
||||||
|
"narHash": "sha256-K8xwvBinOv3WdVFv+eMB1mla7mGKp0dzKvyP/aB00Ro=",
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "ElmSnapshot",
|
||||||
|
"rev": "973f9b82c3735c98c22eb53a016cde7db7816721",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "ElmSnapshot",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1689068808,
|
||||||
|
"narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mkElmDerivation": {
|
||||||
|
"inputs": {
|
||||||
|
"elm-spa": "elm-spa",
|
||||||
|
"elm-watch": "elm-watch",
|
||||||
|
"elmSnapshot": "elmSnapshot",
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701565748,
|
||||||
|
"narHash": "sha256-8YTHgZ3WOJamjvzRd1VUPTkh5QXBN959BOBAkcawU2g=",
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "mkElmDerivation",
|
||||||
|
"rev": "a37c57fff50ad87823494fc00b9762e828326f85",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "mkElmDerivation",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1692494774,
|
||||||
|
"narHash": "sha256-noGVoOTyZ2Kr5OFglzKYOX48cx3hggdCPbXrYMG2FDw=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3476a10478587dec90acb14ec6bde0966c545cc0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1674899129,
|
||||||
|
"narHash": "sha256-6LGae8WbdCN4S9+o2wfYDJPpfxC2EnXEvoopVkguNtc=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "6b9c27b4c9c1c329b27a44ed1fa8935df79f9a8b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701718080,
|
||||||
|
"narHash": "sha256-6ovz0pG76dE0P170pmmZex1wWcQoeiomUZGggfH9XPs=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "2c7f3c0fb7c08a0814627611d9d7d45ab6d75335",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"npm-fix": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": [
|
||||||
|
"mkElmDerivation",
|
||||||
|
"elm-watch",
|
||||||
|
"flake-utils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"mkElmDerivation",
|
||||||
|
"elm-watch",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681681690,
|
||||||
|
"narHash": "sha256-mI2ND49vInMbeXSMQDp8y7Prjh53W4RlpixWRlH2Lio=",
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "npm-lockfile-fix",
|
||||||
|
"rev": "1a3799d0b8b9ed5b51f39bd878a3ba2d8ac5656a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "jeslie0",
|
||||||
|
"repo": "npm-lockfile-fix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"npmlock2nix": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1673447413,
|
||||||
|
"narHash": "sha256-sJM82Sj8yfQYs9axEmGZ9Evzdv/kDcI9sddqJ45frrU=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "npmlock2nix",
|
||||||
|
"rev": "9197bbf397d76059a76310523d45df10d2e4ca81",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "npmlock2nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"mkElmDerivation": "mkElmDerivation",
|
||||||
|
"nixpkgs": "nixpkgs_3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
38
flake.nix
Normal file
38
flake.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
description = "elm flake to build photo groove";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
mkElmDerivation.url = "github:jeslie0/mkElmDerivation";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, mkElmDerivation }:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
# overlays = [ mkElmDerivation.overlays.mkElmDerivation ];
|
||||||
|
inherit system;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
# packages.${system}.default = pkgs.mkElmDerivation {
|
||||||
|
# pname = "photo-groove";
|
||||||
|
# version = "0.1.0";
|
||||||
|
# src = ./.;
|
||||||
|
# outputJavaScript = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
devShells.${system}.default = pkgs.mkShell {
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
elm2nix
|
||||||
|
elmPackages.elm
|
||||||
|
elmPackages.elm-format
|
||||||
|
elmPackages.elm-json
|
||||||
|
elmPackages.elm-language-server
|
||||||
|
elmPackages.elm-live
|
||||||
|
elmPackages.elm-review
|
||||||
|
elmPackages.elm-test
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
13
index.html
Normal file
13
index.html
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="http://elm-in-action.com/styles.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script src="app.js"></script>
|
||||||
|
<script>
|
||||||
|
Elm.PhotoGroove.init({node: document.getElementById("app")});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
81
src/PhotoGroove.elm
Normal file
81
src/PhotoGroove.elm
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
module PhotoGroove exposing (main)
|
||||||
|
|
||||||
|
import Array exposing (Array)
|
||||||
|
import Browser
|
||||||
|
import Html exposing (Html, button, div, h1, img, text)
|
||||||
|
import Html.Attributes exposing (..)
|
||||||
|
import Html.Events exposing (onClick)
|
||||||
|
|
||||||
|
|
||||||
|
type alias Model =
|
||||||
|
{ photos : List Photo, selectedUrl : String }
|
||||||
|
|
||||||
|
|
||||||
|
type alias Photo =
|
||||||
|
{ url : String }
|
||||||
|
|
||||||
|
|
||||||
|
initialModel : Model
|
||||||
|
initialModel =
|
||||||
|
{ photos =
|
||||||
|
[ { url = "1.jpeg" }
|
||||||
|
, { url = "2.jpeg" }
|
||||||
|
, { url = "3.jpeg" }
|
||||||
|
]
|
||||||
|
, selectedUrl = "1.jpeg"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
photoArray : Array Photo
|
||||||
|
photoArray =
|
||||||
|
Array.fromList initialModel.photos
|
||||||
|
|
||||||
|
|
||||||
|
view : Model -> Html Message
|
||||||
|
view model =
|
||||||
|
div [ class "content" ]
|
||||||
|
[ h1 [] [ text "Photo Groove" ]
|
||||||
|
, button [ onClick ClickedSurpriseMe ] [ text "Surprise me!" ]
|
||||||
|
, div [ id "thumbnails" ]
|
||||||
|
(List.map (viewThumbnail model.selectedUrl) model.photos)
|
||||||
|
, img [ class "large", src (urlPrefix ++ "large/" ++ model.selectedUrl) ] []
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
viewThumbnail : String -> Photo -> Html Message
|
||||||
|
viewThumbnail selectedUrl thumb =
|
||||||
|
img
|
||||||
|
[ src (urlPrefix ++ thumb.url)
|
||||||
|
, classList [ ( "selected", selectedUrl == thumb.url ) ]
|
||||||
|
, onClick (ClickedThumbnail thumb.url)
|
||||||
|
]
|
||||||
|
[]
|
||||||
|
|
||||||
|
|
||||||
|
type Message
|
||||||
|
= ClickedThumbnail String
|
||||||
|
| ClickedSurpriseMe
|
||||||
|
|
||||||
|
|
||||||
|
update : Message -> Model -> Model
|
||||||
|
update msg model =
|
||||||
|
case msg of
|
||||||
|
ClickedThumbnail thumb ->
|
||||||
|
{ model | selectedUrl = thumb }
|
||||||
|
|
||||||
|
ClickedSurpriseMe ->
|
||||||
|
{ model | selectedUrl = "2.jpeg" }
|
||||||
|
|
||||||
|
|
||||||
|
urlPrefix : String
|
||||||
|
urlPrefix =
|
||||||
|
"http://elm-in-action.com/"
|
||||||
|
|
||||||
|
|
||||||
|
main : Program () Model Message
|
||||||
|
main =
|
||||||
|
Browser.sandbox
|
||||||
|
{ init = initialModel
|
||||||
|
, view = view
|
||||||
|
, update = update
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue