Prechádzať zdrojové kódy

{loop,guard}Contents => {loop,guard}Xon

Herbert Vojčík 10 rokov pred
rodič
commit
d948a920c8
3 zmenil súbory, kde vykonal 124 pridanie a 124 odobranie
  1. 3 3
      example-todo/todo.html
  2. 74 74
      js/Trapped-Processors.js
  3. 47 47
      st/Trapped-Processors.st

+ 3 - 3
example-todo/todo.html

@@ -43,11 +43,11 @@
 <body>
 <h2 data-trap="#title"></h2>
 
-<div data-trap=": (guardContents (#todos #notNil))">
+<div data-trap=": (guardXon (#todos #notNil))">
     <span data-trap="#remaining"></span> of <span data-trap="#todos #size"></span> remaning
     [ <a href="" data-trap=": (signal archive) whenClicked">archive</a> ]
     <ul>
-        <script type="application/x-beacon" data-trap="#todos: loopContents" data-xontent="until end"></script>
+        <script type="application/x-beacon" data-trap="#todos: loopXon" data-xontent="until end"></script>
         <li>
             <label>
                 <input type="checkbox" data-trap="done: inputChecked"/>
@@ -60,6 +60,6 @@
         <input type="submit" class="btn-primary" value="add"/>
     </form>
 </div>
-<p data-trap=": (guardContents (#todos #isNil))">Loading (fake 2 sec pause)...</p>
+<p data-trap=": (guardXon (#todos #isNil))">Loading (fake 2 sec pause)...</p>
 </body>
 </html>

+ 74 - 74
js/Trapped-Processors.js

@@ -209,56 +209,56 @@ referencedClasses: []
 smalltalk.TrappedProcessorGuardBase.klass);
 
 
-smalltalk.addClass('TrappedProcessorGuardContents', smalltalk.TrappedProcessorGuardBase, [], 'Trapped-Processors');
-smalltalk.TrappedProcessorGuardContents.comment="I am used to guard contents of the brush I am installed on.\x0a\x0aI save the brush contents, then I observe guard expression in the model,\x0aand when it changes to nil or false, I delete the brush contents;\x0aon the other hand, when it changes to non-nil and non-false,\x0aI restore it from remembered state and interpret all contained\x0adata-trap attributes inside.";
+smalltalk.addClass('TrappedProcessorGuardProc', smalltalk.TrappedProcessorGuardBase, [], 'Trapped-Processors');
+smalltalk.TrappedProcessorGuardProc.comment="I am used to guard contents filling process of the brush I am installed on.\x0a\x0aI observe guard expression in the model,\x0aand when it changes to nil or false, I delete the brush contents;\x0aon the other hand, when it changes to non-nil and non-false,\x0aI run the rest on the chain, which should be one-time\x0athat sets up the contents,";
 smalltalk.addMethod(
 smalltalk.method({
 selector: "toView:",
 category: 'data transformation',
 fn: function (aDataCarrier){
 var self=this;
-var frozen,contents;
-function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)}
+var frozen;
 return smalltalk.withContext(function($ctx1) { 
 frozen=_st(aDataCarrier)._copy();
-contents=_st(frozen)._contents();
-_st(_st(frozen)._target())._trapGuard_contents_(self["@guardPath"],(function(html){
+$ctx1.sendIdx["copy"]=1;
+_st(_st(frozen)._target())._trapGuard_contents_(self["@guardPath"],(function(){
 return smalltalk.withContext(function($ctx2) {
-return _st(_st($Trapped())._current())._cloneAndInject_inPlaceOf_(contents,_st(html)._del());
-}, function($ctx2) {$ctx2.fillBlock({html:html},$ctx1,1)})}));
-return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen,contents:contents},smalltalk.TrappedProcessorGuardContents)})},
+return _st(_st(frozen)._copy())._proceed();
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
+return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen},smalltalk.TrappedProcessorGuardProc)})},
 args: ["aDataCarrier"],
