Un TiddlyWiki carto pour MLC


#1

Ces derniers mois je participe à la mise en place d’une monnaie locale complémentaire à Angoulême.

J’ai ainsi fait quelques infidélités à TiddlyWiki avec la mise en place d’un MediaWiki, l’occasion de tester l’extension Parsoid pour faciliter la prise en main.

Et puis hier soir pour ne pas perdre la main j’ai créé un TW tout simple :

https://tw5.xyz/tiddlywiki-carto-mlc.html

Je ne sais pas si nous l’utiliserons dans l’association, la personne en charge utilisant un tableur actuellement, mais vous serez sans doute d’accord avec moi qu’un TiddlyWiki est plutôt un bon candidat pour ce genre de tâche, à savoir collecter de l’information et la mettre en perspective :sunglasses:

Donc merci @sycom pour ton plugin !
(en 2019 je dois quitter la Charente pour revenir en Normandie (Évreux), j’espère que l’on pourra se rencontrer enfin :beers:)

Pour en revenir au TW, il n’a rien de spécial encore, juste le plugin Leaflet Map, un bouton pour l’ajout d’une fiche avec les champs personnalisés et quelques bricoles (cf le tiddler TiddlyWiki).

Je me demande si je pourrais rendre générique le code suivant ?

<$list filter="[tag[MonTag]]" emptyMessage="Pas encore de contenu">

</$list>

MonTag est en fait le nom du tiddler courant. Ça paraît simple, mais j’ai pas trouvé la bonne syntaxe.

Je pense que j’ajouterai un peu de code de todo liste, pour terminer l’exemple.


Petite question @sycom : pour déterminer les coordonnées GPS tu aurais une solution pour le faire via TW directement ? Est-ce qu’il serait possible d’intégrer l’API de https://geocode.xyz/api par exemple ?


#2

Bravo Sylvain pour cette infidélité :blush:

Pour rendre générique la liste,
est-ce que créer un tiddler “$:/n0d1/atout” taggué $:/tags/Macro
avec :

\define atout(quid:"Prestataires")
<$list filter="[tag[$quid$]]" emptyMessage="Pas encore de contenu">

</$list>
\end

Puis :

<<atout "Nature & Environnement">>

#3

En fait j’aimerai un équivalent de {{!!title}}, en variable avec le titre du tiddler courant pour compléter le nom de filtre [tag[MonTiddler]], vois-tu ?


#4

Mais il ne doit pas interpréter le code entre crochet. C’est dommage car il y a plusieurs syntaxe pour le même résultat :stuck_out_tongue_winking_eye:

<<currentTiddler>>

<$view field=title/> ou <$transclude field='title'/>

{{!!title}}


#5

Je cherche !

\define atout(quid:"Prestataires")
{{{ [tag[$quid$]] }}}
<$text text="$quid$"/>
\end

#6

Que penses-tu de ça :

<<list-links filter:"[tag<currentTiddler>] +[sort[title]]">>

#7

Exactement, c’est tag<currentTiddler> que je n’avais pas ! Merci de ton aide ! :+1:

Je peux donc conserver la forme initiale :

<$list filter="[tag<currentTiddler>]" emptyMessage="Pas encore de contenu">

</$list>

Où ta proposition pour avoir un liste à puce.


#8

Voilà ! Mais ta seconde question est bien plus intéressante :

Petite question @sycom : pour déterminer les coordonnées GPS tu aurais une solution pour le faire via TW directement ? Est-ce qu’il serait possible d’intégrer l’API de https://geocode.xyz/api par exemple ?

Je m’y suis déjà cassé les dents. C’est un problème peu évident, en parcourant la documentation : https://developer.mozilla.org/fr/docs/Apprendre/JavaScript/Client-side_web_APIs/Third_party_APIs

Ainsi tu peux faire un rendu :

<object width="640" height="400" data="http://www.colr.org/json/scheme/random">
</object>

<object width="640" height="400" data="http://pictaculous.com/api/1.0/">
</object>

avec un type de tiddler : text/html
Pour aller au-delà, ce qui me semble une nécessité, il faudrait étendre ce type à une requête API web pour lire les données. Ou bien trouver un moyen, de parser les données sur le DOM, je crois que @tobibeer a une solution pour ça.
http://tobibeer.github.io/tw5-plugins/#dom


#9

Après avoir installé le plugin Dom de @tobibeer, j’'en suis là :

<object id="geo" class="geo" width="100%" data="https://geocode.xyz/51.50354,-0.12768?geoit=json">
</object>

''Dom :''
<pre><$text text=<<domtext geo data>>/></pre>
<pre><$text text=<<domtext geo $innerHTML>>/></pre>

Le problème c’est que le rendu de Object se fait dans un <pre> sans id ni class. Je continue à fouiner.


#10

J’ai trouvé ici un classement non exhaustif de dizaine de milliers d’API :
https://www.programmableweb.com/category

C’est dire si ta question est tout sauf “petite:loudspeaker:

Catégorie “Map” : https://www.programmableweb.com/category/mapping/api


#11

Merci @oxydum pour tes investigations, et surtout désolé ! :sweat_smile:
En effet, la question n’est pas simple :stuck_out_tongue_winking_eye:


#12

Bonjour,

effectivement, ce sera chouette de se voir “en vrai”. Tiens moi au courant. Je suis plus souvent à Rouen (où je travaille) qu’à Evreux, mais je ne suis pas si loin…

J’ai vu qu’@oxydum avait trouvé la réponse à une de tes questions. Cette réponse figure déjà dans le code source de TiddlyWiki puisque chaque tiddler est capable de fournir la liste des tiddlers qu’il tague via le bouton :information_source: je ne suis pas aller voir, mais ça doit sensiblement s’approcher de ce qu’il t’a donné.

Pour la saisie des coordonnées GPS dans le wiki directement, c’est un sujet assez lourd. Comme toute interraction entre un widget et le wiki (ou plutôt un tiddler du wiki) c’est assez délicat.
C’est dans la roadmap du leaflet map plugin, mais sachant que c’est plutôt un des objectifs de la v2.0, que j’ai des bugs qui ne sont pas corrigés depuis un an et que la v1.0 n’a même pas d’horizon de production, ça risque d’être un peu long :confused:

En attendant, il est toujours possible d’utiliser le brouillon de ce que sera l’outil dans le wiki et qui utilise l’extension Draw pour Leaflet : http://sycom.github.io/TiddlyWiki-Plugins/leafletDraw.html

à bientôt,

Sylvain
@sycom


#13

J’ai un peu progressé pour récupérer des données API.

Soit la macro : $:/.macros/geopoint.js avec un field module-type => macro

(function(){
"use strict";
exports.name = "geopoint";
exports.params = [ {name: "tiddlername"},{name: "url"}];
exports.run = function(tiddlername,url) {
 var url = url || "None";
 var tiddlername = tiddlername || "None";
$tw.utils.httpRequest({ headers:"origin:*", url: url, callback: function (error,data){
    if (error){
    console.log("ERROR:"+error);
    }
    $tw.wiki.addTiddler({title:tiddlername, text:data, type: "application/x-tiddler-dictionary"});
    //console.log(data);
  }})
  return "[["+tiddlername+"]]";
};
})();

qui s’utilise ainsi :

<<geopoint “randomuser” “https://randomuser.me/api/?results=10”>>

La macro requête le site randomuser.me et crée le tiddler randomuser avec 10 résultats.

Bon maintenant, il faudrait coder :

<<geopoint “CetteVille” " “https://geocode.xyz/51.50354,-0.12768?geoit=jsonp&callback=test”>>

Mais ça ne fonctionne pas à cause d’une problématique CORS (CROSS-ORIGIN RESOURCE SHARING)

http://blog.inovia-conseil.fr/?p=202

Je me suis arraché les cheveux (et la tête) :crazy_face:


#14

Vraiment désolé j’insiste :sweat_smile:
Pour la problématique CORS, je vois qu’avec d’autres services il faut une clé de compte, c’est peut-être aussi le cas avec geocode.

(dommage geocod.io c’est que pour des adresses US et canadienne).


#15

Bonsoir Sylvain,

Voilà ! De bonnes nouvelles, j’ai trouvé ce site pour récupérer quelques infos sur les coordonnées de villes ici :

Tu peux voir comme ça marche bien en téléchargeant :

Dis-moi si ça t’aide :face_with_head_bandage:
Enjoy!


#16

:open_mouth: :star_struck: Waouh !

C’est un bel exemple en effet !

Ce dont j’ai besoin maintenant c’est de géocoder une adresse complète plutôt que la ville :smile:

Par exemple 10 Place du Palet 16000 Angoulême. Pour utiliser le géocoder de data.gouv.fr il me faut séparer les champs de la rue, complément, cp et ville, peut-être qu’il faudrait également en arriver là avec ta solution.

Encore merci pour tes recherches et travaux sur le sujet.


#17

Dans le tiddler $:/_template_ville
Tu ajoutes :

\define geoloc(tid, q)
<<geopoint  "$tid$" "https://koumoul.com/s/geocoder/api/v1/coord?q=$q$">>
\end

Puis tu l’utilises comme ça :

<<geoloc "10_Place_du_Palet_Angoulême" "10 Place du Palet 16000 Angoulême">> 

Tout simplement :face_with_hand_over_mouth:


#18

Au passage j’ai intégré le framework UIKit https://getuikit.com/
cela arrive lorsqu’on mène plusieurs sujets à la fois… :stuck_out_tongue:

Je pense qu’on peut aussi simplifier :

\define geoloc(q)
<<geopoint  "$q$" "https://koumoul.com/s/geocoder/api/v1/coord?q=$q$">>
\end

et il faudrait idéalement ajouter un tag “adresse” sur les tiddlers JSON (qu’on retrouve dans les “orphelins”) va savoir pourquoi ? Mystère…


#19

J’ai aussi ajouté :

\define coord(lieu) {{$lieu$##lat}},{{$lieu$##lon}}

#20

Est-ce que la version en ligne contient ces dernières mises à jour ?