The power of Deliverance and PyQuery

Posted in Deliverance, Plone, blogs.ingeniweb.com, ingeniblog, open source, planet plone, ploneblog, python on 1, août 2009 by macadames

Some times ago i made a new skin for the French-speaking PYthon Association (AFPY) web site, using Deliverance and PyQuery. I made this exercice on my free time with many pleasure.

You can see the Deliverance power here :

- The home page without Deliverance, the same using Deliverance proxy : all dynamic contents are taken from original Plone site, try to find it, you will notice the Deliverance + PyQuery magic in action :-)

- The association pages without Deliverance (a sphinx site), the same contents injected in the site with Deliverance

Thanks to Gaël Pasgrimaud, a friend of mine and coworker, for his big work which really help me :

Here, we use a specific Gael’s buildout and a specific package done for our Deliverance projects used at Ingeniweb, our company. With these tools (if some people are interested in, it could be released on pypi, tell us …), we get the best flexibility for Deliverance :

  • PyQuery integration
  • The good base rules for Deliverance to avoid theming bugs with Ajax and HTML editor (*)
  • Dynamic css : css are mako templates served by a skin server, colors fonts and other properties are set in a “.ini” file
  • A base mako css for Plone which permits to start the work of externalize the entire css :
    in our projects, all portal_css content links from Plone are stripped when the Plone site is called through Deliverance (just add a condition for Plone stylesheets in portal_css : python:request.HTTP_HOST in request.SERVER_URL), the final css is lighter, the Deliverance css is really clean without many ‘!important’ bad overloads)
  • Supervisor deamon to control skin servers
  • We can use eggs for our Deliverance skins.

(*) to get real wysiwyg rendering in Plone behind Deliverance ’s  HTML editor areas, use also FCKeditor.Plone 2.6.4, in FCKeditor control panel you will find the way to inject Deliverance css in wysiwyg area, it’s an important feature for end users.

Now i can take my summer holidays in peace with myself :-)

Some Deliverance tips

Posted in Plone, blogs.ingeniweb.com, ingeniblog, open source, planet plone, python on 23, mai 2009 by macadames

I really like to use Deliverance for skinning Plone or any web application. In this post, i just want to help Deliverance beginners to configure their server, and to talk about PyQuery, which could be a good Deliverance companion.

Apache 2.2 + Deliverance : configuration

I spent some time to configure Apache in front of Deliverance, you will find here a possible configuration.

Deliverance Server configuration :

In your rules.xml, the first declaration relates to server config, use ‘0.0.0.0′  as server address to be able to serve any ip address :

<server-settings>
 <server>0.0.0.0:8000</server>
 <execute-pyref>true</execute-pyref>
 <display-local-files>false</display-local-files>
 <dev-allow>
 localhost
 </dev-allow>
 <dev-user username="dev" password="dev" />
 <dev-expiration>60</dev-expiration>
</server-settings>

Always in rules.xml you need to write the proxy rule for Zope Virtual Host or another server.

If you want to serve a plone site located at http://localhost:8080/myplonesite :

<proxy path="/" rewrite-links="1">
     <dest href="http://localhost:8080/VirtualHostBase/http/{SERVER_NAME}:8000/myplonesite/VirtualHostRoot" />
</proxy>

If you need a more complex configuration in front of Zope, you can always use Apache + Varnish or SQUID + Pound, or IIS + EEP, and ZEO in front of Zope using another port (90 in this example) and use this Deliverance proxy rule :

<proxy path="/ rewrite-links="1">
    <dest href="http://{SERVER_NAME}:90" />
</proxy>

And if you want to serve anything else for another path :

<proxy path="/anotherpath" rewrite-links="1">
    <dest href="http://anythingelse" />
</proxy>

Apache VirtualHost configuration

You can use Deliverance on port 80 (just replace 8000 by 80 in rules.xml) to directly serve your site, but you would prefer Apache for that in many cases.

Suppose you want to rewrite all requests to “www.mysite.org” with a Deliverance response (on www.mysite.org:8000), you can use the mod_rewrite like this :

