Merge branch 'master' into feat/pagination
merged master into this to avoid databas conflicts when switching between master and feat/pagination
This commit is contained in:
commit
2a1c805d85
1
.gitignore
vendored
1
.gitignore
vendored
@ -25,6 +25,7 @@ uniworx.nix
|
|||||||
.gup/
|
.gup/
|
||||||
.dbsettings.yml
|
.dbsettings.yml
|
||||||
*.kate-swp
|
*.kate-swp
|
||||||
|
.kateproject
|
||||||
src/Handler/Assist.bak
|
src/Handler/Assist.bak
|
||||||
src/Handler/Course.SnapCustom.hs
|
src/Handler/Course.SnapCustom.hs
|
||||||
*.orig
|
*.orig
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ReWorX"
|
|
||||||
, "files": [ { "git": 1, "filters": ["*.hs", "*.hamlet", "*.lucius", "*.cassius", "*.julius"], "recursive": 1 } ]
|
|
||||||
}
|
|
||||||
22
fill-db.hs
22
fill-db.hs
@ -12,6 +12,7 @@ import Data.Time
|
|||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = db $ do
|
main = db $ do
|
||||||
|
defaultFavourites <- getsYesod $ appDefaultFavourites . appSettings
|
||||||
now <- liftIO getCurrentTime
|
now <- liftIO getCurrentTime
|
||||||
let
|
let
|
||||||
summer2017 = TermIdentifier 2017 Summer
|
summer2017 = TermIdentifier 2017 Summer
|
||||||
@ -23,6 +24,7 @@ main = db $ do
|
|||||||
, userMatrikelnummer = Nothing
|
, userMatrikelnummer = Nothing
|
||||||
, userEmail = "G.Kleen@campus.lmu.de"
|
, userEmail = "G.Kleen@campus.lmu.de"
|
||||||
, userDisplayName = "Gregor Kleen"
|
, userDisplayName = "Gregor Kleen"
|
||||||
|
, userMaxFavourites = 6
|
||||||
}
|
}
|
||||||
fhamann <- insert User
|
fhamann <- insert User
|
||||||
{ userPlugin = "LDAP"
|
{ userPlugin = "LDAP"
|
||||||
@ -30,6 +32,7 @@ main = db $ do
|
|||||||
, userMatrikelnummer = Nothing
|
, userMatrikelnummer = Nothing
|
||||||
, userEmail = "felix.hamann@campus.lmu.de"
|
, userEmail = "felix.hamann@campus.lmu.de"
|
||||||
, userDisplayName = "Felix Hamann"
|
, userDisplayName = "Felix Hamann"
|
||||||
|
, userMaxFavourites = defaultFavourites
|
||||||
}
|
}
|
||||||
jost <- insert User
|
jost <- insert User
|
||||||
{ userPlugin = "LDAP"
|
{ userPlugin = "LDAP"
|
||||||
@ -37,6 +40,7 @@ main = db $ do
|
|||||||
, userMatrikelnummer = Nothing
|
, userMatrikelnummer = Nothing
|
||||||
, userEmail = "jost@tcs.ifi.lmu.de"
|
, userEmail = "jost@tcs.ifi.lmu.de"
|
||||||
, userDisplayName = "Steffen Jost"
|
, userDisplayName = "Steffen Jost"
|
||||||
|
, userMaxFavourites = 14
|
||||||
}
|
}
|
||||||
void . insert $ Term
|
void . insert $ Term
|
||||||
{ termName = summer2017
|
{ termName = summer2017
|
||||||
@ -91,6 +95,9 @@ main = db $ do
|
|||||||
, courseHasRegistration = True
|
, courseHasRegistration = True
|
||||||
, courseRegisterFrom = Just now
|
, courseRegisterFrom = Just now
|
||||||
, courseRegisterTo = Just ((3600 * 24 * 60) `addUTCTime` now )
|
, courseRegisterTo = Just ((3600 * 24 * 60) `addUTCTime` now )
|
||||||
|
, courseDeregisterUntil = Nothing
|
||||||
|
, courseRegisterSecret = Nothing
|
||||||
|
, courseMaterialFree = True
|
||||||
}
|
}
|
||||||
insert_ $ CourseEdit jost now ffp
|
insert_ $ CourseEdit jost now ffp
|
||||||
void . insert $ DegreeCourse ffp sdBsc sdInf
|
void . insert $ DegreeCourse ffp sdBsc sdInf
|
||||||
@ -112,6 +119,9 @@ main = db $ do
|
|||||||
, courseHasRegistration = False
|
, courseHasRegistration = False
|
||||||
, courseRegisterFrom = Nothing
|
, courseRegisterFrom = Nothing
|
||||||
, courseRegisterTo = Nothing
|
, courseRegisterTo = Nothing
|
||||||
|
, courseDeregisterUntil = Nothing
|
||||||
|
, courseRegisterSecret = Nothing
|
||||||
|
, courseMaterialFree = True
|
||||||
}
|
}
|
||||||
insert_ $ CourseEdit fhamann now eip
|
insert_ $ CourseEdit fhamann now eip
|
||||||
void . insert $ DegreeCourse eip sdBsc sdInf
|
void . insert $ DegreeCourse eip sdBsc sdInf
|
||||||
@ -128,6 +138,9 @@ main = db $ do
|
|||||||
, courseHasRegistration = True
|
, courseHasRegistration = True
|
||||||
, courseRegisterFrom = Just now
|
, courseRegisterFrom = Just now
|
||||||
, courseRegisterTo = Just ((3600 * 24 * 60) `addUTCTime` now )
|
, courseRegisterTo = Just ((3600 * 24 * 60) `addUTCTime` now )
|
||||||
|
, courseDeregisterUntil = Nothing
|
||||||
|
, courseRegisterSecret = Nothing
|
||||||
|
, courseMaterialFree = True
|
||||||
}
|
}
|
||||||
insert_ $ CourseEdit fhamann now ixd
|
insert_ $ CourseEdit fhamann now ixd
|
||||||
void . insert $ DegreeCourse ixd sdBsc sdInf
|
void . insert $ DegreeCourse ixd sdBsc sdInf
|
||||||
@ -144,6 +157,9 @@ main = db $ do
|
|||||||
, courseHasRegistration = False
|
, courseHasRegistration = False
|
||||||
, courseRegisterFrom = Nothing
|
, courseRegisterFrom = Nothing
|
||||||
, courseRegisterTo = Nothing
|
, courseRegisterTo = Nothing
|
||||||
|
, courseDeregisterUntil = Nothing
|
||||||
|
, courseRegisterSecret = Nothing
|
||||||
|
, courseMaterialFree = True
|
||||||
}
|
}
|
||||||
insert_ $ CourseEdit fhamann now ux3
|
insert_ $ CourseEdit fhamann now ux3
|
||||||
void . insert $ DegreeCourse ux3 sdBsc sdInf
|
void . insert $ DegreeCourse ux3 sdBsc sdInf
|
||||||
@ -160,6 +176,9 @@ main = db $ do
|
|||||||
, courseHasRegistration = False
|
, courseHasRegistration = False
|
||||||
, courseRegisterFrom = Nothing
|
, courseRegisterFrom = Nothing
|
||||||
, courseRegisterTo = Nothing
|
, courseRegisterTo = Nothing
|
||||||
|
, courseDeregisterUntil = Nothing
|
||||||
|
, courseRegisterSecret = Nothing
|
||||||
|
, courseMaterialFree = True
|
||||||
}
|
}
|
||||||
insert_ $ CourseEdit jost now pmo
|
insert_ $ CourseEdit jost now pmo
|
||||||
void . insert $ DegreeCourse pmo sdBsc sdInf
|
void . insert $ DegreeCourse pmo sdBsc sdInf
|
||||||
@ -176,6 +195,9 @@ main = db $ do
|
|||||||
, courseHasRegistration = False
|
, courseHasRegistration = False
|
||||||
, courseRegisterFrom = Nothing
|
, courseRegisterFrom = Nothing
|
||||||
, courseRegisterTo = Nothing
|
, courseRegisterTo = Nothing
|
||||||
|
, courseDeregisterUntil = Nothing
|
||||||
|
, courseRegisterSecret = Nothing
|
||||||
|
, courseMaterialFree = True
|
||||||
}
|
}
|
||||||
insert_ $ CourseEdit gkleen now dbs
|
insert_ $ CourseEdit gkleen now dbs
|
||||||
void . insert $ DegreeCourse dbs sdBsc sdInf
|
void . insert $ DegreeCourse dbs sdBsc sdInf
|
||||||
|
|||||||
11
models
11
models
@ -58,10 +58,13 @@ Course
|
|||||||
termId TermId
|
termId TermId
|
||||||
schoolId SchoolId
|
schoolId SchoolId
|
||||||
capacity Int Maybe
|
capacity Int Maybe
|
||||||
hasRegistration Bool -- canRegisterNow = hasRegistration && maybe False (<= currentTime) registerFrom && maybe True (>= currentTime) registerTo
|
hasRegistration Bool -- canRegisterNow = hasRegistration && maybe False (<= currentTime) registerFrom && maybe True (>= currentTime) registerTo
|
||||||
registerFrom UTCTime Maybe
|
registerFrom UTCTime Maybe
|
||||||
registerTo UTCTime Maybe
|
registerTo UTCTime Maybe
|
||||||
CourseTermShort termId shorthand
|
deregisterUntil UTCTime Maybe
|
||||||
|
registerSecret Text Maybe -- Falls ein Passwort erforderlich ist
|
||||||
|
materialFree Bool default=true
|
||||||
|
CourseTermShort termId shorthand
|
||||||
CourseEdit
|
CourseEdit
|
||||||
user UserId
|
user UserId
|
||||||
time UTCTime
|
time UTCTime
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
{ nixpkgs ? import <nixpkgs> {}, compiler ? "ghc822" }:
|
{ nixpkgs ? import <nixpkgs> {}, compiler ? null }:
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (nixpkgs) pkgs;
|
inherit (nixpkgs) pkgs;
|
||||||
|
|
||||||
haskellPackages = if isNull compiler
|
haskellPackages = if isNull compiler
|
||||||
then pkgs.haskellPackages
|
then pkgs.haskellPackages
|
||||||
else pkgs.haskell.packages.${compiler};
|
else pkgs.haskell.packages."${compiler}";
|
||||||
|
|
||||||
drv = haskellPackages.callPackage ./uniworx.nix {};
|
drv = haskellPackages.callPackage ./uniworx.nix {};
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,8 @@ import qualified Data.Text.Encoding as Text
|
|||||||
import Data.Conduit (($$))
|
import Data.Conduit (($$))
|
||||||
import Data.Conduit.List (sourceList)
|
import Data.Conduit.List (sourceList)
|
||||||
|
|
||||||
|
import qualified Database.Esqueleto as E
|
||||||
|
|
||||||
import Control.Monad.Except (MonadError(..), runExceptT)
|
import Control.Monad.Except (MonadError(..), runExceptT)
|
||||||
import Control.Monad.Trans.Maybe (MaybeT(..))
|
import Control.Monad.Trans.Maybe (MaybeT(..))
|
||||||
|
|
||||||
@ -153,16 +155,17 @@ instance Yesod UniWorX where
|
|||||||
case route of
|
case route of
|
||||||
CourseR tid csh _ | "updateFavourite" `elem` attrs -> do
|
CourseR tid csh _ | "updateFavourite" `elem` attrs -> do
|
||||||
uid <- MaybeT maybeAuthId
|
uid <- MaybeT maybeAuthId
|
||||||
|
$(logDebug) "Favourites save"
|
||||||
now <- liftIO $ getCurrentTime
|
now <- liftIO $ getCurrentTime
|
||||||
void . lift . runDB . runMaybeT $ do
|
void . lift . runDB . runMaybeT $ do
|
||||||
cid <- MaybeT . getKeyBy $ CourseTermShort tid csh
|
cid <- MaybeT . getKeyBy $ CourseTermShort tid csh
|
||||||
user <- MaybeT $ get uid
|
user <- MaybeT $ get uid
|
||||||
-- update Favorites
|
-- update Favourites
|
||||||
lift $ upsertBy
|
lift $ upsertBy
|
||||||
(UniqueCourseFavourite uid cid)
|
(UniqueCourseFavourite uid cid)
|
||||||
(CourseFavourite uid now cid)
|
(CourseFavourite uid now cid)
|
||||||
[CourseFavouriteTime =. now]
|
[CourseFavouriteTime =. now]
|
||||||
-- prune Favorites to user-defined size
|
-- prune Favourites to user-defined size
|
||||||
oldFavs <- lift $ selectKeysList
|
oldFavs <- lift $ selectKeysList
|
||||||
[ CourseFavouriteUser ==. uid]
|
[ CourseFavouriteUser ==. uid]
|
||||||
[ Desc CourseFavouriteTime
|
[ Desc CourseFavouriteTime
|
||||||
@ -340,7 +343,7 @@ instance YesodBreadcrumbs UniWorX where
|
|||||||
breadcrumb SubmissionListR = return ("Abgaben", Just HomeR)
|
breadcrumb SubmissionListR = return ("Abgaben", Just HomeR)
|
||||||
breadcrumb (SubmissionR _) = return ("Abgabe", Just SubmissionListR)
|
breadcrumb (SubmissionR _) = return ("Abgabe", Just SubmissionListR)
|
||||||
|
|
||||||
breadcrumb HomeR = return ("ReWorX", Nothing)
|
breadcrumb HomeR = return ("UniworkY", Nothing)
|
||||||
breadcrumb (AuthR _) = return ("Login", Just HomeR)
|
breadcrumb (AuthR _) = return ("Login", Just HomeR)
|
||||||
breadcrumb ProfileR = return ("Profile", Just HomeR)
|
breadcrumb ProfileR = return ("Profile", Just HomeR)
|
||||||
breadcrumb _ = return ("home", Nothing)
|
breadcrumb _ = return ("home", Nothing)
|
||||||
@ -404,7 +407,7 @@ defaultLinkLayout = defaultMenuLayout . (defaultLinks ++)
|
|||||||
defaultMenuLayout :: [MenuTypes] -> Widget -> Handler Html
|
defaultMenuLayout :: [MenuTypes] -> Widget -> Handler Html
|
||||||
defaultMenuLayout menu widget = do
|
defaultMenuLayout menu widget = do
|
||||||
master <- getYesod
|
master <- getYesod
|
||||||
mmsgs <- getMessages
|
mmsgs <- getMessages
|
||||||
|
|
||||||
mcurrentRoute <- getCurrentRoute
|
mcurrentRoute <- getCurrentRoute
|
||||||
|
|
||||||
@ -413,6 +416,17 @@ defaultMenuLayout menu widget = do
|
|||||||
|
|
||||||
menuTypes <- filterM (menuItemAccessCallback . menuItem) menu
|
menuTypes <- filterM (menuItemAccessCallback . menuItem) menu
|
||||||
|
|
||||||
|
-- Lookup Favourites if possible
|
||||||
|
favourites <- do
|
||||||
|
muid <- maybeAuthId
|
||||||
|
case muid of
|
||||||
|
Nothing -> return []
|
||||||
|
(Just uid) -> runDB . E.select . E.from $ \(course `E.InnerJoin` courseFavourite) -> do
|
||||||
|
E.on (course E.^. CourseId E.==. courseFavourite E.^. CourseFavouriteCourse)
|
||||||
|
E.where_ (courseFavourite E.^. CourseFavouriteUser E.==. E.val uid)
|
||||||
|
E.orderBy [ E.asc $ course E.^. CourseShorthand ]
|
||||||
|
return course
|
||||||
|
|
||||||
-- We break up the default layout into two components:
|
-- We break up the default layout into two components:
|
||||||
-- default-layout is the contents of the body tag, and
|
-- default-layout is the contents of the body tag, and
|
||||||
-- default-layout-wrapper is the entire page. Since the final
|
-- default-layout-wrapper is the entire page. Since the final
|
||||||
|
|||||||
@ -189,6 +189,9 @@ courseEditHandler course = do
|
|||||||
, courseHasRegistration = cfHasReg res
|
, courseHasRegistration = cfHasReg res
|
||||||
, courseRegisterFrom = cfRegFrom res
|
, courseRegisterFrom = cfRegFrom res
|
||||||
, courseRegisterTo = cfRegTo res
|
, courseRegisterTo = cfRegTo res
|
||||||
|
, courseDeregisterUntil = Nothing -- TODO
|
||||||
|
, courseRegisterSecret = Nothing -- TODO
|
||||||
|
, courseMaterialFree = True -- TODO
|
||||||
}
|
}
|
||||||
case insertOkay of
|
case insertOkay of
|
||||||
(Just cid) -> do
|
(Just cid) -> do
|
||||||
@ -232,16 +235,19 @@ courseEditHandler course = do
|
|||||||
-- , CourseChanged =. now
|
-- , CourseChanged =. now
|
||||||
-- ]
|
-- ]
|
||||||
_updOkay <- replace cid ( -- TODO replaceUnique requires Eq?!
|
_updOkay <- replace cid ( -- TODO replaceUnique requires Eq?!
|
||||||
Course { courseName = cfName res
|
Course { courseName = cfName res
|
||||||
, courseDescription = cfDesc res
|
, courseDescription = cfDesc res
|
||||||
, courseLinkExternal = cfLink res
|
, courseLinkExternal = cfLink res
|
||||||
, courseShorthand = cfShort res
|
, courseShorthand = cfShort res
|
||||||
, courseTermId = cfTerm res
|
, courseTermId = cfTerm res
|
||||||
, courseSchoolId = cfSchool res
|
, courseSchoolId = cfSchool res
|
||||||
, courseCapacity = cfCapacity res
|
, courseCapacity = cfCapacity res
|
||||||
, courseHasRegistration = cfHasReg res
|
, courseHasRegistration = cfHasReg res
|
||||||
, courseRegisterFrom = cfRegFrom res
|
, courseRegisterFrom = cfRegFrom res
|
||||||
, courseRegisterTo = cfRegTo res
|
, courseRegisterTo = cfRegTo res
|
||||||
|
, courseDeregisterUntil = Nothing -- TODO
|
||||||
|
, courseRegisterSecret = Nothing -- TODO
|
||||||
|
, courseMaterialFree = True -- TODO
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
insert_ $ CourseEdit aid now cid
|
insert_ $ CourseEdit aid now cid
|
||||||
|
|||||||
@ -43,7 +43,7 @@ getHomeR :: Handler Html
|
|||||||
getHomeR = do
|
getHomeR = do
|
||||||
(btnWdgt, btnEnctype) <- generateFormPost (buttonForm :: Form CreateButton)
|
(btnWdgt, btnEnctype) <- generateFormPost (buttonForm :: Form CreateButton)
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle "Willkommen zum ReWorX Test!"
|
setTitle "Willkommen zum UniworkY Test!"
|
||||||
$(widgetFile "home")
|
$(widgetFile "home")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,12 +2,13 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
inherit (nixpkgs) haskell pkgs;
|
inherit (nixpkgs) haskell pkgs;
|
||||||
|
haskellPackages = if ghc.version == pkgs.haskellPackages.ghc.version then pkgs.haskellPackages else pkgs.haskell.packages."ghc${builtins.replaceStrings ["."] [""] ghc.version}";
|
||||||
in haskell.lib.buildStackProject {
|
in haskell.lib.buildStackProject {
|
||||||
inherit ghc;
|
inherit ghc;
|
||||||
name = "stackenv";
|
name = "stackenv";
|
||||||
buildInputs = (with pkgs;
|
buildInputs = (with pkgs;
|
||||||
[ postgresql zlib openldap cyrus_sasl.dev
|
[ postgresql zlib openldap cyrus_sasl.dev
|
||||||
]) ++ (with haskell.packages."ghc${builtins.replaceStrings ["."] [""] ghc.version}";
|
]) ++ (with haskellPackages;
|
||||||
[ yesod-bin
|
[ yesod-bin
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<div .container>
|
<div .container>
|
||||||
<h1>ReWorX - Demo
|
<h1>UniworkY - Demo
|
||||||
<h3>
|
<h3>
|
||||||
Testumgebung für die Re-Implementierung von <a href="https://uniworx.ifi.lmu.de/">UniWorX</a>
|
Testumgebung für die Re-Implementierung von <a href="https://uniworx.ifi.lmu.de/">UniWorX</a>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
$newline never
|
$newline never
|
||||||
<aside .main__aside>
|
<aside .main__aside>
|
||||||
<div .asidenav>
|
<div .asidenav>
|
||||||
<div .asidenav__box--dont-hide>
|
<div .asidenav__box>
|
||||||
<ul .asidenav__list>
|
<ul .asidenav__list>
|
||||||
$forall menuType <- menuTypes
|
$forall menuType <- menuTypes
|
||||||
$case menuType
|
$case menuType
|
||||||
@ -13,14 +13,20 @@ $newline never
|
|||||||
<div .asidenav__link-label>#{label}
|
<div .asidenav__link-label>#{label}
|
||||||
$of _
|
$of _
|
||||||
|
|
||||||
<div .asidenav__box--dont-hide>
|
<div .asidenav__box>
|
||||||
<h3 .asidenav__box-title>
|
<h3 .asidenav__box-title>
|
||||||
WiSe 17/18
|
WiSe 17/18
|
||||||
<ul .asidenav__list>
|
<ul .asidenav__list>
|
||||||
|
$forall (Entity _ Course{..}) <- favourites
|
||||||
|
<li .asidenav__list-item>
|
||||||
|
<a .asidenav__link-wrapper href=@{CourseR courseTermId courseShorthand CourseShowR}>
|
||||||
|
<div .asidenav__link-shorthand>#{courseShorthand}
|
||||||
|
<div .asidenav__link-label>#{courseName}
|
||||||
|
|
||||||
<li .asidenav__list-item>
|
<li .asidenav__list-item>
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/ixd/show">
|
<a .asidenav__link-wrapper href="/course/S2018/ixd/show">
|
||||||
<div .asidenav__link-triple>IXD
|
<div .asidenav__link-shorthand>EXAMPLE
|
||||||
<div .asidenav__link-label>Interaction Design
|
<div .asidenav__link-label>Beispiel-Kurs
|
||||||
<ul .asidenav__nested-list>
|
<ul .asidenav__nested-list>
|
||||||
<li .asidenav__list-item>
|
<li .asidenav__list-item>
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/ixd/ex">Übungsblätter
|
<a .asidenav__link-wrapper href="/course/S2018/ixd/ex">Übungsblätter
|
||||||
@ -28,21 +34,5 @@ $newline never
|
|||||||
<a .asidenav__link-wrapper href="/course/S2018/ixd/show">Klausuren
|
<a .asidenav__link-wrapper href="/course/S2018/ixd/show">Klausuren
|
||||||
<li .asidenav__list-item>
|
<li .asidenav__list-item>
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/ixd/show">Übungsgruppen
|
<a .asidenav__link-wrapper href="/course/S2018/ixd/show">Übungsgruppen
|
||||||
<li .asidenav__list-item>
|
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/ffp/show">
|
|
||||||
<div .asidenav__link-triple>FFP
|
|
||||||
<div .asidenav__link-label>Fortgeschrittene Funktionale Programmierung
|
|
||||||
<ul .asidenav__nested-list>
|
|
||||||
<li .asidenav__list-item>
|
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/ffp/ex">Abgaben
|
|
||||||
<li .asidenav__list-item>
|
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/ffp/show">Klausuren
|
|
||||||
<li .asidenav__list-item>
|
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/dbs/show">
|
|
||||||
<div .asidenav__link-triple>DBS
|
|
||||||
<div .asidenav__link-label>Datenbanksysteme
|
|
||||||
<ul .asidenav__nested-list>
|
|
||||||
<li .asidenav__list-item>
|
|
||||||
<a .asidenav__link-wrapper href="/course/S2018/dbs/ex">Übungsgruppen
|
|
||||||
|
|
||||||
<div .asidenav__toggler>
|
<div .asidenav__toggler>
|
||||||
|
|||||||
@ -24,19 +24,31 @@
|
|||||||
width: 50px;
|
width: 50px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
.main__aside--collapsed .asidenav__box {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
.main__aside--collapsed .asidenav__box--dont-hide {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main__aside--collapsed:not(.main__aside--transitioning) .asidenav__box {
|
.asidenav__link-wrapper {
|
||||||
height: 0;
|
.asidenav__link-shorthand {
|
||||||
padding: 0;
|
display: flex;
|
||||||
margin: 0;
|
position: static;
|
||||||
visibility: hidden;
|
background-color: var(--darkbase);
|
||||||
|
color: var(--whitebase);
|
||||||
|
height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
text-align: center;
|
||||||
|
opacity: 1;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1em;
|
||||||
|
margin-right: 13px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
outline: 1px solid white;
|
||||||
|
text-transform: uppercase;
|
||||||
|
word-break: break-all;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.asidenav__link-label {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.asidenav {
|
.asidenav {
|
||||||
@ -63,13 +75,6 @@
|
|||||||
right: 12px !important;
|
right: 12px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.asidenav__box {
|
|
||||||
margin: 10px 0;
|
|
||||||
padding: 10px 0;
|
|
||||||
width: 100%;
|
|
||||||
border-bottom: 4px solid var(--whitebase);
|
|
||||||
background-color: var(--darkbase);
|
|
||||||
}
|
|
||||||
|
|
||||||
.asidenav__box-title {
|
.asidenav__box-title {
|
||||||
padding: 7px 13px;
|
padding: 7px 13px;
|
||||||
@ -79,6 +84,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* hover sub-menus */
|
||||||
.asidenav__nested-list {
|
.asidenav__nested-list {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
@ -86,7 +92,9 @@
|
|||||||
color: var(--fontbase);
|
color: var(--fontbase);
|
||||||
transform: translateX(0);
|
transform: translateX(0);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: all .2s ease;
|
transition: all .2s ease-out;
|
||||||
|
width: 0;
|
||||||
|
overflow: hidden;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
|
|
||||||
.asidenav__list-item {
|
.asidenav__list-item {
|
||||||
@ -125,6 +133,7 @@
|
|||||||
.asidenav__nested-list {
|
.asidenav__nested-list {
|
||||||
transform: translateX(100%);
|
transform: translateX(100%);
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.asidenav__link-wrapper,
|
.asidenav__link-wrapper,
|
||||||
@ -132,8 +141,9 @@
|
|||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.asidenav__link-triple {
|
.asidenav__link-shorthand {
|
||||||
transform: scale(1.2, 1);
|
transform: scale(1.05, 1.0);
|
||||||
|
transform-origin: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -160,17 +170,25 @@
|
|||||||
width: 50px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.asidenav__link-triple {
|
.asidenav__link-shorthand {
|
||||||
background-color: var(--darkbase);
|
display: block;
|
||||||
color: var(--whitebase);
|
position: absolute;
|
||||||
height: 50px;
|
color: var(--greybase);
|
||||||
width: 50px;
|
|
||||||
display: inline-block;
|
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
text-align: center;
|
opacity: 0.3;
|
||||||
margin-right: 13px;
|
right: 10px;
|
||||||
flex-shrink: 0;
|
top: 0;
|
||||||
outline: 1px solid white;
|
font-size: 40px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
transition: transform .2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.asidenav__link-label {
|
||||||
|
padding-left: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.glyphicon + .asidenav__link-label {
|
||||||
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user