on develop help sign in
Refactor tabDisplay
commitc5f7300431ab12140e054555808ead799f7af43e authorRyan Trinkle <ryan.trinkle@gmail.com> dateFri 31 Jul 2015, 11:49 (11 years ago) parent1eb42c2
1 file changed+13−16
src/Reflex/Dom/Widget/Basic.hs+13−16
src/Reflex/Dom/Widget/Basic.hs+13−16
@@ -720,7 +720,7 @@ class HasDomEvent t a where
720720 domEvent :: EventName en -> a -> Event t (EventResultType en)
721721
722722instance Reflex t => HasDomEvent t (El t) where
723− domEvent en el = fmap unEventResult $ select (_el_events el) (WrapArg en)
723+ domEvent en e = fmap unEventResult $ select (_el_events e) (WrapArg en)
724724
725725linkClass :: MonadWidget t m => String -> String -> m (Link t)
726726linkClass s c = do
@@ -769,27 +769,24 @@ tableDynAttr klass cols dRows rowAttrs = elAttr "div" (Map.singleton "style" "zo
769769 dAttrs <- rowAttrs k
770770 elDynAttr' "tr" dAttrs $ mapM (\x -> el "td" $ snd x k r) cols)
771771
772−--TODO preselect a tab on open
773772tabDisplay :: forall t m k. (MonadFix m, MonadWidget t m, Show k, Ord k) => String -> String -> Map k (String, m ()) -> m ()
774773tabDisplay ulClass activeClass tabItems = do
775− rec dCurrentTab <- holdDyn Nothing (updated dTabClicks)
776− dTabClicks :: Dynamic t (Maybe k) <- elAttr "ul" (Map.singleton "class" ulClass) $ do
777− tabClicksList :: [Event t k] <- (liftM Map.elems) $ imapM (\k (s,_) -> headerBarLink s k =<< mapDyn (== (Just k)) dCurrentTab) tabItems
774+ let t0 = listToMaybe $ Map.keys tabItems
775+ rec currentTab :: Demux t (Maybe k) <- elAttr "ul" ("class" =: ulClass) $ do
776+ tabClicksList :: [Event t k] <- (liftM Map.elems) $ imapM (\k (s,_) -> headerBarLink s k =<< getDemuxed currentTab (Just k)) tabItems
778777 let eTabClicks :: Event t k = leftmost tabClicksList
779− holdDyn Nothing $ fmap Just eTabClicks :: m (Dynamic t (Maybe k))
780− divClass "" $ do
781− let dTabs :: Dynamic t (Map k (String, m ())) = constDyn tabItems
782− _ <- listWithKey dTabs (\k dTab -> do
783− dAttrs <- mapDyn (\sel -> do
784− let t1 = listToMaybe $ Map.keys tabItems
785− if sel == Just k || (sel == Nothing && t1 == Just k) then Map.empty else Map.singleton "style" "display:none;") dCurrentTab
786− elDynAttr "div" dAttrs $ dyn =<< mapDyn snd dTab)
778+ liftM demux $ holdDyn t0 $ fmap Just eTabClicks
779+ el "div" $ do
780+ iforM_ tabItems $ \k (_, w) -> do
781+ isSelected <- getDemuxed currentTab $ Just k
782+ attrs <- forDyn isSelected $ \s -> if s then Map.empty else Map.singleton "style" "display:none;"
783+ elDynAttr "div" attrs w
787784 return ()
788785 where
789786 headerBarLink :: (MonadWidget t m, Ord k) => String -> k -> Dynamic t Bool -> m (Event t k)
790− headerBarLink x k dBool = do
791− dAttributes <- mapDyn (\b -> if b then Map.singleton "class" activeClass else Map.empty) dBool
792− elDynAttr "li" dAttributes $ do
787+ headerBarLink x k isSelected = do
788+ attrs <- mapDyn (\b -> if b then Map.singleton "class" activeClass else Map.empty) isSelected
789+ elDynAttr "li" attrs $ do
793790 a <- link x
794791 return $ fmap (const k) (_link_clicked a)
795792