-source: "toView: aDataCarrier\x0a\x09| frozen contents |\x0a\x09frozen := aDataCarrier copy.\x0a\x09contents := frozen contents.\x0a\x09frozen target trapGuard: guardPath contents: [ :html |\x0a\x09\x09Trapped current cloneAndInject: contents inPlaceOf: html del ]",
-messageSends: ["copy", "contents", "trapGuard:contents:", "target", "cloneAndInject:inPlaceOf:", "current", "del"],
-referencedClasses: ["Trapped"]
+source: "toView: aDataCarrier\x0a\x09| frozen |\x0a\x09frozen := aDataCarrier copy.\x0a\x09frozen target trapGuard: guardPath contents: [ frozen copy proceed ]",
+messageSends: ["copy", "trapGuard:contents:", "target", "proceed"],
+referencedClasses: []
 }),
-smalltalk.TrappedProcessorGuardContents);
+smalltalk.TrappedProcessorGuardProc);
 
 
 
-smalltalk.addClass('TrappedProcessorGuardProc', smalltalk.TrappedProcessorGuardBase, [], 'Trapped-Processors');
-smalltalk.TrappedProcessorGuardProc.comment="I am used to guard contents filling process of the brush I am installed on.\x0a\x0aI observe guard expression in the model,\x0aand when it changes to nil or false, I delete the brush contents;\x0aon the other hand, when it changes to non-nil and non-false,\x0aI run the rest on the chain, which should be one-time\x0athat sets up the contents,";
+smalltalk.addClass('TrappedProcessorGuardXon', smalltalk.TrappedProcessorGuardBase, [], 'Trapped-Processors');
+smalltalk.TrappedProcessorGuardXon.comment="I am used to guard contents of the brush I am installed on.\x0a\x0aI save the brush contents, then I observe guard expression in the model,\x0aand when it changes to nil or false, I delete the brush contents;\x0aon the other hand, when it changes to non-nil and non-false,\x0aI restore it from remembered state and interpret all contained\x0adata-trap attributes inside.";
 smalltalk.addMethod(
 smalltalk.method({
 selector: "toView:",
 category: 'data transformation',
 fn: function (aDataCarrier){
 var self=this;
-var frozen;
+var frozen,contents;
+function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)}
 return smalltalk.withContext(function($ctx1) { 
 frozen=_st(aDataCarrier)._copy();
-$ctx1.sendIdx["copy"]=1;
-_st(_st(frozen)._target())._trapGuard_contents_(self["@guardPath"],(function(){
+contents=_st(frozen)._contents();
+_st(_st(frozen)._target())._trapGuard_contents_(self["@guardPath"],(function(html){
 return smalltalk.withContext(function($ctx2) {
-return _st(_st(frozen)._copy())._proceed();
-}, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
-return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen},smalltalk.TrappedProcessorGuardProc)})},
+return _st(_st($Trapped())._current())._cloneAndInject_inPlaceOf_(contents,_st(html)._del());
+}, function($ctx2) {$ctx2.fillBlock({html:html},$ctx1,1)})}));
+return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen,contents:contents},smalltalk.TrappedProcessorGuardXon)})},
 args: ["aDataCarrier"],
-source: "toView: aDataCarrier\x0a\x09| frozen |\x0a\x09frozen := aDataCarrier copy.\x0a\x09frozen target trapGuard: guardPath contents: [ frozen copy proceed ]",
-messageSends: ["copy", "trapGuard:contents:", "target", "proceed"],
-referencedClasses: []
+source: "toView: aDataCarrier\x0a\x09| frozen contents |\x0a\x09frozen := aDataCarrier copy.\x0a\x09contents := frozen contents.\x0a\x09frozen target trapGuard: guardPath contents: [ :html |\x0a\x09\x09Trapped current cloneAndInject: contents inPlaceOf: html del ]",
+messageSends: ["copy", "contents", "trapGuard:contents:", "target", "cloneAndInject:inPlaceOf:", "current", "del"],
+referencedClasses: ["Trapped"]
 }),
-smalltalk.TrappedProcessorGuardProc);
+smalltalk.TrappedProcessorGuardXon);
 
 
 
