Browse Source

Updated js files with master

Nicolas Petton 13 years ago
parent
commit
fd2d869a12
9 changed files with 1268 additions and 1125 deletions
  1. 74 74
      js/Canvas.js
  2. 75 75
      js/Compiler.js
  3. 158 158
      js/Examples.js
  4. 255 195
      js/IDE.js
  5. 137 137
      js/JQuery.js
  6. 143 107
      js/Kernel.js
  7. 90 60
      js/Parser.js
  8. 316 316
      js/SUnit.js
  9. 20 3
      js/boot.js

+ 74 - 74
js/Canvas.js

@@ -113,7 +113,7 @@ fn: function (aPoint, aNumber, aNumber2, aNumber3, aBoolean){
 var self=this;
 self.arc(aPoint._x(), aPoint._y(), aNumber, aNumber2, aNumber3, aBoolean);
 return self;},
-source: unescape('arcTo%3A%20aPoint%20radius%3A%20aNumber%20startAngle%3A%20aNumber2%20endAngle%3A%20aNumber3%20anticlockwise%3A%20aBoolean%0A%09%7B%27self.arc%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20aNumber%2C%20aNumber2%2C%20aNumber3%2C%20aBoolean%29%27%7D%20'),
+source: unescape('arcTo%3A%20aPoint%20radius%3A%20aNumber%20startAngle%3A%20aNumber2%20endAngle%3A%20aNumber3%20anticlockwise%3A%20aBoolean%0A%09%7B%27self.arc%28aPoint._x%28%29%2C%20aPoint._y%28%29%2C%20aNumber%2C%20aNumber2%2C%20aNumber3%2C%20aBoolean%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -236,7 +236,7 @@ fn: function (aTagBrush){
 var self=this;
 self['@root']=aTagBrush;
 return self;},
-source: unescape('root%3A%20aTagBrush%0A%20%20%20%20root%20%3A%3D%20aTagBrush%0A'),
+source: unescape('root%3A%20aTagBrush%0A%20%20%20%20root%20%3A%3D%20aTagBrush'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -251,7 +251,7 @@ fn: function (){
 var self=this;
 return self['@root'];
 return self;},
-source: unescape('root%0A%20%20%20%20%5Eroot%0A'),
+source: unescape('root%0A%20%20%20%20%5Eroot'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -267,7 +267,7 @@ var self=this;
 smalltalk.send(self, "_initialize", [], smalltalk.Object);
 self['@root']=smalltalk.send(smalltalk.TagBrush, "_fromString_canvas_", ["div", self]);
 return self;},
-source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromString%3A%20%27div%27%20canvas%3A%20self%0A'),
+source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20root%20%3A%3D%20TagBrush%20fromString%3A%20%27div%27%20canvas%3A%20self'),
 messageSends: ["initialize", "fromString:canvas:"],
 referencedClasses: [smalltalk.TagBrush]
 }),
@@ -282,7 +282,7 @@ fn: function (anObject){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_root", []), "_with_", [anObject]);
 return self;},
-source: unescape('with%3A%20anObject%0A%20%20%20%20%5Eself%20root%20with%3A%20anObject%0A'),
+source: unescape('with%3A%20anObject%0A%20%20%20%20%5Eself%20root%20with%3A%20anObject'),
 messageSends: ["with:", "root"],
 referencedClasses: []
 }),
@@ -297,7 +297,7 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(smalltalk.TagBrush, "_fromString_canvas_", [aString, self]);
 return self;},
-source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self%0A'),
+source: unescape('newTag%3A%20aString%0A%20%20%20%20%5ETagBrush%20fromString%3A%20aString%20canvas%3A%20self'),
 messageSends: ["fromString:canvas:"],
 referencedClasses: [smalltalk.TagBrush]
 }),
@@ -312,7 +312,7 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(self['@root'], "_addBrush_", [smalltalk.send(self, "_newTag_", [aString])]);
 return self;},
-source: unescape('tag%3A%20aString%0A%20%20%20%20%5Eroot%20addBrush%3A%20%28self%20newTag%3A%20aString%29%0A'),
+source: unescape('tag%3A%20aString%0A%20%20%20%20%5Eroot%20addBrush%3A%20%28self%20newTag%3A%20aString%29'),
 messageSends: ["addBrush:", "newTag:"],
 referencedClasses: []
 }),
@@ -327,7 +327,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h1"]);
 return self;},
-source: unescape('h1%0A%20%20%20%20%5Eself%20tag%3A%20%27h1%27%0A'),
+source: unescape('h1%0A%20%20%20%20%5Eself%20tag%3A%20%27h1%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -342,7 +342,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h2"]);
 return self;},
-source: unescape('h2%0A%20%20%20%20%5Eself%20tag%3A%20%27h2%27%0A'),
+source: unescape('h2%0A%20%20%20%20%5Eself%20tag%3A%20%27h2%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -357,7 +357,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h3"]);
 return self;},
-source: unescape('h3%0A%20%20%20%20%5Eself%20tag%3A%20%27h3%27%0A'),
+source: unescape('h3%0A%20%20%20%20%5Eself%20tag%3A%20%27h3%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -372,7 +372,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h4"]);
 return self;},
-source: unescape('h4%0A%20%20%20%20%5Eself%20tag%3A%20%27h4%27%0A'),
+source: unescape('h4%0A%20%20%20%20%5Eself%20tag%3A%20%27h4%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -387,7 +387,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h5"]);
 return self;},
-source: unescape('h5%0A%20%20%20%20%5Eself%20tag%3A%20%27h5%27%0A'),
+source: unescape('h5%0A%20%20%20%20%5Eself%20tag%3A%20%27h5%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -402,7 +402,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["h6"]);
 return self;},
-source: unescape('h6%0A%20%20%20%20%5Eself%20tag%3A%20%27h6%27%0A'),
+source: unescape('h6%0A%20%20%20%20%5Eself%20tag%3A%20%27h6%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -417,7 +417,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["p"]);
 return self;},
-source: unescape('p%0A%20%20%20%20%5Eself%20tag%3A%20%27p%27%0A'),
+source: unescape('p%0A%20%20%20%20%5Eself%20tag%3A%20%27p%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -432,7 +432,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["div"]);
 return self;},
-source: unescape('div%0A%20%20%20%20%5Eself%20tag%3A%20%27div%27%0A'),
+source: unescape('div%0A%20%20%20%20%5Eself%20tag%3A%20%27div%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -447,7 +447,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["span"]);
 return self;},
-source: unescape('span%0A%20%20%20%20%5Eself%20tag%3A%20%27span%27%0A'),
+source: unescape('span%0A%20%20%20%20%5Eself%20tag%3A%20%27span%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -462,7 +462,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["img"]);
 return self;},
-source: unescape('img%0A%20%20%20%20%5Eself%20tag%3A%20%27img%27%0A'),
+source: unescape('img%0A%20%20%20%20%5Eself%20tag%3A%20%27img%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -477,7 +477,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["ul"]);
 return self;},
-source: unescape('ul%0A%20%20%20%20%5Eself%20tag%3A%20%27ul%27%0A'),
+source: unescape('ul%0A%20%20%20%20%5Eself%20tag%3A%20%27ul%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -492,7 +492,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["ol"]);
 return self;},
-source: unescape('ol%0A%20%20%20%20%5Eself%20tag%3A%20%27ol%27%0A'),
+source: unescape('ol%0A%20%20%20%20%5Eself%20tag%3A%20%27ol%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -507,7 +507,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["li"]);
 return self;},
-source: unescape('li%0A%20%20%20%20%5Eself%20tag%3A%20%27li%27%0A'),
+source: unescape('li%0A%20%20%20%20%5Eself%20tag%3A%20%27li%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -522,7 +522,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["table"]);
 return self;},
-source: unescape('table%0A%20%20%20%20%5Eself%20tag%3A%20%27table%27%0A'),
+source: unescape('table%0A%20%20%20%20%5Eself%20tag%3A%20%27table%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -537,7 +537,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["tr"]);
 return self;},
-source: unescape('tr%0A%20%20%20%20%5Eself%20tag%3A%20%27tr%27%0A'),
+source: unescape('tr%0A%20%20%20%20%5Eself%20tag%3A%20%27tr%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -552,7 +552,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["td"]);
 return self;},
-source: unescape('td%20%0A%20%20%20%20%5Eself%20tag%3A%20%27td%27%0A'),
+source: unescape('td%20%0A%20%20%20%20%5Eself%20tag%3A%20%27td%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -567,7 +567,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["th"]);
 return self;},
-source: unescape('th%0A%20%20%20%20%5Eself%20tag%3A%20%27th%27%0A'),
+source: unescape('th%0A%20%20%20%20%5Eself%20tag%3A%20%27th%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -582,7 +582,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["form"]);
 return self;},
-source: unescape('form%0A%20%20%20%20%5Eself%20tag%3A%20%27form%27%0A'),
+source: unescape('form%0A%20%20%20%20%5Eself%20tag%3A%20%27form%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -597,7 +597,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["input"]);
 return self;},
-source: unescape('input%0A%20%20%20%20%5Eself%20tag%3A%20%27input%27%0A'),
+source: unescape('input%0A%20%20%20%20%5Eself%20tag%3A%20%27input%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -612,7 +612,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["button"]);
 return self;},
-source: unescape('button%0A%20%20%20%20%5Eself%20tag%3A%20%27button%27%0A'),
+source: unescape('button%0A%20%20%20%20%5Eself%20tag%3A%20%27button%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -627,7 +627,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["select"]);
 return self;},
-source: unescape('select%0A%20%20%20%20%5Eself%20tag%3A%20%27select%27%0A'),
+source: unescape('select%0A%20%20%20%20%5Eself%20tag%3A%20%27select%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -642,7 +642,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["option"]);
 return self;},
-source: unescape('option%0A%20%20%20%20%5Eself%20tag%3A%20%27option%27%0A'),
+source: unescape('option%0A%20%20%20%20%5Eself%20tag%3A%20%27option%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -657,7 +657,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["textarea"]);
 return self;},
-source: unescape('textarea%0A%20%20%20%20%5Eself%20tag%3A%20%27textarea%27%0A'),
+source: unescape('textarea%0A%20%20%20%20%5Eself%20tag%3A%20%27textarea%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -672,7 +672,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["a"]);
 return self;},
-source: unescape('a%0A%20%20%20%20%5Eself%20tag%3A%20%27a%27%0A'),
+source: unescape('a%0A%20%20%20%20%5Eself%20tag%3A%20%27a%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -687,7 +687,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_tag_", ["canvas"]);
 return self;},
-source: unescape('canvas%0A%09%5Eself%20tag%3A%20%27canvas%27%0A'),
+source: unescape('canvas%0A%09%5Eself%20tag%3A%20%27canvas%27'),
 messageSends: ["tag:"],
 referencedClasses: []
 }),
@@ -706,7 +706,7 @@ var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_empty", []);
 smalltalk.send(self, "_append_", [anObject]);
 return self;},
-source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20asJQuery%20empty.%0A%20%20%20%20self%20append%3A%20anObject%0A'),
+source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20asJQuery%20empty.%0A%20%20%20%20self%20append%3A%20anObject'),
 messageSends: ["empty", "asJQuery", "append:"],
 referencedClasses: []
 }),
@@ -722,7 +722,7 @@ var self=this;
 smalltalk.send(self, "_appendChild_", [smalltalk.send(aTagBrush, "_element", [])]);
 return aTagBrush;
 return self;},
-source: unescape('addBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendChild%3A%20aTagBrush%20element.%0A%20%20%20%20%5EaTagBrush%0A'),
+source: unescape('addBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendChild%3A%20aTagBrush%20element.%0A%20%20%20%20%5EaTagBrush'),
 messageSends: ["appendChild:", "element"],
 referencedClasses: []
 }),
@@ -737,7 +737,7 @@ fn: function (anObject){
 var self=this;
 smalltalk.send(self, "_append_", [anObject]);
 return self;},
-source: unescape('with%3A%20anObject%0A%20%20%20%20self%20append%3A%20anObject%0A'),
+source: unescape('with%3A%20anObject%0A%20%20%20%20self%20append%3A%20anObject'),
 messageSends: ["append:"],
 referencedClasses: []
 }),
@@ -752,7 +752,7 @@ fn: function (anObject){
 var self=this;
 smalltalk.send(anObject, "_appendToBrush_", [self]);
 return self;},
-source: unescape('append%3A%20anObject%0A%20%20%20%20anObject%20appendToBrush%3A%20self%0A'),
+source: unescape('append%3A%20anObject%0A%20%20%20%20anObject%20appendToBrush%3A%20self'),
 messageSends: ["appendToBrush:"],
 referencedClasses: []
 }),
@@ -767,7 +767,7 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(aTagBrush, "_addBrush_", [self]);
 return self;},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20addBrush%3A%20self%0A'),
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20addBrush%3A%20self'),
 messageSends: ["addBrush:"],
 referencedClasses: []
 }),
@@ -786,7 +786,7 @@ smalltalk.send(self['@canvas'], "_root_", [self]);
 smalltalk.send(aBlock, "_value_", [self['@canvas']]);
 smalltalk.send(self['@canvas'], "_root_", [root]);
 return self;},
-source: unescape('appendBlock%3A%20aBlock%0A%20%20%20%20%7C%20root%20%7C%0A%20%20%20%20root%20%3A%3D%20canvas%20root.%0A%20%20%20%20canvas%20root%3A%20self.%0A%20%20%20%20aBlock%20value%3A%20canvas.%0A%20%20%20%20canvas%20root%3A%20root%0A'),
+source: unescape('appendBlock%3A%20aBlock%0A%20%20%20%20%7C%20root%20%7C%0A%20%20%20%20root%20%3A%3D%20canvas%20root.%0A%20%20%20%20canvas%20root%3A%20self.%0A%20%20%20%20aBlock%20value%3A%20canvas.%0A%20%20%20%20canvas%20root%3A%20root'),
 messageSends: ["root", "root:", "value:"],
 referencedClasses: []
 }),
@@ -801,7 +801,7 @@ fn: function (anElement){
 var self=this;
 self['@element'].appendChild(anElement);
 return self;},
-source: unescape('appendChild%3A%20anElement%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.appendChild%28anElement%29%27%7D%0A'),
+source: unescape('appendChild%3A%20anElement%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.appendChild%28anElement%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -816,7 +816,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_appendChild_", [smalltalk.send(self, "_createTextNodeFor_", [aString])]);
 return self;},
-source: unescape('appendString%3A%20aString%0A%20%20%20%20self%20appendChild%3A%20%28self%20createTextNodeFor%3A%20aString%29%0A'),
+source: unescape('appendString%3A%20aString%0A%20%20%20%20self%20appendChild%3A%20%28self%20createTextNodeFor%3A%20aString%29'),
 messageSends: ["appendChild:", "createTextNodeFor:"],
 referencedClasses: []
 }),
@@ -831,7 +831,7 @@ fn: function (aString, aValue){
 var self=this;
 self['@element'].setAttribute(aString, aValue);
 return self;},
-source: unescape('at%3A%20aString%20put%3A%20aValue%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.setAttribute%28aString%2C%20aValue%29%27%7D%0A'),
+source: unescape('at%3A%20aString%20put%3A%20aValue%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.setAttribute%28aString%2C%20aValue%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -846,7 +846,7 @@ fn: function (aString){
 var self=this;
 self['@element'].removeAttribute(aString);
 return self;},
-source: unescape('removeAt%3A%20aString%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.removeAttribute%28aString%29%27%7D%0A'),
+source: unescape('removeAt%3A%20aString%0A%20%20%20%20%7B%27self%5B%27%27@element%27%27%5D.removeAttribute%28aString%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -861,7 +861,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["class", aString]);
 return self;},
