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