@@ -432,60 +432,60 @@ smalltalk.TrappedProcessorLoopBase);
 
 
 
-smalltalk.addClass('TrappedProcessorLoopContents', smalltalk.TrappedProcessorLoopBase, [], 'Trapped-Processors');
-smalltalk.TrappedProcessorLoopContents.comment="I am used to loop over data and repeat the contents\x0aof the brush I am installed on.\x0a\x0aI save the brush contents, then I observe the data in the model,\x0aand when it changes, I loop over it\x0aand restore the contents from remembered state\x0aand interpret all contained data-trap attributes inside\x0afor each element, putting the result _after_ my brush.\x0a\x0aMy brush itself should be as least visible as possible,\x0aas it only serve as a position flag (use for example\x0anoscript, ins or del).";
+smalltalk.addClass('TrappedProcessorLoopProc', smalltalk.TrappedProcessorLoopBase, [], 'Trapped-Processors');
+smalltalk.TrappedProcessorLoopProc.comment="I am used to loop over data and repeat the contents filling process\x0aof the brush I am installed on.\x0a\x0aI observe the data in the model,\x0aand when it changes, I loop over it\x0aand run the rest of the processing chain\x0afor each element, putting the result _after_ my brush.\x0a\x0aMy brush itself should be as least visible as possible,\x0aas it only serve as a position flag (use for example\x0anoscript, ins or del).";
 smalltalk.addMethod(
 smalltalk.method({
 selector: "toView:",
 category: 'data transformation',
 fn: function (aDataCarrier){
 var self=this;
-var frozen,contents;
-function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)}
+var frozen;
 return smalltalk.withContext(function($ctx1) { 
+var $1,$2;
 frozen=_st(aDataCarrier)._copy();
-contents=_st(frozen)._contents();
+$ctx1.sendIdx["copy"]=1;
 _st(_st(frozen)._target())._trapIter_after_([],(function(html){
 return smalltalk.withContext(function($ctx2) {
-return _st(_st($Trapped())._current())._cloneAndInject_inPlaceOf_(contents,_st(html)._del());
+$1=_st(frozen)._copy();
+_st($1)._target_(_st(html)._root());
+$2=_st($1)._proceed();
+return $2;
 }, function($ctx2) {$ctx2.fillBlock({html:html},$ctx1,1)})}));
-return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen,contents:contents},smalltalk.TrappedProcessorLoopContents)})},
+return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen},smalltalk.TrappedProcessorLoopProc)})},
 args: ["aDataCarrier"],
-source: "toView: aDataCarrier\x0a\x09| frozen contents |\x0a\x09frozen := aDataCarrier copy.\x0a\x09contents := frozen contents.\x0a\x09frozen target trapIter: #() after: [ :html |\x0a\x09\x09Trapped current cloneAndInject: contents inPlaceOf: html del ]",
-messageSends: ["copy", "contents", "trapIter:after:", "target", "cloneAndInject:inPlaceOf:", "current", "del"],
-referencedClasses: ["Trapped"]
+source: "toView: aDataCarrier\x0a\x09| frozen |\x0a\x09frozen := aDataCarrier copy.\x0a\x09frozen target trapIter: #() after: [ :html | frozen copy target: html root; proceed ]",
+messageSends: ["copy", "trapIter:after:", "target", "target:", "root", "proceed"],
+referencedClasses: []
 }),
-smalltalk.TrappedProcessorLoopContents);
+smalltalk.TrappedProcessorLoopProc);
 
 
 
