[paginated-masters] Element master templates (was: planA/planB)

Hey all,

There's been a bunch of discussion about extending @page rules to provide
master templates for paginated layout. That's where my thinking started as
well, but currently I'm considering using master templates at an element
level instead of for the entire document.

I like the ideas in GCPM for paged presentations, and there you can set
overflow-style on a single element. I think it would be interesting to use
that switch for turning on a paginated display and provide a means to
associate such a paginated element with a master template.

A master template can define boxes (or slots) that can contain content - the
content can come from the element, a named flow, or be generated content.
Since these master templates apply to paginated elements, if the content
associated with any slot overflows, a new paged view is created with
additional boxes until all of the content is displayed.

Because I would like to make master templates work with the ideas from GCPM,
I have a notion of an implicit master template with an implicit slot. The
implicit master template has a single implicit slot that contains the
paginated element's content. So the following four examples are equivalent -
they all give the same rendering as specified in GCPM. Examples 2-4 would
never actually be used without adding more boxes to the template.

1. (no master template defined)
   #content { overflow-style: paged-x; }

2. (template with implicit content slot)
   #content { overflow-style:paged-x; }
   @master-template { }

3. (template with explicit content slot)
   #content { overflow-style:paged-x; }
   @master-template {
     template-slots: content;
     <slot-syntax>(content) { }
   }

4. (template using an explicit region slot)
   #content { overflow-style:paged-x; }
   #content > * { flow-into: content-flow; }
   @master-template {
     template-slots: main;
     <slot-syntax>(main) {
       flow-from: content-flow;
     }
   }
    
I don't know what the correct syntax for addressing slots should be, so I'm
using <slot-syntax> here as a stand-in. The template-slots descriptor lets
you create named slots in the template and specify their order if that
matters for positioning.

Master templates can create more boxes to suit the intended design:

A simple header for each page:

   #content { overflow-style:paged-x; }
   @master-template {
     template-slots: header, content;
     <slot-syntax>(header) {
       content: "title string";
     }
     <slot-syntax>(content) { }
   }

A simple footer for each page:

   #content { overflow-style:paged-x; }
   @master-template {
     template-slots: content, footer;
     <slot-syntax>(content) { }
     <slot-syntax>(footer) {
       content: "author string";
     }
   }

Displaying two articles side-by-side:

   .article1 { overflow-style:paged-x; }
   .article2 { flow-into:second-article; }
   @master-template {
     template-slots: content, right;
     <slot-syntax>(content) {
       width: 40%;
       padding: 5%
       float:left;
     }
     <slot-syntax>(right) {
       flow-from: second-article;
       width: 40%;
       padding: 5%
       float:right;
     }
   }

Please let me know what you think. There is a lot more that would need to be
defined, and I'm not tied to any of the specific terms or syntax I'm using
here. But I think that the idea of using an @rule to arrange boxes and
assign content in a master template should work.

Thanks,

Alan

Received on Wednesday, 22 February 2012 22:01:18 UTC