Indécision sur les choix macro/plugin/widget


#1

Bonjour à tous,
Mon choix devient confus au fur et à mesure que je développe une petite application qui manipule le DOM et que je lis les documentations de Tiddlywiki.

Dans la documentation des développeurs, je pense avoir compris qu’une macro Wikitext est dédier à quelque simple manipulation de texte. Dès lors que l’on veuille créer quelque chose de plus complexe, on peux utiliser les macro JavaScript mais toujours en ne retournant que du texte (question de sécurité).

Je me dis que les widget sont utilisé pour des petits outils. Donc peut-être pas approprié pour une application.

(corrigez moi si mes pensés sont fausse :thinking:)

Donc concrètement, si je veux créer une petite application qui manipule le DOM à l’intérieur d’un tiddler (création/suppression d’élément HTML, calcule…), vers quelle choix doit-je me diriger sans créer des problèmes de sécurité ?


#2

Bonsoir @Djodo,
J’ai affecté ton post à la catégorie JavaScript. Sans catégorie, il était très peu visible.


#3

Salut @Djodo,

Dans la doc de développement : https://tiddlywiki.com/dev/alltiddlers.html il est rappelé que le DOM est géré par un “FakeDomMecanism”.

C’est Tekan qui a montré une sacrée belle façon de packager une appli…
https://ibnishak.github.io/Tesseract/projects/tekan/

Maintenant, tu peux faire apparaître et disparaître des éléments avec un simple <$reveal>
Tu peux rendre du code HTML depuis un return de macro JS.
Enfin, tu peux exporter des méthodes plus complexes avec rafraîchissement depuis des widgets.

Il n’est pas simple de répondre plus précisément sans connaître l’architecture de ton application.


#4

Merci @prolegomenes !

Ok @oxydum, je vais jeter un œil à tous ça.

Pour précisé ma demande, ma macro JavaScript ressemblerai grossièrement à ceci :

(function() {

	"use strict"
	exports.name = "test"

	exports.params = []

	exports.run = function() {
		//Fonction permettant de sélectionner le corps du tiddler.
		function tiddlerBodySelector(title) {
			return document.querySelectorAll('div[data-tiddler-title="'+ title +'"]>div[class="tc-tiddler-body tc-reveal"]')[0]
		}
                
		var tiddlerBody = tiddlerBodySelector('titre du tiddler')

                //Créations des éléments
		var newDiv = document.createElement("div")
                //ect...

                //Imbrication des éléments
		tiddlerBody.appendChild(newDiv )
                //ect...
    }
})();

Est-ce que quelqu’un peux expliquer la différence de sécurité entre une macro JavaScript qui manipule le DOM à l’intérieur d’un tiddler, et un widget ou plugin qui ferait la même chose.


#5

Franchement, le problème de “sécurité” me parait plus poser de problèmes à javascript en dehors de tiddlywiki qu’en dedans. Pour le DOM, tu peux manipuler le DOM virtuel, mais pas celui d’une autre page Web, à moins de recourir depuis l’autre page Web les autorisations et/ou paramétrages nécessaires ( ### Cross-origin resource sharing )
Du coup, si on cherche à planquer une vérole javascript, mieux vaut le faire en se passant de tiddlywiki, c’est beaucoup plus simple.

Pour ma part, je n’ai même pas réussi à faire fonctionner un script ECMAscript d’un fichier SVG (qui est interprété comme une image et ne tient donc pas compte des sections “[DATA]” qui incorpore les scripts)

Maintenant, si tu produis un script qui révèle les mots-de-passe par exemple, que ce soit en macros, en plugins JS ou en Widgets, c’est kif-kif.


#6

ok :slightly_smiling_face:

Est-ce qu’autrement dis cette méthode utilisé traditionnellement :

<!DOCTYPE html>
<html>
<head>
<script>
//mon script javascript
</script>
</head>
<body>
<h2>Mon titre</h2>
</body>
</html> 

est remplacé par cette méthode dans tiddlywiki ?

!!Mon titre
<<ma macro javascript>>

#7

Non. Pour inscrire un script dans le <head>, il faut tagguer le tiddler de type javascript avec $:/tags/RawMarkup
comme tu peux le retrouver ici : https://tiddlywiki.com/static/SystemTags.html


#8

Ok @oxydum, je crois que je vais arrêter de me prendre la tête et continuer à manipuler le DOM d’un tiddler avec sa macro JavaScript.
Merci !