...
 
Commits (8)
/* Translators (2009 onwards):
* - Damouns
* - IAlex
*/
/**
* @requires OpenLayers/Lang.js
*/
/**
* Namespace: OpenLayers.Lang["fr"]
* Dictionary for Français. Keys for entries are used in calls to
* <OpenLayers.Lang.translate>. Entry bodies are normal strings or
* strings formatted for use with <OpenLayers.String.format> calls.
*/
OpenLayers.Lang["fr"] = OpenLayers.Util.applyDefaults({
'unhandledRequest': "Requête non gérée, retournant ${statusText}",
'Permalink': "Permalien",
'Overlays': "Calques",
'Base Layer': "Calque de base",
'noFID': "Impossible de mettre à jour un objet sans identifiant (fid).",
'browserNotSupported': "Votre navigateur ne supporte pas le rendu vectoriel. Les renderers actuellement supportés sont : \n${renderers}",
'minZoomLevelError': "La propriété minZoomLevel doit seulement être utilisée pour des couches FixedZoomLevels-descendent. Le fait que cette couche WFS vérifie la présence de minZoomLevel est une relique du passé. Nous ne pouvons toutefois la supprimer sans casser des applications qui pourraient en dépendre. C\'est pourquoi nous la déprécions -- la vérification du minZoomLevel sera supprimée en version 3.0. A la place, merci d\'utiliser les paramètres de résolutions min/max tel que décrit sur : http://trac.openlayers.org/wiki/SettingZoomLevels",
'commitSuccess': "Transaction WFS : SUCCES ${response}",
'commitFailed': "Transaction WFS : ECHEC ${response}",
'googleWarning': "La couche Google n\'a pas été en mesure de se charger correctement.\x3cbr\x3e\x3cbr\x3ePour supprimer ce message, choisissez une nouvelle BaseLayer dans le sélecteur de couche en haut à droite.\x3cbr\x3e\x3cbr\x3eCela est possiblement causé par la non-inclusion de la librairie Google Maps, ou alors parce que la clé de l\'API ne correspond pas à votre site.\x3cbr\x3e\x3cbr\x3eDéveloppeurs : pour savoir comment corriger ceci, \x3ca href=\'http://trac.openlayers.org/wiki/Google\' target=\'_blank\'\x3ecliquez ici\x3c/a\x3e",
'getLayerWarning': "La couche ${layerType} n\'est pas en mesure de se charger correctement.\x3cbr\x3e\x3cbr\x3ePour supprimer ce message, choisissez une nouvelle BaseLayer dans le sélecteur de couche en haut à droite.\x3cbr\x3e\x3cbr\x3eCela est possiblement causé par la non-inclusion de la librairie ${layerLib}.\x3cbr\x3e\x3cbr\x3eDéveloppeurs : pour savoir comment corriger ceci, \x3ca href=\'http://trac.openlayers.org/wiki/${layerLib}\' target=\'_blank\'\x3ecliquez ici\x3c/a\x3e",
'Scale = 1 : ${scaleDenom}': "Echelle ~ 1 : ${scaleDenom}",
'W': "O",
'E': "E",
'N': "N",
'S': "S",
'reprojectDeprecated': "Vous utilisez l\'option \'reproject\' sur la couche ${layerName}. Cette option est dépréciée : Son usage permettait d\'afficher des données au dessus de couches raster commerciales.Cette fonctionalité est maintenant supportée en utilisant le support de la projection Mercator Sphérique. Plus d\'information est disponible sur http://trac.openlayers.org/wiki/SphericalMercator.",
'methodDeprecated': "Cette méthode est dépréciée, et sera supprimée à la version 3.0. Merci d\'utiliser ${newMethod} à la place.",
'proxyNeeded': "Vous avez très probablement besoin de renseigner OpenLayers.ProxyHost pour accéder à ${url}. Voir http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost"
});
......@@ -105,3 +105,20 @@
font-size: 0.65em;
font-weight: normal;
}
/* sorting */
.order {
display: none;
}
.order + label img {
cursor: pointer;
margin: 1px 1px 1px 1px;
vertical-align: middle;
}
.order:checked + label img {
border: 1px solid #FFF;
margin: 0;
}
......@@ -41,7 +41,7 @@ WifiMap = {
//Layer de base (OSM actuellement)
this.map.addLayers([this.layer]);
//Controles divers (ceux ci-dessous sont visibles)
this.map.addControl(new OpenLayers.Control.LayerSwitcher());
this.map.addControl(new WifiMap.ModeSwitcher({'wifiMap': this}));
this.map.addControl(new OpenLayers.Control.Navigation());
this.map.addControl(new OpenLayers.Control.PanZoom());
......@@ -112,6 +112,12 @@ WifiMap = {
//Clean up last marker
var old = this.marker;
var highlighted = this.highlighted;
var type = "on";
if( xml.hasAttribute('offline'))
type = "off";
this.layer = that.bornesLayers[type]; //On définit layer même
//S'il n'est pas sûr qu'on placera la borne sur la carte
if(old) {
this.highlight(false);
this.layer.removeMarker(old);
......@@ -134,9 +140,6 @@ WifiMap = {
this.mapPosition = new OpenLayers.LonLat(x,y);
this.mapPosition.transform(that.projections.gps,that.projections.map);
var type = "on";
if( xml.hasAttribute('offline'))
type = "off";
//On va compter le nombre de client et en déduire la taille
var counts = xml.getElementsByTagName('client_count');
......@@ -154,7 +157,6 @@ WifiMap = {
this.marker = new OpenLayers.Marker(this.mapPosition,icon);
this.layer = that.bornesLayers[type];
this.layer.addMarker(this.marker);
this.update_marker_size();
......@@ -220,6 +222,7 @@ WifiMap = {
html.className = html.className.replace(/ *template ?/,'');
html.className += ' ' + (xml.hasAttribute('offline')?'non-':'') + 'connected';
this.offline = xml.hasAttribute('offline');
var titleTag = getElementsByClassName(html,'hostname')[0];
setInnerText(titleTag,hostname);
......@@ -248,6 +251,7 @@ WifiMap = {
templates.fillSpanClass(html,'uptime',
format_uptime(parseInt(getInnerText(child))));
else if( child.tagName == 'client_count') {
this.count = parseInt(getInnerText(child));
var c = parseInt(getInnerText(child));
templates.fillSpanClass(html,'count', "(" + c +" client" + (c>1?'s)':')'));
}
......@@ -290,16 +294,19 @@ WifiMap = {
if(this.html_list)
this.html_list.parentNode.replaceChild(html,this.html_list);
else //Tri par insertion
{
var insert = template.parentNode.firstChild;
while( insert && !(insert.borne && this.token_location() < insert.borne.token_location()))
{
insert = insert.nextSibling; }
template.parentNode.insertBefore(html,insert);
}
this.place(template.parentNode, html);
this.html_list = html; //Référence borne -> objet html
this.html_cont = template.parentNode;
};
borne.place = function(cont, html) {
var insert = cont.firstChild;
while( insert && !(insert.borne && this.wifiMap.cmp(insert.borne,this)))
{
insert = insert.nextSibling; }
cont.insertBefore(html,insert);
},
//Renvoie un token afin d'aider au tri
borne.token_location = function() {
if( !this.location) return undefined;
......@@ -307,11 +314,52 @@ WifiMap = {
//doivent être triés à la fin
var res = this.location.match(/^Au ([0-9])(.*)$/);
return res == null?['z','z',this.location]:res.reverse();
}
};
return borne;
},
setOrder: function (main, way) {
var i = 0;
for( ; i < this.orders.length; i++)
if( this.orders[i].name == main) break;
if( way != 'down')
this.cmp = function(a,b) { return this.orders[i].fct(b,a); }
else
this.cmp = this.orders[i].fct;
this.sort();
},
sort: function() {
for( var b in this.listeBornes )
this.listeBornes[b].html_cont.removeChild(this.listeBornes[b].html_list);
for( var b in this.listeBornes )
this.listeBornes[b].place(this.listeBornes[b].html_cont,
this.listeBornes[b].html_list);
},
'cmp': function (a,b) {
return this.orders[0].fct(a,b);
},
'orders': [
{ label: 'Lieux', name: 'location', def: 'down',
fct: function (a,b) { return a.token_location() > b.token_location(); }
},
{
label: 'Nombre de clients', name: 'clients',
fct: function (a,b) {
if( a.count == undefined || a.offline) return true;
if( b.count == undefined || b.offline) return false;
return a.count < b.count;
}
},
{
label: 'Alphabétique', name: 'alphabeat',
fct: function (a,b) { return a.hostname > b.hostname; }
}
],
//Liste de bornes (en fait, un dictionnaire)
'listeBornes': {},
......@@ -327,6 +375,7 @@ WifiMap = {
this.listeBornes[hostname] = this.make_borne(hostname);
this.listeBornes[hostname].update_info(xml);
}
this.sort();
},
//Met à jour la date de dernière màj
......@@ -364,7 +413,94 @@ WifiMap = {
}
this.highlighted = this.listeBornes[hostname];
this.highlighted.highlight(true);
window.location.hash = hostname;
this.slideTo(this.highlighted.html_list);
},
'slideTo': function(elem) {
//Animation de slideover
var scroll = elem.parentNode;
var from = scroll.scrollTop;
var to = elem.offsetTop - scroll.offsetTop;
var i = 0, count = 10;
function iter() {
i++;
scroll.scrollTop = (i*to + (count - i)*from)/count;
if( i < count) setTimeout(iter,20);
}
setTimeout(iter,20);
}
}
WifiMap.ModeSwitcher = OpenLayers.Class(OpenLayers.Control.LayerSwitcher,
{
parentClass: OpenLayers.Control.LayerSwitcher.prototype,
orderChoiceLbl: null,
wifiMap: null,
initialize: function (options) {
this.parentClass.initialize.apply(this, options);
this.wifiMap = options['wifiMap'];
},
loadContents: function() {
this.parentClass.loadContents.apply(this);
this.orderChoice = document.createElement('div');
this.orderChoice.innerHTML = "Ordonner par<br>";
this.layersDiv.appendChild(this.orderChoice);
var orders = this.wifiMap.orders;
for( var i =0; i < 2*orders.length; i++) {
var j = Math.floor(i/2);
var choice = document.createElement('input');
var id = "choice" + i;
choice.type = 'radio';
var way = i % 2 ?'up':'down';
var label = document.createElement('label');
var img = document.createElement('img');
img.src = '/static/img/sort-' + way + '.png';
label.appendChild(img);
label.htmlFor = id;
choice.className = 'order ' + way;
choice.name = 'order';
choice.id = id;
choice.checked = way == orders[j].def;
choice.value = orders[j].name + '-' + way;
choice.onchange = this.updateOrder.bind(this);
this.orderChoice.appendChild(choice);
//this.orderChoice.appendChild(document.createElement('span')); //Trick css
this.orderChoice.appendChild(label);
if( !(i % 2) )
this.orderChoice.appendChild(document.createTextNode(orders[j].label));
else
this.orderChoice.appendChild(document.createElement('br'));
}
},
updateMap: function() {
this.parentClass.updateMap.apply(this);
for( b in this.wifiMap.listeBornes ) {
var ap = this.wifiMap.listeBornes[b];
var layer = ap.layer || this.wifiMap.bornesLayers.autres;
ap.html_list.style.display = layer.visibility?'':'none';
}
},
updateOrder: function () {
var radios = document.getElementsByName('order');
var res = [this.wifiMap.orders[0].name,'down'];
for( var i = 0; i < radios.length; i++) {
if( radios[i].checked ) {
res = radios[i].value.split('-');
break;
}
}
this.wifiMap.setOrder(res[0],res[1]);
}
//CLASS_NAME: 'WifiMap.ModeSwitcher'
});
{% extends "template.html" %}
{% block title %}Carte wifi{% endblock %}
{% block title %}Carte WiFi{% endblock %}
{% block h1 %} <h1>Carte wifi</h1> {% endblock %}
{% block head %}
<link rel="stylesheet" type="text/css" href="/static/css/wifimap.css" />
<script type="text/javascript" src="/static/js/common.js"></script>
<script type="text/javascript" src="/static/OpenLayers/OpenLayers.js"></script>
<script type="text/javascript" src="/static/js/wifimap.js"></script>
<!-- Lang -->
<script type="text/javascript" src="/static/OpenLayers/Lang/fr.js"></script>
<script type="text/javascript">OpenLayers.Lang.setCode('fr');</script>
{% endblock %}
{% block content %}
Dernière mise à jour il y a <label id="last_update"> </label>
......