markItUp! Part I - Installation et personnalisation
Posé ici le mardi 13 mai 2008 à 06:42 par

Chose promise, chose due. Je profite de la sortie de markItUp! 1.1 pour lancer une petite série d'articles sur l’engin. Ce premier article couvrira l'installation et la personnalisation basique de la barre d’outils.
Si vous ne le savez pas encore, markItUp! est un plugin pour jQuery qui permet de transformer n'importe lequel de vos textareas en éditeur de tags configurable à souhait et ce, de manière totalement inobstrusive.
Téléchargement et installation
Tout d'abord il faut bien évidement télécharger les dernières versions markItUp! et de jQuery. La dernière version de jQuery est incluse dans le zip de markItUp!, il n’est donc pas la peine de le télécharger à nouveau.
Placez le répertoire /markitup quelque part sur votre site. Ce répertoire contient :
- jquery.markitup.com : Script principal
- jquery.markitup.pack.com : Script principale mais compressé
- sets : Dossier contenant les fichiers de configuration JSon, les Css et images de la barre d'outils de votre éditeur
- skins : Dossier contenant les images et Css de l'éditeur
- templates Dossier contenant les templates de la prévisualisation
- utils : Dossier vide par défaut mais qui est destiné à contenir d'éventuels scripts secondaires.
Inclusions
Une fois le répertoire ajouté, il suffit d'inclure les éléments suivants dans la page désirée.
Dans le Head de la page
<script type="text/javascript" src="jquery.pack.js"></script> <script type="text/javascript" src="markitup/jquery.markitup.pack.js"></script> <link rel="stylesheet" type="text/css" href="markitup/skins/markitup/style.css" />
Puis les fichiers de configuration de notre éditeur.
Dans le Head de la page
<script type="text/javascript" src="markitup/sets/default/set.js"></script> <link rel="stylesheet" type="text/css" href="markitup/sets/default/style.css" />
Ci-dessus, on insère les fichiers livrés par défaut qui proposent une barre d'outils Html. L’objet de ce tutoriel sera de créer une nouvelle barre d'outils à l'éditeur. Ces lignes seront donc à remplacer.
Connexion
Il ne reste plus qu'à expliquer à notre script sur quels textareas agir. Si vous n'êtes pas encore familier avec la syntax jQuery, je vous invite à en consulter la documentation.
Dans le Body de la page
<script language="javascript">
$(function() {
// agira sur le textare comportant l'id 'myTextarea' par exemple.
$("#myTextarea").markItUp(mySettings);
// agira sur les textarea comportant la class 'myTextareas' par exemple.
$(".myTextareas").markItUp(mySettings);
// agira sur tous les textareas de la page
$("textarea").markItUp(mySettings);
});
</script>
Concrétement, prenons l’exemple suivant :
Dans le Body de la page
<script language="javascript">
$(function() {
$("#myTextarea").markItUp(mySettings);
});
</script>
<textarea id="myTextarea">Du contenu…</textarea>
mySettings est défini dans set.js, nous y reviendrons plus tard.
Personnalisation
MarkItUp! a été développé dans l'idée d'être un moteur d'insertion de tags/contenu personnalisable à souhait, permettant de simplement ajouter ou supprimer des commandes de sa barre d'outils.
Nous allons créer une barre d'outils avec quelques fonctions simples. Elle ne sera pas bien différente de celle fournie par défaut. L’intention est ici prétexte à un tutorial pas à pas.
Création d'un set
Créez un nouveau dossier nommé tutorial dans le dossier /markitup/sets/ et placez y un dossier /images. Ce dossier contiendra les icônes nécessaires à notre future barre d'outils. Copiez-y les icones suivants. Si vous souhaitez plus d’icônes, servez vous dans le très utile pack d’icônes Famfam.
Toujours dans le dossier /tutorial, Placez un fichier vide nommé set.js et un autre nommé style.css. Le fichier set.js est un fichier JSon qui contiendra la définition de chaque bouton de notre barre d'outils. Le fichier style.css quant à lui, contiendra les styles Css des boutons, pour notamment l'application des icônes.
Voilà, notre base est en place. Il nous reste maintenant à remplacer le set par défaut précédemment inclus par ce nouveau set. Remplacez donc default par tutorial dans les liens suivants :
Remplacement du set par defaut par notre tutorial
<script type="text/javascript" src="markitup/sets/tutorial/set.js"></script> <link rel="stylesheet" type="text/css" href="markitup/sets/tutorial/style.css" />
Les fichiers étant pour l'instant vide, le résultat doit être celui-ci.

