source: main/adopters/hi/trunk/src/main/webapps/hhdw-view/xslt/html/query/module/builder/SectionSelections.xslt @ 25339

Last change on this file since 25339 was 25339, checked in by Paul Leo, 2 months ago

Commenting out the code that displays the Show Selection Map

File size: 34.4 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="headingLevel" select="$ContentContainer.headingLevel" 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="$section/NAME"/>
37                        <xsl:with-param name="title"        select="concat('Step ', $sectionNumber, ': ', $section/TITLE)"/>
38                        <xsl:with-param name="headingLevel" select="$headingLevel"/>   
39                        <xsl:with-param name="help"         select="$section/HELP"/>
40
41                        <xsl:with-param name="description"  select="concat('Show/hide selection list control for ', TITLE)"/>
42                        <xsl:with-param name="accesskey"    select="$sectionNumber"/>
43                        <xsl:with-param name="show"         select="$show"/>
44
45                        <xsl:with-param name="subTitleContent">
46                                <span id="selectedValuesContainer.{$sectionNumber}" class="SelectedValues">
47
48                                        <!-- code really isn't needed as init script does this.  Since XSLT code was written before script left for now... -->
49                                        <xsl:if test="exists($selectedDimensions)">
50                                                <xsl:variable name="proxyDimensionNames" select="/QUERY_MODULE/DIMENSIONS/DIMENSION/PROXY_DIMENSION_NAME"/>
51
52                                                <xsl:for-each-group select="$selectedDimensions/SELECTED_DIMENSION/NAME" group-by="text()">
53                                                        <xsl:variable name="dimension" select="/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME=current-group()]"/>
54                                                        <xsl:choose>
55                                                                <!-- if dim is a proxy and this is the only one then show the selected's proxy title with :all -->
56                                                                <xsl:when test="($proxyDimensionNames = current-group()) and (count($selectedDimensions/SELECTED_DIMENSION) = 1)">
57                                                                        (<xsl:value-of select="ibis:getDimensionTitle($dimension/TITLE)"/>: all)
58                                                                </xsl:when>
59
60                                                                <!-- else if not a proxy dim then process CSV - with title if proxy. -->
61                                                                <xsl:when test="not($proxyDimensionNames = current-group())">
62                                                                        (
63                                                                        <xsl:if test="exists($dimension/PROXY_DIMENSION_NAME)"><xsl:value-of select="ibis:getDimensionTitle($dimension/TITLE)"/>: </xsl:if>
64                                                                        <xsl:for-each select="$selectedDimensions/SELECTED_DIMENSION[NAME = current-group()]/VALUES/VALUE">
65                                                                                <xsl:variable name="value" select="ibis:getNormalizedText(.)"/>
66                                                                                <xsl:if test="position() != 1">, </xsl:if>
67                                                                                <xsl:choose>
68                                                                                        <xsl:when test="exists($dimension/VALUES/VALUE[ibis:getNormalizedText(.) = $value]/TITLE)">
69                                                                                                <xsl:value-of select="$dimension/VALUES/VALUE[ibis:getNormalizedText(.) = $value]/TITLE"/>
70                                                                                        </xsl:when>
71                                                                                        <xsl:otherwise>
72                                                                                                <xsl:value-of select="current()"/>
73                                                                                        </xsl:otherwise>
74                                                                                </xsl:choose>
75                                                                        </xsl:for-each>
76                                                                        )
77                                                                </xsl:when>
78                                                        </xsl:choose>
79                                                </xsl:for-each-group>
80                                        </xsl:if>
81
82                                </span>
83                        </xsl:with-param>
84
85                        <xsl:with-param name="content">
86                                <!-- 2022-6-9 Paul Leo commenting out "Show Selection Map, as per K. Benson
87                                <xsl:if test="($section/NAME = 'Geo') and ($Builder.selectionMapName != 'None')">
88                                        <xsl:call-template name="SectionSelections.selectionMap">
89                                                <xsl:with-param name="configurationName" select="$Builder.selectionMapName"/>
90                                                <xsl:with-param name="selectionLayerSetLayerKeys" select="$section//SELECTIONS[NAME='GeoProxy']/SELECTION/VALUE"/>
91                                        </xsl:call-template >
92                                </xsl:if>
93                                -->
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:gotoSubmitButton();" class="JumpTo">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: ', $QueryModule.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:sort select="SORT_ORDER" order="ascending" data-type="number"/>
209                                                <xsl:variable name="index" select="position()"/>
210                                                <li>
211                                                        <xsl:call-template name="SectionSelections.textInput">
212                                                                <xsl:with-param name="idSuffix"    select="concat($idSuffix, '.', position())"/>
213                                                                <xsl:with-param name="name"        select="$selectionsName"/>
214                                                                <xsl:with-param name="value"       select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selections/DIMENSION_NAME]/VALUES/VALUE[$index]"/>
215                                                                <xsl:with-param name="description" select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selections/DIMENSION_NAME]/VALUES/VALUE[$index]/DESCRIPTION"/>
216                                                                <xsl:with-param name="title"       select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selections/DIMENSION_NAME]/VALUES/VALUE[$index]/TITLE"/>
217                                                                <xsl:with-param name="size"        select="$selections/SELECTION_TYPE/TEXT_INPUT/SIZE"/>
218                                                                <xsl:with-param name="maxLength"   select="$selections/SELECTION_TYPE/TEXT_INPUT/MAX_LENGTH"/>
219                                                        </xsl:call-template>
220                                                </li>
221                                        </xsl:for-each>
222
223                                        <!-- handle selection elements -->
224                                        <xsl:for-each select="SELECTION">
225                                                <xsl:variable name="inputElementName" select="
226                                                        if(exists(NAME))then NAME
227                                                        else $selectionsName
228                                                "/>
229
230                                                <li>
231                                                        <xsl:apply-templates select="HELP" mode="Help.element"/>
232                                                        <xsl:call-template name="SectionSelections.textInput">
233                                                                <xsl:with-param name="idSuffix"    select="concat($idSuffix, '.', position())"/>
234                                                                <xsl:with-param name="name"        select="$selectionsName"/>
235                                                                <xsl:with-param name="value"       select="$selectedDimensions/SELECTED_DIMENSION[NAME=$selectionsName]/VALUES/VALUE[1]"/>
236                                                                <xsl:with-param name="description" select="DESCRIPTION"/>
237                                                                <xsl:with-param name="title"       select="TITLE"/>
238                                                                <xsl:with-param name="size"        select="$selections/SELECTION_TYPE/TEXT_INPUT/SIZE"/>
239                                                                <xsl:with-param name="maxLength"   select="$selections/SELECTION_TYPE/TEXT_INPUT/MAX_LENGTH"/>
240                                                        </xsl:call-template>
241                                                        <xsl:if test="not(/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME=$inputElementName])">
242                                                                SELECTION element does NOT have a matching DIMENSION!!!
243                                                                <xsl:message select="'XSLT PROBLEM: SectionSelections - match=CRITERIA/SECTIONS/SECTION//SELECTIONS TEXT_INPUT does NOT have a matching DIMENSION.'"/>
244                                                                <xsl:message select="$selections"/>
245                                                        </xsl:if>
246                                                </li>
247                                        </xsl:for-each>
248                                </xsl:when>
249
250                                <xsl:otherwise>
251                                        <li>
252                                                *** UNKNOWN SELECTION TYPE: <xsl:value-of select="SELECTION_TYPE"/> ***
253                                        </li>
254                                </xsl:otherwise>
255                        </xsl:choose>
256                </ul>
257        </xsl:template>
258
259
260
261        <xsl:template 
262                match="CRITERIA/SECTIONS/SECTION//SELECTIONS/SELECTION[not(SELECTIONS/SELECTION_TYPE/HIDDEN)]" 
263                mode="SectionSelections.radioCheckboxInput" 
264                ibis:doc="SELECTION match template with an 'RadioCheckboxInput' mode that
265                        creates an HTML 'input' element with the type either being radio or
266                        checkbox for the standard SELECTION definition.  This template does
267                        NOT handle DIMENSION type selections or the HIDDEN type selections
268                        - see the other MATCHes for this.  This template mainly handles the
269                        intermediary radio/checkbox SELECTION type definitions.  No value
270                        is passed in.
271                "
272        >
273                <xsl:param name="idSuffix"    ibis:doc="Selections container's HTML 'div' element's 'id' suffix attribute value."/>
274                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value.  Either SELECTIONS/NAME or SELECTIONS/DIMENSION_NAME."/>
275                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
276                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
277                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="selected dimension set"/>
278
279                <!-- If the element has a name specified then use that one first.  Else
280                        if a name value was passed in then use that, else if dimension name
281                        then use, if radio group then name is needed to not allow multi
282                        selects.  Otherwise don't name it to the standards so it isn't
283                        submitted back to the app.
284                -->
285                <xsl:param name="inputElementName">
286                        <xsl:choose>
287                                <xsl:when test="string-length(NAME)  gt 0"><xsl:value-of select="NAME"/></xsl:when>
288                                <xsl:when test="string-length($name) != 0"><xsl:value-of select="$name"/></xsl:when>
289                                <xsl:when test="$type='radio'">_radioGroup.<xsl:value-of select="$idSuffix"/></xsl:when>
290                        </xsl:choose>
291                </xsl:param>
292                <xsl:param name="value" select="VALUE"/>
293                <xsl:param name="title" select="TITLE"/>
294
295<!-- TODO: REMOVE THIS EXCLUDE COMPLEXITY??? PRETTY SURE LOIS NEEDS THIS ???  -->
296                <!-- if selection is not excluded then add it - otherwise skip -->
297                <xsl:if test="not(exists($QueryModule.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[NAME=$inputElementName and VALUE=$value]))">
298                        <xsl:variable name="childIDSuffix" select="concat($idSuffix, '.', position())"/>
299
300                        <!-- Checkbox/radio is selected when the current SECTION's SELECTED_DIMENSION:
301                                        - matches the input's name and value. 
302                                        - if there are NO selected dimension's for this SECTION
303                                                and this SELECTION has a SELECTED element.
304                                        - if child/sub selections match the selected dimension
305                                                NAME.  Matching on the name and not the value is needed
306                                                for the cases when a "" valued all is selected and the
307                                                group by needs this selection proxy to be set.  This
308                                                could be sticky if the QM developer splits same named
309                                                SELECTION elements across peer sub selections.  If that
310                                                is needed then VALUE must be tested and complex XSLT
311                                                code will need to be created to handle.                                         
312                        <xsl:variable name="checked"
313                                select="
314                                        exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE=$value])
315                                        or
316                                        (not(exists($selectedDimensions/*)) and exists(SELECTED))
317                                        or
318                                        exists(current()//SELECTIONS[
319                                                (NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
320                                                or
321                                                (DIMENSION_NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
322                                        ])
323                                "
324                        />
325                        -->
326                        <xsl:variable name="checked">
327                                <xsl:choose>
328                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE=$value])">checked</xsl:when>
329                                        <xsl:when test="not(exists($selectedDimensions/*)) and exists(SELECTED)">checked</xsl:when>
330                                        <xsl:when test="exists(current()//SELECTIONS[
331                                                (NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
332                                                or
333                                                (DIMENSION_NAME=$selectedDimensions/SELECTED_DIMENSION/NAME)
334                                        ])">checked</xsl:when>
335                                        <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
336                                </xsl:choose>
337                        </xsl:variable>
338
339                        <li>
340                                <xsl:apply-templates select="HELP" mode="Help.element"/>
341                                <xsl:call-template name="SectionSelections.radioCheckboxInput">
342                                        <xsl:with-param name="idSuffix"    select="$childIDSuffix"/>
343                                        <xsl:with-param name="name"        select="$inputElementName"/>
344                                        <xsl:with-param name="value"       select="$value"/>
345                                        <xsl:with-param name="title"       select="$title"/>
346                                        <xsl:with-param name="type"        select="$type"/>
347                                        <xsl:with-param name="description" select="$description"/>
348                                        <xsl:with-param name="checked"     select="$checked"/>
349                                        <xsl:with-param name="inputClass"  select="if(exists(SELECTIONS))then 'Control' else ''"/>
350                                </xsl:call-template>
351
352<!-- process any nested question elements and single associated
353        dimension hiddens.  Nested selections are placed ONLY after a
354        radio or checkbox item as these are the only UI type components
355        that allow for sub questions.
356
357        IF there is a sub SELECTIONS then those take precedence.  If
358        no sub SELECTIONS then test for a DIMENSION_NAME with that
359        DIMENSION only having (1) selectable VALUE.  In this latter case
360        insert a nested hidden.
361 -->
362                                 <xsl:apply-templates select="SELECTIONS" mode="SectionSelections.selections">
363                                        <xsl:with-param name="idSuffix"       select="$childIDSuffix"/>
364                                        <xsl:with-param name="containerClass" select="'Container'"/>
365                                </xsl:apply-templates>
366                        </li>
367                </xsl:if>
368
369        </xsl:template>
370
371
372
373        <xsl:template match="CRITERIA/SECTIONS/SECTION//SELECTIONS/SELECTION[exists(SELECTIONS/SELECTION_TYPE/HIDDEN)]" 
374                mode="SectionSelections.radioCheckboxInput" 
375                ibis:doc="SELECTION match template with an 'RadioCheckboxInput' mode that
376                        creates a HTML radio or checkbox 'input' element with associated hidden
377                        input(s).
378
379                        This template handles the hidden values and binary selection types
380                        (which is defined as a selection with a DIMENSION_NAME which points
381                        to a set of VALUEs that only has 1 element that is defined as assoc/
382                        selectable.  When this happens this template produces the standard
383                        selection mechanism with 1:n hidden inputs that are associated with
384                        this checkbox.
385                "
386        >
387                <xsl:param name="idSuffix"    ibis:doc="Selections container's HTML 'div' element's 'id' suffix attribute value."/>
388                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
389                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
390                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
391                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="selected dimension set"/>
392
393                <!-- Determine the name for the checkbox that controls IF the hidden
394                        values should be selected.  If the SELECTION element has a name
395                        specified then use that one first.  Else if a name value was passed
396                        in then use that, if that name is not valid then use a made up name
397                        based on the idSuffix.  This value typically is the associated PROXY
398                        value or dimension name of the real DIMENSION which is typically a
399                        child SELECTIONS.
400                -->
401                <xsl:param name="selectionsName" select="if(exists(SELECTIONS/DIMENSION_NAME)) then SELECTIONS/DIMENSION_NAME else SELECTIONS/NAME"/>
402                <xsl:param name="inputElementName">
403                        <xsl:choose>
404                                <xsl:when test="string-length(NAME)  != 0"><xsl:value-of select="NAME"/></xsl:when>
405                                <xsl:when test="string-length($name) != 0"><xsl:value-of select="$name"/></xsl:when>
406                                <xsl:when test="$type='radio'">_radioGroup.<xsl:value-of select="$idSuffix"/></xsl:when>
407                        </xsl:choose>
408                </xsl:param>
409                <xsl:param name="inputElementValue" select="if(string-length(VALUE) != 0) then VALUE else $selectionsName"/>
410
411                <!-- Get all possible values to be associated with this selection. 
412                        This includes any DIMENSION values that match the DIMENSION_NAME
413                        or SELECTIONS/NAME combined with any SELECTIONS/SELECTION elements.
414                        These value elements are then checked against the excluded values.
415                -->
416                <xsl:if test="not(exists($QueryModule.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[NAME=$selectionsName and VALUE=$inputElementValue]))">
417                        <xsl:variable name="dimension" select="/QUERY_MODULE/DIMENSIONS/DIMENSION[NAME = $selectionsName]"/>
418                        <xsl:variable name="_value" select="
419                                $dimension/VALUES/VALUE[not(exists(NOT_SELECTABLE_FLAG))]
420                                union
421                                SELECTIONS/SELECTION/VALUE
422                        "/>
423<!-- TODO: REMOVE THIS EXCLUDE COMPLEXITY??? PRETTY SURE LOIS NEEDS THIS? -->
424                        <xsl:variable name="value" select="$_value[not( $QueryModule.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[(NAME=$selectionsName) and (VALUE=text())] )]"/>
425
426                        <!--
427                                If the SELECTION has a title use that.
428                                Else if child SELECTIONS has a TITLE use that
429                                Else if a dim title use that.
430                                Else build a CSV list based on the associated (dimension/selection)
431                                        dimension title and if none then the actual value.
432                        -->     
433                        <xsl:variable name="title">
434                                <xsl:choose>
435                                        <xsl:when test="string-length(TITLE) != 0"><xsl:value-of select="TITLE"/></xsl:when>
436                                        <xsl:when test="string-length(SELECTIONS/TITLE) != 0"><xsl:value-of select="SELECTIONS/TITLE"/></xsl:when>
437                                        <xsl:otherwise><xsl:value-of select="ibis:getDimensionTitle($dimension/TITLE)"/></xsl:otherwise>
438                                </xsl:choose>
439                        </xsl:variable>
440       
441                        <!-- Checkbox/radio is selected when:
442                                a) The input name and value match a selected dimension
443                                b) a sub selection matches a selected dim name and value.
444                                c) no selected dims but the selected flag is set.
445                        <xsl:variable name="selected"
446                                select="
447                                        exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE/text()=$inputElementValue])
448                                        or
449                                        exists($selectedDimensions/SELECTED_DIMENSION[NAME=$selectionsName]/VALUES[VALUE/text()=$value/text()])
450                                        or
451                                        (not(exists($selectedDimensions/*)) and exists(SELECTED))
452                                "
453                        />
454                        -->
455                        <xsl:variable name="checked">
456                                <xsl:choose>
457                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$inputElementName]/VALUES[VALUE/text()=$inputElementValue])">checked</xsl:when>
458                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$selectionsName]/VALUES[VALUE/text()=$value/text()])">checked</xsl:when>
459                                        <xsl:when test="not(exists($selectedDimensions/*)) and exists(SELECTED)">checked</xsl:when>
460                                        <xsl:otherwise><xsl:value-of select="''"/></xsl:otherwise>
461                                </xsl:choose>
462                        </xsl:variable>
463
464                        <!-- now that we have all the info, create the actual check/radio -->
465                        <li>
466                                <xsl:variable name="childIDSuffix" select="concat($idSuffix, '.', position())"/>
467                                <xsl:apply-templates select="HELP" mode="Help.element"/>
468                                <xsl:call-template name="SectionSelections.radioCheckboxInput">
469                                        <xsl:with-param name="idSuffix"    select="$childIDSuffix"/>
470                                        <xsl:with-param name="name"        select="$inputElementName"/>
471                                        <xsl:with-param name="value"       select="$inputElementValue"/>
472                                        <xsl:with-param name="title"       select="$title"/>
473                                        <xsl:with-param name="type"        select="$type"/>
474                                        <xsl:with-param name="description" select="$description"/>
475                                        <xsl:with-param name="checked"     select="$checked"/>
476                                </xsl:call-template>
477
478                                <!-- And finally create the hidden inputs -->
479                                <ul id="hiddenSelections.{$childIDSuffix}" class="Container Hide">
480                                        <xsl:for-each select="$value">
481                                                <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
482                                                <li>
483                                                        <input id="hiddenInput.{$childIDSuffix}.{position()}" name="{$selectionsName}" type="hidden" value="{text()}"/>
484                                                </li>
485                                        </xsl:for-each>
486                                </ul>
487                        </li>
488                </xsl:if>
489        </xsl:template>
490
491
492
493        <xsl:template match="DIMENSION/VALUES/VALUE" mode="SectionSelections.radioCheckboxInput" 
494                ibis:doc="DIMENSION match template with an 'INPUT' mode that creates an
495                        INPUT HTML element."
496        >
497                <xsl:param name="idSuffix"    ibis:doc="Selections container's HTML 'div' element's 'id' suffix attribute value."/>
498                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
499                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
500                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
501                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="selected dimension set"/>
502
503                <xsl:param name="value" select="ibis:getNormalizedText(.)"/>
504
505<!-- TODO: REMOVE THIS EXCLUDE COMPLEXITY?  PRETTY SURE LOIS NEEDS THIS??? -->
506                <xsl:if test="
507                        not($QueryModule.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[NAME=$name and VALUE=$value])
508                        and
509                        ibis:hasAuthority(AUTHORITY)
510                ">
511                        <li>
512                                <xsl:call-template name="SectionSelections.radioCheckboxInput">
513                                        <xsl:with-param name="idSuffix"    select="concat($idSuffix, '.', position())"/>
514                                        <xsl:with-param name="name"        select="$name"/>
515                                        <xsl:with-param name="value"       select="$value"/>
516                                        <xsl:with-param name="title"       select="TITLE"/>
517                                        <xsl:with-param name="type"        select="$type"/>
518                                        <xsl:with-param name="description" select="$description"/>
519                                        <xsl:with-param name="checked"     select="
520                                                if(exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name]/VALUES[VALUE=$value])) then 'checked'
521                                                else ''
522                                        "/>
523                                </xsl:call-template>
524                        </li>
525                </xsl:if>
526        </xsl:template>
527
528
529
530        <xsl:template name="SectionSelections.radioCheckboxInput" ibis:doc="Centralized code that creates the HTML Radio Button/Checkbox INPUT element.">
531                <xsl:param name="idSuffix"/>
532                <xsl:param name="id"          select="concat('selection.', $idSuffix)"/>
533                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
534                <xsl:param name="value"       ibis:doc="Input element's 'value' attribute value"/>
535                <xsl:param name="type"        ibis:doc="Type of input element to create.  Valid values are:'radio', 'checkbox', 'text'"/>
536                <xsl:param name="checked"     ibis:doc="string value that controls if a radio or checkbox is checked"/>
537                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
538                <xsl:param name="title"       ibis:doc="Title of the associated input element"/>
539                <xsl:param name="inputClass"  ibis:doc="optional input element classname"/>
540                <xsl:param name="labelClass"  ibis:doc="optional label element classname"/>
541
542                <input id="{$id}" name="{$name}" type="{$type}" value="{$value}" title="{if(string-length($description) = 0) then concat('Selection ', $id) else $description}">
543                        <xsl:if test="$checked='checked'"><xsl:attribute name="checked" select="'checked'"/></xsl:if>
544                        <xsl:if test="string-length($inputClass) != 0"><xsl:attribute name="class" select="$inputClass"/></xsl:if>
545                </input>
546                <label for="{$id}">
547                        <xsl:if test="string-length($labelClass) != 0"><xsl:attribute name="class" select="$labelClass"/></xsl:if>
548                        <xsl:value-of select="if(string-length($title) != 0) then $title else $value"/>
549                </label>
550        </xsl:template>
551
552
553
554        <xsl:template name="SectionSelections.textInput" ibis:doc="Centralized code that creates the HTML TEXT INPUT element.">
555                <xsl:param name="idSuffix"/>
556                <xsl:param name="id"          select="concat('selection.', $idSuffix)"/>
557                <xsl:param name="name"        ibis:doc="Input element's 'name' attribute value"/>
558                <xsl:param name="value"       ibis:doc="Input element's 'value' attribute value"/>
559                <xsl:param name="title"       ibis:doc="Title of the associated input element"/>
560                <xsl:param name="size"        ibis:doc="optional 'size' input element attribute value"/>
561                <xsl:param name="maxLength"   ibis:doc="optional 'maxlength' input element attribute value"/>
562                <xsl:param name="description" ibis:doc="Input element's 'title' attribute value"/>
563               
564                <input type="text" id="{$id}" name="{$name}" value="{$value}" class="Text" title="{if(string-length($description) = 0) then concat('Input selection ', $id) else $description}">
565                        <xsl:if test="string-length($maxLength) != 0">
566                                <xsl:attribute name="maxlength" select="$maxLength"/>
567                        </xsl:if>
568                        <xsl:if test="string-length($size) != 0"><xsl:attribute name="size" select="$size"/></xsl:if>
569                </input>
570                <xsl:if test="string-length($title) != 0">
571                        <label for="{$id}"><xsl:value-of select="$title"/></label>
572                </xsl:if>
573                <br/>
574        </xsl:template>
575
576
577
578        <!-- NOTE the text()[1] clause is needed for DIMENSION/VALUE elements because
579                the default text() template match will result in the value and the TITLE
580                element's text being combined!!!  Googled: xslt only get direct text not child text
581                Called dirty XSLT see: http://www.xml.com/pub/a/2002/09/25/qa.html
582        -->
583        <xsl:template match="DIMENSION/VALUES/VALUE" mode="SectionSelections.Option" 
584                ibis:doc="DIMENSION match template with an 'OPTION' mode that creates an
585                        option list HTML 'option' selection element."
586        >
587                <xsl:param name="name"/>
588                <xsl:param name="selectedDimensions" tunnel="yes"/>
589                <xsl:param name="value" select="ibis:getNormalizedText(.)"/>
590<!-- xsl:message select="'MATCH DV - OPTION'"/ -->
591
592
593<!-- LOIS NEEDS THIS EXCLUDE??? -->
594                <xsl:if test="
595                        not(exists($QueryModule.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[(NAME=$name) and (VALUE=$value)]))
596                        and
597                        ibis:hasAuthority(AUTHORITY)
598                ">
599                        <option value="{$value}">
600                                <xsl:if test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name]/VALUES[VALUE=$value])">
601                                        <xsl:attribute name="selected" select="'selected'"/>
602                                </xsl:if>
603                                <xsl:value-of select="if(exists(TITLE)) then TITLE else $value"/>
604                        </option>
605                </xsl:if>
606        </xsl:template>
607
608
609        <xsl:template match="CRITERIA/SECTIONS/SECTION//SELECTIONS/SELECTION" mode="SectionSelections.Option" 
610                ibis:doc="SELECTION match template with an 'OPTION' mode that creates an
611                        option list HTML 'option' selection element."
612        >
613                <xsl:param name="name"/>
614                <xsl:param name="selectedDimensions" tunnel="yes" ibis:doc="."/>
615                <xsl:param name="value" select="ibis:getNormalizedText(VALUE)"/>
616
617<!-- TODO: REMOVE THIS EXCLUDE COMPLEXITY??  LOIS NEEDS THIS??? -->
618
619                <xsl:if test="not(exists($QueryModule.configuration/CRITERIA/EXCLUDE/SELECTIONS/SELECTION[(NAME=$name) and (VALUE=$value)]))">
620
621                        <!-- If not an excluded value then set the option as selected IF:
622                                - selected name matches e.g. selected dim/criteria
623                                        set selected if the value matches.
624                                ***  if here then no selected name matches e.g. no criteria with the same name
625                                - if SELECTED exists
626                                - Prior to 7/4/2012 if the first element and no SELECTEDs for the section then
627                                        auto selected first element.  This was changed to match other selection's
628                                        where everything must be explicitly declared.
629                        -->
630                        <xsl:variable name="selected">
631                                <xsl:choose>
632                                        <xsl:when test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name])">
633                                                <xsl:if test="exists($selectedDimensions/SELECTED_DIMENSION[NAME=$name]/VALUES[VALUE=$value])">selected</xsl:if>
634                                        </xsl:when> 
635                                        <xsl:when test="exists(SELECTED)">selected</xsl:when> 
636                                </xsl:choose>
637                        </xsl:variable>         
638                        <option value="{$value}">
639                                <xsl:if test="$selected = 'selected'">
640                                        <xsl:attribute name="selected" select="'selected'"/>
641                                </xsl:if>
642                                <xsl:value-of select="if(exists(TITLE)) then TITLE else $value"/>
643                        </option>
644                </xsl:if>
645        </xsl:template>
646
647
648
649        <xsl:template name="SectionSelections.selectionMap">
650                <xsl:param name="configurationName" select="'Selection'"/>
651                <xsl:param name="selectionLayerSetLayerKeys"/>
652
653                <input type="button" value=" Show Selection Map " onclick="showMap();"/>
654
655                <div id="selectionMapDialog" class="DialogWindow">
656                        <div class="Content">
657                                <xsl:call-template name="DataViz.mapContainer">
658                                        <xsl:with-param name="containerID" select="'map'"/>
659                                </xsl:call-template>
660                        </div>
661                        <button type="button" onclick="L.Control.LayerSets.prototype.mapSelectionsToHTMLSelections($jqueryLeaflet.map, 'GeoProxy', null); window.selectionMapDialog.close()" title="Sets the selected geographical values.">OK</button>
662                        <button type="button" onclick="window.selectionMapDialog.close()" title="Closes map selection without updating selections.">Cancel</button>
663                </div>
664
665                <xsl:call-template name="DataViz.selectionMapJavaScript"/>
666                <script type="text/javascript">
667                        var $jqueryLeaflet;
668
669                        $(document).ready(function()
670                        {
671                                window.selectionMapDialog =
672                                        $("#selectionMapDialog").kendoWindow({
673                                                title: "Selection Map"
674                                                ,visible: false
675                                                ,width: "90%"
676                                                ,resizable: true
677                                                ,modal: true
678                                        }).data("kendoWindow");
679
680                                var leafletMapConstructorJSON = $.extend
681                                        (true, {}
682                                                ,<xsl:call-template name="LeafletMap.baseJSON"/>
683                                                ,<xsl:call-template name="LeafletMap.namedConfigurationJSON">
684                                                        <xsl:with-param name="configurationName" select="$configurationName"/>
685                                                </xsl:call-template>
686                                                ,<xsl:call-template name="LeafletMap.requestJSON"> 
687                                                        <xsl:with-param name="mapType" select="'selection'"/>
688                                                        <xsl:with-param name="selectionLayerSetSelectionType" select="'multiple'"/>
689                                                        <xsl:with-param name="selectionLayerSetLayerKeys" select="$selectionLayerSetLayerKeys"/>
690                                        </xsl:call-template>
691                                        );
692                                $jqueryLeaflet = $("#map").leaflet(leafletMapConstructorJSON);
693                        }); //~~~~~~~~~~~~~~~~~~~~ End of Ready Function ~~~~~~~~~~~~~~~~~~~
694
695
696                        // <![CDATA[
697                        function showMap()
698                        {
699                                window.selectionMapDialog.center().open();
700                                $jqueryLeaflet.map.invalidateSize();
701                                L.Control.LayerSets.prototype.htmlSelectionsToMapSelections("GeoProxy", null, $jqueryLeaflet.map, null);
702                        } //~~~~~~~~~~~~~~~~~~~~ End of Function ~~~~~~~~~~~~~~~~~~~
703
704                        // ]]>
705                </script>
706        </xsl:template> 
707
708</xsl:stylesheet>
709<!-- ============================= End of File ============================= -->
710
Note: See TracBrowser for help on using the repository browser.