From 14d37203f83a038458023e400d4aa0afaab684fb Mon Sep 17 00:00:00 2001 From: SJost Date: Fri, 29 Jun 2018 18:28:41 +0200 Subject: [PATCH 01/10] Breadcrumbs and Headings fixed --- messages/de.msg | 7 +++++-- src/Foundation.hs | 34 ++++++++++++++++++++++++++-------- src/Handler/Submission.hs | 2 +- src/Handler/Utils/Form.hs | 3 ++- src/Model/Types.hs | 10 +++++++++- templates/course.hamlet | 2 +- 6 files changed, 44 insertions(+), 14 deletions(-) diff --git a/messages/de.msg b/messages/de.msg index 9d74e3e10..6fa984624 100644 --- a/messages/de.msg +++ b/messages/de.msg @@ -31,6 +31,7 @@ CourseEditHeading: Kurs editieren/anlegen CourseEditTitle: Kurs editieren/anlegen Sheet: Blatt +SheetList tk@TermId courseShortHand@Text : #{display tk}-#{courseShortHand} Übersicht Übungsblätter 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} SheetTitleNew tid@TermIdentifier courseShortHand@Text : #{termToText tid}-#{courseShortHand}: Neues Übungsblatt @@ -65,16 +66,18 @@ UnauthorizedWrite: Sie haben hierfür keine Schreibberechtigung SubmissionWrongSheet: Abgabenummer gehört nicht zum angegebenen Übungsblatt. SubmissionAlreadyExists: Sie haben bereits eine Abgabe zu diesem Übungsblatt. -SubmissionTitle tid@TermIdentifier courseShortHand@Text sheetName@Text: #{termToText tid}-#{courseShortHand} #{sheetName}: Abgabe editieren/anlegen +SubmissionTitle tk@TermId courseShortHand@Text sheetName@Text: #{display tk}-#{courseShortHand} #{sheetName}: Abgabe editieren/anlegen SubmissionMember g@Int: Mitabgebende(r) ##{tshow g} SubmissionArchive: Zip-Archiv der Abgabedatei(en) SubmissionFile: Datei zur Abgabe SubmissionAlreadyExistsFor user@Text: #{user} hat bereits eine Abgabe zu diesem bÜbungsblatt. + EMail: E-Mail EMailUnknown email@Text: E-Mail #{email} gehört zu keinem bekannten Benutzer. -NotAParticipant user@Text tid@TermIdentifier csh@Text: #{user} ist nicht im Kurs #{termToText tid}-#{csh} angemeldet. +NotAParticipant user@Text tid@TermIdentifier csh@Text: #{user} ist nicht im Kurs #{display tid}-#{csh} angemeldet. +Users: Benutzer HomeHeading: Aktuelle Termine ProfileHeading: Benutzerprofil und Einstellungen ProfileDataHeading: Gespeicherte Benutzerdaten diff --git a/src/Foundation.hs b/src/Foundation.hs index 89e96385b..c04f2c79c 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -569,8 +569,9 @@ instance Yesod UniWorX where -- Define breadcrumbs. instance YesodBreadcrumbs UniWorX where breadcrumb TermShowR = return ("Semester", Just HomeR) - breadcrumb TermEditR = return ("Neu", Just TermShowR) - breadcrumb (TermEditExistR _) = return ("Editieren", Just TermShowR) + breadcrumb TermEditR = return ("Neu", Just TermCurrentR) + breadcrumb TermCurrentR = return ("Aktuell", Just TermShowR) + breadcrumb (TermEditExistR tid) = return ("Editieren", Just $ TermCourseListR tid) breadcrumb CourseListR = return ("Kurs", Just HomeR) breadcrumb (TermCourseListR term) = return (toPathPiece term, Just TermShowR) @@ -588,11 +589,14 @@ instance YesodBreadcrumbs UniWorX where breadcrumb SubmissionListR = return ("Abgaben", Just HomeR) - breadcrumb HomeR = return ("UniWorkY", Nothing) - breadcrumb (AuthR _) = return ("Login", Just HomeR) - breadcrumb ProfileR = return ("Profile", Just HomeR) - breadcrumb ProfileDataR = return ("Data", Just ProfileR) - breadcrumb _ = return ("home", Nothing) + breadcrumb HomeR = return ("UniWorkY", Nothing) + breadcrumb UsersR = return ("Benutzer", Just HomeR) + breadcrumb (AdminUserR _) = return ("Users" , Just UsersR) + breadcrumb AdminTestR = return ("Test" , Just HomeR) + breadcrumb (AuthR _) = return ("Login" , Just HomeR) + breadcrumb ProfileR = return ("Profile" , Just HomeR) + breadcrumb ProfileDataR = return ("Data" , Just ProfileR) +-- breadcrumb _ = return ("UniWorkY", Nothing) -- Default is no breadcrumb at all pageActions :: Route UniWorX -> [MenuTypes] pageActions (CourseR tid csh CShowR) = @@ -655,13 +659,19 @@ pageActions TermShowR = , menuItemAccessCallback' = return True } ] -pageActions (TermCourseListR _) = +pageActions (TermCourseListR tid) = [ PageActionPrime $ MenuItem { menuItemLabel = "Neuen Kurs anlegen" , menuItemIcon = Just "book" , menuItemRoute = CourseNewR , menuItemAccessCallback' = return True } + , PageActionPrime $ MenuItem + { menuItemLabel = "Semster editieren" + , menuItemIcon = Nothing + , menuItemRoute = TermEditExistR tid + , menuItemAccessCallback' = return True + } ] pageActions (ProfileR) = [ PageActionPrime $ MenuItem @@ -696,6 +706,8 @@ i18nHeading msg = liftWidgetT $ toWidget =<< getMessageRender <*> pure msg pageHeading :: Route UniWorX -> Maybe Widget pageHeading HomeR = Just $ i18nHeading MsgHomeHeading +pageHeading UsersR + = Just $ i18nHeading MsgUsers pageHeading (AdminTestR) = Just $ [whamlet|Internal Code Demonstration Page|] pageHeading ProfileR @@ -710,10 +722,16 @@ pageHeading (TermCourseListR tid) = Just . i18nHeading . MsgTermCourseListHeading $ unTermKey tid pageHeading CourseNewR = Just $ i18nHeading MsgCourseEditHeading +pageHeading (CourseR tid csh CEditR) + = Just $ i18nHeading MsgCourseEditHeading pageHeading (CourseR tid csh CShowR) = Just $ do Entity _ Course{..} <- handlerToWidget . runDB . getBy404 $ CourseTermShort tid csh toWidget courseName +pageHeading (CourseR tid csh SheetListR) + = Just $ i18nHeading $ MsgSheetList tid csh +pageHeading (CSheetR tid csh shn SShowR) + = Just $ i18nHeading $ MsgSubmissionTitle tid csh shn -- TODO: add headings for more single course- and single term-pages pageHeading _ = Nothing diff --git a/src/Handler/Submission.hs b/src/Handler/Submission.hs index 01b8d6a78..c66c6686a 100644 --- a/src/Handler/Submission.hs +++ b/src/Handler/Submission.hs @@ -231,7 +231,7 @@ submissionHelper tid csh shn (SubmissionMode mcid) = do mArCid <- fmap ZIPArchiveName <$> traverse encrypt msmid - let pageTitle = MsgSubmissionTitle (unTermKey tid) csh shn + let pageTitle = MsgSubmissionTitle tid csh shn let formTitle = pageTitle let formText = Nothing :: Maybe UniWorXMessage actionUrl <- Data.Maybe.fromJust <$> getCurrentRoute diff --git a/src/Handler/Utils/Form.hs b/src/Handler/Utils/Form.hs index 4b1e2e467..6c9a3389b 100644 --- a/src/Handler/Utils/Form.hs +++ b/src/Handler/Utils/Form.hs @@ -483,7 +483,8 @@ setNameClass fs gName gClass = fs { fsName= Just gName, fsAttrs=("class",gClass) setTooltip :: String -> FieldSettings site -> FieldSettings site setTooltip tt fs | null tt = fs { fsTooltip = Nothing } - | otherwise = fs { fsTooltip = Just $ fromString tt, fsAttrs=("info",fromString tt):(fsAttrs fs) } + | otherwise = fs { fsTooltip = Just $ fromString tt + , fsAttrs=("data-tooltip",fromString tt):(fsAttrs fs) } optionsPersistCryptoId :: forall site backend a msg. ( YesodPersist site diff --git a/src/Model/Types.hs b/src/Model/Types.hs index bab4a2439..3b0f1a084 100644 --- a/src/Model/Types.hs +++ b/src/Model/Types.hs @@ -5,7 +5,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE DeriveGeneric, DeriveDataTypeable #-} {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-} - +{-- # LANGUAGE ExistentialQuantification #-} -- for DA type module Model.Types where @@ -92,6 +92,14 @@ instance DisplayAble SheetFileType where -- deprecated, see RenderMessage instan display SheetSolution = "Musterlösung" display SheetMarking = "Korrekturhinweise" +{- +data DA = forall a . (DisplayAble a) => DA a + +instance DisplayAble DA where + display (DA x) = display x +-} + + data ExamStatus = Attended | NoShow | Voided deriving (Show, Read, Eq, Ord, Enum, Bounded) derivePersistField "ExamStatus" diff --git a/templates/course.hamlet b/templates/course.hamlet index 6b2e77ab9..4f53eba07 100644 --- a/templates/course.hamlet +++ b/templates/course.hamlet @@ -1,4 +1,4 @@ -
+0
$maybe school <- schoolMB From 80fad276925fdecad8b157e896b6ecff305d4a1e Mon Sep 17 00:00:00 2001 From: SJost Date: Fri, 29 Jun 2018 20:24:15 +0200 Subject: [PATCH 02/10] Breadcrumbs and Headings all fixed --- messages/de.msg | 40 ++++++++++-------- src/Foundation.hs | 88 ++++++++++++++++++++++++++------------- src/Handler/Course.hs | 7 +++- src/Handler/Sheet.hs | 18 ++++---- src/Handler/Submission.hs | 4 +- 5 files changed, 97 insertions(+), 60 deletions(-) diff --git a/messages/de.msg b/messages/de.msg index 6fa984624..f6baedfea 100644 --- a/messages/de.msg +++ b/messages/de.msg @@ -11,12 +11,16 @@ SummerTerm year@Integer: Sommersemester #{tshow year} WinterTerm year@Integer: Wintersemester #{tshow year}/#{tshow $ succ year} PSLimitNonPositive: “pagesize” muss größer als null sein Page n@Int64: #{tshow n} -TermEdited tid@TermIdentifier: Semester #{termToText tid} erfolgreich editiert. -TermNewTitle: Semester editiere/anlegen. + +TermsHeading: Semesterübersicht +TermCurrent: Aktuelles Semester +TermEditHeading: Semester editieren/anlegen +TermEditTid tk@TermId: Semester #{display tk} editieren +TermEdited tid@TermIdentifier: Semester #{display tid} erfolgreich editiert. +TermNewTitle: Semester editieren/anlegen. InvalidInput: Eingaben bitte korrigieren. Term: Semester TermPlaceholder: W/S + vierstellige Jahreszahl -TermEditHeading: Semester editieren/anlegen Course: Kurs CourseSecret: Zugangspasswort @@ -25,21 +29,24 @@ CourseEditOk tid@TermIdentifier courseShortHand@Text: Kurs #{termToText ti 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. CourseEditDupShort tid@TermIdentifier courseShortHand@Text: Kurs #{termToText tid}-#{courseShortHand} konnte nicht geändert werden: Es gibt bereits einen anderen Kurs mit dem Kürzel #{courseShortHand} in diesem Semester. FFSheetName: Name -TermCourseListHeading tid@TermIdentifier: Kursübersicht #{termToText tid} -TermCourseListTitle tid@TermIdentifier: Kurse #{termToText tid} -CourseEditHeading: Kurs editieren/anlegen +TermCourseListHeading tk@TermId: Kursübersicht #{display tk} +TermCourseListTitle tk@TermId: Kurse #{display tk} +CourseNewHeading: Neuen Kurs anlegen +CourseEditHeading tk@TermId courseShortHand@Text: Kurs #{display tk}-#{courseShortHand} editieren CourseEditTitle: Kurs editieren/anlegen Sheet: Blatt -SheetList tk@TermId courseShortHand@Text : #{display tk}-#{courseShortHand} Übersicht Übungsblätter -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} -SheetTitleNew tid@TermIdentifier courseShortHand@Text : #{termToText tid}-#{courseShortHand}: Neues Übungsblatt -SheetEditOk tid@TermIdentifier courseShortHand@Text sheetName@Text: Übungsblatt #{sheetName} aus Kurs #{termToText tid}-#{courseShortHand} wurde gespeichert. -SheetNameDup tid@TermIdentifier courseShortHand@Text sheetName@Text: Es gibt bereits ein Übungsblatt #{sheetName} in diesem Kurs #{termToText tid}-#{courseShortHand}. -SheetDelTitle tid@TermIdentifier courseShortHand@Text sheetName@Text: Übungsblatt #{sheetName} wirklich aus Kurs #{termToText tid}-#{courseShortHand} herauslöschen? +SheetList tk@TermId courseShortHand@Text: #{display tk}-#{courseShortHand} Übersicht Übungsblätter +SheetNewHeading tk@TermId courseShortHand@Text: #{display tk}-#{courseShortHand} Neues Übungsblatt anlegen +SheetNewOk tk@TermId courseShortHand@Text sheetName@Text: Neues Übungsblatt #{sheetName} wurde im Kurs #{display tk}-#{courseShortHand} erfolgreich erstellt. +SheetTitle tk@TermId courseShortHand@Text sheetName@Text: #{display tk}-#{courseShortHand} #{sheetName} +SheetTitleNew tk@TermId courseShortHand@Text : #{display tk}-#{courseShortHand}: Neues Übungsblatt +SheetEditHead tk@TermId courseShortHand@Text sheetName@Text: #{display tk}-#{courseShortHand} #{sheetName} editieren +SheetEditOk tk@TermId courseShortHand@Text sheetName@Text: Übungsblatt #{sheetName} aus Kurs #{display tk}-#{courseShortHand} wurde gespeichert. +SheetNameDup tk@TermId courseShortHand@Text sheetName@Text: Es gibt bereits ein Übungsblatt #{sheetName} in diesem Kurs #{display tk}-#{courseShortHand}. +SheetDelHead tk@TermId courseShortHand@Text sheetName@Text: Übungsblatt #{sheetName} wirklich aus Kurs #{display tk}-#{courseShortHand} herauslöschen? 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 tk@TermId courseShortHand@Text sheetName@Text: #{display tk}-#{courseShortHand}: Übungsblatt #{sheetName} gelöscht. Deadline: Abgabe Done: Eingereicht @@ -66,7 +73,7 @@ UnauthorizedWrite: Sie haben hierfür keine Schreibberechtigung SubmissionWrongSheet: Abgabenummer gehört nicht zum angegebenen Übungsblatt. SubmissionAlreadyExists: Sie haben bereits eine Abgabe zu diesem Übungsblatt. -SubmissionTitle tk@TermId courseShortHand@Text sheetName@Text: #{display tk}-#{courseShortHand} #{sheetName}: Abgabe editieren/anlegen +SubmissionEditHead tk@TermId courseShortHand@Text sheetName@Text: #{display tk}-#{courseShortHand} #{sheetName}: Abgabe editieren/anlegen SubmissionMember g@Int: Mitabgebende(r) ##{tshow g} SubmissionArchive: Zip-Archiv der Abgabedatei(en) SubmissionFile: Datei zur Abgabe @@ -75,13 +82,12 @@ SubmissionAlreadyExistsFor user@Text: #{user} hat bereits eine Abgabe zu diesem EMail: E-Mail EMailUnknown email@Text: E-Mail #{email} gehört zu keinem bekannten Benutzer. -NotAParticipant user@Text tid@TermIdentifier csh@Text: #{user} ist nicht im Kurs #{display tid}-#{csh} angemeldet. +NotAParticipant user@Text tk@TermId csh@Text: #{user} ist nicht im Kurs #{display tk}-#{csh} angemeldet. Users: Benutzer HomeHeading: Aktuelle Termine ProfileHeading: Benutzerprofil und Einstellungen ProfileDataHeading: Gespeicherte Benutzerdaten -TermsHeading: Semesterübersicht NumCourses n@Int64: #{tshow n} Kurse CloseAlert: Schliessen diff --git a/src/Foundation.hs b/src/Foundation.hs index c04f2c79c..283ae9df5 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -568,35 +568,40 @@ instance Yesod UniWorX where -- Define breadcrumbs. instance YesodBreadcrumbs UniWorX where - breadcrumb TermShowR = return ("Semester", Just HomeR) - breadcrumb TermEditR = return ("Neu", Just TermCurrentR) - breadcrumb TermCurrentR = return ("Aktuell", Just TermShowR) - breadcrumb (TermEditExistR tid) = return ("Editieren", Just $ TermCourseListR tid) - - breadcrumb CourseListR = return ("Kurs", Just HomeR) - breadcrumb (TermCourseListR term) = return (toPathPiece term, Just TermShowR) - breadcrumb (CourseR term course CShowR) = return (course, Just $ TermCourseListR term) - breadcrumb CourseNewR = return ("Neu", Just CourseListR) - breadcrumb (CourseR tid csh CEditR) = return ("Editieren", Just $ CourseR tid csh CShowR) - - breadcrumb (CourseR tid csh SheetListR) = return ("Übungen",Just $ CourseR tid csh CShowR) - breadcrumb (CourseR tid csh SheetNewR ) = return ("Neu", Just $ CourseR tid csh SheetListR) - breadcrumb (CSheetR tid csh shn SShowR) = return (shn, Just $ CourseR tid csh SheetListR) - breadcrumb (CSheetR tid csh shn SEditR) = return ("Edit", Just $ CSheetR tid csh shn SShowR) - breadcrumb (CSheetR tid csh shn SDelR ) = return ("DELETE", Just $ CSheetR tid csh shn SShowR) - breadcrumb (CSheetR tid csh shn (SubmissionR _)) = return ("Abgabe", Just $ CSheetR tid csh shn SShowR) - - breadcrumb SubmissionListR = return ("Abgaben", Just HomeR) - - + breadcrumb (AuthR _) = return ("Login" , Just HomeR) breadcrumb HomeR = return ("UniWorkY", Nothing) breadcrumb UsersR = return ("Benutzer", Just HomeR) - breadcrumb (AdminUserR _) = return ("Users" , Just UsersR) breadcrumb AdminTestR = return ("Test" , Just HomeR) - breadcrumb (AuthR _) = return ("Login" , Just HomeR) + breadcrumb (AdminUserR _) = return ("Users" , Just UsersR) + breadcrumb ProfileR = return ("Profile" , Just HomeR) breadcrumb ProfileDataR = return ("Data" , Just ProfileR) --- breadcrumb _ = return ("UniWorkY", Nothing) -- Default is no breadcrumb at all + + breadcrumb TermShowR = return ("Semester" , Just HomeR) + breadcrumb TermCurrentR = return ("Aktuell" , Just TermShowR) + breadcrumb TermEditR = return ("Neu" , Just TermCurrentR) + breadcrumb (TermEditExistR tid) = return ("Editieren" , Just $ TermCourseListR tid) + breadcrumb (TermCourseListR term) = return (display term, Just TermShowR) + + breadcrumb CourseListR = return ("Kurs" , Just HomeR) + breadcrumb CourseNewR = return ("Neu" , Just CourseListR) + breadcrumb (CourseR tid csh CShowR) = return (csh , Just $ TermCourseListR tid) + -- (CourseR tid csh CRegisterR) -- is POST only + breadcrumb (CourseR tid csh CEditR) = return ("Editieren", Just $ CourseR tid csh CShowR) + breadcrumb (CourseR tid csh SheetListR) = return ("Übungen",Just $ CourseR tid csh CShowR) + breadcrumb (CourseR tid csh SheetNewR ) = return ("Neu", Just $ CourseR tid csh SheetListR) + + breadcrumb (CSheetR tid csh shn SShowR) = return (shn, Just $ CourseR tid csh SheetListR) + -- (CSheetR tid csh shn SFileR) -- just for Downloads + breadcrumb (CSheetR tid csh shn SEditR) = return ("Edit", Just $ CSheetR tid csh shn SShowR) + breadcrumb (CSheetR tid csh shn SDelR ) = return ("DELETE", Just $ CSheetR tid csh shn SShowR) + breadcrumb (CSheetR tid csh shn SubmissionNewR) = return ("Abgabe", Just $ CSheetR tid csh shn SShowR) + breadcrumb (CSheetR tid csh shn SubmissionOwnR) = return ("Abgabe", Just $ CSheetR tid csh shn SShowR) + breadcrumb (CSheetR tid csh shn (SubmissionR _)) = return ("Abgabe", Just $ CSheetR tid csh shn SShowR) + -- Deprecated below + breadcrumb SubmissionListR = return ("Abgaben", Just HomeR) + -- Others + breadcrumb _ = return ("UniWorkY", Nothing) -- Default is no breadcrumb at all pageActions :: Route UniWorX -> [MenuTypes] pageActions (CourseR tid csh CShowR) = @@ -710,28 +715,53 @@ pageHeading UsersR = Just $ i18nHeading MsgUsers pageHeading (AdminTestR) = Just $ [whamlet|Internal Code Demonstration Page|] +pageHeading (AdminUserR _) + = Just $ [whamlet|User Display for Admin|] + pageHeading ProfileR = Just $ i18nHeading MsgProfileHeading pageHeading ProfileDataR = Just $ i18nHeading MsgProfileDataHeading + pageHeading TermShowR = Just $ i18nHeading MsgTermsHeading +pageHeading TermCurrentR + = Just $ i18nHeading MsgTermCurrent pageHeading TermEditR = Just $ i18nHeading MsgTermEditHeading +pageHeading (TermEditExistR tid) + = Just $ i18nHeading $ MsgTermEditTid tid pageHeading (TermCourseListR tid) - = Just . i18nHeading . MsgTermCourseListHeading $ unTermKey tid + = Just . i18nHeading . MsgTermCourseListHeading $ tid + +-- CourseListR -- just a redirect to TermCurrentR pageHeading CourseNewR - = Just $ i18nHeading MsgCourseEditHeading -pageHeading (CourseR tid csh CEditR) - = Just $ i18nHeading MsgCourseEditHeading + = Just $ i18nHeading MsgCourseNewHeading pageHeading (CourseR tid csh CShowR) = Just $ do Entity _ Course{..} <- handlerToWidget . runDB . getBy404 $ CourseTermShort tid csh toWidget courseName +-- (CourseR tid csh CRegisterR) -- just for POST +pageHeading (CourseR tid csh CEditR) + = Just $ i18nHeading $ MsgCourseEditHeading tid csh pageHeading (CourseR tid csh SheetListR) = Just $ i18nHeading $ MsgSheetList tid csh +pageHeading (CourseR tid csh SheetNewR) + = Just $ i18nHeading $ MsgSheetNewHeading tid csh pageHeading (CSheetR tid csh shn SShowR) - = Just $ i18nHeading $ MsgSubmissionTitle tid csh shn + = Just $ i18nHeading $ MsgSheetTitle tid csh shn +-- (CSheetR tid csh shn SFileR) -- just for Downloads +pageHeading (CSheetR tid csh shn SEditR) + = Just $ i18nHeading $ MsgSheetEditHead tid csh shn +pageHeading (CSheetR tid csh shn SDelR) + = Just $ i18nHeading $ MsgSheetDelHead tid csh shn +pageHeading (CSheetR tid csh shn SubmissionNewR) + = Just $ i18nHeading $ MsgSubmissionEditHead tid csh shn +pageHeading (CSheetR tid csh shn SubmissionOwnR) + = Just $ i18nHeading $ MsgSubmissionEditHead tid csh shn +pageHeading (CSheetR tid csh shn (SubmissionR _)) -- TODO: Rethink this one! + = Just $ i18nHeading $ MsgSubmissionEditHead tid csh shn + -- TODO: add headings for more single course- and single term-pages pageHeading _ = Nothing diff --git a/src/Handler/Course.hs b/src/Handler/Course.hs index a8728f2c9..51b6c8a82 100644 --- a/src/Handler/Course.hs +++ b/src/Handler/Course.hs @@ -25,7 +25,7 @@ import qualified Data.UUID.Cryptographic as UUID getCourseListR :: Handler TypedContent -getCourseListR = redirect TermShowR +getCourseListR = redirect TermCurrentR getTermCurrentR :: Handler Html getTermCurrentR = do @@ -33,6 +33,9 @@ getTermCurrentR = do case fromNullable termIds of Nothing -> notFound (Just (maximum -> tid)) -> getTermCourseListR tid + -- why not "redirect $ TermCourseListR tid" + -- Would save us breadcrumbs, headings, etc.? + getTermCourseListR :: TermId -> Handler Html getTermCourseListR tidini = do @@ -73,7 +76,7 @@ getTermCourseListR tidini = do ] let coursesTable = encodeWidgetTable tableSortable colonnadeTerms courses defaultLayout $ do - setTitleI . MsgTermCourseListTitle $ unTermKey tidini + setTitleI . MsgTermCourseListTitle $ tidini $(widgetFile "courses") getCShowR :: TermId -> Text -> Handler Html diff --git a/src/Handler/Sheet.hs b/src/Handler/Sheet.hs index 085e94af9..9ceb30b25 100644 --- a/src/Handler/Sheet.hs +++ b/src/Handler/Sheet.hs @@ -317,7 +317,6 @@ postSEditR = getSEditR handleSheetEdit :: TermId -> Text -> Maybe SheetId -> Maybe SheetForm -> (Sheet -> YesodDB UniWorX (Maybe SheetId)) -> Handler Html handleSheetEdit tid csh msId template dbAction = do - let tident = unTermKey tid let mbshn = sfName <$> template aid <- requireAuthId ((res,formWidget), formEnctype) <- runFormPost $ makeSheetForm msId template @@ -341,20 +340,20 @@ handleSheetEdit tid csh msId template dbAction = do } mbsid <- dbAction newSheet case mbsid of - Nothing -> False <$ addMessageI "danger" (MsgSheetNameDup tident csh sfName) + Nothing -> False <$ addMessageI "danger" (MsgSheetNameDup tid csh sfName) (Just sid) -> do -- save files in DB: whenIsJust sfSheetF $ insertSheetFile' sid SheetExercise whenIsJust sfHintF $ insertSheetFile sid SheetHint whenIsJust sfSolutionF $ insertSheetFile sid SheetSolution insert_ $ SheetEdit aid actTime sid - addMessageI "info" $ MsgSheetEditOk tident csh sfName + addMessageI "info" $ MsgSheetEditOk tid csh sfName return True when saveOkay $ redirect $ CSheetR tid csh sfName SShowR -- redirect must happen outside of runDB (FormFailure msgs) -> forM_ msgs $ (addMessage "warning") . toHtml _ -> return () - let pageTitle = maybe (MsgSheetTitleNew tident csh) - (MsgSheetTitle tident csh) mbshn - let formTitle = pageTitle + let pageTitle = maybe (MsgSheetTitleNew tid csh) + (MsgSheetTitle tid csh) mbshn +-- let formTitle = pageTitle -- no longer used in template let formText = Nothing :: Maybe UniWorXMessage actionUrl <- fromMaybe (CourseR tid csh SheetNewR) <$> getCurrentRoute defaultLayout $ do @@ -365,24 +364,23 @@ handleSheetEdit tid csh msId template dbAction = do getSDelR :: TermId -> Text -> Text -> Handler Html getSDelR tid csh shn = do - let tident = unTermKey tid ((result,formWidget), formEnctype) <- runFormPost (buttonForm :: Form BtnDelete) case result of (FormSuccess BtnAbort) -> redirectUltDest $ CSheetR tid csh shn SShowR (FormSuccess BtnDelete) -> do runDB $ fetchSheetId tid csh shn >>= deleteCascade -- TODO: deleteCascade löscht aber nicht die hochgeladenen Dateien!!! - addMessageI "info" $ MsgSheetDelOk tident csh shn + addMessageI "info" $ MsgSheetDelOk tid csh shn redirect $ CourseR tid csh SheetListR _other -> do submissionno <- runDB $ do sid <- fetchSheetId tid csh shn count [SubmissionSheet ==. sid] - let formTitle = MsgSheetDelTitle tident csh shn + let formTitle = MsgSheetDelHead tid csh shn let formText = Just $ MsgSheetDelText submissionno let actionUrl = CSheetR tid csh shn SDelR defaultLayout $ do - setTitleI $ MsgSheetTitle tident csh shn + setTitleI $ MsgSheetTitle tid csh shn $(widgetFile "formPageI18n") postSDelR :: TermId -> Text -> Text -> Handler Html diff --git a/src/Handler/Submission.hs b/src/Handler/Submission.hs index c66c6686a..ae6fb05cd 100644 --- a/src/Handler/Submission.hs +++ b/src/Handler/Submission.hs @@ -186,7 +186,7 @@ submissionHelper tid csh shn (SubmissionMode mcid) = do let failmsgs = flip Map.foldMapWithKey participants $ \email -> \case Nothing -> [mr $ MsgEMailUnknown $ CI.original email] - (Just (_,False,_)) -> [mr $ MsgNotAParticipant (CI.original email) (unTermKey tid) csh] + (Just (_,False,_)) -> [mr $ MsgNotAParticipant (CI.original email) tid csh] (Just (_,_, True)) -> [mr $ MsgSubmissionAlreadyExistsFor (CI.original email)] _other -> mempty return $ if null failmsgs @@ -231,7 +231,7 @@ submissionHelper tid csh shn (SubmissionMode mcid) = do mArCid <- fmap ZIPArchiveName <$> traverse encrypt msmid - let pageTitle = MsgSubmissionTitle tid csh shn + let pageTitle = MsgSubmissionEditHead tid csh shn let formTitle = pageTitle let formText = Nothing :: Maybe UniWorXMessage actionUrl <- Data.Maybe.fromJust <$> getCurrentRoute From 09d263facedaf4f431294a68fb1caee9826e32bb Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Fri, 29 Jun 2018 20:30:50 +0200 Subject: [PATCH 03/10] added example of dynamically generated tooltip on admin-demo-page --- templates/adminTest.hamlet | 2 +- templates/standalone/tooltip.julius | 29 ++++++++++++++++++++++++++++- templates/standalone/tooltip.lucius | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/templates/adminTest.hamlet b/templates/adminTest.hamlet index f3a48a134..04ea7cc05 100644 --- a/templates/adminTest.hamlet +++ b/templates/adminTest.hamlet @@ -1,7 +1,7 @@