-smalltalk.addClass('TrappedProcessorLoopProc', smalltalk.TrappedProcessorLoopBase, [], 'Trapped-Processors');
-smalltalk.TrappedProcessorLoopProc.comment="I am used to loop over data and repeat the contents filling process\x0aof the brush I am installed on.\x0a\x0aI observe the data in the model,\x0aand when it changes, I loop over it\x0aand run the rest of the processing chain\x0afor each element, putting the result _after_ my brush.\x0a\x0aMy brush itself should be as least visible as possible,\x0aas it only serve as a position flag (use for example\x0anoscript, ins or del).";
+smalltalk.addClass('TrappedProcessorLoopXon', smalltalk.TrappedProcessorLoopBase, [], 'Trapped-Processors');
+smalltalk.TrappedProcessorLoopXon.comment="I am used to loop over data and repeat the contents\x0aof the brush I am installed on.\x0a\x0aI save the brush contents, then I observe the data in the model,\x0aand when it changes, I loop over it\x0aand restore the contents from remembered state\x0aand interpret all contained data-trap attributes inside\x0afor each element, putting the result _after_ my brush.\x0a\x0aMy brush itself should be as least visible as possible,\x0aas it only serve as a position flag (use for example\x0anoscript, ins or del).";
 smalltalk.addMethod(
 smalltalk.method({
 selector: "toView:",
 category: 'data transformation',
 fn: function (aDataCarrier){
 var self=this;
-var frozen;
+var frozen,contents;
+function $Trapped(){return smalltalk.Trapped||(typeof Trapped=="undefined"?nil:Trapped)}
 return smalltalk.withContext(function($ctx1) { 
-var $1,$2;
 frozen=_st(aDataCarrier)._copy();
-$ctx1.sendIdx["copy"]=1;
+contents=_st(frozen)._contents();
 _st(_st(frozen)._target())._trapIter_after_([],(function(html){
 return smalltalk.withContext(function($ctx2) {
-$1=_st(frozen)._copy();
-_st($1)._target_(_st(html)._root());
-$2=_st($1)._proceed();
-return $2;
+return _st(_st($Trapped())._current())._cloneAndInject_inPlaceOf_(contents,_st(html)._del());
 }, function($ctx2) {$ctx2.fillBlock({html:html},$ctx1,1)})}));
-return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen},smalltalk.TrappedProcessorLoopProc)})},
+return self}, function($ctx1) {$ctx1.fill(self,"toView:",{aDataCarrier:aDataCarrier,frozen:frozen,contents:contents},smalltalk.TrappedProcessorLoopXon)})},
 args: ["aDataCarrier"],
-source: "toView: aDataCarrier\x0a\x09| frozen |\x0a\x09frozen := aDataCarrier copy.\x0a\x09frozen target trapIter: #() after: [ :html | frozen copy target: html root; proceed ]",
-messageSends: ["copy", "trapIter:after:", "target", "target:", "root", "proceed"],
-referencedClasses: []
+source: "toView: aDataCarrier\x0a\x09| frozen contents |\x0a\x09frozen := aDataCarrier copy.\x0a\x09contents := frozen contents.\x0a\x09frozen target trapIter: #() after: [ :html |\x0a\x09\x09Trapped current cloneAndInject: contents inPlaceOf: html del ]",
+messageSends: ["copy", "contents", "trapIter:after:", "target", "cloneAndInject:inPlaceOf:", "current", "del"],
+referencedClasses: ["Trapped"]
 }),
-smalltalk.TrappedProcessorLoopProc);
+smalltalk.TrappedProcessorLoopXon);
 
 
 
@@ -1092,39 +1092,39 @@ smalltalk.TrappedProcessor.klass);
 
 smalltalk.addMethod(
 smalltalk.method({
-selector: "guardContents:",
+selector: "guardProc:",
 category: '*Trapped-Processors',
 fn: function (anArray){
 var self=this;
-function $TrappedProcessorGuardContents(){return smalltalk.TrappedProcessorGuardContents||(typeof TrappedProcessorGuardContents=="undefined"?nil:TrappedProcessorGuardContents)}
+function $TrappedProcessorGuardProc(){return smalltalk.TrappedProcessorGuardProc||(typeof TrappedProcessorGuardProc=="undefined"?nil:TrappedProcessorGuardProc)}
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=_st($TrappedProcessorGuardContents())._new_(anArray);
+$1=_st($TrappedProcessorGuardProc())._new_(anArray);
 return $1;
-}, function($ctx1) {$ctx1.fill(self,"guardContents:",{anArray:anArray},smalltalk.TrappedProcessor.klass)})},
+}, function($ctx1) {$ctx1.fill(self,"guardProc:",{anArray:anArray},smalltalk.TrappedProcessor.klass)})},
 args: ["anArray"],
