IEditor

IEditor 1.0

L'éditeur de texte pour votre site web

IEditor est un éditeur de texte à intégrer à votre site web. Voici les principales fonctionnalités :

  • Mise en page, formatage de texte et de code
  • Ajout de photos, vidéos et animations flash
  • Téléchargement d'images via ajax

Il existe en version classic et une version adaptée pour le framework php de Zend.

Requis

  • IEditor utilise les langages suivant : html5(*), javascript, php, xml, xsl, css3
  • Serveur php : version › 5.2 et extension xsl activée

Classic Version

Description

  • Indy Framework 1.0 - light version for IEditor
  • IEditor 1.0 Javascript package
  • Mootools 1.3.0 Javascript Framework
  • GeSHi 1.0.8.9 Generic Syntax Highlighter

Zend Version

Description

  • Zend Framework 1.11.11 - php framework
  • IEditor 1.0 Javascript package
  • Mootools 1.3.0 Javascript Framework
  • GeSHi 1.0.8.9 Generic Syntax Highlighter
Téléchargement gratuit Mootools Zend Framework GeSHi Indy Framework

Démo IEditor 1.0

Téléchargez IEditor - Open source project

Utilisation basique

Inclusion des fichiers javascript et css

Il faut tout d'abord inclure dans l'entête de votre page html, les fichiers javascript :

Code : html4strict - Sélectionner
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  2. <title>IEditor</title>
  3. <link href="public/css/ieditor.css"  rel="stylesheet" type="text/css" media="all" />
  4.  
  5. <script type="text/javascript" src="public/js/mootools.js"></script>
  6. <script type="text/javascript" src="public/js/IEditor/package-IEditor.js"></script>
  7. </head>

Affichage de l'éditeur

Pour afficher l'éditeur, il suffit simplement d'inclure via php le fichier de template phtml :

Code : php - Sélectionner
  1. <?php require_once 'IEditor.phtml';?>

Lancement de l'éditeur

Pour utiliser l'éditeur, tapez le code suivant dans un fichier main.js et l'inclure entre les balises head à la suite des autres sources javascript :

Code : javascript - Sélectionner
  1. window.addEvent('domready', function () {
  2.    var editor = new IEditor('form');
  3.    editor.run();
  4. });

Utilisation avec Zend Framework

Inclusions de la librarie Indy

Pour inclure la librairie Indy à l'application Zend ajoutez la ligne suivante dans le fichier de configuration ini.

Code : ini - Sélectionner
  1. autoloaderNamespaces[] = "Indy_"

Inclusions des fichiers javascript et css

Assurez vous que les fichiers mootools.js, et package-IEditor.js sont situés dans le bon dossier, de même pour ieditor.css. Ensuite, pour inclure les fichiers javascript dans un système sans Layout, il faut inclure les fichiers javascript dans les balises head du fichier html utilisant l'éditeur. Sinon, ajouter au fichier Layout.phtml ces quelques lignes :

Code : php - Sélectionner
  1. <?php
  2. echo $this->headLink()->appendStylesheet($this->baseUrl().'/css/ieditor.css').PHP_EOL;
  3. echo $this->headScript()->setFile($this->baseUrl().'/js/mootools.js').PHP_EOL;
  4. echo $this->headScript()->setFile($this->baseUrl().'/js/package-IEditor.js').PHP_EOL;          
  5. ?>

Le formulaire

Il faut ensuite créer une classe dans votre application représentant l'éditeur qui étend la classe Zend_Form.
Le template IEditor.phtml (cf Zend-Package-IEditor) est quelque peux modifier pour accepter les paramètres du formulaire Zend.

Code : php - Sélectionner
  1. <?php
  2. class Application_Form_IEditor extends Zend_Form
  3. {
  4.  
  5.     private static $_defaultLangage = array(
  6.                 'php' => 'Php',
  7.                 'javascript' => 'Javascript',
  8.                 'css' => 'Css',
  9.                 'html4strict' => 'Html',
  10.                 'c' => 'C',
  11.                 'cpp' => 'C++',
  12.                 'cpp-qt' => 'Qt',
  13.                 'java' => 'Java',
  14.                 'xml' => 'Xml',
  15.                 'actionscript' => 'Action-script',
  16.                 'sql' => 'Sql',
  17.                 'winbatch' => 'Batch'
  18.         );
  19.        
  20.     public function init()
  21.     {
  22.         $this->addElement('textarea', 'text', array(
  23.             'cols' => 84,
  24.             'rows' => 10,
  25.             'decorators' => array('viewHelper')
  26.         ));
  27.         $this->addElement('submit', 'submit');
  28.      
  29.         $this->setDecorators(array(
  30.             array('ViewScript', array('viewScript' => 'IEditor.phtml'))
  31.         ));
  32.     }
  33.    
  34.     public static function getCodeLangage()
  35.     {
  36.         return self::$_defaultLangage;
  37.     }
  38. }
  39. ?>