Uniworky - Admin Demopage -

+

Diese interne Seite dient lediglich zum Testen diverser Funktionalitäten und zur Demonstration der verschiedenen Hilfsfunktionen/Module. diff --git a/templates/standalone/tooltip.julius b/templates/standalone/tooltip.julius index e5c33026b..7161b3cf2 100644 --- a/templates/standalone/tooltip.julius +++ b/templates/standalone/tooltip.julius @@ -24,12 +24,39 @@ } }, 250); }); - } + }; + + window.utils.tooltipFromAttribute = function(el) { + var tt = document.createElement('div'); + var handle = document.createElement('div'); + var content = document.createElement('div'); + + tt.classList.add('js-tooltip'); + handle.classList.add('tooltip__handle'); + content.classList.add('tooltip__content', 'hidden'); + + handle.innerText = '?'; + content.innerHTML = el.getAttribute('data-tooltip'); + + tt.appendChild(handle); + tt.appendChild(content); + + if (el.nextSiblingElement) { + el.parentElement.insertBefore(tt, el.nextSiblingElement); + } else { + el.parentElement.appendChild(tt); + } + }; })(); document.addEventListener('DOMContentLoaded', function() { + // initialize tooltips set via `data-tooltip` + Array.from(document.querySelectorAll('[data-tooltip]')).forEach(function(el) { + window.utils.tooltipFromAttribute(el) + }); + // initialize tooltips Array.from(document.querySelectorAll('.js-tooltip')).forEach(function(tt) { window.utils.tooltip(tt); diff --git a/templates/standalone/tooltip.lucius b/templates/standalone/tooltip.lucius index f3df41d12..feaae0b77 100644 --- a/templates/standalone/tooltip.lucius +++ b/templates/standalone/tooltip.lucius @@ -1,5 +1,6 @@ .js-tooltip { position: relative; + display: inline-block; .tooltip__handle { background-color: var(--color-dark); From 677a83d1128f28fced5c2d43361456e57c8f3e39 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Fri, 29 Jun 2018 23:25:31 +0200 Subject: [PATCH 04/10] update fill-db.hs on master --- fill-db.hs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/fill-db.hs b/fill-db.hs index 725718792..cc3dbe804 100755 --- a/fill-db.hs +++ b/fill-db.hs @@ -95,7 +95,6 @@ main = db $ do , courseTerm = TermKey summer2018 , courseSchool = ifi , courseCapacity = Just 20 - , courseHasRegistration = True , courseRegisterFrom = Just now , courseRegisterTo = Just ((3600 * 24 * 60) `addUTCTime` now ) , courseDeregisterUntil = Nothing @@ -122,7 +121,6 @@ main = db $ do , courseTerm = TermKey summer2017 , courseSchool = ifi , courseCapacity = Just 20 - , courseHasRegistration = False , courseRegisterFrom = Nothing , courseRegisterTo = Nothing , courseDeregisterUntil = Nothing @@ -141,7 +139,6 @@ main = db $ do , courseTerm = TermKey summer2018 , courseSchool = ifi , courseCapacity = Just 20 - , courseHasRegistration = True , courseRegisterFrom = Just now , courseRegisterTo = Just ((3600 * 24 * 60) `addUTCTime` now ) , courseDeregisterUntil = Nothing @@ -160,7 +157,6 @@ main = db $ do , courseTerm = TermKey winter2017 , courseSchool = ifi , courseCapacity = Just 30 - , courseHasRegistration = False , courseRegisterFrom = Nothing , courseRegisterTo = Nothing , courseDeregisterUntil = Nothing @@ -179,7 +175,6 @@ main = db $ do , courseTerm = TermKey summer2017 , courseSchool = ifi , courseCapacity = Just 50 - , courseHasRegistration = False , courseRegisterFrom = Nothing , courseRegisterTo = Nothing , courseDeregisterUntil = Nothing @@ -198,7 +193,6 @@ main = db $ do , courseTerm = TermKey summer2018 , courseSchool = ifi , courseCapacity = Just 50 - , courseHasRegistration = False , courseRegisterFrom = Nothing , courseRegisterTo = Nothing , courseDeregisterUntil = Nothing From 53ac99755980350424eb79f19a4230601fc60027 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Fri, 29 Jun 2018 23:24:04 +0200 Subject: [PATCH 05/10] alert-rework --- templates/default-layout.hamlet | 11 +- templates/home.hamlet | 12 +- templates/homeUser.hamlet | 12 +- templates/profileData.hamlet | 11 +- templates/standalone/alerts.julius | 2 +- templates/standalone/alerts.lucius | 178 ++++++++++++++++++++++++----- templates/widgets/asidenav.lucius | 4 + 7 files changed, 177 insertions(+), 53 deletions(-) diff --git a/templates/default-layout.hamlet b/templates/default-layout.hamlet index 7deaa3062..87827d44f 100644 --- a/templates/default-layout.hamlet +++ b/templates/default-layout.hamlet @@ -24,11 +24,12 @@ ^{pageactionprime} - $forall (status, msg) <- mmsgs - $with status2 <- bool status "info" (status == "") -

-
- #{msg} +
+ $forall (status, msg) <- mmsgs + $with status2 <- bool status "info" (status == "") +
+
+ #{msg} diff --git a/templates/home.hamlet b/templates/home.hamlet index 79d063cef..01b241c6c 100644 --- a/templates/home.hamlet +++ b/templates/home.hamlet @@ -2,13 +2,13 @@

Re-Implementierung von UniWorX -
-
- Vorabversion! - Die Implementierung von - UniWorkY ist noch nicht abgeschlossen. +
+
+
+ Vorabversion! + Die Implementierung von + UniWorkY ist noch nicht abgeschlossen.

Kurse mit offener Registrierung
^{courseTable} - diff --git a/templates/homeUser.hamlet b/templates/homeUser.hamlet index fd7ba3f10..70aaac6f5 100644 --- a/templates/homeUser.hamlet +++ b/templates/homeUser.hamlet @@ -2,11 +2,12 @@

Re-Implementierung von UniWorX -
-
- Vorabversion! - Die Implementierung von - UniWorkY ist noch nicht abgeschlossen. +
+
+
+ Vorabversion! + Die Implementierung von + UniWorkY ist noch nicht abgeschlossen.

Anstehende Übungsblätter
@@ -20,4 +21,3 @@

Anstehende Kursanmeldungen TODO - diff --git a/templates/profileData.hamlet b/templates/profileData.hamlet index 1c1930614..6f7564cdc 100644 --- a/templates/profileData.hamlet +++ b/templates/profileData.hamlet @@ -1,9 +1,10 @@
-
-
- TODO: Alle Benutzerbezogenen Daten sollen hier angezeigt - und verlinkt werden - (alle Abgaben, Klausurnoten, etc.) +
+
+
+ TODO: Alle Benutzerbezogenen Daten sollen hier angezeigt + und verlinkt werden + (alle Abgaben, Klausurnoten, etc.) TODO: Hier mehr Daten in Tabellen anzeigen! diff --git a/templates/standalone/alerts.julius b/templates/standalone/alerts.julius index af87ed683..ebf1f744d 100644 --- a/templates/standalone/alerts.julius +++ b/templates/standalone/alerts.julius @@ -10,7 +10,7 @@ closeEl.addEventListener('click', function(event) { alertEl.classList.add('alert--invisible'); }); - alertEl.appendChild(closeEl); + alertEl.insertBefore(closeEl, alertEl.children[0]); } })(); diff --git a/templates/standalone/alerts.lucius b/templates/standalone/alerts.lucius index 69869d997..e18e646ff 100644 --- a/templates/standalone/alerts.lucius +++ b/templates/standalone/alerts.lucius @@ -1,72 +1,190 @@ /* ALERTS */ +.alerts { + position: fixed; + bottom: 5%; + right: 0; + z-index: 20; +} .alert { position: relative; - display: flex; - justify-content: space-between; - background-color: #f5f5f5; + background-color: var(--color-dark); + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + text-align: right; font-size: 1rem; - border-color: #dbdbdb; - border-radius: 4px; - border-style: solid; - border-width: 0 0 0 4px; - color: #4a4a4a; + color: #f3f3f3; z-index: 0; max-height: 200px; - transition: all .2s ease-in-out; - transform-origin: top; + transition: all .3s ease-in-out; + padding-left: 30px; + margin-left: 20px; + margin-right: 60px; + + + .alert { + margin-top: 20px; + } + + &:hover { + + .alert__content { + + &::after { + opacity: 1; + } + } + } +} + +@media (min-width: 768px) { + + .alert { + min-width: 400px; + } } .alert__content { padding: 1.25em 1.5em; + position: relative; + display: inline-block; + font-weight: 600; + + &::before { + content: ''; + position: absolute; + top: 0; + right: -60px; + width: 60px; + height: calc(100% - 0px); + background-color: var(--color-dark); + opacity: 0.4; + } + + &::after { + content: '\f05a'; + position: absolute; + display: flex; + font-family: "Font Awesome 5 Free"; + top: 0; + right: -60px; + width: 60px; + height: calc(100% - 0px); + justify-content: center; + align-items: center; + font-size: 40px; + color: var(--color-dark); + } } .alert__close { cursor: pointer; text-align: right; - display: flex; - align-items: center; - justify-content: center; - padding: 0 10px; - background-color: var(--color-light); - color: var(--color-lightwhite); - transition: all .2s ease; + position: absolute; + left: 20px; + top: 0; + width: 20px; + height: 100%; + /* TODO: remove next line as soon as messagerenderer-error in julius gets resolved */ + color: var(--color-dark); + transition: all .3s ease; + z-index: 40; &:hover { - background-color: var(--color-primary); transform: scale(1.05, 1.05); + + &::before { + box-shadow: 0 0 4px white; + background-color: rgba(255, 255, 255, 0.1); + color: white; + } + } + + &::before { + content: '\f00d'; + position: absolute; + font-family: "Font Awesome 5 Free"; + top: 50%; + left: 50%; + display: flex; + color: rgba(255, 255, 255, 0.5); + align-items: center; + justify-content: center; + transform: translate(-50%, -50%); + border-radius: 50%; + width: 30px; + height: 30px; + transition: all .15s ease; } } .alert-success { - background-color: #f6fef9; - border-color: var(--color-success); - .alert__close { - background-color: var(--color-success); + .alert__content { + + &::before { + background-color: var(--color-success); + } + + &::after { + content: '\f05a'; + color: var(--color-success); + } } } .alert-warning { - background-color: #fffdf5; - border-color: var(--color-warning); + background-color: var(--color-warning); + color: var(--color-dark); .alert__close { - background-color: var(--color-warning); - color: var(--color-dark); + color: var(--color-warning); + + /* TODO: remove me as soon as messagerenderer-error in julius gets resolved */ + &::before { + color: var(--color-dark); + } + } + + .alert__content { + + &::before { + background-color: var(--color-warning); + } + + &::after { + content: '\f071'; + color: var(--color-warning); + } } } .alert-danger, .alert-error { - border-color: var(--color-error); - background-color: #fff5f7; + background-color: var(--color-error); + color: var(--color-lightwhite); .alert__close { - background-color: var(--color-error); + color: var(--color-error); + + /* TODO: remove me as soon as messagerenderer-error in julius gets resolved */ + &::before { + color: var(--color-lightwhite); + } + } + + .alert__content { + + &::before { + background-color: var(--color-error); + } + + &::after { + content: '\f071'; + color: var(--color-error); + } } } .alert--invisible { max-height: 0; - transform: scaleY(0); + transform: translateX(120%); } diff --git a/templates/widgets/asidenav.lucius b/templates/widgets/asidenav.lucius index 82b9bd356..789752f71 100644 --- a/templates/widgets/asidenav.lucius +++ b/templates/widgets/asidenav.lucius @@ -43,6 +43,10 @@ .asidenav__list-item { position: relative; color: var(--color-lightwhite); + min-height: 50px; + display: flex; + justify-content: flex-start; + align-items: center; &:hover { color: var(--color-link); From 4564e95a194a07fd2284bce3d7d17c8eeddc1086 Mon Sep 17 00:00:00 2001 From: Felix Hamann Date: Fri, 29 Jun 2018 23:48:47 +0200 Subject: [PATCH 06/10] hide tooltips via JS --- templates/multiFileField.hamlet | 2 +- templates/standalone/tooltip.julius | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/templates/multiFileField.hamlet b/templates/multiFileField.hamlet index 7ae3ff99c..e12a1864f 100644 --- a/templates/multiFileField.hamlet +++ b/templates/multiFileField.hamlet @@ -17,4 +17,4 @@ $# new files
? -