[menu editor kind of works now Jeremy Shaw **20111216012317 Ignore-this: f7aa9b69a6969bc1bcb8335d5d39baeb ] hunk ./clckwrks-theme-basic/Theme/Home.hs 29 - <% getPageMenu %> --- <% getMenu %> +-- <% getPageMenu %> + <% getMenu %> hunk ./clckwrks-theme-basic/data/style.css 82 - hunk ./clckwrks/Menu/API.hs 12 +import Web.Routes hunk ./clckwrks/Menu/API.hs 31 - + hunk ./clckwrks/Menu/API.hs 37 -
  • - <% menuTitle menuItem %> - <% menuForestHTML subMenus %> -
  • + case menuLink menuItem of + (LinkURL url) -> + do u <- showURL url +
  • + <% menuTitle menuItem %> + <% menuForestHTML subMenus %> +
  • hunk ./clckwrks/Menu/Acid.hs 39 -$(makeAcidic ''MenuState ['askMenu, 'addItem]) +setMenu :: Menu url -> Update (MenuState url) () +setMenu newMenu = + do ms <- get + put $ ms { menu = newMenu } + +$(makeAcidic ''MenuState ['askMenu, 'addItem, 'setMenu]) hunk ./clckwrks/Menu/Edit.hs 209 + hunk ./clckwrks/Menu/Edit.hs 211 -newtype MenuUpdateItem = MenuUpdateItem (String, Maybe Int) deriving (Show) +newtype MenuUpdateItem = MenuUpdateItem (String, Maybe MenuName, Maybe Integer) deriving (Show) hunk ./clckwrks/Menu/Edit.hs 218 - do ttl <- o .: (fromString "data") - meta <- o .: (fromString "metadata") + do ttl <- o .: (fromString "data") + meta <- o .: (fromString "metadata") hunk ./clckwrks/Menu/Edit.hs 221 + menuName <- do mmno <- optional $ meta .: (fromString "menuName") + case mmno of + Nothing -> return Nothing + (Just mno) -> + do prefix <- mno .: fromString "prefix" + tag <- mno .: fromString "tag" + unique <- mno .: fromString "unique" + return (Just $ MenuName (Prefix prefix) tag unique) hunk ./clckwrks/Menu/Edit.hs 230 - return (Node (MenuUpdateItem (ttl, pid)) (Vector.toList children)) - + return (Node (MenuUpdateItem (ttl, menuName, pid)) (Vector.toList children)) hunk ./clckwrks/Menu/Edit.hs 235 - liftIO $ print (parse value t) +-- liftIO $ print (parse value t) hunk ./clckwrks/Menu/Edit.hs 237 - liftIO $ print mu - ok $ toResponse () + case mu of + Nothing -> + internalServerError $ toResponse "menuPost: failed to decode JSON data" + (Just u) -> + do update (SetMenu (updateToMenu u)) + ok $ toResponse () + +updateToMenu :: MenuUpdate -> Menu ClckURL +updateToMenu (MenuUpdate t) = + Menu $ map convertItem t + where + convertItem :: Tree MenuUpdateItem -> Tree (MenuItem ClckURL) + convertItem (Node (MenuUpdateItem (ttl, mmn, mPageId)) children) = + let menuName = case mmn of + Just mn -> mn + Nothing -> MenuName (Prefix (fromString "clckwrks")) (fromString "tag") 1 + menuItem = MenuItem { menuName = menuName + , menuTitle = Text.pack ttl + , menuLink = + case mPageId of + Nothing -> LinkMenu + (Just pid) -> LinkURL (ViewPage (PageId pid)) + } + in Node menuItem (map convertItem children) + + hunk ./clckwrks/Menu/Types.hs 85 - | LinkMenu (Menu url) + | LinkMenu -- (Menu url) hunk ./clckwrks/Menu/Types.hs 95 -