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
}
});
}
});