|  | @@ -105,11 +105,11 @@ fn: function (path){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  smalltalk.send(self,"_installFor_",[path],smalltalk.TrappedBinder);
 | 
	
		
			
				|  |  |  smalltalk.send(path,"_trapDescend_",[(function(){
 | 
	
		
			
				|  |  | -var actual;
 | 
	
		
			
				|  |  | -actual=smalltalk.send((smalltalk.Trapped || Trapped),"_path",[]);
 | 
	
		
			
				|  |  | -actual;
 | 
	
		
			
				|  |  | +var snap;
 | 
	
		
			
				|  |  | +snap=smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_snapshot",[]);
 | 
	
		
			
				|  |  | +snap;
 | 
	
		
			
				|  |  |  return smalltalk.send(self["@brush"],"_onChange_",[(function(){
 | 
	
		
			
				|  |  | -return smalltalk.send(actual,"_trapDescend_",[(function(){
 | 
	
		
			
				|  |  | +return smalltalk.send(snap,"_do_",[(function(){
 | 
	
		
			
				|  |  |  return smalltalk.send(self["@brush"],"_trap_modify_",[[],(function(){
 | 
	
		
			
				|  |  |  return smalltalk.send(smalltalk.send(smalltalk.send(self["@brush"],"_asJQuery",[]),"_attr_",["checked"]),"_notNil",[]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
	
		
			
				|  | @@ -118,8 +118,8 @@ return smalltalk.send(smalltalk.send(smalltalk.send(self["@brush"],"_asJQuery",[
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["path"],
 | 
	
		
			
				|  |  | -source: "installFor: path\x0a\x09super installFor: path.\x0a    path trapDescend: [ | actual |\x0a        actual := Trapped path.\x0a\x09    brush onChange: [ actual trapDescend: [ brush trap: #() modify: [\x0a            (brush asJQuery attr: 'checked') notNil\x0a        ]]]\x0a    ]",
 | 
	
		
			
				|  |  | -messageSends: ["installFor:", "trapDescend:", "path", "onChange:", "trap:modify:", "notNil", "attr:", "asJQuery"],
 | 
	
		
			
				|  |  | +source: "installFor: path\x0a\x09super installFor: path.\x0a    path trapDescend: [ | snap |\x0a        snap := Trapped current snapshot.\x0a\x09    brush onChange: [ snap do: [ brush trap: #() modify: [\x0a            (brush asJQuery attr: 'checked') notNil\x0a        ]]]\x0a    ]",
 | 
	
		
			
				|  |  | +messageSends: ["installFor:", "trapDescend:", "snapshot", "current", "onChange:", "do:", "trap:modify:", "notNil", "attr:", "asJQuery"],
 | 
	
		
			
				|  |  |  referencedClasses: ["Trapped"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TrappedAttrBinder);
 | 
	
	
		
			
				|  | @@ -573,6 +573,28 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.Trapped);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_snapshot",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "snapshot",
 | 
	
		
			
				|  |  | +category: 'snapshotting',
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +var $1;
 | 
	
		
			
				|  |  | +var path;
 | 
	
		
			
				|  |  | +var model;
 | 
	
		
			
				|  |  | +path=smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_elements",[]);
 | 
	
		
			
				|  |  | +model=smalltalk.send(self,"_byName_",[smalltalk.send(path,"_first",[])]);
 | 
	
		
			
				|  |  | +$1=smalltalk.send(smalltalk.send((smalltalk.TrappedSnapshot || TrappedSnapshot),"_new",[]),"_path_model_",[path,model]);
 | 
	
		
			
				|  |  | +return $1;
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "snapshot\x0a\x09| path model |\x0a    path := TrappedPathStack current elements.\x0a   \x09model := self byName: path first.\x0a    ^TrappedSnapshot new path: path model: model",
 | 
	
		
			
				|  |  | +messageSends: ["elements", "current", "byName:", "first", "path:model:", "new"],
 | 
	
		
			
				|  |  | +referencedClasses: ["TrappedPathStack", "TrappedSnapshot"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.Trapped);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_start",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
	
		
			
				|  | @@ -655,38 +677,20 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.Trapped.klass);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -smalltalk.addMethod(
 | 
	
		
			
				|  |  | -"_path",
 | 
	
		
			
				|  |  | -smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "path",
 | 
	
		
			
				|  |  | -category: 'accessing',
 | 
	
		
			
				|  |  | -fn: function (){
 | 
	
		
			
				|  |  | -var self=this;
 | 
	
		
			
				|  |  | -var $1;
 | 
	
		
			
				|  |  | -$1=smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_elements",[]);
 | 
	
		
			
				|  |  | -return $1;
 | 
	
		
			
				|  |  | -},
 | 
	
		
			
				|  |  | -args: [],
 | 
	
		
			
				|  |  | -source: "path\x0a\x09^TrappedPathStack current elements",
 | 
	
		
			
				|  |  | -messageSends: ["elements", "current"],
 | 
	
		
			
				|  |  | -referencedClasses: ["TrappedPathStack"]
 | 
	
		
			
				|  |  | -}),
 | 
	
		
			
				|  |  | -smalltalk.Trapped.klass);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  smalltalk.addClass('TrappedPathStack', smalltalk.TrappedSingleton, ['elements'], 'Trapped-Frontend');
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  | -"_append_",
 | 
	
		
			
				|  |  | +"_append_do_",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "append:",
 | 
	
		
			
				|  |  | +selector: "append:do:",
 | 
	
		
			
				|  |  |  category: 'descending',
 | 
	
		
			
				|  |  | -fn: function (anArray){
 | 
	
		
			
				|  |  | +fn: function (anArray,aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -self["@elements"]=smalltalk.send(self["@elements"],"__comma",[anArray]);
 | 
	
		
			
				|  |  | +smalltalk.send(self,"_with_do_",[smalltalk.send(self["@elements"],"__comma",[anArray]),aBlock]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  | -args: ["anArray"],
 | 
	
		
			
				|  |  | -source: "append: anArray\x0a    elements := elements, anArray",
 | 
	
		
			
				|  |  | -messageSends: [","],
 | 
	
		
			
				|  |  | +args: ["anArray", "aBlock"],
 | 
	
		
			
				|  |  | +source: "append: anArray do: aBlock\x0a    self with: elements, anArray do: aBlock",
 | 
	
		
			
				|  |  | +messageSends: ["with:do:", ","],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TrappedPathStack);
 | 
	
	
		
			
				|  | @@ -734,7 +738,8 @@ var self=this;
 | 
	
		
			
				|  |  |  var old;
 | 
	
		
			
				|  |  |  old=self["@elements"];
 | 
	
		
			
				|  |  |  smalltalk.send((function(){
 | 
	
		
			
				|  |  | -smalltalk.send(self,"_append_",[anArray]);
 | 
	
		
			
				|  |  | +self["@elements"]=anArray;
 | 
	
		
			
				|  |  | +self["@elements"];
 | 
	
		
			
				|  |  |  return smalltalk.send(aBlock,"_value",[]);
 | 
	
		
			
				|  |  |  }),"_ensure_",[(function(){
 | 
	
		
			
				|  |  |  self["@elements"]=old;
 | 
	
	
		
			
				|  | @@ -742,14 +747,84 @@ return self["@elements"];
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["anArray", "aBlock"],
 | 
	
		
			
				|  |  | -source: "with: anArray do: aBlock\x0a\x09| old |\x0a    old := elements.\x0a    [ self append: anArray.\x0a\x09aBlock value ] ensure: [ elements := old ]",
 | 
	
		
			
				|  |  | -messageSends: ["ensure:", "append:", "value"],
 | 
	
		
			
				|  |  | +source: "with: anArray do: aBlock\x0a\x09| old |\x0a    old := elements.\x0a    [ elements := anArray.\x0a\x09aBlock value ] ensure: [ elements := old ]",
 | 
	
		
			
				|  |  | +messageSends: ["ensure:", "value"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TrappedPathStack);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addClass('TrappedSnapshot', smalltalk.Object, ['path', 'model'], 'Trapped-Frontend');
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_do_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "do:",
 | 
	
		
			
				|  |  | +category: 'action',
 | 
	
		
			
				|  |  | +fn: function (aBlock){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_with_do_",[self["@path"],(function(){
 | 
	
		
			
				|  |  | +return smalltalk.send(aBlock,"_value_",[self["@model"]]);
 | 
	
		
			
				|  |  | +})]);
 | 
	
		
			
				|  |  | +return self},
 | 
	
		
			
				|  |  | +args: ["aBlock"],
 | 
	
		
			
				|  |  | +source: "do: aBlock\x0a\x09TrappedPathStack current with: path do: [ aBlock value: model ]",
 | 
	
		
			
				|  |  | +messageSends: ["with:do:", "value:", "current"],
 | 
	
		
			
				|  |  | +referencedClasses: ["TrappedPathStack"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.TrappedSnapshot);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_model",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "model",
 | 
	
		
			
				|  |  | +category: 'accessing',
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return self["@model"];
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "model\x0a\x09^model",
 | 
	
		
			
				|  |  | +messageSends: [],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.TrappedSnapshot);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_path",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "path",
 | 
	
		
			
				|  |  | +category: 'accessing',
 | 
	
		
			
				|  |  | +fn: function (){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return self["@path"];
 | 
	
		
			
				|  |  | +},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "path\x0a\x09^path",
 | 
	
		
			
				|  |  | +messageSends: [],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.TrappedSnapshot);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_path_model_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "path:model:",
 | 
	
		
			
				|  |  | +category: 'accessing',
 | 
	
		
			
				|  |  | +fn: function (anArray,aTrappedMW){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +self["@path"]=anArray;
 | 
	
		
			
				|  |  | +self["@model"]=aTrappedMW;
 | 
	
		
			
				|  |  | +return self},
 | 
	
		
			
				|  |  | +args: ["anArray", "aTrappedMW"],
 | 
	
		
			
				|  |  | +source: "path: anArray model: aTrappedMW\x0a\x09path := anArray.\x0a    model := aTrappedMW",
 | 
	
		
			
				|  |  | +messageSends: [],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.TrappedSnapshot);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addClass('TrappedSubscription', smalltalk.KeyedSubscriptionBase, [], 'Trapped-Frontend');
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_accepts_",
 | 
	
	
		
			
				|  | @@ -780,11 +855,11 @@ selector: "trapDescend:",
 | 
	
		
			
				|  |  |  category: '*Trapped-Frontend',
 | 
	
		
			
				|  |  |  fn: function (aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_with_do_",[self,aBlock]);
 | 
	
		
			
				|  |  | +smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_append_do_",[self,aBlock]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["aBlock"],
 | 
	
		
			
				|  |  | -source: "trapDescend: aBlock\x0a\x09TrappedPathStack current with: self do: aBlock",
 | 
	
		
			
				|  |  | -messageSends: ["with:do:", "current"],
 | 
	
		
			
				|  |  | +source: "trapDescend: aBlock\x0a\x09TrappedPathStack current append: self do: aBlock",
 | 
	
		
			
				|  |  | +messageSends: ["append:do:", "current"],
 | 
	
		
			
				|  |  |  referencedClasses: ["TrappedPathStack"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.Array);
 | 
	
	
		
			
				|  | @@ -796,11 +871,11 @@ selector: "trapDescend:",
 | 
	
		
			
				|  |  |  category: '*Trapped-Frontend',
 | 
	
		
			
				|  |  |  fn: function (aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_with_do_",[self,aBlock]);
 | 
	
		
			
				|  |  | +smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_append_do_",[self,aBlock]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["aBlock"],
 | 
	
		
			
				|  |  | -source: "trapDescend: aBlock\x0a\x09TrappedPathStack current with: self do: aBlock",
 | 
	
		
			
				|  |  | -messageSends: ["with:do:", "current"],
 | 
	
		
			
				|  |  | +source: "trapDescend: aBlock\x0a\x09TrappedPathStack current append: self do: aBlock",
 | 
	
		
			
				|  |  | +messageSends: ["append:do:", "current"],
 | 
	
		
			
				|  |  |  referencedClasses: ["TrappedPathStack"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.Array);
 | 
	
	
		
			
				|  | @@ -829,18 +904,15 @@ category: '*Trapped-Frontend',
 | 
	
		
			
				|  |  |  fn: function (path,aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  smalltalk.send(path,"_trapDescend_",[(function(){
 | 
	
		
			
				|  |  | -var actual;
 | 
	
		
			
				|  |  | -var model;
 | 
	
		
			
				|  |  | -actual=smalltalk.send((smalltalk.Trapped || Trapped),"_path",[]);
 | 
	
		
			
				|  |  | -actual;
 | 
	
		
			
				|  |  | -model=smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_byName_",[smalltalk.send(actual,"_first",[])]);
 | 
	
		
			
				|  |  | -model;
 | 
	
		
			
				|  |  | -return smalltalk.send(model,"_modify_do_",[smalltalk.send(actual,"_allButFirst",[]),aBlock]);
 | 
	
		
			
				|  |  | +var snap;
 | 
	
		
			
				|  |  | +snap=smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_snapshot",[]);
 | 
	
		
			
				|  |  | +snap;
 | 
	
		
			
				|  |  | +return smalltalk.send(smalltalk.send(snap,"_model",[]),"_modify_do_",[smalltalk.send(smalltalk.send(snap,"_path",[]),"_allButFirst",[]),aBlock]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["path", "aBlock"],
 | 
	
		
			
				|  |  | -source: "trap: path modify: aBlock\x0a\x09path trapDescend: [ | actual model |\x0a    \x09actual := Trapped path.\x0a        model := Trapped current byName: actual first.\x0a        model modify: actual allButFirst do: aBlock\x0a    ]",
 | 
	
		
			
				|  |  | -messageSends: ["trapDescend:", "path", "byName:", "first", "current", "modify:do:", "allButFirst"],
 | 
	
		
			
				|  |  | +source: "trap: path modify: aBlock\x0a\x09path trapDescend: [ | snap |\x0a        snap := Trapped current snapshot.\x0a        snap model modify: snap path allButFirst do: aBlock\x0a    ]",
 | 
	
		
			
				|  |  | +messageSends: ["trapDescend:", "snapshot", "current", "modify:do:", "allButFirst", "path", "model"],
 | 
	
		
			
				|  |  |  referencedClasses: ["Trapped"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TagBrush);
 | 
	
	
		
			
				|  | @@ -854,18 +926,15 @@ fn: function (path,aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  var $1;
 | 
	
		
			
				|  |  |  smalltalk.send(path,"_trapDescend_",[(function(){
 | 
	
		
			
				|  |  | -var actual;
 | 
	
		
			
				|  |  | -var model;
 | 
	
		
			
				|  |  | -actual=smalltalk.send((smalltalk.Trapped || Trapped),"_path",[]);
 | 
	
		
			
				|  |  | -actual;
 | 
	
		
			
				|  |  | -model=smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_byName_",[smalltalk.send(actual,"_first",[])]);
 | 
	
		
			
				|  |  | -model;
 | 
	
		
			
				|  |  | -return smalltalk.send(model,"_watch_do_",[smalltalk.send(actual,"_allButFirst",[]),(function(data){
 | 
	
		
			
				|  |  | +var snap;
 | 
	
		
			
				|  |  | +snap=smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_snapshot",[]);
 | 
	
		
			
				|  |  | +snap;
 | 
	
		
			
				|  |  | +return smalltalk.send(smalltalk.send(snap,"_model",[]),"_watch_do_",[smalltalk.send(smalltalk.send(snap,"_path",[]),"_allButFirst",[]),(function(data){
 | 
	
		
			
				|  |  |  $1=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self,"_asJQuery",[]),"_closest_",["html"]),"_toArray",[]),"_isEmpty",[]);
 | 
	
		
			
				|  |  |  if(smalltalk.assert($1)){
 | 
	
		
			
				|  |  |  smalltalk.send((smalltalk.KeyedPubSubUnsubscribe || KeyedPubSubUnsubscribe),"_signal",[]);
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  | -return smalltalk.send(actual,"_trapDescend_",[(function(){
 | 
	
		
			
				|  |  | +return smalltalk.send(snap,"_do_",[(function(){
 | 
	
		
			
				|  |  |  return smalltalk.send(self,"_with_",[(function(html){
 | 
	
		
			
				|  |  |  return smalltalk.send(aBlock,"_value_value_",[data,html]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
	
		
			
				|  | @@ -874,8 +943,8 @@ return smalltalk.send(aBlock,"_value_value_",[data,html]);
 | 
	
		
			
				|  |  |  })]);
 | 
	
		
			
				|  |  |  return self},
 | 
	
		
			
				|  |  |  args: ["path", "aBlock"],
 | 
	
		
			
				|  |  | -source: "trap: path read: aBlock\x0a\x09path trapDescend: [ | actual model |\x0a    \x09actual := Trapped path.\x0a        model := Trapped current byName: actual first.\x0a        model watch: actual allButFirst do: [ :data |\x0a            (self asJQuery closest: 'html') toArray isEmpty ifTrue: [ KeyedPubSubUnsubscribe signal ].\x0a        \x09actual trapDescend: [ self with: [ :html | aBlock value: data value: html ] ]\x0a    \x09]\x0a    ]",
 | 
	
		
			
				|  |  | -messageSends: ["trapDescend:", "path", "byName:", "first", "current", "watch:do:", "allButFirst", "ifTrue:", "signal", "isEmpty", "toArray", "closest:", "asJQuery", "with:", "value:value:"],
 | 
	
		
			
				|  |  | +source: "trap: path read: aBlock\x0a\x09path trapDescend: [ | snap |\x0a        snap := Trapped current snapshot.\x0a        snap model watch: snap path allButFirst do: [ :data |\x0a            (self asJQuery closest: 'html') toArray isEmpty ifTrue: [ KeyedPubSubUnsubscribe signal ].\x0a        \x09snap do: [ self with: [ :html | aBlock value: data value: html ] ]\x0a    \x09]\x0a    ]",
 | 
	
		
			
				|  |  | +messageSends: ["trapDescend:", "snapshot", "current", "watch:do:", "allButFirst", "path", "ifTrue:", "signal", "isEmpty", "toArray", "closest:", "asJQuery", "do:", "with:", "value:value:", "model"],
 | 
	
		
			
				|  |  |  referencedClasses: ["Trapped", "KeyedPubSubUnsubscribe"]
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.TagBrush);
 |