source: main/trunk/ibisph-view/src/main/webapp/xslt/html/query/module/builder/Builder.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: 20.1 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
7        exclude-result-prefixes="ibis"
8>
9
10        <ibis:doc>
11                <name>html/query/module/builder/Builder</name>
12                <summary>Core query module builder templates</summary>
13                <description>
14                        This file exists simply to lessen the size of the Page.xslt file. 
15                        It simply contains the "Page" type templates that would have been
16                        put into Page.xslt but it became too large.
17                </description>
18        </ibis:doc>
19
20        <!-- ~~~~~~~~~~~~~~~~~~~~~~~ PARAMS / VARIABLES ~~~~~~~~~~~~~~~~~~~~~~~~ -->
21        <xsl:param name="Builder.postURL" 
22                select="concat($ibis.contextPath, 'query/submit/', /QUERY_MODULE/REQUEST/CONFIGURATION_PATH, '.html')"
23                ibis:doc="Mechanism implemented so secure query can have a different result page."
24        />
25
26        <xsl:param name="Builder.groupBySelectionType" select="'group'"
27                ibis:doc="type of group by selection to be used.  valid values are group and table."
28        />
29
30        <xsl:param name="Builder.selectionMapName" select="'Selection'"
31                ibis:doc="selection map config name.  If set to 'None' then global no selection map."
32        />
33
34        <xsl:param name="Builder.usedDimensions" select="/QUERY_MODULE/DIMENSIONS/DIMENSION[
35                                (NAME=/QUERY_MODULE/CRITERIA//SELECTIONS/DIMENSION_NAME) or
36                                (NAME=/QUERY_MODULE/CRITERIA//SELECTIONS/NAME)
37                        ]
38                "
39                ibis:doc=""
40        />
41
42
43        <xsl:param name="categoryGroupByHelpContent">
44                Defines the data's primary grouping dimension.  The
45                primary grouping is required and also controls the
46                ordering of the result's data rows.  In MS-Excel
47                and other graphing packages this is typically referred
48                to as the the "dataset's category".  If viewing in a 2-d
49                table layout then this value/dimension is associated
50                with table's "row" values.  Others will refer to this
51                value as the first "cross by" or the first dimension.
52        </xsl:param>
53
54        <xsl:param name="seriesGroupByHelpContent">
55                Defines the 2nd field (or dimension) to be used to group
56                and aggregate values by.  MS-Excel chart users will
57                commonly refer to this as the dataset's "series"
58                field.  If viewing in a 2-d table layout then this
59                field is associated with data table's value columns.
60                Series group bys are optional.  Maps and some charts,
61                like the "Pie" chart, are currently not programmed to
62                handle datasets that have more than one group by e.g.
63                they only work with the primary category type group
64                by being specified.
65        </xsl:param>
66
67        <xsl:param name="otherGroupByHelpContent">
68                Defines a "fixed" dimension used to group and aggregate
69                the values by.  Fixed group by dimensions are needed
70                for a few select datasets that have at least 2 group
71                by type value fields or dimensions (with one being
72                required for the dataset's result).  If no other group
73                by is selected then this dimension is used as the
74                "series" the group by (as commonly known for MS-Excel
75                and other graphing packages).  If viewing in a 2-d table
76                layout then this dimension is associated with table's
77                "column" organization.  If another group by is specified
78                then this is simply the 3rd dimension group by or cross by.
79        </xsl:param>
80
81        <xsl:param name="chartHelpContent">
82                Defines the optional chart graphic to display.<br/><br/>
83
84                NOTE: Maps and some charts, like the "Pie" chart, are
85                currently not programmed to handle datasets that have
86                more than one group by e.g. they only work with the
87                primary category type group by being specified.  All
88                other charts will only work with a maximum of 2 group
89                bys e.g. if the fixed group by exists then the series
90                group by can NOT be used with charting or maps.
91        </xsl:param>
92
93        <xsl:param name="mapHelpContent">
94                Defines the optional map graphic to display.<br/><br/>
95
96                NOTE: Maps are only available when the category is
97                set to a geographical area and does not have a series
98                defined.
99        </xsl:param>
100
101        <xsl:param name="measureHelpContent">
102                Defines the primary measure value to display in the map and graph.
103        </xsl:param>
104
105       
106
107
108        <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TEMPLATES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
109        <xsl:template name="Builder.initContent" ibis:doc="Stubbed out template that
110                should be provided in a SiteSpecific.xslt.  This template should include
111                all the HTML and javascript for usage agreement, loading of cookie
112                preferences etc."
113        />
114
115
116        <xsl:template match="PARAMETERS/PARAMETER" mode="Builder.hiddenInput"
117                ibis:doc="Match template with a 'HIDDEN_PARAMETER' mode that
118                        creates a 'hidden' 'input' element with the appropriate name and
119                        value attributes."
120        >
121                <input type="hidden" name="{NAME}" value="{VALUE}"/>
122        </xsl:template>
123
124
125
126        <xsl:template name="Builder.displayControl"
127                ibis:doc="Creates the data 'grouping' step HTML selections which are 
128                        the next to the last step (step just before the submit step). 
129                        This includes a 2-d table or 3-d columns that lists the dimensions
130                        and provides some text as to what the measure is and options.   
131                        This also displays the graphic option."
132        >
133                <xsl:variable name="otherParameterGroupByDimensionName" select="/QUERY_MODULE//PARAMETERS/PARAMETER[NAME='_OtherGroupByDimensionName'][1]/VALUE"/>
134
135                <xsl:choose>
136                        <xsl:when test="(string-length($otherParameterGroupByDimensionName) = 0) and ($Builder.groupBySelectionType = 'table')">
137                                <xsl:call-template name="Builder.tableGroupByControl">
138                                </xsl:call-template>
139                        </xsl:when>
140
141                        <!-- standard display control -->
142                        <xsl:otherwise>
143                                <xsl:call-template name="Builder.listGroupByControl">
144                                </xsl:call-template>
145                        </xsl:otherwise>
146                </xsl:choose>
147        </xsl:template>
148
149
150
151        <xsl:template name="Builder.listGroupByControl"
152                ibis:doc="Creates the standard data 'grouping' step HTML selections."
153        >
154                <xsl:param name="otherParameterGroupByDimensionName" select="/QUERY_MODULE//PARAMETERS/PARAMETER[NAME='_OtherGroupByDimensionName'][1]/VALUE"/>
155
156                <table class="Info"
157                        summary="Visual group by selections that has a column group by
158                                selection list and a row group by selection list.
159                        "
160                        caption="Result row and column group by selections."
161                >
162                        <tr>
163                                <th scope="row" title="Primary grouping that specifies the sort order">
164                                        <label for="_CategoryGroupByDimensionName">Display By (category)</label>
165                                        <xsl:call-template name="Help.popup">
166                                                <xsl:with-param name="title">Primary group by field</xsl:with-param>
167                                                <xsl:with-param name="content" select="$categoryGroupByHelpContent"/>
168                                                <xsl:with-param name="additionalClasses" select="'Right'"/>
169                                                <xsl:with-param name="addWikiAttribute" select="false()"/>
170                                        </xsl:call-template>
171                                </th>
172                                <td title="select the dimension to sort the results by">
173                                        <xsl:call-template name="Builder.groupBySelection">
174                                                <xsl:with-param name="controlName"   select="'_CategoryGroupByDimensionName'"/>
175                                                <xsl:with-param name="selectedValue" select="/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/CATEGORY_DIMENSION_NAME"/>
176                                                <xsl:with-param name="noneFlag"      select="'n'"/>
177                                        </xsl:call-template>
178                                </td>
179                        </tr>
180
181                        <xsl:if test="(string-length($otherParameterGroupByDimensionName) != 0)">
182                        <tr>
183                                <th scope="row" title="Fixed, non selectable group by">
184                                        <label for="_OtherGroupByDimensionName">Fixed Group By</label>
185                                        <xsl:call-template name="Help.popup">
186                                                <xsl:with-param name="title">Fixed group by field</xsl:with-param>
187                                                <xsl:with-param name="content" select="$otherGroupByHelpContent"/>
188                                                <xsl:with-param name="additionalClasses" select="'Right'"/>
189                                                <xsl:with-param name="addWikiAttribute" select="false()"/>
190                                        </xsl:call-template>
191                                </th>
192                                <td title="Primary, non selectable dimension to group the results by">
193                                        <xsl:call-template name="Builder.groupBySelection">
194                                                <xsl:with-param name="controlName"   select="'_OtherGroupByDimensionName'"/>
195                                                <xsl:with-param name="selectedValue" select="$otherParameterGroupByDimensionName"/>
196                                                <xsl:with-param name="noneFlag"      select="'n'"/>
197                                        </xsl:call-template>
198                                </td>
199                        </tr>
200                        </xsl:if>
201
202                        <tr>
203                                <th scope="row" title="Group by">
204                                        <label for="_SeriesGroupByDimensionName">Group By (series)</label>
205                                        <xsl:call-template name="Help.popup">
206                                                <xsl:with-param name="title">Optional secondary group by field</xsl:with-param>
207                                                <xsl:with-param name="content" select="$seriesGroupByHelpContent"/>
208                                                <xsl:with-param name="additionalClasses" select="'Right'"/>
209                                                <xsl:with-param name="addWikiAttribute" select="false()"/>
210                                </xsl:call-template>
211                                </th>
212                                <td title="select the dimension to group the results by">
213                                        <xsl:call-template name="Builder.groupBySelection">
214                                                <xsl:with-param name="controlName"   select="'_SeriesGroupByDimensionName'"/>
215                                                <xsl:with-param name="selectedValue" select="/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/SERIES_DIMENSION_NAME"/>
216                                                <xsl:with-param name="noneFlag"      select="'y'"/>
217                                        </xsl:call-template>
218                                </td>
219                        </tr>
220
221                        <xsl:if test="0 != count($Page.charts)">
222                        <tr>
223                                <th scope="row" title="Available charts">
224                                        <label for="chartName">Chart</label>
225                                        <xsl:call-template name="Help.popup">
226                                                <xsl:with-param name="title">Optional chart graph</xsl:with-param>
227                                                <xsl:with-param name="content" select="$chartHelpContent"/>
228                                                <xsl:with-param name="additionalClasses" select="'Right'"/>
229                                                <xsl:with-param name="addWikiAttribute" select="false()"/>
230                                </xsl:call-template>
231                                </th>
232                                <td title="select the chart visualization to display the results with">
233                                        <xsl:call-template name="Builder.chartSelections"/>
234                                </td>
235                        </tr>
236                        </xsl:if>
237
238                        <xsl:if test="0 != count($Page.maps)">
239                        <tr>
240                                <th scope="row" title="Available maps">
241                                        <label for="mapName">Map</label>
242                                        <xsl:call-template name="Help.popup">
243                                                <xsl:with-param name="title">Optional Map Visualization</xsl:with-param>
244                                                <xsl:with-param name="content" select="$mapHelpContent"/>
245                                                <xsl:with-param name="additionalClasses" select="'Right'"/>
246                                                <xsl:with-param name="addWikiAttribute" select="false()"/>
247                                </xsl:call-template>
248                                </th>
249                                <td title="select the map visualization to display the results with">
250                                        <xsl:call-template name="Builder.mapSelections"/>
251                                </td>
252                        </tr>
253                        </xsl:if>
254
255                </table>
256        </xsl:template>
257
258
259        <xsl:template name="Builder.tableGroupByControl"
260                ibis:doc="Creates the data 'grouping' step HTML selections which are 
261                        the next to the last step (step just before the submit step). 
262                        This includes a 2-d table or 3-d columns that lists the dimensions
263                        and provides some text as to what the measure is and options.   
264                        This also displays the graphic option.
265
266                        NOTE: thead, tfoot, tbody intentionally left out so tablesorter
267                        would not be implemented on this table.
268                "
269        >
270                <h3 style="padding-bottom:5px;">
271                        <xsl:call-template name="Help.popup">
272                                <xsl:with-param name="title">How to Tabulate and Display Data Values</xsl:with-param>
273                                <xsl:with-param name="content">
274                                        Use the drop down list options below to specify how to display
275                                        the numerical data values on the query results page.  If both
276                                        a Row Values Grouped By and a Column Values Grouped By are
277                                        specified, then a two dimensional table will be presented in
278                                        the query results.  Regardless of what is selected, a standard
279                                        data list table will be presented as well as meta data that
280                                        describes the data sources, data issues, and any data notes.
281                                        Select the optional Chart Type to be shown on the result page.
282                                </xsl:with-param>
283                                <xsl:with-param name="additionalClasses" select="'Right'"/>
284                        </xsl:call-template>
285                        Specify how to display the numerical data values.
286                </h3>
287
288                <table class="Info" summary="Visual group by selections that has a column
289                        group by selection list and a row group by selection list."
290                        caption="Result row and column group by selections."
291                >
292                        <tr>
293                                <th scope="col" title="blank formatting"></th>
294                                <th scope="col" title="Sets a second dimension for the data values to be summed/grouped/tabulated by and specifies that a 2-d type table be produced on the output page.">
295                                        <label for="_SeriesGroupByDimensionName">Column Values Grouped By:</label><br/>
296                                        <xsl:call-template name="Builder.groupBySelection">
297                                                <xsl:with-param name="controlName"   select="'_SeriesGroupByDimensionName'"/>
298                                                <xsl:with-param name="selectedValue" select="/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/SERIES_DIMENSION_NAME"/>
299                                                <xsl:with-param name="noneFlag"      select="'y'"/>
300                                        </xsl:call-template>
301                                </th>
302                        </tr>
303
304                        <tr><th scope="col" title="blank row for formatting">&#160;</th><td></td></tr>
305                        <tr>
306                                <th scope="col" title="How the row data will be grouped/summed/tabulated by and displayed by.">
307                                        <label for="_CategoryGroupByDimensionName">Row Values Grouped By:</label><br/>
308                                        <xsl:call-template name="Builder.groupBySelection">
309                                                <xsl:with-param name="controlName"   select="'_CategoryGroupByDimensionName'"/>
310                                                <xsl:with-param name="selectedValue" select="/QUERY_MODULE/REQUEST/SELECTED_GROUP_BY/CATEGORY_DIMENSION_NAME"/>
311                                                <xsl:with-param name="noneFlag"      select="'n'"/>
312                                        </xsl:call-template>
313                                </th>
314                                <td style="     vertical-align: middle; text-align: center" title="{$Page.configuration/DESCRIPTION} (these values will be grouped/tabulated according to the selected Row and Column value selections)">
315                                        <xsl:value-of select="$Page.configuration/TITLE"/> data values
316                                </td>
317                        </tr>
318                        <tr><th scope="row" title="blank row for formatting">&#160;</th><td></td></tr>
319                </table><br/>
320
321                <xsl:if test="not(exists($Page.configuration/CRITERIA/EXCLUDE/CHART_NAMES/ALL_FLAG))">
322                        <label for="chartName"><h3>Chart Type:</h3></label>
323                        <xsl:call-template name="Builder.chartSelections"/>
324                        <br/>
325                </xsl:if>
326        </xsl:template>
327
328
329        <xsl:template name="Builder.groupBySelection" ibis:doc="internal template to 
330                localize handling of select lists and parameter title overrides."
331        >
332                <xsl:param name="controlName"   ibis:doc="name of the HTML select element"/>
333                <xsl:param name="selectedValue" ibis:doc="default value to be selected in the list.  If noneFlag and nothing specified then none is the default else first item in list"/>
334                <xsl:param name="noneFlag"      ibis:doc="optional parameter that if x,y,t then a None value will be added to the list."/>
335<!-- GARTH TODO: remove
336<xsl:message select="concat('~~~~~~Builder.usedDimensions, count:', count($Builder.usedDimensions))"/>
337<xsl:message select="$Builder.usedDimensions/./NAME"/>
338<xsl:message select="$Builder.usedDimensions/.[not(exists(PROXY_DIMENSION_NAME)) ]/NAME"/>
339<xsl:message select="concat($Builder.usedDimensions/DIMENSION/NAME, ' - ', $Builder.usedDimensions/DIMENSION/GEOGRAPHY_FLAG)"/>
340-->
341
342                <xsl:variable name="groupByDimensionParameter" select="/QUERY_MODULE//PARAMETERS/PARAMETER[NAME=$controlName][1]"/>
343                <select name="{$controlName}" id="{$controlName}" onchange="displayOptionsChangeHandler()" title="Group results by {$controlName}">
344                        <xsl:choose>
345                                <xsl:when test="0 != string-length($groupByDimensionParameter/NAME)">
346                                        <xsl:variable name="groupByDimension" select="$Builder.usedDimensions/.[NAME=$groupByDimensionParameter/VALUE]"/>
347                                        <option value="{$groupByDimension/NAME}" selected="selected">
348                                                <xsl:value-of select="if(string-length($groupByDimension/TITLE) != 0)then $groupByDimension/TITLE else 'N/A'"/>
349                                        </option>
350                                </xsl:when>
351
352                                <xsl:otherwise>
353                                        <xsl:if test="ibis:isFirstLetter_T_or_Y_or_X($noneFlag)">
354                                                <option value="">
355                                                        <xsl:if test="string-length($selectedValue) = 0">
356                                                                <xsl:attribute name="selected" select="'selected'"/>
357                                                        </xsl:if>
358                                                        None
359                                                </option>
360                                        </xsl:if>
361                                        <xsl:apply-templates select="$Builder.usedDimensions/.[not(exists(PROXY_DIMENSION_NAME)) ]" mode="Builder.groupByOption">
362                                                <xsl:with-param name="selectedValue" select="$selectedValue"/>
363                                        </xsl:apply-templates>
364                                </xsl:otherwise>
365                        </xsl:choose>
366                </select>
367        </xsl:template>
368
369        <xsl:template match="DIMENSION" mode="Builder.groupByOption"
370                ibis:doc="DIMENSION match template with an 'OPTION' mode that creates an
371                        option list HTML 'option' selection element for the display step."
372        >
373                <xsl:param name="selectedValue" ibis:doc="default value to be selected in the list."/>
374
375                <option value="{NAME}">
376                        <xsl:if test="NAME=$selectedValue"><xsl:attribute name="selected" select="'selected'"/></xsl:if>
377                        <xsl:if test="0 != string-length(GEOGRAPHY_FLAG)"><xsl:attribute name="GeographyFlag" select="'true'"/></xsl:if>
378                        <xsl:value-of select="TITLE"/>
379                </option>
380        </xsl:template>
381
382
383        <xsl:template name="Builder.chartSelections"
384                ibis:doc="Provides the chart graph selection options.  This allows other
385                        adopters the ability to put in their own controls into the SiteSpecific
386                        XSLT for consistant look and feel.  The Java controller handles setting
387                        the RESULT/CHART_NAME if NO_GRAPHIC_SELECTION_FLAG is present and a
388                        DEFAULT_CHART_NAME is specified.
389                "
390        >
391                <xsl:param name="chartName" select="/QUERY_MODULE/REQUEST/CHART_NAME"/>
392                <select name="_ChartName" id="chartName" onchange="displayOptionsChangeHandler()" title="Selects the chart to be displayed on the results page.">
393                        <xsl:for-each select="$Page.charts">
394                                <xsl:sort select="SORT_ODRER" order="ascending" data-type="number"/>
395                                <option value="{NAME}">
396                                        <xsl:if test="NAME=$chartName">
397                                                <xsl:attribute name="selected" select="'selected'"/>
398                                        </xsl:if>
399                                        <xsl:value-of select="TITLE"/>
400                                </option>
401                        </xsl:for-each>
402                </select>
403        </xsl:template>
404
405
406        <xsl:template name="Builder.mapSelections"
407                ibis:doc="Provides the map graph selection options.  This allows other
408                        adopters the ability to put in their own controls into the SiteSpecific
409                        XSLT for consistant look and feel.  The Java controller handles setting
410                        the RESULT/MAP_NAME if NO_GRAPHIC_SELECTION_FLAG is present and a
411                        DEFAULT_MAP_NAME is specified.
412                "
413        >
414                <xsl:param name="mapName" select="/QUERY_MODULE/REQUEST/MAP_NAME"/>
415                <xsl:param name="show"    select="false()"/>
416<!-- GARTH TODO: remove
417<xsl:message select="$Page.configuration/CRITERIA/EXCLUDE/MAP_NAMES/MAP_NAME"/>
418<xsl:message select="$Page.maps/MAP[not(exists(NAME = $Page.configuration/CRITERIA/EXCLUDE/MAP_NAMES/MAP_NAME))]"/>
419<xsl:message select="$Page.configuration"/>
420-->
421
422                <select name="_MapName" id="mapName" onchange="displayOptionsChangeHandler()" title="Selects the map to be displayed on the results page.">
423                        <xsl:for-each select="$Page.maps">
424                                <xsl:sort select="SORT_ODRER" order="ascending" data-type="number"/>
425                                <option value="{NAME}">
426                                        <xsl:if test="NAME=$mapName">
427                                                <xsl:attribute name="selected" select="'selected'"/>
428                                        </xsl:if>
429                                        <xsl:value-of select="TITLE"/>
430                                </option>
431                        </xsl:for-each>
432                </select>
433        </xsl:template>
434
435        <xsl:template name="Builder.submitControl"
436                ibis:doc="Provides the submit query control buttons.  This allows other
437                        adopters the ability to put in their own controls into the SiteSpecific
438                        XSLT for consistent look and feel."
439        >
440                <button type="button" accesskey="S" id="submitButton" title="Submit the query and display the result page">
441                        <xsl:attribute name="onclick" select="
442                                if(exists($Page.configuration/CRITERIA/SUBMIT_JAVASCRIPT_FUNCTION_CALL))
443                                        then $Page.configuration/CRITERIA/SUBMIT_JAVASCRIPT_FUNCTION_CALL
444                                        else 'submitQuery()'
445                                "/>
446                        Submit
447                        <xsl:call-template name="Help.content">
448                                <xsl:with-param name="help">
449                                        <TEXT>
450                                                This submits your query definition.  Once submitted
451                                                the data will be processed and the result page will
452                                                be presented.  From the result page you can return
453                                                to this page and refineany data filtering criteria
454                                                and data grouping selections.
455                                        </TEXT>
456                                </xsl:with-param>
457                        </xsl:call-template>
458                </button>
459                <button type="button" accesskey="R" onclick="resetForm()" title="Reset the page to its original state">Reset</button>
460        </xsl:template>
461
462</xsl:stylesheet>
463<!-- ============================= End of File ============================= -->
Note: See TracBrowser for help on using the repository browser.