<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Desfrenes's Code Snippets</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 22:36:01 GMT</pubDate>
    <description>DZone Snippets: Desfrenes's Code Snippets</description>
    <item>
      <title>Generating Taconite command documents</title>
      <link>http://snippets.dzone.com/posts/show/5475</link>
      <description>// description of your code here&lt;br /&gt;Hello,&lt;br /&gt;&lt;br /&gt;This is a port of a php class used to generate XML taconite command documents, useful for (very) easy and powerful ajaxy stuff, if you don't know what that is just check it there in french : http://www.desfrenes.com/playground/taconite/ or there in english : http://www.malsup.com/jquery/taconite/.&lt;br /&gt;&lt;br /&gt;Basically what it does is generate an XML document that is later processed by a javascript plugin which executes a serie of DOM modifications.&lt;br /&gt;&lt;br /&gt;About the code, I'm a Django beginner as well as a Python beginner so kind advices are welcome.&lt;br /&gt;&lt;br /&gt;Cheers. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;# usage:&lt;br /&gt;#&lt;br /&gt;# t = Taconite()&lt;br /&gt;#&lt;br /&gt;# t.append("#toto","&lt;label&gt;test&lt;/label&gt;")&lt;br /&gt;# t.remove("#tutu")&lt;br /&gt;# t.js('alert("hello world");')&lt;br /&gt;# t.toggleClass('blue','body')&lt;br /&gt;# t.css("body","background-color","white")&lt;br /&gt;# [...]&lt;br /&gt;# print t.toprettyxml()&lt;br /&gt;&lt;br /&gt;import xml.dom.minidom as dom&lt;br /&gt;&lt;br /&gt;class Taconite(dom.Document):&lt;br /&gt;    def __init__(self):&lt;br /&gt;        dom.Document.__init__(self)&lt;br /&gt;        taconite = self.createElement("taconite")&lt;br /&gt;        self.appendChild(taconite)&lt;br /&gt;&lt;br /&gt;    def __str__(self):&lt;br /&gt;        return self.toxml(encoding="utf-8")&lt;br /&gt;    &lt;br /&gt;    def camelizeCssProperty(self,property):&lt;br /&gt;        words = property.split('-')&lt;br /&gt;        camelized = words[0].lower()&lt;br /&gt;        for word in words[1:] :&lt;br /&gt;            camelized = camelized + word[0].upper() + word[1:]&lt;br /&gt;        return camelized&lt;br /&gt;    &lt;br /&gt;    def js(self,script):&lt;br /&gt;        command = self.createElement("eval")&lt;br /&gt;        js = self.createTextNode(script)&lt;br /&gt;        command.appendChild(js)&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;    &lt;br /&gt;    def changeContentCommand(self,method,selector,content):&lt;br /&gt;        html_dom = dom.parseString(content)&lt;br /&gt;        command = self.createElement(method)&lt;br /&gt;        command.setAttribute("select",selector)&lt;br /&gt;        command.appendChild(html_dom.childNodes[0])&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;    &lt;br /&gt;    def changeStateCommand(self,action,selector):&lt;br /&gt;        command = self.createElement(action)&lt;br /&gt;        command.setAttribute("select",selector)&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;    &lt;br /&gt;    def CssCommand(self,action,css_class,selector):&lt;br /&gt;        command1 = self.createElement(action)&lt;br /&gt;        command1.setAttribute("select",selector)&lt;br /&gt;        command1.setAttribute("arg1",css_class)&lt;br /&gt;        command2 = self.createElement(action)&lt;br /&gt;        command2.setAttribute("select",selector)&lt;br /&gt;        command2.setAttribute("value",css_class)&lt;br /&gt;        self.childNodes[0].appendChild(command1)&lt;br /&gt;        self.childNodes[0].appendChild(command2)&lt;br /&gt;    &lt;br /&gt;    def addClass(self,css_class,selector):&lt;br /&gt;        self.CssCommand("addClass",css_class,selector)&lt;br /&gt;&lt;br /&gt;    def removeClass(self,css_class,selector):&lt;br /&gt;        self.CssCommand("remove",css_class,selector)&lt;br /&gt;&lt;br /&gt;    def toggleClass(self,css_class,selector):&lt;br /&gt;        self.CssCommand("toggleClass",css_class,selector)&lt;br /&gt;    &lt;br /&gt;    def append(self,selector,content):&lt;br /&gt;        self.changeContentCommand("append",selector,content)&lt;br /&gt;    &lt;br /&gt;    def prepend(self,selector,content):&lt;br /&gt;        self.changeContentCommand("prepend",selector,content)&lt;br /&gt;        &lt;br /&gt;    &lt;br /&gt;    def before(self,selector,content):&lt;br /&gt;        self.changeContentCommand("before",selector,content)&lt;br /&gt;        &lt;br /&gt;    &lt;br /&gt;    def after(self,selector,content):&lt;br /&gt;        self.changeContentCommand("after",selector,content)&lt;br /&gt;    &lt;br /&gt;    def wrap(self,selector,content):&lt;br /&gt;        self.changeContentCommand("wrap",selector,content)&lt;br /&gt;    &lt;br /&gt;    def replace(self,selector,content):&lt;br /&gt;        self.changeContentCommand("replace",selector,content)&lt;br /&gt;    &lt;br /&gt;    def replaceContent(self,selector,content):&lt;br /&gt;        self.changeContentCommand("replaceContent",selector,content)&lt;br /&gt;    &lt;br /&gt;    def remove(self,selector):&lt;br /&gt;        self.changeStateCommand("remove",selector)&lt;br /&gt;    &lt;br /&gt;    def show(self,selector):&lt;br /&gt;        self.changeStateCommand("show",selector)&lt;br /&gt;    &lt;br /&gt;    def hide(self,selector):&lt;br /&gt;        self.changeStateCommand("hide",selector)&lt;br /&gt;    &lt;br /&gt;    def removeContent(self,selector):&lt;br /&gt;        self.changeStateCommand("empty",selector)&lt;br /&gt;    &lt;br /&gt;    def css(self,selector,property,value):&lt;br /&gt;        command = self.createElement("css")&lt;br /&gt;        command.setAttribute("select",selector)&lt;br /&gt;        command.setAttribute("name",self.camelizeCssProperty(property))&lt;br /&gt;        command.setAttribute("value",value)&lt;br /&gt;        self.childNodes[0].appendChild(command)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 08 May 2008 02:50:20 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5475</guid>
      <author>desfrenes (desfrenes)</author>
    </item>
  </channel>
</rss>