<VirtualHost *:80>
    ServerName www.mysite.org
    ServerAlias mysite.org
    ErrorLog "logs/error.mysite.org.log"
    CustomLog "logs/access.mysite.org.log" combined

    # do not forget this declaration
    ProxyPreserveHost On
    RewriteEngine On
    RewriteLog "logs/rewrite.mysite.org.log"
    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule ^/(.*) http://%{SERVER_NAME}:8000/$1 [P]

    # etc ...

</VirtualHost>

That’s all.

If you want to serve urls starting with a particular path (/mypath),  just change your rewrite rule like this :

    RewriteRule ^/mypath(.*) http://%{SERVER_NAME}:8000/_vh_mypath$1 [P]

Just take care in this last case to put the good urls in your Deliverance static contents, if you need it .

In fact you can do anything you want with rewrite rules :-)

Deliverance and PyQuery

PyQuery is a jQuery-like library for Python which help you to play easily with html elements. Combined with Deliverance you will be able, with a python rule, to modify content or theme on the fly, at any point of your Deliverance transformation.

To learn how to add PyQuery rules to Deliverance, read this post  (many thanks to Gaël who help me to learn Deliverance) :
http://www.gawel.org/weblog/en/2008/12/skinning-with-pyquery-and-deliverance

Read also  :
http://www.openplans.org/projects/deliverance/lists/deliverance-discussion/archive/2008/12/1229591136002/forum_view

And now just try these example :

You have a floating right toolbar with floating right tabs inside in your html template theme :

<ul id="right-bar">
    <li><a href="/abcd">ABCD</a></li>
    <li><a href="/efgh">EFGH</a></li>
</ul>

You have a floating left toolbar with floating left tabs inside in your html source content :

<ul id="left-bar">
    <li><a href="/abcd">ABCD</a></li>
    <li><a href="/efgh">EFGH</a></li>
</ul>

With Deliverance xml rules you want to replace right tabs by left tabs like this :

    <replace content="children:#left-bar" theme="children:#righ-bar" />

But of course you need to reverse tabs order before or after xml transformation.
To modify the theme  just add a pyquery rule after the replace declaration :

    <pyquery pyref="myskinproduct.rules:pqrules" />

In your rules.py,  create your pqrules function like this :

def pqrules(content, theme, resource_fetcher, log) :

    # if you prefer to work on content
    # before Deliverance transform
    # replace theme('#right-bar') by content('#left-bar')
    nav = theme('#right-bar')
    navitems = nav('li')
    navitems.reverse()
    # i'm not sure that it's needed :
    nav.empty()
    nav.append(navitems)

Other examples :

    # replace a search button text with 'OK' in content
    content('#portal-searchbox .searchButton').val('OK')

    # remove icons from a navigation portlet
    # replace icons by "> "
    nav = content('#navigation')
    navitems = nav('li')
    navitems('img').remove()
    navitems.append('<span>&gt;&nbsp;</span>')

    # add a "last-item" class to last tab in a toolbar
    from pyquery import PyQuery as pq
    navitems = content('#navbar li')
    if navitems :
        pq(navitems[len(navitems-1)]).addClass('last-item')

    # if you have inserted external contents in content area with Deliverance xml rules
    # you want to change a navitem class in result
    if theme("#photos') :
        selectNavigationItem('#photos')

    #etc ...

To do this kind of template manipulations, changing content on source application could be a best practice, it depends of  your particular situation.
But i’m sure that it’s a fast way  ;-)

The problem is how to test the result ? twill could be a solution …

Do not transform some contents with deliverance

If you dont like bad surprises, you need to abort ajax html content transformation. And in some other cases you need also to abort Deliverance transformation (see example)

In your rules.xml, just add :

    <match pyref="myproduct.rules:match_notheme" abort="1" />

and in your rules.py

def match_notheme(req, resp, headers, *args):

    match = False
    if req.headers.get('X-Requested-With', '').startswith('XML'):
        match = True
    # the html template of FCKEditor iframe must be unchanged
    if req.path_info.startswith('/editor'):    
        match = True
    if 'notheme' in req.GET:
        match = True
    return match

Hadopi l’oubli …

Posted in en colère, social avec des tags on 11, mai 2009 by macadames

Les discours de Jack Lang , Juliette Greco, Pierre Arditti ou même du très décevant  Michel Onfray, qui cependant noie habilement son ignorance du sujet sous un flot de mots pseudo-philosophiques (*), m’ont estomaqué et donné envie de réagir.

