<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -25,11 +25,12 @@ class GridTest:
 		RootPanel().add(self.add)
 		RootPanel().add(self.g)
 
-	def onClick(self, sender):
+	def onClick(self, sender, event):
 		if sender==self.add:
 			self.page+=1
 		elif sender==self.sub:
 			self.page-=1
+		print &quot;onClick&quot;, sender, self.page
 		self.updatePageDisplay()
 		
 
@@ -38,7 +39,7 @@ class GridTest:
 		elif self.page&gt;self.max_page: self.page=self.max_page
 		total_pages=(self.max_page-self.min_page) + 1
 		
-		self.g.setHTML(0, 4, &quot;&lt;b&gt;page &quot; + self.page + ' of ' + total_pages + &quot;&lt;/b&gt;&quot;)
+		self.g.setHTML(0, 4, &quot;&lt;b&gt;page &quot; + str(self.page) + ' of ' + str(total_pages) + &quot;&lt;/b&gt;&quot;)
 		
 		if self.page&gt;=self.max_page:
 			self.add.setEnabled(False)
@@ -52,7 +53,7 @@ class GridTest:
 
 		for y in range(1, 5):
 			for x in range(5):
-				self.g.setText(y, x, self.page + ' (' + y + ',' + x + ')')
+				self.g.setText(y, x, str(self.page) + ' (' + str(y) + ',' + str(x) + ')')
 
 
 </diff>
      <filename>pyjamas-web/examples/gridtest/GridTest.py</filename>
    </modified>
    <modified>
      <diff>@@ -7,3 +7,5 @@ doc = etree.HTML(broken_html)
 print doc, doc.attrib, dir(doc), dir(doc[0])
 print etree.tostring(doc)
 print doc.find('body')
+print doc.makeelement.__doc__
+print dir(etree)</diff>
      <filename>pyjamas-web/f.py</filename>
    </modified>
    <modified>
      <diff>@@ -412,6 +412,10 @@ def getEventListener(element):
     &quot;&quot;&quot;)
 
 def getFirstChild(elem):
+    print &quot;TODO: resolve 'node type'...&quot;
+    if len(elem) == 0:
+        return None
+    return elem[0]
     JS(&quot;&quot;&quot;
     var child = elem.firstChild;
     while (child &amp;&amp; child.nodeType != 1)
@@ -654,10 +658,13 @@ def removeAttribute(element, attribute):
     &quot;&quot;&quot;)
 
 def setAttribute(element, attribute, value):
-    element.attrib[attribute] = value
+    element.attrib[attribute] = str(value)
 
 def setBooleanAttribute(elem, attr, value):
