Mercurial > hg > LGMap
comparison map2.js @ 26:9f67e8afa1cc default tip
add new file for new LGService UI project
author | Calvin Yeh <cyeh@mpiwg-berlin.mpg.de> |
---|---|
date | Thu, 28 Sep 2017 23:58:34 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
25:057b56c62b13 | 26:9f67e8afa1cc |
---|---|
1 | |
2 | |
3 //geoserver url | |
4 var url="http://geoserver.mpiwg-berlin.mpg.de/geoserver/China_Monograph_Project/ows"; | |
5 | |
6 //"name": "layer name" | |
7 var overlayArray=[ | |
8 {name:"中國1820省界", | |
9 file:"China_Monograph_Project:AD1820ChinaProfPolgon", | |
10 preload:false | |
11 }, | |
12 {name:"中國1820府界", | |
13 file:"China_Monograph_Project:AD1820ChinaPrefPolygon", | |
14 preload:false | |
15 }, | |
16 {name:"中國1820省名", | |
17 file:"China_Monograph_Project:AD1820ChinaProfPoint", | |
18 preload:false | |
19 }, | |
20 {name:"China 1820 Province", | |
21 file:"China_Monograph_Project:AD1820ChinaProfPoint_PY", | |
22 preload:false | |
23 }, | |
24 {name:"中國1820府名", | |
25 file:"China_Monograph_Project:AD1820ChinaPrefPoint", | |
26 preload:false | |
27 }, | |
28 {name:"China 1820 Prefecture", | |
29 file:"China_Monograph_Project:AD1820ChinaPrefPoint_PY", | |
30 preload:false | |
31 }, | |
32 {name:"中國1820縣市名", | |
33 file:"China_Monograph_Project:AD1820ChinaCountyPoints", | |
34 preload:false | |
35 }, | |
36 {name:"China 1820 County", | |
37 file:"China_Monograph_Project:AD1820ChinaCountyPoints_PY", | |
38 preload:false | |
39 }, | |
40 {name:"中國1820鄉鎮名", | |
41 file:"China_Monograph_Project:AD1820ChinaTownPoint", | |
42 preload:false | |
43 }, | |
44 {name:"China 1820 village", | |
45 file:"China_Monograph_Project:AD1820ChinaTownPoint_PY", | |
46 preload:false | |
47 }, | |
48 {name:"China 1820 Prefecture (boundaries-only)", | |
49 file:"China_Monograph_Project:v5_1820_pref_pgn_utf_wgs84", | |
50 preload:false | |
51 }, | |
52 {name:"provincial distribution of local gazetteers", | |
53 file:"China_Monograph_Project:monograph_distribution_prov_x", | |
54 preload:false | |
55 }, | |
56 /*{ | |
57 name:"test", | |
58 file:"China_Monograph_Project:v5_citas90_pref_pgn_utf", | |
59 preload:false | |
60 },*/ | |
61 { | |
62 name:"provincial capitals", | |
63 file:"China_Monograph_Project:all_monographs_capital_points", | |
64 preload:false | |
65 } | |
66 ]; | |
67 var datasetArray=[ | |
68 | |
69 { name:"distribution of local gazetteers", | |
70 file:"./datasets/books_coordinates.csv", | |
71 isFile: true, | |
72 preload:true | |
73 | |
74 } | |
75 // ,{ | |
76 // name:"蝗神廟之分佈", | |
77 // file:"./datasets/locust_temples.csv", | |
78 // preload:false | |
79 // } | |
80 ]; | |
81 var backgroundMapArray=[ | |
82 /*{ | |
83 name: 'Barrington Roman Empire', | |
84 url: 'http://pelagios.dme.ait.ac.at/tilesets/imperium/${z}/${x}/${y}.png', | |
85 type:'XYZ', | |
86 attribution: "(c) Barrington Roman Empiry, <a href='http://pelagios.dme.ait.ac.at/maps/greco-roman/'>Pelagios</a>" | |
87 },*/ | |
88 { | |
89 name: '世界地形圖', | |
90 url: '../ts/t/terrain/${z}/${x}/${y}.png', | |
91 type:'XYZ', | |
92 attribution: "<a href='../ts/index.html?y=1982' target='_blank'>Data Source</a>" | |
93 } | |
94 /*,{ | |
95 name: '西元1820年 清朝 行政區', | |
96 url: 'http://wmsproxy.appspot.com/map.jsp?l=China1820-png-${z}-${x}-${y}', | |
97 type:'XYZ', | |
98 attribution: "© NTU CSIE 303 Lab, <a href='http://archimedes.csie.ntu.edu.tw/lab_web1/'>NTU CSIE 303 Lab</a>" | |
99 }*/ | |
100 ]; | |
101 //mpgiwg layers | |
102 // if (client_ip.substring(0,9)=="141.14.23") { | |
103 // backgroundMapArray.push( | |
104 // { | |
105 // | |
106 // name: '陳正祥–蝗神廟之分佈', | |
107 // url: '../ts/t/pa_cha/${z}/${x}/${y}.png', | |
108 // type:'XYZ', | |
109 // attribution: "© 中國文化地理 陳正祥, <a href='../ts/index.html?y=1982' target='_blank'>Data Source</a>" | |
110 // } | |
111 // ); | |
112 // } | |
113 | |
114 var colorArray=[{//blue | |
115 r1 : 0, | |
116 g1 : 128, | |
117 b1 : 255, | |
118 r0 : 205, | |
119 g0 : 230, | |
120 b0 : 255 | |
121 },{//red | |
122 r1 : 255, | |
123 g1 : 84, | |
124 b1 : 22, | |
125 r0 : 255, | |
126 g0 : 218, | |
127 b0 : 205 | |
128 }, {//purple | |
129 r1 : 132, | |
130 g1 : 0, | |
131 b1 : 255, | |
132 r0 : 231, | |
133 g0 : 205, | |
134 b0 : 255 | |
135 }, {//green | |
136 r1 : 0, | |
137 g1 : 225, | |
138 b1 : 116, | |
139 r0 : 180, | |
140 g0 : 225, | |
141 b0 : 204 | |
142 }, {//yellow | |
143 r1 : 255, | |
144 g1 : 191, | |
145 b1 : 0, | |
146 r0 : 255, | |
147 g0 : 243, | |
148 b0 : 205 | |
149 }]; | |
150 var map, table,timeline,pieChart; | |
151 var urlParameter=new Array(); | |
152 | |
153 $(document).ready(function(){ | |
154 | |
155 GeoTemConfig.datasets=[]; | |
156 | |
157 GeoTemConfig.colors=colorArray; | |
158 | |
159 getUrlParameter(); | |
160 | |
161 //if(urlParameter['name']!=undefined&&urlParameter['file']!=undefined){ //See if this page is referred by search result | |
162 var keywords = decodeURI(urlParameter['keywords']), | |
163 filters = decodeURI(urlParameter['filters']), | |
164 excludes = decodeURI(urlParameter['excludes']), | |
165 name = decodeURI(urlParameter['name']), | |
166 isTOC = decodeURI(urlParameter['isTOC']), | |
167 obj={name:name, isFile:false, keywords:keywords, filters:filters, excludes: excludes, preload:true, isTOC: isTOC}; | |
168 | |
169 datasetArray.splice(0,0,obj); | |
170 //} | |
171 | |
172 // zoe added for incoming json object from LGDataverse | |
173 if (urlParameter['name']!=undefined && urlParameter['file']==undefined && urlParameter['fileId']!=undefined) { | |
174 var file=undefined; | |
175 var name=decodeURI(urlParameter['name']); | |
176 var obj={name:name,file:file,isFile:true,preload:true}; | |
177 datasetArray.splice(0,0,obj); | |
178 }; | |
179 // end | |
180 | |
181 initWindowWidget(); | |
182 initWidget(); //initial Sebastian's widgets | |
183 initToolbar(); //initial the left side icons | |
184 // Syncronize checkboxes and table widget | |
185 var subscriber; | |
186 | |
187 Publisher.Subscribe('filterData',subscriber,function(data){ | |
188 | |
189 $("#datasetContainer input:checkbox").each(function(){ | |
190 | |
191 var name=$(this).attr("name"); | |
192 | |
193 var dataset=$.grep(data,function(val,key){ | |
194 return val.label==name; | |
195 }); | |
196 | |
197 if(dataset.length==0){ | |
198 this.checked=false; | |
199 } | |
200 // zoe added | |
201 if (urlParameter['file']==undefined && urlParameter['fileId']!=undefined && name==urlParameter['name']) { | |
202 this.checked = true; | |
203 this.disabled = true; | |
204 } | |
205 // end | |
206 }); | |
207 }); | |
208 $(".windowWidget").hide(); | |
209 $(".windowWidget .windowWidgetBar .visibilityButton").click(); | |
210 | |
211 // debug by yao | |
212 // $("#aboutIcon").click(); | |
213 | |
214 }); | |
215 | |
216 function getUrlParameter(){ | |
217 //examine the parameter "mode" in the url | |
218 var url=window.location.href; | |
219 var pos=url.indexOf("?"); | |
220 if(pos!=-1){ | |
221 var params=url.substring(pos+1); | |
222 var varArray=params.split("&"); | |
223 for(var i=0; i<varArray.length; i++){ | |
224 pos=varArray[i].indexOf("="); | |
225 var name=varArray[i].substring(0,pos); | |
226 var value=varArray[i].substring(pos+1); | |
227 urlParameter[name]=value; | |
228 /* | |
229 if(name=="mode"){ | |
230 mode=value; | |
231 }*/ | |
232 } | |
233 } | |
234 } | |
235 | |
236 function loadDataset(name, fileName){ | |
237 // zoe added | |
238 if (fileName==undefined) { | |
239 // Get file json object from POST from LGDataverse by fileId in url | |
240 var fileId = urlParameter['fileId']; | |
241 var lgdv_url = lgdataverse_url + "getDatafile?fileId="+fileId; // lgdataverse_url is a global var | |
242 console.log("lgdv_url:"+lgdv_url); | |
243 | |
244 var fileData = {}; | |
245 $.ajax({ | |
246 url : lgdataverse_url+"getDatafile", | |
247 async : false, | |
248 type : 'GET', | |
249 data: 'fileId='+fileId, | |
250 dataType: "json", | |
251 success: function (data) { | |
252 console.log("getting file from LGDataverse success!"); | |
253 fileData = data; | |
254 }, | |
255 error: function (data) { | |
256 console.log("getting file from LGDataverse failed!" + data); | |
257 alert("Data "+ urlParameter['name'] +" CANNOT be shown on the map."); | |
258 | |
259 } | |
260 }).done(function(result) { | |
261 | |
262 }); | |
263 | |
264 if (fileData.state == "ok") { | |
265 /* | |
266 var json = [ | |
267 { | |
268 // these fields are required in map | |
269 "description":"20卷 ╱ (民國) 崔正春修 (民國) 尚希寳纂 ╱ 民國十八年鉛印本", | |
270 "lat":36.974178, | |
271 "lon":115.259262, | |
272 "place":"威縣", | |
273 // ---- | |
274 "tableContent":{ | |
275 // these fields are shown as columns in the table | |
276 "description":"20卷 ╱ (民國) 崔正春修 (民國) 尚希寳纂 ╱ 民國十八年鉛印本", | |
277 "name":"(民國) 威縣志", | |
278 "place":"威縣", | |
279 "testColumn1":"content1", | |
280 "testColumn2":"content2", | |
281 "testColumn3":"content3", | |
282 | |
283 } | |
284 } | |
285 ]; | |
286 */ | |
287 | |
288 var dataCSVformat = fileData.file.dataString; | |
289 dataCSVformat = dataCSVformat.substring(0, dataCSVformat.length-2); // remove the last two characters which are "\n" | |
290 // it will cause download error since the last element in table is null | |
291 //console.log(dataCSVformat); | |
292 var json = GeoTemConfig.convertCsv(dataCSVformat); | |
293 GeoTemConfig.addDataset(new Dataset(GeoTemConfig.loadJson(json),name)); | |
294 | |
295 } | |
296 } | |
297 else { | |
298 // zoe end | |
299 var fileURL = fileName, tmpObj; | |
300 | |
301 if(fileName == name){ | |
302 | |
303 //means download directly | |
304 for(var idx = 0, len = datasetArray.length; idx < len; idx++){ | |
305 | |
306 tmpObj = datasetArray[idx]; | |
307 if(name == tmpObj.name){ | |
308 | |
309 if(tmpObj.isTOC === "1"){ | |
310 fileURL = "https://localgazetteers-test.mpiwg-berlin.mpg.de/lg-api/sections/export.map?filters=" | |
311 + tmpObj.filters | |
312 + "&fileName="+ tmpObj.name; | |
313 } | |
314 else { | |
315 fileURL = "https://localgazetteers-test.mpiwg-berlin.mpg.de/lg-api/contents/export.map?keywords=" | |
316 + tmpObj.keywords | |
317 + "&filters="+ tmpObj.filters | |
318 + "&excludes="+ tmpObj.excludes | |
319 + "&fileName="+ tmpObj.name; | |
320 } | |
321 break; | |
322 } | |
323 } | |
324 } | |
325 | |
326 var csvFile=GeoTemConfig.getCsv(fileURL, | |
327 function(json){ | |
328 GeoTemConfig.addDataset(new Dataset(GeoTemConfig.loadJson(json), name)); | |
329 | |
330 //checking the checkbox has to be done here, because if done in the each loop below, it will be unchecked again in the Publisher.Subscribe function. For the Publisher.Subscribe function may be called when the dataset is not yet loaded, which causes dataset.length to be 0 and unchecks the checkbox | |
331 $("#datasetContainer input:checkbox[value*='" + fileName + "']").prop("checked",true); | |
332 //rename the column "name" to "title" | |
333 $(".headerLabel").each(function(){ | |
334 if ($(this).html() == "name"){ | |
335 $(this).empty(); | |
336 $(this).html("title"); | |
337 } | |
338 }); | |
339 /*//this is redundant when calling GeoTemConfig.addDataset | |
340 //display in all widgets | |
341 map.display(GeoTemConfig.datasets); | |
342 timeline.display(GeoTemConfig.datasets); | |
343 table.display(GeoTemConfig.datasets); | |
344 pieChart.display(GeoTemConfig.datasets); */ | |
345 | |
346 } | |
347 | |
348 ); | |
349 | |
350 } | |
351 | |
352 } | |
353 | |
354 function closeDataset(name,fileName){ | |
355 var idx; | |
356 //find the dataset to close by name | |
357 var data=$.grep(GeoTemConfig.datasets,function(val,key){ | |
358 if(val.label==name){ | |
359 idx=key; | |
360 } | |
361 return val.label==name; | |
362 }); | |
363 //GeoTemConfig.datasets.splice(idx,1); | |
364 GeoTemConfig.removeDataset(idx); | |
365 } | |
366 | |
367 function initWidget(){ | |
368 var mapElem=document.getElementById("mapContainer"); | |
369 map=new WidgetWrapper(); | |
370 var mapWidget=new MapWidget(map,mapElem,{ | |
371 mapTitle:"", | |
372 minimumRadius:2, | |
373 baseLayer:'世界地形圖', //底圖 | |
374 alternativeMap:backgroundMapArray | |
375 }); | |
376 | |
377 var overlayLoaderElem=document.getElementById("overlayLoaderContainer"); | |
378 var overlayLoader=new WidgetWrapper(); | |
379 var overlayLoaderWidget=new OverlayloaderWidget(overlayLoader,overlayLoaderElem); | |
380 overlayLoaderWidget.attachMapWidget(mapWidget); | |
381 //insert overlay checkboxes | |
382 $.each(overlayArray,function(idx,obj){ | |
383 var name=obj.name; | |
384 var file=obj.file; | |
385 var preload=obj.preload; | |
386 var optionObj=$("<div class='option'></div>"); | |
387 $("#overlayContainer").append(optionObj); | |
388 var checkBoxObj=$("<input type='checkbox' name='"+name+"' value='"+file+"'>"); | |
389 checkBoxObj.prop("checked",preload); | |
390 optionObj.append(checkBoxObj); | |
391 var nameObj=$("<div class='label'>"+name+"</div>"); | |
392 optionObj.append(nameObj); | |
393 if(preload){ | |
394 overlayLoaderWidget.overlayLoader.distributeArcGISWMS(url,file); | |
395 } | |
396 }); | |
397 | |
398 $("#overlayContainer input:checkbox").click(function(e){ | |
399 //dirty insertion and deletion, delete all the overlays and insert them in the specified sequence | |
400 //in order to maintain the sequence of overlays, so that the smaller one will always be on top of the bigger ones | |
401 //in the overlayLoader, clicking on the "x" button deletes the overlay. Here deletion is done by triggering the click event rather than deleting the overlay directly | |
402 while($("#overlayLoaderContainer div:last-child a").length!=0){ | |
403 $("#overlayLoaderContainer div a:nth-child(1)").click(); | |
404 } | |
405 | |
406 $("#overlayContainer input:checkbox").each(function(){ | |
407 if($(this).is(":checked")){ | |
408 overlayLoaderWidget.overlayLoader.distributeArcGISWMS(url, | |
409 $(this).val()); | |
410 } | |
411 }); | |
412 //stop the event from propagating, or the list would close every time the user checks an item | |
413 e.stopPropagation(); | |
414 /* | |
415 //normal insertion and deletion | |
416 if($(this).is(":checked")){//selected | |
417 overlayLoaderWidget.overlayLoader.distributeArcGISWMS("http://geoserver.mpiwg-berlin.mpg.de/geoserver/China_Monograph_Project/ows", | |
418 $(this).val()); | |
419 }else{//deselect | |
420 var name=url+" - "+$(this).val(); | |
421 var layerNameArray=$("#overlayLoaderContainer > div:last-child").html().split('<a href="">(x)</a>'); | |
422 var idx=$.inArray(name,layerNameArray); | |
423 $("#overlayLoaderContainer div a:nth-child("+(idx+1)+")").click(); | |
424 }*/ | |
425 }); | |
426 | |
427 | |
428 //insert dataset checkboxes | |
429 $.each(datasetArray,function(idx,obj){ | |
430 var name=obj.name; | |
431 var file= (obj.isFile) ? obj.file : name; | |
432 var preload=obj.preload; | |
433 var optionObj=$("<div class='option'></div>"); | |
434 | |
435 $("#datasetContainer ").append(optionObj); | |
436 | |
437 var checkBoxObj=$("<input type='checkbox' name='"+name+"' value='"+ file +"'>"); | |
438 | |
439 optionObj.append(checkBoxObj); | |
440 //checkBoxObj.prop("checked",preload); | |
441 var nameObj=$("<div class='label'>"+name+"</div>"); | |
442 | |
443 optionObj.append(nameObj); | |
444 if(preload){ | |
445 loadDataset(name, file); | |
446 } | |
447 }); | |
448 | |
449 $("#datasetContainer input:checkbox").click(function(){ | |
450 /* | |
451 //dirty insertion and deletion, too slow | |
452 while($("#tableContainer .tableTabs").children().length!=0){ | |
453 //console.log($("#tableContainer .tableTabs").children().length); | |
454 //$("#tableContainer .tableTabs .tableTab:nth-child(1) .smallButton")[0].onclick(); | |
455 GeoTemConfig.removeDataset(0); | |
456 } | |
457 | |
458 $("#datasetContainer .content input:checkbox").each(function(){ | |
459 if($(this).is(":checked")){ | |
460 loadDataset($(this).attr("name"),$(this).val()); | |
461 } | |
462 }); | |
463 */ | |
464 if($(this).is(":checked")){//selected | |
465 loadDataset($(this).attr("name"), $(this).val()); | |
466 }else{ | |
467 closeDataset($(this).attr("name"), $(this).val()); | |
468 } | |
469 }); | |
470 | |
471 var timelineElem=document.getElementById("timelineContainer"); | |
472 timeline=new WidgetWrapper(); | |
473 | |
474 var timelineWidget=new FuzzyTimelineWidget(timeline,timelineElem,{ | |
475 timelineTitle:"" | |
476 }); | |
477 | |
478 var tableElem=document.getElementById("tableContainer"); | |
479 table=new WidgetWrapper(); | |
480 var tableWidget=new TableWidget(table,tableElem); | |
481 | |
482 var pieChartElem=document.getElementById("pieChartContainer"); | |
483 pieChart=new WidgetWrapper(); | |
484 var pieChartWidget=new PieChartWidget(pieChart,pieChartElem); | |
485 //pieChartWidget.addPieChart(0,"place"); | |
486 } | |
487 | |
488 function initToolbar(){ | |
489 var mode=1; | |
490 if(urlParameter['mode']!=undefined) | |
491 mode=urlParameter['mode']; | |
492 if(mode==1){//locate the overlay selector on the map toolbar | |
493 $("#overlayIcon").hide(); | |
494 var overlayContainerObj=$("#overlayContainer"); | |
495 var overlayTitleObj=$("<td>Overlay</td>"); | |
496 overlayTitleObj.insertAfter("#mapContainer .absoluteToolbar tr:nth-child(1) td:nth-child(1)"); | |
497 var overlaySelectorObj=$("<td></td>"); | |
498 var overlayContainerPadding=5; | |
499 overlayContainerObj.css("padding",overlayContainerPadding+"px"); | |
500 //give the overlay selector the same look as the that of the background map and adjust the width | |
501 overlaySelectorObj.append("<div class='dropdownLeft'></div>"); | |
502 overlaySelectorObj.append("<div class='dropdownSelection'>select overlays</div>"); | |
503 overlaySelectorObj.append("<div class='dropdownButtonEnabled'></div>"); | |
504 overlaySelectorObj.insertAfter("#mapContainer .absoluteToolbar tr:nth-child(2) td:nth-child(1)"); | |
505 var w=parseInt(overlayContainerPadding*2+overlayContainerObj.width()); | |
506 overlaySelectorObj.width(w); | |
507 w=w-overlaySelectorObj.children(".dropdownLeft").width()-overlaySelectorObj.children(".dropdownButtonEnabled").width(); | |
508 overlaySelectorObj.children(".dropdownSelection").width(w); | |
509 overlaySelectorObj.append(overlayContainerObj); | |
510 //hide the overlay list and adjust the position | |
511 overlayContainerObj.hide(); | |
512 overlayContainerObj.css("position","absolute"); | |
513 var t=overlaySelectorObj.offset().top-parseInt(overlayContainerObj.css("padding"))+overlaySelectorObj.children(".dropdownButtonEnabled").height(); | |
514 //var l=overlaySelectorObj.offset().left-overlayContainerObj.width()/2; | |
515 var l=overlaySelectorObj.position().left-$("#rightWrapper").css("margin-left"); | |
516 overlayContainerObj.css("top",t); | |
517 overlayContainerObj.css("left",l); | |
518 overlayContainerObj.css("z-index",20000); | |
519 //toggle the visibility of the overlay list by clicking on the selector | |
520 overlaySelectorObj.click(function(){ | |
521 var visible=overlayContainerObj.is(":visible"); | |
522 if(visible){ | |
523 $(this).children(".selector").show(); | |
524 overlayContainerObj.hide(); | |
525 }else{ | |
526 $(this).children(".selector").hide(); | |
527 overlayContainerObj.show(); | |
528 } | |
529 }); | |
530 } | |
531 | |
532 $(".icon").each(function(){//adjust the position of the windows | |
533 var t=$(this).offset().top; | |
534 var l=$("#rightWrapper").css("margin-left"); | |
535 var windowName="."+$(this).attr("id"); | |
536 windowName=windowName.replace("Icon",""); | |
537 var windowObj=$(windowName); | |
538 windowObj.css("top",t); | |
539 windowObj.css("left",l); | |
540 }); | |
541 | |
542 // The following two sections are to hide/show the windows | |
543 $(".icon").click(function(){//toggle the visibility of the window by clicking on the icons | |
544 var windowName="."+$(this).attr("id"); | |
545 windowName=windowName.replace("Icon",""); | |
546 var windowObj=$(windowName); | |
547 if(windowObj.is(":visible")){ | |
548 //hide the window | |
549 windowObj.hide(); | |
550 $(this).removeClass("selected"); | |
551 }else{ | |
552 //show the window | |
553 if(windowObj.children(".windowWidgetBar").children(".visibilityButton").html()=="+"){ | |
554 windowObj.children(".windowWidgetBar").children(".visibilityButton").click(); | |
555 } | |
556 windowObj.show(); | |
557 $(this).addClass("selected"); | |
558 } | |
559 }); | |
560 | |
561 $(".windowWidget .windowWidgetBar .visibilityButton").click(function(){ | |
562 if($(this).html()=="+"){//if the window is minimized, it should be hidden | |
563 $(this).parent().parent().hide(); | |
564 var windowName=$(this).parent().parent().attr("class"); | |
565 windowName=windowName.replace("container",""); | |
566 windowName=windowName.replace("windowWidget",""); | |
567 windowName=windowName.replace("ui-draggable",""); | |
568 windowName=windowName.replace(" ",""); | |
569 windowName=windowName.trim(); | |
570 windowName="#"+windowName+"Icon"; | |
571 $(windowName).removeClass("selected"); | |
572 } | |
573 }); | |
574 | |
575 } |