J’aimerais juste rappeler quelques souvenirs à ces gens de gauche qui ont vécu les années soixante et soixante dix et qui aujourd’hui soutiennent cette loi immorale.

Souvenez-vous sur quoi s’est bâtie votre liberté de vous exprimer et votre notoriété , souvenez-vous de ces idées en avance sur votre temps.

A l’époque vous disiez que la vraie révolution c’est l’amour et la liberté, que la privation des libertés c’est la haine et que la haine c’est la guerre.

Aujourd’hui vous préconisez la répression contre ceux qui partagent, le plus souvent innocemment, la musique, en général des gamins.
C’est ça votre version moderne de la révolution  ?

A l’époque vous disiez qu’il fallait respirer à plein poumons, vivre d’amour et d’eau fraiche, et écouter pour comprendre les aspirations du peuple.
Aujourd’hui vous n’êtes plus à l’écoute que de vous même.

A l’époque l’argent c’était votre ennemi.
Aujourd’hui c’est votre seul guide, seriez-vous devenus aveugles ?

Bien-sûr à l’époque Johhny Hallyday chantait  ” Jésus Christ est un Hippie” du coup c’est facile pour vous de dire aujourd’hui, on s’est trompé, tout ça c’était nul, de l’utopie, de la théorie, et …  il est sympa Johnny .

Bref c’est facile pour ces gens là de cette gauche là de dire qu’aujourd’hui il faut revenir sur terre et que seules les menaces et la répression administrative rapide et sans jugement est la solution pour sauver le droit  des artistes.

Que soutenez-vous aujourd’hui, vous la minorité visible des artistes, qui s’en croit l’élite et qui s’arroge le droit de parler pour elle  ? de bafouer gravement la liberté de tous au nom du droit de quelques uns. Ah oui bien-sûr, prétexte ultime, c’est aussi pour préserver des emplois dans l’industrie culturelle française (**) que la baisse des ventes de disque menace, mais ils se fichent bien des emplois dans des petites entreprises de l’économie numérique, plus nombreuses et certainement plus créatrices d’emploi pour l’avenir, et que cette loi met directement en danger.

Cette loi est immorale, ne sert à rien (***), et plus grave encore, est inapplicable, ce qui risque de conduire aux pires injustices contre des gens qui n’ont rien à voir avec vos chansons ou vos films. Mais peu importe, ça ne vous intéresse pas de comprendre les enjeux, de comprendre pourquoi ceux qui ne téléchargent ni musique ni films sont scandalisés par cette loi, et encore moins de comprendre comment tout cela fonctionne (Michel Onfray s’il te plait informe toi, t’es vraiment crétin sur ce coup), …  parcequ’il faut respecter le travail et le droit des auteurs (croyez-vous qu’on le méprise ?), vous autorisez le pire que vous n’imaginez même pas, au nom du meilleur qu’avec cette loi vous risquez d’interdire à la majorité et pour un certain temps. C’est insupportable.

Désolé,  j’aimais bien certains d’entre vous, aujourd’hui vous me faites honte.

(*) Je résume son discours, sur France-Inter le 9 mai, avec des mots normaux : le travail des artistes doit être respecté, c’est un vrai travail, même si l’artiste travaille en dehors des horaires standards, et en dehors des normes standard, ce n’est pas pour ça qu’il ne travaille pas, et donc symboliquement je ne suis pas contre cette loi, car il faut faire comprendre qu’un artiste ce n’est pas obligatoirement quelqu’un qui doit faire la manche. Signé Michel Onfray, l’un des philosophes les plus récompensés de notre temps. Je commence à comprendre pourquoi d’autres philosophes ne l’aiment pas.

(**) ne rions pas

(***) le téléchargement c’est has-been sortez un peu

HADOPI : riposte non graduée

Posted in Uncategorized on 17, mars 2009 by macadames

Aux artistes qui soutiennent cette loi liberticide je propose une riposte non graduée :

- on ne télécharge plus vos disques (c’est bien ce que vous vouliez non ?)

- on n’écoute plus votre musique

- bien sûr on n’achète plus vos disques (faut pas nous prendre pour des blaireaux)

- on ne fait plus écouter votre musique à nos potes vu qu’on l’a bannie de nos HDs

- on ne va plus à vos concerts (of course)

