81

Re : Hoa_Xyl vient d'apparaître dans le tronc

Si je pousse ton raisonnement plus loin pour les styles, tu aurais des feuilles de positionnement (layout) et des feuiles de style/décoration (theme). C'est une bonne idée. On aurait un noyau qui aurait tous les layouts et les thèmes à part, éclatés en plusieurs fichiers. On pourrait tout assembler grâce à un script en effet. Qu'il soit à part de XYL : pourquoi pas. Mais faire la différence entre : gérer manuellement ou gérer automatiquement (par XYL) est importante. C'est ce que indépendant veut dire dans ma petite tête pour le coup.

Bien, ça me paraît être un bon point de départ. Maintenant, comment écrire les ressources dans XYL ? Si on part du principe que tous les éléments héritent de Generic, alors il porterait l'attribut @resource. Un truc du genre :

<yield resource="protocol://path/to/resource protocol://another/resource/">
    …
</yield>

<p resource="…" />

etc.

Pour un composant <yield>, ça paraît pertinent (quoi que …) mais pour le <p>, ça l'est nettement moins.
Est-ce qu'on associe une ressource à chaque composant, identifiée par le nom du composant ? C'est un peu fort comme hypothèse ; pas assez souple à mon goût.
Par défaut, on peut laisser la précédente hypothèse mais conserver l'idée de l'attribut @resource ?

Quoi qu'il en soit :
• pour les styles (CSS pour le Web), le noyau sera le layout de tous les composants ;
• pour le langage dynamique d'interface graphique si besoin (Javascript pour le Web) : le noyau sera Mootools avec une légère surcouche Hoa.

Mon idée était de m'inspirer de XBL voire XBL2 (que j'aime moins étrangement). Vous en pensez quoi ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

82

Re : Hoa_Xyl vient d'apparaître dans le tronc

Hello,

Moi il y a une chose qui me dérange... Je veux pas qu'on me force à utiliser ce que je veux pas tongue
Je m'explique, je veux bien être aidé par Xyl pour binder une liste par exemple, mais par contre je veux pouvoir (si j'en fait le choix), faire mes includes de js comme je le souhaite (avec peut-être concaténation+minification par exemple), et utiliser la lib que je souhaite!

Est-ce que Xyl va nous laisser assez de libertée? est-ce qu'on va pouvoir s'en servir à minima si besoin?

83

Re : Hoa_Xyl vient d'apparaître dans le tronc

