Trapped-Frontend.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. smalltalk.addPackage('Trapped-Frontend', {});
  2. smalltalk.addClass('TrappedDispatcher', smalltalk.KeyedPubSubBase, [], 'Trapped-Frontend');
  3. smalltalk.TrappedDispatcher.comment="I am base class for change event dispatchers.\x0aI manage changed path - action block subscriptions.\x0aThese subscription are instances of TrappedSubscription\x0a\x0aMy subclasses need to provide implementation for:\x0a\x09add:\x0a do:\x0a clean\x0a (optionally) run\x0a"
  4. smalltalk.addMethod(
  5. "_subscriptionKey_block_",
  6. smalltalk.method({
  7. selector: "subscriptionKey:block:",
  8. category: 'action',
  9. fn: function (key,aBlock){
  10. var self=this;
  11. var $2,$3,$1;
  12. $2=smalltalk.send((smalltalk.TrappedSubscription || TrappedSubscription),"_new",[]);
  13. smalltalk.send($2,"_key_block_",[key,aBlock]);
  14. $3=smalltalk.send($2,"_yourself",[]);
  15. $1=$3;
  16. return $1;
  17. },
  18. args: ["key", "aBlock"],
  19. source: "subscriptionKey: key block: aBlock\x0a\x09^TrappedSubscription new key: key block: aBlock; yourself\x0a",
  20. messageSends: ["key:block:", "new", "yourself"],
  21. referencedClasses: ["TrappedSubscription"]
  22. }),
  23. smalltalk.TrappedDispatcher);
  24. smalltalk.addClass('TrappedDumbView', smalltalk.Widget, [], 'Trapped-Frontend');
  25. smalltalk.TrappedDumbView.comment="I just read and show an actual path."
  26. smalltalk.addMethod(
  27. "_renderOn_",
  28. smalltalk.method({
  29. selector: "renderOn:",
  30. category: 'rendering',
  31. fn: function (html){
  32. var self=this;
  33. smalltalk.send(smalltalk.send(html,"_root",[]),"_trapShow_",[[]]);
  34. return self},
  35. args: ["html"],
  36. source: "renderOn: html\x0a\x09html root trapShow: #()",
  37. messageSends: ["trapShow:", "root"],
  38. referencedClasses: []
  39. }),
  40. smalltalk.TrappedDumbView);
  41. smalltalk.addClass('TrappedModelWrapper', smalltalk.Object, ['dispatcher', 'payload'], 'Trapped-Frontend');
  42. smalltalk.TrappedModelWrapper.comment="I am base class for model wrappers.\x0aI wrap a model which can be any object.\x0a\x0aMy subclasses need to provide implementation for:\x0a\x09read:do:\x0a modify:do:\x0a\x09(optionally) name\x0a\x0aand must initialize:\x0a\x09payload\x0a\x09dispatcher (with a subclass of TrappedDispatcher)\x0a"
  43. smalltalk.addMethod(
  44. "_dispatcher",
  45. smalltalk.method({
  46. selector: "dispatcher",
  47. category: 'accessing',
  48. fn: function (){
  49. var self=this;
  50. return self["@dispatcher"];
  51. },
  52. args: [],
  53. source: "dispatcher\x0a\x09^dispatcher",
  54. messageSends: [],
  55. referencedClasses: []
  56. }),
  57. smalltalk.TrappedModelWrapper);
  58. smalltalk.addMethod(
  59. "_dispatcher_",
  60. smalltalk.method({
  61. selector: "dispatcher:",
  62. category: 'accessing',
  63. fn: function (aDispatcher){
  64. var self=this;
  65. self["@dispatcher"]=aDispatcher;
  66. return self},
  67. args: ["aDispatcher"],
  68. source: "dispatcher: aDispatcher\x0a\x09dispatcher := aDispatcher",
  69. messageSends: [],
  70. referencedClasses: []
  71. }),
  72. smalltalk.TrappedModelWrapper);
  73. smalltalk.addMethod(
  74. "_name",
  75. smalltalk.method({
  76. selector: "name",
  77. category: 'accessing',
  78. fn: function (){
  79. var self=this;
  80. var $1;
  81. $1=smalltalk.send(smalltalk.send(self,"_class",[]),"_name",[]);
  82. return $1;
  83. },
  84. args: [],
  85. source: "name\x0a\x09^ self class name",
  86. messageSends: ["name", "class"],
  87. referencedClasses: []
  88. }),
  89. smalltalk.TrappedModelWrapper);
  90. smalltalk.addMethod(
  91. "_payload",
  92. smalltalk.method({
  93. selector: "payload",
  94. category: 'accessing',
  95. fn: function (){
  96. var self=this;
  97. return self["@payload"];
  98. },
  99. args: [],
  100. source: "payload\x0a\x09^payload",
  101. messageSends: [],
  102. referencedClasses: []
  103. }),
  104. smalltalk.TrappedModelWrapper);
  105. smalltalk.addMethod(
  106. "_payload_",
  107. smalltalk.method({
  108. selector: "payload:",
  109. category: 'accessing',
  110. fn: function (anObject){
  111. var self=this;
  112. self["@payload"]=anObject;
  113. smalltalk.send(smalltalk.send(self,"_dispatcher",[]),"_changed_",[[]]);
  114. return self},
  115. args: ["anObject"],
  116. source: "payload: anObject\x0a\x09payload := anObject.\x0a self dispatcher changed: #()",
  117. messageSends: ["changed:", "dispatcher"],
  118. referencedClasses: []
  119. }),
  120. smalltalk.TrappedModelWrapper);
  121. smalltalk.addMethod(
  122. "_start",
  123. smalltalk.method({
  124. selector: "start",
  125. category: 'action',
  126. fn: function (){
  127. var self=this;
  128. smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_register_name_",[self,smalltalk.send(self,"_name",[])]);
  129. return self},
  130. args: [],
  131. source: "start\x0a\x09Trapped current register: self name: self name",
  132. messageSends: ["register:name:", "name", "current"],
  133. referencedClasses: ["Trapped"]
  134. }),
  135. smalltalk.TrappedModelWrapper);
  136. smalltalk.addMethod(
  137. "_watch_do_",
  138. smalltalk.method({
  139. selector: "watch:do:",
  140. category: 'action',
  141. fn: function (path,aBlock){
  142. var self=this;
  143. smalltalk.send(smalltalk.send(self,"_dispatcher",[]),"_on_hook_",[path,(function(){
  144. return smalltalk.send(self,"_read_do_",[path,aBlock]);
  145. })]);
  146. return self},
  147. args: ["path", "aBlock"],
  148. source: "watch: path do: aBlock\x0a\x09self dispatcher on: path hook: [ self read: path do: aBlock ]\x0a",
  149. messageSends: ["on:hook:", "read:do:", "dispatcher"],
  150. referencedClasses: []
  151. }),
  152. smalltalk.TrappedModelWrapper);
  153. smalltalk.addMethod(
  154. "_start",
  155. smalltalk.method({
  156. selector: "start",
  157. category: 'action',
  158. fn: function (){
  159. var self=this;
  160. var $2,$3,$1;
  161. $2=smalltalk.send(self,"_new",[]);
  162. smalltalk.send($2,"_start",[]);
  163. $3=smalltalk.send($2,"_yourself",[]);
  164. $1=$3;
  165. return $1;
  166. },
  167. args: [],
  168. source: "start\x0a\x09^self new start; yourself",
  169. messageSends: ["start", "new", "yourself"],
  170. referencedClasses: []
  171. }),
  172. smalltalk.TrappedModelWrapper.klass);
  173. smalltalk.addClass('TrappedSingleton', smalltalk.Object, [], 'Trapped-Frontend');
  174. smalltalk.addMethod(
  175. "_start",
  176. smalltalk.method({
  177. selector: "start",
  178. category: 'action',
  179. fn: function (){
  180. var self=this;
  181. var $1;
  182. $1=smalltalk.send(self,"_subclassResponsibility",[]);
  183. return $1;
  184. },
  185. args: [],
  186. source: "start\x0a\x09^ self subclassResponsibility",
  187. messageSends: ["subclassResponsibility"],
  188. referencedClasses: []
  189. }),
  190. smalltalk.TrappedSingleton);
  191. smalltalk.TrappedSingleton.klass.iVarNames = ['current'];
  192. smalltalk.addMethod(
  193. "_current",
  194. smalltalk.method({
  195. selector: "current",
  196. category: 'accessing',
  197. fn: function (){
  198. var self=this;
  199. var $1;
  200. if(($receiver = self["@current"]) == nil || $receiver == undefined){
  201. self["@current"]=smalltalk.send(self,"_new",[]);
  202. $1=self["@current"];
  203. } else {
  204. $1=self["@current"];
  205. };
  206. return $1;
  207. },
  208. args: [],
  209. source: "current\x0a\x09^ current ifNil: [ current := self new ]",
  210. messageSends: ["ifNil:", "new"],
  211. referencedClasses: []
  212. }),
  213. smalltalk.TrappedSingleton.klass);
  214. smalltalk.addMethod(
  215. "_start",
  216. smalltalk.method({
  217. selector: "start",
  218. category: 'action',
  219. fn: function (){
  220. var self=this;
  221. smalltalk.send(smalltalk.send(self,"_current",[]),"_start",[]);
  222. return self},
  223. args: [],
  224. source: "start\x0a\x09self current start",
  225. messageSends: ["start", "current"],
  226. referencedClasses: []
  227. }),
  228. smalltalk.TrappedSingleton.klass);
  229. smalltalk.addClass('Trapped', smalltalk.TrappedSingleton, ['registry'], 'Trapped-Frontend');
  230. smalltalk.addMethod(
  231. "_byName_",
  232. smalltalk.method({
  233. selector: "byName:",
  234. category: 'accessing',
  235. fn: function (aString){
  236. var self=this;
  237. var $1;
  238. $1=smalltalk.send(self["@registry"],"_at_",[aString]);
  239. return $1;
  240. },
  241. args: ["aString"],
  242. source: "byName: aString\x0a\x09^ registry at: aString",
  243. messageSends: ["at:"],
  244. referencedClasses: []
  245. }),
  246. smalltalk.Trapped);
  247. smalltalk.addMethod(
  248. "_initialize",
  249. smalltalk.method({
  250. selector: "initialize",
  251. category: 'initialization',
  252. fn: function (){
  253. var self=this;
  254. smalltalk.send(self,"_initialize",[],smalltalk.TrappedSingleton);
  255. self["@registry"]=smalltalk.HashedCollection._fromPairs_([]);
  256. return self},
  257. args: [],
  258. source: "initialize\x0a\x09super initialize.\x0a\x09registry := #{}.",
  259. messageSends: ["initialize"],
  260. referencedClasses: []
  261. }),
  262. smalltalk.Trapped);
  263. smalltalk.addMethod(
  264. "_register_name_",
  265. smalltalk.method({
  266. selector: "register:name:",
  267. category: 'accessing',
  268. fn: function (aFly,aString){
  269. var self=this;
  270. smalltalk.send(self["@registry"],"_at_put_",[aString,aFly]);
  271. return self},
  272. args: ["aFly", "aString"],
  273. source: "register: aFly name: aString\x0a\x09registry at: aString put: aFly",
  274. messageSends: ["at:put:"],
  275. referencedClasses: []
  276. }),
  277. smalltalk.Trapped);
  278. smalltalk.addMethod(
  279. "_start",
  280. smalltalk.method({
  281. selector: "start",
  282. category: 'action',
  283. fn: function (){
  284. var self=this;
  285. var $1;
  286. smalltalk.send(smalltalk.send("[data-trap]","_asJQuery",[]),"_each_",[(function(index,elem){
  287. var trap;
  288. var jq;
  289. var viewName;
  290. var modelName;
  291. var tokens;
  292. var path;
  293. jq=smalltalk.send(elem,"_asJQuery",[]);
  294. jq;
  295. trap=smalltalk.send(jq,"_attr_",["data-trap"]);
  296. trap;
  297. tokens=smalltalk.send(trap,"_tokenize_",[":"]);
  298. tokens;
  299. $1=smalltalk.send(smalltalk.send(tokens,"_size",[]),"__eq",[(1)]);
  300. if(smalltalk.assert($1)){
  301. tokens=smalltalk.send(["TrappedDumbView"],"__comma",[tokens]);
  302. tokens;
  303. };
  304. viewName=smalltalk.send(tokens,"_first",[]);
  305. viewName;
  306. tokens=smalltalk.send(smalltalk.send(smalltalk.send(tokens,"_second",[]),"_tokenize_",[" "]),"_select_",[(function(each){
  307. return smalltalk.send(each,"_notEmpty",[]);
  308. })]);
  309. tokens;
  310. modelName=smalltalk.send(tokens,"_first",[]);
  311. modelName;
  312. path=smalltalk.send((smalltalk.Trapped || Trapped),"_parse_",[smalltalk.send(tokens,"_allButFirst",[])]);
  313. path;
  314. return smalltalk.send(smalltalk.send([modelName],"__comma",[path]),"_trapDescend_",[(function(){
  315. return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send((smalltalk.Smalltalk || Smalltalk),"_current",[]),"_at_",[viewName]),"_new",[]),"_appendToJQuery_",[jq]);
  316. })]);
  317. })]);
  318. return self},
  319. args: [],
  320. 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 ]",
  321. messageSends: ["each:", "asJQuery", "attr:", "tokenize:", "ifTrue:", ",", "=", "size", "first", "select:", "notEmpty", "second", "parse:", "allButFirst", "trapDescend:", "appendToJQuery:", "new", "at:", "current"],
  322. referencedClasses: ["Trapped", "Smalltalk"]
  323. }),
  324. smalltalk.Trapped);
  325. smalltalk.addMethod(
  326. "_parse_",
  327. smalltalk.method({
  328. selector: "parse:",
  329. category: 'accessing',
  330. fn: function (anArray){
  331. var self=this;
  332. var $2,$3,$1;
  333. $1=smalltalk.send(anArray,"_collect_",[(function(each){
  334. var asNum;
  335. asNum = parseInt(each);
  336. ;
  337. $2=smalltalk.send(asNum,"__eq",[asNum]);
  338. if(smalltalk.assert($2)){
  339. return asNum;
  340. } else {
  341. $3=smalltalk.send(smalltalk.send(each,"_first",[]),"__eq",["#"]);
  342. if(smalltalk.assert($3)){
  343. return smalltalk.send(smalltalk.send(each,"_allButFirst",[]),"_asSymbol",[]);
  344. } else {
  345. return each;
  346. };
  347. };
  348. })]);
  349. return $1;
  350. },
  351. args: ["anArray"],
  352. 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 ]]]",
  353. messageSends: ["collect:", "ifTrue:ifFalse:", "asSymbol", "allButFirst", "=", "first"],
  354. referencedClasses: []
  355. }),
  356. smalltalk.Trapped.klass);
  357. smalltalk.addMethod(
  358. "_path",
  359. smalltalk.method({
  360. selector: "path",
  361. category: 'accessing',
  362. fn: function (){
  363. var self=this;
  364. var $1;
  365. $1=smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_elements",[]);
  366. return $1;
  367. },
  368. args: [],
  369. source: "path\x0a\x09^TrappedPathStack current elements",
  370. messageSends: ["elements", "current"],
  371. referencedClasses: ["TrappedPathStack"]
  372. }),
  373. smalltalk.Trapped.klass);
  374. smalltalk.addClass('TrappedPathStack', smalltalk.TrappedSingleton, ['elements'], 'Trapped-Frontend');
  375. smalltalk.addMethod(
  376. "_append_",
  377. smalltalk.method({
  378. selector: "append:",
  379. category: 'descending',
  380. fn: function (anArray){
  381. var self=this;
  382. self["@elements"]=smalltalk.send(self["@elements"],"__comma",[anArray]);
  383. return self},
  384. args: ["anArray"],
  385. source: "append: anArray\x0a elements := elements, anArray",
  386. messageSends: [","],
  387. referencedClasses: []
  388. }),
  389. smalltalk.TrappedPathStack);
  390. smalltalk.addMethod(
  391. "_elements",
  392. smalltalk.method({
  393. selector: "elements",
  394. category: 'accessing',
  395. fn: function (){
  396. var self=this;
  397. return self["@elements"];
  398. },
  399. args: [],
  400. source: "elements\x0a\x09^elements",
  401. messageSends: [],
  402. referencedClasses: []
  403. }),
  404. smalltalk.TrappedPathStack);
  405. smalltalk.addMethod(
  406. "_initialize",
  407. smalltalk.method({
  408. selector: "initialize",
  409. category: 'initialization',
  410. fn: function (){
  411. var self=this;
  412. smalltalk.send(self,"_initialize",[],smalltalk.TrappedSingleton);
  413. self["@elements"]=[];
  414. return self},
  415. args: [],
  416. source: "initialize\x0a super initialize.\x0a\x09elements := #().",
  417. messageSends: ["initialize"],
  418. referencedClasses: []
  419. }),
  420. smalltalk.TrappedPathStack);
  421. smalltalk.addMethod(
  422. "_with_do_",
  423. smalltalk.method({
  424. selector: "with:do:",
  425. category: 'descending',
  426. fn: function (anArray,aBlock){
  427. var self=this;
  428. var old;
  429. old=self["@elements"];
  430. smalltalk.send((function(){
  431. smalltalk.send(self,"_append_",[anArray]);
  432. return smalltalk.send(aBlock,"_value",[]);
  433. }),"_ensure_",[(function(){
  434. self["@elements"]=old;
  435. return self["@elements"];
  436. })]);
  437. return self},
  438. args: ["anArray", "aBlock"],
  439. source: "with: anArray do: aBlock\x0a\x09| old |\x0a old := elements.\x0a [ self append: anArray.\x0a\x09aBlock value ] ensure: [ elements := old ]",
  440. messageSends: ["ensure:", "append:", "value"],
  441. referencedClasses: []
  442. }),
  443. smalltalk.TrappedPathStack);
  444. smalltalk.addClass('TrappedSubscription', smalltalk.KeyedSubscriptionBase, [], 'Trapped-Frontend');
  445. smalltalk.addMethod(
  446. "_accepts_",
  447. smalltalk.method({
  448. selector: "accepts:",
  449. category: 'testing',
  450. fn: function (aKey){
  451. var self=this;
  452. var $1;
  453. $1=smalltalk.send(smalltalk.send(smalltalk.send(aKey,"_size",[]),"__lt_eq",[smalltalk.send(self["@key"],"_size",[])]),"_and_",[(function(){
  454. return smalltalk.send(aKey,"__eq",[smalltalk.send(self["@key"],"_copyFrom_to_",[(1),smalltalk.send(aKey,"_size",[])])]);
  455. })]);
  456. return $1;
  457. },
  458. args: ["aKey"],
  459. source: "accepts: aKey\x0a ^aKey size <= key size and: [aKey = (key copyFrom: 1 to: aKey size)]",
  460. messageSends: ["and:", "=", "copyFrom:to:", "size", "<="],
  461. referencedClasses: []
  462. }),
  463. smalltalk.TrappedSubscription);
  464. smalltalk.addMethod(
  465. "_trapDescend_",
  466. smalltalk.method({
  467. selector: "trapDescend:",
  468. category: '*Trapped-Frontend',
  469. fn: function (aBlock){
  470. var self=this;
  471. smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_with_do_",[self,aBlock]);
  472. return self},
  473. args: ["aBlock"],
  474. source: "trapDescend: aBlock\x0a\x09TrappedPathStack current with: self do: aBlock",
  475. messageSends: ["with:do:", "current"],
  476. referencedClasses: ["TrappedPathStack"]
  477. }),
  478. smalltalk.Array);
  479. smalltalk.addMethod(
  480. "_trapDescend_",
  481. smalltalk.method({
  482. selector: "trapDescend:",
  483. category: '*Trapped-Frontend',
  484. fn: function (aBlock){
  485. var self=this;
  486. smalltalk.send(smalltalk.send((smalltalk.TrappedPathStack || TrappedPathStack),"_current",[]),"_with_do_",[self,aBlock]);
  487. return self},
  488. args: ["aBlock"],
  489. source: "trapDescend: aBlock\x0a\x09TrappedPathStack current with: self do: aBlock",
  490. messageSends: ["with:do:", "current"],
  491. referencedClasses: ["TrappedPathStack"]
  492. }),
  493. smalltalk.Array);
  494. smalltalk.addMethod(
  495. "_trap_read_",
  496. smalltalk.method({
  497. selector: "trap:read:",
  498. category: '*Trapped-Frontend',
  499. fn: function (path,aBlock){
  500. var self=this;
  501. var $1;
  502. smalltalk.send(path,"_trapDescend_",[(function(){
  503. var actual;
  504. var model;
  505. actual=smalltalk.send((smalltalk.Trapped || Trapped),"_path",[]);
  506. actual;
  507. model=smalltalk.send(smalltalk.send((smalltalk.Trapped || Trapped),"_current",[]),"_byName_",[smalltalk.send(actual,"_first",[])]);
  508. model;
  509. return smalltalk.send(model,"_watch_do_",[smalltalk.send(actual,"_allButFirst",[]),(function(data){
  510. $1=smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self,"_asJQuery",[]),"_closest_",["html"]),"_toArray",[]),"_isEmpty",[]);
  511. if(smalltalk.assert($1)){
  512. smalltalk.send((smalltalk.KeyedPubSubUnsubscribe || KeyedPubSubUnsubscribe),"_signal",[]);
  513. };
  514. return smalltalk.send(actual,"_trapDescend_",[(function(){
  515. return smalltalk.send(self,"_with_",[(function(html){
  516. return smalltalk.send(aBlock,"_value_value_",[data,html]);
  517. })]);
  518. })]);
  519. })]);
  520. })]);
  521. return self},
  522. args: ["path", "aBlock"],
  523. 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 ]",
  524. messageSends: ["trapDescend:", "path", "byName:", "first", "current", "watch:do:", "allButFirst", "ifTrue:", "signal", "isEmpty", "toArray", "closest:", "asJQuery", "with:", "value:value:"],
  525. referencedClasses: ["Trapped", "KeyedPubSubUnsubscribe"]
  526. }),
  527. smalltalk.TagBrush);
  528. smalltalk.addMethod(
  529. "_trap_toggle_",
  530. smalltalk.method({
  531. selector: "trap:toggle:",
  532. category: '*Trapped-Frontend',
  533. fn: function (path,aBlock){
  534. var self=this;
  535. smalltalk.send(self,"_trap_toggle_ifNotPresent_",[path,aBlock,(function(){
  536. return smalltalk.send(smalltalk.send(self,"_asJQuery",[]),"_hide",[]);
  537. })]);
  538. return self},
  539. args: ["path", "aBlock"],
  540. source: "trap: path toggle: aBlock\x0a self trap: path toggle: aBlock ifNotPresent: [ self asJQuery hide ]",
  541. messageSends: ["trap:toggle:ifNotPresent:", "hide", "asJQuery"],
  542. referencedClasses: []
  543. }),
  544. smalltalk.TagBrush);
  545. smalltalk.addMethod(
  546. "_trap_toggle_ifNotPresent_",
  547. smalltalk.method({
  548. selector: "trap:toggle:ifNotPresent:",
  549. category: '*Trapped-Frontend',
  550. fn: function (path,aBlock,anotherBlock){
  551. var self=this;
  552. var $1,$2,$3,$4;
  553. var shown;
  554. shown=nil;
  555. smalltalk.send(self,"_trap_read_",[path,(function(data,html){
  556. $1=smalltalk.send(shown,"__eq",[smalltalk.send(data,"_notNil",[])]);
  557. if(! smalltalk.assert($1)){
  558. shown=smalltalk.send(data,"_notNil",[]);
  559. shown;
  560. $2=smalltalk.send(self,"_asJQuery",[]);
  561. smalltalk.send($2,"_empty",[]);
  562. $3=smalltalk.send($2,"_show",[]);
  563. $3;
  564. if(smalltalk.assert(shown)){
  565. $4=aBlock;
  566. } else {
  567. $4=anotherBlock;
  568. };
  569. return smalltalk.send($4,"_value_value_",[data,html]);
  570. };
  571. })]);
  572. return self},
  573. args: ["path", "aBlock", "anotherBlock"],
  574. source: "trap: path toggle: aBlock ifNotPresent: anotherBlock\x0a | shown |\x0a shown := nil.\x0a self trap: path read: [ :data : html |\x0a shown = data notNil ifFalse: [\x0a shown := data notNil.\x0a self asJQuery empty; show.\x0a (shown ifTrue: [aBlock] ifFalse: [anotherBlock]) value: data value: html.\x0a ]\x0a ]",
  575. messageSends: ["trap:read:", "ifFalse:", "notNil", "empty", "asJQuery", "show", "value:value:", "ifTrue:ifFalse:", "="],
  576. referencedClasses: []
  577. }),
  578. smalltalk.TagBrush);
  579. smalltalk.addMethod(
  580. "_trapIter_tag_do_",
  581. smalltalk.method({
  582. selector: "trapIter:tag:do:",
  583. category: '*Trapped-Frontend',
  584. fn: function (path,aSymbol,aBlock){
  585. var self=this;
  586. smalltalk.send(self,"_trap_read_",[path,(function(model,html){
  587. smalltalk.send(smalltalk.send(html,"_root",[]),"_empty",[]);
  588. if(($receiver = model) == nil || $receiver == undefined){
  589. return model;
  590. } else {
  591. return smalltalk.send(model,"_withIndexDo_",[(function(item,i){
  592. return smalltalk.send(smalltalk.send(html,"_perform_",[aSymbol]),"_trap_read_",[[i],aBlock]);
  593. })]);
  594. };
  595. })]);
  596. return self},
  597. args: ["path", "aSymbol", "aBlock"],
  598. source: "trapIter: path tag: aSymbol do: aBlock\x0a self trap: path read: [ :model :html |\x0a html root empty.\x0a model ifNotNil: [ model withIndexDo: [ :item :i |\x0a (html perform: aSymbol) trap: {i} read: aBlock\x0a ]]\x0a ]",
  599. messageSends: ["trap:read:", "empty", "root", "ifNotNil:", "withIndexDo:", "perform:"],
  600. referencedClasses: []
  601. }),
  602. smalltalk.TagBrush);
  603. smalltalk.addMethod(
  604. "_trapShow_",
  605. smalltalk.method({
  606. selector: "trapShow:",
  607. category: '*Trapped-Frontend',
  608. fn: function (path){
  609. var self=this;
  610. smalltalk.send(self,"_trapShow_default_",[path,(function(){
  611. })]);
  612. return self},
  613. args: ["path"],
  614. source: "trapShow: path\x0a\x09self trapShow: path default: []",
  615. messageSends: ["trapShow:default:"],
  616. referencedClasses: []
  617. }),
  618. smalltalk.TagBrush);
  619. smalltalk.addMethod(
  620. "_trapShow_default_",
  621. smalltalk.method({
  622. selector: "trapShow:default:",
  623. category: '*Trapped-Frontend',
  624. fn: function (path,anObject){
  625. var self=this;
  626. var $2,$1;
  627. smalltalk.send(self,"_trap_read_",[path,(function(model){
  628. smalltalk.send(self,"_empty",[]);
  629. if(($receiver = model) == nil || $receiver == undefined){
  630. $2=anObject;
  631. } else {
  632. $2=model;
  633. };
  634. $1=smalltalk.send(self,"_with_",[$2]);
  635. return $1;
  636. })]);
  637. return self},
  638. args: ["path", "anObject"],
  639. source: "trapShow: path default: anObject\x0a\x09self trap: path read: [ :model | self empty; with: (model ifNil: [anObject]) ]",
  640. messageSends: ["trap:read:", "empty", "with:", "ifNil:"],
  641. referencedClasses: []
  642. }),
  643. smalltalk.TagBrush);