Appliquer une expression ######################## Objectif : lire et analyser les éléments permettant de travailler avec la sélection utilisateur et une entrée utilisateur. .. warning:: Les éléments vus précédemment ne seront pas traités à nouveau. 1 – récupérer les .jsx t .json de travail ***************************************** * Télécharger `appliquer_expression.jsx <../../_static/scriptUI/appliquer_expression.jsx>`_ (à placer dans le dossier ``Scripts`` ou ``Scripts/ScriptUI``) * Télécharger `exemple.json <../../_static/scriptUI/exemple.json>`_ (à importer dans le projet AE) 2 - indication du .json et du modèle d'expression ************************************************* .. code-block:: javascript // nom du fichier json var footage = 'exemple.json'; // modèle d'expression var modele_expression = 'var donnees = footage(\'' + footage + '\').sourceData; donnees.{cle_propriete};'; .. note:: On notera ici la chaîne de caractère ``'var donnees = footage(\'' + footage + '\').sourceData; donnees.{cle_propriete};';`` et notamment la partie ``{cle_propriete}``. Nous remplacerons cette partie de la chaîne plus tard par un élément défini par l'utilisateur. 3 – mise à jour du modèle d'expression ************************************** .. code-block:: javascript :emphasize-lines: 7, 10, 13 // on prend notre bouton, on associe à sa propriété onClick une fonction // lorsque le bouton sera cliqué, // la fonction associée à la propriété onClick sera exécutée bouton.onClick = function () { // on demande à l'utilisateur la clé à utiliser dans l'expression var cle = prompt ( 'indiquez la clé demandée', 'clé' ); // on modifie le modèle d'expression en conséquence expression = modele_expression.replace( '{cle_propriete}', cle ); // on applique l'expression appliquer_expression( expression ); }; .. note:: trois points intéressants ici : 1. on demande à l'utilisateur une entrée 2. on créé une expression à partir du modèle dans lequel on remplace ``{cle_propriete}`` par l'entrée utilisateur 3. on appelle la fonction ``appliquer_expression`` avec l'expression nouvellement créé en paramètre 4 – application de l'expression ******************************* .. code-block:: javascript :emphasize-lines: 18,21,22,23,24,25,28,29,30,33,34,35 function appliquer_expression ( expression ) { /* applique une expression données aux calques textes donnés */ var composition_active = app.project.activeItem; // si on a aucune composition sélectionnée if ( !composition_active || !(composition_active instanceof CompItem) ) { return alert("Aucune composition sélectionnée."); } var calques_selectionnes = composition_active.selectedLayers; // si on a aucun calque sélectionné if ( calques_selectionnes.length == 0 ) { return alert("Aucun calque sélectionné."); } var calques_texte_selectionnes = []; // on liste les calques texte for (var i = 0; i < calques_selectionnes.length; i++) { if ( calques_selectionnes[i] instanceof TextLayer ) { calques_texte_selectionnes.push( calques_selectionnes[i] ); } } // si on a aucun calque texte sélectionné if ( calques_texte_selectionnes.length == 0 ) { return alert("Aucun calque texte sélectionné."); } // on applique l'expression aux calques texte sélectionnés for (var i = 0; i < calques_texte_selectionnes.length; i++) { calques_texte_selectionnes[i].text.sourceText.expression = expression ; } } .. note:: Ici encore, trois éléments dans la fonction ``appliquer_expression`` : 1. une boucle sélectionne les calques texte uniquement 2. Si aucun calque texte : message et fin de la fonction 3. si des calques, boucle pour modifier leur propriété ``text.sourceText.expression``, laquelle se voit assigner l'expression en paramètre de la fonction.