Le contrôleur d'action

L'exemple utilise le contrôleur d'action index pour l'utilisation de l'éditeur. L'action parseAction() permet l'auto-visualisation via ajax. L'action ajaxAction() charge les images des dossiers assignés en paramètres à l'instance de l'éditeur.

Code : php - Sélectionner
  1. <?php
  2. class IndexController extends Zend_Controller_Action
  3. {
  4.     public function init()
  5.     {      
  6.         $this->form = new  Application_Form_IEditor();  
  7.          
  8.         $ajax = $this->_helper->getHelper('contextSwitch');
  9.         $ajax->addActionContext('ajax', 'json')->initContext();    
  10.     }
  11.  
  12.     public function indexAction()
  13.     {
  14.         $this->view->form = $this->form;
  15.     }
  16.  
  17.     // Images utilisateurs dossiers
  18.     public function ajaxAction()
  19.     {
  20.         $directory = htmlspecialchars($this->getRequest()->getPost('directory'));
  21.         $baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
  22.         $baseUrl = rtrim($baseUrl, 'index.php') . '/images/'.$directory.'/';
  23.        
  24.         $tool = new Indy_Tool_FolderReader('images/'.$directory.'/');
  25.         $tool->read();
  26.         $json = array();
  27.         foreach($tool->getFiles() as $entry)
  28.         {
  29.                 foreach($entry as $file){                      
  30.                         $json[] = stripslashes($directory . '/'. $file);
  31.                 }      
  32.         }              
  33.         $this->view->json = Zend_Json::encode($json);
  34.         $this->_helper->getHelper('layout')->disableLayout();
  35.     }
  36.         // Auto-visualisation
  37.     public function  parseAction()
  38.     {
  39.         $text = $this->getRequest()->getPost('text');
  40.         $parser = new Indy_Parser_Zcode_Xml();          
  41.         $this->view->text = $parser->parse(utf8_encode($text));
  42.         $this->_helper->getHelper('layout')->disableLayout();
  43.     }
  44. }
  45. ?>

Upload d'images

Les dossiers contenant les images à uploader sont situés dasn le repertoire public/images/ de l'application Zend, par défaut un dossier upload est présent dans le package, vous pouvez assignés autant de dossier que nécéssaire. Pour utiliser le plugin d'upload d'images il faut ajouter une action upload, voici un exemple simplifié :

Code : php - Sélectionner
  1. [...]
  2.     public function uploadAction()
  3.     {
  4.         if(isset($_FILES['userImage']['tmp_name']) and $_FILES['userImage']['error'] === 0)
  5.         {
  6.             $directory = (isset($_POST['directory'])) ? $_POST['directory'] : '';
  7.             //verif size | extension | mime-type | rename
  8.             if(is_uploaded_file($_FILES['userImage']['tmp_name']))
  9.             {
  10.                 if(move_uploaded_file($_FILES['userImage']['tmp_name'], '../public/images/' . $directory . '/'. $_FILES['userImage']['name']))
  11.                         {
  12.                                 // TODO if you have to store in bdd done here
  13.                                 echo '<div style="color:green">le fichier est chargé sur le server</div>';
  14.                         }
  15.                         else
  16.                         {
  17.                                 echo '<div style="color:red">Une erreur interne est survenu</div>';
  18.                         }
  19.                 }
  20.                 else
  21.                 {
  22.                         echo '<div style="color:red">Impossible de chargé le fichier</div>';
  23.                 }
  24.         }
  25.         else
  26.         {
  27.             echo '<div style="color: red;">Aucun fichier</div>';
  28.         }
  29.         $this->_helper->getHelper('layout')->disableLayout();
  30.         $this->_helper->viewRenderer->setNoRender(true);
  31.     }
  32. [...]

Vérification du formulaire et du résultat

Pour la vérification du formulaire et le parsage du contenu écrit avec l'IEditor et on pourra utiliser le script suivant :

Code : php - Sélectionner
  1. [...]
  2.     public function indexAction()
  3.     {
  4.         $this->view->form = new Application_Form_IEditor();
  5.        
  6.          $parser = new Indy_Parser_Zcode_Xml();
  7.          if($this->form->isValid($this->getRequest()->getPost())){
  8.              $this->view->result = $parser->parse($this->form->getValue('text'));
  9.          }  
  10.     }
  11. [...]