-source: "guardContents: anArray\x0a\x09^TrappedProcessorGuardContents new: anArray",
+source: "guardProc: anArray\x0a\x09^TrappedProcessorGuardProc new: anArray",
 messageSends: ["new:"],
-referencedClasses: ["TrappedProcessorGuardContents"]
+referencedClasses: ["TrappedProcessorGuardProc"]
 }),
 smalltalk.TrappedProcessor.klass);
 
 smalltalk.addMethod(
 smalltalk.method({
-selector: "guardProc:",
+selector: "guardXon:",
 category: '*Trapped-Processors',
 fn: function (anArray){
 var self=this;
-function $TrappedProcessorGuardProc(){return smalltalk.TrappedProcessorGuardProc||(typeof TrappedProcessorGuardProc=="undefined"?nil:TrappedProcessorGuardProc)}
+function $TrappedProcessorGuardXon(){return smalltalk.TrappedProcessorGuardXon||(typeof TrappedProcessorGuardXon=="undefined"?nil:TrappedProcessorGuardXon)}
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=_st($TrappedProcessorGuardProc())._new_(anArray);
+$1=_st($TrappedProcessorGuardXon())._new_(anArray);
 return $1;
-}, function($ctx1) {$ctx1.fill(self,"guardProc:",{anArray:anArray},smalltalk.TrappedProcessor.klass)})},
+}, function($ctx1) {$ctx1.fill(self,"guardXon:",{anArray:anArray},smalltalk.TrappedProcessor.klass)})},
 args: ["anArray"],
-source: "guardProc: anArray\x0a\x09^TrappedProcessorGuardProc new: anArray",
+source: "guardXon: anArray\x0a\x09^TrappedProcessorGuardXon new: anArray",
 messageSends: ["new:"],
-referencedClasses: ["TrappedProcessorGuardProc"]
+referencedClasses: ["TrappedProcessorGuardXon"]
 }),
 smalltalk.TrappedProcessor.klass);
 
@@ -1187,39 +1187,39 @@ smalltalk.TrappedProcessor.klass);
 
 smalltalk.addMethod(
 smalltalk.method({
-selector: "loopContents",
+selector: "loopProc",
 category: '*Trapped-Processors',
 fn: function (){
 var self=this;
-function $TrappedProcessorLoopContents(){return smalltalk.TrappedProcessorLoopContents||(typeof TrappedProcessorLoopContents=="undefined"?nil:TrappedProcessorLoopContents)}
+function $TrappedProcessorLoopProc(){return smalltalk.TrappedProcessorLoopProc||(typeof TrappedProcessorLoopProc=="undefined"?nil:TrappedProcessorLoopProc)}
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=_st($TrappedProcessorLoopContents())._new();
+$1=_st($TrappedProcessorLoopProc())._new();
 return $1;
-}, function($ctx1) {$ctx1.fill(self,"loopContents",{},smalltalk.TrappedProcessor.klass)})},
+}, function($ctx1) {$ctx1.fill(self,"loopProc",{},smalltalk.TrappedProcessor.klass)})},
 args: [],
-source: "loopContents\x0a\x09^TrappedProcessorLoopContents new",
+source: "loopProc\x0a\x09^TrappedProcessorLoopProc new",
 messageSends: ["new"],
