Manuel du propriétaire | MACROMEDIA DREAMWEAVER MX 2004-EXTENSION DE DREAMWEAVER Manuel utilisateur

Ajouter à Mes manuels
416 Des pages
Manuel du propriétaire | MACROMEDIA DREAMWEAVER MX 2004-EXTENSION DE DREAMWEAVER Manuel utilisateur | Fixfr
Extension de Dreamweaver
Marques commerciales
Add Life to the Web, Afterburner, Aftershock, Andromedia, Allaire, Animation PowerPack, Aria, Attain, Authorware,
Authorware Star, Backstage, Bright Tiger, Clustercats, Cold Fusion, Contribute, Design in Motion, Director, Dream Templates,
Dreamweaver, Drumbeat 2000, EDJE, EJIPT, Extreme 3D, Fireworks, Flash, Fontographer, FreeHand, Generator, HomeSite,
JFusion, JRun, Kawa, Know Your Site, Knowledge Objects, Knowledge Stream, Knowledge Track, LikeMinds, Lingo, Live
Effects, MacRecorder Logo and Design, Macromedia, Macromedia Action!, Macromedia Flash, Macromedia M Logo & Design,
Macromedia Spectra, Macromedia xRes Logo and Design, MacroModel, Made with Macromedia, Made with Macromedia Logo
and Design, MAGIC Logo and Design, Mediamaker, Movie Critic, Open Sesame!, Roundtrip HTML, Shockwave, Sitespring,
SoundEdit, Titlemaker, UltraDev, Web Design 101, what the web can be et Xtra sont des marques ou des marques déposées de
Macromedia, Inc. et peuvent être déposées aux Etats-Unis ou dans d’autres pays. Les autres noms de produit, logos, concepts,
titres, mots ou phrases mentionnés dans cette publication peuvent être des marques commerciales, des marques de service ou des
noms commerciaux de Macromedia, Inc. ou d’autres entités et peuvent être déposés dans certaines juridictions ou certains pays.
Informations de tiers
Ce manuel contient des liens vers des sites Web tiers qui ne sont pas contrôlés par Macromedia et Macromedia ne peut en aucun
cas être tenu responsable du contenu de ces sites. Si vous accédez à l’un de ces sites, vous le faites à vos propres risques.
Macromedia propose ces liens dans un but pratique uniquement et ne peut en aucun cas endosser ou accepter la responsabilité du
contenu de ces sites tiers.
Vous trouverez des informations sur les logiciels tiers et/ou d’autres conditions générales à l’adresse suivante :
http://www.macromedia.com/go/thirdparty_fr/.
Navigateur Opera ® Copyright © 1995-2002 Opera Software ASA et ses fournisseurs. Tous droits réservés.
Dénégation de responsabilité d’Apple
APPLE COMPUTER, INC. N’ASSUME AUCUNE GARANTIE, IMPLICITE OU EXPLICITE, SUR LE LOGICIEL
INFORMATIQUE CI-INCLUS, SA COMMERCIABILITE OU SON ADEQUATION A UN OBJECTIF PARTICULIER.
L’EXCLUSION DES GARANTIES IMPLICITES N’ETANT PAS AUTORISEE DANS CERTAINS ETATS,
L’EXCLUSION CI-DESSUS PEUT DONC NE PAS S’APPLIQUER A VOTRE CAS. CETTE GARANTIE VOUS OFFRE
DES DROITS JURIDIQUES SPECIFIQUES. VOUS POUVEZ DISPOSER DE CERTAINS AUTRES DROITS, QUI
VARIENT SELON LES ETATS.
Copyright © 1997-2003 Macromedia, Inc et ses bailleurs de licence. Tous droits réservés. Ce manuel ne peut pas être
copié, photocopié, reproduit, traduit ou converti sous forme électronique ou informatique, en partie ou en totalité, sans
l’autorisation écrite préalable de Macromedia, Inc. Numéro de référence ZDW70M300F
Remerciements
Direction : Sheila McGinn
Gestion de projet : Robert Berry
Rédaction : Robert Berry, David Jacowitz
Responsable édition : Lisa Stanziano
Mise en forme : Mary Kraemer, Noreen Maher
Gestion de la production : Patrice O’Neill
Conception et production : Adam Barnett, Aaron Begley, Chris Basmajian, John Francis, Jeff Harmon
Remerciements particuliers à Jay London, Jeff Schang, Lori Hylan-Cho, Hisami Scott, Sam Mathews, Jake Cockrell, Russ
Helfand, Randy Edmunds, George Comninos, Rosana Francescato, Charles Nadeau, Bonnie Loo, Gwenael Cossoul, Luciano
Arruda, Masayo Noda, Richard Clairicia, Scott Richards, Seungmin Lee, Vincent Truong, Birnou Sébarte et les équipes
d’ingénierie et de contrôle qualité de Dreamweaver.
Première édition : Septembre 2003
Macromedia, Inc.
600 Townsend St.
San Francisco, CA 94103
Etats-Unis
TABLE DES MATIERES
CHAPITRE 1 : Introduction
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Arrière-plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installation d’une extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ressources supplémentaires pour les créateurs d’extensions . . . . . . . . . . . . . . . . . .
Nouveautés du manuel Extension de Dreamweaver. . . . . . . . . . . . . . . . . . . . . . . .
Modifications de la documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Macromedia Press. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctionnalités supprimées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conventions utilisées dans ce manuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
14
14
15
15
16
16
16
17
PARTIE I : Présentation
CHAPITRE 2 : Extension de Dreamweaver
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Types d’extensions de Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Autres méthodes d’extension pour Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . 23
Extensions et dossiers de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Dossiers de configuration multiutilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Exécution des scripts au démarrage ou à la fermeture . . . . . . . . . . . . . . . . . . . . 25
API d’extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Traitement de JavaScript dans les extensions par Dreamweaver . . . . . . . . . . . . . 25
Affichage de l’aide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Localisation d’une extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Fichiers de chaîne XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Chaînes localisables avec valeurs intégrées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Utilisation de Extension Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Personnalisation de Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
A propos de la personnalisation de Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . 29
A propos de la personnalisation de Dreamweaver dans un
environnement multiutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
A propos de la syntaxe des balises mm_deleted_files.xml . . . . . . . . . . . . . . . . . 31
Réinstallation et désinstallation de Dreamweaver dans un
environnement multiutilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Personnalisation de documents par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Personnalisation de conceptions de pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3
Personnalisation de l’aspect des boîtes de dialogue . . . . . . . . . . . . . . . . . . . . . . 32
Modification du type de fichier par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Personnalisation de l’interprétation de balises propriétaires . . . . . . . . . . . . . . . . 34
Utilisation des profils de navigateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
A propos de la mise en forme des profils de navigateurs . . . . . . . . . . . . . . . . . . 40
Création et modification d’un profil de navigateur . . . . . . . . . . . . . . . . . . . . . . 42
Modification des mappages FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Types de documents extensibles dans Dreamweaver. . . . . . . . . . . . . . . . . . . . . . . . 43
Ouverture d’un document dans Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . 53
CHAPITRE 3 : Interfaces utilisateur destinées aux extensions .
. . . . . . . . . . . . . . 55
Conception d’une interface utilisateur d’extension . . . . . . . . . . . . . . . . . . . . . . . . 55
Commande de rendu HTML de Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Utilisation de commandes d’interface utilisateur personnalisées
dans les extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Listes de sélection modifiables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Contrôles de base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Ajout d’une commande de grille de variables . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Ajout de commandes d’arborescence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Manipulation du contenu d’une commande d’arborescence . . . . . . . . . . . . . . . 64
Commande de bouton couleur pour les extensions . . . . . . . . . . . . . . . . . . . . . 65
Ajout de contenu Flash à Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Exemple d’une boîte de dialogue Flash simple . . . . . . . . . . . . . . . . . . . . . . . . . 66
CHAPITRE 4 : Modèle d’objet de document (DOM) Dreamweaver .
. . . . . . . . . . 69
De quel DOM de document parlons-nous ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
DOM Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Objets, propriétés et méthodes du DOM Dreamweaver . . . . . . . . . . . . . . . . . . 70
Propriétés et méthodes de l’objet document . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Propriétés et méthodes des objets de balise HTML . . . . . . . . . . . . . . . . . . . . . 74
Propriétés et méthodes des objets texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Propriétés et méthodes des objets de commentaire . . . . . . . . . . . . . . . . . . . . . . 76
Objets dreamweaver et site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
CHAPITRE 5 : Personnalisation du mode Code . . . . . .
. . . . . . . . . . . . . . . . . . . . 79
Indicateurs de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Fichier CodeHints.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Balises des indicateurs de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Coloration du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Fichiers de coloration du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Coloration des délimiteurs de bloc de modèle. . . . . . . . . . . . . . . . . . . . . . . . . 101
Traitement des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Modification des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Exemples de coloration du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4
Table des matières
Validation du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
<css-support> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
<property> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
<value>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modification du formatage HTML par défaut . . . . . . . . . . . . . . . . . . . . . . . . . .
111
112
112
113
114
PARTIE II : API d’extension
CHAPITRE 6 : Objets de la barre Insérer
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Fonctionnement des fichiers d’objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Fichier de définition de la barre Insérer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Hiérarchie des balises du fichier Insertbar.xml . . . . . . . . . . . . . . . . . . . . . . . . 118
Balises de définition de la barre Insérer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Attributs des balises de définition de la barre Insérer. . . . . . . . . . . . . . . . . . . . 121
Modification de la barre Insérer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Ajout d’objets à la barre Insérer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Ajout d’objets au menu Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
API des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
canInsertObject() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
displayHelp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
isDomRequired() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
insertObject() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
objectTag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
windowDimensions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Exemple basique d’insertion d’un objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
CHAPITRE 7 : Commandes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Fonctionnement des commandes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Ajout de commandes au menu Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
API des commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
canAcceptCommand() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
commandButtons() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
isDomRequired() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
receiveArguments(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
windowDimensions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Exemple de commande simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Création de l’interface utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Ecriture du code JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Exécution de la commande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Table des matières
5
CHAPITRE 8 : Menus et commandes de menu
. . . . . . . . . . . . . . . . . . . . . . . . . 151
A propos du fichier menus.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
<menubar> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
<menu> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
<menuitem> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
<separator>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
<shortcutlist> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
<shortcut> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Modification des menus et des éléments de menu . . . . . . . . . . . . . . . . . . . . . . . . 158
Modification du nom d’un menu ou d’un élément de menu. . . . . . . . . . . . . . 159
Modification des raccourcis clavier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Commandes de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Modification du menu Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Fonctionnement des commandes de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
API des commandes de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
canAcceptCommand() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
commandButtons() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
getDynamicContent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
isCommandChecked() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
receiveArguments() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
setMenuText() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
windowDimensions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Commande de menu simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Création des éléments de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Rédaction du code JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Enregistrement du fichier de commandes dans le dossier Menu . . . . . . . . . . . 170
Un menu dynamique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Création des éléments de menu dynamiques. . . . . . . . . . . . . . . . . . . . . . . . . . 171
Ecriture du code JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
CHAPITRE 9 : Barres d’outils
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Fonctionnement des barres d’outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Comportement des barres d’outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Fonctionnement des commandes de barres d’outils. . . . . . . . . . . . . . . . . . . . . 179
Fichier de définition de la barre d’outils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
<toolbar> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
<include/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
<itemtype/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
<itemref/>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
<separator/> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Balises d’éléments de barre d’outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
<button> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
<checkbutton> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
<radiobutton> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
<menubutton> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
<dropdown>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
<combobox>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
<editcontrol> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
<colorpicker> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
6
Table des matières
Attributs de balises d’éléments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
id="unique_id". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
showIf="script". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
image="image_path" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
disabledImage="image_path" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
overImage="image_path" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
tooltip="tooltip string" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
label="label string" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
width="number" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
menuID="menu_id" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
colorRect="left top right bottom". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
file="command_file_path" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
domRequired="true" ou "false" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
enabled="script" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
checked="script". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
value="script" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
update="update_frequency_list". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
command="script" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
arguments="argument_list" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
API de commande de la barre d’outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
canAcceptCommand() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
getCurrentValue(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
getDynamicContent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
getMenuID() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
getUpdateFrequency() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
isCommandChecked() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
isDOMRequired() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
receiveArguments(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
showIf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Fichier de commandes de barre d’outils simple . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Création de la zone de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Rédaction du code JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Insertion des fichiers dans le dossier Toolbars . . . . . . . . . . . . . . . . . . . . . . . . . 204
CHAPITRE 10 : Rapports
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Fonctionnement des rapports de site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctionnement des rapports indépendants . . . . . . . . . . . . . . . . . . . . . . . . . . . .
API de rapports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
processFile() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
beginReporting() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
endReporting() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
commandButtons() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
configureSettings() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
windowDimensions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Table des matières
206
207
208
208
208
209
209
210
210
7
CHAPITRE 11 : Bibliothèques et éditeurs de balises .
. . . . . . . . . . . . . . . . . . . . . 211
Format de fichier bibliothèque de balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Sélecteur de balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Création d’un nouvel éditeur de balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
API de l’éditeur de balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
inspectTag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
validateTag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
applyTag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
CHAPITRE 12 : Inspecteurs de propriétés
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Fonctionnement des fichiers d’inspecteur de propriétés . . . . . . . . . . . . . . . . . . . . 226
API de l’inspecteur de propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
canInspectSelection() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
displayHelp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
inspectSelection() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
CHAPITRE 13 : Panneaux flottants . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Fonctionnement des fichiers de panneau flottant. . . . . . . . . . . . . . . . . . . . . . . . . 231
API du panneau flottant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
displayHelp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
documentEdited() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
getDockingSide() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
initialPosition(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
initialTabs() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
isATarget() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
isAvailableInCodeView() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
isResizable() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
selectionChanged() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Script Editor : une extension de panneau flottant . . . . . . . . . . . . . . . . . . . . . . . . 239
Création des panneaux flottants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Ecriture du code JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Enregistrement du fichier dans le dossier Floaters . . . . . . . . . . . . . . . . . . . . . . 242
Création d’un élément de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
CHAPITRE 14 : Comportements .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Fonctionnement des comportements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Insertion de plusieurs fonctions dans le fichier de l’utilisateur . . . . . . . . . . . . . 245
API de comportements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
applyBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
behaviorFunction() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
canAcceptBehavior(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
displayHelp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
deleteBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
identifyBehaviorArguments() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
inspectBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
windowDimensions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Procédure à suivre lorsqu’une action exige une valeur renvoyée . . . . . . . . . . . . 252
8
Table des matières
CHAPITRE 15 : Comportements de serveur .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Architecture de Dreamweaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Comment appeler les fonctions de l’API de comportement de serveur. . . . . . . . . 259
API de comportement de serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
analyzeServerBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
applyServerBehavior(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
canApplyServerBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
copyServerBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
deleteServerBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
displayHelp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
findServerBehaviors() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
inspectServerBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
pasteServerBehavior() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Fonctions d’implémentation des comportements de serveur . . . . . . . . . . . . . . . . 266
dwscripts.findSBs(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
dwscripts.applySB() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
dwscripts.deleteSB() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Modification de fichiers EDML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Quelques mots sur la structure EDML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Balises de fichiers EDML Groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
<group> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
attributs <group> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
<title>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
<groupParticipants> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
attributs <groupParticipants> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
<groupParticipant>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
attributs <groupParticipant>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Fichiers EDML Participant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
<participant> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
attributs <participant> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
<quickSearch> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
<insertText> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
attributs <insertText> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
<searchPatterns> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
attributs <searchPatterns> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
<searchPattern> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
attributs <searchPattern> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
<updatePatterns> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
<updatePattern> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
attributs <updatePattern> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
<delete> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
attributs <delete> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
<translator> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
<searchPatterns> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
<translations> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
<translation> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
attributs <translation> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
<openTag> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Table des matières
9
<attributs> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
<attribute> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
<display> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
<closeTag> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Techniques de comportements de serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Recherche des comportements de serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Mise à jour des comportements de serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Suppression de comportements de serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Comment éviter les conflits dans les fichiers JavaScript contenant la directive
de partage de mémoire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
CHAPITRE 16 : Sources de données
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Fonctionnement des sources de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
API des sources de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
addDynamicSource() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
deleteDynamicSource(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
displayHelp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
editDynamicSource() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
findDynamicSources() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
generateDynamicDataRef() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
generateDynamicSourceBindings() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
inspectDynamicDataRef() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Un exemple simple de source de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Création du fichier de définition de source de données . . . . . . . . . . . . . . . . . . 312
Création du fichier EDML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Création du fichier JavaScript qui implémente les fonctions API de sources
de données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Création des fichiers de commande de prise en charge pour les entrées
utilisateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Utilisation d’une nouvelle source de données . . . . . . . . . . . . . . . . . . . . . . . . . 318
CHAPITRE 17 : Formats de serveur
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Organisation du formatage de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Le fichier Formats.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Le menu Plus (+) de la boîte de dialogue Modifier la liste de formats . . . . . . . 323
Mise en service des fonctions de formatage de données . . . . . . . . . . . . . . . . . . . . 323
L’API de formats de serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
applyFormat(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
applyFormatDefinition() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
deleteFormat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
formatDynamicDataRef(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
inspectFormatDefinition() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
10
Table des matières
CHAPITRE 18 : Composants .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Personnalisation du panneau Composants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Fichiers du panneau Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Fonctions de l’API du panneau Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
getComponentChildren() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
getContextMenuId() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
getCodeViewDropCode(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
getSetupSteps(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
setupStepsCompleted(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
handleDesignViewDrop(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
handleDoubleClick() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
toolbarControls() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
CHAPITRE 19 : Modèles de serveur .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Fonctionnement de la personnalisation des modèles de serveur . . . . . . . . . . . . . .
Fonctions de l’API des modèles de serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
canRecognizeDocument(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getFileExtensions() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getLanguageSignatures() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerExtension(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerInfo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerLanguages() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerModelExtDataNameUD4() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerModelDelimiters() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerModelDisplayName() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerModelFolderName(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getServerSupportsCharset() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
getVersionArray() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CHAPITRE 20 : Traducteurs de données .
345
346
346
346
347
348
348
349
349
350
350
350
351
351
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Fonctionnement des traducteurs de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
API du traducteur de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
getTranslatorInfo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
translateMarkup(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
liveDataTranslateMarkup() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Choix du type de traducteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Ajout d’un attribut traduit à une balise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Contrôle des attributs traduits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
Verrouillage des balises ou des blocs de code traduits . . . . . . . . . . . . . . . . . . . . . . 363
Exemple de traducteur de blocs/balises simple . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Recherche de bogues dans le traducteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Table des matières
11
CHAPITRE 21 : Extensions C
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Intégration des fonctions C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Extensions C et interpréteur JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Types de données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
API d’extension C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
typedef JSBool (*JSNative)(JSContext *cx, JSObject *obj, unsigned int argc,
jsval *argv, jsval *rval). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
JSBool JS_DefineFunction(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
char *JS_ValueToString() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
JSBool JS_ValueToInteger() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
JSBool JS_ValueToDouble() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
JSBool JS_ValueToBoolean() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
JSBool JS_ValueToObject() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
JSBool JS_StringToValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
JSBool JS_DoubleToValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
JSVal JS_BooleanToValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
JSVal JS_IntegerToValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
JSVal JS_ObjectToValue() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
char *JS_ObjectType() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
JSObject *JS_NewArrayObject() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
long JS_GetArrayLength() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
JSBool JS_GetElement(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
JSBool JS_SetElement() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
JSBool JS_ExecuteScript() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
JSBool JS_ReportError() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
API de configuration multiutilisateur et d’accès aux fichiers . . . . . . . . . . . . . . . . 383
JS_Object MM_GetConfigFolderList() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
JSBool MM_ConfigFileExists() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
int MM_OpenConfigFile() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
JSBool MM_GetConfigFileAttributes() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
JSBool MM_SetConfigFileAttributes(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
JSBool MM_CreateConfigFolder(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
JSBool MM_RemoveConfigFolder() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
JSBool MM_DeleteConfigFile() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
Appel d’une fonction C à partir de JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
PARTIE III : Annexe
ANNEXE A : Dossier Shared
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Contenu du dossier Shared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Le dossier Common . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Le dossier MM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Autres dossiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Utilisation du dossier Shared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
INDEX
12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Table des matières
CHAPITRE 1
Introduction
Ce manuel décrit l’API (interface de programmation d’application) et la plate-forme Macromedia
Dreamweaver MX 2004 qui vous permettent des créer des extensions de Dreamweaver. En règle
générale, les extensions effectuent les types de tâches suivants :
• automatisation des modifications apportées au document actif de l’utilisateur, telles que
•
•
•
l’insertion de code HTML, CFML ou JavaScript, la modification des propriétés du texte et des
images ou le tri des tableaux ;
interaction avec l’application pour l’ouverture ou la fermeture automatique des fenêtres ou des
documents, le changement des raccourcis clavier, etc. ;
connexion aux sources de données, permettant aux utilisateurs de Dreamweaver de créer
dynamiquement des pages adaptées aux données ;
insertion et gestion de blocs de code de serveur dans le document actif.
Il peut se révéler judicieux de rédiger, pour le traitement d’une tâche fréquente et donc répétitive,
un type d’extension qui séduira un bon nombre de développeurs Web. Il se peut également qu’un
problème donné ne puisse être résolu qu’en rédigeant une extension spécifique à cette situation.
Quoi qu’il en soit, l’ensemble complet d’outils proposés par Dreamweaver vous permettra
d’étendre ou de personnaliser ses fonctionnalités.
Ce guide présente les fonctions API appelées par Dreamweaver pour implémenter divers objets,
menus, panneaux flottants, comportements de serveur, etc., compris dans les fonctionnalités de
Dreamweaver. Pour ajouter un objet, un menu, un panneau flottant ou toute autre fonctionnalité
à Dreamweaver, vous devez encoder les fonctions requises par le type d’extension désirée. Ce
manuel décrit les arguments transmis par Dreamweaver à ces fonctions ainsi que les valeurs
attendues en retour par le programme.
Il explique également comment personnaliser Dreamweaver en modifiant et en ajoutant des
balises à divers fichiers HTML et XML pour ajouter des éléments de menu, des types de
documents, etc.
Pour plus d’informations sur l’utilité et les possibilités offertes par les API JavaScript, utilisables
pour effectuer diverses opérations dans vos extensions Dreamweaver, voir le Guide des API de
Dreamweaver. Si vous envisagez de créer des extensions fonctionnant avec des bases de données,
vous pouvez également consulter les sections relatives aux connexions de bases de données dans le
manuel Bien démarrer avec Dreamweaver.
13
Arrière-plan
La plupart des extensions Dreamweaver sont rédigées en langage HTML et en langage JavaScript.
Les instructions présentées ici supposent que vous possédez une bonne maîtrise des éléments
suivants : Dreamweaver et programmation JavaScript, HTML et XML. Par ailleurs, si vous
implémentez des extensions C, vous devez savoir comment créer et utiliser des bibliothèques de
liens dynamiques (DLL) C. Pour rédiger vos propres extensions afin de créer des
applications Web, vous devez connaître les langages de script côté serveur et au moins l’une des
plates-formes suivantes : Active Server Pages (ASP), ASP.net, PHP: Hypertext Preprocessor
(PHP), ColdFusion ou Java Server Pages (JSP).
Installation d’une extension
A mesure que vous vous familiarisez avec la procédure de rédaction d’extensions, vous pouvez si
vous le souhaitez consulter les extensions ainsi que les ressources disponibles sur le site Web de
Macromedia Exchange (http://www.macromedia.com/go/exchange_fr). L’installation d’une
extension existante vous permet de découvrir quelques-uns des outils qui vous seront utiles pour
travailler avec vos propres extensions.
Pour installer une extension, procédez de la manière suivante :
1 Téléchargez Extension Manager à partir du site Web des téléchargements de Macromedia
2
3
4
5
(http://www.macromedia.com/fr/software/downloads/), puis installez-le.
Connectez-vous au site Web de Macromedia Exchange (http://www.macromedia.com/go/
exchange_fr).
Sélectionnez l’extension que vous voulez utiliser parmi celles disponibles. Cliquez sur le lien de
téléchargement pour télécharger le progiciel d’extension.
Enregistrez le progiciel d’extension dans le dossier Downloaded Extensions de votre dossier
Dreamweaver MX 2004.
Dans Extension Manager, choisissez Fichier > Installer extension. Dans Dreamweaver,
choisissez Commandes > Gérer les extensions pour lancer Extension Manager.
Extension Manager installe automatiquement l’extension dans Dreamweaver, depuis le dossier
Downloaded Extension.
Il est nécessaire de redémarrer Dreamweaver avant de pouvoir utiliser certaines extensions. Si
Dreamweaver est en cours d’exécution pendant l’installation de l’extension, il vous sera peut-être
demandé de fermer et de redémarrer l’application.
Pour afficher des informations de base sur l’extension à la suite de son installation, ouvrez
Extension Manager (Commandes > Gérer les extensions) dans Dreamweaver.
Ressources supplémentaires pour les créateurs d’extensions
Pour entrer en contact avec d’autres développeurs d’extensions, vous pouvez rejoindre le forum de
discussion consacré à l’extensibilité de Dreamweaver. Pour ce faire, il vous suffit de vous rendre à
l’adresse suivante : www.macromedia.com/go/extending_newsgrp.
14
Chapitre 1 : Introduction
Nouveautés du manuel Extension de Dreamweaver
Dreamweaver MX 2004 comprend les nouvelles fonctions et interfaces extensibles suivantes.
• Nouvelle barre Insérer
•
•
•
•
•
La barre Insérer est maintenant divisée en catégories (au lieu d’onglets) afin de répartir divers
objets en groupes. Elle prend également en charge les menus contextuels. Ces nouveaux
groupements et fonctionnalités offrent une interface plus ordonnée. Les utilisateurs peuvent
désormais regrouper leurs objets favoris dans la catégorie correspondante pour les retrouver
rapidement. Les extensions peuvent être ajoutées à leur propre catégorie ou menu contextuel et
regroupées avec d’autres objets existants. Voir le Chapitre 6, Objets de la barre Insérer, page 117.
Coloration du code extensible
Vous permet d’ajouter de nouveaux mots-clés à un code de coloration existant ou d’en créer un
nouveau. Si vous développez de nouvelles fonctions JavaScript à utiliser dans votre script côté
client, vous pouvez, par exemple, ajouter les noms de ces fonctions à la section mots-clés, afin
qu’ils s’affichent dans la couleur spécifiée dans Préférences. Vous pouvez également ajouter de
nouveaux modèles de coloration de code pour un nouveau type de document. Pour plus
d’informations, voir le Chapitre 5, Personnalisation du mode Code, page 79.
Les balises cssimport et cssmedia prennent en charge les règles de coloration de code pour les
fonctions @import et @media de l’élément style dans une feuille de style CSS. Pour plus
d’informations, voir le Chapitre 5, Personnalisation du mode Code, page 79.
Prise en charge API pour éléments Flash (fichiers SWC)
Les développeurs d’extensions peuvent ajouter leurs propres éléments Flash dans la barre
Insérer, le menu Insertion ou d’autres barres d’outils pour permettre à l’utilisateur de les insérer
dans ses documents en cliquant simplement sur un bouton ou une option de menu. Voir
Intégration de Flash dans le Guide des API de Dreamweaver.
Vous trouverez une prise en charge améliorée des pages Code-Behind dans le fichier
CodeBehindMgr.js du dossier Configuration/Shared/Common de Dreamweaver. Voir
l’Annexe A, Contenu du dossier Shared, page 395.
Intégration de contenu de Personnalisation de Dreamweaver
Certains éléments auparavant uniquement disponibles sur le site Web de Macromedia sont
désormais intégrés à ce manuel.
Modifications de la documentation
Extension de Dreamweaver MX est désormais divisé en deux volumes : Extension de Dreamweaver
et le Guide des API de Dreamweaver. Extension de Dreamweaver explique comment créer divers
types d’extensions de Dreamweaver, y compris les fonctions à rédiger pour chaque type. Il décrit
également comment personnaliser Dreamweaver en modifiant certains de ses fichiers HTML et
XML configurables. Le Guide des API de Dreamweaver décrit les deux API qui vous permettent
d’effectuer diverses tâches dans vos extensions de Dreamweaver.
Le guide Extension de Dreamweaver est conçu pour l’utilisateur souhaitant apprendre à construire
une extension pour Dreamweaver. Le Guide des API de Dreamweaver est conçu pour aider le
programmeur qui maîtrise déjà bien ces notions à retrouver rapidement la fonction lui permettant
d’effectuer une tâche précise. Cette division en deux volumes permet également de distinguer
clairement les fonctions API d’extension que tout auteur d’extension doit coder et auxquelles
Dreamweaver fait appel et les fonctions JavaScript et Utility API qu’un programmeur peut appeler
pour accomplir diverses tâches au sein d’une extension.
Nouveautés du manuel Extension de Dreamweaver
15
Extension de Dreamweaver comprend les extensions suivantes afin d’aider les créateurs novices à
bien démarrer dans le domaine des extensions.
• Exemples nouveaux et mis à jour
•
•
•
De nouveaux exemples ont été ajoutés. Ils concernent la barre Insérer, les composants, les
sources de données, l’intégration de Flash et le dossier Shared. Les exemples présentés dans les
chapitres dédiés aux commandes, aux commandes de menus, aux barres d’outils et aux
panneaux flottants ont été mis à jour et sont désormais présentés avec des illustrations et des
explications facilitant la compréhension des instructions.
Nouvelle organisation
Le contenu a été réorganisé pour plus de clarté. Les fonctions API JavaScript dans le Guide des
API de Dreamweaver ont, par exemple, été organisées en chapitres selon la partie de
Dreamweaver affectée par la fonction.
Description du contenu du dossier Shared (voir annexe A)
Le dossier Configuration/Shared de Dreamweaver comprend plusieurs fichiers et sous-dossiers
qui renferment du code HTML et JavaScript implémentant diverses fonctions et interfaces
utilisateur de Dreamweaver. Ces fichiers se trouvent dans le dossier Shared car le code HTML
et le code JavaScript sont fréquemment utilisés. L’annexe A décrit brièvement le contenu des
fichiers et sous-dossiers les plus utilisés au sein du dossier Configuration/Shared.
Révision du chapitre Composants
Le chapitre Composants a été modifié de façon à être plus clair et précis. Il comprend de
nouveaux exemples de fonctions.
Pour plus d’informations sur les nouvelles fonctions ajoutées à Utility API ou l’API JavaScript,
voir le Guide des API de Dreamweaver.
Macromedia Press
Approfondissez votre connaissance de Dreamweaver grâce aux ouvrages de Macromedia Press.
Pour connaître les derniers ouvrages rédigés par des experts, rendez-vous à l’adresse
www.macromedia.com/go/dw2004_help_mmp.
Fonctionnalités supprimées
Certaines fonctionnalités ont été supprimées de Dreamweaver MX 2004. Les informations
suivantes ont donc été supprimées du manuel Extension de Dreamweaver :
• Références à l’espace de travail de Dreamweaver 4
• Chapitre consacré au débogueur JavaScript
Pour connaître toutes les fonctions supprimées, voir Utilisation de Dreamweaver. Pour plus
d’informations sur les fonctions supprimées des Utility API et API JavaScript, voir le Guide des
API de Dreamweaver.
Errata
Vous trouverez une liste des problèmes connus dans la section Extensibility (Extension) du centre
de support de Dreamweaver (www.macromedia.com/go/extending_errata).
16
Chapitre 1 : Introduction
Conventions utilisées dans ce manuel
Ce manuel utilise les conventions typographiques suivantes :
• La police de code indique des fragments de code et des constantes d’API, notamment des
•
•
•
•
noms de classe, des noms de méthodes, des noms de fonctions, des noms de type, des scripts,
des instructions SQL et des noms de balises et d’attributs HTML et XML.
La police de code en italique identifie les éléments remplaçables dans le code.
Le symbole de continuation (¬) indique qu’une longue ligne de code a été fractionnée sur deux
lignes ou plus. En raison des limites de marge du format de ce manuel, une ligne de code
continue doit ici être coupée. Lorsque vous copiez les lignes de code, supprimez le symbole de
continuation et entrez-les comme une seule ligne.
Les accolades ({ }) placées avant et après un argument de fonction indiquent que cet argument
est facultatif.
Vous pouvez remplacer le préfixe dreamweaver. présent dans le nom de certaines fonctions
(par exemple, dreamweaver.funcname) par dw. (dw.funcname) lorsque vous rédigez du code.
Ce manuel utilise le préfixe dreamweaver. complet dans les définitions de fonctions et dans
l’index. De nombreux exemples utilisent néanmoins le préfixe court (dw.)
Conventions de noms utilisées dans ce manuel :
• Vous — le développeur responsable de la rédaction des extensions
• L’utilisateur — la personne utilisant Dreamweaver
• Le visiteur — la personne qui visualise la page Web créée par l’utilisateur.
Conventions utilisées dans ce manuel
17
18
Chapitre 1 : Introduction
Maîtrisez les fondements de l’interface Macromedia Dreamweaver MX 2004 et apprenez à
personnaliser et à étendre Dreamweaver selon vos besoins de développement Web. Ces
fondements comprennent les dossiers Dreamweaver, les API d’extension, les composants
d’interface de Dreamweaver, le modèle d’objet de document (DOM) et les types de documents de
Dreamweaver.
Chapitre 2 : Extension de Dreamweaver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Chapitre 3 : Interfaces utilisateur destinées aux extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Chapitre 4 : Modèle d’objet de document (DOM) Dreamweaver . . . . . . . . . . . . . . . . . . . . . . 69
Chapitre 5 : Personnalisation du mode Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
PARTIE I
PARTIE I
Présentation
CHAPITRE 2
Extension de Dreamweaver
Les fonctions suivantes de Macromedia Dreamweaver MX 2004 vous permettent de créer des
extensions :
• Un analyseur HTML (également appelé module de rendu), qui permet de concevoir des
•
•
•
interfaces utilisateur pour les extensions en utilisant des champs de formulaires, des calques,
des images et d’autres éléments HTML. Dreamweaver dispose de son propre
analyseur HTML.
Une arborescence de dossiers qui organise et stocke les fichiers qui implémentent et
configurent les éléments et extensions de Dreamweaver.
Une série d’API (interfaces de programmation d’applications), qui donnent accès à la
fonctionnalité de Dreamweaver au moyen du langage JavaScript.
Un interpréteur JavaScript, qui exécute les instructions de code JavaScript dans les fichiers
d’extension. Dreamweaver utilise l’interpréteur Netscape JavaScript version 1.5. Pour plus
d’informations sur les différences qui existent entre cette version de l’interpréteur et les
précédentes, voir Traitement de JavaScript dans les extensions par Dreamweaver, page 25.
Types d’extensions de Dreamweaver
Voici une description des types d’extensions Dreamweaver présentés dans ce manuel :
Les extensions d’objet de la barre Insérer sont responsables des modifications dans la
barre Insérer. Un objet sert généralement à automatiser l’insertion de code dans un document. Il
peut également contenir un formulaire qui regroupe les données fournies par les utilisateurs et un
code JavaScript qui traite ces données. Les fichiers d’objet résident dans le dossier Configuration/
Objects.
Les extensions de commande peuvent se charger de la plupart des tâches, avec ou sans
l’intervention de l’utilisateur. Les fichiers de commandes sont généralement appelés à partir du
menu Commandes ; ils peuvent l’être également depuis d’autres extensions. Les fichiers de
commandes résident dans le dossier Configuration/Commands.
Les extensions de commande de menu développent l’API de commande pour effectuer des
tâches relatives à l’appel d’une commande depuis un menu. Les API des commandes de menu
vous permettent également de créer un sous-menu dynamique.
21
Les extensions de barre d’outils permettent d’ajouter des éléments aux barres d’outils existantes
ou de créer de nouvelles barres d’outils dans l’interface utilisateur de Dreamweaver. Les nouvelles
barres d’outils s’affichent sous la barre d’outils par défaut. Les fichiers de barre d’outils résident
dans le dossier Configuration/Toolbars.
Les extensions de rapport peuvent ajouter des rapports personnalisés sur le site ou modifier le jeu
de rapports prédéfinis fournis avec Dreamweaver. Vous pouvez également utiliser l’API de fenêtre
Résultats pour créer un rapport autonome.
Les extensions de bibliothèque et d’éditeur de balises fonctionnent avec les fichiers de
bibliothèque de balises associés. Les extensions de bibliothèque et d’éditeur de balises permettent
de modifier les attributs des boîtes de dialogue de balises existantes, de créer de nouvelles boîtes de
dialogue de balises et d’ajouter des balises à la bibliothèque de balises. Les fichiers d’extension
d’éditeur et de bibliothèques de balises résident dans le dossier Configuration/TagLibraries.
Les extensions d’inspecteur de propriétés apparaissent dans le panneau d’inspecteur Propriétés.
La plupart des inspecteurs de Dreamweaver relèvent du code principal du produit et ne sont donc
pas modifiables ; en revanche, les fichiers d’inspecteurs de propriétés personnalisés peuvent
remplacer les interfaces d’inspecteurs de propriétés intégrées de Dreamweaver ou en créer afin
d’inspecter les balises personnalisées. Les fichiers d’inspecteur résident dans le dossier
Configuration/Inspectors.
Les extensions de panneau flottant permettent d’insérer des panneaux flottants dans l’interface
utilisateur de Dreamweaver. Les panneaux flottants peuvent interagir avec la sélection, le
document ou l’action en cours. Ils peuvent également afficher des informations utiles. Les fichiers
de panneau résident dans le dossier Configuration/Floaters.
Les extensions de comportement permettent aux utilisateurs d’ajouter du code JavaScript dans
leurs documents. Le code JavaScript exécute une tâche spécifique en réponse à un événement
lorsque le document est affiché dans un navigateur. Les extensions de comportement s’affichent
dans le menu plus (+) du panneau Comportements de Dreamweaver. Les fichiers de
comportement résident dans le dossier Configuration/Behaviors/Actions.
Les extensions de comportement de serveur permettent d’ajouter des blocs de code côté serveur
(ASP, JSP ou ColdFusion) au document. Le code côté serveur exécute des tâches sur le serveur
lorsque le document est affiché dans un navigateur. Les extensions de comportement de serveur
s’affichent dans le menu plus (+) du panneau Comportements de serveur de Dreamweaver. Les
fichiers de comportement de serveur résident dans le dossier Configuration/Server Behaviors.
Les extensions de source de données vous permettent d’établir une connexion avec des données
dynamiques stockées dans une base de données. Les extensions de source de données apparaissent
dans le menu plus (+) du panneau Liaisons. Les extensions de source de données résident dans le
dossier Configuration/DataSources.
Les extensions de format de serveur vous permettent de définir la mise en forme des données
dynamiques.
Les extensions de composant vous permettent d’ajouter de nouveaux types de composants au
panneau Composants. Composants est le terme utilisé dans Dreamweaver pour définir une des
stratégies les plus récentes et populaires d’encapsulation, y compris les services Web, JavaBeans, et
les composants ColdFusion (CFC).
22
Chapitre 2 : Extension de Dreamweaver
Les extensions de modèle de serveur permettent de prendre en charge de nouveaux modèles de
serveurs. Dreamweaver prend en charge les modèles de serveurs les plus courants (ASP, JSP,
ColdFusion, PHP et ASP.NET). Les extensions de modèle de serveur sont nécessaires
uniquement pour les solutions de serveur personnalisées, des langues différentes ou un serveur
personnalisé. Les fichiers de modèle de serveur résident dans le dossier Configuration/
ServerModels.
Les extensions de traducteur de données convertissent le code non HTML en code HTML qui
s’affiche ensuite dans le mode Création de la fenêtre de document. Ces extensions bloquent
également le code non HTML pour empêcher toute analyse par Dreamweaver. Les fichiers de
traducteur résident dans le dossier Configuration/Translators.
Autres méthodes d’extension pour Dreamweaver
Vous pouvez également étendre les éléments suivants de Dreamweaver pour développer ses
capacités ou l’adapter à votre utilisation.
Les types de documents définissent le fonctionnement de Dreamweaver avec différents modèles
de serveur. Les informations relatives aux types de documents pour les modèles de serveurs
résident dans le dossier Configuration/DocumentTypes.
Les fragments de code sont des blocs de code réutilisables qui sont stockés sous forme de fichiers
CSN dans le dossier Configuration/Snippets de Dreamweaver. Ils sont accessibles dans le panneau
Fragments de code. Vous pouvez créer de nouveaux fichiers de fragment de code et les installer
dans le dossier Snippets afin qu’ils soient disponibles.
Les indicateurs de code sont des menus qui vous évitent de saisir tout le texte en proposant une
liste de chaînes susceptibles de compléter la chaîne que vous tapez. Si une des chaînes du menu
correspond à celle que vous avez commencé à entrer, vous pouvez la sélectionner pour l’insérer à la
place de la chaîne dont vous aviez commencé la saisie. Des menus d’indicateurs de code sont
définis dans le fichier codehints.xml dans le dossier Configuration/CodeHints. Vous pouvez en
ajouter d’autres pour de nouvelles balises et fonctions que vous avez définies.
Les menus sont définis dans le fichier menus.xml du dossier Configuration/Menus. Vous pouvez
ajouter de nouveaux menus Dreamweaver pour vos extensions en ajoutant leurs balises de menu
dans le fichier menus.xml.
Extensions et dossiers de configuration
Les dossiers et les fichiers stockés dans le dossier Configuration de Dreamweaver contiennent les
extensions livrées avec Dreamweaver. Lorsque vous rédigez une extension, vous devez enregistrer
les fichiers dans le dossier approprié afin que Dreamweaver puisse les reconnaître. Si vous
téléchargez puis installez une extension depuis le site Web de Macromedia Exchange
(www.macromedia.com/go/exchange_fr), Extension Manager enregistre automatiquement les
fichiers d’extension dans les dossiers appropriés.
Vous pouvez utiliser les fichiers du dossier Configuration de Dreamweaver comme exemple ;
notez toutefois que ces fichiers sont généralement plus complexes que l’extension typique
disponible sur le site Web de Macromedia Exchange. Pour plus d’informations sur le contenu
respectif des sous-dossiers du dossier Configuration, voir le fichier Configuration_ReadMe.htm.
Extensions et dossiers de configuration
23
Le dossier Configuration/Shared ne correspond à aucun type d’extension particulier. Il s’agit d’un
lieu de stockage central pour les fonctions utilitaires, les classes et les images utilisées par plusieurs
extensions. Les fichiers résidant dans le dossier Configuration/Shared/Common sont censés être
utiles à un large éventail d’extensions. Ces fichiers constituent à la fois de bons exemples des
techniques JavaScript et des utilitaires pratiques. Recherchez en priorité dans ces fichiers les
fonctions exécutant des tâches spécifiques, par exemple créer une référence DOM (modèle d’objet
de document) valide pour un objet, vérifier si la sélection active se trouve à l’intérieur d’une balise
particulière, ignorer les caractères dans les chaînes, etc. Il est préférable de créer un sous-dossier
distinct dans le dossier Configuration/Shared/Common, comme indiqué ci-après, lorsque vous
créez des fichiers communs afin de les stocker.
Structure de dossier Configuration/Shared/Common/Scripts
Pour plus d’informations sur le dossier partagé, voir l’Annexe A, Dossier Shared, page 395.
Dossiers de configuration multiutilisateur
Pour les systèmes d’exploitation multiutilisateurs Windows XP, Windows 2000 et Macintosh
OS X, Dreamweaver crée un dossier de configuration distinct pour chaque utilisateur, en
complément du dossier Configuration Dreamweaver. Chaque fois que Dreamweaver ou qu’une
extension JavaScript écrit dans le dossier Configuration, Dreamweaver écrit systématiquement
dans le dossier de configuration utilisateur. Ceci permet à chaque utilisateur de définir ses
paramètres de personnalisation de Dreamweaver sans modifier les paramètres d’autres utilisateurs.
Pour plus d’informations, voir A propos de la personnalisation de Dreamweaver dans un
environnement multiutilisateur, page 29 et API de configuration multiutilisateur et d’accès aux
fichiers dans le Guide des API de Dreamweaver.
24
Chapitre 2 : Extension de Dreamweaver
Exécution des scripts au démarrage ou à la fermeture
Si vous placez un fichier de commandes dans le dossier Configuration/Startup, la commande
s’exécute au démarrage de Dreamweaver. Les commandes de démarrage se chargent avant le
fichier menus.xml, avant les fichiers du dossier ThirdPartyTags et avant les autres commandes,
objets, comportements, inspecteurs, panneaux flottants ou traducteurs. Par conséquent, vous
pouvez utiliser les commandes de démarrage pour modifier le fichier menus.xml ou d’autres
fichiers d’extension. Vous pouvez également afficher des avertissements, inviter l’utilisateur à
donner des informations ou appeler la fonction dreamweaver.runCommand(). Toutefois, vous ne
pouvez pas appeler une commande qui nécessite un DOM valide, à partir du dossier Startup.
De même, si vous placez un fichier de commandes dans le dossier Configuration/Shutdown, la
commande s’exécute à l’arrêt de Dreamweaver. A partir des commandes de fermeture, vous
pouvez appeler la fonction dreamweaver.runCommand(), afficher des avertissements ou inviter
l’utilisateur à entrer des informations, mais vous ne pouvez pas arrêter le processus de fermeture.
Pour plus d’informations sur les commandes, voir le Chapitre 7, Commandes, page 141. Pour plus
d’informations sur la fonction dreamweaver.runCommand(), voir le Guide des API de
Dreamweaver.
API d’extension
Les API d’extension vous fournissent les fonctions appelées par Dreamweaver pour implémenter
chaque type d’extension. Le corps de ces fonctions doit être rédigé conformément aux
descriptions de chaque type d’extension. Il faut également spécifier les valeurs renvoyées attendues
par Dreamweaver.
Si vous êtes un développeur et souhaitez travailler directement en langage de programmation C, il
existe une API d’extensibilité C qui vous permet de créer des DLL (bibliothèques de liens
dynamiques). La fonctionnalité fournie dans ces API enveloppe vos DLL C de code JavaScript
afin que votre extension puisse s’exécuter en toute transparence dans Dreamweaver.
La documentation des API d’extension souligne ce qu’apporte chaque fonction quand
Dreamweaver l’appelle et les valeurs renvoyées attendues par Dreamweaver.
Voir le Guide des API de Dreamweaver pour plus d’informations sur l’API d’utilitaire et l’API
JavaScript, qui proposent des fonctions permettant d’effectuer des tâches spécifiques dans vos
extensions.
Traitement de JavaScript dans les extensions par Dreamweaver
Dreamweaver vérifie le dossier Configuration/extension_name au démarrage. Si Dreamweaver y
détecte un fichier d’extension, il traite le code JavaScript selon la procédure suivante :
• Compilation de tous les éléments compris entre les balises d’ouverture et de fermeture SCRIPT
• Exécution du code situé dans les balises SCRIPT ne faisant pas partie d’une déclaration de
fonction
Remarque : Cette étape s’impose pendant le démarrage dans la mesure où certaines extensions
peuvent nécessiter l’initialisation des variables globales.
API d’extension
25
Dans le cas des fichiers JavaScript externes spécifiés dans les attributs SRC des balises SCRIPT,
Dreamweaver se charge des opérations suivantes :
• lecture du fichier ;
• compilation du code ;
• exécution des procédures.
Remarque : Si le code JavaScript de votre fichier d’extension contient la chaîne "</SCRIPT>",
l’interpréteur JavaScript la lit comme une balise SCRIPT de fermeture et signale une erreur littérale
de chaîne non terminée. Pour éviter ce problème, divisez la chaîne en parties concaténées comme
suit : "<’ + ’/SCRIPT>".
Dreamweaver exécute le code contenu dans le gestionnaire d’événements onLoad (s’il est présent
dans la balise BODY) lorsque l’utilisateur choisit la commande ou l’action dans un menu pour les
types d’extensions de commande ou de comportement.
Dreamweaver exécute le code contenu dans le gestionnaire d’événements onLoad dans la balise
si le corps du document contient un formulaire pour les extensions d’objet.
BODY
Dreamweaver ignore le gestionnaire onLoad de la balise BODY dans les extensions suivantes :
• traducteur de données ;
• inspecteur de propriétés ;
• panneau flottant.
Pour toutes les extensions, Dreamweaver exécute le code contenu dans d’autres gestionnaires
d’événements (par exemple, onBlur="alert(’Ceci est un champ obligatoire.’)") lorsque
l’utilisateur utilise les champs de formulaire auxquels ils sont rattachés.
Dreamweaver prend en charge l’utilisation de gestionnaires d’événement dans des liens. Les
gestionnaires d’événements des liens doivent respecter la syntaxe suivante :
<a href=”#” onMouseDown=alert(‘hi’)>link text</a>
Les plug-ins (définis sur play en permanence) sont pris en charge dans la balise BODY des
extensions. En revanche, l’instruction document.write(), les applets Java et les commandes
ActiveX ne le sont pas.
Affichage de l’aide
La fonction displayHelp(), qui fait partie de nombreux API d’extension, entraîne les deux
actions suivantes de Dreamweaver lorsque vous l’incluez dans votre extension :
• Ajout d’un bouton d’aide à l’interface ;
• Appelle displayHelp() lorsque l’utilisateur clique sur le bouton d’aide.
Vous devez rédiger le corps de la fonction displayHelp() pour afficher l’aide. La façon dont vous
codez la fonction displayHelp() détermine l’affichage de l’aide par votre extension. Vous pouvez
demander à la fonction dreamweaver.browseDocument() d’ouvrir un fichier dans un navigateur
ou de définir une méthode personnalisée d’affichage de l’aide, comme l’affichage de messages sur
un autre calque dans des fenêtres d’alerte.
26
Chapitre 2 : Extension de Dreamweaver
L’exemple suivant utilise la fonction displayHelp() pour afficher l’aide en appelant
dreamweaver.browseDocument():
// Dans l’exemple suivant, la fonction displayHelp() ouvre dans un navigateur
un fichier
// expliquant comment utiliser l’extension.
function displayHelp(){
var myHelpFile = dw.getConfigurationPath() + "ExtensionsHelp/myExtHelp.htm";
dw.browseDocument(myHelpFile);
}
Localisation d’une extension
Utilisez les techniques suivantes pour faciliter la traduction de vos extensions dans d’autres
langues.
• Séparez les extensions entre fichiers HTML et JavaScript. Les fichiers HTML peuvent être
•
•
dupliqués et localisés alors que les fichiers JavaScript ne peuvent pas être localisés.
Ne définissez pas de chaînes dans les fichiers JavaScript (vérifiez les alertes et le code de
l’interface utilisateur). Vous devez extraire toutes les chaînes localisables en fichiers XML
séparés dans le dossier Configuration/Strings de Dreamweaver.
N’insérez pas de code JavaScript dans les fichiers HTML excepté pour les gestionnaires
d’événement nécessaires. Ceci évite d’avoir à réparer plusieurs fois une même erreur pour
chaque traduction une fois les fichiers HTML répliqués et traduits dans d’autres langues.
Fichiers de chaîne XML
Conservez toutes les chaînes dans des fichiers XML dans le dossier Configuration/Strings de
Dreamweaver. Si vous installez plusieurs fichiers d’extension liés, cela vous permet de partager
toutes les chaînes dans un seul fichier XML. Le cas échéant, cela vous permet également de faire
référence à une même chaîne depuis des extensions C++ et JavaScript.
Vous pouvez créer un fichier nommé myExtensionStrings.xml. L’exemple suivant montre le
format du fichier :
<strings>
<!-- errors for feature X -->
<string id="featureX/subProblemY" value="Il y a eu un problème avec X lors
de l’exécution de Y. Merci de ne pas exécuter Y !"/>
<string id="featureX/subProblemZ" value="Il y a eu un autre problème avec X,
lié à Z. N’exécutez jamais Z !"/>
</strings>
Vos fichiers JavaScript files peuvent maintenant se référer à ces chaînes pouvant être traduites en
appelant la fonction dw.loadString(), comme indiqué dans l’exemple suivant :
function initializeUI()
{
...
if (problemYhasOccured)
{
alert(dw.loadString("featureX/subProblemY");
}
}
Localisation d’une extension
27
Vous pouvez utiliser des barres obliques (/) mais pas d’espaces dans vos identificateurs de chaînes.
Les barres obliques vous permettent d’établir une hiérarchie et d’inclure l’ensemble des chaînes
dans un fichier XML unique.
Remarque : Les fichiers commençant par cc dans le dossier Configuration/Strings sont des fichiers
Contribute. C’est le cas, par exemple, du fichier ccSiteStrings.xml.
Chaînes localisables avec valeurs intégrées
Certaines chaînes d’affichage comportent des valeurs intégrées. Vous pouvez utilisez la fonction
pour afficher ces chaînes. La fonction errMsg(), similaire à la fonction printf()
dans C, se trouve dans le fichier string.js du dossier Configuration/Shared/MM/Scripts/CMN.
Utilisez le signe % et la lettre s (les caractères de l’espace réservé) pour indiquer l’emplacement où
les valeurs doivent apparaître dans la chaîne puis considérer la chaîne et les variables comme
arguments pour errMsg(). Exemple :
errMsg()
<string id="featureX/fileNotFoundInFolder" value="Impossible de trouver le
fichier %s dans le dossier %s."/>
L’exemple suivant indique comment la chaîne, comme toute variable à intégrer, est transmise à la
fonction alert().
if (fileMissing)
{
alert( errMsg(dw.loadString("featureX/fileNotFoundInFolder"),fileName,
folderName) );
}
Utilisation de Extension Manager
Si vous créez des extensions destinées à d’autres utilisateurs, il convient de les conditionner
conformément aux indications disponibles sur le site Web de Macromedia Exchange
(www.macromedia.com/go/exchange_fr), sous la rubrique Help > How to Create an Extension
(Aide, Comment créer une extension). Après avoir rédigé puis testé une extension dans Extension
Manager, sélectionnez Fichier > Empaqueter une extension. Une fois l’extension conditionnée,
vous pouvez l’envoyer sur Exchange à partir de Extension Manager ; pour cela, sélectionnez
Fichier > Envoyer une extension.
Extension Manager est livré avec Dreamweaver. Vous trouverez des détails sur son utilisation dans
ses fichiers d’aide ou sur le site Web Macromedia Exchange.
Personnalisation de Dreamweaver
Il est possible de personnaliser Dreamweaver de différentes manières afin de l’adapter au mieux à
vos besoins. Cette section présente les méthodes avancées qui sont à votre disposition pour
personnaliser Dreamweaver. Vous y trouverez notamment des détails sur la modification des
fichiers de configuration.
28
Chapitre 2 : Extension de Dreamweaver
A propos de la personnalisation de Dreamweaver
Il existe plusieurs approches pour personnaliser Dreamweaver. Certaines sont présentées dans
l’aide de Dreamweaver (Aide > Utilisation de Dreamweaver). Ces approches vous permettent de
personnaliser l’espace de travail. Vous pouvez également modifier les paramètres dans les boîtes de
dialogue de Dreamweaver. Vous pouvez définir des préférences dans divers domaines
(accessibilité, coloration du code, polices, surbrillance et prévisualisation dans un navigateur), à
l’aide du panneau Préférences (Edition > Préférences). Vous pouvez également modifier les
raccourcis clavier à l’aide de l’éditeur de raccourcis clavier (Edition > Raccourcis clavier).
La liste suivante présente les diverses méthodes permettant de personnaliser Dreamweaver par la
modification des fichiers de configuration :
• Modifier l’ordre des objets dans la barre Insérer, créer de nouveaux onglets pour réorganiser les
•
•
•
objets ou ajouter de nouveaux objets. Voir Modification de la barre Insérer, page 124.
Changer le nom des éléments de menu, ajouter de nouvelles commandes aux menus et
supprimer des commandes existantes des menus. Voir A propos de la personnalisation de
Dreamweaver, page 29.
Modifier les profils de navigateurs ou en créer de nouveaux. Voir Utilisation des profils de
navigateurs, page 40.
Modifier l’affichage des balises propriétaires (balises ASP et JSP comprises) dans la fenêtre de
document en mode Création. Voir Personnalisation de l’interprétation de balises propriétaires,
page 34.
A propos de la personnalisation de Dreamweaver dans un environnement
multiutilisateur
Vous pouvez personnaliser Dreamweaver même sous un système d’exploitation multiutilisateur
comme Windows 2000, Windows XP ou Mac OS X. Aucune configuration personnalisée de
Dreamweaver ne peut affecter celle d’un autre utilisateur. Pour ce faire, lors de la première
exécution de Dreamweaver sous un système d’exploitation multiutilisateur reconnu,
Dreamweaver copie divers fichiers de configuration dans un dossier Configuration utilisateur
destiné à votre utilisation personnelle. Lorsque vous personnalisez Dreamweaver à l’aide des
panneaux et boîtes de dialogue, l’application modifie vos fichiers de configuration utilisateur au
lieu de modifier les fichiers de configuration de Dreamweaver. Pour personnaliser Dreamweaver
en modifiant un fichier de configuration dans un environnement multiutilisateur, modifiez le
fichier de configuration utilisateur correspondant au lieu de modifier les fichiers du dossier
Configuration de Dreamweaver. Pour apporter une modification affectant la plupart des
utilisateurs, vous pouvez modifier un fichier Configuration de Dreamweaver, mais les utilisateurs
disposant déjà de fichiers de configuration personnels ne seront pas affectés. En général, si vous
souhaitez apporter une modification affectant tous les utilisateurs, il est préférable de créer une
extension et de l’installer à l’aide de Extension Manager.
Remarque : Sur des systèmes d’exploitation plus anciens (Windows 98, Windows ME et
Mac OS 9.x), un seul groupe de fichiers de configuration de Dreamweaver est partagé par tous les
utilisateurs, même si la configuration du système d’exploitation prend en charge plusieurs utilisateurs.
L’emplacement du dossier Configuration varie selon la plate-forme utilisateur.
Personnalisation de Dreamweaver
29
Sous Windows 2000 et Windows XP :
<lecteur>:\Documents and Settings\<nom d’utilisateur>\ ¬
Application Data\Macromedia\Dreamweaver MX 2004\Configuration
Remarque : Sous Windows XP, ce dossier peut se trouver dans un dossier masqué.
Pour Mac OS X :
<lecteur>:Utilisateurs:<nom d’utilisateur>:Bibliothèque:Application Support: ¬
Macromedia:Dreamweaver MX 2004:Configuration
Remarque : Pour installer des extensions accessibles à tous les utilisateurs dans un système
d’exploitation multiutilisateur, vous devez disposer des droits Administrateur (Windows) ou root
(Mac OS X).
Dreamweaver ne copie que certains des fichiers de configuration dans le dossier Configuration
lors de la première exécution de l’application (les fichiers copiés sont spécifiés dans le fichier
version.xml dans le dossier Configuration). Lorsque vous personnalisez Dreamweaver depuis
l’application même (par exemple, lorsque vous modifiez un des fragments de code prédéfinis dans
le panneau Fragments de code), Dreamweaver copie les fichiers concernés dans votre dossier de
configuration utilisateur. La version d’un fichier présente dans le dossier de configuration
utilisateur prime toujours sur celle du dossier Configuration de Dreamweaver. Pour personnaliser
un fichier de configuration qui n’a pas été copié par Dreamweaver dans le dossier de configuration
utilisateur, copiez en premier lieu le fichier du dossier Configuration de Dreamweaver vers
l’emplacement correspondant dans votre dossier de configuration utilisateur. Modifiez ensuite
cette copie dans votre dossier de configuration utilisateur.
Suppression de fichiers de configuration dans un environnement
multiutilisateur
Lors de toute opération engendrant l’effacement d’un fichier de configuration dans Dreamweaver
sous un système d’exploitation multiutilisateur (par exemple, la suppression d’un fragment de
code prédéfini dans le panneau Fragments de code), Dreamweaver crée un fichier nommé
mm_deleted_files.xml dans votre dossier Configuration. Lorsqu’un fichier est répertorié dans le
fichier mm_deleted_files.xml, Dreamweaver se comporte comme si le fichier n’existait plus.
Remarque : Le fichier mm_deleted_files.xml n’est créé que lors de la première action susceptible de
supprimer un fichier de configuration.
Pour désactiver un fichier de configuration :
1 Quittez Dreamweaver.
2 A l’aide d’un éditeur de texte, modifiez le fichier mm_deleted_files.xml dans votre dossier de
configuration utilisateur, ajoutez une balise d’élément dans ce fichier en indiquant le chemin
(relatif au dossier Configuration de Dreamweaver) du fichier de configuration à désactiver.
Remarque : Ne modifiez pas le fichier mm_deleted_files.xml dans Dreamweaver.
3 Enregistrez et fermez mm_deleted_files.xml.
4 Lancez à nouveau Dreamweaver.
30
Chapitre 2 : Extension de Dreamweaver
A propos de la syntaxe des balises mm_deleted_files.xml
Le fichier mm_deleted_files.xml contient une liste structurée d’éléments décrivant les fichiers de
configuration que Dreamweaver doit ignorer. Ces éléments sont définis par des balises XML que
vous pouvez modifier dans un éditeur de texte.
Les sections suivantes décrivent la syntaxe des balises du fichier mm_deleted_files.xml. Les
attributs optionnels sont définis par des accolades ({}) dans la liste des attributs ; les attributs ne
comportant pas d’accolades sont donc requis.
<deleteditems>
Description
Balise de conteneur renfermant une liste d’éléments à considérer comme supprimés par
Dreamweaver.
Attributs
Aucun.
Contenu
Cette balise doit contenir une ou plusieurs balises d’éléments.
Contenant
Aucun.
Exemple
<deleteditems>
<!-- item tags here -->
</deleteditems>
<item>
Description
Définit un fichier de configuration à ignorer par Dreamweaver.
Attributs
name
•
name est le chemin du fichier de configuration relatif au dossier Configuration. Sous Windows,
utilisez une barre oblique inversée (\) pour séparer les éléments constitutifs du chemin ; sur
Macintosh, utilisez deux points (:).
Contenu
Aucun (balise vide).
Contenant
Cette balise doit se trouver dans une balise deleteditems.
Exemple
<item name="snippets\headers\5columnwith4links.csn" />
Personnalisation de Dreamweaver
31
Réinstallation et désinstallation de Dreamweaver dans un environnement
multiutilisateur
Après avoir installé Dreamweaver, si vous souhaitez réinstaller le programme ou le mettre à jour,
Dreamweaver sauvegarde automatiquement une copie des fichiers de configuration utilisateur
existants. Vos paramètres personnels resteront donc accessibles. Lors de la désinstallation de
Dreamweaver dans un environnement multiutilisateur (opération possible uniquement pour les
utilisateurs disposant de privilèges administratifs), Dreamweaver peut supprimer tous les dossiers
de configuration utilisateur à votre demande.
Personnalisation de documents par défaut
Le dossier DocumentTypes/NewDocuments contient, par défaut, un document (vierge) de
chaque type de document que vous pouvez créer à l’aide de Dreamweaver. Lorsque vous créez un
nouveau document vierge en sélectionnant Fichier > Nouveau et en sélectionnant un élément
dans les listes Page de base, Page dynamique ou Autres catégories, Dreamweaver base le nouveau
document sur le document par défaut correspondant dans ce dossier. Pour modifier les éléments
par défaut d’un type de document donné, modifiez le document correspondant dans ce dossier.
Remarque : Si vous souhaitez que toutes les pages de votre site contiennent certains éléments
communs (par exemple une mention sur le copyright) ou une présentation constante, il est préférable
d’utiliser des modèles et des éléments de bibliothèque plutôt que de changer les documents par
défaut. Pour plus d’informations sur les modèles et les éléments de bibliothèque, voir l’aide de
Dreamweaver (Aide > Utilisation de Dreamweaver).
Personnalisation de conceptions de pages
Dreamweaver propose divers éléments prédéfinis : feuilles de style CSS, jeux de cadres et
conceptions de pages. Vous pouvez créer des pages basées sur ces conceptions en cliquant sur
Fichier > Nouveau.
Pour personnaliser les conceptions disponibles, modifiez les fichiers présents dans les dossiers
BuiltIn/css, BuiltIn/framesets,
BuiltIn/Templates et BuiltIn/TemplatesAccessible.
Remarque : Les conceptions répertoriées dans les catégories Conception de page et Conception de
page (Accessibilité) sont les fichiers modèles de Dreamweaver. Pour plus d’informations sur les
modèles, voir l’aide de Dreamweaver (Aide > Utilisation de Dreamweaver).
Vous pouvez également créer des conceptions de pages en ajoutant des fichiers dans les sousdossiers du dossier BuiltIn. Pour qu’une description du fichier s’affiche dans la boîte de dialogue
Nouveau document, créez un fichier Design Notes (dans le dossier _notes approprié)
correspondant au fichier de conception de page.
Personnalisation de l’aspect des boîtes de dialogue
La mise en forme des boîtes de dialogue pour les objets, les commandes et les comportements sont
définis comme des formulaires HTML. Ils résident dans des fichiers HTML du dossier
Configuration au sein du dossier d’application Dreamweaver. Ces formulaires peuvent être
modifiés comme tout autre formulaire Dreamweaver. Pour plus d’informations, voir l’aide de
Dreamweaver (Aide > Utilisation de Dreamweaver).
32
Chapitre 2 : Extension de Dreamweaver
Remarque : N’oubliez pas que, dans un système d’exploitation multiutilisateur, vous devez modifier
les copies des fichiers de configuration contenues dans votre dossier de configuration utilisateur
plutôt que les fichiers Configuration de Dreamweaver. Pour plus d’informations, voir Dossiers de
configuration multiutilisateur, page 24.
Pour modifier l’aspect d’une boîte de dialogue :
1 Dans Dreamweaver, sélectionnez Edition > Préférences, puis la catégorie Correction du code.
2 Désélectionnez l’option Renommer les éléments de formulaire lors du collage.
3
4
5
6
7
8
9
Cette opération vous assure que les éléments de formulaire conserveront leur nom original une
fois ceux-ci copiés et collés.
Cliquez sur OK pour fermer la boîte de dialogue Préférences.
Sur votre disque, localisez le fichier HTM approprié dans les dossiers Configuration/Objects,
Configuration/ Commands ou Configuration/Behaviors.
Faites une copie du fichier dans un dossier autre que le dossier Configuration.
Ouvrez cette copie dans Dreamweaver, modifiez le formulaire et enregistrez le document.
Quittez Dreamweaver.
Copiez le fichier modifié à la place de l’original dans le dossier Configuration. Il est toutefois
conseillé de conserver une sauvegarde du fichier original pour pouvoir l’utiliser à nouveau en cas
de besoin.
Redémarrez Dreamweaver pour constater les changements.
Il est recommandé de ne modifier que l’aspect de la boîte de dialogue et non son fonctionnement.
Le type des éléments de formulaire doit être identique, tout comme les noms, afin que
l’information obtenue par Dreamweaver à partir de la boîte de dialogue puisse être utilisée de la
même manière.
Par exemple, l’objet Commentaire prend le texte entré dans une zone de texte de boîte de dialogue
et utilise une fonction JavaScript simple pour transformer ce texte en commentaire HTML et
l’insérer dans votre document. Le formulaire qui décrit la boîte de dialogue se trouve dans le
fichier Comment.htm dans le dossier Configuration/Objects/Invisibles. Vous pouvez ouvrir ce
fichier et modifier la taille ou d’autres attributs dans la zone de texte, mais si vous supprimez
intégralement la balise textarea ou que vous modifiez la valeur de son attribut name, l’objet
Commentaire ne fonctionnera plus correctement.
Modification du type de fichier par défaut
Par défaut, Dreamweaver affiche tous les types de fichiers reconnus dans la boîte de dialogue
Fichier > Ouvrir. Vous pouvez utiliser un menu contextuel dans cette boîte de dialogue pour
limiter l’affichage de certains types de fichiers. Si la plupart de vos travaux impliquent un type de
fichier spécifique (par exemple, les fichiers ASP), vous pouvez modifier l’affichage par défaut. Le
type de fichier indiqué sur la première ligne du fichier Extensions.txt de Dreamweaver devient le
type par défaut.
Remarque : Pour afficher tous les types de fichiers dans la boîte de dialogue Fichier > Ouvrir (y
compris les fichiers que Dreamweaver ne peut pas ouvrir), vous devez sélectionner Tous les fichiers
(*.*). Ceci n’est pas identique à Tous les documents, qui ne répertorie que les fichiers que
Dreamweaver peut ouvrir.
Personnalisation de Dreamweaver
33
Pour modifier le type de fichier par défaut de Dreamweaver dans Fichier > Ouvrir :
1 Créez une copie de sauvegarde du fichier Extensions.txt dans le dossier Configuration.
2 Ouvrez le fichier Extensions.txt dans Dreamweaver ou dans un éditeur de texte.
3 Coupez la ligne correspondant au nouveau type par défaut et collez-la en tête du fichier, en
première ligne.
4 Enregistrez le fichier.
5 Redémarrez Dreamweaver.
Pour voir le nouveau type par défaut, sélectionnez Fichier > Ouvrir, puis examinez le menu
contextuel de types de fichiers.
Pour ajouter de nouveaux types de fichier dans le menu de la boîte de dialogue Fichier >
Ouvrir :
1 Créez une copie de sauvegarde du fichier Extensions.txt dans le dossier Configuration.
2 Ouvrez le fichier Extensions.txt dans Dreamweaver ou un éditeur de texte.
3 Ajoutez une nouvelle ligne pour chaque nouveau type de fichier. Entrez, en majuscules, les
extensions de noms de fichiers compatibles avec le nouveau type de fichier et séparez-les par des
virgules. Ajoutez ensuite deux points et une brève description à afficher dans le menu contextuel
pour les types de fichiers qui s’affichent dans la boîte de dialogue Fichier > Ouvrir. Par exemple,
pour les fichiers JPEG, entrez les informations suivantes :
JPG,JPEG,JFIF:Fichiers image JPEG
4 Enregistrez le fichier.
5 Redémarrez Dreamweaver.
Pour observer les modifications, sélectionnez Fichier > Ouvrir, puis cliquez sur le menu
contextuel de types de fichiers.
Personnalisation de l’interprétation de balises propriétaires
Les technologies côté serveur comme ASP, ColdFusion, JSP et PHP utilisent du code spécial
non HTML dans les fichiers HTML. Les serveurs créent et servent du contenu HTML basé sur
ce code. Lorsque Dreamweaver rencontre des balises non HTML, il les compare aux informations
contenues dans les fichiers de balises propriétaires, lesquels définissent comment lire et afficher ces
balises non HTML.
Par exemple, les fichiers ASP contiennent (outre le code HTML habituel) du code ASP que le
serveur doit interpréter. Le code ASP ressemble à une balise HTML, mais il est signalé par des
délimiteurs : il commence par <% et s’arrête par %>. Le dossier Configuration/ThirdPartyTags de
Dreamweaver contient un fichier nommé Tags.xml. Ce fichier décrit le format des diverses balises
propriétaires, dont le code ASP, et décrit comment Dreamweaver doit afficher ce code. La façon
dont le code ASP est spécifié dans le fichier Tags.xml conduit Dreamweaver à ne pas tenter
d’interpréter le code situé entre les délimiteurs. A la place, dans la fenêtre de document en mode
Création, seul une icône indiquant la présence de code ASP s’affiche. Vos propres fichiers de base
de données de balises peuvent définir l’affichage et la lecture de vos balises par Dreamweaver.
Créez un nouveau fichier de base de données de balises pour chaque jeu de balises afin d’indiquer
à Dreamweaver comment les afficher.
34
Chapitre 2 : Extension de Dreamweaver
Remarque : Cette section vous explique comment définir l’affichage d’une balise personnalisée par
Dreamweaver, mais ne décrit pas comment modifier le contenu ou les propriétés d’une balise
personnalisée. Pour plus d’informations sur la création d’un inspecteur de propriétés permettant de
vérifier et modifier les propriétés d’une balise personnalisée, voir le Chapitre 12, Inspecteurs de
propriétés, page 225.
Chaque fichier de base de données de balises définit le nom, le type, le modèle de contenu, le
modèle de rendu et l’icône pour une ou plusieurs balises. Vous pouvez créer un nombre illimité de
fichiers de base de données de balises, mais tous doivent se trouver dans le dossier Configuration/
ThirdPartyTags afin d’être consultés et traités par Dreamweaver. Les fichiers de base de données
de balises portent l’extension .xml.
Conseil : Si vous travaillez sur plusieurs sites distincts à la fois (par exemple, en tant que développeur
indépendant), vous pouvez regrouper toutes les spécifications de balises relatives à un site dans un
fichier. Il suffit ensuite de remettre ce fichier de base de données de balises avec les icônes
personnalisées et les inspecteurs de propriétés aux responsables qui géreront le site.
Vous pouvez définir une spécification de balise à l’aide d’une balise XML nommée tagspec. Par
exemple, le code suivant décrit les spécifications d’une balise nommée happy :
<tagspec tag_name="happy" tag_type="nonempty" render_contents="false"
content_model="marker_model" icon="happy.gif" icon_width="18"
icon_height="18"></tagspec>
Vous pouvez définir deux types de balises à l’aide de tagspec : les balises de style HTML
classiques et les balises délimitées par des chaînes. Les balises délimitées par des chaînes
commencent par une chaîne et se terminent par une autre chaîne. Elles peuvent être considérées
comme des balises HTML vides (comme img) car elles n’encerclent pas de contenu et ne
comportent pas de balise de fermeture. L’exemple de la balise happy est une balise de style HTML
classique : elle s’ouvre par une balise <happy>, comporte des données entre les balises d’ouverture
et de fermeture et se termine par la balise de fermeture </happy>. Si la balise avait été délimitée
par des chaînes, les spécifications de balises incluraient les attributs start_string et
end_string. Une balise ASP est une balise délimitée par des chaînes. Elle commence par la
chaîne <% et se termine par la chaîne %>, sans balise de fermeture.
Les informations suivantes décrivent les attributs et les valeurs valides pour la balise tagspec. Les
attributs marqués d’un astérisque (*) sont ignorés dans le cadre des balises délimitées par des
chaînes. Les attributs optionnels sont définis par des accolades ({}) dans la liste des attributs ; les
attributs ne comportant pas d’accolades sont donc requis.
<tagspec>
Description
Fournit des informations à propos d’une balise propriétaire.
Attributs
tag_name, {tag_type}, {render_contents}, {content_model}, {start_string},
{end_string}, {detect_in_attribute}, {parse_attributes}, icon, icon_width,
icon_height, {equivalent_tag}, {is_visual}, {server_model}
Personnalisation de Dreamweaver
35
•
•
•
•
36
tag_name est le nom de la balise propriétaire. Pour les balises délimitées par des chaînes,
tag_name n’est utilisé que pour déterminer si un inspecteur de propriétés donné peut être
utilisé pour la balise. Si la première ligne de l’inspecteur de propriétés contient ce nom de balise
encadré par des astérisques, l’inspecteur peut être utilisé pour les balises de ce type. Par
exemple, le nom de balise pour le code ASP est ASP. Les inspecteurs de propriétés pouvant
examiner le code ASP doivent porter la mention *ASP* sur la première ligne. Pour plus
d’informations sur l’inspecteur de propriétés API, voir le Chapitre 12, Inspecteurs de propriétés,
page 225.
tag_type détermine si la balise est vide (par exemple, img) ou si un contenu est présent entre
les balises d’ouverture et de fermeture (par exemple, code). Cet attribut est requis pour les
balises normales (non délimitées par des chaînes). Cet élément est ignoré pour les balises
délimitées par des chaînes, ces dernières étant toujours vides. Les valeurs valides sont "empty"
et "nonempty".
render_contents détermine si le contenu de la balise doit s’afficher dans la fenêtre de
document en mode Création ou si l’icône spécifiée doit être affichée à la place. Cet attribut est
requis pour les balises nonempty et requis pour les balises empty (les balises Empty sont vides
de contenu). Cet attribut ne s’applique qu’aux balises qui apparaissent en dehors des attributs.
Le contenu des balises qui s’affichent dans les valeurs des attributs d’autres balises n’est pas
affiché. Les valeurs valides sont "true" et "false".
content_model décrit les différents types de contenu que la balise peut contenir et
l’emplacement où la balise peut s’afficher dans un fichier HTML. Les valeurs valides sont
"block_model", "head_model", "marker_model" et "script_model" :
■ block_model spécifie que la balise peut contenir des éléments de niveau de bloc comme div
et p et que la balise peut apparaître uniquement dans la section body ou dans d’autres balises
au contenu body, telles que div, layer et td.
■ head_model spécifie que le contenu de la balise peut être composé de texte et que la balise
peut uniquement apparaître dans la section HEAD.
■ marker_model spécifie que la balise peut contenir tout code HTML valide et peut se
trouver à tout endroit du fichier HTML. Le validateur HTML de Dreamweaver ignore les
balises spécifiées comme marker_model. Néanmoins, le validateur n’ignore pas le contenu
de ces balises. En conséquence, même si la balise peut apparaître à n’importe quel
emplacement, le contenu de la balise peut corrompre le document HTML à certains
endroits. Par exemple, du texte simple ne peut apparaître dans la section head d’un
document (à l’exception des éléments head valides). Il est donc impossible de placer une
balise marker_model qui contient du texte simple dans la section head. Pour placer une
balise personnalisée dans la section head, définissez le modèle de contenu de la balise comme
head_model au lieu de marker_model. Utilisez marker_model pour les balises qui doivent
s’afficher en ligne (dans un élément de niveau de bloc, comme p ou div, par exemple, dans
un paragraphe). N’utilisez pas ce modèle si la balise doit être affichée seule dans un
paragraphe, encadrée par des sauts de ligne.
■ script_model permet un emplacement libre de la balise entre les balises d’ouverture et de
fermeture d’un document. Lorsque Dreamweaver rencontre une balise de ce modèle, il
ignore totalement le contenu de la balise. Ceci est utilisé pour le marquage (comme
certaines balises ColdFusion) que Dreamweaver ne doit pas analyser.
Chapitre 2 : Extension de Dreamweaver
•
•
•
•
•
•
•
•
•
•
start_string spécifie
un délimiteur qui marque le début d’une balise délimitée par des
chaînes. Les balises délimitées par des chaînes peuvent être présentes en tout point du
document pouvant contenir un commentaire. Dreamweaver n’analyse pas les balises et ne
décode pas les entités ou URL comprises entre start_string et end_string. Cet attribut est
requis si end_string est spécifié.
end_string spécifie un délimiteur qui marque la fin d’une balise délimitée par une chaîne. Cet
attribut est requis si start_string est spécifié.
detect_in_attribute indique si les éléments contenus entre start_string et end_string
(ou entre les balises d’ouverture et de fermeture si ces chaînes ne sont pas définies) doivent être
ignorés même si ces chaînes apparaissent dans les valeurs ou noms d’attributs. Vous devez
généralement définir la valeur sur "true" pour les balises délimitées par des chaînes. La valeur
par défaut est false. Par exemple, les balises ASP apparaissent parfois dans des valeurs
d’attributs et peuvent contenir des guillemets ("). Comme les spécifications de balise ASP
indiquent detect_in_attribute="true", Dreamweaver ignore les balises ASP, guillemets
internes compris, lorsqu’elles se trouvent dans des valeurs d’attributs.
parse_attributes indique si les attributs de la balise doivent être analysés. Si la valeur définie
est "true" (par défaut), Dreamweaver analyse les attributs. Si elle est définie sur "false",
Dreamweaver ignore tous les éléments jusqu’au crochet situé hors des guillemets. Par exemple,
cet attribut doit être défini sur "false" pour les balises telles que cfif (par exemple, <cfif a
is 1>, que Dreamweaver ne peut pas analyser comme ensemble de paires nom d’attribut/
valeur).
icon spécifie le chemin et le nom de fichier de l’icône associée à la balise. Cet attribut est requis
pour les balises empty ainsi que pour les balises nonempty dont le contenu ne s’affiche pas dans
la fenêtre de document en mode Création.
icon_width spécifie la largeur de l’icône en pixels.
icon_height spécifie la hauteur de l’icône en pixels.
equivalent_tag spécifie des équivalents HTML simples pour certaines balises liées à des
formulaires ColdFusion. Ceci ne doit pas être utilisé avec d’autres balises.
is_visual indique si la balise a un impact visuel sur la page. Par exemple, la balise ColdFusion
cfgraph ne spécifie aucune valeur pour is_visual ; la valeur par défaut "true" est donc
appliquée. La valeur is_visual de la balise ColdFusion cfset est définie sur false. La
visibilité des balises de marquage de serveur est contrôlée par la catégorie Eléments invisibles
dans la boîte de dialogue Préférences. La visibilité des balises de marquage de serveur visuel
peut être définie indépendamment de celle des balises de marquage de serveur non visuel.
server_model, si spécifié, indique que la balise tagspec s’applique uniquement aux pages
appartenant au modèle de serveur spécifié. Si server_model n’est pas spécifié, la balise tagspec
s’applique à toutes les pages. Par exemple, les délimiteurs des balises ASP et JSP sont
identiques, mais la balise tagspec pour JSP spécifie un modèle de serveur "JSP". Par
conséquent, lorsque Dreamweaver rencontre ce code avec les délimiteurs adéquats sur une page
JSP, il affiche une icône JSP. Lorsque ce code est rencontré sur une page autre qu’une page JSP,
une icône ASP s’affiche.
Personnalisation de Dreamweaver
37
Contenu
Aucun (balise vide).
Contenant
Aucun.
Exemple
<tagspec tag_name="happy" tag_type="nonempty" render_contents="false"
content_model="marker_model" icon="happy.gif" icon_width="18"
icon_height="18"></tagspec>
Affichage des balises personnalisées dans le mode Création
L’affichage des balises personnalisées dans la fenêtre de document en mode Création dépend des
valeurs entrées pour les attributs tag_type et render_contents de la balise tagspec (voir
Personnalisation de l’interprétation de balises propriétaires, page 34). Si la valeur de tag_type est
"empty", l’icône spécifiée dans l’attribut icon s’affiche. Si la valeur de tag_type est "nonempty"
mais que la valeur de render_contents est "false", l’icône s’affiche de la même façon que pour
une balise vide. L’exemple suivant indique comment une instance de la balise happy définie
antérieurement peut apparaître dans le code HTML :
<p>Ce paragraphe inclut une instance de la balise <code>happy</code>
(<happy>Joe</happy>).</p>
Render_contents étant défini sur "false" dans la spécification de balise, le contenu de la
happy (soit le nom Joe) n’est pas affiché. Une icône unique s’affiche à la place des balises
balise
d’ouverture et de fermeture ainsi que du contenu.
Pour les balises nonempty dont la valeur de render_contents est définie sur "true", l’icône ne
s’affiche pas dans le mode Création. C’est le contenu inséré entre les balises d’ouverture et de
fermeture qui s’affiche (par exemple, le texte contenu entre les balises dans <mytag>Ceci est le
contenu inséré entre les balises d’ouverture et de fermeture</mytag>). Si l’option
Affichage > Eléments invisibles est activée, le contenu est mis en surbrillance à l’aide de balises
propriétaires, comme spécifié dans les préférences de surbrillance (la mise en surbrillance ne
s’applique qu’aux balises définies dans les fichiers de base de données de balises).
Pour modifier la couleur de surbrillance des balises propriétaires :
1 Sélectionnez Edition > Préférences, puis la catégorie Surbrillance.
2 Cliquez sur la zone de sélection de couleurs de balises propriétaires pour afficher le sélecteur de
couleur.
3 Sélectionnez une couleur, puis cliquez sur OK pour fermer la boîte de dialogue Préférences.
Pour plus d’informations sur la sélection d’une couleur, voir l’aide de Dreamweaver (Aide >
Utilisation de Dreamweaver).
38
Chapitre 2 : Extension de Dreamweaver
Comment éviter la modification de balises propriétaires
Dreamweaver corrige certains types d’erreurs dans le code HTML. Pour plus de détails, voir l’aide
de Dreamweaver (Aide > Utilisation de Dreamweaver). Par défaut, Dreamweaver évite toute
modification du code HTML dans les fichiers portant certaines extensions, comme .asp (ASP),
.cfm (ColdFusion), .jsp (JSP) et .php (PHP). Ce paramètre est défini pour éviter toute
modification accidentelle du code contenu dans de telles balises non HTML. Vous pouvez
modifier le comportement de correction de Dreamweaver par défaut afin que le code HTML soit
modifié lors de l’ouverture de tels fichiers. Vous pouvez également ajouter d’autres types de
fichiers auxquels Dreamweaver n’apportera pas de modifications.
Dreamweaver encode certains caractères spéciaux en les remplaçant par des valeurs numériques
lorsque vous les entrez dans l’inspecteur de propriétés. Il est normalement préférable de laisser
Dreamweaver effectuer cet encodage car, ainsi, les caractères spéciaux seront reconnus par un
nombre plus important de plates-formes et de navigateurs. Néanmoins, cette opération
d’encodage peut interférer avec les balises propriétaires. Vous pouvez donc modifier le
comportement de Dreamweaver concernant l’encodage des balises lorsque vous travaillez avec des
fichiers comportant des balises propriétaires.
Pour permettre à Dreamweaver de corriger le code HTML dans plus de types de fichiers :
1 Sélectionnez Edition > Préférences, puis la catégorie Correction du code.
2 Sélectionnez l’une des options suivantes :
Corriger les balises incorrectement imbriquées et non fermées
■ Supprimer les balises de fermeture superflues
3 Procédez de l’une des manières suivantes :
■ Supprimez une ou plusieurs des extensions de la liste dans l’option Ne jamais corriger le
code : Dans les fichiers avec extensions.
■ Désélectionnez l’option Ne jamais corriger le code : Dans les fichiers avec extensions. La
désactivation de cette option permet à Dreamweaver de réécrire le code HTML dans tous
types de fichiers.
■
Pour ajouter des fichiers dans lesquels Dreamweaver ne doit pas apporter de corrections :
1 Sélectionnez Edition > Préférences, puis la catégorie Correction du code.
2 Sélectionnez l’une des options suivantes :
Corriger les balises incorrectement imbriquées et non fermées
Supprimer les balises de fermeture superflues
3 Assurez-vous que l’option Ne jamais corriger le code : Dans les fichiers avec extensions est
sélectionnée et ajoutez les nouvelles extensions de fichiers à la liste dans la zone de texte.
■
■
Si le nouveau type de fichier ne s’affiche pas dans le menu contextuel Types de fichiers dans la
boîte de dialogue Fichier > Ouvrir, vous pouvez l’ajouter dans le fichier Configuration/
Extensions.txt. Pour plus de détails, voir Modification du type de fichier par défaut, page 33.
Pour désactiver les options d’encodage de Dreamweaver :
1 Sélectionnez Edition > Préférences, puis la catégorie Correction du code.
2 Désélectionnez les options de caractères spéciaux de votre choix.
Pour plus d’informations sur les autres préférences de correction de code, voir l’aide de
Dreamweaver (Aide > Utilisation de Dreamweaver).
Personnalisation de Dreamweaver
39
Utilisation des profils de navigateurs
Les profils de navigateurs sont les fichiers utilisés par Dreamweaver pour vérifier vos documents
lorsque vous exécutez la vérification d’un navigateur cible (voir l’aide de Dreamweaver, Aide >
Utilisation de Dreamweaver). Chaque profil contient des informations à propos des balises et
attributs HTML pris en charge par un navigateur donné. Un profil de navigateur peut également
renfermer des avertissements, des messages d’erreur ainsi que des suggestions de substitution de
balises.
Les profils de navigateurs sont stockés dans le dossier Configuration/BrowserProfiles dans le
dossier de l’application Dreamweaver. Vous pouvez modifier les profils existants ou en créer de
nouveaux à l’aide de Dreamweaver ou d’un éditeur de texte. Il n’est pas nécessaire de quitter
Dreamweaver avant de modifier ou de créer des profils de navigateurs.
A propos de la mise en forme des profils de navigateurs
Les profils de navigateur suivent un format spécifique. Afin d’éviter toute erreur d’analyse durant
la vérification des navigateurs cibles, observez les instructions suivantes lors de la modification ou
de la création de profils :
• La première ligne est destinée au nom du profil. Elle doit être suivie d’un retour chariot simple.
•
•
•
•
•
•
•
40
Le nom défini sur cette ligne s’affiche dans la boîte de dialogue Vérification du navigateur cible
et dans le rapport de vérification du navigateur cible. Ce nom doit être unique.
La seconde ligne est réservée à l’indicateur PROFILE_TYPE=BROWSER_PROFILE. Cette ligne
permet à Dreamweaver de déterminer quels documents sont des profils de navigateurs. Cette
ligne ne doit pas être modifiée ou déplacée.
Si une ligne commence par deux tirets (--), cela indique un commentaire (cette ligne est donc
ignorée durant la vérification de la cible). Tout commentaire doit être placé en début de ligne.
Il ne faut pas insérer deux tirets en milieu de ligne.
Vous devez utiliser un espace aux emplacements suivants :
■ Avant le crochet de fermeture (>) dans la ligne !ELEMENT
■ Après la parenthèse d’ouverture dans une liste de valeurs d’un attribut.
■ Avant une parenthèse de fermeture dans une liste de valeurs.
■ Avant et après chaque trait vertical (|) dans une liste de valeurs.
Vous devez entrer un point d’exclamation (!) (non précédé d’un espace) avant chacun des mots
suivants :
ELEMENT, ATTLIST, Error et msg (!ELEMENT, !ATTLIST, !Error, !msg ).
Vous pouvez inclure !Error, !Warning et !Info dans la zone !ELEMENT ou !ATTLIST.
Les messages !msg peuvent uniquement contenir du texte simple.
Les commentaires HTML (!---->) ne peuvent être répertoriés comme balises dans les profils
de navigateurs car ils interfèrent dans l’analyse. Dreamweaver ne consigne aucune erreur à
propos des commentaires car ils sont pris en charge par tous les navigateurs.
Chapitre 2 : Extension de Dreamweaver
L’exemple suivant indique la syntaxe d’une entrée de balise :
<!ELEMENT Balisehtml NAME="NomDeBalise ">
<!ATTLIST BalisehtmlTag
Attribut1NonSupporte !Error !msg="L’attribut Attribut1NonSupporte,
de la balise Balisehtml n’est pas supporté. Essayez d’utiliser
Attribut1Supporte pour un résultat identique."
Attribut1Supporte
Attribut1Supporte (ValeurValide1 | ValeurValide2 | ValeurValide3 )
Attribut2NonSupporte !Error !msg="N’utilisez pas
l’Attribut2NonSupporte de la balise Balisehtml!"
>
Les éléments utilisés dans cette syntaxe se définissent comme suit :
•
•
•
•
•
est la balise telle qu’elle apparaît dans le document HTML.
est un nom explicatif de la balise. Par exemple, le nom de la balise HR est
“Horizontal Rule” (barre horizontale). L’attribut NAME est facultatif. Si cet élément est défini,
NomDeBalise est utilisé pour les messages d’erreur. Si aucun nom n’est défini, BaliseHTML est
utilisé dans les messages d’erreur.
AttributNonSupporte est un attribut non pris en charge. Toute balise ou attribut n’étant pas
explicitement mentionné comme pris en charge sera considéré comme non pris en charge.
Spécifiez les balises ou attributs non pris en charge uniquement lorsque vous souhaitez créer un
message d’erreur personnalisé.
AttributSupporte est un attribut pris en charge par htmlTag. Seules les balises répertoriées
sans désignation !Error sont considérées comme prises en charge par le navigateur.
ValeurValide indique une valeur prise en charge par l’attribut.
BaliseHTML
NomDeBalise
L’exemple suivant indique une entrée de la balise APPLET exacte pour Netscape Navigator 3.0 :
<!ELEMENT APPLET Name="Java Applet">
<!ATTLIST APPLET
Align (top |middle |bottom |left |right |absmiddle |
absbottom |baseline |texttop )
Alt
Archive
Class !Warning !msg="Ce Navigateur ignore l’attribut CLASS pour la balise
APPLET."
Code
Codebase
Height
HSpace
ID !Warning !msg="Ce navigateur ignores l’attribut ID pour la balise APPLET,
utilisez NAME à la place."
Name
Style !Warning !msg="Ce navigateur ignores l’attribut STYLE pour la balise
APPLET."
VSpace
Width
>
Utilisation des profils de navigateurs
41
Création et modification d’un profil de navigateur
Vous pouvez créer un profil de navigateur en modifiant un profil existant. Par exemple, pour créer
un profil pour une version future de Microsoft Internet Explorer disposant déjà d’un profil,
ajoutez les nouvelles balises ou attributs introduits dans la nouvelle version et enregistrez-le
comme profil pour la nouvelle version.
Remarque : Avant de créer un profil de navigateur pour une nouvelle version d’un navigateur,
rendez-vous sur le site de Macromedia Exchange pour Dreamweaver à l’adresse suivante :
www.macromedia.com/go/dreamweaver_exchange_fr/. Vous pourrez ainsi vérifier si Macromedia a
fourni un profil de navigateur à télécharger et à installer à l’aide de Extension Manager.
Pour créer ou modifier un profil de navigateur :
1 Ouvrez le fichier existant à modifier.
2
3
4
5
Pour créer un nouveau profil, ouvrez un profil le plus identique possible à celui que vous
souhaitez créer, puis enregistrez-le sous un nouveau nom.
Si vous créez un profil, changez le nom qui s’affiche sur la première ligne de texte dans le fichier
(deux profils ne peuvent pas porter le même nom).
Ajoutez les nouvelles balises ou attributs pris en charge par le navigateur en utilisant la syntaxe
présentée dans A propos de la mise en forme des profils de navigateurs, page 40.
Si vous ne souhaitez pas recevoir de messages d’erreur à propos d’une balise donnée non prise
en charge, ajoutez cette dernière à la liste des balises prises en charge. Si vous effectuez cette
opération, enregistrez le profil dans un fichier séparé sous un nouveau nom de fichier (par
exemple, NomduNavigateur x.x limited). Le fait de donner un nouveau nom à cet autre profil
conserve le profil original avec uniquement les balises réellement prises en charge.
Supprimez tous les attributs et balises qui ne sont pas pris en charge par le navigateur.
Cette étape est normalement facultative si vous créez un profil pour une nouvelle version de
Netscape Navigator ou de Internet Explorer car les navigateurs n’abandonnent que rarement la
prise en charge d’une balise.
Ajoutez des messages d’erreur en respectant la syntaxe présentée dans A propos de la mise en forme
des profils de navigateurs, page 40.
Les profils fournis avec Dreamweaver répertorient toutes les balises prises en charge pour les
navigateurs spécifiés. Pour ajouter un message d’erreur personnalisé à une balise, entrez !msg
= "message" après !Error. L’exemple suivant présente des informations qui s’affichent dans le
profil de Netscape Navigator 3.0 (avec d’autres attributs non présentés ici) :
<!ELEMENT HR name="Horizontal Rule">
<!ATTLIST HR
COLOR !Error
>
Pour ajouter un message d’erreur personnalisé, entrez !msg= puis votre message d’erreur entre
guillemets (") :
<!ELEMENT HR name="Horizontal Rule">
<!ATTLIST HR
COLOR !Error !msg="Internet Explorer 3.0 supporte la balise COLOR
dans les règles horizontales, mais pas Netscape Navigaor 3.0."
>
6 Vous pouvez utiliser l’élément !Error pour toutes les situations d’erreur, ou utiliser !Warning
ou !Info pour indiquer qu’une balise sera ignorée sans causer d’erreur.
42
Chapitre 2 : Extension de Dreamweaver
Modification des mappages FTP
Le fichier FTPExtensionMap.txt (Windows) et le fichier FTPExtensionMapMac.txt (Macintosh)
mappent les extensions de nom de fichier en modes de transfert FTP (ASCII ou BINAIRE).
Chaque ligne dans chacun des deux fichiers comprend une extension de nom de fichier (par
exemple, GIF) ainsi que le mot ASCII ou le mot BINARY (binaire) pour indiquer quel mode
utiliser lors du transfert d’un fichier comportant cette extension. Sur Macintosh, chaque ligne
comprend également un code créateur (par exemple, DmWr) et un type de fichier (comme
TEXT). Lorsque vous téléchargez un fichier portant l’extension donnée, Dreamweaver lui assigne
le créateur et le type de fichier désignés.
Si un fichier que vous transférez ne comporte pas d’extension de nom de fichier, Dreamweaver
utilise le mode de transfert binaire.
Remarque : Dreamweaver ne peut pas transférer de fichiers en mode Macbinary. Si vous devez
transférer des fichiers en mode Macbinary, vous devez utiliser un autre client FTP.
Les exemples suivants montrent une ligne (du fichier Macintosh) indiquant que les fichiers
portant l’extension .html doivent être transférés en mode ASCII :
HTML DmWr TEXT ASCII
Dans le fichier FTPExtensionMap.txt et le fichier FTPExtensionMapMac.txt (Macintosh), tous
les éléments placés sur une même ligne sont séparés par des tabulations. L’extension et le mode de
transfert sont écrits en majuscules.
Pour modifier un paramètre par défaut, modifiez le fichier dans un éditeur de texte.
Pour ajouter des informations relatives à une nouvelle extension de nom de fichier :
1 Modifiez le fichier extension-map dans un éditeur de texte.
2 Sur une ligne blanche, entrez l’extension de nom de fichier (en majuscules) puis appuyez sur la
touche de tabulation.
3 Sur Macintosh, ajoutez le code créateur, un caractère de tabulation, puis le type de fichier suivi
d’un autre caractère de tabulation.
4 Choisissez entre ASCII et BINARY (binaire) pour spécifier un mode de transfert FTP.
5 Enregistrez le fichier.
Types de documents extensibles dans Dreamweaver
XML est doté d’un système performant pour définir des documents et des structures de données
complexes. Dreamweaver organise selon plusieurs schémas XML les informations sur les
comportements de serveur, les balises et les boîtes de dialogue de balises, les composants, les types
de documents et des références.
Lorsque vous créez et utilisez des extensions dans Dreamweaver, vous pouvez souvent créer ou
modifier les fichiers XML existants afin de gérer les données utilisées par ces extensions. Dans la
plupart des cas, vous pouvez copier un fichier existant du sous-dossier approprié du dossier
Configuration vers le dossier à utiliser comme modèle.
Types de documents extensibles dans Dreamweaver
43
Fichier de définition de type de document
Le concept de type de document s’articule autour d’un composant central, à savoir le fichier de
définition de type de document. Vous pouvez être en présence de plusieurs fichiers de définition ;
le cas échéant, ils résident tous dans le dossier Configuration/DocumentTypes. Chaque fichier de
définition contient des informations concernant au moins un type de document. Des
informations essentielles, telles que le modèle de serveur, le style de codage par couleurs, les
descriptions, etc., sont décrits pour chacun de ces types de documents.
Remarque : Attention, il ne faut pas confondre fichiers de définition de type de document de
Dreamweaver et définition de type de document XML (DTD). Les fichiers de définition de type de
document de Dreamweaver contiennent un ensemble d’éléments documenttype, chacun d’entre eux
définissant une collection prédéfinie de balises et d’attributs associés à un type de document. Au
lancement, Dreamweaver analyse les fichiers de définition de type de document et crée une base de
données en mémoire d’informations concernant tous les types de documents définis.
Dreamweaver fournit un fichier de définition de type de document initial Ce fichier, nommé
MMDocumentTypes.xml, contient les définitions de type de document fournies par
Macromedia :
Type de document
Modèle de
serveur
ASP.NET C#
ASP.NETCsharp
Dynamic
aspx, ascx
ASP.NET VB
ASP.NET-VB
Dynamic
aspx, ascx
ASP JavaScript
ASP-JS
Dynamic
asp
ASP VBScript
ASP-VB
Dynamic
asp
ColdFusion
ColdFusion
Dynamic
cfm, cfml
Dynamic
cfc
Composant ColdFusion
Extensions de
fichier
JSP
JSP
Dynamic
jsp
PHP
PHP
Dynamic
php, php3
Extension DW
lbi
Modèle ASP.NET C#
Modèle DW
axcs.dwt
Modèle ASP.NET VB
Modèle DW
axvb.dwt
Modèle ASP JavaScript
Modèle DW
aspjs.dwt
Modèle ASP VBScript
Modèle DW
aspvb.dwt
Modèle ColdFusion
Modèle DW
cfm.dwt
Modèle HTM
Modèle DW
dwt
Modèle JSP
Modèle DW
jsp.dwt
Modèle PHP
Modèle DW
php.dwt
HTML
htm, html
texte
as
Elément de bibliothèque
HTML
ActionScript
44
Type interne
Chapitre 2 : Extension de Dreamweaver
Modèle de
serveur antérieur
UltraDev 4
ColdFusion
Type de document
Modèle de
serveur
Type interne
Extensions de
fichier
CSharp
texte
cs
CSS
texte
css
Java
texte
java
JavaScript
texte
js
VB
texte
vb
VBScript
texte
vbs
texte
texte
txt
EDM
XML
edml
TLD
XML
tld
VTML
XML
vtm, vtml
WML
XML
wml
XML
XML
xml
Modèle de
serveur antérieur
Si vous avez besoin de créer un nouveau type de document, vous pouvez soit ajouter votre entrée
dans le fichier de définition de document fourni par Macromedia (MMDocumentTypes.xml),
soit ajouter votre propre fichier de définition dans le dossier Configuration/DocumentTypes.
Remarque : Le sous-dossier NewDocuments résidant dans le dossier Configuration/
DocumentTypes contient des pages par défaut (modèles) propres à chaque type de document.
Structure des fichiers de définition de type de document
L’exemple suivant représente un fichier classique de définition de type de document :
<?xml version="1.0" encoding="utf-8"?>
<documenttypes
xmlns:MMString="http://www.macromedia.com/schemes/data/string/">
<documenttype
id="dt-ASP-JS"
servermodel="ASP-JS"
internaltype="Dynamic"
winfileextension="asp,htm, html"
macfileextension=asp, html"
previewfile="default_aspjs_preview.htm"
file="default_aspjs.htm"
priorversionservermodel="UD4-ASP-JS" >
<title>
<loadString id="mmdocumenttypes_0title" />
</title>
<description>
<loadString id="mmdocumenttypes_0descr" />
</description>
</documenttype>
...
</documenttypes>
Remarque : Le codage par couleurs des types de documents est défini dans les fichiers XML qui
résident dans le dossier Configuration/CodeColoring.
Types de documents extensibles dans Dreamweaver
45
Dans l’exemple précédent, l’élément loadstring identifie les chaînes localisées que Dreamweaver
devrait utiliser pour le titre et la description des documents de type ASP-JS. Pour plus
d’informations sur les chaînes localisées, voir Chaînes localisées, page 51.
Le tableau ci-dessous recense les balises et les attributs autorisés dans un fichier de définition de
type de document.
Type d’élément
Balise
Attribut
Obligatoire Description
Oui
Nœud parent.
id
Oui
Identificateur unique pour tous les fichiers
de définition de type de document.
servermodel
Non
Spécifie le modèle de serveur associé
(casse prise en compte). Les valeurs
suivantes sont valides par défaut :
documenttype
(racine)
ASP.NET C#
ASP.NET VB
ASP VBScript
ASP JavaScript
ColdFusion
JSP
PHP MySQL
Un appel des fonctions
getServerModelDisplayName() renvoie
ces noms. Les fichiers d’implémentation
des modèles de serveur se trouvent dans
le dossier Configuration/ServerModels.
Les nouveaux modèles de serveur créés
par les développeurs d’extensions
viendront compléter cette liste.
46
Chapitre 2 : Extension de Dreamweaver
Type d’élément
Balise
Attribut
Obligatoire Description
internaltype
Oui
Classification générale des modes de
traitement des fichiers
dans Dreamweaver. Le type interne
détermine si le mode Création est activé
pour ce document et traite des cas
particuliers tels que les extensions ou les
modèles Dreamweaver.
Les valeurs suivantes sont valides :
Dynamic
DWExtension (zones d’affichage
spéciales)
DWTemplate (zones d’affichage spéciales)
HTML
HTML4
Text (mode Code uniquement)
XHTML1
XML (mode Code uniquement)
Tous les types de documents liés au
serveur de modèle doivent être associés
à la valeur Dynamic. HTML doit être en
correspondance avec HTML. Les fichiers
de script, notamment les fichiers .css, .js,
.vb et .cs doivent être en correspondance
avec Text.
Si internaltype correspond à
DWTemplate, il convient également de
spécifier dynamicid. Si, dans le cas
présent, vous omettez de spécifier
dynamicid, le type de document du
nouveau modèle vierge créé à partir de la
boîte de dialogue Nouveau document ne
sera pas reconnu par les panneaux
Comportements de serveur ou Liaisons.
Les instances de ce modèle sont des
modèles HTML.
dynamicid
Non
Référence à l’identificateur unique d’un
type de document dynamique. Cet
attribut n’est pertinent que lorsque
internaltype correspond à DWTemplate.
Il vous permet d’associer un modèle
dynamique avec un type de document
dynamique.
Types de documents extensibles dans Dreamweaver
47
Type d’élément
Balise
48
Attribut
Obligatoire Description
winfileextension
Oui
Extension de fichier associée au type de
document sous Windows. Utilisez une
liste séparée par des virgules pour
spécifier plusieurs extensions. La
première extension de cette liste
correspond à l’extension utilisée par
Dreamweaver lorsque l’utilisateur
enregistre un document de type
documenttype.
Lorsque deux types de documents non
associés à un modèle de serveur portent
la même extension de fichier,
Dreamweaver reconnaît le premier
comme le type de document associé à
l’extension.
macfileextension
Oui
Extension de fichier associée au type de
document sur Macintosh. Utilisez une
liste séparée par des virgules pour
spécifier plusieurs extensions. La
première extension de cette liste
correspond à l’extension utilisée par
Dreamweaver lorsque l’utilisateur
enregistre un document de type
documenttype.
Lorsque deux types de documents non
associés à un modèle de serveur portent
la même extension de fichier,
Dreamweaver reconnaît le premier
comme le type de document associé à
l’extension.
previewfile
Non
Fichier rendu dans la zone Aperçu de la
boîte de dialogue Nouveau document.
file
Oui
Le fichier situé dans le dossier
DocumentTypes/NewDocuments
contenant le contenu du modèle des
nouveaux documents de
type documenttype.
priorversionservermodel
Non
S’il existe un équivalent du modèle de
serveur de ce document dans
Dreamweaver UltraDev 4, spécifiez le
nom de la version antérieure du modèle
de serveur.
UltraDev 4 ColdFusion est un modèle de
serveur antérieur valide.
Chapitre 2 : Extension de Dreamweaver
Type d’élément
Balise
Attribut
title
Obligatoire Description
Oui
Chaîne qui apparaît comme élément de
catégorie sous la section
Document vierge de la boîte de dialogue
Nouveau document. Vous pouvez insérer
cette chaîne directement dans le fichier
de définition ou pointer vers elle
indirectement pour la localiser. Pour plus
d’informations sur la localisation de cette
chaîne, voir Chaînes localisées, page 51.
La mise en forme n’étant pas autorisée, il
est impossible de spécifier les
balises HTML.
Non
Chaîne de description du type de
document. Vous pouvez insérer cette
chaîne directement dans le fichier de
définition ou pointer vers elle
indirectement pour la localiser. Pour plus
d’informations sur la localisation de cette
chaîne, voir Chaînes localisées, page 51.
La mise en forme étant autorisée, il est
possible de spécifier les balises HTML.
(sous-balise)
description
(sous-balise)
Remarque : Lorsque l’utilisateur enregistre un nouveau document, Dreamweaver examine la liste
des extensions de la plate-forme actuelle qui sont associées avec le type de document
(winfileextension et macfileextension). Dreamweaver sélectionne la première chaîne de la liste
pour l’utiliser comme l’extension de fichier par défaut. Pour changer cette extension de fichier par
défaut, les extensions de la liste séparées par des virgules doivent être réorganisées de telle sorte que
la nouvelle extension par défaut soit la première entrée de la liste.
Au lancement, Dreamweaver lit tous les fichiers de définition de type de document et crée une
liste des types de documents valides. Dreamweaver traite toutes les entrées des fichiers de
définition pour lesquels des modèles de serveur inexistants sont utilisés comme types de
documents non serveur de modèle. Dreamweaver ignore les entrées dont le contenu est incorrect
ou dont les ID ne sont pas uniques.
Si, pendant l’analyse du dossier Configuration/DocumentTypes, Dreamweaver ne détecte aucun
fichier de définition de type de document ou si l’un des fichiers de définition semble endommagé,
Dreamweaver s’arrête en affichant un message d’erreur.
Modèles dynamiques
Vous pouvez créer des modèles d’après des types de documents dynamiques, appelés des modèles
dynamiques. La notion de modèle dynamique repose sur les deux éléments fondamentaux
suivants :
• La valeur de l’attribut internaltype d’un nouveau type de document doit être DWTemplate.
• L’attribut dynamicid doit être défini et sa valeur doit faire référence à l’identificateur d’un type
de document existant.
Types de documents extensibles dans Dreamweaver
49
L’exemple suivant définit un type de document dynamique :
<documenttype
id="PHP_MySQL"
servermodel="PHP MySQL"
internaltype="Dynamic"
winfileextension="php,php3"
macfileextension="php,php3"
file="Default.php">
<title>PHP</title>
<description><![CDATA[PHP document]]></description>
</documenttype>
Vous pouvez désormais définir le modèle dynamique suivant, basé sur ce type de document
PHP_MySQL :
<documenttype
id="DWTemplate_PHP"
internaltype="DWTemplate"
dynamicid="PHP_MySQL"
winfileextension="php.dwt"
macfileextension="php.dwt"
file="Default.php.dwt">
<title>Modèle PHP</title>
<description><![CDATA[Dreamweaver PHP Template document]]></description>
</documenttype>
Lorsqu’un utilisateur de Dreamweaver crée un nouveau modèle vierge de type
DWTemplate_PHP, Dreamweaver lui permet de créer des comportements de serveur PHP dans
le fichier. En outre, lorsque cet utilisateur crée des instances du nouveau modèle, il peut leur
définir aussi des comportements de serveur PHP.
Dans l’exemple précédent, où l’utilisateur enregistre le modèle, Dreamweaver ajoute
automatiquement l’extension .php.dwt au fichier. De même, lorsque cet utilisateur enregistre une
instance du modèle, le fichier reçoit l’extension .php.
Extensions de documents et types de fichiers
Par défaut, Dreamweaver affiche tous les types de fichiers reconnus dans la boîte de dialogue
Fichier > Ouvrir. Une fois le nouveau type de document créé, il incombe aux développeurs
d’extensions de mettre à jour le fichier Extensions.txt approprié. Si l’utilisateur travaille sur un
système multiutilisateur (par exemple, Windows XP, Windows 2000 ou Mac OS X), le dossier
Configuration contient un autre fichier Extensions.txt. L’utilisateur doit mettre à jour le fichier
Extensions.txt car il s’agit de l’instance recherchée et analysée par Dreamweaver.
L’emplacement du dossier Configuration varie selon la plate-forme utilisateur.
Sous Windows 2000 et Windows XP :
<lecteur>:\Documents and Settings\<nom d’utilisateur>\ ¬
Application Data\Macromedia\Dreamweaver MX 2004\Configuration
Remarque : Sous Windows XP, ce dossier peut se trouver dans un dossier masqué.
Pour Mac OS X :
<lecteur>:Utilisateurs:<nom d’utilisateur>:Bibliothèque:Application Support: ¬
Macromedia:Dreamweaver MX 2004:Configuration
Si Dreamweaver ne parvient pas à localiser le fichier Extensions.txt dans le dossier Configuration
de l’utilisateur, Dreamweaver le recherche dans le dossier Dreamweaver Configuration.
50
Chapitre 2 : Extension de Dreamweaver
Remarque : Sur les plates-formes multiutilisateurs, toute modification de la copie du fichier
Extensions.txt qui réside dans le dossier Dreamweaver Configuration, et non pas celle du dossier
Configuration de l’utilisateur, est transparente pour Dreamweaver, lequel analyse la copie du fichier
Extensions.txt située dans le dossier Configuration de l’utilisateur, et non pas celle du dossier
Dreamweaver Configuration.
Admettons que vous souhaitiez créer une nouvelle extension de document. Pour cela, vous avez le
choix entre ajouter la nouvelle extension à un type de document existant ou créer un nouveau
type de document.
Pour ajouter une nouvelle extension à un type de document existant :
1 Modifiez le fichier MMDocumentTypes.xml.
2 Ajoutez la nouvelle extension aux attributs winfileextension et macfileextension du type
de document existant.
Pour ajouter un nouveau type de document :
1 Créez une copie de sauvegarde du fichier Extensions.txt dans le dossier Configuration.
2 Ouvrez le fichier Extensions.txt dans Dreamweaver ou un éditeur de texte.
3 Ajoutez une nouvelle ligne pour chaque nouveau type de fichier. Entrez, en majuscules, les
extensions de noms de fichiers compatibles avec le nouveau type de fichier et séparez-les par des
virgules. Ajoutez ensuite deux points et une brève description à afficher dans le menu contextuel
pour les types de fichiers qui s’affichent dans la boîte de dialogue Fichier > Ouvrir.
Par exemple, pour les fichiers JPEG, entrez JPG,JPEG,JFIF:Fichiers image JPEG
4 Enregistrez le fichier Extensions.txt.
5 Redémarrez Dreamweaver.
Pour observer les modifications, sélectionnez Fichier > Ouvrir et cliquez sur le menu contextuel
répertoriant les types de fichiers.
Pour modifier le type de fichier indiqué par défaut dans Fichier > Ouvrir de Dreamweaver :
1 Créez une copie de sauvegarde du fichier Extensions.txt dans le dossier Configuration.
2 Ouvrez le fichier Extensions.txt dans Dreamweaver ou un éditeur de texte.
3 Coupez la ligne correspondant au nouveau type par défaut et collez-la en tête de fichier, sur la
première ligne.
4 Enregistrez le fichier Extensions.txt.
5 Redémarrez Dreamweaver.
Pour observer les modifications, sélectionnez Fichier > Ouvrir et cliquez sur le menu contextuel
répertoriant les types de fichiers.
Chaînes localisées
Dans un fichier de définition de type de document, les sous-balises <title> et <description>
désignent le titre d’affichage et la description du type de document. Vous pouvez utiliser la
directive MMString:loadstring dans les sous-balises comme espace réservé pour les chaînes
localisées de ces deux sous-balises. Ce procédé, similaire à la programmation de scripts côté
serveur, permet de spécifier l’utilisation d’une chaîne particulière dans votre page en utilisant un
identificateur de chaîne comme espace réservé. Cet espace réservé accepte les balises spéciales ou
les attributs de balises dont la valeur est remplacée.
Types de documents extensibles dans Dreamweaver
51
Pour définir des chaînes localisées, procédez comme suit :
1 Placez l’instruction suivante en tête du fichier de définition de type de document :
<?xml version="1.0" encoding="utf-8"?>
2 Déclarez l’espace de noms MMString dans la balise <documenttypes> :
<documenttypes
xmlns:MMString="http://www.macromedia.com/schemes/data/string/">
3 A l’emplacement du fichier de définition de type de document auquel insérer une chaîne
localisée, utilisez la directive MMString:loadstring pour définir un espace réservé à cette
chaîne. Vous pouvez spécifier cet espace réservé de l’une des façons suivantes :
<description>
<loadstring>myJSPDocType/Description</loadstring>
</description>
ou
<description>
<loadstring id="myJSPDocType/Description" />
</description>
Dans ces exemples, myJSPDocType/Description est un identificateur de chaîne unique
faisant office d’espace réservé à la chaîne localisée. La chaîne localisée est définie à l’étape
suivante.
4 Dans le dossier Configuration/Strings, créez un fichier XML (ou modifiez un fichier existant)
définissant la chaîne localisée. Par exemple, lorsque le code suivant est inséré dans le fichier
Configuration/Strings/strings.xml, il définit la chaîne myJSPDocType/Description :
<strings>
...
<string id="myJSPDocType/Description"
value=
"<![CDATA[JavaServer Page avec des options <em>spéciales</
em>]]>"
/>
...
</strings>
Remarque : Les identificateurs de chaîne, tels que myJSPDocType/Description dans l’exemple
précédent, doivent être uniques dans l’application Dreamweaver. Au lancement, Dreamweaver
analyse tous les fichiers XML du dossier Configuration/Strings et charge ces chaînes uniques.
Règles d’utilisation des fichiers de définition de type de document
Dreamweaver autorise les types de documents associés à un modèle de serveur à partager des
extensions de fichiers. Exemple : ASP-JS et ASP-VB peuvent adopter l’extension .asp (pour savoir
quel modèle de serveur prévaut, voir canRecognizeDocument(), page 346).
Dreamweaver n’autorise pas les types de documents non associés à un modèle de serveur à
partager des extensions de fichiers.
Si une extension de fichier est revendiquée par deux types de documents alors qu’un type est
associé à un modèle de serveur et que l’autre ne l’est pas, ce dernier prévaut. Supposons que vous
avez défini un type de document appelé SAM, non associé à un modèle de serveur et portant
l’extension de fichier .sam, et que vous ajoutez cette extension au type de document ASP-JS.
Lorsqu’un utilisateur ouvre un fichier portant l’extension .sam dans Dreamweaver, le programme
lui affecte le type de document SAM, et non pas le type ASP-JS.
52
Chapitre 2 : Extension de Dreamweaver
Ouverture d’un document dans Dreamweaver
Lorsqu’un utilisateur ouvre un document, Dreamweaver identifie en plusieurs étapes le type de
document d’après son extension de fichier.
Si Dreamweaver détecte un type de document unique, il l’utilise et charge le modèle de serveur
associé (le cas échéant) pour le document que l’utilisateur ouvre. Si cet utilisateur a opté pour
l’utilisation des comportements de serveur de Dreamweaver UltraDev 4, Dreamweaver charge le
modèle de serveur UltraDev 4 correspondant.
Si l’extension de fichier est commune à plusieurs types de documents, Dreamweaver effectue les
opérations suivantes :
• Si un type de document statique figure dans la liste des types de documents, il prévaut.
• Si tous les types de documents sont dynamiques, Dreamweaver génère une liste alphabétique
des modèles de serveur associés à ces types de documents, puis appelle la fonction
canRecognizeDocument() pour chacun des modèles de serveur
(voir canRecognizeDocument(), page 346). Dreamweaver collecte les valeurs de retour et
identifie le modèle de serveur qui a renvoyé l’entier positif le plus grand. Le type de document
dont le modèle de serveur a renvoyé l’entier le plus grand correspond au type de document
assigné par Dreamweaver au document en cours d’ouverture. Si, toutefois, plusieurs modèles
de serveur renvoient le même entier, Dreamweaver passe en revue la liste alphabétique de ces
modèles de serveur, choisit le premier de la liste, puis l’utilise. Si, par exemple, les types ASP-JS
et ASP-VB portent la même extension .asp et que leur fonction canRecognizeDocument()
respective renvoie une valeur égale, Dreamweaver affecte au document le type ASP-JS (puisque
ASP-JS apparaît en premier dans l’ordre alphabétique).
Si Dreamweaver ne peut pas faire correspondre l’extension de fichier à un type de document,
Dreamweaver ouvre le document au format texte.
Types de documents extensibles dans Dreamweaver
53
54
Chapitre 2 : Extension de Dreamweaver
CHAPITRE 3
Interfaces utilisateur destinées aux extensions
La plupart des extensions sont conçues pour recevoir des informations de l’utilisateur par le biais
d’une interface utilisateur (IU). Si vous envisagez de demander la certification Macromedia pour
votre extension, veillez à suivre les consignes disponibles dans les fichiers de Extension Manager
sur le site Web de Macromedia Exchange (http://www.macromedia.com/go/exchange_fr). Ces
indications ne visent pas à limiter votre créativité ; elles ont pour fonction de garantir le bon
fonctionnement des extensions certifiées avec l’interface utilisateur de Macromedia
Dreamweaver MX 2004, ainsi que la conformité de la conception de l’interface utilisateur de
l’extension à sa fonctionnalité première.
Conception d’une interface utilisateur d’extension
En général, une extension est créée pour effectuer une tâche que l’utilisateur rencontre
fréquemment. Certaines parties de la tâche peuvent être répétitives ; une extension permet
d’automatiser leur traitement. Plusieurs étapes de cette tâche ou attributs spécifiques du code
traité par l’extension peuvent être modifiés. Pour recevoir les entrées utilisateur de ces valeurs
variables, vous devez créer une interface utilisateur.
Par exemple, une extension peut servir à automatiser l’actualisation d’un catalogue de vente sur
le Web nécessitant pour les utilisateurs de modifier périodiquement les valeurs des sources
d’image, des descriptions d’articles et des prix, tandis que le procédé de récupération de ces valeurs
et de mise en forme des informations en vue de leur affichage sur le site Web reste le même. Une
extension simple peut automatiser la mise en forme, tout en laissant aux utilisateurs le soin
d’entrer manuellement les nouvelles valeurs de ces trois variables. Une extension complexe
permettra de récupérer directement d’une base de données, par automatisation, un groupe de
valeurs pour les sources d’image, les descriptions d’articles et les prix, tandis que les variables des
intervalles de temps seront entrées par l’utilisateur.
Votre interface utilisateur d’extension a pour fonction de recevoir les informations entrées par
l’utilisateur, nécessaires au traitement des aspects variables d’une tâche répétitive exécutée par
l’extension. Dreamweaver prend en charge les éléments de formulaires HTML et JavaScript
comme modules de base de la structure des commandes d’interface utilisateur d’extension et
affiche l’interface au moyen de son outil de rendu HTML. Ainsi, une interface utilisateur
d’extension peut se présenter sous la forme d’un simple fichier HTML contenant un tableau à
deux colonnes, composé de textes descriptifs et de champs de saisie de formulaire.
55
Nombreux sont les développeurs qui conçoivent leur interface utilisateur d’extension après avoir
codé en JavaScript la majorité de la fonctionnalité de leur extension. Une fois la rédaction du code
commencée, il devient souvent plus facile de discerner les variables indispensables ainsi que les
entrées de formulaire qui leur conviennent le mieux.
Veillez à tenir compte des observations suivantes pendant la conception d’une interface utilisateur
d’extension :
• Si vous voulez attribuer un nom à l’extension, indiquez-le dans la balise title de votre
fichier HTML. Dreamweaver affiche ce nom dans la barre de titre Extension.
• Alignez à droite les étiquettes de texte dans la partie gauche de l’interface utilisateur, et alignez
•
•
à gauche les zones de texte dans la partie droite. Cette disposition permet à l’utilisateur de
repérer plus facilement le début d’une zone de texte. La zone de texte peut être suivie d’un texte
concis, par exemple une explication ou une unité de mesure.
Alignez à gauche le libellé des cases à cocher et des boutons radio dans la partie droite de
l’interface utilisateur.
Dans le cas de code lisible, attribuez un nom logique aux zones de texte. Si vous créez votre
interface utilisateur d’extension à l’aide de Dreamweaver, vous pouvez utiliser l’inspecteur des
propriétés ou Quick Tag Editor pour nommer les champs.
Le scénario typique consiste, une fois l’interface utilisateur créée, à vérifier que le code de
l’extension exécute correctement les tâches suivantes impliquant l’interface :
• Récupération des valeurs des zones de texte
• Définition des valeurs par défaut des zones de texte ou collecte des valeurs à partir de la
sélection
• Application des modifications au document de l’utilisateur
Commande de rendu HTML de Dreamweaver
Jusqu’à la version 4, Dreamweaver restituait davantage d’espace autour des commandes de
formulaire que Microsoft Internet Explorer et Netscape Navigator. Dreamweaver ayant recours à
son moteur de rendu HTML pour afficher les interfaces utilisateur d’extension, les commandes
de formulaire de celles-ci sont plus spacieuses.
Macromedia a amélioré le rendu des commandes de formulaire afin qu’il corresponde plus
précisément à celui des navigateurs. Pour bénéficier des améliorations du procédé de rendu, il
convient d’utiliser l’une des trois nouvelles instructions DOCTYPE dans les fichiers d’extension,
comme indiqué dans l’exemple suivant :
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine 5.0//dialog">
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine5.0//floater">
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine5.0//pi">
En règle générale, les instructions DOCTYPE doivent figurer sur la première ligne d’un document.
Néanmoins, afin d’éviter des conflits avec les directives spécifiques aux extensions qui, dans les
versions antérieures, devaient se trouver sur la première ligne d’un fichier (par exemple, le
commentaire en haut d’un fichier de l’inspecteur des propriétés ou la directive MENULOCATION=NONE d’une commande), l’ordre des directives et les instructions DOCTYPE importent
peu, tant qu’elles figurent avant la balise html d’ouverture.
56
Chapitre 3 : Interfaces utilisateur destinées aux extensions
Les instructions DOCTYPE inédites permettent non seulement de créer des interfaces utilisateur
d’extension mieux assorties aux boîtes de dialogue et aux panneaux intégrés, mais également
d’afficher vos extensions dans le mode Création de Dreamweaver, de façon à ce que vous puissiez
les voir comme le pourrait un utilisateur.
Les exemples suivants montrent l’inspecteur des propriétés de base sans l’instruction DOCTYPE, qui
améliore le rendu des commandes de formulaire, puis avec l’instruction DOCTYPE.
L’inspecteur des propriétés de base tel qu’il apparaît en mode Création sans l’instruction DOCTYPE.
L’inspecteur des propriétés de base tel qu’il apparaît en mode Création avec l’instruction DOCTYPE (à la
suite de quelques réglages pour l’adapter au nouveau rendu).
Utilisation de commandes d’interface utilisateur personnalisées
dans les extensions
Outre les éléments de formulaire HTML standard, Dreamweaver prend en charge des
commandes personnalisées qui facilitent la création d’interfaces flexibles et professionnelles,
comme suit :
• listes de sélection modifiables (également appelées des zones de liste modifiables), pour associer
•
•
•
la fonctionnalité d’une liste à celle d’une zone de texte ;
commandes de base de données, pour simplifier l’affichage des hiérarchies et champs de
données ;
commandes d’arborescence qui organisent les informations en nœuds extensibles et
réductibles ;
commandes de bouton couleur, pour ajouter une interface de sélecteur de couleurs à vos
extensions.
Listes de sélection modifiables
Nombre d’interfaces utilisateur d’extension sont constituées de listes déroulantes définies à l’aide
de la balise select. Dans Dreamweaver, vous pouvez rendre ces listes modifiables dans les
extensions en complétant la balise select de l’instruction editable="true". Pour définir une
valeur par défaut, il convient de définir l’attribut editText ainsi que la valeur que vous voulez
voir apparaître dans la liste de sélection.
Utilisation de commandes d’interface utilisateur personnalisées dans les extensions
57
L’exemple suivant illustre les paramètres d’une liste de sélection modifiable :
<select name="travelOptions" style="width:250px" editable="true"
editText="other (please specify)">
<option value="plane">plane</option>
<option value="car">car</option>
<option value=""bus">bus</option>
</select>
Lorsque vous utilisez des listes de sélection dans vos extensions, vérifiez la présence d’un attribut
et, le cas échéant, sa valeur. En l’absence d’une valeur, la liste de sélection renvoie la valeur par
défaut false, laquelle indique que la liste de sélection n’est pas modifiable.
De même que les listes de sélection (non modifiables) normales, les listes de sélection modifiables
contiennent la propriété selectedIndex (voir Objets, propriétés et méthodes du DOM
Dreamweaver, page 70), laquelle renvoie la valeur -1 lorsque la zone de texte est sélectionnée.
Pour lire la valeur d’une zone de texte modifiable active dans une extension, il suffit de lire la
valeur de la propriété editText. La propriété editText renvoie la chaîne saisie par l’utilisateur
dans la zone de texte modifiable, la valeur de l’attribut editText ou une chaîne vide si aucun
texte n’a été entré et aucune valeur n’a été spécifiée pour la propriété editText.
Dreamweaver ajoute les attributs personnalisés suivants à la balise select afin de contrôler les
listes déroulantes modifiables :
Nom d’attribut
Description
Valeurs admises
editable
Déclare que la liste déroulante contient une
zone de texte modifiable.
false
editText
Conserve ou définit le texte dans une zone de
texte modifiable.
Une valeur booléenne true ou
Chaîne d’une valeur quelconque
Remarque : Des listes de sélection modifiables sont disponibles dans Dreamweaver.
L’exemple suivant crée une commande contenant une liste de sélection modifiable à l’aide de
fonctions JavaScript communes :
<html>
<head>
<title>Editable Dropdown Test</title>
<script language="javascript">
function getAlert()
{
var i=document.myForm.mySelect.selectedIndex;
if (i>=0){
alert ("selectedIndex: " + i);
alert("selected text " + document.myForm.mySelect.options[i].text);
}
else{
var i=document.myForm.mySelect_no.selectedIndex;
if (i>=0){
alert ("selectedIndex: " + i);
alert("selected text " +
document.myForm.mySelect_no.options[i].text);
}
else
alert("nothing is selected");
}
58
Chapitre 3 : Interfaces utilisateur destinées aux extensions
}
function commandButtons()
{
return new Array("OK", "getAlert()", "Cancel", "window.close()");
}
</script>
</head>
<body>
<div name="test">
<form name="myForm">
<table>
<tr>
<td>Liste déroulante modifiable avec texte par défaut :</td>
<td><select name="mySelect" editable="true" style="width:150px"
editText="Editable Text">
<option> opt 1 </option>
<option> opt 2 </option>
<option> opt 3 </option>
</select></td></tr>
<tr> <td>Liste déroulante modifiable sans texte par défaut :</td>
<td><select name="mySelect_no" editable="true" style="width:150px">
<option value="1"> opt 1 </option>
<option value="2"> opt 2 </option>
<option value="3"> opt 3 </option>
</select></td></tr>
</table>
</form>
</div>
</body>
</html>
Pour utiliser cet exemple, enregistrez-le dans le dossier Configuration/Commands de
Dreamweaver sous le nom EditableSelectTest.htm. Redémarrez Dreamweaver, puis sélectionnez
EditableSelectTest dans le menu Commandes.
Contrôles de base de données
Dreamweaver vous permet d’étendre la balise HTML select afin de créer une commande
d’arborescence de base de données. Vous pouvez également ajouter une commande de grille de
variables. La commande d’arborescence de base de données affiche le schéma des bases de données
et la commande de grille de variables affiche les informations tabulaires.
Utilisation de commandes d’interface utilisateur personnalisées dans les extensions
59
La figure suivante présente une boîte de dialogue Jeu d’enregistrements avancée utilisant une
commande d’arborescence de base de données et une commande de grille de variables :
Ajout d’une commande d’arborescence de base de données
La commande d’arborescence de base de données possède les attributs suivants :
Nom d’attribut
Description
name
Nom de la commande d’arborescence de base de données
control.style
Largeur et hauteur mesurées en pixels.
type
Type de commande.
connection
Nom de la connexion à la base de données définie dans le Gestionnaire de
connexions ; si aucun nom n’est spécifié, la commande est vide.
noexpandbuttons
Lorsque cet attribut est spécifié, la commande d’arborescence ne dessine
ni les indicateurs plus (+) ou moins (-), ni les flèches en triangle associées sur
un ordinateur Macintosh. Cet attribut est très utile pour dessiner des
commandes de liste à plusieurs colonnes.
showheaders
Lorsque cet attribut est défini, la commande d’arborescence affiche un entête en haut, recensant le nom de chaque colonne.
Toutes les balises d’options placées dans la balise select sont ignorées.
60
Chapitre 3 : Interfaces utilisateur destinées aux extensions
Pour ajouter une commande d’arborescence à une boîte de dialogue, vous pouvez utiliser
l’échantillon de code suivant en effectuant les substitutions appropriées pour les variables citées :
<select name="DBTree" style="width:400px;height:110px" ¬
type="mmdatabasetree" connection="Nomdeconnexion" noexpandbuttons
showHeaders></select>
La modification de l’attribut connection vous permettre de récupérer les données sélectionnées
et de les afficher dans l’arborescence. Utilisez l’attribut DBTreeControl comme objet JavaScript
d’enveloppement de la nouvelle balise. Pour obtenir d’autres exemples, consultez le fichier
DBTreeControlClass.js du dossier Configuration/Shared/Common/Scripts.
Ajout d’une commande de grille de variables
La commande de grille de variables possède les attributs suivants :
Nom d’attribut
Description
name
Nom de la commande de grille de variables.
style
Largeur de la colonne, exprimée en pixels.
type
Type de commande.
colonnes
Chaque colonne doit disposer d’un nom, séparée par une virgule.
columnWidth
Largeur de chaque colonne, séparée par une virgule. Les colonnes sont de
largeur égale si aucune largeur n’est spécifiée.
L’exemple suivant ajoute une commande de grille de variables à une boîte de dialogue :
<select name="ParamList" style="width:515px;" ¬
type="mmparameterlist columns"="Name,SQL Data ¬
Type,Direction,Default Value,Run-time Value" size=6></select>
L’exemple suivant crée une commande de grille de variables de 500 pixels de large et comportant
cinq colonnes de largeur variable :
<select name="ParamList" style="width:500px;" ¬
type=mmparameterlist columns="Name,SQL Data Type,Direction, ¬
Default Value,Run-time Value" columnWidth="100,25,11," size=6>¬
</select>
Cet exemple crée deux colonnes vierges de 182 pixels de large chacune. Le calcul est le suivant : le
total des colonnes définies est de 136. La largeur totale de la commande de grille de variables est
de 500. L’espace restant une fois les trois premières colonnes insérées est 364. Il reste deux
colonnes à insérer : 364 divisé par 2 est égal à 182.
Cette commande de grille de variables comporte également un objet d’enveloppement JavaScript
devant être employé pour accéder aux données de la commande et les manipuler.
L’implémentation de cet objet se trouve dans le fichier GridControlClass.js du dossier
Configuration\Shared\MM\Scripts\Class.
Utilisation de commandes d’interface utilisateur personnalisées dans les extensions
61
Ajout de commandes d’arborescence
La commande d’arborescence affiche les données dans un format hiérarchisé et permet aux
utilisateurs d’étendre et de réduire les nœuds de l’arborescence. La balise MM:TREECONTROL permet
de créer des commandes d’arborescence pour tout type d’informations ; à la différence de la
commande d’arborescence de base de données décrite à la section Ajout d’une commande
d’arborescence de base de données, page 60, aucune association à une base de données n’est requise.
Dans Dreamweaver, l’Editeur de raccourcis clavier utilise la commande d’arborescence comme
représenté dans la figure suivante :
62
Chapitre 3 : Interfaces utilisateur destinées aux extensions
Création d’une commande d’arborescence
La balise MM:TREECONTROL crée une commande d’arborescence et peut utiliser d’autres balises afin
de compléter la structure, comme indiqué dans la liste suivante :
•
•
est une balise facultative vide qui définit une colonne dans la commande
d’arborescence.
MM:TREENODE est une balise facultative qui définit un nœud dans l’arborescence. Il s’agit d’une
balise nonempty qui ne peut contenir que d’autres balises MM:TREENODE.
MM:TREECOLUMN
Les attributs des balises MM:TREECONTROL sont les suivants :
Nom d’attribut
Description
name
Nom de la commande d’arborescence.
size
Facultatif. Nombre de lignes visibles dans la commande ; la valeur par
défaut est de 5 lignes.
theControl
Facultatif. Si le nombre de nœuds de l’attribut theControl est supérieur à la
valeur de l’attribut size, des barres de défilement s’affichent.
multiple
Facultatif. Autorise plusieurs sélections ; la valeur par défaut est une
sélection unique.
style
Facultatif. Définition de style pour la hauteur et la largeur de la commande
d’arborescence ; si cet attribut est précisé, il est prépondérant sur
l’attribut size.
noheaders
Facultatif. Indique que les en-têtes de la colonne doivent être masqués.
Les attributs des balises MM:TREECOLUMN sont les suivants :
Nom d’attribut
Description
name
Nom de la colonne.
value
Chaîne qui doit s’afficher dans l’en-tête de la colonne.
width
Largeur de la colonne exprimée en pixels (les pourcentages ne sont pas pris
en charge ) ; la valeur par défaut est 100.
align
Facultatif. Indique l’alignement du texte de la colonne : à gauche, à droite ou
centré ; la valeur par défaut est à gauche.
state
Indique si la colonne est visible ou masquée.
Pour une meilleure visibilité, les balises TREECOLUMN doivent suivre immédiatement la balise
MM:TreeControl, comme indiqué dans l’exemple suivant :
<MM:TREECONTROL name="tree1">
<MM:TREECOLUMN name="Column1" width="100" state="visible">
<MM:TREECOLUMN name="Column2" width="80" state="visible">
...
</MM:TREECONTROL>
Utilisation de commandes d’interface utilisateur personnalisées dans les extensions
63
Les attributs MM:TREENODE sont décrits dans le tableau suivant :
Nom d’attribut
Description
name
Nom du nœud.
value
Comporte le contenu du nœud donné. Pour plusieurs colonnes, il s’agit
d’une chaîne délimitée par un trait vertical. Pour définir une colonne vide,
placez un seul caractère d’espace avant le trait vertical (|).
state
Spécifie que le nœud est développé ou réduit avec les chaînes expanded ou
collapsed.
selected
Vous pouvez sélectionner plusieurs nœuds en définissant cet attribut sur
plusieurs nœuds d’arborescence, si cette dernière comporte un attribut
MULTIPLE.
icon
Facultatif. Index de l’icône intégrée à utiliser, en commençant par 0 :
0 = aucune icône ; 1 = icône de document DW ; 2 = icône multi-document
Par exemple, tous les nœuds de la commande d’arborescence suivante sont développés :
<mm:treecontrol name="test" style="height:300px;width:300px">
<mm:treenode value="rootnode1" state="expanded">
<mm:treenode value="node1" state="expanded"></mm:treenode>
<mm:treenode value="node3" state="expanded"></mm:treenode>
</mm:treenode>
<mm:treenode value="rootnode2" state="expanded">
<mm:treenode value="node2" state="expanded"></mm:treenode>
<mm:treenode value="node4" state="expanded"></mm:treenode>
</mm:treenode>
</mm:treecontrol>
Manipulation du contenu d’une commande d’arborescence
Les commandes et les nœuds d’arborescence sont implémentés comme des balises HTML. Elles
sont par conséquent analysées par Dreamweaver et stockées dans l’arborescence du document.
Ces balises peuvent ensuite être manipulées comme tout autre nœud de document. Pour plus
d’informations sur les fonctions et les méthodes DOM, voir le Chapitre 4, Modèle d’objet de
document (DOM) Dreamweaver, page 69.
Pour programmer l’ajout d’un nœud à une commande d’arborescence existante,
définissez la propriété innerHTML de la balise MM:TREECONTROL ou de l’une des balises
MM:TREENODE existantes. La définition de la balise inner HTML d’un nœud d’arborescence crée un
nœud imbriqué.
Ajout de nœuds
L’exemple suivant ajoute un nœud tout en haut de l’arborescence :
var tree = document.myTreeControl;
//ajouter un nœud de niveau supérieur au bas de l’arborescence
tree.innerHTML = tree.innerHTML + ‘<mm:treenode name="node3"¬ value="node3">’;
Ajout d’un nœud de niveau supérieur Pour ajouter un nœud enfant à un nœud parent
sélectionné, définissez la propriété innerHTML du nœud sélectionné.
64
Chapitre 3 : Interfaces utilisateur destinées aux extensions
L’exemple suivant ajoute un nœud enfant à un nœud parent sélectionné :
var tree = document.myTreeControl;
var selNode = tree.selectedNodes[0];
//désélectionner le nœud afin de sélectionner le nouveau
selnode.removeAttribute("selected");
//ajouter le nouveau nœud en haut du nœud enfant du nœud parent sélectionné
selNode.innerHTML = ’<mm:treenode name="item10" value="New item11" ¬ expanded
selected>’ + selNode.innerHTML;
Suppression de nœuds Pour supprimer le nœud
utilisez la propriété innerHTML ou outerHTML.
sélectionné de la structure du document,
L’exemple suivant supprime le nœud parent sélectionné entier ainsi que ses nœuds enfants :
var tree = document.myTreeControl;
var selNode = tree.selectedNodes[0];
selNode.outerHTML = "";
Commande de bouton couleur pour les extensions
Outre les types d’entrées standard tels que le texte, la case à cocher et le bouton, Dreamweaver
prend en charge mmcolorbutton, un autre type d’entrées présent dans les extensions.
Si vous spécifiez <input type="mmcolorbutton"> dans votre code, un sélecteur de couleurs
s’affiche dans l’interface utilisateur. Vous pouvez définir la couleur par défaut du sélecteur en
définissant un attribut de valeur dans la balise d’entrée. Si aucune valeur n’est spécifiée, le
sélecteur de couleurs s’affiche par défaut en gris, et la propriété value de l’objet d’entrée renvoie
une chaîne vide.
L’exemple suivant représente une balise mmcolorbutton valide :
<input type="mmcolorbutton" name="colorbutton" value="#FF0000">
<input type="mmcolorbutton" name="colorbutton" value="teal">
Un bouton couleur comporte un événement onChange qui est déclenché lorsque la couleur est
modifiée.
Il peut se révéler judicieux de synchroniser une zone de texte avec un sélecteur de couleurs. Les
exemples suivants créent une zone de texte qui synchronise la couleur de la zone de texte avec celle
du sélecteur de couleurs :
<input type = "mmcolorbutton" name="fgcolorPicker"
onChange="document.fgcolorText.value=this.value">
<input type = "test" name="fgcolorText"
onBlur="document.fgColorPicker.value=this.value">
Dans cet exemple, si l’utilisateur modifie la valeur de la zone de texte, puis se déplace par
tabulation ou clique ailleurs, le sélecteur de couleurs adopte la couleur spécifiée dans la zone de
texte. Lorsque l’utilisateur sélectionne une nouvelle couleur dans le sélecteur, la zone de texte
affiche la valeur hexadécimale de cette couleur.
Utilisation de commandes d’interface utilisateur personnalisées dans les extensions
65
Ajout de contenu Flash à Dreamweaver
Le contenu Flash (fichiers SWF) peut s’afficher dans l’interface de Dreamweaver comme partie
d’un objet ou d’une commande. Cette prise en charge de Flash est très utile si vous créez des
extensions qui emploient des formulaires, animations, ActionScript ou autre contenu Flash.
Pour résumer, vous permettez aux objets et commandes Dreamweaver d’afficher des boîtes de
dialogue (voir le Chapitre 6, Objets de la barre Insérer, page 117 pour plus d’informations sur la
création d’objets et le Chapitre 7, Commandes, page 141 pour plus d’informations sur les
commandes) à l’aide de la balise form avec la balise object pour incorporer votre contenu Flash
dans une boîte de dialogue Dreamweaver.
Exemple d’une boîte de dialogue Flash simple
Dans cet exemple, vous utilisez Dreamweaver pour créer une nouvelle commande qui affiche un
fichier SWF nommé myFlash.swf lorsque l’utilisateur clique sur cette commande dans le menu
Commandes. Pour plus d’informations sur la création de commandes avant d’essayer cet exemple,
voir les informations liées aux commandes dans Extension de Dreamweaver.
Remarque : Cet exemple suppose qu’un fichier SWF nommé myFlash.swf se trouve déjà dans le
dossier Configuration/Commands du dossier d’installation de l’application Dreamweaver. Pour tester
cet exemple avec votre propre fichier SWF, enregistrez ce fichier SWF dans le dossier Commands
de l’application et remplacez toutes les occurrences de myFlash.swf par le nom de votre fichier.
Dans Dreamweaver, ouvrez un nouveau document HTML de base (ce document constituera
votre fichier de définition de commande). Entre les balises title d’ouverture et de fermeture,
entrez My Flash Movie afin que le début de votre page indique :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My Flash Movie</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
Maintenant, enregistrez le fichier sous le nom My Flash Movie.htm dans le dossier
Configuration/Commands de l’application (le fichier doit néanmoins rester ouvert). Le fichier
doit être enregistré à ce point de la procédure afin que le contenu Flash puisse être incorporé avec
un lien relatif. Dans le cas contraire, Dreamweaver tente d’utiliser un chemin absolu.
Revenez au document HTML. Entre les balises body d’ouverture et de fermeture, ajoutez des
balises form d’ouverture et de fermeture. Ensuite, entre ces balise form, utilisez l’option de menu
Insertion > Médias > Flash pour ajouter votre contenu Flash au fichier de définition de
commande. Lorsque vous y êtes invité, sélectionnez le fichier SWF dans le dossier Commands,
puis cliquez sur OK. Votre fichier de définition de commande doit maintenant être semblable à
l’exemple suivant (bien entendu, les attributs width et height peuvent être différents, selon les
propriétés de votre fichier SWF) :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My Flash Movie</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<body>
66
Chapitre 3 : Interfaces utilisateur destinées aux extensions
<form>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://
download.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=6,0,29,0" width="200" height="100">
<param name="movie" value="myFlash.swf">
<param name="quality" value="high">
<embed src="myFlash.swf" quality="high" pluginspage="http://
www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"
width="200" height="100"></embed>
</object>
</form>
</body>
</html>
Enregistrez à nouveau le fichier. Ensuite, quittez et redémarrez Dreamweaver. Sélectionnez
l’option de menu Commandes > My Flash Movie et votre contenu Flash s’affiche dans une boîte
de dialogue Dreamweaver, comme indiqué dans la figure suivante :
Ceci est un exemple d’implémentation simple de la prise en charge de contenu Flash par
Dreamweaver. Lorsque vous serez familiarisé avec la création d’objets et de commandes, ou encore
de formulaires plus compliqués, vous pourrez intégrer du contenu Flash dans vos extensions
Dreamweaver pour une expérience utilisateur encore plus dynamique. Pour plus d’informations,
voir le Chapitre 7, Commandes, page 141 sur l’écriture d’une fonction commandButtons()
permettant d’ajouter des boutons à la boîte de dialogue affichant votre contenu Flash.
Ajout de contenu Flash à Dreamweaver
67
68
Chapitre 3 : Interfaces utilisateur destinées aux extensions
CHAPITRE 4
Modèle d’objet de document (DOM) Dreamweaver
Dans Macromedia Dreamweaver MX 2004, le modèle d’objet de document (DOM) est une
structure essentielle pour les créateurs d’extensions. Il permet l’accès à divers éléments et la
manipulation de ces derniers dans le document d’un utilisateur et dans le fichier d’extension.
Un DOM définit la composition des documents créés dans un langage de balisage. Grâce à la
représentation des balises et des
en termes d’objets et de propriétés, le DOM rend les documents et leurs composants accessibles et
exploitables par les langages de programmation.
La structure d’un document HTML est révélée par son arborescence. La racine est la balise HTML
et les deux parties principales sont les balises HEAD et BODY. Les ramifications de HEAD sont les
balises TITLE, STYLE, SCRIPT, ISINDEX, BASE, META et LINK. Les ramifications de BODY se
composent d’en-têtes (H1, H2, etc.), d’éléments de niveau de bloc (P, DIV, FORM, etc.), d’éléments
de niveau texte (FONT, BR, IMG, etc.) et d’autres types d’éléments. Les éléments émergeant de ces
ramifications correspondent, entre autres, à des
tels que WIDTH, HEIGHT, ALT, etc.
Dans un DOM, la structure de l’arborescence est maintenue et présentée sous la forme d’une
hiérarchie de nœuds parents et de nœuds enfants. Le nœud racine est orphelin, et les nœuds
terminaux sont dépourvus de nœuds enfants. A chaque niveau de cette structure HTML,
l’élément HTML peut revêtir la forme d’un nœud dans JavaScript. Cette structure vous permet
ainsi d’accéder au document et à tous les éléments qui le composent.
Dans JavaScript, vous pouvez référencer un objet de document par son nom ou par son index,
comme décrit dans la liste suivante :
• Par nom, comme document.myForm.myButton
• Par index, comme document.forms[0].elements[1]
Les objets ayant le même nom forment un tableau. Vous pouvez accéder à un objet particulier
d’un tableau en incrémentant l’index de zéro comme origine (par exemple, le premier bouton
radio intitulé myRadioGroup dans le document myForm serait référencé par
document.myForm.myRadioGroup[0]).
69
De quel DOM de document parlons-nous ?
Il convient de faire la différence entre le DOM du document de l’utilisateur et le DOM de
l’extension. Les informations présentées dans ce chapitre s’appliquent aux deux types de
documents Dreamweaver, mais la manière de référencer chacun des DOM diffère.
Si vous êtes familier avec l’utilisation de JavaScript dans les navigateurs, vous pouvez désigner les
objets du document par document. Par exemple, document.forms[0], de la même manière que
vous référencez les objets dans les fichiers d’extension. Pour référencer les objets dans le document
de l’utilisateur, vous devez toutefois appeler dw.getDocumentDOM(), dw.createDocument() ou
toute autre fonction qui renvoie un objet de document utilisateur.
Ainsi, pour désigner la première image du document actif, vous pouvez écrire
dw.getDocumentDOM().images[0]. Vous pouvez également stocker l’objet de document dans
une variable et vous y référer ultérieurement, comme indiqué dans l’exemple suivant :
var dom = dw.getDocumentDOM(); //get the dom of the current document
var firstImg = dom.images[0];
firstImg.src = “myImages.gif”;
Ce type d’annotation est commun dans tous les fichiers du dossier Configuration,
particulièrement dans les fichiers de commandes. Pour plus d’informations sur la méthode
dw.getDocumentDOM(), voir la fonction dreamweaver.getDocumentDOM() dans le Guide des
API de Dreamweaver.
DOM Dreamweaver
Le DOM Dreamweaver associe un sous-ensemble d’objets, de propriétés et de méthodes du
DOM Niveau 1 du World Wide Web Consortium (W3C) (http://www.w3.org/TR/REC-DOMLevel-1/), combinés à certaines propriétés du DOM de Microsoft Internet Explorer 4.0.
Objets, propriétés et méthodes du DOM Dreamweaver
Le tableau suivant répertorie les objets, les propriétés, les méthodes et les événements pris en
charge par le DOM Dreamweaver. Certaines propriétés sont en lecture seule lorsqu’elles sont
accessibles en tant que propriétés d’un objet spécifique. Les propriétés en lecture seule, lorsqu’elles
sont utilisées dans le contexte recensé, sont marquées d’une puce (•).
70
Objet
Propriétés
Méthodes
Evénements
window
navigator •
document •
innerWidth •
innerHeight •
screenX •
screenY •
alert()
confirm()
escape()
unescape()
close()
setTimeout()
clearTimeout()
setInterval()
clearInterval()
resizeTo()
onResize
navigator
platform •
Aucun
Aucun
Chapitre 4 : Modèle d’objet de document (DOM) Dreamweaver
Objet
Propriétés
Méthodes
Evénements
document
forms • (tableau d’objets de
formulaire)
images • (tableau d’objets
image)
layers • (un tableau d’objets
LAYER, ILAYER et objets DIV et
SPAN à positionnement absolu)
Objets child par nom •
getElementsBy TagName()
hasChildNodes()
onLoad
nodeType •
parentNode •
childNodes •
documentElement •
body •
URL •
parentWindow •
toutes les
balises/tous
les éléments
nodeType •
parentNode •
childNodes •
tagName •
attributs par nom
innerHTML
outerHTML
getAttribute()
setAttribute()
removeAttribute()
getElementsByTagName()
hasChildNodes()
form
En complément des propriétés
disponibles pour toutes les
balises : tags:elements •
(tableau d’objets button,
Uniquement les méthodes Aucun
disponibles pour toutes les
balises.
checkbox, password, radio,
reset, select, submit, text,
file, hidden, image et
textarea)
mmcolorbutton
objets child par nom •
layer
En complément des propriétés
disponibles pour toutes les
balises :
Uniquement les méthodes Aucun
disponibles pour toutes les
balises.
visibility
left
top
width
height
zIndex
image
En complément des propriétés
disponibles pour toutes les
balises :
Uniquement les méthodes onMouseOver
disponibles pour toutes les onMouseOut
onMouseDown
balises.
onMouseUp
src
bouton
reset
submit
En complément des propriétés
disponibles pour toutes les
balises :
En complément des
méthodes disponibles
pour toutes les balises :
form •
blur()
focus()
onClick
DOM Dreamweaver
71
Objet
Propriétés
Méthodes
Evénements
checkbox
radio
En complément des propriétés
disponibles pour toutes les
balises :
En complément des
méthodes disponibles
pour toutes les balises :
onClick
checked
form •
blur()
focus()
password
text
file
hidden
image (zone)
textarea
En complément des propriétés
disponibles pour toutes les
balises :
En complément des
méthodes disponibles
pour toutes les balises :
form •
value
blur()
focus()
select()
select
En complément des propriétés
disponibles pour toutes les
balises :
En complément des
méthodes disponibles
pour toutes les balises :
blur() (Windows
uniquement)
focus() (Windows
uniquement)
form •
options • (tableau d’objets
option)
selectedIndex
option
En complément des propriétés
disponibles pour toutes les
balises :
onBlur
onFocus
onBlur
(Windows
uniquement)
onChange
onFocus
(Windows
uniquement)
Uniquement les méthodes Aucun
disponibles pour toutes les
balises.
text
mmcolorbutton
En complément des propriétés
disponibles pour toutes les
balises :
Aucun
onChange
name
value
72
array
boolean
date
function
math
number
object
string
regexp
Correspond à Netscape
Navigator 4.0
Correspond à Netscape
Navigator 4.0
Aucun
text
nodeType •
parentNode •
childNodes •
data
hasChildNodes()
Aucun
comment
nodeType •
parentNode •
childNodes •
data
hasChildNodes()
Aucun
NodeList
length •
item()
Aucun
NamedNodeMap
length •
item()
Aucun
Chapitre 4 : Modèle d’objet de document (DOM) Dreamweaver
Propriétés et méthodes de l’objet document
Le tableau suivant décrit en détail les propriétés et les méthodes de l’objet document empruntées
au DOM Niveau 1 et employées dans Dreamweaver. Les propriétés en lecture seule sont
marquées d’une puce (•).
Propriété ou méthode
Valeur renvoyée
nodeType •
Node.DOCUMENT_NODE
parentNode •
null
parentWindow •
L’objet JavaScript correspond à la fenêtre parente du
document (cette propriété n’est pas incluse dans le DOM
Niveau 1 ; elle est toutefois prise en charge par Microsoft
Internet Explorer 4.0).
childNodes •
Une NodeList (liste de nœuds) comprend tous les enfants
immédiats de l’objet document. En règle générale, le
document comporte un seul enfant : l’objet HTML.
documentElement •
L’objet JavaScript correspond à la balise HTML. Cette
propriété est une forme courte permettant d’obtenir la valeur
de document.childNodes et d’extraire la balise HTML de la
NodeList.
body •
L’objet JavaScript correspond à la balise BODY. Cette
propriété est une forme courte permettant d’appeler
document.documentElement.childNodes et d’extraire la balise
BODY de la NodeList. Pour les documents de jeu de cadres,
cette propriété renvoie le nœud correspondant au jeu de
cadres situé le plus à l’extérieur.
URL •
L’URL de type file:// du document ou, si le fichier n’a pas
été enregistré, une chaîne vide.
getElementsByTagName(tagName)
Une NodeList pouvant être utilisée pour parcourir les balises
de type tagName (par exemple, IMG, DIV, etc.).
Si l’argument tag est LAYER, la fonction renvoie toutes les
balises LAYER et ILAYER et toutes les balises DIV et SPAN à
positionnement absolu.
Si l’argument tag est INPUT, la fonction renvoie tous les
éléments du formulaire (si un attribut de nom est spécifié
pour un ou plusieurs objets tagName, il doit commencer par
une lettre conformément à la spécification HTML 4.01 ; à
défaut, la longueur du tableau renvoyée par cette fonction
sera incorrecte).
hasChildNodes()
true
DOM Dreamweaver
73
Propriétés et méthodes des objets de balise HTML
Chaque balise HTML est représentée par un objet JavaScript. Les balises sont organisées selon
une hiérarchie en arborescence dans laquelle la balise x est parente de la balise y si y est
entièrement définie entre les balises de début et de fin de x (<x>le contenu de x <y>le
contenu de y</y> plus le contenu de x.</x>). Par conséquent, votre code doit être bien
structuré.
Le tableau ci-dessous répertorie les propriétés et les méthodes des objets de balise dans
Dreamweaver, ainsi que leurs valeurs de retour ou leurs explications. Les propriétés en lecture
seule sont marquées d’une puce (•).
74
Propriété ou méthode
Valeur renvoyée
nodeType •
Node.ELEMENT_NODE
parentNode •
Balise parente. S’il s’agit de la balise HTML, l’objet document
est renvoyé.
childNodes •
Une NodeList (liste de nœuds) comprend tous les enfants
immédiats de la balise.
tagName •
Nom HTML de la balise, tel que IMG, A ou BLINK. Cette valeur
est toujours renvoyée en majuscules.
attrName
Chaîne de caractères contenant la valeur de l’attribut de
balise spécifié. tag.attrName ne peut pas être utilisé si
l’attribut attrName est un mot réservé dans le langage
JavaScript (par exemple, class). Dans ce cas, utilisez
getAttribute() et setAttribute().
innerHTML
Code source contenu entre la balise de début et la balise de
fin. Par exemple, dans le code <p><b>Hello</b>, World!</
p>, p.innerHTML renvoie <b>Hello</b>, World!. Si vous
écrivez dans cette propriété, l’arborescence DOM est
immédiatement mise à jour de façon à refléter la nouvelle
structure du document (cette propriété n’est pas incluse dans
le DOM Niveau 1, mais elle est prise en charge par Internet
Explorer 4.0).
outerHTML
Code source de cette balise, y compris la balise elle-même.
Pour l’exemple de code précédent, p.outerHTML renvoie
<p><b>Hello</b>, World!</p>. Si vous écrivez dans cette
propriété, l’arborescence DOM est immédiatement mise à
jour de façon à refléter la nouvelle structure du document
(cette propriété n’est pas incluse dans le DOM Niveau 1, mais
elle est prise en charge par Internet Explorer 4.0).
getAttribute(attrName)
Valeur de l’attribut spécifié, si celui-ci est spécifié
explicitement ; sinon, null.
getTranslatedAttribute(attrName)
Valeur traduite de l’attribut spécifié ou la même valeur que
celle renvoyée par getAttribute() si la valeur de l’attribut
n’est pas traduite (cette propriété n’est pas incluse dans le
DOM Niveau 1 ; elle a été ajoutée à Dreamweaver 3 pour
prendre en charge la traduction d’attributs).
Chapitre 4 : Modèle d’objet de document (DOM) Dreamweaver
Propriété ou méthode
Valeur renvoyée
setAttribute(attrName, attrValue) Ne renvoie aucune valeur. Affecte la valeur spécifiée à
l’attribut défini : par exemple, img.setAttribute("src",
"image/roses.gif").
removeAttribute(attrName)
Ne renvoie aucune valeur. Supprime l’attribut défini et sa
valeur du code HTML de la balise.
getElementsByTagName(tagName)
Une NodeList pouvant être utilisée pour parcourir les balises
enfants de type tagName (par exemple, IMG, DIV, etc.).
Si l’argument tag est LAYER, la fonction renvoie toutes les
balises LAYER et ILAYER et toutes les balises DIV et SPAN à
positionnement absolu.
Si l’argument tag est INPUT, la fonction renvoie tous les
éléments du formulaire (si un attribut de nom est spécifié
pour un ou plusieurs objets tagName, il doit commencer par
une lettre conformément à la spécification HTML 4.01 ; à
défaut, la longueur du tableau renvoyée par cette fonction
sera incorrecte).
hasChildNodes()
Valeur booléenne indiquant si la balise a des enfants.
hasTranslatedAttributes()
Valeur booléenne indiquant si la balise a des attributs traduits
(cette propriété n’est pas incluse dans le DOM Niveau 1 ; elle
a été ajoutée à Dreamweaver 3 pour prendre en charge la
traduction d’attributs).
Propriétés et méthodes des objets texte
Chaque bloc de texte contigu dans un document HTML (par exemple, le texte compris à
l’intérieur d’une balise P) est représenté par un objet JavaScript. Les objets texte n’ont jamais
d’enfants. Le tableau suivant décrit les propriétés et les méthodes d’objets texte empruntées au
DOM Niveau 1 et employées dans Dreamweaver. Les propriétés en lecture seule sont marquées
d’une puce (•).
Propriété ou méthode
Valeur renvoyée
nodeType •
Node.TEXT_NODE
parentNode •
Balise parente
childNodes •
Une NodeList vide
data
La chaîne de texte réelle. Les entités du texte sont
représentées par des caractères uniques (par exemple, le
texte Joseph & I est renvoyé sous la forme Joseph & I).
hasChildNodes()
false
DOM Dreamweaver
75
Propriétés et méthodes des objets de commentaire
Un objet JavaScript représente chaque commentaire HTML. Le tableau suivant décrit en détail
les propriétés et les méthodes d’objets de commentaires empruntées au DOM Niveau 1 et
employées dans Dreamweaver. Les propriétés en lecture seule sont marquées d’une puce (•).
Propriété ou méthode
Valeur renvoyée
nodeType •
Node.COMMENT_NODE
parentNode •
Balise parente
childNodes •
Un tableau NodeList vide
data
Chaîne de texte comprise entre les marqueurs de
commentaires
(<!-- et -->)
hasChildNodes()
false
Objets dreamweaver et site
Dreamweaver implémente les objets standard accessibles au moyen du DOM et ajoute deux
objets personnalisés : dreamweaver et site. Ces objets personnalisés sont couramment utilisés
dans les API et pour la rédaction d’extensions. Pour plus d’informations sur les méthodes des
objets dreamweaver et site, voir le Guide des API de Dreamweaver.
Propriétés de l’objet dreamweaver
L’objet dreamweaver possède deux propriétés en lecture seule, comme indiqué dans la liste
suivante :
• La propriété appName prend la valeur Dreamweaver.
• La propriété appVersion prend une valeur ayant le format
"versionNumber.releaseNumber.buildNumber [languageCode] (platform)".
Par exemple, la valeur de la propriété appVersion pour la version Windows suédoise de
Dreamweaver MX 2004 serait "7.0.XXXX [se] (Win32)" ; pour la version Macintosh anglaise,
cette valeur serait "7.0.XXXX [en] (MacPPC)".
Remarque : Vous trouverez la version et le numéro de compilation en sélectionnant l’élément de
menu Aide > A propos de.
Les propriétés appName et appVersion ont été implémentées dans Dreamweaver 3 et ne sont pas
disponibles dans les versions antérieures de Dreamweaver. Si vous souhaitez vérifier que
l’utilisateur de votre extension dispose de la version 3 ou ultérieure de Dreamweaver, vous pouvez
contrôler l’existence de la propriété appVersion ou appName.
Pour connaître la version spécifique de Dreamweaver, vérifiez en premier lieu l’existence de
appVersion. Ensuite, pour le numéro de version, procédez comme dans l’exemple suivant :
if (dreamweaver.appVersion && ¬
dreamweaver.appVersion.indexOf(’3.01’) != -1){
// execute code
}
76
Chapitre 4 : Modèle d’objet de document (DOM) Dreamweaver
L’objet dreamweaver comprend une propriété appelée systemScript, qui vous permet de
consulter la langue du système d’exploitation de l’utilisateur. Elle vous sera utile pour inclure dans
le code de votre extension des spécificités des systèmes d’exploitation localisés, comme indiqué
dans l’exemple suivant :
if (dreamweaver,systemScript && (dreamweaver.systemScript.indexOf(’ja’)!=-1){
SpecialCase
}
La propriété systemScript renvoie les valeurs suivantes pour les systèmes d’exploitation
localisés :
Langue
Valeur
Japonais
ja
Coréen
ko
Chinois traditionnel
zh_tw
Chinois simplifié
zh_cn
Les systèmes d’exploitation localisés dans les langues européennes renvoient la valeur en.
Objet site
L’objet site n’a aucune propriété. Pour plus d’informations sur les méthodes de l’objet site, voir
le Guide des API de Dreamweaver.
DOM Dreamweaver
77
78
Chapitre 4 : Modèle d’objet de document (DOM) Dreamweaver
CHAPITRE 5
Personnalisation du mode Code
En mode Code, Macromedia Dreamweaver MX 2004 permet de rédiger rapidement un code
lisible et sans erreur grâce aux deux outils que sont les indicateurs de code et la coloration du code.
De plus, Dreamweaver effectue un contrôle de validité du code saisi par rapport aux navigateurs
cibles spécifiés et permet de modifier le formatage HTML par défaut.
Vous pouvez personnaliser les outils d’indication et de coloration du code en modifiant leurs
fichiers d’implémentation au format XML. Vous pouvez ajouter des éléments aux menus
Indicateurs de code en ajoutant des entrées au fichier CodeHints.xml. Vous pouvez modifier les
modèles de couleur par l’intermédiaire du fichier de style de coloration du code, Colors.xml, ou
encore modifier les modèles de coloration du code ou en ajouter de nouveaux par l’intermédiaire
des fichiers de syntaxe de coloration du code (par exemple, CodeColoring.xml). Vous pouvez
également modifier le fichier de profil CSS (feuille de style en cascade) de votre navigateur cible
de manière à influer sur le système de validation des valeurs et des propriétés CSS dans
Dreamweaver. Vous pouvez enfin modifier le formatage HTML par défaut de Dreamweaver par
l’intermédiaire de la boîte de dialogue Préférences. Les sections suivantes décrivent les procédures
de personnalisation de ces différentes fonctions.
Indicateurs de code
Les indicateurs de code sont des menus contextuels qui s’affichent dans Dreamweaver lorsque
vous tapez certains caractères en mode Code. Ils vous évitent de saisir tout le texte en proposant
une liste de chaînes susceptibles de compléter la chaîne que vous tapez. Si la chaîne que vous tapez
apparaît dans le menu, sélectionnez-la et appuyez sur Entrée ou Retour pour compléter votre
saisie. Si vous tapez <, par exemple, un menu contextuel affiche une liste des noms de balises.
Plutôt que de taper le reste du nom de la balise, vous pouvez la sélectionner dans le menu pour
l’inclure à votre texte.
Dreamweaver charge les menus Indicateurs de code à partir du fichier CodeHints.xml enregistré
dans le dossier Configuration/CodeHints. Vous pouvez ajouter des menus Indicateurs de code
dans Dreamweaver en les définissant dans le fichier CodeHints.xml. Une fois le contenu du
fichier CodeHints.xml chargé, vous pouvez également ajouter dynamiquement de nouveaux
menus Indicateurs de code via JavaScript. Par exemple, le code JavaScript ajoute des données à la
liste des variables de session dans le panneau Liaisons. Vous pouvez utiliser le même code pour
ajouter un menu Indicateurs de code. Dans ce cas, lorsqu’un utilisateur tape « Session. » en
mode Code, un menu de variables de session s’affiche dans Dreamweaver. Pour obtenir des
informations sur l’ajout ou la modification d’un menu Indicateurs de code avec JavaScript, voir
Fonctions de code dans le Guide des API de Dreamweaver.
79
Certains types de menus Indicateurs de code ne s’expriment pas dans le fichier XML ou l’API
JavaScript de Dreamweaver. Le fichier CodeHints.xml et l’API JavaScript contiennent un sousensemble utile du moteur Indicateurs de code, mais certaines fonctionnalités Dreamweaver ne
sont pas accessibles. Par exemple, comme il n’existe pas d’accroche JavaScript pouvant afficher un
sélecteur de couleur, Dreamweaver ne peut pas exprimer le menu Valeurs des attributs à l’aide de
JavaScript. Vous pouvez uniquement afficher un menu d’éléments de texte permettant d’insérer
du texte.
Remarque : Lorsque vous insérez du texte, le pointeur d’insertion se place après la chaîne insérée.
Fichier CodeHints.xml
Le fichier CodeHints.xml contient les entités suivantes :
• Une liste de tous les groupes de menus
•
•
Lorsque vous sélectionnez la catégorie Indicateurs de code dans la boîte de dialogue
Préférences, la liste des groupes de menus s’affiche dans Dreamweaver. Pour ouvrir la boîte de
dialogue Préférences, sélectionnez Edition > Préférences. Dreamweaver MX propose les
groupes ou types de menus Indicateurs de code suivants : Noms des balises, Noms des
attributs, Valeurs des attributs, Arguments des fonctions, Méthodes quant aux objets et
variables et Entités HTML.
La description de chaque groupe de menus
Cette description relative à la catégorie Indicateurs de code apparaît dans la boîte de dialogue
Préférences lorsque vous sélectionnez le groupe de menus dans la liste. La description de
l’entrée sélectionnée apparaît au-dessous de la liste de groupes de menus.
Des menus Indicateurs de code
Un menu se compose d’un modèle qui déclenche le menu Indicateurs de code et d’une liste
d’éléments de menu. Par exemple, le modèle "&" peut déclencher un menu "&", ">",
"<".
Le format du fichier CodeHints.xml est illustré dans l’exemple suivant :
<codehints>
<menugroup name="HTML Entities" enabled="true" id="CodeHints_HTML_Entities">
<description>
<![CDATA[ Quand vous saisissez ’&’, un menu déroulant vous propose
une série d’entité HTML. Cette liste d’entité HTML
est stockée dans le fichier Configuration/CodeHints.xml. ]]>
</description>
<menu pattern="&">
<menuitem value="&" texticon="&"/>
<menuitem value="<" icon="lessThan.gif"/>
</menu>
</menugroup>
<menugroup name="Tag Names" enabled="true" id="CodeHints_Tag_Names">
<description>
<![CDATA[ Quand vous saisissez ’<’, un menu déroulant vous propose
l’ensemble des noms de balise possibles. Vous pouvez éditer la liste de
ces
noms de balises en utilisant
<a href="javascript:dw.popupTagLibraryEditor()"> l’éditeur de
bibliothèque de balises
</a>]]>
80
Chapitre 5 : Personnalisation du mode Code
</description>
</menugroup>
<menugroup name="Function Arguments" enabled="true"
id="CodeHints_Function_Arguments">
<description>
...
</description>
<function pattern="ArraySort(array, sort_type, sort_order)"
doctypes="CFML"/>
<function pattern="Response.addCookie(Cookie cookie)"
doctypes="JSP"/>
</menugroup>
<codehints>
Balises des indicateurs de code
Le fichier CodeHints.xml contient les balises suivantes qui définissent les menus Indicateurs de
code. Vous pouvez utiliser ces balises pour définir les menus Indicateurs de code.
<codehints>
Description
La balise codehints est la racine du fichier CodeHints.xml.
Attributs
Aucun.
Contenu
Une ou plusieurs balises menugroup.
Contenant
Aucun.
Exemple
<codehints>
<menugroup >
Description
Chaque balise menugroup correspond à un type de menu. Vous pouvez afficher les types de menu
définis dans Dreamweaver en choisissant la catégorie Indicateurs de code dans la boîte de dialogue
Préférences. Pour afficher la boîte de dialogue Préférences, choisissez Préférences dans le menu
Edition.
Vous pouvez créer un groupe de menus ou ajouter des menus à un groupe existant. Les groupes de
menus sont des collections logiques de menus que l’utilisateur peut activer ou désactiver dans la
boîte de dialogue Préférences.
Indicateurs de code
81
Attributs
name, enabled, id
• L’attribut name est le nom localisé qui apparaît dans la liste des groupes de menu de la catégorie
•
•
Indicateurs de code de la boîte de dialogue Préférences.
L’attribut enabled indique si le groupe de menus est actuellement coché ou activé. Une coche
apparaît en regard d’un groupe de menus s’il est activé dans la catégorie Indicateurs de code de
la boîte de dialogue Préférences. Pour activer un groupe de menus, assignez-lui la valeur true ;
pour le désactiver, assignez-lui la valeur false.
L’attribut id est un identificateur non localisé qui se rapporte au groupe de menus.
Contenu
Balises description, menu et function.
Contenant
Balise codehints.
Exemple
<menugroup name="Session Variables" enabled="true" id="Session_Code_Hints">
<description>
Description
La balise description contient du texte affiché par Dreamweaver lorsque vous sélectionnez le
groupe de menus dans la boîte de dialogue Préférences. La description apparaît au-dessous de la
liste de groupes de menus. Elle peut contenir une balise a dans laquelle l’attribut href doit être
une URL JavaScript exécutée par Dreamweaver si l’utilisateur clique sur le lien. Utilisez la
structure XML CDATA pour inclure des caractères spéciaux ou illégaux dans la chaîne afin qu’ils
soient considérés comme du texte par Dreamweaver.
Attributs
Aucun.
Contenu
Texte de la description.
Contenant
Balise menugroup.
Exemple
<description>
<![CDATA[ Pour ajouter ou supprimer des balises et des attributs, utilisez
<href="javascript:dw.tagLibrary.showTagLibraryEditor()">l’éditeur de
bibliothèque de balises</a>.
]]>
</description>
82
Chapitre 5 : Personnalisation du mode Code
<menu>
Description
Cette balise décrit un menu contextuel. Dreamweaver affiche le menu lorsque l’utilisateur tape le
dernier caractère de la chaîne dans l’attribut pattern. Par exemple, le menu qui affiche le contenu
d’une variable de session peut avoir un attribut pattern égal à « Session. ».
Attributs
pattern, doctypes, casesensitive
• L’attribut pattern spécifie le modèle des caractères tapés entraînant l’affichage du menu
•
•
Indicateurs de code dans Dreamweaver. Si le premier caractère est une lettre, un chiffre ou un
trait de soulignement, Dreamweaver affiche le menu uniquement si le caractère qui précède le
modèle dans le document n’est pas une lettre, un chiffre ou un trait de soulignement. Par
exemple, si le modèle est « Session. », Dreamweaver n’affiche pas le menu lorsque l’utilisateur
tape « ma_Session. ».
L’attribut doctypes indique que le menu est actif uniquement pour les types de documents
spécifiés. Cet attribut permet de spécifier différentes listes de noms de fonctions pour ASPJavaScript (ASP-JS), Java Server Pages (JSP), Macromedia ColdFusion, etc. Vous pouvez
spécifier l’attribut doctypes en tant que liste d’ID de types de documents séparés par des
virgules. Voir le fichier MMDocumentTypes.xml dans le dossier Configuration/
Documenttypes de Dreamweaver pour consulter la liste des types de documents Dreamweaver.
L’attribut casesensitive indique si le modèle fait la distinction entre les majuscules et les
minuscules. Les valeurs possibles pour l’attribut casesensitive sont true, false ou un sousensemble de la liste séparée par des virgules spécifiée pour l’attribut doctypes. La liste des
types de documents vous permet de spécifier si le modèle fait la distinction entre majuscules et
minuscules pour certains types de documents plutôt que d’autres. Par défaut, la valeur est
false si vous omettez cet attribut. Si vous définissez la valeur de l’attribut casesensitive sur
true, le menu Indicateurs de code s’affiche uniquement si le texte tapé par l’utilisateur
correspond exactement au modèle spécifié par l’attribut pattern. Si vous définissez la valeur de
l’attribut casesensitive sur false, le menu s’affiche même si le modèle est en minuscules et
le texte en majuscules.
Contenu
Balise menuitem.
Contenant
Balise menugroup.
Exemple
<menu pattern="CGI." doctypes="ColdFusion">
<menuitem >
Description
Cette balise indique le texte d’un élément dans un menu contextuel Indicateurs de code. La balise
menuitem indique également la valeur à insérer dans le texte lorsque vous sélectionnez l’élément.
Indicateurs de code
83
Attributs
label, value {icon}, {texticon}
• L’attribut label correspond à la chaîne affichée dans le menu contextuel de Dreamweaver.
• L’attribut value correspond à la chaîne insérée par Dreamweaver dans le document lorsque
vous sélectionnez l’élément du menu. Lorsque l’utilisateur sélectionne l’élément du menu et
appuie sur Entrée ou Retour, Dreamweaver remplace tout le texte tapé depuis l’affichage du
menu. L’utilisateur a tapé les caractères correspondant au modèle avant l’affichage du menu, si
bien que Dreamweaver ne les insère pas une seconde fois. Par exemple, si vous souhaitez insérer
&amp, l’entité HTML de l’esperluette (&), vous pouvez définir les balises menu et menuitem
suivantes :
<menu pattern="&">
<menuitem label="&" value="amp;" texticon="&"/>
•
•
L’attribut de valeur n’inclut pas l’esperluette (&), car l’utilisateur l’a tapée avant que le menu ne
s’affiche.
L’attribut icon (facultatif ) spécifie le chemin d’accès à un fichier image affiché par
Dreamweaver sous la forme d’une icône située à gauche du texte du menu. L’emplacement de
ce fichier est défini par une URL (dossier Configuration).
L’attribut texticon (facultatif ) affiche une chaîne de texte dans la zone d’icône (et non un
fichier image). Cet attribut est utilisé pour le menu Entités HTML.
Contenu
Aucun.
Contenant
Balise menu.
Exemple
<menuitem label="CONTENT_TYPE" value=""CONTENT_TYPE")" icon="shared/
mm/images/hintMisc.gif" />
<function>
Description
Cette balise remplace la balise menu pour la spécification des arguments de fonction et des
méthodes d’objet d’un menu contextuel Indicateurs de code. Lorsque vous tapez un nom de
fonction ou de méthode en mode Code, Dreamweaver affiche un menu de prototypes de
fonction, indiquant l’argument actuel en caractère gras. Chaque fois que vous tapez une virgule,
Dreamweaver met à jour le menu de manière à afficher l’argument suivant en gras. Par exemple, si
vous avez tapé le nom de fonction ArrayAppend dans un document ColdFusion, le menu
Indicateurs de code affiche ArrayAppend(array, value). Une fois la virgule suivant array saisie,
le menu se met à jour et affiche ArrayAppend(array, value).
Dans le cas des méthodes d’objet, Dreamweaver affiche un menu regroupant les méthodes
définies pour l’objet dont vous tapez le nom.
L’ensemble de fonctions reconnues est enregistré dans le fichier CodeHints.xml qui se trouve dans
le dossier Configuration de Dreamweaver.
84
Chapitre 5 : Personnalisation du mode Code
Attributs
pattern, doctypes, casesensitive
• L’attribut pattern spécifie le nom de la fonction et sa liste d’arguments. S’il est utilisé avec des
•
•
méthodes, l’attribut pattern décrit le nom de l’objet et de la méthode, ainsi que les arguments
de cette dernière. Avec un nom de fonction, le menu Indicateurs de code s’affiche lorsque
l’utilisateur tape functionname(. Le menu affiche la liste des arguments relatifs à la fonction.
S’il est utilisé avec une méthode d’objet, le menu Indicateurs de code s’affiche lorsque
l’utilisateur tape objectname. (point final compris). Ce menu indique les méthodes qui ont
été spécifiées pour l’objet. Ensuite, le menu Indicateurs de code affiche une liste des arguments
de la méthode, comme il le fait avec une fonction.
L’attribut doctypes indique que le menu est actif uniquement pour les types de documents
spécifiés. Cet attribut permet de spécifier différentes listes de noms de fonctions pour ASPJavaScript (ASP-JS), Java Server Pages (JSP), Macromedia ColdFusion, etc. Vous pouvez
spécifier l’attribut doctypes en tant que liste d’ID de types de documents séparés par des
virgules. Pour obtenir une liste des types de documents Dreamweaver, voir le fichier
Dreamweaver Configuration/Documenttypes/MMDocumentTypes.xml.
L’attribut casesensitive indique si le modèle fait la distinction entre les majuscules et les
minuscules. Les valeurs possibles pour l’attribut casesensitive sont true, false ou un sousensemble de la liste séparée par des virgules spécifiée pour l’attribut doctypes. La liste des
types de documents vous permet de spécifier si le modèle fait la distinction entre majuscules et
minuscules pour certains types de documents plutôt que d’autres. Par défaut, la valeur est
false si vous omettez cet attribut. Si vous définissez la valeur de l’attribut casesensitive sur
true, le menu Indicateurs de code s’affiche uniquement si le texte tapé par l’utilisateur
correspond exactement au modèle spécifié par l’attribut du modèle. Si vous définissez la valeur
de l’attribut casesensitive sur false, le menu s’affiche même si le modèle est en minuscules
et le texte en majuscules.
Contenu
Aucun.
Contenant
Balise menugroup.
Exemple
// exemple de fonction
<function pattern="CreateDate(year, month, day)" DOCTYPES="ColdFusion" />
// exemple de méthode d’objet
<function pattern="application.getAttribute(String name)" DOCTYPES="JSP" />
Indicateurs de code
85
Coloration du code
Dreamweaver permet de personnaliser ou d’étendre les modèles de coloration affichés en mode
Code de manière à ajouter de nouveaux mots-clés à un modèle ou à ajouter des modèles de
coloration du code correspondant à de nouveaux types de documents. Par exemple, si vous
développez des fonctions JavaScript dans le script côté client, vous pouvez ajouter le nom de ces
fonctions à la section des mots-clés de manière à les afficher dans la couleur indiquée dans les
préférences. De même, si vous développez un nouveau langage de programmation pour un
serveur d’application et que vous souhaitez distribuer un nouveau type de document dans le but
d’aider les utilisateurs de Dreamweaver à l’inclure dans le processus de création de pages, vous
pouvez ajouter un modèle de coloration du code correspondant à ce type de document.
Dreamweaver contient la fonction JavaScript dreamweaver.reloadCodeColoring() permettant
de recharger les fichiers XML de coloration du code susceptibles d’avoir été modifiés
manuellement. Pour plus d’informations sur cette fonction, voir le Guide des API de Dreamweaver.
Pour mettre à jour un modèle de coloration du code ou ajouter un nouveau modèle, vous devez
modifier les fichiers de définition de coloration du code.
Fichiers de coloration du code
Dreamweaver définit les styles et les modèles de coloration du code dans des fichiers XML se
trouvant dans le dossier Configuration/CodeColoring. Un fichier de style de coloration du code
définit le style des champs indiqués dans les définitions de syntaxe. Le nœud racine est
<codeColors>. Un fichier de modèle de coloration du code définit la syntaxe de coloration du
code ; le nœud racine est <codeColoring>.
Le fichier de style de coloration du code de Dreamweaver est Colors.xml. Les fichiers de syntaxe
de coloration du code de Dreamweaver sont CodeColoring.xml, ASP JavaScript.xml, ASP
VBScript.xml, ASP.NET CSharp.xml et ASP.NET VB.xml.
Remarque : La coloration du code illustrée dans les exemples ci-dessous apparaît uniquement sur
les impressions en couleur. Pour voir la coloration du code illustrée dans ces exemples, voir l’aide de
Dreamweaver > Extensions > Extension de Dreamweaver ou consultez le fichier PDF Extension de
Dreamweaver dans le dossier Documentation du CD d’installation.
L’extrait du fichier Colors.xml ci-dessous illustre la hiérarchie de balises dans un fichier de style de
coloration du code :
<codeColors>
<colorGroup>
<syntaxColor id="CodeColor_HTMLEntity" bold="true" italic="true" />
<syntaxColor id="CodeColor_JavascriptNative" text="#009999" />
<syntaxColor id="CodeColor_JavascriptNumber" text="#FF0000" />
…
<tagColor id="CodeColor_HTMLStyle" text="#990099" />
<tagColor id="CodeColor_HTMLTable" text="#009999" />
<syntaxColor id="CodeColor_HTMLComment" text="#999999" italic="true" />
…
</colorGroup>
</codeColors>
86
Chapitre 5 : Personnalisation du mode Code
Les couleurs sont indiquées sous la forme de valeurs hexadécimales rouge-vert-bleu (RVB). Par
exemple, l’instruction text="009999" figurant dans le code XML ci-dessus assigne une couleur
bleu-vert (sarcelle) à l’ID "CodeColor_JavascriptNative".
L’extrait du fichier codeColoring.xml ci-dessous illustre la hiérarchie de balises dans un fichier de
modèle de coloration du code ainsi que la relation entre le fichier de styles et le fichier de modèle :
<codeColoring>
<scheme name="Text" id="Text" doctypes="Text" priority="1">
<ignoreTags>Yes</ignoreTags>
<defaultText name="Text" id="CodeColor_TextText" />
<sampleText doctypes="Text">
<![CDATA[Syntaxe de coloration par défaut.
Servez à ce monsieur une bière
et des kiwis.
]]>
</sampleText>
</scheme>
<scheme name="HTML" id="HTML" doctypes="ASP.NET_VB,ASP.NET_CSharp,ASP-JS,ASPVB,ColdFusion,CFC,HTML,JSP,EDML,PHP_MySQL,DWTemplate,LibraryItem,WML"
priority="50">
<ignoreCase>Yes</ignoreCase>
<ignoreTags>No</ignoreTags>
<defaultText name="Text" id="CodeColor_HTMLText" />
<defaultTag name="Other Tags" id="CodeColor_HTMLTag" />
<defaultAttribute />
<commentStart name="Comment" id="CodeColor_HTMLComment"><![CDATA[<!-]]></commentStart>
. . .
<tagGroup name="HTML Anchor Tags" id="CodeColor_HTMLAnchor"
taglibrary="DWTagLibrary_html" tags="a" />
<tagGroup name="HTML Form Tags" id="CodeColor_HTMLForm"
taglibrary="DWTagLibrary_html" tags="select,form,input,option,textarea" />
. . .
</codeColoring>
Notez que les balises syntaxColor et tagColor du fichier Colors.xml assignent des valeurs de
couleur et de style à une valeur de chaîne id. La valeur id permet alors d’assigner un style à une
balise scheme dans le fichier codeColoring.xml. Par exemple, l’id de la balise defaultTag
figurant dans l’extrait codeColoring.xml est "CodeColor_HTMLComment". Dans le fichier
Colors.xml, la valeur text= attribuée à la valeur id de "CodeColor_HTMLComment" est
"#999999", c’est-à-dire gris.
Dreamweaver contient les modèles de coloration du code suivants : Par défaut, HTML,
JavaScript, ASP_JavaScript, ASP_VBScript, JSP et ColdFusion. La valeur id du modèle par
défaut est égale à "Text". Ce modèle est utilisé pour les types de documents dont le modèle de
coloration du code n’est pas défini.
Un fichier de coloration du code contient les balises suivantes.
Coloration du code
87
<scheme>
Description
La balise scheme indique la coloration du code assignée à un bloc de texte de code. Un fichier
peut contenir plusieurs modèles spécifiant différentes colorations pour différents langages de
script ou de balise. Chaque modèle possède une priorité vous permettant d’imbriquer un bloc de
texte correspondant à un modèle dans un bloc de texte correspondant à un autre modèle.
Attributs
name, id, priority, doctypes
•
•
•
•
Chaîne attribuant un nom au modèle. Le nom du modèle s’affiche
dans la boîte de dialogue Modifier le modèle de coloration de Dreamweaver. Dreamweaver
affiche une combinaison de nom de modèle et de champ, par exemple HTML Comment. Si vous
n’attribuez pas de nom, les champs du modèle n’apparaissent pas dans la boîte de dialogue
Modifier le modèle de coloration. Pour plus d’informations sur la boîte de dialogue Modifier le
modèle de coloration, voir Modification des modèles, page 107.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
priority="chaîne" Valeurs comprises entre "1" et "99". La priorité la plus haute est "1".
Indique la priorité d’un modèle. Les blocs se trouvant au sein de blocs dont la priorité est
supérieure sont ignorés ; les blocs se trouvant au sein de blocs dont la priorité est inférieure ou
égale sont prioritaires. Si vous n’indiquez pas de priorité, la valeur par défaut est "50".
doctypes="liste_doc" Facultatif. Indique une liste des types de documents, séparés par
des virgules, auxquels s’applique le modèle de coloration du code. Cette valeur est
indispensable pour la résolution des conflits impliquant différents blocs de début et de fin dont
les extensions sont identiques.
name="nom_modèle"
Contenu
blockEnd, blockStart, brackets, charStart, charEnd, charEsc, commentStart,
commentEnd, cssProperty, cssSelector, cssValue, defaultAttribute, defaultText,
endOfLineComment, entity, functionKeyword, idChar1, idCharrest, ignoreCase,
ignoreMMTParam, ignoreTags, keywords, numbers, operators, regexp, sampletext,
searchPattern, stringStart, stringEnd, stringEsc, urlProtocol, urlProtocols
Contenant
Balise codeColoring.
Exemple
<scheme name="Text" id="Text" doctypes="Text" priority="1">
88
Chapitre 5 : Personnalisation du mode Code
<blockEnd>
Description
Facultatif. Texte délimitant la fin du bloc de texte de ce modèle. Les balises blockEnd et
blockStart doivent être équilibrées et leur combinaison doit être unique. La casse des valeurs
indiquées n’est pas prise en compte. La valeur de la balise blockEnd peut être composée d’un seul
caractère. Vous pouvez créer plusieurs instances de cette balise. Pour plus d’informations sur les
chaînes blockEnd, voir Caractères génériques, page 105.
Attributs
Aucun.
Exemple
<blockEnd><![CDATA[--->]]></blockEnd>
<blockStart>
Description
Facultatif. Spécifiée uniquement si le modèle de coloration peut être imbriqué dans un autre
modèle de coloration. Les balises blockEnd et blockStart doivent être équilibrées et leur
combinaison doit être unique. La casse des valeurs indiquées n’est pas prise en compte. La valeur
de la balise blockStart doit comporter au minimum deux caractères. Vous pouvez créer
plusieurs instances de cette balise. Pour plus d’informations sur les chaînes blockStart,
voir Caractères génériques, page 105. Pour plus d’informations sur l’attribut blockStart scheme,
voir Coloration des délimiteurs de bloc de modèle, page 101.
Attributs
canNest, doctypes, id, name, scheme
•
•
•
•
•
Indique si le modèle peut s’imbriquer. Les valeurs sont "Yes" ou "No". La valeur
par défaut est "No".
doctypes="type_doc1, type_doc2,…" Obligatoire. Indique une liste des types de
documents, séparés par des virgules, dans lesquels vous pouvez imbriquer ce modèle de
coloration du code. Les types de documents sont définis dans le fichier Configuration/
Document Types/MMDocumentTypes.xml de Dreamweaver.
id="chaîne_id" Obligatoire lorsque scheme="customText". Chaîne d’identificateur
permettant de mapper la couleur et le style à cet élément de syntaxe.
name="nom_affiché" Chaîne apparaissant dans la boîte de dialogue Modifier le modèle de
coloration lorsque scheme="customText".
scheme Obligatoire. Définit la coloration des chaînes blockStart et blockEnd. Pour plus
d’informations sur les valeurs d’attribut scheme possibles, voir Coloration des délimiteurs de bloc
de modèle, page 101.
canNest
Exemple
<blockStart doctypes="ColdFusion,CFC" scheme="innerText"
canNest="Yes"><![CDATA[<!---]]></blockStart>
Coloration du code
89
<brackets>
Description
Liste des caractères représentant des crochets.
Attributs
name, id
•
•
Chaîne assignant un nom à la liste des crochets.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_crochet"
Exemple
<brackets name="Bracket" id="CodeColor_JavaBracket"><![CDATA[{[()]}]]></
brackets>
<charStart>
Description
Contient une chaîne de texte représentant le délimiteur du début d’un caractère. Les balises
charStart et charEnd doivent être équilibrées. Vous pouvez indiquer plusieurs paires de balises
charStart … charEnd.
Attributs
Aucun.
Exemple
<charStart><![CDATA[’]]></charStart>
<charEnd>
Description
Contient une chaîne de texte représentant le délimiteur de fin d’un caractère. Les balises
charStart et charEnd doivent être équilibrées. Vous pouvez indiquer plusieurs paires de balises
charStart … charEnd.
Attributs
Aucun.
Exemple
<charEnd><![CDATA[’]]></charEnd>
90
Chapitre 5 : Personnalisation du mode Code
<charEsc>
Description
Contient une chaîne de texte représentant un caractère d’échappement. Vous pouvez insérer
plusieurs balises charEsc.
Attributs
Aucun.
Exemple
<charEsc><![CDATA[\]]></charEsc>
<commentStart>
Description
Chaîne de texte délimitant le début d’un bloc de commentaire. Les balises commentStart et
commentEnd doivent être équilibrées. Vous pouvez indiquer plusieurs paires de balises
commentStart…/commentEnd.
Attributs
Aucun.
Exemple
<commentStart><![CDATA[<%--]]></commentStart>
<commentEnd>
Description
Chaîne de texte délimitant la fin d’un bloc de commentaire. Les balises commentStart et
commentEnd doivent être équilibrées. Vous pouvez indiquer plusieurs paires de balises
commentStart…/commentEnd.
Attributs
Aucun.
Exemple
<commentEnd><![CDATA[--%>]]></commentEnd>
Coloration du code
91
<cssImport/>
Description
Balise vide indiquant la règle de coloration du code de la fonction @import de l’élément style
dans une CSS.
Attributs
name, id
name="nom_cssImport"
Chaîne assignant un nom à la fonction @import CSS.
Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
id="chaîne_id"
Exemple
<cssImport name="@import" id="CodeColor_CSSImport" />
<cssMedia/>
Description
Balise vide indiquant la règle de coloration du code de la fonction @media de l’élément style
dans une CSS.
Attributs
name, id
•
•
Chaîne assignant un nom à la fonction @media CSS.
Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_cssMedia"
id="chaîne_id"
Exemple
<cssMedia name="@media" id="CodeColor_CSSMedia" />
<cssProperty/>
Description
Balise vide indiquant les règles CSS et regroupant des attributs de coloration du code.
Attributs
name, id
•
•
Chaîne assignant un nom à la propriété CSS.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_cssProperty"
Préférence de couleur de code
Propriété CSS
Exemple
<cssProperty name="Property" id="CodeColor_CSSProperty" />
92
Chapitre 5 : Personnalisation du mode Code
<cssSelector/>
Description
Balise vide indiquant les règles CSS et regroupant des attributs de coloration du code.
Attributs
name, id
•
•
Chaîne assignant un nom au sélecteur CSS.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_cssSelector"
Exemple
<cssSelector name="Selector" id="CodeColor_CSSSelector" />
<cssValue/>
Description
Balise vide indiquant les règles CSS et regroupant des attributs de coloration du code.
Attributs
name, id
•
•
Chaîne assignant un nom à la valeur CSS.
Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_cssValue"
id="chaîne_id"
Exemple
<cssValue name="Value" id="CodeColor_CSSValue" />
<defaultAttribute>
Description
Facultatif. Cette balise s’applique uniquement à la syntaxe de balise (c’est-à-dire une syntaxe pour
laquelle ignoreTags="No"). Si cette balise figure dans le code, tous les attributs de balise sont
colorés suivant le style qui lui est assigné. Si ce n’est pas le cas, la couleur des attributs est
identique à celle de la balise correspondante.
Attributs
name
• Chaîne assignant un nom à l’attribut par défaut.
Exemple
<defaultAttribute name="Attribute"/>
Coloration du code
93
<defaultTag>
Description
Cette balise permet de spécifier la couleur et le style par défaut des balises d’un modèle.
Attributs
name, id
•
name="nom_affiché"
Chaîne affichée par Dreamweaver dans l’éditeur de coloration du
code.
•
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
Exemple
<defaultTag name="Other Tags" id="CodeColor_HTMLTag" />
<defaultText/>
Description
Facultatif. Si cette balise figure dans le code, les chaînes de texte définies par aucune autre balise
sont colorées suivant le style assigné à cette balise. Si ce n’est pas le cas, le texte est de couleur
noire.
Attributs
name, id
•
•
Chaîne assignant un nom au sélecteur CSS.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_cssSelector"
Exemple
<defaultText name="Text" id="CodeColor_TextText" />
<endOfLineComment>
Description
Chaîne de texte délimitant le début d’un commentaire allant jusqu’à la fin de la ligne actuelle.
Vous pouvez insérer plusieurs balises endOfLineComment…/endOfLineComment.
Attributs
Aucun.
Exemple
<endOfLineComment><![CDATA[//]]></endOfLineComment>
94
Chapitre 5 : Personnalisation du mode Code
<entity/>
Description
Balise vide indiquant que les caractères spéciaux HTML doivent être reconnus et contenir des
attributs de coloration.
Attributs
name, id
•
•
Chaîne assignant un nom à l’entité.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_entité"
Exemple
<entity name="Special Characters" id="CodeColor_HTMLEntity" />
<functionKeyword>
Description
Identifie les mots-clés définissant une fonction. Ces mots-clés permettent à Dreamweaver de
naviguer dans le code. Vous pouvez insérer plusieurs balises functionKeyword.
Attributs
name, id
•
•
Chaîne assignant un nom au bloc functionKeyword.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_functionKeyword"
Exemple
<functionKeyword name="Function Keyword"
id="CodeColor_JavascriptFunction">function</functionKeyword>
<idChar1>
Description
Liste de chacun des caractères identifiables par Dreamweaver comme premier caractère d’un
identifiant.
Attributs
name, id
•
•
Chaîne assignant un nom à la liste des caractères d’identifiant.
Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_idChar1"
id="chaîne_id"
Exemple
<idChar1>_$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</idChar1>
Coloration du code
95
<idCharRest>
Description
Liste de caractères devant être identifiés comme les autres caractères de l’identificateur. Si la balise
idChar1 n’est pas spécifiée, tous les caractères de l’identifiant sont validés en fonction de cette
liste.
Attributs
name, id
•
•
Chaîne assignant un nom au bloc stringStart.
Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_idCharRest"
id="chaîne_id"
Exemple
<idCharRest name="Identifier"
id="CodeColor_JavascriptIdentifier">_$abcdefghijklmnopqrstuvwxyzABCDEFGHIJK
LMNOPQRSTUVWXYZ0123456789</idCharRest>
<ignoreCase>
Description
Indique si la casse des caractères doit être ignorée lors de la comparaison des expressions et des
mots-clés. Les valeurs sont Yes ou No. La valeur par défaut est Yes.
Attributs
Aucun.
Exemple
<ignoreCase>Yes</ignoreCase>
<ignoreMMTParams>
Description
Indique si une couleur particulière doit être attribuée aux balises MMTInstance:Param, <!-InstanceParam ou <!-- #InstanceParam. Les valeurs sont Yes et No ; la valeur par défaut est
Yes. Cette balise assure la coloration appropriée des pages utilisant des modèles.
Attributs
Aucun.
Exemple
<ignoreMMTParams>No</ignoreMMTParams>
96
Chapitre 5 : Personnalisation du mode Code
<ignoreTags>
Description
Indique si les balises doivent être ignorées. Les valeurs sont Yes et No ; la valeur par défaut est
Yes. Définissez la valeur sur No si la syntaxe correspond à un langage de balise délimité par < et >.
Définissez la valeur sur Yes si la syntaxe correspond à un langage de programmation.
Attributs
Aucun.
Exemple
<ignoreTags>No</ignoreTags>
<isLocked>
Description
Indique si le texte correspondant au modèle est verrouillé aux modifications en mode Code. Les
valeurs sont Yes et No. La valeur par défaut est No.
Attributs
Aucun.
Exemple
<isLocked>Yes</isLocked>
<keyword>
Description
Chaîne de texte définissant un mot-clé. Vous pouvez insérer plusieurs balises keyword. Il n’existe
aucune restriction liée au premier caractère d’un mot-clé ; en revanche, les caractères suivants
doivent être a-z, A-Z, 0-9, _, $ ou @.
La couleur du code est spécifiée par les balises contenant keyword.
Attributs
Aucun.
Exemple
<keyword>.getdate</keyword>
Coloration du code
97
<keywords>
Description
Liste des mots-clés correspondant au type spécifié dans l’attribut category. Vous pouvez insérer
plusieurs balises keywords.
Attributs
name, id
•
•
Chaîne assignant un nom à la liste des mots-clés.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_mots_clés"
Contenu
<keyword></keyword>
Exemple
<keywords name="Reserved Keywords" id="CodeColor_JavascriptReserved">
<keyword>break</keyword>
<keyword>case</keyword>
</keywords>
<numbers/>
Description
Balise vide spécifiant les chiffres devant être reconnus et contenant des attributs de couleur.
Attributs
name, id
•
•
Chaîne assignant un nom à la balise numbers.
Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_chiffre"
id="chaîne_id"
Exemple
<numbers name="Number" id="CodeColor_CFScriptNumber" />
<operators>
Description
Liste des caractères devant être reconnus comme opérateurs.
Attributs
name, id
•
•
Chaîne assignant un nom à la liste des caractères opérateurs.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_opérateur"
Exemple
<operators name="Operator" id="CodeColor_JavaOperator"><![CDATA[+-*/
%<>!?:=&|^~]]></operators>
98
Chapitre 5 : Personnalisation du mode Code
<regexp>
Description
Spécifie une liste de balises searchPattern.
Attributs
name, id, delimiter, escape
•
name="nom_stringStart"
Chaîne assignant un nom à la liste des chaînes de modèle de
recherche.
•
•
•
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
delimiter Caractère ou chaîne situé au début et à la fin d’une expression régulière.
escape Caractère ou chaîne signalant le traitement de caractères spéciaux, également appelé
caractère ou chaîne « d’échappement ».
Contenu
<searchPattern></searchPattern>
Exemple
<regexp name="RegExp" id="CodeColor_JavascriptRegexp" delimiter="/"
escape="\\">
<searchPattern><![CDATA[(\s*/\e*\\/]]></searchPattern>
<searchPattern><![CDATA[=\s*/\e*\\/]]></searchPattern>
</regexp>
<sampleText>
Description
Texte servant à la représentation dans la fenêtre Aperçu de la boîte de dialogue Modifier le modèle
de coloration. Pour plus d’informations sur la boîte de dialogue Modifier le modèle de coloration,
voir Modification des modèles, page 107.
Attributs
doctypes
•
doctypes="type_doc1, type_doc2,...”
types de documents pour lesquels cet
échantillon apparaît.
Exemple
<sampleText doctypes="JavaScript"><![CDATA[/* JavaScript */
function displayWords(arrayWords) {
for (i=0; i < arrayWords.length(); i++) {
// commentaire en ligne
alert("Word " + i + " is " + arrayWords[i]);
}
}
var tokens = new Array("Bonjour", "Monde");
displayWords(tokens);
]]></sampleText>
Coloration du code
99
<searchPattern>
Description
Chaîne de caractères définissant un modèle de recherche régulier à l’aide des caractères génériques
pris en charge. Vous pouvez insérer plusieurs balises searchPattern.
Attributs
Aucun.
Contenant
Balise regexp.
Exemple
<searchPattern><![CDATA[(\s*/\e*\\/]]></searchPattern>
<stringStart>
Description
Ces balises contiennent une chaîne de texte représentant le délimiteur du début d’une chaîne. Les
balises stringStart et stringEnd doivent être équilibrées. Vous pouvez indiquer plusieurs paires
de balises stringStart … stringEnd.
Attributs
name, id, wrap
•
•
•
Chaîne assignant un nom au bloc stringStart.
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
wrap="true" ou "false". Définit la reconnaissance ou non des chaînes de texte placées sur la
ligne suivante. La valeur par défaut est "true".
name="nom_stringStart"
Exemple
<stringStart name="Attribute Value" id="CodeColor_HTMLString"><![CDATA["]]></
stringStart>
<stringEnd>
Description
Contient une chaîne de texte représentant le délimiteur de fin d’une chaîne de code. Les balises
stringStart et stringEnd doivent être équilibrées. Vous pouvez indiquer plusieurs paires de
balises stringStart … stringEnd.
Attributs
Aucun.
Exemple
<stringEnd><![CDATA["]]></stringEnd>
100
Chapitre 5 : Personnalisation du mode Code
<stringEsc>
Description
Contient une chaîne de texte représentant le délimiteur du caractère d’échappement d’une chaîne.
Vous pouvez insérer plusieurs balises stringEsc.
Attributs
Aucun.
Exemple
<stringEsc><![CDATA[\]]></stringEsc>
<tagGroup>
Description
Cette balise regroupe une ou plusieurs balises auxquelles vous pouvez assigner une couleur et un
style unique.
Attributs
id, name, taglibrary, tags
•
•
•
•
id="chaîne_id" Obligatoire. Chaîne d’identificateur permettant de mapper la couleur et le
style à cet élément de syntaxe.
name="nom_affiché" Chaîne affichée par Dreamweaver dans l’éditeur de coloration du
code.
taglibrary="id_bibliothèque_balises" Identificateur de la bibliothèque de balises à
laquelle le groupe appartient.
tags="liste_balise" Balise ou liste de balises séparées par des virgules comprenant le
groupe de balises.
Exemple
<tagGroup name="HTML Table Tags" id="CodeColor_HTMLTable"
taglibrary="DWTagLibrary_html"
tags="table,tbody,td,tfoot,th,thead,tr,vspec,colw,hspec" />
Coloration des délimiteurs de bloc de modèle
L’attribut de modèle blockStart détermine la coloration des chaînes de début et de fin de bloc
ou des délimiteurs de bloc. Les valeurs valides pour l’attribut blockStart sont répertoriées ciaprès.
Remarque : Ne pas confondre l’attribut blockStart.scheme et la balise scheme.
innerText
Cette valeur indique à Dreamweaver que les délimiteurs de bloc doivent avoir la même couleur
que le texte par défaut du modèle qu’ils renferment.
Le modèle Modèle illustre l’effet de ce modèle. Le modèle Modèle correspond à des blocs de code
en lecture seule. La couleur grise indique qu’il est impossible de les modifier. Les délimiteurs de
bloc, à savoir les chaînes <!-- #EndEditable --> et <!-- #BeginEditable "...", --> sont
aussi de couleur grise car il est également impossible de les modifier.
Coloration du code
101
Exemple de code
<!-- #EndEditable -->
<p><b><font size="+2">header</font></b></p>
<!-- #BeginEditable "test" -->
<p>Ce texte-ci est modifiable </p>
<p> </p>
<!-- #EndEditable -->
Exemple
<blockStart doctypes="ASP-JS,ASP-VB, ASP.NET_CSharp, ASP.NET_VB,
ColdFusion,CFC, HTML, JSP,LibraryItem,PHP_MySQL"
scheme="innerText"><![CDATA[<!--\s*#BeginTemplate]]></blockStart>
customText
Cette valeur indique à Dreamweaver qu’une couleur personnalisée doit être appliquée aux
délimiteurs.
Exemple de code
Les délimiteurs de bloc de script PHP, qui apparaissent en rouge, illustrent l’effet de la valeur
customText :
<?php
if ($loginMsg <> "")
echo $loginMsg;
?>
Exemple
<blockStart name="Block Delimiter" id="CodeColor_JavaBlock" doctypes="JSP"
scheme="customText"><![CDATA[<%]]></blockStart>
outerTag
La valeur outerTag indique que les balises blockStart et blockEnd sont des balises à part
entière et que Dreamweaver doit les colorer comme des balises du modèle qui les entoure.
Le modèle JavaScript, dans lequel les chaînes <script> et </script> correspondent aux balises
blockStart et blockEnd, illustre cette valeur. Ce modèle correspond aux blocs de code
JavaScript, dans lequel les balises ne sont pas reconnues ; les délimiteurs doivent donc prendre la
coloration du modèle qui les entoure.
Exemple de code
<script language="JavaScript">
// commentaire
if (true)
window.alert("Bonjour, Monde");
</script>
Exemple
<blockStart doctypes="PHP_MySQL"
scheme="outerTag"><![CDATA[<script\s+language="php">]]></blockStart>
102
Chapitre 5 : Personnalisation du mode Code
innerTag
Cette valeur est similaire à la valeur outerTag ; la seule différence est que la coloration provient
du modèle se trouvant à l’intérieur des délimiteurs. Elle est généralement utilisée pour la balise
html.
nameTag
Cette valeur indique que la chaîne blockStart correspond au début d’une balise, que la chaîne
correspond à la fin d’une balise et que ces délimiteurs doivent être colorés suivant les
paramètres de balise du modèle.
blockEnd
Ce type de modèle affiche les balises pouvant être imbriquées dans d’autres balises (par exemple,
la balise cfoutput).
Exemple de code
<input type="text" name="zip"
<cfif newRecord IS "no">
<cfoutput query="employee"> Value="#zip#" </cfoutput>
</cfif>
>
Exemple
<blockStart doctypes="ColdFusion,CFC"
scheme="nameTag"><![CDATA[<cfoutput\n]]></blockStart>
nameTagScript
Cette valeur est identique au modèle nameTag ; cependant, son contenu se compose de script, par
exemple, des instructions ou des expressions d’assignation, par opposition aux paires d’attributs
name=value.
Ce type de modèle affiche uniquement les balises contenant du script (par exemple, les balises
ColdFusion cfset, cfif et cfifelse) et pouvant être imbriquées au sein d’autres balises.
Exemple de code
Voir l’exemple illustrant nameTag.
Exemple
<blockStart doctypes="ColdFusion,CFC"
scheme="nameTagScript"><![CDATA[<cfset\n]]></blockStart>
Coloration du code
103
Traitement des modèles
Dreamweaver regroupe trois modes basiques de coloration du code : le mode CSS, le mode Script
et le mode Balises.
Dans chaque mode, Dreamweaver applique uniquement la coloration du code à certains champs.
Le tableau ci-dessous répertorie les champs auxquels s’applique la coloration du code pour chaque
mode.
Champ
CSS
Balises
Script
defaultText
X
X
defaultTag
X
defaultAttribute
X
comment
X
X
X
string
X
X
X
cssProperty
X
cssSelector
X
cssValue
X
X
X
character
function keyword
X
identifier
X
number
X
operator
X
X
brackets
X
X
keywords
X
X
Afin de faciliter le processus de définition de modèles, Dreamweaver permet de spécifier des
caractères génériques et des caractères d’échappement.
104
Chapitre 5 : Personnalisation du mode Code
Caractères génériques
La liste ci-dessous répertorie les caractères génériques pris en charge dans Dreamweaver, les
chaînes permettant de les spécifier et une description de leur utilisation.
Caractère
générique
Chaîne
Description
d’échappement
Caractère générique \*
Ignore tous les caractères de la règle jusqu’à la détection
du caractère suivant le caractère générique. Par exemple,
<MMTInstance:Editable name=”\*”> permet de détecter
toutes les balises de ce type pour lesquelles l’attribut name
est spécifié.
Caractère générique \e*x
avec caractère
d’échappement
x correspond au caractère d’échappement.
Même utilisation que le caractère générique, avec
possibilité de spécifier un caractère d’échappement. Le
caractère suivant le caractère d’espacement est ignoré. Le
caractère suivant le caractère générique peut ainsi
apparaître dans une chaîne sans correspondre au critère
spécifié pour l’arrêt du traitement du caractère générique.
Par exemple, /\e*\\/ permet de reconnaître une
expression JavaScript régulière commençant et terminant
par une barre oblique (/) et pouvant contenir des barres
obliques précédées d’une barre oblique inversée (\). La
barre oblique inversée correspond au caractère
d’échappement de coloration du code ; dès lors, vous
devez la faire précéder d’une barre oblique inversée
lorsque vous la spécifiez dans du code XML coloré.
Espace blanc
facultatif
\s*
Permet de reconnaître les espaces vides (même
inexistants) ou les caractères de nouvelle ligne.
Par exemple, <!--\s*#include permet de reconnaître des
directives d’inclusion ASP, que l’expression #include soit
précédée ou non d’espace blanc, car les deux cas sont
valides.
Les caractères génériques espace blanc correspondent à
toutes les combinaisons d’espace blanc et de caractères
de nouvelle ligne.
Espace blanc
obligatoire
\s+
Permet de reconnaître un ou plusieurs espaces vides ou les
caractères de nouvelle ligne.
Par exemple, <!--#include\s+virtual permet de
reconnaître des directives d’inclusion ASP contenant
toutes les combinaisons d’espace blanc entre les
expressions #include et virtual. Un espace blanc doit
obligatoirement séparer ces deux expressions, mais il peut
correspondre à toutes les combinaisons de caractères
d’espace blanc valides.
Les caractères génériques espace blanc correspondent à
toutes les combinaisons d’espace blanc et de caractères
de nouvelle ligne.
Coloration du code
105
Caractères d’échappement
La liste ci-dessous répertorie les caractères d’échappement pris en charge dans Dreamweaver, les
chaînes permettant de les spécifier et une description de leur utilisation.
Caractère
d’échappement
Chaîne
Description
d’échappement
Barre oblique
inversée
\\
La barre oblique inversée (\) correspond au caractère
d’échappement de coloration du code ; elle doit donc être
ignorée pour être spécifiée dans une règle de coloration du
code.
Espace blanc
\s
Ce caractère d’échappement correspond à tous les
caractères non visibles, à l’exception de ceux correspondant
au caractère de nouvelle ligne, comme les espaces et les
tabulations.
L’espace blanc facultatif et l’espace blanc obligatoire
correspondent à la fois aux espaces blancs et aux caractères
de nouvelle ligne.
Nouvelle ligne
\n
Ce caractère d’échappement correspond aux caractères de
nouvelle ligne (également appelés sauts de ligne) et aux
retours chariot.
Longueur maximale de chaîne
La longueur maximale autorisée pour les chaînes de données est de 100 caractères. Par exemple, la
balise blockEnd suivante contient un caractère générique.
<blockEnd><![CDATA[<!--\s*#BeginEditable\s*"\*"\s*-->]]></blockEnd>
En partant du principe que les chaînes de caractère générique espace blanc facultatif (\s*)
correspondent à un seul espace, généré automatiquement par Dreamweaver, la chaîne de données
comprend 26 caractères, plus une chaîne de caractère générique (\*) correspondant au nom.
<!-- #BeginEditable "\*" -->
Le nom de région modifiable peut donc comporter jusqu’à 74 caractères, c’est-à-dire 100
caractères (longueur maximale) moins 26.
Priorité de modèle
Dreamweaver applique la coloration de la syntaxe de texte en mode Code en utilisant l’algorithme
suivant :
1 Dreamweaver détermine le modèle de syntaxe initial en fonction du type de document du
fichier actuel. Le type de document du fichier est déterminé en fonction de l’attribut
scheme.documentType. Si aucun type n’est détecté, le modèle pour lequel
scheme.documentType = "Text" est utilisé.
2 Les modèles peuvent être imbriqués s’ils comportent des paires blockStart…blockEnd. Tous
les modèles pouvant être imbriqués et pour lesquels l’extension du fichier actuel est répertoriée
dans l’un des attributs blockStart.doctypes sont activés pour le fichier actuel ; les autres
modèles sont désactivés.
Remarque : Toutes les combinaisons blockStart/blockEnd doivent être uniques.
106
Chapitre 5 : Personnalisation du mode Code
Les modèles peuvent s’imbriquer au sein d’un autre modèle à condition que scheme.priority
soit supérieure ou égale au modèle extérieur. Si la priorité est la même, le modèle s’imbrique
uniquement au niveau du corps du modèle extérieur. Par exemple, le bloc <script>...</
script> peut uniquement s’imbriquer dans le bloc <html>...</html> contenant des balises
légales ; il ne peut donc pas s’imbriquer au sein d’une balise, d’un attribut, d’une chaîne, d’un
commentaire, etc.
Les modèles dont la priorité est supérieure au modèle extérieur peuvent s’imbriquer à
quasiment tous les niveaux du modèle extérieur. Par exemple, le bloc <%...%> peut non
seulement s’imbriquer au niveau du corps du bloc <html>...</html>, mais également au sein
d’une balise, d’un attribut, d’une chaîne, d’un commentaire, etc.
Le niveau d’imbrication maximum est de 4.
3 Lorsqu’il recherche des chaînes blockStart, Dreamweaver utilise toujours la correspondance
la plus longue.
4 Une fois la chaîne blockEnd atteinte pour le modèle actuel, la coloration de syntaxe revient au
niveau où la chaîne blockStart est détectée. Par exemple, si un bloc <%...%> est détecté au
sein d’une chaîne HTML, la coloration reprend avec la couleur de la chaîne HTML.
Modification des modèles
Vous pouvez modifier les styles d’un modèle de coloration du code soit en modifiant le fichier de
coloration du code ou en sélectionnant la catégorie Coloration du code dans la boîte de dialogue
Préférences de Dreamweaver (voir illustration ci-dessous) :
Les paramètres de couleur et de style des champs susceptibles d’apparaître plusieurs fois (par
exemple, stringStart) doivent être indiqués uniquement pour la première balise. Si vous répartissez
les paramètres de couleur et de style sur plusieurs balises et que vous les modifiez ultérieurement
dans la boîte de dialogue Préférences, vous perdrez vos données.
Coloration du code
107
Remarque : Macromedia recommande de créer des copies de sauvegarde de tous les fichiers XML
avant d’apporter vos modifications. Vérifiez toutes les modifications apportées manuellement avant
de modifier les paramètres de style et de couleur dans la boîte de dialogue Préférences. Si vous
modifiez un fichier XML non valide dans la boîte de dialogue Préférences, vous perdrez vos données.
Pour modifier les styles d’un modèle dans la catégorie Coloration du code de la boîte de dialogue
Préférences, double-cliquez sur un type de document ou cliquez sur le bouton Modifier le modèle
de coloration ; la boîte de dialogue Modifier le modèle de coloration s’affiche.
Pour modifier le style d’un élément en particulier, sélectionnez-le dans la liste Styles pour. Le volet
Styles pour répertorie les champs du modèle modifié ainsi que les modèles susceptibles
d’apparaître sous forme de bloc au sein de ce modèle. Par exemple, si vous modifiez le modèle
HTML, les champs des blocs CSS et JavaScript apparaissent également.
Les champs de modèle répertoriés correspondent aux champs définis dans le fichier XML. La
valeur de l’attribut scheme.name précède chacun des champs répertoriés dans le volet Styles pour.
Les champs sans nom ne sont pas répertoriés.
Outre la coloration du code, le style d’un élément désigne la mise en caractère gras, la mise en
italique, le soulignement et la couleur d’arrière-plan. Une fois l’élément sélectionné dans le volet
Styles pour, vous pouvez modifier toutes ces caractéristiques de style.
La zone Aperçu affiche un échantillon de texte auquel s’appliquent les paramètres indiqués.
L’échantillon est défini dans le paramètre sampleText du modèle.
Sélectionnez un élément dans la zone Aperçu pour modifier la sélection de la liste Style pour.
Si vous modifiez les paramètres d’un élément d’un modèle, Dreamweaver consigne la valeur dans
le fichier de coloration et remplace le paramètre d’origine. Lorsque vous cliquez sur OK,
Dreamweaver actualise automatiquement toutes les modifications de coloration du code.
108
Chapitre 5 : Personnalisation du mode Code
Exemples de coloration du code
Les exemples de coloration du code ci-dessous illustrent les modèles de coloration du code d’un
document de style en cascade et d’un document JavaScript. Par souci de concision, les listes de
mots-clés de l’exemple JavaScript sont abrégées.
Coloration du code CSS
<scheme name="CSS" id="CSS" doctypes="CSS" priority="50">
<ignoreCase>Yes</ignoreCase>
<ignoreTags>Yes</ignoreTags>
<blockStart doctypes="ASP-JS,ASPVB,ASP.NET_CSharp,ASP.NET_VB,ColdFusion,CFC,HTML,JSP,LibraryItem,DWTemplate
,PHP_MySQL" scheme="outerTag"><![CDATA[<style>]]></blockStart>
<blockEnd><![CDATA[</style>]]></blockEnd>
<blockStart doctypes="ASP-JS,ASPVB,ASP.NET_CSharp,ASP.NET_VB,ColdFusion,CFC,HTML,JSP,LibraryItem,DWTemplate
,PHP_MySQL" scheme="outerTag"><![CDATA[<style\s+\*>]]></blockStart>
<blockEnd><![CDATA[</style>]]></blockEnd>
<commentStart name="Comment" id="CodeColor_CSSComment"><![CDATA[/*]]></
commentStart>
<commentEnd><![CDATA[*/]]></commentEnd>
<endOfLineComment><![CDATA[<!--]]></endOfLineComment>
<endOfLineComment><![CDATA[-->]]></endOfLineComment>
<stringStart name="String" id="CodeColor_CSSString"><![CDATA["]]></
stringStart>
<stringEnd><![CDATA["]]></stringEnd>
<stringStart><![CDATA[’]]></stringStart>
<stringEnd><![CDATA[’]]></stringEnd>
<stringEsc><![CDATA[\]]></stringEsc>
<cssSelector name="Selector" id="CodeColor_CSSSelector" />
<cssProperty name="Property" id="CodeColor_CSSProperty" />
<cssValue name="Value" id="CodeColor_CSSValue" />
<sampleText doctypes="CSS"><![CDATA[/* Comment */
H2, .head2
{
font-family : ’Sans-Serif’;
font-weight : bold;
color : #339999;
}]]>
</sampleText>
</scheme>
Echantillon CSS
L’échantillon du modèle CSS suivant illustre le modèle de coloration du code CSS :
/* Comment */
H2, .head2
{
font-family : ’Sans-Serif’;
font-weight : bold;
color : #339999;
}
Les lignes suivantes, extraites du fichier Colors.xml, fournissent les valeurs de couleur et de style
affichées dans l’échantillon et ont été assignées par le modèle de coloration du code :
<syntaxColor id="CodeColor_CSSSelector" text="#FF00FF" />
<syntaxColor id="CodeColor_CSSProperty" text="#000099" />
<syntaxColor id="CodeColor_CSSValue" text="#0000FF" />
Coloration du code
109
Coloration du code JavaScript
<scheme name="JavaScript" id="JavaScript" doctypes="JavaScript" priority="50">
<ignoreCase>No</ignoreCase>
<ignoreTags>Yes</ignoreTags>
<blockStart doctypes="ASP-JS,ASPVB,ASP.NET_CSharp,ASP.NET_VB,ColdFusion,CFC,HTML,JSP,LibraryItem,DWTemplate
,PHP_MySQL" scheme="outerTag"><![CDATA[<script>]]></blockStart>
<blockEnd><![CDATA[</script>]]></blockEnd>
<blockStart doctypes="ASP-JS,ASPVB,ASP.NET_CSharp,ASP.NET_VB,ColdFusion,CFC,HTML,JSP,LibraryItem,DWTemplate
,PHP_MySQL" scheme="outerTag"><![CDATA[<script\s+\*>]]></blockStart>
<blockEnd><![CDATA[</script>]]></blockEnd>
<commentStart name="Comment" id="CodeColor_JavascriptComment"><![CDATA[/
*]]></commentStart>
<commentEnd><![CDATA[*/]]></commentEnd>
<endOfLineComment><![CDATA[//]]></endOfLineComment>
<endOfLineComment><![CDATA[<!--]]></endOfLineComment>
<endOfLineComment><![CDATA[-->]]></endOfLineComment>
<stringStart name="String"
id="CodeColor_JavascriptString"><![CDATA["]]></stringStart>
<stringEnd><![CDATA["]]></stringEnd>
<stringStart><![CDATA[’]]></stringStart>
<stringEnd><![CDATA[’]]></stringEnd>
<stringEsc><![CDATA[\]]></stringEsc>
<brackets name="Bracket"
id="CodeColor_JavascriptBracket"><![CDATA[{[()]}]]></brackets>
<operators name="Operator" id="CodeColor_JavascriptOperator"><![CDATA[+*/%<>!?:=&|^]]></operators>
<numbers name="Number" id="CodeColor_JavascriptNumber" />
<regexp name="RegExp" id="CodeColor_JavascriptRegexp" delimiter="/"
escape="\\">
<searchPattern><![CDATA[(\s*/\e*\\/]]></searchPattern>
<searchPattern><![CDATA[=\s*/\e*\\/]]></searchPattern>
</regexp>
<idChar1>_$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ</idChar1>
<idCharRest name="Identifier"
id="CodeColor_JavascriptIdentifier">_$abcdefghijklmnopqrstuvwxyzABCDEFGHIJK
LMNOPQRSTUVWXYZ0123456789</idCharRest>
<functionKeyword name="Function Keyword"
id="CodeColor_JavascriptFunction">function</functionKeyword>
<keywords name="Reserved Keywords" id="CodeColor_JavascriptReserved">
<keyword>break</keyword>
. . .
</keywords>
<keywords name="Native Keywords" id="CodeColor_JavascriptNative">
<keyword>abs</keyword>
. . .
</keywords>
<keywords id="CodeColor_JavascriptNumber">
<keyword>Infinity</keyword>
<keyword>Nan</keyword>
</keywords>
<keywords name="Client Keywords" id="CodeColor_JavascriptClient">
<keyword>alert</keyword>
. . .
</keywords>
<sampleText><![CDATA[/* JavaScript */
function displayWords(arrayWords) {
for (i=0; i < arrayWords.length(); i++) {
// commentaire en ligne
110
Chapitre 5 : Personnalisation du mode Code
alert("Word " + i + " is " + arrayWords[i]);
}
}
var tokens = new Array("Bonjour", "Monde");
displayWords(tokens);
]]></sampleText>
</scheme>
Echantillon JavaScript
L’échantillon du modèle JavaScript suivant illustre le modèle de coloration du code JavaScript :
* JavaScript */
function displayWords(arrayWords) {
for (i=0; i < arrayWords.length(); i++) {
// commentaire en ligne
alert("Le mot " + i + " est " + arrayWords[i]);
}
}
var tokens = new Array("Bonjour", "Monde");
displayWords(tokens);
Les lignes suivantes, extraites du fichier Colors.xml, fournissent les valeurs de couleur et de style
affichées dans l’échantillon et ont été assignées par le modèle de coloration du code :
<syntaxColor
<syntaxColor
<syntaxColor
<syntaxColor
<syntaxColor
<syntaxColor
id="CodeColor_JavascriptComment" text="#999999" italic="true" />
id="CodeColor_JavascriptFunction" text="#000000" bold="true" />
id="CodeColor_JavascriptBracket" text="#000099" bold="true" />
id="CodeColor_JavascriptNumber" text="#FF0000" />
id="CodeColor_JavascriptClient" text="#990099" />
id="CodeColor_JavascriptNative" text="#009999" />
Validation du code
Lorsque vous ouvrez un document en mode Code, Dreamweaver vérifie automatiquement la
validité des balises, attributs, propriétés ou valeurs CSS en fonction des navigateurs cibles spécifiés
par l’utilisateur. Dreamweaver souligne les erreurs détectées par une ligne ondulée de couleur
rouge.
Les profils des navigateurs sont stockés dans le dossier Browser Profile du dossier Configuration
de Dreamweaver. Chaque profil de navigateur se présente sous la forme d’un fichier texte portant
le nom du navigateur. Par exemple, le profil du navigateur Internet Explorer version 6.0
correspond au fichier Internet_Explorer_6.0.txt. Pour prendre en charge la vérification des
navigateurs cibles pour CSS, Dreamweaver stocke les informations de profil CSS d’un navigateur
dans un fichier XML dont le nom correspond au profil du navigateur, auquel a été ajouté le
suffixe _CSS.xml. Par exemple, le profil CSS du navigateur Internet Explorer 6.0 se trouve dans le
fichier Internet_Explorer_6.0_CSS.xml. Si vous souhaitez ignorer une erreur signalée par
Dreamweaver, vous pouvez modifier le fichier de profil CSS.
Le fichier de profil CSS comprend trois balises : css-support, property et value. Les sections
ci-après fournissent une description de chacune de ces balises.
Validation du code
111
<css-support>
Description
Cette balise correspond au nœud racine d’un ensemble de balises property et value prises en
charge par un navigateur donné.
Attributs
Aucun.
Contenu
Balises property et value.
Contenant
Aucun.
Exemple
<css-support>
...
</css-support>
<property>
Description
Définit une propriété CSS prise en charge par un profil de navigateur.
Attributs
name, names, supportlevel, message
•
•
Nom de la propriété à prendre en charge.
Liste des noms de propriété à prendre en
charge. Les différents noms sont séparés par des virgules.
L’attribut names peut être considéré comme une forme abrégée. Par exemple, l’attribut names
ci-dessous correspond à une méthode abrégée de définition de l’attribut name qui suit :
name="nom_propriété"
names="nom_propriété, nom_propriété, ..."
<property names="foo,bar">
<value type="named" name="top"/>
<value type="named" name="bottom"/>
</property>
<property name="foo">
<value type="named"
<value type="named"
</property>
<property name="bar">
<value type="named"
<value type="named"
</property>
112
name="top"/>
name="bottom"/>
name="top"/>
name="bottom"/>
Chapitre 5 : Personnalisation du mode Code
•
•
ou "supported" Indique le niveau de prise
en charge de la propriété. Si aucune valeur n’est indiquée, la valeur attribuée est "supported".
Si vous indiquez un niveau de prise en charge différent de "supported" et que vous ne
spécifiez pas l’attribut message, Dreamweaver utilise le message par défaut, « La propriété CSS
nom_propriété n’est pas prise en charge. »
message="chaîne_message" L’attribut message définit la chaîne du message affiché dans
Dreamweaver lorsqu’il détecte la propriété d’un document. La chaîne du message décrit les
limites ou les contraintes susceptibles d’apparaître en fonction de la valeur de la propriété.
supportlevel="error", "warning", "info"
Contenu
value
Contenant
css-support
Exemple
<property name="background-color" supportLevel="supported">
<value>
Description
Définit une liste de valeurs prises en charge par la propriété actuelle.
Attributs
type, name, names, supportlevel, message,
•
•
•
•
•
type="any", "named", "units", "color", "string" ou "function" Indique le type
valeur. Si vous spécifiez "named", "units" ou "color", l’attribut name ou names doit
spécifier les ID de valeur correspondant à l’élément. La valeur "units" correspond à une
de
valeur numérique, suivie de l’une des valeurs d’unités spécifiées dans l’attribut name.
name="nom_valeur" Identificateur de valeur CSS. Les espaces et la ponctuation, à l’exception
du tiret (-), sont interdits. Nom de l’une des valeurs valides pour la propriété CSS nommée
dans le nœud de propriété parent. Ce nom peut désigner une valeur spécifique ou un
spécificateur d’unité.
names="nom1, nom2, . . ." Spécifie une liste d’ID de valeur séparés par des virgules.
supportlevel="error", "warning", "info" ou "supported" Indique le niveau de prise
en charge de cette valeur dans le navigateur. Si aucune valeur n’est indiquée, la valeur attribuée
est "supported".
message="chaîne_message" L’attribut message définit la chaîne du message affiché dans
Dreamweaver lorsqu’il détecte la valeur de propriété d’un document. Si vous ne spécifiez pas
l’attribut message, Dreamweaver affiche la chaîne de message suivante : « nom_valeur n’est
pas prise en charge ».
Contenu
Aucun.
Contenant
property
Validation du code
113
Exemple
<property name="margin">
<value type="units" name="ex" supportLevel="warning"
message="L’implémentation des unités ex provoque un bogue de Safari 1.0."/
>
<value type="units" names="%,em,px,in,cm,mm,pt,pc”/>
<value type="named" name="auto"/>
<value type="named" name="inherit"/>
</property>
Modification du formatage HTML par défaut
La catégorie Format de code de la boîte de dialogue Préférences permet de modifier les préférences
générales de formatage du code. L’éditeur de la bibliothèque de balises (Edition > Bibliothèques
de balises) permet de modifier le format de balises ou d’attributs spécifiques. Pour plus
d’informations, voir Utilisation de Dreamweaver dans le menu Aide de Dreamweaver.
Vous pouvez également modifier le formatage d’une balise en modifiant le fichier VTM
correspondant à cette balise (dans un sous-dossier du dossier de configuration Tag Libraries) ; il
est toutefois préférable de modifier le formatage directement dans l’application Dreamweaver.
Si vous ajoutez ou que vous supprimez un fichier VTM, vous devez modifier le fichier
TagLibraries.vtm ; Dreamweaver ignore les fichiers VTM non répertoriés dans le fichier
TagLibraries.vtm.
Remarque : Modifiez ce fichier dans un éditeur de texte et non dans Dreamweaver.
114
Chapitre 5 : Personnalisation du mode Code
Etudiez les fonctions que vous devez rédiger lorsque vous créez des objets, barres d’outils, éditeurs
de balises, panneaux flottants, comportements de serveurs, composants ou modèles de serveur.
Chapitre 6 : Objets de la barre Insérer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Chapitre 7 : Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Chapitre 8 : Menus et commandes de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Chapitre 9 : Barres d’outils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Chapitre 10 : Rapports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Chapitre 11 : Bibliothèques et éditeurs de balises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Chapitre 12 : Inspecteurs de propriétés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Chapitre 13 : Panneaux flottants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Chapitre 14 : Comportements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Chapitre 15 : Comportements de serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Chapitre 16 : Sources de données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Chapitre 17 : Formats de serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Chapitre 18 : Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Chapitre 19 : Modèles de serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Chapitre 20 : Traducteurs de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Chapitre 21 : Extensions C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
PARTIE II
PARTIE II
API d’extension
CHAPITRE 6
Objets de la barre Insérer
Dans Dreamweaver, l’insertion des objets entraîne l’ajout de chaînes de code spécifiques dans le
document de l’utilisateur. Les objets sont en principe regroupés dans la barre Insérer, dans le
menu Insertion ou dans les deux ; l’utilisateur peut ainsi ajouter différents types de contenu, par
exemple, des images, des calques ou des tableaux, en cliquant sur les icônes ou en sélectionnant les
options de menu correspondantes. Vous pouvez ajouter des éléments à la barre Insérer pour
permettre aux utilisateurs d’effectuer automatiquement certaines tâches répétitives ou même créer
des boîtes de dialogue pour leur permettre de définir des attributs spécifiques.
Les objets sont stockés dans le dossier Configuration/Objects du dossier de l’application
Dreamweaver. Les sous-dossiers du dossier Objects sont regroupés en fonction de l’emplacement
des objets dans la barre Insérer ; vous pouvez les ouvrir pour visualiser la construction des objets
actuels. Par exemple, vous pouvez ouvrir le fichier Configuration/Objects/Common/
Hyperlink.htm pour afficher le code correspondant au bouton permettant d’insérer l’objet
Hyperlien de la barre Insérer.
Fonctionnement des fichiers d’objet
Les objets se composent des trois éléments suivants :
• Le fichier HTML définissant l’élément inséré dans le document.
La section HEAD d’un fichier d’objet contient des fonctions JavaScript (ou référence des fichiers
JavaScript externes) traitant les entrées de formulaire de la section BODY et contrôlant le
contenu ajouté dans le document de l’utilisateur. La section BODY d’un fichier d’objet peut
contenir un formulaire HTML acceptant les paramètres de l’objet (le nombre de lignes et de
colonnes à insérer dans un tableau, par exemple) et activant une boîte de dialogue permettant
aux utilisateurs de saisir différents attributs.
Remarque : Les objets les plus simples contiennent uniquement le code HTML à insérer, sans les
balises BODY et HEAD. Pour plus d’informations, voir la section Customizing Dreamweaver
(Personnalisation de Dreamweaver) du centre de support Macromedia.
• L’image figurant dans la barre Insérer (18 x 18 pixels).
• Additions au fichier insertbar.xml. Le fichier insertbar.xml définit l’endroit où apparaît l’objet
dans la barre Insérer.
117
Lorsqu’un utilisateur sélectionne un objet en cliquant sur une icône de la barre Insérer ou en
choisissant un élément du menu Insertion, les événements suivants se produisent :
1 Dreamweaver appelle la fonction canInsertObject() pour déterminer s’il doit afficher une
boîte de dialogue.
2 La balise FORM est recherchée dans le fichier d’objet. Si un formulaire a été défini et que l’option
Afficher la boîte de dialogue lors de l’insertion d’objets est activée dans la catégorie Général de
la boîte de dialogue Préférences, Dreamweaver appelle la fonction windowDimensions(), si elle
est définie, pour déterminer la taille de la boîte de dialogue dans laquelle doit s’afficher le
formulaire. Si le fichier d’objet ne contient aucun formulaire, Dreamweaver n’affiche pas de
boîte de dialogue et ignore l’étape 2.
3 Si Dreamweaver affiche une boîte de dialogue à l’étape 1, l’utilisateur saisit les paramètres de
l’objet (tels que le nombre de lignes et de colonnes d’un tableau) dans les champs de texte de la
boîte de dialogue, puis clique sur OK.
4 Dreamweaver appelle la fonction objectTag() et insère la valeur renvoyée dans le document à
la suite de la sélection en cours (la sélection en cours n’est pas remplacée).
5 Si Dreamweaver ne trouve pas la fonction objectTag(), il recherche une fonction
insertObject() et l’appelle.
Fichier de définition de la barre Insérer
Le fichier Configuration/Objects/insertbar.xml définit les propriétés de la barre Insérer. Ce
fichier XML contient la définition de chacun des objets, dans leur ordre d’apparition.
La première fois qu’un utilisateur démarre Dreamweaver, la barre Insérer s’affiche
horizontalement au-dessus du document. Sa visibilité et sa position sont ensuite enregistrées dans
la base de registres.
Hiérarchie des balises du fichier Insertbar.xml
L’exemple ci-dessous affiche le format et la hiérarchie des balises imbriquées du fichier
insertbar.xml :
<?xml version="1.0" ?>
<!DOCTYPE insertbarset SYSTEM "-//Macromedia//DWExtension insertbar 5.0">
<insertbar xmlns:MMString="http://www.macromedia.com/schemes/data/string/">
<category id="DW_Insertbar_Common" MMString:name="insertbar/categorycommon"
folder="Common">
<button id="DW_Hyperlink" image="Common\Hyperlink.png"
MMString:name="insertbar/hyperlink" file="Common\Hyperlink.htm" />
<button id="DW_Email" image="Common\E-Mail Link.png"
MMString:name="insertbar/email" file="Common\E-Mail Link.htm" />
<separator/>
<menubutton id="DW_Images" MMString:name="insertbar/images"
image="Common\Image.png">
<button id="DW_Image" image="Common\Image.png"
MMString:name="insertbar/image" file="Common\Image.htm" />
...
</menubutton>
<separator/>
<button id="DW_TagChooser" MMString:name="insertbar/tagChooser"
image="Common\Tag Chooser.gif" command="dw.showTagChooser()"
codeOnly="TRUE"/>
</category>
...
</insertbar>
118
Chapitre 6 : Objets de la barre Insérer
Remarque : La fin du contenu des balises insertbar et category est indiquée par les balises de
fermeture </insertbar> et </category> ; en revanche, les balises button, checkbutton et
separator ne correspondent à aucune balise de fermeture. La fin des attributs et du contenu des
balises button, checkbutton et separator est indiquée par une barre oblique (/) insérée avant le
crochet de fermeture.
Balises de définition de la barre Insérer
Le fichier insertbar.xml contient les balises et les attributs suivants :
<insertbar>
Description
Cette balise signale le contenu du fichier de définition de la barre Insérer ; la fin de ce contenu est
indiquée par une balise de fermeture </insertbar>.
Attributs
Aucun.
Exemple
<insertbar>
<category id="DW_Insertbar_Common" folder="Common">
<button id="DW_Hyperlink" image="Common\Hyperlink.gif"
file="Common\Hyperlink.htm"/>
...
</insertbar>
<category>
Description
Cette balise définit une catégorie de la barre Insérer (par exemple, Commun, Formulaires
ou HTML). La fin du contenu de la balise category est signalée par une balise de
fermeture </category>.
Remarque : Par défaut, la barre Insérer regroupe différentes catégories (par exemple, Commun,
Formulaires ou HTML). Dans les versions précédentes de Dreamweaver, la barre Insérer se
composait de différents onglets. Les utilisateurs peuvent définir leurs préférences quant à
l’organisation des objets de la barre Insérer (par catégorie ou par onglet). Si l’utilisateur choisit
l’organisation par onglet, la balise category définit chacun d’entre eux.
Attributs
id, {folder}, {showIf}
Exemple
<category id="DW_Insertbar_Common" folder="Common">
<button id="DW_Hyperlink" image="Common\Hyperlink.gif"
file="Common\Hyperlink.htm"/>
</category>
Fichier de définition de la barre Insérer
119
<menubutton>
Description
Cette balise définit un menu déroulant dans la barre Insérer.
Attributs
id, image, {showIf}, {name}, {folder}
Exemple
<menubutton
id="DW_ImageMenu"
name="Images"
image="Common\imagemenu.gif"
folder="Images">
<button id="DW_Image"
image="Common\Image.gif"
enabled=""
showIf=""
file="Common\Image.htm" />
</menubutton>
<button />
Description
Cette balise définit un bouton de la barre Insérer permettant à l’utilisateur d’exécuter le code
spécifié par les attributs command ou file.
Attributs
id, image, name, {canDrag}, {showIf}, {enabled}, {command}, {file}, {tag},
{codeOnly}
Exemple
<button id="DW_Object"
image="Common\Object.gif"
name=”Object”
enabled="true"
showIf=""
file="Common\Obect.htm"
/>
120
Chapitre 6 : Objets de la barre Insérer
<checkbutton />
Description
Ce type de bouton peut se voir attribuer l’état activé ou désactivé. Lorsque vous cliquez dessus, ce
bouton apparaît en surbrillance comme étant enfoncé. Lorsqu’il est désactivé, il s’affiche sous
forme plate. Dreamweaver inclut les états suivants : au passage de la souris ; enfoncé ; au passage
de la souris si enfoncé ; désactivé si enfoncé. La commande doit faire en sorte qu’un clic sur le
bouton d’activation provoque un changement de son état.
Attributs
id, image, checked, {showIf}, {enabled}, {command}, {file}, {tag}, {name},
{codeOnly}
Exemple
<checkbutton id="DW_StandardView"
name = "Standard View"
image="Tools\Standard View.gif"
checked="_View_Standard"
command="dw.getDocumentDOM().setShowLayoutView(false)"/>
<separator />
Description
Cette balise affiche une ligne verticale sur la barre Insérer.
Attributs
{showIf}
Exemple
<separator showIf="_VIEW_CODE"/>
Attributs des balises de définition de la barre Insérer
La signification des attributs correspondant aux balises de définition de la barre Insérer est la
suivante :
id="unique id"
Description
L’attribut id correspond à l’identificateur des boutons affichés dans la barre Insérer. Chaque
élément du fichier doit posséder un attribut id unique.
Exemple
id="DW_Anchor"
Fichier de définition de la barre Insérer
121
image="image_path"
Description
Cet attribut indique le chemin d’accès, par rapport au dossier Configuration de Dreamweaver, du
fichier de l’icône affichée dans la barre Insérer. Le format de cette icône doit figurer parmi les
formats pris en charge par Dreamweaver, mais il s’agit en principe d’un fichier au format GIF ou
JPEG (18 x 18 pixels).
Exemple
image="Common/table.gif"
canDrag="Boolean"
Description
Cet attribut spécifie si l’utilisateur a la possibilité de faire glisser l’icône dans le code ou dans
l’espace de travail pour insérer l’objet correspondant dans le document. Si vous ne spécifiez pas cet
attribut, la valeur par défaut est true.
Exemple
canDrag="false"
showIf="enabler"
Description
Cet attribut indique que ce bouton doit s’afficher dans la barre Insérer uniquement si la valeur de
l’activateur Dreamweaver désigné est true. Si vous ne spécifiez pas l’attribut showIf, le bouton
s’affiche systématiquement. Les activateurs possibles sont : _SERVERMODEL_ASP,
_SERVERMODEL_ASPNET, _SERVERMODEL_JSP, _SERVERMODEL_CFML (pour toutes les versions de
ColdFusion), _SERVERMODEL_CFML_UD4 (applicable uniquement à UltraDev version 4 de
ColdFusion), _SERVERMODEL_PHP, _FILE_TEMPLATE, _VIEW_CODE, _VIEW_DESIGN,
_VIEW_LAYOUT, _VIEW_EXPANDED_TABLES et _VIEW_STANDARD.
Vous pouvez spécifier plusieurs activateurs en les séparant par des virgules (chaque virgule signifie
ET). Vous pouvez utiliser des points d’exclamation (« ! ») pour indiquer NE PAS.
Exemple
Si vous souhaitez qu’un bouton apparaisse uniquement en mode Code dans une page ASP,
définissez les activateurs de la façon suivante :
showIf="_VIEW_CODE, _SERVERMODEL_ASP".
122
Chapitre 6 : Objets de la barre Insérer
enabled="enabler"
Description
Cet attribut indique que l’utilisateur peut accéder à l’élément si la valeur de activateur_DW est
définie sur true. Si vous ne spécifiez pas la fonction enabled, l’élément est systématiquement
activé par défaut. Les activateurs possibles sont : _SERVERMODEL_ASP, _SERVERMODEL_ASPNET,
_SERVERMODEL_JSP, _SERVERMODEL_CFML (pour toutes les versions de ColdFusion),
_SERVERMODEL_CFML_UD4 (applicable uniquement à UltraDev version 4 de ColdFusion),
_SERVERMODEL_PHP, _FILE_TEMPLATE, _VIEW_CODE, _VIEW_DESIGN, _VIEW_LAYOUT,
_VIEW_EXPANDED_TABLES et _VIEW_STANDARD.
Vous pouvez spécifier plusieurs activateurs en les séparant par des virgules (chaque virgule signifie
ET). Vous pouvez également utiliser des points d’exclamation (« ! ») pour indiquer NE PAS.
Exemple
Si vous souhaitez qu’un bouton apparaisse uniquement en mode Code, spécifiez
enabled="_VIEW_CODE" ; le bouton est grisé dans les autres modes.
checked="enabler"
Description
L’attribut checked est obligatoire si vous insérez la balise checkbutton.
L’élément est activé si la valeur de DW_activateur est définie sur true. Les activateurs possibles
sont : _SERVERMODEL_ASP, _SERVERMODEL_ASPNET, _SERVERMODEL_JSP,
_SERVERMODEL_CFML (pour toutes les versions de ColdFusion), _SERVERMODEL_CFML_UD4
(applicable uniquement à UltraDev version 4 de ColdFusion), _SERVERMODEL_PHP,
_FILE_TEMPLATE, _VIEW_CODE, _VIEW_DESIGN, _VIEW_LAYOUT, _VIEW_EXPANDED_TABLES
et _VIEW_STANDARD.
Vous pouvez spécifier plusieurs activateurs en les séparant par des virgules (chaque virgule signifie
ET). Vous pouvez également utiliser des points d’exclamation (« ! ») pour indiquer NE PAS.
Exemple
checked="_View_Layout"
command="API_function"
Description
Au lieu d’indiquer à Dreamweaver de se référer à un fichier HTML comportant le code à insérer,
vous pouvez associer une commande à cette balise : lorsque l’utilisateur clique sur le bouton
auquel se rapporte cette balise, Dreamweaver effectue la commande spécifiée.
Exemple
command="dw.showTagChooser()"
Fichier de définition de la barre Insérer
123
file="file_path"
Description
L’attribut file indique le chemin d’accès au fichier d’un objet par rapport au dossier
Configuration de Dreamweaver. Le fichier de l’objet donne son nom à l’info-bulle correspondant
à l’icône de l’objet, à moins que l’attribut name ne soit spécifié dans Dreamweaver.
Exemple
file="Templates/Editable.htm"
tag="editor"
Description
Cet attribut ordonne à Dreamweaver d’appeler un éditeur de balises. En mode Code, si l’attribut
tag est défini et que l’utilisateur clique sur l’objet, Dreamweaver appelle la boîte de dialogue
Balise. En mode Code, si vous spécifiez les attributs tag et command, Dreamweaver appelle
l’éditeur de balises. En mode Création, si codeOnly="TRUE" et que l’attribut file n’est pas
spécifié, Dreamweaver MX appelle l’affichage à deux volets, place le focus dans le code et appelle
l’éditeur de balises.
Exemple
tag = "form"
name="tooltip_text"
Description
L’attribut name définit l’info-bulle qui s’affiche lorsque le curseur de la souris pointe sur l’objet
concerné. Si vous spécifiez un fichier d’objet sans spécifier l’attribut name, Dreamweaver utilise le
nom du fichier comme info-bulle.
Remarque : Si vous ne spécifiez pas l’attribut name, l’objet ne pourra pas être regroupé dans la
catégorie Favoris de l’interface de la barre Insérer.
Certains objets de la barre Insérer utilisent une variante de l’attribut name comportant le préfixe
MMString. Le préfixe MMString indique une chaîne localisée ; ces valeurs sont décrites à la
section Chaînes localisées, page 51.
Exemple
name = "cfoutput"
Modification de la barre Insérer
Vous pouvez déplacer les objets d’une catégorie à une autre, renommer les différentes catégories et
supprimer de manière définitive certains objets du panneau. Pour que vos modifications soient
prises en compte et apparaissent dans la barre Insérer, vous devez redémarrer Dreamweaver ou
recharger les extensions.
124
Chapitre 6 : Objets de la barre Insérer
Pour recharger les extensions :
1 Appuyez sur la touche Contrôle (Windows) ou Option (Macintosh) tout en cliquant avec la
souris sur le menu affichant les catégories dans la barre de titre de la barre Insérer.
2 Sélectionnez Recharger extensions.
Remarque : Notez que sur un système d’exploitation multiutilisateur, vous devez modifier les copies
des fichiers de configuration stockées dans votre dossier Configuration et non les fichiers de
configuration principaux. Pour plus d’informations, voir Extensions et dossiers de configuration,
page 23.
Pour déplacer ou copier un objet répertorié dans une catégorie de la barre Insérer vers une
autre catégorie ou vers un emplacement différent de la même catégorie :
1 Enregistrez une copie de sauvegarde du fichier insertbar.xml (nommez-la par exemple
insertbar.sauvegarde.xml).
2 Ouvrez le fichier insertbar.xml d’origine.
3 Recherchez la balise button représentant l’objet à déplacer ou à copier. Par exemple, pour
4
5
6
7
8
9
déplacer l’objet Image de son emplacement au sein de la catégorie Commun, recherchez la balise
button dont l’attribut id est "DW_Image".
Coupez ou copiez l’ensemble de la balise button.
Recherchez la balise category représentant la catégorie dans laquelle vous souhaitez déplacer
ou copier l’objet.
Recherchez l’emplacement de la catégorie dans lequel vous souhaitez faire apparaître l’objet.
Collez la balise button.
Enregistrez le fichier insertbar.xml.
Rechargez les extensions.
Pour supprimer un objet de la barre Insérer :
1 Enregistrez une copie de sauvegarde du fichier insertbar.xml (nommez-la par exemple
insertbar.sauvegarde.xml).
2 Ouvrez le fichier insertbar.xml d’origine.
3 Recherchez la balise button représentant l’objet à supprimer.
4 Supprimez l’intégralité de la balise button.
5 Enregistrez le fichier insertbar.xml.
Fichier de définition de la barre Insérer
125
6 Sur votre disque, retirez les fichiers HTML, GIF et JavaScript du dossier dans lequel ils se trouvent
pour les placer dans un dossier non répertorié dans le fichier insertbar.xml. Par exemple, vous
pouvez créer un nouveau dossier nommé « Inutilisé » dans le dossier Configuration/Objects et y
placer les fichiers de l’objet (si vous êtes certain de vouloir supprimer cet objet, vous pouvez
supprimer les fichiers de manière définitive. Il peut néanmoins s’avérer utile de conserver une copie
de sauvegarde de ces fichiers en vue de pouvoir les restaurer le cas échéant).
7 Rechargez les extensions.
Pour modifier l’ordre des catégories de la barre Insérer :
1 Enregistrez une copie de sauvegarde du fichier insertbar.xml (nommez-la par exemple
insertbar.sauvegarde.xml).
2 Ouvrez le fichier insertbar.xml d’origine.
3 Recherchez la balise category correspondant à la catégorie à déplacer, puis sélectionnez-la ainsi
4
5
6
7
que l’ensemble de son contenu.
Coupez cette balise.
Collez la balise dans son nouvel emplacement. Veillez à ne pas coller la balise au sein d’une autre
balise category.
Enregistrez le fichier insertbar.xml.
Rechargez les extensions.
Pour créer une catégorie :
1 Enregistrez une copie de sauvegarde du fichier insertbar.xml (nommez-la par exemple
2
3
4
5
6
« insertbar.sauvegarde.xml »).
Ouvrez le fichier insertbar.xml d’origine.
Créez une balise category et indiquez le dossier par défaut ainsi que l’ensemble des objets
contenus dans cette catégorie.
Pour plus d’informations sur la syntaxe des balises du fichier insertbar.xml, voir Balises de
définition de la barre Insérer, page 119.
Enregistrez le fichier insertbar.xml.
Rechargez les extensions.
Ajout d’objets à la barre Insérer
Pour ajouter un objet à la barre Insérer définissez la chaîne de code HTML (et, éventuellement,
JavaScript) spécifique au document de l’utilisateur. Ensuite, désignez ou créez le graphique
(18 x 18 pixels) correspondant au bouton apparaissant sur l’interface de Dreamweaver. Si vous
créez une image d’objet plus grande, Dreamweaver la redimensionne pour lui attribuer une taille
de 18 x 18 pixels. Si vous ne créez pas d’image pour un objet, une icône d’objet par défaut
représentée par un point d’interrogation (?) apparaît dans la barre Insérer. Ajoutez les nouveaux
fichiers au dossier Configuration/Objects. Enfin, modifiez le fichier insertbar.xml en indiquant
l’emplacement des nouveaux fichiers ainsi que les paramètres (voir Fichier de définition de la barre
Insérer, page 118) définissant l’aspect du bouton. Une fois le fichier inserbar.xml modifié,
redémarrez Dreamweaver ; le nouvel objet s’affiche à l’endroit spécifié de la barre Insérer.
126
Chapitre 6 : Objets de la barre Insérer
Remarque : Même si les fichiers d’objet peuvent être stockés dans des dossiers séparés, il est
important que le nom de chaque fichier soit unique. La fonction dom.insertObject(), par exemple,
recherche les fichiers dans l’ensemble du dossier Objects sans tenir compte des sous-dossiers (pour
plus d’informations sur la fonction dom.insertObject(), voir le Guide des API de Dreamweaver). Si
le dossier Forms contient un fichier nommé Button.htm et qu’un autre fichier nommé Button.htm se
trouve également dans le dossier MyObjects, Dreamweaver ne parvient pas à les différencier. Ainsi,
s’il existe deux instances du fichier Button.htm, dom.insertObject() affiche deux objets nommés
Button ; il est dès lors difficile pour l’utilisateur de les différencier.
Ajout d’objets au menu Insertion
Pour ajouter ou contrôler la position d’un objet du menu Insérer (ou de tout autre menu),
modifiez le fichier menus.xml. Ce fichier contrôle l’intégralité de la structure de menus pour
Dreamweaver. Pour plus d’informations sur la modification du fichier menus.xml, voir Menus et
commandes de menu, page 151.
Si vous souhaitez distribuer l’extension à d’autres utilisateurs de Dreamweaver, voir Utilisation de
Extension Manager, page 28 pour en savoir plus sur le conditionnement des extensions.
API des objets
Cette section décrit les fonctions de l’API des objets. Vous devez définir soit la fonction
insertObject(), soit la fonction objectTag(). Pour plus d’informations sur ces fonctions, voir
insertObject(), page 129. Les autres fonctions sont facultatives.
canInsertObject()
Disponibilité
Dreamweaver MX.
Description
Cette fonction détermine si la boîte de dialogue de l’objet doit être affichée.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne.
Exemple
Le code ci-dessous indique à Dreamweaver de vérifier la présence d’une chaîne spécifique dans un
document avant de permettre à l’utilisateur d’insérer l’objet sélectionné :
function canInsertObject(){
var docStr = dw.getDocumentDOM().documentElement.outerHTML;
var patt = /hava/;
var found = ( docStr.search(patt) != -1 );
var insertionIsValid = true;
if (!found){
insertionIsValid = false;
alert("le document doit contenir la chaine ’hava’ afin de pouvoir utiliser
cet objet.");}
return insertionIsValid;}
API des objets
127
displayHelp()
Description
Si vous définissez cette fonction, un bouton Aide apparaît sous les boutons OK et Annuler dans la
boîte de dialogue Paramètres. Cette fonction est appelée lorsque l’utilisateur clique sur le bouton
Aide.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver n’attend rien.
Exemple
L’exemple suivant permet d’afficher le fichier myObjectHelp.htm dans un navigateur ; ce fichier
explique l’utilisation de l’extension :
function displayHelp(){
var myHelpFile = dw.getConfigurationPath() +
’/ExtensionsHelp/myObjectHelp.htm’;
dw.browseDocument(myHelpFile);
}
isDomRequired()
Description
Cette fonction détermine si l’objet requiert un DOM valide pour fonctionner. Si cette fonction
renvoie la valeur true ou si la fonction n’est pas définie, Dreamweaver suppose que la commande
nécessite un DOM valide et synchronise les modes Code et Création du document avant de
l’exécuter. La synchronisation met à jour toutes les modifications effectuées en mode Affichage de
code dans le mode Création.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend la valeur true si une commande nécessite un DOM valide pour fonctionner
et false dans le cas contraire.
128
Chapitre 6 : Objets de la barre Insérer
insertObject()
Disponibilité
Dreamweaver MX.
Description
Cette fonction est obligatoire si la fonction objectTag() n’est pas définie. Elle est appelée lorsque
l’utilisateur clique sur OK ; elle insère le code dans le document de l’utilisateur et ferme la boîte
de dialogue ou affiche un message d’erreur et laisse la boîte de dialogue ouverte. Il s’agit d’une
fonction de substitution à la fonction objectTag(). Elle ne suppose pas que l’utilisateur tape son
texte au niveau du point d’insertion actuel et permet la validation des données lorsque l’utilisateur
clique sur OK. Utilisez la fonction insertObject() dans l’une des conditions suivantes :
• Vous devez insérer un code à plusieurs endroits.
• Vous devez insérer un code à un endroit autre que le point d’insertion.
• Vous devez valider une entrée avant d’insérer le code.
Si aucune de ces conditions ne s’applique, utilisez la fonction objectTag().
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend soit une chaîne contenant un message d’erreur, soit une chaîne vide. Dans ce
dernier cas, la boîte de dialogue de l’objet se ferme lorsque l’utilisateur clique sur OK. Sinon,
Dreamweaver affiche le message d’erreur et la boîte de dialogue reste à l’écran.
Activateur
canInsertObject()
Exemple
Dans l’exemple ci-dessous, la fonction insertObject() est utilisée car une entrée doit être
validée avant d’insérer le code :
function insertObject() {
var theForm = document.forms[0];
var nameVal = theForm.firstField.value;
var passwordVal = theForm.secondField.value;
var errMsg = "",
var isValid = true;
// assurez-vous que les valeurs de champ sont correctes
if (nameVal == "" || passwordVal == "") {
errMsg = "Veuillez saisir toutes les valeurs ou cliquer sur Annuler."
} else if (nameVal.length < 4 || passwordVal.length < 6) {
errMsg = "Votre nom doit contenir au moins quatre caractères, et votre mot
de passe
six";
}
if (!errMsg) {
// vous pouvez maintenant modifier le document, si vous le souhaitez.
}
return errMsg;
}
API des objets
129
objectTag()
Description
Les fonctions objectTag() et insertObject() s’excluent mutuellement : si ces deux fonctions
sont définies dans un document, la fonction objectTag() a la priorité. Pour plus d’informations,
voir insertObject(), page 129.
Cette fonction insère une chaîne de code dans le document de l’utilisateur. Dans Dreamweaver
MX, le renvoi d’une chaîne vide ou d’une valeur null (aussi appelée « return; ») signale à
Dreamweaver qu’aucune action ne doit être effectuée.
Remarque : Dans ce cas, les modifications sont censées avoir été effectuées manuellement avant
l’instruction return ; aussi, ne rien faire dans ce cas n’équivaut pas à cliquer sur Annuler.
Dans Dreamweaver 4, si le mode Code est actif et que la sélection porte sur une plage (par
opposition au point d’insertion), cette dernière est remplacée par la chaîne renvoyée par la
fonction objectTag(). La valeur est true, même si la fonction objectTag() renvoie une chaîne
vide ou ne renvoie rien. La fonction objectTag() renvoie une chaîne vide ou une valeur null si
les modifications ont déjà été effectuées manuellement dans le document. Dans le cas contraire,
des guillemets doubles ("") suppriment les modifications en remplaçant la sélection.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend la chaîne à insérer dans le document de l’utilisateur.
Exemple
L’exemple suivant de la fonction objectTag() insère une combinaison OBJECT/EMBED pour un
contrôle ActiveX et un plug-in spécifiques :
function objectTag() {
return ’\n’ +
’<OBJECT CLASSID="clsid:166F1OOB-3A9R-11FB-8075444553540000" \n’¬
+ ’CODEBASE="http://www.mysite.com/product/cabs/¬
myproduct.cab#version=1,0,0,0" \n’ + ’NAME="MyProductName"> \n’ ¬
+ ’<PARAM NAME="SRC" VALUE=""> \n’ + ’<EMBED SRC="" HEIGHT="" ¬
WIDTH="" NAME="MyProductName"> \n’ + ’</OBJECT>’
}
windowDimensions()
Description
Cette fonction définit les dimensions précises de la boîte de dialogue Options. Si cette fonction
n’est pas définie, les dimensions de la fenêtre sont calculées automatiquement.
Remarque : Ne définissez cette fonction que si vous souhaitez utiliser une boîte de dialogue Options
ayant des dimensions supérieures à 640 x 480 pixels.
Arguments
platform
• La valeur de l’argument platform est soit "macintosh", soit "windows", selon la plate-forme
utilisée par l’utilisateur.
130
Chapitre 6 : Objets de la barre Insérer
Valeurs renvoyées
Dreamweaver attend une chaîne au format "LargeurEnPixels,HauteurEnPixels".
Les dimensions renvoyées sont inférieures à la taille totale de la boîte de dialogue parce qu’elles
n’incluent pas la zone des boutons OK et Annuler. Si les dimensions renvoyées ne permettent pas
de faire apparaître toutes les options, des barres de défilement s’affichent.
Exemple
L’exemple suivant de la fonction windowDimensions() définit les dimensions de la boîte de
dialogue Paramètres sur 648 x 520 sous Windows et sur 660 x 580 sur Macintosh :
function windowDimensions(platform){
var retval = ""
if (platform = = "windows"){
retval = "648, 520";
} else {
retval = "660, 580";
}
return retval;
}
API des objets
131
Exemple basique d’insertion d’un objet
Cet exemple ajoute à la barre Insérer un objet permettant aux utilisateurs d’insérer une sélection
de texte barrée (rayée d’une ligne) en cliquant sur un bouton. Cet objet s’utilise lors de l’insertion
de commentaires concernant l’édition d’un document.
Cet exemple implique des manipulations du texte ; vous pouvez par conséquent découvrir
certains des objets existants dans le menu déroulant Texte de la catégorie HTML de la barre
Insérer et vous en servir de modèle. Par exemple, vous pouvez regarder les fichiers d’objet Bold,
Emphasis et Heading pour observer des fonctionnalités similaires, dont le principe consiste à
insérer une balise de part et d’autre du texte sélectionné dans Dreamweaver.
D’abord, créez un fichier de définition d’objet HTML, et nommez-le TexteBarré. Spécifiez le
langage de script JavaScript.
<html>
<head>
<title>Barré</title>
<script language="javascript">
</script>
</head>
<body>
</body>
</html>
Ensuite, ajoutez les fonctions JavaScript définissant le comportement, puis insérez le code
correspondant à l’objet Barré. Toutes les fonctions API doivent être placées dans la section head
du document. Les fichiers d’objet déjà créés, par exemple, Configuration/Objects/Text/Em.htm,
sont basés sur le même modèle de fonctions et de commentaires. La première fonction utilisée par
le fichier de définition d’objet est la fonction isDOMRequired() ; cette fonction indique si le
mode Création doit être synchronisé avec le mode Code existant avant de poursuivre l’opération.
L’objet Superscript peut s’utiliser en association avec de nombreux autres objets en mode Code ; il
ne requiert donc pas la synchronisation du mode Création.
function isDOMRequired() {
// Return false, pour indiquer que cet objet est disponible en mode Code.
return false;
}
Ensuite, indiquez si vous souhaitez utiliser la fonction objectTag() ou insertObject().
L’opération effectuée par l’objet Barré consiste simplement à insérer la balise s de part et d’autre
du texte sélectionné. Il ne remplit donc pas les conditions nécessaires à l’utilisation de la fonction
insertObject() (voir insertObject(), page 129).
Dans la fonction objectTag(), indiquez dw.getFocus() pour déterminer si le mode actuel
correspond au mode Code. Si le mode Code est actif, la fonction insère la balise appropriée
(majuscule ou minuscule) de part et d’autre du texte sélectionné. Si le mode Création est actif, la
fonction utilise dom.applyCharacterMarkup() pour assigner le format du texte sélectionné.
Notez que cette fonction s’utilise uniquement avec les balises prises en charge (pour plus
d’informations, voir dom.applyCharacterMarkup() dans le Guide des API de Dreamweaver).
Pour les autres balises ou les autres opérations, il peut s’avérer nécessaire d’indiquer d’autres
fonctions API.
132
Chapitre 6 : Objets de la barre Insérer
Une fois le format appliqué par Dreamweaver, le curseur réapparaît dans le document, sans
message ni invite préalable. L’exemple ci-dessous illustre la forme de la fonction objectTag() une
fois ces informations indiquées :
function objectTag() {
// Vérifiez si l’utilisateur est en mode Code.
var dom = dw.getDocumentDOM();
if (dw.getFocus() == ’textView’ || dw.getFocus(true) == ’html’){
var upCaseTag = (dw.getPreferenceString("Source Format", "Tags Upper Case",
"") == ’TRUE’);
// Entourez manuellement la sélection de balises.
if (upCaseTag){
dom.source.wrapSelection(’<S>’,’</S>’);
}else{
dom.source.wrapSelection(’<s>’,’</s>’);
}
// Si l’utilisateur n’est pas en mode Code, appliquez la mise en forme en
mode Création
}else if (dw.getFocus() == ’document’){
dom.applyCharacterMarkup("s");
}
// Return uniquement -- n’ajoutez rien d’autre.
return;
}
L’exemple ci-dessous illustre la manière dont le fichier TexteBarré.htm interprète les balises
HTML de fermeture appropriées :
<html>
<head>
<title>Barré</title>
<script language="javascript">
//---------------
FONCTIONS API
---------------
function isDOMRequired() {
// Return false, pour indiquer que cet objet est disponible en mode Code.
return false;
}
function objectTag() {
// Vérifiez si l’utilisateur est en mode Code.
var dom = dw.getDocumentDOM();
if (dw.getFocus() == ’textView’ || dw.getFocus(true) == ’html’){
var upCaseTag = (dw.getPreferenceString("Source Format", "Tags Upper Case",
"") == ’TRUE’);
// Entourez manuellement la sélection de balises.
if (upCaseTag){
dom.source.wrapSelection(’<S>’,’</S>’);
}else{
dom.source.wrapSelection(’<s>’,’</s>’);
}
// Si l’utilisateur n’est pas en mode Code, appliquez la mise en forme en
mode Création
}else if (dw.getFocus() == ’document’){
dom.applyCharacterMarkup("s");
}
// Return uniquement -- n’ajoutez rien d’autre.
Exemple basique d’insertion d’un objet
133
return;
}
</script>
</head>
<body>
</body>
</html>
Enregistrez ce fichier TexteBarré.htm dans le dossier Configuration/Objects/Text, puis créez le
graphique (au format GIF, 18 x 18 pixels) à ajouter dans la barre Insérer (voir figure ci-dessous) :
Nommez le fichier graphique TexteBarré.gif, puis enregistrez-le dans le dossier Configuration/
Objects/Text.
A ce stade, le fichier HTML indique le code à insérer dans le document et vous avez défini le
fichier graphique à afficher dans la barre Insérer. Vous devez à présent modifier le fichier
insertbar.xml file afin que Dreamweaver puisse associer ces deux éléments à l’interface de la barre
Insérer.
Remarque : Avant de modifier le fichier insertbar.xml file, vous pouvez l’enregistrer sous l’extension
insertbar.xml.bak de manière à conserver une copie de sauvegarde.
Le code contenu dans le fichier insertbar.xml désigne tous les objets figurant dans la barre Insérer.
Chaque balise category du fichier XML crée une catégorie dans l’interface. Chaque balise
menubutton crée un menu déroulant dans la barre Insérer. Enfin, chaque balise button du fichier
XML affiche une icône dans la barre Insérer et la relie au fichier HTML ou à la fonction
correspondants.
Pour ajouter de nouveaux objets à la barre Insérer, recherchez la ligne suivante située au début du
fichier :
<category id="DW_Insertbar_Common" MMString:name="insertbar/category/common"
folder="Common">
Cette ligne indique le début de la catégorie Commun de la barre Insérer. Rédigez une nouvelle
ligne à la suite de la balise category, puis insérez la balise button en lui assignant les attributs id,
image et file correspondant à l’objet Barré. L’id doit correspondre au nom unique du bouton
(indiqué suivant les conventions de nomenclature ; pour cet objet, indiquez
DW_Text_TexteBarré). Les attributs image et file indiquent simplement à Dreamweaver
l’emplacement des fichiers en rapport avec l’objet, comme l’illustre l’exemple suivant :
<button id="DW_Text_TexteBarré"
image="Text\TexteBarré.gif"
file="Text\TexteBarré.htm"/>
Enregistrez le fichier insertbar.xml, puis rechargez les extensions (voir Pour recharger les
extensions :, page 125). Le nouvel objet s’affiche au début de la catégorie Commun de la barre
Insérer, comme illustré dans la figure ci-dessous :
134
Chapitre 6 : Objets de la barre Insérer
Création d’un fichier JavaScript séparé
Dans Exemple basique d’insertion d’un objet, page 132, un seul fichier d’objet au format HTML
contient à la fois le code HTML de l’objet et le code JavaScript prenant en charge
l’implémentation de cet objet. En revanche, vous pouvez séparer les fonctions JavaScript du
fichier de définition de l’objet au format HTML. Cette organisation à part s’utilise notamment
pour les objets contenant plusieurs fonctions ou pour les fonctions susceptibles d’être partagées
par d’autres objets.
Pour séparer le fichier de définition de l’objet au format HTML des fonctions JavaScript, créez un
nouveau fichier JS dans le même dossier que le fichier HTML initial (par exemple, TexteBarré.js),
puis collez toutes les fonctions JavaScript dans ce fichier. Supprimez ces fonctions du fichier
TexteBarré.htm, puis ajoutez le nom du fichier JavaScript à l’attribut src de la balise script,
comme indiqué dans l’exemple suivant :
<html>
<head>
<title>Barré</title>
<script language="javascript" src=”TexteBarré.js”>
</script>
</head>
<body>
</body>
</html>
Dans Dreamweaver, sélectionnez Recharger extensions (voir Pour recharger les extensions :,
page 125), puis testez l’objet.
Ajout d’une boîte de dialogue
Vous pouvez ajouter un formulaire à votre objet de manière à ce que l’utilisateur puisse indiquer
des commentaires avant que Dreamweaver n’insère le code spécifié (par exemple, l’objet
Hyperlien nécessite la saisie des valeurs Texte, Lien, Cible, Index de catégorie, Titre et Clé
d’accès). Dans cet exemple, vous ajoutez un formulaire à l’objet Barré dont il est question dans
l’exemple précédent. Le formulaire entraîne l’ouverture d’une boîte de dialogue permettant à
l’utilisateur de colorer le texte en rouge et d’ajouter une balise TexteBarré.
Cet exemple suppose que vous avez déjà créé un fichier JavaScript séparé nommé TexteBarré.js,
comme indiqué à la section Création d’un fichier JavaScript séparé, page 135.
D’abord, dans le fichier TexteBarré.js, ajoutez la fonction appelée par le formulaire si l’utilisateur
choisit de modifier la couleur du texte. Cette fonction est similaire à la fonction objectTag() de
l’objet Barré, mais elle est facultative. Ainsi, après la fonction objectTag(), créez une fonction
intitulée fontColorRed(). Le fichier TexteBarré.js dans son intégralité contient le code suivant :
function isDOMRequired() {
// Return false, pour indiquer que cet objet est disponible en mode Code.
return false;
}
function objectTag() {
// Entourez manuellement la sélection de balises.
var dom = dw.getDocumentDOM();
if (dw.getFocus() == ’textView’ || dw.getFocus(true) == ’html’){
var upCaseTag = (dw.getPreferenceString("Source Format", "Tags Upper
Case", "") == ’TRUE’);
Exemple basique d’insertion d’un objet
135
// Entourez manuellement la sélection de balises.
if (upCaseTag){
dom.source.wrapSelection(’<S>’,’</S>’);
} else {
dom.source.wrapSelection(’<s>’,’</s>’);
}
}else if (dw.getFocus() == ’document’){
dom.applyCharacterMarkup("s");
}
// Return uniquement -- n’ajoutez rien d’autre.
return;
}
function fontColorRed(){
var dom = dw.getDocumentDOM();
if (dw.getFocus() == ’textView’ || dw.getFocus(true) == ’html’){
var upCaseTag = (dw.getPreferenceString("Source Format", "Tags Upper
Case", "") == ’TRUE’);
// Entourez manuellement la sélection de balises.
if (upCaseTag){
dom.source.wrapSelection(’<FONT COLOR="#FF0000">’,’</FONT>’);
}else{
dom.source.wrapSelection(’<font color="#FF0000">’,’</font>’);
}
}else if (dw.getFocus() == ’document’){
dom.applyFontMarkup("color", "#FF0000");
}
// Return uniquement -- n’ajoutez rien d’autre.
return;
}
Remarque : La fonction dom.applyCharacterMarkup() ne prend pas en charge la modification des
couleurs ; vous devez donc rechercher la fonction API correspondant à ce type d’opération (pour plus
d’informations, voir dom.applyFontMarkup() dans le Guide des API de Dreamweaver).
Ensuite, ajoutez le formulaire au fichier TexteBarré.htm. A la suite de la balise body, définissez
votre formulaire à l’aide de la balise form, puis définissez sa mise en forme à l’aide de la balise
table (si vous n’effectuez pas cette dernière étape, la taille de la boîte de dialogue ou la disposition
des champs risque d’être incorrecte). Le formulaire illustré dans l’exemple ci-dessous est une
simple case à cocher permettant d’appeler la fonction fontColorRed() lorsqu’elle est activée. Le
fichier TexteBarré.htm dans son intégralité contient le code suivant :
<html>
<head>
<title>Barré</title>
<script language="javascript" src=”TexteBarré.js”>
</script>
</head>
<body>
<form>
<table border="0" height="100" width="100">
136
Chapitre 6 : Objets de la barre Insérer
<tr valign="baseline">
<td align="left" nowrap>
<input type="checkbox" name="red" onClick=fontColorRed()>Red text</input>
</td>
</tr>
</table>
</form>
</body>
</html>
Vous pouvez à présent recharger les extensions, puis tester la boîte de dialogue. Lorsque vous
cliquez sur la case à cocher, la couleur de la police change :
Lorsque vous cliquez sur le bouton OK, la fonction objectTag() est appelée et ajoute la ligne sur
le texte :
Exemple basique d’insertion d’un objet
137
Création d’un menu déroulant dans la barre Insérer
L’organisation de la barre Insérer de Dreamweaver se présente sous une nouvelle forme et prend
désormais en charge les menus déroulants regroupant des sous-ensembles d’objets, comme
indiqué dans la figure suivante.
L’exemple ci-dessous crée une nouvelle catégorie, Editorial, dans la barre Insérer, puis ajoute un
menu déroulant à cette catégorie. Le menu déroulant regroupe l’objet Barré Exemple basique
d’insertion d’un objet, page 132 ainsi que l’objet Texte bleu créé dans la procédure ci-dessous. Les
objets de la catégorie Editorial de la barre Insérer permettent aux utilisateurs d’insérer des
commentaires d’ordre éditorial dans un fichier : ils peuvent rayer le contenu à supprimer ou
insérer du contenu en bleu de manière à le différencier du reste du texte.
Pour conserver l’organisation des fichiers, créez un nouveau dossier Configuration/Objects/
Editorial dans le dossier d’installation de Dreamweaver. Copiez les fichiers correspondant à
l’exemple d’objet Barré créé plus haut dans le dossier Editorial (TexteBarré.htm, TexteBarré.js et
TexteBarré.gif ).
Ensuite, créez l’objet Texte bleu. Créez un fichier HTML intitulé AjoutBleu.htm et contenant le
code suivant :
<html>
<head>
<title>Texte bleu</title>
<script language="javascript">
//---------------
FONCTIONS API
---------------
function isDOMRequired() {
// Return false, pour indiquer que cet objet est disponible en mode Code.
return false;
}
function objectTag() {
// Entourez manuellement la sélection de balises.
var dom = dw.getDocumentDOM();
if (dw.getFocus() == ’textView’ || dw.getFocus(true) == ’html’){
var upCaseTag = (dw.getPreferenceString("Source Format", "Tags Upper
Case", "") == ’TRUE’);
// Entourez manuellement la sélection de balises.
if (upCaseTag){
dom.source.wrapSelection(’<FONT COLOR="#0000FF">’,’</FONT>’);
} else {
dom.source.wrapSelection(’<font color="#0000FF">’,’</font>’);
138
Chapitre 6 : Objets de la barre Insérer
}
}else if (dw.getFocus() == ’document’){
dom.applyFontMarkup("color", "#0000FF");
}
// Return uniquement -- n’ajoutez rien d’autre.
return;
}
</script>
</head>
<body>
</body>
</html>
Enregistrez le fichier AjoutBleu.htm dans le dossier Editorial.
Créez maintenant l’image correspondant à l’objet Texte bleu, un fichier GIF de 18 x 18 pixels, en
vous basant sur la figure ci-dessous :
Enregistrez l’image sous le nom AjoutBleu.gif dans le dossier Editorial.
Ouvrez le fichier insertbar.xml. Ce fichier définit les objets de la barre Insérer ainsi que leur
emplacement. Notez les nombreuses balises menubutton et leurs attributs dans les balises
category ; ces balises menubutton définissent chacune des menus déroulants de la catégorie
HTML. Dans les balises menubutton, chaque balise button définit l’un des éléments du menu
déroulant.
Recherchez la ligne de code suivante située au début du fichier :
<insertbar xmlns:MMString="http://www.macromedia.com/schemes/data/string/">
La balise insertbar définit le début de chacun des éléments de la barre Insérer. A la suite de cette
ligne, insérez une balise category pour la catégorie Editorial, en lui assignant les attributs ID
(unique), name et folder, puis insérez une balise de fermeture category comme indiqué dans
l’exemple suivant :
<category id="DW_Insertbar_Editorial" name="Editorial" folder="Editorial">
</category>
Exemple basique d’insertion d’un objet
139
Cliquez sur Recharger extensions : la catégorie Editorial s’affiche dans la barre Insérer.
Ensuite, à l’intérieur des balises d’ouverture et de fermeture category, ajoutez le menu déroulant
en insérant la balise menubutton ainsi que les attributs suivants, parmi lesquels un ID unique
(pour plus d’informations sur les attributs, voir Attributs des balises de définition de la barre Insérer,
page 121) :
<menubutton id="DW_Insertbar_Markup" name="markup"
image="Editorial\TexteBarré.gif" folder="Editorial">
Enfin, ajoutez les objets du nouveau menu déroulant à l’aide de la balise button. Pour ajouter
l’objet Barré, saisissez le code suivant :
<button id="DW_Editorial_TexteBarré" image="Editorial\TexteBarré.gif"
file="Editorial\TexteBarré.htm"/>
A la suite de l’objet Barré, insérez l’objet Texte bleu :
<button id="DW_Blue_Text" image="Editorial\AjoutBleu.gif name="Texte bleu"
file="Editorial\AjoutBleu.htm"/>
Remarque : La balise button ne possède pas de balise de fermeture séparée, elle se termine
simplement par "/>".
Vous pouvez alors terminer l’insertion du menu déroulant en indiquant une balise de fermeture
</menubutton>. Le code ci-dessous représente l’ensemble de la catégorie regroupant le menu
déroulant et les deux objets :
<category id="DW_Insertbar_Editorial" name="Editorial" folder="Editorial">
<menubutton id="DW_Insertbar_Markup" name="markup"
image="Editorial\TexteBarré.gif" folder="Editorial">
<button id="DW_Editorial_TexteBarré"
image="Editorial\TexteBarré.gif" file="Editorial\TexteBarré.htm"/>
<button id="DW_Blue_Text" image="Editorial\AjoutBleu.gif" name="Texte
bleu"
file="Editorial\AjoutBleu.htm"/>
</menubutton>
</category>
Pour tester le nouveau menu déroulant, cliquez sur Recharger Extensions. Le menu déroulant cidessous s’affiche :
140
Chapitre 6 : Objets de la barre Insérer
CHAPITRE 7
Commandes
Les commandes de Macromedia Dreamweaver MX 2004 permettent d’exécuter presque
n’importe quel type de modification dans le document actif de l’utilisateur, dans d’autres
documents ouverts ou dans tout document HTML situé sur un disque local. Les commandes
peuvent insérer, supprimer ou réorganiser les balises et les attributs HTML, les commentaires et le
texte.
Les commandes sont des fichiers HTML. La section BODY d’un fichier de commandes peut
contenir un formulaire HTML acceptant des options pour la commande (par exemple, le tri des
éléments d’un tableau et la colonne de référence du tri). La balise HEAD d’un fichier de
commandes contient des fonctions JavaScript qui traitent les entrées de formulaire de la section
BODY et contrôlent les modifications apportées au document de l’utilisateur.
Fonctionnement des commandes
Lorsque l’utilisateur clique sur un menu contenant une commande, les événements suivants se
produisent :
1 Dreamweaver appelle la fonction canAcceptCommand() pour déterminer si l’option de menu
2
3
4
5
6
doit être désactivée. Si la fonction canAcceptCommand() renvoie une valeur false, la
commande est estompée dans le menu et la procédure s’arrête. Si la fonction
canAcceptCommand() renvoie une valeur true, la procédure peut se poursuivre.
L’utilisateur sélectionne une commande dans le menu.
Dreamweaver appelle la fonction receiveArguments(), si elle est définie, dans le fichier de
commandes de menu sélectionné afin de permettre à la commande de traiter tous les arguments
transmis depuis l’option de menu ou la fonction dreamweaver.runCommand(). Pour plus
d’informations sur la fonction dreamweaver.runCommand(), voir le Guide des API de
Dreamweaver.
Dreamweaver appelle la fonction commandButtons(), si elle est définie, pour identifier les
boutons qui figurent dans la partie droite de la boîte de dialogue Options et le code qui doit être
exécuté lorsque l’utilisateur clique sur ces boutons.
Dreamweaver recherche la balise FORM dans le fichier de commandes. S’il existe un formulaire,
Dreamweaver appelle la fonction windowDimensions(), qui redimensionne la boîte de
dialogue Options contenant les éléments BODY du fichier. Si la fonction windowDimensions()
n’est pas définie, Dreamweaver redimensionne automatiquement la boîte de dialogue.
Si la balise BODY du fichier de commandes contient le gestionnaire onLoad, Dreamweaver
l’exécute (que la boîte de dialogue soit affichée ou non). Si aucune boîte de dialogue ne s’affiche,
les étapes restantes ne sont pas exécutées.
141
7 L’utilisateur sélectionne les options de la commande. Dreamweaver exécute les gestionnaires
d’événements associés aux champs du formulaire au fur et à mesure que l’utilisateur les
rencontre.
8 L’utilisateur clique sur l’un des boutons définis par la fonction commandButtons().
9 Dreamweaver exécute le code associé. La boîte de dialogue reste affichée jusqu’à ce que l’un des
scripts de la commande appelle la fonction window.close().
Ajout de commandes au menu Commandes
Dreamweaver ajoute automatiquement tous les fichiers se trouvant dans le dossier Configuration/
Commandes au bas du menu Commandes. Pour empêcher qu’une commande ne s’affiche dans le
menu Commandes, insérez le commentaire suivant sur la première ligne du fichier :
<!-- MENU-LOCATION=NONE -->
Lorsque cette ligne est présente, Dreamweaver ne crée pas d’élément de menu pour le fichier et
vous devez appeler dw.runCommand() pour exécuter la commande.
API des commandes
Les fonctions personnalisées de l’API des commandes de menu ne sont pas obligatoires.
canAcceptCommand()
Description
Indique si la commande est appropriée pour la sélection en cours.
Remarque : Ne définissez la fonction canAcceptCommand() que s’il existe au moins un cas où elle
renvoie la valeur false. Si la fonction n’est pas définie, la commande est considérée comme
appropriée. Ce processus entraîne des gains de temps et de performances.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver renvoie la valeur true si la commande est appropriée, sinon false, auquel cas la
commande apparaît estompée dans le menu.
Exemple
Dans l’exemple suivant, la fonction canAcceptCommand() rend la commande disponible
uniquement lorsque la sélection correspond à un tableau :
function canAcceptCommand(){
var retval=false;
var selObj=dw.getDocumentDOM.getSelectedNode();
return (selObj.nodeType == Node.ELEMENT_NODE && ¬
selObj.tagName=="TABLE");{
retval=true;
}
return retval;
}
142
Chapitre 7 : Commandes
commandButtons()
Description
Définit les boutons devant figurer dans la partie droite de la boîte de dialogue Options et leurs
comportements lorsque l’utilisateur clique dessus. Si cette fonction n’est pas définie, aucun
bouton n’apparaît et la section BODY du fichier de commandes s’étend de façon à remplir la
totalité de la boîte de dialogue.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver renvoie un tableau contenant un nombre pair d’éléments. Le premier élément est
une chaîne contenant le libellé du premier bouton. Le deuxième élément est une chaîne de code
JavaScript définissant le comportement du premier bouton lorsque l’utilisateur clique dessus. Les
autres éléments définissent les boutons supplémentaires de la même manière.
Exemple
L’instance suivante de commandButtons() définit trois boutons : OK, Annuler et Aide :
function commandButtons(){
return new Array("OK" , "doCommand()" , "Cancel" , ¬
"window.close()" , "Help" , "showHelp()");
}
isDomRequired()
Description
Détermine si la commande nécessite un DOM valide pour fonctionner. Si cette fonction renvoie
une valeur true ou si la fonction n’est pas définie, Dreamweaver suppose que la commande
nécessite un DOM valide et synchronise les modes Affichage de code et Création du document
avant de l’exécuter. La synchronisation entraîne la mise à jour de toutes les modifications
effectuées en mode Affichage de code dans le mode Création.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver renvoie la valeur true si une commande nécessite un DOM valide pour
fonctionner, sinon false.
API des commandes
143
receiveArguments()
Description
Traite tous les arguments provenant d’un élément de menu ou de la fonction dw.runCommand().
Arguments
{arg1}, {arg2},...{argN}
• Si l’attribut arguments est défini pour une balise menuitem, la valeur de l’attribut est transmise
à la fonction receiveArguments() sous forme d’un ou plusieurs arguments. Les arguments
peuvent également être transmis à une commande par la fonction dw.runCommand().
Valeurs renvoyées
Dreamweaver ne renvoie rien.
windowDimensions()
Description
Définit les dimensions de la boîte de dialogue des paramètres. Si cette fonction n’est pas définie,
les dimensions de la fenêtre sont calculées automatiquement.
Remarque : Ne définissez cette fonction que si vous souhaitez utiliser une boîte de dialogue Options
ayant des dimensions supérieures à 640 x 480 pixels.
Arguments
platform
• La valeur de l’argument de plate-forme est soit "macintosh", soit "windows", selon la plateforme utilisée par l’utilisateur.
Valeurs renvoyées
Dreamweaver renvoie une chaîne au format "widthInPixels,heightInPixels".
Les dimensions renvoyées sont inférieures à la taille totale de la boîte de dialogue parce qu’elles
n’incluent pas la zone des boutons OK et Annuler. Si les dimensions renvoyées ne permettent pas
de faire apparaître toutes les options, des barres de défilement s’affichent.
Exemple
Dans l’exemple suivant, la fonction windowDimensions() définit les dimensions de la boîte de
dialogue des paramètres à 648 x 520 pixels :
function windowDimensions(){
return "648,520";
}
144
Chapitre 7 : Commandes
Exemple de commande simple
Cette extension simple ajoute un élément dans le menu Commandes et vous permet de convertir
le texte sélectionné dans votre document en majuscules ou en minuscules. Lorsque vous cliquez
sur l’élément de menu, une interface à trois boutons est activée et vous permet de soumettre votre
choix.
Vous créez cette extension en exécutant les étapes suivantes :
1 Création de l’interface utilisateur (IU)
2 Ecriture du code JavaScript
3 Ajout des fichiers dans le dossier Commands
Dans cet exemple, deux fichiers sont créés dans le dossier Commands : Change Case.html, qui
renferme l’interface utilisateur, et Change Case.js, qui renferme le code JavaScript. Si vous
préférez, vous pouvez créer uniquement le fichier Change Case.html et y insérer le code JavaScript
ainsi que l’interface utilisateur.
Création de l’interface utilisateur
L’interface utilisateur est un formulaire qui contient deux boutons radio, permettant à l’utilisateur
de sélectionner majuscules ou minuscules. L’exemple suivant montre le code HTML destiné à
créer le formulaire :
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine 5.0//dialog">
<HTML>
<HEAD>
<!-- Copyright 2001-2002 Macromedia, Inc. Tous droits réservés. -->
<Title>Majuscules et minuscules</Title>
<SCRIPT SRC="Change Selection Case.js"></SCRIPT>
</HEAD>
<BODY>
<form name="uorl">
<table border="0">
<!--DWLayoutTable-->
<tr>
<td valign="top" nowrap> <p>
<label>
<input type="radio" name="RadioGroup1" value="majuscules" checked>
Majuscules</label>
<br>
<label>
<input type="radio" name="RadioGroup1" value="minuscules">
Minuscules</label>
</p></td>
</tr>
</table>
</div>
</form>
</BODY>
</HTML>
Exemple de commande simple
145
Le contenu de la balise Title, Majuscules et minuscules, s’affiche dans la barre en haut de la
boîte de dialogue. Dans le formulaire, un tableau composé de deux cellules contrôle la mise en
forme des éléments. Les cellules contiennent deux boutons radio : Majuscules et Minuscules. Le
bouton Majuscules comporte l’attribut checked, ce qui en fait la sélection par défaut et confirme
que l’utilisateur doit sélectionner un des deux boutons ou annuler la commande.
Le formulaire doit s’apparenter à l’image suivante.
La fonction commandButtons() insère les boutons OK et Annuler qui permettent à l’utilisateur de
valider le choix ou d’annuler l’opération.
Enregistrez le code HTML sous le nom ChangeCase.html dans le dossier Commands au sein du
dossier Configuration de Dreamweaver.
Ecriture du code JavaScript
L’exemple suivant est composé de deux fonctions API d’extension, canAcceptCommand() et
définie par l’utilisateur,
commandButtons(), appelées par Dreamweaver, et d’une fonction
changeCase(), appelée depuis la fonction commandButtons().
canAcceptCommand()
Lorsque l’utilisateur clique sur le menu Commands, Dreamweaver appelle la fonction
canAcceptCommand() pour chaque élément de menu afin de déterminer si celui-ci doit être
activé. Si canAcceptCommand() renvoie la valeur true, Dreamweaver affiche le texte d’élément
de menu comme actif ou activé. Si canAcceptCommand() renvoie la valeur false, Dreamweaver
estompe l’élément de menu.
La première tâche lors de la création d’une commande est de déterminer les cas où l’élément doit
être actif ou non. Dans l’exemple suivant, l’élément de menu est actif lorsque l’utilisateur a
sélectionné du texte dans le document.
Les premières lignes de canAcceptCommand() récupèrent le texte sélectionné en récupérant le
DOM du document de l’utilisateur. La fonction getSelection() est alors appelée sur l’objet de
document. Ensuite, la fonction récupère le nœud qui contient le texte sélectionné, suivi par ses
enfants, comme indiqué dans le code suivant :
function canAcceptCommand(){
var theDOM = dw.getDocumentDOM(); // obtenir le DOM du document en cours
var theSel = theDOM.getSelection(); // obtenir le début et la fin de la
sélection
var theSelNode = theDOM.getSelectedNode(); // obtenir le nœud sélectionné
var theChildren = theSelNode.childNodes; // obtenir les enfants du nœud
sélectionné
La dernière ligne vérifie si la sélection (ou son premier enfant) est constituée de texte et envoie en
retour la valeur true ou false :
return (theSel[0] != theSel[1] && (theSelNode.nodeType ==
Node.TEXT_NODE || theSelNode.hasChildNodes() && (theChildren[0].nodeType ==
Node.TEXT_NODE)));
146
Chapitre 7 : Commandes
La première partie de l’instruction return (theSel[0] != theSel[1]) vérifie si l’utilisateur a
effectué une sélection dans le document. La variable theSel est un tableau à deux entrées
maintenant les décalages de début et de fin de la sélection dans le document. Si les deux valeurs ne
sont pas égales, du contenu a été sélectionné. Si les valeurs des deux entrées sont égales, il y a juste
un point d’insertion. Rien n’a été sélectionné.
La partie suivante de l’instruction return (&& (theSelNode.nodeType == Node.TEXT_NODE)
vérifie que le nœud sélectionné est constitué de texte. Si la réponse est positive, la fonction
canAcceptCommand() renvoie la valeur true. Si le type de nœud n’est pas constitué de texte, le
test se poursuit afin de vérifier si le nœud a des enfants (|| theSelNode.hasChildNodes()) et si
le type du premier nœud enfant est constitué de texte (&& (theChildren[0].nodeType ==
Node.TEXT_NODE))). Si les deux conditions sont réunies (true), canAcceptCommand() renvoie la
valeur true et Dreamweaver active l’élément de menu en bas du menu Commandes, comme
indiqué ci-dessous :
Dans le cas contraire, canAcceptCommand() renvoie la valeur false et Dreamweaver estompe
l’élément, comme indiqué ci-dessous :
Exemple de commande simple
147
commandButtons()
Lorsque l’utilisateur clique sur un élément de menu, l’extension nécessite un mécanisme
permettant à l’utilisateur de choisir entre majuscules et minuscules. L’interface utilisateur fournit
ce mécanisme en définissant deux boutons radio permettant d’offrir ce choix à l’utilisateur.
La fonction commandButtons() entraîne l’affichage des boutons OK et Annuler par
Dreamweaver et indique la marche à suivre pour Dreamweaver lorsque l’utilisateur clique sur ces
boutons. Dans l’exemple suivant, commandButtons() indique à Dreamweaver qu’il faut appeler
la fonction changeCase() lorsque l’utilisateur clique sur OK et appeler la fonction
window.close() lorsque l’utilisateur clique sur Annuler :
function commandButtons() {
return new Array("OK", "getAlert", "Annuler", "window.close()");
}
Pour plus d’informations, voir Création de l’interface utilisateur, page 145.
changeCase()
La fonction changeCase() est une fonction définie par l’utilisateur qui est appelée par la fonction
commandButtons() lorsque l’utilisateur clique sur OK. Cette fonction modifie la casse du texte
sélectionné (passage en majuscules ou minuscules). L’interface utilisateur reposant sur des boutons
radio, une sélection sera obligatoirement effectuée ; il n’est pas nécessaire de tester le cas où aucun
choix n’est effectué par l’utilisateur.
La fonction changeCase() teste en premier lieu la propriété
document.forms[0].elements[0].checked. La propriété document.forms[0].elements[0]
se rapporte au premier élément du premier formulaire de l’objet de document actuel, à savoir
l’interface utilisateur de l’extension. La propriété checked prend la valeur true si l’élément est
activé. Dans le cas contraire, il prend la valeur false. Dans l’interface, elements[0] se rapporte
au premier bouton radio, à savoir le bouton Majuscules. Un des boutons radio étant forcément
sélectionné lorsque l’utilisateur clique sur OK, le code suppose que, si le choix n’est pas
"Majuscules", c’est "Minuscules" qui a été choisi. La fonction définit la variable uorl sur "u" ou
"l" pour stocker la réponse de l’utilisateur, comme indiqué dans le code suivant :
function changeCase() {
var uorl;
// vérifier si l’utilisateur souhaite utiliser des majuscules ou des
minuscules
if (document.forms[0].elements[0].checked){
uorl = ’u’;
else
uorl = ’l’;
Le code restant dans la fonction récupère le texte sélectionné, le convertit dans la casse
sélectionnée et le copie de nouveau à sa place dans le document.
Pour récupérer le texte sélectionné pour le document de l’utilisateur, la fonction récupère à
nouveau le DOM ainsi qu’un élément racine du document, à savoir la balise html. Le document
entier est ensuite extrait dans la variable theWholeDoc. Le code ressemble à celui indiqué cidessous :
// Obtenir de nouveau le DOM
var theDOM = dw.getDocumentDOM();
148
Chapitre 7 : Commandes
// Obtenir la propriété outerHTML de la balise HTML (le
// contenu intégral du document)
var theDocEl = theDOM.documentElement;
var theWholeDoc = theDocEl.outerHTML;
Ensuite, changeCase() appelle la fonction getSelectedNode() pour modifier le nœud
contenant le texte sélectionné. Il récupère également les nœuds enfants
(theSelNode.childNodes) au cas où la sélection serait une balise contenant du texte, comme
<b>text</b> :
// Obtenir le nœud contenant la sélection
var theSelNode = theDOM.getSelectedNode();
// Obtenir les enfants du nœud sélectionné
var theChildren = theSelNode.childNodes;
S’il y a des nœuds enfants, (hasChildNodes() renvoie la valeur true), la commande navigue de
nœud en nœud à la recherche d’un nœud constitué de texte. Si un tel nœud est trouvé, le texte
(theChildren[i].data) est stocké dans selText et les décalages du nœud textuel sont stockés
dans theSel. Le code ressemble à celui indiqué ci-dessous :
var i = 0;
if(theSelNode.hasChildNodes()){
while (i < theChildren.length){
if(theChildren[i].nodeType == Node.TEXT_NODE){
var selText = theChildren[i].data;
var theSel = theDOM.nodeToOffsets(theChildren[0]);
break;
}
++i;
}
}
S’il n’y a aucun nœud enfant, la commande appelle la fonction getSelection() et stocke les
décalages de début et de fin de sélection dans theSel. Il extrait ensuite la chaîne entre ces deux
décalages et la conserve dans selText. Le code ressemble à celui indiqué ci-dessous :
else {
// Obtenir les décalages de la sélection
var theSel = theDOM.getSelection();
// Extraire la sélection
var selText = theWholeDoc.substring(theSel[0],theSel[1]);
}
Le code suivant vérifie la variable uorl pour déterminer s’il faut utiliser les majuscules
sélectionnées :
if(uorl == ’u’){
Dans ce cas, le code suivant écrit à nouveau le code HTML dans le document en sections : dans
un premier temps, du début du document au début de la sélection ; ensuite, le texte sélectionné,
converti en majuscules (selText.toUppercase()) et finalement, de la fin du texte sélectionné à
la fin du document.
theDocEl.outerHTML = theWholeDoc.substring(0,theSel[0]) +
selText.toUpperCase() + theWholeDoc.substring(theSel[1]);
}
Exemple de commande simple
149
Si l’utilisateur sélectionne minuscules, la fonction effectue la même opération mais appelle
selText.toLowerCase() pour convertir le texte sélectionné en minuscules. Le code ressemble à
celui indiqué ci-dessous :
else {
theDocEl.outerHTML = theWholeDoc.substring(0,theSel[0]) +
selText.toLowerCase() + theWholeDoc.substring(theSel[1]);
}
Finalement, changeCase() réinitialise la sélection et appelle window.close() pour fermer
l’interface utilisateur. Le code ressemble à celui indiqué ci-dessous :
// Restaurer l’état initial de la
// sélection
theDOM.setSelection(theSel[0],theSel[1]);
window.close(); // fermer l’interface utilisateur d’extension
}
Exécution de la commande
Après avoir placé les fichiers dans le dossier Commands, vous devez redémarrer Dreamweaver ou
recharger les extensions afin que la nouvelle extension s’affiche dans le menu Commandes.
Pour que Dreamweaver recharge les extensions, maintenez la touche Ctrl (Windows) ou la touche
Options (Macintosh) enfoncée et cliquez sur le bouton de catégorie actuel dans la barre Insérer,
comme illustré ci-dessous :
Ensuite, cliquez sur l’élément Recharger extensions dans le menu Contexte, comme illustré cidessous :
L’entrée Modifier la casse doit maintenant être affichée dans le menu Commandes.
Au démarrage, Dreamweaver crée une entrée dans le menu Commandes pour chaque fichier
HTML du dossier Commands, sauf ceux contenant la ligne suivante :
<!-- MENU-LOCATION=NONE -->
Le fichier Change Case.html ne contenant pas cette ligne, Dreamweaver ajoute une entrée pour
Modifier la casse au menu Commandes. Cette entrée sera néanmoins estompée jusqu’à ce que
l’utilisateur sélectionne du texte dans le document.
Pour tester la commande, saisissez du texte dans un document, sélectionnez ce texte puis cliquez
sur Modifier la casse dans le menu Commandes.
150
Chapitre 7 : Commandes
CHAPITRE 8
Menus et commandes de menu
Macromedia Dreamweaver MX 2004 crée les menus à partir de la structure définie dans le fichier
menus.xml du dossier Configuration/Menus de Dreamweaver. Vous pouvez réorganiser,
renommer ou supprimer des éléments de menu en modifiant le fichier menus.xml. De la même
manière, vous pouvez également ajouter, modifier ou supprimer des raccourcis clavier.
Cependant, il est généralement plus simple de passer par l’Editeur de raccourcis clavier pour ce
faire (voir l’aide de Dreamweaver). Les modifications effectuées dans les menus Dreamweaver ne
sont prises en compte qu’après le redémarrage de Dreamweaver ou le rechargement des
extensions.
Sur un système d’exploitation multiutilisateur, lorsque vous effectuez des modifications dans
Dreamweaver qui affectent le fichier menus.xml (par exemple, si vous modifiez les raccourcis
clavier via l’Editeur de raccourcis clavier), Dreamweaver crée un nouveau fichier menus.xml dans
votre dossier de configuration utilisateur. Pour personnaliser le fichier menus.xml dans un système
d’exploitation multiutilisateur, modifiez la copie du fichier qui se trouve dans votre dossier de
configuration utilisateur ou copiez le fichier menus.xml principal dans ce dossier, si Dreamweaver
ne l’a pas déjà fait. Pour plus d’informations, voir A propos de la personnalisation de Dreamweaver
dans un environnement multiutilisateur, page 29.
Si vous ouvrez le fichier menus.xml dans un éditeur XML, il est possible que des messages d’erreur
concernant les esperluettes (&) du fichier menus.xml s’affichent. Nous vous recommandons de
modifier le fichier menus.xml dans un éditeur de texte ; évitez de le modifier dans Dreamweaver.
Pour toutes informations de base sur XML, voir l’aide de Dreamweaver.
Remarque : Avant de modifier le fichier menus.xml ou tout autre fichier de configuration
Dreamweaver, effectuez une copie de sauvegarde. En effet, en cas d’erreur, la seule manière de
restaurer un ensemble de menus consiste à remplacer le fichier menus.xml. Si vous avez oublié
d’effectuer une sauvegarde, vous pouvez utiliser celle du fichier menus.xml par défaut qui se trouve
dans le dossier Configuration. Cette copie se nomme menus.bak. Pour restaurer l’ensemble de
menus par défaut, remplacez le fichier menus.xml par une copie du fichier menus.bak.
A propos du fichier menus.xml
Le fichier menus.xml contient une liste structurée des barres de menus, menus, éléments de
menu, séparateurs, listes de raccourcis et raccourcis clavier. Ces éléments sont décrits par des
balises XML que vous pouvez modifier dans un éditeur de texte.
Remarque : Procédez avec prudence lorsque vous modifiez les menus. Dreamweaver ignore les
menus ou éléments de menu comportant des erreurs de syntaxe XML.
151
Une barre de menus (indiquée par des balises menubar d’ouverture et de fermeture) est un menu
ou un ensemble de menus distinct. Par exemple, il est possible que vous ayez une barre de menus
principale, une barre de menus fenêtre Site distincte (apparaissant sous Windows mais pas sur
Macintosh) et une barre de menus pour chaque menu contextuel. Chaque barre de menus
comporte un ou plusieurs menus indiqués par des balises menu. Chacun de ces menus comporte
un ou plusieurs éléments de menu indiqués par des balises menuitem et définis par divers
attributs. Un menu peut également comporter des séparateurs (indiqués par des balises separator)
ainsi que des sous-menus.
Outre les raccourcis clavier associés aux éléments de menus, Dreamweaver compte un grand
nombre d’autres raccourcis clavier, notamment des raccourcis secondaires et des raccourcis activés
dans des contextes particuliers. Par exemple, le raccourci Ctrl+Y (Windows) ou Commande+Y
(Macintosh) correspond à la commande Rétablir, mais il est également possible d’utiliser le
raccourci Ctrl+Maj+Z ou Commande+Maj+Z. Ces raccourcis secondaires (ainsi que d’autres
raccourcis ne pouvant pas être représentés dans les balises des éléments de menu) sont définis dans
les listes de raccourcis du fichier menus.xml. Ces listes de raccourcis (indiquées par des balises
shortcutlist) comportent un ou plusieurs raccourcis indiqués par des balises shortcut.
Les sections ci-dessous décrivent la syntaxe des balises menus.xml. Les attributs facultatifs sont
signalés dans la liste des attributs par des accolades ({}). Les attributs qui ne sont pas signalés ainsi
sont considérés comme obligatoires.
<menubar>
Description
Fournit des informations sur une barre de menus de la structure de menus de Dreamweaver.
Attributs
name, {app}, id, {platform}
•
•
•
•
name Nom de la barre de menus. Bien que l’attribut name soit obligatoire, vous pouvez lui
assigner la valeur "".
app Nom de l’application dans laquelle la barre de menus est disponible. Non utilisé
actuellement.
id ID de menu de la barre de menus. Les ID de menu du fichier menus.xml doivent tous être
uniques.
platform Indique que la barre de menus ne doit apparaître que sur la plate-forme spécifiée.
Les valeurs possibles sont : "win" et "mac".
Contenu
Cette balise doit comporter une ou plusieurs balises menu.
Contenant
Aucun.
152
Chapitre 8 : Menus et commandes de menu
Exemple
La barre de menus principale (fenêtre de document) est définie par la balise menubar
suivante :
<menubar name="Main Window" id="DWMainWindow">
<!-- balises menu ici -->
</menubar>
<menu>
Description
Fournit des informations sur un menu ou un sous-menu de la structure de menus de
Dreamweaver.
Attributs
name, {app}, id, {platform}, {showIf}
•
•
•
•
•
name Nom du menu tel qu’il apparaît dans la barre de menus. Pour définir la clé d’accès
(mnémonique) du menu sous Windows, insérez un trait de soulignement (_) avant la lettre
d’accès. Sur Macintosh, le trait de soulignement est supprimé automatiquement.
app Nom de l’application dans laquelle le menu est disponible. Non utilisé actuellement.
id ID du menu. Les ID de menu du fichier doivent tous être uniques.
platform Indique que le menu ne doit apparaître que sur la plate-forme spécifiée. Les
valeurs possibles sont : "win" et "mac".
showIf Indique que le menu ne doit apparaître que si l’activateur Dreamweaver spécifié a la
valeur true. Les activateurs possibles sont : _SERVERMODEL_ASP, _SERVERMODEL_ASPNET,
_SERVERMODEL_JSP, _SERVERMODEL_CFML (pour toutes les versions de ColdFusion),
_SERVERMODEL_CFML_UD4 (applicable uniquement à UltraDev version 4 de ColdFusion),
_SERVERMODEL_PHP, _FILE_TEMPLATE, _VIEW_CODE, _VIEW_DESIGN, _VIEW_LAYOUT,
_VIEW_EXPANDED_TABLES et _VIEW_STANDARD. Vous pouvez spécifier plusieurs activateurs en
les séparant par des virgules (chaque virgule signifie ET). Vous pouvez utiliser des points
d’exclamation ("!") pour indiquer NE PAS. Ainsi, si vous souhaitez que le menu n’apparaisse
qu’en mode Code dans une page ASP, définissez les attributs de la façon suivante :
showIf="_VIEW_CODE, _SERVERMODEL_ASP".
Contenu
Cette balise peut contenir une ou plusieurs balises menuitem et separator. Elle peut également
contenir d’autres balises menu (pour créer des sous-menus) ainsi que des balises HTML comment
standard.
Contenant
Cette balise doit être comprise dans une balise menubar.
Exemple
<menu name="_File" id="DWMenu_File">
<!-- balises menuitem, separator, menu et comment ici -->
</menu>
A propos du fichier menus.xml
153
<menuitem>
Description
Définit un élément de menu pour un menu Dreamweaver.
Attributs
name, id, {app}, {key}, {platform}, {enabled}, {arguments}, {command}, {file},
{checked}, {dynamic}, {isdomrequired}, {showIf}
•
•
•
•
•
•
•
154
name Nom
de l’élément de menu tel qu’il apparaît dans le menu. Un trait de soulignement
indique que la lettre suivante est définie comme clé d’accès (mnémonique) de la commande
(sous Windows uniquement).
id Permet à Dreamweaver d’identifier l’élément. Cet ID doit être unique dans l’ensemble de la
structure de menus. Si vous ajoutez de nouveaux éléments de menu au fichier menus.xml,
indiquez le nom de votre entreprise ou toute autre chaîne unique comme préfixe aux ID des
éléments de menu.
app Nom de l’application dans laquelle l’élément de menu est disponible. Non utilisé
actuellement.
key Raccourci clavier de la commande, le cas échéant. Utilisez les chaînes suivantes afin de
spécifier les touches de modification :
■ Cmd désigne la touche Ctrl (Windows) ou Commande (Macintosh).
■ Alt et Opt désignent la touche Alt (Windows) ou la touche Option (Macintosh). Ces
chaînes sont interchangeables.
■ Shift désigne la touche Maj, quelle que soit la plate-forme utilisée.
■ Ctrl désigne la touche Ctrl, quelle que soit la plate-forme utilisée.
■ Lorsque plusieurs touches de modification sont assignées à un raccourci, elles sont séparées
par un signe plus (+). Par exemple, la chaîne Cmd+Opt+5 dans l’attribut key signifie que
l’utilisateur doit appuyer sur Ctrl+Alt+5 (Windows) ou Commande+Option+5 (Macintosh)
afin d’exécuter l’élément de menu.
■ Les touches spéciales sont indiquées par leur nom : F1 à F12, Pg. Suiv., Pg. Préc.,
Orig., Fin, Inser, Suppr, Tab, Echap, Ret. Arr. et Espace. Vous pouvez également
assigner les touches de modification aux touches spéciales.
platform Indique la plate-forme sur laquelle apparaît l’élément. Les valeurs possibles
sont : "win" pour Windows ou "mac" pour Macintosh. Si vous ne spécifiez aucun attribut
platform , l’élément de menu apparaît sur les deux plates-formes. Si vous souhaitez qu’un
élément de menu ait un comportement spécifique en fonction de la plate-forme, spécifiez
deux éléments de menu avec un nom identique (mais des ID distincts) : le premier doit
avoir l’attribut suivant : platform="win" ; le second doit avoir l’attribut platform="mac".
enabled Fournit un code JavaScript (généralement un appel de fonction JavaScript)
déterminant si l’élément de menu est actuellement activé. Si la fonction renvoie la valeur
false, l’élément de menu apparaît grisé. La valeur par défaut est "true", mais il est
préférable de spécifier systématiquement une valeur même si la valeur est "true".
arguments Fournit des arguments que Dreamweaver transmet au code du fichier JavaScript
indiqué dans l’attribut file . Ces arguments doivent être insérés entre des apostrophes (’), à
l’intérieur de la chaîne des valeurs d’attribut délimitée par les guillemets (").
Chapitre 8 : Menus et commandes de menu
•
•
•
•
•
•
command Spécifie
une expression JavaScript qui est exécutée lorsque l’utilisateur
sélectionne l’élément dans le menu. Pour spécifier un code JavaScript complexe, indiquez
un fichier JavaScript (spécifié dans l’attribut file ). Vous devez spécifier les attributs file
ou command pour chaque élément de menu.
file Nom du fichier HTML contenant le code JavaScript qui contrôle l’élément de menu.
Spécifiez le chemin du fichier par rapport au dossier Configuration (par exemple, pour
l’élément de menu Aide > Bienvenue, spécifiez l’attribut file="Commands/Welcome.htm").
L’attribut file remplace les attributs command, enabled et checked. Vous devez spécifier les
attributs file ou command pour chaque élément de menu. Pour plus d’informations sur la
création d’un fichier de commandes par l’intermédiaire du panneau Historique, voir l’aide de
Dreamweaver. Pour plus d’informations sur la rédaction des commandes JavaScript, voir le
Chapitre 7, Commandes, page 141.
checked Expression JavaScript déterminant si une coche doit s’afficher en regard de
l’élément de menu dans le menu ; si la valeur de cette expression est true, la coche
s’affiche.
dynamic Si cet attribut est spécifié, il indique que l’élément de menu doit être déterminé
dynamiquement par un fichier HTML ; ce dernier contient un code JavaScript définissant
le texte et l’état de l’élément de menu. Si vous spécifiez l’attribut dynamic pour une balise,
vous devez également spécifier l’attribut file.
isdomrequired Indique s’il est nécessaire de synchroniser les modes Création et Code avant
d’exécuter le code associé à cet élément de menu. Les valeurs admises sont : "true" (par défaut)
et "false". Si vous définissez la valeur "false", les modifications apportées au fichier par
l’élément de menu n’utilisent pas le DOM Dreamweaver. Pour plus d’informations sur le
DOM, voir le Chapitre 4, Modèle d’objet de document (DOM) Dreamweaver, page 69.
showIf Indique que l’élément de menu ne doit apparaître que si la valeur de l’activateur
Dreamweaver spécifié est true. Les activateurs possibles sont : _SERVERMODEL_ASP,
_SERVERMODEL_ASPNET, _SERVERMODEL_JSP, _SERVERMODEL_CFML (pour toutes les versions
de ColdFusion), _SERVERMODEL_CFML_UD4 (applicable uniquement à UltraDev version 4 de
ColdFusion), _SERVERMODEL_PHP, _FILE_TEMPLATE, _VIEW_CODE, _VIEW_DESIGN,
_VIEW_LAYOUT, _VIEW_EXPANDED_TABLES et _VIEW_STANDARD. Vous pouvez spécifier
plusieurs activateurs en les séparant par des virgules (chaque virgule signifie ET). Vous pouvez
utiliser des points d’exclamation ("!") pour indiquer NE PAS. Ainsi, si vous souhaitez que
l’élément de menu apparaisse en mode Code mais pas sur une page ColdFusion, définissez
l’attribut de la façon suivante : showIf="_VIEW_CODE, !_SERVERMODEL_CFML".
Contenu
Aucun (balise vide).
Contenant
Cette balise doit être comprise dans une balise menu.
Exemple
<menuitem name="_New" key="Cmd+N" enabled="true" command="dw.createDocument()"
id="DWMenu_File_New" />
A propos du fichier menus.xml
155
<separator>
Description
Indique qu’un séparateur doit apparaître à l’emplacement correspondant du menu.
Attributs
{app}
•
app Nom
de l’application dans laquelle le séparateur apparaît. Non utilisé actuellement.
Contenu
Aucun (balise vide).
Contenant
Cette balise doit être comprise dans une balise menu.
Exemple
<separator />
<shortcutlist>
Description
Spécifie une liste de raccourcis dans le fichier menus.xml.
Attributs
{app}, id, {platform}
•
•
•
app Nom de l’application dans laquelle la liste de raccourcis est disponible. Non utilisé
actuellement.
id ID de la liste de raccourcis. Cet ID doit être identique à celui de la barre de menus (ou
menu contextuel) de Dreamweaver à laquelle les raccourcis sont associés. Les valeurs admises
sont les suivantes : "DWMainWindow", "DWMainSite", "DWTimelineContext" et
"DWHTMLContext".
platform Indique que la liste de raccourcis ne doit apparaître que sur la plate-forme
spécifiée. Les valeurs possibles sont : "win" et "mac".
Contenu
Cette balise peut contenir une ou plusieurs balises shortcut. Elle peut également contenir une
ou plusieurs balises comment (dont la syntaxe est identique à celle des balises comment
HTML).
Contenant
Aucun.
Exemple
<shortcutlist id="DWMainWindow">
<!-- balises shortcut et comment ici -->
</shortcutlist>
156
Chapitre 8 : Menus et commandes de menu
<shortcut>
Description
Spécifie un raccourci clavier dans le fichier menus.xml.
Attributs
key, {app}, {platform}, {file}, {arguments}, {command}, id, {name}
•
•
•
•
•
•
•
•
key Combinaison de touches permettant d’activer le raccourci clavier. Pour plus
d’informations sur la syntaxe, voir <menuitem>.
app Nom de l’application dans laquelle le raccourci est disponible. Non utilisé
actuellement.
platform Indique que le raccourci ne fonctionne que sur la plate-forme spécifiée. Les
valeurs possibles sont : "win" et "mac". Si vous ne définissez pas cet attribut, le raccourci
fonctionne sur les deux plates-formes.
file Chemin d’accès au fichier contenant le code JavaScript exécuté par Dreamweaver
lorsque le raccourci clavier est utilisé. L’attribut file remplace l’attribut command. Vous
devez spécifier les attributs file ou command pour chaque raccourci.
arguments Fournit des arguments que Dreamweaver transmet au code du fichier JavaScript
indiqué dans l’attribut file . Ces arguments doivent être insérés entre des apostrophes (’), à
l’intérieur de la chaîne des valeurs d’attribut délimitée par les guillemets (").
command Code JavaScript exécuté par Dreamweaver lorsque le raccourci clavier est utilisé.
Vous devez spécifier les attributs file ou command pour chaque raccourci.
id Identificateur unique d’un raccourci.
name Nom de la commande exécutée par le raccourci clavier, sur le modèle des noms
d’éléments de menu. Par exemple, l’attribut name du raccourci F12 est : "Aperçu dans le
navigateur principal".
Contenu
Aucun (balise vide).
Contenant
Cette balise doit être comprise dans une balise shortcutlist.
Exemple
<shortcut key="Cmd+Shift+Z" file="Menus/MM/Edit_Clipboard.htm"
arguments="’redo’" id="DWShortcuts_Edit_Redo" />
A propos du fichier menus.xml
157
Modification des menus et des éléments de menu
En modifiant le fichier menus.xml, vous pouvez déplacer les éléments de menu au sein d’un menu
ou d’un menu à un autre. Vous pouvez également ajouter des séparateurs dans les menus ou les
supprimer et déplacer des menus au sein d’une barre de menus ou d’une barre de menus à une
autre.
En outre, vous pouvez ajouter des éléments dans les menus contextuels ou en retirer en appliquant
la même procédure que pour les autres menus.
Pour plus d’informations, voir A propos du fichier menus.xml, page 151.
Pour déplacer un élément de menu :
1 Quittez Dreamweaver.
2 Effectuez une copie de sauvegarde du fichier menus.xml.
3 Ouvrez le fichier menus.xml dans un éditeur de texte comme BBEdit, HomeSite ou
Wordpad (ne l’ouvrez pas dans Dreamweaver).
4 Coupez une balise menuitem complète, depuis la chaîne <menuitem au début de la balise
jusqu’au caractère /> final.
5 Placez le point d’insertion au nouvel emplacement de l’élément de menu (cet emplacement
doit se situer entre une balise menu et la balise /menu correspondante).
6 Copiez l’élément de menu à son nouvel emplacement.
Pour créer un sous-menu lors du déplacement d’un élément de menu :
1 Placez le point d’insertion dans un menu (entre une balise menu et la balise /menu
correspondante).
2 Insérez une nouvelle balise menu et une balise /menu dans le menu.
3 Ajoutez les nouveaux éléments de menu dans le nouveau sous-menu.
Pour insérer un séparateur entre deux éléments de menu :
• Insérez une balise separator/ entre les deux balises menuitem.
Pour supprimer un séparateur existant :
• Supprimez la ligne separator/ correspondante.
Pour déplacer un menu :
1 Quittez Dreamweaver.
2 Effectuez une copie de sauvegarde du fichier menus.xml.
3 Ouvrez le fichier menus.xml dans un éditeur de texte comme BBEdit, HomeSite ou
Wordpad (ne l’ouvrez pas dans Dreamweaver).
4 Coupez un menu ainsi que son contenu, depuis la balise d’ouverture menu jusqu’à la balise
de fermeture /menu.
5 Placez le point d’insertion au nouvel emplacement du menu (cet emplacement doit se situer
entre une balise menubar et la balise /menubar correspondante).
6 Copiez le menu à son nouvel emplacement.
158
Chapitre 8 : Menus et commandes de menu
Modification du nom d’un menu ou d’un élément de menu
Pour modifier le nom d’un menu ou d’un élément de menu, il suffit de modifier le fichier
menus.xml.
Pour modifier le nom d’un menu ou d’un élément de menu :
1 Quittez Dreamweaver.
2 Effectuez une copie de sauvegarde du fichier menus.xml.
3 Ouvrez le fichier menus.xml dans un éditeur de texte comme HomeSite, BBEdit ou
Wordpad (ne l’ouvrez pas dans Dreamweaver).
4 Si vous modifiez le nom d’un élément de menu, localisez la balise menuitem adéquate, puis
modifiez son attribut name. Si vous modifiez le nom d’un menu, localisez la balise menu
adéquate, puis modifiez son attribut name. Dans tous les cas, ne modifiez pas l’attribut id.
5 Enregistrez, puis fermez le fichier menus.xml. Relancez Dreamweaver afin que les modifications
soient prises en compte.
Modification des raccourcis clavier
Si les raccourcis clavier par défaut ne vous conviennent pas, vous pouvez les modifier, les
supprimer ou en créer de nouveaux. Pour ce faire, la solution la plus simple est d’utiliser l’Editeur
de raccourcis clavier (pour plus d’informations, voir l’aide de Dreamweaver). Il est également
possible de modifier les raccourcis clavier directement dans le fichier menus.xml, mais les risques
d’erreur sont plus élevés que si vous utilisez l’Editeur de raccourcis clavier.
Pour modifier un raccourci clavier :
1 Quittez Dreamweaver.
2 Effectuez une copie de sauvegarde du fichier menus.xml.
3 Ouvrez le fichier menus.xml dans un éditeur de texte comme BBEdit, HomeSite ou Wordpad
(ne l’ouvrez pas dans Dreamweaver).
4 Consultez la matrice des raccourcis clavier (disponible à partir du centre de support de
5
6
7
8
Dreamweaver) et choisissez un raccourci non utilisé ou que vous souhaitez réassigner.
Si vous réassignez un raccourci clavier, reportez les modifications sur une copie imprimée de la
matrice pour vous y référer ultérieurement.
Lorsque vous réassignez un raccourci clavier, localisez l’élément de menu auquel il renvoie, puis
supprimez l’attribut key="shortcut" de cet élément.
Localisez l’élément de menu auquel vous souhaitez assigner ou réassigner le raccourci clavier.
Si un raccourci clavier est déjà assigné à cet élément de menu, localisez l’attribut key dans la
ligne. Si aucun raccourci ne lui a été assigné, ajoutez l’attribut key="" parmi les autres attributs
au sein de la balise menuitem.
Entre les guillemets (") de l’attribut key, saisissez le nouveau raccourci clavier.
Si vous saisissez une combinaison de touches, séparez ces dernières par un signe plus (+). Pour
plus d’informations sur les modificateurs, voir la description de la balise menuitem dans
<menuitem>.
Modification des menus et des éléments de menu
159
Si le raccourci clavier est déjà assigné à une autre commande et que vous n’avez pas supprimé
cette assignation, le raccourci ne s’applique qu’au premier élément de menu auquel il est associé
dans le fichier menus.xml.
Remarque : Vous pouvez utiliser un même raccourci clavier pour des éléments de menu différents
sous Windows et sur Macintosh.
9 Saisissez le nouveau raccourci à l’emplacement adéquat de la matrice des raccourcis clavier.
Modification des menus déroulants et des menus contextuels
Dreamweaver comporte des menus déroulants ou contextuels dans un grand nombre de
panneaux et de boîtes de dialogue. Certains menus contextuels sont définis dans le fichier
menus.xml. Les autres sont définis dans divers fichiers XML. Il vous est possible de créer,
supprimer ou modifier des éléments de ces menus. Cependant, en règle générale, il est préférable
de créer une extension afin d’effectuer ces changements.
Les menus déroulants et contextuels de Dreamweaver répertoriés ci-dessous sont définis dans des
fichiers XML au moyen de balises identiques à celles du fichier menus.xml :
• Sources de données (menu déroulant plus (+) du panneau Liaisons) : définies dans les fichiers
DataSources.xml situés dans les sous-dossiers du dossier DataSources.
• Comportements de serveur (menu déroulant plus (+) du panneau Comportements de
•
•
•
•
•
•
•
•
160
serveur) : définis dans les fichiers ServerBehaviors.xml situés dans les sous-dossiers du dossier
ServerBehaviors.
Formats de serveur (menu déroulant plus (+) de la boîte de dialogue Modifier la liste de
formats) : définis dans les fichiers ServerFormats.xml situés dans les sous-dossiers du dossier
ServerFormats.
Les éléments du menu déroulant formats qui permettent une liaison dans le panneau Liaisons
sont définis dans les fichiers Formats.xml situés dans les sous-dossiers du dossier
ServerFormats. Vous pouvez ajouter des entrées à ce menu à partir de Dreamweaver via la boîte
de dialogue d’ajout de format.
Les éléments de menu de la boîte de dialogue Editeur de la bibliothèque de balises sont définis
dans le fichier TagLibraries/TagImporters/TagImporters.xml.
Les éléments de menu des paramètres de la boîte de dialogue de génération de comportement,
elle-même comprise dans le Créateur de comportements de serveur, sont définis dans le fichier
Shared/Controls/String Menu/Controls.xml.
Les éléments des menus contextuels associés aux composants ColdFusion sont définis dans le
fichier Components/ColdFusion/CFCs/CFCsMenus.xml.
Les éléments des menus contextuels associés aux sources de données ColdFusion sont définis
dans le fichier Components/ColdFusion/DataSources/DataSourcesMenus.xml.
Les éléments des menus contextuels associés aux JavaBeans sont définis dans le fichier
Components/Jsp/JavaBeans/JavaBeanMenus.xml.
Les éléments des menus contextuels associés aux divers composants de serveur sont définis
dans des fichiers XML situés dans les sous-dossiers du dossier Components.
Chapitre 8 : Menus et commandes de menu
Commandes de menu
Les commandes de menu rendent les menus plus souples et plus dynamiques. A l’instar des
commandes ordinaires, les commandes de menu permettent d’exécuter pratiquement n’importe
quel type de modification dans le document actif, dans d’autres documents ouverts ou dans tout
document HTML situé sur un disque local. L’API des commandes de menu se développe à partir
de l’API des commandes ordinaires pour accomplir plusieurs tâches liées à l’affichage et à l’appel
de la commande à partir du système de menus.
Les commandes de menu sont des fichiers HTML référencés dans l’attribut file d’une balise
menuitem du fichier menus.xml. La section BODY d’un fichier de commandes de menu peut
contenir un formulaire HTML acceptant des options pour la commande (par exemple, le tri des
éléments d’un tableau et la colonne de référence du tri). La section HEAD d’un fichier de
commandes de menu contient des fonctions JavaScript qui traitent les entrées de formulaire de la
section BODY et contrôlent les modifications apportées au document de l’utilisateur.
Les commandes de menu sont stockées dans le dossier Configuration/Menus du dossier de
l’application Dreamweaver.
Remarque : Si vous ajoutez des commandes de menu personnalisées dans Dreamweaver, faites-le
au plus haut niveau du dossier Menus ou créez un sous-dossier. Le dossier Macromedia MM est
réservé aux commandes de menu fournies avec Dreamweaver.
Modification du menu Commandes
Vous pouvez ajouter certains types de commandes au menu Commandes et les renommer sans
avoir à modifier le fichier menus.xml. Pour plus d’informations sur le fichier menus.xml, voir
Modification des menus et des éléments de menu, page 158.
Remarque : Le mot “commande” a deux significations distinctes dans Dreamweaver. Au sens strict
du terme, une commande est un type d’extension particulier. Cependant, dans certains contextes, le
terme “commande” correspond à “élément de menu”, c’est-à-dire tout élément apparaissant dans un
menu Dreamweaver, quelle que soit sa fonction ou son fonctionnement.
Pour créer de nouvelles commandes placées automatiquement dans le menu Commandes, utilisez
le panneau Historique. Vous pouvez également utiliser Extension Manager pour installer de
nouvelles extensions, notamment des commandes. Pour plus d’informations, voir l’aide de
Dreamweaver.
Pour réorganiser les éléments du menu Commandes ou pour déplacer des éléments d’un menu à
un autre, il est nécessaire de modifier le fichier menus.xml.
Pour renommer une commande que vous avez créée :
1 Choisissez Commandes > Modifier la liste des commandes.
Une boîte de dialogue s’affiche, répertoriant toutes les commandes que vous pouvez renommer
(les commandes se trouvant dans le menu Commandes par défaut n’apparaissent pas dans cette
liste et ne peuvent pas être modifiées de cette manière).
2 Sélectionnez la commande que vous souhaitez renommer.
3 Indiquez son nouveau nom.
4 Cliquez sur Fermer.
Le nouveau nom apparaît dans le menu Commandes.
Commandes de menu
161
Pour supprimer une commande que vous avez créée :
1 Choisissez Commandes > Modifier la liste des commandes.
Une boîte de dialogue s’affiche, répertoriant toutes les commandes que vous pouvez supprimer
(les commandes se trouvant dans le menu Commandes par défaut n’apparaissent pas dans cette
liste et ne peuvent pas être supprimées de cette manière).
2 Sélectionnez la commande que vous souhaitez supprimer.
3 Cliquez sur Supprimer, puis confirmez que vous voulez supprimer la commande.
La commande est supprimée. La suppression d’une commande n’implique pas seulement la
suppression de l’élément de menu du menu : le fichier contenant le code de la commande est
également supprimé. Cette procédure de suppression doit donc être utilisée avec discernement.
Si vous souhaitez supprimer une commande sans supprimer le fichier, localisez le fichier sous
Configuration/Commands, puis placez-le dans un autre dossier.
4 Cliquez sur Fermer.
Fonctionnement des commandes de menu
Lorsque l’utilisateur clique sur un menu avec un élément contenant une commande de menu, les
événements suivants se produisent :
1 Si l’une des balises menuitem du menu contient l’attribut dynamic, Dreamweaver appelle la
2
3
4
5
fonction getDynamicContent() dans le fichier de commandes de menu associé afin de
compléter le menu.
Dreamweaver appelle la fonction canAcceptCommand() dans chaque fichier de commandes de
menu référencé dans le menu pour vérifier si la commande correspond à l’élément sélectionné.
■ Si la fonction canAcceptCommand() renvoie la valeur false, l’élément de menu apparaît
grisé.
■ Si la fonction canAcceptCommand() renvoie la valeur true ou si elle n’est pas définie,
Dreamweaver appelle la fonction isCommandChecked() pour déterminer si l’élément de
menu doit être coché. Si la fonction isCommandChecked() n’est pas définie, aucune coche
n’apparaît.
Dreamweaver appelle la fonction setMenuText() pour déterminer le texte devant s’afficher
dans le menu.
Si la fonction setMenuText() n’est pas définie, Dreamweaver utilise le texte spécifié dans la
balise menuitem.
L’utilisateur sélectionne un élément dans le menu.
Dreamweaver appelle la fonction receiveArguments(), si elle est définie, dans le fichier de
commandes de menu sélectionné afin de permettre à la commande de traiter tous les arguments
transmis depuis l’élément de menu.
Remarque : S’il s’agit d’un élément de menu dynamique, l’ID correspondant est le seul argument
transmis.
6 Dreamweaver appelle la fonction commandButtons(), si elle est définie, pour identifier les
boutons qui figurent dans la partie droite de la boîte de dialogue Options et le code qui doit être
exécuté lorsque l’utilisateur clique sur ces boutons.
7 Dreamweaver recherche une balise FORM dans le fichier de commandes de menu.
S’il existe un formulaire, Dreamweaver appelle la fonction windowDimensions() pour
déterminer la taille de la boîte de dialogue Options qui contient les éléments BODY du fichier.
162
Chapitre 8 : Menus et commandes de menu
Si la fonction windowDimensions() n’est pas définie, Dreamweaver redimensionne
automatiquement la boîte de dialogue.
8 Si la balise BODY du fichier de commandes de menu contient le gestionnaire onLoad,
Dreamweaver exécute le code associé à ce gestionnaire (qu’une boîte de dialogue soit affichée ou
non). Si aucune boîte de dialogue ne s’affiche, les étapes restantes ne sont pas exécutées.
9 L’utilisateur sélectionne des options dans la boîte de dialogue. Dreamweaver exécute les
gestionnaires d’événements associés aux champs du formulaire au fur et à mesure que
l’utilisateur les rencontre.
10 L’utilisateur clique sur l’un des boutons définis par la fonction commandButtons().
11 Dreamweaver exécute le code associé au bouton sur lequel l’utilisateur a cliqué.
12 La boîte de dialogue reste affichée jusqu’à ce que l’un des scripts des commandes de menu
appelle la fonction window.close().
API des commandes de menu
Les fonctions personnalisées de l’API des commandes de menu ne sont pas obligatoires.
canAcceptCommand()
Description
Détermine si l’élément de menu doit être actif ou grisé.
Arguments
{arg1}, {arg2},...{argN}}
• S’il s’agit d’une option de menu dynamique, l’ID unique correspondant spécifié dans la
fonction getDynamicContents() est le seul argument transmis. Si l’attribut arguments est
défini pour une balise menuitem, la valeur de l’attribut est transmise à la fonction
canAcceptCommand() (et aux fonctions isCommandChecked(), receiveArguments() et
setMenuText() ) sous forme d’un ou plusieurs arguments. L’attribut arguments permet de
distinguer deux éléments de menu appelant la même commande de menu.
Remarque : L’attribut arguments n’est pas pris en compte pour les options de menu dynamiques.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si l’élément doit être activé ; false dans le cas
contraire.
commandButtons()
Description
Définit les boutons figurant dans la partie droite de la boîte de dialogue Options et leur
comportement lorsque l’utilisateur clique dessus. Si cette fonction n’est pas définie, aucun bouton
n’apparaît et la section BODY du fichier de commandes de menu s’étend de façon à remplir la
totalité de la boîte de dialogue.
Arguments
Aucun.
API des commandes de menu
163
Valeurs renvoyées
Dreamweaver attend un tableau contenant un nombre pair d’éléments. Le premier élément est
une chaîne contenant le libellé du premier bouton. Le deuxième élément est une chaîne de code
JavaScript définissant le comportement du premier bouton lorsque l’utilisateur clique dessus. Les
autres éléments définissent les boutons supplémentaires de la même manière.
Exemple
Dans l’exemple suivant, la fonction commandButtons() définit les boutons OK, Annuler et Aide.
function commandButtons(){
return new Array("OK" , "doCommand()" , "Annuler" , ¬
"window.close()" , "Aide" , "showHelp()");
}
getDynamicContent()
Description
Extrait le contenu de la partie dynamique du menu.
Arguments
menuID
• L’argument menuID est la valeur de l’attribut id dans la balise menuitem associée à l’élément de
menu.
Valeurs renvoyées
Dreamweaver attend un tableau de chaînes, où chaque chaîne contient le nom d’un élément de
menu et son ID unique, séparés par un point-virgule. Si cette fonction renvoie la valeur null,
aucune modification n’est apportée au menu.
Exemple
Dans l’exemple suivant, la fonction getDynamicContent() renvoie un tableau de quatre
éléments de menu (Mon élément de menu 1, Mon élément de menu 2, Mon élément de menu 3,
Mon élément de menu 4) :
function getDynamicContent(){
var stringArray= new Array();
var i=0;
var numItems = 4;
for (i=0; i<numItems;i++)
stringArray[i] = new String("Mon élément de menu " + i + ";¬
id=’Mon-ElémentMenu" + i + “‘”);
return stringArray;
}
164
Chapitre 8 : Menus et commandes de menu
isCommandChecked()
Description
Détermine si une coche doit apparaître à côté de l’élément de menu.
Arguments
{arg1}, {arg2},...{argN}
• S’il s’agit d’une option de menu dynamique, l’ID unique correspondant spécifié dans la
fonction getDynamicContents() est le seul argument transmis. Si l’attribut arguments est
défini pour une balise menuitem, la valeur de l’attribut est transmise à la fonction
isCommandChecked() (et aux fonctions canAcceptCommand(), receiveArguments() et
setMenuText() ) sous forme d’un ou de plusieurs arguments. L’attribut arguments permet de
distinguer deux éléments de menu appelant la même commande de menu.
Remarque : L’attribut arguments n’est pas pris en compte pour les options de menu dynamiques.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si une coche doit apparaître à côté de l’option
de menu ; false dans le cas contraire.
Exemple
function isCommandChecked()
{
var bChecked = false;
var cssStyle = arguments[0];
if (dw.getDocumentDOM() == null)
return false;
if (cssStyle == "(None)")
{
return dw.cssStylePalette.getSelectedStyle() == ’’;
}
else
{
return dw.cssStylePalette.getSelectedStyle() == cssStyle;
}
return bChecked;
}
API des commandes de menu
165
receiveArguments()
Description
Traite tous les arguments transmis à partir d’un élément du menu ou de la fonction
dw.runCommand(). S’il s’agit d’une option de menu dynamique, elle traite l’ID de l’option de
menu dynamique.
Arguments
{arg1}, {arg2},...{argN}
• S’il s’agit d’une option de menu dynamique, l’ID unique correspondant spécifié dans la
fonction getDynamicContents() est le seul argument transmis. Si l’attribut arguments est
défini pour une balise menuitem, la valeur de l’attribut est transmise à la fonction
receiveArguments() (et aux fonctions canAcceptCommand(), isCommandChecked() et
setMenuText()) sous forme d’un ou de plusieurs arguments. L’attribut arguments permet de
distinguer deux éléments de menu appelant la même commande de menu.
Remarque : L’attribut arguments n’est pas pris en compte pour les options de menu dynamiques.
Valeurs renvoyées
Dreamweaver n’attend rien.
Exemple
function receiveArguments()
{
var styleName = arguments[0];
if (styleName == "(None)")
dw.getDocumentDOM(’document’).applyCSSStyle(’’,’’);
else
dw.getDocumentDOM(’document’).applyCSSStyle(’’,styleName);
}
setMenuText()
Description
Spécifie le texte devant s’afficher dans le menu.
Remarque : N’utilisez pas cette fonction si vous utilisez getDynamicContent().
Arguments
{arg1}, {arg2},...{argN}
• Si l’attribut arguments est défini pour une balise menuitem, la valeur de cet attribut est
transmise à la fonction setMenuText() (et aux fonctions canAcceptCommand(),
isCommandChecked() et receiveArguments()) sous la forme d’un ou de plusieurs arguments.
L’attribut arguments permet de distinguer deux éléments de menu appelant la même
commande de menu.
Valeurs renvoyées
Dreamweaver attend la chaîne devant apparaître dans le menu.
166
Chapitre 8 : Menus et commandes de menu
Exemple
function setMenuText()
{
if (arguments.length != 1) return "";
var whatToDo = arguments[0];
if (whatToDo == "undo")
return dw.getUndoText();
else if (whatToDo == "redo")
return dw.getRedoText();
else return "";
}
windowDimensions()
Description
Définit les dimensions de la boîte de dialogue des paramètres. Si cette fonction n’est pas définie,
les dimensions de la fenêtre sont calculées automatiquement.
Remarque : Ne définissez cette fonction que si vous souhaitez utiliser une boîte de dialogue ayant
des dimensions supérieures à 640 x 480 pixels.
Arguments
platform
• La valeur de l’argument platform est soit "macintosh", soit "windows", selon la plate-forme
utilisée par l’utilisateur.
Valeurs renvoyées
Dreamweaver attend une chaîne au format "LargeurEnPixels,HauteurEnPixels".
Les dimensions renvoyées sont inférieures à la taille totale de la boîte de dialogue parce qu’elles
n’incluent pas la zone des boutons OK et Annuler. Si les dimensions renvoyées ne permettent pas
de faire apparaître toutes les options, des barres de défilement s’affichent.
Exemple
Dans l’exemple suivant, la fonction windowDimensions() définit les dimensions de la boîte de
dialogue des paramètres à 648 x 520 pixels :
function windowDimensions(){
return "648,520";
}
Commande de menu simple
Cet exemple de commande de menu simple explique le fonctionnement des commandes de menu
Annuler et Rétablir. L’élément de menu Annuler permet à l’utilisateur d’annuler sa dernière
modification et l’élément Rétablir permet de rétablir une modification précédemment annulée au
moyen de l’élément Annuler.
Pour appliquer cet exemple, suivez les étapes ci-après :
1 Création des éléments de menu
2 Ecriture du code JavaScript
3 Enregistrement du fichier des commandes de menu dans le dossier Menus
Commande de menu simple
167
Création des éléments de menu
Ajoutez les balises de menu HTML suivantes à la fin du fichier menus.xml afin de créer un menu
intitulé MonMenu contenant les éléments Annuler et Rétablir.
<menu name="MonMenu" id="MonMenu_Edit">
<menuitem name="MonUndo" key="Cmd+Z" file="Menus/MonMenu.htm"
arguments="’undo’" id="MonMenu_Edit_Undo" />
<menuitem name="MonRedo" key="Cmd+Y" file="Menus/MonMenu.htm"
arguments="’redo’" id="MonMenu_Edit_Redo" />
</menu>
L’attribut key définit les touches des raccourcis clavier que l’utilisateur peut utiliser pour appeler
l’élément de menu. L’attribut file indique le nom du fichier de commandes exécuté par
Dreamweaver lorsque ce dernier appelle l’élément de menu. La valeur de l’attribut arguments
définit les arguments transmis par Dreamweaver lorsque ce dernier appelle la fonction
receiveArguments().
La figure suivante représente ces éléments de menu :
Rédaction du code JavaScript
Lorsque l’utilisateur clique sur Annuler ou sur Rétablir dans le menu MonMenu, Dreamweaver
appelle le fichier de commandes MonMenu.htm spécifié par l’attribut file de la balise
menuitem. Créez le fichier de commandes MonMenu.htm dans le dossier Configuration/Menus
de Dreamweaver et ajoutez les trois fonctions API des commandes de menu
(canAcceptCommand(), receiveArguments() et setMenuText()) afin de mettre en œuvre la
logique associée aux éléments de menu Annuler et Rétablir. Les sections ci-dessous décrivent ces
fonctions.
canAcceptCommand()
Dreamweaver appelle la fonction canAcceptCommand() pour chaque élément du menu
MonMenu afin de déterminer s’il doit être activé ou désactivé. Dans le fichier MonMenu.htm, la
fonction canAcceptCommand() vérifie la valeur de l’argument arguments[0] afin de déterminer
si Dreamweaver traite un élément de menu Rétablir ou Annuler. Si l’argument "undo" est défini,
la fonction canAcceptCommand() appelle la fonction d’activateur dw.canUndo() et renvoie la
valeur renvoyée (true ou false). De même, si l’argument "redo" est défini, la fonction
canAcceptCommand() appelle la fonction d’activateur dw.canRedo() et renvoie sa valeur à
Dreamweaver. Si la fonction canAcceptCommand() renvoie la valeur false, Dreamweaver grise
l’élément de menu pour lequel la fonction a été appelée. L’exemple suivant décrit le code de la
fonction canAcceptCommand() :
function canAcceptCommand()
{
var selarray;
if (arguments.length != 1) return false;
var bResult = false;
var whatToDo = arguments[0];
if (whatToDo == "undo")
{
168
Chapitre 8 : Menus et commandes de menu
bResult = dw.canUndo();
}
else if (whatToDo == "redo")
{
bResult = dw.canRedo();
}
return bResult;
}
receiveArguments()
Dreamweaver appelle la fonction receiveArguments() pour traiter les arguments définis dans la
balise menuitem. Pour les éléments de menu Annuler et Rétablir, la fonction
receiveArguments() appelle soit la fonction dw.undo(), soit la fonction dw.redo(), selon la
valeur de l’argument arguments[0] ("undo" ou "redo" respectivement). La fonction dw.undo()
annule la dernière action effectuée par l’utilisateur dans la fenêtre de document, la boîte de
dialogue ou la panneau actif. La fonction dw.redo() rétablit la dernière opération annulée.
Le code de la fonction receiveArguments() ressemble à ceci :
function receiveArguments()
{
if (arguments.length != 1) return;
var whatToDo = arguments[0];
if (whatToDo == "undo")
{
dw.undo();
}
else if (whatToDo == "redo")
{
dw.redo();
}
}
Pour plus d’informations sur les fonctions dw.undo() et dw.redo(), voir le Guide des API de
Dreamweaver.
Dans cette commande, la fonction receiveArguments() traite les arguments et exécute la
commande. Des commandes de menu plus complexes peuvent appeler des fonctions différentes
pour exécuter la commande. Par exemple, le code suivant vérifie si le premier argument est
"foo" ; si c’est le cas, il appelle la fonction doOperationX() et lui transmet le deuxième
argument. Si le premier argument est "bar", le code appelle la fonction doOperationY() et lui
transmet le deuxième argument. La fonction doOperationX() ou doOperationY() est chargée
de l’exécution de la commande.
function receiveArguments(){
if (arguments.length != 2) return;
var whatToDo = arguments[0];
if (whatToDo == "foo"){
doOperationX(arguments[1]);
}else if (whatToDo == "bar"){
doOperationX(arguments[1]);
}
}
Commande de menu simple
169
setMenuText()
Dreamweaver appelle la fonction setMenuText() pour déterminer le texte de l’élément de menu.
Si la fonction setMenuText() n’est pas définie, Dreamweaver utilise le texte spécifié dans
l’attribut name de la balise menuitem.
La fonction setMenuText() vérifie la valeur de l’argument transmis par Dreamweaver
(arguments[0]). Si la valeur de cet argument est "undo", Dreamweaver appelle la fonction
dw.getUndoText() ; si sa valeur est "redo", Dreamweaver appelle la fonction
dw.getRedoText(). La fonction dw.getUndoText() renvoie le texte spécifiant l’opération que
Dreamweaver doit annuler. Par exemple, si l’utilisateur utilise plusieurs fois la commande
Rétablir, la fonction dw.getUndoText() peut renvoyer le texte de menu Annuler Modifier
source. De même, la fonction dw.getRedoText() renvoie le texte spécifiant l’opération que
Dreamweaver doit rétablir. Si l’utilisateur utilise plusieurs fois la commande Annuler, la fonction
dw.getRedoText() peut renvoyer le texte de menu Répéter Modifier source.
Le code de la fonction setMenuText() ressemble à ceci :
function setMenuText()
{
if (arguments.length != 1) return "";
var whatToDo = arguments[0];
if (whatToDo == "undo")
return dw.getUndoText();
else if (whatToDo == "redo")
return dw.getRedoText();
else return "";
}
Enregistrement du fichier de commandes dans le dossier Menu
Pour mettre en oeuvre les éléments de menu Annuler et Rétablir, vous devez enregistrer le fichier
MonMenu.htm dans le dossier Configuration/Menus de Dreamweaver ou dans un sous-dossier
créé à cet effet. L’emplacement du fichier doit correspondre à celui que vous avez spécifié dans la
balise menuitem. Pour que Dreamweaver puisse l’exploiter, vous devez redémarrer Dreamweaver
ou recharger les extensions. Pour plus d’informations sur le rechargement des extensions, voir
Exécution de la commande, page 150.
Pour exécuter les commandes de menu, sélectionnez l’élément de menu lorsqu’il est activé.
Dreamweaver appelle alors les fonctions dans le fichier de commandes, comme indiqué dans
Fonctionnement des commandes de menu, page 162.
Un menu dynamique
Cet exemple décrit la mise en oeuvre du sous-menu Aperçu dans le navigateur de Dreamweaver
qui permet d’afficher la liste des navigateurs disponibles. Cet exemple décrit également l’ouverture
du fichier en cours (ou des fichiers sélectionnés dans le panneau Site) dans le navigateur spécifié
par l’utilisateur. Pour mettre en oeuvre ce menu dynamique, suivez les étapes ci-dessous :
1 Création des éléments de menu dynamiques
2 Rédaction du code JavaScript
170
Chapitre 8 : Menus et commandes de menu
Création des éléments de menu dynamiques
Les balises de menu du fichier menus.xml présentées ci-dessous définissent le sous-menu Aperçu
dans le navigateur du menu Fichier :
<menu name="_Preview in Browser" id="DWMenu_File_PIB">
<menuitem dynamic name="Pas de navigateur sélectionné"
file="Menus/MM/PIB_Dynamic.htm" arguments="’No Browsers’"
id="DWMenu_File_PIB_Default" />
<separator />
<menuitem name="_Edit Browser List..." enabled="true"
command="dw.editBrowserList()" id="DWMenu_File_PIB_EditBrowserList" />
</menu>
La première balise menuitem définit l’élément de menu par défaut Pas de navigateur
sélectionné. Cet élément apparaît dans le sous-menu si vous n’avez spécifié aucun navigateur
pour l’élément Aperçu dans le navigateur dans les Préférences. Si vous avez spécifié Internet
Explorer, le sous-menu présente l’aspect suivant :
L’attribut name du premier élément de menu indique le fichier de commandes
PIB_Dynamic.htm. Ce fichier contient les lignes suivantes :
<SCRIPT LANGUAGE="javascript" SRC="PIB_Dynamic.js"></SCRIPT>
La balise script inclut le code JavaScript du fichier PIB_Dynamic.js, lequel contient le code
JavaScript associé au sous-menu Aperçu dans le navigateur. Il est possible d’enregistrer ce code
directement dans le fichier PIB_Dynamic.htm, mais il est plus utile de l’enregistrer dans un
fichier séparé. Ceci permet en effet d’inclure le même code dans un grand nombre de
commandes.
Ecriture du code JavaScript
Etant donné que la première balise menuitem contient l’attribut dynamic, Dreamweaver appelle
la fonction getDynamicContent() du fichier PIB_Dynamic.js décrite dans l’exemple suivant :
function getDynamicContent(itemID)
{
var browsers = null;
var PIB = null;
var i;
var j=0;
browsers = new Array();
PIB = dw.getBrowserList();
for (i=0; i<PIB.length; i=i+2)
{
browsers[j] = new String(PIB[i]);
if (dw.getPrimaryBrowser() == PIB[i+1])
browsers[j] += "\tF12";
else if (dw.getSecondaryBrowser() == PIB[i+1])
browsers[j] += "\tCmd+F12";
browsers[j] += ";id=’"+escQuotes(PIB[i])+"’";
Un menu dynamique
171
if (itemID == "DWPopup_PIB_Default")
browsers[j] = MENU_strPreviewIn + browsers[j];
j = j+1;
}
return browsers;
}
La fonction getDynamicContent() appelle la fonction dw.getBrowserList() afin d’obtenir un
tableau des noms de navigateurs indiqués dans la section Aperçu dans le navigateur des
Préférences de Dreamweaver. Ce tableau contient les noms de tous les navigateurs et les chemins
d’accès aux fichiers exécutables. Ensuite, pour chaque élément du tableau (i=0; i<PIB.length;
i=i+2), la fonction getDynamicContents() place le nom du navigateur (PIB[i]) dans un
second tableau appelé browsers (browsers[j] = new String(PIB[i]);). Si un navigateur a
été désigné comme navigateur principal ou secondaire, la fonction ajoute les noms des raccourcis
clavier qui permettent de l’appeler. La chaîne ";id=" est ensuite ajoutée, suivie du nom du
navigateur entre apostrophes (exemple : ;id=’iexplore’). Si l’argument itemID est
"DWPopup_PIB_Default", la fonction fait précéder l’élément du tableau de la chaîne Preview
in. Une fois qu’une entrée a été créée pour chaque navigateur répertorié dans Préférences, la
fonction getDynamicContent() renvoie les navigateurs du tableau vers Dreamweaver. Si vous
n’avez sélectionné aucun navigateur dans Préférences, la fonction renvoie la valeur null et
Dreamweaver affiche Pas de navigateur sélectionné dans le menu.
canAcceptCommand()
Dreamweaver appelle ensuite la fonction canAcceptCommand() pour chaque balise menuitem
faisant référence à un fichier de commandes avec l’attribut file. Si la fonction
canAcceptCommand() renvoie la valeur false, l’élément de menu s’affiche en grisé. Si la fonction
canAcceptCommand() renvoie la valeur true, Dreamweaver active l’élément de menu. Si la
fonction renvoie true ou si elle n’est pas définie, Dreamweaver appelle la fonction
isCommandChecked() pour déterminer si l’élément de menu doit être coché. Si la fonction
isCommandChecked() n’est pas définie, aucune coche n’apparaît.
function canAcceptCommand()
{
var PIB = dw.getBrowserList();
if (arguments[0] == ’primary’ || arguments[0] == ’secondary’)
return havePreviewTarget();
return havePreviewTarget() && (PIB.length > 0);
}
La fonction canAcceptCommand() du fichier PIB_Dynamic.js récupère à nouveau la liste des
navigateurs créée dans Préférences. Elle vérifie ensuite si le premier argument (arguments[0]) est
principal ou secondaire. Si tel est le cas, elle renvoie la valeur renvoyée par la fonction
havePreviewTarget(). Dans le cas contraire, elle effectue des tests afin de vérifier l’appel de la
fonction havePreviewTarget() et de voir si des navigateurs ont été spécifiés ou non
(PIB.length > 0). Si les deux tests sont vrais (true), la fonction renvoie la valeur true. Si au
moins un test est faux (false), la fonction renvoie la valeur false.
172
Chapitre 8 : Menus et commandes de menu
havePreviewTarget()
La fonction havePreviewTarget() est définie par l’utilisateur et renvoie la valeur true si
Dreamweaver dispose d’une cible valide à afficher dans le navigateur. Ce peut être un document
ou un groupe de fichiers sélectionné dans le panneau Site. La fonction havePreviewTarget()
ressemble à ceci :
function havePreviewTarget()
{
var bHavePreviewTarget = false;
if (dw.getFocus(true) == ’site’)
{
if (site.getFocus() == ’remote’)
{
bHavePreviewTarget = site.getRemoteSelection().length > 0 &&
site.canBrowseDocument();
}
else if (site.getFocus() != ’none’)
{
var selFiles = site.getSelection();
if (selFiles.length > 0)
{
var i;
bHavePreviewTarget = true;
for (i = 0; i < selFiles.length; i++)
{
var selFile = selFiles[i];
// Pour les connexions à un serveur, les fichiers
// seront déjà des URL distantes.
if (selFile.indexOf("://") == (-1))
{
var urlPrefix = "file:///";
var strTemp = selFile.substr(urlPrefix.length);
if (selFile.indexOf(urlPrefix) == -1)
bHavePreviewTarget = false;
else if (strTemp.indexOf("/") == -1)
bHavePreviewTarget = false;
else if (!DWfile.exists(selFile))
bHavePreviewTarget = false;
else if (DWfile.getAttributes(selFile).indexOf("D") != -1)
bHavePreviewTarget = false;
}
else
{
bHavePreviewTarget = true;
}
}
}
}
}
else if (dw.getFocus() == ’document’ ||
dw.getFocus() == ’textView’ || dw.getFocus("true") == ’html’ )
{
Un menu dynamique
173
var dom = dw.getDocumentDOM(’document’);
if (dom != null)
{
var parseMode = dom.getParseMode();
if (parseMode == ’html’ || parseMode == ’xml’)
bHavePreviewTarget = true;
}
}
return bHavePreviewTarget;
}
La fonction havePreviewTarget() définit la valeur bHavePreviewTarget sur false comme
valeur renvoyée par défaut. Cette fonction effectue deux tests de base en appelant la fonction
dw.getFocus() pour déterminer quelle partie de l’application est active. Lors du premier test,
elle vérifie que le panneau Site est actif (if (dw.getFocus(true) == ’site’)). Si ce n’est pas le
cas, elle vérifie, lors du second test, si un document (dw.getFocus() == ’document’), le mode
Texte (dw.getFocus() == ’textView’) ou l’inspecteur de code (dw.getFocus("true") ==
’html’) est actif. Si aucun test n’est vrai (true), la fonction renvoie la valeur false.
Si le panneau Site est actif, la fonction vérifie si l’affichage est défini sur distant. Si c’est le cas, la
fonction définit bHavePreviewTarget sur true, s’il existe des fichiers distants
(site.getRemoteSelection().length > 0) et que vous pouvez les ouvrir dans un navigateur
(site.canBrowseDocument()). Si l’affichage n’est pas distant, et s’il n’est pas défini sur Aucun, la
fonction obtient une liste des fichiers sélectionnés (var selFiles = site.getSelection();)
sous la forme d’URL file:///.
La fonction effectue un test sur chaque élément de la liste afin de vérifier si la chaîne de caractères
"://" y figure. Si ce n’est pas le cas, le code effectue une série de tests sur l’élément de la liste. Si
l’élément ne se présente pas sous la forme d’une URL file:/// (if
(selFile.indexOf(urlPrefix) == -1)), la valeur renvoyée est false. Si le reste de la chaîne
apparaissant après le préfixe file:/// ne contient pas de barre oblique (/) (if
(strTemp.indexOf("/") == -1)), la valeur renvoyée est définie sur false. Si le fichier n’existe
pas (else if (!DWfile.exists(selFile))), la valeur renvoyée est définie sur false. Enfin, la
fonction vérifie si le fichier spécifié est un dossier (else if
(DWfile.getAttributes(selFile).indexOf("D") != -1)). Si selfile est un dossier, la
fonction renvoie la valeur false. Autrement, si la cible est un fichier, la fonction définit
bHavePreviewTarget sur la valeur true.
Si un document, le mode Texte ou l’inspecteur de code est actif (else if (dw.getFocus() ==
’document’ || dw.getFocus() == ’textView’ || dw.getFocus("true") == ’html’ )),
la fonction obtient le DOM et vérifie s’il s’agit d’un document HTML ou XML. Si tel est le cas,
la fonction définit bHavePreviewTarget sur true. Enfin, la fonction renvoie la valeur stockée
dans bHavePreviewTarget.
174
Chapitre 8 : Menus et commandes de menu
receiveArguments()
Dreamweaver appelle la fonction receiveArguments() pour que la commande traite
tous les arguments provenant de l’élément de menu. En ce qui concerne le menu
Aperçu dans le navigateur, la fonction receiveArguments() appelle le
navigateur sélectionné par l’utilisateur. La fonction receiveArguments()
ressemble à ceci :
function receiveArguments()
{
var whichBrowser = arguments[0];
var theBrowser = null;
var i=0;
var browserList = null;
var result = false;
if (havePreviewTarget())
{
// Code pour vérifier si l’appel provient d’un raccourci clavier
if (whichBrowser == ’primary’ || whichBrowser == ’secondary’)
{
// pour obtenir le chemin du navigateur sélectionné
if (whichBrowser == ’primary’)
{
theBrowser = dw.getPrimaryBrowser();
}
else if (whichBrowser == ’secondary’)
{
theBrowser = dw.getSecondaryBrowser();
}
// pour faire correspondre le chemin avec le nom du navigateur
correspondant
// qui apparaît dans le menu
browserList = dw.getBrowserList();
while (i < browserList.length)
{
if (browserList[i+1] == theBrowser)
theBrowser = browserList[i];
i+=2;
}
}
else
theBrowser = whichBrowser;
// Lancer le navigateur uniquement si un navigateur valide est sélectionné
if (theBrowser != "file:///" && typeof(theBrowser) != "undefined" &&
theBrowser.length > 0)
{
if (dw.getFocus(true) == ’site’)
{
// Obtenir uniquement le premier élément de la sélection car
// browseDocument() ne peut prendre en charge un tableau.
//dw.browseDocument(site.getSelection()[0],theBrowser);
site.browseDocument(theBrowser);
}
else
dw.browseDocument(dw.getDocumentPath(’document’),theBrowser);
}
else
{
Un menu dynamique
175
// si l’utilisateur appuie sur les touches F12 ou Ctrl+F12,
// il doit indiquer s’il veut définir un navigateur principal ou
secondaire.
if (whichBrowser == ’primary’)
{
result = window.confirm(MSG_NoPrimaryBrowserDefined);
}
else if (whichBrowser == ’secondary’)
{
result = window.confirm(MSG_NoSecondaryBrowserDefined);
}
// Si l’utilisateur clique sur OK, les préférences s’affichent avec le
panneau du navigateur
if (result)
dw.showPreferencesDialog(’browsers’);
}
}
}
La fonction commence par définir la variable whichBrowser sur la valeur transmise par
Dreamweaver, arguments[0]. Outre la définition d’autres valeurs par défaut, la fonction définit
également le renvoi sur la valeur par défaut false.
Après avoir initialisé des variables, la fonction receiveArguments() appelle la fonction définie
par l’utilisateur havePreviewTarget() et teste le résultat. Si le résultat du test est vrai (true), la
fonction vérifie si l’utilisateur a sélectionné le navigateur principal ou secondaire. Dans ce cas, la
fonction définit la variable theBrowser sur le chemin du fichier exécutable qui lance le navigateur
(dw.getPrimaryBrowser() ou dw.getSecondaryBrowser()). La fonction effectue ensuite une
boucle qui examine la liste des navigateurs renvoyée par dw.getBrowsersList(). Si le chemin
vers un navigateur de la liste correspond au chemin vers le navigateur principal ou secondaire, la
fonction définit la variable theBrowser sur la valeur de correspondance dans browserList. La
valeur contient le nom du navigateur et le chemin vers le fichier exécutable qui lance le navigateur.
Si havePreviewTarget() renvoie la valeur false, la fonction définit la variable theBrowser sur
la valeur de la variable whichBrowser.
Ensuite, la fonction receiveArguments() teste la variable theBrowser afin de vérifier qu’elle ne
commence pas par un chemin, qu’elle n’est pas "non définie" ("undefined") et que sa taille est
supérieure à zéro. Si toutes ces conditions sont vraies (true) et que le panneau Site est actif, la
fonction receiveArguments() appelle la fonction site.browseDocument() pour qu’elle appelle
le navigateur sélectionné avec les fichiers sélectionnés dans le panneau Site. Si le panneau Site n’est
pas actif, la fonction receiveArguments() appelle la fonction dw.browseDocument() et lui
transmet le chemin du document actif et la valeur de la variable theBrowser, qui spécifie le nom
du navigateur à utiliser pour afficher le document.
Si l’utilisateur a entré des touches de raccourci (F12 ou Ctrl+F12) et qu’aucun navigateur
principal ou secondaire n’a été spécifié, une boîte de dialogue s’affiche pour en informer
l’utilisateur. Si l’utilisateur clique sur OK, la fonction appelle la fonction
dw.showPreferencesDialog() avec l’argument browsers pour que l’utilisateur puisse spécifier
un navigateur à ce stade.
176
Chapitre 8 : Menus et commandes de menu
CHAPITRE 9
Barres d’outils
Pour créer une nouvelle barre d’outils dans Macromedia Dreamweaver MX 2004, il suffit de créer
un fichier de définition de barre d’outils et de placer ce fichier dans le dossier Configuration/
Toolbars. Dans ce fichier de barre d’outils, vous définissez, à l’aide de quelques balises XML
personnalisées, des éléments tels que des boutons-poussoir, des boutons radio, des zones de texte
et des menus déroulants. Ensuite, vous attribuez des attributs et des commandes à ces éléments
pour définir leur aspect et leur comportement, et pouvez ajouter d’autres fichiers de barre d’outils
et des éléments de référence définis dans d’autres barres d’outils.
Fonctionnement des barres d’outils
Les barres d’outils sont définies par les fichiers XML et d’image localisés dans le dossier Toolbars
du dossier de configuration principal de Dreamweaver. Les barres d’outils par défaut de
Dreamweaver sont stockées dans le fichier toolbars.xml du dossier Configuration/Toolbars. Au
démarrage, Dreamweaver charge tous les fichiers de barre d’outils dans le dossier Toolbars. Pour
ajouter une nouvelle barre d’outils, vous pouvez simplement copier le fichier correspondant dans
le dossier Toolbars, plutôt que de modifier le fichier toolbars.xml original.
Les fichiers XML de barre d’outils définissent une ou plusieurs barres d’outils, ainsi que les
éléments qui les composent. Une barre d’outils est une liste d’éléments tels que des boutons, des
zones de texte, des menus déroulants, etc. Un élément de barre d’outils est un contrôle auquel
l’utilisateur peut accéder.
Certains types de contrôles de barre d’outils, tels que les boutons-poussoirs et les menus
déroulants, sont associés à une icône. Les icônes sont stockées dans le sous-dossier images du
dossier Toolbars. Elles sont généralement au format de fichier GIF ou JPEG, mais tous les formats
compatibles avec Dreamweaver sont acceptés. Les images pour les barres d’outils créées dans
Macromedia sont stockées dans le dossier Toolbars/images/MM.
Tout comme pour les menus, vous pouvez spécifier la fonction de chaque élément de la barre
d’outils en définissant ses attributs ou par l’intermédiaire d’un fichier de commandes. Les fichiers
de commandes des barres d’outils créées dans Macromedia sont stockés dans le dossier Toolbars/
MM.
Conseil : L’API de barre d’outils est compatible avec l’API de commandes de menu. Les contrôles de
barre d’outils peuvent ainsi réutiliser les fichiers de commandes des menus.
177
Contrairement aux menus, les éléments de barre d’outils peuvent être définis indépendamment
des barres d’outils qui les utilisent. Vous pouvez ainsi utiliser des éléments de barre d’outils dans
plusieurs barres d’outils en appliquant la balise itemref.
Lorsque Dreamweaver charge une barre d’outils pour la première fois, sa visibilité et sa position
sont déterminées par le fichier de définition de la barre d’outils. Par la suite, sa visibilité et sa
position sont enregistrées et restaurées à partir du registre (Windows) ou du fichier de préférences
Dreamweaver (Macintosh).
Comportement des barres d’outils
Sous Windows, les barres d’outils Dreamweaver se comportent, en général, comme les barres
d’outils standard du système. Les barres d’outils Dreamweaver présentent toutefois les
caractéristiques suivantes :
• Vous pouvez les ancrer, les détacher et les repositionner par rapport aux autres barres d’outils en
•
•
•
•
•
utilisant la fonction de glisser-déposer.
Vous pouvez les ancrer horizontalement sur le bord supérieur ou inférieur la fenêtre.
Dans l’espace de travail de Dreamweaver, qui intègre toutes les fenêtres de documents de
Dreamweaver dans un unique cadre parent, vous pouvez spécifier si les barres d’outils doivent
s’ancrer à l’espace de travail ou à la fenêtre de document.
Les barres d’outils ancrées à l’espace de travail de Dreamweaver n’apparaissent qu’une seule fois.
Elles fonctionnent toujours sur le document au premier plan. Dans l’espace de travail de
Dreamweaver, vous pouvez ancrer les barres d’outils au-dessus, en dessous, à gauche ou à droite
de la barre Insérer. Les barres d’outils ancrées à l’espace de travail de Dreamweaver ne sont pas
automatiquement désactivées lorsque la fenêtre de document est fermée. Les éléments de la
barre d’outils déterminent s’ils doivent rester actifs lorsque aucun document n’est ouvert.
Lorsque les barres d’outils sont ancrées sur la fenêtre de document, une instance s’affichera
pour chaque fenêtre. La barre d’outils attachée à une fenêtre de document est désactivée
lorsque la fenêtre dans laquelle elle est ancrée n’est pas la fenêtre active. Les gestionnaires de
mise à jour sont exécutés dès que leur fenêtre devient la fenêtre active.
Vous ne pouvez pas faire glisser les barres d’outils entre la fenêtre de document et l’espace de
travail de Dreamweaver.
La taille des barres d’outils ne change pas. La taille d’une barre d’état ne se réduit pas lorsque le
conteneur est réduit ou lorsque d’autres barres d’outils sont ajoutées.
Vous pouvez afficher ou masquer les barres d’outils à partir du menu Affichage > Barres
d’outils.
Les barres d’outils ne peuvent pas se chevaucher.
Lorsque vous faites glisser une barre d’outils, seul son contour s’affiche.
Sur Macintosh, les barres d’outils sont toujours attachées à la fenêtre de document. Vous pouvez
les afficher ou les masquer à partir du menu, mais vous ne pouvez pas les faire glisser, les
réorganiser ni les détacher.
178
Chapitre 9 : Barres d’outils
Fonctionnement des commandes de barres d’outils
Lorsque Dreamweaver dessine une barre d’outils, les événements suivants se produisent :
1 Pour chaque élément de contrôle de la barre d’outils, Dreamweaver détermine si l’attribut file
existe.
2 Si l’attribut file existe, Dreamweaver appelle la fonction canAcceptCommand() pour définir si
3
4
5
6
7
le contrôle doit être activé dans le contexte actuel du document.
Par exemple, dans la zone de texte Titre du document de la barre d’outils de Dreamweaver, la
fonction canAcceptCommand() vérifie l’existence d’un DOM et si le document actif est un
fichier HTML. Si ces deux conditions sont vérifiées, la fonction renvoie la valeur true et
Dreamweaver active la zone de texte dans la barre d’outils.
Si l’attribut file existe, Dreamweaver ignore les attributs suivants, s’ils sont spécifiés : checked,
command, DOMRequired, enabled, script, showif, update et value.
Si l’attribut file n’existe pas, Dreamweaver traite les attributs définis pour l’élément de
contrôle de la barre d’outils : checked, command, DomRequired, etc.
Pour plus d’informations sur les attributs de balises d’éléments spécifiques, voir Attributs de
balises d’éléments, page 189.
Dreamweaver appelle la fonction getCurrentValue() à chaque cycle de mise à jour, comme
spécifié par l’attribut update, pour déterminer la valeur de contrôle à afficher.
L’utilisateur sélectionne un élément dans la barre d’outils.
Dreamweaverappelle la fonction receiveArguments() pour traiter les arguments spécifiés par
l’attribut arguments de l’élément de la barre d’outils.
Pour plus d’informations sur le rôle des fonctions spécifiques dans l’API de commande de barre
d’outils, voir API de commande de la barre d’outils, page 194.
Fichier de définition de la barre d’outils
Une barre d’outils est une simple liste de boutons radio, boutons-poussoirs, zones de texte et
autres éléments de barre d’outils, éventuellement divisée par des balises separator. Chaque
élément de barre d’outils peut être une référence à un élément à l’aide de la balise itemref, une
séparation, à l’aide de la balise separator ou une définition complète d’élément de barre d’outils
pour une case à cocher ou une zone de texte, comme décrit, par exemple, dans Balises d’éléments de
barre d’outils, page 184.
Tous les fichiers de définition de barre d’outils commencent par les déclarations suivantes :
<?xml version="1.0" encoding="optional_encoding"?>
<!DOCTYPE toolbarset SYSTEM "-//Macromedia//DWExtension toolbar 5.0">
Si l’encodage est ignoré, Dreamweaver utilise l’encodage par défaut du système d’exploitation.
Après les déclarations, le fichier consiste en une simple balise toolbarset qui contient un
nombre indéfini des balises suivantes : balises toolbar, itemref, separator, include et
itemtype, dans lesquelles itemtype est button, checkbutton, radiobutton, menubutton,
dropdown, combobox, editcontrol ou colorpicker. L’exemple suivant, un extrait abrégé du
fichier toolbars.xml, représente la hiérarchie des balises dans le fichier de barre d’outils. Dans cet
exemple, les attributs d’éléments de barre d’outils qui sont décrits dans les sections suivantes, sont
remplacés par des (...).
Fichier de définition de la barre d’outils
179
<?xml version="1.0"?>
<!DOCTYPE toolbarset SYSTEM "-//Macromedia//DWExtension toolbar 5.0">
<toolbarset>
<!-- main toolbar -->
<toolbar id="DW_Toolbar_Main" label="Document">
<radiobutton id="DW_CodeView" . . ./>
<radiobutton id="DW_SplitView" . . ./>
<radiobutton id="DW_DesignView" . . ./>
<separator/>
<checkbutton id="DW_LiveDebug" . . ./>
<checkbutton id="DW_LiveDataView" . . ./>
<separator/>
<editcontrol id="DW_SetTitle" . . ./>
<menubutton id="DW_FileTransfer" . . ./>
<menubutton id="DW_Preview" . . ./>
<separator/>
<button id="DW_DocRefresh" . . ./>
<button id="DW_Reference" . . ./>
<menubutton id="DW_CodeNav" . . ./>
<menubutton id="DW_ViewOptions" . . ./>
</toolbar>
</toolbarset>
La section suivante décrit en détail chacune des balises de barre d’outils.
<toolbar>
Description
Définit une barre d’outils. Dreamweaver affiche les éléments et les séparateurs de gauche à droite
dans l’ordre spécifié et les met en forme automatiquement. Le fichier de barre d’outils ne spécifie
pas l’espacement entre les éléments, mais vous pouvez définir la largeur de certains types
d’éléments.
Attributs
id, label, {container}, {initiallyVisible}, {initialPosition}, {relativeTo}
•
•
•
180
id="id_unique" Obligatoire. Une chaîne d’identificateur doit être unique dans un fichier
ainsi que dans tous les fichiers inclus dans ce fichier. Les fonctions API JavaScript qui
manipulent une barre d’outils se réfèrent à cette dernière par son ID. Pour plus d’informations
sur ces fonctions, voir le Guide des API de Dreamweaver. Si deux barres d’outils dans un même
fichier possèdent le même ID, Dreamweaver affiche un message d’erreur.
label="string" Obligatoire. L’attribut label spécifie l’étiquette, une chaîne de caractères que
Dreamweaver affiche pour l’utilisateur. L’étiquette s’affiche dans le menu Affichage > Barre
d’outils et dans la barre de titre de la barre d’outils lorsque celle-ci est flottante.
container="mainframe" ou "document" Adopte par défaut la valeur "mainframe". Indique
la position d’ancrage de la barre d’outils dans l’espace de travail de Dreamweaver sous
Windows. Si le contenant indique "mainframe", la barre d’outils apparaît à l’extérieur de
l’espace de travail et fonctionne sur le document au premier plan. Si le contenant indique
"document", la barre d’outils apparaît dans chaque fenêtre de document. Sur Macintosh,
toutes les barres d’outils s’affichent dans chaque fenêtre de document.
Chapitre 9 : Barres d’outils
•
•
•
ou "false". Cette balise indique si la barre d’outils doit être
visible la première fois que Dreamweaver la charge depuis le dossier Toolbars. Après le premier
chargement, l’utilisateur contrôle sa visibilité. Dreamweaver enregistre l’état en cours dans le
registre système (Windows) ou dans le fichier de préférences de Dreamweaver (Macintosh)
lorsque l’utilisateur quitte Dreamweaver. Dreamweaver rétablit le paramètre à partir du registre
ou du fichier de préférences au redémarrage. Vous pouvez manipuler la visibilité de la barre
d’outils en utilisant les fonctions dom.getToolbarVisibility() et
dom.setToolbarVisibility(), comme décrit dans le Guide des API de Dreamweaver. Si vous
ne définissez pas une valeur pour l’attribut initiallyVisible, celui-ci adopte la valeur true.
initialPosition="top", "below" ou "floating". Indique la position initiale de la barre
d’outils définie par Dreamweaver, par rapport aux autres barres d’outils lors du premier
chargement. Les valeurs possibles de l’argument initialPosition sont décrites dans la liste
suivante :
■ top Il s’agit de la position par défaut, de façon à ce que la barre d’outils s’affiche en haut de
la fenêtre du document. Si plusieurs barres d’outils spécifient top pour un type de fenêtre
donné, elles apparaissent dans l’ordre de chargement dans Dreamweaver. Cet ordre risque
d’être aléatoire si les barres d’outils sont localisées dans des fichiers séparés.
■ below La barre d’outils apparaît au début de la ligne directement en dessous de la barre
d’outils spécifiée dans l’attribut relativeTo. Dreamweaver affiche un message d’erreur s’il
ne trouve pas la barre d’outils relativeTo. Si plusieurs barres d’outils spécifient below par
rapport à la même barre d’outils, elles apparaissent dans l’ordre de chargement dans
Dreamweaver. Cet ordre risque d’être aléatoire si les barres d’outils sont localisées dans des
fichiers séparés.
■ floating La barre d’outils n’est pas ancrée à la fenêtre ; elle flotte au-dessus du document.
Dreamweaver place automatiquement la barre d’outils de sorte qu’elle soit décalée par
rapport aux autres barres d’outils flottantes. Sur Macintosh, floating est traité de la même
façon que top.
Comme avec l’attribut initiallyVisible, l’attribut initialPosition s’applique
uniquement lors du premier chargement de la barre d’outils par Dreamweaver. Ensuite, la
position de la barre d’outils est enregistrée dans le registre ou dans le fichier de préférences de
Dreamweaver. Vous pouvez rétablir la position de la barre d’outils en utilisant la fonction
dom.setToolbarPosition(). Pour plus d’informations sur la fonction
dom.setToolbarPosition(), voir le Guide des API de Dreamweaver.
Si vous ne spécifiez pas une valeur pour l’attribut initialPosition, Dreamweaver positionne
la barre d’outils selon l’ordre de chargement.
relativeTo="id_barre_outils" Cet attribut est requis si l’attribut initialPosition
indique below. Dans les autres cas, cet argument est ignoré. Indique l’ID de la barre d’outils en
dessous de laquelle cette barre d’outils doit être placée.
initiallyVisible="true"
Contenu
La balise toolbar comprend les balises include, itemref et separator ainsi que des définitions
d’éléments individuels tels que button, combobox, dropdown, etc. Pour obtenir une description
des définitions d’éléments que vous pouvez spécifier, voir Balises d’éléments de barre d’outils,
page 184.
Contenant
La balise toolbarset.
Fichier de définition de la barre d’outils
181
Exemple
<toolbar id="MyDWedit_toolbar" label="Edit">
<include/>
Description
Charge les éléments de barre d’outils depuis le fichier spécifié avant de continuer à charger le
fichier en cours. Les éléments de barre d’outils définis dans le fichier inclus peuvent être référencés
dans le fichier en cours. Si un fichier tente plusieurs fois d’inclure un autre fichier, Dreamweaver
affiche un message d’erreur et ignore la fonction include. Les balises toolbar dans le fichier inclus
sont ignorées, mais les éléments dans ces barres d’outils restent disponibles comme références dans
le fichier en cours.
Attributs
• Le chemin de fichier, relatif au dossier Toolbars, du fichier XML de la barre d’outils à
inclure.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<include file="mine/editbar.xml"/>
<itemtype/>
Description
Définit un élément de barre d’outils. Les éléments de barre d’outils peuvent être des boutons, des
boutons radio, des boutons-poussoirs, des zones de liste modifiables, des menus déroulants, etc.
Pour obtenir la liste des types d’éléments de barre d’outils que vous pouvez définir, voir Balises
d’éléments de barre d’outils, page 184.
Attributs
Les attributs varient en fonction de l’élément que vous définissez. Pour obtenir la liste des
attributs que vous pouvez spécifier pour les éléments de barre d’outils, voir Attributs de balises
d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<button id="strikeout_button" .../>
182
Chapitre 9 : Barres d’outils
<itemref/>
Description
Fait référence à (et inclut dans la barre d’outils en cours) un élément de barre d’outils défini dans
une barre d’outils précédente ou en dehors de toutes les barres d’outils.
Attributs
id, {showIf}
•
•
Obligatoire. Il doit s’agir de l’ID d’un élément défini au préalable ou
inclus dans le fichier. Dreamweaver n’autorise pas les références en aval. Si une balise d’élément
de barre d’outils fait référence à un ID non défini, Dreamweaver affiche un message d’erreur et
ignore la référence.
showIf="script" Indique que cet élément apparaît uniquement sur la barre d’outils si le
script spécifié renvoie la valeur true. Par exemple, vous pouvez utiliser showIf pour afficher
certains boutons dans une application donnée uniquement, ou lorsqu’une page est écrite en
langage côté serveur, tel que ColdFusion, ASP ou JSP. Si vous ne spécifiez pas l’attribut
showIf, l’élément apparaît systématiquement. Dreamweaver vérifie cette propriété à chaque
fois que l’activateur de l’élément s’exécute ; c’est-à-dire, en fonction de la valeur de l’attribut
update. Vous devez utiliser cet attribut avec prudence. L’attribut showIf peut être utilisé dans
la définition de l’élément ou dans une référence à l’élément depuis une barre d’outils. Si la
définition et la référence spécifient toutes deux l’attribut showIf, Dreamweaver affiche
l’élément uniquement si les deux conditions sont vérifiées. L’attribut showIf est l’équivalent de
la fonction showIf() dans un fichier de commandes.
id="reference_id"
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<itemref id="strikeout_button">
<separator/>
Description
Insère un séparateur à l’emplacement en cours dans la barre d’outils.
Attributs
{showIf}
• L’attribut showif indique que le séparateur ne doit apparaître sur la barre d’outils que si le
script donné renvoie la valeur true. Par exemple, vous pouvez utiliser l’attribut showIf pour
afficher le séparateur uniquement dans une application donnée ou uniquement lorsque la page
contient un certain type de document. Si l’attribut showIf n’est pas spécifié, le séparateur
s’affiche systématiquement.
Contenu
Aucun.
Fichier de définition de la barre d’outils
183
Contenant
La balise toolbar.
Exemple
<separator/>
Balises d’éléments de barre d’outils
Chaque type d’éléments de barre d’outils possède sa propre balise et son propre ensemble
d’attributs obligatoires et facultatifs. Vous pouvez définir des éléments toolbar à l’intérieur ou à
l’extérieur des barres d’outils. En général, il est préférable de les définir à l’extérieur et de les
référencer à partir des barres d’outils à l’aide de la balise itemref.
Vous pouvez définir les types d’éléments suivants dans une barre d’outils.
<button>
Description
Ce bouton-poussoir exécute une commande spécifique lorsque vous cliquez dessus. Il ressemble
au bouton Référence de la barre d’outils de Dreamweaver et se comporte comme tel.
Attributs
id, image, tooltip, command, {showIf}, {disabledImage}, {overImage}, {label},
{file}, {domRequired}, {enabled}, {update}, {arguments}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<BUTTON ID="DW_DocRefresh"
image="Toolbars/images/MM/refresh.gif"
disabledImage="Toolbars/images/MM/refresh_dis.gif"
tooltip="Actualiser mode Création (F5)"
enabled="((dw.getDocumentDOM() != null) && (dw.getDocumentDOM().getView() !=
’browse’) && (!dw.getDocumentDOM().isDesignViewUpdated()))"
command="dw.getDocumentDOM().synchronizeDocument()"
update="onViewChange,onCodeViewSyncChange"/>
184
Chapitre 9 : Barres d’outils
<checkbutton>
Description
Un bouton-poussoir est un bouton qui peut être activé ou désactivé et qui exécute une commande
spécifique lorsqu’il est activé. Lorsqu’il est activé, il apparaît enfoncé et en surbrillance. Lorsqu’il
est désactivé, il apparaît plat. Dreamweaver implémente les états suivants pour les boutonspoussoirs : au passage de la souris ; enfoncé ; au passage de la souris si enfoncé ; désactivé si
enfoncé. Le gestionnaire spécifié par l’attribut checked ou par la fonction isCommandChecked()
doit garantir que le fait de cliquer sur ce bouton modifie son état.
Attributs
id, {showIf}, image, {disabledImage}, {overImage}, tooltip, {label}, {file},
{domRequired}, {enabled}, checked, {update}, command, {arguments}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<CHECKBUTTON ID="DW_LiveDebug"
image="Toolbars/images/MM/debugview.gif"
disabledImage="Toolbars/images/MM/globe_dis.gif"
tooltip="Débogage en direct"
enabled="dw.canLiveDebug()"
checked="dw.getDocumentDOM() != null && dw.getDocumentDOM().getView() ==
’browse’"
command="dw.toggleLiveDebug()"
showIf="dw.canLiveDebug()"
update="onViewChange"/>
<radiobutton>
Description
Le bouton radio se comporte comme le bouton-poussoir, mais apparaît en relief lorsqu’il est
désactivé. Dreamweaver implémente les états suivants pour les boutons radio : au passage de la
souris ; enfoncé ; au passage de la souris si enfoncé ; désactivé si enfoncé. Dreamweaver ne force
pas l’exclusion mutuelle entre les boutons radio. Le gestionnaire spécifié par l’attribut checked ou
par la fonction isCommandChecked() doit garantir que les états activé et désactivé des boutons
radio sont cohérents.
Les boutons radio fonctionnent comme les boutons des modes Code, Création et affichage à deux
volets de la barre d’outils de document de Dreamweaver.
Attributs
id, image, tooltip, checked, command, {showIf}, {disabledImage}, {overImage},
{label}, {file}, {domRequired}, {enabled}, {update}, {arguments}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Balises d’éléments de barre d’outils
185
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<RADIOBUTTON ID="DW_CodeView"
image="Toolbars/images/MM/codeView.gif"
disabledImage="Toolbars/images/MM/codeView_dis.gif"
tooltip="Afficher mode Code"
domRequired="false"
enabled="dw.getDocumentDOM() != null"
checked="dw.getDocumentDOM() != null && dw.getDocumentDOM().getView() ==
’code’"
command="dw.getDocumentDOM().setView(’code’)"
update="onViewChange"/>
<menubutton>
Description
Un bouton de menu est un bouton qui invoque le menu contextuel spécifié par l’attribut menuid.
Dreamweaver implémente les états survol de souris et pression pour les boutons de menu.
Dreamweaver ne dessine pas la flèche du menu (la flèche pointant vers le bas qui indique que les
éléments de menu sont attachés au bouton) ; vous devez l’inclure dans votre icône. Les boutons
Gestion de fichiers et Navigation dans le code sur la barre d’outils de document de Dreamweaver
sont des exemples de boutons de menu.
Attributs
id, image, tooltip, menuID, domRequired, enabled, {showIf}, {disabledImage},
{overImage}, {label}, {file}, {update}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<MENUBUTTON ID="DW_CodeNav"
image="Toolbars/images/MM/codenav.gif"
disabledImage="Toolbars/images/MM/codenav_dis.gif"
tooltip="Navigation dans le code"
enabled="dw.getFocus() == ’textView’ || dw.getFocus() == ’html’"
menuID="DWCodeNavPopup"
update="onViewChange"/>
186
Chapitre 9 : Barres d’outils
<dropdown>
Description
Un menu déroulant est un menu non modifiable qui exécute une commande spécifique attachée
à une fonction JavaScript lorsque vous sélectionnez une entrée et que le menu se met à jour. Ce
menu ressemble à l’option Format de l’inspecteur de propriétés de texte et fonctionne de la même
manière, mais s’affiche en taille standard et non en taille réduite comme dans l’inspecteur de
propriétés.
Attributs
id, tooltip, file, enabled, checked, value, command, {showIf}, {label},
{width}, {domRequired}, {update}, {arguments}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<dropdown id="Font_Example"
width="115"
tooltip="Police"
domRequired="false"
file="Toolbars/mine/fontExample.htm"
update="onSelChange"/>
<combobox>
Description
Une zone de liste est un menu déroulant modifiable qui exécute une commande lorsque vous
sélectionnez une entrée ou que vous apportez une modification dans la zone de texte, puis
changez la sélection. Le menu ressemble à l’option Police de l’inspecteur de propriétés de texte et
fonctionne de la même manière, mais s’affiche en taille standard et non en taille réduite comme
dans l’inspecteur de propriétés.
Attributs
id, file, tooltip, enabled, value, command, {showiI}, {label}, {width},
{domRequired}, {update}, {arguments}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Balises d’éléments de barre d’outils
187
Exemple
<COMBOBOX ID="Address_URL"
width="300"
tooltip="Adresse"
label="Address: "
file="Toolbars/MM/AddressURL.htm"
update="onBrowserPageBusyChange"/>
<editcontrol>
Description
Une zone de contrôle d’édition est une zone de texte modifiable qui exécute une commande
lorsque vous apportez une modification dans la zone de texte et changez la sélection.
Attributs
id, tooltip, file, value, command, {showIf}, {label}, {width}, {domRequired},
{enabled}, {update}, {arguments}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
Exemple
<EDITCONTROL ID="DW_SetTitle"
label="Title: "
tooltip="Titre du document"
width="150"
file="Toolbars/MM/EditTitle.htm"/>
<colorpicker>
Description
Un sélecteur de couleur est un panneau de couleurs, sans zone de texte associée, qui exécute une
commande lorsque l’utilisateur sélectionne une nouvelle couleur. Ce panneau ressemble au
sélecteur de couleur de l’inspecteur de propriétés de Dreamweaver et se comporte de la même
manière. Vous pouvez choisir une autre icône pour remplacer l’icône par défaut.
Attributs
id, tooltip, value, command, {showIf}, {image}, {disabledImage}, {overImage},
{label}, {colorRect}, {file}, {domRequired}, {enabled}, {update},
{arguments}
Pour obtenir une description de chaque attribut, voir Attributs de balises d’éléments, page 189.
Contenu
Aucun.
Contenant
La balise toolbar ou toolbarset.
188
Chapitre 9 : Barres d’outils
Exemple
<colorpicker id="Color_Example"
image="Toolbars/images/colorpickerIcon.gif"
disabledImage="Toolbars/images/colorpickerIconD.gif"
colorRect="0 12 16 16"
tooltip="Couleur du texte"
domRequired="false"
file="Toolbars/mine/colorExample.htm"
update="onSelChange"/>
Attributs de balises d’éléments
Les attributs de balises d’éléments de barre d’outils ont les significations suivantes :
id="unique_id"
Obligatoire. L’attribut id est l’identificateur de l’élément de barre d’outils. L’attribut id doit être
unique dans le fichier en cours, ainsi que dans tous les fichiers inclus dans le fichier en cours. La
balise itemref utilise l’id de l’élément pour référencer et inclure un élément dans une barre
d’outils.
Exemple
<button id="DW_DocRerefresh" . . . >
showIf="script"
Facultatif. Cet attribut précise que l’élément s’affiche sur la barre d’outils uniquement si le script
renvoie la valeur true. Par exemple, vous pouvez utiliser l’attribut showIf pour afficher certains
boutons uniquement lorsqu’une page est écrite dans un certain type de langage côté serveur, tel
que ColdFusion, ASP ou JSP. Si vous ne spécifiez pas l’attribut showIf, l’élément apparaît
systématiquement.
L’attribut showIf est vérifié à chaque fois que l’activateur de l’élément s’exécute ; c’est-à-dire, en
fonction de la valeur de l’attribut update. Il est conseillé d’utiliser l’attribut showIf avec
prudence.
Vous pouvez spécifier l’attribut showIf dans la définition de l’élément et dans une référence à
l’élément sur une balise itemref. Si la définition et la référence spécifient l’attribut showIf,
l’élément s’affiche uniquement si les deux conditions indiquent la valeur true. L’attribut showIf
est l’équivalent de la fonction showIf() dans un fichier de commandes de barre d’outils. Si vous
spécifiez l’attribut showIf et la fonction showif(), la fonction remplace l’attribut.
Exemple
showIf="dw.canLiveDebug()"
image="image_path"
Cet attribut est obligatoire pour les boutons, les boutons-poussoirs, les boutons radio, les boutons
de menu et de zone de liste modifiable. L’attribut image est facultatif pour les sélecteurs de
couleurs, et est ignoré pour les autres types d’éléments. L’attribut image spécifie le chemin, par
rapport au dossier Configuration, du fichier de l’icône qui s’affiche sur le bouton. En général, le
fichier de l’icône est au format GIF ou JPEG, mais tous les formats compatibles avec
Dreamweaver sont acceptés.
Attributs de balises d’éléments
189
Si vous spécifiez une icône pour un sélecteur de couleur, celle-ci le remplace entièrement. Si
l’attribut colorRect est également défini, la couleur en cours s’affiche au-dessus de l’icône dans le
rectangle spécifié.
Exemple
image="Toolbars/images/MM/codenav.gif"
disabledImage="image_path"
Facultatif. Dreamweaver ignore l’attribut disabledImage des éléments autres que les boutons, les
boutons-poussoirs, les boutons radio, les boutons de menu, de sélecteurs de couleurs et de zone de
liste modifiable. Cet attribut spécifie le chemin, par rapport au dossier Configuration, du fichier
de l’icône que Dreamweaver affiche si le bouton est désactivé. Si vous ne spécifiez pas l’attribut
disabledImage, Dreamweaver affiche l’image spécifiée dans l’attribut image lorsque le bouton
est désactivé.
Exemple
disabledImage="Toolbars/images/MM/codenav_dis.gif"
overImage="image_path"
Facultatif. Dreamweaver ignore l’attribut overImage des éléments autres que les boutons, les
boutons-poussoirs, les boutons radio, les boutons de menu, de sélecteurs de couleurs et de zone de
liste modifiable. Cet attribut spécifie le chemin, par rapport au dossier Configuration, du fichier
de l’icône que Dreamweaver affiche lorsque l’utilisateur survole le bouton à l’aide de la souris. Si
vous ne spécifiez pas l’attribut overImage, le bouton ne change pas lorsque l’utilisateur le survole,
mais Dreamweaver dessine un cercle autour du bouton.
Exemple
overImage="Toolbars/images/MM/codenav_ovr.gif"
tooltip="tooltip string"
Obligatoire. Cet attribut spécifie le texte d’identification ou info-bulle qui apparaît lorsque le
curseur de la souris survole l’élément de la barre d’outils.
Exemple
tooltip="Code Navigation"
label="label string"
Facultatif. L’attribut spécifie l’étiquette qui s’affiche à côté de l’élément. Dreamweaver n’ajoute pas
automatiquement deux points aux étiquettes. Les étiquettes des éléments autres que les boutons
s’affichent toujours à gauche de l’élément. Dreamweaver place les étiquettes des boutons,
boutons-poussoirs, boutons radio, de menu et de zone de liste modifiable à l’intérieur du bouton
et à droite de l’icône.
Exemple
label="Title: "
190
Chapitre 9 : Barres d’outils
width="number"
Facultatif. Cet attribut ne s’applique qu’aux éléments de zone de texte, menu contextuel et zone
de liste en spécifiant la largeur de l’élément en pixels. Si vous ne spécifiez pas l’attribut width,
Dreamweaver utilise une largeur par défaut moyenne.
Exemple
width="150"
menuID="menu_id"
Cet attribut est requis pour les boutons de menu et les zones de liste, excepté si vous spécifiez la
fonction getMenuID() dans un fichier de commande associé. Dreamweaver ignore l’attribut
menuID pour les autres types d’éléments. Cet attribut spécifie l’ID de la barre de menu contenant
le menu contextuel qui doit apparaître lorsque l’utilisateur clique sur le bouton, le bouton de
menu ou de liste. L’ID provient de l’attribut ID d’une balise menubar dans le fichier menus.xml.
Exemple
menuID="DWCodeNavPopup"
colorRect="left top right bottom"
L’attribut est facultatif pour les sélecteurs de couleur qui disposent d’un attribut image. L’attribut
est ignoré pour tous les autres types d’éléments, ainsi que pour les sélecteurs de
couleurs qui ne spécifient pas une image. Si vous spécifiez l’attribut colorRect, Dreamweaver
affiche la couleur couramment sélectionnée dans le sélecteur de couleur, dans le rectangle, par
rapport au côté gauche ou supérieur de l’icône. Si vous ne spécifiez pas l’attribut colorRect,
Dreamweaver n’affiche pas la couleur couramment sélectionnée sur l’image.
colorRect
Exemple
colorRect=”0 12 16 16”
file="command_file_path"
Obligatoire pour les menus déroulants et les zones de liste modifiables. L’attribut file est
facultatif pour les autres types d’éléments. L’attribut file spécifie le chemin, par rapport au
dossier Configuration, du fichier de commandes contenant les fonctions JavaScript qui serviront à
renseigner, mettre à jour et exécuter l’élément. L’attribut file remplace les attributs enabled,
checked, value, update, domRequired, menuID, showIf et command. En général, si vous
spécifiez un fichier de commandes avec l’attribut file, Dreamweaver ignore tous les attributs
équivalents spécifiés dans la balise. Pour plus d’informations sur les fichiers de commandes, voir
API de commande de la barre d’outils, page 194.
Exemple
file="Toolbars/MM/EditTitle.htm"
Attributs de balises d’éléments
191
domRequired="true" ou "false"
Facultatif. Comme avec les menus, l’attribut domRequired spécifie si le mode Création doit être
synchronisé avec le mode Code avant que Dreamweaver exécute la commande associée. Si vous ne
définissez pas cet attribut, il adopte la valeur true. Cet attribut est l’équivalent de la fonction
isDOMRequired() dans un fichier de commandes de barre d’outils.
Exemple
domRequired="false"
enabled="script"
Facultatif. Comme avec les menus, le script renvoie une valeur spécifiant si l’élément est activé. Si
vous ne définissez pas cet attribut, il adopte la valeur enabled. L’attribut enabled est l’équivalent
de la fonction canAcceptCommand() dans un fichier de commandes de barre d’outils.
Exemple
enabled="dw.getFocus() == ’textView’ || dw.getFocus() == ’html’"
checked="script"
Cet attribut est obligatoire pour les boutons-poussoirs et radio. Dreamweaver ignore l’attribut
pour les autres types d’éléments. Comme avec les menus, le script renvoie une valeur
spécifiant si l’élément est activé ou pas. L’attribut checked est l’équivalent de la fonction
isCommandChecked() dans un fichier de commandes de barre d’outils. Si vous ne définissez pas
cet attribut, il adopte la valeur unchecked.
checked
Exemple
checked="dw.getDocumentDOM() != null && dw.getDocumentDOM().getView() ==
’code’"
value="script"
Cet attribut est obligatoire pour les menus déroulants, les zones de liste modifiables, les zones de
texte et les sélecteurs de couleurs. Dreamweaver ignore l’attribut value pour les autres types
d’éléments.
Pour déterminer la valeur à afficher pour les menus déroulants et les zones de liste modifiables,
Dreamweaver appelle d’abord la fonction isCommandchecked() pour chaque élément dans le
menu. Si la fonction isCommandchecked() renvoie la valeur true pour un élément,
Dreamweaver affiche la valeur du premier. Si aucun élément ne renvoie la valeur true ou si la
fonction isCommandChecked() n’est pas définie, Dreamweaver appelle la fonction
getCurrentValue() ou exécute le script spécifié par l’attribut value. Si le contrôle est une zone
de liste modifiable, Dreamweaver affiche la valeur renvoyée. Si le contrôle est un menu déroulant,
Dreamweaver ajoute temporairement la valeur renvoyée dans la liste et l’affiche.
Dans tous les autres cas, le script renvoie la valeur en cours à afficher. Pour les menus déroulants
ou les zones de liste modifiables, cette valeur doit correspondre à l’un des éléments dans la liste du
menu. Pour les zones de liste modifiables et les zones de texte, la valeur peut correspondre à une
chaîne quelconque renvoyée par le script. Pour les sélecteurs de couleurs, la valeur doit être une
couleur valide, mais Dreamweaver ne met pas ceci en vigueur.
L’attribut value est l’équivalent de la fonction getCurrentValue() dans un fichier de
commandes de barre d’outils.
192
Chapitre 9 : Barres d’outils
update="update_frequency_list"
Facultatif. Cet attribut spécifie la fréquence d’exécution des gestionnaires des attributs enabled,
et value pour mettre à jour l’état visible de l’élément. L’attribut update est
l’équivalent de la fonction receiveArguments() dans un fichier de commandes de barre d’outils.
checked, showif
Vous devez spécifier la fréquence de la mise à jour des éléments de barre d’outils car ces éléments,
contrairement aux éléments de menu, sont toujours visibles. C’est pourquoi vous devez toujours
sélectionner la fréquence la moins élevée possible et vous assurer que les gestionnaires des attributs
enabled, checked et value sont aussi simples que possible.
La liste suivante présente les gestionnaires possibles pour la fonction
liste_fréquence_mise_à_jour, dans l’ordre croissant de fréquence. Si vous ne définissez pas
une valeur pour l’attribut update, la fréquence de mise à jour prend la valeur onEdit. Vous
pouvez spécifier plusieurs fréquences de mise à jour, séparées par des virgules. Les gestionnaires
s’exécutent sur l’un des événements spécifiés suivants :
•
•
•
•
•
•
s’exécute lorsque le modèle de serveur de la page en cours change.
onCodeViewSyncChange s’exécute lorsque le mode Code se synchronise ou se désynchronise
avec le mode Création.
onViewChange s’exécute chaque fois que l’utilisateur bascule entre les modes Code et Création,
ou entre les modes Code, Création et affichage à deux volets.
onEdit s’exécute chaque fois que le document est modifié en mode Création. Les
modifications apportées en mode Code ne déclenchent pas cet événement.
onSelChange s’exécute chaque fois que la sélection est modifiée en mode Création. Les
modifications apportées en mode Code ne déclenchent pas cet événement.
onEveryIdle s’exécute régulièrement lorsque l’application est inactive. Ceci peut demander un
certain temps car les gestionnaires enabler/checked/showif/value sont exécutés
fréquemment. Utilisez-la uniquement pour les boutons dont l’état actif doit être modifié
rapidement à des moments spécifiques.
onServerModelChange
Remarque : En réalité, dans tous ces cas, Dreamweaver exécute les gestionnaires après
l’événement spécifié, lorsque l’application est au repos. L’exécution des gestionnaires après chaque
modification ou changement de sélection n’est pas garantie ; les gestionnaires s’exécutent dès que
possible après une série de modifications ou de changements de sélection. Par contre, les
gestionnaires s’exécutent lorsque l’utilisateur clique sur un élément de barre d’outils.
Exemple
update="onViewChange"
command="script"
Cet attribut est obligatoire pour tous les éléments sauf pour les boutons de menu. Dreamweaver
ignore l’attribut command pour les boutons de menu. Spécifie la fonction JavaScript à exécuter
lorsque l’utilisateur effectue l’une des opérations suivantes :
• L’utilisateur clique sur un bouton.
• L’utilisateur sélectionne un élément dans un menu déroulant ou dans une zone de liste.
• L’utilisateur appuie sur la touche Tab pour passer à une autre zone, appuie sur la touche Retour
•
ou clique hors d’une zone de texte ou de liste.
L’utilisateur sélectionne une couleur dans un sélecteur de couleur.
Attributs de balises d’éléments
193
L’attribut command est l’équivalent de la fonction receiveArguments() dans un fichier de
commandes de barre d’outils.
Exemple
command="dw.toggleLiveDebug()"
arguments="argument_list"
Facultatif. Cet attribut spécifie la liste d’arguments, séparés par des virgules, pour transmettre la
fonction receiveArguments() à un fichier de commandes de barre d’outils. Si vous ne définissez
pas l’attribut arguments, Dreamweaver transmet l’ID de l’élément de la barre d’outils. En outre,
les menus déroulants, les zones de liste modifiables, les zones de texte et les sélecteurs de couleurs
transmettent leur valeur en cours comme premier argument, avant ceux spécifiés par l’attribut
arguments et avant l’ID de l’élément si aucun argument n’est spécifié.
Exemple
Dans une barre d’outils qui comporte les boutons Annuler et Répéter, chaque bouton appelle le
fichier de commandes de menu, Edit_Clipboard.htm, et transmet un argument spécifiant
l’action, comme indiqué dans l’exemple suivant :
<button id="DW_Undo"
image="Toolbars/images/MM/undo.gif"
disabledImage="Toolbars/images/MM/undo_dis.gif"
tooltip="Undo"
file="Menus/MM/Edit_Clipboard.htm"
arguments="’undo’"
update="onEveryIdle"/>
<button id="DW_Redo"
image="Toolbars/images/MM/redo.gif"
disabledImage="Toolbars/images/MM/redo_dis.gif"
tooltip="Redo"
file="Menus/MM/Edit_Clipboard.htm"
arguments="’redo’"
update="onEveryIdle"/>
API de commande de la barre d’outils
Dans de nombreux cas où vous avez spécifié un script pour un attribut, vous pouvez également
implémenter cet attribut à l’aide d’une fonction JavaScript dans un fichier de commandes. Cette
action est nécessaire lorsque les fonctions doivent accepter des arguments, comme dans le
gestionnaire d’une zone de texte, et obligatoire pour les menus déroulants et les zones de liste
modifiables.
L’API du fichier de commandes pour les éléments de la barre d’outils est une extension de l’API
du fichier de commandes de menu ; vous pouvez ainsi réutiliser les fichiers de commandes de
menu en tant que fichiers de commandes de barre d’outils en leur ajoutant des fonctions
supplémentaires spécifiques aux barres d’outils.
194
Chapitre 9 : Barres d’outils
canAcceptCommand()
Disponibilité
Dreamweaver MX.
Description
Détermine si la barre d’outils est activée. La condition par défaut d’un élément étant l’état activé,
vous n’avez pas besoin de définir cette fonction, sauf si la valeur false est renvoyée dans au moins
un cas.
Arguments
Dans le cas des menus déroulants, zones de liste modifiables, zones de texte et sélecteurs de
couleurs, le premier argument est la valeur en cours dans le contrôle. La fonction
getDynamicContent() peut, éventuellement, associer des ID individuels aux éléments d’un
menu déroulant. Si l’élément sélectionné dans le menu déroulant dispose d’un ID, Dreamweaver
transmet cet ID à la fonction canAcceptCommand() au lieu de transmettre la valeur. En ce qui
concerne les zones de liste modifiables, si le contenu actuel de la zone de texte ne correspond pas à
une entrée dans le menu déroulant, Dreamweaver transmet le contenu de la zone de texte.
Dreamweaver compare le contenu de la liste avec celui du menu déroulant, sans tenir compte des
majuscules et des minuscules, afin de vérifier la correspondance des éléments.
Si vous spécifiez l’attribut arguments pour cet élément de la barre d’outils dans le fichier
toolbars.xml, les arguments sont transmis ensuite. Si vous n’avez pas défini l’attribut arguments,
Dreamweaver transmet l’ID de l’élément.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si l’élément est activé, false dans les autres cas.
Exemple
function canAcceptCommand()
{
return (dw.getDocumentDOM() != null);
}
getCurrentValue()
Disponibilité
Dreamweaver MX.
Description
Renvoie la valeur en cours pour afficher l’élément. Dreamweaver appelle la fonction
getCurrentValue() pour les menus déroulants, les zones de liste modifiables, les zones de texte
et les sélecteurs de couleurs. Pour les menus déroulants, la valeur en cours doit représenter l’un des
éléments dans le menu. Si ce n’est pas le cas, Dreamweaver sélectionne le premier élément de la
liste. Pour les zones de liste modifiables et les zones de texte, cette valeur peut correspondre à une
chaîne quelconque renvoyée par la fonction. Pour les sélecteurs de couleurs, la valeur doit être une
couleur valide, mais Dreamweaver ne force pas cette condition. Cette fonction est l’équivalent de
l’attribut value.
API de commande de la barre d’outils
195
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend l’affichage d’une chaîne contenant la valeur en cours. Pour le sélecteur de
couleur, la chaîne contient la forme RVB de la couleur sélectionnée (par exemple #FFFFFF pour
le blanc).
Exemple
function getCurrentValue()
{
var title = "";
var dom = dw.getDocumentDOM();
if (dom)
title = dom.getTitle();
return title;
}
getDynamicContent()
Disponibilité
Dreamweaver MX.
Description
Cette fonction est obligatoire pour les menus déroulants et les zones de liste modifiables. Comme
pour les menus, cette fonction renvoie un tableau de chaînes pour renseigner le menu déroulant.
Chacune de ces chaînes peut éventuellement se terminer par ";id=id". Si un ID est spécifié,
Dreamweaver le transmet à la fonction receiveArguments() au lieu de faire apparaître la chaîne
dans le menu.
Le nom getDynamicContent() prête à confusion car cette fonction doit être utilisée même si la
liste des entrées dans le menu est fixe. Par exemple, le fichier Text_Size.htm du dossier
Configuration/Menus/MM n’est pas un menu dynamique ; il est conçu pour être appelé depuis
des éléments statiques d’un ensemble de menus. Toutefois, l’ajout d’une fonction
getDynamicContent() renvoyant une liste de tailles de police possibles permet d’utiliser le même
fichier de commandes dans un menu déroulant de barre d’outils. Les éléments de barre d’outils
ignorent les caractères de soulignement dans les chaînes des tableaux renvoyés, pour vous
permettre de réutiliser les fichiers de commandes de menu. Dans le fichier de commandes de
menu, Dreamweaver ignore la fonction getDynamicContent() car l’élément de menu n’est pas
marqué comme dynamique.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un tableau de chaînes pour renseigner le menu.
196
Chapitre 9 : Barres d’outils
Exemple
function getDynamicContent()
{
var items = new Array;
var filename = dw.getConfigurationPath() + "/Toolbars/MM/AddressList.xml";
var location = MMNotes.localURLToFilePath(filename);
if (DWfile.exists(location))
{
var addressData = DWfile.read(location);
var addressDOM = dw.getDocumentDOM(dw.getConfigurationPath() +
’/Shared/MM/Cache/empty.htm’);
addressDOM.documentElement.outerHTML = addressData;
var addressNodes = addressDOM.getElementsByTagName("url");
if (addressNodes.length)
{
for (var i=0; i < addressNodes.length ; i++ )
{
items[i] = addressNodes[i].address + ";id=’" +
addressNodes[i].address + "’";
}
}
}
return items;
getMenuID()
Disponibilité
Dreamweaver MX.
Description
Valide uniquement pour les boutons de menu. Dreamweaver appelle la fonction getMenuID()
pour obtenir l’ID du menu devant apparaître lorsque l’utilisateur clique sur le bouton.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une chaîne contenant un ID de menu, défini dans le fichier menus.xml.
API de commande de la barre d’outils
197
Exemple
function getMenuID()
{
var dom = dw.getDocumentDOM();
var menuID = ’’;
if (dom)
{
var view = dom.getView();
var focus = dw.getFocus();
if (view == ’design’)
{
menuID = ’DWDesignOnlyOptionsPopup’;
}
else if (view == ’split’)
{
if (focus == ’textView’)
{
menuID = ’DWSplitCodeOptionsPopup’;
}
else
{
menuID = ’DWSplitDesignOptionsPopup’;
}
}
else if (view == ’code’)
{
menuID = ’DWCodeOnlyOptionsPopup’;
}
else
{
menuID = ’DWBrowseOptionsPopup’;
}
}
return menuID;
}
getUpdateFrequency()
Disponibilité
Dreamweaver MX.
Description
Spécifie la fréquence d’exécution des gestionnaires des attributs enabled, checked, showif et
value pour mettre à jour l’état visible de l’élément.
Vous devez spécifier la fréquence de la mise à jour des éléments de barre d’outils car ces éléments,
contrairement aux éléments de menu, sont toujours visibles. C’est pourquoi vous devez toujours
choisir la fréquence la moins élevée possible et vous assurer que les gestionnaires des attributs
enabled, checked et value sont aussi simples que possible.
Cette fonction est l’équivalent de l’attribut update dans un élément de barre d’outils.
Arguments
Aucun.
198
Chapitre 9 : Barres d’outils
Valeurs renvoyées
Dreamweaver attend une chaîne contenant la liste des gestionnaires de mise à jour, séparés par des
virgules. Pour obtenir la liste complète des gestionnaires de mise à jour possibles, voir
update="update_frequency_list", page 193.
Exemple
function getUpdateFrequency()
{
return onSelChange”;
}
isCommandChecked()
Disponibilité
Dreamweaver MX.
Description
Renvoie une valeur indiquant si l’élément est sélectionné. Dans le cas des boutons, l’attribut
checked indique si le bouton apparaît activé ou enfoncé. La fonction isCommandChecked() est
l’équivalent de l’attribut checked dans une balise d’élément de barre d’outils.
Arguments
Dans le cas des menus déroulants, zones de liste modifiables, zones de texte et sélecteurs de
couleurs, le premier argument est la valeur en cours dans le contrôle. La fonction
getDynamicContent() peut, éventuellement, associer des ID individuels aux éléments d’un
menu déroulant. Si l’élément sélectionné dans le menu dispose d’un ID, Dreamweaver transmet
cet ID à la fonction isCommandChecked() au lieu de transmettre la valeur. En ce qui concerne les
zones de liste modifiables, si le contenu actuel de la zone de texte ne correspond pas à une entrée
dans le menu déroulant, Dreamweaver transmet le contenu de la zone de texte. Dreamweaver
compare le contenu de la zone de liste avec celui du menu déroulant, sans tenir compte des
majuscules et des minuscules, pour vérifier la correspondance des éléments.
Si vous avez spécifié l’attribut arguments pour cet élément, les arguments sont transmis ensuite.
Si vous ne définissez pas l’attribut arguments, Dreamweaver transmet l’ID de l’élément.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si l’élément est activé, false dans les autres cas.
Exemple
L’exemple suivant détermine quel élément, le cas échéant, doit être activé dans un menu déroulant
contenant des formats de paragraphe et des styles CSS :
function isCommandChecked()
{
var bChecked = false;
var style = arguments[0];
var textFormat = dw.getDocumentDOM().getTextFormat();
if (dw.getDocumentDOM() == null)
bChecked = false;
API de commande de la barre d’outils
199
if (style == "(None)")
bChecked = (dw.cssStylePalette.getSelectedStyle() == ’’ || textFormat ==
"" || textFormat == "P" || textFormat == "PRE");
else if (style == "Heading 1")
bChecked = (textFormat == "h1");
else if (style == "Heading 2")
bChecked = (textFormat == "h2");
else if (style == "Heading 3")
bChecked = (textFormat == "h3");
else if (style == "Heading 4")
bChecked = (textFormat == "h4");
else if (style == "Heading 5")
bChecked = (textFormat == "h5");
else if (style == "Heading 6")
bChecked = (textFormat == "h6");
else
bChecked = (dw.cssStylePalette.getSelectedStyle() == style);
return bChecked;
}
isDOMRequired()
Disponibilité
Dreamweaver MX.
Description
Spécifie si la commande de barre d’outils nécessite un DOM valide pour fonctionner. Si cette
fonction renvoie la valeur true ou si la fonction n’est pas définie, Dreamweaver suppose que la
commande nécessite un DOM valide et synchronise les modes Code et Création du document
avant de l’exécuter. Cette fonction est l’équivalent de l’attribut domRequired dans une balise
d’élément de barre d’outils.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le DOM est obligatoire, false s’il ne l’est
pas.
Exemple
function isDOMRequired()
{
return false;
}
200
Chapitre 9 : Barres d’outils
receiveArguments()
Disponibilité
Dreamweaver MX.
Description
Traite tous les arguments transmis depuis un élément de barre d’outils. La fonction
receiveArguments() est l’équivalent de l’attribut command dans une balise d’élément de barre
d’outils.
Arguments
Dans le cas des menus déroulants, zones de liste modifiables, zones de texte et sélecteurs de
couleurs, le premier argument est la valeur en cours dans le contrôle. La fonction
getDynamicContent() peut, éventuellement, associer des ID individuels aux éléments d’un
menu déroulant. Si l’élément sélectionné dans le menu contextuel déroulant dispose d’un ID,
Dreamweaver transmet cet ID à la fonction receiveArguments() au lieu de transmettre la
valeur. En ce qui concerne les zones de liste modifiables, si le contenu actuel de la zone de texte ne
correspond pas à une entrée dans le menu déroulant, Dreamweaver transmet le contenu de la zone
de texte. Dreamweaver compare le contenu de la zone de liste avec celui du menu déroulant, sans
tenir compte des majuscules et des minuscules, pour vérifier la correspondance des éléments.
Si vous avez spécifié l’attribut arguments pour cet élément, les arguments sont transmis ensuite.
Si vous n’avez pas défini l’attribut arguments, Dreamweaver transmet l’ID de l’élément.
Valeurs renvoyées
Dreamweaver n’attend rien.
Exemple
function receiveArguments(newTitle)
{
var dom = dw.getDocumentDOM();
if (dom)
dom.setTitle(newTitle);
}
showIf()
Disponibilité
Dreamweaver MX.
Description
Indique qu’un élément apparaît sur la barre d’outils uniquement si la fonction renvoie la valeur
true. Par exemple, vous pouvez utiliser la fonction showIf() pour afficher certains boutons
uniquement lorsque la page utilise un modèle de serveur donné. Si vous ne définissez pas la
fonction showif(), l’élément s’affiche toujours. La fonction showIf() est l’équivalent de
l’attribut showIf dans une balise d’élément de barre d’outils.
La fonction showIf() est appelée à chaque fois que l’activateur de l’élément s’exécute ; c’est-àdire, en fonction de la valeur renvoyée par la fonction getUpdateFrequency().
API de commande de la barre d’outils
201
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si l’élément s’affiche, false si ce n’est pas le cas.
Exemple
fonction showif()
{
var retval = false;
var dom = dw.getDocumentDOM();
if(dom)
{
var view = dom.getView();
if(view == ‘design’)
{
retval = true;
}
}
return retval;
}
Fichier de commandes de barre d’outils simple
Cet exemple simple implémente un élément de zone de texte Titre comme indiqué sur la barre
d’outils de document dans Dreamweaver. L’élément de zone de texte permet à l’utilisateur d’entrer
un nom pour le document Dreamweaver en cours. Procédez comme suit pour implémenter cet
exemple de barre d’outils :
1 Création de l’élément de zone de texte
2 Rédaction du code JavaScript
3 Insertion du fichier dans le dossier Toolbars
Création de la zone de texte
L’élément de barre d’outils editcontrol suivant définit une zone de texte modifiable nommée
Titre :
<EDITCONTROL ID="DW_SetTitle"
label="Titre: "
tooltip="Titre du document"
width="150"
file="Toolbars/MM/EditTitle.htm"/>
L’attribut tooltip active dans Dreamweaver l’affichage de la mention Titre du document dans
une info-bulle lorsque l’utilisateur positionne le curseur sur la zone de texte. L’attribut width
définit la taille du champ en pixels. L’attribut file précise que le fichier EditTitle.htm contient les
fonctions JavaScript qui agissent sur la zone de texte.
L’illustration suivante présente la zone de texte modifiable Titre :
202
Chapitre 9 : Barres d’outils
Rédaction du code JavaScript
Lorsque l’utilisateur agit sur la zone de texte, Dreamweaver invoque le fichier de commandes
EditTitle.htm dans le dossier Toolbars/MM. Ce fichier contient trois fonctions JavaScript qui
agissent sur la zone de texte Titre. Ces fonctions sont canAcceptCommand(),
receiveArguments() et getCurrentValue().
canAcceptCommand() : active l’élément de la barre d’outils
La fonction canAcceptCommand() se compose d’une ligne de code qui s’assure qu’un DOM est
disponible et que le document est analysé comme HTML. La fonction renvoie le résultat de ces
tests. Si les conditions renvoient la valeur true, Dreamweaver active l’élément de zone de texte sur
la barre d’outils. Si la fonction renvoie la valeur false, Dreamweaver désactive l’élément.
function canAcceptCommand()
{
return (dw.getDocumentDOM() != null && dw.getDocumentDOM().getParseMode() ==
’html’);
}
receiveArguments() : définit le titre
Dreamweaver appelle la fonction receiveArguments(), présentée dans l’exemple suivant,
lorsque l’utilisateur entre une valeur dans la zone de texte Titre du document et appuie sur la
touche Entrée, ou sélectionne une autre commande :
function receiveArguments(newTitle)
{
var dom = dw.getDocumentDOM();
if (dom)
dom.setTitle(newTitle);
}
Dreamweaver transmet newTitle, à savoir la valeur entrée par l’utilisateur, à la fonction
receiveArguments(). La fonction receiveArguments() vérifie immédiatement s’il existe un
DOM. Si c’est le cas, la fonction receiveArguments() définit le titre du nouveau document en
transmettant newTitle à la fonction dom.setTitle().
getCurrentValue() : recherche le titre
Lorsqu’un cycle de mise à jour survient, selon la fréquence par défaut déterminée dans le
gestionnaire d’événements onEdit, Dreamweaver appelle la fonction getCurrentValue() pour
déterminer la valeur à afficher pour le contrôle. La fréquence de mise à jour par défaut du
gestionnaire d’événements onEdit détermine la fréquence de mise à jour car le contrôle de zone
de texte de Titre ne dispose pas d’attribut update.
Pour la zone de texte Titre du document, la fonction getCurrentValue() suivante appelle la
fonction dom.getTitle() de l’API JavaScript pour obtenir et renvoyer le titre en cours :
function getCurrentValue()
{
var title = "";
var dom = dw.getDocumentDOM();
if (dom)
title = dom.getTitle();
return title;
}
Fichier de commandes de barre d’outils simple
203
La fonction getTitle() renvoie la valeur Document sans nom, affichée dans la zone de texte, en
attendant que l’utilisateur attribue un titre au document. Après la saisie d’un titre par l’utilisateur,
la fonction getTitle() renvoie cette valeur et Dreamweaver l’affiche comme nouveau titre du
document.
Insertion des fichiers dans le dossier Toolbars
Pour ajouter une barre d’outils dans Dreamweaver, placez le fichier XML contenant la définition
de barre d’outils dans le dossier Configuration de Dreamweaver. Pour voir la définition complète
de la barre d’outils Document de Dreamweaver, reportez-vous à la barre d’outils principale
(id="DW_Toolbar_Main") dans le fichier toolbars.xml. Pour voir le fichier HTML complet qui
contient les fonctions JavaScript pour la zone de texte Titre du document, reportez-vous au fichier
EditTitle.htm dans le dossier Toolbars/MM.
Remarque : Le dossier MM est réservé aux fichiers Macromedia Créez un nouveau dossier dans le
dossier Toolbars afin d’y stocker votre code JavaScript.
204
Chapitre 9 : Barres d’outils
CHAPITRE 10
Rapports
Utilisez les fonctions de l’API de rapports pour créer des rapports personnalisés ou modifier le jeu
de rapports prédéfinis fournis avec Dreamweaver MX 2004. Les rapports de site sont accessibles
uniquement à partir de la boîte de dialogue Rapports du site.
Vous pouvez utiliser l’API de fenêtre Résultats pour créer un rapport autonome. Les rapports
autonomes sont des commandes normales qui utilisent directement l’API de la fenêtre des
résultats plutôt que l’API de rapports. Les rapports autonomes sont accessibles de la même
manière que les autres commandes, à partir des menus ou d’une autre commande.
Les rapports de site sont localisés dans le dossier Dreamweaver Configuration/Reports. Ce dossier
contient plusieurs sous-dossiers représentant les différentes catégories de rapport, chaque rapport
ne pouvant appartenir qu’à une seule catégorie. Les noms de catégorie sont limités à 31 caractères.
Chaque sous-dossier peut contenir un fichier nommé _foldername.txt. Si ce fichier existe,
Dreamweaver utilise son contenu comme nom de la catégorie. S’il n’existe pas, Dreamweaver
utilise le nom du dossier.
Les rapports de site indépendants sont localisés dans le dossier Configuration/Commandes de
Dreamweaver.
Lorsqu’un utilisateur choisit plusieurs rapports de site dans la boîte de dialogue Rapports du site,
Dreamweaver place tous les résultats dans la même fenêtre de résultats dans l’onglet Rapports du
site. Dreamweaver remplace ces résultats la prochaine fois qu’un utilisateur exécute un rapport de
site.
En revanche, Dreamweaver crée une nouvelle fenêtre de résultats chaque fois que l’utilisateur
exécute un nouveau rapport indépendant.
205
Fonctionnement des rapports de site
1 Pour accéder aux rapports, choisissez Site > Rapports. Dans la boîte de dialogue qui s’affiche,
sélectionnez les rapports à exécuter sur des cibles spécifiques.
2 Sélectionnez les fichiers pour lesquels effectuer les rapports à l’aide du menu déroulant Rapport
sur : menu contextuel. Ce menu contient les éléments suivants : Document actif, Site local en
cours entier, Fichiers sélectionnés dans le site et Dossier. Lorsque l’option Dossier est activée,
un bouton Parcourir et un champ de texte s’affichent pour vous permettre de choisir un dossier.
3 Vous pouvez personnaliser des rapports possédant des paramètres en choisissant le bouton
Paramètres, puis en saisissant des valeurs pour ces paramètres. Chaque rapport doit contenir une
boîte de dialogue Paramètres pour permettre à l’utilisateur de définir ses propres paramètres. La
définition de ces paramètres est facultative ; il n’est pas nécessaire de définir les paramètres de
chaque rapport. Si un rapport ne possède pas de boîte de dialogue Paramètres, le bouton
Paramètres est estompé lorsque le rapport est sélectionné dans la liste.
4 Après avoir sélectionné des rapports et défini leurs paramètres, cliquez sur le bouton Exécuter.
Dreamweaver supprime alors tous les éléments de l’onglet Rapports du site dans le panneau
Résultats. Dreamweaver appelle la fonction beginReporting() dans chaque rapport avant le
début du processus de rapport. Si un rapport renvoie la valeur false à partir de cette fonction,
celle-ci est retirée du processus de rapport.
5 Chaque fichier est transmis à chaque rapport sélectionné dans la boîte de dialogue à l’aide de la
fonction processFile(). Si le rapport doit inclure des informations sur ce fichier dans la liste
des résultats, la fonction dw.resultsPalette.siteReports.addResultItem() doit être
appelée. Le processus se poursuit jusqu’à ce que tous les fichiers sélectionnés par l’utilisateur
soient traités ou jusqu’à ce que l’utilisateur clique sur le bouton Arrêter situé au bas de la fenêtre.
Dreamweaver affiche le nom de chaque fichier en cours de traitement et le nombre de fichiers
restant à traiter.
Dreamweaver appelle la fonction endReporting() dans chaque rapport à la fin du traitement
des fichiers et du processus de rapport.
206
Chapitre 10 : Rapports
Fonctionnement des rapports indépendants
1 La commande personnalisée ouvre une nouvelle fenêtre de résultats en appelant la fonction
et en stockant l’objet de résultats renvoyés dans une variable de
fenêtre. Les fonctions restantes du processus doivent être appelées en tant que méthodes de cet
objet.
La commande personnalisée initialise le titre et le format de la fenêtre Résultats en appelant les
fonctions setTitle() et SetColumnWidths() en tant que méthodes de l’objet de la fenêtre
Résultats.
La commande peut commencer immédiatement à ajouter des éléments dans la fenêtre Résultats
en appelant la fonction addItem() ou à itérer une liste de fichiers en appelant les fonctions
setFileList() et startProcessing() en tant que méthodes de l’objet de la fenêtre Résultats.
Lorsque la commande appelle resWin.startProcessing(), Dreamweaver appelle la fonction
processFile() pour chaque URL de fichier dans la liste. Définissez la fonction
processFile() dans la commande indépendante. Elle reçoit l’URL de fichier comme seul
argument. Utilisez la fonction setCallbackCommands() de l’objet de la fenêtre Résultats si
vous voulez que Dreamweaver appelle la fonction processFile() dans une autre commande.
Pour appeler la fonction addItem(), la fonction processFile() doit avoir accès à la fenêtre
Résultats créée par la commande indépendante. La fonction processFile() peut également
appeler la fonction stopProcessing() de l’objet de la fenêtre Résultats pour arrêter le
traitement des fichiers de la liste.
dw.createResultsWindow()
2
3
4
5
Fonctionnement des rapports indépendants
207
API de rapports
La fonction processFile() est la seule fonction obligatoire pour l’API de rapports. Toutes les
autres fonctions sont facultatives.
processFile()
Disponibilité
Dreamweaver 4.
Description
Cette fonction est appelée lorsqu’un fichier doit être traité. La commande Rapport doit traiter le
fichier sans le modifier et utiliser la fonction dw.ResultsPalette.SiteReports(),
addResultItem() ou resWin.addItem() pour renvoyer des informations sur ce fichier.
Dreamweaver publie automatiquement le DOM de chaque fichier lorsque le traitement est fini.
Arguments
strFilePath
• L’argument strFilePath est le nom et le chemin complet du fichier à traiter.
Valeurs renvoyées
Dreamweaver n’attend rien.
beginReporting()
Disponibilité
Dreamweaver 4.
Description
Cette fonction est appelée au début du processus de rapport, avant l’exécution du rapport. Si la
commande Rapport renvoie la valeur false à partir de la fonction, la commande Rapport est
exclue du processus de rapport.
Arguments
target
• L’argument target est une chaîne indiquant la cible de la session de rapport. Il peut prendre
l’une des valeurs suivantes : "CurrentDoc", "CurrentSite", "CurrentSiteSelection"
(pour les fichiers sélectionnés dans un site), ou "Folder:+ le chemin vers le dossier
sélectionné par l’utilisateur" (par exemple, "Folder:c:temp").
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le rapport s’exécute avec succès, false si
target est exclus du processus de rapport.
208
Chapitre 10 : Rapports
endReporting()
Disponibilité
Dreamweaver 4.
Description
Cette fonction est appelée à la fin du processus de rapport.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver n’attend rien.
commandButtons()
Disponibilité
Dreamweaver 4.
Description
Définit les boutons devant figurer dans la partie droite de la boîte de dialogue Options et leur
comportement lorsque l’utilisateur clique dessus. Si cette fonction n’est pas définie, aucun bouton
n’apparaît et la section BODY du fichier de rapport s’étend de façon à remplir la totalité de la boîte
de dialogue.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un tableau contenant un nombre pair d’éléments. Le premier élément est
une chaîne contenant le libellé du premier bouton. Le deuxième élément est une chaîne de code
JavaScript définissant le comportement du premier bouton lorsque l’utilisateur clique dessus. Les
autres éléments définissent les boutons supplémentaires de la même manière.
Exemple
Dans l’exemple suivant, la fonction commandButtons() définit trois boutons : OK, Annuler et
Aide.
function commandButtons(){
return new Array("OK" , "doCommand()" , "Annuler" , ¬
"window.close()" , "Aide" , "showHelp()");
}
API de rapports
209
configureSettings()
Disponibilité
Dreamweaver 4.
Description
Détermine si le bouton Paramètres du rapport doit être activé dans la boîte de dialogue Rapports
lorsqu’un rapport est sélectionné.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le bouton Paramètres de rapport doit être
activé ; false dans le cas contraire.
windowDimensions()
Disponibilité
Dreamweaver 4.
Description
Définit les dimensions de la boîte de dialogue des paramètres. Si cette fonction n’est pas définie,
les dimensions de la fenêtre sont calculées automatiquement.
Remarque : Ne définissez cette fonction que si vous souhaitez utiliser une boîte de dialogue Options
ayant des dimensions supérieures à 640 x 480 pixels.
Arguments
platform
• La valeur de l’argument platform est soit "macintosh", soit "windows", selon la plate-forme
utilisée par l’utilisateur.
Valeurs renvoyées
Dreamweaver attend une chaîne au format "widthInPixels,heightInPixels".
Les dimensions renvoyées sont inférieures à la taille totale de la boîte de dialogue parce qu’elles
n’incluent pas la zone des boutons OK et Annuler. Si les dimensions renvoyées ne permettent pas
de faire apparaître toutes les options, des barres de défilement s’affichent.
Exemple
Dans l’exemple suivant, la fonction windowDimensions() définit les dimensions de la boîte de
dialogue Paramètres à 648 x 520 pixels :
function windowDimensions(){
return "648,520";
}
210
Chapitre 10 : Rapports
CHAPITRE 11
Bibliothèques et éditeurs de balises
Les utilisateurs de Macromedia Dreamweaver MX 2004 peuvent utiliser des éditeurs de balises
pour insérer de nouvelles balises, modifier des balises existantes et accéder aux informations de
référence sur les balises. Dreamweaver propose des éditeurs pour les langages suivants : HTML,
ASP.Net, CFML, JRun et JSP. Vous pouvez personnaliser ces éditeurs et en créer de nouveaux, ou
ajouter de nouvelles balises aux bibliothèques de balises.
Le sélecteur de balises utilise les informations enregistrées dans les bibliothèques de balises pour
permettre aux utilisateurs de Dreamweaver de passer en revue les balises disponibles, de les
sélectionner et de les insérer dans le document en cours.
Dreamweaver enregistre les informations sur chaque balise, y compris leurs attributs, dans un
groupe de sous-dossiers localisés dans le dossier Configuration/TagLibraries. Les fonctions de
l’éditeur de balises et du sélecteur de balises utilisent les informations enregistrées dans ces dossiers
lors de la manipulation et de la modification des balises. Avant de vous lancer dans la création
d’éditeurs de balises personnalisés, vous devez comprendre la structure de la bibliothèque de
balises.
211
Format de fichier bibliothèque de balises
La bibliothèque de balises est composée d’un fichier racine, du fichier TagLibraries.vtm,
contenant la liste des balises installées, et d’un fichier VTML pour chaque balise dans la
bibliothèque. Le fichier TagLibraries.vtm fonctionne comme une table des matières et contient
des pointeurs vers le fichier VTML de chaque balise. La figure suivante présente l’organisation des
fichiers VTML dans Dreamweaver, par langage de balisage :
Les utilisateurs de Macromedia HomeSite peuvent reconnaître la structure des fichiers VTML,
mais Dreamweaver n’utilise pas ces fichiers de la même manière que HomeSite. La différence la
plus importante est que Dreamweaver contient son propre programme de rendu HTML pour
l’affichage des interfaces utilisateur (UI) des extensions, et n’utilise donc pas les fichiers
Dreamweaver VTML dans le processus de rendu de l’interface graphique utilisateur.
L’exemple suivant présente la structure du fichier TagLibraries.vtm :
<taglibraries>
<taglibrary name="Name of tag library" doctypes="HTML,ASP-JS,ASP-VB"
tagchooser="relative path to TagChooser.xml file" id="DWTagLibrary_html">
<tagref name="tag name" file="relative path to tag .vtm file"/>
</taglibrary>
<taglibrary name="CFML Tags" doctypes="ColdFusion" servermodel="Cold Fusion"
tagchooser="cfml/TagChooser.xml" id="DWTagLibrary_cfml">
<tagref name="cfabort" file="cfml/cfabort.vtm"/>
</taglibrary>
212
Chapitre 11 : Bibliothèques et éditeurs de balises
<taglibrary name="ASP.NET Tags" doctypes="ASP.NET_CSharp,ASP.NET_VB"¬
servermodel="ASPNet" prefix="<asp:" tagchooser="ASPNet/TagChooser.xml"¬
id="DWTagLibrary_aspnet">
<tagref name="dataset" file="aspnet/dataset.vtm" prefix="<mm:dataset"/>
</taglibrary>
</taglibraries>
La balise taglibrary regroupe une ou plusieurs balises dans une bibliothèque de balises. Lorsque
vous importez des balises ou créez un nouveau jeu de balises, vous pouvez les regrouper dans des
bibliothèques de balises. Souvent, un regroupement taglibrary correspond à un ensemble de
balises qui sont définies dans un fichier TLD de pages JSP (JavaServer Pages), un fichier DTD
(Document Type Definition) de format XML, un espace de nom ASP.Net ou dans tout autre
regroupement logique.
Le tableau suivant présente les attributs taglibrary :
Attribut
Description
Obligatoire/
facultatif
taglibary.name
Utilisé pour référencer la bibliothèque de balises Obligatoire
dans l’interface utilisateur.
taglibrary.doctypes
Obligatoire
Indique les types de documents pour lesquels
cette bibliothèque est active. Lorsque la
bibliothèque est active, les balises de
bibliothèque s’affichent dans le menu contextuel
Indicateurs de code. Les bibliothèques de
balises ne peuvent pas toutes être actives en
même temps car des conflits de nom risquent de
survenir (par exemple, les fichiers HTML et
WML ne sont pas compatibles).
taglibrary.prefix
Lorsque cet attribut est spécifié, les balises dans Facultatif
la bibliothèque de balises prennent la forme
taglibrary.prefix + tagref.name. Par
exemple, si taglibrary.prefix est "<jrun:" et
tagref.name est "if", la balise prend la forme
"<jrun:if". Cet attribut peut être ignoré pour
une balise définie.
taglibrary.servermodel
Facultatif
Si les balises dans la bibliothèque de balises
s’exécutent sur un serveur d’application,
l’attribut servermodel identifie le modèle serveur
de la balise. S’il s’agit de balises côté client (et
non de balises côté serveur), l’attribut
servermodel est ignoré. L’attribut servermodel
est utilisé également pour vérifier les navigateurs
cibles.
Format de fichier bibliothèque de balises
213
Attribut
Description
Obligatoire/
facultatif
taglibrary.id
Facultatif
Cet attribut peut être une chaîne quelconque
différente des attributs taglibrary.ID des
autres bibliothèques de balises du fichier.
Extension Manager utilise l’attribut ID afin de
laisser aux fichiers MXP la possibilité d’insérer
de nouveaux taglibrary et fichiers tags dans le
fichier TagLibraries.vtm.
taglibrary.tagchooser
Un chemin relatif au fichier TagChooser.xml
associé à cette bibliothèque de balises.
Facultatif
Le tableau suivant présente les attributs tagref :
Attribut
Description
Obligatoire/
facultatif
tagref.name
Utilisé pour référencer la balise dans l’interface
utilisateur.
Obligatoire
tagref.prefix
Indique comment doit s’afficher la balise en
Facultatif
mode Source. Lorsqu’il est utilisé, l’attribut
tagref.prefix détermine le préfixe de la balise
en cours. Lorsqu’il est défini, il remplace la valeur
spécifiée pour l’attribut taglibrary.prefix.
tagref.file
Référence le fichier VTML de la balise.
Facultatif
L’attribut tagref.prefix pouvant remplacer la valeur de l’attribut taglibrary.prefix, la
relation entre ces deux attributs peut prêter à confusion. Le tableau suivant montre la relation
entre les attributs taglibrary.prefix et tagref.prefix :
L’attribut taglibrary.prefix
est-il défini ?
214
L’attribut tagref.prefix est-il Préfixe de balise obtenu
défini ?
Non
Non
’<’ + tagref.name
Oui
Non
taglibrary.prefix +
tagref.name
Non
Oui
tagref.prefix
Oui
Oui
tagref.prefix
Chapitre 11 : Bibliothèques et éditeurs de balises
Pour définir les balises, Dreamweaver utilise une version modifiée du format de fichier VTML de
Macromedia. L’exemple suivant présente tous les éléments que Dreamweaver doit utiliser pour
définir une balise individuelle :
<tag name="input" bind="value" casesensitive="no" endtag="no">
<tagformat indentcontents="yes" formatcontents="yes" nlbeforetag ¬
nlbeforecontents=0 nlaftercontents=0 nlaftertag=1 />
<tagdialog file = "input.HTM"/>
<attributes>
<attrib name="name"/>
<attrib name="wrap" type="Enumerated">
<attriboption value="off"/>
<attriboption value="soft"/>
<attriboption value="hard"/>
</attrib>
<attrib name="onFocus" casesensitive="yes"/>
<event name="onFocus"/>
</attributes>
</tag>
Le tableau suivant présente les attributs de définition des balises :
Attribut
Description
Obligatoire/
facultatif
tag.bind
Utilisé par le panneau Liaisons de données.
Lorsque vous sélectionnez une balise de ce
type, l’attribut bind indique l’attribut par défaut
pour la liaison des données.
Facultatif
tag.casesensitive
Facultatif
Indique si le nom de la balise doit respecter la
casse. Si le nom de la balise doit respecter la
casse, il est inséré dans le document de
l’utilisateur exactement comme spécifié dans la
bibliothèque de balises. S’il n’est pas nécessaire
de respecter la casse, le nom de la balise est
inséré en utilisant la casse par défaut spécifiée
dans l’onglet Format de code de la boîte de
dialogue Préférences. Si vous ignorez l’attribut
casesensitive, la balise ne tient pas compte des
majuscules et des minuscules.
tag.endtag
Facultatif
Spécifie si la balise dispose d’une balise
d’ouverture et d’une balise de fermeture. Par
exemple, la balise input ne comporte pas de
balise de fermeture. Il n’existe pas de balise /
input correspondante. Si la balise de fermeture
est facultative, l’attribut ENDTAG doit être défini
sur Yes.
tagformat
Indique les règles de mise en forme de la balise. Facultatif
Dans les versions antérieures à Dreamweaver
MX, les règles de mise en forme étaient
enregistrées dans le fichier SourceFormat.txt.
tagformat.indentcontents
Indique si le contenu de cette balise doit être mis Facultatif
en retrait.
Format de fichier bibliothèque de balises
215
Attribut
Description
Obligatoire/
facultatif
tagformat.formatcontents
Indique si le contenu de cette balise doit être
analysé. Cet attribut est défini sur No pour les
balises telles que SCRIPT et STYLE, dans
lesquelles le contenu n’est pas du code HTML.
Facultatif
tagformat.nlbeforetag
Le nombre de caractères de nouvelle ligne
devant être insérés avant cette balise.
Facultatif
tagformat.nlbeforecontents Le nombre de caractères de nouvelle ligne
Facultatif
devant être insérés avant le contenu de cette
balise.
tagformat.nlaftercontents
Le nombre de caractères de nouvelle ligne
devant être insérés après le contenu de cette
balise.
Facultatif
tagformat.nlaftertag
Le nombre de caractères de nouvelle ligne
devant être insérés après cette balise.
Facultatif
attrib.name
Le nom de l’attribut, tel qu’il apparaît dans le
code source.
Obligatoire
attrib.type
S’il n’est pas défini, l’attribut attrib.type est
"text".
Cet attribut peut prendre les valeurs suivantes :
TEXT—contenu texte libre
ENUMERATED—liste de valeurs énumérées
COLOR—valeur de couleur (nom ou hex)
FONT—nom de police ou famille de polices
STYLE—attribut de styles CSS
FILEPATH —chemin de fichier complet
DIRECTORY—chemin de dossier
FILENAME—nom de fichier uniquement
RELATIVEPATH —représentation relative du
chemin
FLAG —attribut ON/OFF (activé/désactivé) ne
contenant pas de valeur
Facultatif
attrib.casesensitive
Indique si le nom de l’attribut doit respecter la
casse. Si l’attribut CASESENSITIVE est absent, le
nom de l’attribut ne tient pas compte des
majuscules et des minuscules.
Facultatif
Remarque : Dans les versions antérieures à Dreamweaver MX, les informations sur les balises sont
enregistrées dans le fichier Configuration/TagAttributeList.txt.
216
Chapitre 11 : Bibliothèques et éditeurs de balises
Sélecteur de balises
Le sélecteur de balises vous permet d’afficher les balises dans des groupes fonctionnels et d’accéder
rapidement aux balises fréquemment utilisées. Pour ajouter une balise ou un groupe de balises
dans le sélecteur de balises, vous devez d’abord les ajouter dans la bibliothèque de balises. Vous
pouvez effectuer cette opération à l’aide de la boîte de dialogue Editeur de la bibliothèque de
balises ou en installant une extension Dreamweaver, empaquetée dans un fichier MXP.
fichiers Tagchooser.xml
Le fichier Tagchooser.xml contient les métadonnées utilisées pour organiser les regroupements de
balises qui apparaissent dans le sélecteur de balises. Chaque balise livrée avec Dreamweaver est
enregistrée dans un regroupement fonctionnel, et est disponible dans le sélecteur de balises. Vous
pouvez regrouper les balises existantes et créer des groupes de nouvelles balises en modifiant le
fichier TagChooser.xml. Vous pouvez également personnaliser la structure des balises en créant
des sous-catégories pour permettre aux utilisateurs d’accéder facilement aux balises les plus
importantes pour leur travail.
Le fichier TagLibraries.vtm prend en charge l’utilisation de l’attribut TAGLIBRARY.TAGCHOOSER,
qui pointe vers le fichier Tagchooser.xml. Si vous modifiez les fichiers Tagchooser.xml existants ou
si vous en créez de nouveaux, l’attribut TAGLIBRARY.TAGCHOOSER doit pointer vers l’emplacement
exact du sélecteur de balises pour pouvoir fonctionner correctement.
S’il n’existe pas d’attribut TAGLIBRARY.TAGCHOOSER, le sélecteur de balises affiche l’arborescence
définie dans le TagLibraries.vtm.
Les fichiers TagChooser.xml sont localisés dans le dossier Configuration/TagLibraries/
TagLibraryName. L’exemple suivant présente la structure des fichiers TagChooser.xml :
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<tclibrary name="Friendly name for library node" desc=’Description for
incorporated reference’ reference="Language[,Topic[,Subtopic]]">
<category name="Friendly name for category node" desc=’Description for
incorporated reference’ reference="Language[,Topic[,Subtopic]]" id="Unique
id">
<category name="Friendly name for subcategory node" ICON="Relative path"
desc=’Description for incorporated reference’
reference="Language,Topic[,Subtopic]" id="Unique id">
<element name="Friendly name for list item" value=’Value to pass to
visual dialog editors’ desc=’Description for incorporated reference’
reference="Language[,Topic[,Subtopic]]" id="Unique id"/>
... more elements to display in the list view ...
</category>
... more subcategories ...
</category>
... more categories ...
</tclibrary>
Sélecteur de balises
217
Le tableau suivant présente les balises pouvant être utilisées dans les fichiers TagChooser.xml :
Balise
Description
Obligatoire/
facultatif
tclibrary
C’est la balise extérieure qui encapsule cette
structure de sélecteur de balises de la
bibliothèque de balises.
Obligatoire
tclibrary.name
Cette valeur s’affiche dans le nœud
Arborescence.
Obligatoire
tclibrary.desc
Cette valeur est une chaîne HTML qui s’affiche
dans la section Infos sur les balises de la boîte de
dialogue Sélecteur de balises. S’il n’existe pas
d’attribut DESC, les informations Infos sur les
balises proviennent du panneau Référence.
Interchangeable avec tclibrary.reference.
Facultatif
(desc et reference
sont mutuellement
exclusives)
tclibrary.reference
Cette valeur décrit le langage, la rubrique et la
sous-rubrique à afficher dans la section Infos sur
les balises de la boîte de dialogue Sélecteur de
balises. Interchangeable avec tclibrary.desc.
Facultatif
(desc et reference
sont mutuellement
exclusives)
La balise CATEGORY représente tous les autres nœuds dans l’arborescence sous le nœud de la balise
TCLIBRARY, comme illustré dans le tableau suivant :
218
Balise
Description
Obligatoire/
facultatif
category.name
Cette valeur s’affiche dans le nœud
Arborescence.
Obligatoire
category.desc
Cette valeur est une chaîne HTML qui s’affiche
dans la section Infos sur les balises de la boîte de
dialogue Sélecteur de balises. Si desc ou
reference attr ne sont pas spécifiés, rien ne
s’affiche dans la section Infos sur les balises.
Facultatif
(desc et reference
sont mutuellement
exclusives)
category.reference
Facultatif
Cette valeur décrit le langage, la rubrique et la
sous-rubrique à afficher dans la section Infos sur (desc et reference
les balises.
sont mutuellement
exclusives)
category.icon
Cette valeur est un chemin relatif vers un fichier
GIF d’icône.
Facultatif
category.id
Toute chaîne différente des attributs
category.id des autres catégories dans ce
fichier.
Obligatoire
Chapitre 11 : Bibliothèques et éditeurs de balises
Le tableau suivant répertorie les attributs de la balise ELEMENT, qui représente la balise à insérer :
Attribut
Description
Obligatoire/
facultatif
element.name
Cette valeur s’affiche comme un élément de
liste.
Obligatoire
element.value
Une valeur placée directement dans le code ou Obligatoire
un paramètre qui est transmis vers les boîtes de
dialogue visuelles.
element.desc
Cette valeur est une chaîne HTML et s’affiche
dans le panneau Référence incorporé. S’il n’est
pas spécifié, l’attribut REFERENCE affiche le
contenu de la référence dans le panneau
Référence incorporé.
Facultatif
(desc et reference
sont mutuellement
exclusives)
element.reference
Jusqu’à trois chaînes, séparées par des virgules,
décrivant respectivement le langage, la rubrique
et la sous-rubrique. Ces informations s’affichent
dans le panneau Référence. La première chaîne
est obligatoire. La deuxième chaîne est
obligatoire pour la balise ELEMENT seulement et
facultative pour les balises CATEGORY et
TCLIBRARY. La troisième chaîne est facultative.
Facultatif
(desc et reference
sont mutuellement
exclusives)
element.id
Toute chaîne différente des attributs element.id Facultatif
des autres éléments dans ce fichier.
Création d’un nouvel éditeur de balises
Les exemples dans cette section utilisent cfweather, une balise ColdFusion conçue pour extraire
la température courante à partir d’une base de données météorologiques, et illustrent les étapes
nécessaires à la création d’un nouvel éditeur de balises.
Les attributs de la balise cfweather sont décrits dans le tableau suivant :
Attribut
Description
zip
Un code postal de cinq chiffres
tempaturescale
L’échelle de température (Celsius ou Farhenheit)
Enregistrement de la balise dans la bibliothèque de balises
Afin que Dreamweaver puisse reconnaître la nouvelle balise, celle-ci doit être identifiée dans le
fichier TagLibraries.vtm, localisé dans le dossier Configuration/TagLibraries. Néanmoins, sur une
plate-forme multiutilisateur (par exemple, Windows XP, Windows 2000, Windows NT ou
Mac OS X), un autre fichier TagLibraries.vtm se trouve dans le dossier de configuration de
l’utilisateur. C’est ce fichier qui doit être mis à jour car il s’agit de l’instance que Dreamweaver
recherche et analyse.
Création d’un nouvel éditeur de balises
219
L’emplacement du dossier de configuration varie selon la plate-forme utilisateur.
Sous Windows 2000 et Windows XP :
<lecteur>:\Documents and Settings\<nom d’utilisateur>\ ¬
Application Data\Macromedia\Dreamweaver MX 2004\Configuration
Remarque : Sous Windows XP, ce dossier peut se trouver dans un dossier masqué.
Pour Mac OS X :
<lecteur>:Utilisateurs:<nom d’utilisateur>:Bibliothèque:Application Support: ¬
Macromedia:Dreamweaver MX 2004:Configuration
Si Dreamweaver ne parvient pas à trouver le fichier TagLibraries.vtm dans le dossier de
configuration de l’utilisateur, il effectue une recherche dans le dossier Configuration de
Dreamweaver.
Remarque : Sur les plates-formes multiutilisateur, si vous modifiez la copie du fichier
TagLibraries.vtm résidant dans le dossier Configuration de Dreamweaver, au lieu de modifier celle qui
se trouve dans le dossier de configuration de l’utilisateur, Dreamweaver ne prend pas en charge les
modifications. En effet, Dreamweaver analyse la copie du fichier TagLibraries.vtm située dans le
dossier de configuration de l’utilisateur, et non pas celle située dans le dossier Configuration de
Dreamweaver.
cfweather est une balise ColdFusion. Vous pouvez donc enregistrer la balise cfweather dans le
groupe de bibliothèque de balises correspondant qui existe déjà.
Pour enregistrer la balise :
1 Ouvrez le fichier TagLibraries.vtm dans l’éditeur de texte.
2 Faites défiler les bibliothèques de balises existantes jusqu’à localiser le groupe taglibrary de
balises CFML.
3 Ajoutez un élément de référence de balise, comme indiqué dans l’exemple suivant :
<tagref name="cfweather" file="cfml/cfweather.vtm"/>
4 Enregistrez le fichier.
La balise est maintenant enregistrée dans la bibliothèque de balises et contient un pointeur vers
le fichier de définition de balise cfweather.vtm.
Création d’un fichier de définition de balise (VTML)
Lorsqu’un utilisateur sélectionne une balise enregistrée à l’aide du sélecteur de balises ou d’un
éditeur de balises, Dreamweaver recherche un fichier VTML correspondant pour la définition de
la balise.
Pour créer un fichier de définition de balise :
1 Dans un éditeur de texte, créez un fichier contenant les éléments suivants :
<TAG NAME="cfweather" endtag="no">
<TAGFORMAT NLBEFORETAG="1" NLAFTERTAG="1"/>
<TAGDIALOG FILE="cfweather.htm"/>
<ATTRIBUTES>
<ATTRIB NAME="zip" TYPE="TEXT"/>
<ATTRIB NAME="tempaturescale" TYPE="ENUMERATED">
<ATTRIBOPTION VALUE="Celsius"/>
<ATTRIBOPTION VALUE="Fahrenheit"/>
</ATTRIB>
220
Chapitre 11 : Bibliothèques et éditeurs de balises
</ATTRIBUTES>
</TAG>
2 Enregistrez le fichier cfweather.vtm dans le dossier Configuration/Taglibraries/CFML.
Le fichier de définition de balise permet à Dreamweaver d’exécuter les opérations de code
contextuel, de finalisation de code et de mise en forme pour la balise cfweather.
Création d’une interface utilisateur d’éditeur de balises
Pour créer l’interface utilisateur de l’éditeur de balises cfweather :
1 Enregistrez le fichier cfweather.htm dans le dossier Configuration/Taglibraries/CFML :
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine 5.0//dialog">
<html>
<head>
<title>CFWEATHER</title>
<script src="../../Shared/Common/Scripts/dwscripts.js"></script>
<script src="../../Shared/Common/Scripts/ListControlClass.js"></script>
<script src="../../Shared/Common/Scripts/tagDialogsCmn.js"></script>
<script>
/************************* GLOBAL VARS **************************/
var TEMPATURESCALELIST;
// tempaurelist control (initialized in
initializeUI())
var theUIObjects;
// array of UI objects used by common API functions
/****************************************************************/
// inspectTag() API function defined (required by all tag editors)
function inspectTag(tagNodeObj)
{
// call into a common library version of inspectTagCommon defined
// in tagDialogCmns.js (note that it’s been included)
// For more information about this function, look at the comments
// for inspectTagCommon in tagDialogCmn.js
tagDialog.inspectTagCommon(tagNodeObj, theUIObjects);
}
function applyTag(tagNodeObj)
{
// call into a common library version of applyTagCommon defined
// in tagDialogCmns.js (note that it’s been included)
// For more information about this function, look at the comments
// for applyTagCommon in tagDialogCmn.js
tagDialog.applyTagCommon(tagNodeObj, theUIObjects);
}
function initializeUI()
{
// define two arrays for the values and display captions for the list control
var theTempatureScaleCap = new Array("celsius","fahrenheit");
var theTempatureScaleVal = new Array("celsius","fahrenheit");
// instantiate a new list control
TEMPATURESCALELIST = new ListControl("thetempaturescale");
// add the tempaturescalelist dropdown list control to the uiobjects
theUIObjects = new Array(TEMPATURESCALELIST);
Création d’un nouvel éditeur de balises
221
// call common populateDropDownList function defined in tagDialogCmn.js to
// populate the tempaturescale list control
tagDialog.populateDropDownList(TEMPATURESCALELIST, theTempatureScaleCap,
theTempatureScaleVal, 1);
}
</script>
</head>
<body onLoad="initializeUI()">
<div name="General">
<table border="0" cellspacing="4">
<tr>
<td valign="baseline" align="right" nowrap="nowrap">Zip Code: </td>
<td nowrap="nowrap">
<input type="text" id="attr:cfargument:zip" name="thezip" attname="zip"
style="width:100px" /> 
</td>
</tr>
<tr>
<td valign="baseline" align="right" nowrap="nowrap">Type: </td>
<td nowrap="nowrap">
<select name="thetempaturescale" id="attr:cfargument:tempaturescale"
attname="tempaturescale" editable="false" style="width:200px">
</select>
</td>
</tr>
</table>
</div>
</body>
</html>
2 Vérifiez que l’éditeur de balises fonctionne correctement en exécutant la procédure suivante :
Lancez Dreamweaver.
■ Entrez cfweather en mode Code.
■ Cliquez sur la balise avec le bouton droit de la souris.
■ Sélectionnez Modifier la balise cfweather dans le menu contextuel.
Si l’éditeur de balises démarre, il a été créé correctement.
■
Ajout d’une balise au sélecteur de balises
Pour ajouter la balise cfweather au sélecteur de balises :
1 Modifiez le fichier TagChooser.xml dans le dossier Configuration/Taglibraries/CFML en
ajoutant une nouvelle catégorie appelée Balises tierces, qui met en valeur la balise cfweather,
comme indiqué dans l’exemple suivant :
<category name="Third Party Tags" icon="icons/Elements.gif"
reference=’CFML’>
<element name="cfweather" value=’cfweather zip=""
temperaturescale="fahrenheit">’ />
</category>
Remarque : Sur les plates-formes multiutilisateur, le fichier Tagchooser.xml existe également dans le
dossier de configuration de l’utilisateur. Pour plus d’informations sur les plates-formes
multiutilisateurs, voir Enregistrement de la balise dans la bibliothèque de balises, page 219.
222
Chapitre 11 : Bibliothèques et éditeurs de balises
2 Vérifiez que la balise cfweather s’affiche correctement dans le sélecteur de balises en exécutant
la procédure suivante :
■ Sélectionnez Insertion > Balise.
■ Développez le groupe Balises CFML.
■ Sélectionnez le groupe Balises tierces qui s’affiche au bas du sélecteur de balises.
■ La balise cfweather s’affiche dans la zone de liste sur la droite.
■ Sélectionnez cfweather, puis cliquez sur le bouton Insérer.
L’éditeur de balises doit apparaître.
API de l’éditeur de balises
Afin de créer un nouvel éditeur de balises, vous devez fournir une implémentation pour les
fonctions inspectTag(), validateTag() et applyTag(). Pour avoir un exemple
d’implémentation, voir Création d’une interface utilisateur d’éditeur de balises, page 221.
inspectTag()
Disponibilité
Dreamweaver MX.
Description
La fonction est appelée au premier affichage de l’éditeur de balises. La fonction reçoit la balise
modifiée par l’utilisateur comme un argument sous la forme d’un objet dom. La fonction extrait
des valeurs d’attribut de la balise en cours d’édition et utilise ces valeurs pour initialiser les
éléments de formulaire dans l’éditeur de balises.
Arguments
balise
• L’argument tag constitue le nœud DOM de la balise modifiée.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
Exemple
Supposons que l’utilisateur modifie la balise suivante :
<crfweather zip = “94065”/>
Si l’éditeur contient une zone de texte de modification de l’attribut zip, la fonction doit initialiser
l’élément de formulaire pour permettre à l’utilisateur de voir le code ZIP dans le champ de texte,
plutôt que de voir le champ vide.
Le code suivant exécute l’initialisation :
function inspectTag(tag)
{
document.forms[0].zip.value = tag.zip
}
API de l’éditeur de balises
223
validateTag()
Disponibilité
Dreamweaver MX.
Description
Lorsqu’un utilisateur clique sur un nœud dans la commande d’arborescence ou sur OK, la
fonction exécute la validation des entrées sur les éléments de formulaire HTML affichés
actuellement.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si l’entrée pour les éléments de formulaire
HTML est valide ; false si les valeurs d’entrée ne sont pas valides.
Exemple
Lors de la création d’un tableau, l’utilisateur entre un nombre entier négatif pour le nombre de
lignes. La fonction validateTag() détecte l’entrée non valide, affiche un message d’alerte et
renvoie la valeur false.
applyTag()
Disponibilité
Dreamweaver MX.
Description
Lorsque l’utilisateur clique sur OK, Dreamweaver appelle la fonction validateTag(). Si la
fonction validateTag() renvoie la valeur true, Dreamweaver appelle cette fonction et transmet
l’objet dom représentant la balise en cours de modification. La fonction interprète les valeurs des
éléments de formulaires et les enregistre dans l’objet dom.
Arguments
tag
• L’argument tag constitue le nœud DOM de la balise modifiée.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
Exemple
Toujours dans l’exemple cfweather, dans le code suivant, si l’utilisateur modifie le code zip de
94065 à 53402, afin de mettre à jour le document de l’utilisateur avec le nouveau code ZIP, vous
devez également mettre à jour l’objet dom :
function applyTag(tag)
{
tag.zip = document.forms[0].zip.value
}
224
Chapitre 11 : Bibliothèques et éditeurs de balises
CHAPITRE 12
Inspecteurs de propriétés
L’inspecteur de propriétés est probablement le panneau flottant le plus connu de l’interface
Macromedia Dreamweaver MX 2004. Il est indispensable pour définir, vérifier et modifier le
nom, les dimensions, l’aspect et d’autres attributs de la sélection ; il permet également de lancer
des éditeurs internes et externes relatifs à l’élément sélectionné.
Dreamweaver intègre plusieurs interfaces compatibles avec l’inspecteur de propriétés permettant
de définir des propriétés pour de nombreuses balises HTML standard. Ces inspecteurs intégrés
font partie du code Dreamweaver élémentaire ; vous ne trouverez donc pas de fichiers
d’inspecteur de propriété leur correspondant dans le dossier Configuration. Les fichiers
d’inspecteur de propriétés personnalisés permettent d’ignorer ces interfaces intégrées ou d’en créer
de nouvelles pour contrôler les balises personnalisées. Les fichiers d’inspecteur de propriétés
personnalisés sont des fichiers HTML qui résident dans le dossier Configuration/Inspectors du
dossier de l’application Dreamweaver. Les fichiers d’inspecteur de propriétés doivent contenir un
commentaire (en plus du commentaire doctype), juste devant la balise HTML d’ouverture,
comme indiqué dans l’exemple suivant :
<!-- tag:tagNameOrKeyword,priority:1to10,selection:¬
exactOrWithin,hline,vline, serverModel-->
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine5.0//pi">
Ce commentaire comporte les éléments suivants :
•
•
•
•
•
tagNameOrKeyword est la balise à inspecter ou l’un des mots clefs suivants : *COMMENT* (pour
les commentaires), *LOCKED* (pour les régions verrouillées) ou *ASP* (pour les balises ASP).
1to10 est la priorité du fichier d’inspecteur de propriétés : 1 indique que cet inspecteur doit
être utilisé uniquement lorsque aucun autre ne peut inspecter la sélection ; 10 indique que cet
inspecteur a priorité sur tous les autres pouvant inspecter la sélection.
L’élément exactOrWithin indique si la sélection peut être contenue dans la balise (within) ou
si elle doit contenir exactement la balise (exact).
L’élément hline (facultatif ) indique qu’une ligne grise horizontale doit apparaître entre les
moitiés supérieure et inférieure de l’inspecteur en mode étendu.
L’élément vline (facultatif ) indique qu’une ligne grise verticale doit apparaître entre le champ
de nom de balise et le reste des propriétés dans l’inspecteur (voir un fichier HTML dans le
dossier Configuration/Inspectors pour obtenir un exemple).
225
• L’élément serverModel (facultatif ) indique le modèle de serveur de l’inspecteur de propriétés.
Si le modèle de serveur de l’inspecteur de propriétés n’est pas le même que le modèle de serveur
pour le document, Dreamweaver n’utilise pas l’inspecteur de propriétés pour afficher les
propriétés de la sélection en cours.
Le commentaire suivant est approprié pour un inspecteur conçu pour inspecter la balise HAPPY :
<!-- tag:HAPPY, priority:8,selection:exact,hline,vline, ¬
serverModel:ASP -->
Dans certains cas, vous pouvez spécifier que votre extension utilise exclusivement le rendu
d’extension Dreamweaver (et non pas le moteur de rendu précédent) en insérant la ligne suivante
immédiatement avant le commentaire de balise, comme dans l’exemple suivant :
<!--DOCTYPE HTML SYSTEM “-//Macromedia//DWEtension layout-engine 5.0//pi”-->
La section BODY du fichier d’inspecteur de propriétés contient un formulaire HTML. Toutefois,
au lieu d’afficher le contenu du formulaire dans une boîte de dialogue, Dreamweaver utilise le
formulaire pour définir les zones d’entrée et la mise en page de l’inspecteur.
Fonctionnement des fichiers d’inspecteur de propriétés
Au démarrage, Dreamweaver lit la première ligne de chaque fichier HTM et HTML dans le
dossier Configuration/Inspectors, recherchant la chaîne de commentaire qui définit le type, la
priorité et le type de sélection d’un inspecteur de propriétés. Les fichiers qui ne possèdent pas ce
commentaire en première ligne sont ignorés.
Lorsque l’utilisateur effectue une sélection dans Dreamweaver ou déplace le point d’insertion vers
un emplacement différent, les événements suivants se produisent :
1 Dreamweaver recherche tout inspecteur possédant un type de sélection within.
2 S’il n’existe aucun inspecteur within, Dreamweaver recherche l’arborescence du document à
3
4
5
6
7
8
226
partir de la balise actuellement sélectionnée pour vérifier s’il existe des inspecteurs pour les autres
balises entourant la sélection. Si, et seulement si, il n’existe aucun inspecteur within,
Dreamweaver recherche tous les inspecteurs possédant un type de sélection exact.
Pour la première balise possédant un ou plusieurs inspecteurs, Dreamweaver appelle chaque
fonction canInspectSelection() de l’inspecteur. Si la fonction renvoie la valeur false,
Dreamweaver ne considère plus l’inspecteur comme un candidat pour inspecter cette sélection.
S’il reste plusieurs inspecteurs potentiels après avoir appelé la fonction
canInspectSelection(), Dreamweaver trie les inspecteurs restant en fonction de leur priorité.
Si plusieurs inspecteurs potentiels ont le même degré de priorité, Dreamweaver sélectionne
l’inspecteur suivant l’ordre alphabétique.
L’inspecteur choisi apparaît dans le panneau flottant Inspecteur de propriétés. Si le fichier
d’inspecteur de propriétés définit la fonction displayHelp(), une petite icône en forme de
point d’interrogation (?) apparaît dans le coin supérieur droit de l’inspecteur.
Dreamweaver appelle la fonction inspectSelection() pour réunir des informations sur la
sélection en cours et renseigner les champs de l’inspecteur.
Les gestionnaires d’événements associés aux champs dans l’interface de l’inspecteur de propriétés
s’exécutent au fur et à mesure que l’utilisateur les rencontre (par exemple, vous pouvez avoir un
événement onBlur qui appelle la fonction setAttribute() pour définir un attribut selon la
valeur saisie par l’utilisateur).
Chapitre 12 : Inspecteurs de propriétés
API de l’inspecteur de propriétés
Deux des fonctions de l’API de l’inspecteur de propriétés (canInspectSelection() et
inspectSelection()) sont obligatoires.
canInspectSelection()
Description
Détermine si l’inspecteur de propriétés est approprié pour la sélection en cours.
Arguments
Aucun.
Utilisez dom.getSelectedNode() pour obtenir la sélection en cours en tant qu’objet JavaScript
(pour plus d’informations sur dom.getSelectedNode(), voir le Guide des API de Dreamweaver).
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si l’inspecteur peut inspecter la sélection en
cours, et false dans le cas contraire.
Exemple
L’instance suivante de la fonction canInspectSelection() renvoie la valeur true si la sélection
contient l’attribut CLASSID et si la valeur de cet attribut est "clsid:D27CDB6E-AE6D-11cf96B8-444553540000" (l’ID de classe pour Flash Player) :
function canInspectSelection(){
var theDOM = dw.getDocumentDOM();
var theObj = theDOM.getSelectedNode();
return (theObj.nodeType == Node.ELEMENT_NODE && ¬
theObj.hasAttribute("classid") && ¬
theObj.getAttribute("classid").toLowerCase()== ¬
"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000");
}
displayHelp()
Description
Si cette fonction est définie, une icône en forme de point d’interrogation (?) apparaît dans le coin
supérieur droit de l’inspecteur de propriétés. Cette fonction est appelée lorsque l’utilisateur clique
sur l’icône.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
API de l’inspecteur de propriétés
227
Exemple
L’occurrence suivante de displayHelp() ouvre un fichier dans une fenêtre du navigateur. Ce
fichier explique les champs de l’inspecteur de propriétés :
function displayHelp(){
dw.browseDocument(‘http://www.hooha.com/dw/inspectors/inspHelp.html’);
}
inspectSelection()
Description
Actualise le contenu des zones de texte en fonction des attributs de la sélection en cours.
Arguments
maxOrMin
• L’argument maxOrMin est max ou min, suivant si l’inspecteur de propriétés est en état développé
ou compressé.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
Exemple
L’occurrence suivante de la fonction inspectSelection() récupère la valeur de l’attribut
CONTENT et l’utilise pour remplir un champ de formulaire appelé keywords :
function inspectSelection() {
var dom = dreamweaver.getDocumentDOM();
var theObj = dom.getSelectedNode();
document.forms[0].keywords.value = ¬
theObj.getAttribute("content");
}
Un exemple simple d’inspecteur de propriétés
L’inspecteur de propriétés suivant inspecte une balise fictive appelée INTJ. La balise INTJ est vide
(c’est-à-dire qu’elle ne possède pas de balise de fermeture) ; son type de sélection est donc exact.
Tant que la sélection est exactement une balise INTJ, l’inspecteur de propriétés doit s’afficher (afin
que la fonction canInspectSelection() renvoie la valeur true à chaque fois). Pour qu’un
inspecteur différent s’affiche en fonction de la valeur de l’attribut TYPE de la balise INTJ, par
exemple, la fonction canInspectSelection() doit vérifier la valeur de l’attribut TYPE afin de
déterminer quel est le bon inspecteur de propriétés. Ceci correspond au fonctionnement des mots
clés et des inspecteurs de propriétés, car « keywords » et « description » sont des valeurs, et non des
balises, de l’attribut NAME de la balise META.
<!-- tag:INTJ,priority:5,selection:exact,vline,hline -->
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine5.0//pi">
<HTML>
<HEAD>
<TITLE>Interjection Inspector</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function canInspectSelection(){
return true;
}
228
Chapitre 12 : Inspecteurs de propriétés
function inspectSelection() {
// Get the DOM of the current document var
// theDOM = dw.getDocumentDOM();
// Get the selected node var theObj = theDOM.getSelectedNode();
// Get the value of the TYPE attribute on the INTJ tag var
// theType = theObj.getAttribute(’type’);
// Initialize a variable called typeIndex to -1. This will be
// used to store the menu index that corresponds to
// the value of the TYPE attribute
var typeIndex = -1;
// If there was a TYPE attribute
if (theType){
// If the value of TYPE is "jeepers", set typeIndex to 0
if (theType.toLowerCase() == "jeepers"){
typeIndex = 0;
// If the value of TYPE is "jinkies", set typeIndex to 1
}else if (theType.toLowerCase() == "jinkies"){
typeIndex = 1;
// If the value of TYPE is "zoinks", set typeIndex to 2
}else if (theType.toLowerCase() == "zoinks"){
typeIndex = 2;
}
}
//
//
//
if
If the value of the TYPE attribute was "jeepers",
"jinkies", or "zoinks", choose the corresponding
option from the pop-up menu in the interface
(typeIndex != -1){
document.topLayer.document.topLayerForm.intType.¬
selectedIndex = typeIndex;
}
}
function setInterjectionTag(){
// Get the DOM of the current document
var theDOM = dw.getDocumentDOM();
// Get the selected node
var theObj = theDOM.getSelectedNode();
// Get the index of the selected option in the pop-up menu
// in the interface
var typeIndex = document.topLayer.document.¬
topLayerForm.intType.selectedIndex;
// Get the value of the selected option in the pop-up menu
// in the interface
var theType = document.topLayer.document.¬
topLayerForm.intType.options[typeIndex].value;
// Set the value of the TYPE attribute to theType
theObj.setAttribute(’type’,theType);
}
</SCRIPT>
</HEAD>
<BODY>
<SPAN ID="image" STYLE="position:absolute; width:23px; ¬
height:17px; z-index:16; left: 3px; top: 2px">
API de l’inspecteur de propriétés
229
<IMG SRC="interjection.gif" WIDTH="36" HEIGHT="36" ¬
NAME="interjectionImage">
</SPAN>
<SPAN ID="label" STYLE="position:absolute; width:23px; ¬
height:17px; z-index:16; left: 44px; top: 5px">Interjection</SPAN>
<!-- If your form fields are in different layers, you must ¬
create a separate form inside each layer and reference it as ¬
shown in the inspectSelection() and setInterjectionTag() ¬
functions above. -->
<SPAN ID="topLayer" STYLE="position:absolute; z-index:1; ¬
left: 125px; top: 3px; width: 431px; height: 32px">
<FORM NAME="topLayerForm">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR>
<TD VALIGN="baseline" ALIGN="right">Entrez :</TD>
<TD VALIGN="baseline" ALIGN="right">
<SELECT NAME="intType" STYLE="width:86" ¬
onChange="setInterjectionTag()">
<OPTION VALUE="jeepers">Jeepers</OPTION>
<OPTION VALUE="jinkies">Jinkies</OPTION>
<OPTION VALUE="zoinks">Zoinks</OPTION>
</SELECT>
</TR>
</TABLE>
</FORM>
</SPAN>
</BODY>
</HTML>
230
Chapitre 12 : Inspecteurs de propriétés
CHAPITRE 13
Panneaux flottants
Vous pouvez créer tous types de panneaux flottants ou d’inspecteurs sans les limitations de taille
ou de mise en page de l’inspecteur de propriétés.
Un inspecteur de propriétés personnalisé doit rester votre premier choix pour définir les propriétés
de la sélection en cours. Toutefois, les panneaux flottants personnalisés offrent plus d’espace et de
souplesse pour afficher des informations relatives à l’ensemble du document ou à plusieurs
sélections.
Les fichiers de panneaux flottants personnalisés sont des fichiers HTML qui résident dans le
dossier Configuration/Floaters du dossier de l’application Macromedia Dreamweaver MX 2004.
La section BODY d’un fichier de panneau flottant contient un formulaire HTML. Des
gestionnaires d’événements associés aux éléments du formulaire peuvent appeler un code
JavaScript pour effectuer des modifications arbitraires dans le document actif.
Dreamweaver possède plusieurs panneaux flottants intégrés accessibles depuis le menu Fenêtre
(ces panneaux intégrés font partie du code principal de Dreamweaver ; vous ne trouverez donc pas
de fichier de panneau flottant leur correspondant dans le dossier Configuration/Floaters).
Vous pouvez créer et ajouter vos propres panneaux au menu Fenêtre. Pour plus d’informations sur
l’ajout d’éléments au système de menus, voir Chapitre 8, Menus et commandes de menu, page 151.
Fonctionnement des fichiers de panneau flottant
Les panneaux flottants personnalisés peuvent être déplacés, redimensionnés et leurs onglets
combinés, à l’instar des panneaux flottants intégrés à Dreamweaver. Les panneaux flottants
personnalisés présentent les différences suivantes par rapport aux panneaux flottants intégrés :
• Les panneaux flottants personnalisés s’affichent en gris par défaut. La définition de l’attribut
BGCOLOR
dans la balise BODY n’a aucun effet.
• Tous les panneaux flottants personnalisés s’affichent toujours au premier plan dans la fenêtre de
document ou bien flottent derrière celle-ci lorsqu’ils sont inactifs, suivant le paramètre de
l’option Toutes autres palettes défini dans les Préférences de panneaux.
231
Les fichiers de panneau flottant diffèrent également des autres fichiers d’extension. Contrairement
aux autres fichiers d’extension, Dreamweaver ne charge pas de fichiers de panneau flottant en
mémoire au démarrage, sauf si les panneaux flottants étaient affichés la dernière fois que
Dreamweaver a été fermé. Si aucun panneau flottant n’était visible lors de la fermeture de
Dreamweaver, les fichiers définissant ces panneaux sont chargés uniquement lorsqu’ils sont
référencés à partir de l’une des fonctions suivantes : dreamweaver.getFloaterVisibility(),
dreamweaver.setFloaterVisibility() ou dreamweaver.toggleFloater(). Pour plus
d’informations sur ces fonctions, voir le Guide des API de Dreamweaver.
Lorsque l’un des fichiers du dossier Configuration appelle les fonctions
dw.getFloaterVisibility(floaterName), dw.setFloaterVisibility(floaterName)
dw.toggleFloater(floaterName), les événements suivants se produisent :
ou
1 Si l’argument floaterName ne correspond pas à l’un des noms de panneau flottant réservés,
Dreamweaver recherche dans le dossier Configuration/Floaters un fichier nommé
floaterName.htm (pour obtenir une liste complète des noms de panneau flottant réservés, voir
la fonction dreamweaver.getFloaterVisibility() dans le Guide des API de Dreamweaver.
Si floaterName.htm est introuvable, Dreamweaver recherche floaterName.html. Si aucun
2
3
4
5
fichier de ce nom n’est trouvé, aucun autre événement ne se produit.
Si le fichier de panneau flottant est chargé pour la première fois, la fonction
initialPosition() est appelée, si elle est définie, pour déterminer la position par défaut du
panneau flottant à l’écran et la fonction initialTabs() est appelée, si elle est définie, pour
déterminer le groupement d’onglets par défaut du panneau flottant.
Les fonctions selectionChanged() et documentEdited() sont appelées car il est supposé que
des modifications ont été apportées pendant que le panneau flottant était masqué.
Lorsque le panneau flottant est visible, les événements suivants se produisent :
■ Lorsqu’un élément différent est sélectionné, la fonction selectionChanged() est appelée,
si elle est définie.
■ Lorsque l’utilisateur modifie le document, la fonction documentEdited() est appelée, si elle
est définie.
■ Les gestionnaires d’événements associés aux champs dans l’interface de panneau flottant
s’exécutent au fur et à mesure que l’utilisateur les rencontre (par exemple, un bouton associé
à un gestionnaire d’événements onClick exécutant
dw.getDocumentDOM().body.innerHTML=’’ a pour effet, lorsque l’utilisateur clique
dessus, de supprimer tous les éléments situés entre les balises BODY de début et de fin dans le
document).
Lorsque l’utilisateur quitte Dreamweaver, la visibilité, la position et le groupement d’onglets
actuellement définis pour le panneau flottant sont enregistrés. Au démarrage suivant,
l’application Dreamweaver charge les fichiers de panneau flottant correspondant à tous les
panneaux flottants qui étaient affichés au moment de la dernière fermeture de l’application et
elle affiche les panneaux flottants au même endroit et avec le même groupement d’onglets.
API du panneau flottant
Toutes les fonctions personnalisées de l’API de panneau flottant sont facultatives.
Certaines fonctions de cette section ne fonctionnent que sous Windows. Leur description indique
si tel est le cas.
232
Chapitre 13 : Panneaux flottants
displayHelp()
Description
Si cette fonction est définie, un bouton Aide s’affiche sous les boutons OK et Annuler dans la
boîte de dialogue. Cette fonction est appelée lorsque l’utilisateur clique sur le bouton Aide.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver n’attend rien.
Exemple
// the following instance of displayHelp() opens
// in a browser a file that explains how to use
// the extension.
function displayHelp(){
var myHelpFile = dw.getConfigurationPath() +
’/ExtensionsHelp/superDuperHelp.htm’;
dw.browseDocument(myHelpFile);
}
documentEdited()
Description
Cette fonction est appelée lorsque le panneau flottant s’affiche et une fois que la série de
modifications en cours est terminée, ce qui signifie que plusieurs modifications peuvent être
effectuées avant que cette fonction ne soit appelée. Cette fonction ne doit être définie que si le
panneau flottant doit assurer le suivi des modifications apportées au document.
Remarque : Ne définissez la fonction documentEdited() que si vous en avez besoin, car elle a un
impact sur les performances.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver n’attend rien.
Exemple
Dans l’exemple suivant, la fonction documentEdited() recherche des calques dans le document
et met à jour un champ de texte affichant le nombre de calques du document :
function documentEdited(){
/* create a list of all the layers in the document */
var theDOM = dw.getDocumentDOM();
var layersInDoc = theDOM.getElementsByTagName("layer");
var layerCount = layersInDoc.length;
/* update the numOfLayers field with the new layer count */
document.theForm.numOfLayers.value = layerCount;
}
API du panneau flottant
233
getDockingSide()
Disponibilité
Dreamweaver MX.
Description
Indique où vous pouvez ancrer les panneaux flottants. Cette fonction renvoie une chaîne
contenant une combinaison des mots "left", "right", "top" et "bottom" (à savoir, à gauche, à
droite, en haut et en bas). Vous pouvez ancrer le panneau flottant sur le côté indiqué dans la
chaîne. Si aucune indication n’apparaît, vous ne pouvez pas ancrer de panneau flottant.
Cette fonction est pratique pour empêcher l’ancrage de certains panneaux sur un côté spécifique
de l’espace de travail de Dreamweaver ou sur un autre panneau.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une chaîne contenant les mots "left", "right", "top" ou "bottom", ou une
combinaison de ces mots indiquant où Dreamweaver peut ancrer le panneau flottant.
Exemple
getDockingSide()
{
return dock_side = “left top”;
}
initialPosition()
Description
Détermine la position initiale du panneau flottant lorsqu’il est appelé pour la première fois. Si
cette fonction n’est pas définie, la position par défaut est le centre de l’écran.
Arguments
platform
• L’argument platform a la valeur Mac ou Win, selon la plate-forme de l’utilisateur.
Valeurs renvoyées
Dreamweaver attend une chaîne au format "leftPosInPixels,topPosInPixels".
234
Chapitre 13 : Panneaux flottants
Exemple
Dans l’exemple suivant, la fonction initialPosition() spécifie que lorsque le panneau flottant
s’affiche pour la première fois, il doit se trouver à 420 pixels du côté gauche de l’écran et à
20 pixels du haut de l’écran sous Windows ou à 390 pixels du côté gauche et à 20 pixels du haut
de l’écran sur Macintosh :
function initialPosition(platform){
var initPos = "420,20";
if (platform == "macintosh"){
initPos = "390,20";
}
return initPos;
}
initialTabs()
Description
Détermine les autres panneaux flottants dont les onglets sont combinés à ceux de ce panneau,
lorsqu’il s’affiche pour la première fois. Si l’un des panneaux flottants répertoriés s’est affiché
précédemment, il n’est pas inclus dans le groupement d’onglets. Pour que les onglets de deux
panneaux flottants personnalisés soient combinés, chacun d’eux doit référencer l’autre dans sa
fonction initialTabs().
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une chaîne au format "floaterName1,floaterName2,...floaterNameN".
Exemple
Dans l’exemple suivant, la fonction initialTabs() spécifie que lorsque le panneau flottant
s’affiche pour la première fois, ses onglets doivent être combinés à ceux du panneau flottant
scriptEditor :
function initialTabs(){
return "scriptEditor";
}
isATarget()
Disponibilité
Dreamweaver MX (sous Windows uniquement)
Description
Détermine si d’autres panneaux peuvent s’ancrer à ce panneau flottant. Si la fonction
isATarget() n’est pas spécifiée, Dreamweaver empêche les autres panneaux de s’ancrer à celui-ci.
Dreamweaver appelle cette fonction lorsque l’utilisateur essaie de combiner ce panneau avec
d’autres.
Arguments
Aucun.
API du panneau flottant
235
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si d’autres panneaux flottants peuvent s’ancrer à
celui-ci ; false dans le cas contraire.
Exemple
IsATarget()
{
return true;
}
isAvailableInCodeView()
Description
Détermine si le panneau flottant doit être activé lorsque le mode Code est sélectionné. Si cette
fonction n’est pas définie, le panneau flottant est désactivé dans l’Affichage de code.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le panneau flottant doit être activé en mode
Code ; false dans le cas contraire.
isResizable()
Disponibilité
Dreamweaver 4.
Description
Détermine si l’utilisateur peut redimensionner le panneau flottant. Si cette fonction n’est pas
définie, ou si elle renvoie la valeur true, l’utilisateur peut redimensionner le panneau flottant. Si
la fonction renvoie la valeur false, l’utilisateur ne peut pas redimensionner le panneau flottant.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si l’utilisateur peut redimensionner le panneau
flottant ; false dans le cas contraire.
Exemple
Dans l’exemple suivant, l’utilisateur ne peut pas redimensionner le panneau flottant :
function isResizable()
{
return false;
}
236
Chapitre 13 : Panneaux flottants
selectionChanged()
Description
Appelée lorsque le panneau flottant s’affiche et à chaque changement de sélection (lorsqu’un
nouveau document devient actif ou lorsque le pointeur d’insertion passe à un nouvel
emplacement dans le document actif ). Cette fonction ne doit être définie que si le panneau
flottant doit assurer le suivi de la sélection.
Remarque : Ne définissez la fonction selectionChanged() que si vous en avez absolument besoin,
car elle a un impact sur les performances.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
Exemple
Dans l’exemple suivant, la fonction selectionChanged() affiche un calque différent dans le
panneau flottant selon que la sélection est un marqueur de script. Si la sélection est un marqueur
de script, Dreamweaver rend le calque de script visible. Sinon, Dreamweaver rend le calque vierge
visible :
function selectionChanged(){
/* get the selected node */
var theDOM = dw.getDocumentDOM();
var theNode = theDOM.getSelectedNode();
/* check to see if the node is a script marker */
if (theNode.nodeType == Node.ELEMENT_NODE && ¬
theNode.tagName == "SCRIPT"){
document.layers[’blanklayer’].visibility = ’hidden’;
document.layers[’scriptlayer’].visibility = ’visible’;}
else{
document.layers[’scriptlayer’].visibility = ’hidden’;
document.layers[’blanklayer’].visibility = ’visible’;
}
}
A propos des performances
La déclaration des fonctions selectionChanged() ou documentEdited() dans vos panneaux
flottants personnalisés risque d’avoir des répercussions négatives sur les performances de
Dreamweaver. Cela est dû au fait que les fonctions documentEdited() et selectionChanged()
sont appelées après chaque frappe d’une touche et chaque clic de la souris si Dreamweaver est
resté inactif plus d’un dixième de seconde. Il est important de tester votre panneau flottant avec
divers scénarios, en utilisant des documents volumineux (100 Ko ou plus de code HTML) autant
que possible.
Pour éviter les pertes de performances, la fonction setTimeout() a été implémentée en tant que
méthode globale dans Dreamweaver 3. Tout comme dans les navigateurs, la fonction
setTimeout() accepte deux arguments : le code JavaScript devant être appelé et le délai d’attente
avant cet appel en millisecondes.
API du panneau flottant
237
La méthode setTimeout() vous permet d’introduire dans votre traitement des pauses au cours
desquelles l’utilisateur peut poursuivre son interaction avec l’application. Vous devez incorporer
ces pauses de façon explicite étant donné que l’écran se fige pendant le traitement des scripts et,
par conséquent, vous empêche d’effectuer d’autres modifications (et de mettre à jour l’interface
ou le panneau flottant).
L’exemple suivant correspond à un panneau flottant qui affiche des informations sur chacun des
calques du document. Il utilise la méthode setTimeout() pour faire une pause d’une demiseconde après le traitement de chaque couche.
/* create a flag that specifies whether an edit is being processed, and set it
to false. */
document.running = false;
/* this function called when document is edited */
function documentEdited(){
/* create a list of all the layers to be processed */
var dom = dw.getDocumentDOM();
document.layers = dom.getElementsByTagName("layer");
document.numLayers = document.layers.length;
document.numProcessed = 0;
/*
*
*
if
set a timer to call processLayer(); if we didn’t get
to finish processing the previous edit, then the timer
is already set. */
(document.running = false){
setTimeout("processLayer()", 500);
}
/* set the processing flag to true */
document.running = true;
}
/* process one layer */
function processLayer(){
/* display information for the next unprocessed layer.
displayLayer() is a function you would write to
perform the "magic". */
displayLayer(document.layers[document.numProcessed]);
/* if there’s more work to do, set a timeout to process
* the next layer. If we’re finished, set the document.running
* flag to false. */
document.numProcessed = document.numProcessed + 1;
if (document.numProcessed < document.numLayers){
setTimeout("processLayer()", 500);
}else{
document.running = false;
}
}
238
Chapitre 13 : Panneaux flottants
Script Editor : une extension de panneau flottant
L’extension Script Editor crée un panneau flottant pour afficher le code JavaScript inhérent à un
marqueur de script en mode Création. L’éditeur de script affiche le code JavaScript dans l’élément
textarea d’un formulaire HTML défini dans un calque nommé scriptlayer. Si vous apportez
des modifications au code sélectionné dans le panneau flottant, l’extension appelle la fonction
updateScript() pour enregistrer vos modifications. Si vous n’avez pas sélectionné de marqueur
de script lorsque vous invoquez l’éditeur de script, l’extension affiche (no script selected)
dans un calque nommé blanklayer.
Procédez comme suit pour créer l’exemple d’extension :
1 Créez un calque HTML (scriptlayer) pour afficher le code JavaScript d’un marqueur de
script sélectionné et un second calque (blanklayer) pour afficher (no script selected) si
aucun marqueur de script n’a été sélectionné.
2 Rédigez le code JavaScript.
3 Enregistrez les codes JavaScript et HTML dans le fichier scriptEditor.htm au sein du dossier
Configuration/Floaters.
4 Créez une balise menuitem dans le fichier menus.xml pour invoquer l’extension.
Création des panneaux flottants
Le début du fichier HTML de cette extension comporte les informations d’en-tête de document
standard et une balise title qui inscrit les mots Script Editor dans la barre de titre des panneaux
flottants. L’exemple suivant indique le code :
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Script Editor</title>
<script language="JavaScript">
L’extension définit deux panneaux flottants qui affichent soit le message (no script selected)
si l’utilisateur n’a pas sélectionné de marqueur de script ou le code JavaScript inhérent à un
marqueur de script sélectionné. Le code suivant définit ces deux panneaux flottants, ou calques,
nommés blanklayer et scriptlayer :
<body>
<div id="blanklayer" style="position:absolute; width:422px; ¬
height:181px; z-index:1; left: 8px; top: 11px; ¬
visibility: hidden">
<center>
<br>
<br>
<br>
<br>
<br>
(no script selected)
</center>
</div>
<div id="scriptlayer" style="position:absolute; width:422px; ¬
height:181px; z-index:1; left: 8px; top: 11px; ¬
visibility: visible">
<form name="theForm">
<textarea name="scriptCode" cols="80" rows="20" wrap="VIRTUAL" ¬
onBlur="updateScript()"></textarea>
Script Editor : une extension de panneau flottant
239
</form>
</div>
</body>
</html>
Les deux balises div utilisent l’attribut style pour définir la position (absolute), la taille
(width: 422px and height:181px) et le paramètre visibility par défaut (visible) des
panneaux flottants. Le panneau blanklayer utilise l’attribut center ainsi qu’une série de balises
de saut de ligne (br) pour positionner le texte au centre du panneau. Le panneau scriptlayer
crée un formulaire contenant une balise textarea unique pour afficher le code JavaScript
sélectionné. La balise textarea spécifie également que, lorsque survient un événement onBlur
indiquant une modification du code sélectionné, la fonction updateScript() est appelée pour
écrire à nouveau le texte modifié dans le document.
Ecriture du code JavaScript
Le code JavaScript pour l’éditeur de script consiste en un panneau flottant appelé par
Dreamweaver, selectionchanged(), et une fonction définie par l’utilisateur, updateScript().
selectionChanged(): is a Script marker selected?
La fonction selectionChanged() détermine si un marqueur de script a été sélectionné en mode
Création. Un marqueur de script s’affiche dans le mode Création si une routine JavaScript est
présente dans la section BODY d’un document et si Scripts est sélectionné dans la section Eléments
invisibles de la boîte de dialogue Préférences. La figure suivante représente une icône de marqueur
de script :
Marqueur de script
La fonction selectionChanged() de l’éditeur de script comporte le code suivant :
function selectionChanged(){
/* get the selected node */
var theDOM = dw.getDocumentDOM();
var theNode = theDOM.getSelectedNode();
/* check to see if the node is a script marker */
if (theNode.nodeType == Node.ELEMENT_NODE && ¬
theNode.tagName == "SCRIPT"){
document.layers[’scriptlayer’].visibility = ’visible’;
document.layers[’scriptlayer’].document.theForm.¬
scriptCode.value = theNode.innerHTML;
document.layers[’blanklayer’].visibility = ’hidden’;
240
Chapitre 13 : Panneaux flottants
}else{
document.layers[’scriptlayer’].visibility = ’hidden’;
document.layers[’blanklayer’].visibility = ’visible’;
}
}
La fonction selectionChanged() commence par appeler la fonction dw.getDocumentDOM()
pour obtenir le DOM du document de l’utilisateur. Elle appelle ensuite la fonction
getSelectedNode() pour voir si le nœud sélectionné pour ce document est un élément, mais
également une balise SCRIPT. Si ces deux conditions sont réunies, la fonction
selectionChanged() rend visible le calque scripteditor et le charge avec le code JavaScript
inhérent. Elle définit également la propriété visibility du calque blanklayer à la valeur
hidden. La figure suivante représente le panneau flottant scriptlayer avec le code JavaScript
sélectionné :
Si le nœud sélectionné n’est pas un élément ou qu’il ne s’agit pas d’une balise SCRIPT, la fonction
selectionChanged() rend visible le calque blanklayer et cache scriptlayer. Le panneau
flottant blanklayer affiche le texte (no script selected), comme indiqué dans la figure suivante :
Script Editor : une extension de panneau flottant
241
updateScript(): write back changes
La fonction updateScript() écrit à nouveau le script sélectionné lorsqu’un événement onBlur
survient dans la zone textarea du panneau scriptlayer. L’élément de formulaire textarea
contient le code JavaScript et l’événement onBlur lorsque textarea n’est plus la zone
sélectionnée. La fonction updateScript() a un aspect identique à l’exemple suivant :
/* update the document with any changes made by
the user in the textarea */
function updateScript(){
var theDOM = dw.getDocumentDOM();
var theNode = dw.getSelectedNode();
theNode.innerHTML = document.layers[’scriptlayer’].document.¬
theForm.scriptCode.value;
}
</script>
</head>
Enregistrement du fichier dans le dossier Floaters
Les codes JavaScript et HTML doivent ensuite être enregistrés dans le fichier scripteditor.htm au
sein du dossier Configuration/Floaters. L’enregistrement du fichier scriptEditor.htm dans le
dossier Floaters autorise l’accès de Dreamweaver à l’extension de panneau flottant.
Création d’un élément de menu
Il ne suffit pas d’enregistrer le code d’éditeur de script dans le dossier Configuration/Floaters.
Vous devez également appeler la fonction dw.setFloaterVisibility(’scriptEditor’,true)
ou la fonction dw.toggleFloater(’scriptEditor’) pour charger et rendre visible le panneau
flottant. L’emplacement le plus logique pour invoquer l’éditeur de script est le menu Fenêtre,
défini dans le fichier menus.xml. La balise menuitem pour l’éditeur de script peut avoir un aspect
similaire à l’exemple suivant :
<menuitem name="Script Editor" enabled="true" ¬
command="dw.toggleFloater(’scriptEditor’)"¬
checked="dw.getFloaterVisibility(’scriptEditor’)" />
Cette balise menuitem crée une entrée pour l’extension d’éditeur de script dans le menu Fenêtre,
comme indiqué dans la figure suivante :
Si vous sélectionnez un marqueur de script dans le mode Création pour le document en cours,
puis que vous sélectionnez l’élément de menu d’éditeur de script, le panneau flottant d’éditeur de
script est invoqué et le code JavaScript inhérent au marqueur de script s’affiche. Si vous
sélectionnez l’élément de menu lorsque aucun marqueur de script n’a été sélectionné, le panneau
blanklayer, contenant le texte (no script selected) s’affiche.
242
Chapitre 13 : Panneaux flottants
CHAPITRE 14
Comportements
Les comportements permettent aux utilisateurs de créer des pages HTML interactives. Ils
donnent aux concepteurs de sites Web la possibilité d’affecter facilement des actions à des
éléments de page en remplissant un formulaire HTML.
Vous devez écrire des actions de comportement lorsque vous souhaitez partager des fonctions avec
des utilisateurs ou lorsque vous souhaitez insérer la même fonction JavaScript à plusieurs reprises
tout en modifiant les paramètres à chaque fois.
Remarque : Vous ne pouvez pas utiliser les comportements pour insérer des fonctions VBScript
directement ; vous pouvez toutefois ajouter une fonction VBScript indirectement en modifiant le
DOM dans la fonction applyBehavior().
Le terme comportement fait référence à la combinaison d’un événement (tel que onClick, onLoad
ou onSubmit) et d’une action (par exemple, Vérifier le plug-in, Atteindre l’URL, Permuter une
image). Le navigateur détermine quels éléments HTML acceptent quels événements. Les fichiers
répertoriant les événements que chaque navigateur prend en charge sont stockés dans le dossier
Configuration/Behaviors/Events du dossier de l’application Macromedia
Dreamweaver MX 2004.
Les actions constituent la partie d’un comportement que vous pouvez contrôler ; ainsi, lorsque
vous rédigez un comportement, vous rédigez en réalité un fichier d’action. Les actions sont des
fichiers HTML. La section BODY d’un fichier d’action contient généralement un formulaire
HTML qui accepte les paramètres de l’action (par exemple, les paramètres indiquant les calques à
afficher ou masquer). La section HEAD d’un fichier d’action contient des fonctions JavaScript qui
traitent les entrées de formulaire du contenu BODY et contrôlent les fonctions, arguments et
gestionnaires d’événements insérés dans le document de l’utilisateur.
Remarque : Pour plus d’informations sur les comportements des serveurs qui offrent une
fonctionnalité d’application Web, voir Comportements de serveur, page 255.
243
Fonctionnement des comportements
Lorsqu’un utilisateur sélectionne un élément HTML dans un document Dreamweaver et clique
sur le bouton Plus (+), les événements suivants se produisent :
1 Dreamweaver appelle la fonction canAcceptBehavior() dans chaque fichier d’action pour
2
3
4
5
6
7
8
244
vérifier si l’action est adaptée au document ou à l’élément sélectionné.
Si cette fonction renvoie la valeur false, Dreamweaver estompe l’action dans le menu
déroulant des actions (par exemple, l’action Contrôler Shockwave ou Flash est estompée
lorsque le document de l’utilisateur ne contient pas de fichiers SWF.) Si la valeur renvoyée est
une liste d’événements, Dreamweaver les compare un à un aux événements valides de l’élément
HTML actuellement sélectionné et du navigateur cible jusqu’à ce qu’une correspondance soit
trouvée. Dreamweaver insère au début de la liste du menu déroulant des événements
l’événement correspondant obtenu à partir de la fonction canAcceptBehavior() ; si aucune
correspondance n’a été trouvée, l’événement par défaut de l’élément HTML (marqué d’un
astérisque [*] dans le fichier d’événements) devient le premier élément de la liste. Les autres
événements du menu sont assemblés à partir du fichier d’événements.
L’utilisateur sélectionne une action dans le menu déroulant des actions.
Dreamweaver appelle la fonction windowDimensions() pour déterminer la taille de la boîte de
dialogue des paramètres. Si la fonction windowDimensions() n’est pas définie, la taille est
déterminée automatiquement.
Une boîte de dialogue s’affiche toujours, avec les boutons OK et Annuler sur le côté droit, quel
que soit le contenu de l’élément BODY.
Dreamweaver affiche une boîte de dialogue contenant les éléments BODY du fichier d’action. Si
la balise BODY du fichier d’action contient un gestionnaire onLoad, Dreamweaver l’exécute.
L’utilisateur entre les paramètres de l’action. Dreamweaver exécute les gestionnaires
d’événements associés aux champs du formulaire au fur et à mesure que l’utilisateur les
rencontre.
L’utilisateur clique sur OK.
Dreamweaver appelle les fonctions behaviorFunction() et applyBehavior() dans le fichier
d’action sélectionné. Ces fonctions renvoient des chaînes qui sont insérées dans le document de
l’utilisateur.
Si l’utilisateur double-clique sur l’action dans la colonne Actions, Dreamweaver rouvre la boîte
de dialogue des paramètres et exécute le gestionnaire onLoad. Dreamweaver appelle alors la
fonction inspectBehavior() dans le fichier d’action sélectionné, ce qui a pour effet de
renseigner les champs à l’aide des données que l’utilisateur a entrées précédemment.
Chapitre 14 : Comportements
Insertion de plusieurs fonctions dans le fichier de l’utilisateur
Les actions peuvent insérer plusieurs fonctions (la fonction de comportement principale et un
nombre illimité de fonctions d’assistance) dans la section HEAD. Plusieurs comportements peuvent
même partager des fonctions d’assistance, à condition que les fonctions soient définies exactement
de la même façon dans chaque fichier d’action. Une façon de garantir que les fonctions partagées
sont identiques consiste à stocker chaque fonction d’assistance dans un fichier JavaScript externe
et à insérer ce dernier dans les fichiers d’action appropriés à l’aide de <SCRIPT
SRC="externalFile.js">.
Lorsque l’utilisateur supprime un comportement, Dreamweaver tente de supprimer toutes les
fonctions d’assistance inutilisées associées à ce comportement. Si d’autres comportements utilisent
une fonction d’assistance, celle-ci n’est pas supprimée. En raison de l’extrême prudence de
l’algorithme de suppression des fonctions d’assistance, Dreamweaver peut occasionnellement
laisser une fonction inutilisée dans le document de l’utilisateur.
API de comportements
Deux fonctions d’API de comportements sont obligatoires : applyBehavior() et
behaviorFunction() ; les autres sont facultatives.
applyBehavior()
Description
Cette fonction insère, dans le document de l’utilisateur, un gestionnaire d’événements qui appelle
la fonction insérée par la fonction behaviorFunction(). La fonction applyBehavior() peut
également exécuter d’autres modifications dans le document de l’utilisateur, mais elle ne doit pas
supprimer l’objet auquel le comportement est appliqué ou qui reçoit l’action.
Arguments
uniqueName
• Cet argument est un identifiant unique parmi toutes les instances de tous les comportements
du document de l’utilisateur. Son format est functionNameInteger, où functionName
correspond au nom de la fonction insérée par behaviorFunction(). Cet argument peut être
utile si vous insérez une balise dans le document de l’utilisateur et souhaitez affecter une valeur
unique à son attribut NAME.
Valeurs renvoyées
Dreamweaver renvoie une chaîne contenant l’appel de fonction qui doit être inséré dans le
document de l’utilisateur, généralement après acceptation des paramètres entrés par l’utilisateur.
Si la fonction applyBehavior() détermine que l’utilisateur a effectué une entrée non valide, la
fonction peut renvoyer une chaîne d’erreur au lieu de l’appel de fonction. Dreamweaver ne signale
aucune erreur si la chaîne est vide (return "";), mais si la chaîne n’est pas vide et qu’elle n’est pas
non plus un appel de fonction, Dreamweaver affiche une boîte de dialogue contenant le texte :
Invalid Input supplied for this behavior: [the string returned from applyBehavior()] (l’entrée
spécifiée n’est pas valide pour ce comportement : [chaîne renvoyée par applyBehavior()]). Si la
valeur renvoyée est null (return;), Dreamweaver indique qu’une erreur s’est produite mais sans
fournir plus de détails.
Remarque : Les guillemets ("") contenus dans la chaîne renvoyée doivent être précédés d’une barre
oblique inversée (\) afin d’éviter que l’interpréteur JavaScript ne signale des erreurs.
API de comportements
245
Exemple
Dans l’exemple suivant, la fonction applyBehavior() renvoie un appel à la fonction
MM_openBrWindow() et transmet les paramètres fournis par l’utilisateur (hauteur et largeur de la
fenêtre ; affichage des barres de défilement, une barre d’outils, une barre d’emplacement et
d’autres fonctions ; URL devant s’ouvrir dans la fenêtre) :
function applyBehavior() {
var i,theURL,theName,arrayIndex = 0;
var argArray = new Array(); //use array to produce correct ¬
number of commas w/o spaces
var checkBoxNames = new Array("toolbar","location",¬
"status","menubar","scrollbars","resizable");
for (i=0; i<checkBoxNames.length; i++) {
theCheckBox = eval("document.theForm." + checkBoxNames[i]);
if (theCheckBox.checked) argArray[arrayIndex++] = ¬
(checkBoxNames[i] + "=yes");
}
if (document.theForm.width.value)
argArray[arrayIndex++] = ("width=" + ¬
document.theForm.width.value);
if (document.theForm.height.value)
argArray[arrayIndex++] = ("height=" + ¬
document.theForm.height.value);
theURL = escape(document.theForm.URL.value);
theName = document.theForm.winName.value;
return "MM_openBrWindow(’"+theURL+"’,¬
’"+theName+"’,’"+argArray.join()+"’)";
}
behaviorFunction()
Description
Cette fonction insère une ou plusieurs fonctions (placées entre les balises suivantes, si elle
n’existent pas déjà) dans la section HEAD du document utilisateur :
<SCRIPT LANGUAGE="JavaScript"></SCRIPT>
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver renvoie soit une chaîne contenant les fonctions JavaScript, soit une chaîne
contenant les noms des fonctions à insérer dans le document de l’utilisateur. Cette valeur doit être
chaque fois identique (elle ne peut pas dépendre des données entrées par l’utilisateur). Les
fonctions sont insérées une seule fois, quel que soit le nombre de fois que l’action est appliquée
aux éléments du document.
Remarque : Les guillemets ("") contenus dans la chaîne renvoyée doivent être précédés d’une barre
oblique inversée (\) afin d’éviter que l’interpréteur JavaScript ne signale des erreurs.
246
Chapitre 14 : Comportements
Exemple
L’instance suivante de la fonction behaviorFunction() renvoie la fonction MM_popupMsg() :
function behaviorFunction(){
return ""+
"function MM_popupMsg(theMsg) { //v1.0\n"+
" alert(theMsg);\n"+
"}";
}
Le code suivant est équivalent à la déclaration de fonction behaviorFunction() précédente et il
s’agit de la méthode utilisée pour déclarer la fonction behaviorFunction() dans tous les
comportements fournis avec Dreamweaver :
function MM_popupMsg(theMsg){ //v1.0
alert(theMsg);
}
function behaviorFunction(){
return "MM_popupMsg";
}
canAcceptBehavior()
Description
Cette fonction indique si l’action est autorisée pour l’élément HTML sélectionné et définit
l’événement par défaut qui doit la déclencher. Elle peut également rechercher la présence de
certains objets (tels que des fichiers SWF) dans le document de l’utilisateur et interdire l’action si
ces objets sont absents.
Arguments
HTMLElement
• L’argument est l’élément HTML sélectionné.
Valeurs renvoyées
Dreamweaver renvoie l’une des valeurs suivantes :
• La valeur true si l’action est autorisée mais n’est associée à aucun événement préféré.
• Une liste des événements préférés (par ordre décroissant de préférence) de cette action. La
•
définition d’événements préférés remplace l’événement par défaut (signalé par un astérisque [*]
dans le fichier d’événements) de l’objet sélectionné. Voir l’étape 1 dans la section
Fonctionnement des comportements, page 244.
La valeur false si l’action n’est pas autorisée.
Si la fonction canAcceptBehavior() renvoie la valeur false, l’action est estompée dans le menu
contextuel Actions du panneau Comportements.
API de comportements
247
Exemple
Dans l’exemple suivant, la fonction canAcceptBehavior() renvoie une liste des événements
préférés pour le comportement si le document contient des images nommées :
function canAcceptBehavior(){
var theDOM = dreamweaver.getDocumentDOM();
// Get an array of all images in the document
var allImages = theDOM.getElementsByTagName(’IMG’);
if (allImages.length > 0){
return "onMouseOver, onClick, onMouseDown";
} else {
return false;
}
}
displayHelp()
Description
Si cette fonction est définie, un bouton Aide apparaît sous les boutons OK et Annuler dans la
boîte de dialogue des paramètres. Cette fonction est appelée lorsque l’utilisateur clique sur le
bouton Aide.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
Exemple
// the following instance of displayHelp() opens
// in a browser a file that explains how to use
// the extension.
function displayHelp(){
var myHelpFile = dw.getConfigurationPath() +
’/ExtensionsHelp/superDuperHelp.htm’;
dw.browseDocument(myHelpFile);
}
deleteBehavior()
Description
Cette fonction annule toute modification effectuée par la fonction applyBehavior().
Remarque : Dreamweaver supprime automatiquement la déclaration de fonction et le gestionnaire
d’événements associés à un comportement lorsque l’utilisateur supprime ce comportement dans le
panneau Comportements. Il faut uniquement définir la fonction deleteBehavior() si la fonction
applyBehavior() a effectué des modifications supplémentaires dans le document de l’utilisateur (par
exemple, si elle a inséré une balise).
Arguments
applyBehaviorString
• Cet argument correspond à la chaîne renvoyée par la fonction applyBehavior().
248
Chapitre 14 : Comportements
Valeurs renvoyées
Dreamweaver ne renvoie rien.
identifyBehaviorArguments()
Description
Cette fonction associe les arguments d’un appel de fonction de comportement à des liens de
navigation, fichiers dépendants, URL, références de style Netscape 4.0 ou noms d’objet pour que
les URL utilisées dans les comportements puissent être mises à jour si l’utilisateur enregistre le
document dans un autre emplacement et pour que les fichiers référencés puissent s’afficher dans la
carte du site et être considérés comme des fichiers dépendants afin de pouvoir être téléchargés vers
et depuis un serveur.
Arguments
theFunctionCall
• Cet argument correspond à la chaîne renvoyée par la fonction applyBehavior().
Valeurs renvoyées
Dreamweaver renvoie une chaîne contenant une liste des types d’arguments de l’appel de fonction
séparés par des virgules. La longueur de la liste doit être égale au nombre d’arguments transmis
lors de l’appel de fonction. Les types d’argument doivent correspondre à l’un des types suivants :
• L’argument nav indique que l’argument est une URL de navigation et qu’il doit donc être
•
•
•
•
•
•
affiché dans la carte du site.
Le type d’argument dep indique que l’argument est une URL de fichier dépendant et qu’il doit
donc être inclus avec tous les autres fichiers dépendants lorsqu’un document contenant ce
comportement est téléchargé depuis ou vers un serveur.
L’argument URL indique que l’argument est à la fois une URL de navigation et une URL
dépendante (ou une URL de type inconnu), et qu’il doit donc être affiché dans la carte du site
et considéré comme un fichier dépendant lors du téléchargement depuis ou vers un serveur.
L’argument NS4.0ref indique que l’argument est une référence à un objet de style Netscape
Navigator 4.0.
L’argument IE4.0ref indique que l’argument est une référence à un objet de style DOM 4.0
d’Internet Explorer.
L’argument objName indique que l’argument est un nom d’objet simple, tel qu’il est spécifié
dans l’attribut NAME de l’objet. Ce type a été ajouté à Dreamweaver 3.
Le type d’argument other indique que l’argument n’appartient à aucun des types ci-dessus.
Exemple
Cet exemple simple de fonction identifyBehaviorArguments() fonctionne avec l’action de
comportement Ouvrir une fenêtre du navigateur qui renvoie une fonction comportant toujours
trois arguments (l’URL à ouvrir, le nom de la nouvelle fenêtre et la liste des propriétés de la
fenêtre) :
function identifyBehaviorArguments(fnCallStr) {
return "URL,other,other";
}
API de comportements
249
Une version plus complexe de la fonction identifyBehaviorArguments() est nécessaire pour les
fonctions de comportement ayant un nombre variable d’arguments (telles qu’Afficher-Masquer
les calques). Pour cet exemple de version de la fonction identifyBehaviorArguments(), il existe
un nombre minimum d’arguments et les arguments supplémentaires se présentent toujours en
groupes dont la taille est un multiple de ce nombre minimum. En d’autres termes, une fonction
dont le nombre d’arguments minimum est 4 peut avoir 4, 8 ou 12 arguments, mais elle n’en aura
jamais 10 :
function identifyBehaviorArguments(fnCallStr) {
var listOfArgTypes;
var itemArray = dreamweaver.getTokens(fnCallStr, ’(),’);
// The array of items returned by getTokens() includes the
// function name, so the number of *arguments* in the array
// is the length of the array minus one. Divide by 4 to get the
// number of groups of arguments.
var numArgGroups = ((itemArray.length - 1)/4);
// For each group of arguments
for (i=0; i < numArgGroups; i++){
// Add a comma and "NS4.0ref,IE4.0ref,other,dep" (because this
// hypothetical behavior function has a minimum of four
// arguments the Netscape object reference, the IE object
// reference, a dependent URL, and perhaps a property value
// such as "show" or "hide") to the existing list of argument
// types, or if no list yet exists, add only
// "NS4.0ref,IE4.0ref,other,dep"
var listOfArgTypes += ((listOfArgTypes)?",":"") + ¬
"NS4.0ref,IE4.0ref,other,dep";
}
}
inspectBehavior()
Description
Cette fonction recherche dans l’appel de fonction un comportement déjà appliqué au document
de l’utilisateur et définit les valeurs des options de la boîte de dialogue des paramètres en
conséquence. Si la fonction inspectBehavior() n’est pas définie, les valeurs par défaut des
options s’affichent.
Remarque : La fonction inspectBehavior() doit uniquement utiliser les informations qui lui sont
transmises via l’argument applyBehaviorString. N’essayez pas d’obtenir d’autres informations sur le
document de l’utilisateur (par exemple, en utilisant la fonction dreamweaver.getDocumentDOM()) dans
cette fonction.
Arguments
applyBehaviorString
• Cet argument correspond à la chaîne renvoyée par la fonction applyBehavior().
Valeurs renvoyées
Dreamweaver ne renvoie rien.
250
Chapitre 14 : Comportements
Exemple
L’instance suivante de la fonction inspectBehavior(), extraite du fichier Display Status
Message.htm, renseigne le champ Message de la boîte de dialogue des paramètres avec le message
que l’utilisateur a sélectionné lors de la première application du comportement :
function inspectBehavior(msgStr){
var startStr = msgStr.indexOf("’") + 1;
var endStr = msgStr.lastIndexOf("’");
if (startStr > 0 && endStr > startStr) {
document.theForm.message.value = ¬
unescQuotes(msgStr.substring(startStr,endStr));
}
}
Remarque : Pour plus d’informations sur la fonction unescQuotes(), voir le fichier dwscripts.js du
dossier Configuration/Shared/Common/Scripts/CMN.
windowDimensions()
Description
Cette fonction définit les dimensions de la boîte de dialogue des paramètres. Si cette fonction
n’est pas définie, les dimensions de la fenêtre sont calculées automatiquement.
Remarque : Ne définissez cette fonction que si vous souhaitez utiliser une boîte de dialogue de
paramètres ayant des dimensions supérieures à 640 x 480 pixels.
Arguments
platform
• La valeur de l’argument est soit "macintosh", soit "windows", selon la plate-forme utilisée par
l’utilisateur.
Valeurs renvoyées
Dreamweaver renvoie une chaîne au format "widthInPixels,heightInPixels".
Les dimensions renvoyées sont inférieures à la taille totale de la boîte de dialogue parce qu’elles
n’incluent pas la zone des boutons OK et Annuler. Si les dimensions renvoyées ne permettent pas
de faire apparaître toutes les options, des barres de défilement s’affichent.
Exemple
Dans l’exemple suivant, la fonction windowDimensions() définit les dimensions de la boîte de
dialogue des paramètres à 648 x 520 pixels :
function windowDimensions(){
return "648,520";
}
API de comportements
251
Procédure à suivre lorsqu’une action exige une valeur renvoyée
Il peut arriver qu’un gestionnaire d’événements exige une valeur renvoyée (par exemple,
onMouseOver="window.status=’This is a link’; return true"). Mais si Dreamweaver
insère l’action "return behaviorName(args)" dans le gestionnaire d’événements, les autres
comportements de la liste sont ignorés.
Pour contourner cette limitation, affectez la valeur de retour souhaitée à la variable
document.MM_returnValue, dans la chaîne renvoyée par la fonction behaviorFunction(). Ce
paramétrage entraîne l’insertion par Dreamweaver de return document.MM_returnValue à la
fin de la liste des actions du gestionnaire d’événements. Pour voir un exemple d’utilisation de la
variable MM_returnValue , voir le fichier Validate Form.js dans le dossier Configuration/
Behaviors/Actions au sein du dossier de l’application Dreamweaver.
Exemple de comportement simple
Pour mieux comprendre le fonctionnement des comportements et la façon de le créer, il peut être
utile d’examiner un exemple. Le dossier Configuration/Behaviors/Actions du dossier de
l’application Dreamweaver contient des exemples, mais la plupart sont trop complexes (à moins
d’être un développeur expert). Le fichier d’action le plus simple pour commencer est Call
JavaScript.htm (avec son homologue, Call JavaScript.js, qui contient toutes les fonctions
JavaScript).
Le code suivant présente un exemple relativement simple. Il vérifie le type du navigateur et atteint
une page spécifique s’il s’agit de Netscape Navigator et une page différente s’il s’agit de Microsoft
Internet Explorer. Ce code peut facilement être étendu pour vérifier d’autres types de navigateurs
(tels qu’Opera et WebTV) et modifié pour exécuter d’autres actions que l’action d’atteindre des
URL.
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine 5.0//dialog">
<html>
<head>
<title>behavior "Check Browser Brand"</title>
<meta http-equiv="Content-Type" content="text/html">
<script language="JavaScript">
// The function that will be inserted into the
// HEAD of the user’s document
function checkBrowserBrand(netscapeURL,explorerURL) {
if (navigator.appName == "Netscape") {
if (netscapeURL) location.href = netscapeURL;
}else if (navigator.appName == "Microsoft Internet Explorer") {
if (explorerURL) location.href = explorerURL;
}
}
//******************* API **********************
function canAcceptBehavior(){
return true;
}
// Return the name of the function to be inserted into
// the HEAD of the user’s document
function behaviorFunction(){
return "checkBrowserBrand";
}
252
Chapitre 14 : Comportements
// Create the function call that will be inserted
// with the event handler
function applyBehavior() {
var nsURL = escape(document.theForm.nsURL.value);
var ieURL = escape(document.theForm.ieURL.value);
if (nsURL && ieURL) {
return "checkBrowserBrand(\’" + nsURL + "\’,\’" + ieURL + ¬
"\’)";
}else{
return "Please enter URLs in both fields."
}
}
// Extract the arguments from the function call
// in the event handler and repopulate the
// parameters form
function inspectBehavior(fnCall){
var argArray = getTokens(fnCall, "()’,");
var nsURL = unescape(argArray[1]);
var ieURL = unescape(argArray[2]);
document.theForm.nsURL.value = nsURL;
document.theForm.ieURL.value = ieURL;
}
//***************** LOCAL FUNCTIONS
******************
// Put the cursor in the first text field
// and select the contents, if any
function initializeUI(){
document.theForm.nsURL.focus();
document.theForm.nsURL.select();
}
// Let the user browse to the Navigator and
// IE URLs
function browseForURLs(whichButton){
var theURL = dreamweaver.browseForFileURL();
if (whichButton == "nsURL"){
document.theForm.nsURL.value = theURL;
}else{
document.theForm.ieURL.value = theURL;
}
}
//*************** END OF JAVASCRIPT *****************
</script>
</head>
<body>
<form method="post" action="" name="theForm">
<table border="0" cellpadding="8">
<tr>
<td nowrap="nowrap">  Go to this URL if the browser is ¬
Netscape Navigator:<br>
<input type="text" name="nsURL" size="50" value="">  
<input type="button" name="nsBrowse" value="Browse..." ¬
onClick="browseForURLs(’nsURL’)"></td>
</tr>
<tr>
<td nowrap="nowrap">  Go to this URL is the browser is ¬
Microsoft Internet Explorer:<br>
API de comportements
253
<input type="text" name="ieURL" size="50" value="">  
<input type="button" name="ieBrowse" value="Browse..." ¬
onClick="browseForURLs(’ieURL’)"></td>
</tr>
</table>
</form>
</body>
</html>
254
Chapitre 14 : Comportements
CHAPITRE 15
Comportements de serveur
Macromedia Dreamweaver MX 2004 permet aux utilisateurs d’ajouter des comportements de
serveur à leurs documents afin d’exécuter des tâches côté serveur, par exemple pour filtrer des
enregistrements en fonction de critères préalablement définis, parcourir des enregistrements, lier
des listes de résultats à des pages d’informations détaillées et insérer des enregistrements dans un
jeu de résultats. Si l’utilisateur insère sans cesse le même code d’exécution dans les documents, il a
tout intérêt à créer une nouvelle extension afin d’automatiser la mise à jour de documents à l’aide
de blocs de code couramment utilisés. Voir Ajout de comportements de serveur personnalisés
dans le guide Bien démarrer avec Dreamweaver pour plus de détails sur l’utilisation de l’interface
de l’outil Créateur de comportements de serveur pour créer des comportements de serveur
personnalisés. Revenez ensuite au présent chapitre pour des détails sur l’utilisation de fichiers
prenant en charge les comportements de serveur et les fonctions interagissant avec les
comportements de serveur existants. Pour plus d’informations sur chaque fonction, voir
Fonctions relatives aux comportements de serveur et Fonctions du gestionnaire de données
d’extension dans le Guide des API de Dreamweaver. Dreamweaver prend actuellement en charge
les extensions de comportement de serveur qui ajoutent du code d’exécution pour les modèles de
serveurs suivants : ASP.Net/C#, ASP.Net/VisualBasic, ASP/JavaScript, ASP/VBScript,
ColdFusion, JSP et PHP/MySQL.
Le présent chapitre utilise les termes suivants :
• Extension de comportement de serveur : L’extension de comportement de serveur est
•
l’interface entre le code côté serveur et Dreamweaver. Une extension de comportement de
serveur est composée d’un code JavaScript, d’un code HTML et d’un code EDML (Extension
Data Markup Language) qui est du code XML créé spécifiquement pour les données
d’extension. Des fichiers d’exemple, organisés en fonction du type de serveur utilisé, sont
localisés dans le dossier Configuration/ServerBehaviors, à l’intérieur de votre dossier
d’installation. Lorsque vous rédigez une extension, vous devez utiliser la fonction
dwscripts.applySB() pour demander à Dreamweaver de lire les fichiers EDML, d’extraire
les composants de votre extension et d’ajouter les blocs de code nécessaires au document
utilisateur.
Instance de comportement de serveur : L’ajout par Dreamweaver de blocs de code au
document utilisateur constitue une instance de comportement de serveur. La plupart des
comportements de serveur pouvant être appliqués plusieurs fois, les instances peuvent être
multiples. Chaque instance de comportement de serveur est répertoriée dans le panneau
Comportements de serveur de l’interface Dreamweaver.
255
• Code d’exécution : Ensemble des blocs de code ajoutés à un document lorsqu’un
•
comportement de serveur est appliqué. Ces blocs de code sont d’ordinaire un code côté serveur,
par exemple, un script ASP compris entre des balises <% ... %%>.
Participants : L’extension de comportement de serveur insère des blocs de code dans le
document utilisateur. Un bloc de code est un bloc de script unique et continu, tel qu’une balise
côté serveur, une balise HTML, voire un attribut qui ajoute une fonctionnalité côté serveur à
une page Web. Un fichier EDML désigne chaque bloc de code par le terme de participant.
Tous les participants pour un comportement de serveur donné forment un groupe de
participants.
Remarque : Pour plus d’informations sur les fichiers participants et groupes, ainsi que sur la façon
dont les fichiers EDML de Dreamweaver sont structurés, voir Extension Data Markup Language
(EDML), page 256.
Architecture de Dreamweaver
Lorsque vous utilisez l’outil Créateur de comportements de serveur pour créer une extension
spécifique Dreamweaver, Dreamweaver génère plusieurs fichiers (fichiers de script EDML et
HTML) qui prennent en charge l’insertion du code de comportement de serveur dans un
document Dreamweaver (certains comportements référencent également les fichiers JavaScript
pour une fonctionnalité optimale). L’architecture simplifie votre implémentation de l’API et
sépare votre code d’exécution de la méthode d’application de Dreamweaver. Ce chapitre explique
comment modifier ces fichiers.
Dossiers et fichiers de comportements de serveur
L’interface utilisateur pour chaque comportement de serveur réside dans le dossier Configuration/
ServerBehaviors/ServerModelName, où ServerModelName correspond à l’un des types de serveur
suivants : ASP.NET_Csharp, ASP.NET_VB (Visual Basic), ASP_Js (JavaScript), ASP_Vbs
(VBScript), ColdFusion, JSP, PHP_MySQL ou Shared (implémentations inter-modèles de
serveur).
Extension Data Markup Language (EDML)
Dreamweaver génère deux fichiers EDML lorsque vous utilisez l’outil Créateur de
comportements de serveur : un fichier groupe EDML et un fichier participant EDML
correspondant aux noms indiqués dans le Créateur de comportements de serveur. Le fichier
groupe définit les participants appropriés, qui représentent des blocs de code et les groupes
définissent les participants devant être combinés pour former un comportement de serveur
individuel.
Fichiers Groupe
En général, les fichiers Groupe contiennent une liste de participants et les fichiers Participant
comportent toutes les données sur le code spécifiques au modèle de serveur. Les fichiers
Participant peuvent être utilisés par plusieurs extensions pour permettre à plusieurs fichiers
Groupes de référencer le même fichier Participant.
L’exemple suivant présente une vue de haut niveau du fichier EDML du groupe de
comportements de serveur. Pour obtenir une liste complète des éléments et des attributs, voir
Balises de fichiers EDML Groupe, page 271.
256
Chapitre 15 : Comportements de serveur
<group serverBehavior="Go To Detail Page.htm" dataSource="Recordset.htm">
<groupParticipants selectParticipant="goToDetailPage_attr">
<groupParticipant name="moveTo_declareParam" partType="member"/>
<groupParticipant name="moveTo_keepParams" partType="member"/>
<groupParticipant name="goToDetailPage_attr" partType="identifier" />
</groupParticipants>
</group>
Dans la balise de bloc groupParticipants, chaque balise groupParticipant indique le fichier
Participant EDML contenant le bloc de code à utiliser. La valeur de l’attribut name est le nom du
fichier Participant moins l’extension .edml (par exemple, l’attribut moveTo_declareParam).
Fichiers Participant
Un participant représente un bloc de code unique sur la page, tel une balise de serveur, une balise
HTML ou un attribut. Pour pouvoir être utilisé par un auteur Dreamweaver, le fichier Participant
doit figurer dans le fichier Groupe. Plusieurs groupes de fichiers peuvent utiliser un seul fichier
Participant.
Par exemple, le fichier moveTo_declareParam.edml contient le code suivant :
<participant>
<quickSearch><![CDATA[MM_paramName]]></quickSearch>
<insertText location="aboveHTML+80">
<![CDATA[
<% var MM_paramName = ""; %>
]]>
</insertText>
<searchPatterns whereToSearch="directive">
<searchPattern><![CDATA[/var\s*MM_paramName/]]></searchPattern>
</searchPatterns>
</participant>
Pour ajouter un comportement de serveur à un document, Dreamweaver a besoin d’informations
détaillées, notamment l’endroit où insérer le code, l’aspect du code et les paramètres remplacés par
l’auteur ou par les données lors de l’exécution. C’est ce que chaque fichier EDML Participant
décrit pour chaque bloc de code. Plus particulièrement, le fichier Participant décrit les données
suivantes :
• Ce code et l’emplacement de l’instance unique sont définis par les paramètres de la balise
insertText,
comme illustré dans l’exemple suivant :
<insertText location="aboveHTML+80">
• Comment reconnaître les instances déjà sur la page qui sont définies par la balise
searchPatterns,
comme illustré dans l’exemple suivant :
<searchPatterns whereToSearch="directive">
<searchPattern><![CDATA[/var\s*MM_paramName/]]></searchPattern>
</searchPatterns>
Dans la balise de bloc searchPatterns, chaque balise searchPattern contient un modèle
utilisé pour rechercher des instances de code d’exécution et pour extraire des paramètres
spécifiques. Pour plus d’informations, voir Techniques de comportements de serveur, page 296.
Architecture de Dreamweaver
257
Fichier Script
Chaque comportement de serveur dispose également d’un fichier HTML contenant les fonctions
et les liens relatifs aux scripts qui gèrent l’intégration du code de comportement de serveur à
l’interface Dreamweaver. Les fonctions pouvant être modifiées sont traitées dans Fonctions
d’implémentation des comportements de serveur, page 266.
Exemple « Hello World »
L’exemple suivant illustre le processus de création d’un nouveau comportement de serveur et vous
permet de voir et de gérer les fichiers générés par Dreamweaver. Pour plus d’informations sur
l’utilisation de l’interface du Créateur de comportements de serveur, voir Ajout de
comportements de serveur personnalisés dans Bien démarrer avec Dreamweaver. L’exemple affiche
« Hello World » du serveur ASP. Le comportement « Hello World » contient un seul participant
(une simple balise ASP) et rien n’est modifié, ni ajouté sur la page.
Remarque : Cet exemple fait référence à des fonctions définies plus loin dans ce chapitre.
Procédez comme suit pour créer un document contenant des pages dynamiques :
1 Dans Dreamweaver, choisissez Fichier > Nouveau.
2 Dans la boîte de dialogue Nouveau document, sélectionnez Catégorie : Page dynamique et Page
dynamique : ASP JavaScript
3 Cliquez sur Créer.
Procédez comme suit pour définir le nouveau comportement de serveur à l’aide de l’outil
Créateur de comportements de serveur.
Remarque : Si le panneau Comportements de serveur n’est ni ouvert, ni visible, choisissez Fenêtre >
Comportements de serveur.
1 Dans le panneau Comportements de serveur, sélectionnez le bouton plus (+) et l’option
Nouveau comportement de serveur.
2 Dans la boîte de dialogue Nouveau comportement de serveur, sélectionnez Type de document :
ASP JavaScript et nom : Hello World
(Ne cochez pas la case Copier un comportement de serveur existant.)
3 Cliquez sur OK.
Pour définir le code à insérer :
1 Sélectionnez le bouton plus (+) pour l’option Blocs de code à insérer.
2 Dans la boîte de dialogue Créer un nouveau bloc de code, entrez Hello_World_block1
(Dreamweaver entre cette information automatiquement dans certains cas).
3 Cliquez sur OK.
4 Dans le champ de texte Bloc de code, entrez <% Response.Write(“Hello World”) %>.
5 Dans le menu déroulant Insérer code, sélectionnez Relatif à la sélection pour permettre à
l’utilisateur de contrôler l’emplacement du code dans le document.
6 Dans le menu déroulant Position relative, sélectionnez .
7 Cliquez sur OK.
258
Chapitre 15 : Comportements de serveur
Dans le panneau Comportements de serveur, vous constatez que le menu plus (+) contient le
nouveau comportement de serveur dans la liste déroulante. Dans le dossier d’installation de vos
fichiers Dreamweaver, le dossier Configuration/ServerBehaviors/ASP_Js contient désormais les
trois fichiers suivants :
• Le fichier Groupe : Hello World.edml
• Le fichier Participant : Hello World_block1.edml
• Un fichier de script : Hello World.htm
Remarque : Si vous travaillez dans un environnement multiutilisateur, ces fichiers s’affichent dans
votre dossier Application Data.
Comment appeler les fonctions de l’API de comportement de
serveur
Les fonctions de l’API de comportement de serveur sont appelées dans les situations suivantes :
• La fonction findServerBehaviors() est appelée à l’ouverture du document et à chaque fois
•
qu’un participant est modifié. Elle recherche des instances du comportement de serveur dans le
document utilisateur. Pour chaque instance trouvée, la fonction findServerBehaviors() crée
un objet JavaScript et lui associe des informations d’état à l’aide de propriétés JavaScript.
Lorsqu’elle est mise en œuvre, Dreamweaver appelle la fonction analyzeServerBehavior()
pour chaque comportement trouvé dans le document utilisateur après que toutes les fonctions
findServerBehaviors() ont été appelées.
Lorsque la fonction findServerBehaviors() crée un objet de comportement, elle définit
normalement les quatre propriétés (incomplete, participants, selectedNode et title).
Cependant, il est parfois plus facile de retarder la configuration de certaines des propriétés
jusqu’à ce que tous les autres comportements de serveur aient trouvé des instances d’euxmêmes. Par exemple, le comportement Déplacer vers l’enregistrement suivant est composé de
deux participants ; un objet lien et un objet jeu d’enregistrements. Plutôt que de rechercher
l’objet du jeu d’enregistrements dans sa fonction findServerBehaviors(), attendez que la
fonction findServerBehaviors() du comportement du jeu d’enregistrements soit exécutée,
car le jeu d’enregistrements recherche toutes ses propres instances.
Lorsque la fonction analyzeServerBehavior() du comportement Déplacer vers
l’enregistrement suivant est appelée, un tableau lui est transmis, contenant tous les objets de
comportement de serveur du document. La fonction peut rechercher l’objet de jeu
d’enregistrements dans le tableau.
En cours d’analyse, il arrive que deux comportements ou plus identifient une seule balise dans
le document utilisateur comme étant une instance de ce comportement. Supposons, par
exemple, que la fonction findServerBehaviors() pour le comportement Attribut
dynamique détecte une instance du comportement Attribut dynamique associée à une balise
input dans le document utilisateur. Simultanément, la fonction findServerBehaviors()
pour le comportement Champ de texte dynamique peut analyser la même balise input et
détecter une instance du comportement Champ de texte dynamique. Le panneau
Comportements de serveur affiche alors le bloc Attribut dynamique et le comportement
Champ de texte dynamique. Pour corriger ce problème, utilisez les fonctions
analyzeServerBehavior() pour supprimer tous les comportements de serveur redondants
sauf un.
Comment appeler les fonctions de l’API de comportement de serveur
259
•
Pour supprimer un comportement de serveur, une fonction analyzeServerBehavior() peut
définir la propriété deleted dudit comportement sur la valeur true. Si la propriété deleted a
toujours la valeur true lorsque Dreamweaver finit d’appeler les fonctions
analyzeServerBehavior(), le comportement disparaît de la liste.
Lorsque l’utilisateur clique sur le bouton plus (+) du panneau Comportements de serveur, le
menu contextuel s’affiche.
Pour déterminer le contenu du menu, Dreamweaver recherche d’abord un fichier
ServerBehaviors.xml dans le même répertoire que celui des comportements.
ServerBehaviors.xml fait référence aux fichiers HTML devant apparaître dans le menu.
Si le fichier HTML référencé contient une balise de titre (title), le contenu de cette balise
s’affiche dans le menu. Par exemple, si le fichier ServerBehaviors/ASP_Js/GetRecords.htm
contient la balise <title>Get More Records</title>, le texte Get More Records s’affiche
dans le menu.
Si le fichier ne contient pas de balise de titre, c’est le nom du fichier qui apparaît dans le menu.
Par exemple, si GetRecords.htm ne contient pas de balise de titre, la mention GetRecords
s’affiche dans le menu.
S’il n’y a pas de fichier ServerBehaviors.xml ou si le répertoire contient un ou plusieurs fichiers
HTML non mentionnés dans ServerBehaviors.xml, Dreamweaver recherche une balise title
dans chaque fichier et fait figurer dans le menu le nom de cette balise ou celui du fichier.
Si vous ne voulez pas qu’un fichier du répertoire ServerBehaviors s’affiche dans le menu,
ajoutez l’instruction suivante sur la première ligne du fichier HTML :
<!-- MENU-LOCATION=NONE -->
• La fonction canApplyServerBehavior() est appelée lorsque l’utilisateur sélectionne un
•
•
•
260
élément dans le menu. Si cette fonction renvoie une valeur true, une boîte de dialogue
s’affiche. Lorsque l’utilisateur clique sur , la fonction applyServerBehavior() est appelée.
Si l’utilisateur double-clique sur un comportement de serveur existant pour le modifier,
Dreamweaver affiche la boîte de dialogue, exécute le gestionnaire onLoad sur la balise BODY (si
elle existe), puis appelle la fonction inspectServerBehavior(). La fonction
inspectServerBehavior() renseigne les éléments du formulaire avec les valeurs des
paramètres en cours. Lorsque l’utilisateur clique sur OK, Dreamweaver appelle à nouveau la
fonction applyServerBehavior().
Si l’utilisateur clique sur le bouton moins (-), la fonction deleteServerBehavior() est
appelée. La fonction deleteServerBehavior() supprime les comportements correspondants
du document.
Lorsque l’utilisateur sélectionne un comportement de serveur et utilise les commandes Couper
ou Copier , Dreamweaver transmet l’objet représentant le comportement de serveur à sa
fonction copyServerBehavior(). La fonction copyServerBehavior() ajoute à l’objet de
comportement les autres propriétés nécessaires à son collage ultérieur.
Une fois la fonction copyServerBehavior() renvoyée, Dreamweaver convertit l’objet de
comportement en un formulaire qui peut être placé dans le Presse-papiers. Pendant la
conversion de l’objet, Dreamweaver supprime toutes les propriétés faisant référence à des
objets ; toute propriété de l’objet autre qu’un nombre, un opérateur booléen ou une chaîne est
perdue.
Chapitre 15 : Comportements de serveur
Lorsque l’utilisateur appuie sur la commande Coller, Dreamweaver décompresse le contenu du
Presse-papiers et génère un nouvel objet de comportement de serveur. Ce nouvel objet est
identique à l’original, sauf qu’il ne contient aucune propriété faisant référence à des objets.
Dreamweaver transmet le nouvel objet de comportement à la fonction
pasteServerBehavior(). La fonction pasteServerBehavior() ajoute le comportement au
document utilisateur. Une fois la fonction pasteServerBehavior() renvoyée, Dreamweaver
appelle les fonctions findServerBehaviors() pour obtenir la nouvelle liste des
comportements de serveur présents dans le document utilisateur.
Les utilisateurs peuvent copier et coller des comportements d’un document à un autre. Pour
échanger des informations, les fonctions copyServerBehavior() et pasteServerBehavior()
doivent se baser uniquement sur les propriétés de l’objet de comportement.
API de comportement de serveur
Les fonctions suivantes sont les API que vous pouvez utiliser pour gérer des comportements de
serveur.
analyzeServerBehavior()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction permet aux comportements de serveur de définir leurs indicateurs sur les
propriétés incomplete et deleted.
Une fois la fonction findServerBehaviors() appelée pour tous les comportements de serveur
sur la page, un tableau de tous les comportements s’affiche dans le document utilisateur. Pour
chaque objet JavaScript présent dans le tableau, la fonction analyzeServerBehavior() est
appelée. Par exemple, pour le comportement Texte dynamique, Dreamweaver appelle la fonction
analyzeServerBehavior() dans le fichier DynamicText.htm (ou DynamicText.js).
La fonction analyzeServerBehavior() a notamment pour but de terminer la définition de
toutes les propriétés (incomplete, participants, selectedNode et title) sur l’objet de
comportement. Il est parfois plus facile d’exécuter cette tâche après que la fonction
findServerBehaviors() a généré une liste exhaustive des comportements de serveur présents
dans le document utilisateur.
L’autre but de la fonction analyzeServerBehavior() est de rechercher si plusieurs
comportements se réfèrent à la même balise dans le document utilisateur. Dans ce cas, la propriété
deleted est utilisée pour supprimer du tableau tous les comportements sauf un.
API de comportement de serveur
261
Supposons que les comportements de serveur Recordset1, DynamicText1 et DynamicText2 se
trouvent sur une page. Les deux comportements de serveur DynamicText requièrent Recordset1
pour exister sur la page. Une fois les comportements de serveur détectés par le biais de la fonction
findServerBehaviors(), Dreamweaver appelle la fonction analyzeServerBehavior() pour
les trois comportements de serveur. Lorsque la fonction analyzeServerBehavior() est appelée
pour DynamicText1, elle inspecte le tableau de tous les objets de comportement de serveur
présents sur la page, à la recherche de celui qui appartient à Recordset1. Si elle ne trouve pas
l’objet de comportement de serveur qui appartient à Recordset1, la propriété incomplete est
affectée de la valeur true et un point d’exclamation est affiché dans le panneau Comportements
de serveur, indiquant à l’utilisateur qu’il y a un problème. De même, lorsque la fonction
analyzeServerBehavior() est appelée pour DynamicText2, elle recherche l’objet appartenant à
Recordset1. Comme Recordset1 ne dépend d’aucun autre comportement de serveur, il n’a pas
besoin de définir la fonction analyzeServerBehavior() dans cet exemple.
Arguments
serverBehavior, [serverBehaviorArray]
• L’argument serverBehavior est un objet JavaScript représentant le comportement à analyser.
• L’argument [serverBehaviorArray] est un tableau d’objets JavaScript représentant
l’ensemble des comportements de serveur trouvés sur une page.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
applyServerBehavior()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction consulte les valeurs des éléments de formulaire dans la boîte de dialogue et ajoute
le comportement au document utilisateur. Dreamweaver appelle cette fonction lorsque
l’utilisateur clique sur dans la boîte de dialogue Comportements de serveur. Si la fonction est
exécutée avec succès, la boîte de dialogue Comportements de serveur est fermée. Si elle échoue, la
boîte de dialogue Comportements de serveur reste ouverte et un message d’erreur s’affiche à
l’écran. Cette fonction peut modifier un document utilisateur.
Pour plus d’informations, voir dwscripts.applySB(), page 267.
Arguments
serverBehavior
•
serverBehavior est un objet JavaScript représentant le comportement de serveur ; il est
nécessaire de modifier un comportement existant. S’il s’agit d’un nouveau comportement,
l’argument est null.
Valeurs renvoyées
Dreamweaver attend une chaîne vide en cas de succès ou un message d’erreur en cas d’échec.
262
Chapitre 15 : Comportements de serveur
canApplyServerBehavior()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction détermine si un comportement peut être appliqué. Dreamweaver appelle cette
fonction avant d’afficher la boîte de dialogue Comportements de serveur. Si la fonction renvoie la
valeur true, la boîte de dialogue Comportements de serveur s’affiche. Si la fonction renvoie la
valeur false, la boîte de dialogue Comportements de serveur ne s’affiche pas et la tentative
d’ajout d’un comportement de serveur est interrompue.
Arguments
serverBehavior
•
serverBehavior est un objet JavaScript représentant le comportement ; il est nécessaire de
modifier un comportement existant. S’il s’agit d’un nouveau comportement, l’argument est
null.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le comportement peut être appliqué, sinon
false.
copyServerBehavior()
Disponibilité
Dreamweaver UltraDev 1.
Description
L’utilisation de la fonction copyServerBehavior() est facultative. Cette fonction permet aux
utilisateurs de copier des instances du comportement de serveur spécifié. Dans l’exemple suivant,
cette fonction est utilisée pour les jeux d’enregistrements. Lorsqu’un utilisateur sélectionne un jeu
d’enregistrements dans les panneaux Comportements de serveur ou Liaisons de données, à l’aide
de la commande Copier ou Couper, copie le comportement dans le Presse-papiers. Les
commandes Copier et Couper n’ont aucun effet sur les comportements de serveur qui ne mettent
pas en œuvre cette fonction. Pour plus d’informations, voir Comment appeler les fonctions de l’API
de comportement de serveur, page 259.
Pour échanger des informations, les fonctions copyServerBehavior() et
pasteServerBehavior() doivent uniquement se baser sur les propriétés de l’objet de
comportement capables d’être converties en chaînes. Le Presse-papiers ne contient que du texte
brut ; il est, pour cette raison, nécessaire de résoudre les nœuds participant dans le document et
d’enregistrer le texte brut qui en résulte dans une propriété secondaire.
Remarque : Il est également important de mettre en œuvre la fonction pasteServerBehavior() pour
permettre à l’utilisateur de coller le comportement dans un document Dreamweaver.
Arguments
serverBehavior
•
serverBehavior
est un objet JavaScript représentant le comportement.
API de comportement de serveur
263
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le comportement est copié avec succès dans le
Presse-papiers, sinon false.
deleteServerBehavior()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction supprime le comportement du document utilisateur. Elle est appelée lorsque
l’utilisateur clique sur le bouton moins (-) du panneau Comportements de serveur. Elle permet de
modifier un document utilisateur.
Pour plus d’informations, voir dwscripts.deleteSB(), page 268.
Arguments
serverBehavior
•
serverBehavior
est un objet JavaScript représentant le comportement.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
displayHelp()
Description
Si cette fonction est définie, un bouton Aide s’affiche sous les boutons OK et Annuler dans la
boîte de dialogue. Cette fonction est appelée lorsque l’utilisateur clique sur le bouton Aide.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
Exemple
// the following instance of displayHelp() opens
// in a browser a file that explains how to use
// the extension.
function displayHelp(){
var myHelpFile = dw.getConfigurationPath() +
’/ExtensionsHelp/superDuperHelp.htm’;
dw.browseDocument(myHelpFile);
}
264
Chapitre 15 : Comportements de serveur
findServerBehaviors()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction parcourt le document utilisateur à la recherche d’instances d’elle-même. Pour
chaque instance trouvée, la fonction findServerBehaviors() crée un objet JavaScript et lui
associe des informations d’état en tant que propriétés JavaScript de l’objet.
Les quatre propriétés obligatoires sont incomplete, participants, title et selectedNode.
Vous pouvez définir d’autres propriétés en fonction de vos besoins.
Pour plus d’informations, voir dwscripts.findSBs() et dreamweaver.getParticipants() dans le
Guide des API de Dreamweaver.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un tableau d’objets JavaScript ; la longueur du tableau correspond au
nombre d’instances du comportement trouvées dans la page.
inspectServerBehavior()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction détermine les paramètres de la boîte de dialogue Comportements de serveur en
fonction de l’objet de comportement spécifié. Dreamweaver appelle la fonction
inspectServerBehavior() lorsqu’un utilisateur ouvre une boîte de dialogue de comportement
de serveur. Dreamweaver appelle cette fonction uniquement lorsque l’utilisateur modifie un
comportement existant.
Arguments
serverBehavior
• L’argument serverBehavior est un objet JavaScript représentant le comportement de serveur.
Il s’agit du même objet que celui renvoyé parfindServerBehaviors().
Valeurs renvoyées
Dreamweaver ne renvoie rien.
API de comportement de serveur
265
pasteServerBehavior()
Disponibilité
Dreamweaver UltraDev 1.
Description
Si cette fonction est implémentée, les utilisateurs peuvent coller des instances du comportement
de serveur spécifié à l’aide de la fonction pasteServerBehavior(). Lorsque l’utilisateur colle le
comportement de serveur, Dreamweaver organise le contenu du Presse-papiers et génère un
nouvel objet de comportement. Ce nouvel objet est identique à l’original, sauf qu’il ne contient
aucune propriété de pointeur. Dreamweaver transmet le nouvel objet de comportement à la
fonction pasteServerBehavior(). La fonction pasteServerBehavior() se base sur les
propriétés de l’objet de comportement pour déterminer ce qui doit être ajouté au document
utilisateur. La fonction pasteServerBehavior() ajoute ensuite le comportement au document
utilisateur. Une fois la fonction pasteServerBehavior() renvoyée, Dreamweaver appelle la
fonction findServerBehaviors() pour obtenir la nouvelle liste des comportements de serveur
présents dans le document utilisateur.
L’utilisation de la fonction pasteServerBehavior() est facultative. Pour plus d’informations,
voir Comment appeler les fonctions de l’API de comportement de serveur, page 259.
Remarque : Si vous implémentez cette fonction, vous devez également implémenter la fonction
copyServerBehavior().
Arguments
comportement
•
behavior
est un objet JavaScript représentant le comportement.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le comportement est collé avec succès depuis
le Presse-papiers, sinon false.
Fonctions d’implémentation des comportements de serveur
Vous pouvez ajouter ou modifier ces fonctions dans les fichiers de script HTML, ou dans les
fichiers JavaScript répertoriés dans le fichier de script HTML.
dwscripts.findSBs()
Disponibilité
Dreamweaver MX (cette fonction remplace la fonction findSBs() des versions précédentes de
Dreamweaver).
Description
Cette fonction recherche toutes les instances d’un comportement de serveur sur la page en cours,
ainsi que tous les participants. Elle définit le titre, le type, les tableaux des participants, des poids
et des types, la valeur selectedNode et l’indicateur « incomplete ». Elle crée également un objet
de paramètre contenant un tableau de propriétés définissables par l’utilisateur (le jeu
d’enregistrements, le nom et le nom d’une colonne, par exemple). Vous pouvez renvoyer ce
tableau depuis la fonction findServerBehaviors().
266
Chapitre 15 : Comportements de serveur
Arguments
serverBehaviorTitle
• L’argument serverBehaviorTitle est une chaîne de titre facultative utilisée si aucun titre
n’est spécifié dans le titre EDML, utile pour la localisation.
Valeurs renvoyées
Dreamweaver attend un tableau d’objets JavaScript, avec les propriétés requises définies. Cette
fonction renvoie un tableau vide si aucun comportement de serveur n’apparaît sur la page.
Exemple
L’exemple suivant recherche dans le document utilisateur en cours toutes les instances d’un
comportement de serveur particulier :
function findServerBehaviors() {
allMySBs = dwscripts.findSBs();
return allMySBs;
}
dwscripts.applySB()
Disponibilité
Dreamweaver MX (cette fonction remplace la fonction applySB() des versions précédentes de
Dreamweaver)
Description
Cette fonction insère ou met à jour le code d’exécution du comportement de serveur. Si le
paramètre sbObj a une valeur null, la fonction insère un nouveau code d’exécution ; dans le cas
contraire, elle met à jour le code d’exécution existant indiqué par l’objet sbObj. Définissez les
paramètres utilisateur sous la forme de propriétés sur un objet JavaScript, puis transmettez-les en
tant que paramObj. Ils doivent correspondre à tous les paramètres déclarés sous la forme
@@paramName@@ dans le texte d’insertion XML.
Arguments
paramObj, sbObj
• L’argument paramObj est l’objet contenant les paramètres utilisateur.
• L’argument sbObj est l’objet du comportement de serveur précédent si vous mettez à jour un
comportement de serveur existant, sinon null.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si le comportement est copié avec succès dans le
document utilisateur, sinon false.
Fonctions d’implémentation des comportements de serveur
267
Exemple
Dans l’exemple suivant, remplissez l’objet paramObj comportant les entrées utilisateur et appelez
la fonction dwscripts.applySB() et transmettez les données et votre comportement de serveur,
sbObj :
function applyServerBehaviors(sbObj) {
// get all UI values here...
paramObj = new Object();
paramObj.rs
= rsName.value;
paramObj.col
= colName.value;
paramObj.url
= urlPath.value;
paramObj.form__tag = formObj;
dwscripts.applySB(paramObj, sbObj);
}
dwscripts.deleteSB()
Disponibilité
Dreamweaver MX (cette fonction remplace la fonction deleteSB() des versions précédentes de
Dreamweaver).
Description
Cette fonction supprime tous les participants de l’instance du comportement de serveur sbObj.
Le participant dans son ensemble est supprimé, à moins que le fichier EDML n’indique des
instructions de suppression spéciales à l’aide de la balise delete. Les participants appartenant à
plusieurs instances de comportement de serveur (comptage de référence > 1) ne sont pas
supprimés.
Arguments
sbObj
• L’argument sbObj est l’instance de l’objet du comportement de serveur à supprimer du
document utilisateur.
Valeurs renvoyées
Dreamweaver ne renvoie rien.
Exemple
L’exemple suivant illustre la suppression de tous les participants du comportement de serveur
sbObj, hormis ceux qui sont protégés par la balise delete du fichier EDML.
function deleteServerBehavior(sbObj) {
dwscripts.deleteSB(sbObj);
}
268
Chapitre 15 : Comportements de serveur
Modification de fichiers EDML
Vous devez respecter les conventions de codage Dreamweaver lorsque vous modifiez un fichier.
Faites très attention à la dépendance d’un élément par rapport à un autre. Par exemple, si vous
mettez à jour les balises que vous insérez, il est possible que vous deviez également mettre à jour
les modèles de recherche.
Remarque : Les fichiers EDML ont été ajoutés avec Dreamweaver MX. Si vous travaillez avec des
comportements de serveur existants, reportez-vous aux versions précédentes des manuels
Extension de Dreamweaver.
Expressions régulières
Vous devez connaître les expressions régulières implémentées dans JavaScript 1.5. Vous devez
également savoir à quel moment il convient de les utiliser dans les fichiers EDML de
comportements de serveur. Par exemple, les expressions régulières ne peuvent pas être utilisées
dans les valeurs quickSearch. En revanche, elles sont employées dans le contenu de la balise
searchPattern pour la recherche et l’extraction de données.
Les expressions régulières décrivent des chaînes de texte en utilisant des caractères qui ont une
signification spéciale (métacaractères) pour représenter le texte, le décomposer et le traiter selon
des règles prédéfinies. Les expressions régulières sont des outils d’analyse et de traitement
puissants car elles fournissent une méthode générique de représentation d’un modèle.
Tout bon manuel de référence sur JavaScript 1.5 comporte une section ou un chapitre consacré
aux expressions régulières. Dans cette section, nous examinons la façon dont les fichiers EDML
de comportements de serveur Dreamweaver utilisent les expressions régulières pour rechercher des
paramètres dans votre code d’exécution et pour extraire leurs valeurs. Chaque fois qu’un
utilisateur modifie un comportement de serveur, les valeurs des paramètres doivent être extraites
des instances du code d’exécution. Utilisez des expressions régulières pour la procédure
d’extraction.
Vous devez connaître quelques métacaractères et métaséquences (regroupements de caractères
spéciaux) utiles dans les fichiers EDML de comportements de serveur, comme ceux décrits dans le
tableau suivant :
Expression régulière
Description
\
Arrêter le mode caractères spéciaux. Exemple : \. rétablit le
métacaractère à un point littéral, \/ rétablit la barre oblique à son sens
littéral et \) rétablit la parenthèse à son sens littéral.
/ ... /i
Ne pas tenir compte de la casse lors de la recherche d’une
métaséquence.
( ...)
Créer une sous-expression entre parenthèses dans la métaséquence.
\s*
Rechercher des espaces blancs.
La balise EDML <searchPatterns whereToSearch="directive"> indique qu’une recherche
doit être effectuée dans le code d’exécution. Chaque sous-balise <searchPattern>...</
searchPattern> définit un modèle dans le code d’exécution devant être identifié. L’exemple
Redirect If Empty contient deux modèles.
Modification de fichiers EDML
269
Dans l’exemple suivant, pour extraire des valeurs de paramètres de <% if (@@rs@@.EOF)
Response.Redirect("@@new__url@@"); %>, rédigez une expression régulière qui identifie les
chaînes rs et new__url :
<searchPattern paramNames="rs,new__url">
/if d ((\w+)\.EOF\) Response\.Redirect\("([^\r\n]*)"\)/i
</searchPattern>
Ce processus effectue une recherche dans le document de l’utilisateur et, si une correspondance
est trouvée, les valeurs de paramètre sont extraites. La première sous-expression entre parenthèses
(\w+) extrait la valeur de rs. La deuxième sous-expression ([^\r\n]*) extrait la valeur de
new_url.
Remarque : La séquence de caractères "[^\r\n]*" correspond à tout caractère sauf à un saut de
ligne, sur Macintosh et Windows.
Quelques mots sur la structure EDML
Vous devez utiliser un nom de fichier unique pour identifier votre groupe de comportements de
serveur. Si un fichier Participant associé n’est utilisé que par un fichier Groupe, vous devez donner
à votre fichier Participant un nom correspondant à celui du groupe. Cette convention, permet au
fichier groupe de comportements de serveur updateRecord.edml de fonctionner avec le fichier
participant updateRecord_init.edml. Lorsque les fichiers Participant sont destinés au partage
entre plusieurs groupes de comportements de serveur, vous devez leur donner un nom descriptif
et unique.
Remarque : L’espace de nom EDML étant partagé indépendamment de la structure de dossier,
assurez-vous d’utiliser des noms de fichiers uniques. Les noms de fichiers ne doivent pas comporter
plus de 31 caractères (y compris l’extension .edml) en raison des limitations Macintosh.
Le code d’exécution de votre comportement de serveur réside à l’intérieur de fichiers EDML. Le
programme d’analyse EDML ne doit confondre aucun de vos codes d’exécution avec les balises
EDML. C’est pourquoi la balise CDATA doit envelopper votre code d’exécution. La balise CDATA
représente des données de caractère et correspond à tout texte autre qu’une balise EDML. Lorsque
vous utilisez la balise CDATA, le programme d’analyse EDML n’essaie pas de l’interpréter en tant
que balise, mais l’assimile plutôt à un bloc de texte brut. Les blocs marqués par la balise CDATA
commencent par <![CDATA[ et se terminent par ]]>.
Si vous insérez le texte « Hello, World », vous pouvez spécifier aisément votre EDML de la façon
suivante :
<insertText>Hello, World</insertText>
Cependant, si vous insérez un texte comportant des balises, par exemple <img src=’foo.gif’>,
cela peut être source de confusion pour le programme d’analyse EDML. Dans ce cas, incorporez
votre texte dans la construction CDATA comme indiqué dans l’exemple suivant :
<insertText><![CDATA[<img src=’foo.gif’>]]></insertText>
Le code d’exécution ASP est enveloppé par la balise CDATA définie comme suit :
<![CDATA[
<% if (@@rs@@.EOF) Response.Redirect("@@new__url@@"); %>
]]
270
Chapitre 15 : Comportements de serveur
En raison de la balise CDATA, les balises ASP <%= %>, ainsi que tout ce qui se trouve entre elles, ne
sont pas traitées. Au lieu de cela, le gestionnaire de données d’extension (EDM) reçoit le texte non
interprété, comme indiqué dans l’exemple suivant :
<% if (Recordset1.EOF) Response.Redirect("http://www.macromedia.com"); %>
Dans les définitions EDML suivantes, les emplacements où la balise CDATA est recommandée sont
indiqués dans les exemples.
Balises de fichiers EDML Groupe
Ces balises et attributs sont valides dans les fichiers de groupe EDML.
<group>
Description
Cette balise contient toutes les spécifications relatives à un groupe de participants.
Parent
Aucun.
Type
Balise de bloc.
Obligatoire
Oui.
attributs <group>
Les éléments suivants sont des attributs valides pour la balise group.
version
Description
Cet attribut définit le traitement de comportement de serveur de Dreamweaver cible du
comportement de serveur actif. Pour Dreamweaver MX 2004, le numéro de version est 7. Si
aucune version n’est spécifiée, Dreamweaver suppose qu’il s’agit de la version 7. Pour cette version
de Dreamweaver, l’attribut de version est défini sur 7.0 pour tous les groupes et participants
générés par le Créateur de comportements de serveur. La version de groupe de cet attribut n’a
aucun effet actuellement.
Parent
group
Type
Attribut.
Obligatoire
Non.
Balises de fichiers EDML Groupe
271
serverBehavior
Description
L’attribut serverBehavior indique le comportement de serveur qui peut utiliser le groupe.
Lorsque l’une des chaînes quickSearch du participant du groupe est trouvée dans le document,
le comportement de serveur indiqué par l’attribut serverBehavior demande à Dreamweaver
d’appeler la fonction findServerBehaviors().
Dans certains cas, si plusieurs groupes sont associés à un seul et même comportement de serveur,
ce dernier doit déterminer le groupe qu’il veut utiliser.
Parent
group
Type
Attribut.
Obligatoire
Non.
Valeur
La valeur est le nom exact (sans chemin) d’un fichier HTML de comportement de serveur dans
un dossier Configuration/ServerBehaviors, comme indiqué dans l’exemple suivant :
<group serverBehavior="redirectIfEmpty.htm">
dataSource
Description
Cette fonction avancée prend en charge les nouvelles sources de données qui peuvent être ajoutées
à Dreamweaver.
Les versions d’un comportement de serveur peuvent différer, selon la source de données utilisée.
Par exemple, le comportement de serveur Région répétée est conçu pour la source de données
Recordset.htm standard. Si Dreamweaver est développé afin de prendre en charge un nouveau
type de source de données (un objet COM, par exemple), vous pouvez configurer
dataSource="COM.htm" dans un fichier Groupe avec une implémentation différente de Région
répétée. Le comportement de serveur Région répétée applique alors la nouvelle implémentation
de Région répétée si la nouvelle source de données est sélectionnée.
Parent
group
Type
Attribut.
Obligatoire
Non.
272
Chapitre 15 : Comportements de serveur
Valeur
Le nom exact d’un fichier source de données d’un dossier Configuration/DataSources, comme
indiqué dans l’exemple suivant :
<group serverBehavior="Repeat Region.htm" ¬
dataSource="myCOMdataSource.htm">
Ce groupe définit une nouvelle implémentation du comportement de serveur Région répétée à
utiliser si la source de données COM est utilisée. Dans la fonction applyServerBehaviors(),
vous pouvez indiquer que ce groupe doit être appliqué en définissant la propriété MM_dataSource
sur l’objet de paramètre, comme indiqué dans l’exemple suivant :
function applyServerBehavior(ssRec) {
var paramObj = new Object();
paramObj.rs = getComObjectName();
paramObj.MM_dataSource = "myCOMdataSource.htm";
dwscripts.applySB(paramObj, sbObj);
}
subType
Description
Cette fonction avancée prend en charge plusieurs implémentations d’un comportement de
serveur.
Les versions d’un comportement de serveur peuvent différer, selon la sélection de l’utilisateur.
Lorsqu’un comportement de serveur est appliqué mais que plusieurs fichiers Groupe sont
appropriés, le fichier Groupe correct peut être sélectionné par transmission d’une valeur subType.
Le groupe ayant cette valeur subType spécifique est appliqué.
Parent
group
Type
Attribut.
Obligatoire
Non.
Valeur
La valeur est une chaîne unique déterminant le groupe à appliquer, comme indiqué dans
l’exemple suivant :
<group serverBehavior="myServerBehavior.htm" ¬
subType="longVersion">
Balises de fichiers EDML Groupe
273
Cet attribut de groupe définit la version longue du sous-type myServerBehavior. Vous avez
également une version avec l’attribut subType="shortVersion". Dans la fonction
applyServerBehaviors(), vous pouvez indiquer quel groupe doit être appliqué en définissant la
propriété MM_subType sur l’objet de paramètre, comme indiqué dans l’exemple suivant :
function applyServerBehavior(ssRec) {
var paramObj = new Object();
if (longVersionChecked) {
paramObj.MM_subType = "longVersion";
} else {
paramObj.MM_subType = "shortVersion";
}
dwscripts.applySB(paramObj, sbObj);
}
<title>
Description
Cette chaîne s’affiche dans le panneau Comportements de serveur pour chaque instance de
comportement de serveur trouvée dans le document actif.
Parent
group
Type
Balise de bloc.
Obligatoire
Non.
Valeur
La valeur est une chaîne de texte brut pouvant comporter des noms de paramètre pour rendre
chaque instance unique, comme indiqué dans l’exemple suivant :
<title>Redirect If Empty (@@recordsetName@@)</title>
<groupParticipants>
Description
Cette balise contient un tableau de déclarations groupParticipant.
Parent
group
Type
Balise de bloc.
Obligatoire
Oui.
274
Chapitre 15 : Comportements de serveur
attributs <groupParticipants>
Les éléments suivants sont des attributs valides de la balise groupParticipants.
selectParticipant
Description
Indique quel participant doit être sélectionné et mis en surbrillance dans le document lorsqu’une
instance est sélectionnée dans le panneau Comportements de serveur. Les instances de
comportements de serveur énumérées dans ce panneau étant classées en fonction du participant
sélectionné, vous devez définir l’attribut selectParticipant même si le participant n’est pas
visible.
Parent
groupParticipants
Type
Attribut.
Obligatoire
Non.
Valeur
La valeur participantName est le nom exact (moins l’extension .edml) d’un seul fichier
Participant référencé comme un participant Groupe, comme indiqué dans l’exemple suivant (voir
name, page 276) :
<groupParticipants selectParticipant="redirectIfEmpty_link">
<groupParticipant>
Description
Cette balise représente l’inclusion d’un participant unique dans le groupe.
Parent
groupParticipants
Type
Balise.
Obligatoire
Oui (au moins un).
attributs <groupParticipant>
Les éléments suivants sont des attributs valides de la balise groupParticipant.
Balises de fichiers EDML Groupe
275
name
Description
Cet attribut désigne un participant particulier à inclure dans le groupe. L’attribut name figurant
dans la balise groupParticipant doit être le même que le nom de fichier du participant (sans
l’extension .edml).
Parent
groupParticipant
Type
Attribut.
Obligatoire
Oui.
Valeur
La valeur est le nom exact (sans l’extension .edml) d’un fichier Participant quelconque, comme
indiqué dans l’exemple suivant :
<groupParticipant name="redirectIfEmpty_init">
Cet exemple fait référence au fichier redirectIfEmpty_init.edml.
partType
Description
Cet attribut indique le type de participant.
Parent
groupParticipant
Type
Attribut.
Obligatoire
Non.
Valeurs
identifier, member, option, multiple, data
• La valeur identifier est un participant qui identifie le groupe entier. Si ce participant est
•
•
276
trouvé dans le document, le groupe est considéré comme existant, que d’autres participants du
groupe soient trouvés ou non. Il s’agit de la valeur par défaut si l’attribut partType n’est pas
spécifié.
La valeur member est un membre normal d’un groupe. Si trouvé seul, il n’identifie pas un
groupe. S’il n’est pas trouvé dans un groupe, le groupe est jugé incomplet.
La valeur option indique que le participant est facultatif. S’il n’est pas trouvé, le groupe est
quand même jugé complet et aucun indicateur « incomplete » n’est affiché dans le panneau
Comportements de serveur.
Chapitre 15 : Comportements de serveur
• La valeur multiple indique que le participant est facultatif et que plusieurs de ses copies
•
peuvent être associées au comportement de serveur. Aucun des paramètres uniques à ce
participant ne sera utilisé lors du regroupement de participants car ils peuvent avoir des valeurs
différentes.
La valeur data est un participant non standard utilisé par les programmeurs en tant que
référentiel des données de groupe supplémentaires. N’est pris en compte par rien d’autre.
Fichiers EDML Participant
Ces balises et attributs sont valides dans les fichiers participant EDML.
<participant>
Description
Cette balise contient toutes les spécifications pour un participant unique.
Parent
Aucun.
Type
Balise de bloc.
Obligatoire
Oui.
attributs <participant>
Les éléments suivants sont des attributs valides de la balise participant.
version
Description
Cet attribut définit le traitement de comportement de serveur de Dreamweaver cible du
comportement de serveur actif. Pour Dreamweaver MX 2004, le numéro de version est 7. Si
aucune version n’est spécifiée, Dreamweaver suppose qu’il s’agit de la version 7. Pour cette version
de Dreamweaver, l’attribut de version est défini sur 7.0 pour tous les groupes et participants
générés par le Créateur de comportements de serveur.
Remarque : L’attribut de version participant annule l’attribut de version groupe si ceux-ci sont
différents. Néanmoins, le fichier participant utilisera uniquement l’attribut de version groupe si le
participant n’en spécifie aucun.
Pour les fichiers Participant, cet attribut détermine s’il faut effectuer la fusion de blocs de code.
Pour les participants qui ne disposent pas de cet attribut (ou si l’attribut est défini sur la version 4
ou précédente), les blocs de code insérés ne sont pas fusionnés avec les autres blocs de code sur la
page. Les participants dont l’attribut est défini sur version 5 ou plus, sont fusionnés avec les autres
blocs de code sur la page, lorsque possible. Notez que la fusion de blocs de code s’effectue
uniquement pour les participants au-dessus et en dessous de la balise HTML.
Parent
participant
Fichiers EDML Participant
277
Type
Attribut.
Obligatoire
Non.
<quickSearch>
Description
Cette balise est une simple chaîne de recherche utilisée pour améliorer les performances. Il ne peut
pas s’agir d’une expression régulière. Si la chaîne est trouvée dans le document actif, les autres
modèles de recherche sont appelés pour rechercher des instances spécifiques. La chaîne peut être
vide pour toujours utiliser le modèle de recherche.
Parent
participant
Type
Balise de bloc.
Obligatoire
Non.
Valeur
La valeur searchString, chaîne littérale qui existe sur la page si le participant existe. La chaîne
doit être la plus unique possible afin d’améliorer les performances, mais elle ne doit pas
nécessairement être unique. Bien que cette chaîne ne soit pas sensible à la casse, prenez garde aux
espaces non essentiels qui peuvent être modifiés par l’utilisateur, comme indiqué dans l’exemple
suivant :
<quickSearch>Response.Redirect</quickSearch>
Si la balise quickSearch est vide, elle est jugée comme correspondante et des recherches plus
précises utilisent les expressions régulières définies dans les balises searchPattern. Cela peut être
utile lorsqu’une simple chaîne ne peut pas être utilisée pour exprimer un modèle de recherche
fiable et que des expressions régulières sont obligatoires.
<insertText>
Description
Cette balise donne des indications sur ce qui doit être inséré dans le document et à quel endroit.
Elle contient le texte à insérer. Les parties du texte qui sont personnalisées doivent être indiquées à
l’aide du format @@parameterName@@.
Dans certains cas, par exemple pour un participant traducteur uniquement, vous n’avez
probablement pas besoin de cette balise.
278
Chapitre 15 : Comportements de serveur
Parent
implementation
Type
Balise de bloc.
Obligatoire
Non.
Valeur
La valeur est le texte à insérer dans le document. Si des parties du texte doivent être
personnalisées, elles peuvent être transmises ultérieurement en tant que paramètres. Les
paramètres doivent être incorporés entre deux signes (@@). Ce texte pouvant interférer avec la
structure EDML, il doit utiliser la construction CDATA, comme indiqué dans l’exemple suivant :
<insertText location="aboveHTML">
<![CDATA[<%= @@recordset@@).cursorType %>]]>
</insertText>
Lorsque le texte est inséré, le paramètre @@recordset@@ est remplacé par un nom de jeu
d’enregistrements fourni par l’utilisateur. Pour plus d’informations sur les blocs de code
conditionnels et répétitifs, voir le chapitre Ajout de comportements de serveur personnalisés dans
Bien démarrer avec Dreamweaver.
attributs <insertText>
Les éléments suivants sont des attributs valides de la balise insertText.
emplacement
Description
Cet attribut indique où le texte participant doit être inséré. L’emplacement d’insertion étant
relatif à l’attribut whereToSearch de la balise searchPatterns, veillez à définir ces deux
paramètres soigneusement (voir whereToSearch, page 282).
Parent
insertText
Type
Attribut.
Obligatoire
Oui.
Fichiers EDML Participant
279
Valeurs
aboveHTML[+weight], belowHTML[+weight], beforeSelection, replaceSelection,
wrapSelection, afterSelection, beforeNode, replaceNode, afterNode,
firstChildOfNode, lastChildOfNode, nodeAttribute[+attribute]
• La valeur aboveHTML[+weight] insère le texte au-dessus de la balise HTML (appropriée pour le
code serveur uniquement). Le poids peut être un nombre entier compris entre 1 et 99 et est
utilisé pour préserver l’ordre relatif entre les différents participants. Par convention, les jeux
d’enregistrements ont un poids de 50. Si un participant fait référence à des variables de jeu
d’enregistrements, il doit par conséquent être affecté d’un poids plus élevé (par exemple, 60) de
façon à ce que le code soit inséré au-dessous du jeu d’enregistrements, comme indiqué dans
l’exemple suivant :
<insert location="aboveHTML+60">
Si aucun poids n’est indiqué, un poids de 100 est attribué en interne et ajouté au-dessous de
tous les participants de poids spécifique, comme indiqué dans l’exemple suivant :
<insert location="aboveHTML">
• La valeur belowHTML[+weight] est similaire à l’emplacement aboveHTML, si ce n’est que les
•
•
•
•
•
•
•
•
•
•
280
participants sont ajoutés au-dessous de la balise /HTML de fermeture.
La valeur beforeSelection insère le texte avant le point d’insertion ou la sélection actuelle.
S’il n’y a pas de sélection, il est inséré à la fin de la balise BODY.
La valeur replaceSelection remplace la sélection actuelle par le texte. S’il n’y a pas de
sélection, il est inséré à la fin de la balise BODY.
La valeur wrapSelection équilibre la sélection actuelle, insère une balise de bloc avant la
sélection et ajoute la balise de fin appropriée après la sélection.
La valeur afterSelection insère le texte après la sélection actuelle ou le point d’insertion. S’il
n’y a pas de sélection, il est inséré à la fin de la balise BODY.
La valeur beforeNode insère le texte avant un nœud (emplacement spécifique dans le DOM).
Lorsqu’une fonction telle que dwscripts.applySB() est appelée pour effectuer l’insertion, le
pointeur de nœud doit être transmis en tant que paramètre de paramObj. Le nom de ce
paramètre définissable par l’utilisateur doit être spécifié par l’attribut nodeParamName (voir la
section nodeParamName, page 281).
En résumé, si votre emplacement comporte le mot node, veillez à déclarer la balise
nodeParamName.
La valeur replaceNode remplace un nœud par le texte.
La valeur afterNode insère le texte après un nœud.
La valeur firstChildOfNode insère le texte en tant que premier enfant d’une balise de bloc.
Par exemple, pour insérer un élément au début d’une balise FORM.
firstChildOfNode insère le texte en tant que dernier enfant d’une balise de bloc. Par exemple,
si vous souhaitez insérer du code à la fin d’une balise FORM (utile pour l’ajout de champs de
formulaire masqués).
nodeAttribute[+attribute] définit un attribut d’un nœud de balise. Si l’attribut n’existe
pas déjà, cette valeur le crée.
Par exemple, utilisez <insert location="nodeAttribute+ACTION"
nodeParamName="form"> pour définir l’attribut ACTION d’un formulaire. Cela convertit la
balise FORM de l’utilisateur de <form> en <formaction="myText">.
Chapitre 15 : Comportements de serveur
Si vous ne spécifiez pas d’attribut, l’emplacement nodeAttribute provoque l’ajout direct du
texte à la balise ouverte. Par exemple, utilisez insert location="nodeAttribute" pour
ajouter un attribut facultatif à une balise. Vous pouvez procéder ainsi pour convertir une balise
INPUT d’un utilisateur de <inputtype="checkbox"> en <input type="checkbox"
<%if(foo)Reponse.Write("CHECKED")%>>.
Remarque : Pour la valeur d’attribut location="nodeAttribute", le dernier modèle de recherche
détermine les points de début et de fin de l’attribut. Veillez à ce que le dernier modèle trouve
l’instruction entière.
nodeParamName
Description
Cet attribut est uniquement utilisé pour les emplacements d’insertion relatifs à un nœud. Il
indique le nom du paramètre utilisé pour transmettre le nœud au moment de l’insertion.
Parent
insertText
Type
Attribut.
Obligatoire
Cet attribut est uniquement requis si l’emplacement d’insertion contient le mot node.
Valeur
La valeur tagtype__Tag est un nom spécifié par l’utilisateur pour le paramètre de nœud qui est
transmis avec l’objet de paramètre à la fonction dwscripts.applySB(). Par exemple, si vous
insérez du texte dans un formulaire, vous pouvez utiliser un paramètre form__tag. Dans votre
fonction applyServerBehavior() de comportement de serveur, vous pouvez utiliser le
paramètre form__tag pour indiquer le formulaire précis à mettre à jour, comme indiqué dans
l’exemple suivant :
function applyServerBehavior(ssRec) {
var paramObj = new Object();
paramObj.rs = getRecordsetName();
paramObj.form__tag = getFormNode();
dwscripts.applySB(paramObj, sbObj);
}
Dans votre fichier EDML, vous pouvez spécifier le paramètre de nœud form__tag, comme
indiqué dans l’exemple suivant :
<insertText location="lastChildOfNode" nodeParamName="form__tag">
<![CDATA[<input type="hidden" name="MY_DATA">]]>
</insertText>
Le texte est inséré en tant que valeur lastChildOfNode et le nœud spécifique est transmis à l’aide
de la propriété form__tag de l’objet de paramètre.
Fichiers EDML Participant
281
<searchPatterns>
Description
Cette balise donne des indications sur la façon de rechercher le texte du participant dans le
document et contient une liste de modèles utilisés lors de la recherche d’un participant. Si
plusieurs modèles de recherche sont définis, ils doivent tous être trouvés dans le texte analysé (les
modèles de recherche ont une relation AND logique), à moins qu’ils ne soient marqués comme
facultatifs à l’aide de l’indicateur isOptional.
Parent
implementation
Type
Balise de bloc.
Obligatoire
Non.
attributs <searchPatterns>
Les éléments suivants sont des attributs valides de la balise searchPatterns.
whereToSearch
Description
Cet attribut indique où rechercher le texte du participant. Il est relatif à l’emplacement
d’insertion, veillez donc à définir ces deux paramètres soigneusement (voir emplacement,
page 279).
Parent
searchPatterns
Type
Attribut.
Obligatoire
Oui.
Valeurs
directive, tag+tagName, tag+*, comment, text
• La valeur directive recherche toutes les directives de serveur (balises spécifiques au serveur).
Pour ASP et JSP, cela signifie une recherche dans tous les blocs de script <% ... %>.
Remarque : La recherche n’est pas effectuée dans les attributs de balise, même s’ils contiennent
des directives.
• La valeur tag+tagName effectue une recherche dans le contenu de la balise donnée, comme
indiqué dans l’exemple suivant :
<searchPatterns whereToSearch="tag+FORM">
282
Chapitre 15 : Comportements de serveur
Cet exemple n’effectue de recherche que dans les balises de formulaire. Par défaut, la recherche
est effectuée dans tout le nœud outerHTML. Pour les balises INPUT, indique le type après une
barre oblique (/). Dans l’exemple suivant, utilisez ce code pour effectuer une recherche dans
tous les boutons d’envoi :
<searchPatterns whereToSearch="tag+INPUT/SUBMIT">.
• La valeur tag+* effectue une recherche dans le contenu de n’importe quelle balise, comme
indiqué dans l’exemple suivant :
<searchPatterns whereToSearch="tag+*">
•
Cet exemple effectue une recherche dans toutes les balises.
La valeur comment limite la recherche aux seuls commentaires HTML <! ... >, comme
indiqué dans l’exemple suivant :
<searchPatterns whereToSearch="comment">
•
Cet exemple recherche des balises comme <!-- my comment here -->.
La valeur text limite la recherche aux sections de texte brut, comme indiqué dans l’exemple
suivant :
<searchPatterns whereToSearch="text">
<searchPattern>XYZ</searchPattern>
</searchPatterns>
Cet exemple recherche un nœud de texte contenant le texte XYZ.
<searchPattern>
Description
Cette balise est un modèle qui identifie le texte participant et en extrait chaque valeur de
paramètre. Chaque sous-expression de paramètre doit être mise entre parenthèses ().
Vous pouvez avoir des modèles sans paramètres (utilisés pour identifier le texte participant), des
modèles avec un paramètre ou des modèles avec plusieurs paramètres. Tous les modèles
obligatoires doivent être trouvés et chaque paramètre doit être nommé et trouvé exactement une
fois.
Pour plus d’informations sur l’utilisation de la balise searchPattern, voir Recherche des
comportements de serveur, page 296.
Parent
searchPatterns
Type
Balise de bloc.
Obligatoire
Oui.
Fichiers EDML Participant
283
Valeurs
searchString, /regularExpression/, <empty>
• La valeur searchString est une simple chaîne de recherche, sensible à la casse. Elle ne peut
pas être utilisée pour l’extraction de paramètres.
• La valeur /regularExpression/ est un modèle de recherche d’expression régulière.
• La valeur <empty> est utilisée si aucun modèle n’est spécifié. Dans ce cas, il est toujours
considéré qu’il y a correspondance et la valeur entière est affectée au premier paramètre.
Par exemple, pour identifier le texte participant <%= RS1.Field.Items("author_id")%>,
vous pouvez définir un modèle simple suivi d’un modèle précis extrayant également les deux
valeurs de paramètre :
<searchPattern>Field.Items</searchPattern>
<searchPattern paramNames="rs,col">
<![CDATA[
/<%=\s*(\w+)\.Field\.Items\("(\w+)"\)/
]]>
</searchPattern>
Dans cet exemple, une correspondance précise est établie avec le modèle. La valeur de la
première sous-expression (\w+) est affectée au paramètre rs et celle de la deuxième sousexpression (\w+) au paramètre col.
Remarque : Les expressions régulières doivent impérativement commencer et se terminer par
une barre oblique (/). Sinon, elles sont utilisées en tant que recherches de chaîne littérale. Les
expressions régulières peuvent être suivies du modificateur d’expression régulière i pour indiquer
la non-sensibilité à la casse (comme dans /pattern/i). Par exemple, VBScript n’est pas sensible à
la casse et doit donc utiliser /pattern/i. JavaScript est sensible à la casse et doit utiliser /pattern.
Si vous désirez affecter le contenu entier de l’emplacement de recherche limitée à un paramètre,
n’indiquez aucun modèle, comme indiqué dans l’exemple suivant :
<searchPatterns whereToSearch="tag+OPTION">
<searchPattern>MY_OPTION_NAME</searchPattern>
<searchPattern paramNames="optionLabel" limitSearch="innerOnly">
</searchPattern>
</searchPatterns>
Cet exemple définit le paramètre optionLabel pour le contenu complet de innerHTML d’une
balise OPTION.
attributs <searchPattern>
Les éléments suivants sont des attributs valides de la balise searchPattern.
284
Chapitre 15 : Comportements de serveur
paramNames
Description
Cet attribut est une liste séparée à l’aide de virgules des noms de paramètre dont les valeurs sont
extraites. Ces paramètres sont affectés dans l’ordre de la sous-expression. Vous pouvez affecter des
paramètres uniques ou utiliser une liste séparée par virgule pour affecter plusieurs paramètres. Si
d’autres expressions entre parenthèses sont utilisées mais n’indiquent pas de paramètres, des
virgules supplémentaires peuvent être utilisées en tant qu’espaces réservés dans la liste des noms de
paramètres.
Les noms de paramètres doivent correspondre à ceux spécifiés dans le texte d’insertion et dans les
paramètres de mise à jour.
Parent
searchPattern
Type
Attribut.
Obligatoire
Oui.
Valeurs
paramName1, paramName2,
...
Chaque nom de paramètre doit être le nom exact d’un paramètre utilisé dans le texte d’insertion.
Par exemple, si le texte d’insertion contient @@p1@@, vous devez définir exactement un paramètre
avec ce nom :
<searchPattern paramNames="p1">patterns</searchPattern>
Pour extraire plusieurs paramètres utilisant un seul modèle, utilisez une liste de noms de
paramètre séparés par des virgules, dans l’ordre dans lequel les sous-expressions apparaissent dans
le modèle. Supposons que l’exemple suivant indique votre modèle de recherche :
<searchPattern paramName="p1,,p2">/(\w+)_(BIG|SMALL)_(\w+)/¬
</searchPattern>
il y a deux paramètres (séparés par du texte) à extraire. Avec le texte suivant :
<%= a_BIG_b %>, la première sous-expression du modèle de recherche correspond à "a", donc
p1="a". La deuxième sous-expression est ignorée (remarquez le ,, dans la valeur paramName). La
troisième sous-expression correspond à "b", donc p2="b".
limitSearch
Description
Cet attribut limite la recherche à une partie de la balise whereToSearch.
Parent
searchPattern
Type
Attribut.
Fichiers EDML Participant
285
Obligatoire
Non.
Valeurs
all, attribute+attribName, tagOnly, innerOnly
• La valeur all (valeur par défaut) effectue une recherche dans la balise entière qui est spécifiée
dans l’attribut whereToSearch.
La valeur attribute+attribName effectue la recherche dans la seule valeur de l’attribut
spécifié, comme indiqué dans l’exemple suivant :
•
<searchPatterns whereToSearch="tag+FORM">
<searchPattern limitSearch="attribute+ACTION">
/MY_PATTERN/
</searchPattern>
</searchPatterns>
Cet exemple indique que la recherche doit se limiter à la seule valeur de l’attribut ACTION des
balises FORM. Si cet attribut n’est pas défini, la balise est ignorée.
La valeur tagOnly effectue la recherche dans la seule balise extérieure et ignore la balise
innerHTML. Cette valeur est valide uniquement lorsque whereToSearch est une balise.
La valeur innerOnly effectue la recherche dans la seule balise innerHTML et ignore la balise
extérieure. Cette valeur est valide uniquement lorsque whereToSearch est une balise.
•
•
isOptional
Description
Cet attribut est un indicateur signifiant que le modèle de recherche n’est pas obligatoire pour
trouver le participant. Cela est utile pour les participants plus complexes pouvant avoir des
paramètres non essentiels à extraire. Vous pouvez créer des modèles servant à identifier de façon
distincte un participant et avoir des modèles facultatifs pour l’extraction de paramètres non
essentiels.
Parent
searchPattern
Type
Attribut.
Obligatoire
Non.
Valeurs
true, false
• La valeur est true si le searchPattern n’est pas indispensable à l’identification du participant.
• La valeur est false (valeur par défaut) si la balise searchPattern est requise.
286
Chapitre 15 : Comportements de serveur
Considérez par exemple la chaîne de jeux d’enregistrements simple suivante :
<%
var Recordset1 = Server.CreateObject("ADODB.Recordset");
Recordset1.ActiveConnection = "dsn=andescoffee;";
Recordset1.Source = "SELECT * FROM PressReleases";
Recordset1.CursorType = 3;
Recordset1.Open();
%>
Les modèles de recherche doivent identifier le participant et extraire plusieurs paramètres.
Cependant, si un paramètre tel que cursorType n’est pas trouvé, il doit toujours être considéré
comme un jeu d’enregistrements. Le paramètre cursor est facultatif. Dans l’EDML, les modèles
de recherche peuvent ressembler à l’exemple suivant :
<searchPattern paramNames="rs">/var (\w+) = Server.CreateObject/
</searchPattern>
<searchPattern paramNames="src">/ActiveConnection = "([^\r\n]*)"/¬
</searchPattern>
<searchPattern paramNames="conn">/Source = "([^\r\n]*)"/¬
</searchPattern>
<searchPattern paramNames="cursor" isOptional="true">¬
/CursorType = (\d+)/
</searchPattern>
Les trois premiers modèles sont obligatoires pour identifier le jeu d’enregistrements. Si le dernier
paramètre n’est pas trouvé, le jeu d’enregistrements est quand même identifié.
<updatePatterns>
Description
Cette fonction facultative avancée permet des mises à jour précises du participant. Sans cette
balise, le participant est automatiquement mis à jour par remplacement du texte participant entier
à chaque fois. Si vous spécifiez une balise <updatePatterns>, elle doit contenir des modèles
précis pour trouver et remplacer chaque paramètre du participant.
Cette balise peut s’avérer utile si l’utilisateur apporte des modifications au texte. Seules les parties
du texte qui ont besoin d’être modifiées seront mises à jour avec précision.
Parent
implementation
Type
Balise de bloc.
Obligatoire
Non.
<updatePattern>
Description
Cette balise est un type d’expression régulière spécifique permettant des mises à jour précises du
texte du participant. Il doit y avoir au moins une définition de modèle de mise à jour pour chaque
paramètre unique déclaré dans le texte d’insertion (de la forme @@paramName@@).
Fichiers EDML Participant
287
Parent
updatePatterns
Type
Balise de bloc.
Obligatoire
Oui (au moins une, si vous déclarez la balise updatePatterns).
Valeurs
La valeur est une expression régulière trouvant un paramètre placé entre deux sous-expressions
entre parenthèses, dans le formulaire /(pre-pattern)parameter-pattern(post-pattern)/.
Vous devez définir au moins un modèle de mise à jour pour chaque @@paramName@@ unique dans
votre texte d’insertion. L’exemple suivant indique à quoi peut ressembler votre texte d’insertion :
<insertText location="afterSelection">
<![CDATA[<%= @@rs@@.Field.Items("@@col@@") %>]]>
</insertText>
Une instance particulière du texte d’insertion sur une page peut ressembler à l’exemple suivant :
<%= RS1.Field.Items("author_id") %>
Il y a deux paramètres, rs et col. Pour mettre à jour ce texte une fois qu’il est inséré sur la page,
vous avez besoin de deux définitions de modèle de mise à jour :
<updatePattern paramName="rs" >
/(\b)\w+(\.Field\.Items)/
</updatePattern>
<updatePattern paramName="col">
/(\bItems\(")\w+("\))/
</updatePattern>
Les parenthèses littérales, ainsi que d’autres caractères d’expressions régulières spéciaux, n’ont pas
été pris en compte en raison de la barre oblique inverse les précédant (\). L’expression du milieu,
définie comme \w+, est mise à jour avec la dernière valeur transmise pour les paramètres rs et
col, respectivement. Les valeurs RS1 et author_id peuvent être mises à jour avec de nouvelles
valeurs de façon précise.
Plusieurs instances du même modèle peuvent être mises à jour en même temps en utilisant
l’indicateur global d’expression régulière g après la barre oblique de fermeture (par exemple, dans
/pattern/g).
Si le texte du participant est long et complexe, vous devrez utiliser plusieurs modèles pour mettre
à jour un seul paramètre, comme indiqué dans l’exemple suivant :
<% ...
Recordset1.CursorType = 0;
Recordset1.CursorLocation = 2;
Recordset1.LockType = 3;
%>
288
Chapitre 15 : Comportements de serveur
Pour mettre à jour le nom du jeu d’enregistrements dans les trois positions, vous devez disposer de
trois modèles de mise à jour pour un seul paramètre, comme indiqué dans l’exemple suivant :
<updatePattern paramName="rs">
/(\b)\w+(\.CursorType)/
</updatePattern>
<updatePattern paramName="rs">
/(\b)\w+(\.CursorLocation)/
</updatePattern>
<updatePattern paramName="rs">
/(\b)\w+(\.LockType)/
</updatePattern>
Vous pouvez maintenant transmettre une nouvelle valeur pour le jeu d’enregistrements, qui est
mis à jour avec précision à trois emplacements.
attributs <updatePattern>
Les éléments suivants sont des attributs valides de la balise updatePattern.
paramName
Description
Cet attribut indique le nom du paramètre dont la valeur est utilisée pour mettre à jour le
participant. Ce paramètre doit correspondre à ceux spécifiés dans le texte d’insertion et dans les
paramètres de recherche.
Parent
updatePattern
Type
Attribut.
Obligatoire
Oui.
Valeurs
La valeur est le nom exact d’un paramètre utilisé dans le texte d’insertion. Dans l’exemple suivant,
si le texte d’insertion contient une valeur @@rs@@, vous devez avoir un paramètre du nom :
<updatePattern paramName="rs">pattern</updatePattern>
<delete>
Description
Cette balise est une fonction facultative avancée qui vous permet de contrôler comment un
participant est supprimé. Sans cette balise, vous devez effacer le participant entièrement pour le
supprimer, mais seulement si aucun comportement de serveur n’y fait référence. En définissant
une balise <delete>, vous pouvez spécifier qu’il ne doit jamais être supprimé ou que seules
certaines parties doivent l’être.
Parent
implementation
Fichiers EDML Participant
289
Type
Balise.
Obligatoire
Non.
attributs <delete>
Les éléments suivants sont des attributs valides de la balise delete.
deleteType
Description
Cet attribut indique le type de suppression à effectuer. Il possède différentes significations, selon
que le participant est une directive, une balise ou un attribut. Par défaut, le participant entier est
supprimé.
Parent
delete
Type
Attribut.
Obligatoire
Non.
Valeurs
all, none, tagOnly, innerOnly, attribute+attribName, attribute+*
• La valeur all (valeur par défaut) supprime la directive ou la balise entière. Pour les attributs,
•
•
•
•
•
supprime la définition entière.
La valeur none n’est jamais automatiquement supprimée.
La valeur tagOnly supprime uniquement la balise extérieure mais laisse le contenu de la balise
innerHTML intact. Pour les attributs, supprime également la balise extérieure s’il s’agit d’une
balise de bloc. Sans signification pour les directives.
La valeur innerOnly supprime uniquement le contenu (la balise innerHTML) lorsqu’elle est
appliquée à des balises. Pour les attributs, supprime uniquement la valeur. Sans signification
pour les directives.
La valeur attribute+attribName supprime uniquement l’attribut spécifié lorsqu’elle est
appliquée à des balises. Sans signification pour les directives et les attributs.
La valeur attribute+* supprime tous les attributs des balises. Sans signification pour les
directives et les attributs.
Si votre comportement de serveur convertit le texte sélectionné en lien, vous pouvez supprimer le
lien en supprimant la balise extérieure uniquement, comme indiqué dans l’exemple suivant :
<delete deleteType="tagOnly"/>
Cela convertit un participant de lien <A HREF="...">HELLO/A</A> en HELLO.
290
Chapitre 15 : Comportements de serveur
<translator>
Description
Cette balise donne des informations pour la traduction d’un participant de façon à ce qu’elle
puisse être rendue différemment et puisse avoir un inspecteur de propriétés personnalisé.
Parent
implementation
Type
Balise de bloc.
Obligatoire
Non.
<searchPatterns>
Description
Cette balise permet à Dreamweaver de trouver les instances spécifiées dans un document. Si
plusieurs modèles de recherche sont définis, ils doivent tous être trouvés dans le texte analysé (les
modèles de recherche ont une relation AND logique), à moins qu’ils ne soient marqués comme
facultatifs à l’aide de l’indicateur isOptional.
Parent
translator
Type
Balise de bloc.
Obligatoire
Oui.
<translations>
Description
Cette balise contient une liste d’instructions de traduction, chacune indiquant où rechercher le
participant et ce qu’il convient d’en faire.
Parent
translator
Type
Balise de bloc.
Obligatoire
Non.
Fichiers EDML Participant
291
<translation>
Description
Cette balise contient une instruction de traduction unique indiquant l’emplacement du
participant, quel type de traduction effectuer et par quoi remplacer le texte du participant.
Parent
translations
Type
Balise de bloc.
Obligatoire
Non.
attributs <translation>
Les éléments suivants sont des attributs valides de la balise translation.
whereToSearch
Description
Cet attribut indique où rechercher le texte, en relation avec l’emplacement d’insertion. Veillez
donc à définir soigneusement chaque emplacement (voir emplacement, page 279).
Parent
translation
Type
Attribut.
Obligatoire
Oui.
limitSearch
Description
Cet attribut limite la recherche à une partie de la balise whereToSearch.
Parent
translation
Type
Attribut.
Obligatoire
Non.
292
Chapitre 15 : Comportements de serveur
translationType
Description
Cet attribut indique le type de traduction à réaliser. Ces types sont prédéfinis et donnent à la
traduction une fonctionnalité précise. Par exemple, si vous spécifiez dynamic data, toute donnée
traduite doit se comporter comme des données dynamiques Dreamweaver ; c’est-à-dire
ressembler à un espace réservé de données dynamiques dans le mode de mise en page (notation
entre accolades ({}) avec couleur d’arrière-plan dynamique) et figurer dans le panneau
Comportements de serveur.
Parent
translation
Type
Attribut.
Obligatoire
Oui.
Valeurs
dynamic data, dynamic image, dynamic source, tabbed region start, tabbed region
end, custom
• Cette valeur dynamic
data indique que les directives traduites ressemblent à des données
dynamiques Dreamweaver et se comportent de la même façon, comme indiqué dans l’exemple
suivant :
<translation whereToSearch="tag+IMAGE"
limitSearch="attribute+SRC"
translationType="dynamic data">
• La valeur dynamic
image indique que les attributs traduits doivent ressembler à des images
dynamiques Dreamweaver et se comporter de la même façon, comme indiqué dans l’exemple
suivant :
<translation whereToSearch="IMAGE+SRC"
translationType="dynamic image">
• La valeur dynamic
source indique que les directives traduites doivent se comporter comme
des sources dynamiques Dreamweaver, comme indiqué dans l’exemple suivant :
<translation whereToSearch="directive"
translationType="dynamic source">
• La valeur tabbed
region start indique que les balises <CFLOOP> traduites définissent le
début d’un contour tabulé, comme indiqué dans l’exemple suivant :
<translation whereToSearch="CFLOOP"
translationType="tabbed region start">
Fichiers EDML Participant
293
• La valeur tabbed
region end indique que les balises </CFLOOP> traduites définissent la fin
d’un contour tabulé, comme indiqué dans l’exemple suivant :
<translation whereToSearch="CFLOOP"
translationType="tabbed region end">
• La valeur custom est le cas par défaut, dans lequel aucune fonctionnalité Dreamweaver interne
n’est ajoutée à la traduction. Il est courant de l’utiliser lors de la spécification d’une balise à
insérer pour un inspecteur de propriétés personnalisé, comme indiqué dans l’exemple suivant :
<translation whereToSearch="directive"
translationType="custom">
<openTag>
Description
Cette balise facultative peut être insérée au début de la section de traduction. Cette balise permet
à d’autres extensions, par exemple les inspecteurs de propriétés personnalisés, de trouver la
traduction.
Parent
translation
Type
Balise de bloc.
Obligatoire
Non.
Valeurs
La valeur tagName est un nom de balise valide. Il doit être unique pour empêcher les conflits avec
les types de balise connus. Par exemple, si vous spécifiez <openTag>MM_DYNAMIC_CONTENT</
openTag> les données dynamiques sont traduites dans la balise MM_DYNAMIC_CONTENT.
<attributes>
Description
Cette balise contient une liste d’attributs à ajouter à la balise traduite spécifiée dans openTag.
Sinon, si la balise openTag n’est pas définie et que la balise searchPattern spécifie tag, cette
balise contient une liste d’attributs traduits à ajouter à la balise trouvée.
Parent
translation
Type
Balise de bloc.
Obligatoire
Non.
294
Chapitre 15 : Comportements de serveur
<attribute>
Description
Cette balise spécifie un attribut unique (ou un attribut traduit) à ajouter à la balise traduite.
Parent
attributes
Type
Balise de bloc.
Obligatoire
Oui (au moins un).
Valeurs
La spécification attributeName="attributeValue" définit un attribut à une valeur. Le nom
d’attribut est généralement fixe et la valeur contient des références de paramètres extraites par les
modèles de paramètres, comme indiqué dans l’exemple suivant :
<attribute>SOURCE="@@rs@@"</attribute>
<attribute>BINDING="@@col@@"</attribute>
ou
<attribute>
mmTranslatedValueDynValue="VALUE={@@rs@@.@@col@@}"
</attribute>
<display>
Description
Cette balise est une chaîne d’affichage facultative devant être insérée dans la traduction.
Parent
translation
Type
Balise de bloc.
Obligatoire
Non.
Valeurs
Cette valeur displayString se réfère à toute chaîne contenant du texte et du HTML. Peut
comporter des références de paramètres extraites par les modèles de paramètres. Par exemple,
<display>{@@rs@@.@@col@@}</display> entraîne une présentation de la traduction sous la
forme {myRecordset.myCol}.
Fichiers EDML Participant
295
<closeTag>
Description
Cette balise facultative doit être insérée à la fin de la section traduite. Cette balise permet à
certaines autres extensions, par exemple les inspecteurs de propriétés personnalisés, de trouver la
traduction.
Parent
translation
Type
Balise de bloc.
Obligatoire
Non.
Valeurs
La valeur tagName est un nom de balise valide ; elle doit correspondre à une balise de traduction
openTag.
Exemple
Si vous spécifiez la valeur <closeTag>MM_DYNAMIC_CONTENT</closeTag>, les données
dynamiques sont traduites pour terminer avec la balise </MM_DYNAMIC_CONTENT>.
Techniques de comportements de serveur
Cette section explique les techniques courantes et avancées qui sont utilisées pour créer et
modifier les comportements de serveur. La plupart des suggestions requièrent des paramètres
spécifiques dans les fichiers EDML.
Recherche des comportements de serveur
Pour que des comportements de serveur soient mis à
jour ou supprimés, vous devez fournir à Dreamweaver les moyens de trouver chaque instance dans
un document. Pour cela, une balise quickSearch et au moins une balise searchPattern,
contenue dans la balise searchPatterns, sont requises.
Rédaction de modèles de recherche
La balise quickSearch doit être une chaîne et non une expression régulière, indiquant
l’éventuelle existence du comportement de serveur sur la page. Elle ne respecte pas la casse. Elle
doit être courte et unique et ne contenir aucun espace ni autre section susceptible d’être modifiée
par l’utilisateur. L’exemple suivant montre un participant composé de la simple balise ASP
JavaScript :
<% if (Recordset1.EOF) Response.Redirect("some_url_here") %>
Dans l’exemple suivant, la chaîne quickSearch vérifie la présence de la balise suivante :
<quickSearch>Response.Redirect</quickSearch>
296
Chapitre 15 : Comportements de serveur
Pour des raisons de performances, le processus de recherche des instances de comportement de
serveur commence par le modèle quickSearch. Si cette chaîne figure dans le document et que le
participant identifie un comportement de serveur (dans le fichier groupe,
partType="identifier" pour ce participant), les fichiers associés sont alors chargés et la
fonction findServerBehaviors() est appelée. A défaut de chaînes fiables à rechercher dans le
participant (ou pour des raisons de débogage), vous pouvez laisser la chaîne quickSearch vide,
comme indiqué dans l’exemple suivant :
<quickSearch></quickSearch>
Dans cet exemple, le comportement de serveur est toujours chargé et la recherche du document
exécutée.
La balise searchPattern est ensuite utilisée pour analyser le document plus minutieusement que
la balise quickSearch et pour extraire des valeurs de paramètre du code du participant. Les
modèles de recherche spécifient l’emplacement de la recherche (l’attribut whereToSearch) et
exploitent une série de balises searchPattern contenant des modèles spécifiques. Ces modèles
peuvent utiliser de simples chaînes ou des expressions régulières. Le code de l’exemple précédent
est une directive ASP, à savoir la spécification whereToSearch="directive" et une expression
régulière identifie la directive et extrait les paramètres, comme indiqué dans l’exemple suivant :
<quickSearch>Response.Write</quickSearch>
<searchPatterns whereToSearch="directive">
<searchPattern paramNames="rs,new__url">
/if\s*\((\w+)\.EOF\)\s*Response\.Redirect\("([^\r\n]*)"\)/i
</searchPattern>
</searchPatterns>
La chaîne recherchée est définie comme une expression régulière, commençant et finissant par
une barre oblique (/) et suivie d’un i indiquant le non-respect de la casse. Dans l’expression
régulière, les caractères spéciaux, tels que les parenthèses (), points (.), etc. sont spécifiés en les
faisant précéder d’une barre oblique inverse (\). Les deux paramètres rs et new__url sont extraits
de la chaîne à l’aide de sous-expressions entre parenthèses (les paramètres doivent être entre
parenthèses). Dans cet exemple, ils sont indiqués par (\w+) et ([^\r\n]*) : ces valeurs
correspondent aux valeurs des expressions régulières normalement renvoyées par $1 et $2.
Il arrive parfois que vous vouliez identifier un participant,
en dépit de paramètres demeurés introuvables. Un des participants peut éventuellement stocker
des informations facultatives, telles qu’un numéro de téléphone. Pour cet exemple, vous pouvez
utiliser le code ASP suivant :
Modèles de recherche facultatifs
<% //address block
LNAME = "joe";
FNAME = "smith";
PHONE = "123-4567";
%>
Vous pouvez utiliser les modèles de recherche suivants :
<quickSearch>address</quickSearch>
<searchPatterns whereToSearch="directive">
<searchPattern paramNames="lname">/LNAME\s*=\s*"([^\r\n]*)"/i¬
</searchPattern>
<searchPattern paramNames="fname">/FNAME\s*=\s*"([^\r\n]*)"/i¬
</searchPattern>
<searchPattern paramNames="phone">/PHONE\s*=\s*"([^\r\n]*)"/i¬
</searchPattern>
</searchPatterns>
Techniques de comportements de serveur
297
Dans l’exemple précédent, le numéro de téléphone doit être spécifié. Cependant, vous pouvez
rendre le numéro de téléphone facultatif en ajoutant l’attribut isOptional, comme indiqué dans
l’exemple suivant :
<quickSearch>address</quickSearch>
<searchPatterns whereToSearch="directive">
<searchPattern paramNames="lname">/LNAME\s*=\s*"([^\r\n]*)"/i¬
</searchPattern>
<searchPattern paramNames="fname">/FNAME\s*=\s*"([^\r\n]*)"/i¬
</searchPattern>
<searchPattern paramNames="phone" isOptional="true">¬
/PHONE\s*=\s*"([^\r\n]*)"/i
</searchPattern>
</searchPatterns>
Le participant est maintenant reconnu, même si le numéro de téléphone n’est pas trouvé.
Si un comportement de serveur comporte
plusieurs participants, ils doivent être identifiés dans le document utilisateur et mis en
correspondance. Si l’utilisateur applique plusieurs instances du comportement de serveur à un
document, chaque groupe de participants doit être mis en correspondance en conséquence. Pour
que la mise en correspondance des participants s’effectue correctement, vous devrez peut-être
modifier ou ajouter des paramètres, puis créer des participants qui soient identifiables de façon
unique.
Méthode de correspondance des participants
La mise en correspondance nécessite quelques règles : les participants sont mis en correspondance
si l’ensemble des paramètres portant le même nom ont la même valeur. Au-dessus et en dessous de
la balise html ne peut figurer qu’une seule instance d’un participant, avec un jeu donné de valeurs
de paramètre. Entre les balises html.../html, les participants sont également mis en
correspondance en fonction de leur position par rapport à la sélection ou aux nœuds communs
utilisés pour l’insertion.
Les participants sans paramètres sont automatiquement retenus, comme le montre cet exemple
d’un comportement de serveur avec un fichier groupe :
<group serverBehavior="test.htm">
<title>Test</title>
<groupParticipants>
<groupParticipant name="test_p1" partType="identifier" />
<groupParticipant name="test_p2" partType="identifier" />
</groupParticipants>
</group>
L’exemple suivant insère deux participants simples au-dessus de la balise html :
<% //test_p1 %>
<% //test_p2 %>
<html>
Ces participants sont localisés et mis en correspondance, et le mot Test s’affiche une fois dans le
panneau Comportements de serveur. Si vous ajoutez de nouveau ce comportement de serveur,
rien n’est ajouté étant donné que les participants existent déjà.
298
Chapitre 15 : Comportements de serveur
Si les paramètres des participants sont uniques, de multiples instances peuvent être insérées audessus de la balise html. Par exemple, en ajoutant un paramètre de nom au participant, un
utilisateur peut saisir un nom unique dans la boîte de dialogue du comportement de serveur Test.
Si l’utilisateur saisit le nom « aaa », les participants suivants sont insérés :
<% //test_p1 name="aaa" %>
<% //test_p2 name="aaa" %>
<html>
Si vous ajoutez de nouveau le comportement de serveur et saisissez un autre nom, soit « bbb », le
document se présente comme suit :
<% //test_p1
<% //test_p2
<% //test_p1
<% //test_p2
<html>
name="aaa"
name="aaa"
name="bbb"
name="bbb"
%>
%>
%>
%>
Deux instances du mot Test sont répertoriées dans le panneau Comportements de serveur. Si
l’utilisateur tente d’ajouter une troisième instance à la page et qu’il la nomme « aaa », rien n’est
ajouté étant donné qu’elle existe déjà.
Dans la balise html, le processus de mise en correspondance peut également avoir recours à des
informations de position. Dans l’exemple suivant, nous avons deux participants, l’un ajouté avant
la sélection et l’autre après, comme suit :
<% if (expression) { //mySBName %>
Random HTML selection here
<% } //end mySBName %>
Ces deux participants ne sont pourvus d’aucun paramètre et sont donc regroupés. Il est toutefois
possible d’ajouter une autre instance de ce comportement de serveur ailleurs dans le code HTML,
comme indiqué dans l’exemple suivant :
<% if (expression) { //mySBName %>
Random HTML selection here
<% } //end mySBName %>
More HTML here...
<% if (expression) { //mySBName %>
Another HTML selection here
<% } //end mySBName %>
A présent, les deux instances de chaque participant sont identiques, ce qui est permis dans le code
HTML, et sont mises en correspondance selon l’ordre dans lequel elles apparaissent dans le
document.
Voici un exemple type d’un problème de mise en correspondance et des solutions possibles pour
l’éviter. Vous pouvez créer un participant capable de calculer la taxe de certaines données
dynamiques et d’afficher le résultat à la sélection.
<% total = Recordset1.Fields.Item("itemPrice").Value * 1.0825 %>
<html>
<body>
The total (with taxes) is $<%=total%>
</body>
</html>
Techniques de comportements de serveur
299
Les deux participants sont mis en correspondance car ils n’ont aucun paramètre en commun.
Toutefois, si vous ajoutez une deuxième instance de ce comportement de serveur, vous devez avoir
le code suivant :
<% total = Recordset1.Fields.Item("itemPrice").Value * 1.0825 %>
<% total = Recordset1.Fields.Item("salePrice").Value * 1.0825 %>
<html>
<body>
The total (with taxes) is $<%=total%>
Sale price (with taxes) is $<%=total%>
</body>
</html>
Ce comportement de serveur ne fonctionne plus correctement, car un seul paramètre est nommé
total. Pour résoudre le problème, vérifiez qu’il existe bien un paramètre dont la valeur est unique
pouvant être utilisé pour mettre en correspondance les participants. Dans l’exemple suivant, vous
pouvez faire en sorte que le nom de la variable total soit unique en utilisant le nom de la
colonne :
<% itemPrice_total
Value * 1.0825 %>
<% salePrice_total
Value * 1.0825 %>
<html>
<body>
The total (with
Sale price (with
</body>
</html>
= Recordset1.Fields.Item("itemPrice").¬
= Recordset1.Fields.Item("salePrice").¬
taxes) is $<%=itemPrice_total%>
taxes) is $<%=salePrice_total%>
A présent, les modèles de recherche peuvent identifier de façon unique les participants et les
mettre en correspondance.
Résolution du modèle de recherche
Dreamweaver prend en charge les actions suivantes en utilisant la fonctionnalité searchPatterns
du participant :
• dépendance du transfert de fichier,
• mise à jour des chemins de fichier pour toutes les références de fichier (tels que les chemins des
fichiers inclus).
Lors de la création de modèles de serveur, Dreamweaver génère des listes de modèles en
recherchant les attributs paramNames spéciaux dans tous les participants. Pour rechercher des
URL servant à vérifier la dépendance de fichiers et corriger le nom de chemin, Dreamweaver
utilise les balises searchPattern qui contiennent des attributs paramNames avec l’extension
_url. Vous pouvez spécifier plusieurs URL dans une même balise searchPattern.
Pour chaque balise searchPattern de traducteur comportant une valeur d’attribut paramNames
avec l’extension _includeUrl, Dreamweaver MX utilise cette balise searchPattern pour
traduire les instructions de fichier inclus de la page. Dreamweaver utilise un suffixe différent pour
identifier les URL de fichier inclus, car toutes les références URL ne sont pas traduites. De même,
une seule URL peut être traduite comme fichier inclus.
300
Chapitre 15 : Comportements de serveur
Pour résoudre une balise searchPatterns, Dreamweaver utilise l’algorithme suivant :
1 Recherche de l’attribut whereToSearch dans la balise searchPatterns.
2 Si la valeur de l’attribut commence par tag+, le reste de la chaîne est considéré comme le nom
de la balise (les espaces ne sont pas acceptés dans les noms de balise).
3 Recherche de l’attribut limitSearch dans la balise searchPattern.
4 Si la valeur de l’attribut commence par attribute+, le reste de la chaîne est considéré comme
le nom de l’attribut (les espaces ne sont pas acceptés dans les noms d’attribut).
Si ces quatre étapes se déroulent sans anomalie, Dreamweaver suppose qu’il s’agit d’une
combinaison balise/attribut. Sinon, Dreamweaver recherche les balises searchPattern contenant
un attribut paramName qui comporte un suffixe _url et une expression régulière définie. Pour
plus d’informations sur les expressions régulières, voir Expressions régulières, page 269.
L’exemple suivant de balise searchPatterns ne contient pas de modèle de recherche car il
combine une balise (cfinclude) avec un attribut (template) pour isoler l’URL et vérifier la
dépendance de fichier, la correction de chemin, etc. :
<searchPatterns whereToSearch="tag+cfinclude">
<searchPattern paramNames="include_url" limitSearch="attribute+template" />
</searchPatterns>
La combinaison balise/attribut (voir l’exemple précédent) ne s’applique pas à la traduction, car
Dreamweaver traduit directement en texte dans le calque JavaScript. La vérification de
dépendance de fichier, la correction de chemin, etc. s’effectuent dans le calque C. Dans le calque
C, Dreamweaver partage le document en interne en directives (texte direct) et en balises
(structurées en une arborescence efficace).
Mise à jour des comportements de serveur
Par défaut, aucune balise <updatePatterns> ne figure dans les
fichiers EDML participants et les instances du participant sont mises à jour dans le document par
un remplacement complet. Lorsqu’un utilisateur modifie un comportement de serveur existant et
clique sur OK, tout participant contenant un paramètre dont la valeur a changé sera supprimé,
puis rajouté avec une nouvelle valeur au même endroit.
Mise à jour des participants
Si l’utilisateur personnalise le code du participant dans le document, le participant peut ne plus
être reconnu si les modèles de recherche recherchent l’ancien code. Des modèles de recherche plus
courts permettent à l’utilisateur de personnaliser le code du participant dans le document ;
toutefois, la mise à jour de l’instance du comportement de serveur risque d’entraîner le
remplacement du participant et la perte des modifications personnalisées.
Dans certains cas, il peut s’avérer préférable de laisser l’utilisateur
personnaliser le code du participant après insertion dans le document. Pour ce faire, il suffit de
limiter les modèles de recherche et de fournir des modèles de mise à jour dans le fichier EDML.
Après avoir ajouté le participant à la page, le comportement de serveur n’en modifie que certaines
parties. L’exemple suivant indique un simple participant doté de deux paramètres :
Mise à jour de précision
<% if (Recordset1.EOF) Response.Redirect("some_url_here") %>
Techniques de comportements de serveur
301
Dans cet exemple, les modèles de recherche peuvent se présenter comme suit :
<quickSearch>Response.Write</quickSearch>
<searchPatterns whereToSearch="directive">
<searchPattern paramNames="rs,new__url">
/if\s*\((\w+)\.EOF\)\s*Response\.Redirect\("([^\r\n]*)"\)/i
</searchPattern>
</searchPatterns>
Le cas échéant, l’utilisateur peut ajouter un autre test à une instance particulière de ce code,
comme indiqué dans l’exemple suivant :
<% if (Recordset1.EOF || x > 2) Response.Redirect("some_url_here") %>
Les modèles de recherche échouent car ils recherchent une parenthèse après le paramètre EOF.
Pour rendre les modèles de recherche plus flexibles, vous pouvez les raccourcir en les partageant,
comme indiqué dans l’exemple suivant :
<quickSearch>Response.Write</quickSearch>
<searchPatterns whereToSearch="directive">
<searchPattern paramNames="rs">/(\w+)\.EOF/</searchPattern>
<searchPattern paramNames="new__url">
/if\s*\([^\r\n]*\)\s*Response\.Redirect\("([^\r\n]*)"/i
</searchPattern>
</searchPatterns>
Ces modèles de recherche raccourcis étant souples, l’utilisateur peut effectuer des ajouts au code.
Toutefois, si le comportement de serveur modifie l’URL, lorsque l’utilisateur clique sur , le
participant est remplacé et les personnalisations sont perdues. Pour une mise à jour plus précise,
ajoutez une balise updatePatterns contenant un modèle pour la mise à jour de chaque
paramètre :
<updatePatterns>
<updatePattern paramNames="rs">/(\b)\w+(\.EOF)/¬
</updatePattern>
<updatePattern paramNames="new__url">
/(Response\.Redirect\(")[^\r\n]*(")/i
</updatePattern>
</updatePatterns>
Dans les modèles de mise à jour, les parenthèses sont inversées et placées autour du texte avant et
après le paramètre. Pour les modèles de recherche, utilisez le paramètre
textBeforeParam(param)textAfterParam. Pour les modèles de mise à jour, utilisez le
paramètre (textBeforeParam)param(textAfterParam). Tout le texte qui se trouve entre les
deux sous-expressions entre parenthèses sera remplacé par la nouvelle valeur du paramètre.
Suppression de comportements de serveur
Suppression par défaut et comptes de dépendance
L’utilisateur peut supprimer une
instance qu’il a sélectionnée dans le panneau Comportements de serveur en cliquant sur le bouton
moins (-) ou en appuyant sur Suppr. Tous les participants sont éliminés, hormis ceux qui sont
communs à d’autres comportements de serveur. Notamment, si plusieurs comportements de
serveur ont un pointeur de participant relié au même nœud, le nœud n’est pas supprimé.
302
Chapitre 15 : Comportements de serveur
Par défaut, vous supprimez les participants en éliminant une balise entière. Si l’emplacement
d’insertion correspond à "wrapSelection", seule la balise extérieure est supprimée. La
déclaration d’attribut dans son ensemble est supprimée. L’exemple suivant suppose un participant
sur l’attribut ACTION d’une balise form :
<form action="<% my_participant %>">
Seul form demeure après suppression de l’attribut.
Utilisation d’indicateurs pour limiter la suppression des participants Il s’avère parfois utile de
limiter la façon dont les participants sont supprimés. Pour cela, il suffit d’ajouter une balise de
suppression (delete) au fichier EDML. L’exemple suivant montre un participant correspondant à
l’attribut href d’un lien :
<a href="<%=MY_URL%>">Link Text</a>
Lorsque ce participant d’attribut est supprimé, la balise devient <a>Link Text</a>, qui
n’apparaît plus sous forme de lien dans Dreamweaver. Vous pouvez éventuellement ne supprimer
que la valeur de l’attribut, en ajoutant la balise suivante au fichier EDML participant :
<delete deleteType="innerOnly"/>
Vous pouvez aussi éliminer la balise entière lorsque l’attribut est supprimé en entrant <delete
deleteType="tagOnly"/>. Le texte résultant est Link Text.
Comment éviter les conflits dans les fichiers JavaScript contenant la directive
de partage de mémoire
Si plusieurs fichiers HTML font référence à un fichier JavaScript particulier, Dreamweaver charge
JavaScript dans un emplacement central à partir duquel les fichiers HTML peuvent partager la
même source JavaScript. Ces fichiers contiennent la directive suivante :
//SHARE-IN-MEMORY=true
Si un fichier JavaScript contient la directive SHARE-IN-MEMORY et qu’un fichier HTML y fait
référence (à l’aide de la balise SCRIPT avec l’attribut SRC), Dreamweaver le charge dans un
emplacement centralisé afin que le code soit, par la suite, implicitement inclus dans tous les
fichiers HTML.
Remarque : Les fichiers JavaScript chargés à cet emplacement centralisé partageant la mémoire, ils
ne peuvent dupliquer aucune déclaration. Un conflit de noms risque de se produire s’il y a définition
simultanée d’une même variable ou fonction à la fois dans votre fichier chargé dans la mémoire
commune et dans un autre fichier JavaScript. Par conséquent, prenez en compte ces fichiers et leur
convention d’attribution de nom lorsque vous rédigez des fichiers JavaScript.
Techniques de comportements de serveur
303
304
Chapitre 15 : Comportements de serveur
CHAPITRE 16
Sources de données
Les fonctions API de sources de données de Macromedia Dreamweaver MX 2004 vous
permettent d’ajouter des sources de données qui s’affichent dans le menu plus (+) du panneau
Liaisons. Pour plus d’informations, voir la fonction dreamweaver.dbi.getDataSources() dans
le Guide des API de Dreamweaver.
Les fichiers de source de données sont stockés dans le dossier Configuration/DataSources/
ServerModelName. A ce jour, Dreamweaver prend en charge les modèles de serveurs suivants :
ASP.Net/C#, ASP.Net/VisualBasic, ASP/JavaScript, ASP/VBScript, ColdFusion, JSP et PHP/
MySQL. Le sous-dossier de chaque modèle contient des fichiers HTML et EDML associés aux
sources de données de ce modèle de serveur.
Fonctionnement des sources de données
Dans Dreamweaver, l’ajout de données dynamiques se fait à partir du panneau Liaisons. Les
objets de données dynamiques affichés dans le menu plus (+) sont basés sur le modèle de serveur
spécifié pour la page. Par exemple, les utilisateurs peuvent insérer des jeux d’enregistrements, des
commandes, des variables de demande, des variables de session et des variables d’application pour
les applications ASP.
Les étapes suivantes décrivent les processus mis en jeu lors de l’ajout de données dynamiques :
1 Lorsque vous cliquez sur le menu plus (+) du panneau Liaisons, un menu contextuel s’affiche.
Pour déterminer le contenu du menu, Dreamweaver commence par rechercher un fichier
DataSources.xml dans le même dossier que les sources de données (Configuration/
DataSources/ASP_Js/DataSources.xml, par exemple). Le fichier DataSources.xml décrit le
contenu du menu contextuel ; il contient les références des fichiers HTML devant figurer dans
le menu contextuel.
Dreamweaver recherche une balise de titre dans chaque fichier HTML référencé. Si le fichier
contient une balise de titre, le contenu de celle-ci est affiché dans le menu. Si le fichier ne
contient pas de balise de titre, c’est le nom du fichier qui apparaît dans le menu.
Une fois qu’il a fini de lire le fichier DataSources.xml ou si ce fichier n’existe pas, Dreamweaver
effectue une recherche dans le reste du dossier pour vérifier s’il contient d’autres éléments
devant apparaître dans le menu. S’il s’avère que le dossier principal contient des fichiers qui ne
figurent pas dans le menu, Dreamweaver les y ajoute. Si des sous-dossiers contiennent des
fichiers qui ne figurent pas dans le menu, Dreamweaver crée un sous-menu et les y ajoute.
305
2 Lorsque l’utilisateur sélectionne un élément dans le menu plus (+), Dreamweaver appelle la
fonction addDynamicSource() afin que le code de la source de données soit ajouté au
document de l’utilisateur.
3 Dreamweaver passe en revue tous les fichiers du dossier spécifique au modèle de serveur utilisé,
en appelant la fonction findDynamicSources() dans chaque fichier. Pour chaque valeur du
tableau renvoyé, Dreamweaver appelle la fonction generateDynamicSourceBindings() dans
le même fichier afin d’obtenir une nouvelle liste de tous les champs dans chaque source de
données pour le document de l’utilisateur. Ces champs sont présentés à l’utilisateur sous la
forme d’une commande d’arborescence dans la boîte de dialogue Données dynamiques ou
Texte dynamique, ou encore dans le panneau Liaisons. L’arborescence des sources de données
d’un document ASP peut se présenter comme dans l’exemple suivant :
Recordset (Recordset1)
ColumnOneInRecordset
ColumnTwoInRecordset
Recordset (Recordset2)
ColumnOfRecordset
Request
NameOfRequestVariable
NameOfAnotherRequestVariable
Session
NameOfSessionVariable
4 Si l’utilisateur clique deux fois sur le nom d’une source de données dans le panneau Liaisons
pour la modifier, Dreamweaver appelle la fonction editDynamicSource() pour qu’elle traite
les modifications de l’utilisateur au sein de l’arborescence.
5 Si l’utilisateur clique sur le bouton moins (-), Dreamweaver extrait le nœud sélectionné dans
l’arborescence et le transmet à la fonction deleteDynamicSource(), qui supprime le code
ajouté précédemment à l’aide de la fonction addDynamicSource(). S’il n’est pas possible de
supprimer la sélection en cours, la fonction renvoie un message d’erreur. Après le retour de la
fonction deleteDynamicSource(), Dreamweaver actualise l’arborescence des sources de
données en appelant les fonctions findDynamicSources() et
generateDynamicSourceBindings().
6 Si l’utilisateur sélectionne une source de données et clique sur OK dans la boîte de dialogue
Données dynamiques ou Texte dynamique, ou s’il clique sur Insérer ou sur Lier dans le panneau
Liaisons, Dreamweaver appelle la fonction generateDynamicDataRef(). La valeur retournée
est insérée dans le document au niveau du point d’insertion.
7 Si l’utilisateur affiche la boîte de dialogue Données dynamiques ou Texte dynamique pour
modifier un objet de données dynamiques existant, la sélection dans l’arborescence des sources
de données doit être initialisée sur l’objet de données dynamiques. Pour initialiser la commande
d’arborescence, Dreamweaver passe en revue tous les fichiers du dossier spécifique au modèle de
serveur utilisé (le dossier Configuration/DataSources/ASP_Js, par exemple), en appelant la
fonction inspectDynamicDataRef() implémentée dans chaque fichier.
Dreamweaver appelle la fonction inspectDynamicDataRef() pour que l’objet de données
dynamiques soit reconverti, à partir du code du document de l’utilisateur, en un élément de
l’arborescence (cette procédure est en fait inversée par rapport à celle produite lorsque la
fonction generateDynamicDataRef() est appelée). Si la fonction
inspectDynamicDataRef() renvoie un tableau contenant deux éléments, Dreamweaver
indique, à l’aide d’un repère visuel, l’élément de l’arborescence lié à la sélection en cours.
306
Chapitre 16 : Sources de données
8 Chaque fois que l’utilisateur modifie la sélection, Dreamweaver appelle la fonction
pour déterminer si la nouvelle sélection correspond à un texte
dynamique ou à une balise comportant un attribut dynamique. S’il s’agit de texte dynamique,
Dreamweaver affiche les liaisons de la sélection en cours dans le panneau Liaisons.
9 Vous pouvez, à partir du panneau Liaisons ou des boîtes de dialogue Données dynamiques ou
Texte dynamique, modifier le format des données pour un objet de texte dynamique ou un
attribut dynamique que l’utilisateur a déjà ajouté à la page. Lorsque le format est modifié,
Dreamweaver appelle la fonction generateDynamicDataRef() afin d’obtenir la chaîne à
insérer dans un document utilisateur. Il transmet ensuite cette chaîne à la fonction
formatDynamicDataRef() (voir formatDynamicDataRef(), page 326). La chaîne renvoyée par
la fonction formatDynamicDataRef() est insérée dans le document utilisateur.
inspectDynamicDataRef()
API des sources de données
Les fonctions de l’API de sources de données vous permettent de trouver, ajouter, modifier et
supprimer des sources de données ainsi que de générer et inspecter des objets de données
dynamiques.
addDynamicSource()
Disponibilité
Dreamweaver UltraDev 1.
Description
Ajoute une source de données dynamiques. Comme cette fonction est implémentée dans chaque
fichier de source de données, Dreamweaver appelle l’implémentation appropriée de la fonction
addDynamicSource() dès qu’une source de données est sélectionnée dans le menu plus (+).
Par exemple, pour les jeux d’enregistrements ou les commandes, Dreamweaver appelle la fonction
dw.serverBehaviorInspector.popupServerBehavior(), qui insère un nouveau
comportement de serveur dans le document. Pour les variables de demande, de session et
d’application, Dreamweaver affiche une boîte de dialogue HTML/JavaScript permettant de
recueillir le nom de la variable ; le comportement stocke ce nom en vue d’une utilisation
ultérieure.
Une fois la fonction addDynamicSource() renvoyée, Dreamweaver efface le contenu de
l’arborescence de la source de données et appelle les fonctions findDynamicSources() et
generateDynamicSourceBindings() pour remplir de nouveau l’arborescence.
Valeurs renvoyées
Dreamweaver n’attend rien.
deleteDynamicSource()
Disponibilité
Dreamweaver UltraDev 1.
API des sources de données
307
Description
Dreamweaver appelle cette fonction lorsqu’un utilisateur sélectionne une source de données dans
l’arborescence avant de cliquer sur le bouton Moins (-).
Par exemple, dans Dreamweaver, si un jeu d’enregistrements ou une commande sont sélectionnés,
la fonction deleteDynamicSource() appelle la fonction
dw.serverBehaviorInspector.deleteServerBehavior(). Si la sélection est une variable de
demande, de session ou d’application, la fonction se souvient que la variable a été supprimée et ne
l’affiche plus. Une fois la fonction deleteDynamicSource() renvoyée, Dreamweaver efface le
contenu de l’arborescence des sources de données et appelle les fonctions
findDynamicSources() et generateDynamicSourceBindings() pour obtenir une nouvelle
liste de toutes les sources de données associées au document de l’utilisateur.
Arguments
sourceName, bindingName
• L’argument sourceName est le nom du nœud de niveau supérieur auquel le nœud enfant est
•
associé.
L’argument bindingName est le nom du nœud enfant.
Valeurs renvoyées
Dreamweaver n’attend rien.
displayHelp()
Description
Si cette fonction est définie, un bouton Aide s’affiche sous les boutons OK et Annuler dans la
boîte de dialogue. Cette fonction est appelée lorsque l’utilisateur clique sur le bouton Aide.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver n’attend rien.
Exemple
// Dans l’exemple suivant, la fonction displayHelp() ouvre
// dans un navigateur un fichier expliquant comment utiliser
// l’extension.
function displayHelp(){
var myHelpFile = dw.getConfigurationPath() +
’/ExtensionsHelp/superDuperHelp.htm’;
dw.browseDocument(myHelpFile);
}
308
Chapitre 16 : Sources de données
editDynamicSource()
Disponibilité
Dreamweaver MX.
Description
Cette fonction est appelée lorsque l’utilisateur clique deux fois sur le nom d’une source de
données dans le panneau Liaisons pour la modifier. Un développeur d’extensions peut
implémenter cette fonction pour traiter les modifications utilisateur au sein de l’arborescence.
Sinon, le comportement de serveur correspondant à la source de données est automatiquement
appelé. Le développeur d’extensions peut utiliser cette fonction pour remplacer l’implémentation
par défaut des comportements de serveur et créer un gestionnaire personnalisé.
Arguments
sourceName, bindingName
• L’argument sourceName est le nom du nœud de niveau supérieur auquel le nœud enfant est
•
associé.
L’argument bindingName est le nom du nœud enfant.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne : true si la fonction a traité la modification ; false
dans le cas contraire.
findDynamicSources()
Disponibilité
Dreamweaver UltraDev 1.
Description
Renvoie les nœuds de niveau supérieur de l’arborescence des sources de données qui s’affichent
dans la boîte de dialogue Données dynamiques ou Texte dynamique, ou encore dans le panneau
Liaisons. La fonction findDynamicSources() est implémentée dans chaque fichier de source de
données. En actualisant l’arborescence, Dreamweaver parcourt tous les fichiers du dossier
DataSources et appelle la fonction findDynamicSources() dans chacun d’eux.
Valeurs renvoyées
Dreamweaver attend un tableau d’objets JavaScript dans lequel chaque objet peut comporter cinq
attributs, décrits dans la liste suivante :
• La propriété title correspond au libellé qui apparaît à droite de l’icône de chaque nœud
•
parent. La propriété title est toujours obligatoire.
La propriété imageFile est le chemin d’un fichier contenant une icône (image GIF)
représentant le nœud parent dans la commande d’arborescence affichée dans la boîte de
dialogue Données dynamiques ou Texte dynamique, ou encore dans le panneau Liaisons. La
propriété imageFile est obligatoire.
API des sources de données
309
• La propriété allowDelete est facultative. Si cette propriété est définie sur la valeur false,
•
•
lorsque l’utilisateur clique sur ce nœud dans le panneau Liaisons, le bouton Moins (-) apparaît
désactivé. Si la propriété est définie sur la valeur true, le bouton Moins (-) est activé. Si la
propriété n’est pas définie, elle prend par défaut la valeur true.
La propriété dataSource est le nom du fichier dans lequel la fonction
findDynamicSources() est définie. Par exemple, la fonction findDynamicSources() du
fichier Session.htm, situé dans le dossier Configuration/DataSources/ASP_Js, définit la
propriété dataSource sur session.htm. La propriété dataSource est obligatoire.
La propriété name est le nom du comportement de serveur associé à la source de données, s’il
existe. Certaines sources de données, telles que des jeux d’enregistrements, sont associées à des
comportements de serveur. Lorsque vous créez un jeu d’enregistrements et lui attribuez le nom
rsAuthors, la propriété name doit avoir pour valeur rsAuthors. La propriété name est
toujours définie, mais il peut s’agir d’une chaîne vide ("") si aucun comportement de serveur
n’est associé à la source de données (tel qu’une variable de session).
Remarque : Une classe JavaScript définissant ces propriétés existe dans le fichier
DataSourceClass.js. Ce dernier se trouve dans le dossier Configuration/Shared/Common/Scripts.
generateDynamicDataRef()
Disponibilité
Dreamweaver UltraDev 1.
Description
Génère l’objet de données dynamiques pour un nœud enfant.
Arguments
sourceName, bindingName
• L’argument sourceName est le nom du nœud de niveau supérieur associé au nœud enfant.
• L’argument bindingName est le nom du nœud enfant à partir duquel vous souhaitez générer
un objet de données dynamiques.
Valeurs renvoyées
Dreamweaver attend une chaîne qui peut être transmise pour formatage à la fonction
formatDynamicDataRef() avant d’être insérée dans le document d’un utilisateur.
generateDynamicSourceBindings()
Disponibilité
Dreamweaver UltraDev 1.
Description
Renvoie le nœud enfant d’un nœud de niveau supérieur.
Arguments
sourceName
• L’argument sourceName est le nom du nœud de niveau supérieur dont vous voulez renvoyer les
nœuds enfants.
310
Chapitre 16 : Sources de données
Valeurs renvoyées
Dreamweaver attend un tableau d’objets JavaScript dans lequel chaque objet peut comporter
quatre propriétés, décrites dans la liste suivante :
• La propriété title correspond à l’étiquette qui apparaît à droite de l’icône de chaque nœud
•
•
•
parent. La propriété title est obligatoire.
La propriété allowDelete est facultative. Si cette propriété est définie sur la valeur false,
lorsque l’utilisateur clique sur ce nœud dans le panneau Liaisons, le bouton moins (-) apparaît
désactivé. Si elle est définie sur la valeur true, le bouton moins (-) est activé. Si la propriété
n’est pas définie, elle prend par défaut la valeur true.
La propriété dataSource est le nom du fichier dans lequel la fonction
findDynamicSources() est définie. Par exemple, la fonction findDynamicSources() du
fichier Session.htm, situé dans le dossier Configuration/DataSources/ASP_Js, définit la
propriété dataSource sur session.htm. Cette propriété est obligatoire.
La propriété name est le nom du comportement de serveur associé à la source de données, s’il
existe. Cette propriété est obligatoire. Certaines sources de données, telles que des jeux
d’enregistrements, sont associées à des comportements de serveur. Lorsque vous créez un jeu
d’enregistrements et lui attribuez le nom rsAuthors, la propriété name doit avoir pour valeur
rsAuthors. D’autres sources de données, telles que les variables de session, ne sont pas
associées à un comportement de serveur. Leur propriété name doit correspondre à une chaîne
vide ("").
Remarque : Une classe JavaScript définissant ces propriétés existe dans le fichier
DataSourceClass.js. Ce dernier se trouve dans le dossier Configuration/Shared/Common/Scripts.
inspectDynamicDataRef()
Disponibilité
Dreamweaver UltraDev 1.
Description
Détermine le nœud correspondant dans l’arborescence de sources de données depuis un objet de
données dynamiques. La fonction inspectDynamicDataRef() compare la chaîne transmise par
Dreamweaver à celle renvoyée par generateDynamicDataRef() pour chaque nœud de
l’arborescence. En cas de correspondance, la fonction inspectDynamicDataRef() indique quel
nœud de l’arborescence correspond à la chaîne transmise. La fonction identifie le nœud au moyen
d’un tableau contenant deux éléments. Le premier élément est le nom du nœud parent ; le second
est le nom du nœud enfant. Si aucune correspondance n’est trouvée, la fonction
inspectDynamicDataRef() renvoie un tableau vide.
Chaque implémentation de la fonction inspectDynamicDataRef() ne recherche que les
correspondances de son propre type d’objet. Par exemple, l’implémentation de la fonction
inspectDynamicDataRef() pour les jeux d’enregistrements ne trouve une correspondance que si
la chaîne transmise correspond à un nœud de jeu d’enregistrements dans l’arborescence.
API des sources de données
311
Arguments
string
• L’argument string est l’objet de données dynamiques.
Valeurs renvoyées
Dreamweaver attend un tableau de deux éléments (nom du parent et nom de l’enfant) pour le
nœud correspondant ; il renvoie la valeur null en l’absence de correspondance.
Un exemple simple de source de données
Cette extension ajoute une source de données personnalisée au panneau Liaisons pour les
documents ColdFusion. Les utilisateurs peuvent spécifier la variable de leur choix pour la source
de données.
Pour créer une nouvelle source de données :
1 Créez un fichier de définition de sources de données au format HTML.
Ce fichier indique à Dreamweaver le nom de la source de données tel qu’il s’affichera dans le
menu plus (+) du panneau Liaisons. Il indique également à Dreamweaver où se trouvent les
fichiers JavaScript de prise en charge de l’implémentation de sources de données.
2 Créez un fichier EDML qui définit le code que Dreamweaver devra insérer dans le document
pour représenter une valeur de source de données (pour plus d’informations sur les fichiers
EDML, voir Comportements de serveur, page 255).
3 Rédigez le code JavaScript destiné à implémenter la nouvelle source de données.
4 Créez d’autres fichiers de prise en charge, par exemple, les boîtes de dialogue pour les entrées
utilisateur ou les images accompagnant la source de données dans le panneau Liaisons.
Cet exemple permet de créer une source de données intitulée MaSourceDeDonnées. Cette source
de données comprend un fichier JavaScript MaSourceDeDonnées.js qui utilise un fichier
MaSourceDeDonnées_DataRef.edml (voir API des sources de données, page 307) et les fichiers de
commandes MaSourceDeDonnées_Variable pour implémenter une boîte de dialogue afin que les
utilisateurs entrent le nom d’une variable spécifique. L’exemple MaSourceDeDonnées est basé sur
l’implémentation des sources de données Cookie Variable et URL Variable. Les fichiers pour ces
deux sources de données se trouvent dans le dossier Configuration\DataSources\ColdFusion.
Création du fichier de définition de source de données
Premièrement, lorsqu’un utilisateur clique sur le menu Plus (+) du panneau Liaisons,
Dreamweaver recherche le dossier DataSources afin que le modèle de serveur actuel regroupe
l’ensemble des sources de données définies dans les fichiers HTML (HTM) du dossier. Pour
rendre une nouvelle source de données accessible aux utilisateurs, vous devez créer un fichier de
définition de source de données qui fournit le nom de la source de données à l’aide de la balise
TITLE et l’emplacement des fichiers JavaScript de prise en charge à l’aide de la balise SCRIPT.
312
Chapitre 16 : Sources de données
Pour une source de données nommée MaSourceDeDonnées (et un fichier JavaScript
MaSourceDeDonnées.js à créer ultérieurement), rédigez le fichier de définition de base de
données suivant :
<HTML>
<HEAD>
<TITLE>MaSourceDeDonnées</TITLE>
<SCRIPT SRC="../../Shared/Common/Scripts/dwscripts.js"></SCRIPT>
<SCRIPT SRC="../../Shared/Common/Scripts/dwscriptsServer.js"></SCRIPT>
<SCRIPT SRC="../../Shared/Common/Scripts/DataSourceClass.js"></SCRIPT>
<SCRIPT SRC="MaSourceDeDonnées.js"></SCRIPT>
</HEAD>
<body></body>
</HTML>
Plusieurs fichiers de prise en charge sont nécessaires pour l’implémentation de cette source de
données. En général, il n’est pas nécessaire d’utiliser les fonctions de ces fichiers de prise en charge,
mais ces dernières se révèlent souvent utiles (voire nécessaires dans cet exemple). Par exemple, le
fichier dwscriptsServer.js contient la fonction dwscripts.stripCFOutputTags() utilisée pour
l’implémentation de cette source de données. A l’aide du fichier DataSourceClass.js, créez une
instance de la classe DataSource à utiliser comme valeur de retour pour la fonction
findDynamicSources().
Ensuite, enregistrez ce fichier de définition dans le dossier
Configuration\DataSources\ColdFusion sous le nom MaSourceDeDonnées.htm.
Création du fichier EDML
Lorsqu’un utilisateur ajoute une valeur particulière à un document à partir d’une source de
données, Dreamweaver insère le code qui sera converti dans la valeur réelle lors de l’exécution. Le
fichier EDML participant définit le code du document (pour plus d’informations, voir Fichiers
EDML Participant, page 277).
Pour la variable MaSourceDeDonnées, Dreamweaver doit insérer le code ColdFusion
<cfoutput>#MonXML.variable#</cfoutput>, où variable est la valeur que l’utilisateur attend
de la source de données.
Créez un fichier avec le contenu suivant :
<participant>
<quickSearch><![CDATA[#]]></quickSearch>
<insertText
location="replaceSelection"><![CDATA[<cfoutput>#MaSourceDeDonnées.@@binding
Name@@#</cfoutput>]]></insertText>
<searchPatterns whereToSearch="tag+cfoutput">
<searchPattern paramNames="sourceName,bindingName"><![CDATA[/
#(?:\s*\w+\s*\()?(MaSourceDeDonnées)\.(\w+)\b[^#]*#/i]]></searchPattern>
</searchPatterns>
</participant>
Enregistrez le fichier dans le dossier Configuration\DataSources\ColdFusion sous le nom
MaSourceDeDonnées_DataRef.edml.
Un exemple simple de source de données
313
Création du fichier JavaScript qui implémente les fonctions API de sources de
données
Après avoir défini le nom de la source de données, le nom des fichiers de script de prise en charge
et le code du document de travail Dreamweaver, vous devez rédiger les fonctions JavaScript afin
que Dreamweaver permette à l’utilisateur d’ajouter, d’insérer et de supprimer le code nécessaire
dans un document.
Selon la construction de la source de données Cookie Variable, vous pouvez implémenter la
source de données MonXML, comme indiqué dans l’exemple suivant (la commande
MaSourceDeDonnées_Variable utilisée dans la fonction addDynamicSource() est définie dans
Création des fichiers de commande de prise en charge pour les entrées utilisateur, page 316) :
//************** GLOBALS VARS *****************
var MaSourceDeDonnées_FILENAME = "REQ_D.gif";
var DATASOURCELEAF_FILENAME = "DSL_D.gif";
//****************** API **********************
function addDynamicSource()
{
MM.retVal = "";
MM.MaSourceDeDonnéesContents = "";
dw.popupCommand("MaSourceDeDonnées_Variable");
if (MM.retVal == "OK")
{
var theResponse = MM.MaSourceDeDonnéesContents;
if (theResponse.length)
{
var siteURL = dw.getSiteRoot();
if (siteURL.length)
{
dwscripts.addListValueToNote(siteURL, "MaSourceDeDonnées",
theResponse);
}
else
{
alert(MM.MSG_DefineSite);
}
}
else
{
alert(MM.MSG_DefineMaSourceDeDonnées);
}
}
}
function findDynamicSources()
{
var retList = new Array();
var siteURL = dw.getSiteRoot()
if (siteURL.length)
{
var bindingsArray = dwscripts.getListValuesFromNote(siteURL,
"MaSourceDeDonnées");
if (bindingsArray.length > 0)
{
314
Chapitre 16 : Sources de données
// Nous créons ici une instance de la classe DataSource telle que définie
dans le
// fichier DataSourceClass.js pour stocker les valeurs renvoyées.
retList.push(new DataSource("MaSourceDeDonnées",
MaSourceDeDonnées_FILENAME,
false,
"MaSourceDeDonnées.htm"))
}
}
return retList;
}
function generateDynamicSourceBindings(sourceName)
{
var retVal = new Array();
var siteURL = dw.getSiteRoot();
//Pour le nom d’objet localisé
if (sourceName != "MaSourceDeDonnées")
{
sourceName = "MaSourceDeDonnées";
}
if (siteURL.length)
{
var bindingsArray = dwscripts.getListValuesFromNote(siteURL, sourceName);
retVal = getDataSourceBindingList(bindingsArray,
DATASOURCELEAF_FILENAME,
true,
"MaSourceDeDonnées.htm");
}
return retVal;
}
function generateDynamicDataRef(sourceName, bindingName, dropObject)
{
var paramObj = new Object();
paramObj.bindingName = bindingName;
var retStr = extPart.getInsertString("", "MaSourceDeDonnées_DataRef",
paramObj);
// Les balises cfoutput doivent être supprimées si une balise CFOUTPUT est
insérée
// ou si les attributs d’une balise ColdFusion doivent être liés. Nous
utilisons donc la fonction
// dwscripts.canStripCfOutputTags() de dwscriptsServer.js
if (dwscripts.canStripCfOutputTags(dropObject, true))
{
retStr = dwscripts.stripCFOutputTags(retStr, true);
}
return retStr;
}
function inspectDynamicDataRef(expression)
{
Un exemple simple de source de données
315
var retArray = new Array();
if(expression.length)
{
var params = extPart.findInString("MaSourceDeDonnées_DataRef",
expression);
if (params)
{
retArray[0] = params.sourceName;
retArray[1] = params.bindingName;
}
}
return retArray;
}
function deleteDynamicSource(sourceName, bindingName)
{
var siteURL = dw.getSiteRoot();
if (siteURL.length)
{
//Pour le nom d’objet localisé
if (sourceName != "MaSourceDeDonnées")
{
sourceName = "MaSourceDeDonnées";
}
dwscripts.deleteListValueFromNote(siteURL, sourceName, bindingName);
}
}
Remarque : Enregistrez ce fichier dans le dossier Configuration\DataSources\ColdFusion sous le
nom MaSourceDeDonnées.js, ce nom étant spécifié dans Création du fichier de définition de source
de données, page 312.
Création des fichiers de commande de prise en charge pour les entrées
utilisateur
La fonction addDynamicSource() contient la commande
dw.popupCommand("MyDatasrouce_Variable"), qui ouvre
une boîte de dialogue afin que
l’utilisateur entre un nom spécifique de variable. Il faudra néanmoins créer la boîte de dialogue
pour la variable MaSourceDeDonnées.
Pour fournir une boîte de dialogue à l’utilisateur, vous devez créer un nouvel ensemble de fichiers
de commandes : un fichier de définition de commande HTML et un fichier d’implémentation de
commande JavaScript (pour plus d’informations sur les fichiers de commandes, voir
Fonctionnement des commandes, page 141).
Le fichier de définition de commande indique à Dreamweaver l’emplacement des fichiers
JavaScript de prise en charge d’implémentation ainsi que la forme de la boîte de dialogue visible
par l’utilisateur. Créez un fichier HTML contenant les éléments suivants (dans lequel
MaSourceDeDonnées_Variable.js est le fichier d’implémentation que vous créerez par la suite) :
<!DOCTYPE HTML SYSTEM "-//Macromedia//DWExtension layout-engine 5.0//dialog">
<html>
<head>
<title>MaSourceDeDonnées_Variable</title>
<script src="MaSourceDeDonnées_Variable.js"></script>
316
Chapitre 16 : Sources de données
<SCRIPT SRC="../Shared/MM/Scripts/CMN/displayHelp.js"></SCRIPT>
<SCRIPT SRC="../Shared/MM/Scripts/CMN/string.js"></SCRIPT>
<link href="../fields.css" rel="stylesheet" type="text/css">
</head>
<body>
<form>
<div ALIGN="center">
<table border="0" cellpadding="2" cellspacing="4">
<tr>
<td align="right" valign="baseline" nowrap>Nom :</td>
<td valign="baseline" nowrap>
<input name="theName" type="text" class="medTField">
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Enregistrez le fichier dans le dossier Configuration/Commands sous le nom
MaSourceDeDonnées_Variable.htm.
Ensuite, comme indiqué dans l’exemple suivant, le fichier de prise en charge JavaScript détermine
simplement les boutons de la boîte de dialogue et comment attribuer les entrées utilisateur dans la
boîte de dialogue :
//******************* API **********************
function commandButtons(){
return new Array(MM.BTN_OK,"okClicked()",MM.BTN_Cancel,"window.close()");
}
//***************** LOCAL FUNCTIONS
******************
function okClicked(){
var nameObj = document.forms[0].theName;
if (nameObj.value) {
if (IsValidVarName(nameObj.value)) {
MM.MaSourceDeDonnéesContents = nameObj.value;
MM.retVal = "OK";
window.close();
}else{
alert(nameObj.value + " " + MM.MSG_InvalidParamName);
}
}else{
alert(MM.MSG_NoName);
}
}
Enregistrez ce fichier JavaScript file dans le dossier Configuration/Commands sous le nom
MaSourceDeDonnées_Variable.js.
Un exemple simple de source de données
317
Utilisation d’une nouvelle source de données
Vous pouvez maintenant ouvrir Dreamweaver (ou le redémarrer s’il est déjà utilisé) et ouvrir un
fichier ColdFusion ou en créer un nouveau.
Procédez comme suit pour tester votre nouvelle source de données :
1 Placez le pointeur sur le document, cliquez sur le menu Plus (+) du panneau Liaisons pour
afficher l’ensemble des sources de données disponibles. MaSourceDeDonnées doit s’afficher en
fin de liste :
2 Cliquez sur l’option de source de données MaSourceDeDonnées pour afficher la boîte de
dialogue MaSourceDeDonnées_Variable créée :
3 Saisissez une valeur dans la boîte de dialogue, puis appuyez sur OK.
Le panneau Liaisons affiche la source de données dans une arborescence comprenant la variable
de la boîte de dialogue sous le nom de la source de données :
318
Chapitre 16 : Sources de données
4 Faites glisser la variable dans votre document ; Dreamweaver se charge d’insérer le code
approprié à partir du fichier EDML :
Un exemple simple de source de données
319
320
Chapitre 16 : Sources de données
CHAPITRE 17
Formats de serveur
Le Chapitre 16, Sources de données, page 305, explique comment Macromedia
Dreamweaver MX 2004 insère des données dynamiques dans le document de l’utilisateur en
ajoutant une expression de serveur à l’endroit approprié. Lorsqu’un visiteur demande le document
de l’utilisateur à partir du serveur Web, l’expression est convertie en une valeur de base de
données, en contenu d’une variable de requête ou en toute autre valeur dynamique. Les formats
de serveur de Dreamweaver permettent de formater la valeur dynamique pour la présenter au
visiteur.
Ce chapitre traite de l’API de formatage des données dynamiques renvoyées par les fonctions
décrites dans Sources de données. Les données dynamiques sont formatées à l’aide d’une
combinaison des fonctions décrites dans les deux chapitres. Si l’utilisateur sélectionne un format
pour les données dynamiques, Dreamweaver appelle la fonction de source de données
generateDynamicDataRef(), voir generateDynamicDataRef(), page 310 pour obtenir la chaîne à
insérer dans le document utilisateur. Avant de l’insérer dans le document de l’utilisateur,
Dreamweaver transmet cette chaîne à la fonction formatDynamicDataRef(), décrite dans ce
chapitre. La chaîne renvoyée par la fonction formatDynamicDataRef() représente les données
dynamiques formatées finalement insérées dans le document de l’utilisateur.
Les utilisateurs de Dreamweaver peuvent formater les données à l’aide de formats prédéfinis ou
créer des formats à partir de types prédéfinis ou de types qu’ils ont créés eux-mêmes.
L’utilisateur peut formater les données dynamiques de plusieurs façons. A partir des boîtes de
dialogue Données dynamiques ou Texte dynamique ou du panneau Liaisons, l’utilisateur peut
utiliser le menu Format pour formater les données avant de les insérer dans un document HTML.
S’il veut créer un format, l’utilisateur peut sélectionner la commande Modifier la liste de formats
depuis le menu Format, puis sélectionner ensuite un type de format dans le menu Plus (+). Le
menu Plus (+) contient une liste de types de format. Les types de format sont des catégories de
format de base (Devise, Date/Heure, Casse, etc.). Ils regroupent tous les paramètres communs à
une catégorie et facilitent la création de nouveaux formats.
Il serait par exemple possible de créer un format de devise. Le formatage des devises consiste en
fait à convertir un nombre en une chaîne et à insérer des virgules et un symbole de devise (le signe
du dollar, $, par exemple). Le type de données de format Devise regroupe tous les paramètres
communs et vous demande une valeur pour chacun d’eux.
321
Organisation du formatage de données
Tous les fichiers de format se trouvent dans le dossier Configuration/ServerFormats/
currentServerModel. Chaque sous-dossier contient un fichier XML et plusieurs fichiers HTML.
Le fichier Formats.xml décrit tous les choix du menu Format. Dreamweaver ajoute
automatiquement les options Modifier la liste de formats et Aucun.
Le dossier contient également un fichier HTML pour chaque type de format installé, dont Casse
et Rogner.
d’alphabet, Devise, Date/Heure, Math, Nombre, Pourcentage, Simple
Le fichier Formats.xml
Le fichier Formats.xml contient une balise format pour chaque élément du menu Format.
Chaque balise format contient les attributs obligatoires suivants :
• L’attribut file=fileName représente le fichier HTML du type de format concerné, tel que
« Devise ».
• L’attribut title=string représente la chaîne qui apparaît dans le menu Format, telle que
« Devise - Valeur par défaut ».
• L’attribut expression=regexp représente une expression régulière correspondant aux objets
•
de données dynamiques qui utilisent ce format. L’expression détermine le format actuellement
appliqué à l’objet de données dynamiques. Par exemple, l’expression correspondant au format
« Devise - Valeur par défaut » serait « <%\s*=\s*FormatCurrency\(.*, -1, -2, 2, -2\)\s*%>|<%\s*=\s*DoCurrency\(.*, -1, -2, -2, -2\)\s*%> ». La valeur de
l’attribut d’expression doit être unique parmi toutes les balises format du fichier. Elle doit être
suffisamment précise pour garantir que seules les instances de ce format correspondent à
l’expression.
L’attribut visibility=[hidden | visible] indique si la valeur est affichée dans le menu
Format. Si la valeur de l’attribut visibility est hidden (masqué), le format ne s’affiche pas
dans le menu Format.
La balise format peut éventuellement contenir des attributs supplémentaires ayant un nom
arbitraire.
Certaines fonctions de formatage de données nécessitent un argument, format, qui est un objet
JavaScript. Cet objet est le nœud correspondant à la balise format dans le fichier Formats.xml.
L’objet a une propriété JavaScript pour chaque attribut de la balise format correspondante.
L’exemple suivant illustre la balise format pour la chaîne « Devise - Valeur par défaut » :
<format file="Currency" title="Devise - Valeur par défaut" ¬
expression="<%\s*=\s*FormatCurrency\(.*, -1, -2, -2, -2\)\s*%>|¬
<%\s*=\s*DoCurrency\(.*, -1, -2, -2, -2\)\s*%>"
NumDigitsAfterDecimal=-1 IncludeLeadingDigit=-2 ¬
UseParensForNegativeNumbers=-2 GroupDigits=-2/>
Dans ce cas, le type de format est Devise. La chaîne « Devise - Valeur par défaut »
s’affiche dans le menu Format. L’expression <%\s*=\s*FormatCurrency\(.*, -1, -2, -2,¬
-2\)\s*%>|<%\s*=\s*DoCurrency\(.*, -1, -2, -2, -2\)\s*%> trouve des occurrences de
ce format dans le document de l’utilisateur.
322
Chapitre 17 : Formats de serveur
Les paramètres NumDigitsAfterDecimal, IncludeLeadingDigit,
UseParensForNegativeNumbers et GroupDigits concernent le format Devise et ne sont pas
nécessaires. Ces paramètres s’affichent dans la boîte de dialogue Paramètres du type de format
Devise. Cette boîte de dialogue apparaît chaque fois qu’un utilisateur choisit le type de format
Devise dans le menu Plus (+) de la boîte de dialogue Modifier la liste de formats. Les valeurs
indiquées pour ces paramètres sont utilisées pour définir le nouveau format.
Le menu Plus (+) de la boîte de dialogue Modifier la liste de formats
Si vous ne voulez pas qu’un fichier du dossier ServerFormats apparaisse dans le menu Plus (+) de
la boîte de dialogue Modifier la liste de formats, ajoutez l’instruction suivante de manière à ce
qu’elle figure sur la première ligne du fichier HTML :
<!-- MENU-LOCATION=NONE -->
Pour déterminer le contenu du menu, Dreamweaver commence par rechercher un fichier
ServerFormats.xml dans le même dossier que les formats de données (par exemple,
\Configuration\ServerFormats\ASP\ServerFormats.xml). Le fichier ServerFormats.xml décrit le
contenu du menu Plus (+) de la boîte de dialogue Modifier la liste de formats. Il contient des
références aux fichiers HTML répertoriés dans le menu.
Dreamweaver recherche une balise de titre dans chaque fichier HTML référencé. Si le fichier
contient une balise de titre, le contenu de celle-ci est affiché dans le menu. Si le fichier ne contient
pas de balise de titre, c’est le nom du fichier qui apparaît dans le menu.
Une fois qu’il a fini de rechercher le fichier ou si ce fichier n’existe pas, Dreamweaver analyse le
reste du dossier pour vérifier s’il contient d’autres éléments devant apparaître dans le menu. S’il
s’avère que le dossier principal contient des fichiers qui ne figurent pas dans le menu,
Dreamweaver les y ajoute. Si des sous-dossiers contiennent des fichiers qui ne figurent pas déjà
dans le menu, Dreamweaver crée un sous-menu et les y ajoute.
Mise en service des fonctions de formatage de données
Les fonctions de formatage de données sont appelées dans les cas suivants :
• Dans la boîte de dialogue Données dynamiques ou Texte dynamique, l’utilisateur choisit un
•
•
nœud dans l’arborescence des sources de données et un format dans le menu Format. Une fois
le format choisi, Dreamweaver appelle la fonction generateDynamicDataRef() et transmet la
valeur de renvoi de la fonction generateDynamicDataRef() à la fonction
formatDynamicDataRef(). La valeur renvoyée par la fonction formatDynamicDataRef()
s’affiche dans le paramètre Code de la boîte de dialogue. Lorsque l’utilisateur clique sur OK, la
chaîne de code est insérée dans le document de l’utilisateur. Dreamweaver appelle ensuite la
fonction applyFormat() pour insérer une déclaration de fonction. Pour plus d’informations,
voir generateDynamicDataRef(), page 310. Un processus similaire a lieu lorsque l’utilisateur
utilise le panneau Liaisons.
L’utilisateur change le format ou efface l’élément de données dynamiques. La fonction
deleteFormat() est alors appelée. Cette fonction deleteFormat() supprime les scripts
correspondants du document.
Lorsque l’utilisateur clique sur le bouton plus (+) de la boîte de dialogue Modifier la liste de
formats, Dreamweaver affiche un menu contenant tous les types de format pour le modèle de
serveur utilisé. Chaque type de format correspond à un fichier du dossier
Configuration\ServerFormats\currentServerModel.
Mise en service des fonctions de formatage de données
323
•
Si l’utilisateur choisit, dans le menu Plus (+), un format qui nécessite un paramètre spécifié par
l’utilisateur, Dreamweaver exécute le gestionnaire onLoad sur la balise body, puis ouvre la boîte
de dialogue Paramètres, qui affiche les paramètres de ce type de format. Dans cette boîte de
dialogue, l’utilisateur choisit les paramètres du format et clique sur OK. Dreamweaver appelle
alors la fonction applyFormatDefinition().
Si le format sélectionné n’a pas besoin d’afficher de boîte de dialogue Paramètres, Dreamweaver
appelle la fonction applyFormatDefinition() lorsque l’utilisateur choisit le type de format
dans le menu Plus (+).
Par la suite, si l’utilisateur modifie le format (en le sélectionnant dans la boîte de dialogue
Modifier la liste de formats et en cliquant sur le bouton Modifier), Dreamweaver appelle la
fonction inspectFormatDefinition() avant d’afficher la boîte de dialogue Paramètres, de
façon à ce que les commandes de formulaire puissent être initialisées sur les valeurs correctes.
L’API de formats de serveur
L’API de formats de serveur est composé des fonctions de formatage de données suivantes.
applyFormat()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction permet de modifier un document en lui ajoutant une déclaration de fonction de
format. Lorsque l’utilisateur choisit un format dans le champ de texte Format des boîtes de
dialogue Données dynamiques ou Texte dynamique ou du panneau Liaisons, Dreamweaver
apporte deux modifications au document : Il ajoute la fonction de format appropriée avant la
balise HTML (si elle n’est pas déjà présente) et il change l’objet de données dynamiques de façon
à ce qu’il appelle la fonction de format appropriée.
Dreamweaver ajoute la déclaration de fonction en appelant la fonction JavaScript applyFormat()
dans le fichier de format des données. Il modifie l’objet de données dynamique en appelant la
fonction formatDynamicDataRef().
La fonction applyFormat() doit utiliser le DOM (Document Object Model, Modèle d’objet de
document) pour ajouter des déclarations de fonction au début du document de l’utilisateur. Par
exemple, si l’utilisateur sélectionne Devise -Valeur par défaut, la fonction ajoute la déclaration de
fonction Currency.
Arguments
format
• L’argument format est un objet JavaScript qui décrit le format à appliquer. Cet objet
JavaScript constitue le nœud correspondant à la balise format dans le fichier Formats.xml.
L’objet a une propriété JavaScript pour chaque attribut de la balise format correspondante.
Valeurs renvoyées
Dreamweaver n’attend rien.
324
Chapitre 17 : Formats de serveur
applyFormatDefinition()
Disponibilité
Dreamweaver UltraDev 1.
Description
Applique les changements à un format créé à partir de la boîte de dialogue Modifier le format.
Les utilisateurs peuvent créer, modifier ou supprimer des formats à partir de la boîte de dialogue
Modifier la liste de formats. Cette fonction est appelée pour appliquer toutes les modifications
apportées à un format. Elle peut également définir d’autres propriétés, nommées arbitrairement,
pour l’objet. Chaque propriété est stockée en tant qu’attribut de la balise format dans le fichier
Formats.xml.
Arguments
format
• L’argument format correspond à l’objet format JavaScript. Cette fonction doit faire de la
propriété expression de l’objet JavaScript l’expression régulière du format. Elle peut
également définir d’autres propriétés, nommées arbitrairement, pour l’objet. Chaque propriété
est stockée en tant qu’attribut de la balise format.
Valeurs renvoyées
Dreamweaver attend l’objet de format, si la fonction est correctement appliquée. En cas d’erreur,
une chaîne d’erreur est renvoyée. Si une chaîne vide est renvoyée, le formulaire est fermé mais le
nouveau format n’est pas créé, ce qui revient à annuler l’opération.
deleteFormat()
Disponibilité
Dreamweaver UltraDev 1.
Description
Supprime la déclaration de fonction du format au début du document de l’utilisateur.
Lorsque l’utilisateur modifie le format d’un objet de données dynamiques (dans les boîtes de
dialogue Données dynamiques ou Texte dynamique ou dans le panneau Liaisons) ou supprime un
objet de données dynamiques formaté, Dreamweaver supprime la déclaration de fonction au
début du document, ainsi que l’appel de la fonction de l’objet de données dynamiques en
appelant la fonction deleteFormat().
Utilisez le DOM avec la fonction deleteFormat() pour supprimer la déclaration de fonction au
début du document ouvert.
Arguments
format
• L’argument format est un objet JavaScript qui décrit le format à supprimer. Cet objet
JavaScript constitue le nœud correspondant à la balise format dans le fichier Formats.xml.
Valeurs renvoyées
Dreamweaver n’attend rien.
L’API de formats de serveur
325
formatDynamicDataRef()
Disponibilité
Dreamweaver UltraDev 1.
Description
Ajoute à l’objet de données dynamiques l’appel de la fonction de format. Lorsqu’un utilisateur
choisit un format dans le champ de texte Format de la boîte de dialogue Données dynamiques ou
Texte dynamique ou le panneau Liaisons, Dreamweaver apporte deux modifications au
document : il ajoute la fonction de format appropriée avant la balise (si elle n’est pas déjà
présente) et il change l’objet de données dynamiques de façon à ce qu’il appelle la fonction de
format appropriée.
Dreamweaver ajoute la déclaration de fonction en appelant la fonction JavaScript applyFormat()
dans le fichier de format des données. Il modifie l’objet de données dynamique en appelant la
fonction formatDynamicDataRef().
La fonction formatDynamicDataRef() est appelée lorsque l’utilisateur sélectionne un format du
champ de texte Format de la boîte de dialogue Données dynamiques ou Texte dynamique ou du
panneau Liaisons. Elle ne modifie pas le document de l’utilisateur.
Arguments
dynamicDataObject, format
• L’argument dynamicDataObject est une chaîne contenant l’objet de données dynamiques.
• L’argument format est un objet JavaScript qui décrit le format à appliquer. Cet objet
JavaScript constitue le nœud correspondant à la balise format dans le fichier Formats.xml.
L’objet a une propriété JavaScript pour chaque attribut de la balise format correspondante.
Valeurs renvoyées
Dreamweaverattend la nouvelle valeur de l’objet de données dynamiques.
Si une erreur a lieu, la fonction affiche un message d’avertissement dans certaines conditions. Si la
fonction renvoie une chaîne vide, le champ Format prend la valeur Aucun.
326
Chapitre 17 : Formats de serveur
inspectFormatDefinition()
Disponibilité
Dreamweaver UltraDev 1.
Description
Initialise les commandes de formulaire lorsqu’un utilisateur modifie un format existant dans la
boîte de dialogue Modifier la liste de formats.
Arguments
format
• L’argument format est un objet JavaScript qui décrit le format à appliquer. Cet objet
JavaScript constitue le nœud correspondant à la balise format dans le fichier Formats.xml.
L’objet a une propriété JavaScript pour chaque attribut de la balise format correspondante.
Valeurs renvoyées
Dreamweaver n’attend rien.
L’API de formats de serveur
327
328
Chapitre 17 : Formats de serveur
CHAPITRE 18
Composants
Les programmeurs ont recours à différentes stratégies pour encapsuler leurs travaux. L’expérience
prouve en effet que les programmes bien organisés sont plus faciles à gérer, à améliorer et à
réutiliser. Les différentes technologies offrent aux programmeurs différentes façons d’effectuer
l’encapsulation, et ces stratégies portent différents noms : fonctions, modules et autres. Macromedia
Dreamweaver MX 2004 utilise le terme de composant pour décrire certaines des stratégies
d’encapsulation les plus répandues et les plus modernes, comme les services Web, JavaBeans et
composants ColdFusion (CFC). Lorsque les utilisateurs créent des applications Web dans
Dreamweaver, le panneau Composants les aide à utiliser les services Web, JavaBeans et CFC
disponibles.
Si vous avez inventé (ou si vous utilisez) une stratégie qui n’est pas représentée dans le panneau
Composants de Dreamweaver, vous pouvez étendre la logique du panneau Composants de façon
à ce qu’il prenne en charge les nouveaux types de composants. Les fichiers à modifier sont
présentés dans ce chapitre. Dans certains cas, vous devrez écrire un code JavaScript appelant
certaines fonctions liées aux composants.
Les composants provenant de technologies récentes (comme les services Web, JavaBeans ou les
CFC) sont capables de s’autodécrire. En d’autres termes, un programme comme Dreamweaver
peut demander à un composant de lui fournir la liste des fonctions qu’il expose (c’est-à-dire les
fonctions qu’il peut appeler à partir d’un autre programme). En fonction de la technologie
utilisée, un composant peut révéler d’autres informations à son sujet. Par exemple, un service Web
pourrait décrire de nouveaux types de données.
Pour ajouter un nouveau type de composant au panneau Composants de Dreamweaver, vous
devez localiser les composants disponibles (dans l’environnement utilisateur) et demander des
descriptions de chaque composant (ou les analyser s’ils sont écrits à l’aide de fichiers ASCII).
La façon précise dont l’emplacement et les détails des composants sont extraits dépend des
technologies. Elle peut également varier selon le modèle de serveur (ASP.NET, JSP/J2EE,
ColdFusion ou autre). Le code JavaScript que vous écrivez pour étendre le panneau Composants
dépend donc de la technologie de composant à ajouter. Les fonctions décrites ici ont pour but de
vous aider à faire apparaître des informations dans le panneau Composants, mais vous devez écrire
une bonne partie de la logique de localisation et d’introspection des composants (en interrogeant
la structure interne du composant et en rendant ses champs, méthodes et propriétés disponibles
via Dreamweaver).
329
Enfin, les modèles de serveur comme ASP.NET, JSP/J2EE ou ColdFusion tendent à prendre en
charge certains types seulement de composants. Par exemple, ASP.NET prend en charge les
services Web mais pas les JavaBeans. ColdFusion prend également en charge les services Web et
les CFC. Lorsque vous ajoutez un type de composant au panneau Composants, il doit être
spécifique au modèle de serveur.
Personnalisation du panneau Composants
Le panneau Composants de Dreamweaver permet aux utilisateurs de charger et d’utiliser des
composants. Il répertorie tous les types de composants disponibles et compatibles avec chaque
modèle de serveur activé. Ainsi, comme la technologie JavaBeans ne peut fonctionner que dans
une page JSP, les composants JavaBeans ne sont affichés dans le panneau Composants que pour le
modèle de serveur JSP. De même, dans la mesure où les composants ColdFusion ne fonctionnent
que dans une page ColdFusion, ils ne sont affichés dans le panneau Composants que pour le
modèle de serveur ColdFusion.
Vous pouvez ajouter des types de composants au panneau Composants en créant une extension.
Une fois ajoutés, ces composants apparaissent dans la liste déroulante Composants. Vous pouvez
également ajouter des instructions pour la configuration des composants et afficher ces
instructions dans le panneau Composants ou dans une boîte de dialogue (selon l’extension pour
laquelle vous les implémentez) sous la forme d’étapes numérotées. Les étapes de configuration
s’affichent alors de façon interactive lorsque les utilisateurs chargent de nouveaux composants ;
des coches apparaissent en regard de chaque étape déjà effectuée.
Fichiers du panneau Composants
Le dossier Configuration/Components contient un sous-dossier pour chaque modèle de serveur
implémenté. Les fichiers de composant sont stockés dans le dossier Configuration/Components/
server-model/ServerType. Vous pouvez ajouter d’autres modèles de serveur et extensions de serveur
compatibles (pour plus d’informations sur les modèles de serveur, voir le Chapitre 19, Modèles de
serveur, page 345 ; pour plus d’informations sur les comportements de serveur, voir le
Chapitre 15, Comportements de serveur, page 255).
Pour créer un composant personnalisé fonctionnant avec le panneau Composants :
• Créez un fichier HTML identifiant les emplacements des fichiers JavaScript et d’images.
• Ecrivez le code JavaScript permettant d’activer le composant.
• Créez des fichiers d’image GIF représentant le composant dans le panneau Composants (ou
identifiez s’il en existe déjà).
Si vous souhaitez qu’un type de composant s’affiche dans la commande d’arborescence, vous
devez aussi créer les fichiers facultatifs associés et compléter la commande d’arborescence.
Vous pouvez définir le type composant de sorte qu’il soit utilisable au niveau d’une page Web
précise, d’un ensemble de pages Web ou d’un site Web entier. Le code JavaScript doit inclure la
logique de persistance du composant pour permettre son auto-enregistrement entre les sessions et
son chargement à chaque début de session.
330
Chapitre 18 : Composants
L’exemple suivant illustre une entrée de données dans le fichier JavaBeansList.xml (à enregistrer
dans le dossier de configuration multiutilisateur) définissant la classe de composant et son
emplacement :
<javabeans>
<javabean classname="TestCollection.MusicCollection"
classlocation="d:\music\music.jar"></javabean>
</javabeans>
Les JavaBeans doivent contenir la logique leur permettant de s’enregistrer automatiquement dans
le dossier de configuration multiutilisateur. De cette façon, la prochaine fois que l’utilisateur
lancera une application, le composant se chargera automatiquement à partir du fichier de données
enregistré.
Ajout d’un composant de service
Pour ajouter un nouveau service LDAP (Lightweight Directory Access Protocol) à l’aide de
Dreamweaver MX :
1 En prenant pour modèle les fichiers de types de composants existants (par exemple, les fichiers
du dossier d’application Configuration/Components/Common/WebServices), créez tous les
fichiers nécessaires ainsi que les fichiers facultatifs, pour afficher le nouveau type de composant
dans le panneau Composants de Dreamweaver, comme indiqué dans le tableau suivant :
Nom de
fichier
Description
Obligatoire/
Facultatif
.htm
Fichier d’extension qui identifie les autres fichiers de prise
en charge JavaScript et GIF.
Obligatoire
.js
Fichier d’extension qui implémente le rappel de l’API des
composants.
Obligatoire
.gif
Image qui apparaît dans la liste déroulante Composants.
Obligatoire
*Menus.xml
Facultatif
Lieu de stockage des métadonnées qui définissent la
structure du panneau Composants. Bien que le composant
WebServices commun n’utilise pas ce fichier, vous pouvez
prendre comme exemple le fichier
WebServicesMenus.xml du dossier d’application
Components/ColdFusion/ WebServices.
*.gif
Images de la barre d’outils, qui peuvent être activées ou
désactivées, comme indiqué dans l’exemple suivant :
Facultatif
ToolBarImageUp.gif
ToolBarImageDown.gif
ToolBarImageDisabled.gif.
Ou trois images de nœuds.
Remarque : Utilisez le même préfixe pour tous les fichiers se rapportant au même composant, afin
que chaque fichier et son composant soient facilement identifiables.
Fichiers du panneau Composants
331
2 Rédigez le code JavaScript destiné à implémenter le nouveau composant de serveur.
Le fichier d’extension (HTM) définit les emplacements du code JavaScript dans la balise
SCRIPT. Ces fichiers JavaScript peuvent résider dans le dossier Shared, dans le même dossier
que le fichier d’extension ou dans le dossier Common du code s’appliquant aux modèles de
serveurs multiples.
Par exemple, le fichier Configuration/Components/Common/WebServices/WebServices.htm
contient la ligne :
<SCRIPT SRC="../../Common/WebServices/WebServicesCommon.js"></SCRIPT>.
Pour plus d’informations sur les fonctions disponibles de l’API des composants, voir Fonctions de
l’API du panneau Composants, page 333.
Conseil : Lorsque vous ajoutez un service, vous pouvez utiliser le panneau Composants pour
consulter les méta-informations existantes et vous en servir directement lorsque vous créez
l’extension. Dreamweaver vous permet de consulter les composants ajoutés et d’afficher les nœuds
dans l’arborescence des composants. Le panneau Composants prend en charge les fonctionnalités
de glisser-déplacer et les raccourcis clavier en mode Code.
Remplissage de la commande d’arborescence
Utilisez la propriété ComponentRec pour compléter une commande d’arborescence du panneau
Composants et faire en sorte qu’elle apparaisse à l’emplacement approprié dans le panneau.
Chaque nœud d’une commande d’arborescence doit comporter les propriétés suivantes :
Nom de la propriété
Description
Obligatoire/
Facultatif
name
Nom de l’élément de nœud dans l’arborescence.
Obligatoire
image
Icône de l’élément de nœud dans l’arborescence. Si
elle n’est pas spécifiée, une icône par défaut est
utilisée.
Facultatif
hasChildren
Réagit à un clic sur le bouton Plus (+) ou Moins () dans
la commande d’arborescence en chargeant les
enfants. Cela vous permet d’utiliser une arborescence
qui n’est pas déjà complétée.
Obligatoire
toolTipText
Texte de l’info-bulle associée à l’élément de nœud
dans l’arborescence.
Facultatif
isCodeViewDraggable
Détermine s’il est possible de glisser-déplacer
l’élément vers le mode Code.
Facultatif
isDesignViewDraggable Détermine s’il est possible de glisser-déplacer
Facultatif
l’élément vers le mode Création.
Par exemple, les enfants du nœud WebServicesClass suivant sont des méthodes Web :
this.name = "TrafficLocatorWebService";
this.image = "Components/Common/WebServices/WebServices.gif";
this.hasChildren = true;
this.toolTipText = "TrafficLocatorWebService";
this.isCodeViewDraggable = true;
// the following allows of enabling/disabling of the button that appears
// above the Component Tree
this.allowDelete = true;
this.isDesignViewDraggable = false;
332
Chapitre 18 : Composants
Fonctions de l’API du panneau Composants
Cette section décrit les fonctions API permettant de remplir le panneau Composants.
getComponentChildren()
Disponibilité
Dreamweaver MX.
Description
Cette fonction renvoie une liste d’objets ComponentRec enfant pour l’objet ComponentRec parent
actif. Pour charger les éléments du niveau racine de l’arborescence, cette fonction doit lire ses
métadonnées dans son stock existant.
Arguments
{parentComponentRec}
• L’argument parentComponentRec est l’objet componentRec du parent. Si cet argument n’est
pas défini, Dreamweaver attend une liste d’objets ComponentRec pour le nœud racine.
Valeurs renvoyées
Tableau d’objets ComponentRec.
Exemple
Voir la fonction getComponentChildren(componentRec) dans le fichier WebServices.js du
dossier Configuration/Components/Common/WebServices.
getContextMenuId()
Disponibilité
Dreamweaver MX.
Description :
Renvoie l’ID du menu contextuel correspondant au type de composant. Chaque type de
composant peut être associé à un menu contextuel. Les menus déroulants du menu contextuel
sont définis dans le fichier ComponentNameMenus.xml. Ils fonctionnent de la même façon que le
fichier menu.xml. Une chaîne de menu peut être statique ou dynamique. Les raccourcis clavier
(ou touches de raccourci) sont pris en charge.
Arguments
Aucun.
Valeurs renvoyées
Chaîne définissant l’ID du menu contextuel.
Fonctions de l’API du panneau Composants
333
Exemple
L’exemple suivant définit les options de menu du panneau Composants pour les services Web
associés au modèle de serveur ASP.NET/C#, et définit les raccourcis clavier correspondant à ce
menu :
function getContextMenuId()
{
return "DWWebServicesContext";
}
où WWebServicesContext est défini dans le fichier Configuration/Components/
ASP.NET_CSharp/WebServices/WebServicesMenus.xml comme suit :
<shortcutlist id="DWWebServicesContext">
<shortcut key="Del" domRequired="false"
enabled="(dw.serverComponentsPalette.getSelectedNode() != null &&
(dw.serverComponentsPalette.getSelectedNode().objectType==’Root’))"
command="clickedDelete();" id="DWShortcuts_ServerComponent_Delete" />
</shortcutlist>
<menubar name="" id="DWWebServicesContext">
<menu name="Server Component Popup" id="DWContext_WebServices">
<menuitem name="Edit Web Service" domRequired="false"
enabled="dw.serverComponentsPalette.getSelectedNode() != null &&
(dw.serverComponentsPalette.getSelectedNode().objectType==’Root’) &&
dw.serverComponentsPalette.getSelectedNode().wsRec != null &&
dw.serverComponentsPalette.getSelectedNode().wsRec.ProxyGeneratorName !=
null" command="editWebService()" id="DWContext_WebServices_EditWebService" /
>
...
</menubar>
getCodeViewDropCode()
Disponibilité
Dreamweaver MX.
Description
Cette fonction obtient, à partir du panneau Composants, le code faisant l’objet d’un glisserdéplacer vers le mode Code ou le code coupé, copié ou collé.
Arguments
componentRec
• L’argument componentRec est un objet.
Valeurs renvoyées
Chaîne contenant le code de ce composant.
334
Chapitre 18 : Composants
Exemple
L’exemple suivant identifie le code pour un service Web commun :
function getCodeViewDropCode(componentRec)
{
var codeToDrop="";
if (componentRec)
{
if (componentRec.objectType == "Class")
{
codeToDrop =¬
dw.getExtDataValue("webservices_constructor","insertText");
codeToDrop =¬
codeToDrop.replace(RegExp("@@Id@@","g"),componentRec.name);
codeToDrop =¬
codeToDrop.replace(RegExp("@@Class@@","g"),componentRec.name);
}
else if (componentRec.objectType == "Method")
{
codeToDrop = componentRec.dropCode;
}
if(componentRec.dropCode)
{
codeToDrop = componentRec.dropCode;
}
else
{
codeToDrop = componentRec.name;
}
}
return codeToDrop;
}
getSetupSteps()
Disponibilité
Dreamweaver MX.
Description
Dreamweaver appelle cette fonction si setupStepsCompleted() renvoie zéro ou un nombre
entier positif. Cette fonction contrôle les instructions de configuration côté serveur, qui peuvent
être implémentées à l’aide d’extensions basées sur une boîte de dialogue modale et sur des
composants de serveur.
Cette fonction renvoie un tableau des chaînes que Dreamweaver affiche soit dans la boîte de
dialogue des étapes de configuration, soit dans le panneau Composants, selon le type d’extension.
Arguments
Aucun.
Fonctions de l’API du panneau Composants
335
Valeurs renvoyées
Tableau de n+1 chaînes, n correspondant au nombre d’étapes, comme décrit dans la liste cidessous :
• Le titre qui apparaît au-dessus de la liste des étapes de configuration.
• Pour chaque étape, le texte des instructions, qui peut comprendre un balisage HTML, dès lors
qu’il est valide au sein d’une balise li.
Vous pouvez inclure des liens hypertexte (balises a) dans la liste des étapes en utilisant la syntaxe
ci-dessous :
<a href=”#” onMouseDown="handler">Blue Underlined Text</a>
La valeur "handler" peut être remplacée par l’une des chaînes suivantes ou toute expression
JavaScript telles que "dw.browseDocument(’http://www.macromedia.com’)" :
•
•
•
•
•
•
ouvre une boîte de dialogue pour définir le site courant.
ouvre une boîte de dialogue pour créer un nouveau site.
"Event:SetDocType" ouvre une boîte de dialogue pour modifier le type de document de
l’utilisateur.
"Event:CreateConnection" ouvre une boîte de dialogue pour créer une nouvelle connexion
à une base de données.
"Event:SetRDSPassword" ouvre une boîte de dialogue pour définir le nom d’utilisateur et le
mot de passe du service RDS (Remote Development Service) (ColdFusion uniquement).
"Event:CreateCFDataSource" ouvre l’administrateur ColdFusion dans un navigateur.
"Event:SetCurSite"
"Event:CreateSite"
Exemple
L’exemple suivant définit quatre étapes pour les composants ColdFusion et fournit un lien
hypertexte à la quatrième étape pour que l’utilisateur puisse entrer son nom d’utilisateur et son
mot de passe RDS :
function getSetupSteps()
{
var doSDK = false;
dom = dw.getDocumentDOM();
if (dom && dom.serverModel)
{
var aServerModelName = dom.serverModel.getDisplayName();
}
else
{
var aServerModelName = site.getServerDisplayNameForSite();
}
if (aServerModelName.length)
{
if(aServerModelName != "ColdFusion")
{
if(needsSDKInstalled != null)
{
doSDK = needsSDKInstalled();
}
}
}
var someSteps = new Array();
336
Chapitre 18 : Composants
someSteps.push(MM.MSG_WebService_InstructionsTitle);
someSteps.push(MM.MSG_Dynamic_InstructionsStep1);
someSteps.push(MM.MSG_Dynamic_InstructionsStep2);
if(doSDK == true)
{
someSteps.push(MM.MSG_WebService_InstructionsStep3);
}
someSteps.push(MM.MSG_WebService_InstructionsStep4);
return someSteps;
}
setupStepsCompleted()
Disponibilité
Dreamweaver MX.
Description
Dreamweaver appelle cette fonction avant que l’onglet Composants ne devienne visible.
Dreamweaver appelle ensuite la fonction getSetupSteps() si la fonction
setupStepsCompleted() renvoie zéro ou un entier positif.
Arguments
Aucun.
Valeurs renvoyées
Entier représentant le nombre d’étapes de configuration déjà effectuées par l’utilisateur, comme
décrit dans la liste suivante :
• La valeur zéro ou un nombre entier positif indique le nombre d’étapes déjà effectuées.
• La valeur -1 indique que toutes les étapes de configuration nécessaires ont été effectuées ; la
liste d’instructions n’est donc pas affichée.
handleDesignViewDrop()
Disponibilité
Dreamweaver MX.
Description
Gère l’opération de déplacement lorsque l’utilisateur fait glisser un tableau ou affiche le panneau
Base de données ou un composant du panneau Composants vers le mode Création.
Fonctions de l’API du panneau Composants
337
Arguments
componentRec
• L’argument componentRec est un objet qui comporte les propriétés suivantes :
■
■
■
■
■
■
La propriété name correspond au nom de l’élément de nœud dans l’arborescence.
La propriété image est une icône optionnelle pour l’élément de nœud dans l’arborescence.
Si cette icône est omise, Dreamweaver MX utilise une icône par défaut.
La propriété hasChildren est une valeur booléenne qui indique si l’élément de nœud dans
l’arborescence peut être développé : si la réponse est true, Dreamweaver MX affiche les
boutons Plus (+) et Moins (-) pour l’élément de nœud dans l’arborescence ; si la réponse est
false, l’élément ne peut pas être développé.
La propriété toolTipText est le texte facultatif de l’info-bulle associée à l’élément de nœud
dans l’arborescence.
La propriété isCodeViewDraggable est une valeur booléenne qui indique s’il est possible de
glisser-déplacer l’élément de nœud dans l’arborescence vers le mode Code.
La propriété isDesignViewDraggable est une valeur booléenne qui indique s’il est possible
de glisser-déplacer l’élément de nœud dans l’arborescence vers le mode Création.
Valeurs renvoyées
Valeur booléenne indiquant si l’opération de déplacement a réussi : true en cas de succès et
false dans le cas contraire.
Exemple
L’exemple suivant détermine si le composant est un tableau ou un mode et renvoie la valeur
bHandled appropriée :
function handleDesignViewDrop(componentRec)
{
var bHandled = false;
if (componentRec)
{
if (componentRec.objectType == "Table")
(componentRec.objectType=="View")))
{
alert("popup Recordset Server Behavior");
bHandled = true;
}
}
return bHandled;
}
338
Chapitre 18 : Composants
handleDoubleClick()
Disponibilité
Dreamweaver MX.
Description
Lorsque l’utilisateur double-clique sur un nœud de l’arborescence, le gestionnaire d’événements
est appelé pour que l’utilisateur puisse apporter des modifications. Cette fonction est facultative.
Elle peut renvoyer la valeur false, ce qui indique que le gestionnaire d’événements n’est pas
défini. Dans ce cas, le fait de double-cliquer déclenche le comportement par défaut, à savoir le
développement ou la réduction des nœuds de l’arborescence.
Arguments
componentRec
• L’argument componentRec est un objet qui comporte les propriétés suivantes :
■
■
■
■
■
■
La propriété name est le nom de l’élément de nœud dans l’arborescence.
La propriété image est une icône facultative pour l’élément de nœud dans l’arborescence.
Si cette icône est omise, Dreamweaver utilise une icône par défaut.
La propriété hasChildren est une valeur booléenne qui indique si l’élément de nœud dans
l’arborescence peut être développé : si la réponse est true, Dreamweaver affiche les boutons
Plus (+) et Moins (-) pour l’élément de nœud dans l’arborescence ; si la réponse est false,
l’élément ne peut pas être développé.
La propriété toolTipText est un texte d’info-bulle facultatif pour l’élément de nœud dans
l’arborescence.
La propriété isCodeViewDraggable est une valeur booléenne qui indique s’il est possible de
glisser-déplacer l’élément de nœud dans l’arborescence vers le mode Code.
La propriété isDesignViewDraggable est une valeur booléenne qui indique s’il est possible
de glisser-déplacer l’élément de nœud dans l’arborescence vers le mode Création.
Valeurs renvoyées
Aucune.
Fonctions de l’API du panneau Composants
339
Exemple
Dans l’exemple suivant, l’extension a une chance de gérer un double-clic sur l’élément de nœud
dans l’arborescence ; si la valeur false est renvoyée, le comportement par défaut est de
développer/réduire les nœuds.
function handleDoubleClick(componentRec)
{
var selectedObj = dw.serverComponentsPalette.getSelectedNode();
if(dwscripts.IS_WIN)
{
if (selectedObj && selectedObj.wsRec &&
selectedObj.wsRec[ProxyGeneratorNamePropName])
{
if (selectedObj.objectType == "Root")
{
editWebService();
return true;
}
else if (selectedObj.objectType == "MissingProxyGen")
{
displayMissingProxyGenMessage(componentRec);
editWebService();
return true;
}
}
}
return false;
}
340
Chapitre 18 : Composants
toolbarControls()
Disponibilité
Dreamweaver MX.
Description
Chaque type de composant renvoie une liste d’objets toolBarButtonRec représentant les icônes
de la barre d’outils, de gauche à droite. Chaque objet toolBarButtonRec contient les propriétés
suivantes :
Nom de
propriété
Description
image
Chemin d’accès au fichier d’image.
disabledImage
(Facultatif) Recherche de chemin d’accès à l’image désactivée correspondant au
bouton de la barre d’outils.
pressedImage
(Facultatif) Recherche de chemin d’accès à l’image correspondant au bouton
enfoncé dans la barre d’outils.
toolTipText
Info-bulle du bouton dans la barre d’outils.
toolStyle
Gauche ou droite.
enabled
Code JavaScript qui renvoie une valeur booléenne (true ou false). Les
activateurs sont appelés si les conditions suivantes sont remplies :
• La fonction dreamweaver.serverComponents.refresh() est appelée.
• La sélection dans l’arborescence change.
• Le modèle de serveur change.
command
Code JavaScript à exécuter. Le gestionnaire de commande peut utiliser la
fonction dreamweaver.serverComponents.refresh() pour actualiser les
composants.
menuId
ID de menu unique du bouton du menu déroulant lorsque l’utilisateur clique sur le
bouton. Lorsque cet ID est défini, il remplace le gestionnaire de commande. En
d’autres termes, le bouton peut être soit associé à une commande, soit à un
bouton ayant un menu déroulant associé, mais pas aux deux à la fois.
Arguments
Aucun.
Valeurs renvoyées
Tableau des boutons de barre d’outils, de gauche à droite.
Fonctions de l’API du panneau Composants
341
Exemple
Dans l’exemple suivant, des propriétés sont attribuées aux boutons de la barre d’outils :
function toolbarControls()
{
var toolBarBtnArray = new Array();
dom = dw.getDocumentDOM();
var plusButton = new ToolbarControlRec();
var aServerModelName = null;
if (dom && dom.serverModel)
{
aServerModelName = dom.serverModel.getDisplayName();
}
else
{
//look in the site for potential server model
aServerModelName = site.getServerDisplayNameForSite();
}
if (aServerModelName.length)
{
if(aServerModelName == "ColdFusion")
{
plusButton.image= PLUS_BUTTON_UP;
plusButton.pressedImage= PLUS_BUTTON_DOWN;
plusButton.disabledImage= PLUS_BUTTON_UP;
plusButton.toolStyle= "left";
plusButton.toolTipText= MM.MSG_WebServicesAddToolTipText;
plusButton.enabled= "dwscripts.IS_WIN";
plusButton.command= "invokeWebService()";
}
else
{
plusButton.image= PLUSDROPBUTTONUP;
plusButton.pressedImage= PLUSDROPBUTTONDOWN;
plusButton.disabledImage= PLUSDROPBUTTONUP;
plusButton.toolStyle= "left";
plusButton.toolTipText= MM.MSG_WebServicesAddToolTipText;
plusButton.enabled= "dwscripts.IS_WIN";
plusButton.menuId = "DWWebServicesChoosersContext";
}
toolBarBtnArray.push(plusButton);
var minusButton = new ToolbarControlRec();
minusButton.image= MINUSBUTTONUP;
minusButton.pressedImage= MINUSBUTTONDOWN;
minusButton.disabledImage= MINUSBUTTONDISABLED;
minusButton.toolStyle= "left";
minusButton.toolTipText= MM.MSG_WebServicesDeleteToolTipText;
minusButton.command = "clickedDelete()";
minusButton.enabled = "(dw.serverComponentsPalette.getSelectedNode() !=
null && dw.serverComponentsPalette.getSelectedNode() &&
((dw.serverComponentsPalette.getSelectedNode().objectType==’Root’) ||
(dw.serverComponentsPalette.getSelectedNode().objectType == ’Error’) ||
(dw.serverComponentsPalette.getSelectedNode().objectType ==
’MissingProxyGen’)))";
toolBarBtnArray.push(minusButton);
342
Chapitre 18 : Composants
if(aServerModelName != null && aServerModelName.indexOf(".NET") >= 0)
{
var deployWServiceButton = new ToolbarControlRec();
deployWServiceButton.image= DEPLOYSUPPORTBUTTONUP;
deployWServiceButton.pressedImage= DEPLOYSUPPORTBUTTONDOWN;
deployWServiceButton.disabledImage= DEPLOYSUPPORTBUTTONUP;
deployWServiceButton.toolStyle= "right";
deployWServiceButton.toolTipText= MM.MSG_WebServicesDeployToolTipText;
deployWServiceButton.command =
"site.showTestingServerBinDeployDialog()";
deployWServiceButton.enabled = true;
toolBarBtnArray.push(deployWServiceButton);
}
//add the rebuild proxy button for windows only.
//bug 45552:
if(navigator.platform.charAt(0) !="M")
{
var proxyButton = new ToolbarControlRec();
proxyButton.image= PROXYBUTTONUP;
proxyButton.pressedImage= PROXYBUTTONDOWN;
proxyButton.disabledImage= PROXYBUTTONDISABLED;
proxyButton.toolStyle= "right";
proxyButton.toolTipText= MM.MSG_WebServicesRegenToolTipText;
proxyButton.command = "reGenerateProxy()";
proxyButton.enabled = "enableRegenerateProxyButton()";
toolBarBtnArray.push(proxyButton);
}
}
return toolBarBtnArray;
}
Fonctions de l’API du panneau Composants
343
344
Chapitre 18 : Composants
CHAPITRE 19
Modèles de serveur
Les modèles de serveur sont les technologies qui permettent d’exécuter des scripts sur un serveur.
Lorsqu’ils définissent un nouveau site, les utilisateurs peuvent indiquer le modèle de serveur qu’ils
souhaitent utiliser au niveau du site et au niveau du document. Ce modèle de serveur gère tous les
éléments dynamiques que l’utilisateur ajoute au document.
Les fichiers de configuration des modèles de serveur sont stockés dans le dossier Configuration/
ServerModels. Chaque modèle de serveur dispose, au sein de ce dossier, d’un fichier HTML
particulier qui implémente l’ensemble des fonctions requises.
Fonctionnement de la personnalisation des modèles de serveur
Vous pouvez personnaliser certaines des fonctionnalités d’un modèle de serveur en utilisant les
fonctions disponibles dans l’API des modèles de serveur.
Lorsqu’ils démarrent Dreamweaver MX 2004 pour la première fois, les nouveaux utilisateurs sont
invités à indiquer les modèles de serveur qu’ils souhaitent utiliser. Pour les cas où l’utilisateur
n’indique aucun modèle de serveur, vous pouvez créer une boîte de dialogue dynamique l’invitant
à suivre les étapes nécessaires. Cette boîte de dialogue apparaîtra lorsque l’utilisateur essaiera
d’insérer un objet de serveur. Pour plus d’informations sur la création de cette boîte de dialogue,
voir les fonctions getSetupSteps() et setupStepsCompleted().
Vous pouvez décider de créer un modèle de serveur spécialisé. Macromedia vous conseille de créer
un modèle de serveur entièrement nouveau plutôt que de modifier l’un de ceux fournis avec
Dreamweaver. Pour plus d’informations sur la création de types de documents pris en charge par
un modèle de serveur, voir Types de documents extensibles dans Dreamweaver, page 43.
Lorsque vous créez un modèle de serveur, vous devez implémenter la fonction
dans votre fichier de modèle de serveur. Cette fonction indique à
Dreamweaver le niveau de priorité qu’il doit attribuer au modèle de serveur en matière de gestion
des extensions de fichier lorsque plusieurs modèles de serveur revendiquent une extension précise.
canRecognizeDocument()
345
Fonctions de l’API des modèles de serveur
Cette section décrit les fonctions qui permettent de configurer les modèles de serveur pour
Dreamweaver.
canRecognizeDocument()
Disponibilité
Dreamweaver MX.
Description
Lors de l’ouverture d’un document (et lorsque plusieurs modèles de serveur revendiquent une
extension de fichier), Dreamweaver MX appelle cette fonction pour chacun des modèles de
serveur associés à l’extension afin de voir si l’une des fonctions peut établir que le document lui
appartient. Si plusieurs modèles de serveur revendiquent l’extension de fichier, Dreamweaver
accorde la priorité à celui renvoyant le nombre le plus élevé.
Remarque : Dans la mesure où tous les modèles de serveur de Dreamweaver renvoient la valeur 1,
les modèles de serveur tiers peuvent avoir la priorité au niveau d’une extension de fichier.
Arguments
dom
• L’argument dom correspond à l’objet de document Macromedia, renvoyé par la fonction
dreamweaver.getDocumentDOM().
Valeurs renvoyées
Dreamweaver attend un nombre entier indiquant la priorité que vous accordez au modèle de
serveur pour l’extension de fichier. Cette fonction doit renvoyer la valeur -1 si le modèle de
serveur ne revendique pas l’extension de fichier ; dans les autres cas de figure, elle doit renvoyer
une valeur supérieure à zéro.
Exemple
Dans l’exemple suivant, si l’utilisateur ouvre un document JavaScript pour le modèle de serveur
en cours, le code renvoie la valeur 2. Cette valeur permet au modèle de serveur courant d’être
prioritaire sur le modèle de serveur par défaut de Dreamweaver.
var retVal = -1;
var langRE = /@\s*language\s*=\s*(\"|\’)?javascript(\"|\’)?/i;
// Search for the string language="javascript"
var oHTML = dom.documentElement.outerHTML;
if (oHTML.search(langRE) > -1)
retVal = 2;
return retVal;
getFileExtensions()
Disponibilité
Dreamweaver UltraDev 1, déconseillée dans Dreamweaver MX
346
Chapitre 19 : Modèles de serveur
Description
Renvoie les extensions de fichier compatibles avec un modèle de serveur. Par exemple, le modèle
de serveur ASP prend en charge les extensions de fichier .asp et .htm. Cette fonction renvoie un
tableau de chaînes ; Dreamweaver utilise ces chaînes pour compléter la liste Extension de page par
défaut figurant dans la catégorie Serveur d’application de la boîte de dialogue Définition du site.
Remarque : La liste Extension de page par défaut n’existe que dans Dreamweaver version 4 ou
antérieure. Dans Dreamweaver MX et les versions ultérieures, la boîte de dialogue Définition du site
ne répertorie pas les paramètres relatifs aux extensions de fichier. Au lieu de cela, Dreamweaver lit le
fichier Extensions.txt et analyse l’élément documenttype dans le fichier mmDocumentTypes.xml. Pour
plus d’informations sur ces deux fichiers et l’élément documenttype, voir Types de documents
extensibles dans Dreamweaver, page 43.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un tableau de chaînes représentant les extensions de fichier autorisées.
getLanguageSignatures()
Disponibilité
Dreamweaver MX.
Description
Cette fonction renvoie un objet qui décrit la méthode et les signatures de tableau utilisées par le
langage de script. La fonction getLanguageSignatures() permet d’associer des mappages de
signatures génériques à des mappages spécifiques au langage pour les éléments suivants :
•
•
•
•
•
•
La fonction
Les constructeurs
Le code de dépôt (valeurs renvoyées)
Les tableaux
Les exceptions
Les mappages des types de données pour les types de données primitifs
La fonction getLanguageSignatures() renvoie une table de mappage des déclarations de
signature. Les développeurs d’extensions peuvent se servir de cette table de mappage pour
produire des blocs de code spécifiques au langage que Dreamweaver place dans la page (en se
basant sur le modèle de serveur adapté à la page) lorsqu’un utilisateur effectue un glisser-déplacer
sur une méthode relative à des services Web, par exemple.
Pour obtenir des exemples de rédaction de cette fonction, voir les fichiers
d’implémentation HTML des modèles de serveur JSP et ASP.Net. Les fichiers d’implémentation
des modèles de serveur se trouvent dans le dossier Configuration/ServerModels.
Arguments
Aucun.
Fonctions de l’API des modèles de serveur
347
Valeurs renvoyées
Dreamweaver attend un objet définissant les signatures du langage de script. Cet objet doit
mapper les signatures génériques à celles spécifiques au langage.
getServerExtension()
Disponibilité
Dreamweaver UltraDev 4, déconseillée dans Dreamweaver MX.
Description
Cette fonction renvoie l’extension par défaut des fichiers exploitant le modèle de serveur en cours.
L’objet serverModel est défini sur le modèle de serveur du site sélectionné si aucun document
utilisateur n’est sélectionné.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une chaîne représentant les extensions de fichier prises en charge.
getServerInfo()
Disponibilité
Dreamweaver MX.
Description
Cette fonction renvoie un objet JavaScript accessible depuis le code JavaScript. par appel de la
fonction dom.serverModel.getServerInfo(). Par ailleurs, serverName, serverLanguage et
serverVersion sont des propriétés spécifiques, également accessibles au moyen des fonctions
JavaScript suivantes :
dom.serverModel.getServerName()
dom.serverModel.getServerLanguage()
dom.serverModel.getServerVersion()
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un objet contenant les propriétés du modèle de serveur.
Exemple
var obj = new Object();
obj.serverName = "ASP";
obj.serverLanguage = "JavaScript";
obj.serverVersion = "2.0";
...
return obj;
348
Chapitre 19 : Modèles de serveur
getServerLanguages()
Disponibilité
Dreamweaver UltraDev 1, déconseillée dans Dreamweaver MX.
Description
Cette fonction renvoie les langages de script pris en charge d’un modèle de serveur avec un
tableau de chaînes. Dreamweaver utilise ces chaînes pour compléter la liste Langage de script par
défaut figurant dans la catégorie Serveur d’application de la boîte de dialogue Définition du site.
Remarque : La liste Langage de script par défaut n’existe que dans Dreamweaver version 4 ou
antérieure. Dans Dreamweaver MX et les versions ultérieures, la boîte de dialogue Définition du site
ne répertorie pas les langages de script pris en charge et la fonction getServerLanguages() n’est pas
utilisée. La raison pour laquelle la version MX de Dreamweaver n’utilise pas cette fonction est que
chaque modèle de serveur ne dispose dans cette version du programme que d’un seul langage de
serveur.
Dans les versions antérieures de Dreamweaver, un modèle de serveur pouvait prendre en charge
plusieurs langages de script ; le modèle de serveur ASP, par exemple, prend en charge JavaScript et
VBScript.
Si vous souhaitez qu’un fichier du dossier ServerFormats s’applique uniquement à un langage de
script spécifique, ajoutez l’instruction suivante de manière à ce qu’elle figure sur la première ligne
du fichier HTML :
<!-- SCRIPTING-LANGUAGE=XXX -->
Dans cet exemple, XXX représente le langage de script. Cette instruction génère l’apparition du
comportement de serveur dans le menu Plus (+) du panneau Comportements de serveur
uniquement lorsque le langage de script sélectionné est XXX.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un tableau de chaînes représentant les langages de script pris en charge.
getServerModelExtDataNameUD4()
Disponibilité
Dreamweaver MX.
Description
Cette fonction renvoie le nom de l’implémentation du modèle de serveur que Dreamweaver doit
utiliser lorsqu’il accède à des fichiers de données d’extension UltraDev 4 se trouvant dans le
dossier Configurations/ExtensionData.
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une chaîne, telle que "ASP/JavaScript".
Fonctions de l’API des modèles de serveur
349
getServerModelDelimiters()
Disponibilité
Dreamweaver MX.
Description
Cette fonction renvoie les délimiteurs de scripts que le serveur d’application utilise, et elle indique
si chaque délimiteur peut participer à la fusion des blocs de code. Vous pouvez accéder à la valeur
renvoyée depuis le code JavaScript, en appelant la fonction
dom.serverModel.getDelimiters().
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un tableau d’objets dans lequel chaque objet comporte les trois propriétés
suivantes :
• La propriété startPattern est une expression régulière qui correspond au délimiteur
•
•
d’ouverture du script (tel que "<%").
La propriété endPattern est une expression régulière qui correspond au délimiteur de
fermeture du script (tel que "%>").
La propriété participateInMerge est une valeur booléenne qui indique si le contenu entre les
délimiteurs utilisés doit (true) ou non (false) prendre part à la fusion de blocs.
getServerModelDisplayName()
Disponibilité
Dreamweaver MX.
Description
Cette fonction renvoie le nom qui doit s’afficher dans l’interface utilisateur pour le modèle de
serveur. Vous pouvez accéder à cette valeur depuis le code JavaScript, en appelant la fonction
dom.serverModel.getDisplayName().
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une chaîne, telle que "ASP JavaScript".
getServerModelFolderName()
Disponibilité
Dreamweaver MX.
350
Chapitre 19 : Modèles de serveur
Description
Cette fonction renvoie le nom du dossier à utiliser pour le modèle de serveur dans le dossier
Configuration. Vous pouvez accéder à cette valeur depuis le code JavaScript, en appelant la
fonction dom.serverModel.getFolderName().
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend une chaîne, telle que "ASP_JS".
getServerSupportsCharset()
Disponibilité
Dreamweaver MX.
Description
Cette fonction renvoie une valeur true si le serveur en cours prend en charge le jeu de caractères
spécifié. Dans JavaScript, vous pouvez déterminer si le modèle de serveur prend en charge un jeu
de caractères donné en appelant la fonction dom.serverModel.getServerSupportsCharset().
Arguments
metaCharSetString
• L’argument metaCharSetString est une chaîne qui stocke la valeur de l’attribut « charset= »
des documents.
Valeurs renvoyées
Dreamweaver attend une valeur booléenne.
getVersionArray()
Disponibilité
Dreamweaver UltraDev 1, déconseillée dans Dreamweaver MX.
Description
Cette fonction extrait le mappage de technologies de serveur et de numéros de version. Cette
fonction est appelée par dom.serverModel.getServerVersion().
Arguments
Aucun.
Valeurs renvoyées
Dreamweaver attend un tableau d’objets de version, chacun étant doté d’un nom et d’une valeur,
comme indiqué dans les exemples suivants :
• ASP version 2.0
• ADODB version 2.1
Fonctions de l’API des modèles de serveur
351
352
Chapitre 19 : Modèles de serveur
CHAPITRE 20
Traducteurs de données
Les traducteurs de données permettent de convertir un balisage spécialisé, basé sur des SSI
(Server-Side Includes, inclusions à partir du serveur), des instructions JavaScript conditionnelles
ou d’autres codes (PHP3, JSP, CFML ou ASP, par exemple), sous forme de code pouvant être lu et
affiché par Dreamweaver MX 2004. Dans Dreamweaver, vous pouvez traduire des attributs au
sein de balises ainsi que des balises entières ou des blocs de code. Tous les traducteurs de données
(blocs/balises ou attributs) sont des fichiers HTML.
Les balises ou les blocs de code convertis doivent être délimités dans des régions verrouillées pour
que les marqueurs d’origine soient préservés. Les attributs traduits ne nécessitent pas de verrou, ce
qui facilite l’inspection des balises qui les contiennent.
La traduction de données (en particulier pour les balises entières ou les blocs de code) peut
impliquer des opérations complexes qui ne peuvent pas être réalisées avec JavaScript ou qui
peuvent être réalisées plus efficacement en utilisant le langage C. Si vous connaissez bien le
langage C ou C++, lisez également Extensions C, page 373.
Fonctionnement des traducteurs de données
Dreamweaver traite tous les fichiers de traducteur de la même façon, qu’ils convertissent des
balises entières ou uniquement des attributs. Au démarrage, Dreamweaver lit tous les fichiers du
dossier Configuration/Translators et appelle la fonction getTranslatorInfo() pour obtenir des
informations sur le traducteur. Dreamweaver ignore tous les fichiers dans lesquels la fonction
getTranslatorInfo() est absente ou qui contiennent une erreur empêchant de la définir.
Remarque : Pour éviter que des erreurs JavaScript n’affectent le démarrage, les erreurs détectées
dans un fichier de traducteur ne sont signalées qu’après le chargement de tous les traducteurs. Pour
plus d’informations sur les traducteurs de débogage, voir Recherche de bogues dans le traducteur,
page 370.
Dreamweaver appelle également la fonction translateMarkup() dans tous les fichiers de
traducteur appropriés (comme indiqué dans les préférences de traduction) chaque fois que
l’utilisateur ajoute un nouveau contenu ou modifie un contenu existant qui requiert une
traduction. Dreamweaver appelle la fonction translateMarkup() lorsque l’utilisateur effectue
l’une des opérations suivantes :
• Ouverture d’un fichier dans Dreamweaver
• Retour au mode Création après avoir effectué des modifications dans le panneau HTML ou le
mode Code
353
•
•
•
•
•
•
•
•
•
•
•
Modification des propriétés d’un objet dans le document actif
Insertion d’un objet (à l’aide du panneau Objets ou du menu Insertion)
Actualisation du document actif après sa modification dans une autre application
Application d’un modèle au document
Collage ou déplacement d’un contenu vers ou à l’intérieur de la fenêtre de document
Enregistrement des modifications dans un fichier dépendant
Appel d’une commande, d’un comportement, d’un comportement de serveur, d’un inspecteur
de propriétés ou de toute autre extension qui définit la propriété innerHTML ou outerHTML
d’un objet de balise ou la propriété data d’un objet de commentaire
Sélection de Fichier > Convertir > Format compatible avec les navigateurs 3.0
Sélection de Modifier > Convertir > Tableaux en calques
Sélection de Modifier > Convertir > Calques en tableaux
Modification d’une balise ou d’un attribut dans Quick Tag Editor, suivie de l’activation de la
touche de tabulation ou Entrée
API du traducteur de données
Cette section décrit les fonctions utilisées pour définir les traducteurs de Dreamweaver.
getTranslatorInfo()
Description
Cette fonction affiche des informations sur le traducteur et sur les fichiers qu’il peut affecter.
Arguments
Aucun.
Valeurs renvoyées
Tableau de chaînes. Les éléments du tableau doivent apparaître dans l’ordre suivant :
1 La chaîne translatorClass identifie le traducteur de façon unique. Cette chaîne doit
2
3
4
5
6
354
commencer par une lettre et contenir uniquement des caractères alphanumériques, des traits
d’union (-) et des caractères de soulignement (_).
La chaîne title décrit le traducteur en 40 caractères maximum.
La chaîne nExtensions indique le nombre d’extensions de fichier qui suivent. Si nExtensions
est égal à zéro, le traducteur peut s’exécuter sur n’importe quel fichier. Si nExtensions est égal
à zéro, nRegExps est l’élément suivant dans le tableau.
La chaîne extension indique une extension de fichier ("htm" ou "SHTML", par exemple)
compatible avec ce traducteur. Cette chaîne ne tient pas compte des majuscules et des
minuscules et ne doit pas commencer par un point. Le tableau doit contenir le même nombre
d’éléments extension que celui spécifié dans nExtensions.
La chaîne nRegExps indique le nombre d’expressions régulières qui suivent. Si nRegExps est
égal à zéro, runDefault est l’élément suivant dans le tableau.
La chaîne regExps indique une expression régulière que vous pouvez vérifier. Le tableau doit
contenir le même nombre d’éléments regExps que celui spécifié dans nRegExps, et au moins
l’un des éléments regExps doit correspondre à une partie du code source du document pour
que le traducteur puisse traiter un fichier.
Chapitre 20 : Traducteurs de données
7 La chaîne runDefault indique le moment d’exécution du traducteur. La liste suivante indique
les valeurs de chaîne possibles :
Chaîne
Définition
"allFiles"
Le traducteur s’exécute systématiquement.
"noFiles"
Le traducteur ne s’exécute jamais.
"byExtension"
Le traducteur s’exécute lorsque les fichiers sont dotés de l’une des
extensions spécifiées.
"byExpression"
Le traducteur s’exécute lorsque le document contient une
correspondance pour l’une des expressions régulières spécifiées.
"bystring"
Le traducteur s’exécute lorsque le document contient une
correspondance pour l’une des chaînes spécifiées.
Remarque : Si vous définissez runDefault sur "byExtension" sans spécifier d’extension (voir
step 4), l’effet produit est le même que celui obtenu avec la valeur "allFiles". Si vous définissez
runDefault sur "byExpression" sans spécifier d’expressions (voir step 6), l’effet produit est le
même que celui obtenu avec la valeur "noFiles".
8 La chaîne priority indique la priorité par défaut pour l’exécution de ce traducteur. Cette
priorité est un nombre compris entre 0 et 100. Si vous ne définissez pas de priorité, sa valeur par
défaut est 100. La priorité maximale est 0 et la priorité minimale 100. Lorsque plusieurs
traducteurs s’appliquent à un document, ce paramètre détermine l’ordre dans lequel ils sont
appliqués. La priorité la plus haute est appliquée en premier. Lorsque plusieurs traducteurs ont
la même priorité, ils sont appliqués dans l’ordre alphabétique par translatorClass.
Exemple
Dans l’exemple suivant, la fonction getTranslatorInfo() fournit des informations relatives à
un traducteur pour SSI :
function getTranslatorInfo(){
var transArray = new Array(11);
transArray[0] = "SSI";
transArray[1] = "Server-Side Includes";
transArray[2] = "4";
transArray[3] = "htm";
transArray[4] = "stm";
transArray[5] = "html";
transArray[6] = "shtml";
transArray[7] = "2";
transArray[8] = "<!--#include file";
transArray[9] = "<!--#include virtual";
transArray[10] = "byExtension";
transArray[11] = "50";
return transArray;
}
API du traducteur de données
355
translateMarkup()
Description
Cette fonction effectue la traduction.
Arguments
docName, siteRoot, docContent
• L’argument docName est une chaîne qui contient l’URL de type file:// du document à traduire.
• L’argument siteRoot est une chaîne qui contient l’URL de type file:// de la racine du site où
•
se trouve le document à traduire. Si le document se trouve en dehors d’un site, cette chaîne
peut être vide.
L’argument docContent est une chaîne qui indique le contenu du document.
Valeurs renvoyées
Soit une chaîne qui contient le document traduit, soit une chaîne vide si rien n’est traduit.
Exemple
Dans l’exemple suivant, la fonction translateMarkup() appelle la fonction C translateASP()
contenue dans une DLL (Windows) ou dans une bibliothèque de code (Macintosh) appelée
ASPTrans :
function translateMarkup(docName, siteRoot, docContent){
var translatedString = "";
if (docContent.length > 0){
translatedString = ASPTrans.translateASP(docName, siteRoot, ¬
docContent);
}
return translatedString;
}
Pour obtenir un exemple entièrement JavaScript, voir Exemple de traducteur d’attributs simple,
page 359 ou Exemple de traducteur de blocs/balises simple, page 364.
liveDataTranslateMarkup()
Disponibilité
Dreamweaver UltraDev 1.
Description
Cette fonction traduit les documents lorsque l’utilisateur utilise la fenêtre Live Data. Lorsque
l’utilisateur sélectionne Affichage > Live Data ou clique sur le bouton Actualiser, Dreamweaver
appelle la fonction liveDataTranslateMarkup() au lieu de la fonction translateMarkup().
356
Chapitre 20 : Traducteurs de données
Arguments
docName, siteRoot, docContent
• L’argument docName est une chaîne qui contient l’URL de type file:// du document à traduire.
• L’argument siteRoot est une chaîne qui contient l’URL de type file:// de la racine du site où
•
se trouve le document à traduire. Si le document se trouve en dehors d’un site, cette chaîne
peut être vide.
L’argument docContent est une chaîne qui indique le contenu du document.
Valeurs renvoyées
Soit une chaîne qui contient le document traduit, soit une chaîne vide si rien n’est traduit.
Exemple
Dans l’exemple suivant, la fonction liveDataTranslateMarkup() appelle la fonction C
translateASP() contenue dans une DLL (Windows) ou dans une bibliothèque de code
(Macintosh) appelée ASPTrans :
function liveDataTranslateMarkup(docName, siteRoot, docContent){
var translatedString = "";
if (docContent.length > 0){
translatedString = ASPTrans.translateASP(docName, siteRoot, docContent);
}
return translatedString;
}
Choix du type de traducteur
Tous les traducteurs doivent contenir les fonctions getTranslatorInfo() et
translateMarkup() et doivent résider dans le dossier Configuration/Translators. Ils se
distinguent toutefois par le type de code qu’ils insèrent dans le document de l’utilisateur et par la
façon dont ce code doit être contrôlé, comme indiqué dans la liste suivante :
• Pour traduire de petites parties de balises serveur qui déterminent des valeurs d’attribut ou
•
ajoutent conditionnellement des attributs à une balise HTML standard, vous devez écrire un
traducteur d’attributs. Les balises HTML standard contenant des attributs traduits peuvent
être contrôlées à l’aide des inspecteurs de propriétés intégrés à Dreamweaver. Il n’est pas
nécessaire de rédiger un inspecteur de propriétés personnalisé (voir Ajout d’un attribut traduit à
une balise, page 358).
Pour traduire une balise entière (une SSI, par exemple) ou un bloc de code (JavaScript,
ColdFusion, PHP ou tout autre script), vous devez écrire un traducteur de blocs/balises. Le
code généré par un traducteur de blocs/balises ne peut pas être contrôlé à l’aide des inspecteurs
de propriétés intégrés à Dreamweaver. Vous devez rédiger un inspecteur personnalisé pour le
contenu traduit si vous souhaitez que les utilisateurs puissent modifier les propriétés du code
d’origine (voir Verrouillage des balises ou des blocs de code traduits, page 363).
Choix du type de traducteur
357
Ajout d’un attribut traduit à une balise
La traduction des attributs est liée à la capacité de l’analyseur Dreamweaver à ignorer le balisage de
serveur. Par défaut, Dreamweaver ignore déjà les types de balisage de serveur les plus courants (tels
que ASP, CFML et PHP) ; si vous utilisez un balisage de serveur dont les marqueurs de début et
de fin sont différents, vous devez modifier la base de données de balises tierces pour assurer le bon
fonctionnement de votre traducteur. Pour plus d’informations sur la façon de modifier la base de
données de balises propriétaires, voir Personnalisation de Dreamweaver dans Utilisation de
Dreamweaver.
Lorsque Dreamweaver gère la conservation du balisage de serveur d’origine, le traducteur génère
une valeur d’attribut valide qui s’affiche dans la fenêtre de document. Si vous utilisez un balisage
de serveur uniquement pour des attributs qui n’ont pas d’effet visible pour l’utilisateur, vous
n’avez pas besoin de traducteur.
Le traducteur crée une valeur d’attribut ayant un effet visible dans la fenêtre de document en
ajoutant un attribut spécial, mmTranslatedValue, à la balise qui contient le balisage de serveur.
L’attribut mmTranslatedValue et sa valeur ne sont ni visibles dans le panneau HTML ou en
mode Code, ni enregistrés avec le document.
L’attribut mmTranslatedValue doit être unique à l’intérieur de la balise. S’il est probable que le
traducteur devra traduire plusieurs attributs dans une même balise, ajoutez-lui une routine qui
ajoute des numéros à l’attribut mmTranslatedValue (par exemple, mmTranslatedValue1,
mmTranslatedValue2, etc.).
La valeur de l’attribut mmTranslatedValue doit être une chaîne codée en URL contenant au
moins une paire attribut/valeur valide. Cela signifie que
mmTranslatedValue="src=%22open.jpg%22" est une traduction valide pour src="<? if
(dayType == weekday) then open.jpg else closed.jpg" ?> et <? if (dayType ==
weekday) then src="open.jpg" else src="closed.jpg" ?>. La chaîne
mmTranslatedValue="%22open.jpg%22" n’est valide pour aucun de ces deux exemples parce
qu’elle contient uniquement la valeur, et non l’attribut.
Traduction de plusieurs attributs à la fois
L’attribut mmTranslatedValue peut contenir plusieurs paires attribut/valeur valides. Considérez
ce qui suit comme du code non traduit :
<img <? if (dayType==weekday) then src="open.jpg" width="320" ¬
height="100" else
src="closed.jpg" width="100" height="320" ?> alt="We’re open 24 ¬
hours a day from
12:01am Monday until 11:59pm Friday">
L’exemple suivant indique comment se présente le balisage après traduction :
<img <? if (dayType==weekday) then src="open.jpg" width="320" ¬
height="100" else
src="closed.jpg" width="100" height="320" ?>
mmTranslatedValue="src=%22open.jpg%22 width=%22320%22 ¬
height=%22100%22"
alt="We’re open 24 hours a day from 12:01am Monday until 11:59pm ¬
Friday">
358
Chapitre 20 : Traducteurs de données
Les espaces entre les paires attribut/valeur dans l’attribut mmTranslatedValue ne sont pas codés.
Etant donné que l’application Dreamweaver recherche ces espaces lorsqu’elle essaie de restituer la
valeur traduite, chaque paire attribut/valeur de l’attribut mmTranslatedValue doit être codée
séparément, puis toutes les paires doivent être de nouveau regroupées pour former l’ensemble de
l’attribut mmTranslatedValue. Voir l’exemple de ce processus présenté dans Exemple de
traducteur d’attributs simple à la prochaine section.
Exemple de traducteur d’attributs simple
Pour mieux comprendre le principe de la traduction d’attributs, il peut être utile d’examiner un
exemple. Le traducteur suivant est un balisage « Pound Conditional » (Poco), une syntaxe quelque
peu similaire à ASP ou PHP. La première étape pour assurer le bon fonctionnement de ce
traducteur consiste à créer une balise tagspec pour le balisage Poco afin d’éviter que
Dreamweaver n’analyse les instructions Poco non traduites.
L’exemple suivant illustre la balise tagspec du balisage Poco :
<tagspec tag_name="poco" start_string="<#" end_string="#>"
detect_in_attribute="true" icon="poco.gif" icon_width="17"
icon_height="15"></tagspec>
Le fichier poco.xml qui contient la balise tagspec est stocké dans le dossier Configuration/
ThirdPartyTags, de même que l’icône des balises Poco.
<html>
<head>
<title>Conditional Translator</title>
<meta http-equiv="Content-Type" content="text/html; charset=" />
<script language="JavaScript">
/*************************************************************
* This translator handles the following statement syntaxes: * *
* <* # if (condition) then foo else bar #>
*
* <* # if (condition) then att="foo" else att="bar" #>
*
* <* # if (condition) then att1="foo" att2="jinkies"
*
* att3="jeepers" else att1="bar" att2="zoinks" #>
*
*
*
* It does not handle statements with no else clause.
*
*************************************************************/
var count = 1;
function translateMarkup(docNameStr, siteRootStr, inStr){
var count = 1;
// Counter to ensure unique mmTranslatedValues
var outStr = inStr;
// String that will be manipulated
var spacer = "";
// String to manage space between encoded attributes
var start = inStr.indexOf(’<# if’); // 1st instance of Pound Conditional code
// Declared but not initalized. //
var attAndValue;
Ajout d’un attribut traduit à une balise
359
// Boolean indicating whether the attribute is part of
// the conditional statement
var trueStart;
// The beginning of the true case
var falseStart;
// The beginning of the false case
var trueValue;
// The HTML that would render in the true case
var attName;
// The name of the attribute that is being’
// set conditionally.
var equalSign;
// The position of the equal sign just to the
// left of the <#, if there is one
var transAtt;
// The entire translated attribute
var transValue;
// The value that must be URL-encoded
var back3FromStart;
// Three characters back from the start position
// (used to find equal sign to the left of <#
var tokens;
// An array of all the attributes set in the true case
var end;
// The end of the current conditional statement.
// As long as there’s still a <# conditional that hasn’t been
// translated
while (start != -1){
back3FromStart = start-3;
end = outStr.indexOf(’ #>’,start);
equalSign = outStr.indexOf(’="<# if’,back3FromStart);
attAndValue = (equalSign != -1)?false:true;
trueStart = outStr.indexOf(’then’, start);
falseStart = outStr.indexOf(’ else’, start);
trueValue = outStr.substring(trueStart+5, falseStart);
tokens = dreamweaver.getTokens(trueValue,’ ’);
360
Chapitre 20 : Traducteurs de données
// If attAndValue is false, find out what attribute you’re
// translating by backing up from the equal sign to the
// first space. The substring between the space and the
// equal sign is the attribute.
if (!attAndValue){
for (var i=equalSign; i > 0; i--){
if (outStr.charAt(i) == " "){
attName = outStr.substring(i+1,equalSign);
break;
}
}
transValue = attName + ’="’ + trueValue + ’"’;
transAtt = ’ mmTranslatedValue’ + count + ’="’ + ¬
escape(transValue) + ’"’;
outStr = outStr.substring(0,end+4) + transAtt + ¬
outStr.substring(end+4);
// If attAndValue is true, and tokens is greater than
// 1, then trueValue is a series of attribute/value
// pairs, not just one. In that case, each attribute/value
// pair must be encoded separately and then added back
// together to make the translated value.
}else if (tokens.length > 1){
transAtt = ’ mmTranslatedValue’ + count + ’="’
for (var j=0; j < tokens.length; j++){
tokens[j] = escape(tokens[j]);
if (j>0){
spacer=" ";
}
transAtt += spacer + tokens[j];
}
transAtt += ’"’;
outStr = outStr.substring(0,end+3) + transAtt + ¬
outStr.substring(end+3)
// If attAndValue is true and tokens is not greater
// than 1, then trueValue is a single attribute/value pair.
// This is the simplest case, where all that is necessary is
// to encode trueValue.
}else{
transValue = trueValue;
transAtt = ’ mmTranslatedValue’ + count + ’="’ + ¬
escape(transValue) + ’"’;
outStr = outStr.substring(0,end+3) + transAtt + ¬
outStr.substring(end+3);
}
// Increment the counter so that the next instance
// of mmTranslatedValue will have a unique name, and
// then find the next<# conditional in the code.
count++;
start = outStr.indexOf(’<# if’,end);
}
// Return the translated string.
return outStr
}
function getTranslatorInfo(){
returnArray = new Array(7);
Ajout d’un attribut traduit à une balise
361
returnArray[0]
returnArray[1]
returnArray[2]
returnArray[3]
returnArray[4]
returnArray[5]
returnArray[6]
returnArray[7]
returnArray[8]
=
=
=
=
=
=
=
=
=
"Pound_Conditional";
// The translatorClass
"Pound Conditional Translator"; // The title
"2";
// The number of extensions
"html";
// The first extension
"htm";
// The second extension
"1";
// The number of expressions
"<#";
// The first expression
"byString";
//
"50";
//
return returnArray
}
</script>
</head>
<body>
</body>
</html>
Contrôle des attributs traduits
Lorsque le balisage de serveur spécifie un seul attribut et que cet attribut est représenté dans un
inspecteur de propriétés, Dreamweaver affiche le balisage dans l’inspecteur de propriétés, comme
illustré dans la figure suivante :
Le balisage s’affiche, qu’il soit associé ou non à un traducteur. Le traducteur s’exécute chaque fois
que l’utilisateur modifie le balisage de serveur indiqué dans l’inspecteur de propriétés.
Lorsque le balisage de serveur contrôle plusieurs attributs dans une balise, il n’apparaît pas dans
l’inspecteur de propriétés. Toutefois, l’éclair indique qu’il existe un balisage traduit pour l’élément
sélectionné.
Remarque : L’icône en forme d’éclair n’apparaît pas lorsque du texte ou des cellules, des lignes ou
des colonnes de tableau sont sélectionnés. La traduction continue si l’utilisateur modifie le balisage
de serveur dans le panneau et s’il existe un traducteur qui traite ce type de balisage.
362
Chapitre 20 : Traducteurs de données
Les champs de texte dans l’inspecteur de propriétés sont toujours modifiables ; les utilisateurs
peuvent saisir des valeurs pour les attributs susceptibles d’être contrôlés par un balisage de serveur,
ce qui entraîne l’existence d’attributs en double. Si une valeur traduite et une valeur régulière sont
définies pour un attribut donné, Dreamweaver affiche la valeur traduite dans la fenêtre de
document. Vous devez décider si le traducteur doit rechercher les attributs en double pour les
supprimer.
Verrouillage des balises ou des blocs de code traduits
En règle générale, vous attendez d’un traducteur qu’il modifie le balisage de façon à ce que
Dreamweaver puisse l’afficher, mais vous souhaitez sauvegarder celui d’origine, et non les
modifications. Dans un tel cas, Dreamweaver fournit des balises XML spéciales pour envelopper
le contenu traduit et se reporter au code d’origine.
Lorsque vous utilisez ces balises XML, le contenu des attributs d’origine est reproduit en mode
Code. Si vous enregistrez le fichier, le balisage d’origine non traduit est écrit dans le fichier. Le
contenu non traduit est ce qui apparaît en mode Code.
La syntaxe des balises XML est indiquée dans l’exemple suivant :
<MM:BeginLock translatorClass="translatorClass" ¬
type="tagNameOrType" depFiles="dependentFilesList" ¬
orig="encodedOrignalMarkup">
Translated content
<MM:EndLock>
Dans l’exemple, les valeurs en italique ont la signification suivante :
• La valeur translatorClass correspond à l’identificateur unique pour le traducteur. C’est la
•
•
•
première chaîne du tableau que renvoie la fonction getTranslatorInfo().
La valeur tagNameOrType est une chaîne qui identifie le type de balisage (ou le nom de balise
associé) contenu dans le verrou. Cette chaîne ne peut contenir que des caractères
alphanumériques, des traits d’union (-) ou des caractères de soulignement (_). Vous pouvez
vérifier cette valeur dans la fonction canInspectSelection() d’un inspecteur de propriétés
personnalisé pour déterminer si cet inspecteur est approprié pour le contenu. Pour plus
d’informations, voir Création d’inspecteurs de propriétés pour contenu verrouillé, page 368. Un
contenu verrouillé ne peut pas être contrôlé par les inspecteurs de propriétés intégrés de
Dreamweaver. Par exemple, la spécification de type="IMG" n’entraîne pas l’affichage de
l’inspecteur d’images.
La valeur dependentFilesList est une chaîne qui contient une liste de fichiers séparés par des
virgules dont dépend le balisage verrouillé. Les fichiers sont référencés sous la forme d’URL
relatives au document de l’utilisateur. Si l’utilisateur met à jour l’un des fichiers de la liste
dependentFilesList, Dreamweaver retraduit automatiquement le contenu dans le document
comportant cette liste.
La valeur encodedOriginalMarkup est une chaîne qui contient le balisage d’origine non
traduit et codé à l’aide d’un extrait de code URL (utilisez %22 pour ", %3C pour <, %3E
pour > et %25 pour %). La façon la plus rapide de coder une chaîne en URL consiste à
utiliser la méthode escape(). Par exemple, si myString est égal à ’<img src="foo.gif">’,
escape(myString) renvoie %3Cimg%20src=%22foo.gif%22%3E.
Verrouillage des balises ou des blocs de code traduits
363
L’exemple suivant montre la partie de code verrouillée pouvant être générée à partir de la
traduction de la SSI <!--#include virtual="/footer.html" --> :
<MM:BeginLock translatorClass="MM_SSI" type="ssi" ¬
depFiles="C:\sites\webdev\footer.html" orig="%3C!--#include ¬
virtual=%22/footer.html%22%20--%3E">
<!-- begin footer -->
</CENTER>
<HR SIZE=1 NOSHADE WIDTH=100%>
<BR>
[<[A TARGET="_top" HREF="/">home</A>]
[<[A TARGET="_top" HREF="/products/">products</A>]
[<[A TARGET="_top" HREF="/services/">services</A>]
[<[A TARGET="_top" HREF="/support/">support</A>]
[<[A TARGET="_top" HREF="/company/">about us/<A>]
[<[A TARGET="_top" HREF="/help/">help</A>]
</CENTER>
<!-- end footer -->
<MM:EndLock>
Exemple de traducteur de blocs/balises simple
Pour vous aider à comprendre la traduction, regardez un traducteur entièrement écrit en
JavaScript, qui n’utilise de bibliothèque C pour aucune fonctionnalité. Le traducteur suivant
serait plus efficace s’il était écrit en C, mais la version JavaScript est plus simple et constitue de ce
fait un exemple idéal pour illustrer le fonctionnement des traducteurs.
Comme la plupart des traducteurs, celui-ci est conçu pour émuler le comportement d’un serveur.
Supposons que votre serveur Web soit configuré pour remplacer la balise KENT par la photo d’un
technicien différent selon le jour de la semaine, l’heure de la journée ou la plate-forme de
l’utilisateur. Le traducteur exécute la même opération, mais uniquement localement.
<html>
<head>
<title>Kent Tag Translator</title>
<meta http-equiv="Content-Type" content="text/html; charset=" />
<script language="JavaScript">
/**********************************************************
* The getTranslatorInfo() function provides information *
* about the translator, including its class and name,
*
* the types of documents that are likely to contain the *
* markup to be translated, the regular expressions that *
* a document containing the markup to be translated
*
* would match (whether the translator should run on all *
* files, no files, in files with the specified
*
* extensions, or in files matching the specified
*
* expressions).
*
**********************************************************/
function getTranslatorInfo(){
//Create a new array with 6 slots in it
returnArray = new Array(6);
returnArray[0]
returnArray[1]
returnArray[2]
returnArray[3]
returnArray[4]
364
=
=
=
=
=
"DREAMWEAVER_TEAM"// The translatorClass
"Kent Tags"// The title
"0" // The number of extensions
"1"// The number of expressions
"<kent"// Expression
Chapitre 20 : Traducteurs de données
returnArray[5] = "byExpression"// run if the file contains "<kent"
return returnArray;
}
/************************************************************************
* The translateMarkup() function performs the actual translation.
*
* In this translator, the translateMarkup() function is written
*
* entirely in JavaScript (that is, it does not rely on a C library) -*
* and it’s also extremely inefficient. It’s a simple example, however,
*
* which is good for learning.
*
**************************************************************************/
function translateMarkup(docNameStr, siteRootStr, inStr){
var outStr = "";
// The string to be returned after
translation
var start = inStr.indexOf(’<kent>’);
// The first position of the KENT
tag
// in the document.
var replCode = replaceKentTag();
// Calls the replaceKentTag()
function
// to get the code that will replace KENT.
var outStr = "";
// The string to be returned after
translation
//If the document does not contain any content, terminate the translation.
if ( inStr.length <= 0 ){
return "";
}
// As long as start, which is equal to the location in inStr of the
// KENT tag, is not equal to -1 (that is, as long as there is another
// KENT tag in the document)
while (start != -1){
// Copy everything up to the start of the KENT tag.
// This is very important, as translators should never change
// anything other than the markup that is to be translated.
outStr = inStr.substring(0, start);
// Replace the KENT tag with the translated HTML, wrapped in special
// locking tags. For more information on the replacement operation, see
// the comments in the replaceKentTag() function.
outStr = outStr + replCode;
// Copy everything after the KENT tag.
outStr = outStr + inStr.substring(start+6);
// Use the string you just created for the next trip through
// the document. This is the most inefficient part of all.
inStr = outStr;
start = inStr.indexOf(’<kent>’);
}
// When there are no more KENT tags in the document, return outStr.
return outStr;
}
Exemple de traducteur de blocs/balises simple
365
/**************************************************************
* The replaceKentTag() function assembles the HTML that will *
* replace the KENT tag and the special locking tags that will *
* surround the HTML. It calls the getImage() function to
*
* determine the SRC of the IMG tag.
*
**************************************************************/
function replaceKentTag(){
// The image to display.
var image = getImage();
// The location of the image on the local disk.
var depFiles = dreamweaver.getSiteRoot() + image;
// The IMG tag that will be inserted between the lock tags.
var imgTag = ’<IMG SRC="/’ + image + ’" WIDTH="320" HEIGHT="240"
ALT="Kent">\n’;
// 1st part of the opening lock tag. The remainder of the tag is assembled
below.
var start = ’<MM:BeginLock translatorClass="DREAMWEAVER_TEAM" type="kent"’;
// The closing lock tag.
var end = ’<MM:EndLock>’;
//Assemble the lock tags and the replacement HTML.
var replCode = start + ’ depFiles="’ + depFiles + ’"’;
replCode = replCode + ’ orig="%3Ckent%3E">\n’;
replCode = replCode + imgTag;
replCode = replCode + end;
return replCode;
}
/******************************************************************
* The getImage() function determines which image to display
*
* based on the day of the week, the time of day and the
*
* user’s platform. The day and time are figured based on UTC
*
* time (Greenwich Mean Time) minus 8 hours, which gives
*
* Pacific Standard Time (PST). No allowance is made for Daylight *
* Savings Time in this routine.
*
******************************************************************/
function getImage(){
var today = new Date();
// Today’s date & time.
var day = today.getUTCDay();
// Day of the week in the GMT time zone.
// 0=Sunday, 1=Monday, and so on.
var hour = today.getUTCHours();
// The current hour in GMT, based on the
// 24-hour clock.
var SFhour = hour - 8;
// The time in San Francisco, based on the
// 24-hour clock.
var platform = navigator.platform; // User’s platform. All Windows machines
// are identified by Dreamweaver as "Win32",
// all Macs as "MacPPC".
var imageRef;
// The image reference to be returned.
// If SFhour is negative, you have two adjustments to make.
// First, subtract one from the day count because it is already the wee
// hours of the next day in GMT. Second, add SFhour to 24 to
// give a valid hour in the 24-hour clock.
if (SFhour < 0){
day = day - 1;
// The day count back one would make it negative, and it’s Saturday,
// so set the count to 6.
if (day < 0){
day = 6;
}
366
Chapitre 20 : Traducteurs de données
SFhour = SFhour + 24;
}
// Now determine which photo to show based on whether it’s a workday or a
// weekend; what time it is; and, if it’s a time and day when Kent is
// working, what platform the user is on.
//If it’s not Sunday
if (day != 0){
//And it’s between 10am and noon, inclusive
if (SFhour >= 10 && SFhour <= 12){
imageRef = "images/kent_tiredAndIrritated.jpg";
//Or else it’s between 1pm and 3pm, inclusive
}else if (SFhour >= 13 && SFhour <= 15){
imageRef = "images/kent_hungry.jpg";
//Or else it’s between 4pm and 5pm, inclusive
}else if (SFhour >= 16 && SFhour <= 17){
//If user is on Mac, show Kent working on Mac
if (platform == "MacPPC"){
imageRef = "images/kent_gettingStartedOnMac.jpg";
//If user is on Win, show Kent working on Win
}else{
imageRef = "images/kent_gettingStartedOnWin.jpg";
}
//Or else it’s after 6pm but before the stroke of midnight
}else if (SFhour >= 18){
//If it’s Saturday
if (day == 6){
imageRef = "images/kent_dancing.jpg";
//If it’s not Saturday, check the user’s platform
}else if (platform == "MacPPC"){
imageRef = "images/kent_hardAtWorkOnMac.jpg";
}else{
imageRef = "images/kent_hardAtWorkOnMac.jpg";
}
}else{
imageRef = "images/kent_sleeping.jpg";
}
//If it’s after midnight and before 10am, or anytime on Sunday
}else{
imageRef = "images/kent_sleeping.jpg";
}
return imageRef;
}
</script>
</head>
<body>
</body>
</html>
Exemple de traducteur de blocs/balises simple
367
Création d’inspecteurs de propriétés pour contenu verrouillé
Une fois que vous avez créé un traducteur, vous devez créer un inspecteur de propriétés pour le
contenu afin de permettre à l’utilisateur d’en modifier les propriétés (le fichier à inclure ou l’une
des conditions d’une instruction conditionnelle, par exemple). Le contrôle d’un contenu traduit
pose un problème particulier pour les raisons suivantes :
• L’utilisateur peut décider de modifier les propriétés du contenu traduit. Dans ce cas, ces
•
•
modifications doivent être répercutées dans le contenu non traduit.
Le DOM contient le contenu traduit (ce qui signifie que les balises de verrouillage et les balises
qu’elles englobent sont des nœuds du DOM), mais la propriété outerHTML de
documentElement ainsi que les fonctions dreamweaver.getSelection() et
dreamweaver.nodeToOffsets() agissent sur la source non traduite.
Les balises que vous contrôlez sont différentes avant et après la traduction.
Un commentaire de l’inspecteur de propriétés pour la balise HAPPY non traduite peut ressembler,
par exemple, au code suivant :
<!-- tag:HAPPY,priority:5,selection:exact,hline,vline, attrName:xxx,¬
attrValue:yyy -->
Par contre, un commentaire de ce même inspecteur de propriétés pour la balise HAPPY traduite
ressemblerait au code suivant :
<!-- tag:*LOCKED*,priority:5,selection:within,hline,vline -->
La fonction canInspectSelection() de l’inspecteur de propriétés HAPPY non traduit est simple.
Le type de sélection étant exact, elle peut renvoyer une valeur true sans autre analyse. Pour
l’inspecteur de propriétés de la balise HAPPY traduite, cette fonction est plus compliquée ; le motclé *LOCKED* indique que l’inspecteur est approprié lorsque la sélection se trouve à l’intérieur
d’une région verrouillée, mais comme un document peut comporter plusieurs régions verrouillées,
des vérifications supplémentaires sont nécessaires pour déterminer si l’inspecteur correspond à
cette région précise.
Le contrôle d’un contenu traduit présente un problème supplémentaire. Lorsque vous appelez la
fonction dom.getSelection(), les valeurs renvoyées par défaut sont des décalages dans la source
non traduite. Pour étendre la sélection de façon à sélectionner uniquement la région verrouillée,
utilisez la méthode suivante :
var currentDOM = dw.getDocumentDOM();
var offsets = currentDOM.getSelection();
var theSelection = currentDOM.offsetsToNode(offsets[0],offsets[0]+1);
L’utilisation d’offsets[0]+1 comme deuxième argument permet de vous assurer que vous restez
dans les limites de la balise de verrouillage de début lorsque vous traduisez les décalages d’octets en
nœud. Si vous utilisez offsets[1] comme deuxième argument, vous risquez de sélectionner le
nœud situé au-dessus du verrou.
Une fois la sélection effectuée (après vous être assuré qu’elle est du type node.ELEMENT_NODE),
vous pouvez contrôler l’attribut type pour vérifier que la région verrouillée correspond à cet
inspecteur de propriétés, comme indiqué dans l’exemple suivant :
if (theSelection.nodeType == node.ELEMENT_NODE && ¬
theSelection.getAttribute(’type’) == ’happy’){
return true;
}else{
return false
}
368
Chapitre 20 : Traducteurs de données
Pour renseigner les champs de l’inspecteur pour la balise traduite, vous devez analyser la valeur de
l’attribut orig. Par exemple, si le code non traduit est <HAPPY TIME="22"> et que l’inspecteur de
propriétés contient un champ Time, vous devez extraire la valeur de l’attribut TIME à partir de la
chaîne orig :
function inspectSelection() {
var currentDOM = dw.getDocumentDOM();
var currSelection = currentDOM.getSelection();
var theObj = currentDOM.offsetsToNode¬
(curSelection[0],curSelection[0]+1);
if (theObj.nodeType != Node.ELEMENT_NODE) {
return;
}
// To convert the encoded characters back to their
// original values, use the unescape() method.
var origAtt = unescape(theObj.getAttribute("ORIG"));
// Convert the string to lower case for processing
var origAttLC = origAtt.toLowerCase();
var timeStart = origAttLC.indexOf(’time="’);
var timeEnd = origAttLC.indexOf(’"’,timeStart+6);
var timeValue = origAtt.substring(timeStart+6,timeEnd);
document.layers[’timelayer’].document.timeForm.timefield.¬
value = timeValue;
}
Après avoir analysé l’attribut orig en vue de compléter les champs de l’inspecteur de propriétés
pour la balise traduite, vous devrez probablement définir la valeur de l’attribut orig au cas où
l’utilisateur modifierait cette valeur dans l’un des champs. Il existe certaines restrictions quant aux
modifications que vous pouvez effectuer dans une région verrouillée. Vous pouvez contourner ce
problème en modifiant le balisage d’origine puis en procédant à une nouvelle traduction.
L’inspecteur de propriétés des SSI traduites (fichier ssi_translated.js du dossier Configuration/
Inspectors) démontre cette technique avec sa fonction setComment(). Au lieu de réécrire
l’attribut orig, l’inspecteur assemble un nouveau commentaire de SSI. Il insère ce commentaire
dans le document, remplaçant l’ancien en réécrivant le contenu du document, ce qui génère un
nouvel attribut orig. Le code suivant résume cette technique :
// Assemble the new include comment. radioStr and URL are
// variables defined earlier in the code.
newInc = "<!--#include " + radioStr + "=" + ’"’ + URL + ’"’ ¬
+" -->";
// Get the contents of the document.
var entireDocObj = dreamweaver.getDocumentDOM();
var docSrc = entireDocObj.documentElement.outerHTML;
// Store everything up to the SSI comment and everything after
// the SSI comment in the beforeSelStr and afterSelStr variables.
var beforeSelStr = docSrc.substring(0, curSelection[0] );
var afterSelStr = docSrc.substring(curSelection[1]);
// Assemble the new contents of the document.
docSrc = beforeSelStr + newInc + afterSelStr;
Exemple de traducteur de blocs/balises simple
369
// Set the outerHTML of the HTML tag (represented by
// the documentElement object) to the new contents,
// and then set the selection back to the locked region
// surrounding the SSI comment.
entireDocObj.documentElement.outerHTML = docSrc;
entireDocObj.setSelection(curSelection[0], curSelection[0]+1);
Recherche de bogues dans le traducteur
Si la fonction translateMarkup() contient certains types d’erreur, le traducteur se charge
correctement, mais il échoue sans afficher de message d’erreur si vous essayer de l’appeler. Bien
que cette panne discrète empêche Dreamweaver de devenir instable, elle peut ralentir le
développement, surtout lorsque vous devez rechercher une erreur de syntaxe mineure dans
plusieurs lignes de code.
Si l’exécution du traducteur échoue, une méthode de débogage efficace consiste à convertir le
traducteur en commande, en procédant comme suit :
1 Copiez tout le contenu du fichier du traducteur dans un nouveau document, puis enregistrez-
le dans le sous-dossier Configuration/Commands du dossier de l’application Dreamweaver.
2 Au début du document, entre les balises SCRIPT, ajoutez la fonction suivante :
function commandButtons(){
return new Array( "OK","translateMarkup(dreamweaver.¬
getDocumentPath(’document’), dreamweaver.getSiteRoot(), ¬
dreamweaver.getDocumentDOM().documentElement.outerHTML); ¬
window.close()", "Cancel", "window.close()");
}
3 A la fin de la fonction translateMarkup(), commentez la ligne return
QuelqueSoitLaValeurRenvoyée et remplacez-la par
dreamweaver.getDocumentDOM().documentElement.outerHTML =
QuelqueSoitLaValeurRenvoyée, comme illustré dans l’exemple suivant
:
// return theCode;
dreamweaver.getDocumentDOM().documentElement.outerHTML = ¬
theCode;
}
/* end of translateMarkup() */
4 Dans la balise BODY du document, ajoutez un formulaire sans zones de texte :
<body>
<form>
Hello.
</form>
</body>
5 Redémarrez Dreamweaver, puis sélectionnez la commande de votre traducteur dans le menu
Commandes. Lorsque vous cliquez sur OK, la fonction translateMarkup() est appelée et
simule une traduction.
Si aucun message d’erreur ne s’affiche et que la traduction continue d’échouer, cela signifie
probablement que votre code contient une erreur de logique.
370
Chapitre 20 : Traducteurs de données
6 Ajoutez des instructions alert() à des points stratégiques de la fonction translateMarkup()
de façon à vous assurer que vous touchez les ramifications appropriées et à vérifier les valeurs des
variables et des propriétés à des points différents :
for (var i=0; i <foo.length; i++){
alert("we’re at the top of foo.length array, and the value ¬
of i is " + i);
/* rest of loop */
}
7 Une fois les instructions alert() ajoutées, choisissez votre commande dans le menu
Commandes, cliquez sur Annuler, puis choisissez-la de nouveau. Cette opération recharge le
fichier de commandes en intégrant vos modifications.
Recherche de bogues dans le traducteur
371
372
Chapitre 20 : Traducteurs de données
CHAPITRE 21
Extensions C
Les extensions C vous permettent d’implémenter des fichiers d’extension Macromedia
Dreamweaver MX 2004 en combinant du code JavaScript et votre propre code C. Créez des
fonctions en langage C, intégrez-les à une DLL ou à une bibliothèque partagée, enregistrez la
bibliothèque dans le sous-dossier Configuration/JSExtensions du dossier de l’application
Dreamweaver, puis appelez ces fonctions à partir de JavaScript à l’aide de l’interpréteur JavaScript
intégré à Dreamweaver.
Supposons, par exemple, que vous souhaitiez définir un objet Dreamweaver permettant d’insérer
dans le document actif le contenu d’un fichier spécifié par l’utilisateur. Etant donné que le code
JavaScript côté client ne prend pas en charge les E/S de fichier, vous devez créer une fonction en C
pour fournir cette fonctionnalité.
Intégration des fonctions C
Vous pouvez utiliser le code HTML et JavaScript ci-dessous pour créer un objet simple
d’insertion du texte d’un fichier. La fonction objectTag() appelle la fonction C
readContentsOfFile(), stockée dans une bibliothèque appelée maBibliothèque.
<HTML>
<HEAD>
<SCRIPT>
function objectTag() {
fileName = document.forms[0].myFile.value;
return myLibrary.readContentsOfFile(fileName);
}
</SCRIPT>
</HEAD>
<BODY>
<FORM>
Entrez le nom du fichier à insérer :
<INPUT TYPE="file" NAME="monFichier">
<FORM>
</BODY>
</HTML>
La fonction readContentsOfFile() accepte une liste d’arguments de l’utilisateur, extrait
l’argument de nom de fichier, lit le contenu du fichier et le renvoie. Pour plus d’informations sur
les structures de données et les fonctions JavaScript apparaissant dans la fonction
readContentsOfFile(), voir Extensions C et interpréteur JavaScript, page 375.
373
JSBool
readContentsOfFile(JSContext *cx, JSObject *obj, unsigned int ¬
argc, jsval *argv, jsval *rval)
{
char *fileName, *fileContents;
JSBool success;
unsigned int length;
/* Make sure caller passed in exactly one argument. If not,
* then tell the interpreter to abort script execution. */
if (argc != 1){
JS_ReportError(cx, "Wrong number of arguments", 0);
return JS_FALSE;
}
/* Convert the argument to a string */
fileName = JS_ValueToString(cx, argv[0], &length);
if (fileName == NULL){
JS_ReportError(cx, "The argument must be a string", 0);
return JS_FALSE;
}
/* Use the string (the file name) to open and read a file */
fileContents = exerciseLeftToTheReader(fileName);
/* Store file contents in rval, which is the return value ¬
passed
* back to the caller */
success = JS_StringToValue(cx, fileContents, 0, *rval);
free(fileContents);
/* Return true to continue or false to abort the script */
return success;
}
Pour vous assurer que la fonction readContentsOfFile() s’exécute correctement et ne provoque
pas d’erreur JavaScript, vous devez enregistrer la fonction avec l’interpréteur JavaScript en
ajoutant une fonction MM_Init() à votre bibliothèque. Lorsque Dreamweaver charge la
bibliothèque au démarrage, il appelle la fonction MM_Init() pour obtenir les trois informations
suivantes :
• le nom JavaScript de la fonction ;
• un pointeur vers la fonction ;
• le nombre d’arguments attendus par la fonction.
L’exemple suivant illustre la fonction MM_Init() pour la bibliothèque maBibliothèque :
void
MM_Init()
{
JS_DefineFunction("readContentsOfFile", readContentsOfFile, 1);
}
Votre bibliothèque doit inclure exactement une instance de la macro suivante :
/* MM_STATE is a macro that expands to some definitions that are
* needed to interact with Dreamweaver. This macro must
* be defined exactly once in your library. */
MM_STATE
374
Chapitre 21 : Extensions C
Remarque : La bibliothèque peut être implémentée en C ou en C++, mais le fichier qui contient la
fonction MM_Init() et la macro MM_STATE doivent être implémentés en C. En effet, le compilateur C++
modifie les noms de fonction, ce qui rend impossible la détection de la fonction MM_Init() par
Dreamweaver.
Extensions C et interpréteur JavaScript
Dans votre bibliothèque, le code C doit interagir avec l’interpréteur JavaScript de Dreamweaver à
trois moments distincts :
• au démarrage, pour enregistrer les fonctions de la bibliothèque ;
• Lorsque la fonction est appelée, pour analyser les arguments que JavaScript transmet à C
• avant le retour de la fonction, pour compresser la valeur renvoyée.
Pour accomplir ces tâches, l’interpréteur définit plusieurs types de données et affiche une API. Les
définitions des types de données et des fonctions répertoriées dans cette section apparaissent dans
le fichier mm_jsapi.h. Pour que votre bibliothèque fonctionne correctement, vous devez inclure le
fichier mm_jsapi.h et la ligne suivante au début de tous les fichiers de votre bibliothèque :
#include "mm_jsapi.h"
L’inclusion du fichier mm_jsapi.h a pour effet d’inclure, à son tour, le fichier
mm_jsapi_environment.h, qui définit la structure MM_Environment.
Types de données
L’interpréteur JavaScript définit les types de données suivants.
typedef struct JSContext JSContext
Un pointeur vers ce type de données opaque est transmis à la fonction C. Certaines des fonctions
de l’API utilisent ce pointeur comme argument.
typedef struct JSObject JSObject
Un pointeur vers ce type de données opaque est transmis à la fonction C. Ce type de données
représente un objet pouvant correspondre à un objet de tableau ou tout autre type d’objet.
typedef struct jsval jsval
Une structure de données opaque pouvant contenir un nombre entier ou un pointeur vers un
nombre à virgule flottante, une chaîne ou un objet. Certaines des fonctions de l’API permettent
de lire les valeurs des arguments de fonction à partir du contenu d’une structure jsval et d’autres
permettent d’écrire la valeur renvoyée par la fonction en rédigeant une structure jsval.
typedef enum { JS_FALSE = 0, JS_TRUE = 1 } JSBool
Type de données simple qui stocke une valeur booléenne.
Types de données
375
API d’extension C
L’API d’extension C se compose des fonctions suivantes :
typedef JSBool (*JSNative)(JSContext *cx, JSObject *obj, unsigned int
argc, jsval *argv, jsval *rval)
Description
Cette signature de fonction décrit les implémentations C des fonctions JavaScript dans les
situations suivantes :
•
•
•
•
•
est un pointeur vers une structure JSContext opaque qui doit être transmis à certaines
fonctions de l’API JavaScript. Cette variable contient le contexte d’exécution de l’interpréteur.
obj est un pointeur vers l’objet dans le contexte duquel le script s’exécute. Pendant l’exécution
du script, le mot clé this désigne cet objet.
argc correspond au nombre d’arguments transmis à la fonction.
argv est un pointeur vers un tableau de structures jsval. Le tableau comporte argc éléments
en longueur.
rval est un pointeur vers une structure jsval unique. La valeur renvoyée par la fonction doit
être enregistrée dans *rval.
cx
La fonction renvoie JS_TRUE si elle réussit ; JS_FALSE dans le cas contraire. Si la fonction renvoie
la valeur JS_FALSE, l’exécution du script en cours s’arrête et un message d’erreur apparaît.
JSBool JS_DefineFunction()
Description
Cette fonction enregistre une fonction C avec l’interpréteur JavaScript dans Dreamweaver. Une
fois que la fonction JS_DefineFunction() a enregistré la fonction C spécifiée dans l’argument
call, vous pouvez l’appeler dans un script JavaScript en utilisant le nom spécifié dans l’argument
name. L’argument name fait la distinction entre majuscules et minuscules.
Normalement, vous appelez cette fonction à partir de la fonction MM_Init() que Dreamweaver
appelle lors de son démarrage.
Arguments
char *name, JSNative call, unsigned int nargs
•
•
name
est le nom de la fonction tel qu’il apparaît dans JavaScript.
call est un pointeur vers une fonction C. La fonction doit accepter les mêmes arguments que
readContentsOfFile et renvoyer une valeur JSBool qui indique si son exécution a réussi ou
pas.
•
nargs
est le nombre d’arguments que la fonction doit recevoir.
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
376
Chapitre 21 : Extensions C
char *JS_ValueToString()
Description
Extrait un argument de fonction à partir d’une structure jsval, le convertit en chaîne (si
possible) et renvoie la valeur convertie à l’appelant.
Remarque : Ne modifiez pas le pointeur tampon renvoyé, car cela pourrait endommager les
structures des données de l’interpréteur JavaScript. Pour modifier la chaîne, copiez les caractères
dans un autre tampon et créez une chaîne JavaScript.
Arguments
JSContext *cx, jsval v, unsigned int *pLength
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
v est la structure jsval de laquelle la chaîne est extraite.
pLength est un pointeur vers un nombre entier qui n’est pas signé. Cette fonction définit pour
*plength une valeur égale à la longueur de la chaîne en octets.
cx
Valeurs renvoyées
Pointeur vers une chaîne terminée par 0 en cas de réussite ou vers une valeur null en cas d’échec.
La routine d’appel ne doit pas libérer cette chaîne lorsqu’elle a terminé.
JSBool JS_ValueToInteger()
Description
Extrait un argument de fonction à partir d’une structure jsval, le convertit en nombre entier (si
possible) et renvoie la valeur convertie à l’appelant.
Arguments
JSContext *cx, jsval v, long *lp
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
est la structure jsval de laquelle l’entier doit être extrait.
lp est un pointeur vers un nombre entier de 4 octets. Cette fonction stocke la valeur convertie
dans *lp.
cx
v
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
JSBool JS_ValueToDouble()
Description
Extrait un argument de fonction d’une structure jsval, le convertit en réel double (si possible) et
renvoie la valeur convertie à l’appelant.
API d’extension C
377
Arguments
JSContext *cx, jsval v, double *dp
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
est la structure jsval de laquelle le double est extrait.
dp est un pointeur vers un réel double de 8 octets. Cette fonction stocke la valeur convertie
dans *dp.
cx
v
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
JSBool JS_ValueToBoolean()
Description
Extrait un argument de fonction à partir d’une structure jsval, le convertit en valeur booléenne
(si possible) et renvoie la valeur convertie à l’appelant.
Arguments
JSContext *cx, jsval v, JSBool *bp
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
v est la structure jsval de laquelle la valeur booléenne est extraite.
bp est un pointeur vers une valeur booléenne JSBool. Cette fonction stocke la valeur convertie
dans *bp.
cx
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
JSBool JS_ValueToObject()
Description
Extrait un argument de fonction à partir d’une structure jsval, le convertit en objet (si possible)
et renvoie la valeur convertie à l’appelant. Si l’objet correspond à un tableau, utilisez
JS_GetArrayLength() et JS_GetElement() pour lire son contenu.
Arguments
JSContext *cx, jsval v, JSObject **op
• cx est le pointeur JSContext opaque transmis à la fonction JavaScript.
• L’argument v est la structure jsval de laquelle l’objet est extrait.
• op est un pointeur vers un pointeur JSObject. Cette fonction stocke la valeur convertie dans
*op.
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
378
Chapitre 21 : Extensions C
JSBool JS_StringToValue()
Description
Cette fonction stocke la valeur renvoyée d’une chaîne dans une structure jsval. Elle alloue un
nouvel objet de chaîne JavaScript.
Arguments
JSContext *cx, char *bytes, size_t sz, jsval *vp
• cx est le pointeur JSContext opaque transmis à la fonction JavaScript.
• L’argument bytes est la chaîne à stocker dans la structure jsval. La chaîne est copiée de façon
•
•
à ce que l’appelant puisse la libérer lorsqu’elle ne sera plus nécessaire. Si la taille de la chaîne
n’est pas spécifiée (voir l’argument sz), la chaîne doit se terminer par un 0.
sz indique la taille de la chaîne en octets. Si sz a pour valeur 0, la longueur de la chaîne se
terminant par 0 est calculée automatiquement.
vp est un pointeur vers la structure jsval dans laquelle le contenu de la chaîne doit être copié.
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
JSBool JS_DoubleToValue()
Description
Cette fonction stocke la valeur renvoyée d’un nombre à virgule flottante dans une structure
jsval.
Arguments
JSContext *cx, double dv, jsval *vp
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
est un nombre à virgule flottante de 8 octets.
vp est un pointeur vers la structure jsval dans laquelle le contenu du réel double doit être
copié.
cx
dv
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
JSVal JS_BooleanToValue()
Description
Stocke dans une structure jsval la valeur booléenne renvoyée.
Arguments
JSBool bv
•
bv
est une valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
Valeurs renvoyées
Structure JSVal qui contient la valeur booléenne que vous avez transmise à la fonction en tant
qu’argument.
API d’extension C
379
JSVal JS_IntegerToValue()
Description
Cette fonction convertit une valeur d’entier long en structure JSVal.
Arguments
lv
• L’argument lv est un entier long que vous souhaitez convertir en structure jsval.
Valeurs renvoyées
Structure JSVal qui contient le nombre entier que vous avez transmis à la fonction en tant
qu’argument.
JSVal JS_ObjectToValue()
Description
Stocke la valeur renvoyée d’un objet dans une structure JSVal. Utilise la fonction JS_
NewArrayObject() pour créer un objet de tableau et utilise JS_SetElement() pour en définir le
contenu.
Arguments
JSObject *obj
•
obj
est un pointeur vers l’objet JSObject que vous voulez convertir en structure JSVal.
Valeurs renvoyées
Structure JSVal qui contient l’objet que vous avez transmis à la fonction en tant qu’argument.
char *JS_ObjectType()
Description
A partir d’une référence d’objet, la fonction JS_ObjectType() renvoie le nom de la classe de
l’objet. Ainsi, s’il s’agit d’un objet DOM, la fonction renvoie « Document ». S’il s’agit d’un nœud
dans le document, elle renvoie « Element ». Dans le cas d’un objet de type tableau, elle renvoie
« Array ».
Remarque : Ne modifiez pas le pointeur tampon renvoyé, car cela pourrait endommager les
structures des données de l’interpréteur JavaScript.
Arguments
JSObject *obj
• En principe, cet argument est transmis et converti à l’aide de JS_ValueToObject().
Valeurs renvoyées
Pointeur vers une chaîne terminée par 0. L’appelant ne doit pas libérer cette chaîne une fois
l’opération effectuée.
380
Chapitre 21 : Extensions C
JSObject *JS_NewArrayObject()
Description
Crée un nouvel objet contenant un tableau d’arguments JSVal.
Arguments
JSContext *cx, unsigned int length, jsval *v
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
length correspond au nombre d’éléments que le tableau peut contenir.
v est un pointeur facultatif vers les arguments jsval devant être stockés dans le tableau. Si la
valeur renvoyée est différente de null, v correspond à un tableau contenant des éléments
length. Si la valeur renvoyée est null, le contenu initial de l’objet de tableau est indéterminé
(et peut être défini à l’aide de la fonction JS_SetElement()).
cx
Valeurs renvoyées
Un pointeur vers un nouvel objet de tableau (array) ou la valeur null en cas d’échec de
l’exécution de la fonction.
long JS_GetArrayLength()
Description
A partir d’un pointeur vers un objet de tableau, extrait le nombre d’éléments contenus dans le
tableau.
Arguments
JSContext *cx, JSObject *obj
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
obj est un pointeur vers un objet de tableau.
cx
Valeurs renvoyées
Soit le nombre d’éléments figurant dans le tableau, soit -1 en cas d’échec d’exécution de la
fonction.
JSBool JS_GetElement()
Description
Lit un seul élément d’un objet de tableau.
Arguments
JSContext *cx, JSObject *obj, unsigned int index, jsval *v
•
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
est un pointeur vers un objet de tableau.
index est un index des nombres entiers du tableau. Le premier élément est l’index 0, le dernier
élément est l’index (length - 1).
v est un pointeur vers une structure jsval dans laquelle sera copié le contenu de la structure
jsval figurant dans le tableau.
cx
obj
API d’extension C
381
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
JSBool JS_SetElement()
Description
Ecrit un seul élément d’un objet de tableau.
Arguments
JSContext *cx, JSObject *obj, unsigned int index, jsval *v
•
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
est un pointeur vers un objet de tableau.
index est un index des nombres entiers du tableau. Le premier élément est l’index 0, le dernier
élément est l’index (length - 1).
v est un pointeur vers une structure jsval dont le contenu doit être copié dans la structure
jsval du tableau.
cx
obj
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
JSBool JS_ExecuteScript()
Description
Cette fonction compile et exécute une chaîne JavaScript. Si le script renvoie une valeur, celle-ci
apparaît dans *rval.
Arguments
JSContext *cx, JSObject *obj, char *script, unsigned int sz, jsval *rval
•
•
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
obj est un pointeur vers l’objet dans le contexte duquel le script s’exécute. Pendant l’exécution
du script, le mot clé this désigne cet objet. En général, il s’agit du pointeur JSObject qui a été
transmis à la fonction JavaScript.
script est une chaîne qui contient le code JavaScript. Si la taille de la chaîne n’est pas spécifiée
(voir l’argument sz), la chaîne doit se terminer par un 0.
sz indique la taille de la chaîne en octets. Si sz a pour valeur 0, la longueur de la chaîne se
terminant par 0 est calculée automatiquement.
rval est un pointeur vers une seule structure jsval. La valeur renvoyée pour la fonction est
stockée dans *rval.
cx
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
382
Chapitre 21 : Extensions C
JSBool JS_ReportError()
Description
Décrit la cause d’une erreur de script. Appelez cette fonction avant de renvoyer la valeur
JS_FALSE pour une erreur de script, pour donner à utilisateur la raison de l’échec du script (par
exemple « wrong number of arguments »).
Arguments
JSContext *cx, char *error, size_t sz
•
•
•
est le pointeur JSContext opaque transmis à la fonction JavaScript.
est une chaîne qui contient le message d’erreur. La chaîne est copiée de façon à ce que
l’appelant puisse la libérer lorsqu’elle ne sera plus nécessaire. Si la taille de la chaîne n’est pas
spécifiée (voir l’argument sz), la chaîne doit se terminer par un 0.
sz indique la taille de la chaîne en octets. Si sz a pour valeur 0, la longueur de la chaîne se
terminant par 0 est calculée automatiquement.
cx
error
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
API de configuration multiutilisateur et d’accès aux fichiers
Macromedia vous recommande de toujours utiliser l’API de configuration multiutilisateur et
d’accès aux fichiers pour accéder au système de fichiers par l’intermédiaire d’extensions C. Pour
les fichiers autres que les fichiers de configuration, les fonctions accèdent directement au fichier
ou dossier spécifié.
Dreamweaver prend en charge les configurations multiutilisateur pour les systèmes Windows XP,
Windows 2000 et Mac OS X.
Dreamweaver est généralement installé dans un dossier à accès restreint, tel que C:\Program
Folders sous Windows. De ce fait, seuls les utilisateurs disposant de droits d’accès de type
administrateur peuvent modifier le dossier Configuration de Dreamweaver. Pour permettre aux
utilisateurs travaillant dans des environnements multiutilisateur de créer et de gérer des
configurations distinctes, Dreamweaver crée un dossier de configuration séparé pour chacun
d’entre eux. Chaque fois que Dreamweaver ou une extension JavaScript écrit dans le dossier
Configuration de Dreamweaver, Dreamweaver écrit automatiquement dans le dossier de
configuration de l’utilisateur à la place. Ainsi, Dreamweaver permet à chaque utilisateur de
personnaliser les paramètres de configuration respectifs, sans aucune incidence sur les
configurations personnalisées des autres utilisateurs.
Dreamweaver crée le dossier de configuration de l’utilisateur à un emplacement dans lequel
l’utilisateur dispose de tous les droits d’accès en lecture/écriture. L’emplacement du dossier de
configuration varie selon la plate-forme utilisateur.
Sous Windows 2000 et Windows XP :
<lecteur>:\Documents and Settings\<nom d’utilisateur>\ ¬
Application Data\Macromedia\Dreamweaver MX 2004\Configuration
Remarque : Sous Windows XP, ce dossier peut se trouver dans un dossier masqué.
API de configuration multiutilisateur et d’accès aux fichiers
383
Pour Mac OS X :
<lecteur>:Utilisateurs:<nom d’utilisateur>:Bibliothèque:Application Support: ¬
¬
Macromedia:Dreamweaver MX 2004:Configuration
Il est fréquent que les extensions JavaScript soient amenées à ouvrir des fichiers et à écrire dans le
dossier de configuration. Elles peuvent accéder au système de fichiers en utilisant DWFile et
MMNotes ou en transmettant une URL à la fonction dreamweaver.getDocumentDOM(). En
général, lorsqu’une extension accède au système de fichiers dans un dossier de configuration, elle
utilise la fonction dw.getConfigurationPath() et ajoute le nom du fichier, ou elle obtient le
chemin d’accès en se reportant à l’élément dom.URL d’un document ouvert et en ajoutant le nom
du fichier. Une extension peut également obtenir le chemin d’accès en se reportant à l’élément
dom.URL et en extrayant le nom du fichier. La fonction dw.getConfigurationPath() et
l’élément dom.URL renvoient toujours une URL du dossier Configuration de Dreamweaver,
même si le document se trouve dans le dossier de configuration de l’utilisateur.
Chaque fois qu’une extension JavaScript ouvre un fichier dans le dossier Configuration de
Dreamweaver, ce dernier interrompt l’accès et vérifie d’abord le dossier de configuration de
l’utilisateur. Si une extension JavaScript enregistre des données sur le disque dans le dossier
Configuration de Dreamweaver via DWFile ou MMNotes, Dreamweaver intercepte l’appel et le
redirige vers le dossier de configuration de l’utilisateur.
Sous Windows 2000 ou Windows XP par exemple, si l’utilisateur demande "file:///C|/
Program Files/Macromedia/Dreamweaver/Configuration/Objects/Common/Table.htm",
Dreamweaver recherche d’abord un fichier Table.htm dans le dossier C:/Documents et Settings/
nom d’utilisateur/Macromedia/Dreamweaver/Configuration/Objects/Common, et s’il existe,
l’utilise.
Les extensions C, ou les bibliothèques partagées, doivent utiliser l’API de configuration
multiutilisateur et d’accès aux fichiers pour lire et écrire dans le dossier Configuration de
Dreamweaver. Le recours à cette API permet à Dreamweaver de lire et d’écrire dans le dossier de
configuration de l’utilisateur et garantit que les opérations liées aux fichiers n’échouent pas en
raison de droits d’accès insuffisants. Si votre extension C accède à des fichiers du dossier
Configuration de Dreamweaver créés par modification de DWFile, MMNotes ou DOM au
moyen de JavaScript, vous devez impérativement utiliser cette API car les fichiers peuvent se
trouver dans le dossier de configuration de l’utilisateur.
Remarque : La plupart des extensions JavaScript ne requièrent aucune modification pour pouvoir
écrire dans le dossier de configuration de l’utilisateur. Seules les bibliothèques C partagées qui
écrivent dans le dossier de configuration doivent être mises à jour afin d’utiliser les fonctions de l’API
de configuration multiutilisateur et d’accès aux fichiers.
Lorsque vous supprimez un fichier du dossier Configuration de Dreamweaver, ce dernier ajoute
une entrée à un fichier masque pour indiquer les fichiers du dossier qui ne doivent pas apparaître
dans l’interface utilisateur. Un fichier ou dossier masqué n’existera pas pour Dreamweaver, même
s’il peut exister physiquement dans le dossier.
384
Chapitre 21 : Extensions C
Supposons, par exemple, que vous ayez utilisé la corbeille du panneau Fragments de code pour
supprimer un dossier appelé javascript et un fichier appelé onepixelborder.csn. Dans ce cas,
Dreamweaver écrit un fichier nommé mm_deleted_files.xml dans le dossier de configuration de
l’utilisateur, ressemblant à ceci :
<?xml version = "1.0" encoding="utf-8" ?>
</deleteditems>
<item name="snippets/javascript/" />
<item name="snippets/html/onepixelborder.csn" />
</deleteditems>
Pour afficher le panneau Fragments de code, Dreamweaver lit tous les fichiers du dossier
Configuration/Snippets de l’utilisateur ainsi que ceux du dossier Configuration/Snippets de
Dreamweaver, à l’exception du dossier Configuration/Snippets/javascript et du fichier
Configuration/Snippets/html/onepixelborder.csn, puis ajoute la liste de fichiers ainsi obtenue au
panneau Fragments de code.
Si une extension C appelle la fonction MM_ConfigFileExists() de l’URL "file:///c|Program
Files/Macromedia/Dreamweaver/Configuration/Snippets/javascript/onepixelborder.csn", cette
dernière renvoie la valeur false. De même, si une extension JavaScript essaie d’appeler la
fonction dw.getDocumentDom("file:///c|Program Files/Macromedia/Dreamweaver/
Configuration/Snippets/javascript/onepixelborder.csn"), la valeur renvoyée est null.
Vous pouvez modifier le fichier mm_deleted_files.xml pour empêcher Dreamweaver d’afficher
des fichiers dans l’interface utilisateur, tels que des objets ou un contenu prêt à l’emploi dans une
nouvelle boîte de dialogue. Vous pouvez appeler la fonction MM_DeleteConfigfile() pour
ajouter des chemins de fichier au fichier mm_deleted_files.xml.
JS_Object MM_GetConfigFolderList()
Disponibilité
Dreamweaver MX.
Description
Obtient une liste répertoriant les dossiers ou les fichiers (ou les deux à la fois) du dossier spécifié.
Si vous spécifiez un dossier de configuration, la fonction obtient la liste des dossiers qui existent
dans le dossier de configuration de l’utilisateur ainsi que dans celui de Dreamweaver, après filtrage
par mm_deleted_files.xml.
Arguments
char *fileURL, char *constraints
•
•
char *fileUrl est un pointeur vers une chaîne qui nomme le dossier dont vous souhaitez
obtenir le contenu. La chaîne doit se présenter sous la forme d’une URL de fichier (file://).
Cette chaîne peut comporter les caractères génériques suivants : astérisques (*) et points
d’interrogation (?). Utilisez les astérisques (*) pour représenter un ou plusieurs caractères
indéterminés et les points d’interrogation (?) pour représenter un seul caractère indéterminé.
L’argument char *contstraints peut être "files" ou "directories" ou encore une valeur
null. Si vous précisez null, la fonction MM_GetConfigFolderList() renvoie des fichiers et
des dossiers.
API de configuration multiutilisateur et d’accès aux fichiers
385
Valeurs renvoyées
est un tableau qui contient la liste des fichiers ou des dossiers figurant soit dans le
dossier de configuration de l’utilisateur, soit dans le dossier Configuration de Dreamweaver, après
filtrage par le fichier mm_deleted_files.xml.
JSObject
Exemples
JSObject *jsobj_array;
jsobj_array = MM_GetConfigFolderList("file:///¬
c|/Program Files/Macromedia/Dreamweaver/Configuration", "directories" );
JSBool MM_ConfigFileExists()
Disponibilité
Dreamweaver MX.
Description
Cette fonction vérifie si le fichier spécifié existe. S’il s’agit d’un fichier dans un dossier de
configuration, la fonction recherche le fichier dans le dossier Configuration de l’utilisateur ou
celui de Dreamweaver. Elle vérifie également si le nom du fichier est répertorié dans le fichier
mm_deleted_files.xml. Si tel est le cas, la fonction renvoie la valeur false.
Arguments
char *fileUrl
•
est un pointeur vers une chaîne qui nomme le fichier souhaité, sous la forme
d’une URL de type file://.
char *fileUrl
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
Exemple
char *dwConfig = “file:///c|/Program Files/Macromedia/Dreamweaver/
Configuration/Extensions.txt”;
int fileno = 0;
if(MM_ConfigFileExists(dwConfig))
{
fileno = MM_OpenConfigFile(dwConfig, “read”);
}
int MM_OpenConfigFile()
Disponibilité
Dreamweaver MX.
Description
Ouvre le fichier et renvoie son identificateur dans le système d’exploitation. Vous pouvez utiliser
cet identificateur dans des appels à des fonctions de fichiers système. Vous devez fermer
l’identificateur de fichier en appelant la fonction _close.
386
Chapitre 21 : Extensions C
S’il s’agit d’un fichier de configuration, la fonction le recherche soit dans le dossier de
configuration de l’utilisateur, soit dans le dossier Configuration de Dreamweaver. Si vous ouvrez
le fichier de configuration à des fins d’écriture, la fonction crée le fichier dans le dossier de
configuration de l’utilisateur, même s’il existe dans le dossier Configuration de Dreamweaver.
Remarque : Si vous souhaitez commencer par lire le fichier, ouvrez-le en mode "read". Lorsque
vous souhaitez écrire dans le fichier, fermez l’identificateur de lecture et rouvrez le fichier en mode
"write" ou "append".
Arguments
char *fileURL, char *mode
•
•
est un pointeur vers une chaîne qui nomme le fichier en cours d’ouverture,
exprimé sous la forme d’une URL de fichier (file://). S’il indique un chemin d’accès dans le
dossier Configuration de Dreamweaver, la fonction MM_OpenConfigFile() commence par
déterminer le chemin d’accès avant d’ouvrir le fichier.
char *mode pointe vers une chaîne qui indique la façon dont vous souhaitez ouvrir le fichier.
Vous avez le choix entre null, "read", "write" et "append". Si vous spécifiez "write" et que
le fichier n’existe pas, la fonction MM_OpenconfigFile() le crée. Si vous spécifiez "write", la
fonction MM_OpenConfigFile() ouvre le fichier en mode de partage exclusif. Si vous spécifiez
"read", MM_OpenConfigFile() ouvre le fichier en mode de partage non exclusif.
Si vous ouvrez le fichier en mode "write", toutes les données existant dans le fichier sont
tronquées avant que les nouvelles données ne soient écrites. Si vous ouvrez le fichier en mode
"append", toutes les nouvelles données sont ajoutées à la fin du fichier.
char *fileURL
Valeurs renvoyées
Nombre entier représentant l’identificateur du fichier dans le système d’exploitation. Renvoie la
valeur -1 si le fichier est introuvable ou n’existe pas.
Exemple
char *dwConfig = "file:///c|/Program Files/Macromedia/Dreamweaver/
Configuration/Extensions.txt";
int = fileno;
if(MM_ConfigFileExists(dwConfig))
{
fileno = MM_OpenConfigFile(dwConfig, "read");
}
JSBool MM_GetConfigFileAttributes()
Disponibilité
Dreamweaver MX.
Description
Trouve le fichier et en renvoie les attributs. Vous pouvez définir tous les arguments sur null, à
l’exception de fileURL, si vous n’avez pas besoin de leur valeur.
API de configuration multiutilisateur et d’accès aux fichiers
387
Arguments
char *fileURL, unsigned long *attrs, unsigned long *filesize,
unsigned long *modtime, unsigned long *createtime
•
•
•
•
•
est un pointeur vers une chaîne qui nomme le fichier dont vous voulez les
arguments. Vous devez fournir cet argument sous forme de fichier (file:// URL). Si fileURL
indique un chemin d’accès dans le dossier Configuration de Dreamweaver, la fonction
MM_GetConfigFileAttributes() commence par déterminer le chemin d’accès à utiliser
avant d’ouvrir le fichier.
unsigned long *attrs représente l’adresse d’un nombre entier contenant les bits d’attribut
renvoyés (voir JSBool MM_SetConfigFileAttributes() pour la liste des attributs disponibles).
unsigned long *filesize est l’adresse d’un entier dans laquelle la fonction renvoie la taille
du fichier en octets.
unsigned long *modtime est l’adresse d’un entier dans laquelle la fonction renvoie l’heure à
laquelle le fichier a été modifié pour la dernière fois. Cette heure correspond à la valeur horaire
du système d’exploitation. Pour plus d’informations sur la valeur horaire du système
d’exploitation, voir DWfile.getModificationDate() dans le Guide des API de Dreamweaver.
unsigned long *createtime est l’adresse d’un entier dans laquelle la fonction renvoie l’heure
à laquelle le fichier a été créé. Cette heure correspond à la valeur horaire du système
d’exploitation. Pour plus d’informations sur la valeur horaire du système d’exploitation, voir
DWfile.getCreationDate() dans le Guide des API de Dreamweaver.
char *fileURL
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec. Renvoie la valeur
JS_FALSE si le fichier n’existe pas ou si une erreur se produit pendant l’obtention des attributs.
Exemple
char dwConfig = "file:///c|/Program Files/Macromedia/Dreamweaver/
Configuration/Extensions.txt";
unsigned long attrs;
unsigned long filesize;
unsigned long modtime;
unsigned long createtime;
MM_GetConfigAttributes(dwConfig, &attrs, &filesize, &modtime, &createtime);
JSBool MM_SetConfigFileAttributes()
Disponibilité
Dreamweaver MX.
Description
Applique les attributs que vous spécifiez pour le fichier, s’ils diffèrent des attributs actuels.
Si l’URL de fichier spécifiée décrit un chemin d’accès au dossier Configuration de Dreamweaver,
cette fonction commence par copier le fichier dans le dossier de configuration de l’utilisateur
avant d’appliquer les attributs. Si les attributs sont identiques aux attributs actuels du fichier, ce
dernier n’est pas copié.
388
Chapitre 21 : Extensions C
Arguments
char *fileURL, unsigned long attrs
•
•
est un pointeur vers une chaîne qui nomme le fichier dont vous souhaitez
définir les attributs, exprimé sous la forme d’une URL de fichier (file://).
unsigned long attrs spécifie les bits d’attribut à appliquer au fichier. Vous pouvez utiliser
l’opérateur logique OR dans les constantes suivantes pour définir les attributs :
char *fileURL
MM_FILEATTR_NORMAL
MM_FILEATTR_RDONLY
MM_FILEATTR_HIDDEN
MM_FILEATTR_SYSTEM
MM_FILEATTR_SUBDIR
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec. Renvoie JS_FALSE si le
fichier n’existe pas ou s’il va être supprimé.
Exemple
char *dwConfig = "file:///c|/Program Files/Macromedia/Dreamweaver/
Configuration/Extensions.txt";
unsigned long attrs;
attrs = (MM_FILEATTR_NORMAL | MM_FILEATTR_RDONLY);
int fileno = 0;
if(MM_SetConfigFileAttrs(dwConfig, attrs))
{
fileno = MM_OpenConfigFile(dwConfig);
}
JSBool MM_CreateConfigFolder()
Disponibilité
Dreamweaver MX.
Description
Crée un dossier à l’emplacement spécifié.
Si l’argument fileURL indique un dossier dans le dossier Configuration de Dreamweaver, la
fonction crée le dossier dans le dossier de configuration de l’utilisateur. Si fileURL n’indique pas
un sous-dossier du dossier Configuration de Dreamweaver, la fonction crée le dossier ainsi que
tous ses dossiers parents dans le chemin d’accès, si ceux-ci n’existent pas déjà.
Arguments
char *fileURL
•
char *fileURL est un pointeur vers une chaîne qui nomme le dossier de configuration à créer,
exprimé sous la forme d’une URL de fichier (file://).
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
Exemple
char *dwConfig = "file:///c|/Program Files\Macromedia\Dreamweaver
\Configuration\Extensions.txt";
MM_CreateConfigFolder(dwConfig);
API de configuration multiutilisateur et d’accès aux fichiers
389
JSBool MM_RemoveConfigFolder()
Disponibilité
Dreamweaver MX.
Description
Supprime le dossier ainsi que ses fichiers et sous-dossiers. Si le sous-dossier se trouve dans le
dossier Configuration de Dreamweaver, il marque le dossier pour suppression dans le fichier
mm_deleted_files.xml.
Arguments
char *fileURL
•
est un pointeur vers une chaîne qui nomme le dossier à supprimer, exprimé
sous la forme d’une URL de fichier (file://).
char *fileURL
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
Exemple
char *dwConfig = "file:///c|/Program Files\Macromedia\Dreamweaver
\Configuration\Objects";
MM_RemoveConfigFolder(dwConfig);
JSBool MM_DeleteConfigFile()
Disponibilité
Dreamweaver MX.
Description
Cette fonction supprime le fichier le cas échéant. Si le fichier existe dans le dossier Configuration
de Dreamweaver, la fonction marque le fichier pour suppression dans le fichier
mm_deleted_files.xml.
Si l’argument fileURL n’indique pas de dossier dans le dossier Configuration de Dreamweaver, la
fonction supprime le fichier spécifié.
Arguments
char *fileURL
•
est un pointeur vers une chaîne qui nomme le dossier de configuration à
supprimer, exprimé sous la forme d’une URL de fichier (file://).
char *fileURL
Valeurs renvoyées
Valeur booléenne : JS_TRUE en cas de réussite ; JS_FALSE en cas d’échec.
Exemple
char dwConfig = "file:///c:|Program Files\Macromedia\Dreamweaver
\Configuration\Objects\insertbar.xml";
MM_DeleteConfigFile(dwConfig);
390
Chapitre 21 : Extensions C
Appel d’une fonction C à partir de JavaScript
A présent que vous savez comment fonctionnent les extensions C dans Dreamweaver et que vous
connaissez les fonctions et les types de données sur lesquels elles reposent, vous allez apprendre à
construire une bibliothèque et à appeler une fonction.
L’exemple qui suit nécessite les cinq fichiers suivants situés dans le dossier de l’application
Dreamweaver Samples/Extending sous forme d’archives, pour Macintosh et Windows :
• mm_jsapi.h est un fichier d’en-tête contenant les définitions des fonctions et des types de
•
•
•
•
données décrits dans Extensions C et interpréteur JavaScript, page 375.
Le fichier mm_jsapi_environment.h définit la structure MM_Environment.h.
Le fichier MMInfo.h fournit un accès à l’API de Design Notes.
Le fichier Sample.c example définit la fonction computeSum().
Le fichier Make Sample.mak permet de créer le fichier Sample.c source dans une DLL avec
Microsoft Visual C++. Sample.proj est l’équivalent pour créer une bibliothèque CFM avec
Metrowerks CodeWarrior. Si vous utilisez un autre outil, vous pouvez créer votre propre fichier
Make.
Pour créer la DLL sous Windows :
1 Dans Microsoft Visual C++, choisissez Fichier >Ouvrir un espace de travail, puis sélectionnez
Sample.mak.
2 Choisissez Générer > Tout reconstruire.
Une fois l’opération de génération terminée, le fichier Sample.dll apparaît dans le dossier qui
contient Sample.mak (ou dans l’un de ses sous-dossiers).
Pour générer la bibliothèque partagée sur Macintosh :
1 Ouvrez le fichier Sample.proj dans Metrowerks CodeWarrior.
2 Générez le projet pour créer une bibliothèque CFM.
Une fois l’opération terminée, le fichier Sample.dll apparaît dans le dossier contenant
Sample.proj (ou dans l’un de ses sous-dossiers).
Pour appeler la fonction computeSum() à partir de l’objet Insérer barre horizontale :
1 Dans le dossier Configuration du dossier de l’application Dreamweaver, créez un dossier appelé
JSExtensions.
2 Copiez le fichier Sample.dll (Windows) ou Sample (Macintosh) dans le dossier JSExtensions.
3 Dans un éditeur de texte, ouvrez le fichier HR.htm qui se trouve dans le dossier Configuration/
Objects/Common.
4 Ajoutez la ligne alert(Sample.computeSum(2,2)); à la fonction objectTag() pour qu’elle
apparaisse, comme indiqué dans l’exemple ci-dessous :
function objectTag() {
// Return the html tag that should be inserted
alert(Sample.computeSum(2,2));
return "<HR>";
}
5 Enregistrez le fichier et redémarrez Dreamweaver.
Pour exécuter la fonction computeSum(), sélectionnez Insertion > Barre horizontale.
Une boîte de dialogue contenant le chiffre 4 (résultat de la somme de 2 plus 2) s’affiche.
Appel d’une fonction C à partir de JavaScript
391
392
Chapitre 21 : Extensions C
Trouvez des informations concernant les fichiers de prise en charge et les ressources de référence
qui peuvent vous aider à développer des extensions Macromedia Dreamweaver MX 2004.
Annexe A : Dossier Shared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
PARTIEIII
PARTIE III
Annexe
ANNEXE A
Dossier Shared
Le dossier Shared est le lieu de stockage central des fonctions utilitaires, des classes et des images
utilisées communément par toutes les extensions. Toutes les extensions peuvent référencer les
fichiers dans les sous-dossiers du dossier Shared. Vous pouvez également ajouter des utilitaires
communs à ceux déjà fournis par Macromedia Dreamweaver MX 2004. Les dossiers
Configuration multiutilisateur installés pour les utilisateurs sous Windows XP, Windows 2000 et
Macintosh OS X contiennent également un dossier Shared autorisant les personnalisations. Par
exemple, lorsque vous installez une extension à partir de Macromedia Exchange, vous
remarquerez peut-être que la nouvelle extension ajoute des données à votre dossier Configuration/
Shared utilisateur plutôt qu’au dossier Configuration/Shared de l’application Dreamweaver. Pour
plus d’informations sur les dossiers Configuration de Dreamweaver sur un ordinateur
multiutilisateur, voir Dossiers de configuration multiutilisateur, page 24.
Contenu du dossier Shared
Le dossier Shared est divisé en sous-dossiers qui contiennent des fichiers partagés par plusieurs
extensions, notamment des fonctions permettant entre autres de naviguer dans le système de
dossiers des utilisateurs, d’insérer une commande d’arborescence et de créer des grilles
modifiables.
Remarque : Les fichiers JavaScript du dossier Shared contiennent des commentaires dans le code
qui fournissent des détails sur les fonctions qu’ils contiennent.
En plus de consulter les fichiers JavaScript dans le dossier Shared, consultez également les fichiers
HTML dans le dossier Configuration contenant ces fichiers JavaScript. Ils vous fourniront des
explications sur l’utilisation de ces fichiers.
En règle générale, vous serez amené à utiliser les fonctions et ressources des dossiers Common et
Macromedia (MM) ou à ajouter des ressources dans le dossier Common pour les utiliser dans de
nouvelles extensions. Commencez toujours par rechercher les utilitaires et les fonctions dans le
dossier Shared/Common/Scripts. Ces fonctions et utilitaires sont les plus récents et forment
l’interface formelle avec le dossier Shared. Les fichiers des autres dossiers risquent quant à eux de
ne pas être à jour.
Le dossier Shared contient plus spécifiquement les dossiers présentés ci-dessous.
395
Le dossier Common
Le dossier Common contient des scripts et des classes partagés à utiliser dans les extensions de
tiers.
CodeBehindMgr.js
Contient les fonctions permettant de créer un document codebehind. Un document code-behind permet de créer des pages
distinctes qui séparent le code relatif à la logique de l’interface
utilisateur (UI) du code relatif à une conception d’interface
utilisateur. Les méthodes de JSCodeBehindMgr définies dans ce
fichier permettent de créer de nouveaux documents code-behind
et de gérer le lien vers les documents de conception.
ColumnValueNodeClass.js
Contient des fonctions permettant d’associer les colonnes des
bases de données à des valeurs. Les méthodes de
ColumnValueNode définies dans ce fichier permettent d’obtenir et
de définir plusieurs valeurs et propriétés d’une colonne de base
de données. Dreamweaver utilise cette classe de stockage
lorsqu’il applique et inspecte des objets d’opérations de
modification (insertion et mise à jour d’enregistrements) et
lorsqu’il utilise la classe SQLStatement.
CompilerClass.js
Contient des fonctions pour une classe de base utilisée par
CompilerASPNetCSharp et CompilerASPNVBNet mais peut être
étendu de façon à prendre en charge d’autres compilateurs.
396
DataSourceClass.js
Contient des fonctions qui définissent la structure de renvoi pour
findDynamicSources().
DBTreeControlClass.js
Contient des fonctions qui créent une commande
d’arborescence de base de données. Cette classe permet de
créer et d’interagir avec une commande d’arborescence de base
de données. Pour créer une commande d’arborescence de base
de données comme celle des comportements de serveurs de
jeux d’enregistrements avancés, créez une liste <select> avec
type="mmdatabasetree" dans votre fichier HTML. Joignez une
classe CBTreeControl à la commande HTML en transmettant le
nom de la liste <select> à l’élaborateur de la classe. Utilisez
ensuite les fonctions DBTreeControl pour manipuler la
commande.
dotNetUtils.js
Contient des fonctions permettant de faciliter l’utilisation des
inspecteurs de propriétés des objets et des comportements de
serveur pour les contrôles de formulaires ASP.NET qui sont
traduits.
dwscripts.js
Vous trouverez dans le fichier principal des fonctions utiles à
toutes les extensions Dreamweaver. Il comprend des fonctions
permettant d’utiliser des chaînes, des fichiers, des Design Notes,
etc.
dwscriptsExtData.js
Ce fichier est une extension du fichier dwscripts.js. Il facilite
l’utilisation des comportements de serveur, en particulier avec les
fichiers EDML de comportements de serveurs. Utilisé très
largement dans l’implémentation des comportements de serveur
dans Dreamweaver.
Annexe A : Dossier Shared
dwscriptsServer.js
Ce fichier est une extension du fichier dwscripts.js. Il contient des
fonctions spécifiques aux modèles de serveur. Un grand nombre
de ces fonctions sont utilisées pour travailler avec les
comportements de serveur.
GridControlClass.js
Utilisez cette classe pour créer et manipuler une grille modifiable.
Vous devez ajouter une liste de sélection spéciale à votre page
HTML et y joindre cette classe dans JavaScript pour manipuler la
grille.
ImageButtonClass.js
Cette classe facilite le contrôle de l’aspect du bouton : pression,
survol de souris pendant pression, survol de souris et désactivé
pendant pression.
ListControlClass.js
Contient les fonctions permettant de gérer une balise <select> >.
Egalement appelé contrôle de liste. Les méthodes de l’objet
ListControl dans ce fichier permettent d’obtenir, de définir et de
changer la valeur de la commande SELECT.
PageSettingsASPNet.js
Contient les fonctions permettant de définir les propriétés d’un
document ASP.NET.
RadioGroupClass.js
Contient les fonctions permettant de définir et de gérer un groupe
de boutons radio. Les méthodes de l’objet RadioGroup de ce
fichier permettent de définir et d’obtenir les valeurs et le
comportement d’un groupe de boutons radio. Vous devez joindre
cette classe aux boutons radio dans votre document HTML pour
contrôler leur comportement.
SBDatabaseCallClass.js
Sous-classe de la classe ServerBehavior. Cette classe comprend
des fonctionnalités spécifiques à la création d’appels de bases de
données, par exemple l’appel d’une procédure stockée,
l’utilisation de SQL pour renvoyer un jeu d’enregistrements, etc. Il
s’agit d’une classe de base abstraite, ce qui signifie qu’elle ne
peut pas être créée et utilisée seule. Pour l’utiliser, vous devez
définir SBDatabaseCall() comme sous-classe et implémenter les
fonctions d’espace réservé. Dreamweaver utilise cette classe
pour implémenter ses comportements de serveur de jeux
d’enregistrements et de procédures stockées.
ServerBehaviorClass.js
Contient des fonctions permettant de communiquer des
informations concernant les comportements de serveur à
Dreamweaver. Vous pouvez définir cette classe en sous-classe
lorsque vous implémentez vos comportements de serveur.
ServerSettingsASPNet.js
Contient des fonctions permettant de stocker les propriétés d’un
serveur ASP.NET.
SQLStatementClass.js
Contient des fonctions permettant de créer et de modifier des
instructions SQL telles que SELECT, INSERT, UPDATE, DELETE et des
instructions de procédures stockées.
tagDialogsCmn.js
Contient des fonctions visant à vous aider à développer des
boîtes de dialogue de balise personnalisées. Les méthodes de
l’objet tagDialog définies dans ce fichier modifient les attributs et
les valeurs d’une balise particulière.
Contenu du dossier Shared
397
TagEditClass.js
Contient des fonctions permettant de modifier des balises sans
changer le DOM de la page en cours. Les méthodes de l’objet
TagEdit définies dans ce fichier permettent d’obtenir et de définir
la valeur, les attributs et les enfants d’une balise. Cette classe est
utile pour créer des modifications complexes, le DOM ne
devenant pas obsolète.
TreeControlClass.js
Contient des fonctions permettant de gérer une commande
d’arborescence dans Dreamweaver. Les méthodes de l’objet
TreeControl définies dans ce fichier permettent d’obtenir, de
définir et d’organiser les valeurs dans une arborescence. Vous
devez joindre cette classe à une balise MM:TREECONTROL spéciale
dans votre page HTML pour gérer la fonctionnalité de la
commande d’arborescence.
XMLPropSheetClass.js
Contient des fonctions permettant de gérer l’emplacement et les
valeurs d’une fiche de propriétés XML.
Le dossier MM
Le dossier MM contient les scripts, les images et les classes partagés utilisés par les extensions
fournies avec Dreamweaver, comme les scripts de création d’une barre de navigation, spécifiant les
appels pré chargés, et les définitions des raccourcis clavier.
Dossier Scripts
Le sous-dossier Scripts contient les fonctions utilitaires suivantes :
398
CFCutilities.js
Contient les fonctions utilitaires liées aux composants
ColdFusion. Les fonctions permettent d’analyser les attributs
depuis la balise d’ouverture d’un nœud donné, d’analyser une
arborescence CFC, d’obtenir le DOM d’URL en cours, d’obtenir
le DOM de CFC, etc.
event.js
Contient des fonctions permettant d’enregistrer les événements,
de notifier les parties des événements à partir du fichier
menus.xml et d’ajouter des notificateurs d’événement au fichier
menus.xml.
FlashObjects.js
Contient des fonctions permettant de mettre à jour un sélecteur
de couleur, de vérifier la couleur hex, de vérifier un lien absolu,
d’ajouter une extension à un nom de fichier, de générer des
messages d’erreur, de définir des attributs Flash, de vérifier un
lien vers un objet Flash, etc.
insertFireworksHTML.js
Contient des fonctions permettant d’insérer un code HTML
Fireworks dans les documents Dreamweaver. Les fonctions
permettent de vérifier si le document en cours est un document
Fireworks, d’insérer du code HTML Fireworks au point
d’insertion, de mettre à jour le bloc de style Macromedia
Fireworks par rapport à Dreamweaver, etc. Contient également
des fonctions utilitaires liées.
Annexe A : Dossier Shared
jumpMenuUI.js
Contient des fonctions à utiliser avec l’objet Menu de reroutage et
le comportement Menu de reroutage. Les fonctions permettent
de compléter les options de menus, de créer une étiquette
d’option, d’ajouter une option, de supprimer une option, etc.
keyCodes.js
Contient un tableau de codes de raccourcis clavier.
navBar.js
Contient des classes et des fonctions permettant de travailler
avec une barre de navigation et des éléments de la barre de
navigation. Comprend des fonctions permettant d’ajouter, de
supprimer et de manipuler des éléments de la barre de
navigation.
NBInit.js
Contient des fonctions liées aux comportements des images de
barre de navigation.
pageEncodings.js
Définit différents codes de langue.
preload.js
Contient des fonctions permettant d’ajouter et de supprimer des
appels d’images pré chargées dans le gestionnaire BODY/onLoad
MM_preloadImages.
RecordsetDialogClass.js
Contient la classe statique et les fonctions permettant d’afficher
l’interface utilisateur des comportements de serveur de jeux
d’enregistrements. Les fonctions déterminent l’interface à
afficher, simple ou avancée. Héberge également des
fonctionnalités partagées entre les implémentations de l’interface
utilisateur et permet de passer d’une interface utilisateur à une
autre.
sbUtils.js
Contient des fonctions partagées à utiliser dans les
comportements de serveur Macromedia. La classe dwscripts du
dossier Configuration/Shared/Common/Scripts contient des
utilitaires plus généraux.
setText.js
Contient des fonctions permettant de quitter une chaîne
d’expression, de revenir à une chaîne d’expression et d’extraire
une chaîne d’expression.
sortTable.js
Contient des fonctions permettant d’initialiser et de trier un
tableau, ainsi que des fonctions permettant de trier un tableau, de
définir le pointeur de la souris en icône de main ou en pointeur et
de vérifier le type et la version du navigateur.
Le dossier Scripts contient également deux sous-dossiers : Class et CMN.
Contenu du dossier Shared
399
Dossier Class
Le dossier Class contient les fonctions utilitaires suivantes :
classCheckbox.js
Aide à manipuler une commande de champ de texte dans votre
extension HTML.
FileClass.js
Contient une classe représentant un fichier dans le système de
fichiers. Les chemins sont représentés par des URL pour garantir
la compatibilité entre plates-formes. Les méthodes sont
toString(), getName(), getSimpleName(), getExtension(),
getPath(), setPath(), isAbsolute(), getAbsolutePath(),
getParent(), getAbsoluteParent(), exists(), getAttributes(),
canRead(), canWrite(), isFile(), isFolder(), listFolder(),
createFolder(), getContents(), setContents(), copyTo() et
remove().
GridClass.js
Contient une classe permettant de gérer MM:TREECONTROL.
GridControlClass.js
Version plus ancienne de GridControlClass dans le dossier
Common. Voir le fichier GridControlClass.js du dossier Shared/
Common/Scripts.
ImageButtonClass.js
Version plus ancienne de ImageButtonClass dans le dossier
Common. Voir le fichier ImageButtonClass.js du dossier Shared/
Common/Scripts.
ListControlClass.js
Version plus ancienne de ListControlClass dans le dossier
Common. Voir le fichier Shared/Common/Scripts/
ListControlClass.js.
NameValuePairClass.js
Crée et gère une liste de paires nom/valeur. Les noms peuvent
comporter n’importe quels caractères. Les valeurs peuvent être
vides, mais elles ne peuvent pas être définies sur null, qui
reviendrait à les supprimer.
PageControlClass.js
Exemple d’une classe de page à utiliser avec la classe
TabControl. Voir la classe TabControl.
PreferencesClass.js
Contient un objet et des méthodes contenant toutes les
informations de préférences d’une commande.
RadioGroupClass.js
Version plus ancienne de RadioGroupClass dans le dossier
Common. Voir le fichier RadioGroupClass.js du dossier Shared/
Common/Scripts.
TabControlClass.js
Aide à créer une extension ayant plusieurs onglets,
page.lastUnload()
400
Annexe A : Dossier Shared
Dossier CMN
Le dossier CMN contient les fonctions utilitaires suivantes :
dateID.js
Contient deux fonctions, createDateID() et decipherDateID().
Pour trois chaînes données, dayFormat, dateFormat et
timeFormat, createDateID() crée un ID pour chacune d’elles.
Pour un tableau de dates donné, decipherDateID() renvoie un
tableau contenant trois éléments : dayFormat, dateFormat et
timeFormat.
displayHelp.js
Contient une fonction permettant d’afficher le document d’aide
spécifié.
docInfo.js
Contient des fonctions qui fournissent des informations sur le
document de l’utilisateur. Ces fonctions permettent d’effectuer
des opérations telles que le renvoi d’un tableau de références
d’objets pour un type de navigateur et une balise spécifiés, le
renvoi de toutes les instances d’un nom de balise spécifié, la
recherche d’une balise qui entoure la sélection en cours, etc.
DOM.js
Contient des fonctions d’aide générales pour utiliser le DOM
Dreamweaver. Comprend des fonctions qui permettent d’obtenir
le nœud racine du document actif, de trouver la balise d’un nom
donné, de créer une liste de nœuds à partir du nœud de départ
spécifié, de vérifier si une balise donnée est contenue dans une
autre balise, d’effectuer diverses opérations sur les fonctions de
comportement, etc.
enableControl.js
Contient une fonction, SetEnabled(), qui permet d’activer ou de
désactiver une commande en fonction des arguments qu’elle
reçoit. Il est possible d’activer une commande déjà activée ou de
désactiver une commande déjà désactivée.
errmsg.js
Contient des fonctions de connexion pour accumuler la sortie de
tracés dans un tableau de pages de connexion qui apparaissent
dans une boîte de dialogue.
file.js
Contient des fonctions en rapport avec des opérations sur les
fichiers. Ces fonctions permettent à l’utilisateur de rechercher un
nom de fichier local, de convertir le chemin relatif en chemin URL
du fichier, de renvoyer le nom de fichier du document en cours,
de déterminer si un document spécifié a été enregistré sur le site
en cours et de renvoyer son chemin relatif, ou de déterminer si un
fichier spécifié est ouvert.
form.js
Contient des fonctions permettant d’ajouter un formulaire autour
d’une chaîne de texte donnée si un formulaire n’existe pas déjà
dans le document ou le calque en cours. Comprend des fonctions
permettant de déterminer si un objet est un calque et si le curseur
se trouve à l’intérieur d’un formulaire.
handler.js
Contient des fonctions permettant d’obtenir une fonction pour un
gestionnaire d’événement, d’ajouter une fonction à un
gestionnaire d’événement et de supprimer une fonction d’un
gestionnaire d’événement.
Contenu du dossier Shared
401
402
helper.js
Contient diverses fonctions utiles permettant de remplacer le
codage, de rétablir les guillemets ("), de vérifier si un nœud se
trouve dans une plage de sélection et de vérifier s’il existe des
noms d’objets en double.
insertion.js
Contient la fonction insertIntoDocument(), qui insère une chaîne
de texte dans un document au point d’insertion. Contient
également les fonctions de prise en charge getHigherBlockTag()
et arrContains(). La fonction getHigherBlockTag() permet
d’obtenir le prochain blockTag le plus élevé, comme défini dans
le tableau blockTags. La fonction arrCon() permet de localiser un
élément spécifié dans un tableau.
localText.js
Variables réservées, non destinées à un usage général. Utilisez
Startup/mminit.htm à la place ou utilisez les chaînes provenant
des fichiers Dreamweaver Configuration/Strings/*.xml.
menuItem.js
Contient des fonctions permettant d’ajouter des étoiles ou des
valeurs à un élément de menu et de les supprimer.
niceName.js
Contient des fonctions permettant de convertir un tableau de
références Object en un tableau de noms plus simples.
quickString.js
Contient des fonctions permettant de regrouper des chaînes de
petite taille sans avoir à allouer de la mémoire à chaque fois.
string.js
Contient un ensemble générique de fonctions permettant de
manipuler et d’analyser des chaînes de texte. Ces fonctions sont :
extractArgs(),
escQuotes(), unescQuotes(), quoteMeta(), errMsg(), badChars(),
getParam(), quote(), stripSpaces(), StripChars(),
AllInRange(), reformat(), trim(), createDisplayString(),
entityNameEncode(), entityNameDecode(), stripAccelerator()
et SprintF(),
TemplateUtils.js
Contient des fonctions utilitaires pour les modèles Dreamweaver.
Ces fonctions permettent d’insérer une région modifiable dans un
document, d’insérer une région répétée dans un document, de
rechercher une région modifiable spécifiée dans un document,
etc.
UI.js
Contient des fonctions génériques qui contrôlent l’interface
utilisateur. Ces fonctions permettent de localiser un objet désigné
dans le document en cours, de charger les options de liste de
sélection avec des chaînes localisées, de renvoyer la valeur de
l’attribut d’une option sélectionnée et d’envelopper le message
d’une alerte.
Annexe A : Dossier Shared
Autres dossiers
La liste suivante décrit les autres dossiers intéressants du dossier Shared :
• Controls
Le dossier Controls contient les éléments utilisés pour créer un comportement de serveur. Ces
contrôles comprennent des interfaces pour les menus de texte et de jeux d’enregistrements.
Remarque : Ces contrôles sont utilisés par le Créateur de comportements de serveur de
Dreamweaver et par de nombreux comportements de serveur de Dreamweaver, mais certains
sont utiles pour gérer un contrôle dans votre extension.
• Fireworks
Le dossier Fireworks contient les fichiers de prise en charge pour l’intégration de Fireworks.
• UltraDev
Dreamweaver conserve ce dossier principalement pour des raisons de compatibilité. Il ne doit
pas être utilisé pour les nouvelles extensions. Utilisez le dossier Dreamweaver Configuration/
Shared/Common, qui contient également la majeure partie de cette fonctionnalité. Voir Le
dossier Common, page 396.
Utilisation du dossier Shared
Commencez par rechercher les codes d’extension dans le dossier Dreamweaver Configuration/
Shared/Common. Ce dossier contient en effet les fonctionnalités les plus courantes et les plus
récentes.
Les extensions peuvent utiliser les ressources du dossier Shared pour leur propre fonctionnalité.
Un objet, une commande ou une autre extension peuvent spécifier l’un des fichiers JavaScript
dans le dossier Shared comme fichier source dans une balise script, puis utiliser cette fonction
dans le corps du fichier ou dans un autre fichier JavaScript inclus. Les objets et les commandes
peuvent même lier plusieurs fichiers JavaScript ensemble et ces fichiers JavaScript peuvent utiliser
les ressources du dossier Shared.
Par exemple, ouvrez le fichier d’objet Hypertext (Hyperlink.htm) dans le dossier d’application
Configuration/Objects/Common. Remarquez que la balise d’en-tête contient les lignes suivantes :
<script language="javascript" src="../../Shared/Common/Scripts/
ListControlClass.js"></script>
<script language="javascript" src="Hyperlink.js"></script>
Si vous ouvrez le fichier Hyperlink.js lié, les lignes suivantes apparaissent :
LIST_LINKS = new ListControl(’linkPath’);
et
LIST_TARGETS = new ListControl(’linkTarget’);
Avec les nouvelles déclarations listControl, Hyperlink.js définit deux nouveaux objets
ListControl. Le code du fichier Hyperlink.htm les joint ensuite aux commandes SELECT du
formulaire, comme suit :
<td align="left"> <input name="linkText" type="text" class="basicTextField"
value="">
et
<td align="left" nowrap><select name="linkPath" class="basicTextField"
editable="true">
Utilisation du dossier Shared
403
Le script Hyperlink.js peut maintenant appeler les méthodes ou obtenir les propriétés des objets
LIST_LINKS ou LIST_TARGETS pour qu’ils interagissent avec les commandes SELECT du
formulaire.
404
Annexe A : Dossier Shared
INDEX
A
addDynamicSource() 307
alert() 70
analyzeServerBehavior() 261
ancrage de barres d’outils 178
API d’éditeur de balises
applyTag() 224
inspectTag() 223
validateTag() 224
API d’extension, types 21
API d’inspecteur de propriétés
canInspectSelection() 227
displayHelp() 227
inspectSelection() 228
API de commande de barre d’outils
canAcceptCommand() 195
getCurrentValue() 195
getDynamicContent() 196
getMenuID() 197
getUpdateFrequency() 198
isCommandChecked() 199
isDOMRequired() 200
receiveArguments() 201
showIf() 201
API de commandes
commandButtons() 143
isDomRequired() 143
receiveArguments() 144
windowDimensions() 144
API de comportement de serveur
analyzeServerBehavior() 261
applyServerBehavior() 262
canApplyServerBehavior() 263
copyServerBehavior() 263
deleteServerBehavior() 264
displayHelp() 264
findServerBehaviors() 265
inspectServerBehavior() 265
pasteServerBehavior() 266
API de comportements
applyBehavior() 245
behaviorFunction() 246
canAcceptBehavior() 247
deleteBehavior() 248
displayHelp() 248
identifyBehaviorArguments() 249
inspectBehavior() 250
windowDimensions() 251
API de formats de serveur
applyFormat() 324
applyFormatDefinition() 325
deleteFormat() 325
formatDynamicDataRef() 326
inspectFormatDefinition() 327
API de modèle de serveur
à propos 345
canRecognizeDocument() 346
getFileExtensions() 346
getLanguageSignatures() 347
getServerExtension() 348
getServerInfo() 348
getServerLanguages() 349
getServerModelDelimiters() 350
getServerModelDisplayName() 350
getServerModelExtDataNameUD4() 349
getServerModelFolderName() 350
getServerSupportsCharset() 351
getVersionArray() 351
API de rapports
beginReporting() 208
commandButtons() 209
configureSettings() 210
endReporting() 209
405
processfile() 208
windowDimensions() 210
API de sources de données
addDynamicSource() 307
deleteDynamicSource() 307
displayHelp() 308
editDynamicSource() 309
findDynamicSources() 309
generateDynamicDataRef() 310
generateDynamicSourceBindings() 310
inspectDynamicDataRef() 311
API de traducteur de données
getTranslatorInfo() 354
liveDataTranslateMarkup() 356
translateMarkup() 356
API des commandes
canAcceptCommand() 142
API des commandes de menu
canAcceptCommand() 163
commandButtons() 163
getDynamicContent() 164
isCommandChecked() 165
receiveArguments() 166
setMenuText() 166
windowDimensions() 167
API du panneau Composants, fonctions
getCodeViewDropCode() 334
getComponentChildren() 333
getContextMenuId() 333
getSetupSteps() 335
handleDoubleClick() 339
setupStepsCompleted() 337
toolbarControls() 341
API du panneau flottant
displayHelp() 233
documentEdited() 233
getDockingSide() 234
initialPosition() 234
initialTabs() 235
isATarget() 235
isAvailableInCodeView() 236
isResizable() 236
selectionChanged() 237
API, types
commande de barre d’outils 194
Commandes 142
Commandes de menu 163
Comportement de serveur 261
Comportements 245
éditeur de balises 223
406
Index
Extensions C 376
formatage de données 321
Formats de serveur 324
Inspecteur de propriétés 227
Modèle de serveur 345
objets 127
panneau Composants 333
panneau flottant. 233
Rapports 208
Sources de données 307
Traducteur de données 353
applyBehavior() 245
applyFormat() 324
applyFormatDefinition() 325
applySB() 267
applyServerBehavior() 262
applyTag() 224
appName, propriété 76
appVersion, propriété 76
arborescence, XML 70
arguments
fournis à partir d’un élément de menu 162
receiveArguments() 166
arguments, attribut 194
arrêt, commandes 25
aspect des boîtes de dialogue 32
assistance, fonctions dans les comportements 245
attribut image 189
attributes, balise 294
attributs
arguments 194
balises d’éléments de barre d’outils 189
checked 192
colorRect, attribut 191
command 193
disabledImage 190
domRequired 192
enabled 192
file 191
id 189
image 189
label 190
menu_ID, attribut 191
overImage 190
showIf 189
tooltip, attribut 190
update 193
value 192
width 191
attributs traduits
individuels 358
inspection 362
multiple 358
recherche dans les balises 74
attributs, propriété 74
B
balise d’élément 31
balise de titre 274
balise, objet 74
balises propriétaires
éviter la modification 39
modification de l’affichage de 29
modification de la couleur de surbrillance 38
personnalisation de l’interprétation de 34
tagspec 35
balises traduites, inspection 368
barre d’outils, balise 180
barre d’outils, extensions:définition 22
Barre Insérer
ajout d’objets 126
fichier de définition 118
barre Insérer
modification 29
barres d’outils
ancrage 178
API de commande 194
attributs de balise 189
barre d’outils, balise 180
button, balise 184
checkbutton, balise 185
colorpicker, balise 188
combobox, balise 187
contrôles 177
création 177
définition de fichier 179
dropdown, balise 187
editcontrol, balise 188
fichier toolbars.xml 177
fonctionnement des barres d’outils 177
fonctionnement des commandes 179
include/, balise 182
item, balises 184
itemref/, balise 183
itemtype/, balise 182
menubutton, balise 186
radiobutton, balise 185
separator, balise 183
simple fichier de commandes 202
base de données, contrôles 59
beginReporting() 208
behaviorFunction() 246
Bibliothèques de balises 212
blockEnd, balise
coloration du code 89
blockStart, attribut
description de 101
valeur customText 102
valeur innerTag 103
valeur innerText 101
valeur nameTag 103
valeur nameTagScript 103
valeur outerTag 102
blockStart, balise
coloration du code 89
blur() 70
body, propriété 73
boîte de dialogue de balises, extensions:définition 22
boîtes de dialogue, personnalisation de l’aspect 32
booléen, objet 70
bouton de couleur 65
bouton radio, objet 70
bouton, objet 70
brackets, balise
coloration du code 90
button, balise 120, 184
C
C extensibility API
JS_BooleanToValue() 379
JS_DoubleToValue() 379
JS_ExecuteScript() 382
JS_GetArrayLength() 381
JS_GetElement() 381
JS_IntegerToValue() 380
JS_NewArrayObject() 381
JS_ObjectToValue() 380
JS_ObjectType() 380
JS_ReportError() 383
JS_SetElement() 382
JS_StringToValue() 379
JS_ValueToBoolean() 378
JS_ValueToDouble() 377
JS_ValueToInteger() 377
JS_ValueToObject() 378
JS_ValueToString() 377
MM_ConfigFileExists() 386
MM_GetConfigFileAttributes() 387
Index
407
MM_GetConfigFolderList() 385
MM_OpenConfigFile() 386
calque, objet 70
canAcceptBehavior() 247
canAcceptCommand() 163, 195
canApplyServerBehavior() 263
canDrag, attribut 122
canInsertObject() 127
canRecognizeDocument() 346
case à cocher, objet 70
category, balise 119
chaîne, objet 70
chaînes localisées 46
charEnd, balise
coloration du code 90
charEsc, balise
coloration du code 91
charStart, balise
coloration du code 90
checkbutton, balise 121, 185
checked, attribut 123, 192
childNodes, propriété
des objets balise 74
des objets de document 73
objets commentaire 76
objets texte 75
clearInterval() 70
clearTimeout() 70
close() 70
closeTag, balise 296
code, coloration
à propos 86
blockEnd, balise 89
blockStart, balise 89
brackets, balise 90
charEnd, balise 90
charEsc, balise 91
charStart, balise 90
commentEnd, balise 91
commentStart, balise 91
CSS, échantillon 109
cssImport, balise 92
cssMedia, balise 92
cssProperty, balise 92
cssSelector, balise 93
cssValue, balise 93
defaultAttribute, balise 93
defaultTag, balise 94
defaultText, balise 94
408
Index
endOfLineComment, balise 94
entity, balise 95
exemples 109
fichier 86
functionKeyword, balise 95
idChar1, balise 95
idCharRest, balise 96
ignoreCase, balise 96
ignoreMMTParams, balise 96
ignoreTags, balise 97
isLocked, balise 97
JavaScript 110
keyword, balise 97
keywords, balise 98
modification des modèles 107
numbers, balise 98
operators, balise 98
regexp, balise 99
sampleText, balise 99
scheme, balise 88
searchPattern, balise 100
stringEnd, balise 100
stringEsc, balise 101
stringStart, balise 100
style, fichier Colors.xml 86
tagGroup, balise 101
traitement des modèles 104
code, validation 111
colorpicker, balise 188
colorRect, attribut 191
Colors.xml, fichier 86
combobox, balise 187
command, attribut 123, 193
commandButtons() 143, 163, 209
commande de menu, extensions
définition 21
commande, extensions
définition 21
commandes
ajout aux menus 142
ajout de fichiers SWF Flash 66
barre d’outils 179
commandes de menu 151
exemple de code 145
expérience de l’utilisateur 141
commandes d’arborescence 59, 60, 62
commandes d’arborescence de base de données 60
commandes d’arborescence, manipulation du
contenu 64
commandes de menu
à propos 161
exemple de code 167
expérience de l’utilisateur 162
commentEnd, balise
coloration du code 91
commentStart, balise
coloration du code 91
comportement de serveur, extensions
définition 22
comportement, extensions
définition 22
Comportements
API 245
exemple de code 252
expérience de l’utilisateur 244
fonctions d’assistance 245
fonctions requises 245
insertion de plusieurs fonctions 245
composant de service, ajout 331
composant, extensions
définition 22
conceptions de pages 32
configureSettings() 210
confirm() 70
constantes de nœud 70
contenu verrouillé, inspection 368
Conventions, dans ce manuel 17
copyServerBehavior() 263
css-support, balise
validation du code 112
cssImport, balise
coloration du code 92
cssMedia, balise
coloration du code 92
cssProperty, balise
coloration du code 92
cssSelector, balise
coloration du code 93
cssValue, balise
coloration du code 93
customText, valeur
blockStart 102
D
date, objet 70
defaultAttribute, balise
coloration du code 93
defaultTag, balise
coloration du code 94
defaultText, balise
coloration du code 94
delete, balise 289
deleteBehavior() 248
deleteditems, balise 31
deleteDynamicSource() 307
deleteFormat() 325
deleteSB() 268
deleteServerBehavior() 264
deleteType, attribut 290
démarrage, commandes 25
description, balise 82
désinstallation 32
disabledImage, attribut 190
display, balise 295
displayHelp()
dans l’API d’inspecteur de propriétés 227
dans l’API de comportement de serveur 264
dans l’API de sources de données 308
dans l’API du panneau flottant 233
dans les API de comportements 248
dans les API des objets 128
dans les fichiers d’objet 128
DOCTYPE 56
document, objet
DOM niveau 1, propriétés et méthodes de 73
Netscape DOM, propriétés et méthodes 70
document, ouverture 53
documentEdited() 233
documentElement, propriété 73
documents par défaut, personnalisation 32
DOM de Dreamweaver 70
DOM. <italic>Voir Modèle d’objet de document.
domRequired, attribut 192
Données dynamiques, boîte de dialogue 305
données, propriété
objets commentaire 76
objets texte 75
dossier menu, enregistrement du fichier de commandes
170
dreamweaver, objet 76, 77
Dreamweaver, personnalisation ou extension 13
dropdown, balise 187
dwscripts, fonctions
applySB() 267
deleteSB() 268
findSBs() 266
Index
409
E
editcontrol, balise 188
editDynamicSource() 309
éditeur de balises, création 223
EDML, définition 255
EDML, fichiers
à propos 256
fichier groupe, balises 271
modification 269
structure EDML 270
utilisation d’expressions régulières 269
EMPLACEMENT-MENU 260
enabled, attribut 123, 192
endOfLineComment, balise
coloration du code 94
endReporting() 209
entity, balise
coloration du code 95
envoyer, objet 70
errata 16
escape() 70
espace de travail, Dreamweaver MX 178
événements
dans les fichiers d’extension 70
rôle dans les comportements 243
expressions régulières dans les fichiers EDML 269
extensibilité de niveau C, dans les traducteurs 353
Extension Data Markup Language (EDML) 256
Extension Manager
consignes 55
utilisation 28
extensions
activation de fonctions 21
commande de bouton couleur pour 65
Dreamweaver 13
installation 14
extensions de document 50
Extensions et dossiers de configuration 23
Extensions.txt, fichier 50
F
fenêtre, objet 70
fichier CodeHints.xml
contenu 80
description de 79
fichier de définition, type de document 44
fichier EDML, balises
attributs 294
closeTag 296
410
Index
delete 289
deleteType, attribut 290
display 295
group 271
groupParticipant 275
groupParticipants 274
groupParticipants, attributs de balise 275
insertText 278, 279
isOptional, attribut 286
limitSearch, attribut 285, 292
location, attribut 279
name, attribut 276
nodeParamName, attribut 281
openTag 294
paramName, attribut 289
paramNames, attribut 285
participant 277
partType, attribut 276
quickSearch 278
searchPatterns 282, 291
selectParticipant, attribut 275
subType, attribut 273
title 274
translation 292
translations 291
translationType, attribut 293
translator 291
updatePattern 287, 289
updatePatterns 287
version, attribut 277
whereToSearch, attribut 292
fichier groupe, balises 271
fichier insertbar.xml 117, 126
fichier menus.xml
à propos 151
menu, balise 153
menubar, balise 152
menuitem, balise 154
modification 158
separator, balise 156
shortcut, balise 157
shortcutlist, balise 156
fichier toolbars.xml 177, 179
fichiers
CodeHints.xml 80
insertbar.xml 126
menus.xml 151
mm_deleted_files.xml 30
MMDocumentTypes.xml 44
toolbars.xml 177
XML 70
fichiers d’action 243
fichiers JavaScript externes 25
fichiers XML
CodeHints.xml 80
insertbar.xml 126
menus.xml 151
MMDocumentTypes.xml 44
toolbars.xml 177
file, attribut 124, 191
findDynamicSources() 309
findSBs() 266
findServerBehaviors() 265
Flash SWF, fichiers, affichage dans Dreamweaver 66
focus() 70
fonction, objet 70
fonctions C
appel à partir de JavaScript 391
dans le fichier mm_jsapi.h 375
format de serveur, extensions
définition 22
formatage de données 321
formatDynamicDataRef() 326
formats 321
formulaire (champ), objet 70
formulaire, objet 70
fragment de code, extensions
définition 23
FTP, mappages
modification 43
function, balise 84
functionKeyword, balise
coloration du code 95
G
generateDynamicDataRef() 310
generateDynamicSourceBindings() 310
gestion des versions 76
gestionnaires d’événements
dans les boîtes de dialogue de comportement 244
dans les fichiers d’extension 25
renvoi d’une valeur de 252
getAttribute() 74
getCodeViewDropCode() 334
getComponentChildren() 333
getContextMenuId() 333
getCurrentValue() 195
getDockingSide() 234
getDynamicContent() 164, 196
getElementsByTagName()
pour les objets balise 74
pour les objets de document 73
getFileExtensions() 346
getLanguageSignatures() 347
getMenuID() 197
getServerExtension() 348
getServerInfo() 348
getServerLanguages() 349
getServerModelDelimiters() 350
getServerModelDisplayName() 350
getServerModelExtDataNameUD4() 349
getServerModelFolderName() 350
getServerSupportsCharset() 351
getSetupSteps() 335
getTranslatedAttribute() 74
getTranslatorInfo() 354
getUpdateFrequency() 198
getVersionArray() 351
grille de variables, contrôles 61
Groupe, fichiers 256
groupParticipant, balise 275
groupParticipants, attributs de balise 274
H
handleDoubleClick() 339
hasChildNodes()
pour les objets balise 74
pour les objets commentaire 76
pour les objets de document 73
pour les objets texte 75
hasTranslatedAttributes() 74
hline 225
HTML
formatage par défaut, modification 114
propriétés inner/outer 74
I
id, attribut 121, 189
idChar1, balise
coloration du code 95
idCharRest, balise
coloration du code 96
identifyBehaviorArguments() 249
ignoreCase, balise
coloration du code 96
ignoreMMTParams, balise
coloration du code 96
Index
411
ignoreTags, balise
coloration du code 97
image, attribut 122
image, objet 70
include/, balise 182
Indicateurs de code
codehints, balise 81
définition 23, 79
description, balise 82
function, balise 84
menu, balise 83
menugroup, balise 81
menuitem, balise 83
informations sur la langue 76
initialPosition() 234
initialTabs() 235
innerHTML, propriété 74
innerTag, valeur:blockStart 103
innerText, valeur, blockStart 101
Insérer, objet de la barre
exemple 132
fichiers 117
modification de l’ordre des catégories 126
insertbar, balise 119
insertObject() 129
insertText, balise 278, 279
inspectBehavior() 250
inspectDynamicDataRef() 311
inspecteur de liaison 305
inspecteur, extensions
définition 22
Inspecteurs de propriétés
attributs traduits dans 362
commentaire en haut du fichier 225
contenu verrouillé, pour 368
éclair au-dessus de l’icône 362
exemple de code 228
expérience de l’utilisateur 226
mot-clé *LOCKED* 368
personnalisé 225
présentation 225
structure de fichier 225
inspectFormatDefinition() 327
inspectServerBehavior() 265
inspectTag() 223
installation d’une extension 14
interface utilisateur d’extension 55
isATarget() 235
isAvailableInCodeView() 236
412
Index
isCommandChecked() 165, 199
isDOMRequired() 200
isDomRequired() 128, 143
isLocked, balise
coloration du code 97
isOptional, attribut 286
isResizable() 236
item() 70
item, balises, dans les barres d’outils 184
itemref/, balise 183
itemtype/, balise 182
J
JavaScript
contrôles 57
fichiers externes 25
URL 25
JavaScript, contrôles personnalisés 57
JS_BooleanToValue() 379
JS_DefineFunction() 376
JS_DoubleToValue() 379
JS_ExecuteScript() 382
JS_GetArrayLength() 381
JS_GetElement() 381
JS_IntegerToValue() 380
JS_NewArrayObject() 381
JS_ObjectToValue() 380
JS_ObjectType() 380
JS_ReportError() 383
JS_SetElement() 382
JS_StringToValue() 379
JS_ValueToBoolean() 378
JS_ValueToDouble() 377
JS_ValueToInteger() 377
JS_ValueToObject() 378
JS_ValueToString() 377
JSBool 375
JSContext 375
JSNative 376
JSObject 375
jsval 375
K
keyword, balise
coloration du code 97
keywords, balise
coloration du code 98
L
label, attribut 190
limitSearch, attribut 285, 292
liveDataTranslateMarkup() 356
location, attribut 279
M
manipulation du contenu de commande
d’arborescence 64
masqué (champ), objet 70
math, objet 70
Menu Commandes, modification 161
menu, balise 83, 153
menu_ID, attribut 191
menubar, balise 152
menubutton, balise 120, 186
menugroup, balise 81
menuitem, balise 83, 154
menus
commandes 161
définition 23
modification 29, 158
modification, menus déroulants et contextuels 160
menus dynamiques
exemple de code 170
expérience de l’utilisateur 162
MM
TREECOLUMN 62
TREENODE 62
MM_ConfigFileExists() 386
mm_deleted_files.xml, fichier
à propos 30
balise d’élément 31
deleteditems, balise 31
syntaxe des balises 31
MM_GetConfigFileAttributes() 387
MM_GetConfigFolderList() 385
mm_jsapi.h, fichier
exemple 391
inclusion 375
MM_OpenConfigFile() 386
MM_returnValue 252
MMDocumentTypes.xml, fichier 44
modèle d’objet de document
à propos 69
DOM niveau 1, spécification 70
Dreamweaver 70
modèle de serveur, extensions
définition 23
modèle, coloration des délimiteurs de bloc 101
modèles de serveur, définition 345
modèles dynamiques 49
modèles, traitement
caractères d’échappement 106
caractères génériques 105
coloration du code 104
longueur maximale de chaîne 106
priorité 106
modification 158
modification des modèles, coloration du code 107
modification du type de fichier par défaut 33
Modifier la liste de formats, menu contextuel plus (+)
323
mot-clé *LOCKED* 368
mot de passe (champ), objet 70
multiutilisateur, configuration
dossiers 24
personnalisation 29
réinstallation et désinstallation 32
suppression de fichiers de configuration dans 30
N
name, attribut 124, 276
nameTag, valeur
blockStart 103
nameTagScript, valeur
blockStart 103
navigateur cible, validation du code 111
navigateur, objet 70
navigateur, profils
balise css-support 112
balise property 112
balise value 113
Node.COMMENT_NODE 70
Node.DOCUMENT_NODE 70
Node.ELEMENT_NODE 70
Node.TEXT_NODE 70
nodelist, objet 70
nodeParamName, attribut 281
nodeType, propriété
des objets balise 74
des objets de document 73
objets commentaire 76
objets texte 75
nœud d’élément 74
nœud de document 73
nœud de texte 75
nœuds 70
Index
413
nombre, objet 70
numbers, balise
coloration du code 98
O
objectTag() 130
objet commentaire 76
objet de la barre Insérer, extensions
définition 21
objet, objet 70
objets
ajout à la barre Insérer 126
ajout de fichiers SWF Flash 66
composants des 117
création 117
fonctionnement des fichiers 126
objets texte 75
Objets, API
canInsertObject() 127
displayHelp() 128
insertObject() 129
isDomRequired() 128
objectTag() 130
windowDimensions() 131
onBlur 70
onChange 70
onClick 70
onFocus 70
onLoad 70
onMouseOver 70
onResize 70
openTag, attribut 294
operators, balise
coloration du code 98
option, objet 70
outerHTML, propriété 74
outerTag, valeur:blockStart 102
ouverture d’un document 53
overImage, attributs 190
P
panneau Composants
commande d’arborescence 332
fichiers 330
panneau flottant, extensions
définition 22
panneau, extensions
définition 22
414
Index
panneaux flottants
exemple de code 239
expérience de l’utilisateur 231
questions liées aux performances 237
paramName, attribut 289
paramNames, attribut 285
parentNode, propriété
des objets balise 74
des objets de document 73
objets commentaire 76
objets texte 75
parentWindow, propriété 73
participant, balise 277
Participant, fichiers 257
participants 256
partType, attribut 276
pasteServerBehavior() 266
personnalisation
aspect des boîtes de dialogue 32
balises propriétaires 29
barre Insérer 29
conceptions de pages 32
dans un environnement multiutilisateur 29
définition de 28
documents par défaut 32
Dreamweaver 13
interprétation de balises propriétaires 34
menus 29
modification des fichiers de configuration 29
profils de navigateurs 29
plates-formes multiutilisateur, dossier Configuration
50
processFile() 208
profils de navigateurs
création et modification 42
formatage 40
modification 29
utilisation 40
property, balise
validation du code 112
Q
quickSearch, balise 278, 296
R
raccourcis clavier, modification 159
radiobutton, balise 185
rapport, extensions
définition 22
rapports
autonome 207
site 206
rapports autonomes 207
rapports du site 206
receiveArguments() 144, 166, 201
regexp, balise
coloration du code 99
regexp, objet 70
réinstallation 32
removeAttribute() 74
resizeTo() 70
résolution du modèle de recherche 300
rétablir, objet 70
S
sampleText, balise
coloration du code 99
scheme, balise
coloration du code 88
SCRIPTING-LANGUAGE, instruction 349
searchPattern, balise
coloration du code 100
searchPatterns, balise 282, 291
select() 70
Sélecteur de balises 217
sélection, exact vs. within 225
sélection, objet 70
selectionChanged() 237
selectParticipant, attribut 275
separator, balise 121, 156, 183
serveur, comportement
code d’exécution 256
dwscripts, fonctions 266
exemple 258
extension 255
Groupe, fichiers 256
instance 255
mise à jour 301
Participant, fichiers 257
participants 256
présentation 255
recherche 296
résolution du modèle de recherche 300
suppression 302
techniques 296
setAttribute() 74
setInterval() 70
setMenuText() 166
setTimeout() 70, 237
setupStepsCompleted() 337
share-in-memory 303
shortcut, balise 157
shortcutlist, balise 156
showIf() 201
showIf, attribut 122
showif, attribut 189
Shutdown, dossier 25
site, objet, propriétés de 76
source de données, extensions
définition 22
sources de données 305
Startup, dossier 25
stringEnd, balise
coloration du code 100
stringEsc, balise
coloration du code 101
stringStart, balise
coloration du code 100
subType, attribut 273
système d’exploitation, de l’utilisateur 77
systemScript, propriété 77
T
tableau, objet 70
tag, attribut 124
tagGroup, balise
coloration du code 101
tagName, propriété 74
tagspec, balise 35
textarea, objet 70
texte (champ), objet 70
Texte dynamique, boîte de dialogue 305
toolbarControls() 341
tooltip, attribut 190
traducteur de données, extensions
définition 23
traducteurs
attribute 358
bloc/balise 363
débogage 370
traducteurs d’attributs
à propos 357
création 358
débogage 370
exemple de code 359
traducteurs de blocs/balises
à propos 357
débogage 370
exemple de code 364
Index
415
traducteurs de données
débogage 370
expérience de l’utilisateur 353
pour les attributs 358
pour les balises ou les blocs de code 363
types de 357
translateMarkup() 356
translation, balise 292
translations, balise 291
translationType, attribut 293
translator, balise 291
TREECOLUMN 62
TREENODE 62
type de fichier, par défaut
modification 33
types de documents
balises dans un fichier de définition 46
définition 23
extensible 43
extensions 50
fichier de définition 44, 45
fichier de définition, règles 52
localisation 46, 51
modèles dynamiques 49
ouverture, procédure 53
types de document extensibles 43
U
unescape() 70
update, attribut 193
updatePattern, balise 287, 289
updatePatterns, balise 287
URL, propriété 73
V
validateTag() 224
value, attribut 192
value, balise
validation du code 113
VBScript 243
version, attribut 277
vline 225
416
Index
W
W3C 70
whereToSearch, attribut 292
width, attribut 191
window.close() 70
windowDimensions()
dans l’API de commandes 144
dans l’API de rapports 210
dans les actions de comportement 251
dans les API des objets 131
dans les commandes de menu 167
X
XML
arborescence 70
fichiers 70
structure 270
XML, balise
barre d’outils 180
codehints 81

Manuels associés