1
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
2
|
<xsl:stylesheet
|
3
|
xmlns:wmc="http://www.opengis.net/context"
|
4
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
5
|
xmlns:gml='http://www.opengis.net/gml'
|
6
|
xmlns:wfs='http://www.opengis.net/wfs'
|
7
|
xmlns:xlink='http://www.w3.org/1999/xlink'
|
8
|
version="1.0">
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
<!--
|
15
|
Description: provides a list of layers and controls for them (delete/visibility/move up/move down/show metadata
|
16
|
Author: Mike Adair
|
17
|
Licence: LGPL as specified in http://www.gnu.org/copyleft/lesser.html
|
18
|
|
19
|
$Id: LayerControl.xsl 2677 2007-04-06 08:37:01Z oterral $
|
20
|
$Name: $
|
21
|
-->
|
22
|
<xsl:output method="xml" encoding="utf-8" omit-xml-declaration="yes"/>
|
23
|
|
24
|
<!-- The common params set for all widgets -->
|
25
|
<xsl:param name="lang"/>
|
26
|
<xsl:param name="modelId"/>
|
27
|
<xsl:param name="widgetId"/>
|
28
|
<xsl:param name="skinDir"/>
|
29
|
<xsl:param name="opacity"/>
|
30
|
|
31
|
<!-- Text params for this widget -->
|
32
|
<xsl:param name="zoomImage"/>
|
33
|
<xsl:param name="layerIndexTip"/>
|
34
|
<xsl:param name="toggleVisTip"/>
|
35
|
<xsl:param name="moveLayerUpTip"/>
|
36
|
<xsl:param name="moveLayerDownTip"/>
|
37
|
<xsl:param name="deleteLayerTip"/>
|
38
|
<xsl:param name="legendTip"/>
|
39
|
<xsl:param name="nameLayerTip"/>
|
40
|
<xsl:param name="opacityTip"/>
|
41
|
<xsl:param name="title"/>
|
42
|
<xsl:param name="layerMetadata"/>
|
43
|
<xsl:param name="moveUpImage">/images/LayerMoveUpDisable.png</xsl:param>
|
44
|
<xsl:param name="moveDownImage">/images/LayerMoveDownDisable.png</xsl:param>
|
45
|
<xsl:param name="deleteImage">/images/LayerRemoveDisable.png</xsl:param>
|
46
|
<xsl:param name="legendImageEnable">/images/LegendEnable.png</xsl:param>
|
47
|
<xsl:param name="legendImageDisable">/images/LegendDisable.png</xsl:param>
|
48
|
<xsl:param name="layerAddImage">/images/LayerAddDisable.png</xsl:param>
|
49
|
<xsl:param name="layerMetadataImageDisable">/images/QueryDisable.png</xsl:param>
|
50
|
<xsl:param name="layerMetadataImageEnable">/images/QueryEnable.png</xsl:param>
|
51
|
<xsl:param name="loadingImage">/images/LoadingSpinner.gif</xsl:param>
|
52
|
|
53
|
<!-- 'mode' determines the mode of the layer control. Can be one of the following:
|
54
|
* default: standard layer control
|
55
|
* layerselect: select layer to copy/move to other context
|
56
|
-->
|
57
|
<xsl:param name="mode">default</xsl:param>
|
58
|
|
59
|
<!-- The name of the javascript context object to call -->
|
60
|
<xsl:param name="featureName"/>
|
61
|
<xsl:param name="hidden"/>
|
62
|
<xsl:param name="context">config.objects.<xsl:value-of select="$modelId"/></xsl:param>
|
63
|
<xsl:variable name="numLayers" select="count(//wmc:Layer | //wmc:FeatureType)"/>
|
64
|
|
65
|
<!-- Main html -->
|
66
|
<xsl:template match="/wmc:ViewContext">
|
67
|
<div>
|
68
|
<div class="layerControl">
|
69
|
<xsl:if test="wmc:General/wmc:Extension">
|
70
|
<xsl:apply-templates select="wmc:General/wmc:Extension/wmc:GroupList/wmc:Group">
|
71
|
<xsl:sort select="position()" order="ascending" data-type="number"/>
|
72
|
</xsl:apply-templates>
|
73
|
</xsl:if>
|
74
|
<xsl:if test="not(wmc:General/wmc:Extension)">
|
75
|
<xsl:apply-templates select="wmc:LayerList/wmc:Layer">
|
76
|
<xsl:sort select="position()" order="descending" data-type="number"/>
|
77
|
</xsl:apply-templates>
|
78
|
</xsl:if>
|
79
|
</div>
|
80
|
</div>
|
81
|
</xsl:template>
|
82
|
|
83
|
<!-- Main html -->
|
84
|
<xsl:template match="/wmc:OWSContext">
|
85
|
<div class="layerControl">
|
86
|
<xsl:if test="$title">
|
87
|
<h3><xsl:value-of select="$title"/></h3>
|
88
|
</xsl:if>
|
89
|
<xsl:if test="wmc:General/wmc:Extension">
|
90
|
<xsl:apply-templates select="wmc:General/wmc:Extension/wmc:GroupList/wmc:Group">
|
91
|
<xsl:sort select="position()" order="ascending" data-type="number"/>
|
92
|
</xsl:apply-templates>
|
93
|
</xsl:if>
|
94
|
<xsl:if test="not(wmc:General/wmc:Extension)">
|
95
|
<xsl:apply-templates select="wmc:ResourceList/wmc:Layer | wmc:ResourceList/wmc:FeatureType">
|
96
|
<xsl:sort select="position()" order="descending" data-type="number"/>
|
97
|
</xsl:apply-templates>
|
98
|
</xsl:if>
|
99
|
</div>
|
100
|
</xsl:template>
|
101
|
|
102
|
<!---->
|
103
|
|
104
|
|
105
|
|
106
|
<xsl:template match="wmc:General/wmc:Extension/wmc:GroupList/wmc:Group">
|
107
|
<xsl:variable name="GroupName" select="./@name"/>
|
108
|
<xsl:variable name="GroupFold" select="./@folded"/>
|
109
|
<xsl:variable name="numberOfLayerByGroup" select="count(//wmc:Layer[wmc:Extension/wmc:Group/@name=$GroupName] | //wmc:FeatureType[wmc:Extension/wmc:Group/@name=$GroupName])"/>
|
110
|
<xsl:variable name="numberOfLayerByGroupOther" >
|
111
|
<xsl:value-of select=" $numLayers - $numberOfLayerByGroup "/>
|
112
|
</xsl:variable>
|
113
|
<xsl:if test=" ( $numberOfLayerByGroup != 0) or ( ($numberOfLayerByGroupOther != 0 ) and ( $GroupName = 'Other') ) ">
|
114
|
<div id="{$GroupName}_Header" style="cursor:pointer" class="GroupHeader" title="click to (un)fold" onmouseover="style.background='pink';" onMouseOut="style.background='#556655';"
|
115
|
onclick="config.objects.{$widgetId}.switchVisibilityById('{$GroupName}');config.objects.{$widgetId}.foldUnfoldGroup('{$GroupName}','{$GroupName}_fold');">
|
116
|
<!-- display "+" or "-" -->
|
117
|
<input type="button" class="GroupHeaderFold" id="{$GroupName}_fold" style="width:35px;">
|
118
|
<xsl:attribute name="value">
|
119
|
<xsl:choose>
|
120
|
<xsl:when test="@folded=1">+ </xsl:when>
|
121
|
<xsl:otherwise>-</xsl:otherwise>
|
122
|
</xsl:choose>
|
123
|
</xsl:attribute>
|
124
|
</input>
|
125
|
|
126
|
<div id="{$GroupName}_Title" class="GroupHeaderTitle">
|
127
|
<xsl:value-of select="$GroupName"/>
|
128
|
</div>
|
129
|
</div><!-- end of div GroupHeader -->
|
130
|
|
131
|
<div id="{$GroupName}" class="GroupLayers" >
|
132
|
<xsl:attribute name="style">
|
133
|
<xsl:choose>
|
134
|
<xsl:when test="@folded=1">display:none </xsl:when>
|
135
|
<xsl:otherwise>display:block</xsl:otherwise>
|
136
|
</xsl:choose>
|
137
|
</xsl:attribute>
|
138
|
<xsl:if test="//wmc:ResourceList">
|
139
|
<xsl:apply-templates select="//wmc:ResourceList/wmc:Layer[wmc:Extension/wmc:Group/@name=$GroupName] | //wmc:ResourceList/wmc:FeatureType[wmc:Extension/wmc:Group/@name=$GroupName]" >
|
140
|
<xsl:sort select="position()" order="descending" data-type="number"/>
|
141
|
</xsl:apply-templates>
|
142
|
</xsl:if>
|
143
|
<xsl:if test="//wmc:LayerList">
|
144
|
<xsl:apply-templates select="//wmc:LayerList/wmc:Layer[wmc:Extension/wmc:Group/@name=$GroupName]">
|
145
|
<xsl:sort select="position()" order="descending" data-type="number"/>
|
146
|
</xsl:apply-templates>
|
147
|
</xsl:if>
|
148
|
<xsl:if test="$GroupName='Other' ">
|
149
|
<xsl:if test="//wmc:ResourceList">
|
150
|
<xsl:apply-templates select="//wmc:ResourceList/wmc:Layer[not(wmc:Extension/wmc:Group)] | //wmc:ResourceList/wmc:FeatureType[not(wmc:Extension/wmc:Group)]" >
|
151
|
<xsl:sort select="position()" order="descending" data-type="number"/>
|
152
|
</xsl:apply-templates>
|
153
|
</xsl:if>
|
154
|
<xsl:if test="//wmc:LayerList">
|
155
|
<xsl:apply-templates select="//wmc:LayerList/wmc:Layer[not(wmc:Extension/wmc:Group)]">
|
156
|
<xsl:sort select="position()" order="descending" data-type="number"/>
|
157
|
</xsl:apply-templates>
|
158
|
</xsl:if>
|
159
|
</xsl:if>
|
160
|
</div><!-- end of div {$GroupName} -->
|
161
|
</xsl:if>
|
162
|
</xsl:template>
|
163
|
|
164
|
|
165
|
|
166
|
|
167
|
|
168
|
<xsl:template match="wmc:Layer|wmc:FeatureType">
|
169
|
<xsl:variable name="GroupName" select="wmc:Extension/wmc:Group/@name"/>
|
170
|
<xsl:variable name="layerName" select="wmc:Name"/>
|
171
|
<xsl:variable name="LayerTitle" select="wmc:Title"/>
|
172
|
<xsl:variable name="layerTitle">
|
173
|
<xsl:choose>
|
174
|
<xsl:when test="wmc:Title/@xml:lang">
|
175
|
<xsl:value-of select="wmc:Title[@xml:lang=$lang]"/>
|
176
|
</xsl:when>
|
177
|
<xsl:otherwise>
|
178
|
<xsl:value-of select="wmc:Title"/>
|
179
|
</xsl:otherwise>
|
180
|
</xsl:choose>
|
181
|
</xsl:variable>
|
182
|
|
183
|
<!-- Use unique layer id. Fallback to layer name if non-existent -->
|
184
|
<xsl:variable name="layerId">
|
185
|
<xsl:choose>
|
186
|
<xsl:when test="@id">
|
187
|
<xsl:value-of select="@id"/>
|
188
|
</xsl:when>
|
189
|
<xsl:otherwise>
|
190
|
<xsl:value-of select="$layerName"/>
|
191
|
</xsl:otherwise>
|
192
|
</xsl:choose>
|
193
|
</xsl:variable>
|
194
|
|
195
|
<xsl:variable name="pos" select="position()" />
|
196
|
|
197
|
<!-- variable -->
|
198
|
<xsl:variable name="rowClass">altRow_<xsl:value-of select="position() mod 2"/></xsl:variable>
|
199
|
<!-- end of variable -->
|
200
|
|
201
|
|
202
|
<div id="{$widgetId}_{$layerId}_Row" class="{$rowClass}" onmouseover="config.objects.{$widgetId}.highlightLayer('{$layerId}')">
|
203
|
<!-- div necessary with IE 6 because if not, float makes bugs when display or fold legend -->
|
204
|
<div style="position:relative;">
|
205
|
<div id="{$widgetId}_{$layerId}_Header " class="LayerHeader">
|
206
|
|
207
|
<!-- layer's index -->
|
208
|
<div class="indexLayerHeader" title="{$layerIndexTip}">
|
209
|
<xsl:value-of select="$numLayers - count(preceding::wmc:Layer) - count(preceding::wmc:FeatureType)"/>
|
210
|
</div>
|
211
|
|
212
|
<div class="inputLayerHeader">
|
213
|
<xsl:choose>
|
214
|
<xsl:when test="$mode = 'layerselect'">
|
215
|
<!-- add layer -->
|
216
|
<a
|
217
|
href="javascript:config.objects.{$widgetId}.copyToTargetModel('{$layerId}')"
|
218
|
class="mbButton"><img title="add this Layer" src="{$skinDir}{$layerAddImage}" />
|
219
|
</a>
|
220
|
</xsl:when>
|
221
|
<xsl:otherwise>
|
222
|
<!-- checkbox -->
|
223
|
<div class="checkboxLayerHeader">
|
224
|
<input type="checkbox" id="vis_{$widgetId}_{$layerId}" title="{$toggleVisTip}" onclick="{$context}.setHidden('{$layerId}',!document.getElementById('vis_{$widgetId}_{$layerId}').checked)">
|
225
|
<xsl:if test="@hidden='0' or @hidden='false'"><xsl:attribute name="checked"/></xsl:if>
|
226
|
</input>
|
227
|
</div>
|
228
|
<!-- movelayerup-->
|
229
|
<xsl:if test="($numLayers - count(preceding::wmc:Layer) - count(preceding::wmc:FeatureType))!=1">
|
230
|
<div class="buttonLayerHeader">
|
231
|
<a href="javascript:{$context}.setParam('moveLayerUp','{$layerId}')" class="mbButton">
|
232
|
<img title="{$moveLayerUpTip}" src="{$skinDir}{$moveUpImage}" />
|
233
|
</a>
|
234
|
</div>
|
235
|
</xsl:if>
|
236
|
<!-- movelayerdonw -->
|
237
|
<xsl:if test="($numLayers - count(preceding::wmc:Layer) - count(preceding::wmc:FeatureType)) != $numLayers">
|
238
|
<div class="buttonLayerHeader">
|
239
|
<a href="javascript:{$context}.setParam('moveLayerDown','{$layerId}')" class="mbButton">
|
240
|
<img title="{$moveLayerDownTip}" src="{$skinDir}{$moveDownImage}" />
|
241
|
</a>
|
242
|
</div>
|
243
|
</xsl:if>
|
244
|
<!-- deletelayer -->
|
245
|
<div class="buttonLayerHeader">
|
246
|
<a href="javascript:{$context}.setParam('deleteLayer','{$layerId}')" class="mbButton">
|
247
|
<img title="{$deleteLayerTip}" src="{$skinDir}{$deleteImage}" />
|
248
|
</a>
|
249
|
</div>
|
250
|
<!-- displayLegend -->
|
251
|
<xsl:if test="wmc:StyleList/wmc:Style[@current='1']/wmc:LegendURL">
|
252
|
<div class="buttonLayerHeader" >
|
253
|
<a href="#"
|
254
|
onclick="config.objects.{$widgetId}.switchVisibilityById('{$layerId}_legend');config.objects.{$widgetId}.ChangeImage('image_{$layerId}','{$legendImageEnable}','{$legendImageDisable}');"
|
255
|
class="mbButton">
|
256
|
|
257
|
<img id="image_{$layerId}" title="{$legendTip}" >
|
258
|
<xsl:attribute name="SRC">
|
259
|
<xsl:choose>
|
260
|
<xsl:when test="@hidden='1' or @hidden='true'">
|
261
|
<xsl:value-of select="$skinDir"/>
|
262
|
<xsl:value-of select="$legendImageDisable"/>
|
263
|
</xsl:when>
|
264
|
<xsl:otherwise>
|
265
|
<xsl:value-of select="$skinDir"/>
|
266
|
<xsl:value-of select="$legendImageEnable"/>
|
267
|
</xsl:otherwise>
|
268
|
</xsl:choose>
|
269
|
</xsl:attribute>
|
270
|
</img>
|
271
|
</a>
|
272
|
</div>
|
273
|
</xsl:if>
|
274
|
</xsl:otherwise>
|
275
|
</xsl:choose>
|
276
|
<xsl:if test="$layerMetadata">
|
277
|
<!-- show layer metadata-->
|
278
|
<a
|
279
|
href="javascript:config.objects.{$modelId}.callListeners('layerMetadata', {{layerId: '{$layerId}', domNodeId: '{$widgetId}_{$layerId}_Metadata'}});config.objects.{$widgetId}.ChangeImage('image_{$layerId}','{$layerMetadataImageEnable}','{$layerMetadataImageDisable}');"
|
280
|
class="mbButton"><img id="image_{$layerId}" title="show layer's metadata" src="{$skinDir}{$layerMetadataImageDisable}" />
|
281
|
</a>
|
282
|
</xsl:if>
|
283
|
</div> <!-- end inputLayerHeader -->
|
284
|
<!-- name of layer -->
|
285
|
<div class="nameLayerHeader" title="{$nameLayerTip}">
|
286
|
<xsl:choose>
|
287
|
<xsl:when test="wmc:Title/@xml:lang">
|
288
|
<xsl:value-of select="wmc:Title[@xml:lang=$lang]"/>
|
289
|
</xsl:when>
|
290
|
<xsl:otherwise>
|
291
|
<xsl:value-of select="wmc:Title"/>
|
292
|
</xsl:otherwise>
|
293
|
</xsl:choose>
|
294
|
</div>
|
295
|
<!-- opacity -->
|
296
|
<xsl:if test="$opacity='true'">
|
297
|
<div id="transptitle" class="transpLayerHeader" >
|
298
|
<form title="{$opacityTip}" >
|
299
|
<select name="opacity" onchange="config.objects.{$modelId}.setOpacity('{$layerId}',value)">
|
300
|
<xsl:if test="@opacity">
|
301
|
<option value="@opacity">
|
302
|
<xsl:value-of select="@opacity"/></option>
|
303
|
</xsl:if>
|
304
|
<option value="1">1</option>
|
305
|
<option value="0.8">0.8</option>
|
306
|
<option value="0.6">0.6</option>
|
307
|
<option value="0.4">0.4</option>
|
308
|
<option value="0.2">0.2</option>
|
309
|
<option value="0">0</option>
|
310
|
</select>
|
311
|
</form>
|
312
|
</div>
|
313
|
</xsl:if>
|
314
|
</div> <!--end of {$widgetId}_{$layerId}_Header -->
|
315
|
|
316
|
<xsl:if test="$layerMetadata">
|
317
|
<!-- metadata -->
|
318
|
<div id="{$widgetId}_{$layerId}_Metadata"></div>
|
319
|
</xsl:if>
|
320
|
|
321
|
<!-- Loading spinner -->
|
322
|
<div id="{$layerId}_Loading" class="layerLoading">
|
323
|
<xsl:if test="@isLoading and (@hidden='0' or @hidden='false')">
|
324
|
<img title="This layer is being loaded" src="{$skinDir}{$loadingImage}" />
|
325
|
</xsl:if>
|
326
|
</div>
|
327
|
|
328
|
</div> <!--end of hack ie 5.5 -->
|
329
|
<!-- legend -->
|
330
|
<xsl:if test="wmc:StyleList/wmc:Style[@current='1']/wmc:LegendURL">
|
331
|
|
332
|
|
333
|
<div class="legend" id="{$layerId}_legend" >
|
334
|
<xsl:attribute name="style">
|
335
|
<xsl:choose>
|
336
|
<xsl:when test="@hidden='1' or @hidden='true'">display:none </xsl:when>
|
337
|
<xsl:otherwise>display:block</xsl:otherwise>
|
338
|
</xsl:choose>
|
339
|
</xsl:attribute>
|
340
|
<xsl:element name="IMG" >
|
341
|
<xsl:attribute name="SRC">
|
342
|
<xsl:value-of select="wmc:StyleList/wmc:Style[@current='1']/wmc:LegendURL/wmc:OnlineResource/@xlink:href"/>
|
343
|
</xsl:attribute>
|
344
|
</xsl:element>
|
345
|
</div>
|
346
|
</xsl:if>
|
347
|
</div> <!--end of "{$widgetId}_{$layerId}_Row" -->
|
348
|
</xsl:template>
|
349
|
<xsl:template match="text()|@*"/>
|
350
|
</xsl:stylesheet>
|