asidenav.hamlet restored to previous version, bug in Foundation fixed.

This commit is contained in:
SJost 2018-05-28 18:36:56 +02:00
parent c45fea6df3
commit e3566d9832
2 changed files with 34 additions and 33 deletions

View File

@ -110,6 +110,28 @@ type MsgRenderer = MsgRendererS UniWorX -- see Utils
pattern CSheetR tid csh shn ptn pattern CSheetR tid csh shn ptn
= CourseR tid csh (SheetR shn ptn) = CourseR tid csh (SheetR shn ptn)
-- Menus and Favourites
data MenuItem = MenuItem
{ menuItemLabel :: Text
, menuItemIcon :: Maybe Text
, menuItemRoute :: Route UniWorX
, menuItemAccessCallback' :: Handler Bool -- Check whether action is shown in ADDITION to authorization (which is always checked)
}
menuItemAccessCallback :: MenuItem -> Handler Bool
menuItemAccessCallback MenuItem{..} = (&&) <$> ((==) Authorized <$> authCheck) <*> menuItemAccessCallback'
where
authCheck = handleAny (\_ -> return . Unauthorized $ error "authCheck caught exception") $ isAuthorized menuItemRoute False
data MenuTypes -- Semantische Rolle:
= NavbarAside { menuItem :: MenuItem } -- TODO
| NavbarExtra { menuItem :: MenuItem } -- TODO
| NavbarRight { menuItem :: MenuItem } -- Generell, nahezu immer sichtbar
| NavbarSecondary { menuItem :: MenuItem } -- Generell, nahezu immer sichtbar
| PageActionPrime { menuItem :: MenuItem } -- Seitenspezifische Aktion, häufig
| PageActionSecondary { menuItem :: MenuItem } -- Seitenspezifische Aktion, selten
-- Messages -- Messages
mkMessage "UniWorX" "messages" "de" mkMessage "UniWorX" "messages" "de"
@ -124,8 +146,8 @@ instance RenderMessage UniWorX TermIdentifier where
Winter -> renderMessage' $ MsgWinterTerm year Winter -> renderMessage' $ MsgWinterTerm year
where renderMessage' = renderMessage foundation ls where renderMessage' = renderMessage foundation ls
-- Access Control
-- Access Control
data AccessPredicate data AccessPredicate
= APPure (Route UniWorX -> Reader MsgRenderer AuthResult) = APPure (Route UniWorX -> Reader MsgRenderer AuthResult)
| APHandler (Route UniWorX -> Handler AuthResult) | APHandler (Route UniWorX -> Handler AuthResult)
@ -224,8 +246,8 @@ knownTags = -- should not throw exceptions, i.e. no getBy404 or requireAuthId
tag2ap :: Text -> AccessPredicate tag2ap :: Text -> AccessPredicate
tag2ap t = case Map.lookup (CI.mk t) knownTags of tag2ap t = case Map.lookup (CI.mk t) knownTags of
(Just ap) -> ap (Just acp) -> acp
Nothing -> APHandler $ \r -> do --TODO: can this be pure like falseAP? Nothing -> APHandler $ \_route -> do --TODO: can this be pure like falseAP?
$logWarnS "AccessControl" ("route tag unknown for access control") $logWarnS "AccessControl" ("route tag unknown for access control")
unauthorizedI $ MsgUnauthorized unauthorizedI $ MsgUnauthorized
@ -247,30 +269,9 @@ evalAccess r = case route2ap r of
(APHandler p) -> p r (APHandler p) -> p r
(APDB p) -> runDB $ p r (APDB p) -> runDB $ p r
-- TODO: isAuthorized = evalAccess' -- TODO: isAuthorized = evalAccess'
-- Menus and Favourites
data MenuItem = MenuItem
{ menuItemLabel :: Text
, menuItemIcon :: Maybe Text
, menuItemRoute :: Route UniWorX
, menuItemAccessCallback' :: Handler Bool -- Check whether action is shown in ADDITION to authorization (which is always checked)
}
menuItemAccessCallback :: MenuItem -> Handler Bool
menuItemAccessCallback MenuItem{..} = (&&) <$> ((==) Authorized <$> authCheck) <*> menuItemAccessCallback'
where
authCheck = handleAny (\_ -> return . Unauthorized $ error "authCheck caught exception") $ isAuthorized menuItemRoute False
data MenuTypes -- Semantische Rolle:
= NavbarAside { menuItem :: MenuItem } -- TODO
| NavbarExtra { menuItem :: MenuItem } -- TODO
| NavbarRight { menuItem :: MenuItem } -- Generell, nahezu immer sichtbar
| NavbarSecondary { menuItem :: MenuItem } -- Generell, nahezu immer sichtbar
| PageActionPrime { menuItem :: MenuItem } -- Seitenspezifische Aktion, häufig
| PageActionSecondary { menuItem :: MenuItem } -- Seitenspezifische Aktion, selten
-- Please see the documentation for the Yesod typeclass. There are a number -- Please see the documentation for the Yesod typeclass. There are a number
@ -309,7 +310,7 @@ instance Yesod UniWorX where
cid <- MaybeT . getKeyBy $ CourseTermShort tid csh cid <- MaybeT . getKeyBy $ CourseTermShort tid csh
user <- MaybeT $ get uid user <- MaybeT $ get uid
-- update Favourites -- update Favourites
lift $ upsertBy void . lift $ upsertBy
(UniqueCourseFavourite uid cid) (UniqueCourseFavourite uid cid)
(CourseFavourite uid now cid) (CourseFavourite uid now cid)
[CourseFavouriteTime =. now] [CourseFavouriteTime =. now]

View File

@ -5,12 +5,12 @@ $newline never
<ul .asidenav__list> <ul .asidenav__list>
$forall menuType <- menuTypes $forall menuType <- menuTypes
$case menuType $case menuType
$of NavbarAside mi $of NavbarAside (MenuItem label mIcon route _)
<li .asidenav__list-item :Just (menuItemRoute mi) == mcurrentRoute:.asidenav__list-item--active> <li .asidenav__list-item :Just route == mcurrentRoute:.asidenav__list-item--active>
<a .asidenav__link-wrapper href=@{menuItemRoute mi}> <a .asidenav__link-wrapper href=@{route}>
$if isJust (menuItemIcon mi) $if isJust mIcon
<div .glyphicon.glyphicon--#{fromMaybe "" (menuItemIcon mi)}> <div .glyphicon.glyphicon--#{fromMaybe "" mIcon}>
<div .asidenav__link-label>#{menuItemLabel mi} <div .asidenav__link-label>#{label}
$of _ $of _
<div .asidenav__box> <div .asidenav__box>
@ -25,9 +25,9 @@ $newline never
<ul .asidenav__nested-list> <ul .asidenav__nested-list>
$forall action <- pageActions $forall action <- pageActions
$case action $case action
$of PageActionPrime mi $of PageActionPrime (MenuItem{..})
<li .asidenav__list-item> <li .asidenav__list-item>
<a .asidenav__link-wrapper href=@{menuItemRoute mi}>#{menuItemLabel mi} <a .asidenav__link-wrapper href=@{menuItemRoute}>#{menuItemLabel}
$of _ $of _
<div .asidenav__toggler> <div .asidenav__toggler>