Edition d'un set
Barre d'outils et markupSet
Rappelez-vous le mystérieux mySettings de cette ligne $("#myTextarea").markItUp(mySettings) c'est maintenant que ça se passe. Ouvrez les fichiers set.js et style.css et insérez les lignes suivantes.
set.js
mySettings = {
markupSet: [
{name:'Gras',
key:'G',
openWith:'<strong>',
closeWith:'</strong>',
placeHolder:'Texte en gras'
},
{name:'Italic',
key:'I',
openWith:'<em>',
closeWith:'</em>',
placeHolder:'Texte en italic'
},
{name:'Barré',
key:'B',
openWith:'<del>',
closeWith:'</del>',
placeHolder:'Texte barré'
}
]
}
style.css
.markItUp .markItUpButton1 a {
background-image:url(images/bold.png);
}
.markItUp .markItUpButton2 a {
background-image:url(images/italic.png);
}
.markItUp .markItUpButton3 a {
background-image:url(images/stroke.png);
}
Rafraichissez votre page et si tout a été fait dans l'ordre, on devrait avoir 3 boutons.

Revenons point par point sur ce qui vient d'être ajouté. Tout d'abord :
mySettings = { }
C'est l'objet contenant votre configuration d'éditeur et qui est passé au plug-in. Cet objet peut accueillir une multitude de propriétés, la principale est markupSet qui définit chaque bouton de la barre d'outils. Les propriétés de boutons utilisées ici sont :
- name : Nom du bouton à afficher.
- key : Raccourci clavier pour actionner ce bouton avec la touche Ctrl.
- openWith : La sélection sera précédée par le contenu de cette propriété.
- closeWith : La sélection sera suivie par le contenu de cette propriété.
Le fichier style.css se contente d'appliquer une feuille de style à notre barre d'outils. Vous remarquerez que markItUp! applique automatiquement une classe .markItUpButton[x] à chaque bouton. Cela permet de pouvoir facilement accéder à un bouton quand on en connait l'ordre. Il est possible d'appliquer un nom de classe spécifique à chaque bouton comme on le verra plus tard. La classe .markItUp qui précède chaque bouton n'est pas obligatoire mais préférable pour éviter les conflits. On verra dans de prochains tutoriaux comment éviter aussi le conflit entre différentes instances d'éditeur si leur barre d'outils est différente.
Allons un peu plus loin dans notre barre d'outils et ajoutons y de nouveaux éléments.
set.js
mySettings = {
markupSet: [
// ...
{separator:'----------------' },
{name:'Image',
key:'P',
replaceWith:'<img src="[![Source:!:http://]!]" alt="[![Texte alternatif]!]" />' },
{name:'Lien',
key:'L',
openWith:'<a href="[![Lien:!:http://]!]"(!( title="[![Titre]!]")!)>',
closeWith:'</a>',
placeHolder:'Texte cliquable'
}
]
}
style.css
.markItUp .markItUpButton4 a {
background-image:url(images/picture.png);
}
.markItUp .markItUpButton5 a {
background-image:url(images/link.png);
}

De nouvelle propriétés et astuces apparaissent ici.
- separator : Ajoute un séparateur.
- replaceWith : La séléction sera replacée par le contenu de cette propriété.
- Tags spéciaux [![ Intitulé :!: Valeur par défaut ]!] : Ces tags permettent d'insérer des valeurs entrées par l'utilisateur au moment de l'insertion.
- Tags spéciaux (!( valeur alternative )!) ou (!( valeur par défaut |!| valeur alternative )!) : Ces tags permettent d'appliquer un contenu alternatif si la touche Alt est pressée pendant le click.
Rien de bien nouveau dans le style.css, donc poursuivons.
set.js
mySettings = {
markupSet: [
// ...
{separator:'----------------' },
{name:'Nettoyer le Html',
className:'clean',
replaceWith:function(markItUp) {
return markItUp.selection.replace(/<(.*?)>/g, "")
}
},
{name:'Prévisualiser',
className:'preview',
call:'preview'
}
]
}
style.css
.markItUp .clean a {
background-image:url(images/clean.png);
}
.markItUp .preview a {
background-image:url(images/preview.png);
}

De nouvelle propriétés et astuces apparaissent ici.
- className : Permet d'appliquer un nom de classe spécifique à un bouton. C'est bien plus pratique pour les configurer quand la barre d'outils contient beaucoup de boutons ou quand leur position est amenée à changer.
- call : Ne sert que dans le cas de la prévisualisation. Call appelle la fonction interne d'ouverture de la fenêtre de prévisuatlisation.
-
Certaines propiétés peuvent acceuillir des fonctions : Les propriétés
openWith,closeWith,ReplaceWithetplaceHolderpeuvent contenir des fonctions qui retourneront un contenu spécifique. Ces fonctions reçoivent en paramètre quelques valeurs de l'éditeur, la principale étant le texte sélectionné comme nous le voyons dans l'exemple. D'autres valeurs sont passées dans cet objet. Se référer à la documentation pour plus d'information.
Que manque-t-il donc ?
Nous venons de survoler les principales propriétés de boutons de la propriété principale markupSet. A celles-ci s'ajoutent des callbacks qui seront appelées à différents moments lorsqu'un bouton est cliqué. Ces fonctions reçoivent également quelques valeurs de l'éditeur en paramètre. Se référer à la documentation http://markitup.jaysalvat.com pour plus d'information.
- beforeInsert : Lancé juste avant que du contenu du bouton soit inséré.
- afterInsert : Lancé juste après que du contenu du bouton soit inséré.
- beforeMultiInsert : Lancé juste avant que du contenu du bouton soit inséré sur de multiples lignes par l'appui sur Shift+Ctrl pendant le click.
- afterMultiInsert : Lancé juste après que du contenu du bouton soit inséré sur de multiples lignes par l'appui sur Shift+Ctrl pendant le click.
Insertions sans bouton
Il est possible de configurer le comportement de l'éditeur lorsque certaines touches stratégiques sont pressées. Enter, Ctrl + Enter, Shift + Enter et Tab peuvent être configurées quasiment de la même façon d'un bouton dans le markupSet et acceptent les propriétés openWith, closeWith, replaceWith, beforeInsert, afterInsert et un nouveau paramètre keepDefault.
- KeepDefault : Précise si le comportement normal de la combinaison de touches pressée doit être gardé ou pas.
mySettings = {
markupSet: [
// ...
],
onShiftEnter: {
keepDefault:false,
replaceWith:'<br />\n'
},
onCtrlEnter: {
keepDefault:false,
openWith:'\n<p>',
closeWith:'</p>'
},
onTab: {
keepDefault:false,
replaceWith:' '
}
}
Conclusion
Voilà pour ce premier tutorial sur la personnalisation de markItUp!. De nouveaux tutoriaux suivront pour approfondir ce chapitre et couvrir les options restantes. Notamment la prévisualisation, l'utilisation de markups autre que Html (et donc l’utilisation de parsers) et l'intégration à d'autres plug-ins et modules.
En espérant vous avoir éclairé et donné des idées de configuration sans avoir été trop indigeste.
markItUp! Part II, Intégration avancée. Une librairie d'image grâce à Flickr
Ce contenu est mis à disposition selon les termes de la licence Creative Commons 2.0 France : Paternité, Pas d'Utilisation Commerciale, Partage des Conditions Initiales à l'Identique.
Context
Thématiques :
Trackbacks
0 trackback



Commentaires
20 commentaires
Testé et approuvé !
Un très beau travail de ta part. J'ai hâte de savoir comment je peux enregistrer tous mes articles dans ma base de données en utilisant le bouton saved !
Merci beaucoup pour cet outil bien agréable à voir, utiliser et installer.
1. Par Ludovic le vendredi 20 juin 2008 à 12:18
Bonjour Ludo,
Pour sauver, aucun soucis, c'est un textarea normal. Un simple bouton submit te poste le contenu au même titre que les autres textfield ou textarea.
Tu peux t'amuser aussi à ajouter un icone "Save" qui poste en Ajax le contenu de l'éditeur dans la page que tu souhaites.
Pour t'en inspirer, regarde l'add-on QuickSave sur la page Download de markItUp! qui utilise cette méthode.
Lien: Markitup.jaysal…t.com/downloads
2. Par Jay Salvat le vendredi 20 juin 2008 à 14:32
félicitations Jay ! Super boulot bien utile et terriblement efficace.
J'ai seulement un tout petit bémol : après avoir taper mon texte dans mon textarea, lorsque j'utilise la fonction aperçu (preview), les sauts de lignes n'apparaissent pas...
Y a-t-il moyen d'y remédier ?
Un gros bisou à ton boud'choux qui pose avec toi !
3. Par Eric le samedi 28 juin 2008 à 15:15
Bonjour Eric,
La preview de markItUp! ne se contente que de réafficher le contenu HTML de ton éditeur sans post-traitement particulier. Si tu ne mets pas de retour à la ligne <br /> ou <p></p> tu n'auras pas de retour à la ligne.
Dans ce tutorial on définit la touche Shift+enter ou Ctrl+enter pour faire ce boulot.
Si tu as besoin d'un autre mode de preview que le HTML, tu peux ajouter une ligne au fichier de configuration pour poster le contenu de l'éditeur dans une page à toi (php par exemple).
mySettings = {
...
previewParserPath: 'monScript.php',
...
}
Ca fera l'objet d'un prochain tutorial, en attendant je t'invite à consulter la doc si l'anglais ne te rebute pas trop.
Markitup.jaysalvat.com
4. Par Jay Salvat le dimanche 29 juin 2008 à 21:12
Merci pour ta réponse Jay,
je viens de découvrir une bizarerie (pour moi en tout cas !) : sous Safari, le redimensionnement du textarea ne se fait pas verticalement, mais horizontalement ...
Tu peux tester sur le site que je développe actuellement et que je testais sur toutes les plateformes ce matin... (Cdomk76.org) -> ajouter un commentaire sur un billet de la page d'accueil
5. Par Eric le samedi 05 juillet 2008 à 10:25
Bonjour Eric,
Tu remarqueras que c'est un comportement normal de Safari. Il applique automatiquement une poignée de redimensionnement à tous les textareas de tous les sites.
Donc sur Safari, markItUp! n'applique pas sa poignée de redimensionnement pour ne laisser que celle native de Safari.
6. Par Jay Salvat le samedi 05 juillet 2008 à 10:38
Bonjour,
J'écris sur ce post qui parle de personnalisation ... sans trop savoir si c'est le bon lieu.
Tout d'abord, très bon travail, j'apprécie !
Ensuite et c'est là ma question, j'ai souvenir, au moment ou j'ai découvert MarkItUp! (il y a un an environ) d'avoir vu en démo une intégration plutôt réussie de gestionnaire d'image.
Impossible de remettre la main dessus ... Est-ce moi qui délire ou la démo en question à été supprimée ? Serait-il possible de la réintégrer / me la faire suivre si tu en as encore le contenu ?
Au plaisir ...
7. Par Emmanuel le mardi 12 août 2008 à 00:12
Arf... je dois délirer en partie... je lis que MarkItUp est en ligne depuis seulement le mois de mars ?! J'ai un soucis temporel !
Mais je suis sûr d'avoir vu ce gestionnaire :o)
8. Par Emmanuel le mardi 12 août 2008 à 00:14
Bonjour Emmanuel,
La démo dont tu parles est toujours en ligne si tu parles bien de celle-ci :
Markitup.jaysal…les/interaction
Pour la date de "naissance", c'est bien le 1er trimestre 2008. Tu dois te souvenir de jTagEditor, le 1er 'brouillon' de markItUp!
9. Par Jay Salvat le mardi 12 août 2008 à 10:48
Bonsoir,
Génial ça ! C'est exactement ce que je cherchais ... comme quoi. Enfin, normal que tu connaisses mieux que moi les recoins de ton site :o)
Merci !
10. Par Emmanuel le samedi 16 août 2008 à 20:52
A ton service !
11. Par Jay Salvat le mardi 19 août 2008 à 10:13
Bonjour, super plugin, je l'ai découvert récemment en cherchant ce qui se faisais de neuf dans le style.
Cependant je me pose encore certaine question sur les différentes configuration possible.
Par exemple, je cherche pour activer la prévisualisation automatiquement .
Ou encore la personnalisation de la prévisualisation, avec un style plus évoluer que le fond blanc classique ...
Pas que je ne sais comment faire, mais les class css ne sont pas indiquer dans la documentation.
Merci de toutes ses précisions.
12. Par Aurelien le mercredi 14 janvier 2009 à 12:10
Bonjour Aurélien,
La prévisualisation est par défaut rafraichie automatiquement à chaque clic de bouton. Pour le faire manuellement, il faut recliquer sur le bouton "preview".
Rien n'est prévu pour la rafraichir de l'extérieur.
Pour changer le style de la prévisualisation, tu as tout ce que tu veux dans le dossier /template que tu traites comme une page normale autant au niveau des styles que du HTML.
13. Par Jay Salvat le mercredi 14 janvier 2009 à 12:21
Bonjour,
J'ai découvert markItUp (hier) et installé dans la foulée ce superbe programme d'édition de texte formaté.
J'ai cependant un problème qui persiste :
La validation de mon formulaire (input submit) où le 'textarea' (name="contenu" id="markItUp") est présent ne renvoi pas le contenu du textarea dans mon POST...
ma requette SQL n'est donc pas effectuée et le message n'entre alors pas dans ma base de donnée
J'en appelle donc à votre aide pour me sortir de cet embarras.
Merci d'avance!
14. Par Clément le mercredi 21 janvier 2009 à 10:12
Bonjour Clément,
Vu comme ça je ne vois pas. Ca ne devrait pas arriver, markItUp! ne changeant pas le 'name' du textarea.
Peux-être peux-tu me donner un lien par email que je regarde le code.
Merci à toi.
15. Par Jay Salvat le mercredi 21 janvier 2009 à 10:49
Bonjour,
Je me demandais, pour insérer le code html généré dans un base mysql, ça ne pose pas un risque ? Normalement on ne stocke pas de code html dans une base non ?
Merci d'avance, et bravo pour le tutorial !
16. Par Gilles le jeudi 22 janvier 2009 à 13:26
Bonjour Gilles,
Non, pas de problème particulier à stocker du Html dans une base. D'ailleurs tous les éditeurs, même celui de Wordpress stockent leur mise en page dans une base.
Ce qui peut poser problème c'est l'affichage de ce même Html si il n'est pas de source sûre. Si tu donnes accès à un éditeur Html à un utilisateurs, il pourrait y injecter des scripts malicieux qui s'exécuteraient à chaque affichage.
C'est pour ça qu'il existe les markups languages (comme BBcode par exemple), pour donner des options de mise en page à des éditeurs publiques sans risquer d'injection.
Donc soit Html pour ta conso privée soit markup language (ou Html filtré) pour un éditeur public.
17. Par Jay Salvat le jeudi 22 janvier 2009 à 14:23
D'accord, merci je comprends mieux.
Bonne journée ;)
18. Par Gilles le jeudi 22 janvier 2009 à 15:13
I really wish you had this tutorial in English.
I like markItUp but I am banging my head to the wall for some time now just to be able to get another row of buttons...
19. Par Necati le mercredi 06 janvier 2010 à 21:00
Hi Necati,
There is no built-in way to add anothor row of button. (markItUp! 2.0 will have this feature).
Try to use dropdown menus to add and tidy your button bar.
Regards.
20. Par Jay Salvat le jeudi 07 janvier 2010 à 10:33