source: main/trunk/ibisph-view/src/main/webapp/xslt/html/query/module/builder/SectionSelections.xslt @ 19882

Last change on this file since 19882 was 19882, checked in by GarthBraithwaite_STG, 2 years ago

view - changed Graphic to DataViz?

File size: 34.2 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2
3<xsl:stylesheet version="3.0" 
4        xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" 
5        xmlns:ibis="http://www.ibisph.org"
6        xmlns:xs  ="http://www.w3.org/2001/XMLSchema"
7
8        exclude-result-prefixes="ibis xs"
9>
10
11        <ibis:doc>
12                <name>html/query/module/builder/SectionSelections</name>
13                <summary>Contains internal, non API module query builder page related templates</summary>
14                <description>
15                        Query builder type Section and input selection related templates.
16
17                        NOTE: SECTION and DIMENSION exclusions are all handled by the
18                        ConfigurationIncludeCriteriaExclude XSLT templates.
19                </description>
20        </ibis:doc>
21
22        <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TEMPLATES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
23        <xsl:template name="SectionSelections.expandableContentSection"
24                ibis:doc="Creates the actual 'step x. - some step title' step expandable
25                        content block/section."
26        >
27                <xsl:param name="section"/>
28                <xsl:param name="sectionNumber"/>
29                <xsl:param name="selectedDimensions" select="$section/SELECTED_DIMENSIONS"/>
30                <xsl:param name="id"   select="concat('section.', $sectionNumber)"/>
31                <xsl:param name="show" select="exists($section/SHOW)"/>
32                <xsl:param name="titleLevel" select="$ContentContainer.titleLevel" as="xs:integer"/>
33
34                <xsl:call-template name="ContentContainer.expandable">
35                        <xsl:with-param name="controlID"   select="$id"/>
36                        <xsl:with-param name="controlName" select="NAME"/>
37                        <xsl:with-param name="title"       select="concat('Step ', $sectionNumber, ': ', TITLE)"/>
38                        <xsl:with-param name="titleLevel"  select="$titleLevel"/>       
39                        <xsl:with-param name="description" select="concat('Show/hide selection list control for ', TITLE)"/>
40                        <xsl:with-param name="accesskey"   select="$sectionNumber"/>
41                        <xsl:with-param name="show"        select="$show"/>
42
43                        <xsl:with-param name="subTitleContent">
44                                <span id="selectedValuesContainer.{$sectionNumber}" class="SelectedValues">
45
46                                        <!-- code really isn't needed as init script does this.  Since XSLT code was written before script left for now... -->
47                                        <xsl:if test="exists($selectedDimensions)">
48                                                <xsl:variable name="proxyDimensionNames" select="/QUERY_MODULE/DIMENSIONS/DIMENSION/PROXY_DIMENSION_NAME"/>
49
50                                                <xsl:for-each-group select="$selectedDimensions/SELECTED_DIMENSION/NAME" group-by="text()">
51                                                        <xsl:variable name="dimension" select="/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME=current-group()]"/>
52
53                                                        <xsl:choose>
54                                                                <!-- if dim is a proxy and this is the only one then show the selected's proxy title with :all -->
55                                                                <xsl:when test="($proxyDimensionNames = current-group()) and (count($selectedDimensions/SELECTED_DIMENSION) = 1)">
56                                                                        (<xsl:value-of select="$dimension/TITLE"/>: all)
57                                                                </xsl:when>
58
59                                                                <!-- else if not a proxy dim then process CSV - with title if proxy. -->
60                                                                <xsl:when test="not($proxyDimensionNames = current-group())">
61                                                                        (
62                                                                        <xsl:if test="exists($dimension/PROXY_DIMENSION_NAME)"><xsl:value-of select="$dimension/TITLE"/>: </xsl:if>
63                                                                        <xsl:for-each select="$selectedDimensions/SELECTED_DIMENSION[NAME = current-group()]/VALUES/VALUE">
64                                                                                <xsl:if test="position() != 1">, </xsl:if>
65                                                                                <xsl:choose>
66                                                                                        <xsl:when test="exists($dimension/VALUES/VALUE[normalize-space(text()[1]) = current()]/TITLE)">
67                                                                                                <xsl:value-of select="$dimension/VALUES/VALUE[normalize-space(text()[1]) = current()]/TITLE"/>
68                                                                                        </xsl:when>
69                                                                                        <xsl:otherwise>
70                                                                                                <xsl:value-of select="current()"/>
71                                                                                        </xsl:otherwise>
72                                                                                </xsl:choose>
73                                                                        </xsl:for-each>
74                                                                        )
75                                                                </xsl:when>
76                                                        </xsl:choose>
77                                                </xsl:for-each-group>
78                                        </xsl:if>
79
80                                </span>
81                        </xsl:with-param>
82
83                        <xsl:with-param name="content">
84                                <xsl:if test="
85                                        ($section/NAME = 'Geo') and ($Builder.selectionMapName != 'None')
86                                        and not(exists($Page.configuration/CRITERIA/EXCLUDE/MAP_NAMES/ALL_FLAG))
87                                        and not(exists($Page.configuration/CRITERIA/EXCLUDE/MAP_NAMES[MAP_NAME = $Builder.selectionMapName]))
88                                ">
89                                        <xsl:call-template name="SectionSelections.selectionMap">
90                                                <xsl:with-param name="configurationName" select="$Builder.selectionMapName"/>
91                                                <xsl:with-param name="selectionLayerSetLayerKeys" select="$section//SELECTIONS[NAME='GeoProxy']/SELECTION/VALUE"/>
92                                        </xsl:call-template >
93                                </xsl:if>
94                                <xsl:apply-templates select="$section/SELECTIONS" mode="SectionSelections.selections">
95                                        <xsl:with-param name="idSuffix"           select="$sectionNumber"/>
96                                        <xsl:with-param name="containerClass"     select="'Container ExpandableInputList'"/>
97                                        <xsl:with-param name="selectedDimensions" select="$selectedDimensions" tunnel="yes"/>
98                                </xsl:apply-templates>
99
100                                <a href="javascript:jumpToSubmitButton();" style="float: right;">Jump to Submit</a>
101                        </xsl:with-param>
102                </xsl:call-template>
103
104        </xsl:template>
105
106
107
108        <xsl:template match="CRITERIA/SECTIONS/SECTION//SELECTIONS[not(SELECTION_TYPE/HIDDEN)]"
109                mode="SectionSelections.selections"
110                ibis:doc="Top level template that starts the creation of the selection
111                        (question and answers).  If an answer has a sub question then this
112                        whole template is recursively called.  The input elements are kicked
113                        off/built by matching/applying the appropriate SELECTION template.
114                        NOTES:
115                                - This template does NOT process the HIDDEN type SELECTIONS elements. 
116                                - To exclude a question, you need to exclude the question's parent answer.
117                                I did have a test in here about just matching the ANSWER but it really
118                                does belong at the parent answer level.
119                "
120        >
121                <xsl:param name="idSuffix" ibis:doc="Selection/question container's HTML 'div' element's 'id' suffix attribute value."/>
122                <xsl:param name="containerClass"/>
123                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="Section's selected dimensions elements"/>
124
125                <!-- params that are really variables -->
126                <xsl:param name="isDimension"    select="exists(DIMENSION_NAME)"/>
127                <xsl:param name="selectionsName" select="if($isDimension) then DIMENSION_NAME else NAME"/>
128
129                <!-- This variable is kinda different in that it joins 2 different type of structs.
130                        This works as there's a different XSLT MATCH for each structure type.
131                -->
132                <xsl:param name="selection" select="
133                        SELECTION
134                        union
135                        /QUERY_MODULE/DIMENSIONS/DIMENSION[NAME = current()/DIMENSION_NAME]/VALUES/VALUE[ not(exists(NOT_SELECTABLE_FLAG)) ]
136                "/>
137
138                <!-- If dimension and no dimension found then show an error message on page and log -->
139                <xsl:if test="$isDimension and not(exists(/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME = current()/DIMENSION_NAME]))">
140                        <div class="Error">Dimension Name <xsl:value-of select="DIMENSION_NAME"/> NOT found!!!</div>
141                        <xsl:message select="concat('QUERY BUILDER XSLT ERROR: Dimension Name ', DIMENSION_NAME, ' NOT found for config: ', $Page.configuration/NAME)"/>
142                </xsl:if>
143
144                <!-- now setup and show the associated answers for the question.
145                        NOTE: variables are needed because the for loops switch the
146                        context and thus the values would be lost
147                -->
148                <ul id="selectionsContainer.{$idSuffix}">
149                        <xsl:if test="string-length($containerClass) != 0"><xsl:attribute name="class" select="$containerClass"/></xsl:if>
150
151                        <!-- HELP needs to be applied before the content because of the way the CSS float works.-->
152                        <xsl:if test="exists(TITLE) or exists(HELP)">
153                                <li><h3><xsl:apply-templates select="HELP" mode="Help.element"/><xsl:value-of select="TITLE"/></h3></li>
154                        </xsl:if>
155
156                        <xsl:choose>
157                                <xsl:when test="exists(SELECTION_TYPE/LIST)">
158                                        <li>
159                                                <select id="selection.{$idSuffix}.1" name="{$selectionsName}" accesskey="{ACCESS_KEY}" title="{TITLE}">
160                                                        <xsl:if test="string-length(SELECTION_TYPE/LIST/WIDTH) != 0">
161                                                                <xsl:attribute name="style">width:<xsl:value-of select="SELECTION_TYPE/LIST/WIDTH"/>;</xsl:attribute>
162                                                        </xsl:if>
163                                                        <xsl:if test="exists(SELECTION_TYPE/LIST/SIZE)">
164                                                                <xsl:attribute name="size" select="SELECTION_TYPE/LIST/SIZE"/>
165                                                        </xsl:if>
166                                                        <xsl:if test="exists(SELECTION_TYPE/LIST/MULTIPLE)">
167                                                                <xsl:attribute name="multiple" select="'multiple'"/>
168                                                        </xsl:if>
169
170                                                        <xsl:apply-templates select="$selection" mode="SectionSelections.Option">
171                                                                <xsl:with-param name="name" select="$selectionsName"/>
172                                                                <xsl:with-param name="selectedDimensions" select="$selectedDimensions" tunnel="yes"/>
173                                                        </xsl:apply-templates>
174                                                </select>
175                                        </li>
176                                </xsl:when>
177
178                                <xsl:when test="exists(SELECTION_TYPE/MULTIPLE)">
179                                        <xsl:apply-templates select="$selection" mode="SectionSelections.radioCheckboxInput">
180                                                <xsl:with-param name="idSuffix" select="$idSuffix"/>
181                                                <xsl:with-param name="name"     select="$selectionsName"/>
182                                                <xsl:with-param name="type"     select="'checkbox'"/>
183                                                <xsl:with-param name="selectedDimensions" select="$selectedDimensions"/>
184                                        </xsl:apply-templates>
185                                </xsl:when>
186
187                                <xsl:when test="exists(SELECTION_TYPE/SINGLE)">
188                                        <xsl:apply-templates select="$selection" mode="SectionSelections.radioCheckboxInput">
189                                                <xsl:with-param name="idSuffix" select="$idSuffix"/>
190                                                <xsl:with-param name="name"     select="$selectionsName"/>
191                                                <xsl:with-param name="type"     select="'radio'"/>
192                                                <xsl:with-param name="selectedDimensions" select="$selectedDimensions"/>
193                                        </xsl:apply-templates>
194                                </xsl:when>
195
196                                <!-- text input elements.  First process for matching dimension
197                                        value elements.  Then for any SELECTION elements.  Note that
198                                        the SELECTION handling leaves lots of room for improvement.
199                                        It doesn't handle SELECTED_DIMENSION VALUEs well nor does it
200                                        deal with ID attributes when/if a DIMENSION_NAME is also used.
201                                        This code also does not try to do any EXLUSIONs.
202                                -->
203                                <xsl:when test="exists(SELECTION_TYPE/TEXT_INPUT)">
204                                        <xsl:variable name="selections" select="."/>
205
206                                        <!-- take care of associated selectionS dimensions -->
207                                        <xsl:for-each select="/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME=$selections/DIMENSION_NAME]/VALUES/VALUE">
208                                                <xsl:variable name="index" select="position()"/>
209                                                <li>
210                                                        <xsl:call-template name="SectionSelections.textInput">
211                                                                <xsl:with-param name="idSuffix"    select="concat($idSuffix, '.', position())"/>
212                                                                <xsl:with-param name="name"        select="$selectionsName"/>
213                                                                <xsl:with-param name="value"       select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selections/DIMENSION_NAME]/VALUES/VALUE[$index]"/>
214                                                                <xsl:with-param name="description" select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selections/DIMENSION_NAME]/VALUES/VALUE[$index]/DESCRIPTION"/>
215                                                                <xsl:with-param name="title"       select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selections/DIMENSION_NAME]/VALUES/VALUE[$index]/TITLE"/>
216                                                                <xsl:with-param name="size"        select="$selections/SELECTION_TYPE/TEXT_INPUT/SIZE"/>
217                                                                <xsl:with-param name="maxLength"   select="$selections/SELECTION_TYPE/TEXT_INPUT/MAX_LENGTH"/>
218                                                        </xsl:call-template>
219                                                </li>
220                                        </xsl:for-each>
221
222                                        <!-- handle selection elements -->
223                                        <xsl:for-each select="SELECTION">
224                                                <xsl:variable name="inputElementName" select="
225                                                        if(exists(NAME))then NAME
226                                                        else $selectionsName
227                                                "/>
228
229                                                <li>
230                                                        <xsl:apply-templates select="HELP" mode="Help.element"/>
231                                                        <xsl:call-template name="SectionSelections.textInput">
232                                                                <xsl:with-param name="idSuffix"    select="concat($idSuffix, '.', position())"/>
233                                                                <xsl:with-param name="name"        select="$selectionsName"/>
234                                                                <xsl:with-param name="value"       select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selectionsName]/VALUES/VALUE[1]"/>
235                                                                <xsl:with-param name="description" select="DESCRIPTION"/>
236                                                                <xsl:with-param name="title"       select="TITLE"/>
237                                                                <xsl:with-param name="size"        select="$selections/SELECTION_TYPE/TEXT_INPUT/SIZE"/>
238                                                                <xsl:with-param name="maxLength"   select="$selections/SELECTION_TYPE/TEXT_INPUT/MAX_LENGTH"/>
239                                                        </xsl:call-template>
240                                                        <xsl:if test="not(/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME=$inputElementName])">
241                                                                SELECTION element does NOT have a matching DIMENSION!!!
242                                                                <xsl:message select="'XSLT PROBLEM: SectionSelections - match=CRITERIA/SECTIONS/SECTION//SELECTIONS TEXT_INPUT does NOT have a matching DIMENSION.'"/>
243                                                                <xsl:message select="$selections"/>
244                                                        </xsl:if>
245                                                </li>
246                                        </xsl:for-each>
247                                </xsl:when>
248
249                                <xsl:otherwise>
250                                        <li>
251                                                *** UNKNOWN SELECTION TYPE: <xsl:value-of select="SELECTION_TYPE"/> ***
252                                        </li>
253                                </xsl:otherwise>
254                        </xsl:choose>
255                </ul>
256        </xsl:template>
257
258
259
260        <xsl:template 
261                match="CRITERIA/SECTIONS/SECTION//SELECTIONS/SELECTION[not(SELECTIONS/SELECTION_TYPE/HIDDEN)]" 
262                mode="SectionSelections.radioCheckboxInput" 
263                ibis:doc="SELECTION match template with an 'RadioCheckboxInput' mode that
264                        creates an HTML 'input' element with the type either being radio or
265                        checkbox for the standard SELECTION definition.  This template does
266                        NOT handle DIMENSION type selections or the HIDDEN type selections
267                        - see the other MATCHes for this.  This template mainly handles the
268                        intermediary radio/checkbox SELECTION type definitions.  No value
269                        is passed in.
270                "
271        >
272                <xsl:param name="idSuffix"    ibis:doc="Selections container's HTML 'div' element's 'id' suffix attribute value."/>
273                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value.  Either SELECTIONS/NAME or SELECTIONS/DIMENSION_NAME."/>
274                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
275                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
276                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="selected dimension set"/>
277
278                <!-- If the element has a name specified then use that one first.  Else
279                        if a name value was passed in then use that, else if dimension name
280                        then use, if radio group then name is needed to not allow multi
281                        selects.  Otherwise don't name it to the standards so it isn't
282                        submitted back to the app.
283                -->
284                <xsl:param name="inputElementName">
285                        <xsl:choose>
286                                <xsl:when test="string-length(NAME) &gt; 0"><xsl:value-of select="NAME"/></xsl:when>
287                                <xsl:when test="string-length($name) !=  0"><xsl:value-of select="$name"/></xsl:when>
288                                <xsl:when test="$type='radio'">_radioGroup.<xsl:value-of select="$idSuffix"/></xsl:when>
289                        </xsl:choose>
290                </xsl:param>
291                <xsl:param name="value" select="VALUE"/>
292                <xsl:param name="title" select="TITLE"/>
293
294                <!-- if selection is not excluded then add it - otherwise skip -->
295                <xsl:if test="not(exists($Page.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[NAME=$inputElementName and VALUE=$value]))">
296                        <xsl:variable name="childIDSuffix" select="concat($idSuffix, '.', position())"/>
297
298                        <!-- Checkbox/radio is selected when the current SECTION's SELECTED_DIMENSION:
299                                        - matches the input's name and value. 
300                                        - if there are NO selected dimension's for this SECTION
301                                                and this SELECTION has a SELECTED element.
302                                        - if child/sub selections match the selected dimension
303                                                NAME.  Matching on the name and not the value is needed
304                                                for the cases when a "" valued all is selected and the
305                                                group by needs this selection proxy to be set.  This
306                                                could be sticky if the QM developer splits same named
307                                                SELECTION elements across peer sub selections.  If that
308                                                is needed then VALUE must be tested and complex XSLT
309                                                code will need to be created to handle.                                         
310                        <xsl:variable name="checked"
311                                select="
312                                        exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE=$value])
313                                        or
314                                        (not(exists($selectedDimensions/*)) and exists(SELECTED))
315                                        or
316                                        exists(current()//SELECTIONS[
317                                                (NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
318                                                or
319                                                (DIMENSION_NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
320                                        ])
321                                "
322                        />
323                        -->
324                        <xsl:variable name="checked">
325                                <xsl:choose>
326                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE=$value])">checked</xsl:when>
327                                        <xsl:when test="not(exists($selectedDimensions/*)) and exists(SELECTED)">checked</xsl:when>
328                                        <xsl:when test="exists(current()//SELECTIONS[
329                                                (NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
330                                                or
331                                                (DIMENSION_NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
332                                        ])">checked</xsl:when>
333                                        <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
334                                </xsl:choose>
335                        </xsl:variable>
336
337                        <li>
338                                <xsl:apply-templates select="HELP" mode="Help.element"/>
339                                <xsl:call-template name="SectionSelections.radioCheckboxInput">
340                                        <xsl:with-param name="idSuffix"    select="$childIDSuffix"/>
341                                        <xsl:with-param name="name"        select="$inputElementName"/>
342                                        <xsl:with-param name="value"       select="$value"/>
343                                        <xsl:with-param name="title"       select="$title"/>
344                                        <xsl:with-param name="type"        select="$type"/>
345                                        <xsl:with-param name="description" select="$description"/>
346                                        <xsl:with-param name="checked"     select="$checked"/>
347                                        <xsl:with-param name="inputClass"  select="if(exists(SELECTIONS))then 'Control' else ''"/>
348                                </xsl:call-template>
349
350<!-- process any nested question elements and single associated
351        dimension hiddens.  Nested selections are placed ONLY after a
352        radio or checkbox item as these are the only UI type components
353        that allow for sub questions.
354
355        IF there is a sub SELECTIONS then those take precedence.  If
356        no sub SELECTIONS then test for a DIMENSION_NAME with that
357        DIMENSION only having (1) selectable VALUE.  In this latter case
358        insert a nested hidden.
359 -->
360                                 <xsl:apply-templates select="SELECTIONS" mode="SectionSelections.selections">
361                                        <xsl:with-param name="idSuffix"       select="$childIDSuffix"/>
362                                        <xsl:with-param name="containerClass" select="'Container'"/>
363                                </xsl:apply-templates>
364                        </li>
365                </xsl:if>
366
367        </xsl:template>
368
369
370
371        <xsl:template match="CRITERIA/SECTIONS/SECTION//SELECTIONS/SELECTION[exists(SELECTIONS/SELECTION_TYPE/HIDDEN)]" 
372                mode="SectionSelections.radioCheckboxInput" 
373                ibis:doc="SELECTION match template with an 'RadioCheckboxInput' mode that
374                        creates a HTML radio or checkbox 'input' element with associated hidden
375                        input(s).
376
377                        This template handles the hidden values and binary selection types
378                        (which is defined as a selection with a DIMENSION_NAME which points
379                        to a set of VALUEs that only has 1 element that is defined as assoc/
380                        selectable.  When this happens this template produces the standard
381                        selection mechanism with 1:n hidden inputs that are associated with
382                        this checkbox.
383                "
384        >
385                <xsl:param name="idSuffix"    ibis:doc="Selections container's HTML 'div' element's 'id' suffix attribute value."/>
386                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
387                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
388                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
389                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="selected dimension set"/>
390
391                <!-- Determine the name for the checkbox that controls IF the hidden
392                        values should be selected.  If the SELECTION element has a name
393                        specified then use that one first.  Else if a name value was passed
394                        in then use that, if that name is not valid then use a made up name
395                        based on the idSuffix.  This value typically is the associated PROXY
396                        value or dimension name of the real DIMENSION which is typically a
397                        child SELECTIONS.
398                -->
399                <xsl:param name="selectionsName" select="if(exists(SELECTIONS/DIMENSION_NAME)) then SELECTIONS/DIMENSION_NAME else SELECTIONS/NAME"/>
400                <xsl:param name="inputElementName">
401                        <xsl:choose>
402                                <xsl:when test="string-length(NAME)  != 0"><xsl:value-of select="NAME"/></xsl:when>
403                                <xsl:when test="string-length($name) != 0"><xsl:value-of select="$name"/></xsl:when>
404                                <xsl:when test="$type='radio'">_radioGroup.<xsl:value-of select="$idSuffix"/></xsl:when>
405                        </xsl:choose>
406                </xsl:param>
407                <xsl:param name="inputElementValue" select="if(string-length(VALUE) != 0) then VALUE else $selectionsName"/>
408
409                <!-- Get all possible values to be associated with this selection. 
410                        This includes any DIMENSION values that match the DIMENSION_NAME
411                        or SELECTIONS/NAME combined with any SELECTIONS/SELECTION elements.
412                        These value elements are then checked against the excluded values.
413                -->
414                <xsl:if test="not(exists($Page.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[NAME=$selectionsName and VALUE=$inputElementValue]))">
415                        <xsl:variable name="dimension" select="/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME = $selectionsName]"/>
416                        <xsl:variable name="_value" select="
417                                $dimension/VALUES/VALUE[not(exists(NOT_SELECTABLE_FLAG))]
418                                union
419                                SELECTIONS/SELECTION/VALUE
420                        "/>
421                        <xsl:variable name="value" select="$_value[not( $Page.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[(NAME=$selectionsName) and (VALUE=text())] )]"/>
422
423                        <!--
424                                If the SELECTION has a title use that.
425                                Else if child SELECTIONS has a TITLE use that
426                                Else if a dim title use that.
427                                Else build a CSV list based on the associated (dimension/selection)
428                                        dimension title and if none then the actual value.
429                        -->     
430                        <xsl:variable name="title">
431                                <xsl:choose>
432                                        <xsl:when test="string-length(TITLE) != 0"><xsl:value-of select="TITLE"/></xsl:when>
433                                        <xsl:when test="string-length(SELECTIONS/TITLE) != 0"><xsl:value-of select="SELECTIONS/TITLE"/></xsl:when>
434                                        <xsl:when test="string-length($dimension/TITLE) != 0"><xsl:value-of select="$dimension/TITLE"/></xsl:when>
435                                        <xsl:otherwise>
436                                                <xsl:for-each select="$value">
437                                                        <xsl:if test="position() != 1">, </xsl:if>
438<!-- GARTH TODO: normalize-space(text()[1]) -->
439                                                        <xsl:value-of select="
440                                                                if(exists(TITLE)) then TITLE
441                                                                else if(exists($dimension/VALUES/VALUE[VALUE = text()]//TITLE)) then $dimension/VALUES/VALUE[ (text()[1]) = text()]//TITLE[1]
442                                                                else text()
443                                                        "/>
444                                                </xsl:for-each>
445                                        </xsl:otherwise>
446                                </xsl:choose>
447                        </xsl:variable>
448       
449                        <!-- Checkbox/radio is selected when:
450                                a) The input name and value match a selected dimension
451                                b) a sub selection matches a selected dim name and value.
452                                c) no selected dims but the selected flag is set.
453                        <xsl:variable name="selected"
454                                select="
455                                        exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE/text()=$inputElementValue])
456                                        or
457                                        exists($selectedDimensions/SELECTED_DIMENSION[NAME=$selectionsName]/VALUES[VALUE/text()=$value/text()])
458                                        or
459                                        (not(exists($selectedDimensions/*)) and exists(SELECTED))
460                                "
461                        />
462                        -->
463                        <xsl:variable name="checked">
464                                <xsl:choose>
465                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE/text()=$inputElementValue])">checked</xsl:when>
466                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$selectionsName]/VALUES[VALUE/text()=$value/text()])">checked</xsl:when>
467                                        <xsl:when test="not(exists($selectedDimensions/*)) and exists(SELECTED)">checked</xsl:when>
468                                        <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
469                                </xsl:choose>
470                        </xsl:variable>
471
472                        <!-- now that we have all the info, create the actual check/radio -->
473                        <li>
474                                <xsl:variable name="childIDSuffix" select="concat($idSuffix, '.', position())"/>
475                                <xsl:apply-templates select="HELP" mode="Help.element"/>
476                                <xsl:call-template name="SectionSelections.radioCheckboxInput">
477                                        <xsl:with-param name="idSuffix"    select="$childIDSuffix"/>
478                                        <xsl:with-param name="name"        select="$inputElementName"/>
479                                        <xsl:with-param name="value"       select="$inputElementValue"/>
480                                        <xsl:with-param name="title"       select="$title"/>
481                                        <xsl:with-param name="type"        select="$type"/>
482                                        <xsl:with-param name="description" select="$description"/>
483                                        <xsl:with-param name="checked"     select="$checked"/>
484                                </xsl:call-template>
485
486                                <!-- And finally create the hidden inputs -->
487                                <ul id="hiddenSelections.{$childIDSuffix}" class="Container Hide">
488                                        <xsl:for-each select="$value">
489                                                <li>
490                                                        <input id="hiddenInput.{$childIDSuffix}.{position()}" name="{$selectionsName}" type="hidden" value="{text()}"/>
491                                                </li>
492                                        </xsl:for-each>
493                                </ul>
494                        </li>
495                </xsl:if>
496        </xsl:template>
497
498
499
500        <xsl:template match="DIMENSION/VALUES/VALUE" mode="SectionSelections.radioCheckboxInput" 
501                ibis:doc="DIMENSION match template with an 'INPUT' mode that creates an
502                        INPUT HTML element."
503        >
504                <xsl:param name="idSuffix"    ibis:doc="Selections container's HTML 'div' element's 'id' suffix attribute value."/>
505                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
506                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
507                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
508                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="selected dimension set"/>
509
510                <xsl:param name="value" select="normalize-space(text()[1])"/>
511                <xsl:if test="
512                        not($Page.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[NAME=$name and VALUE=$value])
513                        and
514                        ibis:hasAuthority(AUTHORITY)
515                ">
516                        <li>
517                                <xsl:call-template name="SectionSelections.radioCheckboxInput">
518                                        <xsl:with-param name="idSuffix"    select="concat($idSuffix, '.', position())"/>
519                                        <xsl:with-param name="name"        select="$name"/>
520                                        <xsl:with-param name="value"       select="$value"/>
521                                        <xsl:with-param name="title"       select="TITLE"/>
522                                        <xsl:with-param name="type"        select="$type"/>
523                                        <xsl:with-param name="description" select="$description"/>
524                                        <xsl:with-param name="checked"     select="
525                                                if(exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name]/VALUES[VALUE=$value])) then 'checked'
526                                                else ''
527                                        "/>
528                                </xsl:call-template>
529                        </li>
530                </xsl:if>
531        </xsl:template>
532
533
534
535        <xsl:template name="SectionSelections.radioCheckboxInput" ibis:doc="Centralized code that creates the HTML Radio Button/Checkbox INPUT element.">
536                <xsl:param name="idSuffix"/>
537                <xsl:param name="id"          select="concat('selection.', $idSuffix)"/>
538                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
539                <xsl:param name="value"       ibis:doc="Input element's 'value' attribute value"/>
540                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
541                <xsl:param name="checked"     ibis:doc="string value that controls if a radio or checkbox is checked"/>
542                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
543                <xsl:param name="title"       ibis:doc="Title of the associated input element"/>
544                <xsl:param name="inputClass"  ibis:doc="optional input element classname"/>
545                <xsl:param name="labelClass"  ibis:doc="optional label element classname"/>
546
547                <input id="{$id}" name="{$name}" type="{$type}" value="{$value}" title="{if(string-length($description) = 0) then concat('Selection ', $id) else $description}">
548                        <xsl:if test="$checked='checked'"><xsl:attribute name="checked" select="'checked'"/></xsl:if>
549                        <xsl:if test="string-length($inputClass) != 0"><xsl:attribute name="class" select="$inputClass"/></xsl:if>
550                </input>
551                <label for="{$id}">
552                        <xsl:if test="string-length($labelClass) != 0"><xsl:attribute name="class" select="$labelClass"/></xsl:if>
553                        <xsl:value-of select="if(string-length($title) != 0) then $title else $value"/>
554                </label>
555        </xsl:template>
556
557
558
559        <xsl:template name="SectionSelections.textInput" ibis:doc="Centralized code that creates the HTML TEXT INPUT element.">
560                <xsl:param name="idSuffix"/>
561                <xsl:param name="id"          select="concat('selection.', $idSuffix)"/>
562                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
563                <xsl:param name="value"       ibis:doc="Input element's 'value' attribute value"/>
564                <xsl:param name="title"       ibis:doc="Title of the associated input element"/>
565                <xsl:param name="size"        ibis:doc="optional 'size' input element attribute value"/>
566                <xsl:param name="maxLength"   ibis:doc="optional 'maxlength' input element attribute value"/>
567                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
568               
569                <input type="text" id="{$id}" name="{$name}" value="{$value}" class="Text" title="{if(string-length($description) = 0) then concat('Input selection ', $id) else $description}">
570                        <xsl:if test="string-length($maxLength) != 0">
571                                <xsl:attribute name="maxlength" select="$maxLength"/>
572                        </xsl:if>
573                        <xsl:if test="string-length($size) != 0"><xsl:attribute name="size" select="$size"/></xsl:if>
574                </input>
575                <xsl:if test="string-length($title) != 0">
576                        <label for="{$id}"><xsl:value-of select="$title"/></label>
577                </xsl:if>
578                <br/>
579        </xsl:template>
580
581
582
583        <!-- NOTE the text()[1] clause is needed for DIMENSION/VALUE elements because
584                the default text() template match will result in the value and the TITLE
585                element's text being combined!!!  Googled: xslt only get direct text not child text
586                Called dirty XSLT see: http://www.xml.com/pub/a/2002/09/25/qa.html
587        -->
588        <xsl:template match="DIMENSION/VALUES/VALUE" mode="SectionSelections.Option" 
589                ibis:doc="DIMENSION match template with an 'OPTION' mode that creates an
590                        option list HTML 'option' selection element."
591        >
592                <xsl:param name="name"/>
593                <xsl:param name="selectedDimensions" tunnel="yes"/>
594                <xsl:param name="value" select="normalize-space(text()[1])"/>
595<!-- xsl:message select="'MATCH DV - OPTION'"/ -->
596
597                <xsl:if test="
598                        not(exists($Page.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[(NAME=$name) and (VALUE=$value)]))
599                        and
600                        ibis:hasAuthority(AUTHORITY)
601                ">
602                        <option value="{$value}">
603                                <xsl:if test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name]/VALUES[VALUE=$value])">
604                                        <xsl:attribute name="selected" select="'selected'"/>
605                                </xsl:if>
606                                <xsl:value-of select="if(exists(TITLE)) then TITLE else $value"/>
607                        </option>
608                </xsl:if>
609        </xsl:template>
610
611
612        <xsl:template match="CRITERIA/SECTIONS/SECTION//SELECTIONS/SELECTION" mode="SectionSelections.Option" 
613                ibis:doc="SELECTION match template with an 'OPTION' mode that creates an
614                        option list HTML 'option' selection element."
615        >
616                <xsl:param name="name"/>
617                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="."/>
618                <xsl:param name="value" select="normalize-space(VALUE)"/>
619
620                <xsl:if test="not(exists($Page.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[(NAME=$name) and (VALUE=$value)]))">
621
622                        <!-- If not an excluded value then set the option as selected IF:
623                                - selected name matches e.g. selected dim/criteria
624                                        set selected if the value matches.
625                                ***  if here then no selected name matches e.g. no criteria with the same name
626                                - if SELECTED exists
627                                - Prior to 7/4/2012 if the first element and no SELECTEDs for the section then
628                                        auto selected first element.  This was changed to match other selection's
629                                        where everything must be explicitly declared.
630                        -->
631                        <xsl:variable name="selected">
632                                <xsl:choose>
633                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name])">
634                                                <xsl:if test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name]/VALUES[VALUE=$value])">selected</xsl:if>
635                                        </xsl:when> 
636                                        <xsl:when test="exists(SELECTED)">selected</xsl:when> 
637                                </xsl:choose>
638                        </xsl:variable>         
639                        <option value="{$value}">
640                                <xsl:if test="$selected = 'selected'">
641                                        <xsl:attribute name="selected" select="'selected'"/>
642                                </xsl:if>
643                                <xsl:value-of select="if(exists(TITLE)) then TITLE else $value"/>
644                        </option>
645                </xsl:if>
646        </xsl:template>
647
648
649
650        <xsl:template name="SectionSelections.selectionMap">
651                <xsl:param name="configurationName" select="'Selection'"/>
652                <xsl:param name="selectionLayerSetLayerKeys"/>
653
654                <input type="button" value=" Show Selection Map " onclick="showMap();"/>
655
656                <div id="selectionMapDialog" class="DialogContent">
657                        <div class="InnerCanvas">
658                                <xsl:call-template name="DataViz.mapContainer">
659                                        <xsl:with-param name="containerID" select="'map'"/>
660                                </xsl:call-template>
661                        </div>
662                        <button type="button" onclick="L.Control.LayerSets.prototype.mapSelectionsToHTMLSelections($jqueryLeaflet.map, 'GeoProxy', null); selectionMapDialog.close()" title="Sets the selected geographical values.">OK</button>
663                        <button type="button" onclick="selectionMapDialog.close()" title="Closes map selection without updating selections.">Cancel</button>
664                </div>
665
666                <xsl:call-template name="DataViz.selectionMapJavaScript"/>
667                <script type="text/javascript">
668                        var selectionMapDialog;
669                        var $jqueryLeaflet;
670
671                        $(document).ready(function()
672                        {
673                                selectionMapDialog =
674                                        $("#selectionMapDialog").kendoWindow({
675                                                title: "Selection Map"
676                                                ,visible: false
677                                                ,width: "90%"
678                                                ,resizable: true
679                                                ,modal: true
680                                        }).data("kendoWindow");
681
682                                var leafletMapConstructorJSON = $.extend
683                                        (true, {}
684                                                ,<xsl:call-template name="LeafletMap.baseJSON"/>
685                                                ,<xsl:call-template name="LeafletMap.namedConfigurationJSON">
686                                                        <xsl:with-param name="configurationName" select="$configurationName"/>
687                                                </xsl:call-template>
688                                                ,<xsl:call-template name="LeafletMap.requestJSON"> 
689                                                        <xsl:with-param name="mapType" select="'selection'"/>
690                                                        <xsl:with-param name="selectionLayerSetSelectionType" select="'multiple'"/>
691                                                        <xsl:with-param name="selectionLayerSetLayerKeys" select="$selectionLayerSetLayerKeys"/>
692                                        </xsl:call-template>
693                                        );
694                                $jqueryLeaflet = $("#map").leaflet(leafletMapConstructorJSON);
695                        }); //~~~~~~~~~~~~~~~~~~~~ End of Ready Function ~~~~~~~~~~~~~~~~~~~
696
697
698                        // <![CDATA[
699                        function showMap()
700                        {
701                                selectionMapDialog.center().open();
702                                $jqueryLeaflet.map.invalidateSize();
703                                L.Control.LayerSets.prototype.htmlSelectionsToMapSelections("GeoProxy", null, $jqueryLeaflet.map, null);
704                        } //~~~~~~~~~~~~~~~~~~~~ End of Function ~~~~~~~~~~~~~~~~~~~
705
706                        // ]]>
707                </script>
708        </xsl:template> 
709
710</xsl:stylesheet>
711<!-- ============================= End of File ============================= -->
712
Note: See TracBrowser for help on using the repository browser.