diff --git a/.gitignore b/.gitignore index 76ce412..8d91dc0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ result-* # ---> Project # Ignore compiled elm files compiled +# Ignore hosting-specific files +/index.html diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8194def..220f9a5 120000 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1 +1 @@ -/nix/store/i4wcn83p1273vgv0nggpdbjqppq33aj7-pre-commit-config.json \ No newline at end of file +/nix/store/j8cvalbr8zkxdw6s2pnf2zhymd2m42r1-pre-commit-config.json \ No newline at end of file diff --git a/README.md b/README.md index 7f349ce..8cf032a 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,19 @@ The all-new (very experimental) MacGregor House website +## Building + +To build, run + +`nix build .` + +For live preview, run + +`bash watch.sh` and +`nix run nixpkgs#live-server` + +then navigate to the `src` directory. + +## Models + ![A 3D model of MacGregor House](./assets/img/macg.png) diff --git a/flake.lock b/flake.lock index 6ad6258..bebb965 100644 --- a/flake.lock +++ b/flake.lock @@ -88,11 +88,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1739064336, - "narHash": "sha256-LTZznyurm9WWchG3uPH+8Sf5hkzZyHoa9FvDW0cLk0M=", + "lastModified": 1746928027, + "narHash": "sha256-kqJdF25vHpQTnagr6ixYr86ZJ953406byaJf48muhS8=", "owner": "jeslie0", "repo": "mkElmDerivation", - "rev": "2d5f1acc6da7e6d5deeff5c9f47729a671ab8f9a", + "rev": "74f7e6eb1cd18995071980f5dccf867e2b620db4", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1739446958, - "narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=", + "lastModified": 1746663147, + "narHash": "sha256-Ua0drDHawlzNqJnclTJGf87dBmaO/tn7iZ+TCkTRpRc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2ff53fe64443980e139eaa286017f53f88336dd0", + "rev": "dda3dcd3fe03e991015e9a74b22d35950f264a54", "type": "github" }, "original": { @@ -194,11 +194,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1737465171, - "narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=", + "lastModified": 1746537231, + "narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17", + "rev": "fa466640195d38ec97cf0493d6d6882bc4d14969", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 67eeeb4..ca78c72 100644 --- a/flake.nix +++ b/flake.nix @@ -48,8 +48,10 @@ elm make src/Main.elm --output Main.js --optimize ''; installPhase = '' - mkdir $out - cp Main.js $out + mkdir -p $out/dist/elm + cp Main.js $out/dist/elm + sed 's/..compiled\/Main.js/\/elm\/Main.js/' src/index.html > $out/dist/index.html + cp -r assets $out/dist/assets ''; }; }; @@ -70,7 +72,6 @@ nil.enable = true; statix.enable = true; markdownlint.enable = true; - mdsh.enable = true; typos.enable = true; check-merge-conflicts.enable = true; commitizen.enable = true; diff --git a/src/Main.elm b/src/Main.elm index e83b61c..f9ddaa8 100644 --- a/src/Main.elm +++ b/src/Main.elm @@ -82,6 +82,7 @@ type alias Model = , h : Int , last : String , url : Url.Url + , path : String , key : Nav.Key , mesh : Maybe Object3d , textures : Maybe (Material.Textured Obj.Decode.ObjCoordinates) @@ -95,19 +96,20 @@ type alias Model = type alias Flags = - ( Int, Int ) + ( Int, Int, String ) init : Flags -> Url.Url -> Nav.Key -> ( Model, Cmd Msg ) init flags url key = let - ( width, height ) = + ( width, height, path ) = flags in ( { w = width , h = height , last = "" , url = url + , path = path , key = key , mesh = Nothing , textures = Nothing @@ -395,7 +397,7 @@ bodyText = [ Font.color white , Font.family [ Font.typeface "Inter" ] , Font.size 20 - , width (px 600) + , width (px 500) ] @@ -459,12 +461,12 @@ id = Html.Attributes.id >> Element.htmlAttribute -getPaths : String -> List String -getPaths base = +getPaths : String -> String -> List String +getPaths path base = let root : String root = - "/" ++ base + path ++ base in List.map ((++) root) [ "", "/", "/index.html" ] @@ -484,13 +486,18 @@ itemize multikeys entry = [] -sitemap : Dict String (Model -> List (Html Msg)) -sitemap = +sitemap : Model -> Dict String (Model -> List (Html Msg)) +sitemap model = + let + getter : String -> List String + getter = + getPaths model.path + in Dict.fromList - (itemize ([ "/", "/index.html" ] ++ getPaths "src" ++ getPaths "index" ++ getPaths "home") pageHome - ++ itemize (getPaths "entries") pageEntries - ++ itemize (getPaths "about") pageAbout - ++ itemize (getPaths "colophon") colophon + (itemize ([ "/", "/index.html", model.path ] ++ getter "src" ++ getter "index" ++ getter "home") pageHome + ++ itemize (getter "entries") pageEntries + ++ itemize (getter "about") pageAbout + ++ itemize (getter "colophon") colophon ) @@ -499,7 +506,7 @@ loadUrl model = let req : Maybe (Model -> List (Html Msg)) req = - Dict.get model.url.path sitemap + Dict.get model.url.path (sitemap model) in case req of Just builder -> @@ -532,10 +539,13 @@ menu model = , Font.family [ Font.typeface "Inter" ] , Font.size 18 ] - (row [ spacing 20 ] - [ inlineLinkInt "Entries" "/entries" - , inlineLinkInt "Access" "/about" - , inlineLinkInt "Colophon" "/colophon" + (column [ spacing 20 ] + [ row [] [ inlineLink "accessibility.mit.edu" "https://accessibility.mit.edu" ] + , row [ spacing 20 ] + [ inlineLinkInt "Entries" (model.path ++ "entries") + , inlineLinkInt "Access" (model.path ++ "about") + , inlineLinkInt "Colophon" (model.path ++ "colophon") + ] ] ) @@ -782,7 +792,7 @@ pageAbout model = , column [ spacing 15 ] [ row [ spacing 15 ] - [ linkBtnInt "← Back" "/" + [ linkBtnInt "← Back" model.path , btn "Directions" (Scroll "one") ] , row [ spacing 15 ] @@ -809,7 +819,7 @@ pageAbout model = , column (page model ++ [ id "one" ]) [ image (fullImage model) - { src = "../assets/img/map.png" + { src = model.path ++ "../assets/img/map.png" , description = "mit campus map with pin at macgregor house" } , column (pageText model) @@ -878,7 +888,9 @@ pageAbout model = , paragraph bodyText [ text "If you're experiencing issues viewing or interacting with parts of this website, please do not hesitate to " , inlineLink "contact the webmaster" "mailto:ananthv@mit.edu" - , text " at any time. We strive to make the story of MacGregor widely accessible to the general public, and we value your input and community support in achieving that goal." + , text " at any time. We strive to make the story of MacGregor widely accessible to the general public, and we value your input and community support in achieving that goal. Please also see " + , inlineLink "accessibility.mit.edu" "https://accessibility.mit.edu/" + , text " for more options and public accessibility forms." ] ] ] @@ -940,7 +952,7 @@ pageEntries model = [ entryLink "A entry" "A" , text ", " , entryLink "Bentry" "B" - , text " (Office of the President), " + , text ", " , entryLink "Centry" "C" , text " (the C is silent), " , entryLink "Dentry" "D" @@ -960,7 +972,7 @@ pageEntries model = [ row [ spacing 15 ] - [ linkBtnInt "← Back" "/" + [ linkBtnInt "← Back" model.path , btn "Explore ↓" (ScrollToEntry "J") ] ] @@ -998,7 +1010,7 @@ pageEntries model = , image [ width (px 80), padding 12 ] { description = "flag of j entry", src = "../assets/img/jentry.png" } ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "(J Entry) The heart of MacGregor. Historic culture, big lore. Jentry memes. Greatest MacGregor Housecomm representation of any entry. Jamily is forever." + [ text "(J Entry) The heart of MacGregor. Historic culture, big lore. Jentry memes. J is for Jamily. We're an eclectic community, filled with everyone from introverts to extroverts, crazy vibes, chill vibes, and everything in between." ] ] , el @@ -1031,7 +1043,7 @@ pageEntries model = subheading [ text "Welcome to A Entry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "Top floor. Top dog. Lots of dogs, in fact. Historic MacGregor cultural epicenter." + [ text "Top floor. Top dog. Alpha wolf. Unity and strength. Positive, above average." ] ] , el @@ -1064,7 +1076,7 @@ pageEntries model = subheading [ text "Welcome to Bentry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "(B Entry) Office of the President. Sweeping views. Crossroads of the High Rise. B is for burgers?" + [ text "(B Entry) Bentry is loud and fun and very social. We like to hang out with each other and check in, catch up, and go out. We banter a lot too but we are always there for each other. We’re a family for sure." ] ] , el @@ -1097,7 +1109,7 @@ pageEntries model = subheading [ text "Welcome to Centry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "(C Entry) Ceriously quiet. High enough to see the clouds, but low enough to stay grounded. MacGregor's creative capital core." + [ text "(C Entry) Chill. Calmer. Sloths." ] ] , el @@ -1120,7 +1132,7 @@ pageEntries model = ) ] , column - (page model ++ [ id "D", Background.color (rgb255 240 140 40) ]) + (page model ++ [ id "D", Background.color (rgb255 40 140 240) ]) [ column (pageText model) [ row [ spacing 10 ] [ btn "↑" (ScrollToEntry "C") @@ -1130,7 +1142,7 @@ pageEntries model = subheading [ text "Welcome to Dentry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "(D Entry) Office of the Vice President. Active after dark. Diligently working until dusk. The culture is palpable." + [ text "(D Entry) D is for doing. Whether we stay in or go out (mostly go out), we have fun! D is also for degenerate. We are up the latest of all entries." ] ] , el @@ -1153,7 +1165,7 @@ pageEntries model = ) ] , column - (page model ++ [ id "E", Background.color (rgb255 40 20 30) ]) + (page model ++ [ id "E", Background.color (rgb255 221 162 126) ]) [ column (pageText model) [ row [ spacing 10 ] [ btn "↑" (ScrollToEntry "D") @@ -1163,7 +1175,7 @@ pageEntries model = subheading [ text "Welcome to E entry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "Board games over Briggs field. Excellence in everything. End of story." + [ text "We're a really cozy and friendly entry! We love having baking/cooking nights, watching movies, playing games, and just hanging out to chat. We also go out for dinners occasionally!" ] ] , el @@ -1186,7 +1198,7 @@ pageEntries model = ) ] , column - (page model ++ [ id "F", Background.color (rgb255 200 50 75) ]) + (page model ++ [ id "F", Background.color (rgb255 200 125 150) ]) [ column (pageText model) [ row [ spacing 10 ] [ btn "↑" (ScrollToEntry "E") @@ -1196,7 +1208,7 @@ pageEntries model = subheading [ text "Welcome to the Fentry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "(F entry) F is for Food. F is for Feast. F is for First (low rise block). F is Forever." + [ text "(F entry) Typical nights for us look like playing poker, watching a movie, or just chilling and doing homework." ] ] , el @@ -1219,7 +1231,7 @@ pageEntries model = ) ] , column - (page model ++ [ id "G", Background.color (rgb255 200 50 150) ]) + (page model ++ [ id "G", Background.color (rgb255 250 150 50) ]) [ column (pageText model) [ row [ spacing 10 ] [ btn "↑" (ScrollToEntry "F") @@ -1229,7 +1241,7 @@ pageEntries model = subheading [ text "Welcome to the Gentry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "(G entry) G is for Greatness. Spans the Charles. Overlooks Fenway. Good things start in Gentry." + [ text "(G entry) Chill but welcoming. The G in Gentry stands for Goofy, Gamers, and Good Times." ] ] , el @@ -1252,7 +1264,7 @@ pageEntries model = ) ] , column - (page model ++ [ id "H", Background.color (rgb255 200 150 50) ]) + (page model ++ [ id "H", Background.color (rgb255 50 175 50) ]) [ column (pageText model) [ row [ spacing 10 ] [ btn "↑" (ScrollToEntry "G") @@ -1262,7 +1274,7 @@ pageEntries model = subheading [ text "Welcome to the Hentry." ] , paragraph (bodyText ++ [ Font.size 32 ]) - [ text "(H entry) Lots of chickens. Crossroads of the Low Rise. Largest entry in MacGregor." + [ text "(H entry) Where the walls are hexagonal (not really), the vibes are chaotic-good, and the only thing more structured than our beehive of activity is our legendary group chats." ] ] , el @@ -1341,7 +1353,7 @@ notFound model = [ text "You were likely redirected here by a link to a page on the old website, the last known archive of which can be found " , inlineLink "here" "https://web.archive.org/web/20170529064230/http://macgregor.mit.edu/" , text ". Unless you want to conduct research on ancient MIT traditions, you can probably find what you're looking for on the new " - , inlineLinkInt "main page" "/src" + , inlineLinkInt "main page" (model.path ++ "/src") , text ". If you believe this page really is missing, " , inlineLink "contact the webmaster" "mailto:ananthv@mit.edu" , text "." @@ -1415,7 +1427,7 @@ colophon model = ] [ text "Colophon." , row [ spacing 15 ] - [ linkBtnInt "← Back" "/" + [ linkBtnInt "← Back" model.path , linkBtn "Source" "https://forgejo.mit.edu/ananthv/macgregor" , btn "Literature" (Scroll "one") ] diff --git a/src/index.html b/src/index.html index 453b42a..5f9c1ff 100644 --- a/src/index.html +++ b/src/index.html @@ -1,5 +1,5 @@ - + MacGregor House @@ -16,7 +16,11 @@