I'm still floundering but now I'm trying a modified approach:

My own node functions (called by the splice function) have been returning

MyMonad [Node]

I'm now recoding them to all return

Splice MyMonad

in case that might work.

Kevin

--- On Tue, 6/22/10, Kevin Jardine <[email protected]> wrote:

> From: Kevin Jardine <[email protected]>
> Subject: Re: [Snap Framework] renderTemplate with XML fragments in Heist
> To: [email protected]
> Date: Tuesday, June 22, 2010, 11:00 AM
> Sorry for banging on about this.
> 
> I now have code that returns lists of nodes and starts by
> running the page shell template with Splice functions
> handling the rest. So far as I know, this is the "Heist way"
> to do things.
> 
> I am still running into the problem that renderTemplate
> returns a byte string and callTemplate returns some exotic
> complex type.
> 
> Is there not a public template function that returns a list
> of nodes?
> 
> Kevin
> 
> --- On Thu, 6/17/10, MightyByte <[email protected]>
> wrote:
> 
> > From: MightyByte <[email protected]>
> > Subject: Re: [Snap Framework] renderTemplate with XML
> fragments in Heist
> > To: "Kevin Jardine" <[email protected]>
> > Cc: [email protected]
> > Date: Thursday, June 17, 2010, 6:36 PM
> > Yes, that's correct.  Just keep
> > in mind that one of our main goals is
> > to promote the clean separation between view and
> business
> > logic.
> > Heist was intentionally designed to discourage
> putting
> > business logic
> > in the templates (views).  This is why we didn't
> make
> > any kind of loop
> > or conditional syntax available in the templates. 
> > Similarly we want
> > to discourage putting views inside your Haskell
> code. 
> > So while it
> > might be easy to make a splice like this:
> > 
> > myArticle post = do
> >   let body = [Element "span" [("class", "author")]
> > [Text (getAuthor post)]
> >                
> >   ,Element "div" [("class", "postbody")] (getBody
> > post)
> >                
> >   ]
> >   return [Element "h1" [] [Text (getTitle post)]
> >            ,Element
> > "div" [("class", "post")] body
> >            ]
> > 
> > ...we discourage this pattern of putting view details
> in
> > your code.
> > The preferred approach would be to implement this bit
> of
> > HTML as
> > another template that gets each of the individual
> pieces of
> > data from
> > bound splices.
> > 
> > On Thu, Jun 17, 2010 at 12:13 PM, Kevin Jardine <[email protected]>
> > wrote:
> > > OK, thanks for the encouragement.
> > >
> > > I was looking at the definition of bindStrings
> itself
> > and it occurs to me that a trivial variant would be:
> > >
> > > bindNodes pairs ts = foldr add ts pairs
> > >  where
> > >    add (n,v) = bindSplice n (return v)
> > >
> > > So perhaps I'll start with that and see where it
> takes
> > me.
> > >
> > > That means that I would be rewriting my view
> system to
> > process lists of nodes rather than strings, but the
> same
> > flow structure would remain (at least for now).
> > >
> > > Kevin
> > >
> > > --- On Thu, 6/17/10, MightyByte <[email protected]>
> > wrote:
> > >
> > >> From: MightyByte <[email protected]>
> > >> Subject: Re: [Snap Framework] renderTemplate
> with
> > XML fragments in Heist
> > >> To: "Kevin Jardine" <[email protected]>
> > >> Date: Thursday, June 17, 2010, 6:05 PM
> > >> Yes, that is exactly the approach we
> > >> had in mind.  You could even
> > >> eliminate nodeDict as a parameter and store
> it as
> > state in
> > >> MyMonad.
> > >> But you wouldn't have to do that.  You can
> > organize it
> > >> in whatever way
> > >> works best for your application.
> > >>
> > >> On Thu, Jun 17, 2010 at 12:00 PM, Kevin
> Jardine
> > <[email protected]>
> > >> wrote:
> > >> > One experiment that I'm looking at is
> > defining:
> > >> >
> > >> > klugeSplice :: [(B.ByteString,[Node])]
> ->
> > Splice
> > >> MyMonad
> > >> > klugeSplice nodeDict = do
> > >> >    input <- getParamNode
> > >> >    let name = getName input
> > >> >    return $ fromMaybe [Text (B.pack
> > "oops")] $
> > >> lookup name nodeDict
> > >> >
> > >> > and passing
> > >> >
> > >> > (klugeSplice nodeDict) as the first
> parameter
> > to
> > >> bindSplice.
> > >> >
> > >> > At least that function compiles but I'm
> > afraid that
> > >> I'm still lost in a conceptual sea so I'm not
> sure
> > if this
> > >> is anything like the best approach.
> > >> >
> > >> > Kevin
> > >> >
> > >> > --- On Thu, 6/17/10, Kevin Jardine
> <[email protected]>
> > >> wrote:
> > >> >
> > >> >> From: Kevin Jardine <[email protected]>
> > >> >> Subject: Re: [Snap Framework]
> > renderTemplate with
> > >> XML fragments in Heist
> > >> >> To: [email protected]
> > >> >> Date: Thursday, June 17, 2010, 5:05
> PM
> > >> >> To explain in more detail, I had
> > >> >> thought that Heist was a "slave"
> > template
> > >> library.
> > >> >>
> > >> >> You hand it some attributes (nodes
> or
> > strings) and
> > >> a
> > >> >> template name and it hands you back
> > something
> > >> (nodes or a
> > >> >> rendered string).
> > >> >>
> > >> >> Currently, however, it seems as
> though
> > Heist is
> > >> the master
> > >> >> app and mine ends up being the slave
> -
> > you hand
> > >> Heist a page
> > >> >> shell and define some hooks and it
> does
> > all the
> > >> work and
> > >> >> hands you the final string.
> > >> >>
> > >> >> Is that correct?
> > >> >>
> > >> >> If so, I'm still keen to use the
> library
> > but will
> > >> have to
> > >> >> rethink how I am doing things as the
> work
> > flow is
> > >> in essence
> > >> >> in the reverse order of what I am
> used
> > to.
> > >> >>
> > >> >> Kevin
> > >> >>
> > >> >> --- On Thu, 6/17/10, Kevin Jardine
> <[email protected]>
> > >> >> wrote:
> > >> >>
> > >> >> > From: Kevin Jardine <[email protected]>
> > >> >> > Subject: Re: [Snap Framework]
> > renderTemplate
> > >> with XML
> > >> >> fragments in Heist
> > >> >> > To: "MightyByte" <[email protected]>
> > >> >> > Date: Thursday, June 17, 2010,
> 4:34
> > PM
> > >> >> > Thanks for your patience here!
> > >> >> >
> > >> >> > I am still running into a
> > conceptual
> > >> difficulty here
> > >> >> as I
> > >> >> > want to pass around a
> > dictionary/map
> > >> structure of some
> > >> >> kind
> > >> >> > of attribute value pairs.
> > >> >> >
> > >> >> > Eg. [(String, [Node])] or
> > [(String,String)]
> > >> which I
> > >> >> can
> > >> >> > manipulate in my own monad and
> then
> > pass to
> > >> Heist when
> > >> >> and
> > >> >> > if I choose.
> > >> >> >
> > >> >> > But bindSplice takes a
> function
> > where I would
> > >> want a
> > >> >> > dictionary.
> > >> >> >
> > >> >> > I am obviously lacking in
> > Heist-foo.
> > >> >> >
> > >> >> > What to do?
> > >> >> >
> > >> >> > Kevin
> > >> >> >
> > >> >> > --- On Thu, 6/17/10,
> MightyByte
> > <[email protected]>
> > >> >> > wrote:
> > >> >> >
> > >> >> > > From: MightyByte <[email protected]>
> > >> >> > > Subject: Re: [Snap
> Framework]
> > >> renderTemplate with
> > >> >> XML
> > >> >> > fragments in Heist
> > >> >> > > To: "Kevin Jardine" <[email protected]>
> > >> >> > > Date: Thursday, June 17,
> 2010,
> > 3:55 PM
> > >> >> > > Yeah, this was our
> intent.
> > >> >> > > renderTemplate is the only
> way
> > to get
> > >> >> > > things out of
> TemplateMonad. 
> > By using
> > >> >> bindSplice as
> > >> >> > I
> > >> >> > > mentioned
> > >> >> > > above, you keep your data
> is
> > structured
> > >> nodes
> > >> >> when
> > >> >> > > possible.
> > >> >> > > bindStrings is only
> intended as
> > a
> > >> convenient way
> > >> >> to
> > >> >> > pass
> > >> >> > > strings into
> > >> >> > > templates.
> > >> >> > >
> > >> >> > > On Thu, Jun 17, 2010 at
> 9:47
> > AM, Kevin
> > >> Jardine
> > >> >> <[email protected]>
> > >> >> > > wrote:
> > >> >> > > > Or am I making a
> > conceptual error
> > >> here?
> > >> >> > > >
> > >> >> > > > Perhaps I should be
> using
> > >> runTemplate to get
> > >> >> the
> > >> >> > XML
> > >> >> > > fragments and only use
> > renderTemplate at
> > >> the very
> > >> >> top
> > >> >> > > level?
> > >> >> > > >
> > >> >> > > > This would keep the
> input
> > as
> > >> structured
> > >> >> nodes
> > >> >> > and
> > >> >> > > convert to bytestrings
> only at
> > the last
> > >> step.
> > >> >> > > >
> > >> >> > > > Kevin
> > >> >> > > >
> > >> >> > > > --- On Thu, 6/17/10,
> Kevin
> > Jardine
> > >> <[email protected]>
> > >> >> > > wrote:
> > >> >> > > >
> > >> >> > > >> From: Kevin
> Jardine
> > <[email protected]>
> > >> >> > > >> Subject:
> > renderTemplate with
> > >> XML
> > >> >> fragments
> > >> >> > in
> > >> >> > > Heist
> > >> >> > > >> To: [email protected]
> > >> >> > > >> Date: Thursday,
> June
> > 17, 2010,
> > >> 3:38 PM
> > >> >> > > >> If I call
> > >> >> > > >>
> > >> >> > > >> renderTemplate
> > (bindStrings
> > >> dict
> > >> >> > > emptyTemplateState)
> > >> >> > > >> templateName
> > >> >> > > >>
> > >> >> > > >> this works fine
> if the
> > dict
> > >> values are
> > >> >> all
> > >> >> > > unstructured
> > >> >> > > >> data.
> > >> >> > > >>
> > >> >> > > >> However, if they
> are
> > XML
> > >> structures,
> > >> >> the
> > >> >> > resulting
> > >> >> > > HTML is
> > >> >> > > >> escaped,
> presumably
> > because
> > >> bindStrings
> > >> >> > inserts
> > >> >> > > them as Text
> > >> >> > > >> nodes.
> > >> >> > > >>
> > >> >> > > >> What function
> instead
> > of
> > >> bindStrings do
> > >> >> I
> > >> >> > call to
> > >> >> > > insert
> > >> >> > > >> XML fragments?
> > >> >> > > >>
> > >> >> > > >> Kevin
> > >> >> > > >>
> > >> >> > > >>
> > >> >> > > >>
> > >> >> > > >>
> > >> >> > > >
> > >> >> > > >
> > >> >> > > >
> > >> >> > > >
> > >> >>
> > _______________________________________________
> > >> >> > > > Snap mailing list
> > >> >> > > > [email protected]
> > >> >> > > > http://mailman-mail5.webfaction.com/listinfo/snap
> > >> >> > > >
> > >> >> > >
> > >> >> >
> > >> >> >
> > >> >> >
> > >> >> >
> > >> >>
> > >> >>
> > >> >>
> > >> >>
> > >> >
> > >> >
> > >> >
> > >> >
> > _______________________________________________
> > >> > Snap mailing list
> > >> > [email protected]
> > >> > http://mailman-mail5.webfaction.com/listinfo/snap
> > >> >
> > >>
> > >
> > >
> > >
> > > _______________________________________________
> > > Snap mailing list
> > > [email protected]
> > > http://mailman-mail5.webfaction.com/listinfo/snap
> > >
> > 
> 
> 
> 
> 


      
_______________________________________________
Snap mailing list
[email protected]
http://mailman-mail5.webfaction.com/listinfo/snap

Reply via email to