Changeset 13513 in main


Ignore:
Timestamp:
04/03/17 23:35:37 (3 years ago)
Author:
Garth Braithwaite
Message:

view - More xslt updates kendo working but needs polish.

Location:
trunk/ibisph-view/src/main/webapp/xslt/html
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/ibisph-view/src/main/webapp/xslt/html/Kendo.xslt

    r13501 r13513  
    3939                </xsl:choose>
    4040        </xsl:param>
    41 
    4241        <xsl:param name="Kendo.noChartName" select="'None'" ibis:doc="No Chart chart name."/>
    4342        <xsl:param name="Kendo.showChart" select="$Kendo.noChartName != $Kendo.chartName"/>
     
    8079
    8180        <xsl:param name="Kendo.gridFooterRowTitle" select="'Overall'"/>
    82 
    83 
    8481        <xsl:param name="Kendo.missingValueReplacementValue" select="'null'"/>
    8582        <!-- the .## makes decimal places optional - if none then no dec - if up to 2 then you get 1 or 2. -->
     
    103100        <xsl:template name="Kendo.dataSourceConstructorJSON"
    104101                ibis:doc="
    105                         Template that produces Kendo Datasource javascript JSON options.
     102                        Template that produces a Kendo Datasource javascript JSON structure.
     103                        The datasource consists of defining the data array's 'fields' along
     104                        with specifying the fields to be used for grouping and sorting.  This
     105                        XSLT code uses dimension and measure NAME type elements as the basis
     106                        to generate the associated field names which include actual dimension
     107                        name/value, title, sort order values, and in the case of the measures
     108                        numeric value, formatted value, LCL, UCL, numer, denom, label, and
     109                        note fields.
    106110
    107111                        Server side stuff needs to be turned off (which is the default).
     
    122126                "
    123127        >
    124                 <xsl:param name="javascriptDataStructureVariableName" select="'dataStructure'"/>
    125                 <xsl:param name="dimensions"         
    126                         ibis:doc="Code built DIMENSIONS/DIMENSION structure that includes the
    127                                 standard name e.g. series/category/constant and the title which
    128                                 is used for the grid.  This title should be proxy dimension's
    129                                 title -OR- maybe it's the dimension's title if only 1 and a generic
    130                                 title if more than 1 dimension for a given series/cat.
     128                <xsl:param name="javascriptRecordArrayVariableName" select="'records'"/>
     129
     130                <xsl:param name="recordArrayDimensionFieldNames"         
     131                        ibis:doc="Kendo data records JSON dimension field names used.  The
     132                                NAME type elements can be either actual IBIS dimension NAMEs or
     133                                a generic SERIES, CATEGORY, CONSTANT.  It does not matter to the
     134                                Kendo code - it just needs to match the actual data array that is
     135                                built by the XSLT and passed into the Kendo script.  Note that
     136                                the field name is the base name.  The array should include the
     137                                xxx'Title', xxx'SortOrder' fields that were built when creating
     138                                the array.  For v3.0+ IP data arry these names are generic to
     139                                handle multiple dimensions for a given series or category.  Query
     140                                and IP v2.3 the names were the actual IBIS dimension name to make
     141                                connecting the dots 100%. 
    131142                        "
     143                >
     144                        <NAME>SERIES</NAME>
     145                        <NAME>CATEGORY</NAME>
     146                </xsl:param>
     147                <xsl:param name="recordArrayMeasureFieldNames"
     148                        ibis:doc="Analogous to the dimension names - but represent the data
     149                                array's measure field(s)."
    132150                />
    133                 <xsl:param name="measures"            ibis:doc="MEASURES/MEASURE structure"/>
    134                 <xsl:param name="groupDimensionNames"
    135                         ibis:doc="Generic names which are the base prefix of the field name
    136                                 to be used for the data source group by.  The actual group by
    137                                 field(s) use the node's text then adds a 'Title' suffix to form
    138                                 the actual fieldname to group by.  Note that the 'Title' field
    139                                 is used and not the actual value.  Reason for this is because the
    140                                 chart shows the grouped value used in the legend.
     151                <xsl:param name="kendoDatasourceGroupByFieldNames" select="'SERIESSortOrder'"
     152                        ibis:doc="Actual, complete group by Kendo datasource record field
     153                                name to be used for data groupings/group bys.  The actual group
     154                                by field name(s) must be comlete e.g. xxx'Title' or xxx'SortOrder'. 
     155                                This param typically only has the one SERIES dimension but is
     156                                plural to handle three dimension instances.
     157
     158                                Note that the dimension's 'Title' field can used and not the actual
     159                                value.  Reason for this is because the chart shows the grouped
     160                                value used in the legend.
    141161
    142162                                Version 3+ went back to using standard series/category/constant
     
    153173                                providing the 'Title' suffix to create the actual field name to
    154174                                group by.
    155 
    156                                 Note this parameter is NOT the actual, complete field name (typically
    157                                 the dimension value title field and not simply the dimension name).
    158                                 The title field is specified which the chart's axis values are
    159                                 based on. Groups by fiels represent the chart series (and other
    160                                 or 3rd dim if more than 1 element).
    161175                        "
    162176                />
    163                 <xsl:param name="sortOrderFieldNames"
    164                         ibis:doc="Optional actual Kendo datasource field name(s) to sort by. 
    165                                 Can be SORT_ORDER field or a group by etc.  This defines the
    166                                 grid's/chart's default sorting.  If the 3 way sorting is enabled
    167                                 then user can sort asc/dsc on any column with the 3rd click of
    168                                 the grid's column reverting to this default sorting field.  Like
    169                                 the groupby field name(s) this value is more robust and specific.
     177                <xsl:param name="kendoDatasourceSortOrderFieldNames"
     178                        ibis:doc="Optional, complete/actual Kendo datasource field name(s) to
     179                                sort by.  Can be a xxxSortOrder field or a dimension group by etc. 
     180                                This is used by/defines the grid's/chart's default sorting.  If
     181                                the 3 way Kendo sorting is enabled then the user can sort asc/dsc
     182                                on any column with the 3rd click cycling the grid's column sorting
     183                                to the initial order e.g. reverting to the default sorting field. 
     184                                Like the grouping field name(s) this value must be complete/specific.
    170185                        "
    171186                />
    172 <!--
    173 <xsl:message select="$dimensions//DIMENSION"/>
    174 -->
     187
    175188<xsl:text>{</xsl:text>
    176         data:  <xsl:value-of select="$javascriptDataStructureVariableName"/>
     189        data:  <xsl:value-of select="$javascriptRecordArrayVariableName"/>
    177190        ,schema:
    178191        {
     
    183196                        {
    184197                                rowID:         { type: "number", editable: false }
    185                 <xsl:for-each select="$dimensions//DIMENSION[string-length(NAME) != 0]">
    186                                 ,"<xsl:value-of select="NAME"/>":          { type: "string" }
    187                                 ,"<xsl:value-of select="NAME"/>Title":     { type: "string" }
    188                                 ,"<xsl:value-of select="NAME"/>SortOrder": { type: "number" }
     198                <xsl:for-each select="$recordArrayDimensionFieldNames[string-length(.) != 0]">
     199                                ,"<xsl:value-of select="."/>":          { type: "string" }
     200                                ,"<xsl:value-of select="."/>Title":     { type: "string" }
     201                                ,"<xsl:value-of select="."/>SortOrder": { type: "number" }
    189202                </xsl:for-each>
    190                 <xsl:for-each select="$measures//MEASURE">
    191                                 ,"<xsl:value-of select="NAME"/>":           { type: "number" },  "<xsl:value-of select="NAME"/>Title":           { type: "string" }
    192                                 ,"<xsl:value-of select="NAME"/>LowerLimit": { type: "number" },  "<xsl:value-of select="NAME"/>LowerLimitTitle": { type: "string" }
    193                                 ,"<xsl:value-of select="NAME"/>UpperLimit": { type: "number" },  "<xsl:value-of select="NAME"/>UpperLimitTitle": { type: "string" }
    194                                 ,"<xsl:value-of select="NAME"/>Numerator":  { type: "number" },  "<xsl:value-of select="NAME"/>NumeratorTitle":  { type: "string" }
    195                                 ,"<xsl:value-of select="NAME"/>Denominator":{ type: "number" },  "<xsl:value-of select="NAME"/>DenominatorTitle":{ type: "string" }
    196                                 ,"<xsl:value-of select="NAME"/>Label":      { type: "string" },  "<xsl:value-of select="NAME"/>Note":            { type: "string" }
     203                <xsl:for-each select="$recordArrayMeasureFieldNames[string-length(.) != 0]">
     204                                ,"<xsl:value-of select="."/>":           { type: "number" },  "<xsl:value-of select="."/>Title":           { type: "string" }
     205                                ,"<xsl:value-of select="."/>LowerLimit": { type: "number" },  "<xsl:value-of select="."/>LowerLimitTitle": { type: "string" }
     206                                ,"<xsl:value-of select="."/>UpperLimit": { type: "number" },  "<xsl:value-of select="."/>UpperLimitTitle": { type: "string" }
     207                                ,"<xsl:value-of select="."/>Numerator":  { type: "number" },  "<xsl:value-of select="."/>NumeratorTitle":  { type: "string" }
     208                                ,"<xsl:value-of select="."/>Denominator":{ type: "number" },  "<xsl:value-of select="."/>DenominatorTitle":{ type: "string" }
     209                                ,"<xsl:value-of select="."/>Label":      { type: "string" },  "<xsl:value-of select="."/>Note":            { type: "string" }
    197210                </xsl:for-each>
    198211                        }
    199212                }           
    200213        }
    201         <xsl:if test="count($groupDimensionNames[string-length(.) != 0]) != 0">
     214        <xsl:if test="count($kendoDatasourceGroupByFieldNames[string-length(.) != 0]) != 0">
    202215        ,group:
    203216        [
    204                 <xsl:for-each select="$groupDimensionNames[string-length(.) != 0]">
    205 <!-- was SortOrder ?????????? -->
    206 <xsl:if test="position() != 1">,</xsl:if>{field: "<xsl:value-of select="."/>Title" }
     217                <xsl:for-each select="$kendoDatasourceGroupByFieldNames[string-length(.) != 0]">
     218                        <xsl:if test="position() != 1">,</xsl:if>{field: "<xsl:value-of select="."/>"}
    207219                </xsl:for-each>
    208220        ]
     
    210222        ,sort:
    211223        [
    212                 <xsl:for-each select="$sortOrderFieldNames[string-length(.) != 0]">
     224                <xsl:for-each select="$kendoDatasourceSortOrderFieldNames[string-length(.) != 0]">
    213225                        <xsl:if test="position() != 1">,</xsl:if>{field: "<xsl:value-of select="."/>", dir: "asc"}
    214226                </xsl:for-each>
     
    228240        </xsl:template>
    229241
    230 
    231242        <xsl:template name="Kendo.gridsJSON" ibis:doc="Returns the base/core grid JSON options from the XML config file.">
    232243                <xsl:copy-of select="$Kendo.grids/JSON_OPTIONS/node()"/>
     
    237248                <xsl:copy-of select="$Kendo.grids/GRID[NAME=$gridConfigurationName]/JSON_OPTIONS/node()"/>
    238249        </xsl:template>
     250
     251
     252
     253
     254
     255
     256
     257
     258
     259
     260
    239261        <xsl:template name="Kendo.requestGridJSON"
    240262                ibis:doc="Builds the request specific Grid JSON options.  This is mainly
     
    242264                        comparison func. and any css attributes for formatting.
    243265
    244                         field is the datasource field name
    245                         title is the grid's column title
    246                         class are extra css class atttributes for the cell
     266                        NOTES: Field names are datasource field names.  In some instances
     267                        field like v3 IPVs dimension names are series and category.  For QMs
     268                        names are actual dimension names.  For measures they are the actual
     269                        measure name.
    247270
    248271                        See SVN 7526, 2/2/2015 for template and formatting test code.
     
    250273        >
    251274                <xsl:param name="javascriptDataSourceVariableName" select="'sharedDataSource'"/>
    252                 <xsl:param name="dimensions"    ibis:doc="DIMENSIONS/DIMENSION struct that uses NAME and TITLE"/>
    253                 <xsl:param name="seriesDimensionName" ibis:doc="First column and needed to turn off grouping column stuff "/>
     275                <xsl:param name="recordArrayDimensions"
     276                        ibis:doc="Data record's Kendo data source DIMENSIONS/DIMENSIONs"
     277                />
    254278                <xsl:param name="measures"              ibis:doc="actual measures."/>
    255                 <xsl:param name="gridMeasures"  ibis:doc="measure columns for the grid to display."/>
     279                <xsl:param name="gridMeasures"  ibis:doc="grid's measure column struct - titles."/>
    256280                <xsl:param name="sortOrderFieldName"/>
    257281                <xsl:param name="showFooterRow" select="count($gridMeasures/GRID_MEASURE/COLUMNS/COLUMN[string-length(TOTAL_VALUE) != 0]) != 0"/>
    258282
    259                 <xsl:variable name="seriesDimension" select="$dimensions/DIMENSION[NAME = $seriesDimensionName]"/>
     283                <xsl:param name="seriesDimension" select="$recordArrayDimensions/DIMENSION[USAGE='series']"/>
     284
     285<xsl:message select="$recordArrayDimensions/DIMENSION"/>
     286<!--
     287<xsl:message select="$recordArrayDimensions/DIMENSION[not(USAGE = 'series')]"/>
     288<xsl:message select="$recordArrayDimensions"/>
     289<xsl:message select="'measures'"/>
     290<xsl:message select="$measures"/>
     291<xsl:message select="'grid measures'"/>
     292<xsl:message select="$gridMeasures"/>
     293-->
     294
    260295<xsl:text>{</xsl:text>
    261296    dataSource: <xsl:value-of select="$javascriptDataSourceVariableName"/>
     
    278313                        </xsl:if>
    279314                }
    280                 </xsl:if>
    281                 <xsl:for-each select="$dimensions/DIMENSION[boolean(NAME) and not(NAME = $seriesDimensionName)]">
    282                         <xsl:if test="boolean($seriesDimension/NAME) or (position() != 1)">,</xsl:if>
     315                ,
     316                </xsl:if>
     317                <xsl:for-each select="$recordArrayDimensions/DIMENSION[not(USAGE = 'series')]">
     318                        <xsl:if test="position() != 1">,</xsl:if>
    283319                {
    284320                        field: "<xsl:value-of select="NAME"/>Title"
    285321                        ,title: "<xsl:value-of select="TITLE"/>"       
    286322                        ,attributes: {"class": "Dimension"}             
    287                         <xsl:if test="($showFooterRow = true()) and not(seriesDimensionName)">
     323                        <xsl:if test="($showFooterRow = true()) and not($seriesDimension/NAME)">
    288324                        ,footerTemplate: "<div><xsl:value-of select="$Kendo.gridFooterRowTitle"/></div>"
    289325                        </xsl:if>
     
    291327                </xsl:for-each>
    292328
    293                 <xsl:for-each select="$measures/MEASURE">
     329                <xsl:for-each select="$measures">
    294330                        <xsl:variable name="measure" select="."/>
    295331                        <xsl:for-each select="$gridMeasures/GRID_MEASURE[MEASURE_NAME = $measure/NAME]/COLUMNS/COLUMN[not(INFO_FIELD_FLAG)]">
  • trunk/ibisph-view/src/main/webapp/xslt/html/indicator/profile/interactive/Interactive.xslt

    r13501 r13513  
    2828
    2929
    30 
    31 
    32 <!--
    33         <xsl:param name="indicatorView"/>
    34 -->
    35         <xsl:variable name="Interactive.records" ibis:doc="create the actual dataset">
    36 
    37                 <xsl:variable name="seriesDimensions"   select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='series']"/>
    38                 <xsl:variable name="categoryDimensions" select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='category']"/>
    39                 <xsl:variable name="constantDimensions" select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='constant']"/>
    40 
    41 <xsl:variable name="datasets" select="$indicator/DATASETS/DATASET[NAME = $indicatorView/DATASET_NAMES/DATASET_NAME]"/>
    42 
    43                 <xsl:for-each select="$seriesDimensions/VALUES/VALUE">
    44                         <xsl:sort select="DIMENSION_NAME" order="ascending" data-type="text"/>
    45                         <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
    46                         <xsl:variable name="seriesDimensionValue" select="."/>
    47 
    48                         <xsl:for-each select="$categoryDimensions/VALUES/VALUE">
    49                                 <xsl:sort select="DIMENSION_NAME" order="ascending" data-type="text"/>
    50                                 <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
    51                                 <xsl:variable name="categoryDimensionValue" select="."/>
    52 
    53                                 <xsl:if test="0 = count(constantDimensions)">
    54                                         <xsl:apply-templates mode="IndicatorViewDatasetRecord" select="
    55                                                 $datasets/RECORDS/RECORD[
    56                                                         ((DIMENSIONS/DIMENSION/NAME  = $seriesDimensionValue/DIMENSION_NAME)
    57                                                                 and
    58                                                          (DIMENSIONS/DIMENSION/VALUE = $seriesDimensionValue/VALUE))
    59                                                         and
    60                                                         ((DIMENSIONS/DIMENSION/NAME  = $categoryDimensionValue/DIMENSION_NAME)
    61                                                                 and
    62                                                          (DIMENSIONS/DIMENSION/VALUE = $categoryDimensionValue/VALUE))
    63                                                 ]"
    64                                         />
    65                                 </xsl:if>
    66                                 <xsl:if test="0 != count(constantDimensions)">
    67                                         <xsl:for-each select="$constantDimensions/VALUES/VALUE">
    68                                                 <xsl:sort select="DIMENSION_NAME" order="ascending" data-type="string"/>
    69                                                 <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
    70                                                 <xsl:variable name="constantDimensionValue" select="."/>
    71                                                 <xsl:copy-of select="
    72                                                         $datasets/RECORDS/RECORD[
    73                                                                 ((DIMENSIONS/DIMENSION/NAME  = $seriesDimensionValue/DIMENSION_NAME)
    74                                                                         and
    75                                                                  (DIMENSIONS/DIMENSION/VALUE = $seriesDimensionValue/VALUE))
    76                                                                 and
    77                                                                 ((DIMENSIONS/DIMENSION/NAME  = $categoryDimensionValue/DIMENSION_NAME)
    78                                                                         and
    79                                                                  (DIMENSIONS/DIMENSION/VALUE = $categoryDimensionValue/VALUE))
    80                                                                 and
    81                                                                 ((DIMENSIONS/DIMENSION/NAME  = $constantDimensionValue/DIMENSION_NAME)
    82                                                                         and
    83                                                                  (DIMENSIONS/DIMENSION/VALUE = $constantDimensionValue/VALUE))
    84                                                         ]"
    85                                                 />
    86                                         </xsl:for-each>
    87                                 </xsl:if>
    88                         </xsl:for-each>
    89                 </xsl:for-each>
    90         </xsl:variable>
    91 
    92         <xsl:template match="@*|node()" mode="IndicatorViewDatasetRecord">
    93                 <xsl:copy>
    94                         <xsl:apply-templates select="@*|node()" mode="IndicatorViewDatasetRecord"/>
    95                 </xsl:copy>
    96         </xsl:template>
    97         <xsl:template match="RECORDS/RECORD/DIMENSIONS/DIMENSION" mode="IndicatorViewDatasetRecord">
    98                 <xsl:variable name="fullDimension" select="$indicatorView/DIMENSIONS/DIMENSION[NAME = current()/NAME and USAGE != 'period']"/>
    99                 <xsl:variable name="fullDimensionValue" select="$fullDimension/VALUES/VALUE[VALUE = current()/VALUE]"/>
    100                 <xsl:if test="$fullDimension/USAGE != 'period'">
    101                         <DIMENSION>
    102                                 <xsl:copy-of select="current()/NAME"/>
    103                                 <xsl:copy-of select="$fullDimensionValue[1]/VALUE"/>
    104                                 <xsl:copy-of select="$fullDimensionValue[1]/TITLE"/>
    105                                 <xsl:copy-of select="$fullDimensionValue[1]/SORT_ORDER"/>
    106                                 <xsl:copy-of select="$fullDimension/USAGE"/>
    107                         </DIMENSION>
    108                 </xsl:if>
    109         </xsl:template>
    110         <!-- xsl:template match="xxxRECORDS/RECORD/DIMENSIONS/DIMENSION/VALUES/VALUE" mode="IndicatorViewDatasetRecord">
    111 
    112        
    113         [1] is needed because when the period dim is the cat or series dim then you get dups...
    114        
    115         <xsl:template match="RECORDS/RECORD/DIMENSIONS/DIMENSION" mode="IndicatorViewDatasetRecord">
    116                 <xsl:copy>
    117                         <xsl:apply-templates select="@*|node()" mode="IndicatorViewDatasetRecord"/>
    118                         <xsl:copy-of select="$indicatorView/DIMENSIONS/DIMENSION[NAME = current()/NAME]/USAGE"/>
    119                 </xsl:copy>
    120         </xsl:template>
    121         <xsl:template match="RECORDS/RECORD/DIMENSIONS/DIMENSION/VALUE" mode="IndicatorViewDatasetRecord">
    122                 <xsl:variable name="fullDimensionValue" select=
    123                         "$indicatorView/DIMENSIONS/DIMENSION/VALUES/VALUE[DIMENSION_NAME = current()/../NAME and VALUE = current()]"
    124                 />
    125                 <xsl:copy-of select="$fullDimensionValue[1]/VALUE"/>
    126                 <xsl:copy-of select="$fullDimensionValue[1]/TITLE"/>
    127                 <xsl:copy-of select="$fullDimensionValue[1]/SORT_ORDER"/>
    128         </xsl:template>
    129        
    130        
    131         <xsl:template match="RECORDS/RECORD/DIMENSIONS/DIMENSION" mode="IndicatorViewDatasetRecord">
    132                 <xsl:variable name="fullDimensionValue" select=
    133                         "$indicatorView/DIMENSIONS/DIMENSION/VALUES/VALUE[DIMENSION_NAME = current()/NAME and VALUE = current()/VALUE]"
    134                 />
    135                 <DIMENSION>
    136                         <xsl:copy-of select="current()/NAME"/>
    137                         <xsl:copy-of select="$fullDimensionValue[1]/VALUE"/>
    138                         <xsl:copy-of select="$fullDimensionValue[1]/TITLE"/>
    139                         <xsl:copy-of select="$fullDimensionValue[1]/SORT_ORDER"/>
    140                 </DIMENSION>
    141         </xsl:template>
    142        
    143        
    144        
    145                 <xsl:copy-of select="."/>
    146                 <xsl:copy-of select="$indicator/DATASETS/DATASET/DIMENSIONS/DIMENSION[NAME = DIMENSION_NAME]/VALUES/VALUE[text() = current()/text]"/>
    147 <xsl:variable name="x"/>
    148                 <USAGE><xsl:value-of select="local-name($x[1]/parent::*)"/></USAGE>
    149         </xsl:template -->
    150 
    151 
    152 
    15330        <xsl:template name="Interactive.leafletKendoScript"
    15431                ibis:doc="Main page.xslt call - provides the kendo and leaflet javascript"
     
    15633                <xsl:param name="indicatorView"/>
    15734
    158 <xsl:param name="valueFormatPattern" select="$indicator/VALUE_TYPE/XSLT_FORMAT_PATTERN/text()"/>
     35<xsl:param name="valueFormatPattern" select="$indicator/VALUE_TYPE/XSLT_FORMAT_PATTERN"/>
    15936<xsl:param name="indicatorFormatPattern" select="$indicator/VALUE_TYPE/FORMAT_PATTERN"/>
    16037<xsl:message select="$indicatorFormatPattern"/>
    161 
    162                 <xsl:variable name="measureName" select="$indicatorView/MEASURE_NAME/text()"/>
    163                 <xsl:variable name="measure"     select="$indicatorView/MEASURE"/>
    164                 <xsl:variable name="dimensions"  select="$indicatorView/DIMENSIONS"/>
    16538
    16639                <xsl:if test="$LeafletMap.showMap">
     
    17245                -->
    17346
     47
     48                <xsl:variable name="datasetRecords" select="$indicator/DATASETS/DATASET[NAME = $indicatorView/DATASET_NAMES/DATASET_NAME]/RECORDS/RECORD"/>
     49                <xsl:variable name="measure"     select="$indicatorView/MEASURE"/>
     50                <xsl:variable name="measureName" select="$measure/NAME"/>
     51                <xsl:variable name="recordArrayDimensions">
     52                        <xsl:if test="1 &lt; count($indicatorView/DIMENSIONS/DIMENSION[USAGE='series']/VALUES/VALUE)">
     53                        <DIMENSION>
     54                                <NAME>SERIES</NAME>
     55                                <TITLE><xsl:value-of select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='series']/TITLE"/></TITLE>
     56                                <USAGE>series</USAGE>
     57                        </DIMENSION>
     58                        </xsl:if>
     59                        <DIMENSION>
     60                                <NAME>CATEGORY</NAME>
     61                                <xsl:copy-of select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='category']/TITLE"/>
     62                        </DIMENSION>
     63                </xsl:variable>
     64
    17465                <script type="text/javascript">
    175                         var indicatorProfileViewDataArrayJSON =
    176                         <xsl:call-template name="Interactive.indicatorProfileViewDataArrayJSON">
    177                                 <xsl:with-param name="indicatorView" select="$indicatorView"/>
    178                                 <xsl:with-param name="measureName"   select="$measureName"/>
     66                        var kendoDatasourceRecords =
     67                        <xsl:call-template name="Interactive.getIndicatorViewJSONDataRecords">
     68                                <xsl:with-param name="indicatorView"  select="$indicatorView"/>
     69                                <xsl:with-param name="datasetRecords" select="$datasetRecords"/>
     70                                <xsl:with-param name="valueFormatPattern" select="$indicator/VALUE_TYPE/XSLT_FORMAT_PATTERN/text()"/>
    17971                        </xsl:call-template>
    18072                        ;
     
    18274                        var kendoDataSource = new kendo.data.DataSource(
    18375                                <xsl:call-template name="Kendo.dataSourceConstructorJSON">
    184                                         <xsl:with-param name="javascriptDataStructureVariableName" select="'indicatorProfileViewDataArrayJSON'"/>
    185                                         <xsl:with-param name="dimensions">
    186                         <DIMENSION><NAME>SERIES</NAME></DIMENSION>
    187                         <DIMENSION><NAME>CATEGORY</NAME></DIMENSION>
    188                                         </xsl:with-param>
    189                                         <xsl:with-param name="measures"     select="$measure"/>
    190 <xsl:with-param name="groupDimensionNames" select="cleanedSeriesDimensionName"/>
    191 <xsl:with-param name="sortOrderFieldNames" select="'SERIESSortOrder'"/>
     76                                        <xsl:with-param name="javascriptRecordArrayVariableName" select="'kendoDatasourceRecords'"/>
     77                                        <xsl:with-param name="recordArrayDimensionFieldNames" select="$recordArrayDimensions/DIMENSION/NAME"/>
     78                                        <xsl:with-param name="recordArrayMeasureFieldNames"   select="$measure/NAME"/>
     79                                        <xsl:with-param name="kendoDatasourceSortOrderFieldNames" select="'CATEGORYSortOrder'"/>
    19280                                </xsl:call-template>
    19381                        );
    19482
    19583
    196                         <xsl:variable name="hasLowerLimit"  select="exists($indicatorView//INDICATOR_VIEW_VALUE[(ACTIVE_FLAG='x') and (string-length(LOWER_CONFIDENCE_VALUE) != 0)])"/>
    197                         <xsl:variable name="hasUpperLimit"  select="exists($indicatorView//INDICATOR_VIEW_VALUE[(ACTIVE_FLAG='x') and (string-length(UPPER_CONFIDENCE_VALUE) != 0)])"/>
    198                         <xsl:variable name="hasNumerator"   select="exists($indicatorView//INDICATOR_VIEW_VALUE[(ACTIVE_FLAG='x') and (string-length(NUMERATOR)   != 0)])"/>
    199                         <xsl:variable name="hasDenominator" select="exists($indicatorView//INDICATOR_VIEW_VALUE[(ACTIVE_FLAG='x') and (string-length(DENOMINATOR) != 0)])"/>
    200                         <xsl:variable name="hasLabel"       select="exists($indicatorView//INDICATOR_VIEW_VALUE[(ACTIVE_FLAG='x') and (string-length(LABEL) != 0)])"/>
     84
     85
     86
     87
     88
     89                        <xsl:variable name="hasLowerLimit"  select="exists($datasetRecords[string-length(LOWER_CONFIDENCE_VALUE) != 0])"/>
     90                        <xsl:variable name="hasUpperLimit"  select="exists($datasetRecords[string-length(UPPER_CONFIDENCE_VALUE) != 0])"/>
     91                        <xsl:variable name="hasNumerator"   select="exists($datasetRecords[string-length(NUMERATOR)!= 0])"/>
     92                        <xsl:variable name="hasDenominator" select="exists($datasetRecords[string-length(DENOMINATOR) != 0])"/>
     93                        <xsl:variable name="hasLabel"       select="exists($datasetRecords[string-length(LABEL) != 0])"/>
    20194                        var kendoGridConstructorJSON = $.extend
    20295                        (true, {}
     
    207100                                ,<xsl:call-template name="Kendo.requestGridJSON">
    208101                                        <xsl:with-param name="javascriptDataSourceVariableName" select="'kendoDataSource'"/>
    209                 <xsl:with-param name="dimensions">
    210 <DIMENSION><NAME>SERIES</NAME></DIMENSION>
    211 <DIMENSION><NAME>CATEGORY</NAME></DIMENSION>
    212                 </xsl:with-param>
    213 <xsl:with-param name="seriesDimensionName" select="'SERIES'"/>
    214                                         <xsl:with-param name="measures" select="$measure"/>
     102<xsl:with-param name="recordArrayDimensions" select="$recordArrayDimensions"/>
     103<xsl:with-param name="measures" select="$measure"/>
    215104                                        <xsl:with-param name="gridMeasures">
    216105                                                <!-- Mesaure Value Type Elements Structure:
     
    229118                                                        <COLUMNS>
    230119                                                                <COLUMN>
    231                                                                         <TITLE><xsl:value-of select="$indicatorView/Y_TITLE"/></TITLE>
     120                                                                        <TITLE><xsl:value-of select="$measure/TITLE"/></TITLE>
    232121                                                                        <KENDO_DATASOURCE_FIELD_NAME><xsl:value-of select="$measureName"/></KENDO_DATASOURCE_FIELD_NAME>
    233122<xsl:copy-of select="$indicatorFormatPattern"/>
     
    237126                                                                        <TITLE>Lower 95% CI</TITLE>
    238127                                                                        <KENDO_DATASOURCE_FIELD_NAME><xsl:value-of select="$measureName"/>LowerLimit</KENDO_DATASOURCE_FIELD_NAME>
    239                                                                         <xsl:copy-of select="$indicatorView/VALUE_TYPE/XSLT_FORMAT_PATTERN"/>
     128                                                                        <xsl:copy-of select="$valueFormatPattern"/>
    240129                                                                </COLUMN>
    241130                                                </xsl:if>
     
    244133                                                                        <TITLE>Upper 95% CI</TITLE>
    245134                                                                        <KENDO_DATASOURCE_FIELD_NAME><xsl:value-of select="$measureName"/>UpperLimit</KENDO_DATASOURCE_FIELD_NAME>
    246                                                                         <xsl:copy-of select="$indicatorView/VALUE_TYPE/XSLT_FORMAT_PATTERN"/>
     135                                                                        <xsl:copy-of select="$valueFormatPattern"/>
    247136                                                                </COLUMN>
    248137                                                </xsl:if>
     
    273162                                </xsl:call-template>
    274163                        );
     164
     165
     166
     167
    275168
    276169                        var kendoChartConstructorJSON = $.extend
     
    282175                                ,<xsl:call-template name="Kendo.requestChartJSON">
    283176                                        <xsl:with-param name="javascriptDataSourceVariableName" select="'kendoDataSource'"/>
    284 <xsl:with-param name="seriesName"           select="cleanedSeriesDimensionName"/>
    285 <xsl:with-param name="categoryName"         select="cleanedCategoryDimensionName"/>
     177<xsl:with-param name="seriesName"           select="'SERIES'"/>
     178<xsl:with-param name="categoryName"         select="'CATEGORY'"/>
    286179                                        <xsl:with-param name="measure"                  select="$measure"/>
    287180
     
    289182                                        <xsl:with-param name="seriesTitle"          select="$indicatorView/DATASET_SERIES/TITLE"/>
    290183                                        <xsl:with-param name="categoryTitle"        select="$indicatorView/DATASET_CATEGORY/LABEL"/>
    291                                         <xsl:with-param name="valueTitle"           select="$indicatorView/Y_TITLE"/>
     184                                        <xsl:with-param name="valueTitle"           select="$indicatorView/MEASURE/TITLE"/>
    292185
    293186                                        <xsl:with-param name="includeLimits"        select="$hasLowerLimit"/>
     
    310203// var firstSlot = $kendoChart.getKendoChart()._plotArea.axes[0].getSlot(0);
    311204// alert("first slot width" + firstSlot.width());
    312 
     205<!--
    313206                        <xsl:if test="$LeafletMap.showMap">
    314207                                var leafletMapConstructorJSON = $.extend
     
    318211                                        ,<xsl:call-template name="LeafletMap.namedMapJSON"/>
    319212                                        ,<xsl:call-template name="LeafletMap.choroplethJSON">
    320                                                 <xsl:with-param name="javascriptDataStructureVariableName" select="'indicatorProfileViewDataArrayJSON'"/>
     213                                                <xsl:with-param name="javascriptRecordArrayVariableName" select="'kendoDataRecords'"/>
    321214<xsl:with-param name="geoIDFieldName" select="cleanedCategoryDimensionName"/>
    322215                                                <xsl:with-param name="geoTypeTitle"   select="$indicatorView/DATASET_CATEGORY/LABEL"/>
     
    330223                                <xsl:call-template name="LeafletMap.namedMapJavaScript"/>
    331224                        </xsl:if>
     225-->
    332226                        }); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ End of Function ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    333227
     
    341235
    342236
    343         <xsl:template name="Interactive.indicatorProfileViewDataArrayJSON"
    344                 ibis:doc="Produces an indicator view value javascript data list.
     237        <xsl:template name="Interactive.getIndicatorViewJSONDataRecords"
     238                ibis:doc="Produces an indicator view records JSON data list.
     239
     240                        This builds a matrix of dataset records based on the dimensions and
     241                        dimension values specified in the view.  The new record dimensions
     242                        are converted from actual dimension names to 'series', 'category', and
     243                        'constant' - due to IPVs being able to have different/multiple dimensions
     244                        per dimension grouping.
     245
    345246                        NOTES:
    346247                        - Missing values must be coded as 'null' - blank does not work.
     
    357258                        that contains all the SERIES, CATEGORY, VALUE elements to be converted."
    358259                />
    359                 <xsl:param name="measureName"/>
    360 <xsl:param name="valueFormatPattern" select="$indicator/VALUE_TYPE/XSLT_FORMAT_PATTERN/text()"/>
    361 
    362 <!--
    363 <xsl:message select="$Interactive.records"/>
    364 <xsl:message select="$Interactive.records"/>
    365 <xsl:message select="$valueFormatPattern"/>
    366 <xsl:message select="$Interactive.records"/>
    367 <xsl:message select="$dimensions"/>
    368 <xsl:message select="$categoryDimensions"/>
    369 -->
     260                <xsl:param name="datasetRecords"     select="$indicator/DATASETS/DATASET[NAME = $indicatorView/DATASET_NAMES/DATASET_NAME]/RECORDS"/>
     261                <xsl:param name="valueFormatPattern" select="$indicator/VALUE_TYPE/XSLT_FORMAT_PATTERN/text()"/>
     262
     263                <xsl:variable name="seriesDimensions"   select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='series']"/>
     264                <xsl:variable name="categoryDimensions" select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='category']"/>
     265                <xsl:variable name="constantDimensions" select="$indicatorView/DIMENSIONS/DIMENSION[USAGE='constant']"/>
     266                <xsl:variable name="measureName"        select="$indicatorView/MEASURE/NAME"/>
    370267
    371268<xsl:text>[</xsl:text>
    372                 <xsl:for-each select="$Interactive.records/RECORD">
    373                         <xsl:variable name="seriesDimension"   select="DIMENSIONS/DIMENSION[USAGE='series']"/>
    374                         <xsl:variable name="categoryDimension" select="DIMENSIONS/DIMENSION[USAGE='category']"/>
    375                         <xsl:if test="position() != 1">,</xsl:if>
     269                <xsl:for-each select="$seriesDimensions">
     270                        <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
     271                        <xsl:sort select="NAME"       order="ascending" data-type="text"/>
     272                        <xsl:variable name="seriesDimension" select="."/>
     273
     274                        <xsl:for-each select="$seriesDimension/VALUES/VALUE">
     275                                <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
     276                                <xsl:variable name="seriesDimensionValue" select="."/>
     277                                <xsl:variable name="seriesValuePosition"  select="position()"/>
     278
     279                                <xsl:for-each select="$categoryDimensions">
     280                                        <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
     281                                        <xsl:sort select="NAME"       order="ascending" data-type="text"/>
     282                                        <xsl:variable name="categoryDimension" select="."/>
     283
     284                                        <xsl:for-each select="$categoryDimension/VALUES/VALUE">
     285                                                <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
     286                                                <xsl:variable name="categoryDimensionValue" select="."/>
     287                                                <xsl:variable name="categoryValuePosition" select="position()"/>
     288
     289                                                <xsl:variable name="record" select="
     290                                                        $datasetRecords[
     291                                                                ((DIMENSIONS/DIMENSION/NAME  = $seriesDimension/NAME)
     292                                                                        and
     293                                                                 (DIMENSIONS/DIMENSION/VALUE = $seriesDimensionValue/VALUE))
     294                                                                and
     295                                                                ((DIMENSIONS/DIMENSION/NAME  = $categoryDimension/NAME)
     296                                                                        and
     297                                                                 (DIMENSIONS/DIMENSION/VALUE = $categoryDimensionValue/VALUE))
     298                                                        ]"
     299                                                />
     300
     301<xsl:if test="($seriesValuePosition != 1) or ($categoryValuePosition != 1)">,</xsl:if>
    376302{
    377         rowID:<xsl:value-of select="position()"/>
    378         ,"SERIES":"<xsl:value-of select="concat($seriesDimension/NAME, '.', $seriesDimension/VALUE)"/>"
    379         ,"SERIESTitle":"<xsl:value-of select="$seriesDimension/TITLE"/>"
    380         ,"SERIESSortOrder":<xsl:value-of select="$seriesDimension/SORT_ORDER"/>
    381         <xsl:if test="string-length(seriesDimensions/NAME) != 0">
    382         </xsl:if>
    383         ,"CATEGORY":"<xsl:value-of select="concat($categoryDimension/NAME, '.', $categoryDimension/VALUE)"/>"
    384         ,"CATEGORYTitle":"<xsl:value-of select="$categoryDimension/TITLE"/>"
    385         ,"CATEGORYSortOrder":<xsl:value-of select="$categoryDimension/SORT_ORDER"/>
    386         ,"<xsl:value-of select="$measureName"/>":<xsl:value-of                  select="ibis:getJavaScriptValue(current()/VALUE)"/>
    387         ,"<xsl:value-of select="$measureName"/>Title":"<xsl:value-of            select="ibis:getFormattedNumber(current()/VALUE, $valueFormatPattern)"/>"
    388         ,"<xsl:value-of select="$measureName"/>LowerLimit":<xsl:value-of        select="ibis:getJavaScriptValue(current()/LOWER_CONFIDENCE_VALUE)"/>
    389         ,"<xsl:value-of select="$measureName"/>LowerLimitTitle":"<xsl:value-of  select="ibis:getFormattedValue(current()/LOWER_CONFIDENCE_VALUE, $valueFormatPattern, 'n/a')"/>"
    390         ,"<xsl:value-of select="$measureName"/>UpperLimit":<xsl:value-of        select="ibis:getJavaScriptValue(current()/UPPER_CONFIDENCE_VALUE)"/>
    391         ,"<xsl:value-of select="$measureName"/>UpperLimitTitle":"<xsl:value-of  select="ibis:getFormattedValue(current()/UPPER_CONFIDENCE_VALUE, $valueFormatPattern, 'n/a')"/>"
    392         ,"<xsl:value-of select="$measureName"/>Numerator":<xsl:value-of         select="ibis:getJavaScriptValue(current()/NUMERATOR)"/>
    393         ,"<xsl:value-of select="$measureName"/>NumeratorTitle":"<xsl:value-of   select="ibis:getFormattedValue(current()/NUMERATOR, $Interactive.numerDenomXSLTFormatPattern, 'n/a')"/>"
    394         ,"<xsl:value-of select="$measureName"/>Denominator":<xsl:value-of       select="ibis:getJavaScriptValue(current()/DENOMINATOR)"/>
    395         ,"<xsl:value-of select="$measureName"/>DenominatorTitle":"<xsl:value-of select="ibis:getFormattedValue(current()/DENOMINATOR, $Interactive.numerDenomXSLTFormatPattern, 'n/a')"/>"
    396         ,"<xsl:value-of select="$measureName"/>Label":"<xsl:value-of select="current()/LABEL"/>"
    397         ,"<xsl:value-of select="$measureName"/>Note":"<xsl:value-of  select="current()/NOTE"/>"
     303        rowID:<xsl:value-of select="concat($seriesValuePosition, '.', $categoryValuePosition)"/>
     304        ,"SERIES":"<xsl:value-of select="concat($seriesDimension/NAME, '.', $seriesDimensionValue/VALUE)"/>"
     305        ,"SERIESTitle":"<xsl:value-of select="$seriesDimensionValue/TITLE"/>"
     306        ,"SERIESSortOrder":<xsl:value-of select="$seriesDimensionValue/SORT_ORDER"/>
     307        ,"CATEGORY":"<xsl:value-of select="concat($categoryDimension/NAME, '.', $categoryDimensionValue/VALUE)"/>"
     308        ,"CATEGORYTitle":"<xsl:value-of select="$categoryDimensionValue/TITLE"/>"
     309        ,"CATEGORYSortOrder":<xsl:value-of select="$categoryDimensionValue/SORT_ORDER"/>
     310        ,"<xsl:value-of select="$measureName"/>":<xsl:value-of                  select="ibis:getJavaScriptValue($record/VALUE)"/>
     311        ,"<xsl:value-of select="$measureName"/>Title":"<xsl:value-of            select="ibis:getFormattedNumber($record/VALUE, $valueFormatPattern)"/>"
     312        ,"<xsl:value-of select="$measureName"/>LowerLimit":<xsl:value-of        select="ibis:getJavaScriptValue($record/LOWER_CONFIDENCE_VALUE)"/>
     313        ,"<xsl:value-of select="$measureName"/>LowerLimitTitle":"<xsl:value-of  select="ibis:getFormattedValue($record/LOWER_CONFIDENCE_VALUE, $valueFormatPattern, 'n/a')"/>"
     314        ,"<xsl:value-of select="$measureName"/>UpperLimit":<xsl:value-of        select="ibis:getJavaScriptValue($record/UPPER_CONFIDENCE_VALUE)"/>
     315        ,"<xsl:value-of select="$measureName"/>UpperLimitTitle":"<xsl:value-of  select="ibis:getFormattedValue($record/UPPER_CONFIDENCE_VALUE, $valueFormatPattern, 'n/a')"/>"
     316        ,"<xsl:value-of select="$measureName"/>Numerator":<xsl:value-of         select="ibis:getJavaScriptValue($record/NUMERATOR)"/>
     317        ,"<xsl:value-of select="$measureName"/>NumeratorTitle":"<xsl:value-of   select="ibis:getFormattedValue($record/NUMERATOR, $Interactive.numerDenomXSLTFormatPattern, 'n/a')"/>"
     318        ,"<xsl:value-of select="$measureName"/>Denominator":<xsl:value-of       select="ibis:getJavaScriptValue($record/DENOMINATOR)"/>
     319        ,"<xsl:value-of select="$measureName"/>DenominatorTitle":"<xsl:value-of select="ibis:getFormattedValue($record/DENOMINATOR, $Interactive.numerDenomXSLTFormatPattern, 'n/a')"/>"
     320        ,"<xsl:value-of select="$measureName"/>Label":"<xsl:value-of select="$record/LABEL"/>"
     321        ,"<xsl:value-of select="$measureName"/>Note":"<xsl:value-of  select="$record/NOTE"/>"
    398322}
     323                                        </xsl:for-each>
     324                                </xsl:for-each>
     325                        </xsl:for-each>
    399326                </xsl:for-each>
    400327<xsl:text>]</xsl:text>
     328
    401329        </xsl:template>
    402330
Note: See TracChangeset for help on using the changeset viewer.