function boleanXOR(a,b) { return ( a || b ) && !( a && b ); } $(function(){ // Create the tree inside the
element. $("#mytree").fancytree({ source: { url: "main-tree.php", cache: false }, lazyLoad: function(event, data) { var node = data.node; // Issue an ajax request to load child nodes data.result = { url: "server-tree.php", data: {server: node.data.server, baseLayers: "IGNFGP-tile-WM,cartes,v,IGNFGP-tile-WM,orthos,n,OSM,OSM,n,utilityserver,whiteimg,n"} } }, // L'événement activate permet d'afficher une page liée éventuelle (node.data.href) // ou d'afficher la page bookmark (node.data.bookmark) activate: function(event, data){ var node = data.node, orgEvent = data.originalEvent || {}; // alert("node="+node); // alert("orgEvent.ctrlKey="+orgEvent.ctrlKey+", orgEvent.metaKey="+orgEvent.metaKey); if (node.data.tools) { context = JSON.stringify(mapContext.getContext()); window.open('tools.php?context='+encodeURIComponent(context),'tools'); } else if (node.data.href) { window.open(node.data.href, (orgEvent.ctrlKey || orgEvent.metaKey) ? "_blank" : node.data.target); } }, // L'événement click permet d'activer/désactiver une couche // L'activation se fait sur les noeuds dont node.data.protocol vaut 'tile' ou 'WMS' // node.data.lyrid contient alors l'identifiant renvoyé par mapContext et node.data.origTitle contient le titre d'origine // La désactivation se fait sur les noeuds dont le node.data.lyrid est défini et non null // Si shiftKey est enfoncée alors l'action est modifiée // Si ctrlKey est enfoncée alors l'action n'est ni une activation/désactivation mais un pan/zoom si node.data.center est défini click: function(event, data){ // alert("click on"+data.node); // alert("event.ctrlKey="+event.ctrlKey+" event.shiftKey="+event.shiftKey); var node = data.node, orgEvent = data.originalEvent || {}; if (event.ctrlKey && event.shiftKey && node.data.lfunc) { alert("page de diagnostic"); if (node.data.lfunc==='L.tileLayer.wms') { window.open("showlayer.php?protocol=WMS&url="+encodeURIComponent(node.data.url)+ "&layer="+node.data.options.layers+ "¢er="+map.getCenter().lat+','+map.getCenter().lng+ "&zoom="+map.getZoom(), 'diagnostic'); } else if (node.data.lfunc==='L.tileLayer') { window.open("showlayer.php?protocol=tile&url="+encodeURIComponent(node.data.url)+ "¢er="+map.getCenter().lat+','+map.getCenter().lng+ "&zoom="+map.getZoom(), 'diagnostic'); } } // node.data.lyrid indique que la couche a été fabriquée et est affichée else if (!event.ctrlKey && node.data.lyrid) { // alert("Suppression de la couche "+node.title); mapContext.removeLayer(node.data.lyrid); node.data.lyrid = null; node.setTitle(node.data.origTitle); } // Cas d'ajout d'une couche else if (!event.ctrlKey && node.data.lfunc) { layer = { title: node.title, server: node.data.server, lfunc: node.data.lfunc, lyrname: node.data.lyrname, url: node.data.url, options: node.data.options }; // Cas d'ajout d'une couche L.tileLayer if (node.data.lfunc==='L.tileLayer') { // alert("Ajout de la couche L.tileLayer "+node.title); if (boleanXOR(node.data.options.format=='image/jpeg', event.shiftKey)) node.data.lyrid = mapContext.addBaseLayer(layer); else node.data.lyrid = mapContext.addOverlay(layer); } // Cas d'ajout d'une couche L.tileLayer.wms else if (node.data.lfunc==='L.tileLayer.wms') { // alert("Ajout de la couche L.tileLayer.wms "+node.title); // Si shiftKey alors format jpeg en couche de base if (event.shiftKey) { node.data.options.format = 'image/jpeg'; node.data.lyrid = mapContext.addBaseLayer(layer); } else { // Si PAS shiftKey alors format png en couche superposée, éventuellement partiellement transparente node.data.options.format = 'image/png'; node.data.lyrid = mapContext.addOverlay(layer); } } node.data.origTitle = node.title; node.setTitle(''+node.title+''); } // Cas de zoom/pan vers un center et un zoom associé à l'objet else if (node.data.center) { map.setView(L.latLng(node.data.center[0], node.data.center[1]), node.data.zoom); // map.flyTo(L.latLng(node.data.center[0], node.data.center[1]), node.data.zoom); } } }); // On page load, activate node if node.data.href matches the url#href var tree = $(":ui-fancytree").fancytree("getTree"), frameHash = window.parent && window.parent.location.hash; if (frameHash) { frameHash = frameHash.replace("#", ""); tree.visit(function(n) { if( n.data.href && n.data.href === frameHash ) { n.setActive(); return false; // done: break traversal } }); } });