@@ -720,7 +720,7 @@ class HasDomEvent t a where
720 domEvent :: EventName en -> a -> Event t (EventResultType en)
720 domEvent :: EventName en -> a -> Event t (EventResultType en)
722instance Reflex t => HasDomEvent t (El t) where
722instance 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)
725linkClass :: MonadWidget t m => String -> String -> m (Link t)
725linkClass :: MonadWidget t m => String -> String -> m (Link t)
726linkClass s c = do
726linkClass s c = do
@@ -769,27 +769,24 @@ tableDynAttr klass cols dRows rowAttrs = elAttr "div" (Map.singleton "style" "zo
769 dAttrs <- rowAttrs k
769 dAttrs <- rowAttrs k
770 elDynAttr' "tr" dAttrs $ mapM (\x -> el "td" $ snd x k r) cols)
770 elDynAttr' "tr" dAttrs $ mapM (\x -> el "td" $ snd x k r) cols)
772−--TODO preselect a tab on open
773tabDisplay :: forall t m k. (MonadFix m, MonadWidget t m, Show k, Ord k) => String -> String -> Map k (String, m ()) -> m ()
772tabDisplay :: forall t m k. (MonadFix m, MonadWidget t m, Show k, Ord k) => String -> String -> Map k (String, m ()) -> m ()
774tabDisplay ulClass activeClass tabItems = do
773tabDisplay ulClass activeClass tabItems = do
775− rec dCurrentTab <- holdDyn Nothing (updated dTabClicks)
774+ let t0 = listToMaybe $ Map.keys tabItems
776− dTabClicks :: Dynamic t (Maybe k) <- elAttr "ul" (Map.singleton "class" ulClass) $ do
775+ rec currentTab :: Demux t (Maybe k) <- elAttr "ul" ("class" =: ulClass) $ do
777− tabClicksList :: [Event t k] <- (liftM Map.elems) $ imapM (\k (s,_) -> headerBarLink s k =<< mapDyn (== (Just k)) dCurrentTab) tabItems
776+ tabClicksList :: [Event t k] <- (liftM Map.elems) $ imapM (\k (s,_) -> headerBarLink s k =<< getDemuxed currentTab (Just k)) tabItems
778 let eTabClicks :: Event t k = leftmost tabClicksList
777 let eTabClicks :: Event t k = leftmost tabClicksList
779− holdDyn Nothing $ fmap Just eTabClicks :: m (Dynamic t (Maybe k))
778+ liftM demux $ holdDyn t0 $ fmap Just eTabClicks
780− divClass "" $ do
779+ el "div" $ do
781− let dTabs :: Dynamic t (Map k (String, m ())) = constDyn tabItems
780+ iforM_ tabItems $ \k (_, w) -> do
782− _ <- listWithKey dTabs (\k dTab -> do
781+ isSelected <- getDemuxed currentTab $ Just k
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
782+ attrs <- forDyn isSelected $ \s -> if s then Map.empty else Map.singleton "style" "display:none;"
786− elDynAttr "div" dAttrs $ dyn =<< mapDyn snd dTab)
783+ elDynAttr "div" attrs w
787 return ()
784 return ()
789 headerBarLink :: (MonadWidget t m, Ord k) => String -> k -> Dynamic t Bool -> m (Event t k)
786 headerBarLink :: (MonadWidget t m, Ord k) => String -> k -> Dynamic t Bool -> m (Event t k)
790− headerBarLink x k dBool = do
787+ headerBarLink x k isSelected = do
791− dAttributes <- mapDyn (\b -> if b then Map.singleton "class" activeClass else Map.empty) dBool
788+ attrs <- mapDyn (\b -> if b then Map.singleton "class" activeClass else Map.empty) isSelected
792− elDynAttr "li" dAttributes $ do
789+ elDynAttr "li" attrs $ do
793 a <- link x
790 a <- link x
794 return $ fmap (const k) (_link_clicked a)
791 return $ fmap (const k) (_link_clicked a)