11521 sujets

JavaScript, DOM et API Web HTML5

Bonsoir,

Je fais appel à un script pour créer des boutons dans le TinyMCE (v.4) de WordPress, et ce script fonctionne très bien jusqu'à présent :
upload/35007-2016-06-02.jpg

Pour chaque bouton créé je dois cependant copier/coller une partie du code dénommé 'editor.addButton()'. J'aimerais donc factoriser ce dernier dans une boucle for() en stockant les données via un tableau.

Or mon script ne fonctionne plus dans ce cas, peut-être un problème de portée des variables, ou alors le fait que les données stockées en tableau ne soit pas appelées de manière appropriée ?

Quoi qu'il en soit je fait appel à votre expertise (code réduit ici pour 3 boutons) :
( function() {
  tinymce.PluginManager.add('ScripturaShortcodeButtons', function( editor, url ) {

  var shortcodeButtons = [ 'message', 'message-info', 'message-success' ];
  var titleButtons = [ 'Message', 'Message info', 'Message success' ];
  var imageButtons = [ 'paperclip.svg', 'info.svg', 'checkmark.svg' ];

  for ( var i = 0; i < shortcodeButtons.length; i++ ) {

    editor.addButton( 'ScripturaButton' + i, { // @note Ici la variable est reconnue...
      text: false,
      icon: false,
      title: titleButtons[i], // @note Ici aussi...
      image: url + '/Images/' + imageButtons[i], // @note Ici aussi...
      onclick: function() {
        var content = [
          {
            type: 'textbox',
            name: 'content',
            label: 'Content',
            value: ''
          }
        ];
        editor.windowManager.open( {
          title: 'Un Titre', // @todo C'est à partir de là que ça coince : je pensais utiliser quelque chose comme titleButtons[i], mais nada...
          autoScroll: true,
          classes: 'scriptura-panel',
          body: content,
          onsubmit: function( e ) {
            editor.insertContent(
              '[_message]' + e.data.content + '[/_message]' // @todo Ça coince là aussi, il me faudrait le contenu de shortcodeButtons[i] en lieu et place du string 'message'
            );
          }
        } );
      }
    } );

  }
  } );
} )();
[/i][/i][/i][/i]
Modifié par Olivier C (03 Jun 2016 - 08:55)
que signifie coince ? la valeur qui apparait est elle la dernière valeur de l array ?

l implémentation par défaut des propiétés ( valeur/value) dans editor.windowManager.open pour la propriété title est peut être que la valeur de retour doit être un texte et qui il n y a pas de conversion implémenté pour convertir un object en un string .

Faut t il
1) ajouter une fonction wrapper ( à votre fonction ) qui retroune un string ... non ?
2) utilise le mot clé function( votre code )
3) adapter le code editor.windowManager.open pour qu il supporte une fonction

NB je ne suis pas expert .... je n'ai jamais étudié le code wordpress ( php ou js) ni de tinyMCE et de ses modules . Mon post est un simple avis non argumenté sans étude test préalable. je ne m 'interesse qu au concept pas au code . Par concept j'entends tout ce qui tourne autour de l'acces au variable , la portée( var , fonction,) , initialisation (mémoire) ,affectation ( pointeur référence) , conversion implicite du type de la variable ( ou entre hiéarchie d ' object fils/parent ) . DOTO comprendre la technique ( API) d ajout des bouttons et de plusieurs buttons.
Modifié par 75lionel (09 Jun 2016 - 15:33)