-referencedClasses: ["TrappedProcessorLoopContents"]
+referencedClasses: ["TrappedProcessorLoopProc"]
 }),
 smalltalk.TrappedProcessor.klass);
 
 smalltalk.addMethod(
 smalltalk.method({
-selector: "loopProc",
+selector: "loopXon",
 category: '*Trapped-Processors',
 fn: function (){
 var self=this;
-function $TrappedProcessorLoopProc(){return smalltalk.TrappedProcessorLoopProc||(typeof TrappedProcessorLoopProc=="undefined"?nil:TrappedProcessorLoopProc)}
+function $TrappedProcessorLoopXon(){return smalltalk.TrappedProcessorLoopXon||(typeof TrappedProcessorLoopXon=="undefined"?nil:TrappedProcessorLoopXon)}
 return smalltalk.withContext(function($ctx1) { 
 var $1;
-$1=_st($TrappedProcessorLoopProc())._new();
+$1=_st($TrappedProcessorLoopXon())._new();
 return $1;
-}, function($ctx1) {$ctx1.fill(self,"loopProc",{},smalltalk.TrappedProcessor.klass)})},
+}, function($ctx1) {$ctx1.fill(self,"loopXon",{},smalltalk.TrappedProcessor.klass)})},
 args: [],
-source: "loopProc\x0a\x09^TrappedProcessorLoopProc new",
+source: "loopXon\x0a\x09^TrappedProcessorLoopXon new",
 messageSends: ["new"],
-referencedClasses: ["TrappedProcessorLoopProc"]
+referencedClasses: ["TrappedProcessorLoopXon"]
 }),
 smalltalk.TrappedProcessor.klass);
 

+ 47 - 47
st/Trapped-Processors.st

@@ -97,46 +97,46 @@ new: anArray
 		yourself
 ! !
 
-TrappedProcessorGuardBase subclass: #TrappedProcessorGuardContents
+TrappedProcessorGuardBase subclass: #TrappedProcessorGuardProc
 	instanceVariableNames: ''
 	package: 'Trapped-Processors'!
-!TrappedProcessorGuardContents commentStamp!
-I am used to guard contents of the brush I am installed on.
+!TrappedProcessorGuardProc commentStamp!
+I am used to guard contents filling process of the brush I am installed on.
 
-I save the brush contents, then I observe guard expression in the model,
+I observe guard expression in the model,
 and when it changes to nil or false, I delete the brush contents;
 on the other hand, when it changes to non-nil and non-false,
-I restore it from remembered state and interpret all contained
-data-trap attributes inside.!
+I run the rest on the chain, which should be one-time
+that sets up the contents,!
 
-!TrappedProcessorGuardContents methodsFor: 'data transformation'!
+!TrappedProcessorGuardProc methodsFor: 'data transformation'!
 
 toView: aDataCarrier
-	| frozen contents |
+	| frozen |
 	frozen := aDataCarrier copy.
-	contents := frozen contents.
-	frozen target trapGuard: guardPath contents: [ :html |
-		Trapped current cloneAndInject: contents inPlaceOf: html del ]
+	frozen target trapGuard: guardPath contents: [ frozen copy proceed ]
 ! !
 
-TrappedProcessorGuardBase subclass: #TrappedProcessorGuardProc
+TrappedProcessorGuardBase subclass: #TrappedProcessorGuardXon
 	instanceVariableNames: ''
 	package: 'Trapped-Processors'!
-!TrappedProcessorGuardProc commentStamp!
-I am used to guard contents filling process of the brush I am installed on.
+!TrappedProcessorGuardXon commentStamp!
+I am used to guard contents of the brush I am installed on.
 
-I observe guard expression in the model,
+I save the brush contents, then I observe guard expression in the model,
 and when it changes to nil or false, I delete the brush contents;
 on the other hand, when it changes to non-nil and non-false,
-I run the rest on the chain, which should be one-time
-that sets up the contents,!
+I restore it from remembered state and interpret all contained
+data-trap attributes inside.!
 
-!TrappedProcessorGuardProc methodsFor: 'data transformation'!
+!TrappedProcessorGuardXon methodsFor: 'data transformation'!
 
 toView: aDataCarrier
-	| frozen |
+	| frozen contents |
 	frozen := aDataCarrier copy.
-	frozen target trapGuard: guardPath contents: [ frozen copy proceed ]
+	contents := frozen contents.
+	frozen target trapGuard: guardPath contents: [ :html |
+		Trapped current cloneAndInject: contents inPlaceOf: html del ]
 ! !
 
 TrappedDataExpectingProcessor subclass: #TrappedProcessorInputChecked
