@@ -222,13 +222,14 @@ data Dropdown t k
222--TODO: Get rid of Show k and Read k by indexing the possible values ourselves
222--TODO: Get rid of Show k and Read k by indexing the possible values ourselves
223-- | Create a dropdown box
223-- | Create a dropdown box
224-- The first argument gives the initial value of the dropdown; if it is not present in the map of options provided, it will be added with an empty string as its text
224-- The first argument gives the initial value of the dropdown; if it is not present in the map of options provided, it will be added with an empty string as its text
225−dropdownDynAttr :: forall k t m. (MonadWidget t m, Ord k, Show k, Read k) => Dynamic t (Map String String) -> k -> Dynamic t (Map k String) -> m (Dropdown t k)
225+dropdownDynAttr :: forall k t m. (MonadWidget t m, Ord k, Show k, Read k) => Dynamic t (Map String String) -> k -> Event t k -> Dynamic t (Map k String) -> m (Dropdown t k)
226−dropdownDynAttr attrs k0 options = do
226+dropdownDynAttr attrs k0 setK options = do
227 (eRaw, _) <- elDynAttr' "select" attrs $ do
227 (eRaw, _) <- elDynAttr' "select" attrs $ do
228 optionsWithDefault <- mapDyn (`Map.union` (k0 =: "")) options
228 optionsWithDefault <- mapDyn (`Map.union` (k0 =: "")) options
229 listWithKey optionsWithDefault $ \k v -> do
229 listWithKey optionsWithDefault $ \k v -> do
230 elAttr "option" ("value" =: show k <> if k == k0 then "selected" =: "selected" else mempty) $ dynText v
230 elAttr "option" ("value" =: show k <> if k == k0 then "selected" =: "selected" else mempty) $ dynText v
231 let e = castToHTMLSelectElement $ _el_element eRaw
231 let e = castToHTMLSelectElement $ _el_element eRaw
232+ performEvent_ $ fmap (liftIO . htmlSelectElementSetValue e . show) setK
232 eChange <- wrapDomEvent e elementOnchange $ do
233 eChange <- wrapDomEvent e elementOnchange $ do
233 kStr <- liftIO $ htmlSelectElementGetValue e
234 kStr <- liftIO $ htmlSelectElementGetValue e
234 return $ readMay kStr
235 return $ readMay kStr
@@ -240,7 +241,7 @@ dropdownDynAttr attrs k0 options = do
240 return $ Dropdown dValue
241 return $ Dropdown dValue
242dropdown :: forall k t m. (MonadWidget t m, Ord k, Show k, Read k) => k -> Dynamic t (Map k String) -> m (Dropdown t k)
243dropdown :: forall k t m. (MonadWidget t m, Ord k, Show k, Read k) => k -> Dynamic t (Map k String) -> m (Dropdown t k)
243−dropdown = dropdownDynAttr (constDyn Map.empty)
244+dropdown k = dropdownDynAttr (constDyn Map.empty) k never
245--TODO: Get rid of Show k and Read k by indexing the possible values ourselves
246--TODO: Get rid of Show k and Read k by indexing the possible values ourselves
246dropdown' :: forall k t m. (MonadWidget t m, Eq k, Show k, Read k) => k -> NonEmpty (k, String) -> m (Dropdown t k)
247dropdown' :: forall k t m. (MonadWidget t m, Eq k, Show k, Read k) => k -> NonEmpty (k, String) -> m (Dropdown t k)