-source: unescape('class%3A%20aString%0A%20%20%20%20self%20at%3A%20%27class%27%20put%3A%20aString%0A'),
+source: unescape('class%3A%20aString%0A%20%20%20%20self%20at%3A%20%27class%27%20put%3A%20aString'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -876,7 +876,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["id", aString]);
 return self;},
-source: unescape('id%3A%20aString%0A%20%20%20%20self%20at%3A%20%27id%27%20put%3A%20aString%0A'),
+source: unescape('id%3A%20aString%0A%20%20%20%20self%20at%3A%20%27id%27%20put%3A%20aString'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -891,7 +891,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["src", aString]);
 return self;},
-source: unescape('src%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27src%27%20put%3A%20aString%0A'),
+source: unescape('src%3A%20aString%0A%20%20%20%20self%20%20at%3A%20%27src%27%20put%3A%20aString'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -906,7 +906,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["href", aString]);
 return self;},
-source: unescape('href%3A%20aString%0A%20%20%20%20self%20at%3A%20%27href%27%20put%3A%20aString%0A'),
+source: unescape('href%3A%20aString%0A%20%20%20%20self%20at%3A%20%27href%27%20put%3A%20aString'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -921,7 +921,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["title", aString]);
 return self;},
-source: unescape('title%3A%20aString%0A%20%20%20%20self%20at%3A%20%27title%27%20put%3A%20aString%0A'),
+source: unescape('title%3A%20aString%0A%20%20%20%20self%20at%3A%20%27title%27%20put%3A%20aString'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -936,7 +936,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["style", aString]);
 return self;},
-source: unescape('style%3A%20aString%0A%20%20%20%20self%20at%3A%20%27style%27%20put%3A%20aString%0A'),
+source: unescape('style%3A%20aString%0A%20%20%20%20self%20at%3A%20%27style%27%20put%3A%20aString'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -952,7 +952,7 @@ var self=this;
 self['@element']=smalltalk.send(self, "_createElementFor_", [aString]);
 self['@canvas']=aCanvas;
 return self;},
-source: unescape('initializeFromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20element%20%3A%3D%20self%20createElementFor%3A%20aString.%0A%20%20%20%20canvas%20%3A%3D%20aCanvas%0A'),
+source: unescape('initializeFromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20element%20%3A%3D%20self%20createElementFor%3A%20aString.%0A%20%20%20%20canvas%20%3A%3D%20aCanvas'),
 messageSends: ["createElementFor:"],
 referencedClasses: []
 }),
@@ -967,7 +967,7 @@ fn: function (){
 var self=this;
 return self['@element'];
 return self;},
-source: unescape('element%0A%20%20%20%20%5Eelement%0A'),
+source: unescape('element%0A%20%20%20%20%5Eelement'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -982,7 +982,7 @@ fn: function (){
 var self=this;
 return smalltalk.JQuery._from_(jQuery(self['@element']));
 return self;},
-source: unescape('asJQuery%0A%09%7B%27return%20smalltalk.JQuery._from_%28jQuery%28self%5B%27%27@element%27%27%5D%29%29%27%7D%0A'),
+source: unescape('asJQuery%0A%09%7B%27return%20smalltalk.JQuery._from_%28jQuery%28self%5B%27%27@element%27%27%5D%29%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -997,7 +997,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(aBlock, "_value_", [smalltalk.send(self, "_asJQuery", [])]);
 return self;},
-source: unescape('asJQueryDo%3A%20aBlock%0A%20%20%20%20aBlock%20value%3A%20self%20asJQuery%0A'),
+source: unescape('asJQueryDo%3A%20aBlock%0A%20%20%20%20aBlock%20value%3A%20self%20asJQuery'),
 messageSends: ["value:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1012,7 +1012,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keydown", aBlock]);
 return self;},
-source: unescape('onKeyDown%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keydown%27%20do%3A%20aBlock%0A'),
+source: unescape('onKeyDown%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keydown%27%20do%3A%20aBlock'),
 messageSends: ["on:do:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1027,7 +1027,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keypress", aBlock]);
 return self;},
-source: unescape('onKeyPress%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keypress%27%20do%3A%20aBlock%0A'),
+source: unescape('onKeyPress%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keypress%27%20do%3A%20aBlock'),
 messageSends: ["on:do:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1042,7 +1042,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["keyup", aBlock]);
 return self;},
-source: unescape('onKeyUp%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keyup%27%20do%3A%20aBlock%0A'),
+source: unescape('onKeyUp%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27keyup%27%20do%3A%20aBlock'),
 messageSends: ["on:do:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1057,7 +1057,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["focus", aBlock]);
 return self;},
-source: unescape('onFocus%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27focus%27%20do%3A%20aBlock%0A'),
+source: unescape('onFocus%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27focus%27%20do%3A%20aBlock'),
 messageSends: ["on:do:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1072,7 +1072,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["blur", aBlock]);
 return self;},
-source: unescape('onBlur%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27blur%27%20do%3A%20aBlock%0A'),
+source: unescape('onBlur%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27blur%27%20do%3A%20aBlock'),
 messageSends: ["on:do:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1087,7 +1087,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["change", aBlock]);
 return self;},
-source: unescape('onChange%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27change%27%20do%3A%20aBlock%0A'),
+source: unescape('onChange%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27change%27%20do%3A%20aBlock'),
 messageSends: ["on:do:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1102,7 +1102,7 @@ fn: function (aBlock){
 var self=this;
 smalltalk.send(smalltalk.send(self, "_asJQuery", []), "_on_do_", ["click", aBlock]);
 return self;},
-source: unescape('onClick%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27click%27%20do%3A%20aBlock%0A'),
+source: unescape('onClick%3A%20aBlock%0A%20%20%20%20self%20asJQuery%20on%3A%20%27click%27%20do%3A%20aBlock'),
 messageSends: ["on:do:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1117,7 +1117,7 @@ fn: function (aString){
 var self=this;
 return document.createElement(String(aString));
 return self;},
-source: unescape('createElementFor%3A%20aString%0A%09%7B%27return%20document.createElement%28String%28aString%29%29%27%7D%0A'),
+source: unescape('createElementFor%3A%20aString%0A%09%7B%27return%20document.createElement%28String%28aString%29%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1132,7 +1132,7 @@ fn: function (aString){
 var self=this;
 return document.createTextNode(String(aString));
 return self;},
-source: unescape('createTextNodeFor%3A%20aString%0A%09%7B%27return%20document.createTextNode%28String%28aString%29%29%27%7D%0A'),
+source: unescape('createTextNodeFor%3A%20aString%0A%09%7B%27return%20document.createTextNode%28String%28aString%29%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1148,7 +1148,7 @@ fn: function (aString, aCanvas){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_initializeFromString_canvas_", [aString, aCanvas]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;},
-source: unescape('fromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20%5Eself%20new%0A%09initializeFromString%3A%20aString%20canvas%3A%20aCanvas%3B%0A%09yourself%0A'),
+source: unescape('fromString%3A%20aString%20canvas%3A%20aCanvas%0A%20%20%20%20%5Eself%20new%0A%09initializeFromString%3A%20aString%20canvas%3A%20aCanvas%3B%0A%09yourself'),
 messageSends: ["initializeFromString:canvas:", "yourself", "new"],
 referencedClasses: []
 }),
@@ -1165,7 +1165,7 @@ fn: function (){
 var self=this;
 return self['@root'];
 return self;},
-source: unescape('root%0A%20%20%20%20%5Eroot%0A'),
+source: unescape('root%0A%20%20%20%20%5Eroot'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1180,7 +1180,7 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(self, "_appendToJQuery_", [smalltalk.send(aTagBrush, "_asJQuery", [])]);
 return self;},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendToJQuery%3A%20aTagBrush%20asJQuery%0A'),
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20self%20appendToJQuery%3A%20aTagBrush%20asJQuery'),
 messageSends: ["appendToJQuery:", "asJQuery"],
 referencedClasses: []
 }),
@@ -1196,7 +1196,7 @@ var self=this;
 smalltalk.send(self, "_render", []);
 smalltalk.send(aJQuery, "_append_", [smalltalk.send(smalltalk.send(self, "_root", []), "_asJQuery", [])]);
 return self;},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20self%20render.%0A%20%20%20%20aJQuery%20append%3A%20self%20root%20asJQuery%0A'),
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20self%20render.%0A%20%20%20%20aJQuery%20append%3A%20self%20root%20asJQuery'),
 messageSends: ["render", "append:", "asJQuery", "root"],
 referencedClasses: []
 }),
@@ -1211,7 +1211,7 @@ fn: function (aString){
 var self=this;
 alert(aString);
 return self;},
-source: unescape('alert%3A%20aString%0A%20%20%20%20%7B%27alert%28aString%29%27%7D%0A'),
+source: unescape('alert%3A%20aString%0A%20%20%20%20%7B%27alert%28aString%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1226,7 +1226,7 @@ fn: function (aString){
 var self=this;
 return window.confirm(aString);
 return self;},
-source: unescape('confirm%3A%20aString%0A%20%20%20%20%7B%27return%20window.confirm%28aString%29%27%7D%0A'),
+source: unescape('confirm%3A%20aString%0A%20%20%20%20%7B%27return%20window.confirm%28aString%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1241,7 +1241,7 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(self, "_prompt_default_", [aString, ""]);
 return self;},
-source: unescape('prompt%3A%20aString%0A%20%20%20%20%5Eself%20prompt%3A%20aString%20default%3A%20%27%27%0A'),
+source: unescape('prompt%3A%20aString%0A%20%20%20%20%5Eself%20prompt%3A%20aString%20default%3A%20%27%27'),
 messageSends: ["prompt:default:"],
 referencedClasses: []
 }),
@@ -1256,7 +1256,7 @@ fn: function (aString, anotherString){
 var self=this;
 return window.prompt(aString, anotherString);
 return self;},
-source: unescape('prompt%3A%20aString%20default%3A%20anotherString%0A%20%20%20%20%7B%27return%20window.prompt%28aString%2C%20anotherString%29%27%7D%0A'),
+source: unescape('prompt%3A%20aString%20default%3A%20anotherString%0A%20%20%20%20%7B%27return%20window.prompt%28aString%2C%20anotherString%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1275,7 +1275,7 @@ smalltalk.send(canvas, "_root_", [smalltalk.send(self, "_root", [])]);
 smalltalk.send(smalltalk.send(smalltalk.send(self, "_root", []), "_asJQuery", []), "_empty", []);
 smalltalk.send(self, "_renderOn_", [canvas]);
 return self;},
-source: unescape('update%0A%20%20%20%20%7C%20canvas%20%7C%0A%20%20%20%20canvas%20%3A%3D%20HTMLCanvas%20new.%0A%20%20%20%20canvas%20root%3A%20self%20root.%0A%20%20%20%20self%20root%20asJQuery%20empty.%0A%20%20%20%20self%20renderOn%3A%20canvas%0A'),
+source: unescape('update%0A%20%20%20%20%7C%20canvas%20%7C%0A%20%20%20%20canvas%20%3A%3D%20HTMLCanvas%20new.%0A%20%20%20%20canvas%20root%3A%20self%20root.%0A%20%20%20%20self%20root%20asJQuery%20empty.%0A%20%20%20%20self%20renderOn%3A%20canvas'),
 messageSends: ["new", "root:", "root", "empty", "asJQuery", "renderOn:"],
 referencedClasses: [smalltalk.HTMLCanvas]
 }),
@@ -1293,7 +1293,7 @@ canvas=smalltalk.send(smalltalk.HTMLCanvas, "_new", []);
 self['@root']=smalltalk.send(canvas, "_root", []);
 smalltalk.send(self, "_renderOn_", [canvas]);
 return self;},
-source: unescape('render%0A%20%20%20%20%7C%20canvas%20%7C%0A%20%20%20%20canvas%20%3A%3D%20HTMLCanvas%20new.%0A%20%20%20%20root%20%3A%3D%20canvas%20root.%0A%20%20%20%20self%20renderOn%3A%20canvas%0A'),
+source: unescape('render%0A%20%20%20%20%7C%20canvas%20%7C%0A%20%20%20%20canvas%20%3A%3D%20HTMLCanvas%20new.%0A%20%20%20%20root%20%3A%3D%20canvas%20root.%0A%20%20%20%20self%20renderOn%3A%20canvas'),
 messageSends: ["new", "root", "renderOn:"],
 referencedClasses: [smalltalk.HTMLCanvas]
 }),
@@ -1308,7 +1308,7 @@ fn: function (html){
 var self=this;
 self;
 return self;},
-source: unescape('renderOn%3A%20html%0A%20%20%20%20self%0A'),
+source: unescape('renderOn%3A%20html%0A%20%20%20%20self'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1373,7 +1373,7 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(aTagBrush, "_append_", [smalltalk.send(self, "_asString", [])]);
 return self;},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20append%3A%20self%20asString%0A'),
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20append%3A%20self%20asString'),
 messageSends: ["append:", "asString"],
 referencedClasses: []
 }),
@@ -1403,7 +1403,7 @@ fn: function (aTagBrush){
 var self=this;
 smalltalk.send(aTagBrush, "_appendString_", [self]);
 return self;},
-source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendString%3A%20self%0A'),
+source: unescape('appendToBrush%3A%20aTagBrush%0A%20%20%20%20aTagBrush%20appendString%3A%20self'),
 messageSends: ["appendString:"],
 referencedClasses: []
 }),

File diff suppressed because it is too large
+ 75 - 75
js/Compiler.js


+ 158 - 158
js/Examples.js

