feat: add about page
This commit is contained in:
parent
48e8c0d399
commit
595f7ddceb
4 changed files with 231 additions and 1 deletions
BIN
assets/img/map.png
Normal file
BIN
assets/img/map.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 MiB |
BIN
assets/img/night.jpg
Normal file
BIN
assets/img/night.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 MiB |
BIN
assets/img/sunrise.jpg
Normal file
BIN
assets/img/sunrise.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
232
src/Main.elm
232
src/Main.elm
|
@ -486,6 +486,7 @@ sitemap =
|
||||||
Dict.fromList
|
Dict.fromList
|
||||||
(itemize ([ "/", "/index.html" ] ++ getPaths "src" ++ getPaths "index" ++ getPaths "home") pageHome
|
(itemize ([ "/", "/index.html" ] ++ getPaths "src" ++ getPaths "index" ++ getPaths "home") pageHome
|
||||||
++ itemize (getPaths "entries") pageEntries
|
++ itemize (getPaths "entries") pageEntries
|
||||||
|
++ itemize (getPaths "about") pageAbout
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -724,6 +725,163 @@ pageHome model =
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
pageAbout : Model -> List (Html Msg)
|
||||||
|
pageAbout model =
|
||||||
|
[ Element.layout
|
||||||
|
[ width fill
|
||||||
|
]
|
||||||
|
(column [ width fill ]
|
||||||
|
[ column
|
||||||
|
[ width fill
|
||||||
|
, height fill
|
||||||
|
, spacing (vh2pt model -100)
|
||||||
|
, id "zero"
|
||||||
|
]
|
||||||
|
[ el
|
||||||
|
[ width fill
|
||||||
|
, height (vh2px model 100)
|
||||||
|
, Background.color black
|
||||||
|
]
|
||||||
|
Element.none
|
||||||
|
, animatedEl crossfadeIn
|
||||||
|
[ width fill
|
||||||
|
, height (vh2px model 100)
|
||||||
|
, Background.gradient { angle = 45, steps = [ rgb255 255 0 140, rgb255 40 0 255 ] }
|
||||||
|
]
|
||||||
|
Element.none
|
||||||
|
, animatedEl crossfadeOut
|
||||||
|
[ width fill
|
||||||
|
, height (vh2px model 100)
|
||||||
|
, Background.gradient { angle = 0, steps = [ rgb255 0 140 255, rgb255 0 150 25 ] }
|
||||||
|
]
|
||||||
|
Element.none
|
||||||
|
, el
|
||||||
|
([ alignLeft
|
||||||
|
, alignTop
|
||||||
|
, width (vw2px model 50)
|
||||||
|
, height (vh2px model 100)
|
||||||
|
, paddingEach
|
||||||
|
{ top = vh2pt model 20 - 96
|
||||||
|
, bottom = 0
|
||||||
|
, left = vw2pt model 10
|
||||||
|
, right = 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
++ heading
|
||||||
|
)
|
||||||
|
(column
|
||||||
|
[ spacing 35
|
||||||
|
]
|
||||||
|
[ menu model
|
||||||
|
, text "Access"
|
||||||
|
, column [ spacing 15 ]
|
||||||
|
[ row
|
||||||
|
[ spacing 15 ]
|
||||||
|
[ linkBtnInt "← Back" "/"
|
||||||
|
, btn "Directions" (Scroll "one")
|
||||||
|
]
|
||||||
|
, row [ spacing 15 ]
|
||||||
|
[ btn "Facilities" (Scroll "two")
|
||||||
|
, btn "Web Accessibility" (Scroll "three")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
, el
|
||||||
|
[ alignRight
|
||||||
|
, alignTop
|
||||||
|
, width (vw2px model 60)
|
||||||
|
, height (vh2px model 100)
|
||||||
|
, paddingEach
|
||||||
|
{ top = vh2pt model 25
|
||||||
|
, bottom = vh2pt model 25
|
||||||
|
, left = 0
|
||||||
|
, right = 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
(view3DWalk model)
|
||||||
|
]
|
||||||
|
, column
|
||||||
|
(page model ++ [ id "one" ])
|
||||||
|
[ image (fullImage model)
|
||||||
|
{ src = "../assets/img/map.png"
|
||||||
|
, description = "mit campus map with pin at macgregor house"
|
||||||
|
}
|
||||||
|
, column (pageText model)
|
||||||
|
[ row [ spacing 10 ]
|
||||||
|
[ btn "↑" (Scroll "zero")
|
||||||
|
, btn "↓" (Scroll "two")
|
||||||
|
]
|
||||||
|
, paragraph
|
||||||
|
subheading
|
||||||
|
[ text "Directions" ]
|
||||||
|
, paragraph bodyText
|
||||||
|
[ text "MacGregor's address is "
|
||||||
|
, paragraph [ Font.bold ] [ text "450 Memorial Drive, Cambridge, MA 02139" ]
|
||||||
|
, text ". It is building number "
|
||||||
|
, paragraph [ Font.bold ] [ text "W61" ]
|
||||||
|
, text " on the "
|
||||||
|
, inlineLink "MIT campus" "https://whereis.mit.edu/?go=W61"
|
||||||
|
, text ". See the "
|
||||||
|
, inlineLink "OpenStreetMaps identifier" "https://www.openstreetmap.org/way/1246607679"
|
||||||
|
, text " for directions and more information. If you are mailing a package to a MacGregor resident, follow the directions listed on the "
|
||||||
|
, inlineLink "MIT DSL site" "https://studentlife.mit.edu/housing/undergraduate-housing/mailing-shipping-information"
|
||||||
|
, text "."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, column
|
||||||
|
(page model ++ [ id "two" ])
|
||||||
|
[ image (fullImage model)
|
||||||
|
{ src = "../assets/img/night.jpg"
|
||||||
|
, description = "looking out into the starry night from the second floor patio"
|
||||||
|
}
|
||||||
|
, column (pageText model)
|
||||||
|
[ row [ spacing 10 ]
|
||||||
|
[ btn "↑" (Scroll "one")
|
||||||
|
, btn "↓" (Scroll "three")
|
||||||
|
]
|
||||||
|
, paragraph subheading [ text "Facilities and Information" ]
|
||||||
|
, paragraph bodyText
|
||||||
|
[ text "MacGregor's main facilities are all located on the ground floor. They include a central courtyard, conference/seminar room, music practice room, two laundry rooms, gym, ice machine, game room with a black and white and color printer and an Athena computing cluster, and dining room with a dance studio. All of these facilities are available to residents at any time except when they are being used for "
|
||||||
|
, inlineLink "events" "https://calendar.google.com/calendar/embed?src=c_c9fb13003264d5becb74cf9ba42a087d8a4a180d927441994458a07ac146eb88%40group.calendar.google.com&ctz=America%2FNew_York"
|
||||||
|
, text "."
|
||||||
|
]
|
||||||
|
, paragraph bodyText
|
||||||
|
[ text "You can ask the front desk for a key to access the music practice room. Printers in MacGregor can be located "
|
||||||
|
, inlineLink "here" "https://print.mit.edu"
|
||||||
|
, text " (search for W61). Laundry uses the "
|
||||||
|
, inlineLink "CSCGo app" "https://mycscgo.com/laundry"
|
||||||
|
, text " for payments (approximately $1.25 for a single wash or dry cycle). You can learn more about MacGregor "
|
||||||
|
, inlineLink "here" "https://mitguidetoresidences.mit.edu/residences/macgregor-house"
|
||||||
|
, text "."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, column
|
||||||
|
(page model ++ [ id "three" ])
|
||||||
|
[ image (fullImage model)
|
||||||
|
{ src = "../assets/img/sunrise.jpg"
|
||||||
|
, description = "sunrise over back bay, boston, as seen from macgregor south side entrance"
|
||||||
|
}
|
||||||
|
, column (pageText model)
|
||||||
|
[ row [ spacing 10 ]
|
||||||
|
[ btn "↑" (Scroll "two")
|
||||||
|
, btn "Top" (Scroll "zero")
|
||||||
|
]
|
||||||
|
, paragraph subheading [ text "Accessibility is our highest priority." ]
|
||||||
|
, 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."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
pageEntries : Model -> List (Html Msg)
|
pageEntries : Model -> List (Html Msg)
|
||||||
pageEntries model =
|
pageEntries model =
|
||||||
[ Element.layout
|
[ Element.layout
|
||||||
|
@ -1092,7 +1250,7 @@ pageEntries model =
|
||||||
[ column (pageText model)
|
[ column (pageText model)
|
||||||
[ row [ spacing 10 ]
|
[ row [ spacing 10 ]
|
||||||
[ btn "↑" (ScrollToEntry "G")
|
[ btn "↑" (ScrollToEntry "G")
|
||||||
, btn "TOP" (ScrollToEntry "zero")
|
, btn "Top" (ScrollToEntry "zero")
|
||||||
]
|
]
|
||||||
, paragraph
|
, paragraph
|
||||||
subheading
|
subheading
|
||||||
|
@ -1540,6 +1698,78 @@ view3DTower model =
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
view3DWalk : Model -> Element msg
|
||||||
|
view3DWalk model =
|
||||||
|
Element.html
|
||||||
|
(let
|
||||||
|
entity : Entity Obj.Decode.ObjCoordinates
|
||||||
|
entity =
|
||||||
|
case model.mesh of
|
||||||
|
Nothing ->
|
||||||
|
Scene3d.mesh (Material.matte (Color.rgb255 173 111 101)) pyramidMesh
|
||||||
|
|
||||||
|
Just mesh ->
|
||||||
|
case model.textures of
|
||||||
|
Nothing ->
|
||||||
|
Scene3d.mesh (Material.matte (Color.rgb255 173 111 101)) (Mesh.texturedFacets mesh)
|
||||||
|
|
||||||
|
Just textures ->
|
||||||
|
Scene3d.mesh textures (Mesh.texturedFacets mesh)
|
||||||
|
|
||||||
|
camera : Camera3d.Camera3d Length.Meters coordinates
|
||||||
|
camera =
|
||||||
|
let
|
||||||
|
phi : Float
|
||||||
|
phi =
|
||||||
|
180 * frac (model.angle / 180)
|
||||||
|
|
||||||
|
winding : Float
|
||||||
|
winding =
|
||||||
|
360 * frac (model.angle / 360)
|
||||||
|
|
||||||
|
direction : Float
|
||||||
|
direction =
|
||||||
|
abs (180 - winding) / (180 - winding)
|
||||||
|
|
||||||
|
interp : Float -> Float -> Angle.Angle
|
||||||
|
interp a b =
|
||||||
|
Angle.degrees
|
||||||
|
(if direction > 0 then
|
||||||
|
a + (b - a) * phi / 180
|
||||||
|
|
||||||
|
else
|
||||||
|
b + (a - b) * phi / 180
|
||||||
|
)
|
||||||
|
in
|
||||||
|
Camera3d.perspective
|
||||||
|
{ viewpoint =
|
||||||
|
Viewpoint3d.lookAt
|
||||||
|
{ focalPoint = Point3d.origin
|
||||||
|
, eyePoint =
|
||||||
|
let
|
||||||
|
theta : Angle.Angle
|
||||||
|
theta =
|
||||||
|
interp -90 90
|
||||||
|
in
|
||||||
|
Point3d.meters (model.radius * Angle.cos theta) model.elevation (model.radius * Angle.sin theta)
|
||||||
|
, upDirection = Direction3d.xy (interp (90 + 45) (90 - 45))
|
||||||
|
}
|
||||||
|
, verticalFieldOfView = Angle.degrees 60
|
||||||
|
}
|
||||||
|
in
|
||||||
|
Scene3d.sunny
|
||||||
|
{ entities = [ entity ]
|
||||||
|
, camera = camera
|
||||||
|
, upDirection = Direction3d.z
|
||||||
|
, sunlightDirection = Direction3d.yz (Angle.degrees -120)
|
||||||
|
, background = Scene3d.transparentBackground
|
||||||
|
, clipDepth = Length.centimeters 1
|
||||||
|
, shadows = False
|
||||||
|
, dimensions = ( Pixels.int (round (vw model 60)), Pixels.int (round (vh model 100)) )
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
crossfadeIn : Animation
|
crossfadeIn : Animation
|
||||||
crossfadeIn =
|
crossfadeIn =
|
||||||
Animation.fromTo
|
Animation.fromTo
|
||||||
|
|
Loading…
Reference in a new issue