Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
86adaa86a2 | ||
![]() |
f1e0aa5ec0 | ||
![]() |
4f06d54e42 | ||
![]() |
508c457ffb | ||
![]() |
713d6d4486 | ||
![]() |
21b946568d | ||
![]() |
1713c9e01e |
7 changed files with 76 additions and 47 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -16,3 +16,5 @@ result-*
|
|||
# ---> Project
|
||||
# Ignore compiled elm files
|
||||
compiled
|
||||
# Ignore hosting-specific files
|
||||
/index.html
|
||||
|
|
|
@ -1 +1 @@
|
|||
/nix/store/i4wcn83p1273vgv0nggpdbjqppq33aj7-pre-commit-config.json
|
||||
/nix/store/4wj49hvsmkannf285i53qczyjggvly5w-pre-commit-config.json
|
15
README.md
15
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
|
||||
|
||||

|
||||
|
|
12
flake.lock
12
flake.lock
|
@ -88,11 +88,11 @@
|
|||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1739064336,
|
||||
"narHash": "sha256-LTZznyurm9WWchG3uPH+8Sf5hkzZyHoa9FvDW0cLk0M=",
|
||||
"lastModified": 1740274080,
|
||||
"narHash": "sha256-tDNZc/PVt9z2m7i5PKuYJ9Ii60A2oNrtl6qTeqqmoJc=",
|
||||
"owner": "jeslie0",
|
||||
"repo": "mkElmDerivation",
|
||||
"rev": "2d5f1acc6da7e6d5deeff5c9f47729a671ab8f9a",
|
||||
"rev": "93c08ae888748f71873539bebcae981cf72f3f44",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@ -119,11 +119,11 @@
|
|||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1739446958,
|
||||
"narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=",
|
||||
"lastModified": 1740695751,
|
||||
"narHash": "sha256-D+R+kFxy1KsheiIzkkx/6L63wEHBYX21OIwlFV8JvDs=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2ff53fe64443980e139eaa286017f53f88336dd0",
|
||||
"rev": "6313551cd05425cd5b3e63fe47dbc324eabb15e4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
@ -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;
|
||||
|
|
79
src/Main.elm
79
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 ->
|
||||
|
@ -533,9 +540,9 @@ menu model =
|
|||
, Font.size 18
|
||||
]
|
||||
(row [ spacing 20 ]
|
||||
[ inlineLinkInt "Entries" "/entries"
|
||||
, inlineLinkInt "Access" "/about"
|
||||
, inlineLinkInt "Colophon" "/colophon"
|
||||
[ inlineLinkInt "Entries" (model.path ++ "entries")
|
||||
, inlineLinkInt "Access" (model.path ++ "about")
|
||||
, inlineLinkInt "Colophon" (model.path ++ "colophon")
|
||||
]
|
||||
)
|
||||
|
||||
|
@ -782,7 +789,7 @@ pageAbout model =
|
|||
, column [ spacing 15 ]
|
||||
[ row
|
||||
[ spacing 15 ]
|
||||
[ linkBtnInt "← Back" "/"
|
||||
[ linkBtnInt "← Back" model.path
|
||||
, btn "Directions" (Scroll "one")
|
||||
]
|
||||
, row [ spacing 15 ]
|
||||
|
@ -809,7 +816,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)
|
||||
|
@ -940,7 +947,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 +967,7 @@ pageEntries model =
|
|||
[ row
|
||||
[ spacing 15
|
||||
]
|
||||
[ linkBtnInt "← Back" "/"
|
||||
[ linkBtnInt "← Back" model.path
|
||||
, btn "Explore ↓" (ScrollToEntry "J")
|
||||
]
|
||||
]
|
||||
|
@ -998,7 +1005,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 +1038,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 +1071,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 +1104,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 +1127,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 +1137,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 +1160,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 +1170,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 +1193,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 +1203,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 +1226,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 +1236,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 +1259,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 +1269,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 +1348,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 +1422,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")
|
||||
]
|
||||
|
|
|
@ -16,7 +16,11 @@
|
|||
<script>
|
||||
var app = Elm.Main.init({
|
||||
node: document.getElementById("app"),
|
||||
flags: [window.innerWidth, window.innerHeight],
|
||||
flags: [
|
||||
window.innerWidth,
|
||||
window.innerHeight,
|
||||
window.location.pathname,
|
||||
],
|
||||
});
|
||||
|
||||
app.ports.copyToClipboard.subscribe((tuple) => {
|
||||
|
|
Loading…
Reference in a new issue