{-# LANGUAGE FlexibleInstances, QuasiQuotes #-} {-# OPTIONS_GHC -F -pgmFtrhsx #-} module Clckwrks.Menu.Edit where import Clckwrks.Admin.Template (template) import Clckwrks.Menu.Types (Menu(..), MenuItem(..), MenuLink(..), MenuName(..)) import Clckwrks.Menu.Acid (SetMenu(..)) import Clckwrks.Monad (Clck, query, update) import Clckwrks.Page.Acid (PageId(..), PagesSummary(..)) import Clckwrks.Page.Types (Slug(..), slugify) import Clckwrks.Types (Prefix(..)) import Clckwrks.URL (ClckURL(..), AdminURL(..)) import Control.Applicative ((<$>), (<|>), optional, pure) import Data.Aeson (FromJSON(..), ToJSON(..), Value(..), (.:), (.=), decode, object) import Data.String (fromString) import Data.Tree (Tree(..)) import Data.Text (Text) import qualified Data.Text as Text import qualified Data.Text.Lazy.IO as LazyText import qualified Data.Vector as Vector import Happstack.Server (Response, internalServerError, lookBS, ok, toResponse) import HSP import Language.Javascript.JMacro import Web.Routes (PathInfo, showURL, toPathInfo, fromPathInfo) -- MenURL ? editMenu :: (PathInfo url) => Menu url -> Clck ClckURL Response editMenu menu = do summaries <- query PagesSummary let clckLinks = [ (toPathInfo Blog, fromString "Blog") ] template "edit menu" (headers summaries clckLinks) $ <%>




where headers summaries clckLinks = do menuUpdate <- showURL (Admin MenuPOST) <%> <% [$jmacro| $(document).ready(function () { $("#menu").jstree(`(jstree menu)`); var !menu = $.jstree._reference("#menu"); // click elsewhere in document to unselect nodes $(document).bind("click", function (e) { if(!$(e.target).parents(".jstree:eq(0)").length) { $.jstree._focused().deselect_all(); } }); `(saveChanges menuUpdate)`; `(addPageMenu summaries)`; `(addClckwrksMenu clckLinks)`; `(addSubMenu)`; `(removeItem)`; // `(menuEvents)`; }); |] %> addClckwrksMenu :: [(Text, Text)] -> JStat addClckwrksMenu linkInfos = [$jmacro| var select = $("#clckwrks-link"); var links = `(data_)`; for (var i = 0; i < links.length; i++) { var option = $("