Fonction javascript dans Topaze?

Bonjour à tous,
Je viens vous consulter à propos d’une idée qui me traverse l’esprit ces derniers temps :
je souhaiterais pouvoir faire des calculs statistiques sur des données gérées dans Topaze. Ces calculs concernent par exemple la moyenne, la variance, etc.
Je peux les programmer en javascript dans un indicateur ou une variable calculée automatiquement mais je trouve assez lourd de devoir toujours réécrire ce calcul à chaque fois que j’utilise l’indicateur ou la variable. D’où ma question :
est-il possible de stocker d’une manière ou d’une autre la fonction écrite en javascript pour effectuer ce calcul et l’utiliser dans un indicateur ou une variable ?
Par exemple :
function moyenne(values) {…}

et ensuite l’utiliser en l’appelant dans un indicateur :
val_moyenne = moyenne({1,2,3,4});

Merci d’avance pour vos pistes
Cordialement
Philippe vignoles

Bonjour,

Le seul moyen que je vois pour ajouter un bibliothèque JS perso serait de l’inclure dans un habillage guidé élaboré avec SCENARIstyler, dans skin.js.

Par contre ceci veut dire que votre contenu ne marchera plus avec un autre skin.

Bonjour Sam,
Merci pour cette piste : c’est déjà une très bonne idée il me semble. Il faudra simplement penser à rajouter les scripts dans les nouveaux skins le cas échéant mais c’est un moindre mal je pense.
Merci
Cordialement
Philippe

Bonjour,
une autre solution est peut-être d’utiliser la fonction « eval() » du javascript. On peut par exemple rassembler les fonctions dans un tableau dans une première variable calculée automatiquement :

Puis on utilise la bibliothèque là où on en a besoin :

Exemple complet (Topaze 5) : EvalString.scar (3,8 Ko)

Pas optimal car on insère à chaque fois la bibliothèque dans le script qui l’utilise. Il y a peut-être moyen d’améliorer l’idée en utilisant des variables sessionStorage

1 « J'aime »

Bonjour Eric,

Encore une suggestion très intéressante.

En pratique, je pourrais en fait créer autant de variables que de fonctions ce qui permettrait alors de n’utiliser que la fonction utile au moment de l’appel.
D’un point de vue fonctionnel, je suppose aussi que l’interprétation de la fonction via la fonction eval doit prendre du temps dans l’exécution : est-ce sensible si on doit appliquer cette « évaluation » sur une bonne dizaine de fonctions ? D’après ma compréhension du code, qu’on charge la variable contenant toutes les fonctions en entier et qu’on « évalue » une seule fonction ou qu’on charge une variable contenant une seule fonction et qu’on l’évalue ensuite doit grosso-modo revenir au même temps d’exécution… Est-ce que je me trompe ?

Je vais ajouter une question de néophyte concernant la condition évitant la répétition du script : que désigne ‹ varMachin › ? Est-ce une méthode spécifique à document ?

Merci encore pour vos suggestions, remarques et aides plus qu’efficaces.
Cordialement
Philippe

Pour moi, le plus propre reste l’ajout dans skin.js, les variables peuvent être re-exécutés plusieurs fois par page.

1 « J'aime »

Je n’ai aucune idée concernant la vitesse d’exécution (d’autant qu’il s’agit de javascript et donc d’une exécution locale, tout dépend ainsi de la machine de l’usager) mais j’imagine que plus on imbrique des éléments dans d’autres éléments, plus ça prend du temps à faire le chemin dans l’autre sens… :grinning:
Concernant la répétition du script, il s’agit d’un « truc » fourni par @sam il y a 2 ans ici.

Bonjour Sam,
J’ai essayé l’intégration d’une fonction javascript dans le fichier skin.js « à la main » sans restyliser (à postériori : après génération du site).
Est-ce que cette méthode est possible ?
Dans le cas positif, je n’ai pas réussi à utiliser la fonction en question. Quelle serait la syntaxe pour l’appel de la fonction déclarée dans skin.js dans un indicateur calculé automatique ?
Merci d’avance
Cordialement
Philippe Vignoles