Explorar el Código

guardXon and loopXonZ have identical action blocks

Herbert Vojčík hace 11 años
padre
commit
49953d8bea
Se han modificado 4 ficheros con 70 adiciones y 38 borrados
  1. 12 10
      js/Trapped-Frontend.js
  2. 40 16
      js/Trapped-Processors.js
  3. 4 6
      st/Trapped-Frontend.st
  4. 14 6
      st/Trapped-Processors.st

+ 12 - 10
js/Trapped-Frontend.js

@@ -740,22 +740,24 @@ smalltalk.Trapped);
 
 smalltalk.addMethod(
 smalltalk.method({
-selector: "cloneInFragmentAndInject:",
+selector: "cloneAndInject:",
 category: 'private',
 fn: function (anObject){
 var self=this;
-var frag;
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-frag=_st(document)._createDocumentFragment();
-_st(_st(frag)._asJQuery())._append_(_st(anObject)._clone());
-self._injectToElement_(frag);
-$1=frag;
+var $2,$3,$1;
+$2=_st(_st(anObject)._asJQuery())._clone();
+_st($2)._each_((function(i,each){
+return smalltalk.withContext(function($ctx2) {
+return self._injectToElement_(each);
+}, function($ctx2) {$ctx2.fillBlock({i:i,each:each},$ctx1,1)})}));
+$3=_st($2)._get_((0));
+$1=$3;
 return $1;
-}, function($ctx1) {$ctx1.fill(self,"cloneInFragmentAndInject:",{anObject:anObject,frag:frag},smalltalk.Trapped)})},
+}, function($ctx1) {$ctx1.fill(self,"cloneAndInject:",{anObject:anObject},smalltalk.Trapped)})},
 args: ["anObject"],
-source: "cloneInFragmentAndInject: anObject\x0a\x09| frag |\x0a\x09frag := document createDocumentFragment.\x0a\x09frag asJQuery append: anObject clone.\x0a\x09self injectToElement: frag.\x0a\x09^frag",
-messageSends: ["createDocumentFragment", "append:", "asJQuery", "clone", "injectToElement:"],
+source: "cloneAndInject: anObject\x0a\x09^anObject asJQuery clone\x0a\x09\x09each: [ :i :each | self injectToElement: each ];\x0a\x09\x09get: 0",
+messageSends: ["each:", "clone", "asJQuery", "injectToElement:", "get:"],
 referencedClasses: []
 }),
 smalltalk.Trapped);

+ 40 - 16
js/Trapped-Processors.js

@@ -247,21 +247,33 @@ selector: "toView:",
 category: 'data transformation',
 fn: function (aDataCarrier){
 var self=this;
-var frozen;
+var frozen,xon;
 function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)}
 return smalltalk.withContext(function($ctx1) { 
+var $1,$3,$2;
 frozen=_st(aDataCarrier)._copy();
 $ctx1.sendIdx["copy"]=1;
-_st(frozen)._xontent();
+xon=_st(frozen)._xontent();
 $ctx1.sendIdx["xontent"]=1;
-_st(_st(frozen)._target())._trapGuard_contents_(self["@guardPath"],(function(html){
+$1=_st(frozen)._target();
+$ctx1.sendIdx["target"]=1;
+_st($1)._trapGuard_contents_(self["@guardPath"],(function(html){
+var worker;
 return smalltalk.withContext(function($ctx2) {
-return _st(_st(_st(html)._root())._asJQuery())._append_(_st(_st($Trapped())._current())._cloneInFragmentAndInject_(_st(_st(frozen)._copy())._xontent()));
-}, function($ctx2) {$ctx2.fillBlock({html:html},$ctx1,1)})}));
-return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen},smalltalk.TrappedProcessorGuardXon)})},
+worker=_st(frozen)._copy();
+worker;
+_st(worker)._target_(_st(html)._root());
+$3=_st(worker)._target();
+$ctx2.sendIdx["target"]=2;
+$2=_st($3)._asJQuery();
+$ctx2.sendIdx["asJQuery"]=1;
+_st($2)._xontent_data_("set",xon);
+return _st(_st(_st(worker)._target())._asJQuery())._append_(_st(_st($Trapped())._current())._cloneAndInject_(_st(_st(worker)._xontent())._get_((0))));
+}, function($ctx2) {$ctx2.fillBlock({html:html,worker:worker},$ctx1,1)})}));
+return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen,xon:xon},smalltalk.TrappedProcessorGuardXon)})},
 args: ["aDataCarrier"],
-source: "toView: aDataCarrier\x0a\x09| frozen |\x0a\x09frozen := aDataCarrier copy.\x0a\x09frozen xontent.\x0a\x09frozen target trapGuard: guardPath contents: [ :html |\x0a\x09\x09html root asJQuery append: (Trapped current cloneInFragmentAndInject: frozen copy xontent) ]",
-messageSends: ["copy", "xontent", "trapGuard:contents:", "target", "append:", "asJQuery", "root", "cloneInFragmentAndInject:", "current"],
+source: "toView: aDataCarrier\x0a\x09| frozen xon |\x0a\x09frozen := aDataCarrier copy.\x0a\x09xon := frozen xontent.\x0a\x09frozen target trapGuard: guardPath contents: [ :html |\x0a\x09\x09| worker |\x0a\x09\x09worker := frozen copy.\x0a\x09\x09worker target: html root.\x0a\x09\x09worker target asJQuery xontent: 'set' data: xon.\x0a\x09\x09worker target asJQuery append: (Trapped current cloneAndInject: (worker xontent get: 0)) ]",
+messageSends: ["copy", "xontent", "trapGuard:contents:", "target", "target:", "root", "xontent:data:", "asJQuery", "append:", "cloneAndInject:", "current", "get:"],
 referencedClasses: ["Trapped"]
 }),
 smalltalk.TrappedProcessorGuardXon);