-    elem.attrib[attribute] = bool(value)
+    if value:
+        elem.attrib[attr] = &quot;&quot;
+    elif hasattr(elem.attrib, attr):
+        del elem.attrib[attr]
 
 def setCapture(elem):
     JS(&quot;&quot;&quot;
@@ -681,20 +688,19 @@ def setEventListener(element, listener):
 def setInnerHTML(element, html):
     if not html:
         html = ''
-    element.text = html
-    return 
-    JS(&quot;&quot;&quot;
-    if (!html) {
-        html = &quot;&quot;;
-    }
-    element.innerHTML = html;
-    &quot;&quot;&quot;)
+    while len(element) &gt; 0:
+        child = element[0]
+        element.remove(child)
+    from lxml.html.soupparser import fromstring
+    nodes = fromstring(html)
+    element.append(nodes)
+    return
 
 def setInnerText(elem, text):
     while len(elem) &gt; 0:
-        elem.remove(0)
+        child = elem[0]
+        elem.remove(child)
     elem.text = text
-    print &quot;TODO - convert to text, disallowing HTML&quot;
     return
     JS(&quot;&quot;&quot;
     // Remove all children first.
@@ -706,6 +712,8 @@ def setInnerText(elem, text):
     &quot;&quot;&quot;)
 
 def setIntAttribute(elem, attr, value):
+    elem.attrib[attr] = str(value)
+    return
     JS(&quot;&quot;&quot;
     elem[attr] = value;
     &quot;&quot;&quot;)</diff>
      <filename>pyjamas-web/library/DOM.py</filename>
    </modified>
    <modified>
      <diff>@@ -21,6 +21,7 @@ import pyjslib
 from History import History
 import Window
 from sets import Set
+from copy import copy, deepcopy
 
 from __pyjamas__ import doc
 
@@ -463,8 +464,16 @@ class FocusWidget(Widget):
         type = DOM.eventGetType(event)
         if type == &quot;click&quot;:
             for listener in self.clickListeners:
-                if hasattr(listener, 'onClick'): listener.onClick(self)
-                else: listener(self)
+                if hasattr(listener, &quot;onClick&quot;):
+                    if listener.onClick.func_code.co_argcount == 2:
+                        listener.onClick(self)
+                    else:
+                        listener.onClick(self, event)
+                else:
+                    if listener.func_code.co_argcount == 1:
+                        listener(self)
+                    else:
+                        listener(self, event)
         elif type == &quot;blur&quot; or type == &quot;focus&quot;:
             FocusListener().fireFocusEvent(self.focusListeners, self, event)
         elif type == &quot;keydown&quot; or type == &quot;keypress&quot; or type == &quot;keyup&quot;:
@@ -785,6 +794,7 @@ class CellFormatter:
         DOM.setStyleAttribute(self.getElement(row, column), &quot;whiteSpace&quot;, wrap_str)
 
     def getCellElement(self, table, row, col):
+        return table[row][col]
         JS(&quot;&quot;&quot;
         var out = table.rows[row].cells[col];
         return (out == null ? null : out);
@@ -1196,20 +1206,14 @@ class Grid(HTMLTable):
         return self.numRows
 
     def addRows(self, table, numRows, columns):
-        JS(&quot;&quot;&quot;
-        var td = $doc.createElement(&quot;td&quot;);
-        td.innerHTML = &quot;&amp;nbsp;&quot;;
-        var row = $doc.createElement(&quot;tr&quot;);
-        for(var cellNum = 0; cellNum &lt; columns; cellNum++) {
-            var cell = td.cloneNode(true);
-            row.appendChild(cell);
-        }
-        table.appendChild(row);
-        for(var rowNum = 1; rowNum &lt; numRows; rowNum++) {
-            table.appendChild(row.cloneNode(true));
-        }
-        &quot;&quot;&quot;)
-
+        row = DOM.createElement(&quot;tr&quot;)
+        for cellNum in range(columns):
+            cell = DOM.createElement(&quot;td&quot;)
+            DOM.setInnerHTML(cell, &quot;&amp;nbsp;&quot;)
+            row.append(cell)
+        table.append(row)
+        for rowNum in range(numRows):
+            table.append(deepcopy(row))
 
 class FlexCellFormatter(CellFormatter):
     def __init__(self, outer):</diff>
      <filename>pyjamas-web/library/ui.py</filename>
    </modified>
    <modified>
      <diff>@@ -5,11 +5,9 @@ from copy import copy
 from lxml import etree
 
 import sys
-sys.path.append(&quot;/home/lkcl/src/pyjamas-desktop/pyjamas-web/examples/helloworld/&quot;)
 sys.path.append(&quot;/home/lkcl/src/pyjamas-desktop/pyjamas-web/library&quot;)
 
 from __pyjamas__ import init_doc, doc, doc_process
-from Hello import Hello
 
 #this is the folderish class that manages ZODB-based chats
 class ZCTmainpage:
@@ -20,8 +18,14 @@ class ZCTmainpage:
         &quot;&quot;&quot;    returns the index page
         &quot;&quot;&quot;
 
-        init_doc(&quot;/home/lkcl/src/pyjamas-desktop/pyjamas-web/examples/helloworld/Hello.html&quot;)
-        m = Hello()
+        #sys.path.append(&quot;/home/lkcl/src/pyjamas-desktop/pyjamas-web/examples/helloworld/&quot;)
+        #from Hello import Hello
+        #init_doc(&quot;/home/lkcl/src/pyjamas-desktop/pyjamas-web/examples/helloworld/Hello.html&quot;)
+        #m = Hello()
+        sys.path.append(&quot;/home/lkcl/src/pyjamas-desktop/pyjamas-web/examples/gridtest/&quot;)
+        from GridTest import GridTest
+        init_doc(&quot;/home/lkcl/src/pyjamas-desktop/pyjamas-web/examples/gridtest/GridTest.html&quot;)
+        m = GridTest()
         return doc_process(m, REQUEST)
 
     def registerpage(self, REQUEST):</diff>
      <filename>pyjamas-web/mainpage.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>26ca332d18712a5eb60d087ad281486a58c61e45</id>
    </parent>
  </parents>
  <author>
    <name>lkcl</name>
    <email>lkcl@lkcl.net</email>
  </author>
  <url>http://github.com/lkcl/pyjamas-desktop/commit/84d19eb7296e18ac252c888228a3558aaaa84708</url>
  <id>84d19eb7296e18ac252c888228a3558aaaa84708</id>
  <committed-date>2008-09-05T14:28:28-07:00</committed-date>
  <authored-date>2008-09-05T14:28:28-07:00</authored-date>
  <message>grid test partially working</message>
  <tree>8291ebe13bbf1910d27da73a16e5d5833930dfeb</tree>
  <committer>
    <name>lkcl</name>
    <email>lkcl@lkcl.net</email>
  </committer>
</commit>