- et on vous emmerde (ça c’est bonus)

HADOPI – Le Net en France : black-out

Posted in Uncategorized on 25, février 2009 by macadames

HADOPI - Le Net en France : black-out

Interpellation musclée d’un ancien directeur de la publication de Libé …

Posted in en colère on 29, novembre 2008 by macadames

Lire cet article :

http://www.liberation.fr/medias/0101269634-un-ex-pdg-de-liberation-brutalement-interpelle-a-son-domicile

Dormez citoyens notre grand karchériseur et ces chiens de garde veillent, la chienlit ne passera pas.

Le pire c’est que cela ne choquera personne que ce soit arrivé à un journaliste. Car après tout ça arrive tous les jours pour un simple refus de se faire fouiller lors d’un banal contrôle d’identité, si on n’a rien fait on est en droit de ne pas accepter de se faire palper les glaouis en pleine rue devant tout le monde, mais alors c’est direct au shnouf et bonjour les bleus. C’est toujours comme ça que ça se passe et c’est parfois bien pire si on refuse de dire amen à ces méthodes dignes des pires dictatures (passage à tabac dans la rue au sus et au vu de tous les bons citoyens qui ne bronchent pas, pas folles les guêpes).

Dans la même veine lisez-ceci :

Descente de gendarmes dans une école à la demande du chef d’établissement et tout cela à titre purement “pédagogique” :

http://www.plumedepresse.com/spip.php?article1016

Le témoignage du prof qui a vécu cette scène circule aussi en mp3 et c’est assez “prenant” de l’entendre.
C’est tout simplement écœurant comme l’est également cette idée de mettre des gamins de 12 ans en prison. Du n’importe quoi à grande échelle, tout ça parcequ’un grand guignol prend des décisions démagogiques et hystériques avant même d’avoir réfléchi aux impacts, ou comme le dit très gentiment Vaclav Havel qu’il parle plus vite qu’il ne pense. Ce qui est très grave c’est que des parlementaires le suivent.

Vivement 2012 où on aura une petite chance de dégager ce clown et de remettre la police et la justice à leur juste place, celle des serviteurs du peuple.

Styliser plone3 : quelques trucs sortis du grenier de ma grand-mère.

Posted in Blogroll, Plone, blogs.ingeniweb.com, ingeniblog, open source on 27, novembre 2008 by macadames

For beginner piano …

Dans cet article nous trouverez quelques conseils pour créer son produit de thème pour Plone3 à partir d’une maquette fournie par un graphiste.  Il évoluera dans le temps car j’y ajouterai quelques notes de travail au fure et à mesure que de nouvelles idées viennent, c’est pas tous les jours :-) .  Nous n’aborderons pas les styles dynamiques (utilisation de collective phantasy par exemple) ni l’utilisation de delivrance (on garde ça pour nos expériences futures, car même si c’est alléchant, ce n’est pas encore facile à installer et on ne peut pas tout faire avec).

Cet article n’aborde pas ou alors seulement si c’est nécessaire les questions techniques (créer son produit de thème avec paster, utilisation du buildout), vous trouverez ces explications là sur bien d’autres sites.

Les conseils que l’on peut donner dés le départ sont :

  • Rester simple.
  • Garder l’oeil ouvert : ce qui est important peut vous échapper
  • Essayer d’utiliser au maximum les templates de Plone par défaut
  • Ne pas overloader les styles de Plone par défaut mais plutôt réécrire les styles de Plone que vous voulez changer voire même repartir de zéro sauf si les modifications à faire sont simples ou si vous maîtrisez bien le langage css.
  • Eviter les hacks css au maximum.

I. Rester simple

C’est simple à dire mais c’est sans aucun doute le plus difficile à faire. On pourrait écrire plusieurs tomes sur ce sujet et je vous conseille fortement de visiter les sites dédiés à l’intégration graphique d’un site web.

