Project

General

Profile

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>
(4-4/19)