@@ -431,21 +443,33 @@ selector: "toView:",
 category: 'data transformation',
 fn: function (aDataCarrier){
 var self=this;
-var frozen;
+var frozen,xon;
 function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)}
 return smalltalk.withContext(function($ctx1) { 
+var $1,$3,$2;
 frozen=_st(aDataCarrier)._copy();
 $ctx1.sendIdx["copy"]=1;
-_st(frozen)._xontent();
+xon=_st(frozen)._xontent();
 $ctx1.sendIdx["xontent"]=1;
-_st(_st(frozen)._target())._trapIter_after_([],(function(html){
+$1=_st(frozen)._target();
+$ctx1.sendIdx["target"]=1;
+_st($1)._trapIter_after_([],(function(html){
+var worker;
 return smalltalk.withContext(function($ctx2) {
-return _st(_st(_st(html)._root())._asJQuery())._append_(_st(_st($Trapped())._current())._cloneInFragmentAndInject_(_st(_st(frozen)._copy())._xontent()));
-}, function($ctx2) {$ctx2.fillBlock({html:html},$ctx1,1)})}));
-return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen},smalltalk.TrappedProcessorLoopXonZ)})},
+worker=_st(frozen)._copy();
+worker;
+_st(worker)._target_(_st(html)._root());
+$3=_st(worker)._target();
+$ctx2.sendIdx["target"]=2;
+$2=_st($3)._asJQuery();
+$ctx2.sendIdx["asJQuery"]=1;
+_st($2)._xontent_data_("set",xon);
+return _st(_st(_st(worker)._target())._asJQuery())._append_(_st(_st($Trapped())._current())._cloneAndInject_(_st(_st(worker)._xontent())._get_((0))));
+}, function($ctx2) {$ctx2.fillBlock({html:html,worker:worker},$ctx1,1)})}));
+return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen,xon:xon},smalltalk.TrappedProcessorLoopXonZ)})},
 args: ["aDataCarrier"],
-source: "toView: aDataCarrier\x0a\x09| frozen |\x0a\x09frozen := aDataCarrier copy.\x0a\x09frozen xontent.\x0a\x09frozen target trapIter: #() after: [ :html |\x0a\x09\x09html root asJQuery append: (Trapped current cloneInFragmentAndInject: frozen copy xontent) ]",
-messageSends: ["copy", "xontent", "trapIter:after:", "target", "append:", "asJQuery", "root", "cloneInFragmentAndInject:", "current"],
+source: "toView: aDataCarrier\x0a\x09| frozen xon |\x0a\x09frozen := aDataCarrier copy.\x0a\x09xon := frozen xontent.\x0a\x09frozen target trapIter: #() after: [ :html |\x0a\x09\x09| worker |\x0a\x09\x09worker := frozen copy.\x0a\x09\x09worker target: html root.\x0a\x09\x09worker target asJQuery xontent: 'set' data: xon.\x0a\x09\x09worker target asJQuery append: (Trapped current cloneAndInject: (worker xontent get: 0)) ]",
+messageSends: ["copy", "xontent", "trapIter:after:", "target", "target:", "root", "xontent:data:", "asJQuery", "append:", "cloneAndInject:", "current", "get:"],
 referencedClasses: ["Trapped"]
 }),
 smalltalk.TrappedProcessorLoopXonZ);

+ 4 - 6
st/Trapped-Frontend.st

@@ -324,12 +324,10 @@ initialize
 
 !Trapped methodsFor: 'private'!
 
-cloneInFragmentAndInject: anObject
-	| frag |
-	frag := document createDocumentFragment.
-	frag asJQuery append: anObject clone.
-	self injectToElement: frag.
-	^frag
+cloneAndInject: anObject
+	^anObject asJQuery clone
+		each: [ :i :each | self injectToElement: each ];
+		get: 0
 !
 
 descend: anArray snapshotDo: aBlock

+ 14 - 6
st/Trapped-Processors.st

@@ -132,11 +132,15 @@ data-trap attributes inside.!
 !TrappedProcessorGuardXon methodsFor: 'data transformation'!
 
 toView: aDataCarrier
-	| frozen |
+	| frozen xon |
 	frozen := aDataCarrier copy.
-	frozen xontent.
+	xon := frozen xontent.
 	frozen target trapGuard: guardPath contents: [ :html |
-		html root asJQuery append: (Trapped current cloneInFragmentAndInject: frozen copy xontent) ]
+		| worker |
+		worker := frozen copy.
+		worker target: html root.
+		worker target asJQuery xontent: 'set' data: xon.
+		worker target asJQuery append: (Trapped current cloneAndInject: (worker xontent get: 0)) ]
 ! !
 
 TrappedDataExpectingProcessor subclass: #TrappedProcessorInputChecked
@@ -242,11 +246,15 @@ noscript, ins or del).!
 !TrappedProcessorLoopXonZ methodsFor: 'data transformation'!
 
 toView: aDataCarrier
-	| frozen |
+	| frozen xon |
 	frozen := aDataCarrier copy.
-	frozen xontent.
+	xon := frozen xontent.
 	frozen target trapIter: #() after: [ :html |
-		html root asJQuery append: (Trapped current cloneInFragmentAndInject: frozen copy xontent) ]
+		| worker |
+		worker := frozen copy.
+		worker target: html root.
+		worker target asJQuery xontent: 'set' data: xon.
+		worker target asJQuery append: (Trapped current cloneAndInject: (worker xontent get: 0)) ]
 ! !
 
 TrappedProcessor subclass: #TrappedProcessorReplace