Homepage made almost presentable
This commit is contained in:
parent
b8e1406a3b
commit
adcaef4642
@ -9,6 +9,7 @@ Term: Semester
|
|||||||
TermPlaceholder: W/S + vierstellige Jahreszahl
|
TermPlaceholder: W/S + vierstellige Jahreszahl
|
||||||
TermEditHeading: Semester editieren/anlegen
|
TermEditHeading: Semester editieren/anlegen
|
||||||
|
|
||||||
|
Course: Kurs
|
||||||
CourseNewOk tid@TermIdentifier courseShortHand@Text: Kurs #{termToText tid}-#{courseShortHand} wurde erfolgreich erstellt.
|
CourseNewOk tid@TermIdentifier courseShortHand@Text: Kurs #{termToText tid}-#{courseShortHand} wurde erfolgreich erstellt.
|
||||||
CourseEditOk tid@TermIdentifier courseShortHand@Text: Kurs #{termToText tid}-#{courseShortHand} wurde erfolgreich geändert.
|
CourseEditOk tid@TermIdentifier courseShortHand@Text: Kurs #{termToText tid}-#{courseShortHand} wurde erfolgreich geändert.
|
||||||
CourseNewDupShort tid@TermIdentifier courseShortHand@Text: Kurs #{termToText tid}-#{courseShortHand} konnte nicht erstellt werden: Es gibt bereits einen anderen Kurs mit dem Kürzel #{courseShortHand} in diesem Semester.
|
CourseNewDupShort tid@TermIdentifier courseShortHand@Text: Kurs #{termToText tid}-#{courseShortHand} konnte nicht erstellt werden: Es gibt bereits einen anderen Kurs mit dem Kürzel #{courseShortHand} in diesem Semester.
|
||||||
@ -19,6 +20,7 @@ TermCourseListTitle tid@TermIdentifier: Kurse #{termToText tid}
|
|||||||
CourseEditHeading: Kurs editieren/anlegen
|
CourseEditHeading: Kurs editieren/anlegen
|
||||||
CourseEditTitle: Kurs editieren/anlegen
|
CourseEditTitle: Kurs editieren/anlegen
|
||||||
|
|
||||||
|
Sheet: Blatt
|
||||||
SheetNewOk tid@TermIdentifier courseShortHand@Text sheetName@Text: Neues Übungsblatt #{sheetName} wurde im Kurs #{termToText tid}-#{courseShortHand} erfolgreich erstellt.
|
SheetNewOk tid@TermIdentifier courseShortHand@Text sheetName@Text: Neues Übungsblatt #{sheetName} wurde im Kurs #{termToText tid}-#{courseShortHand} erfolgreich erstellt.
|
||||||
SheetTitle tid@TermIdentifier courseShortHand@Text sheetName@Text: #{termToText tid}-#{courseShortHand} #{sheetName}
|
SheetTitle tid@TermIdentifier courseShortHand@Text sheetName@Text: #{termToText tid}-#{courseShortHand} #{sheetName}
|
||||||
SheetTitleNew tid@TermIdentifier courseShortHand@Text : #{termToText tid}-#{courseShortHand}: Neues Übungsblatt
|
SheetTitleNew tid@TermIdentifier courseShortHand@Text : #{termToText tid}-#{courseShortHand}: Neues Übungsblatt
|
||||||
@ -28,6 +30,9 @@ SheetDelTitle tid@TermIdentifier courseShortHand@Text sheetName@Text: Übun
|
|||||||
SheetDelText submissionNo@Int: Dies kann nicht mehr rückgängig gemacht werden! Alle Einreichungen gehen ebenfalls verloren! Es gibt #{show submissionNo} Abgaben.
|
SheetDelText submissionNo@Int: Dies kann nicht mehr rückgängig gemacht werden! Alle Einreichungen gehen ebenfalls verloren! Es gibt #{show submissionNo} Abgaben.
|
||||||
SheetDelOk tid@TermIdentifier courseShortHand@Text sheetName@Text: #{termToText tid}-#{courseShortHand}: Übungsblatt #{sheetName} gelöscht.
|
SheetDelOk tid@TermIdentifier courseShortHand@Text sheetName@Text: #{termToText tid}-#{courseShortHand}: Übungsblatt #{sheetName} gelöscht.
|
||||||
|
|
||||||
|
Deadline: Abgabe
|
||||||
|
Done: Eingereicht
|
||||||
|
|
||||||
Unauthorized: Sie haben hierfür keine explizite Berechtigung.
|
Unauthorized: Sie haben hierfür keine explizite Berechtigung.
|
||||||
UnauthorizedAnd l@Text r@Text: #{l} UND #{r}
|
UnauthorizedAnd l@Text r@Text: #{l} UND #{r}
|
||||||
UnauthorizedOr l@Text r@Text: #{l} ODER #{r}
|
UnauthorizedOr l@Text r@Text: #{l} ODER #{r}
|
||||||
|
|||||||
3
routes
3
routes
@ -30,9 +30,10 @@
|
|||||||
/favicon.ico FaviconR GET !free
|
/favicon.ico FaviconR GET !free
|
||||||
/robots.txt RobotsR GET !free
|
/robots.txt RobotsR GET !free
|
||||||
|
|
||||||
/ HomeR GET POST !free
|
/ HomeR GET !free
|
||||||
/profile ProfileR GET !free
|
/profile ProfileR GET !free
|
||||||
/users UsersR GET -- no tags, i.e. admins only
|
/users UsersR GET -- no tags, i.e. admins only
|
||||||
|
/admin/test AdminTestR GET POST
|
||||||
|
|
||||||
/terms TermShowR GET !free
|
/terms TermShowR GET !free
|
||||||
/terms/current TermCurrentR GET !free
|
/terms/current TermCurrentR GET !free
|
||||||
|
|||||||
@ -43,6 +43,7 @@ import Handler.Common
|
|||||||
import Handler.Home
|
import Handler.Home
|
||||||
import Handler.Profile
|
import Handler.Profile
|
||||||
import Handler.Users
|
import Handler.Users
|
||||||
|
import Handler.Admin
|
||||||
import Handler.Term
|
import Handler.Term
|
||||||
import Handler.Course
|
import Handler.Course
|
||||||
import Handler.Sheet
|
import Handler.Sheet
|
||||||
|
|||||||
@ -637,6 +637,22 @@ pageActions (TermCourseListR _) =
|
|||||||
, menuItemAccessCallback' = return True
|
, menuItemAccessCallback' = return True
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
pageActions (HomeR) =
|
||||||
|
[
|
||||||
|
-- NavbarAside $ MenuItem
|
||||||
|
-- { menuItemLabel = "Benutzer"
|
||||||
|
-- , menuItemIcon = Just "users"
|
||||||
|
-- , menuItemRoute = UsersR
|
||||||
|
-- , menuItemAccessCallback' = return True
|
||||||
|
-- }
|
||||||
|
-- ,
|
||||||
|
NavbarAside $ MenuItem
|
||||||
|
{ menuItemLabel = "AdminDemo"
|
||||||
|
, menuItemIcon = Nothing
|
||||||
|
, menuItemRoute = AdminTestR
|
||||||
|
, menuItemAccessCallback' = return True
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
pageActions _ = []
|
pageActions _ = []
|
||||||
|
|
||||||
@ -659,6 +675,8 @@ pageHeading (CourseR tid csh CShowR)
|
|||||||
Entity _ Course{..} <- handlerToWidget . runDB . getBy404 $ CourseTermShort tid csh
|
Entity _ Course{..} <- handlerToWidget . runDB . getBy404 $ CourseTermShort tid csh
|
||||||
toWidget courseName
|
toWidget courseName
|
||||||
-- TODO: add headings for more single course- and single term-pages
|
-- TODO: add headings for more single course- and single term-pages
|
||||||
|
pageHeading (AdminTestR)
|
||||||
|
= Just $ [whamlet|Internal Code Demonstration Page|]
|
||||||
pageHeading _
|
pageHeading _
|
||||||
= Nothing
|
= Nothing
|
||||||
|
|
||||||
|
|||||||
60
src/Handler/Admin.hs
Normal file
60
src/Handler/Admin.hs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
|
{-# LANGUAGE NoImplicitPrelude #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE ViewPatterns #-}
|
||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
{-# LANGUAGE QuasiQuotes #-}
|
||||||
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||||
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
|
|
||||||
|
module Handler.Admin where
|
||||||
|
|
||||||
|
import Import
|
||||||
|
import Handler.Utils
|
||||||
|
|
||||||
|
-- import Data.Time
|
||||||
|
-- import qualified Data.Text as T
|
||||||
|
-- import Data.Function ((&))
|
||||||
|
-- import Yesod.Form.Bootstrap3
|
||||||
|
|
||||||
|
import Web.PathPieces (showToPathPiece, readFromPathPiece)
|
||||||
|
|
||||||
|
-- import Colonnade hiding (fromMaybe)
|
||||||
|
-- import Yesod.Colonnade
|
||||||
|
|
||||||
|
-- import qualified Data.UUID.Cryptographic as UUID
|
||||||
|
|
||||||
|
-- BEGIN - Buttons needed only here
|
||||||
|
data CreateButton = CreateMath | CreateInf -- Dummy for Example
|
||||||
|
deriving (Enum, Eq, Ord, Bounded, Read, Show)
|
||||||
|
|
||||||
|
instance PathPiece CreateButton where -- for displaying the button only, not really for paths
|
||||||
|
toPathPiece = showToPathPiece
|
||||||
|
fromPathPiece = readFromPathPiece
|
||||||
|
|
||||||
|
instance Button CreateButton where
|
||||||
|
label CreateMath = [whamlet|Ma<i>thema</i>tik|]
|
||||||
|
label CreateInf = "Informatik"
|
||||||
|
|
||||||
|
cssClass CreateMath = BCInfo
|
||||||
|
cssClass CreateInf = BCPrimary
|
||||||
|
-- END Button needed here
|
||||||
|
|
||||||
|
|
||||||
|
getAdminTestR :: Handler Html -- Demo Page. Referenzimplementierungen sollte hier gezeigt werden!
|
||||||
|
getAdminTestR = do
|
||||||
|
(btnWdgt, btnEnctype) <- generateFormPost (buttonForm :: Form CreateButton)
|
||||||
|
defaultLayout $ do
|
||||||
|
-- setTitle "UniWorkY Admin Testpage"
|
||||||
|
$(widgetFile "adminTest")
|
||||||
|
|
||||||
|
postAdminTestR :: Handler Html
|
||||||
|
postAdminTestR = do
|
||||||
|
((btnResult,_), _) <- runFormPost $ buttonForm
|
||||||
|
case btnResult of
|
||||||
|
(FormSuccess CreateInf) -> setMessage "Informatik-Knopf gedrückt"
|
||||||
|
(FormSuccess CreateMath) -> addMessage "warning" "Knopf Mathematik erkannt"
|
||||||
|
_other -> return ()
|
||||||
|
getAdminTestR
|
||||||
|
|
||||||
@ -1,57 +1,131 @@
|
|||||||
{-# LANGUAGE RecordWildCards #-}
|
{-# LANGUAGE RecordWildCards #-}
|
||||||
{-# LANGUAGE NoImplicitPrelude #-}
|
{-# LANGUAGE NoImplicitPrelude #-}
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE OverloadedLists #-}
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
{-# LANGUAGE QuasiQuotes #-}
|
{-# LANGUAGE QuasiQuotes #-}
|
||||||
{-# LANGUAGE MultiParamTypeClasses #-}
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
||||||
|
{-# LANGUAGE IncoherentInstances #-} -- why is this needed? Instance for "display deadline" ought to be clear
|
||||||
{-# LANGUAGE TypeFamilies #-}
|
{-# LANGUAGE TypeFamilies #-}
|
||||||
{-# LANGUAGE FlexibleContexts #-}
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
|
{-# LANGUAGE PartialTypeSignatures #-}
|
||||||
|
|
||||||
module Handler.Home where
|
module Handler.Home where
|
||||||
|
|
||||||
import Import
|
import Import
|
||||||
import Handler.Utils
|
import Handler.Utils
|
||||||
|
|
||||||
-- import Data.Time
|
import Data.Time
|
||||||
-- import qualified Data.Text as T
|
-- import qualified Data.Text as T
|
||||||
-- import Yesod.Form.Bootstrap3
|
-- import Yesod.Form.Bootstrap3
|
||||||
|
|
||||||
import Web.PathPieces (showToPathPiece, readFromPathPiece)
|
-- import Web.PathPieces (showToPathPiece, readFromPathPiece)
|
||||||
|
|
||||||
-- import Colonnade
|
-- import Control.Lens
|
||||||
-- import Yesod.Colonnade
|
import Colonnade hiding (fromMaybe, singleton)
|
||||||
|
import Yesod.Colonnade
|
||||||
|
import qualified Database.Esqueleto as E
|
||||||
|
|
||||||
-- import qualified Data.UUID.Cryptographic as UUID
|
-- import qualified Data.UUID.Cryptographic as UUID
|
||||||
|
|
||||||
-- BEGIN - Buttons needed only here
|
|
||||||
data CreateButton = CreateMath | CreateInf -- Dummy for Example
|
|
||||||
deriving (Enum, Eq, Ord, Bounded, Read, Show)
|
|
||||||
|
|
||||||
instance PathPiece CreateButton where -- for displaying the button only, not really for paths
|
-- Some constants:
|
||||||
toPathPiece = showToPathPiece
|
nrSheetDeadlines :: Int64
|
||||||
fromPathPiece = readFromPathPiece
|
nrSheetDeadlines = 10
|
||||||
|
offSheetDeadlines :: NominalDiffTime
|
||||||
|
offSheetDeadlines = 15
|
||||||
|
--nrExamDeadlines = 10
|
||||||
|
--offExamDeadlines = 15
|
||||||
|
--nrCourseDeadlines = 10
|
||||||
|
--offCourseDeadlines = 15
|
||||||
|
|
||||||
instance Button CreateButton where
|
|
||||||
label CreateMath = [whamlet|Ma<i>thema</i>tik|]
|
|
||||||
label CreateInf = "Informatik"
|
|
||||||
|
|
||||||
cssClass CreateMath = BCInfo
|
|
||||||
cssClass CreateInf = BCPrimary
|
|
||||||
-- END Button needed here
|
|
||||||
|
|
||||||
getHomeR :: Handler Html
|
getHomeR :: Handler Html
|
||||||
getHomeR = do
|
getHomeR = do
|
||||||
(btnWdgt, btnEnctype) <- generateFormPost (buttonForm :: Form CreateButton)
|
muid <- maybeAuthId
|
||||||
|
-- let uid = fromMaybe (Key 1) muid -- TODO: delete me
|
||||||
|
cTime <- liftIO getCurrentTime
|
||||||
|
let fTime = addUTCTime (offSheetDeadlines * nominalDay) cTime
|
||||||
|
|
||||||
|
tableData :: (Maybe (Key User))
|
||||||
|
-> E.InnerJoin (E.InnerJoin (E.SqlExpr (Entity CourseParticipant))
|
||||||
|
(E.SqlExpr (Entity Course )))
|
||||||
|
(E.SqlExpr (Entity Sheet ))
|
||||||
|
-> E.SqlQuery ( E.SqlExpr (E.Value (Key Term))
|
||||||
|
, E.SqlExpr (E.Value Text)
|
||||||
|
, E.SqlExpr (E.Value Text)
|
||||||
|
, E.SqlExpr (E.Value UTCTime))
|
||||||
|
|
||||||
|
-- tableData Nothing ( course `E.InnerJoin` sheet) = do
|
||||||
|
-- E.on $ course E.^. CourseId E.==. sheet E.^. SheetCourse
|
||||||
|
-- E.where_ $ sheet E.^. SheetActiveTo E.<=. E.val fTime
|
||||||
|
-- E.&&. sheet E.^. SheetActiveTo E.>=. E.val cTime
|
||||||
|
-- E.limit nrSheetDeadlines
|
||||||
|
-- E.orderBy [ E.asc $ sheet E.^. SheetActiveTo
|
||||||
|
-- , E.desc $ sheet E.^. SheetName
|
||||||
|
-- , E.desc $ course E.^. CourseShorthand
|
||||||
|
-- ]
|
||||||
|
-- E.limit nrSheetDeadlines
|
||||||
|
-- return
|
||||||
|
-- ( course E.^. CourseTerm
|
||||||
|
-- , course E.^. CourseShorthand
|
||||||
|
-- , sheet E.^. SheetName
|
||||||
|
-- , sheet E.^. SheetActiveTo
|
||||||
|
-- )
|
||||||
|
|
||||||
|
tableData (Just uid) (participant `E.InnerJoin` course `E.InnerJoin` sheet) = do
|
||||||
|
E.on $ course E.^. CourseId E.==. sheet E.^. SheetCourse
|
||||||
|
E.on $ course E.^. CourseId E.==. participant E.^. CourseParticipantCourse
|
||||||
|
E.where_ $ participant E.^. CourseParticipantUser E.==. E.val uid
|
||||||
|
E.&&. sheet E.^. SheetActiveTo E.<=. E.val fTime
|
||||||
|
E.&&. sheet E.^. SheetActiveTo E.>=. E.val cTime
|
||||||
|
E.orderBy [ E.asc $ sheet E.^. SheetActiveTo
|
||||||
|
, E.desc $ sheet E.^. SheetName
|
||||||
|
, E.desc $ course E.^. CourseShorthand
|
||||||
|
]
|
||||||
|
E.limit nrSheetDeadlines
|
||||||
|
return
|
||||||
|
( course E.^. CourseTerm
|
||||||
|
, course E.^. CourseShorthand
|
||||||
|
, sheet E.^. SheetName
|
||||||
|
, sheet E.^. SheetActiveTo
|
||||||
|
)
|
||||||
|
|
||||||
|
colonnade :: Colonnade Sortable (DBRow (E.Value (Key Term), E.Value Text, E.Value Text, E.Value UTCTime)) (Cell UniWorX)
|
||||||
|
colonnade = mconcat
|
||||||
|
[ -- dbRow
|
||||||
|
sortable (Just "course") (i18nCell MsgCourse) $ \DBRow{ dbrOutput=(E.Value tid, E.Value csh, _, _) } ->
|
||||||
|
cell [whamlet|<a href=@{CourseR tid csh CShowR}>#{display csh}|]
|
||||||
|
, sortable (Just "sheet") (i18nCell MsgSheet) $ \DBRow{ dbrOutput=(E.Value tid, E.Value csh, E.Value shn, _) } ->
|
||||||
|
cell [whamlet|<a href=@{CSheetR tid csh shn SShowR}>#{display shn}|]
|
||||||
|
, sortable (Just "deadline") (i18nCell MsgDeadline) $ \DBRow{ dbrOutput=(_, _, _, E.Value deadline) } ->
|
||||||
|
textCell $ display deadline
|
||||||
|
, sortable (Just "done") (i18nCell MsgDone) $ \DBRow{ dbrOutput=(_, _, _, _) } ->
|
||||||
|
textCell $ "?"
|
||||||
|
]
|
||||||
|
sheetTable <- dbTable def $ DBTable
|
||||||
|
{ dbtSQLQuery = tableData muid
|
||||||
|
, dbtColonnade = colonnade
|
||||||
|
, dbtSorting = [ ( "term"
|
||||||
|
, SortColumn $ \(_ `E.InnerJoin` course `E.InnerJoin` _ ) -> course E.^. CourseTerm
|
||||||
|
)
|
||||||
|
, ( "course"
|
||||||
|
, SortColumn $ \(_ `E.InnerJoin` course `E.InnerJoin` _ ) -> course E.^. CourseShorthand
|
||||||
|
)
|
||||||
|
-- TODO
|
||||||
|
]
|
||||||
|
, dbtFilter = mempty {- [ ( "term"
|
||||||
|
, FilterColumn $ \(course `E.InnerJoin` _ `E.InnerJoin` _ ) tids -> if
|
||||||
|
| Set.null tids -> E.val True :: E.SqlExpr (E.Value Bool)
|
||||||
|
| otherwise -> course E.^. CourseTerm `E.in_` E.valList (Set.toList tids)
|
||||||
|
)
|
||||||
|
] -}
|
||||||
|
, dbtAttrs = tableDefault
|
||||||
|
, dbtIdent = "upcomingdeadlines" :: Text
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitle "Willkommen zum Uniworky Test!"
|
setTitle "Willkommen zum Uniworky Test!"
|
||||||
$(widgetFile "home")
|
$(widgetFile "home")
|
||||||
|
|
||||||
|
|
||||||
postHomeR :: Handler Html
|
|
||||||
postHomeR = do
|
|
||||||
((btnResult,_), _) <- runFormPost $ buttonForm
|
|
||||||
case btnResult of
|
|
||||||
(FormSuccess CreateInf) -> setMessage "Informatik-Knopf gedrückt"
|
|
||||||
(FormSuccess CreateMath) -> addMessage "warning" "Knopf Mathematik erkannt"
|
|
||||||
_other -> return ()
|
|
||||||
getHomeR
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
module Handler.Utils.Form where
|
module Handler.Utils.Form where
|
||||||
|
|
||||||
import Handler.Utils.Form.Types
|
import Handler.Utils.Form.Types
|
||||||
|
import Handler.Utils.Templates
|
||||||
|
|
||||||
import Handler.Utils.DateTime
|
import Handler.Utils.DateTime
|
||||||
|
|
||||||
|
|||||||
@ -35,6 +35,9 @@ numberColonnade = headed "Nr" (fromString.show)
|
|||||||
pairColonnade :: (Functor h) => Colonnade h a c -> Colonnade h b c -> Colonnade h (a,b) c
|
pairColonnade :: (Functor h) => Colonnade h a c -> Colonnade h b c -> Colonnade h (a,b) c
|
||||||
pairColonnade a b = mconcat [ lmap fst a, lmap snd b]
|
pairColonnade a b = mconcat [ lmap fst a, lmap snd b]
|
||||||
|
|
||||||
|
i18nCell :: RenderMessage site a => a -> Cell site
|
||||||
|
i18nCell msg = cell [whamlet|_{msg}|]
|
||||||
|
|
||||||
|
|
||||||
-- Table Modification
|
-- Table Modification
|
||||||
encodeHeadedWidgetTableNumbered :: Attribute -> Colonnade Headed a (WidgetT site IO ()) -> [a] -> WidgetT site IO ()
|
encodeHeadedWidgetTableNumbered :: Attribute -> Colonnade Headed a (WidgetT site IO ()) -> [a] -> WidgetT site IO ()
|
||||||
|
|||||||
44
templates/adminTest.hamlet
Normal file
44
templates/adminTest.hamlet
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<div .container>
|
||||||
|
<h1>Uniworky - Admin Demopage
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Diese interne Seite dient lediglich zum Testen diverser Funktionalitäten
|
||||||
|
und zur Demonstration der verschiedenen Hilfsfunktionen/Module.
|
||||||
|
|
||||||
|
Der Handler sollte jeweils aktuelle Beispiele für alle möglichen Funktionalitäten enthalten, so dass man immer weiß, wo man nachschlagen kann.
|
||||||
|
|
||||||
|
|
||||||
|
<div .container>
|
||||||
|
<h2 .js-show-hide__toggle>Teilweise funktionierende Abschnitte
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li .list-group-item>
|
||||||
|
<a href=@{UsersR}>Benutzer Verwaltung
|
||||||
|
|
||||||
|
<li .list-group-item>
|
||||||
|
<a href=@{TermShowR}>Semester Verwaltung
|
||||||
|
<a href=@{TermEditR}>Neues Semester anlegen
|
||||||
|
|
||||||
|
<li .list-group-item>
|
||||||
|
<a href=@{CourseNewR}>Kurse anlegen
|
||||||
|
|
||||||
|
<li .list-group-item>
|
||||||
|
<a href=@{SubmissionListR}>Dateien hochladen und abrufen
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<div .container>
|
||||||
|
<h2>Funktionen zum Testen
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Knopf-Test:
|
||||||
|
<form .form-inline method=post action=@{AdminTestR} enctype=#{btnEnctype}>
|
||||||
|
^{btnWdgt}
|
||||||
|
<li><br>
|
||||||
|
Modals:
|
||||||
|
^{modal ".toggler1" Nothing}
|
||||||
|
<a href="/" .btn.toggler1>Klick mich für Ajax-Test
|
||||||
|
<noscript>(Für Modals bitte JS aktivieren)</noscript>
|
||||||
|
^{modal ".toggler2" (Just "Test Inhalt für Modal")}
|
||||||
|
<div .btn.toggler2>Klick mich für Content-Test
|
||||||
|
<noscript>(Für Modals bitte JS aktivieren)</noscript>
|
||||||
@ -1,46 +1,21 @@
|
|||||||
<div .container>
|
<div .container>
|
||||||
<h1>Uniworky - Demo
|
|
||||||
<h3>
|
<h3>
|
||||||
Testumgebung für die Re-Implementierung von <a href="https://uniworx.ifi.lmu.de/">UniWorX</a>
|
Re-Implementierung von <a href="https://uniworx.ifi.lmu.de/">UniWorX</a>
|
||||||
<p>
|
|
||||||
Die Reimplementierung von
|
|
||||||
UniWorX ist noch nicht abgeschlossen.
|
|
||||||
|
|
||||||
<div .alert .alert-danger>
|
<div .alert .alert-danger>
|
||||||
<div .alert__content>Das System ist noch nicht produktiv einsetzbar
|
<div .alert__content>
|
||||||
|
Vorabversion!
|
||||||
|
Die Implementierung von
|
||||||
|
UniWorkY ist noch nicht abgeschlossen.
|
||||||
|
|
||||||
<hr>
|
<h1>Anstehende Übungsblätter
|
||||||
<div .container>
|
<div .container>
|
||||||
<h2 .js-show-hide__toggle>Teilweise funktionierende Abschnitte
|
$maybe _ <- muid
|
||||||
|
^{sheetTable}
|
||||||
|
|
||||||
<ul>
|
<h1>Anstehende Klausuren
|
||||||
<li .list-group-item>
|
TODO
|
||||||
<a href=@{UsersR}>Benutzer Verwaltung
|
|
||||||
|
|
||||||
<li .list-group-item>
|
<h1>Anstehende Kursanmeldungen
|
||||||
<a href=@{TermShowR}>Semester Verwaltung
|
TODO
|
||||||
<a href=@{TermEditR}>Neues Semester anlegen
|
|
||||||
|
|
||||||
<li .list-group-item>
|
|
||||||
<a href=@{CourseNewR}>Kurse anlegen
|
|
||||||
|
|
||||||
<li .list-group-item>
|
|
||||||
<a href=@{SubmissionListR}>Dateien hochladen und abrufen
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<div .container>
|
|
||||||
<h2>Funktionen zum Testen
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Knopf-Test:
|
|
||||||
<form .form-inline method=post action=@{HomeR} enctype=#{btnEnctype}>
|
|
||||||
^{btnWdgt}
|
|
||||||
<li><br>
|
|
||||||
Modals:
|
|
||||||
^{modal ".toggler1" Nothing}
|
|
||||||
<a href="/" .btn.toggler1>Klick mich für Ajax-Test
|
|
||||||
<noscript>(Für Modals bitte JS aktivieren)</noscript>
|
|
||||||
^{modal ".toggler2" (Just "Test Inhalt für Modal")}
|
|
||||||
<div .btn.toggler2>Klick mich für Content-Test
|
|
||||||
<noscript>(Für Modals bitte JS aktivieren)</noscript>
|
|
||||||
|
|||||||
@ -18,4 +18,4 @@ $# new files
|
|||||||
<span .unpack-zip-info-toggler>?
|
<span .unpack-zip-info-toggler>?
|
||||||
|
|
||||||
$# TODO: make modal available in this scope
|
$# TODO: make modal available in this scope
|
||||||
$# ^{modal ".unpack-zip-info-toggler" (Just "Entpackt zips automatisch nach dem Upload und fügt den Inhalt im Stamm-Verzeichnis ein.")}
|
^{modal ".unpack-zip-info-toggler" (Just "Entpackt zips automatisch nach dem Upload und fügt den Inhalt im Stamm-Verzeichnis ein.")}
|
||||||
|
|||||||
Reference in New Issue
Block a user