@@ -65,6 +65,7 @@ import Reflex.Time
6565import Reflex.Class
6666import Servant.API
6767import Servant.Reflex
68+ import qualified Text.Read as R
6869
6970import API
7071import PkgId
@@ -109,7 +110,7 @@ utc2unix x = ceiling (realToFrac (utcTimeToPOSIXSeconds x) :: Double)
109110
110111bodyElement4 :: forall t m . (SupportsServantReflex t m , MonadFix m , MonadIO m , MonadHold t m , PostBuild t m , DomBuilder t m , Adjustable t m , DomBuilderSpace m ~ GhcjsDomSpace ) => m ()
111112bodyElement4 = do
112- _ <- runRouteViewT app
113+ _ <- runRouteViewT' app
113114
114115 -- (result, changeStateE) <- runSetRouteT $ app RouteHome
115116 pure ()
@@ -330,23 +331,24 @@ app dynFrag = do
330331 let dynPkgTags = pkgTagList <$> dynTagPkgs
331332 packagesPageWidget dynPackages0 dynTags dynPkgTags
332333
333- RoutePackage (pn, idxSt) -> do
334-
334+ RoutePackage (PkgN pkgUri) -> do
335+ let pn = PkgN $ T. takeWhile (/= ' @' ) pkgUri
336+ (intIdx :: Maybe Int ) = R. readMaybe (T. unpack (T. takeWhileEnd (/= ' @' ) pkgUri))
337+ idxSt = PkgIdxTs $ fromMaybe 0 intIdx
335338 el " h2" $ text (pkgNToText pn)
336339 el " p" $ el " em" $ elAttr " a" (" href" =: (" https://hackage.haskell.org/package/" <> pkgNToText pn)) $
337340 do text " (view on Hackage)"
338341
339342 evPB <- getPostBuild
340343 let
341- dynIdxStLast' = fmap (\ x -> M. fromMaybe x idxSt) dynIdxStLast
342344 -- single-shot requests
343345 evReports <- getPackageReports (constDyn $ Right pn) evPB
344346 dynReports <- holdDyn mempty evReports
345347
346348 evInfo <- getInfo evPB
347349 dynInfo <- holdDyn (ControllerInfo mempty ) evInfo
348350
349- evHist <- getPackageHistory (constDyn $ Right pn) (leftmost [updated dynIdxStLast' $> () , evPB])
351+ evHist <- getPackageHistory (constDyn $ Right pn) (leftmost [updated dynIdxStLast $> () , evPB])
350352 dynHist <- holdDyn mempty evHist
351353
352354 evPkgTags <- getPackageTags (constDyn $ Right pn) evPB
@@ -364,28 +366,25 @@ app dynFrag = do
364366 text " for latest index-state "
365367 dynText (pkgIdxTsToText <$> dynIdxStLast)
366368
367- putQueue (constDyn $ Right pn) (Right <$> dynIdxStLast') (constDyn $ Right (QEntryUpd (- 1 ))) evQButton
368-
369-
370- let xs = Map. fromList . fmap (\ x -> (x, pkgIdxTsToText x)) . Set. toList <$> dynReports
371- x0 = (\ s -> if Set. null s then PkgIdxTs 0
372- else (findInitialDropDown idxSt s)) <$> dynReports
373-
374-
375- let ddCfg = DropdownConfig (updated x0) (constDyn mempty )
369+ putQueue (constDyn $ Right pn) (Right <$> dynIdxStLast) (constDyn $ Right (QEntryUpd (- 1 ))) evQButton
376370
377371 let inputAttr = (" class" =: " tag-name" ) <> (" placeholder" =: " insert tag" )
378372 iCfg = TextInputConfig " tag-name" " " never (constDyn inputAttr)
373+ let xs = Map. fromList . fmap (\ x -> (x, pkgIdxTsToText x)) . Set. toList <$> dynReports
379374
380- ddReports <- el " p" $ do
375+ ddReports <- el " p" $ mdo
376+ let maxId = findInitialDropDown idxSt <$> dynReports
377+ ddCfg = (def :: DropdownConfig t PkgIdxTs )
378+ & dropdownConfig_setValue .~ (updated maxId)
379+ initId <- sample $ current maxId
381380 evQButton <- button " Queue a build"
382381 text " for the index-state "
383- tmp <- routePkgIdxTs pn (PkgIdxTs 0 ) dynReports xs ddCfg
382+ dd <- dropdown initId xs ddCfg
383+ routePkgIdxTs pn dynReports (dd ^. dropdown_value)
384384 text " shown below"
385+ _ <- putQueue (constDyn $ Right pn) (Right <$> _dropdown_value dd) (constDyn $ Right (QEntryUpd (- 1 ))) evQButton
385386
386- _ <- putQueue (constDyn $ Right pn) (Right <$> _dropdown_value tmp) (constDyn $ Right (QEntryUpd (- 1 ))) evQButton
387-
388- pure tmp
387+ pure dd
389388
390389 elClass " p" " tagging" $ mdo
391390 let evMapTags = Map. fromList . (fmap (\ t -> (t,t))) . (fmap tagNToText) . V. toList <$> evPkgTags
@@ -472,7 +471,7 @@ app dynFrag = do
472471 pure $ (TagN tId) <$ delResult
473472
474473-- | Renders alpha-tabbed package index
475- packagesPageWidget :: forall t m . (MonadFix m , MonadHold t m , PostBuild t m , DomBuilder t m )
474+ packagesPageWidget :: forall t m . (SetRoute t FragRoute m , MonadFix m , MonadHold t m , PostBuild t m , DomBuilder t m )
476475 => Dynamic t (Vector PkgN )
477476 -> Dynamic t (Vector TagN )
478477 -> Dynamic t (Map. Map PkgN [TagN ])
@@ -516,7 +515,7 @@ packagesPageWidget dynPackages dynTags dynPkgTags = do
516515 pure $ do
517516
518517 el " ol" $ forM_ v' $ \ (pn) -> do
519- el " li" $ elAttr " a " (" href " =: ( " #/package/" <> (pkgNToText pn) )) $ do
518+ el " li" $ routeLink False (" #/package/" <> (pkgNToText pn)) $ do
520519 text ((pkgNToText pn) <> " : " )
521520 case Map. lookup pn dpt of
522521 Just tags -> forM tags $ \ (tag0) -> elAttr " a" ((" class" =: " tag-item" ) <> (" data-tag-name" =: (tagNToText tag0))) $ text (tagNToText tag0)
@@ -531,7 +530,7 @@ packagesPageWidget dynPackages dynTags dynPkgTags = do
531530 V. filter (tagContained st dpt) pkg
532531
533532
534- reportTableWidget :: forall t m . (MonadHold t m , PostBuild t m , DomBuilder t m , Reflex t )
533+ reportTableWidget :: forall t m . (SetRoute t FragRoute m , MonadHold t m , PostBuild t m , DomBuilder t m , Reflex t )
535534 => Dynamic t PkgIdxTsReport
536535 -> Dynamic t (Vector QEntryRow )
537536 -> Dynamic t (Vector WorkerRow )
@@ -603,7 +602,7 @@ reportTableWidget dynRepSum dynQRows dynWorkers dynHist dynInfo = joinE =<< go
603602
604603 elAttr " th" (" style" =: " text-align:left;" ) (text (verToText pv))
605604 el " td" $ text (pkgIdxTsToText t)
606- el " td" $ elAttr " a " (" href " =: ( " #/user/" <> u) ) (text u)
605+ el " td" $ routeLink False (" #/user/" <> u) (text u)
607606
608607 pure (leftmost evsRow1)
609608 pure (leftmost evsRows) -- main "return" value
@@ -701,11 +700,14 @@ applyLR (L:xs) (l:ls) rs = l : applyLR xs ls rs
701700applyLR (R : xs) ls (r: rs) = r : applyLR xs ls rs
702701applyLR _ _ _ = error " applyLR"
703702
704- findInitialDropDown :: Maybe PkgIdxTs -> Set PkgIdxTs -> PkgIdxTs
705- findInitialDropDown (Just idx) pkgSet = if Set. member idx pkgSet
706- then Set. foldr (\ a b -> if a == b then a else b) idx pkgSet
707- else Set. findMax pkgSet
708- findInitialDropDown Nothing pkgSet = Set. findMax pkgSet
703+ findInitialDropDown :: PkgIdxTs -> Set PkgIdxTs -> PkgIdxTs
704+ findInitialDropDown p s
705+ | True <- Set. null s
706+ = PkgIdxTs 0
707+ | otherwise = if Set. member p s then p else Set. findMax s
708+ {- if Set.null s
709+ then PkgIdxTs 0
710+ else Set.findMax s-}
709711
710712toggleTagSet :: TagN -> Set. Set TagN -> Set. Set TagN
711713toggleTagSet tn st = if Set. member tn st then Set. delete tn st else Set. insert tn st
@@ -778,7 +780,7 @@ calcMatches pkgs sJss
778780 textS = JSS. textFromJSString sJss
779781 (exactMap,othersMap) = F. foldMap (calcMatch sJss) pkgs
780782
781- searchBoxWidget :: forall t m . (SupportsServantReflex t m , MonadFix m , MonadIO m , MonadHold t m , PostBuild t m , DomBuilder t m , Adjustable t m , DomBuilderSpace m ~ GhcjsDomSpace )
783+ searchBoxWidget :: forall t m . (SetRoute t FragRoute m , SupportsServantReflex t m , MonadFix m , MonadIO m , MonadHold t m , PostBuild t m , DomBuilder t m , Adjustable t m , DomBuilderSpace m ~ GhcjsDomSpace )
782784 => Dynamic t (Vector PkgN )
783785 -> m ()
784786searchBoxWidget dynPkgs0 = mdo
@@ -794,16 +796,17 @@ searchBoxWidget dynPkgs0 = mdo
794796 clickPkgE <- searchResultWidget matchesDyn
795797 pure ()
796798
797- searchResultWidget :: forall t m . (MonadFix m , MonadHold t m , PostBuild t m , DomBuilder t m )
799+ searchResultWidget :: forall t m . (SetRoute t FragRoute m , MonadFix m , MonadHold t m , PostBuild t m , DomBuilder t m )
798800 => Dynamic t Matches
799801 -> m (Event t Text )
800802searchResultWidget mDyn =
801803 el " ul" $ do
802804 exactE <- listViewWithKey (matchesExact <$> mDyn) $ \ eId _ -> do
803- (e, _) <- element " li" def $ elAttr " a" (" href" =: (" #/package/" <> eId)) $ el " strong" $ text eId
805+ (e, _) <- element " li" def $
806+ routeLink False (" #/package/" <> eId) $ el " strong" $ text eId
804807 pure $ domEvent Click e
805808 otherE <- listViewWithKey (matchesInfix <$> mDyn) $ \ pId txt -> do
806- (e, _) <- element " li" def $ elAttr " a " (" href " =: ( " #/package/" <> pId) ) $ do
809+ (e, _) <- element " li" def $ routeLink False (" #/package/" <> pId) $ do
807810 dynText . fmap (^. _1) $ txt
808811 el " strong" $ dynText . fmap (^. _2) $ txt
809812 dynText . fmap (^. _3) $ txt
0 commit comments