@@ -218,55 +218,55 @@ toView: aDataCarrier
 	self subclassResponsibility
 ! !
 
-TrappedProcessorLoopBase subclass: #TrappedProcessorLoopContents
+TrappedProcessorLoopBase subclass: #TrappedProcessorLoopProc
 	instanceVariableNames: ''
 	package: 'Trapped-Processors'!
-!TrappedProcessorLoopContents commentStamp!
-I am used to loop over data and repeat the contents
+!TrappedProcessorLoopProc commentStamp!
+I am used to loop over data and repeat the contents filling process
 of the brush I am installed on.
 
-I save the brush contents, then I observe the data in the model,
+I observe the data in the model,
 and when it changes, I loop over it
-and restore the contents from remembered state
-and interpret all contained data-trap attributes inside
+and run the rest of the processing chain
 for each element, putting the result _after_ my brush.
 
 My brush itself should be as least visible as possible,
 as it only serve as a position flag (use for example
 noscript, ins or del).!
 
-!TrappedProcessorLoopContents methodsFor: 'data transformation'!
+!TrappedProcessorLoopProc methodsFor: 'data transformation'!
 
 toView: aDataCarrier
-	| frozen contents |
+	| frozen |
 	frozen := aDataCarrier copy.
-	contents := frozen contents.
-	frozen target trapIter: #() after: [ :html |
-		Trapped current cloneAndInject: contents inPlaceOf: html del ]
+	frozen target trapIter: #() after: [ :html | frozen copy target: html root; proceed ]
 ! !
 
-TrappedProcessorLoopBase subclass: #TrappedProcessorLoopProc
+TrappedProcessorLoopBase subclass: #TrappedProcessorLoopXon
 	instanceVariableNames: ''
 	package: 'Trapped-Processors'!
-!TrappedProcessorLoopProc commentStamp!
-I am used to loop over data and repeat the contents filling process
+!TrappedProcessorLoopXon commentStamp!
+I am used to loop over data and repeat the contents
 of the brush I am installed on.
 
-I observe the data in the model,
+I save the brush contents, then I observe the data in the model,
 and when it changes, I loop over it
-and run the rest of the processing chain
+and restore the contents from remembered state
+and interpret all contained data-trap attributes inside
 for each element, putting the result _after_ my brush.
 
 My brush itself should be as least visible as possible,
 as it only serve as a position flag (use for example
 noscript, ins or del).!
 
-!TrappedProcessorLoopProc methodsFor: 'data transformation'!
+!TrappedProcessorLoopXon methodsFor: 'data transformation'!
 
 toView: aDataCarrier
-	| frozen |
+	| frozen contents |
 	frozen := aDataCarrier copy.
-	frozen target trapIter: #() after: [ :html | frozen copy target: html root; proceed ]
+	contents := frozen contents.
+	frozen target trapIter: #() after: [ :html |
+		Trapped current cloneAndInject: contents inPlaceOf: html del ]
 ! !
 
 TrappedProcessor subclass: #TrappedProcessorReplace
@@ -507,14 +507,14 @@ deuric
 	^TrappedProcessorUriComponentDecode new
 !
 
-guardContents: anArray
-	^TrappedProcessorGuardContents new: anArray
-!
-
 guardProc: anArray
 	^TrappedProcessorGuardProc new: anArray
 !
 
+guardXon: anArray
+	^TrappedProcessorGuardXon new: anArray
+!
+
 inputChecked
 	^TrappedProcessorInputChecked new
 !
@@ -527,14 +527,14 @@ inputValue
 	^TrappedProcessorInputValue new
 !
 
-loopContents
-	^TrappedProcessorLoopContents new
-!
-
 loopProc
 	^TrappedProcessorLoopProc new
 !
 
+loopXon
+	^TrappedProcessorLoopXon new
+!
+
 path
 	^TrappedProcessorDescend new
 !