Pour rester simple il faut d’abord que les documents décrivant la charte graphique soient à la fois simples et complets, à savoir que le(a) graphiste doit vous donner au minimum un exemple de page intérieure du site qui permettra de ne pas se tromper sur la typographie des différentes parties du site. Il faut également que cette charte graphique corresponde aux cas d’utilisation, et qu’il n’y ait pas des éléments susceptibles de vous égarer, ou des éléments non décrits :

  • Si le site a parfois 3 colonnes avec une colonne à gauche et à droite, la présentation de ces colonnes et des boîtes qu’elles contiennent doit être fournie dans la maquette.
  • La typographie doit être suffisamment exhaustive : paragraphes et plusieurs niveaux de titres, couleur et autres effets typographiques sur les liens, par exemple
  • le(a) graphiste doit fournir un fichier où on peut voir quelles polices sont utilisées (un JPEG ou un PDF est sujet à caution, demandez un format Photoshop pour la maquette)

A partir de là, l’intégrateur doit rester simple et éviter ce genre de choses :

  • Ajouter des styles quand il n’en faut pas : on voit ça trop souvent. Pour la typo globale, il suffit de redéfinir les styles des balises html de base (p, h1, h2, h3 …) >  styles décris dans Plone par la feuille de styles base.css.dtml qu’il faudra réécrire si on choisit de ne pas overloader les styles.
    D’autre part du point de vue accessibilité et respect des normes un titre s’écrit <hx>My title</hx> et non pas <p class=”titlex”>My title</p>. Attention, accessibilité ne veut pas dire uniquement que votre site doit rester lisible par un appareil lisant le braille, ça veut dire aussi qu’il sera conforme à ce qu’on attend, et si par exemple dans le futur vous devez importer vos pages statiques vers une techno dynamique ce sera beaucoup plus simple si vous avez respecté les normes.
    Si sur certains templates les styles des titres ou de la typographie changent un peu, mieux vaut donner un id au template et écraser le style dans la css avec #mon-template hx {etc ….}
  • Réinventer la roue en réécrivant ses propres viewlets, ou portlets de navigation. La plupart du temps il vaut mieux répartir les différentes parties décrites dans la charte dans les différentes viewlets existantes de Plone (personaltools, global actions …). 95 fois sur cent, ces viewlets sonts suffisantes. 95 fois sur cent, il faut même en enlever.

Pour rester simple il faudra commencer par alléger les feuilles de style de Plone et enlever tout ce que vous ne voulez pas. Et cette démarche va vous éviter un nombre incalculable d’ennuis ou d’incompatibilités avec les différents navigateurs.

II. Garder l’oeil ouvert

Le plus important quand on regarde une maquette graphique ce ne sont pas les pleins mais les déliés. Essayez de voir ce que les autres ne voient pas.

Le premier travail à faire est de définir les espacements, les margin et padding. Bien sûr ça va de pair avec les dimensions.  Alors par exemple la dimension des colonnes et le padding autour des portlets c’est primordial. Encore plus primordial est la largeur du portail et les marges qui vont autour. Si la largeur est fixe à 980px et que le contenu est centré horizontalement, ça prend deux lignes et votre feuille de style commence avec ça :

#visual-portal-wrapper {
width: 980px;
margin: 0 auto;
}

La deuxième chose concerne la typographie. Beaucoup de personnes se lancent dans l’intégration d’un site avec la mauvaise fonte et quand ils arrivent au bout sont obligés de tout recommencer à cause de ça.  Donc définir la police globale, et les polices de titre, les tailles de police (pas toujours facile).

La troisième chose concerne les couleurs :

  • ça a l’air bête mais quelle est la couleur du texte #333 c’est pas du noir et ça change tout
  • la couleur des liens
  • des liens survolés ou actifs
  • des liens visités
  • couleur des titres

Quelques trucs un peu moins importants comptent aussi :

Epaisseur et styles des bordures.

Si vous êtes un habitué vous aurez reconnu que nombre de ces choses importantes sont dans le base_properties.props associé à votre skin. Ce n’est pas pour rien que ce truc existe, et c’est par là qu’il faut commencer.

III. Templates de Plone

Actuellement il est très rare d’être obligé de surcharger le main_template ou d’autres templates de Plone parceque vous disposez des viewlets.

Ce qu’il faut faire :

  • surcharger les viewlets (avec un overrides.zcml) ce qui permet de réécrire les templates, les méthodes (n’oubliez pas les tests sur les nouvelles méthodes sinon votre chef de projet ne va pas être content) ou plus simplement associer une viewlet à un autre viewletManager (vous voulez des site_actions et personal tools dans le footer par exemple, c’est qq lignes dans le overrides et dans le profil)
  • réordonner les viewlets avec votre profil viewlets.xml
  • ajouter de nouvelles viewlets avec un configure.zcml

