|  | @@ -2164,40 +2164,6 @@ smalltalk.HTMLCanvas.klass);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  smalltalk.addClass('HTMLSnippet', smalltalk.Object, ['snippets'], 'Canvas');
 | 
	
		
			
				|  |  |  smalltalk.HTMLSnippet.comment="HTMLSnippet instance is the registry of html snippets.\x0aHTMLSnippet current is the public singleton instance.\x0a\x0aAt the beginning, it scans the document for any html elements\x0awith 'data-snippet=\x22foo\x22' attribute and takes them off the document,\x0aremembering them in the store under the specified name.\x0aIt also install method #foo into HTMLCanvas dynamically.\x0a\x0aEvery html snippet should mark a 'caret', a place where contents\x0acan be inserted, by 'data-snippet=\x22*\x22' (a special name for caret).\x0aFor example:\x0a\x0a<li data-snippet='menuelement' class='...'><a data-snippet='*'></a></li>\x0a\x0adefines a list element with a link inside; the link itself is marked as a caret.\x0a\x0aYou can later issue\x0a\x0ahtml menuelement href: '/foo'; with: 'A foo'\x0a\x0ato insert the whole snippet and directly manipulate the caret, so it renders:\x0a\x0a<li class='...'><a href='/foo'>A foo</a></li>\x0a\x0aFor a self-careting tags (not very useful, but you do not need to fill class etc.\x0ayou can use\x0a\x0a<div class='lots of classes' attr1='one' attr2='two' data-snippet='*bar'></div>\x0a\x0aand in code later do:\x0a\x0ahtml bar with: [ xxx ]\x0a\x0ato render\x0a\x0a<div class='lots of classes' attr1='one' attr2='two'>...added by xxx...</div>\x0a"
 | 
	
		
			
				|  |  | -smalltalk.addMethod(
 | 
	
		
			
				|  |  | -"_addSnippet_",
 | 
	
		
			
				|  |  | -smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "addSnippet:",
 | 
	
		
			
				|  |  | -category: 'accessing',
 | 
	
		
			
				|  |  | -fn: function (anAssociation){
 | 
	
		
			
				|  |  | -var self=this;
 | 
	
		
			
				|  |  | -return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._snippets())._add_(anAssociation);
 | 
	
		
			
				|  |  | -return self}, function($ctx1) {$ctx1.fill(self,"addSnippet:",{anAssociation:anAssociation}, smalltalk.HtmlSnippet)})},
 | 
	
		
			
				|  |  | -args: ["anAssociation"],
 | 
	
		
			
				|  |  | -source: "addSnippet: anAssociation\x0a\x09self snippets add: anAssociation",
 | 
	
		
			
				|  |  | -messageSends: ["add:", "snippets"],
 | 
	
		
			
				|  |  | -referencedClasses: []
 | 
	
		
			
				|  |  | -}),
 | 
	
		
			
				|  |  | -smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -smalltalk.addMethod(
 | 
	
		
			
				|  |  | -"_compileSnippet_",
 | 
	
		
			
				|  |  | -smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "compileSnippet:",
 | 
	
		
			
				|  |  | -category: 'method generation',
 | 
	
		
			
				|  |  | -fn: function (anAssociation){
 | 
	
		
			
				|  |  | -var self=this;
 | 
	
		
			
				|  |  | -return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._installMethod_forClass_category_(_st(_st((function(htmlReceiver){
 | 
	
		
			
				|  |  | -return smalltalk.withContext(function($ctx2) {
return _st(htmlReceiver)._snippet_(_st(anAssociation)._value());
 | 
	
		
			
				|  |  | -}, function($ctx2) {$ctx2.fillBlock({htmlReceiver:htmlReceiver},$ctx1)})}))._currySelf())._asCompiledMethod_(_st(anAssociation)._key()),(smalltalk.HTMLCanvas || HTMLCanvas),"**snippets");
 | 
	
		
			
				|  |  | -return self}, function($ctx1) {$ctx1.fill(self,"compileSnippet:",{anAssociation:anAssociation}, smalltalk.HtmlSnippet)})},
 | 
	
		
			
				|  |  | -args: ["anAssociation"],
 | 
	
		
			
				|  |  | -source: "compileSnippet: anAssociation\x0a\x09\x22Method generation the the snippet.\x0a    The selector is the key of anAssociation, the method block being the value of anAssociation\x22\x0a    \x0a    ClassBuilder new\x0a    \x09installMethod: ([ :htmlReceiver | htmlReceiver snippet: anAssociation value ] \x0a        \x09currySelf asCompiledMethod: anAssociation key)\x0a        forClass: HTMLCanvas\x0a        category: '**snippets'",
 | 
	
		
			
				|  |  | -messageSends: ["installMethod:forClass:category:", "asCompiledMethod:", "key", "currySelf", "snippet:", "value", "new"],
 | 
	
		
			
				|  |  | -referencedClasses: ["HTMLCanvas", "ClassBuilder"]
 | 
	
		
			
				|  |  | -}),
 | 
	
		
			
				|  |  | -smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_initializeFromJQuery_",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
	
		
			
				|  | @@ -2216,25 +2182,6 @@ referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -smalltalk.addMethod(
 | 
	
		
			
				|  |  | -"_installSnippet_",
 | 
	
		
			
				|  |  | -smalltalk.method({
 | 
	
		
			
				|  |  | -selector: "installSnippet:",
 | 
	
		
			
				|  |  | -category: 'snippet installation',
 | 
	
		
			
				|  |  | -fn: function (anAssociation){
 | 
	
		
			
				|  |  | -var self=this;
 | 
	
		
			
				|  |  | -return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 | 
	
		
			
				|  |  | -$1=self;
 | 
	
		
			
				|  |  | -_st($1)._addSnippet_(anAssociation);
 | 
	
		
			
				|  |  | -$2=_st($1)._compileSnippet_(anAssociation);
 | 
	
		
			
				|  |  | -return self}, function($ctx1) {$ctx1.fill(self,"installSnippet:",{anAssociation:anAssociation}, smalltalk.HtmlSnippet)})},
 | 
	
		
			
				|  |  | -args: ["anAssociation"],
 | 
	
		
			
				|  |  | -source: "installSnippet: anAssociation\x0a\x09self \x0a    \x09addSnippet: anAssociation;\x0a        compileSnippet: anAssociation",
 | 
	
		
			
				|  |  | -messageSends: ["addSnippet:", "compileSnippet:"],
 | 
	
		
			
				|  |  | -referencedClasses: []
 | 
	
		
			
				|  |  | -}),
 | 
	
		
			
				|  |  | -smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_installSnippetFromJQuery_",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
	
		
			
				|  | @@ -2255,12 +2202,12 @@ _st(element)._attr_put_("data-snippet","*");
 | 
	
		
			
				|  |  |  } else {
 | 
	
		
			
				|  |  |  _st(element)._removeAttr_("data-snippet");
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  | -_st(self)._installSnippet_(_st(name).__minus_gt(_st(_st(element)._detach())._get_((0))));
 | 
	
		
			
				|  |  | +_st(self)._snippetAt_install_(name,_st(_st(element)._detach())._get_((0)));
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  | -return self}, function($ctx1) {$ctx1.fill(self,"installSnippetFromJQuery:",{element:element,name:name}, smalltalk.HtmlSnippet)})},
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"installSnippetFromJQuery:",{element:element,name:name}, smalltalk.HTMLSnippet)})},
 | 
	
		
			
				|  |  |  args: ["element"],
 | 
	
		
			
				|  |  | -source: "installSnippetFromJQuery: element\x0a\x09| name |\x0a    name := element attr: 'data-snippet'.\x0a    name = '*' ifFalse: [\x0a    \x09('^\x5c*' asRegexp test: name) \x0a            ifTrue: [ \x0a            \x09name := name allButFirst. \x0a                element attr: 'data-snippet' put: '*' ]\x0a          \x09ifFalse: [ \x0a            \x09element removeAttr: 'data-snippet' ].\x0a        self installSnippet: name -> (element detach get: 0) ]",
 | 
	
		
			
				|  |  | -messageSends: ["attr:", "ifFalse:", "ifTrue:ifFalse:", "allButFirst", "attr:put:", "removeAttr:", "test:", "asRegexp", "installSnippet:", "->", "get:", "detach", "="],
 | 
	
		
			
				|  |  | +source: "installSnippetFromJQuery: element\x0a\x09| name |\x0a    name := element attr: 'data-snippet'.\x0a    name = '*' ifFalse: [\x0a    \x09('^\x5c*' asRegexp test: name) \x0a            ifTrue: [ \x0a            \x09name := name allButFirst. \x0a                element attr: 'data-snippet' put: '*' ]\x0a          \x09ifFalse: [ \x0a            \x09element removeAttr: 'data-snippet' ].\x0a        self snippetAt: name install: (element detach get: 0) ]",
 | 
	
		
			
				|  |  | +messageSends: ["attr:", "ifFalse:", "ifTrue:ifFalse:", "allButFirst", "attr:put:", "removeAttr:", "test:", "asRegexp", "snippetAt:install:", "get:", "detach", "="],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.HTMLSnippet);
 | 
	
	
		
			
				|  | @@ -2273,16 +2220,34 @@ category: 'accessing',
 | 
	
		
			
				|  |  |  fn: function (aString){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  return smalltalk.withContext(function($ctx1) { 
var $1;
 | 
	
		
			
				|  |  | -$1=_st(self["@snippets"])._at_(aString);
 | 
	
		
			
				|  |  | +$1=_st(_st(self)._snippets())._at_(aString);
 | 
	
		
			
				|  |  |  return $1;
 | 
	
		
			
				|  |  | -}, function($ctx1) {$ctx1.fill(self,"snippetAt:",{aString:aString}, smalltalk.HtmlSnippet)})},
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"snippetAt:",{aString:aString}, smalltalk.HTMLSnippet)})},
 | 
	
		
			
				|  |  |  args: ["aString"],
 | 
	
		
			
				|  |  | -source: "snippetAt: aString\x0a\x09^ snippets at: aString",
 | 
	
		
			
				|  |  | -messageSends: ["at:"],
 | 
	
		
			
				|  |  | +source: "snippetAt: aString\x0a\x09^ self snippets at: aString",
 | 
	
		
			
				|  |  | +messageSends: ["at:", "snippets"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_snippetAt_compile_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "snippetAt:compile:",
 | 
	
		
			
				|  |  | +category: 'method generation',
 | 
	
		
			
				|  |  | +fn: function (aString,anElement){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
_st(_st((smalltalk.ClassBuilder || ClassBuilder))._new())._installMethod_forClass_category_(_st(_st((function(htmlReceiver){
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx2) {
return _st(htmlReceiver)._snippet_(anElement);
 | 
	
		
			
				|  |  | +}, function($ctx2) {$ctx2.fillBlock({htmlReceiver:htmlReceiver},$ctx1)})}))._currySelf())._asCompiledMethod_(aString),(smalltalk.HTMLCanvas || HTMLCanvas),"**snippets");
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"snippetAt:compile:",{aString:aString,anElement:anElement}, smalltalk.HTMLSnippet)})},
 | 
	
		
			
				|  |  | +args: ["aString", "anElement"],
 | 
	
		
			
				|  |  | +source: "snippetAt: aString compile: anElement\x0a\x09\x22Method generation for the snippet.\x0a    The selector is aString, the method block uses anElement\x22\x0a    \x0a    ClassBuilder new\x0a    \x09installMethod: ([ :htmlReceiver | htmlReceiver snippet: anElement ] \x0a        \x09currySelf asCompiledMethod: aString)\x0a        forClass: HTMLCanvas\x0a        category: '**snippets'",
 | 
	
		
			
				|  |  | +messageSends: ["installMethod:forClass:category:", "asCompiledMethod:", "currySelf", "snippet:", "new"],
 | 
	
		
			
				|  |  | +referencedClasses: ["HTMLCanvas", "ClassBuilder"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_snippetAt_ifAbsent_",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
	
		
			
				|  | @@ -2291,12 +2256,47 @@ category: 'accessing',
 | 
	
		
			
				|  |  |  fn: function (aString,aBlock){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  return smalltalk.withContext(function($ctx1) { 
var $1;
 | 
	
		
			
				|  |  | -$1=_st(self["@snippets"])._at_ifAbsent_(aString,aBlock);
 | 
	
		
			
				|  |  | +$1=_st(_st(self)._snippets())._at_ifAbsent_(aString,aBlock);
 | 
	
		
			
				|  |  |  return $1;
 | 
	
		
			
				|  |  | -}, function($ctx1) {$ctx1.fill(self,"snippetAt:ifAbsent:",{aString:aString,aBlock:aBlock}, smalltalk.HtmlSnippet)})},
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"snippetAt:ifAbsent:",{aString:aString,aBlock:aBlock}, smalltalk.HTMLSnippet)})},
 | 
	
		
			
				|  |  |  args: ["aString", "aBlock"],
 | 
	
		
			
				|  |  | -source: "snippetAt: aString ifAbsent: aBlock\x0a\x09^ snippets at: aString ifAbsent: aBlock",
 | 
	
		
			
				|  |  | -messageSends: ["at:ifAbsent:"],
 | 
	
		
			
				|  |  | +source: "snippetAt: aString ifAbsent: aBlock\x0a\x09^ self snippets at: aString ifAbsent: aBlock",
 | 
	
		
			
				|  |  | +messageSends: ["at:ifAbsent:", "snippets"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_snippetAt_install_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "snippetAt:install:",
 | 
	
		
			
				|  |  | +category: 'snippet installation',
 | 
	
		
			
				|  |  | +fn: function (aString,anElement){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
var $1,$2;
 | 
	
		
			
				|  |  | +$1=self;
 | 
	
		
			
				|  |  | +_st($1)._snippetAt_put_(aString,anElement);
 | 
	
		
			
				|  |  | +$2=_st($1)._snippetAt_compile_(aString,anElement);
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"snippetAt:install:",{aString:aString,anElement:anElement}, smalltalk.HTMLSnippet)})},
 | 
	
		
			
				|  |  | +args: ["aString", "anElement"],
 | 
	
		
			
				|  |  | +source: "snippetAt: aString install: anElement\x0a\x09self \x0a    \x09snippetAt: aString put: anElement;\x0a        snippetAt: aString compile: anElement",
 | 
	
		
			
				|  |  | +messageSends: ["snippetAt:put:", "snippetAt:compile:"],
 | 
	
		
			
				|  |  | +referencedClasses: []
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.HTMLSnippet);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_snippetAt_put_",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "snippetAt:put:",
 | 
	
		
			
				|  |  | +category: 'accessing',
 | 
	
		
			
				|  |  | +fn: function (aString,anElement){
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._snippets())._at_put_(aString,anElement);
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"snippetAt:put:",{aString:aString,anElement:anElement}, smalltalk.HTMLSnippet)})},
 | 
	
		
			
				|  |  | +args: ["aString", "anElement"],
 | 
	
		
			
				|  |  | +source: "snippetAt: aString put: anElement\x0a\x09self snippets at: aString put: anElement",
 | 
	
		
			
				|  |  | +messageSends: ["at:put:", "snippets"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.HTMLSnippet);
 | 
	
	
		
			
				|  | @@ -2329,7 +2329,7 @@ smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_snippetsFromJQuery_",
 | 
	
		
			
				|  |  |  smalltalk.method({
 | 
	
		
			
				|  |  |  selector: "snippetsFromJQuery:",
 | 
	
		
			
				|  |  | -category: 'accessing',
 | 
	
		
			
				|  |  | +category: 'private',
 | 
	
		
			
				|  |  |  fn: function (aJQuery){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  |  return smalltalk.withContext(function($ctx1) { 
var $1;
 | 
	
	
		
			
				|  | @@ -2396,11 +2396,12 @@ selector: "initialize",
 | 
	
		
			
				|  |  |  category: 'initialization',
 | 
	
		
			
				|  |  |  fn: function (){
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -return smalltalk.withContext(function($ctx1) { 
_st(self)._ensureCurrent();
 | 
	
		
			
				|  |  | -return self}, function($ctx1) {$ctx1.fill(self,"initialize",{}, smalltalk.HtmlSnippet.klass)})},
 | 
	
		
			
				|  |  | +return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.klass.fn.prototype._initialize.apply(_st(self), []);
 | 
	
		
			
				|  |  | +_st(self)._ensureCurrent();
 | 
	
		
			
				|  |  | +return self}, function($ctx1) {$ctx1.fill(self,"initialize",{}, smalltalk.HTMLSnippet.klass)})},
 | 
	
		
			
				|  |  |  args: [],
 | 
	
		
			
				|  |  | -source: "initialize\x0a\x09self ensureCurrent",
 | 
	
		
			
				|  |  | -messageSends: ["ensureCurrent"],
 | 
	
		
			
				|  |  | +source: "initialize\x0a\x09super initialize.\x0a\x09self ensureCurrent",
 | 
	
		
			
				|  |  | +messageSends: ["initialize", "ensureCurrent"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.HTMLSnippet.klass);
 |