diff --git a/Handler/EditSubmission.hs b/Handler/EditSubmission.hs index 92df7e6..9ba137a 100644 --- a/Handler/EditSubmission.hs +++ b/Handler/EditSubmission.hs @@ -53,16 +53,6 @@ getPossibleAchievements userId submissionId = do let rets = Import.zip achievements workingOns return $ Import.map (\(a, (Just w)) -> (a, entityKey w)) $ Import.filter (\(_, mw) -> isJust mw) $ rets -addTags submissionId tagsAsText existingOnes = do - tids <- tagsAsTextToTagIds tagsAsText - - deleteWhere [SubmissionTagSubmission ==. submissionId, SubmissionTagTag /<-. tids] - - _ <- mapM (\tid -> insert $ SubmissionTag submissionId tid Nothing) (Import.filter (not . (`elem` existingOnes)) tids) - return () - - - doEditSubmission formWidget formEnctype submissionId = do submission <- runDB $ get404 submissionId submissionFull <- getFullInfo (Entity submissionId submission) diff --git a/Handler/ShowChallenge.hs b/Handler/ShowChallenge.hs index 9984958..9edb6ab 100644 --- a/Handler/ShowChallenge.hs +++ b/Handler/ShowChallenge.hs @@ -17,6 +17,7 @@ import qualified Yesod.Table as Table import Handler.Extract import Handler.Shared import Handler.Tables +import Handler.TagUtils import GEval.Core import GEval.OptionsParser @@ -106,18 +107,19 @@ postChallengeSubmissionR name = do let submissionData = case result of FormSuccess res -> Just res _ -> Nothing - Just (description, submissionUrl, submissionBranch) = submissionData + Just (description, mTags, submissionUrl, submissionBranch) = submissionData - runViewProgress $ doCreateSubmission challengeId description submissionUrl submissionBranch + runViewProgress $ doCreateSubmission challengeId description mTags submissionUrl submissionBranch -doCreateSubmission :: Key Challenge -> Text -> Text -> Text -> Channel -> Handler () -doCreateSubmission challengeId description url branch chan = do +doCreateSubmission :: Key Challenge -> Text -> Maybe Text -> Text -> Text -> Channel -> Handler () +doCreateSubmission challengeId description mTags url branch chan = do maybeRepoKey <- getSubmissionRepo challengeId url branch chan case maybeRepoKey of Just repoId -> do repo <- runDB $ get404 repoId submissionId <- getSubmission repoId (repoCurrentCommit repo) challengeId description chan _ <- getOuts chan submissionId + runDB $ addTags submissionId mTags [] msg chan "Done" Nothing -> return () @@ -254,9 +256,10 @@ checkRepoAvailibility challengeId repoId chan = do challengeSubmissionWidget formWidget formEnctype challenge = $(widgetFile "challenge-submission") -submissionForm :: Maybe Text -> Form (Text, Text, Text) -submissionForm defaultUrl = renderBootstrap3 BootstrapBasicForm $ (,,) +submissionForm :: Maybe Text -> Form (Text, Maybe Text, Text, Text) +submissionForm defaultUrl = renderBootstrap3 BootstrapBasicForm $ (,,,) <$> areq textField (bfs MsgSubmissionDescription) Nothing + <*> aopt textField (tagsfs MsgSubmissionTags) Nothing <*> areq textField (bfs MsgSubmissionUrl) defaultUrl <*> areq textField (bfs MsgSubmissionBranch) (Just "master") @@ -279,6 +282,7 @@ getChallengeSubmissions condition name = do challengeAllSubmissionsWidget muserId challenge submissions tests = $(widgetFile "challenge-all-submissions") challengeLayout withHeader challenge widget = do + tagsAvailableAsJSON <- runDB $ getAvailableTagsAsJSON maybeUser <- maybeAuth bc <- widgetToPageContent widget defaultLayout $ do diff --git a/Handler/TagUtils.hs b/Handler/TagUtils.hs index f9f5579..92acc84 100644 --- a/Handler/TagUtils.hs +++ b/Handler/TagUtils.hs @@ -13,6 +13,13 @@ tagsfs :: RenderMessage site msg => msg -> FieldSettings site tagsfs msg = attrs { fsAttrs = ("data-role"::Text,"tagsinput"::Text):(fsAttrs attrs)} where attrs = bfs msg +addTags submissionId tagsAsText existingOnes = do + tids <- tagsAsTextToTagIds tagsAsText + + deleteWhere [SubmissionTagSubmission ==. submissionId, SubmissionTagTag /<-. tids] + + _ <- mapM (\tid -> insert $ SubmissionTag submissionId tid Nothing) (Import.filter (not . (`elem` existingOnes)) tids) + return () tagsAsTextToTagIds mTagsAsText = do let newTags = case mTagsAsText of diff --git a/templates/challenge.julius b/templates/challenge.julius index 023a8b1..a8fdf4e 100644 --- a/templates/challenge.julius +++ b/templates/challenge.julius @@ -7,3 +7,10 @@ $(document).ready(function () { } }); }); + + var input = document.querySelector('input[data-role=tagsinput]'), + tagify = new Tagify( input, { + whitelist: #{tagsAvailableAsJSON}, + autocomplete: true, + enforeWhitelist: true}); + input.style.display = 'none'; \ No newline at end of file