Ce qu’il ne faut pas faire sauf par exemple si vous êtes obligé d’ajouter des viewletManagers dans le main_template ce qui est rare, sachant qu’un viewletManager peutêtre ajouté dans un autre viewlet :

  • overloader les templates dans les skins (après ce sera très dur de faire un upgrade du site, pensez à ceux qui prendront la relève sur votre travail et au temps que ça va prendre de scruter les diff entre les templates sur la bonne version de Plone), un calvaire.
  • faire des templates dans les skins pour la même raison et parcequ’on ne peut pas tester ces templates sans lancer Zope. Utilisez plutôt les vues, c’est un peu plus long mais vous oeuvrez pour quelquechose de pérenne.

Bien sûr si vous manquez de temps ou de budget sur un projet rien n’interdit de faire les deux choses susdites. Cependant si vous voulez juste changer un “>” en “/” (breadcrumbs)  ou supprimer un élément graphique (remplacer le “search site” de la boîte de recherche par “OK”) personnellement je préfère faire un display: none en css ou changer le label via un minuscule jQuery, plutôt que d’overloader un template et compliquer la vie de ceux qui viendront après moi.

D’ailleurs si vous manquez vraiment de temps (par exemple vous devez faire le design d’un site en 1 jour) et que vous voulez déplacer les site actions et personal tools dans le footer, vous faites ça en trois lignes de jQuery et de css (après tout ce n’est que de la présentation):

C’est un exemple à ne pas suivre sauf si vous êtes pris à la gorge par un budget digne d’une aide aux pays en voie de développement :

/* d’abord on masque dans le css pour ne pas avoir l’effet que ça bouge en direct */

#portal-siteactions {
display: none;
}

#portal-personaltools-wrapper {
display: none;
}

Ensuite on bouge les personal tools dans les site actions puis les site actions dans le footer

javascript :

moveElements = function() {
var personalAc = jQuery(“#portal-personaltools li”);
var siteAct = jQuery(“#portal-siteactions”);
var footer = jQuery(“#portal-footer”);
siteAct.append(personalAc);
footer.html(“”);
footer.prepend(siteAct);
}

jQuery(document).ready(moveElements);

ensuite on réafiche dans la css :

#portal-footer #portal-siteactions {
display: block;
}

et voilà ni templates (le pire) ni viewlets (le meilleur mais plus cher).

IV. Faut-il écraser les styles Plone par défault ?

La réponse est simple : si vous maitrisez bien la css et que vous manquez de temps vous pouvez choisir de ne pas écraser les styles Plone par défaut, même si ce sera au détriment des performances (taille de css envoyé plus importante), ce dernier point n’étant vraiment pas primordial si vous savez cacher correctement vos css. Le vrai problème étant qu’overloader des styles est beaucoup plus compliqué qu’il n’y parait, vous rencontrerez des tas de soucis avec IE et Safari par exemple.

Si écrire du css ce n’est pas votre tasse de thé, commencez par copier-coller base.css.dtml et public.css.dtml dans votre produit de skin et élaguez (ça va vous faire plaisir en plus), vous verrez qu’ensuite tout deviendra limpide et que si ça se trouve il ne sera même pas utile de surcharger IEFixes.css, et oui pour gagner du temps il faut savoir en perdre.

V. Eviter les hacks css au maximum

En général si vous avez besoin d’un hack pour Mozilla ou Safari c’est qu’il y a une erreur quelque part dans l’écriture de vos feuilles de style. Il ya bien sûr des cas particuliers (le vertical align dans un div par exemple nécessite des pirouettes inhabituelles).

Quant à IE, le IEFixes.css de plone est en général suffisant, pour ma part je le surcharge et j’enlève le *html devant tous les float bugs de manière à appliquer le patch également à IE7, ça résout pas mal de choses.

Pour éviter les bugs avec Safari éviter de surcharger les styles de Plone ou bien faites le proprement car si vous écrivez :

background: mycolor url(myimage) myreepat myposition;

et que plus bas vous surchargez pour le même style

background-image: url(mynewimage);

le background repeat est perdu.

Je ne sais pas vraiment pourquoi ….

V. Eviter les positions absolues

Bien sûr parfois on ne peut faire autrement et je comprends aussi ceux qui aiment la rapidité d’affichage, mais sauf si vous aimez absolument les ennuis je vous le déconseille pour skinner la globalité d’un site.
La position absolue est valable sur des petits tools en javascript, sinon essayez de faire sans, je sais que ce n’est pas toujours simple de manipuler des éléments flottants mais si tout le monde se casse la nénette à faire ça ce n’est pas pour rien.

Suite au prochain numéro :-)

Some Safari css fixes

Posted in Plone, blogs.ingeniweb.com, ingeniblog on 22, novembre 2008 by macadames

You must know some things to adapt your css for Safari. Here’s some tips.

Background images

It’s a really strange bug.

You want a background image with no repeat or just an horizontal repeat.

As long as i can remember something, we were doing things like that :

#mystyle {
background: #mycolor url(myimage) myposition no-repeat;
}

