Trapped-Frontend.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. smalltalk.addPackage('Trapped-Frontend', {});
  2. smalltalk.addClass('TrappedDumbView', smalltalk.Widget, [], 'Trapped-Frontend');
  3. smalltalk.TrappedDumbView.comment="I just read and show an actual path."
  4. smalltalk.addMethod(
  5. "_renderOn_",
  6. smalltalk.method({
  7. selector: "renderOn:",
  8. category: 'rendering',
  9. fn: function (html){
  10. var self=this;
  11. smalltalk.send(smalltalk.send(html,"_root",[]),"_trapShow_",[[]]);
  12. return self},
  13. args: ["html"],
  14. source: "renderOn: html\x0a\x09html root trapShow: #()",
  15. messageSends: ["trapShow:", "root"],
  16. referencedClasses: []
  17. }),
  18. smalltalk.TrappedDumbView);
  19. smalltalk.addClass('TrappedSingleton', smalltalk.Object, [], 'Trapped-Frontend');
  20. smalltalk.addMethod(
  21. "_start",
  22. smalltalk.method({
  23. selector: "start",
  24. category: 'action',
  25. fn: function (){
  26. var self=this;
  27. var $1;
  28. $1=smalltalk.send(self,"_subclassResponsibility",[]);
  29. return $1;
  30. },
  31. args: [],
  32. source: "start\x0a\x09^ self subclassResponsibility",
  33. messageSends: ["subclassResponsibility"],
  34. referencedClasses: []
  35. }),
  36. smalltalk.TrappedSingleton);
  37. smalltalk.TrappedSingleton.klass.iVarNames = ['current'];
  38. smalltalk.addMethod(
  39. "_current",
  40. smalltalk.method({
  41. selector: "current",
  42. category: 'accessing',
  43. fn: function (){
  44. var self=this;
  45. var $1;
  46. if(($receiver = self["@current"]) == nil || $receiver == undefined){
  47. self["@current"]=smalltalk.send(self,"_new",[]);
  48. $1=self["@current"];
  49. } else {
  50. $1=self["@current"];
  51. };
  52. return $1;
  53. },
  54. args: [],
  55. source: "current\x0a\x09^ current ifNil: [ current := self new ]",
  56. messageSends: ["ifNil:", "new"],
  57. referencedClasses: []
  58. }),
  59. smalltalk.TrappedSingleton.klass);
  60. smalltalk.addMethod(
  61. "_start",
  62. smalltalk.method({
  63. selector: "start",
  64. category: 'action',
  65. fn: function (){
  66. var self=this;
  67. smalltalk.send(smalltalk.send(self,"_current",[]),"_start",[]);
  68. return self},
  69. args: [],
  70. source: "start\x0a\x09self current start",
  71. messageSends: ["start", "current"],
  72. referencedClasses: []
  73. }),
  74. smalltalk.TrappedSingleton.klass);
  75. smalltalk.addClass('Trapped', smalltalk.TrappedSingleton, ['registry'], 'Trapped-Frontend');
  76. smalltalk.addMethod(
  77. "_byName_",
  78. smalltalk.method({
  79. selector: "byName:",
  80. category: 'accessing',
  81. fn: function (aString){
  82. var self=this;
  83. var $1;
  84. $1=smalltalk.send(self["@registry"],"_at_",[aString]);
  85. return $1;
  86. },
  87. args: ["aString"],
  88. source: "byName: aString\x0a\x09^ registry at: aString",
  89. messageSends: ["at:"],
  90. referencedClasses: []
  91. }),
  92. smalltalk.Trapped);
  93. smalltalk.addMethod(
  94. "_initialize",
  95. smalltalk.method({
  96. selector: "initialize",
  97. category: 'initialization',
  98. fn: function (){
  99. var self=this;
  100. smalltalk.send(self,"_initialize",[],smalltalk.TrappedSingleton);
  101. self["@registry"]=smalltalk.HashedCollection._fromPairs_([]);
  102. return self},
  103. args: [],
  104. source: "initialize\x0a\x09super initialize.\x0a\x09registry := #{}.",
  105. messageSends: ["initialize"],
  106. referencedClasses: []
  107. }),
  108. smalltalk.Trapped);
  109. smalltalk.addMethod(
  110. "_register_name_",
  111. smalltalk.method({
  112. selector: "register:name:",
  113. category: 'accessing',
  114. fn: function (aFly,aString){
  115. var self=this;
  116. smalltalk.send(self["@registry"],"_at_put_",[aString,aFly]);
  117. return self},
  118. args: ["aFly", "aString"],
  119. source: "register: aFly name: aString\x0a\x09registry at: aString put: aFly",
  120. messageSends: ["at:put:"],
  121. referencedClasses: []
  122. }),
  123. smalltalk.Trapped);
  124. smalltalk.addMethod(
  125. "_start",
  126. smalltalk.method({
  127. selector: "start",
  128. category: 'action',
  129. fn: function (){
  130. var self=this;
  131. var $1;
  132. smalltalk.send(smalltalk.send("[data-trap]","_asJQuery",[]),"_each_",[(function(index,elem){
  133. var trap;
  134. var jq;
  135. var viewName;
  136. var modelName;
  137. var tokens;
  138. var path;
  139. jq=smalltalk.send(elem,"_asJQuery",[]);
  140. jq;
  141. trap=smalltalk.send(jq,"_attr_",["data-trap"]);
  142. trap;
  143. tokens=smalltalk.send(trap,"_tokenize_",[":"]);
  144. tokens;
  145. $1=smalltalk.send(smalltalk.send(tokens,"_size",[]),"__eq",[(1)]);
  146. if(smalltalk.assert($1)){
  147. tokens=smalltalk.send(["TrappedDumbView"],"__comma",[tokens]);
  148. tokens;
  149. };
  150. viewName=smalltalk.send(tokens,"_first",[]);
  151. viewName;
  152. tokens=smalltalk.send(smalltalk.send(smalltalk.send(tokens,"_second",[]),"_tokenize_",[" "]),"_select_",[(function(each){
  153. return smalltalk.send(each,"_notEmpty",[]);
  154. })]);
  155. tokens;
  156. modelName=smalltalk.send(tokens,"_first",[]);
  157. modelName;
  158. path=smalltalk.send((smalltalk.Trapped || Trapped),"_parse_",[smalltalk.send(tokens,"_allButFirst",[])]);
  159. path;
  160. return smalltalk.send(smalltalk.send([modelName],"__comma",[path]),"_trapDescend_",[(function(){
  161. return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk),"_current",[]),"_at_",[viewName]),"_new",[]),"_appendToJQuery_",[jq]);
  162. })]);
  163. })]);
  164. return self},
  165. args: [],
  166. source: "start\x0a\x09'[data-trap]' asJQuery each: [ :index :elem |\x0a \x09| trap jq viewName modelName tokens path |\x0a jq := elem asJQuery.\x0a trap := jq attr: 'data-trap'.\x0a tokens := trap tokenize: ':'.\x0a tokens size = 1 ifTrue: [ tokens := { 'TrappedDumbView' }, tokens ].\x0a viewName := tokens first.\x0a tokens := (tokens second tokenize: ' ') select: [ :each | each notEmpty ].\x0a modelName := tokens first.\x0a path := Trapped parse: tokens allButFirst.\x0a { modelName }, path trapDescend: [(Smalltalk current at: viewName) new appendToJQuery: jq].\x0a ]",
  167. messageSends: ["each:", "asJQuery", "attr:", "tokenize:", "ifTrue:", ",", "=", "size", "first", "select:", "notEmpty", "second", "parse:", "allButFirst", "trapDescend:", "appendToJQuery:", "new", "at:", "current"],
  168. referencedClasses: ["Trapped", "Smalltalk"]
  169. }),
  170. smalltalk.Trapped);
  171. smalltalk.addMethod(
  172. "_parse_",
  173. smalltalk.method({
  174. selector: "parse:",
  175. category: 'accessing',
  176. fn: function (anArray){
  177. var self=this;
  178. var $2,$3,$1;
  179. $1=smalltalk.send(anArray,"_collect_",[(function(each){
  180. var asNum;
  181. asNum = parseInt(each);
  182. ;
  183. $2=smalltalk.send(asNum,"__eq",[asNum]);
  184. if(smalltalk.assert($2)){
  185. return asNum;
  186. } else {
  187. $3=smalltalk.send(smalltalk.send(each,"_first",[]),"__eq",["#"]);
  188. if(smalltalk.assert($3)){
  189. return smalltalk.send(smalltalk.send(each,"_allButFirst",[]),"_asSymbol",[]);
  190. } else {
  191. return each;
  192. };
  193. };
  194. })]);
  195. return $1;
  196. },
  197. args: ["anArray"],
  198. source: "parse: anArray\x0a\x09^anArray collect: [ :each |\x0a \x09| asNum |\x0a \x09<asNum = parseInt(each)>.\x0a asNum = asNum ifTrue: [ asNum ] ifFalse: [\x0a\x09\x09\x09each first = '#' ifTrue: [ each allButFirst asSymbol ] ifFalse: [ each ]]]",
  199. messageSends: ["collect:", "ifTrue:ifFalse:", "asSymbol", "allButFirst", "=", "first"],
  200. referencedClasses: []
  201. }),
  202. smalltalk.Trapped.klass);
  203. smalltalk.addMethod(
  204. "_path",
  205. smalltalk.method({
  206. selector: "path",
  207. category: 'accessing',
  208. fn: function (){
  209. var self=this;
  210. var $1;
  211. $1=smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_elements",[]);
  212. return $1;
  213. },
  214. args: [],
  215. source: "path\x0a\x09^TrappedPathStack current elements",
  216. messageSends: ["elements", "current"],
  217. referencedClasses: ["TrappedPathStack"]
  218. }),
  219. smalltalk.Trapped.klass);
  220. smalltalk.addClass('TrappedPathStack', smalltalk.TrappedSingleton, ['elements'], 'Trapped-Frontend');
  221. smalltalk.addMethod(
  222. "_append_",
  223. smalltalk.method({
  224. selector: "append:",
  225. category: 'descending',
  226. fn: function (anArray){
  227. var self=this;
  228. self["@elements"]=smalltalk.send(self["@elements"],"__comma",[anArray]);
  229. return self},
  230. args: ["anArray"],
  231. source: "append: anArray\x0a elements := elements, anArray",
  232. messageSends: [","],
  233. referencedClasses: []
  234. }),
  235. smalltalk.TrappedPathStack);
  236. smalltalk.addMethod(
  237. "_elements",
  238. smalltalk.method({
  239. selector: "elements",
  240. category: 'accessing',
  241. fn: function (){
  242. var self=this;
  243. return self["@elements"];
  244. },
  245. args: [],
  246. source: "elements\x0a\x09^elements",
  247. messageSends: [],
  248. referencedClasses: []
  249. }),
  250. smalltalk.TrappedPathStack);
  251. smalltalk.addMethod(
  252. "_initialize",
  253. smalltalk.method({
  254. selector: "initialize",
  255. category: 'initialization',
  256. fn: function (){
  257. var self=this;
  258. self["@elements"]=[];
  259. return self},
  260. args: [],
  261. source: "initialize\x0a\x09elements := #().",
  262. messageSends: [],
  263. referencedClasses: []
  264. }),
  265. smalltalk.TrappedPathStack);
  266. smalltalk.addMethod(
  267. "_with_do_",
  268. smalltalk.method({
  269. selector: "with:do:",
  270. category: 'descending',
  271. fn: function (anArray,aBlock){
  272. var self=this;
  273. var old;
  274. old=self["@elements"];
  275. smalltalk.send((function(){
  276. smalltalk.send(self,"_append_",[anArray]);
  277. return smalltalk.send(aBlock,"_value",[]);
  278. }),"_ensure_",[(function(){
  279. self["@elements"]=old;
  280. return self["@elements"];
  281. })]);
  282. return self},
  283. args: ["anArray", "aBlock"],
  284. source: "with: anArray do: aBlock\x0a\x09| old |\x0a old := elements.\x0a [ self append: anArray.\x0a\x09aBlock value ] ensure: [ elements := old ]",
  285. messageSends: ["ensure:", "append:", "value"],
  286. referencedClasses: []
  287. }),
  288. smalltalk.TrappedPathStack);
  289. smalltalk.addMethod(
  290. "_trapDescend_",
  291. smalltalk.method({
  292. selector: "trapDescend:",
  293. category: '*Trapped-Frontend',
  294. fn: function (aBlock){
  295. var self=this;
  296. smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_with_do_",[self,aBlock]);
  297. return self},
  298. args: ["aBlock"],
  299. source: "trapDescend: aBlock\x0a\x09TrappedPathStack current with: self do: aBlock",
  300. messageSends: ["with:do:", "current"],
  301. referencedClasses: ["TrappedPathStack"]
  302. }),
  303. smalltalk.Array);
  304. smalltalk.addMethod(
  305. "_trapDescend_",
  306. smalltalk.method({
  307. selector: "trapDescend:",
  308. category: '*Trapped-Frontend',
  309. fn: function (aBlock){
  310. var self=this;
  311. smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_with_do_",[self,aBlock]);
  312. return self},
  313. args: ["aBlock"],
  314. source: "trapDescend: aBlock\x0a\x09TrappedPathStack current with: self do: aBlock",
  315. messageSends: ["with:do:", "current"],
  316. referencedClasses: ["TrappedPathStack"]
  317. }),
  318. smalltalk.Array);
  319. smalltalk.addMethod(
  320. "_trap_read_",
  321. smalltalk.method({
  322. selector: "trap:read:",
  323. category: '*Trapped-Frontend',
  324. fn: function (path,aBlock){
  325. var self=this;
  326. smalltalk.send(path,"_trapDescend_",[(function(){
  327. var actual;
  328. var model;
  329. actual=smalltalk.send((smalltalk.Trapped || Trapped),"_path",[]);
  330. actual;
  331. model=smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_byName_",[smalltalk.send(actual,"_first",[])]);
  332. model;
  333. return smalltalk.send(model,"_watch_do_",[smalltalk.send(actual,"_allButFirst",[]),(function(data){
  334. return smalltalk.send(aBlock,"_value_value_",[self,data]);
  335. })]);
  336. })]);
  337. return self},
  338. args: ["path", "aBlock"],
  339. 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 \x09aBlock value: self value: data\x0a \x09]\x0a ]",
  340. messageSends: ["trapDescend:", "path", "byName:", "first", "current", "watch:do:", "allButFirst", "value:value:"],
  341. referencedClasses: ["Trapped"]
  342. }),
  343. smalltalk.TagBrush);
  344. smalltalk.addMethod(
  345. "_trapShow_",
  346. smalltalk.method({
  347. selector: "trapShow:",
  348. category: '*Trapped-Frontend',
  349. fn: function (path){
  350. var self=this;
  351. var $1;
  352. smalltalk.send(self,"_trap_read_",[path,(function(brush,model){
  353. smalltalk.send(brush,"_empty",[]);
  354. $1=smalltalk.send(brush,"_with_",[model]);
  355. return $1;
  356. })]);
  357. return self},
  358. args: ["path"],
  359. source: "trapShow: path\x0a\x09self trap: path read: [ :brush :model | brush empty; with: model ]",
  360. messageSends: ["trap:read:", "empty", "with:"],
  361. referencedClasses: []
  362. }),
  363. smalltalk.TagBrush);