* `define('_PORTE_PLUME_INSERER_AUTO_NAME_TEXTE', false);` pour desactiver l'insertion automatique sur les textarea name='texte'. Il faut ajouter les classes .inserer_barre_forum, .inserer_barre_edition et .inserer_previsualisation pour piloter l'activation du porte plume au cas par cas
* `define('_PORTE_PLUME_PRIVE', false);` pour desactiver totalement le chargement du porte_plume dans le prive (mais il peut rester actif dans le public au besoin)
On ajoute cache-client sur le cache de ces fichiers. C'est presque suffisant, mais il faut aussi les recalculer lorsqu'un plugin qui modifie les fichiers
de porte-plume s'active ou se désactive. Du coup, on calcule un hash et un fond statique pour ces 2 fichiers, qui dépend du code variable de ces fichiers.
Bon du coup on peut éviter quelques hits sur le serveur, mais la contrepartie, c'est qu'il faut calculer ces hash, parfois inutilement j'imagine, au calcul d'une page.
À voir.
différents fix avec php-cs-fixers. Fixers appliqués ici :
'encoding', // utf8
'eof_ending', // un saut de ligne en fin de fichier
'elseif', // elseif plutôt que else if
'function_call_space', // espaces sur fonctions
'function_declaration', // espaces sur fonctions
'function_typehint_space', // espaces sur fonctions
'linefeed', // sauts de ligne \n uniquement
'lowercase_constants', // true, false, null en munuscule
'lowercase_keywords', // mots clés PHP en lowercase
'method_argument_space', // espaces sur appels de fonctions
'multiple_use', // use unique sur fonctions anonymes
'newline_after_open_tag', // ouverture de php… et c'est tout sur cette ligne
'operators_spaces', // espaces de part et d'autres des opérateurs binaires
'parenthesis', // pas d'espace juste après parenthèse ouvrante, ou avant parenthèse fermante
'php_closing_tag', // pas de fermeture de php
'short_tag', // tag PHP corrects
'trailing_spaces', // pas d'espace qui traîne en fin de ligne
'visibility', // déclarer 'public / private / protected' sur les méthodes
Markitup prenant à peu près en charge les boutons multiligne, on se base maintenant dessus pour les notres : forceMultiline devient multiline dans la déclaration des boutons.
On change de technique pour ce qui est du calcul les sélections (sélectionner toute une ligne, tout un mot, au plus proche d'une sélection ou du curseur) : avec les dernières évolutions de Markitup, seul IE se permet des folies. On ne traite donc que le cas IE spécifiquement, et on laisse Markitup gérer les calculs de position du curseur. Du coup, il y a moins de modifications du code de Markitup.
On n'utilise plus la librairie XRegExp qui ne semble plus utile pour nos calculs d'expressions régulières.
Testé avec : FF6, IE8, Opera11.52, Chromium 12.0
- deplacer le squelette de preview dans prive/ pour ne pas permettre sa consultation directe
- ajouter un autoriser() dans l'action previsu pour fermer la porte lorsque le porte plume est desactive dans le public
- dans tous les cas faire passer le resultat par safehtml car le texte source peut venir de n'importe qui/n'importe ou et peut servir de support a une attaque type XSS ou vol de cookie (l'utilisation d'un $_POST explicite exclue toutefois le simple lien)
- Mise à jour des scripts d'expression régulière pour la fonction .split() que l'auteur à intégré dans une librairie plus générale, reprenant .replace(), .match() aussi notamment : http://xregexp.com/
- Charger la barre après le chargement de la page.
Cela permet de ne pas afficher la barre aux visiteurs non authentifiés (Touti)
(en surchargeant cette autorisation)
Attention toutefois avec Crayons (qui ne s'occupe pas de tester si les js du PP sont présents)
* mise en fichier externe de la fonction de chargement de porte plume ce
qui permet de la prendre en charge par le compacteur
* permettre des insertions de barrs d'outils avec des classes javascript posés sur
les textarea : inserer_barre_forum, inserer_barre_edition, inserer_previsualisation
* permettre de ne pas déposer la barre dans l'espace public avec la constante PORTE_PLUME_PUBLIC, définie à true par défaut (javascript et css présents dans le public)
* donner une API pour créer des barres d'outils sur des textarea sélectionnés en javascript :
.barre_outils($nom) et .barre_previsualisation().
Exemple issu du core de porte plume :
{{{
$('.formulaire_spip textarea.inserer_barre_forum').barre_outils('forum');
$('.formulaire_spip textarea.inserer_barre_edition').barre_outils('edition');
$('.formulaire_spip textarea.inserer_previsualisation').barre_previsualisation();
}}}