If you want to be Safari compatible, just write :

#mystyle {
background-image: url(myimage);
background-position: myposition;
background-repeat: no-repeat; /* or repeat-x */
}

Otherwise background repeat and position do not work (you will get a beautiful but unwanted mosaic repeat with a 0 0 position).

Vertical align

In a div sometimes you need a centered vertical align, so you fix things like this for a 200px height cell with a table cell behavior :

#mydiv {
display: table-cell;
height: 200px;
vertical-align: middle;
}

Because you are really careful and meticulous or because you are in a hopeless case, you try to add :

overflow : hidden

Spoiled, I don’t know why but with Safari you must add :

max-height: 200px;

otherwise the height will be your css height + content height

Css hack for safari3 and webkit

Everybody know the “* html” hack for IE6, but if you want to put a webkit only declaration you must do :

html[xmlns*=""] body:last-child myStyleDeclaration {etc ….}

Ouf

Posted in Uncategorized on 5, novembre 2008 by macadames

Quel soulagement ce matin en apprenant que l’Amérique s’est mobilisée pour tourner définitivement la page de ces années Bush. On ne va pas chercher les raisons il y aura assez de papiers là-dessus, ni tempérer notre joie, c’est aujourd’hui un grand jour. Bravo à Obama et aux américains.

Plone et les grenouilles

Posted in Plone, Uncategorized on 2, novembre 2008 by macadames

Ca fait des mois que la communauté Plone s’est, en apparence pour les francophones, repliée sur elle -même, et qu’elle ne produit plus que des articles incompréhensibles pour le commun des grenouilles.

Normal car si de nos jours vous voulez un peu d’info sérieuse sur Plone (ou sur n’importe quelle autre techno du reste) sans maîtrtiser la langue anglaise c’est pas gagné.

De plus, en trois ans (depuis l’époque bénie de Zopera Zopeur et des petites guéguerres bien de chez nous … ) Plone a évolué, et comment ! … C’est une révolution mais nous y reviendrons.

Revenons dans notre petit village gaulois : si personne ne s’occupe de faire la communication nécessaire, les 3/4 des DSI français baissent la garde et vont s’orienter vers des technos Php épouvantables juste parcequ’elles s’apellent TINTIN ou PIF. Je trouvais ça drôle il y a quelques années, moi aussi j’aimais bien les écureuils, j’étais moi aussi très éclectique et abonné à Spirou, mais cette forme de retour sur le passé, je dis stop.

Plus sérieusement, c’est embêtant, la plupart des décideurs français qui ont un projet internet/intranet n’ont jamais entendu parler de Plone ou alors c’est un salarié sorti du grenier de leur grand-mère qui a osé le faire et bien-sûr le salarié en question a été gentiment remercié.

Plus embêtant, ceux qui s’intéressent au sujet et qui connaissent Plone ont fini par laisser tomber faute d’arguments francophones bien de chez nous.

Encore plus embêtant, les fans de Plone dont je fais partie, et qui connaissaient bien le sujet, ont sérieusement douté car le projet a connu une telle révolution qu’il était difficile pour tout le monde de s’y retrouver, bien des fois j’ai jugé la situation critique.

Aujourd’hui, personnellement j’ai changé d’avis, ah merde qu’est-ce-que j’ai pas dit, ici chez les grenouilles on dit retourner sa veste, on y reviendra …