Et la vue correspondante index.phtml :

Code : phtml - Sélectionner
  1. <div id="welcome">
  2.     <h3>This is your project's main page</h3>
  3.         <div class="result">
  4.         <?php echo $this->result;?>
  5.     </div>
  6.     <div id="more-information">
  7.         <?php echo $this->form;?>
  8.     </div>  
  9. </div>

Lancement de l'éditeur

Il faudra ajouter ce script entre les balises head du fichier contenant l'éditeur pour lui spécifier les bons chemins vers les fichiers et actions :

Code : javascript - Sélectionner
  1. <script type="text/javascript">
  2. window.addEvent('domready', function() {
  3.         var path = "<?php echo $this->baseUrl();?>";
  4.         var editor = new IEditor('form',{
  5.                 path : {
  6.                         icons : path + "/images/iform/",
  7.                         images :path + '/images/'
  8.                 },
  9.                 url: {
  10.                         base :path,
  11.                         toParse : 'index/parse',
  12.                         toImage : 'index/ajax',
  13.                         toUpload : 'index/upload'
  14.                 }
  15.         });
  16.         editor.run();          
  17. )};
  18. </script>

Les boutons

Modification du texte

Icons Nom Balise Résultat Paramètres
Gras
Gras <gras>texte</gras> texte -
Italique
Italique <italique>texte</italique> texte -
Barrer
Barrer <barre>texte</barre> texte -
Souligner
Souligner <souligne>texte</souligne> texte -
Couleur
Couleur <couleur value="#FF0000">texte</couleur> texte Toutes les couleurs en hexadécimal de #000000 à #FFFFFF
Taille du texte
Taille du texte <taille value="xx-large">texte</taille> texte Toutes les valeurs de la propriété css "font-size" : de xx-small à xx-large
Police de caractères
Police de caractères <police value="Rockwell Extra Bold">texte</police> texte Arial, Verdana, Times New Romans, Comic Sans Ms, Rockwell Extra Bold
Titre
Titre <titre value="h1">texte</titre>

texte

h1, h2, h3

Position du texte

Icons Nom Balise Résultat Paramètres
Marge
Marge texte
<marge">texte</marge>
texte
texte
-
Position
Position <position value="right">texte</position>
texte
left, right, center, justified
Flottant
Flottant <flottant value="droit">texte</flottant>
texte
gauche, droit

Bouton intéractifs

Icons Nom Balise Résultat Paramètres
Tableau
Tableau <tableau><ligne><colonne>texte<colonne><ligne></tableau>
texte
Le nombre de ligne et de colonnes, le texte de chaque case
Liste à puces
Liste à puces <liste><puce>texte<puce></liste>
  • texte
texte de la puce
Liste à puces
Liste à puces <listnum><puce>texte<puce></listnum>
  1. texte
texte de la puce
Lien
Lien <url value="www.indy-musics.web-creations.com">lien</url> lien L'adresse et texte du lien
Citation
Citation <citation auteur="Dark Vador">luke la force est avec toi</citation>
Citation :Dark Vador
Luke, la force est avec toi
Le nom de l'auteur et la citation
Ancre
Ancre <ancre value="ici">Ici</ancre> Ici Le nom et le texte de l'ancre
Lien vers une ancre
Lien <urlancre value="ici">Aller à l'ancre</urlancre> Aller à l'ancre Le nom de l'ancre et texte du lien
Image
Image <image>http://www.franckysolo-productions/public/images/img/img3.jpg</image> logo Le nom de l'ancre et texte du lien
Image depuis dossier
Image depuis un dossier <image>adresse de l'image</image> Voir la démo Le nom de l'ancre et texte du lien
clip média
Clip média <clip>adresse du clip</clip> Voir la démo L'adresse de la video, type de média, largeur, hauteur

Bouton spéciaux

Icons Nom Balise Résultat Paramètres
Secret
Secret <secret>Texte secret</secret>
Texte secret

-
Code
Code <code type="c">print "test";</code>
Code : c - Sélectionner
  1. print "test";

Tous les langages supportés par GESHI
Video depuis You-Tube
Video depuis You-Tube <video>adresse de la video you-tube</video> Voir la démo L'adresse de la vidéo
Alertes
Alertes :
question infos

error attention
<question>Quelle heure est t'il?</question>
Quelle heure est t'il?
-
Smiley
Smiley <image>adresse du smiley</image> Voir la démo -
Agrandir le champ de texte
Agrandir le champ de texte - Voir la démo -
Réduire le champ de texte
Réduire le champ de texte - Voir la démo -
Envoyer des images
Envoyer des images sur le serveur - Téléchargez et tester le IEditor -