Browse Source

add helpers for ajax & iterating

- can give a block for successful ajax request: (Ajax url:
'http://server.com/action') onSuccessDo: [:data| Transcript show: data
asString]; send  - iterate over jQuery objects: 'ul>li' asJQuery do:
[:anItem| anItem cssAt: 'color' put: 'red']  - define Number>>modulo:,
odd and even
Laurent Laffont 13 years ago
parent
commit
f50f0e9d2d
6 changed files with 208 additions and 0 deletions
  1. 45 0
      js/JQuery.deploy.js
  2. 45 0
      js/JQuery.js
  3. 45 0
      js/Kernel.deploy.js
  4. 45 0
      js/Kernel.js
  5. 16 0
      st/JQuery.st
  6. 12 0
      st/Kernel.st

+ 45 - 0
js/JQuery.deploy.js

@@ -615,6 +615,36 @@ referencedClasses: []
 }),
 smalltalk.JQuery);
 
+smalltalk.addMethod(
+'_do_',
+smalltalk.method({
+selector: 'do:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self, "_elementsDo_", [(function(anElement){return smalltalk.send(aBlock, "_value_", [smalltalk.send(smalltalk.JQuery, "_fromElement_", [anElement])]);})]);
+return self;},
+source: unescape('do%3A%20aBlock%0A%20%20%20%20self%20elementsDo%3A%20%5B%3AanElement%7C%20%20aBlock%20value%3A%20%28JQuery%20fromElement%3A%20anElement%29%5D'),
+messageSends: ["elementsDo:", "value:", "fromElement:"],
+referencedClasses: [smalltalk.JQuery]
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_elementsDo_',
+smalltalk.method({
+selector: 'elementsDo:',
+category: 'private',
+fn: function (aBlock){
+var self=this;
+self['@jquery'].each(function(index, element){aBlock(element, self)});
+return self;},
+source: unescape('elementsDo%3A%20aBlock%0A%20%20%20%20%22Iterate%20over%20a%20jQuery%20object%2C%20executing%20a%20function%20for%20each%20matched%20element.%22%0A%20%20%20%20%3Cself%5B%27@jquery%27%5D.each%28function%28index%2C%20element%29%7BaBlock%28element%2C%20self%29%7D%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
 
 smalltalk.addMethod(
 '_fromString_',
@@ -819,6 +849,21 @@ referencedClasses: [smalltalk.Dictionary]
 }),
 smalltalk.Ajax);
 
+smalltalk.addMethod(
+'_onSuccessDo_',
+smalltalk.method({
+selector: 'onSuccessDo:',
+category: 'accessing',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self, "_at_put_", ["success", aBlock]);
+return self;},
+source: unescape('onSuccessDo%3A%20aBlock%0A%09%22Set%20action%20to%20execute%20when%20Ajax%20request%20is%20successful.%20Pass%20received%20data%20as%20block%20argument%22%0A%09self%20at%3A%20%27success%27%20put%3A%20aBlock'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.Ajax);
+
 
 smalltalk.addMethod(
 '_url_',

+ 45 - 0
js/JQuery.js

@@ -615,6 +615,36 @@ referencedClasses: []
 }),
 smalltalk.JQuery);
 
+smalltalk.addMethod(
+'_do_',
+smalltalk.method({
+selector: 'do:',
+category: 'enumerating',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self, "_elementsDo_", [(function(anElement){return smalltalk.send(aBlock, "_value_", [smalltalk.send(smalltalk.JQuery, "_fromElement_", [anElement])]);})]);
+return self;},
+source: unescape('do%3A%20aBlock%0A%20%20%20%20self%20elementsDo%3A%20%5B%3AanElement%7C%20%20aBlock%20value%3A%20%28JQuery%20fromElement%3A%20anElement%29%5D'),
+messageSends: ["elementsDo:", "value:", "fromElement:"],
+referencedClasses: [smalltalk.JQuery]
+}),
+smalltalk.JQuery);
+
+smalltalk.addMethod(
+'_elementsDo_',
+smalltalk.method({
+selector: 'elementsDo:',
+category: 'private',
+fn: function (aBlock){
+var self=this;
+self['@jquery'].each(function(index, element){aBlock(element, self)});
+return self;},
+source: unescape('elementsDo%3A%20aBlock%0A%20%20%20%20%22Iterate%20over%20a%20jQuery%20object%2C%20executing%20a%20function%20for%20each%20matched%20element.%22%0A%20%20%20%20%3Cself%5B%27@jquery%27%5D.each%28function%28index%2C%20element%29%7BaBlock%28element%2C%20self%29%7D%29%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.JQuery);
+
 
 smalltalk.addMethod(
 '_fromString_',
@@ -819,6 +849,21 @@ referencedClasses: [smalltalk.Dictionary]
 }),
 smalltalk.Ajax);
 
+smalltalk.addMethod(
+'_onSuccessDo_',
+smalltalk.method({
+selector: 'onSuccessDo:',
+category: 'accessing',
+fn: function (aBlock){
+var self=this;
+smalltalk.send(self, "_at_put_", ["success", aBlock]);
+return self;},
+source: unescape('onSuccessDo%3A%20aBlock%0A%09%22Set%20action%20to%20execute%20when%20Ajax%20request%20is%20successful.%20Pass%20received%20data%20as%20block%20argument%22%0A%09self%20at%3A%20%27success%27%20put%3A%20aBlock'),
+messageSends: ["at:put:"],
+referencedClasses: []
+}),
+smalltalk.Ajax);
+
 
 smalltalk.addMethod(
 '_url_',

+ 45 - 0
js/Kernel.deploy.js

@@ -1879,6 +1879,51 @@ referencedClasses: []
 }),
 smalltalk.Number);
 
