source: main/trunk/ibisph-view/src/main/webapp/xslt/html/ContentContainer.xslt @ 22707

Last change on this file since 22707 was 22707, checked in by GarthBraithwaite_STG, 2 months ago

view - updated docs and internal workings of ibis.include.

File size: 22.3 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<xsl:stylesheet version="3.0" 
3        xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" 
4        xmlns:ibis="http://www.ibisph.org"
5        xmlns:xs  ="http://www.w3.org/2001/XMLSchema"
6
7        exclude-result-prefixes="ibis xs"
8>
9
10        <ibis:doc>
11                <name>html/ContentContainer</name>
12                <summary>Templates for titled content, fixed, and expandable content blocks.</summary>
13                <description>
14                        Main template block code used throughout the app.  Key concepts are:
15                        - CONTENT elments need to be processed via apply/match.  This is best
16                                handled explicitly by the approp XSLT code that knows the element
17                                structure being processed.  However, this code checks and applies
18                                if needed.
19                        - content: content is ready to go content and is either straight text
20                                or html.  When the "content" is NOT CONTENT it is simply xsl   
21                                copied into the output stream - no apply matches.
22                        - title: Straight text processed with an xsl value-of.
23                        - help: HELP structure that is included after the title text within
24                                the heading.  The help content IS xsl apply/match processed.
25                        - TEXT elements are NOT explicitly processed in this code.  These
26                                are like CONTENT elements and need specific processing based on
27                                the XML struct then placed into the content params that are
28                                simply copied within these templates.
29                                Used in:
30                                HELP                    n:TEXT - processed in help.xslt because \n\n
31                                OVERVIEW                n:TEXT - processed here - calls this textnodeset
32                                DATA_SOURCE     1:TEXT - is the acutal descript of that DS. 
33                                        DATA_SOURCE/DATA_ISSUES/text() = DI narrative.
34                                IP RELATION             1:TEXT - RELATION/TEXT - Indicator.relatedIndicators
35                                QM DATA_NOTE    n:TEXT - MEASURE/DATA_NOTE and QM DNs.  Handled
36                                        in QM.xslt because needs to do a LI.  Calls the this textnodeset
37                                        when there are a series of DN TEXTs to get proper [p] struct.
38                                QM DATA_ISSUE   n:text - Lois wants multiple DI's for QMs AND she
39                                        wants them split out from DN's.  This is similar to the QM
40                                        datanotes it has to handle multiple DI/TEXTs with eath datasource
41                                        DI and QM DI being in a list.
42                                QM DEBUG - This is info returned from IBISQ and much of the time
43                                        the XML is malformed and/or not useful to the end user.  So
44                                        actual use is to example the QM XML.  As such not processed.
45                </description>
46        </ibis:doc>
47
48
49        <!-- ================================= M A I N   C O N T R O L  P A R A M S -->
50        <xsl:param name="ContentContainer.defaultContentBlockType" select="'fixed'"
51                ibis:doc="Sets the default ContentContainer.contentBlock content type to
52                        be created.  This param allows for SS.xslt to set the default type
53                        of block content to be produced for the website.  Valid values are
54                        'fixed' = standard always showing titled text block.
55                        'expandable' = expandable content.
56                        'inline' = no container.
57                "
58        />
59        <xsl:param name="ContentContainer.expandableControlType" select="'checkbox'"
60                ibis:doc="Default expandable content control type.  Valid values are 'radio' and 'checkbox'."
61        />
62        <xsl:param name="ContentContainer.expandableControlName" select="'defaultPageExpandableContentGroup'"
63                ibis:doc="Default expandable content control name that is used for 'radio'
64                        type expandable content controls.
65                "
66        />
67
68        <xsl:param name="ContentContainer.defaultContentContainerClass" select="'Container'"
69                ibis:doc="Used as a default for fixed and expandabale block containers. 
70                        This allows for SS.xslt to override and add more content container
71                        classes as needed.
72                "
73        />
74        <xsl:param name="ContentContainer.defaultFixedContentContainerClass" select="$ContentContainer.defaultContentContainerClass"
75                ibis:doc="Fixed block container css - defaults to ContentContainer.defaultContentContainerClass."
76        />
77        <xsl:param name="ContentContainer.expandableContentContainerClass" select="$ContentContainer.defaultContentContainerClass"
78                ibis:doc="Expandable block content container css - defaults to ContentContainer.defaultContentContainerClass."
79        />
80
81        <xsl:param name="ContentContainer.addWikiAttributeToContentContainer" select="false()"
82                ibis:doc="Used for the default contentBlock addWikiControl.  Value values are true(), false() - default = false."
83        />
84
85        <xsl:param name="ContentContainer.headingLevel" select="2" as="xs:integer"
86                ibis:doc="Used to control the default Hx title element creation for all   
87                        block containers.  This allows for SS.xslt to override the default. 
88                        Default = 3.  Value of 0 turns off.
89                "
90        />
91
92
93
94        <!-- =================================================== T E M P L A T E S -->
95        <xsl:template name="ContentContainer.contentBlock"
96                ibis:doc="Wrapper for expandable, fixed, inline blocks.  This template
97                        is heavily used for all general content blocks so that an adopter
98                        can easily control their sites block behavior via ss.xslt parameter
99                        overrides.  Another way: provides a centralized mechanism to control
100                        all block types via the global contentBlockType without having to
101                        explicitly call.
102                "
103        >
104                <xsl:param name="containerID" ibis:doc="Optional ID to be used for the container."/>
105                <xsl:param name="contentContainerClass"/>
106                <xsl:param name="additionalClasses" ibis:doc="Optional css class to append to the outermost element."/>
107
108                <xsl:param name="contentBlockType" select="$ContentContainer.defaultContentBlockType"
109                        ibis:doc="Optional param to control the block type.  Default is the
110                                ContentContainer.defaultContentBlockType.  Valid values are:
111                                        fixed = contained title and content within a section or div.
112                                        expandable = title as the block control content within.
113                                        inline or '' = places a title followed by the straight content.
114                        "
115                />
116                <xsl:param name="title" ibis:doc="Optional title text to be displayed."/>
117                <xsl:param name="headingLevel" select="$ContentContainer.headingLevel" as="xs:integer"
118                        ibis:doc="Optional title level - html Hx element control.  Defaults
119                                to ContentContainer.headingLevel, value of 0 turns off.
120                        "
121                />
122                <xsl:param name="description" ibis:doc="Optional description used as the HTML Hx element's title attribute."/>
123                <xsl:param name="help"        ibis:doc="Optional HELP struct to be placed after the HTML Hx element's title."/>
124
125                <xsl:param name="content" ibis:doc="Actual content to be included.  This
126                                can be a mix of text and sub elements.  Content is only processed
127                                if it is a CONTENT container element otherwise it is simply
128                                copied into the output.  If no content then the block is NOT created.
129                        "
130                />
131                <xsl:param name="addWikiAttribute" select="$ContentContainer.addWikiAttributeToContentContainer" 
132                        ibis:doc="boolean that controls if container should the wiki attribute added (so script can process for embedded wiki markup)."
133                />
134
135                <xsl:choose>
136                        <xsl:when test="$contentBlockType = 'expandable'">
137                                <xsl:call-template name="ContentContainer.expandable">
138                                        <xsl:with-param name="containerID"       select="$containerID"/>
139                                        <xsl:with-param name="contentContainerClass" select="if(0 != string-length($contentContainerClass)) then $contentContainerClass else $ContentContainer.expandableContentContainerClass"/>
140                                        <xsl:with-param name="additionalClasses" select="$additionalClasses"/>
141                                        <xsl:with-param name="title"             select="$title"/>
142                                        <xsl:with-param name="headingLevel"      select="$headingLevel"/>
143                                        <xsl:with-param name="description"       select="$description"/>
144                                        <xsl:with-param name="help"              select="$help"/>
145                                        <xsl:with-param name="content"           select="$content"/>
146                                        <xsl:with-param name="addWikiAttribute"  select="$addWikiAttribute"/>
147                                </xsl:call-template>
148                        </xsl:when>
149                        <xsl:otherwise>
150                                <xsl:call-template name="ContentContainer.fixed">
151                                        <xsl:with-param name="containerID"       select="$containerID"/>
152                                        <xsl:with-param name="contentContainerClass" select="if(0 != string-length($contentContainerClass)) then $contentContainerClass else $ContentContainer.defaultFixedContentContainerClass"/>
153                                        <xsl:with-param name="additionalClasses" select="$additionalClasses"/>
154                                        <xsl:with-param name="title"             select="$title"/>
155                                        <xsl:with-param name="headingLevel"      select="$headingLevel"/>
156                                        <xsl:with-param name="description"       select="$description"/>
157                                        <xsl:with-param name="help"              select="$help"/>
158                                        <xsl:with-param name="content"           select="$content"/>
159                                        <xsl:with-param name="addWikiAttribute"  select="$addWikiAttribute"/>
160                                </xsl:call-template>
161                        </xsl:otherwise>
162                </xsl:choose>
163        </xsl:template>
164
165
166        <xsl:template name="ContentContainer.fixed" 
167                ibis:doc="Non expandable fixed content block.  Called directly or
168                        via the general contentBlock template. 
169                "
170        >
171                <xsl:param name="containerID" ibis:doc="Optional ID to be used for the container."/>
172                <xsl:param name="contentContainerClass" select="$ContentContainer.defaultFixedContentContainerClass"/>
173                <xsl:param name="additionalClasses" ibis:doc="optional css class appended to the blocks cc.ContentContainer value."/>
174
175                <xsl:param name="title"        ibis:doc="Optional block Hx element title text."/>
176                <xsl:param name="headingLevel" select="$ContentContainer.headingLevel" as="xs:integer"/>
177                <xsl:param name="description"  ibis:doc="Optional title on hover text."/>
178                <xsl:param name="help"         ibis:doc="Optional HELP struct to be placed in the HTML Hx element's title."/>
179
180                <xsl:param name="content" ibis:doc="Text string or HTML content to be
181                                displayed.  If content is blank then this code does not do anything.
182                        "
183                />
184                <xsl:param name="addWikiAttribute" select="$ContentContainer.addWikiAttributeToContentContainer"/>
185
186                <xsl:param name="contentContinerElementName" select="if(0 != string-length($title)) then 'section' else 'div'"/>
187
188                <xsl:if test="exists($content/*) or (0 != string-length( ($content//text())[1] ))">
189                        <xsl:element name="{$contentContinerElementName}">
190                                <xsl:if test="(0 != string-length($contentContainerClass)) or (0 != string-length($additionalClasses))"> 
191                                        <xsl:attribute name="class" select="concat($contentContainerClass, ' ', $additionalClasses)"/>
192                                </xsl:if>
193                                <xsl:if test="0 != string-length($containerID)"><xsl:attribute name="id" select="$containerID"/></xsl:if>
194                                <xsl:if test="true() = $addWikiAttribute"><xsl:attribute name="wiki" select="'true'"/></xsl:if>
195                                <xsl:call-template name="ContentContainer.title">
196                                        <xsl:with-param name="title"        select="$title"/>
197                                        <xsl:with-param name="headingLevel" select="$headingLevel"/>
198                                        <xsl:with-param name="description"  select="$description"/>
199                                        <xsl:with-param name="help"         select="$help"/>
200                                </xsl:call-template>
201                                <xsl:call-template name="ContentContainer.content">
202                                        <xsl:with-param name="content" select="$content"/>
203                                </xsl:call-template>
204                        </xsl:element>
205                </xsl:if>
206        </xsl:template>
207
208
209        <xsl:template name="ContentContainer.expandable"
210                ibis:doc="Provides ability to more easily embed an expandable content block
211                        into the page.  Note that the approp CSS will need to be included.
212                        The control and container require an 'id' attribute which is created
213                        based on the supplied content element.  The 'content' text() and sub
214                        elements will be ibis:copied into the assoc content container DIV.
215                "
216        >
217                <xsl:param name="containerID" ibis:doc="Optional ID to be used for the container."/>
218                <xsl:param name="contentContainerClass" select="$ContentContainer.expandableContentContainerClass"/>
219
220                <xsl:param name="additionalClasses" 
221                        ibis:doc="Optional class to be appended to the ExpandableContent
222                                container css class.  Note that this string value can be a
223                                single css class or a series.
224                        "
225                />
226
227                <xsl:param name="title" select="'Click here to show more content.'"/>
228                <xsl:param name="headingLevel" select="$ContentContainer.headingLevel" as="xs:integer"
229                        ibis:doc="Optional title level - html Hx element control.  Defaults
230                                to ContentContainer.headingLevel, value of 0 turns off.
231                        "
232                />
233                <xsl:param name="description" select="concat('Show/hide selection list control for ', $title)"
234                        ibis:doc="Optional title on hover text."
235                />
236                <xsl:param name="help"            ibis:doc="Optional HELP struct to be placed in the HTML Hx element's title."/>
237                <xsl:param name="subTitleContent" ibis:doc="Optional text or content to be copied after the title string."/>
238
239                <xsl:param name="controlType" select="$ContentContainer.expandableControlType"
240                        ibis:doc="Optional param that controls the type of control to build.
241                                Default is ContentContainer.expandableControlType which defaults
242                                to a 'checkbox'.  Checkbox results in a click bar that opens/
243                                closes the content container.  If 'radio' and controlName is
244                                the same as another expandable block then only one container will
245                                be displayed at a time (hence the radio input functionality).
246                        "
247                />
248                <xsl:param name="controlID"
249                        ibis:doc="Optional ID to be used for the input control.  If no value
250                                then an ID is generated based on the content element.  This param
251                                provides a mechanism to name the control for fine grained css.
252                        "
253                />
254                <xsl:param name="controlName" select="$ContentContainer.expandableControlName"
255                        ibis:doc="Optional param that is only needed when the controlType is
256                                'radio'.  This results in a UI where only 1 expandable block
257                                will be displayed at a time (hence the radio input functionality).
258                                Defaults to ContentContainer.expandableControlName.
259                        "
260                />
261
262                <xsl:param name="inputOnChangeAttribute" ibis:doc="input onchange attribute"/>
263
264                <xsl:param name="accesskey" ibis:doc="Optional control's quick access key."/>
265                <xsl:param name="show" select="false()"
266                        ibis:doc="Optional flag value that if true sets the input to 'checked'
267                                which results in the block being shown/expanded.  Default=false.
268                        "
269                />
270
271                <xsl:param name="content" ibis:doc="Text string or HTML content to be
272                        displayed. If content is blank then this code does not do anything."
273                />
274
275                <xsl:param name="addWikiAttribute" select="$ContentContainer.addWikiAttributeToContentContainer"/>
276
277
278                <xsl:if test="exists($content/*) or (0 != string-length( ($content//text())[1] ))">
279                        <xsl:variable name="id"          select="if(string-length($controlID) != 0) then $controlID else concat('expandableContentControl.', generate-id($content))"/>
280                        <xsl:variable name="controlType" select="if(string-length($controlType) != 0) then $controlType else 'checkbox'"/>
281
282                        <section class="ExpandableContent {$additionalClasses}">
283                                <input id="{$id}" type="{$controlType}" class="Control">
284                                        <xsl:if test="$show"><xsl:attribute name="checked" select="'checked'"/></xsl:if>
285                                        <xsl:if test="($controlType = 'radio') and (0 != string-length($controlName))">
286                                                <xsl:attribute name="name" select="$controlName"/>
287                                        </xsl:if>
288                                        <xsl:if test="$inputOnChangeAttribute"><xsl:attribute name="onchange" select="$inputOnChangeAttribute"/></xsl:if>
289                                </input>
290                                <xsl:element name="h{$headingLevel}">
291                                        <label for="{$id}" title="Expandable content control.  Click to show/hide the {$title}" class="FontIcon">
292                                                <xsl:if test="$description"><xsl:attribute name="title" select="$description"/></xsl:if>
293                                                <xsl:if test="$accesskey"><xsl:attribute name="accesskey" select="$accesskey"/></xsl:if>
294                                                <xsl:value-of select="$title"/> 
295                                                <xsl:apply-templates select="$help" mode="Help.element"/>
296                                                <xsl:copy-of select="$subTitleContent"/>
297                                        </label>
298                                </xsl:element>
299
300                                <div>
301                                        <xsl:if test="$contentContainerClass"><xsl:attribute name="class" select="$contentContainerClass"/></xsl:if> 
302                                        <xsl:if test="$containerID"><xsl:attribute name="id" select="$containerID"/></xsl:if> 
303                                        <xsl:if test="$addWikiAttribute"><xsl:attribute name="wiki" select="'true'"/></xsl:if>
304                                        <xsl:choose>
305                                                <xsl:when test="not($content/*)">
306                                                        <p><xsl:copy-of select="$content/text()"/></p>
307                                                </xsl:when>
308                                                <xsl:otherwise>
309                                                        <xsl:call-template name="ContentContainer.content">
310                                                                <xsl:with-param name="content" select="$content"/>
311                                                        </xsl:call-template>
312                                                </xsl:otherwise>
313                                        </xsl:choose>
314                                </div>
315                        </section>
316                </xsl:if>
317        </xsl:template>
318
319
320        <xsl:template name="ContentContainer.overviews"
321                ibis:doc="Creates a titled content block that has delimited title texts
322                        nodes (with nodes delimited via the delimitedTitleTextsNodes template.
323
324                        Currently used for QM selection and builder overviews and CP overviews.
325
326                        Loops the nodesets with each nodeset being an optinoal [TITLE]
327                        and 1:n TEXT nodes.  Each nodeset is contained within a new fixed
328                        content block and delimited via the delimiter param.
329
330                        1:n fixedBlocks with each fixedBlock having delimited TEXT blocks. 
331
332                        Used for OVERVIEW type blocks and others that have TITLE and 1:n TEXT blocks.
333                        Struct passed in: set of nodes */{[TITLE], (n)TEXTs}
334                "
335        >
336                <xsl:param name="title" select="'Overview'"/>
337                <xsl:param name="headingLevel" select="$ContentContainer.headingLevel" as="xs:integer"/>
338                <xsl:param name="description"  ibis:doc="Optional description to be placed in the HTML Hx element's title attribute."/>
339                <xsl:param name="help"         ibis:doc="Optional HELP struct to be placed in the HTML Hx element's title."/>
340
341                <xsl:param name="expandableContentShow" select="true()"/>
342                <xsl:param name="addWikiAttribute"      select="true()"/>
343                <xsl:param name="containerID"           ibis:doc="Optional ID to be used for the container."/>
344                <xsl:param name="additionalClasses"     select="'Overview'"/>
345                <xsl:param name="overviews"/>
346
347                <xsl:call-template name="ContentContainer.expandable">
348                        <xsl:with-param name="containerID"       select="$containerID"/>
349                        <xsl:with-param name="additionalClasses" select="$additionalClasses"/>
350                        <xsl:with-param name="title"             select="$title"/>
351                        <xsl:with-param name="headingLevel"      select="$headingLevel"/>
352                        <xsl:with-param name="description"       select="$description"/>
353                        <xsl:with-param name="help"              select="$help"/>
354                        <xsl:with-param name="content">
355
356                                <xsl:for-each select="$overviews/OVERVIEW">
357                                        <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
358                                        <section>
359                                        <xsl:call-template name="ContentContainer.overviewsOverview">
360                                                <xsl:with-param name="headingLevel" select="$headingLevel+1"/>
361                                                <xsl:with-param name="overview" select="."/>
362                                        </xsl:call-template>
363                                        </section>
364
365                                </xsl:for-each>
366
367                        </xsl:with-param>
368                        <xsl:with-param name="addWikiAttribute" select="$addWikiAttribute"/>
369                </xsl:call-template>
370        </xsl:template>
371
372        <xsl:template name="ContentContainer.overviewsOverview"
373                ibis:doc="creates a fixed content block for each OVERVIEW TITLE/TEXT nodes."
374        >
375                <xsl:param name="headingLevel" select="$ContentContainer.headingLevel + 1" as="xs:integer"/>
376                <xsl:param name="overview" ibis:doc="node with [TITLE] and 1-n TEXTs."/>
377                <xsl:param name="addWikiAttribute" select="$ContentContainer.addWikiAttributeToContentContainer" 
378                        ibis:doc="boolean that controls if container should the wiki attribute added (so script can process for embedded wiki markup)."
379                />
380
381                <xsl:call-template name="ContentContainer.fixed">
382                        <xsl:with-param name="title"            select="$overview/TITLE"/>
383                        <xsl:with-param name="headingLevel"     select="$headingLevel"/>
384                        <xsl:with-param name="description"      select="$overview/DESCRIPTION"/>
385                        <xsl:with-param name="addWikiAttribute" select="$addWikiAttribute"/>
386                        <xsl:with-param name="content">
387                                <xsl:call-template name="ContentContainer.textNodesetContent">
388                                        <xsl:with-param name="textNodeset" select="$overview/TEXT"/>
389                                </xsl:call-template>
390                        </xsl:with-param>
391                </xsl:call-template>
392        </xsl:template>
393
394
395
396        <xsl:template name="ContentContainer.title"
397                ibis:doc="Builds a title heading if specified.  IF there is a title it
398                        should have an appropriate block title so an Hx unless specifically
399                        set to 0 which skips building an Hx. 
400                "
401        >
402                <xsl:param name="title" ibis:doc="title text."/>
403                <xsl:param name="headingLevel" as="xs:integer"
404                        ibis:doc="Optional title level - html Hx element control.  Defaults
405                                to ContentContainer.headingLevel, value of 0 turns off.
406                        "
407                />
408                <xsl:param name="description" ibis:doc="Optional - used for Hx title attribute."/>
409                <xsl:param name="help"        ibis:doc="Optional help to be placed inside the Hx element after the title text."/>
410
411                <xsl:if test="0 != string-length($title)">
412                        <xsl:choose>
413                                <xsl:when test="0 = $headingLevel">
414                                        <div>
415                                                <xsl:value-of select="$title"/> 
416                                                <xsl:apply-templates select="$help" mode="Help.element"/>
417                                        </div>
418                                </xsl:when>
419                                <xsl:when test="0 &lt; $headingLevel">
420                                        <xsl:element name="h{$headingLevel}">
421                                                <xsl:attribute name="title" select="$description"/>
422                                                <xsl:value-of select="$title"/> 
423                                                <xsl:apply-templates select="$help" mode="Help.element"/>
424                                        </xsl:element>
425                                </xsl:when>
426                        </xsl:choose>
427                </xsl:if>
428        </xsl:template>
429
430
431        <xsl:template name="ContentContainer.content"
432                ibis:doc="Processes the actual content.  If content is CONTENT then
433                        apply templates.  If content is TEXT then process as nodeset of
434                        TEXT and wrap each in a [p].  Else copy the content as is.
435                "
436        >
437                <xsl:param name="content"/>
438
439                <xsl:choose>
440                        <xsl:when test="$content/CONTENT or ('CONTENT' = $content/name())">
441                                <xsl:call-template name="ibis.contentApplyTemplates">
442                                        <xsl:with-param name="content" select="$content"/>
443                                </xsl:call-template>
444                        </xsl:when>
445                        <xsl:when test="$content/TEXT or ('TEXT' = $content/name())">
446                                <xsl:call-template name="ContentContainer.textNodesetContent">
447                                        <xsl:with-param name="textNodeset" select="$content"/>
448                                </xsl:call-template>
449                        </xsl:when>
450                        <xsl:otherwise>
451                                <xsl:copy-of select="$content"/>
452                        </xsl:otherwise>
453                </xsl:choose>
454        </xsl:template>
455
456
457        <xsl:template name="ContentContainer.textNodesetContent"
458                ibis:doc="If more than 1 TEXT nodes converts to [p] enclosed blocks
459                        otherwise just processes value-of content.
460                "
461        >
462                <xsl:param name="textNodeset"/>
463
464                <xsl:if test="1 = count($textNodeset)">
465                        <xsl:value-of select="$textNodeset"/>
466                </xsl:if>
467                <xsl:if test="1 &lt; count($textNodeset)">
468                        <xsl:for-each select="$textNodeset">
469                                <p><xsl:value-of select="."/></p>
470                        </xsl:for-each>
471                </xsl:if>
472        </xsl:template>
473
474
475</xsl:stylesheet>
476<!-- ============================= End of File ============================= -->
Note: See TracBrowser for help on using the repository browser.