Forum Programmation.web Réconsilier qqun avec les stds et javascript.

Posté par  .
Étiquettes : aucune
0
6
août
2004
Un pote qui avait fait son site IE only est en train de l'adapter pour qu'il soit utilisable avec la gecko-family. (surtout son forum actuellement)
Mais il peste actuellement sur 2 choses qui lui font dire "Les standards c'est de la merde, les ajouts de MS sont tres bien. Pourquoi les autres n'en veulent pas?"

1) Vous connaissez les tags pour le gras et autres,... Il y a des boutons/images pour les insérer au milieu du texte à poster, à l'endroit où était le curseur. ben, "Si y a pas ca dans les standards, c'est de la merde leur standard!" (c)

2) Il l'a décrit mieux que je ne pourrais le faire à cette adresse : http://www.allhtml.com/forum/index.php?t=l&f=2&i=409276(...)
Je me suis même demandé si ce point ne méritait pas une inscription au bugzilla mais je ne veux pas y mettre de betise...

J'ai tellement ralé pour qu'il s'y mette que maintenant je ne voudrais pas que ca reste en plan.
Alors si quelqu'un aurait des idées pour donner un coup de main et le ramener dans le droit chemin, ce serait vraiment sympa. ;-)

Merci d'avance
  • # Barre d'outils

    Posté par  (site web personnel) . Évalué à 5.

    Salut,

    Les moyens de récupérer des sélection ou la position du curseur texte dans un textarea ne sont pas dans le DOM en effet. Mais (et oui) Gecko et IE ont un moyen de le faire proprement.

    Je te conseille de jeter un oeil à la barre d'outils de Trac, une des plus clean que j'ai vu jusqu'à présent :
    http://projects.edgewall.com/trac/wiki/SandBox?edit=yes(...)

    Je suis parti de ça pour faire la même chose dans dotclear, ça marche vraiment bien.

    Comme ce système utilise des propriétés qui ne sont pas le DOM du W3C, ça ne marche pas avec Konqueror, Safari ou Opera. Et je ne suis même pas certain qu'on puisse faire un outil comme ça pour ces navigateurs.
  • # Oui mais...

    Posté par  . Évalué à 2.

    Pour le 1) je suis d'accord que IE a certaines fonctions bien sympa, tout comme Mozilla en a d'autres qui ne sont pas présentes dans IE.

    Pour le 2) avec le code qu'il donne on ne peux pas savoir où ça cloche puisqu'il n'y a pas les balises ni tous les autres trucs qu'il a dû rajouté. Avec le lien vers la page, on pourrait en savoir plus.
  • # Réconcilier, avec un C

    Posté par  . Évalué à 1.

    Ton ami devrait commencer par appliquer réellement les standards avant de les critiquer, ce serait bien ;) Le pauvre a tellement pris l'habitude de coder comme un goret qu'il trouve que ca représente un immense effort de commencer à devenir propre. Je compatis.

    Sa manière de coder est très old-school : ca marche, mais bon, il est loin du XHTML (les ' autour des attributs de balise, le innerHTML qui n'est pas DOM-Compliant, le style='width:299' sans l'unité...).

    Ce que je conseillerais, dans ce cas, c'est simplement d'au lieu de créer/détruire du HTML avec innerHTML (beurk, gruik), il peut faire disparaitre et apparaitre à sa guise les éléments créés une bonne fois pour toutes dans la page à l'aide de la propriété "display" en CSS. les éléments du formulaire étant créés en meme temps que la page par le browser, et simplement cachés, il évitera à coup sûr ce problème et surement d'autres encore.

    De plus, comme ca représente une moindre utilisation de javascript dans la page, ca augmente l'accessibilité et ca booste les perfs.

    voici un bout de code à moi qui exploite ce genre de mécanismes pour afficher/masquer un div rempli de diverses choses créées via JS , il peut s'en inspirer pour son truc:

    [script]
    function showhidezediv(bouton) {
    zediv=document.getElementById('zediv');
    if(zediv.style.display && zediv.style.display=='block')
    zediv.style.display='none';
    else
    zediv.style.display='block';
    }
    [/script]


    Invite donc ton ami à visiter http://www.openweb.eu.org(...) pour lui faire découvrir en douceur la puissance des standards.
    • [^] # Re: Réconcilier, avec un C

      Posté par  (site web personnel) . Évalué à 1.

      malheureusement le display: none n'est pas aussi pratique qu'il n'y parait... il ne peut pas servir d'après la doc pour masquer un élément et le réafficher

      http://www.yoyodesign.org/doc/w3c/css2/visuren.html#propdef-display(...)

      extrait :

      cette valeur fait qu'aucune boîte n'est générée par l'élément dans la structure de formatage (c.à.d., cet élément n'a pas d'influence sur la mise en forme du document). Les éléments qui en descendent ne génèrent pas de boîtes non plus ; on ne peut plus modifier leur comportement avec la propriété 'display'.

      donc une fois passé ton élément à display:none, et bien impossible de le repasser à block

      c'est donc pour ça que moi aussi j'utilise du innerHTML car je n'ai pas trouvé comment remplacer, enfin avant de découvrir qu'on pouvait jouer avec les noeuds xml dans l'arbre XHTML (j'avoue m'y être essayé et c'est plutôt puissant !)

      (ps : "visibility" ne convient pas plus que display car l'élément dans ce cas reste positionné dans le flux)
      • [^] # Re: Réconcilier, avec un C

        Posté par  (site web personnel) . Évalué à 1.

        c'est marrant parce que j'étais persuadé de ce que je viens de dire, j'en avais même fait l'expérience... et pourtant en relisant tout ça me vient comme un gros doute...
        • [^] # Re: Réconcilier, avec un C

          Posté par  (site web personnel) . Évalué à 2.

          je confirme... honte à moi ! le display: none est donc utilisable (je sais pas comment je m'étais fourré le contraire dans la tête, surement un script buggé un jour...)
        • [^] # Re: Réconcilier, avec un C

          Posté par  . Évalué à 4.

          Oui, j'avais lu ça également, en première lecture je l'avais compris comme toi... Et il faut en fait comprendre que le mécanisme qui est décrit concerne l'héritage de la valeur de cette propriété aux balises enfants, à savoir :

          [p style="display:none"]
          [img src="plop" style="display:block"]
          [/p]

          n'affichera absolument rien : la propriété display mise à "none" s'applique à toutes les balises enfants et ne peut être redéfinie plus loin dans la hiérarchie (ce qui est logique).

          Cela ne concerne pas, comme tu l'as maintenant compris, les comportements dynamiques : on peut bien sûr changer la valeur de cette propriété via javascript pour masquer des objets dynamiquement.
  • # pas de gras ...

    Posté par  . Évalué à 1.

    Effectivement, en HTML 4.01 Strict et XML, on distingue complètement la sémantique et ma mise en page. Donc le "gras", qui est de la mise en page, se fait en CSS, et pas en HTML (l'ancienne balise <b>). Il y 2 possiblités pour faire ça:
    *<strong>gras</strong> UNIQUEMENT si c'est pour indiquer quelque chose de TRES important (utiliser <em> pour ce qui est important, <strong> pour TRES important). Cela va etre rendu en grans dans les browsers. Pour etre surt de ça, on peut ajouter dans un fichier css: strong {font-weight: bold;}
    * <span class="gras">gras</span> avec en CSS: .gras {font-weight: bold;}

    Sinon, il devrait peut-être aller plus progressivbement est faire du HTML 4.01 Transitional (la balise b est peut-être toujours tolérée en transitionel, à vérifier).

    Faut bien comprendre que le respect des standards simplifie également la vie du webmaster: il est beaucoup plus simple de changer la mise en mage de tout un site en modifiant un seul fichier .css que de changer toutes les pages 1 par 1. Tout le monde devrait être content: le webmaster car il aura moins de boulot une fois les techniques assimilées, et les utilisateurs qui auront un site lisible quelque soit leur navigateur et leur handicap.
  • # pour le JS

    Posté par  . Évalué à 1.

    Peut-être l'erreur classique: essayer de faire des modifications sur la mise en page d'une page dont le code est complètement foireux?

    Je lui conseillerai de valider d'abord sa page en HTML uniquement. Une fois la page validée, ajouter le JS, et ensuite débugger le JS. Ainsi, il élimine une source potentielle du problème (HTML incorrect).

    Bon, la première chose à lui dire: on utilise les doubles quotes " à l'intérieur des balises HTML, pas le simple quote: <div id ="groupSondage">

    Ce serait bien qu'il ajoute à la suite de son message le message d'erreur généré par Mozilla dans le console Javascript (ne pas oublié de vider le log).
    • [^] # Re: pour le JS

      Posté par  . Évalué à -1.

      html incorect, ça c'est encore une connerie de ie (ou on le fait exprès ou c'ets a cause des noms d'images ect)

      J'avais eu un problème avec les noms d'images mais c'était pour porter de mozilla a ie.... ie ne suporte pas quelques noms de variables ou d'images ect... conseille lui de programmer sous linux (Konqueror ou mozilla) et de porter sous ie après c'est bcp plus simple...

      dit lui aussi de toujours utiliser la même syntaxe pour deux choses identiques, ça lui permet de faire recherhcer/remlplacer si c'est faux... en ja on fait souvent des pages de plus de 700 lignes mais pour les porter, c'est vraiment dur ensuite si on ne respècte pas deux trois trucs de base : utiliser toujours des noms de variables et de fonctions longs car sous ie ça peut le déranger ect... on se retrouves rapidement perdu...

      mozilla n'aime pas trop tout ce qui est div (sauf avec getbyid) et je n'ai jamais réussi a récupérer les touches du clavier avec mozilla, mais j'ai vu sur un forum javascript que c'était possible :
      http://www.javascriptfr.com/code.aspx?ID=25203(...)
  • # Epoz

    Posté par  . Évalué à 1.

    Je connais Epoz qui permet d'éditer du HTML ausssi bien sous Mozilla que IE.

    cf http://mjablonski.zope.de/Epoz(...)

    Il est prévu pour être intégrer dans Zope, mais n'en dépends pas.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.