Actualiser une macro JavaScript


#1

Bonjour,
Après moult recherches sur le forum anglais, je ne comprends pas très bien si il est vraiment possible d’actualiser/rafraichir une macro JavaScript.
Pour exemple j’ai une macro JavaScript qui s’exécute en fonction de paramètres contenu dans un dataTiddler. Si je modifie les valeurs du dataTiddler, la macro JavaScript ne s’actualise pas tant que je ne rafraichis pas la page.

Y a t-il un moyen d’actualiser la macro via un bouton par exemple ?


#2

Effectivement, pour que les modifications d’une macro javascript soient prises en compte il faut d’abord rafraichir TiddlyWiki (et s’il y a un bug dans ton javaScript, ça fait potentiellement planter TW)

Une fois que ceci est fait, tu peux mettre à jour les données de ton DataTiddler, et là, la mise à jour se fait en live sans avoir à rafraichir TW.

Exemple :
SI tu modifies une donnée du fichier http://d3jsv5trial.tiddlyspot.com/#flare.json (ex : multiplie par 100 la “size” d’un élément) , alors http://d3jsv5trial.tiddlyspot.com/#D3%20Zoomable%20Circle%20Pack%20Widget, qui appelle ce json, est mis à jour immédiatement.


#3

Je suis d’accord pour ton exemple, lorsqu’on édite un tiddler puis qu’on le valide, cela actualise les données. Mais ce que j’aurai dû indiquer dans mon premier message, c’est que je modifie les données du dataTiddler avec le widget EditTextWidget. Et là, cela ne fonctionne pas :confused:


#4

Je suis confronté au même problème que toi. En attendant je fais les mises à jour via un bouton
le code que j’ai mis en place est le suivant (tu peux le voir en action ici: http://archipel.tiddlyspot.com, dans le tiddler “Archipel”

\define selaction()
<$wikify name=myvalue text={{maMacroEnWikiText}} output="text">
<$fieldmangler tiddler="toto.csv">
<$action-setfield $tiddler="toto.csv" text=<<myvalue>> />
<$action-setfield  $tiddler="toto.csv" $field="type" $value="text/csv"/>
</$fieldmangler>
</$wikify>
\end

<$button actions=<<selaction>>>
Update button
</$button>

Mais cela ne me satisfait pas, je voudrais complètement me passer de bouton. J’avais laissé tombé l’affaire depuis quelques jours, mais je vais m’y replonger prochainement.
Je me dis qu’il doit y avoir moyen de créer un javascript qui reprend le code du widget Wikify…

Tiens moi au courant si tu trouves le truc…


#5

Je sais pas si on a exactement le même problème, en tous cas moi je voulais par exemple que ma macro Javascript additionne des données à partir de valeur contenus dans un dataTiddler. Et je voulais aussi, quelle s’actualise en même temps que les valeurs du dataTiddler changes.
Avec le Widget “EditTextWidget” cela fonctionne :

<dl>
  Valeur 1 : 
  <dd><$edit-text tiddler="$:/temp/data/variable" index="V1" tag="input"/></dd>
  Valeur 2 :
  <dd><$edit-text tiddler="$:/temp/data/variable" index="V2" tag="input"/></dd>
  Valeur 3 :
  <dd><$edit-text tiddler="$:/temp/data/variable" index="V3" tag="input"/></dd>
</dl>

Résultat = <$macrocall $name="maMacroJavascript"
V1={{$:/temp/data/variable##V1}}
V2={{$:/temp/data/variable##V2}}
V3={{$:/temp/data/variable##V3}}/>

Dans mon cas il me semble que c’est “EditTextWidget” qui actualise les macros du tiddlywiki.
Pour ton cas, j’ai lu sur le forum anglais une astuce pour actualiser une macro javascript en fonction d’une horloge (toute les deux seconde par exemple). Mais je ne la retrouve plus… :frowning:


#6

Bonsoir,
en fait pour développer un macro javascript j’utilise l’onglet “Console” javascript du navigateur (sous chrome: CTRL+MAJ+I)

J’écris la macro dans un tiddler mais avant de l’enregistrer je vais la copié collé dans la console puis je valide et hop elle automatiquement dispo !!

Par contre il faut utiliser une autre syntaxe, qui permet cette utilisation en temps réel.
Par exemple pour une macro nommée “updated”, avec un paramètres nommé param1 :

Ensuite la macro doit être ré-écrite proprement pour ne pas générer des erreurs à la sauvegarde du tiddlywiki

J’ai pas encore tester sous Node pas sous la main ici


#7

Bonjour,

Je ne sais pas si cela correspond à ton problème, mais pour rafraîchir un tiddler, j’utilise ce code trouvé sur le net :

<$button>
<$action-setfield $tiddler="$:/temp/trigger" $value=<<now "0hh:0mm:0ss">>/>
Refresh
</$button>

Ensuite, pour faire des calculs, je n’ai pas trouvé mieux que le plugin eval de @tobibeer
http://tobibeer.github.io/tw5-plugins/#eval
Bien suivre la doc, pour le configure :

[
    {"type":"math.js", "require": "$:/lib/math.js"},
    {"type":"math.js", "id":"mklauber/math.js", "require":"$:/plugins/mklauber/math.js/math.js"},
    {"type":"js"}
]

Et merci tout plein pour ton explication du bac à sable très utile, tu es formidable !


#8

Bonjour @luxool,

En fait tu expliques parfaitement en quelques lignes comment on fait, une fois JavaScript assimilé :tired_face:, pour l’intégrer dans un tiddler typé application/javascript

Super-intéressant en ce qui me concerne :heart_eyes:

Si tu as d’autres idées pour vulgariser JavaScript/TidlyWiki j’en serai un lecteur assidu.

Grand merci pour ce post!


#9

Merci a toi prolegomenes et aussi à oxydum

En fait, je galère un peu avec le langage de macro par contre je connais très bien Javascript donc je pense que mes développements futurs vont vite s’orienter dans ce genre là !