Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Tree persist ajax localstore.rdf

Envoyé par : lfournier

Date : 27/06/2008 10:52

Bonjour à tous,

Je voudrais rendre persistant des attributs d'un arbre pour, par exemple garder la valeur open=(true/false) définie par l'utilisateur sur un 'treeitem' après un rechargement complet de la page. J'utilise Apache mod_python publisher pour créer le XUL initial, qui est modifié dynamiquement par une requête AJAX. Dans le code ci dessous, l'arbre initial a 5 lignes, puis 9 après la requête AJAX.

Problème, l'arbre (état open/close) n'est plus persistant alors que les deux requêtes référencent le même 'treeitem' avec le même ID. J'ai l'impression que le résultat de la requête AJAX ne déclenche pas la consultation du fichier localstore.rdf.

Est ce que j'ai loupé un truc ? Comment rendre persistant cet attribut 'open' dans ce contexte ? Y a t-il un moyen manuel de déclencher la consultation du localstore.rdf ?

Merci bien

Laurent

NB; Je ne voudrais pas soulever la discussion sur le fait que je n'utilise pas une ressource RDF. J'ai essayé sans succés de remplir un arbre avec une ressource XML comme le permet FF3, mais cela ne semble marcher qu'avec les listes, pas les arbres. Quant à remplir un arbre avec du XML, pourquoi pas avec du XUL, c'est ce que fait la requête AJAX.

#!/usr/bin/python
def js():
    return """<script language="javascript"><![CDATA[
    function cl_xml(d) { return  document.importNode(d.documentElement.cloneNode(true),true); }
    function ajax(url, callback) {
      var req = new XMLHttpRequest();
      req.onreadystatechange = processRequest;  
      function processRequest () {
        if (req.readyState == 4) {
          if (req.status == 200 || req.status == 0) {
            if (callback) {
              callback(req.responseXML);
            }
          } else {
            alert('Error Get status:'+ req.status);
          }
        }
      }
      this.doGet = function() {
        req.open('GET', url);
        req.send(null);
      }
    }
    function init() {
      var a = new ajax('persist.py/display', function(res) { 
        var tg = document.getElementById('abox');
        tg.replaceChild(cl_xml(res),tg.firstChild);  
      });
      a.doGet();    
    }
    ]]></script>"""

def display(req):
    req.content_type = 'application/vnd.mozilla.xul+xml'
    return content(9)

def content(n):
    out = '<tree flex="1" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">'
    out += '<treecols><treecol label="A" flex="1" primary="true"/></treecols>'
    out += '<treechildren>'
    out += '<treeitem id="THE_ID" container="true" persist="open"><treerow><treecell label="%s"/></treerow><treechildren>'%n
    for i in range(n):
        out += '<treeitem><treerow><treecell label="cell%d"/></treerow></treeitem>'%i
    out += '</treechildren></treeitem>'
    out += '</treechildren>'
    out += '</tree>'
    return out

def index(req):
    out = '<?xml version="1.0" encoding="utf-8"?>'
    out += '<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>'
    out += '<window xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 
onload="init();">' + js()
    out += '<box id="abox" flex="1">' + content(5) + '</box>'
    out += '</window>'
    req.content_type = 'application/vnd.mozilla.xul+xml'
    return out

# Re: Tree persist ajax localstore.rdf

Envoyé par : laurentj

Date : 16/07/2008 11:44

Salut,

pas sûr qu'on puisse garder la persistance des etats ouvert/fermé dans un arbre. Je ne me rappelle pas de ça.

J'ai essayé sans succés de remplir un arbre avec une ressource XML comme le permet FF3, mais cela ne semble marcher qu'avec les listes, pas les arbres

Pourtant si. Les templates ne sont pas propres à un élément xul précis, tu peux les utiliser partout où tu veux. Qu'est ce qui ne fonctionne pas ?

# Re: Tree persist ajax localstore.rdf

Envoyé par : lfournier

Date : 23/12/2008 16:09

Bonjour à tous,

Les templates XML sur des arbres marchent maintenant ! Cependant, ce que je redoutais sur Minefield depuis quelques build mon post arriva, FF 3.05 n'utilise plus l'attribut persist CVE-2008-5505 .

Comment autoriser l'attribut persist pour des applications XUL Intranet d'entreprise ? Comment avoir la même fonction avec une autre technique ?

Par exemple dans un arbre, quoi de plus désagréable pour un utilisateur de perdre les choix d'ordre, largeur, sélection de colonne,...

Merci pour votre aide

Laurent F.

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.