A mon avis, il faudrait que xyl supporte un "mode" qui ne force pas d'inclusion de css (ni même de js). Dans un tel "mode", ça serait à l'utilisateur de gérer lui même les fichiers à inclure.
Comme l'a dit jojolapine, l'utilisateur a souvent besoin/préfère packer ses fichiers, les minifier etc (ainsi que d'utiliser une autre version plus récente/ancienne de la librairie js).

Je ne connais pas très bien mootools (c'est un euphémisme). Si Hoa customize cette librairie, alors il faudrait que cela soit fait de manière modulaire (je pense que c'est ce que tu veux faire), pour que toute les additions spécifiques à Hoa soient ajoutées "au dessus" de la librairie, sans toucher aux sources officielles. Dans le "mode libre", l'url de la librairie est laissé au choix de l'utilisateur (url de mootools ainsi que l'url des trucs spécifiques à Hoa).

Ensuite, rien n'interdirait de permettre à xyl de spécifier les urls des resources.. par composants ou.. bref, le problème reste entier wink
Ca serait le mode "clé en main".
Dans un cas on ignore le resource="" (mode libre) et dans l'autre on se débrouille le prendre en compte (mode "clé en main").

L'important est que chaque composants nécessitant des resources particulières soit correctement documenté à ce sujet. Tel composant nécessite telle librairies et tel type de css etc.

Pour le script qui packe des css ou js entre eux, ça pourrait aussi être un controller fournit par le framework.

84

Re : Hoa_Xyl vient d'apparaître dans le tronc

@jojolapine : Bien sûr qu'on pourra utiliser autre chose. Je préfère partir sur Mootools car il permet d'écrire un code très modulaire justement.

@metagoto : La possibilité de switcher entre deux modes et un peu compliqué et n'est pas assez abstrait. On peut par contre partir sur des fichiers par défaut que l'utilisateur peut copier puis modifier. Comme ça, ça lui laisse toutes libertés, non ? Ça rejoindrait la requête de Jojolapine qui voulait pouvoir hacker le système comme il voulait. Hoa se veut très hackable, donc ça irait de soit smile.

Que pensez-vous de cette nouvelle proposition ? Un ensemble de fichiers que l'on propose mais que l'utilisateur peut modifier à sa guise ? On proposera des modules Javascript à chaque composant XYL, mais par défaut. Il y aurait toujours la possibilité de les surcharger voire de les réécrire complètement.
De toute façon, tout contrôler de A à Z est impossible et ne créerait que des frustations (autant pour vous que pour moi !).

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

85

Re : Hoa_Xyl vient d'apparaître dans le tronc

Bien. Ça avance pas mal côté gestion des ressources.
On travaille avec la processing-instruction <?xyl-stylesheet href="…"?>. Deux valeurs intéressantes :

  • hoa://Library/Xyl/ : qui va chercher dans Framework/Library/Xyl/Interpreter/<resource_path>/ le bon fichier, le chemin vers la ressource est donné par l'interpréteur, ainsi, pour HTML5, on aura : Framework/Library/Xyl/Interpreter/Html5/Resource/;

  • hoa://Application/Public/ : qui va cherche dans Application/Public/<theme>/

Dans tous les cas, on ira chercher dans hoa://Application/Public/. Si c'est un fichier du framework (comme Core.css ou Core.js par exemple, cf. les précédents messages), on le copiera s'il n'existe pas. Ça permettra de surcharger les actions de XYL par exemple. Si c'est un fichier de l'utilisateur (comme un thème, une surcharge du noyau etc.), on vérifiera seulement qu'il existe et on ne fera rien automatiquement. On laisse la main à l'utilisateur.

Voici l'arborescence de hoa://Application/Public pour HTML5 (oui, peut-être que l'interpréteur PDF ou texte n'auront pas besoin de Javascript ou Video wink) :

  • hoa://Application/Public/<theme>/Css/;

  • hoa://Application/Public/<theme>/Font/;

  • hoa://Application/Public/<theme>/Image/;

  • hoa://Application/Public/<theme>/Javascript/;

  • hoa://Application/Public/<theme>/Video/.

À vous de redéfinir les chemins de ces composants comme d'habitude s'ils ne vous plaisent pas wink (c'est à dire : dire que hoa://Application/Public/<theme>/Css/ pointe vers tel endroit etc.).

Prenons un exemple d'utilisation :

  • hoa://Application/Public/Css/Gallery.css va être transformé en hoa://Application/Public/Classic/Css/Gallery.css par défaut;

  • hoa://Library/Xyl/Css/Core.css va être transformé en hoa://Library/Xyl/Interpreter/Html5/Resource/Css/Core.css ; si le fichier n'existe pas dans hoa://Application/Public/Css/Core.css (qui sera transformé avec le thème), alors on le copiera, sinon on ne fera rien.

Voilà. Est-ce que ça vous convient ? Est-ce que vous voyez des limitations ? Au final, on ne s'occupe de rien dans XYL, on écrirait :

<?xml version="1.0" encoding="utf-8"?>
<?xyl-stylesheet href="hoa://Library/Xyl/Css/Core.css"?>
<?xyl-stylesheet href="hoa://Application/Public/Css/Gallery.css"?>

<document xmlns="http://hoa-project.net/xyl/xylophone">
  …
</document>

Notez une chose, l'URL la plus utilisée sera hoa://Application/Public/ et pas hoa://Library/Xyl/, ça paraît logique … (une fois le noyau importé, on n'aura pas grand chose de plus à faire wink).

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

86

Re : Hoa_Xyl vient d'apparaître dans le tronc

Hey smile,

Voici une petite vidéo/démo pour vous montrer où ça en est : http://j.mp/dEFupP (WebM), http://j.mp/fr0s3z (mov).
Comme d'habitude, je bafouille, je me reprends, c'est un early draft autant au niveau du code que de la démo wink.

Je récapitule tout à la fin car ça peut paraître un brin fouilli (même si je trouve que c'est relativement simple au final, non ?).

J'ai fait l'impasse sur les résolutions d'URL de XYL : comment hoa://Library/Xyl/ est-il transformé en hoa://Library/Xyl[0] par exemple, pourquoi et comment ? et ce genre de détails. Je formaliserai tout une fois le travail terminé.

Je m'attaque cet après-midi au problème que j'énonce à la fin. Sur ce, bon appétit wink.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

87

Re : Hoa_Xyl vient d'apparaître dans le tronc

Hey smile,

Je m'attaque aux formulaires. Un peu l'épreuve du feu en ce qui concerne les interfaces graphiques.
Voici une première proposition pour la validation et la gestion des erreurs :

<?xml version="1.0" encoding="utf-8"?>

<document xmlns="http://hoa-project.net/xyl/xylophone">
  <title>Minefield test</title>

  <form>
    <error id="e2">An error2 occured.</error>
    <error id="e3">An error3 occured.</error>
    <p>
      <label for="i">It's a label&nbsp;:</label>
      <input type="text" id="i"
             validate="realdom()" onerror="e" />
      <error id="e">An error occured.</error>
    </p>

    <p>
      <input type="text" id="i"
             validate-a="realdom()" onerror-a="e1"
             validate-b="realdom()" onerror-b="e2"
             validate-c="realdom()" onerror-c="e3" />
      <error id="e1">An error1 occured.</error>
    </p>
  </form>
</document>

On voit qu'un <input /> a deux attributs (parmis une belle liste) : @validate et @onerror. Si le validateur échoue, alors, l'erreur associée sera affichée. L'erreur se place n'importe où. Si on écrit @validate, alors @onerror sera activé. Si on écrit @validate-x, alors @onerror-x sera activé. Cette dernière règle est pratique si on veut plusieurs étapes de validation avec des messages d'erreurs différents.

Les validateurs seront écrit en Praspel. On va se servir de l'aspect prédicat des domaines réalistes pour valider notre formulaire. Vous allez voir que c'est bien bien puissant smile. De plus, si vous avez écrit des domaines réalistes pour les tests, vous pourrez les réutiliser pour vos formulaires, c'est du travail ré-utiliser.
Au passage, j'ai pour objectif d'utiliser l'aspect sample des domaines réalistes pour générer des valeurs/tester les formulaires. Ça peut-être prometteur.

Votre avis sur ce premier jet ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

88

Re : Hoa_Xyl vient d'apparaître dans le tronc

Hey smile,

Un changeset important hier soir : l'ajout de modèles dans des éléments XML. C'est une notion qui vient d'HTML 5, avec les model contents. On y trouve flow content, embedded content, phrasing content etc. Le phrasing model content est intéressant car c'est en partie ce qui fait qu'HTML n'est pas du XML. En effet, écrire :

<foo>
  abc
  <bar>def</bar>
  ghi
</foo>

est de l'HTML correct mais surtout pas de l'XML-strict.

Et pourquoi est-ce gênant dans notre cas ? Parce qu'on aimerait bien comprendre la « syntaxe HTML » avec Hoa_Xml non ? Par exemple pour XYL (Hoa_Xyl hérite de Hoa_Xml), on aimerait ajouter des composants/éléments de sémantiques (semantics components) comme en HTML, à savoir par exemple :

<p>The <em>cake</em> is a <strong>lie</strong>!</p>

Sachez petit(e)s ami(e)s geek(e)s que c'est impossible à interpreter avec SimpleXML. SimpleXML qui lui est la base de Hoa_Xml. En fait, Hoa_Xml ne fait qu'(énormément ')enrichir SimpleXML et permet de le hacker au maximum (sans pour autant perdre en vitesse et en mémoire).
SimpleXML va réussir à tout retrouver (The, is a et !) mais ce sera sur des cas particuliers. Il faut déjà connaître la structure du document manipuler pour y arriver.

C'est alors que j'ai ajouté la méthode Hoa_Xml_Element_Basic::readAsPhrasingModel(2) (tadaa).
Cette méthode va passer par le DOM pour transformer les textes entre les balises en élément <__text> (par défaut) avec un espace de nom particulier ('' par défaut). Ce sont respectivement le second et le premier paramètre.

Ainsi, on uniformise tout et on est capable de faire ce qu'on veut sans se soucier de ce qu'on manipule.

Voici un exemple :

<?php

require_once '/var/hoa/Core.php';

import('StringBuffer.Read') and load();
import('Xml.Read')          and load();

$in  = new Hoa_StringBuffer_Read();
$in->initializeWith(
    '<?xml version="1.0" encoding="utf-8"?>' . "\n" .
    '<foo xmlns="foobar">' . "\n" .
    '  <p>The <em>cake</em> is a <strong>lie</strong>!</p>' . "\n" .
    '</foo>'
);

$xml = new Hoa_Xml_Read($in);
var_dump(
    $xml->p,
    $xml->p->useNamespace('foobar')->selectChildElements(),
    $xml->p->readAsPhrasingModel('foobar')
);

qui affichera :

object(Hoa_Xml_Element_Read)#25 (2) {
  ["em"]=>
  string(4) "cake"
  ["strong"]=>
  string(3) "lie"
}
array(2) {
  [0]=>
  object(Hoa_Xml_Element_Read)#28 (1) {
    [0]=>
    string(4) "cake"
  }
  [1]=>
  object(Hoa_Xml_Element_Read)#29 (1) {
    [0]=>
    string(3) "lie"
  }
}
array(5) {
  [0]=>
  object(Hoa_Xml_Element_Read)#33 (1) {
    [0]=>
    string(4) "The "
  }
  [1]=>
  object(Hoa_Xml_Element_Read)#32 (1) {
    [0]=>
    string(4) "cake"
  }
  [2]=>
  object(Hoa_Xml_Element_Read)#34 (1) {
    [0]=>
    string(6) " is a "
  }
  [3]=>
  object(Hoa_Xml_Element_Read)#35 (1) {
    [0]=>
    string(3) "lie"
  }
  [4]=>
  object(Hoa_Xml_Element_Read)#36 (1) {
    [0]=>
    string(1) "!"
  }
}

L'affichage de SimpleXML est un peu compliqué à lire mais il se comprend bien.

Du coup, on a une interface Hoa_Xml_Element_Model_Phrasing pour marquer des éléments concrets (a contrario de abstrait). Pratique pour XYL par exemple. Dans tous les cas, lors de la génération d'un arbre concret, si l'élément comporte l'interface Hoa_Xml_Element_Model_Phrasing, alors ses enfants seront construits en utilisant readAsPhrasingModel() et non selectChildElements(). Bref, le traitement sera automatique en somme.

Voilà pour les avancements. Du coup, XYL va se voir prochainement ajouter une tripottée d'élément sémantique wink.

Enfin, pour les curieux, voici le (tout petit mais utile) diff : http://hg.hoa-project.net/Central/rev/f545beb5a9bf.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »