Commit c7c42861 authored by ZettaScript's avatar ZettaScript

Choose distance for viewing certifs

parent 50b74c67
# WorldWotMap
WorldWotMap v0.2.0, © 2018 Pascal Engélibert, Licence GNU AGPL v3
WorldWotMap v0.3.0, © 2018 Pascal Engélibert, Licence GNU AGPL v3
Ceci est une carte affichant les comptes Ğ1 et leurs certifications. La carte peut être incomplète, car il est facultatif de renseigner sa position géographique sur Cesium+.
......@@ -39,13 +39,15 @@ Vous pouvez sélectionner une personne en cliquant sur son point. Les certificat
* **zoom** : Niveau de zoom
* **pubkey** : Clé publique du compte à sélectionner (ne se déplace pas vers lui)
* **only** : Nombre de niveaux de certifications à afficher autour du compte sélectionné. Une valeur numérique supérieure _0_ active ce mode.
* exemple :
http://127.0.0.1/g1/worldwotmap.html?lat=47.331377157798244&lon=2.9443359375&zoom=6&pubkey=45GfjkWCWQhJ3epJVGC2NSg1Rcu4Ue1vDD3kk9eLs5TQ&only=3#map
* **goto** : Centrer la carte sur le compte sélectionné. La valeur est le niveau de zoom.
* exemple :
Zoom sur _tuxmain_ https://zettascript.org/tux/g1/worldwotmap.html?pubkey=45GfjkWCWQhJ3epJVGC2NSg1Rcu4Ue1vDD3kk9eLs5TQ&goto=14
## Contribuer
* Pouvoir afficher uniquement les certifications à _n_ niveaux autour du compte sélectionné. Pouvoir représenter la distance au compte sélectionné en faisant varier la couleur ou l'opacité des lignes.
* Pouvoir représenter la distance d'un compte/d'une certification au compte sélectionné en faisant varier la couleur ou l'opacité.
* Changer d'époque (afficher la wotmap à un temps donné) (à voir avec les données Cesium+)
* Vérifier l'utilisation des paramètres GET pour éviter le XSS
* Les lignes dessinées dans le mode "afficher uniquement les certifications du compte sélectionné" ne s'effacent pas bien après déselection du compte.
......@@ -81,7 +81,7 @@ a, a:visited {
<div id="header-text">
<h1>WorldWotMap</h1>
<a href="#map">&#11015; Voir la map &#11015;</a>
<p>WorldWotMap v0.2.0, &copy; 2018 <a href="https://zettascript.org/contact.php">Pascal Engélibert</a> (<a href="https://www.gnu.org/licenses/agpl.html">Licence GNU AGPL v3</a>)<br />
<p>WorldWotMap v0.3.0, &copy; 2018 <a href="https://zettascript.org/contact.php">Pascal Engélibert</a> (<a href="https://www.gnu.org/licenses/agpl.html">Licence GNU AGPL v3</a>)<br />
Dépôts Git&nbsp;: <a href="https://framagit.org/ZettaScript/worldwotmap/">Framagit</a> et <a href="https://git.duniter.org/tuxmain/worldwotmap">Duniter</a></p>
<p>Ceci est une carte affichant les comptes Ğ1 et leurs certifications. La carte peut être incomplète, car il est facultatif de renseigner sa position géographique sur Cesium+.</p>
<a href="gencache.py">Programme Python pour exporter les données de duniter.db</a>
......@@ -195,6 +195,49 @@ function mapInactiveAccount(pubkey) {
showURL();
}
// mode: true=received / false=issued
function getAccountsWithDistance(pubkey, distance, mode) {
var c = [];// certs
var a = {};// accounts
a[pubkey] = 0;
var d = 0;
var as = {0:pubkey};// accounts stack
var cs = {0:[]};// certs stack
if(mode)
cs[0] = accounts[pubkey].certsReceived.slice();
else
cs[0] = accounts[pubkey].certsIssued.slice();
// TODO: only d=1 is counted
// test cmd: getAccountsWithDistance("45GfjkWCWQhJ3epJVGC2NSg1Rcu4Ue1vDD3kk9eLs5TQ",3,false)
var i = 0;
while(cs[0].length > 0 && i < 10000) {
while(!(d in cs) || cs[d].length == 0 || d >= distance) {
d --;
}
var cert = cs[d].pop();
d ++;
c.push(cert);
if(mode) {
if(!(certs[cert].issuer in a) || d < a[certs[cert].issuer]) {
a[certs[cert].issuer] = d;
as[d] = certs[cert].issuer;
cs[d] = accounts[certs[cert].issuer].certsReceived.slice();
}
}
else {
if(!(certs[cert].receiver in a) || d < a[certs[cert].receiver]) {
a[certs[cert].receiver] = d;
as[d] = certs[cert].receiver;
cs[d] = accounts[certs[cert].receiver].certsIssued.slice();
}
}
i ++;
}
return [a, c];
}
function onlyShowCertsOfSelected() {
for(var cert in active_certs) {
active_certs[cert][1].remove();
......@@ -207,7 +250,7 @@ function onlyShowCertsOfSelected() {
p_certlines.style.display = "none";
var show_certs = [];
if(document.getElementById("mapmenu-idcard-onlycertsofsel-t").value == "all" ||
/*if(document.getElementById("mapmenu-idcard-onlycertsofsel-t").value == "all" ||
document.getElementById("mapmenu-idcard-onlycertsofsel-t").value == "received") {
for(var cert in accounts[active_account].certsReceived) {
show_certs.push(accounts[active_account].certsReceived[cert]);
......@@ -218,8 +261,16 @@ function onlyShowCertsOfSelected() {
for(var cert in accounts[active_account].certsIssued) {
show_certs.push(accounts[active_account].certsIssued[cert]);
}
}*/
if(document.getElementById("mapmenu-idcard-onlycertsofsel-t").value == "all" ||
document.getElementById("mapmenu-idcard-onlycertsofsel-t").value == "received") {
show_certs = show_certs.concat(getAccountsWithDistance(active_account, document.getElementById("mapmenu-idcard-onlycertsofsel-n").value, true)[1]);
}
if(document.getElementById("mapmenu-idcard-onlycertsofsel-t").value == "all" ||
document.getElementById("mapmenu-idcard-onlycertsofsel-t").value == "issued") {
show_certs = show_certs.concat(getAccountsWithDistance(active_account, document.getElementById("mapmenu-idcard-onlycertsofsel-n").value, false)[1]);
}
console.log(show_certs);
for(var cert in show_certs) {
var color = "black";
if(certs[show_certs[cert]].issuer == active_account)
......@@ -232,7 +283,6 @@ function onlyShowCertsOfSelected() {
active_certs.push([show_certs[cert], line]);
active_ncerts ++;
}
// TODO: show certs for n levels around active_account
}
function showURL() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment