commit 49d60fa6d926f50323bf6a40d13f6a4e856c98b9
parent 3de55e26d57b5d2a92c6d2127e9cb46ad1783fb9
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Fri, 10 Sep 2010 19:11:07 +0200
Encore du refactor...
Diffstat:
| M | editeur.js | | | 187 | ++++++++++++++++++++++++++++++++++++------------------------------------------- |
1 file changed, 85 insertions(+), 102 deletions(-)
diff --git a/editeur.js b/editeur.js
@@ -138,84 +138,91 @@ function éditeurSémantique(textareaOrigine) {
}
var créerDocument = function() {
- var document = {};
- document.créerNoeud = function(type) {
- return {
- type: type,
- contenu: [],
- propriétés: $.extend(true, {}, typesNoeud[type].propriétés),
-
- // Navigation
- parent: null,
- document: document,
-
- // Modèle : fonctions principales.
- positionDansParent: function() {
- return this.parent().contenu.indexOf(this); // Mouais...
- },
- insérer: function(noeud, position) {
- noeud.parent = this;
- this.contenu.splice(position, 0, noeud);
- // TODO : modifier la vue
- },
- supprimerEnfant: function(position) {
- return this.contenu.splice(position, 1);
- },
- modifierType: function(nouveauType) {
- // TODO : lien -> (texte ou important ou ...) doit préserver le texte du lien.
- // TODO : vérifier si le parent peut bien contenir ce type
- this.type = nouveauType;
- // TODO : modifier la vue
- },
- modifierPropriété: function(propriété, valeur) {
- // TODO : vérifier si ce type peut avoir cette propriété
- this.propriétés[propriété] = valeur;
- // TODO : modifier la vue
- },
-
- // Modèle : Fonctions secondaires :
-
- supprimer: function() {
- return this.parent.supprimerEnfant(this.positionDansParent());
- },
- insérerAvant: function(noeud) { // insère noeud avant this (à l'extérieur).
- this.parent.insérer(noeud, this.positionDansParent());
- },
- insérerAprès: function(noeud) { // insère noeud après this (à l'extérieur).
- this.parent.insérer(noeud, this.positionDansParent() + 1);
- },
- insérerDébut: function(noeud) { // insère noeud au début de this (à l'intérieur).
- this.insérer(noeud, 0);
- },
- insérerFin: function(noeud) { // insère noeud à la fin de this (à l'intérieur).
- this.insérer(noeud, this.contenu.length);
- },
- emballer: function(noeud) { // insère noeud à la place de this, et met this dedans.
- var pos = this.positionDansParent();
- var parent = this.parent;
- var n = parent.supprimerEnfant(pos);
- parent.insérer(noeud, pos);
- noeud.insérer(n, 0); // TODO ? noeud.setContenu(this);
- },
- remplacer: function () {
- var pos = this.positionDansParent();
- var parent = this.parent;
- parent.supprimerEnfant(pos);
- for (var i = 0; i < arguments.length; i++) {
- parent.insérer(arguments[i], pos++);
- }
- },
- déballer: function() { // Contraire de emballer : supprime this, mais garde le contenu.
- var c = [];
- for (var i = 0; i < this.contenu.length; i++) {
- c[i] = this.supprimerEnfant(i); // TODO : l'insertion devrait elle-même supprimer le noeud s'il est déjà inséré quelque part.
- }
- this.remplacer.apply(this, c);
- },
+ var document = {
+ noeudActif: null,
+ pressePapier: null,
+ setNoeudActif : function(noeud) {
+ // TODO : vue.setActif(bool);
+ document.noeudActif = null;
+ },
+ créerNoeud: function(type) {
+ return {
+ type: type,
+ contenu: [],
+ propriétés: $.extend(true, {}, typesNoeud[type].propriétés),
+
+ // Navigation
+ parent: null,
+ document: document,
+
+ // Modèle : fonctions principales.
+ positionDansParent: function() {
+ return this.parent().contenu.indexOf(this); // Mouais...
+ },
+ insérer: function(noeud, position) {
+ noeud.parent = this;
+ this.contenu.splice(position, 0, noeud);
+ // TODO : modifier la vue
+ },
+ supprimerEnfant: function(position) {
+ return this.contenu.splice(position, 1);
+ },
+ modifierType: function(nouveauType) {
+ // TODO : lien -> (texte ou important ou ...) doit préserver le texte du lien.
+ // TODO : vérifier si le parent peut bien contenir ce type
+ this.type = nouveauType;
+ // TODO : modifier la vue
+ },
+ modifierPropriété: function(propriété, valeur) {
+ // TODO : vérifier si ce type peut avoir cette propriété
+ this.propriétés[propriété] = valeur;
+ // TODO : modifier la vue
+ },
+
+ // Modèle : Fonctions secondaires :
+
+ supprimer: function() {
+ return this.parent.supprimerEnfant(this.positionDansParent());
+ },
+ insérerAvant: function(noeud) { // insère noeud avant this (à l'extérieur).
+ this.parent.insérer(noeud, this.positionDansParent());
+ },
+ insérerAprès: function(noeud) { // insère noeud après this (à l'extérieur).
+ this.parent.insérer(noeud, this.positionDansParent() + 1);
+ },
+ insérerDébut: function(noeud) { // insère noeud au début de this (à l'intérieur).
+ this.insérer(noeud, 0);
+ },
+ insérerFin: function(noeud) { // insère noeud à la fin de this (à l'intérieur).
+ this.insérer(noeud, this.contenu.length);
+ },
+ emballer: function(noeud) { // insère noeud à la place de this, et met this dedans.
+ var pos = this.positionDansParent();
+ var parent = this.parent;
+ var n = parent.supprimerEnfant(pos);
+ parent.insérer(noeud, pos);
+ noeud.insérer(n, 0); // TODO ? noeud.setContenu(this);
+ },
+ remplacer: function () {
+ var pos = this.positionDansParent();
+ var parent = this.parent;
+ parent.supprimerEnfant(pos);
+ for (var i = 0; i < arguments.length; i++) {
+ parent.insérer(arguments[i], pos++);
+ }
+ },
+ déballer: function() { // Contraire de emballer : supprime this, mais garde le contenu.
+ var c = [];
+ for (var i = 0; i < this.contenu.length; i++) {
+ c[i] = this.supprimerEnfant(i); // TODO : l'insertion devrait elle-même supprimer le noeud s'il est déjà inséré quelque part.
+ }
+ this.remplacer.apply(this, c);
+ },
- // Vue
- créerVue: function(typeVue) {
- return typesNoeud[type].vue.call(this, typeVue);;
+ // Vue
+ créerVue: function(typeVue) {
+ return typesNoeud[type].vue.call(this, typeVue);;
+ }
}
}
};
@@ -247,9 +254,7 @@ function xmlVersModèle(xml) {
return ret;
}
- var document = recursion(xml, créerDocument());
- console.log(document);
- return document;
+ return recursion(xml, créerDocument());
}
/* Modèle :
@@ -263,22 +268,6 @@ vue.supprimerEnfant(position);
noeud.créerVue(typeVue);
vue.insérerEnfant(noeud_enfant, position) { insérer_dans_vue_courante_à_position(créerVue(noeud_enfant), position); }
vue.setPropriété(propriété, valeur);
-vue.setActif(bool);
-document.noeudActif(noeud); // ?
-document.créerVue($(html_element));
-
-=================
-
-// ???
-n = nouveauNoeud();
-nparent.attacherÀPosition(n,3);
-nparent.détacherPosition(3); // ?
-n.détacher(); // ?
-
-=================
-
-// Contrôleur :
-noeud.document.nouveauNoeud()
*/
@@ -303,13 +292,7 @@ function valeur(v) { // TODO : voir si ça peut marcher aussi pour des élément
return f;
}
-function unique_enfant_texte(n) {
- return (n.enfants().length == 1 && n.enfants(0).type == 'texte')
-}
-function édition_noeud_texte(n) {
- return $("<textarea/>");
-}