source: main/trunk/ibisph-view/src/main/webapp/xslt/html/indicator/profile/Page.xslt

Last change on this file was 25315, checked in by GarthBraithwaite_STG, 4 weeks ago

trunk - cleaned out and updated misc todos and unused java code. Changed ibis 30 to 31. Added .string #{commonContentBasePath.string to be explicit. Changed content options css to wrap and simpler left flex for responsive. Changed L.layersets from jq ajax to std fetch. Removed unused cat index and library pages from view. Removed geo selection map from community pages.

File size: 11.2 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2
3<xsl:stylesheet version="3.0" 
4        xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" 
5        xmlns:ibis="http://www.ibisph.org"
6
7        exclude-result-prefixes="ibis"
8>
9        <xsl:import href="../../../xml/Interactive.xslt"/>
10        <xsl:import href="../../../json/Dataset.xslt"/>
11        <xsl:import href="../../../json/Kendo.xslt"/>
12        <xsl:import href="../../../json/LeafletMap.xslt"/>
13        <xsl:import href="../../DataViz.xslt"/>
14        <xsl:import href="../../Page.xslt"/>
15        <xsl:import href="Indicator.xslt"/>
16
17        <ibis:doc>
18                <name>html/indicator/profile/Page</name>
19                <summary>Provides indicator profile specific 'html' API templates</summary>
20                <description>
21                        Provides indicator profile specific 'html' API templates
22                        which are imported by the actual page specific indicator profile XSLTs.
23                </description>
24        </ibis:doc>
25
26        <xsl:param name="Page.completeIndicatorViewTitle" select="ibis:getCompleteIndicatorViewTitle($Indicator.indicator, $Indicator.indicatorView, $Indicator.dimensions)"/> 
27
28        <xsl:param name="Page.contentTitle" 
29                ibis:doc="Provides the page's content title text which is typically
30                        displayed in the content header section.  This variable is a stubb
31                        and should be implemented for each specific type of page.
32                "
33        >
34                Health Indicator Report of <xsl:value-of select="ibis:getIndicatorTitle($Indicator.indicator)"/>
35        </xsl:param>
36
37        <xsl:param name="Page.metaDescription" select="
38                        if(string-length(/INDICATOR_VIEW/DESCRIPTION) != 0)then
39                                concat(/INDICATOR/DESCRIPTION, ' ; ', /INDICATOR_VIEW/DESCRIPTION)
40                        else
41                                /INDICATOR/DESCRIPTION
42                "
43                ibis:doc="Implementation that returns the INDICATOR and INDICATOR_VIEW/DESCRIPTION."
44        />
45        <xsl:param name="Page.metaKeywords" select="$Page.metaDescription"/>
46
47
48        <xsl:param name="Page.htmlClass" select="'IndicatorProfile'"/>
49
50
51        <xsl:param name="OrgUnits"/>
52        <xsl:param name="Page.orgUnits" select="$OrgUnits/ORG_UNITS"
53                ibis:doc="Common org units param injected for all IP view type pages."
54        />
55
56        <xsl:param name="Page.indicatorBaseRequestPath" select="'indicator/'"/>
57
58
59        <xsl:param name="Page.dataViewsHelpContent">
60                Other data slices and visualizations for this indicator report. To use
61                simply select the desired view from the list.  The summary report contains
62                most of the available visualizations and the basic important text.
63        </xsl:param>
64        <xsl:param name="Page.moreInformationHelpContent">
65                These pages provide more contextual information for this indicator report.
66                To use simply select the desired view from the list. 
67        </xsl:param>
68        <xsl:param name="Page.relatedIndicatorsHelpContent">
69                This selection list contains links to other associated/related indicator
70                report pages.
71        </xsl:param>
72        <xsl:param name="Page.associatedTopicsHelpContent">
73                This selection list contains links to the associated health topic pages.
74        </xsl:param>
75
76
77
78        <xsl:template name="Page.contentOptions">
79                <xsl:param name="indicator"     select="$Indicator.indicator"/>
80                <xsl:param name="indicatorView" select="$Indicator.indicatorView"/>
81                <xsl:param name="indicatorBaseRequestPath"      select="$Page.indicatorBaseRequestPath"/>
82
83                <xsl:param name="title"/>
84                <xsl:param name="pageType"/>
85
86                <div class="ContentOptions">
87                        <h3><xsl:value-of select="$title"/></h3>
88
89                        <div class="Container">
90                                <div class="Block">
91                                        <label for="indicatorViews">Data Views:
92                                                <xsl:call-template name="Help.popup">
93                                                        <xsl:with-param name="content" select="$Page.dataViewsHelpContent"/>
94                                                </xsl:call-template>
95                                        </label>
96                                        <xsl:variable name="currentIndicatorViewName" select="$indicatorView/NAME"/>
97                                        <select name="indicatorViews" id="indicatorViews" onchange="location=this.value; this.value='';">
98                                        <xsl:if test="('summary' != $pageType) and ('view' != $pageType)">
99                                                <option value="" selected="true" disabled="true" hidden="true">-Choose One-</option>
100                                        </xsl:if>
101                                        <xsl:for-each select="$indicator/INDICATOR_VIEWS/INDICATOR_VIEW">
102                                                <option value="{$indicatorBaseRequestPath}view/{NAME}.html">
103                                                        <xsl:if test="('view' = $pageType) and (NAME = $currentIndicatorViewName)">
104                                                                <xsl:attribute name="selected" select="'selected'"/>
105                                                        </xsl:if>
106                                                        <xsl:value-of select="TITLE"/>
107                                                </option>
108                                        </xsl:for-each>
109                                                <option value="{$indicatorBaseRequestPath}summary/{$indicator/NAME}.html">
110                                                        <xsl:if test="'summary' = $pageType">
111                                                                <xsl:attribute name="selected" select="'selected'"/>
112                                                        </xsl:if>
113                                                        Summary Report
114                                                </option>
115                                                <option value="{$indicatorBaseRequestPath}complete/{$indicator/NAME}.html">
116                                                        <xsl:if test="'complete' = $pageType">
117                                                                <xsl:attribute name="selected" select="'selected'"/>
118                                                        </xsl:if>
119                                                        Complete Report
120                                                </option>
121                                        </select>
122                                </div>
123
124                                <div class="Block">
125                                        <label for="moreInformation">More Information:
126                                                <xsl:call-template name="Help.popup">
127                                                        <xsl:with-param name="content" select="$Page.moreInformationHelpContent"/>
128                                                </xsl:call-template>
129                                        </label>
130
131                                        <select name="moreInformation" id="moreInformation" onchange="location=this.value; this.value='';">
132                                                <xsl:if test="('services' != $pageType) and ('facts' != $pageType) and ('resources' != $pageType)">
133                                                <option value="" selected="true" disabled="true" hidden="true">-Choose One-</option>
134                                                </xsl:if>
135                                                <option value="{$indicatorBaseRequestPath}facts/{$indicator/NAME}.html">
136                                                        <xsl:if test="'facts' = $pageType">
137                                                                <xsl:attribute name="selected" select="'selected'"/>
138                                                        </xsl:if>
139                                                        Important Facts
140                                                </option>
141                                        <xsl:if test="string-length($indicator/SERVICES_AVAILABLE_TO_PUBLIC) != 0">
142                                                <option value="{$indicatorBaseRequestPath}services/{$indicator/NAME}.html">
143                                                        <xsl:if test="'services' = $pageType">
144                                                                <xsl:attribute name="selected" select="'selected'"/>
145                                                        </xsl:if>
146                                                        Available Services
147                                                </option>
148                                        </xsl:if>
149<!--
150                                                <option value="{$indicatorBaseRequestPath}resources/{$indicator/NAME}.html">
151                                                        <xsl:if test="'resources' = $pageType">
152                                                                <xsl:attribute name="selected" select="'selected'"/>
153                                                        </xsl:if>
154                                                        Resources &amp; Links
155                                                </option>
156-->
157                                        </select>
158                                </div>
159
160                                <xsl:if test="0 != count($indicator/RELATIONS/RELATION/RELATED_INDICATORS/RELATED_INDICATOR)">
161                                <div class="Block">
162                                        <label for="relatedIndicators">Related Indicator Reports:
163                                                <xsl:call-template name="Help.popup">
164                                                        <xsl:with-param name="content" select="$Page.relatedIndicatorsHelpContent"/>
165                                                </xsl:call-template>
166                                        </label>
167                                        <select name="relatedIndicators" id="relatedIndicators" onchange="location=this.value; this.value='';">
168                                                <option value="" selected="true" disabled="true" hidden="true">-Choose One-</option>
169                                                <xsl:for-each select="$indicator/RELATIONS/RELATION/RELATED_INDICATORS/RELATED_INDICATOR">
170                                                        <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
171                                                        <option value="{$indicatorBaseRequestPath}summary/{NAME}.html"><xsl:value-of select="TITLE"/></option>
172                                                </xsl:for-each>
173                                        </select>
174                                </div>
175                                </xsl:if>
176
177                                <xsl:if test="0 != count($indicator/TOPICS/TOPIC)">
178                                <div class="Block">
179                                        <label for="associatedHealthTopics">Associated Health Topics:
180                                                <xsl:call-template name="Help.popup">
181                                                        <xsl:with-param name="content" select="$Page.associatedTopicsHelpContent"/>
182                                                </xsl:call-template>
183                                        </label>
184                                       
185                                        <select name="associatedHealthTopics" id="associatedHealthTopics" onchange="location=this.value; this.value='';">
186                                                <option value="" selected="true" disabled="true" hidden="true">-Choose One-</option>
187                                                <xsl:for-each select="$indicator/TOPICS/TOPIC">
188                                                        <xsl:sort select="SORT_ORDER" order="ascending" data-type="number"/>
189                                                        <option value="{URL}"><xsl:value-of select="TITLE"/></option>
190                                                </xsl:for-each>
191                                        </select>
192                                </div>
193                                </xsl:if>
194                        </div>
195                </div>
196        </xsl:template>
197
198
199        <xsl:template name="Page.contentFooter" ibis:doc="Provides IP dates and owning program's contact info.">
200                <xsl:param name="orgUnitName" select="if(0 != string-length($Indicator.indicator/ORG_UNIT_NAME)) then $Indicator.indicator/ORG_UNIT_NAME else 'DEFAULT'"/>
201                <xsl:param name="orgUnit"     select="$Page.orgUnits//ORG_UNIT[NAME=$orgUnitName]"/>
202
203                <xsl:if test="0 != string-length($orgUnit/TITLE)">
204                        <footer>
205                                <xsl:call-template name="Indicator.allDates"/>
206                                <div class="OrgUnit">
207                                        <xsl:value-of select="$orgUnit/TITLE"/>, <xsl:value-of select="$orgUnit/CONTACT_TEXT"/>
208                                        <xsl:if test="string-length($orgUnit/URL) != 0">
209                                                (<a href="{$orgUnit/URL}"><xsl:value-of select="$orgUnit/URL"/></a>)
210                                        </xsl:if>
211                                </div>
212                        </footer>
213                </xsl:if>
214        </xsl:template>
215
216
217        <xsl:template name="Page.insertAsyncContent"
218                ibis:doc="
219                        Provides a way to get async AJAX type content into a page.  Typically
220                        the IP View's EXTERNAL_CONTENT struct.
221
222                        NOTES:
223                                If implemented at the page level and HTML_CONTENT page implements
224                                a custom tag then this could be used to insert external content.
225                                However, most external content has it's own way to incorp into
226                                a full control HTML_CONTENT type pages.  Examples are iframe,
227                                embed, and js impls.  This template was placed within the main
228                                Page.xslt but was moved here because the EXTERANL use case is
229                                the only one that really makes sense.
230
231                                Tried IFRAME and EMBED.  If entire page then get header, footer,
232                                nav etc.  If limited to the section.Sections container element
233                                then have issues with css and script.  Also needed script to auto
234                                size the height.  See 9/19/2017 commit for temp IP Interactive.xslt
235                                code tried.
236
237                                Can't easily include outside content.  It's easily done IF we
238                                don't have the security headers enabled - which then raises lots
239                                of flags when the site is scanned for security vulnerabilities.
240
241                                See: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
242                "
243        >
244                <xsl:param name="sourceContentRequestURL"/>
245                <xsl:param name="sourceContentCSSSelector" select="'section.Sections'"/>
246                <xsl:param name="destContentCSSSelector"   select="'section.Sections'"/>
247
248                <script>
249                        fetch("<xsl:value-of select="$sourceContentRequestURL"/>")
250                                .then(response =>
251                                                {
252                                                        if(!response.ok) throw new Error("Page.insertAsyncContent - Bad Server Response: "+response.status + ": " + response.statusText);
253
254                                                        var text = response.text();
255                                                        var parser = new DOMParser();
256                                                        var htmlDocument = parser.parseFromString(text, 'text/html');
257                                                        const html = htmlDocument.querySelectorAll("<xsl:value-of select="$sourceContentCSSSelector"/>");
258                                                        return(html);
259                                                }
260                                        )
261                                        .then(html =>
262                                                {
263                                                        const destElement = document.querySelectorAll("<xsl:value-of select="$destContentCSSSelector"/>");
264                                                        if(!destElement) throw new Error("Page.insertAsyncContent - Bad Destination Element: <xsl:value-of select="$destContentCSSSelector"/>");
265                                                        destElement.innerHTML(html);
266                                                }
267                                        )
268                                .catch(error => { console.error(error); })
269                        ;
270                </script>
271        </xsl:template>
272
273
274</xsl:stylesheet>
275<!-- ============================= End of File ============================= -->
276
Note: See TracBrowser for help on using the repository browser.