@@ -1,37 +1,4 @@
 smalltalk.addClass('Counter', smalltalk.Widget, ['count', 'header'], 'Examples');
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Widget);
-self['@count']=(0);
-return self;},
-source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20count%20%3A%3D%200%0A'),
-messageSends: ["initialize"],
-referencedClasses: []
-}),
-smalltalk.Counter);
-
-smalltalk.addMethod(
-'_renderOn_',
-smalltalk.method({
-selector: 'renderOn:',
-category: 'rendering',
-fn: function (html){
-var self=this;
-self['@header']=(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_h1", []));
-(function($rec){smalltalk.send($rec, "_with_", [unescape("++")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_increase", []);})]);})(smalltalk.send(html, "_button", []));
-(function($rec){smalltalk.send($rec, "_with_", [unescape("--")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_decrease", []);})]);})(smalltalk.send(html, "_button", []));
-return self;},
-source: unescape('renderOn%3A%20html%0A%20%20%20%20header%20%3A%3D%20html%20h1%20%0A%09with%3A%20count%20asString%3B%0A%09yourself.%0A%20%20%20%20html%20button%0A%09with%3A%20%27++%27%3B%0A%09onClick%3A%20%5Bself%20increase%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27--%27%3B%0A%09onClick%3A%20%5Bself%20decrease%5D%0A'),
-messageSends: ["with:", "asString", "yourself", "h1", "onClick:", "increase", "button", "decrease"],
-referencedClasses: []
-}),
-smalltalk.Counter);
-
 smalltalk.addMethod(
 '_increase',
 smalltalk.method({
@@ -64,9 +31,22 @@ referencedClasses: []
 }),
 smalltalk.Counter);
 
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Widget);
+self['@count']=(0);
+return self;},
+source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20count%20%3A%3D%200'),
+messageSends: ["initialize"],
+referencedClasses: []
+}),
+smalltalk.Counter);
 
-
-smalltalk.addClass('Tetris', smalltalk.Widget, ['renderingContext', 'timer', 'speed', 'score', 'rows', 'movingPiece'], 'Examples');
 smalltalk.addMethod(
 '_renderOn_',
 smalltalk.method({
@@ -74,108 +54,122 @@ selector: 'renderOn:',
 category: 'rendering',
 fn: function (html){
 var self=this;
-(function($rec){smalltalk.send($rec, "_class_", ["tetris"]);return smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_h3", []), "_with_", ["Tetris"]);smalltalk.send(self, "_renderCanvasOn_", [html]);return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));
+self['@header']=(function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(self['@count'], "_asString", [])]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(html, "_h1", []));
+(function($rec){smalltalk.send($rec, "_with_", [unescape("++")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_increase", []);})]);})(smalltalk.send(html, "_button", []));
+(function($rec){smalltalk.send($rec, "_with_", [unescape("--")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_decrease", []);})]);})(smalltalk.send(html, "_button", []));
 return self;},
-source: unescape('renderOn%3A%20html%0A%09html%20div%0A%09%09class%3A%20%27tetris%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20h3%20with%3A%20%27Tetris%27.%0A%09%09%09self%20renderCanvasOn%3A%20html.%0A%09%09%09self%20renderButtonsOn%3A%20html%5D'),
-messageSends: ["class:", "with:", "h3", "renderCanvasOn:", "renderButtonsOn:", "div"],
+source: unescape('renderOn%3A%20html%0A%20%20%20%20header%20%3A%3D%20html%20h1%20%0A%09with%3A%20count%20asString%3B%0A%09yourself.%0A%20%20%20%20html%20button%0A%09with%3A%20%27++%27%3B%0A%09onClick%3A%20%5Bself%20increase%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27--%27%3B%0A%09onClick%3A%20%5Bself%20decrease%5D'),
+messageSends: ["with:", "asString", "yourself", "h1", "onClick:", "increase", "button", "decrease"],
 referencedClasses: []
 }),
-smalltalk.Tetris);
+smalltalk.Counter);
+
+
 
+smalltalk.addClass('Tetris', smalltalk.Widget, ['renderingContext', 'timer', 'speed', 'score', 'rows', 'movingPiece'], 'Examples');
 smalltalk.addMethod(
-'_renderCanvasOn_',
+'_width',
 smalltalk.method({
-selector: 'renderCanvasOn:',
-category: 'rendering',
-fn: function (html){
+selector: 'width',
+category: 'accessing',
+fn: function (){
 var self=this;
-var canvas=nil;
-canvas=smalltalk.send(html, "_canvas", []);
-smalltalk.send(canvas, "_at_put_", ["width", smalltalk.send(smalltalk.send(self, "_width", []), "_asString", [])]);
-smalltalk.send(canvas, "_at_put_", ["height", smalltalk.send(smalltalk.send(self, "_height", []), "_asString", [])]);
-self['@renderingContext']=smalltalk.send(smalltalk.CanvasRenderingContext, "_tagBrush_", [canvas]);
-smalltalk.send(self, "_redraw", []);
+return smalltalk.send(smalltalk.send(self, "_class", []), "_width", []);
 return self;},
-source: unescape('renderCanvasOn%3A%20html%0A%09%7C%20canvas%20%7C%0A%09canvas%20%3A%3D%20html%20canvas.%0A%09canvas%20at%3A%20%27width%27%20put%3A%20self%20width%20asString.%0A%09canvas%20at%3A%20%27height%27%20put%3A%20self%20height%20asString.%0A%09renderingContext%20%3A%3D%20CanvasRenderingContext%20tagBrush%3A%20canvas.%0A%09self%20redraw'),
-messageSends: ["canvas", "at:put:", "asString", "width", "height", "tagBrush:", "redraw"],
-referencedClasses: [smalltalk.CanvasRenderingContext]
+source: unescape('width%0A%09%5Eself%20class%20width'),
+messageSends: ["width", "class"],
+referencedClasses: []
 }),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
-'_renderButtonsOn_',
+'_height',
 smalltalk.method({
-selector: 'renderButtonsOn:',
-category: 'rendering',
-fn: function (html){
+selector: 'height',
+category: 'accessing',
+fn: function (){
 var self=this;
-(function($rec){smalltalk.send($rec, "_class_", ["tetris_buttons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["New game"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_startNewGame", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", [unescape("play/pause")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_update", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));
+return smalltalk.send(smalltalk.send(self, "_class", []), "_height", []);
 return self;},
-source: unescape('renderButtonsOn%3A%20html%0A%09html%20div%20%0A%09%09class%3A%20%27tetris_buttons%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20button%0A%09%09%09%09with%3A%20%27New%20game%27%3B%0A%09%09%09%09onClick%3A%20%5Bself%20startNewGame%5D.%0A%09%09%09html%20button%0A%09%09%09%09with%3A%20%27play/pause%27%3B%0A%09%09%09%09onClick%3A%20%5Bself%20update%5D%5D'),
-messageSends: ["class:", "with:", "onClick:", "startNewGame", "button", "update", "div"],
+source: unescape('height%0A%09%5Eself%20class%20height'),
+messageSends: ["height", "class"],
 referencedClasses: []
 }),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
-'_initialize',
+'_squares',
 smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
+selector: 'squares',
+category: 'accessing',
 fn: function (){
 var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Widget);
-smalltalk.send(self, "_newGame", []);
+return smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []);
 return self;},
-source: unescape('initialize%0A%09super%20initialize.%0A%09self%20newGame'),
-messageSends: ["initialize", "newGame"],
+source: unescape('squares%0A%09%5Eself%20class%20squares'),
+messageSends: ["squares", "class"],
 referencedClasses: []
 }),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
-'_startNewGame',
+'_gluePiece_',
 smalltalk.method({
-selector: 'startNewGame',
-category: 'actions',
-fn: function (){
+selector: 'gluePiece:',
+category: 'accessing',
+fn: function (aPiece){
 var self=this;
-smalltalk.send(self, "_newGame", []);
-smalltalk.send(self['@timer'], "_ifNotNil_", [(function(){return smalltalk.send(self['@timer'], "_clearInterval", []);})]);
-self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_nextStep", []);}), "_valueWithInterval_", [self['@speed']]);
+smalltalk.send(aPiece, "_glueOn_", [self]);
 return self;},
-source: unescape('startNewGame%0A%09self%20newGame.%0A%09timer%20ifNotNil%3A%20%5Btimer%20clearInterval%5D.%0A%09timer%20%3A%3D%20%5Bself%20nextStep%5D%20valueWithInterval%3A%20speed'),
-messageSends: ["newGame", "ifNotNil:", "clearInterval", "valueWithInterval:", "nextStep"],
+source: unescape('gluePiece%3A%20aPiece%0A%09aPiece%20glueOn%3A%20self'),
+messageSends: ["glueOn:"],
 referencedClasses: []
 }),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
-'_width',
+'_rows',
 smalltalk.method({
-selector: 'width',
+selector: 'rows',
 category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_class", []), "_width", []);
+return self['@rows'];
 return self;},
-source: unescape('width%0A%09%5Eself%20class%20width'),
-messageSends: ["width", "class"],
+source: unescape('rows%0A%09%22An%20array%20of%20rows.%20Each%20row%20is%20a%20collection%20of%20points.%22%0A%09%5Erows'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
-'_height',
+'_addRow_',
 smalltalk.method({
-selector: 'height',
+selector: 'addRow:',
 category: 'accessing',
+fn: function (aCollection){
+var self=this;
+smalltalk.send(smalltalk.send(self, "_rows", []), "_add_", [aCollection]);
+return self;},
+source: unescape('addRow%3A%20aCollection%0A%09self%20rows%20add%3A%20aCollection'),
+messageSends: ["add:", "rows"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_startNewGame',
+smalltalk.method({
+selector: 'startNewGame',
+category: 'actions',
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_class", []), "_height", []);
+smalltalk.send(self, "_newGame", []);
+smalltalk.send(self['@timer'], "_ifNotNil_", [(function(){return smalltalk.send(self['@timer'], "_clearInterval", []);})]);
+self['@timer']=smalltalk.send((function(){return smalltalk.send(self, "_nextStep", []);}), "_valueWithInterval_", [self['@speed']]);
 return self;},
-source: unescape('height%0A%09%5Eself%20class%20height'),
-messageSends: ["height", "class"],
+source: unescape('startNewGame%0A%09self%20newGame.%0A%09timer%20ifNotNil%3A%20%5Btimer%20clearInterval%5D.%0A%09timer%20%3A%3D%20%5Bself%20nextStep%5D%20valueWithInterval%3A%20speed'),
+messageSends: ["newGame", "ifNotNil:", "clearInterval", "valueWithInterval:", "nextStep"],
 referencedClasses: []
 }),
 smalltalk.Tetris);
@@ -191,7 +185,7 @@ smalltalk.send(self['@movingPiece'], "_ifNil_", [(function(){return smalltalk.se
 smalltalk.send(smalltalk.send(self['@movingPiece'], "_canMoveIn_", [self]), "_ifTrue_ifFalse_", [(function(){return smalltalk.send(self['@movingPiece'], "_position_", [smalltalk.send(smalltalk.send(self['@movingPiece'], "_position", []), "__plus", [smalltalk.send((0), "__at", [(1)])])]);}), (function(){return smalltalk.send(self, "_newPiece", []);})]);
 smalltalk.send(self, "_redraw", []);
 return self;},
-source: unescape('nextStep%0A%09movingPiece%20ifNil%3A%20%5Bself%20newPiece%5D.%0A%09%28movingPiece%20canMoveIn%3A%20self%29%0A%09%09ifTrue%3A%20%5BmovingPiece%20position%3A%20movingPiece%20position%20+%20%280@1%29%5D%0A%09%09ifFalse%3A%20%5Bself%20newPiece%5D.%0A%09self%20redraw%0A%09'),
+source: unescape('nextStep%0A%09movingPiece%20ifNil%3A%20%5Bself%20newPiece%5D.%0A%09%28movingPiece%20canMoveIn%3A%20self%29%0A%09%09ifTrue%3A%20%5BmovingPiece%20position%3A%20movingPiece%20position%20+%20%280@1%29%5D%0A%09%09ifFalse%3A%20%5Bself%20newPiece%5D.%0A%09self%20redraw'),
 messageSends: ["ifNil:", "newPiece", "ifTrue:ifFalse:", "canMoveIn:", "position:", unescape("+"), "position", unescape("@"), "redraw"],
 referencedClasses: []
 }),
@@ -277,36 +271,6 @@ self['@movingPiece']=smalltalk.send(smalltalk.TetrisPiece, "_atRandom", []);
 return self;},
 source: unescape('newPiece%0A%09movingPiece%20%3A%3D%20TetrisPiece%20atRandom'),
 messageSends: ["atRandom"],
-referencedClasses: [smalltalk.TetrisPiece]
-}),
-smalltalk.Tetris);
-
-smalltalk.addMethod(
-'_squares',
-smalltalk.method({
-selector: 'squares',
-category: 'accessing',
-fn: function (){
-var self=this;
-return smalltalk.send(smalltalk.send(self, "_class", []), "_squares", []);
-return self;},
-source: unescape('squares%0A%09%5Eself%20class%20squares'),
-messageSends: ["squares", "class"],
-referencedClasses: []
-}),
-smalltalk.Tetris);
-
-smalltalk.addMethod(
-'_gluePiece_',
-smalltalk.method({
-selector: 'gluePiece:',
-category: 'accessing',
-fn: function (aPiece){
-var self=this;
-smalltalk.send(aPiece, "_glueOn_", [self]);
-return self;},
-source: unescape('gluePiece%3A%20aPiece%0A%09aPiece%20glueOn%3A%20self%0A%09'),
-messageSends: ["glueOn:"],
 referencedClasses: []
 }),
 smalltalk.Tetris);
@@ -343,31 +307,67 @@ referencedClasses: []
 smalltalk.Tetris);
 
 smalltalk.addMethod(
-'_rows',
+'_initialize',
 smalltalk.method({
-selector: 'rows',
-category: 'accessing',
+selector: 'initialize',
+category: 'initialization',
 fn: function (){
 var self=this;
-return self['@rows'];
+smalltalk.send(self, "_initialize", [], smalltalk.Widget);
+smalltalk.send(self, "_newGame", []);
 return self;},
-source: unescape('rows%0A%09%22An%20array%20of%20rows.%20Each%20row%20is%20a%20collection%20of%20points.%22%0A%09%5Erows'),
-messageSends: [],
+source: unescape('initialize%0A%09super%20initialize.%0A%09self%20newGame'),
+messageSends: ["initialize", "newGame"],
 referencedClasses: []
 }),
 smalltalk.Tetris);
 
 smalltalk.addMethod(
-'_addRow_',
+'_renderOn_',
 smalltalk.method({
-selector: 'addRow:',
-category: 'accessing',
-fn: function (aCollection){
+selector: 'renderOn:',
+category: 'rendering',
+fn: function (html){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_rows", []), "_add_", [aCollection]);
+(function($rec){smalltalk.send($rec, "_class_", ["tetris"]);return smalltalk.send($rec, "_with_", [(function(){smalltalk.send(smalltalk.send(html, "_h3", []), "_with_", ["Tetris"]);smalltalk.send(self, "_renderCanvasOn_", [html]);return smalltalk.send(self, "_renderButtonsOn_", [html]);})]);})(smalltalk.send(html, "_div", []));
 return self;},
-source: unescape('addRow%3A%20aCollection%0A%09self%20rows%20add%3A%20aCollection'),
-messageSends: ["add:", "rows"],
+source: unescape('renderOn%3A%20html%0A%09html%20div%0A%09%09class%3A%20%27tetris%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20h3%20with%3A%20%27Tetris%27.%0A%09%09%09self%20renderCanvasOn%3A%20html.%0A%09%09%09self%20renderButtonsOn%3A%20html%5D'),
+messageSends: ["class:", "with:", "h3", "renderCanvasOn:", "renderButtonsOn:", "div"],
+referencedClasses: []
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_renderCanvasOn_',
+smalltalk.method({
+selector: 'renderCanvasOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+var canvas=nil;
+canvas=smalltalk.send(html, "_canvas", []);
+smalltalk.send(canvas, "_at_put_", ["width", smalltalk.send(smalltalk.send(self, "_width", []), "_asString", [])]);
+smalltalk.send(canvas, "_at_put_", ["height", smalltalk.send(smalltalk.send(self, "_height", []), "_asString", [])]);
+self['@renderingContext']=smalltalk.send(smalltalk.CanvasRenderingContext, "_tagBrush_", [canvas]);
+smalltalk.send(self, "_redraw", []);
+return self;},
+source: unescape('renderCanvasOn%3A%20html%0A%09%7C%20canvas%20%7C%0A%09canvas%20%3A%3D%20html%20canvas.%0A%09canvas%20at%3A%20%27width%27%20put%3A%20self%20width%20asString.%0A%09canvas%20at%3A%20%27height%27%20put%3A%20self%20height%20asString.%0A%09renderingContext%20%3A%3D%20CanvasRenderingContext%20tagBrush%3A%20canvas.%0A%09self%20redraw'),
+messageSends: ["canvas", "at:put:", "asString", "width", "height", "tagBrush:", "redraw"],
+referencedClasses: [smalltalk.CanvasRenderingContext]
+}),
+smalltalk.Tetris);
+
+smalltalk.addMethod(
+'_renderButtonsOn_',
+smalltalk.method({
+selector: 'renderButtonsOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+(function($rec){smalltalk.send($rec, "_class_", ["tetris_buttons"]);return smalltalk.send($rec, "_with_", [(function(){(function($rec){smalltalk.send($rec, "_with_", ["New game"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_startNewGame", []);})]);})(smalltalk.send(html, "_button", []));return (function($rec){smalltalk.send($rec, "_with_", [unescape("play/pause")]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_update", []);})]);})(smalltalk.send(html, "_button", []));})]);})(smalltalk.send(html, "_div", []));
+return self;},
+source: unescape('renderButtonsOn%3A%20html%0A%09html%20div%20%0A%09%09class%3A%20%27tetris_buttons%27%3B%0A%09%09with%3A%20%5B%0A%09%09%09html%20button%0A%09%09%09%09with%3A%20%27New%20game%27%3B%0A%09%09%09%09onClick%3A%20%5Bself%20startNewGame%5D.%0A%09%09%09html%20button%0A%09%09%09%09with%3A%20%27play/pause%27%3B%0A%09%09%09%09onClick%3A%20%5Bself%20update%5D%5D'),
+messageSends: ["class:", "with:", "onClick:", "startNewGame", "button", "update", "div"],
 referencedClasses: []
 }),
 smalltalk.Tetris);
@@ -435,22 +435,6 @@ smalltalk.Tetris.klass);
 
 
 smalltalk.addClass('TetrisPiece', smalltalk.Widget, ['rotation', 'position'], 'Examples');
-smalltalk.addMethod(
-'_drawOn_',
-smalltalk.method({
-selector: 'drawOn:',
-category: 'drawing',
-fn: function (aRenderingContext){
-var self=this;
-smalltalk.send(aRenderingContext, "_fillStyle_", [smalltalk.send(self, "_color", [])]);
-smalltalk.send(smalltalk.send(self, "_bounds", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_fillRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);smalltalk.send($rec, "_strokeStyle_", [unescape("%23999")]);smalltalk.send($rec, "_lineWidth_", [(2)]);return smalltalk.send($rec, "_strokeRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);})(aRenderingContext);})]);
-return self;},
-source: unescape('drawOn%3A%20aRenderingContext%0A%09aRenderingContext%20fillStyle%3A%20self%20color.%0A%09self%20bounds%20do%3A%20%5B%3Aeach%20%7C%0A%09%09aRenderingContext%20%0A%09%09%09fillRectFrom%3A%20each%20+%20self%20position*%20Tetris%20squareSize%20to%3A%201@1%20*%20Tetris%20squareSize%3B%0A%09%09%09strokeStyle%3A%20%27%23999%27%3B%0A%09%09%09lineWidth%3A%202%3B%0A%09%09%09strokeRectFrom%3A%20each%20+%20self%20position*%20Tetris%20squareSize%20to%3A%201@1%20*%20Tetris%20squareSize%5D'),
-messageSends: ["fillStyle:", "color", "do:", "bounds", "fillRectFrom:to:", unescape("*"), unescape("+"), "position", "squareSize", unescape("@"), "strokeStyle:", "lineWidth:", "strokeRectFrom:to:"],
-referencedClasses: [smalltalk.Tetris]
-}),
-smalltalk.TetrisPiece);
-
 smalltalk.addMethod(
 '_rotation',
 smalltalk.method({
@@ -542,32 +526,48 @@ referencedClasses: []
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
-'_canMove',
+'_height',
 smalltalk.method({
-selector: 'canMove',
-category: 'testing',
+selector: 'height',
+category: 'accessing',
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "_y", []), "__lt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Tetris, "_squares", []), "_y", []), "__minus", [smalltalk.send(self, "_height", [])])]);
+return (2);
 return self;},
-source: unescape('canMove%0A%09%5Eself%20position%20y%20%3C%20%28Tetris%20squares%20y%20-%20self%20height%29'),
-messageSends: [unescape("%3C"), "y", "position", unescape("-"), "squares", "height"],
+source: unescape('height%0A%09%5E2'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TetrisPiece);
+
+smalltalk.addMethod(
+'_drawOn_',
+smalltalk.method({
+selector: 'drawOn:',
+category: 'drawing',
+fn: function (aRenderingContext){
+var self=this;
+smalltalk.send(aRenderingContext, "_fillStyle_", [smalltalk.send(self, "_color", [])]);
+smalltalk.send(smalltalk.send(self, "_bounds", []), "_do_", [(function(each){return (function($rec){smalltalk.send($rec, "_fillRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);smalltalk.send($rec, "_strokeStyle_", [unescape("%23999")]);smalltalk.send($rec, "_lineWidth_", [(2)]);return smalltalk.send($rec, "_strokeRectFrom_to_", [smalltalk.send(smalltalk.send(each, "__plus", [smalltalk.send(self, "_position", [])]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])]), smalltalk.send(smalltalk.send((1), "__at", [(1)]), "__star", [smalltalk.send(smalltalk.Tetris, "_squareSize", [])])]);})(aRenderingContext);})]);
+return self;},
+source: unescape('drawOn%3A%20aRenderingContext%0A%09aRenderingContext%20fillStyle%3A%20self%20color.%0A%09self%20bounds%20do%3A%20%5B%3Aeach%20%7C%0A%09%09aRenderingContext%20%0A%09%09%09fillRectFrom%3A%20each%20+%20self%20position*%20Tetris%20squareSize%20to%3A%201@1%20*%20Tetris%20squareSize%3B%0A%09%09%09strokeStyle%3A%20%27%23999%27%3B%0A%09%09%09lineWidth%3A%202%3B%0A%09%09%09strokeRectFrom%3A%20each%20+%20self%20position*%20Tetris%20squareSize%20to%3A%201@1%20*%20Tetris%20squareSize%5D'),
+messageSends: ["fillStyle:", "color", "do:", "bounds", "fillRectFrom:to:", unescape("*"), unescape("+"), "position", "squareSize", unescape("@"), "strokeStyle:", "lineWidth:", "strokeRectFrom:to:"],
 referencedClasses: [smalltalk.Tetris]
 }),
 smalltalk.TetrisPiece);
 
 smalltalk.addMethod(
-'_height',
+'_canMove',
 smalltalk.method({
-selector: 'height',
-category: 'accessing',
+selector: 'canMove',
+category: 'testing',
 fn: function (){
 var self=this;
-return (2);
+return smalltalk.send(smalltalk.send(smalltalk.send(self, "_position", []), "_y", []), "__lt", [smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.Tetris, "_squares", []), "_y", []), "__minus", [smalltalk.send(self, "_height", [])])]);
 return self;},
-source: unescape('height%0A%09%5E2'),
-messageSends: [],
-referencedClasses: []
+source: unescape('canMove%0A%09%5Eself%20position%20y%20%3C%20%28Tetris%20squares%20y%20-%20self%20height%29'),
+messageSends: [unescape("%3C"), "y", "position", unescape("-"), "squares", "height"],
+referencedClasses: [smalltalk.Tetris]
 }),
 smalltalk.TetrisPiece);
 

File diff suppressed because it is too large
+ 255 - 195
js/IDE.js


+ 137 - 137
js/JQuery.js

@@ -1,4 +1,80 @@
 smalltalk.addClass('JQuery', smalltalk.Object, ['jquery'], 'JQuery');
+smalltalk.addMethod(
+'_append_',
+smalltalk.method({
+selector: 'append:',
+category: 'DOM insertion',
+fn: function (anObject){
+var self=this;
+smalltalk.send(anObject, "_appendToJQuery_", [self]);
+return self;},
+source: unescape('append%3A%20anObject%0A%20%20%20%20%22Append%20anObject%20at%20the%20end%20of%20the%20element.%22%0A%20%20%20%20anObject%20appendToJQuery%3A%20self'),
+messageSends: ["appendToJQuery:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_appendElement_',
+smalltalk.method({
+selector: 'appendElement:',
+category: 'DOM insertion',
+fn: function (anElement){
+var self=this;
+smalltalk.send(self, "_call_withArgument_", ["append", anElement]);
+return self;},
+source: unescape('appendElement%3A%20anElement%0A%20%20%20%20%22Append%20anElement%20at%20the%20end%20of%20the%20element.%0A%20%20%20%20%20Dont%27t%20call%20this%20method%20directly%2C%20use%20%23append%3A%20instead%22%0A%20%20%20%20self%20call%3A%20%27append%27%20withArgument%3A%20anElement'),
+messageSends: ["call:withArgument:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_appendToJQuery_',
+smalltalk.method({
+selector: 'appendToJQuery:',
+category: 'DOM insertion',
+fn: function (aJQuery){
+var self=this;
+smalltalk.send(aJQuery, "_appendElement_", [self['@jquery']]);
+return self;},
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20jquery'),
+messageSends: ["appendElement:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_contents_',
+smalltalk.method({
+selector: 'contents:',
+category: 'DOM insertion',
+fn: function (anObject){
+var self=this;
+smalltalk.send(self, "_empty", []);
+smalltalk.send(self, "_append_", [anObject]);
+return self;},
+source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20empty.%0A%20%20%20%20self%20append%3A%20anObject'),
+messageSends: ["empty", "append:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_empty',
+smalltalk.method({
+selector: 'empty',
+category: 'DOM insertion',
+fn: function (){
+var self=this;
+return smalltalk.send(self, "_call_", ["empty"]);
+return self;},
+source: unescape('empty%0A%20%20%20%20%5Eself%20call%3A%20%27empty%27'),
+messageSends: ["call:"],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
 smalltalk.addMethod(
 '_removeAttribute_',
 smalltalk.method({
@@ -8,7 +84,7 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(self, "_call_withArgument_", ["removeAttribute", aString]);
 return self;},
-source: unescape('removeAttribute%3A%20aString%0A%20%20%20%20%22Remove%20an%20attribute%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27removeAttribute%27%20withArgument%3A%20aString%0A'),
+source: unescape('removeAttribute%3A%20aString%0A%20%20%20%20%22Remove%20an%20attribute%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27removeAttribute%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -23,7 +99,7 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(self, "_call_withArgument_", ["attr", aString]);
 return self;},
-source: unescape('attr%3A%20aString%0A%20%20%20%20%22Get%20the%20value%20of%20an%20attribute%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27attr%27%20withArgument%3A%20aString%0A'),
+source: unescape('attr%3A%20aString%0A%20%20%20%20%22Get%20the%20value%20of%20an%20attribute%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27attr%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -38,7 +114,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["val"]);
 return self;},
-source: unescape('val%0A%20%20%20%20%22Get%20the%20current%20value%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27val%27%0A'),
+source: unescape('val%0A%20%20%20%20%22Get%20the%20current%20value%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27val%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -53,7 +129,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["val", aString]);
 return self;},
-source: unescape('val%3A%20aString%0A%20%20%20%20self%20call%3A%20%27val%27%20withArgument%3A%20aString%0A'),
+source: unescape('val%3A%20aString%0A%20%20%20%20self%20call%3A%20%27val%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -83,7 +159,7 @@ fn: function (aString, anotherString){
 var self=this;
 self['@jquery'].css(aString, anotherString);
 return self;},
-source: unescape('cssAt%3A%20aString%20put%3A%20anotherString%0A%20%20%20%20%7B%27self%5B%27%27@jquery%27%27%5D.css%28aString%2C%20anotherString%29%27%7D%0A'),
+source: unescape('cssAt%3A%20aString%20put%3A%20anotherString%0A%20%20%20%20%7B%27self%5B%27%27@jquery%27%27%5D.css%28aString%2C%20anotherString%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -98,7 +174,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["addClass", aString]);
 return self;},
-source: unescape('addClass%3A%20aString%0A%20%20%20%20%22Adds%20the%20specified%20class%28es%29%20to%20each%20of%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27addClass%27%20withArgument%3A%20aString%0A'),
+source: unescape('addClass%3A%20aString%0A%20%20%20%20%22Adds%20the%20specified%20class%28es%29%20to%20each%20of%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27addClass%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -113,7 +189,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["removeClass", aString]);
 return self;},
-source: unescape('removeClass%3A%20aString%0A%20%20%20%20%22Remove%20a%20single%20class%2C%20multiple%20classes%2C%20or%20all%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27removeClass%27%20withArgument%3A%20aString%0A'),
+source: unescape('removeClass%3A%20aString%0A%20%20%20%20%22Remove%20a%20single%20class%2C%20multiple%20classes%2C%20or%20all%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20self%20call%3A%20%27removeClass%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -128,7 +204,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["toggleClass", aString]);
 return self;},
-source: unescape('toggleClass%3A%20aString%0A%20%20%20%20%22Add%20or%20remove%20one%20or%20more%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements%2C%20depending%20on%20either%20the%20class%27s%20presence%20or%20the%20value%20of%20the%20switch%20argument.%22%0A%20%20%20%20self%20call%3A%20%27toggleClass%27%20withArgument%3A%20aString%0A'),
+source: unescape('toggleClass%3A%20aString%0A%20%20%20%20%22Add%20or%20remove%20one%20or%20more%20classes%20from%20each%20element%20in%20the%20set%20of%20matched%20elements%2C%20depending%20on%20either%20the%20class%27s%20presence%20or%20the%20value%20of%20the%20switch%20argument.%22%0A%20%20%20%20self%20call%3A%20%27toggleClass%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -143,7 +219,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["height"]);
 return self;},
-source: unescape('height%20%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27height%27%0A'),
+source: unescape('height%20%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27height%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -158,7 +234,7 @@ fn: function (anInteger){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["height", anInteger]);
 return self;},
-source: unescape('height%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27height%27%20withArgument%3A%20anInteger%0A'),
+source: unescape('height%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27height%27%20withArgument%3A%20anInteger'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -173,7 +249,7 @@ fn: function (anInteger){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["width", anInteger]);
 return self;},
-source: unescape('width%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27width%27%20withArgument%3A%20anInteger%0A'),
+source: unescape('width%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27width%27%20withArgument%3A%20anInteger'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -188,7 +264,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["width"]);
 return self;},
-source: unescape('width%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27width%27%0A'),
+source: unescape('width%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27width%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -203,7 +279,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["innerHeight"]);
 return self;},
-source: unescape('innerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerHeight%27%0A'),
+source: unescape('innerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerHeight%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -218,7 +294,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["innerWidth"]);
 return self;},
-source: unescape('innerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerWidth%27%0A'),
+source: unescape('innerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20but%20not%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27innerWidth%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -233,7 +309,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["outerHeight"]);
 return self;},
-source: unescape('outerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%2C%20border%2C%20and%20optionally%20margin.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerHeight%27%0A'),
+source: unescape('outerHeight%0A%20%20%20%20%22Get%20the%20current%20computed%20height%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%2C%20border%2C%20and%20optionally%20margin.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerHeight%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -248,7 +324,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["outerWidth"]);
 return self;},
-source: unescape('outerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20and%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerWidth%27%0A'),
+source: unescape('outerWidth%0A%20%20%20%20%22Get%20the%20current%20computed%20width%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20including%20padding%20and%20border.%22%0A%20%20%20%20%5Eself%20call%3A%20%27outerWidth%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -263,7 +339,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_call_", ["position"]), "_basicAt_", ["top"]);
 return self;},
-source: unescape('top%0A%20%20%20%20%22Get%20the%20current%20y%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27top%27%0A'),
+source: unescape('top%0A%20%20%20%20%22Get%20the%20current%20y%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27top%27'),
 messageSends: ["basicAt:", "call:"],
 referencedClasses: []
 }),
@@ -278,7 +354,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_call_", ["position"]), "_basicAt_", ["left"]);
 return self;},
-source: unescape('left%0A%20%20%20%20%22Get%20the%20current%20x%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27left%27%0A'),
+source: unescape('left%0A%20%20%20%20%22Get%20the%20current%20x%20coordinate%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20offset%20parent.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27position%27%29%20basicAt%3A%20%27left%27'),
 messageSends: ["basicAt:", "call:"],
 referencedClasses: []
 }),
@@ -293,7 +369,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_call_", ["offset"]), "_basicAt_", ["left"]);
 return self;},
-source: unescape('offsetLeft%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27left%27%0A'),
+source: unescape('offsetLeft%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27left%27'),
 messageSends: ["basicAt:", "call:"],
 referencedClasses: []
 }),
@@ -308,7 +384,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.send(self, "_call_", ["offset"]), "_basicAt_", ["top"]);
 return self;},
-source: unescape('offsetTop%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27top%27%0A'),
+source: unescape('offsetTop%0A%20%20%20%20%22Get%20the%20current%20coordinates%20of%20the%20first%20element%20in%20the%20set%20of%20matched%20elements%2C%20relative%20to%20the%20document.%22%0A%20%20%20%20%5E%28self%20call%3A%20%27offset%27%29%20basicAt%3A%20%27top%27'),
 messageSends: ["basicAt:", "call:"],
 referencedClasses: []
 }),
@@ -323,7 +399,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["scrollLeft"]);
 return self;},
-source: unescape('scrollLeft%0A%20%20%20%20%22Get%20the%20current%20horizontal%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollLeft%27%0A'),
+source: unescape('scrollLeft%0A%20%20%20%20%22Get%20the%20current%20horizontal%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollLeft%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -338,7 +414,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_call_", ["scrollTop"]);
 return self;},
-source: unescape('scrollTop%0A%20%20%20%20%22Get%20the%20current%20vertical%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollTop%27%0A'),
+source: unescape('scrollTop%0A%20%20%20%20%22Get%20the%20current%20vertical%20position%20of%20the%20scroll%20bar%20for%20the%20first%20element%20in%20the%20set%20of%20matched%20elements.%22%0A%20%20%20%20%5Eself%20call%3A%20%27scrollTop%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -353,7 +429,7 @@ fn: function (anInteger){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["scrollLeft", anInteger]);
 return self;},
-source: unescape('scrollLeft%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollLeft%27%20withArgument%3A%20anInteger%0A'),
+source: unescape('scrollLeft%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollLeft%27%20withArgument%3A%20anInteger'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -368,7 +444,7 @@ fn: function (anInteger){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["scrollTop", anInteger]);
 return self;},
-source: unescape('scrollTop%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollTop%27%20withArgument%3A%20anInteger%0A'),
+source: unescape('scrollTop%3A%20anInteger%0A%20%20%20%20self%20call%3A%20%27scrollTop%27%20withArgument%3A%20anInteger'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -383,7 +459,7 @@ fn: function (){
 var self=this;
 smalltalk.send(self, "_call_", ["focus"]);
 return self;},
-source: unescape('focus%0A%20%20%20%20self%20call%3A%20%27focus%27%0A'),
+source: unescape('focus%0A%20%20%20%20self%20call%3A%20%27focus%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -398,7 +474,7 @@ fn: function (){
 var self=this;
 smalltalk.send(self, "_call_", ["show"]);
 return self;},
-source: unescape('show%0A%20%20%20%20self%20call%3A%20%27show%27%0A'),
+source: unescape('show%0A%20%20%20%20self%20call%3A%20%27show%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -413,7 +489,7 @@ fn: function (){
 var self=this;
 smalltalk.send(self, "_call_", ["hide"]);
 return self;},
-source: unescape('hide%0A%20%20%20%20self%20call%3A%20%27hide%27%0A'),
+source: unescape('hide%0A%20%20%20%20self%20call%3A%20%27hide%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -428,7 +504,7 @@ fn: function (){
 var self=this;
 smalltalk.send(self, "_call_", ["remove"]);
 return self;},
-source: unescape('remove%0A%20%20%20%20self%20call%3A%20%27remove%27%0A'),
+source: unescape('remove%0A%20%20%20%20self%20call%3A%20%27remove%27'),
 messageSends: ["call:"],
 referencedClasses: []
 }),
@@ -443,7 +519,7 @@ fn: function (anEventString, aBlock){
 var self=this;
 self['@jquery'].bind(anEventString, function(e){aBlock(e, self)});
 return self;},
-source: unescape('on%3A%20anEventString%20do%3A%20aBlock%0A%20%20%20%20%22Attach%20aBlock%20for%20anEventString%20on%20the%20element%22%0A%20%20%20%20%7B%27self%5B%27%27@jquery%27%27%5D.bind%28anEventString%2C%20function%28e%29%7BaBlock%28e%2C%20self%29%7D%29%27%7D%0A'),
+source: unescape('on%3A%20anEventString%20do%3A%20aBlock%0A%20%20%20%20%22Attach%20aBlock%20for%20anEventString%20on%20the%20element%22%0A%20%20%20%20%7B%27self%5B%27%27@jquery%27%27%5D.bind%28anEventString%2C%20function%28e%29%7BaBlock%28e%2C%20self%29%7D%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -458,88 +534,12 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_call_withArgument_", ["unbind", aString]);
 return self;},
-source: unescape('removeEvents%3A%20aString%0A%20%20%20%20%22Unbind%20all%20handlers%20attached%20to%20the%20event%20aString%22%0A%20%20%20%20self%20call%3A%20%27unbind%27%20withArgument%3A%20aString%0A'),
-messageSends: ["call:withArgument:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_append_',
-smalltalk.method({
-selector: 'append:',
-category: 'DOM insertion',
-fn: function (anObject){
-var self=this;
-smalltalk.send(anObject, "_appendToJQuery_", [self]);
-return self;},
-source: unescape('append%3A%20anObject%0A%20%20%20%20%22Append%20anObject%20at%20the%20end%20of%20the%20element.%22%0A%20%20%20%20anObject%20appendToJQuery%3A%20self%0A'),
-messageSends: ["appendToJQuery:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_appendElement_',
-smalltalk.method({
-selector: 'appendElement:',
-category: 'DOM insertion',
-fn: function (anElement){
-var self=this;
-smalltalk.send(self, "_call_withArgument_", ["append", anElement]);
-return self;},
-source: unescape('appendElement%3A%20anElement%0A%20%20%20%20%22Append%20anElement%20at%20the%20end%20of%20the%20element.%0A%20%20%20%20%20Dont%27t%20call%20this%20method%20directly%2C%20use%20%23append%3A%20instead%22%0A%20%20%20%20self%20call%3A%20%27append%27%20withArgument%3A%20anElement%0A'),
+source: unescape('removeEvents%3A%20aString%0A%20%20%20%20%22Unbind%20all%20handlers%20attached%20to%20the%20event%20aString%22%0A%20%20%20%20self%20call%3A%20%27unbind%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
 smalltalk.JQuery);
 
-smalltalk.addMethod(
-'_appendToJQuery_',
-smalltalk.method({
-selector: 'appendToJQuery:',
-category: 'DOM insertion',
-fn: function (aJQuery){
-var self=this;
-smalltalk.send(aJQuery, "_appendElement_", [self['@jquery']]);
-return self;},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20jquery%0A'),
-messageSends: ["appendElement:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_contents_',
-smalltalk.method({
-selector: 'contents:',
-category: 'DOM insertion',
-fn: function (anObject){
-var self=this;
-smalltalk.send(self, "_empty", []);
-smalltalk.send(self, "_append_", [anObject]);
-return self;},
-source: unescape('contents%3A%20anObject%0A%20%20%20%20self%20empty.%0A%20%20%20%20self%20append%3A%20anObject%0A'),
-messageSends: ["empty", "append:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
-smalltalk.addMethod(
-'_empty',
-smalltalk.method({
-selector: 'empty',
-category: 'DOM insertion',
-fn: function (){
-var self=this;
-return smalltalk.send(self, "_call_", ["empty"]);
-return self;},
-source: unescape('empty%0A%20%20%20%20%5Eself%20call%3A%20%27empty%27'),
-messageSends: ["call:"],
-referencedClasses: []
-}),
-smalltalk.JQuery);
-
 smalltalk.addMethod(
 '_initializeWithJQueryObject_',
 smalltalk.method({
@@ -549,7 +549,7 @@ fn: function (anObject){
 var self=this;
 self['@jquery']=anObject;
 return self;},
-source: unescape('initializeWithJQueryObject%3A%20anObject%0A%20%20%20%20jquery%20%3A%3D%20anObject%0A'),
+source: unescape('initializeWithJQueryObject%3A%20anObject%0A%20%20%20%20jquery%20%3A%3D%20anObject'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -594,7 +594,7 @@ fn: function (aString){
 var self=this;
 return smalltalk.send(self, "_call_withArgument_", ["hasClass", aString]);
 return self;},
-source: unescape('hasClass%3A%20aString%0A%20%20%20%20%22Determine%20whether%20any%20of%20the%20matched%20elements%20are%20assigned%20the%20given%20class.%22%0A%20%20%20%20%5Eself%20call%3A%20%27hasClass%27%20withArgument%3A%20aString%0A'),
+source: unescape('hasClass%3A%20aString%0A%20%20%20%20%22Determine%20whether%20any%20of%20the%20matched%20elements%20are%20assigned%20the%20given%20class.%22%0A%20%20%20%20%5Eself%20call%3A%20%27hasClass%27%20withArgument%3A%20aString'),
 messageSends: ["call:withArgument:"],
 referencedClasses: []
 }),
@@ -612,7 +612,7 @@ var newJQuery=nil;
 newJQuery = jQuery(String(aString));
 return smalltalk.send(self, "_from_", [newJQuery]);
 return self;},
-source: unescape('fromString%3A%20aString%0A%20%20%20%20%7C%20newJQuery%20%7C%0A%20%20%20%20%7B%27newJQuery%20%3D%20jQuery%28String%28aString%29%29%27%7D.%0A%20%20%20%20%5Eself%20from%3A%20newJQuery%0A'),
+source: unescape('fromString%3A%20aString%0A%20%20%20%20%7C%20newJQuery%20%7C%0A%20%20%20%20%7B%27newJQuery%20%3D%20jQuery%28String%28aString%29%29%27%7D.%0A%20%20%20%20%5Eself%20from%3A%20newJQuery'),
 messageSends: ["from:"],
 referencedClasses: []
 }),
@@ -627,7 +627,7 @@ fn: function (anObject){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_initializeWithJQueryObject_", [anObject]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;},
-source: unescape('from%3A%20anObject%0A%20%20%20%20%5Eself%20new%0A%09initializeWithJQueryObject%3A%20anObject%3B%0A%09yourself%0A'),
+source: unescape('from%3A%20anObject%0A%20%20%20%20%5Eself%20new%0A%09initializeWithJQueryObject%3A%20anObject%3B%0A%09yourself'),
 messageSends: ["initializeWithJQueryObject:", "yourself", "new"],
 referencedClasses: []
 }),
@@ -680,23 +680,7 @@ smalltalk.JQuery.klass);
 
 
 smalltalk.addClass('Ajax', smalltalk.Object, ['settings'], 'JQuery');
-smalltalk.Ajax.comment=unescape('instance%20variable%20names%3A%0A-%20settings%20%20A%20set%20of%20key/value%20pairs%20that%20configure%20the%20Ajax%20request.%20All%20settings%20are%20optional.%0A%0AFull%20list%20of%20settings%20options%20at%20http%3A//api.jquery.com/jQuery.ajax/%0A')
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-self['@settings']=smalltalk.send(smalltalk.Dictionary, "_new", []);
-return self;},
-source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20settings%20%3A%3D%20Dictionary%20new%0A'),
-messageSends: ["initialize", "new"],
-referencedClasses: [smalltalk.Dictionary]
-}),
-smalltalk.Ajax);
-
+smalltalk.Ajax.comment=unescape('instance%20variable%20names%3A%0A-%20settings%20%20A%20set%20of%20key/value%20pairs%20that%20configure%20the%20Ajax%20request.%20All%20settings%20are%20optional.%0A%0AFull%20list%20of%20settings%20options%20at%20http%3A//api.jquery.com/jQuery.ajax/')
 smalltalk.addMethod(
 '_at_',
 smalltalk.method({
@@ -706,7 +690,7 @@ fn: function (aKey){
 var self=this;
 return smalltalk.send(self['@settings'], "_at_ifAbsent_", [aKey, (function(){return nil;})]);
 return self;},
-source: unescape('at%3A%20aKey%0A%20%20%20%20%5Esettings%20at%3A%20aKey%20ifAbsent%3A%20%5Bnil%5D%0A'),
+source: unescape('at%3A%20aKey%0A%20%20%20%20%5Esettings%20at%3A%20aKey%20ifAbsent%3A%20%5Bnil%5D'),
 messageSends: ["at:ifAbsent:"],
 referencedClasses: []
 }),
@@ -721,7 +705,7 @@ fn: function (aKey, aValue){
 var self=this;
 smalltalk.send(self['@settings'], "_at_put_", [aKey, aValue]);
 return self;},
-source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%20%20%20%20settings%20at%3A%20aKey%20put%3A%20aValue%0A'),
+source: unescape('at%3A%20aKey%20put%3A%20aValue%0A%20%20%20%20settings%20at%3A%20aKey%20put%3A%20aValue'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -736,7 +720,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(self, "_at_", ["url"]);
 return self;},
-source: unescape('url%0A%20%20%20%20%5Eself%20at%3A%20%27url%27%0A'),
+source: unescape('url%0A%20%20%20%20%5Eself%20at%3A%20%27url%27'),
 messageSends: ["at:"],
 referencedClasses: []
 }),
@@ -751,7 +735,7 @@ fn: function (aString){
 var self=this;
 smalltalk.send(self, "_at_put_", ["url", aString]);
 return self;},
-source: unescape('url%3A%20aString%0A%20%20%20%20self%20at%3A%20%27url%27%20put%3A%20aString%0A'),
+source: unescape('url%3A%20aString%0A%20%20%20%20self%20at%3A%20%27url%27%20put%3A%20aString'),
 messageSends: ["at:put:"],
 referencedClasses: []
 }),
@@ -766,12 +750,28 @@ fn: function (){
 var self=this;
 jQuery.ajax(self['@settings']);
 return self;},
-source: unescape('send%0A%20%20%20%20%7B%27jQuery.ajax%28self%5B%27%27@settings%27%27%5D%29%27%7D%0A'),
+source: unescape('send%0A%20%20%20%20%7B%27jQuery.ajax%28self%5B%27%27@settings%27%27%5D%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Ajax);
 
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+self['@settings']=smalltalk.send(smalltalk.Dictionary, "_new", []);
+return self;},
+source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20settings%20%3A%3D%20Dictionary%20new'),
+messageSends: ["initialize", "new"],
+referencedClasses: [smalltalk.Dictionary]
+}),
+smalltalk.Ajax);
+
 
 smalltalk.addMethod(
 '_url_',
@@ -782,7 +782,7 @@ fn: function (aString){
 var self=this;
 return (function($rec){smalltalk.send($rec, "_url_", [aString]);return smalltalk.send($rec, "_yourself", []);})(smalltalk.send(self, "_new", []));
 return self;},
-source: unescape('url%3A%20aString%0A%20%20%20%20%5Eself%20new%0A%09url%3A%20aString%3B%0A%09yourself%0A'),
+source: unescape('url%3A%20aString%0A%20%20%20%20%5Eself%20new%0A%09url%3A%20aString%3B%0A%09yourself'),
 messageSends: ["url:", "yourself", "new"],
 referencedClasses: []
 }),
@@ -801,7 +801,7 @@ canvas=smalltalk.send(smalltalk.HTMLCanvas, "_new", []);
 smalltalk.send(self, "_value_", [canvas]);
 smalltalk.send(aJQuery, "_append_", [canvas]);
 return self;},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%09%7C%20canvas%20%7C%0A%09canvas%20%3A%3D%20HTMLCanvas%20new.%0A%09self%20value%3A%20canvas.%0A%09aJQuery%20append%3A%20canvas%0A'),
+source: unescape('appendToJQuery%3A%20aJQuery%0A%09%7C%20canvas%20%7C%0A%09canvas%20%3A%3D%20HTMLCanvas%20new.%0A%09self%20value%3A%20canvas.%0A%09aJQuery%20append%3A%20canvas'),
 messageSends: ["new", "value:", "append:"],
 referencedClasses: [smalltalk.HTMLCanvas]
 }),
@@ -816,7 +816,7 @@ fn: function (){
 var self=this;
 return smalltalk.send(smalltalk.JQuery, "_fromString_", [self]);
 return self;},
-source: unescape('asJQuery%0A%20%20%20%20%5EJQuery%20fromString%3A%20self%0A'),
+source: unescape('asJQuery%0A%20%20%20%20%5EJQuery%20fromString%3A%20self'),
 messageSends: ["fromString:"],
 referencedClasses: [smalltalk.JQuery]
 }),
@@ -831,7 +831,7 @@ fn: function (aJQuery){
 var self=this;
 aJQuery._appendElement_(String(self));
 return self;},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20%7B%27aJQuery._appendElement_%28String%28self%29%29%27%7D%0A'),
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20%7B%27aJQuery._appendElement_%28String%28self%29%29%27%7D'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -846,7 +846,7 @@ fn: function (aJQuery){
 var self=this;
 smalltalk.send(aJQuery, "_appendElement_", [smalltalk.send(self['@root'], "_element", [])]);
 return self;},
-source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20root%20element%0A'),
+source: unescape('appendToJQuery%3A%20aJQuery%0A%20%20%20%20aJQuery%20appendElement%3A%20root%20element'),
 messageSends: ["appendElement:", "element"],
 referencedClasses: []
 }),

File diff suppressed because it is too large
+ 143 - 107
js/Kernel.js


File diff suppressed because it is too large
+ 90 - 60
js/Parser.js


+ 316 - 316
js/SUnit.js

@@ -1,29 +1,29 @@
 smalltalk.addClass('TestCase', smalltalk.Object, ['testedClass'], 'SUnit');
 smalltalk.addMethod(
-'_setUp',
+'_testedClass',
 smalltalk.method({
-selector: 'setUp',
-category: 'running',
+selector: 'testedClass',
+category: 'accessing',
 fn: function (){
 var self=this;
-
+return self['@testedClass'];
 return self;},
-source: unescape('setUp'),
+source: unescape('testedClass%0A%09%5EtestedClass'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_tearDown',
+'_testedClass_',
 smalltalk.method({
-selector: 'tearDown',
-category: 'running',
-fn: function (){
+selector: 'testedClass:',
+category: 'accessing',
+fn: function (aClass){
 var self=this;
-
+self['@testedClass']=aClass;
 return self;},
-source: unescape('tearDown'),
+source: unescape('testedClass%3A%20aClass%0A%09testedClass%20%3A%3D%20aClass'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -45,92 +45,62 @@ referencedClasses: []
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_methods',
+'_signalFailure_',
 smalltalk.method({
-selector: 'methods',
-category: 'running',
-fn: function (){
+selector: 'signalFailure:',
+category: 'private',
+fn: function (aString){
 var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
+(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(smalltalk.TestFailure, "_new", []));
 return self;},
-source: unescape('methods%0A%09%5Eself%20class%20methodDictionary%20keys%20select%3A%20%5B%3Aeach%20%7C%20each%20match%3A%20%27%5Etest%27%5D'),
-messageSends: ["select:", "keys", "methodDictionary", "class", "match:"],
+source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
+messageSends: ["messageText:", "signal", "new"],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_testedClass',
+'_setUp',
 smalltalk.method({
-selector: 'testedClass',
-category: 'accessing',
+selector: 'setUp',
+category: 'running',
 fn: function (){
 var self=this;
-return self['@testedClass'];
-return self;},
-source: unescape('testedClass%0A%09%5EtestedClass'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.TestCase);
 
-smalltalk.addMethod(
-'_testedClass_',
-smalltalk.method({
-selector: 'testedClass:',
-category: 'accessing',
-fn: function (aClass){
-var self=this;
-self['@testedClass']=aClass;
 return self;},
-source: unescape('testedClass%3A%20aClass%0A%09testedClass%20%3A%3D%20aClass'),
+source: unescape('setUp'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_assert_',
+'_tearDown',
 smalltalk.method({
-selector: 'assert:',
-category: 'testing',
-fn: function (aBoolean){
+selector: 'tearDown',
+category: 'running',
+fn: function (){
 var self=this;
-smalltalk.send(aBoolean, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", ["Assertion failed"]);})]);
-return self;},
-source: unescape('assert%3A%20aBoolean%0A%09aBoolean%20ifFalse%3A%20%5Bself%20signalFailure%3A%20%27Assertion%20failed%27%5D'),
-messageSends: ["ifFalse:", "signalFailure:"],
-referencedClasses: []
-}),
-smalltalk.TestCase);
 
-smalltalk.addMethod(
-'_deny_',
-smalltalk.method({
-selector: 'deny:',
-category: 'testing',
-fn: function (aBoolean){
-var self=this;
-smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
 return self;},
-source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'),
-messageSends: ["assert:", "not"],
+source: unescape('tearDown'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestCase);
 
 smalltalk.addMethod(
-'_signalFailure_',
+'_methods',
 smalltalk.method({
-selector: 'signalFailure:',
-category: 'private',
-fn: function (aString){
+selector: 'methods',
+category: 'running',
+fn: function (){
 var self=this;
-(function($rec){smalltalk.send($rec, "_messageText_", [aString]);return smalltalk.send($rec, "_signal", []);})(smalltalk.send(smalltalk.TestFailure, "_new", []));
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_class", []), "_methodDictionary", []), "_keys", []), "_select_", [(function(each){return smalltalk.send(each, "_match_", [unescape("%5Etest")]);})]);
 return self;},
-source: unescape('signalFailure%3A%20aString%0A%09TestFailure%20new%0A%09%09messageText%3A%20aString%3B%0A%09%09signal'),
-messageSends: ["messageText:", "signal", "new"],
-referencedClasses: [smalltalk.TestFailure]
+source: unescape('methods%0A%09%5Eself%20class%20methodDictionary%20keys%20select%3A%20%5B%3Aeach%20%7C%20each%20match%3A%20%27%5Etest%27%5D'),
+messageSends: ["select:", "keys", "methodDictionary", "class", "match:"],
+referencedClasses: []
 }),
 smalltalk.TestCase);
 
@@ -162,7 +132,37 @@ smalltalk.send(smalltalk.send(self, "_methods", []), "_do_", [(function(each){sm
 return self;},
 source: unescape('performTestFor%3A%20aResult%0A%09self%20methods%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%5B%5Bself%20perform%3A%20each%5D%0A%09%09%09on%3A%20TestFailure%20do%3A%20%5B%3Aex%20%7C%20aResult%20addFailure%3A%20self%20class%20name%2C%20%27%3E%3E%27%2C%20each%5D%5D%0A%09%09%09on%3A%20Error%20do%3A%20%5B%3Aex%20%7C%20aResult%20addError%3A%20self%20class%20name%2C%20%27%3E%3E%27%2C%20each%5D.%0A%09%09aResult%20increaseRuns%5D'),
 messageSends: ["do:", "methods", "on:do:", "perform:", "addFailure:", unescape("%2C"), "name", "class", "addError:", "increaseRuns"],
-referencedClasses: [smalltalk.TestFailure,smalltalk.Error]
+referencedClasses: [smalltalk.Error]
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_assert_',
+smalltalk.method({
+selector: 'assert:',
+category: 'testing',
+fn: function (aBoolean){
+var self=this;
+smalltalk.send(aBoolean, "_ifFalse_", [(function(){return smalltalk.send(self, "_signalFailure_", ["Assertion failed"]);})]);
+return self;},
+source: unescape('assert%3A%20aBoolean%0A%09aBoolean%20ifFalse%3A%20%5Bself%20signalFailure%3A%20%27Assertion%20failed%27%5D'),
+messageSends: ["ifFalse:", "signalFailure:"],
+referencedClasses: []
+}),
+smalltalk.TestCase);
+
+smalltalk.addMethod(
+'_deny_',
+smalltalk.method({
+selector: 'deny:',
+category: 'testing',
+fn: function (aBoolean){
+var self=this;
+smalltalk.send(self, "_assert_", [smalltalk.send(aBoolean, "_not", [])]);
+return self;},
+source: unescape('deny%3A%20aBoolean%0A%09self%20assert%3A%20aBoolean%20not'),
+messageSends: ["assert:", "not"],
+referencedClasses: []
 }),
 smalltalk.TestCase);
 
@@ -178,7 +178,7 @@ fn: function (){
 var self=this;
 smalltalk.send(self, "_deny_", [true]);
 return self;},
-source: unescape('testFailure%0A%09self%20deny%3A%20true%0A%09'),
+source: unescape('testFailure%0A%09self%20deny%3A%20true'),
 messageSends: ["deny:"],
 referencedClasses: []
 }),
@@ -293,73 +293,12 @@ fn: function (){
 var self=this;
 return unescape("%5BTest%20runner%5D");
 return self;},
-source: unescape('label%0A%20%20%20%20%5E%27%5BTest%20runner%5D%27%0A'),
+source: unescape('label%0A%20%20%20%20%5E%27%5BTest%20runner%5D%27'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
-smalltalk.addMethod(
-'_canBeClosed',
-smalltalk.method({
-selector: 'canBeClosed',
-category: 'testing',
-fn: function (){
-var self=this;
-return true;
-return self;},
-source: unescape('canBeClosed%0A%20%20%20%20%5Etrue%0A'),
-messageSends: [],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
-smalltalk.addMethod(
-'_renderBoxOn_',
-smalltalk.method({
-selector: 'renderBoxOn:',
-category: 'rendering',
-fn: function (html){
-var self=this;
-(function($rec){smalltalk.send($rec, "_renderCategoriesOn_", [html]);smalltalk.send($rec, "_renderClassesOn_", [html]);return smalltalk.send($rec, "_renderResultsOn_", [html]);})(self);
-return self;},
-source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderCategoriesOn%3A%20html%3B%0A%09renderClassesOn%3A%20html%3B%0A%09renderResultsOn%3A%20html'),
-messageSends: ["renderCategoriesOn:", "renderClassesOn:", "renderResultsOn:"],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
-smalltalk.addMethod(
-'_renderButtonsOn_',
-smalltalk.method({
-selector: 'renderButtonsOn:',
-category: 'rendering',
-fn: function (html){
-var self=this;
-(function($rec){smalltalk.send($rec, "_with_", ["Run selected"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_run_", [smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_collect_", [(function(each){return smalltalk.send(each, "_new", []);})])]);})]);})(smalltalk.send(html, "_button", []));
-return self;},
-source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27Run%20selected%27%3B%0A%09onClick%3A%20%5Bself%20run%3A%20%28self%20selectedClasses%20collect%3A%20%5B%3Aeach%20%7C%20each%20new%5D%29%5D%0A'),
-messageSends: ["with:", "onClick:", "run:", "collect:", "selectedClasses", "new", "button"],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
-smalltalk.addMethod(
-'_renderCategoriesOn_',
-smalltalk.method({
-selector: 'renderCategoriesOn:',
-category: 'rendering',
-fn: function (html){
-var self=this;
-self['@categoriesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit categories"]);
-smalltalk.send(self, "_updateCategoriesList", []);
-return self;},
-source: unescape('renderCategoriesOn%3A%20html%0A%20%20%20%20%09categoriesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20categories%27.%0A%09self%20updateCategoriesList'),
-messageSends: ["class:", "ul", "updateCategoriesList"],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
 smalltalk.addMethod(
 '_categories',
 smalltalk.method({
@@ -378,54 +317,6 @@ referencedClasses: [smalltalk.Array]
 }),
 smalltalk.TestRunner);
 
-smalltalk.addMethod(
-'_updateCategoriesList',
-smalltalk.method({
-selector: 'updateCategoriesList',
-category: 'updating',
-fn: function (){
-var self=this;
-smalltalk.send(self['@categoriesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["all"]);smalltalk.send($rec, "_with_", ["All"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectAllCategories", []);})]);})(smalltalk.send(html, "_li", []));return smalltalk.send(smalltalk.send(self, "_categories", []), "_do_", [(function(each){var li=nil;
-li=smalltalk.send(html, "_li", []);smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [each]), "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]);return (function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_toggleCategory_", [each]);})]);})(li);})]);})]);
-return self;},
-source: unescape('updateCategoriesList%0A%20%20%20%20categoriesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%20%20%20%20html%20li%20%0A%09%09class%3A%20%27all%27%3B%0A%09%09with%3A%20%27All%27%3B%0A%09%09onClick%3A%20%5Bself%20selectAllCategories%5D.%0A%09self%20categories%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%20%20%20%20li%20%3A%3D%20html%20li.%0A%09%20%20%20%20%28self%20selectedCategories%20includes%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%0A%09%09with%3A%20each%3B%0A%09%09onClick%3A%20%5Bself%20toggleCategory%3A%20each%5D%5D%5D'),
-messageSends: ["contents:", "class:", "with:", "onClick:", "selectAllCategories", "li", "do:", "categories", "ifTrue:", "includes:", "selectedCategories", "toggleCategory:"],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
-smalltalk.addMethod(
-'_renderClassesOn_',
-smalltalk.method({
-selector: 'renderClassesOn:',
-category: 'rendering',
-fn: function (html){
-var self=this;
-self['@classesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit classes"]);
-smalltalk.send(self, "_updateClassesList", []);
-return self;},
-source: unescape('renderClassesOn%3A%20html%0A%20%20%20%20%09classesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20classes%27.%0A%09self%20updateClassesList'),
-messageSends: ["class:", "ul", "updateClassesList"],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
-smalltalk.addMethod(
-'_updateClassesList',
-smalltalk.method({
-selector: 'updateClassesList',
-category: 'updating',
-fn: function (){
-var self=this;
-smalltalk.send(self['@classesList'], "_contents_", [(function(html){smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_isEmpty", []), "_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_class_", ["all"]);smalltalk.send($rec, "_with_", ["All"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectAllClasses", []);})]);})(smalltalk.send(html, "_li", []));})]);return smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){var li=nil;
-li=smalltalk.send(html, "_li", []);smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [each]), "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]);return (function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(each, "_name", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_toggleClass_", [each]);})]);})(li);})]);})]);
-return self;},
-source: unescape('updateClassesList%0A%20%20%20%20classesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%28self%20selectedCategories%20isEmpty%29%20ifFalse%3A%20%5B%0A%09%09html%20li%0A%09%09%09class%3A%20%27all%27%3B%0A%09%09%09with%3A%20%27All%27%3B%0A%09%09%09onClick%3A%20%5Bself%20selectAllClasses%5D%5D.%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%09li%20%3A%3D%20html%20li.%0A%09%09%28self%20selectedClasses%20includes%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09%09li%20class%3A%20%27selected%27%5D.%0A%09%09li%0A%09%09%09with%3A%20each%20name%3B%0A%09%09%09onClick%3A%20%5Bself%20toggleClass%3A%20each%5D%5D%5D'),
-messageSends: ["contents:", "ifFalse:", "isEmpty", "selectedCategories", "class:", "with:", "onClick:", "selectAllClasses", "li", "do:", "classes", "ifTrue:", "includes:", "selectedClasses", "name", "toggleClass:"],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
 smalltalk.addMethod(
 '_classes',
 smalltalk.method({
@@ -487,193 +378,159 @@ referencedClasses: [smalltalk.Array]
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_selectAllCategories',
+'_progressBar',
 smalltalk.method({
-selector: 'selectAllCategories',
-category: 'actions',
+selector: 'progressBar',
+category: 'accessing',
 fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_categories", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(self['@selectedCategories'], "_includes_", [each]), "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})]);})]);
-(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);
+return smalltalk.send(self['@progressBar'], "_ifNil_", [(function(){return self['@progressBar']=smalltalk.send(smalltalk.ProgressBar, "_new", []);})]);
 return self;},
-source: unescape('selectAllCategories%0A%09self%20categories%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedCategories%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedCategories%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'),
-messageSends: ["do:", "categories", "ifFalse:", "includes:", "add:", "selectedCategories", "updateCategoriesList", "updateClassesList"],
-referencedClasses: []
+source: unescape('progressBar%0A%09%5EprogressBar%20ifNil%3A%20%5BprogressBar%20%3A%3D%20ProgressBar%20new%5D'),
+messageSends: ["ifNil:", "new"],
+referencedClasses: [smalltalk.ProgressBar]
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_toggleCategory_',
+'_selectedMethods',
 smalltalk.method({
-selector: 'toggleCategory:',
-category: 'actions',
-fn: function (aCategory){
+selector: 'selectedMethods',
+category: 'accessing',
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_isSelectedCategory_", [aCategory]), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);}), (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})]);
-(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);
+return smalltalk.send(self['@selectedMethods'], "_ifNil_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_collect_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_keys", []), "_select_", [(function(key){return smalltalk.send(key, "_beginsWith_", ["test"]);})]);})]);})]);
 return self;},
-source: unescape('toggleCategory%3A%20aCategory%0A%09%28self%20isSelectedCategory%3A%20aCategory%29%20%0A%09%09ifFalse%3A%20%5BselectedCategories%20add%3A%20aCategory%5D%0A%09%09ifTrue%3A%20%5BselectedCategories%20remove%3A%20aCategory%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'),
-messageSends: ["ifFalse:ifTrue:", "isSelectedCategory:", "add:", "remove:", "updateCategoriesList", "updateClassesList"],
+source: unescape('selectedMethods%0A%09%5EselectedMethods%20ifNil%3A%20%5Bself%20selectedClasses%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09each%20methodDictionary%20keys%20select%3A%20%5B%3Akey%20%7C%20%20key%20beginsWith%3A%20%27test%27%20%5D%5D%5D'),
+messageSends: ["ifNil:", "collect:", "selectedClasses", "select:", "keys", "methodDictionary", "beginsWith:"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_toggleClass_',
+'_statusInfo',
 smalltalk.method({
-selector: 'toggleClass:',
-category: 'actions',
-fn: function (aClass){
+selector: 'statusInfo',
+category: 'accessing',
+fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_isSelectedClass_", [aClass]), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);}), (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})]);
-smalltalk.send(self, "_updateClassesList", []);
+return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printTotal", []), "__comma", [smalltalk.send(self, "_printPasses", [])]), "__comma", [smalltalk.send(self, "_printErrors", [])]), "__comma", [smalltalk.send(self, "_printFailures", [])]);
 return self;},
-source: unescape('toggleClass%3A%20aClass%0A%09%28self%20isSelectedClass%3A%20aClass%29%20%0A%09%09ifFalse%3A%20%5BselectedClasses%20add%3A%20aClass%5D%0A%09%09ifTrue%3A%20%5BselectedClasses%20remove%3A%20aClass%5D.%0A%09self%20%0A%09%20%20%20%20updateClassesList'),
-messageSends: ["ifFalse:ifTrue:", "isSelectedClass:", "add:", "remove:", "updateClassesList"],
+source: unescape('statusInfo%0A%09%5Eself%20printTotal%2C%20self%20printPasses%2C%20self%20printErrors%2C%20self%20printFailures'),
+messageSends: [unescape("%2C"), "printTotal", "printPasses", "printErrors", "printFailures"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_isSelectedClass_',
+'_result',
 smalltalk.method({
-selector: 'isSelectedClass:',
-category: 'testing',
-fn: function (aClass){
+selector: 'result',
+category: 'accessing',
+fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [aClass]);
+return self['@result'];
 return self;},
-source: unescape('isSelectedClass%3A%20aClass%0A%09%5E%28self%20selectedClasses%20includes%3A%20aClass%29'),
-messageSends: ["includes:", "selectedClasses"],
+source: unescape('result%0A%09%5Eresult'),
+messageSends: [],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_isSelectedCategory_',
+'_failedMethods',
 smalltalk.method({
-selector: 'isSelectedCategory:',
-category: 'testing',
-fn: function (aCategory){
+selector: 'failedMethods',
+category: 'accessing',
+fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [aCategory]);
+smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_collect_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["failures"]);return smalltalk.send($rec, "_with_", [each]);})(smalltalk.send(html, "_li", []));})]);
 return self;},
-source: unescape('isSelectedCategory%3A%20aCategory%0A%09%5E%28self%20selectedCategories%20includes%3A%20aCategory%29'),
-messageSends: ["includes:", "selectedCategories"],
+source: unescape('failedMethods%0A%09self%20result%20failures%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%20%0A%09%09%09class%3A%20%27failures%27%3B%0A%09%09%09with%3A%20each%5D'),
+messageSends: ["collect:", "failures", "result", "class:", "with:", "li"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_selectAllClasses',
+'_selectAllCategories',
 smalltalk.method({
-selector: 'selectAllClasses',
+selector: 'selectAllCategories',
 category: 'actions',
 fn: function (){
 var self=this;
-smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(self['@selectedClasses'], "_includes_", [each]), "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})]);})]);
+smalltalk.send(smalltalk.send(self, "_categories", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(self['@selectedCategories'], "_includes_", [each]), "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_add_", [each]);})]);})]);
 (function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);
 return self;},
-source: unescape('selectAllClasses%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedClasses%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedClasses%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'),
-messageSends: ["do:", "classes", "ifFalse:", "includes:", "add:", "selectedClasses", "updateCategoriesList", "updateClassesList"],
-referencedClasses: []
-}),
-smalltalk.TestRunner);
-
-smalltalk.addMethod(
-'_run_',
-smalltalk.method({
-selector: 'run:',
-category: 'actions',
-fn: function (aCollection){
-var self=this;
-self['@result']=smalltalk.send(smalltalk.TestResult, "_new", []);
-(function($rec){smalltalk.send($rec, "_updateStatusDiv", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self);
-smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [(0)]);
-smalltalk.send(self['@result'], "_total_", [smalltalk.send(aCollection, "_inject_into_", [(0), (function(acc, each){return smalltalk.send(acc, "__plus", [smalltalk.send(smalltalk.send(each, "_methods", []), "_size", [])]);})])]);
-smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send((function(){smalltalk.send(each, "_runCaseFor_", [self['@result']]);smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@result'], "_runs", []), "__slash", [smalltalk.send(self['@result'], "_total", [])]), "__star", [(100)])]);smalltalk.send(self, "_updateStatusDiv", []);return smalltalk.send(self, "_updateMethodsList", []);}), "_valueWithTimeout_", [(100)]);})]);
-return self;},
-source: unescape('run%3A%20aCollection%0A%09result%20%3A%3D%20TestResult%20new.%0A%09self%20%0A%09%09updateStatusDiv%3B%0A%09%09updateMethodsList.%0A%09self%20progressBar%20updatePercent%3A%200.%0A%09result%20total%3A%20%28aCollection%20inject%3A%200%20into%3A%20%5B%3Aacc%20%3Aeach%20%7C%20acc%20+%20each%20methods%20size%5D%29.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%5Beach%20runCaseFor%3A%20result.%0A%09%09self%20progressBar%20updatePercent%3A%20result%20runs%20/%20result%20total%20*%20100.%0A%09%09self%20updateStatusDiv.%0A%09%09self%20updateMethodsList%5D%20valueWithTimeout%3A%20100%5D.'),
-messageSends: ["new", "updateStatusDiv", "updateMethodsList", "updatePercent:", "progressBar", "total:", "inject:into:", unescape("+"), "size", "methods", "do:", "valueWithTimeout:", "runCaseFor:", unescape("*"), unescape("/"), "runs", "total"],
-referencedClasses: [smalltalk.TestResult]
-}),
-smalltalk.TestRunner);
-
-smalltalk.addMethod(
-'_renderResultsOn_',
-smalltalk.method({
-selector: 'renderResultsOn:',
-category: 'rendering',
-fn: function (html){
-var self=this;
-self['@statusDiv']=smalltalk.send(html, "_div", []);
-smalltalk.send(html, "_with_", [smalltalk.send(self, "_progressBar", [])]);
-self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit methods"]);
-smalltalk.send(self, "_updateMethodsList", []);
-smalltalk.send(self, "_updateStatusDiv", []);
-return self;},
-source: unescape('renderResultsOn%3A%20html%0A%20%20%20%20%09statusDiv%20%3A%3D%20html%20div.%0A%09html%20with%3A%20self%20progressBar.%0A%20%20%20%09methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20methods%27.%0A%09self%20updateMethodsList.%0A%09self%20updateStatusDiv'),
-messageSends: ["div", "with:", "progressBar", "class:", "ul", "updateMethodsList", "updateStatusDiv"],
+source: unescape('selectAllCategories%0A%09self%20categories%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedCategories%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedCategories%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'),
+messageSends: ["do:", "categories", "ifFalse:", "includes:", "add:", "selectedCategories", "updateCategoriesList", "updateClassesList"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_progressBar',
-smalltalk.method({
-selector: 'progressBar',
-category: 'accessing',
-fn: function (){
+'_toggleCategory_',
+smalltalk.method({
+selector: 'toggleCategory:',
+category: 'actions',
+fn: function (aCategory){
 var self=this;
-return smalltalk.send(self['@progressBar'], "_ifNil_", [(function(){return self['@progressBar']=smalltalk.send(smalltalk.ProgressBar, "_new", []);})]);
+smalltalk.send(smalltalk.send(self, "_isSelectedCategory_", [aCategory]), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedCategories'], "_add_", [aCategory]);}), (function(){return smalltalk.send(self['@selectedCategories'], "_remove_", [aCategory]);})]);
+(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);
 return self;},
-source: unescape('progressBar%0A%09%5EprogressBar%20ifNil%3A%20%5BprogressBar%20%3A%3D%20ProgressBar%20new%5D'),
-messageSends: ["ifNil:", "new"],
-referencedClasses: [smalltalk.ProgressBar]
+source: unescape('toggleCategory%3A%20aCategory%0A%09%28self%20isSelectedCategory%3A%20aCategory%29%20%0A%09%09ifFalse%3A%20%5BselectedCategories%20add%3A%20aCategory%5D%0A%09%09ifTrue%3A%20%5BselectedCategories%20remove%3A%20aCategory%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'),
+messageSends: ["ifFalse:ifTrue:", "isSelectedCategory:", "add:", "remove:", "updateCategoriesList", "updateClassesList"],
+referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_selectedMethods',
+'_toggleClass_',
 smalltalk.method({
-selector: 'selectedMethods',
-category: 'accessing',
-fn: function (){
+selector: 'toggleClass:',
+category: 'actions',
+fn: function (aClass){
 var self=this;
-return smalltalk.send(self['@selectedMethods'], "_ifNil_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_collect_", [(function(each){return smalltalk.send(smalltalk.send(smalltalk.send(each, "_methodDictionary", []), "_keys", []), "_select_", [(function(key){return smalltalk.send(key, "_beginsWith_", ["test"]);})]);})]);})]);
+smalltalk.send(smalltalk.send(self, "_isSelectedClass_", [aClass]), "_ifFalse_ifTrue_", [(function(){return smalltalk.send(self['@selectedClasses'], "_add_", [aClass]);}), (function(){return smalltalk.send(self['@selectedClasses'], "_remove_", [aClass]);})]);
+smalltalk.send(self, "_updateClassesList", []);
 return self;},
-source: unescape('selectedMethods%0A%09%5EselectedMethods%20ifNil%3A%20%5Bself%20selectedClasses%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09each%20methodDictionary%20keys%20select%3A%20%5B%3Akey%20%7C%20%20key%20beginsWith%3A%20%27test%27%20%5D%5D%5D'),
-messageSends: ["ifNil:", "collect:", "selectedClasses", "select:", "keys", "methodDictionary", "beginsWith:"],
+source: unescape('toggleClass%3A%20aClass%0A%09%28self%20isSelectedClass%3A%20aClass%29%20%0A%09%09ifFalse%3A%20%5BselectedClasses%20add%3A%20aClass%5D%0A%09%09ifTrue%3A%20%5BselectedClasses%20remove%3A%20aClass%5D.%0A%09self%20%0A%09%20%20%20%20updateClassesList'),
+messageSends: ["ifFalse:ifTrue:", "isSelectedClass:", "add:", "remove:", "updateClassesList"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_statusInfo',
+'_selectAllClasses',
 smalltalk.method({
-selector: 'statusInfo',
-category: 'accessing',
+selector: 'selectAllClasses',
+category: 'actions',
 fn: function (){
 var self=this;
-return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printTotal", []), "__comma", [smalltalk.send(self, "_printPasses", [])]), "__comma", [smalltalk.send(self, "_printErrors", [])]), "__comma", [smalltalk.send(self, "_printFailures", [])]);
+smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){return smalltalk.send(smalltalk.send(self['@selectedClasses'], "_includes_", [each]), "_ifFalse_", [(function(){return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_add_", [each]);})]);})]);
+(function($rec){smalltalk.send($rec, "_updateCategoriesList", []);return smalltalk.send($rec, "_updateClassesList", []);})(self);
 return self;},
-source: unescape('statusInfo%0A%09%5Eself%20printTotal%2C%20self%20printPasses%2C%20self%20printErrors%2C%20self%20printFailures'),
-messageSends: [unescape("%2C"), "printTotal", "printPasses", "printErrors", "printFailures"],
+source: unescape('selectAllClasses%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%28selectedClasses%20includes%3A%20each%29%20ifFalse%3A%20%5B%0A%09%09%09self%20selectedClasses%20add%3A%20each%5D%5D.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList'),
+messageSends: ["do:", "classes", "ifFalse:", "includes:", "add:", "selectedClasses", "updateCategoriesList", "updateClassesList"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_result',
+'_run_',
 smalltalk.method({
-selector: 'result',
-category: 'accessing',
-fn: function (){
+selector: 'run:',
+category: 'actions',
+fn: function (aCollection){
 var self=this;
-return self['@result'];
+self['@result']=smalltalk.send(smalltalk.TestResult, "_new", []);
+(function($rec){smalltalk.send($rec, "_updateStatusDiv", []);return smalltalk.send($rec, "_updateMethodsList", []);})(self);
+smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [(0)]);
+smalltalk.send(self['@result'], "_total_", [smalltalk.send(aCollection, "_inject_into_", [(0), (function(acc, each){return smalltalk.send(acc, "__plus", [smalltalk.send(smalltalk.send(each, "_methods", []), "_size", [])]);})])]);
+smalltalk.send(aCollection, "_do_", [(function(each){return smalltalk.send((function(){smalltalk.send(each, "_runCaseFor_", [self['@result']]);smalltalk.send(smalltalk.send(self, "_progressBar", []), "_updatePercent_", [smalltalk.send(smalltalk.send(smalltalk.send(self['@result'], "_runs", []), "__slash", [smalltalk.send(self['@result'], "_total", [])]), "__star", [(100)])]);smalltalk.send(self, "_updateStatusDiv", []);return smalltalk.send(self, "_updateMethodsList", []);}), "_valueWithTimeout_", [(100)]);})]);
 return self;},
-source: unescape('result%0A%09%5Eresult'),
-messageSends: [],
+source: unescape('run%3A%20aCollection%0A%09result%20%3A%3D%20TestResult%20new.%0A%09self%20%0A%09%09updateStatusDiv%3B%0A%09%09updateMethodsList.%0A%09self%20progressBar%20updatePercent%3A%200.%0A%09result%20total%3A%20%28aCollection%20inject%3A%200%20into%3A%20%5B%3Aacc%20%3Aeach%20%7C%20acc%20+%20each%20methods%20size%5D%29.%0A%09aCollection%20do%3A%20%5B%3Aeach%20%7C%20%0A%09%09%5Beach%20runCaseFor%3A%20result.%0A%09%09self%20progressBar%20updatePercent%3A%20result%20runs%20/%20result%20total%20*%20100.%0A%09%09self%20updateStatusDiv.%0A%09%09self%20updateMethodsList%5D%20valueWithTimeout%3A%20100%5D.'),
+messageSends: ["new", "updateStatusDiv", "updateMethodsList", "updatePercent:", "progressBar", "total:", "inject:into:", unescape("+"), "size", "methods", "do:", "valueWithTimeout:", "runCaseFor:", unescape("*"), unescape("/"), "runs", "total"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
@@ -690,7 +547,7 @@ self['@result']=smalltalk.send(smalltalk.TestResult, "_new", []);
 return self;},
 source: unescape('initialize%0A%09super%20initialize.%0A%09result%20%3A%3D%20TestResult%20new'),
 messageSends: ["initialize", "new"],
-referencedClasses: [smalltalk.TestResult]
+referencedClasses: []
 }),
 smalltalk.TestRunner);
 
@@ -755,16 +612,82 @@ referencedClasses: []
 smalltalk.TestRunner);
 
 smalltalk.addMethod(
-'_failedMethods',
+'_renderBoxOn_',
 smalltalk.method({
-selector: 'failedMethods',
-category: 'accessing',
-fn: function (){
+selector: 'renderBoxOn:',
+category: 'rendering',
+fn: function (html){
 var self=this;
-smalltalk.send(smalltalk.send(smalltalk.send(self, "_result", []), "_failures", []), "_collect_", [(function(each){return (function($rec){smalltalk.send($rec, "_class_", ["failures"]);return smalltalk.send($rec, "_with_", [each]);})(smalltalk.send(html, "_li", []));})]);
+(function($rec){smalltalk.send($rec, "_renderCategoriesOn_", [html]);smalltalk.send($rec, "_renderClassesOn_", [html]);return smalltalk.send($rec, "_renderResultsOn_", [html]);})(self);
 return self;},
-source: unescape('failedMethods%0A%09self%20result%20failures%20collect%3A%20%5B%3Aeach%20%7C%0A%09%09html%20li%20%0A%09%09%09class%3A%20%27failures%27%3B%0A%09%09%09with%3A%20each%5D'),
-messageSends: ["collect:", "failures", "result", "class:", "with:", "li"],
+source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderCategoriesOn%3A%20html%3B%0A%09renderClassesOn%3A%20html%3B%0A%09renderResultsOn%3A%20html'),
+messageSends: ["renderCategoriesOn:", "renderClassesOn:", "renderResultsOn:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderButtonsOn_',
+smalltalk.method({
+selector: 'renderButtonsOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+(function($rec){smalltalk.send($rec, "_with_", ["Run selected"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_run_", [smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_collect_", [(function(each){return smalltalk.send(each, "_new", []);})])]);})]);})(smalltalk.send(html, "_button", []));
+return self;},
+source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27Run%20selected%27%3B%0A%09onClick%3A%20%5Bself%20run%3A%20%28self%20selectedClasses%20collect%3A%20%5B%3Aeach%20%7C%20each%20new%5D%29%5D'),
+messageSends: ["with:", "onClick:", "run:", "collect:", "selectedClasses", "new", "button"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderCategoriesOn_',
+smalltalk.method({
+selector: 'renderCategoriesOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+self['@categoriesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit categories"]);
+smalltalk.send(self, "_updateCategoriesList", []);
+return self;},
+source: unescape('renderCategoriesOn%3A%20html%0A%20%20%20%20%09categoriesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20categories%27.%0A%09self%20updateCategoriesList'),
+messageSends: ["class:", "ul", "updateCategoriesList"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderClassesOn_',
+smalltalk.method({
+selector: 'renderClassesOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+self['@classesList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit classes"]);
+smalltalk.send(self, "_updateClassesList", []);
+return self;},
+source: unescape('renderClassesOn%3A%20html%0A%20%20%20%20%09classesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20classes%27.%0A%09self%20updateClassesList'),
+messageSends: ["class:", "ul", "updateClassesList"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_renderResultsOn_',
+smalltalk.method({
+selector: 'renderResultsOn:',
+category: 'rendering',
+fn: function (html){
+var self=this;
+self['@statusDiv']=smalltalk.send(html, "_div", []);
+smalltalk.send(html, "_with_", [smalltalk.send(self, "_progressBar", [])]);
+self['@methodsList']=smalltalk.send(smalltalk.send(html, "_ul", []), "_class_", ["jt_column sunit methods"]);
+smalltalk.send(self, "_updateMethodsList", []);
+smalltalk.send(self, "_updateStatusDiv", []);
+return self;},
+source: unescape('renderResultsOn%3A%20html%0A%20%20%20%20%09statusDiv%20%3A%3D%20html%20div.%0A%09html%20with%3A%20self%20progressBar.%0A%20%20%20%09methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20sunit%20methods%27.%0A%09self%20updateMethodsList.%0A%09self%20updateStatusDiv'),
+messageSends: ["div", "with:", "progressBar", "class:", "ul", "updateMethodsList", "updateStatusDiv"],
 referencedClasses: []
 }),
 smalltalk.TestRunner);
@@ -799,6 +722,83 @@ referencedClasses: []
 }),
 smalltalk.TestRunner);
 
+smalltalk.addMethod(
+'_canBeClosed',
+smalltalk.method({
+selector: 'canBeClosed',
+category: 'testing',
+fn: function (){
+var self=this;
+return true;
+return self;},
+source: unescape('canBeClosed%0A%20%20%20%20%5Etrue'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_isSelectedClass_',
+smalltalk.method({
+selector: 'isSelectedClass:',
+category: 'testing',
+fn: function (aClass){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [aClass]);
+return self;},
+source: unescape('isSelectedClass%3A%20aClass%0A%09%5E%28self%20selectedClasses%20includes%3A%20aClass%29'),
+messageSends: ["includes:", "selectedClasses"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_isSelectedCategory_',
+smalltalk.method({
+selector: 'isSelectedCategory:',
+category: 'testing',
+fn: function (aCategory){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [aCategory]);
+return self;},
+source: unescape('isSelectedCategory%3A%20aCategory%0A%09%5E%28self%20selectedCategories%20includes%3A%20aCategory%29'),
+messageSends: ["includes:", "selectedCategories"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_updateCategoriesList',
+smalltalk.method({
+selector: 'updateCategoriesList',
+category: 'updating',
+fn: function (){
+var self=this;
+smalltalk.send(self['@categoriesList'], "_contents_", [(function(html){(function($rec){smalltalk.send($rec, "_class_", ["all"]);smalltalk.send($rec, "_with_", ["All"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectAllCategories", []);})]);})(smalltalk.send(html, "_li", []));return smalltalk.send(smalltalk.send(self, "_categories", []), "_do_", [(function(each){var li=nil;
+li=smalltalk.send(html, "_li", []);smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_includes_", [each]), "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]);return (function($rec){smalltalk.send($rec, "_with_", [each]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_toggleCategory_", [each]);})]);})(li);})]);})]);
+return self;},
+source: unescape('updateCategoriesList%0A%20%20%20%20categoriesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%20%20%20%20html%20li%20%0A%09%09class%3A%20%27all%27%3B%0A%09%09with%3A%20%27All%27%3B%0A%09%09onClick%3A%20%5Bself%20selectAllCategories%5D.%0A%09self%20categories%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%20%20%20%20li%20%3A%3D%20html%20li.%0A%09%20%20%20%20%28self%20selectedCategories%20includes%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%0A%09%09with%3A%20each%3B%0A%09%09onClick%3A%20%5Bself%20toggleCategory%3A%20each%5D%5D%5D'),
+messageSends: ["contents:", "class:", "with:", "onClick:", "selectAllCategories", "li", "do:", "categories", "ifTrue:", "includes:", "selectedCategories", "toggleCategory:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
+smalltalk.addMethod(
+'_updateClassesList',
+smalltalk.method({
+selector: 'updateClassesList',
+category: 'updating',
+fn: function (){
+var self=this;
+smalltalk.send(self['@classesList'], "_contents_", [(function(html){smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedCategories", []), "_isEmpty", []), "_ifFalse_", [(function(){return (function($rec){smalltalk.send($rec, "_class_", ["all"]);smalltalk.send($rec, "_with_", ["All"]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_selectAllClasses", []);})]);})(smalltalk.send(html, "_li", []));})]);return smalltalk.send(smalltalk.send(self, "_classes", []), "_do_", [(function(each){var li=nil;
+li=smalltalk.send(html, "_li", []);smalltalk.send(smalltalk.send(smalltalk.send(self, "_selectedClasses", []), "_includes_", [each]), "_ifTrue_", [(function(){return smalltalk.send(li, "_class_", ["selected"]);})]);return (function($rec){smalltalk.send($rec, "_with_", [smalltalk.send(each, "_name", [])]);return smalltalk.send($rec, "_onClick_", [(function(){return smalltalk.send(self, "_toggleClass_", [each]);})]);})(li);})]);})]);
+return self;},
+source: unescape('updateClassesList%0A%20%20%20%20classesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%28self%20selectedCategories%20isEmpty%29%20ifFalse%3A%20%5B%0A%09%09html%20li%0A%09%09%09class%3A%20%27all%27%3B%0A%09%09%09with%3A%20%27All%27%3B%0A%09%09%09onClick%3A%20%5Bself%20selectAllClasses%5D%5D.%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%09li%20%3A%3D%20html%20li.%0A%09%09%28self%20selectedClasses%20includes%3A%20each%29%20ifTrue%3A%20%5B%0A%09%09%09li%20class%3A%20%27selected%27%5D.%0A%09%09li%0A%09%09%09with%3A%20each%20name%3B%0A%09%09%09onClick%3A%20%5Bself%20toggleClass%3A%20each%5D%5D%5D'),
+messageSends: ["contents:", "ifFalse:", "isEmpty", "selectedCategories", "class:", "with:", "onClick:", "selectAllClasses", "li", "do:", "classes", "ifTrue:", "includes:", "selectedClasses", "name", "toggleClass:"],
+referencedClasses: []
+}),
+smalltalk.TestRunner);
+
 smalltalk.addMethod(
 '_updateMethodsList',
 smalltalk.method({
@@ -833,26 +833,6 @@ smalltalk.TestRunner);
 
 
 smalltalk.addClass('TestResult', smalltalk.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
-smalltalk.addMethod(
-'_initialize',
-smalltalk.method({
-selector: 'initialize',
-category: 'initialization',
-fn: function (){
-var self=this;
-smalltalk.send(self, "_initialize", [], smalltalk.Object);
-self['@timestamp']=smalltalk.send(smalltalk.Date, "_now", []);
-self['@runs']=(0);
-self['@errors']=smalltalk.send(smalltalk.Array, "_new", []);
-self['@failures']=smalltalk.send(smalltalk.Array, "_new", []);
-self['@total']=(0);
-return self;},
-source: unescape('initialize%0A%09super%20initialize.%0A%09timestamp%20%3A%3D%20Date%20now.%0A%09runs%20%3A%3D%200.%0A%09errors%20%3A%3D%20Array%20new.%0A%09failures%20%3A%3D%20Array%20new.%0A%09total%20%3A%3D%200'),
-messageSends: ["initialize", "now", "new"],
-referencedClasses: [smalltalk.Date,smalltalk.Array]
-}),
-smalltalk.TestResult);
-
 smalltalk.addMethod(
 '_timestamp',
 smalltalk.method({
@@ -1003,6 +983,26 @@ referencedClasses: []
 }),
 smalltalk.TestResult);
 
+smalltalk.addMethod(
+'_initialize',
+smalltalk.method({
+selector: 'initialize',
+category: 'initialization',
+fn: function (){
+var self=this;
+smalltalk.send(self, "_initialize", [], smalltalk.Object);
+self['@timestamp']=smalltalk.send(smalltalk.Date, "_now", []);
+self['@runs']=(0);
+self['@errors']=smalltalk.send(smalltalk.Array, "_new", []);
+self['@failures']=smalltalk.send(smalltalk.Array, "_new", []);
+self['@total']=(0);
+return self;},
+source: unescape('initialize%0A%09super%20initialize.%0A%09timestamp%20%3A%3D%20Date%20now.%0A%09runs%20%3A%3D%200.%0A%09errors%20%3A%3D%20Array%20new.%0A%09failures%20%3A%3D%20Array%20new.%0A%09total%20%3A%3D%200'),
+messageSends: ["initialize", "now", "new"],
+referencedClasses: [smalltalk.Date,smalltalk.Array]
+}),
+smalltalk.TestResult);
+
 
 
 smalltalk.addClass('ExampleTest2', smalltalk.TestCase, [], 'SUnit');

+ 20 - 3
js/boot.js

@@ -197,6 +197,7 @@ function Smalltalk(){
 	    receiver = nil;
 	}
 	var klass = klass || receiver.klass;
+	if(!klass) { return messageNotUnderstood(receiver, selector, args) };
 	var method = klass.fn.prototype[selector];
 	if(!method) {
 	    return messageNotUnderstood(receiver, selector, args);
@@ -204,10 +205,26 @@ function Smalltalk(){
 	return method.apply(receiver, args);
     };
 
-    /* handle #dnu:. 
-       Assume that the receiver understands #doesNotUnderstand: */
+    /* Handles #dnu: *and* JavaScript method calls.
+       if the receiver has no klass, we consider it a JS object (outside of the
+       Jtalk system). Else assume that the receiver understands #doesNotUnderstand: */
 
     messageNotUnderstood = function(receiver, selector, args) {
+	/* Handles JS method calls. Assumes that a single array or single argument was passed from Jtalk.
+	   Example: someJSObject foo: #(1 2 3) -> someJSObject.foo(1,2,3); */
+	var jsFunction = receiver[selector.replace(/_/g, '')];
+	var jsArguments;
+	if(receiver.klass === undefined && typeof jsFunction === "function") {
+	    if(args[0].constructor === Array) {
+		jsArguments = args[0]
+	    } else {
+		jsArguments = [args[0]]
+	    }
+	    return jsFunction.apply(receiver, jsArguments);
+	}
+
+	/* Handles not understood messages. Also see the Jtalk counter-part 
+	   Object>>doesNotUnderstand: */
 	return receiver._doesNotUnderstand_(
 	    st.Message._new()
 		._selector_(convertSelector(selector))
@@ -313,6 +330,6 @@ smalltalk.mapClassName("RegularExpression", "Kernel", RegExp, smalltalk.String);
 
 smalltalk.mapClassName("Error", "Kernel", Error, smalltalk.Object);
 
-if(CanvasRenderingContext2D) {
+if(this.CanvasRenderingContext2D) {
     smalltalk.mapClassName("CanvasRenderingContext", "Canvas", CanvasRenderingContext2D, smalltalk.Object);
 }

Some files were not shown because too many files changed in this diff