+smalltalk.addMethod(
+'_modulo_',
+smalltalk.method({
+selector: 'modulo:',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return self % aNumber;
+return self;},
+source: unescape('modulo%3A%20aNumber%0A%09%3Creturn%20self%20%25%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_even',
+smalltalk.method({
+selector: 'even',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send((0), "__eq", [smalltalk.send(self, "_modulo_", [(2)])]);
+return self;},
+source: unescape('even%0A%09%5E%200%20%3D%20%28self%20modulo%3A%202%29'),
+messageSends: [unescape("%3D"), "modulo:"],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_odd',
+smalltalk.method({
+selector: 'odd',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_even", []), "_not", []);
+return self;},
+source: unescape('odd%0A%09%5E%20self%20even%20not'),
+messageSends: ["not", "even"],
+referencedClasses: []
+}),
+smalltalk.Number);
+
 
 smalltalk.addMethod(
 '_pi',

+ 45 - 0
js/Kernel.js

@@ -1879,6 +1879,51 @@ referencedClasses: []
 }),
 smalltalk.Number);
 
+smalltalk.addMethod(
+'_modulo_',
+smalltalk.method({
+selector: 'modulo:',
+category: 'arithmetic',
+fn: function (aNumber){
+var self=this;
+return self % aNumber;
+return self;},
+source: unescape('modulo%3A%20aNumber%0A%09%3Creturn%20self%20%25%20aNumber%3E'),
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_even',
+smalltalk.method({
+selector: 'even',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send((0), "__eq", [smalltalk.send(self, "_modulo_", [(2)])]);
+return self;},
+source: unescape('even%0A%09%5E%200%20%3D%20%28self%20modulo%3A%202%29'),
+messageSends: [unescape("%3D"), "modulo:"],
+referencedClasses: []
+}),
+smalltalk.Number);
+
+smalltalk.addMethod(
+'_odd',
+smalltalk.method({
+selector: 'odd',
+category: 'testing',
+fn: function (){
+var self=this;
+return smalltalk.send(smalltalk.send(self, "_even", []), "_not", []);
+return self;},
+source: unescape('odd%0A%09%5E%20self%20even%20not'),
+messageSends: ["not", "even"],
+referencedClasses: []
+}),
+smalltalk.Number);
+
 
 smalltalk.addMethod(
 '_pi',

+ 16 - 0
st/JQuery.st

@@ -156,6 +156,12 @@ scrollTop: anInteger
     self call: 'scrollTop' withArgument: anInteger
 ! !
 
+!JQuery methodsFor: 'enumerating'!
+
+do: aBlock
+    self elementsDo: [:anElement|  aBlock value: (JQuery fromElement: anElement)]
+! !
+
 !JQuery methodsFor: 'events'!
 
 focus
@@ -198,6 +204,11 @@ call: aString
 
 call: aString withArgument: anObject
     <return self['@jquery'][aString](anObject)>
+!
+
+elementsDo: aBlock
+    "Iterate over a jQuery object, executing a function for each matched element."
+    <self['@jquery'].each(function(index, element){aBlock(element, self)})>
 ! !
 
 !JQuery methodsFor: 'testing'!
@@ -268,6 +279,11 @@ url
 
 url: aString
     self at: 'url' put: aString
+!
+
+onSuccessDo: aBlock
+	"Set action to execute when Ajax request is successful. Pass received data as block argument"
+	self at: 'success' put: aBlock
 ! !
 
 !Ajax methodsFor: 'actions'!

+ 12 - 0
st/Kernel.st

@@ -541,6 +541,10 @@ max: aNumber
 
 min: aNumber
 	<return Math.min(self, aNumber);>
+!
+
+modulo: aNumber
+	<return self % aNumber>
 ! !
 
 !Number methodsFor: 'comparing'!
@@ -638,6 +642,14 @@ printString
 
 isNumber
 	^true
+!
+
+even
+	^ 0 = (self modulo: 2)
+!
+
+odd
+	^ self even not
 ! !
 
 !Number methodsFor: 'timeouts/intervals'!