Axon.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. define("axon/Axon", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Exceptions"], function($boot){"use strict";
  2. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. $core.addPackage('Axon');
  4. $core.packages["Axon"].innerEval = function (expr) { return eval(expr); };
  5. $core.packages["Axon"].transport = {"type":"amd","amdNamespace":"axon"};
  6. $core.addClass('Axon', $globals.Object, ['factory'], 'Axon');
  7. //>>excludeStart("ide", pragmas.excludeIdeData);
  8. $globals.Axon.comment="I represent a pub-sub based on a key (called 'aspect').\x0aI manage aspect-block subscriptions (called 'interests') as well as run blocks of dirtied interests.\x0aThe interest objects are responsible of decision if the change of an aspect is relevant for them.\x0aInterest object must be subclasses of `AxonInterest`.\x0a\x0aMy subclasses must provide implementation for:\x0a\x0a - add:\x0a - do:\x0a - clean";
  9. //>>excludeEnd("ide");
  10. $core.addMethod(
  11. $core.method({
  12. selector: "addInterest:",
  13. protocol: 'action',
  14. fn: function (anInterest){
  15. var self=this;
  16. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17. return $core.withContext(function($ctx1) {
  18. //>>excludeEnd("ctx");
  19. var $1,$2;
  20. $recv(anInterest)._flag();
  21. $1=$recv(anInterest)._yourself();
  22. self._add_($1);
  23. $2=self._dirty_(true);
  24. return self;
  25. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26. }, function($ctx1) {$ctx1.fill(self,"addInterest:",{anInterest:anInterest},$globals.Axon)});
  27. //>>excludeEnd("ctx");
  28. },
  29. //>>excludeStart("ide", pragmas.excludeIdeData);
  30. args: ["anInterest"],
  31. source: "addInterest: anInterest\x0a\x09self\x0a\x09\x09add: (anInterest flag; yourself);\x0a\x09\x09dirty: true",
  32. referencedClasses: [],
  33. //>>excludeEnd("ide");
  34. messageSends: ["add:", "flag", "yourself", "dirty:"]
  35. }),
  36. $globals.Axon);
  37. $core.addMethod(
  38. $core.method({
  39. selector: "changed:",
  40. protocol: 'action',
  41. fn: function (anAspect){
  42. var self=this;
  43. var needsToRun;
  44. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45. return $core.withContext(function($ctx1) {
  46. //>>excludeEnd("ctx");
  47. var $1;
  48. needsToRun=false;
  49. self._do_((function(each){
  50. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  51. return $core.withContext(function($ctx2) {
  52. //>>excludeEnd("ctx");
  53. $1=$recv(each)._accepts_(anAspect);
  54. if($core.assert($1)){
  55. $recv(each)._flag();
  56. needsToRun=true;
  57. return needsToRun;
  58. };
  59. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  61. //>>excludeEnd("ctx");
  62. }));
  63. self._dirty_(needsToRun);
  64. return self;
  65. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66. }, function($ctx1) {$ctx1.fill(self,"changed:",{anAspect:anAspect,needsToRun:needsToRun},$globals.Axon)});
  67. //>>excludeEnd("ctx");
  68. },
  69. //>>excludeStart("ide", pragmas.excludeIdeData);
  70. args: ["anAspect"],
  71. source: "changed: anAspect\x0a\x09| needsToRun |\x0a\x09needsToRun := false.\x0a\x09self do: [ :each |\x0a\x09\x09(each accepts: anAspect) ifTrue: [\x0a\x09\x09\x09each flag.\x0a\x09\x09\x09needsToRun := true ]].\x0a\x09self dirty: needsToRun",
  72. referencedClasses: [],
  73. //>>excludeEnd("ide");
  74. messageSends: ["do:", "ifTrue:", "accepts:", "flag", "dirty:"]
  75. }),
  76. $globals.Axon);
  77. $core.addMethod(
  78. $core.method({
  79. selector: "changedAll",
  80. protocol: 'action',
  81. fn: function (){
  82. var self=this;
  83. var needsToRun;
  84. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  85. return $core.withContext(function($ctx1) {
  86. //>>excludeEnd("ctx");
  87. needsToRun=false;
  88. self._do_((function(each){
  89. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  90. return $core.withContext(function($ctx2) {
  91. //>>excludeEnd("ctx");
  92. $recv(each)._flag();
  93. needsToRun=true;
  94. return needsToRun;
  95. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  96. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  97. //>>excludeEnd("ctx");
  98. }));
  99. self._dirty_(needsToRun);
  100. return self;
  101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  102. }, function($ctx1) {$ctx1.fill(self,"changedAll",{needsToRun:needsToRun},$globals.Axon)});
  103. //>>excludeEnd("ctx");
  104. },
  105. //>>excludeStart("ide", pragmas.excludeIdeData);
  106. args: [],
  107. source: "changedAll\x0a\x09| needsToRun |\x0a\x09needsToRun := false.\x0a\x09self do: [ :each |\x0a\x09\x09each flag.\x0a\x09\x09needsToRun := true ].\x0a\x09self dirty: needsToRun",
  108. referencedClasses: [],
  109. //>>excludeEnd("ide");
  110. messageSends: ["do:", "flag", "dirty:"]
  111. }),
  112. $globals.Axon);
  113. $core.addMethod(
  114. $core.method({
  115. selector: "dirty:",
  116. protocol: 'action',
  117. fn: function (aBoolean){
  118. var self=this;
  119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  120. return $core.withContext(function($ctx1) {
  121. //>>excludeEnd("ctx");
  122. if($core.assert(aBoolean)){
  123. $recv((function(){
  124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  125. return $core.withContext(function($ctx2) {
  126. //>>excludeEnd("ctx");
  127. return self._run();
  128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  129. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  130. //>>excludeEnd("ctx");
  131. }))._fork();
  132. };
  133. return self;
  134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  135. }, function($ctx1) {$ctx1.fill(self,"dirty:",{aBoolean:aBoolean},$globals.Axon)});
  136. //>>excludeEnd("ctx");
  137. },
  138. //>>excludeStart("ide", pragmas.excludeIdeData);
  139. args: ["aBoolean"],
  140. source: "dirty: aBoolean\x0a\x09aBoolean ifTrue: [[ self run ] fork]",
  141. referencedClasses: [],
  142. //>>excludeEnd("ide");
  143. messageSends: ["ifTrue:", "fork", "run"]
  144. }),
  145. $globals.Axon);
  146. $core.addMethod(
  147. $core.method({
  148. selector: "run",
  149. protocol: 'action',
  150. fn: function (){
  151. var self=this;
  152. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  154. return $core.withContext(function($ctx1) {
  155. //>>excludeEnd("ctx");
  156. var $1,$2,$3;
  157. $recv((function(){
  158. var needsClean;
  159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  160. return $core.withContext(function($ctx2) {
  161. //>>excludeEnd("ctx");
  162. needsClean=false;
  163. needsClean;
  164. self._do_((function(each){
  165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  166. return $core.withContext(function($ctx3) {
  167. //>>excludeEnd("ctx");
  168. $1=$recv(each)._isFlagged();
  169. if($core.assert($1)){
  170. $recv(each)._run();
  171. };
  172. $2=$recv(each)._isEnabled();
  173. if(!$core.assert($2)){
  174. needsClean=true;
  175. return needsClean;
  176. };
  177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  178. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  179. //>>excludeEnd("ctx");
  180. }));
  181. $3=needsClean;
  182. if($core.assert($3)){
  183. return self._clean();
  184. };
  185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  186. }, function($ctx2) {$ctx2.fillBlock({needsClean:needsClean},$ctx1,1)});
  187. //>>excludeEnd("ctx");
  188. }))._on_do_($Error(),(function(){
  189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  190. return $core.withContext(function($ctx2) {
  191. //>>excludeEnd("ctx");
  192. return self._dirty_(true);
  193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  194. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  195. //>>excludeEnd("ctx");
  196. }));
  197. return self;
  198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  199. }, function($ctx1) {$ctx1.fill(self,"run",{},$globals.Axon)});
  200. //>>excludeEnd("ctx");
  201. },
  202. //>>excludeStart("ide", pragmas.excludeIdeData);
  203. args: [],
  204. source: "run\x0a\x09[\x0a\x09\x09| needsClean |\x0a\x09 needsClean := false.\x0a\x09\x09self do: [ :each |\x0a\x09\x09\x09each isFlagged ifTrue: [ each run ].\x0a\x09 each isEnabled ifFalse: [ needsClean := true ]\x0a\x09\x09].\x0a \x09needsClean ifTrue: [ self clean ]\x0a\x09] on: Error do: [ self dirty: true ]",
  205. referencedClasses: ["Error"],
  206. //>>excludeEnd("ide");
  207. messageSends: ["on:do:", "do:", "ifTrue:", "isFlagged", "run", "ifFalse:", "isEnabled", "clean", "dirty:"]
  208. }),
  209. $globals.Axon);
  210. $core.addClass('SimpleAxon', $globals.Axon, ['queue'], 'Axon');
  211. $core.addMethod(
  212. $core.method({
  213. selector: "add:",
  214. protocol: 'accessing',
  215. fn: function (aSubscription){
  216. var self=this;
  217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  218. return $core.withContext(function($ctx1) {
  219. //>>excludeEnd("ctx");
  220. $recv(self["@queue"])._add_(aSubscription);
  221. return self;
  222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  223. }, function($ctx1) {$ctx1.fill(self,"add:",{aSubscription:aSubscription},$globals.SimpleAxon)});
  224. //>>excludeEnd("ctx");
  225. },
  226. //>>excludeStart("ide", pragmas.excludeIdeData);
  227. args: ["aSubscription"],
  228. source: "add: aSubscription\x0a\x09queue add: aSubscription.",
  229. referencedClasses: [],
  230. //>>excludeEnd("ide");
  231. messageSends: ["add:"]
  232. }),
  233. $globals.SimpleAxon);
  234. $core.addMethod(
  235. $core.method({
  236. selector: "clean",
  237. protocol: 'bookkeeping',
  238. fn: function (){
  239. var self=this;
  240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  241. return $core.withContext(function($ctx1) {
  242. //>>excludeEnd("ctx");
  243. self["@queue"]=$recv(self["@queue"])._select_((function(each){
  244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  245. return $core.withContext(function($ctx2) {
  246. //>>excludeEnd("ctx");
  247. return $recv(each)._isEnabled();
  248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  249. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  250. //>>excludeEnd("ctx");
  251. }));
  252. return self;
  253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  254. }, function($ctx1) {$ctx1.fill(self,"clean",{},$globals.SimpleAxon)});
  255. //>>excludeEnd("ctx");
  256. },
  257. //>>excludeStart("ide", pragmas.excludeIdeData);
  258. args: [],
  259. source: "clean\x0a\x09queue := queue select: [ :each | each isEnabled ]",
  260. referencedClasses: [],
  261. //>>excludeEnd("ide");
  262. messageSends: ["select:", "isEnabled"]
  263. }),
  264. $globals.SimpleAxon);
  265. $core.addMethod(
  266. $core.method({
  267. selector: "do:",
  268. protocol: 'enumeration',
  269. fn: function (aBlock){
  270. var self=this;
  271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  272. return $core.withContext(function($ctx1) {
  273. //>>excludeEnd("ctx");
  274. $recv(self["@queue"])._do_(aBlock);
  275. return self;
  276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  277. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.SimpleAxon)});
  278. //>>excludeEnd("ctx");
  279. },
  280. //>>excludeStart("ide", pragmas.excludeIdeData);
  281. args: ["aBlock"],
  282. source: "do: aBlock\x0a\x09queue do: aBlock",
  283. referencedClasses: [],
  284. //>>excludeEnd("ide");
  285. messageSends: ["do:"]
  286. }),
  287. $globals.SimpleAxon);
  288. $core.addMethod(
  289. $core.method({
  290. selector: "initialize",
  291. protocol: 'initialization',
  292. fn: function (){
  293. var self=this;
  294. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  296. return $core.withContext(function($ctx1) {
  297. //>>excludeEnd("ctx");
  298. (
  299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  300. $ctx1.supercall = true,
  301. //>>excludeEnd("ctx");
  302. $globals.SimpleAxon.superclass.fn.prototype._initialize.apply($recv(self), []));
  303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  304. $ctx1.supercall = false;
  305. //>>excludeEnd("ctx");;
  306. self["@queue"]=$recv($OrderedCollection())._new();
  307. return self;
  308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  309. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.SimpleAxon)});
  310. //>>excludeEnd("ctx");
  311. },
  312. //>>excludeStart("ide", pragmas.excludeIdeData);
  313. args: [],
  314. source: "initialize\x0a super initialize.\x0a\x09queue := OrderedCollection new",
  315. referencedClasses: ["OrderedCollection"],
  316. //>>excludeEnd("ide");
  317. messageSends: ["initialize", "new"]
  318. }),
  319. $globals.SimpleAxon);
  320. $core.addClass('AxonInterest', $globals.Object, ['aspect', 'actionBlock', 'flagged'], 'Axon');
  321. $core.addMethod(
  322. $core.method({
  323. selector: "accepts:",
  324. protocol: 'testing',
  325. fn: function (anAspect){
  326. var self=this;
  327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  328. return $core.withContext(function($ctx1) {
  329. //>>excludeEnd("ctx");
  330. self._subclassResponsibility();
  331. return self;
  332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  333. }, function($ctx1) {$ctx1.fill(self,"accepts:",{anAspect:anAspect},$globals.AxonInterest)});
  334. //>>excludeEnd("ctx");
  335. },
  336. //>>excludeStart("ide", pragmas.excludeIdeData);
  337. args: ["anAspect"],
  338. source: "accepts: anAspect\x0a \x22Should return true if change for anAspect is relevant for this AxonInterest\x22\x0a self subclassResponsibility",
  339. referencedClasses: [],
  340. //>>excludeEnd("ide");
  341. messageSends: ["subclassResponsibility"]
  342. }),
  343. $globals.AxonInterest);
  344. $core.addMethod(
  345. $core.method({
  346. selector: "aspect:block:",
  347. protocol: 'accessing',
  348. fn: function (anAspect,aBlock){
  349. var self=this;
  350. self["@aspect"]=anAspect;
  351. self["@actionBlock"]=aBlock;
  352. return self;
  353. },
  354. //>>excludeStart("ide", pragmas.excludeIdeData);
  355. args: ["anAspect", "aBlock"],
  356. source: "aspect: anAspect block: aBlock\x0a\x09aspect := anAspect.\x0a actionBlock := aBlock",
  357. referencedClasses: [],
  358. //>>excludeEnd("ide");
  359. messageSends: []
  360. }),
  361. $globals.AxonInterest);
  362. $core.addMethod(
  363. $core.method({
  364. selector: "flag",
  365. protocol: 'accessing',
  366. fn: function (){
  367. var self=this;
  368. self["@flagged"]=true;
  369. return self;
  370. },
  371. //>>excludeStart("ide", pragmas.excludeIdeData);
  372. args: [],
  373. source: "flag\x0a\x09flagged := true",
  374. referencedClasses: [],
  375. //>>excludeEnd("ide");
  376. messageSends: []
  377. }),
  378. $globals.AxonInterest);
  379. $core.addMethod(
  380. $core.method({
  381. selector: "initialize",
  382. protocol: 'initialization',
  383. fn: function (){
  384. var self=this;
  385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  386. return $core.withContext(function($ctx1) {
  387. //>>excludeEnd("ctx");
  388. (
  389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  390. $ctx1.supercall = true,
  391. //>>excludeEnd("ctx");
  392. $globals.AxonInterest.superclass.fn.prototype._initialize.apply($recv(self), []));
  393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  394. $ctx1.supercall = false;
  395. //>>excludeEnd("ctx");;
  396. self["@aspect"]=nil;
  397. self["@actionBlock"]=nil;
  398. self["@flagged"]=false;
  399. return self;
  400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  401. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.AxonInterest)});
  402. //>>excludeEnd("ctx");
  403. },
  404. //>>excludeStart("ide", pragmas.excludeIdeData);
  405. args: [],
  406. source: "initialize\x0a\x09super initialize.\x0a aspect := nil.\x0a actionBlock := nil.\x0a flagged := false.",
  407. referencedClasses: [],
  408. //>>excludeEnd("ide");
  409. messageSends: ["initialize"]
  410. }),
  411. $globals.AxonInterest);
  412. $core.addMethod(
  413. $core.method({
  414. selector: "isEnabled",
  415. protocol: 'testing',
  416. fn: function (){
  417. var self=this;
  418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  419. return $core.withContext(function($ctx1) {
  420. //>>excludeEnd("ctx");
  421. var $1;
  422. $1=$recv(self["@actionBlock"])._notNil();
  423. return $1;
  424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  425. }, function($ctx1) {$ctx1.fill(self,"isEnabled",{},$globals.AxonInterest)});
  426. //>>excludeEnd("ctx");
  427. },
  428. //>>excludeStart("ide", pragmas.excludeIdeData);
  429. args: [],
  430. source: "isEnabled\x0a\x09^actionBlock notNil",
  431. referencedClasses: [],
  432. //>>excludeEnd("ide");
  433. messageSends: ["notNil"]
  434. }),
  435. $globals.AxonInterest);
  436. $core.addMethod(
  437. $core.method({
  438. selector: "isFlagged",
  439. protocol: 'testing',
  440. fn: function (){
  441. var self=this;
  442. var $1;
  443. $1=self["@flagged"];
  444. return $1;
  445. },
  446. //>>excludeStart("ide", pragmas.excludeIdeData);
  447. args: [],
  448. source: "isFlagged\x0a\x09^flagged",
  449. referencedClasses: [],
  450. //>>excludeEnd("ide");
  451. messageSends: []
  452. }),
  453. $globals.AxonInterest);
  454. $core.addMethod(
  455. $core.method({
  456. selector: "run",
  457. protocol: 'action',
  458. fn: function (){
  459. var self=this;
  460. function $AxonOff(){return $globals.AxonOff||(typeof AxonOff=="undefined"?nil:AxonOff)}
  461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  462. return $core.withContext(function($ctx1) {
  463. //>>excludeEnd("ctx");
  464. $recv((function(){
  465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  466. return $core.withContext(function($ctx2) {
  467. //>>excludeEnd("ctx");
  468. self["@flagged"]=false;
  469. self["@flagged"];
  470. return $recv(self["@actionBlock"])._value();
  471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  472. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  473. //>>excludeEnd("ctx");
  474. }))._on_do_($AxonOff(),(function(){
  475. self["@actionBlock"]=nil;
  476. return self["@actionBlock"];
  477. }));
  478. return self;
  479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  480. }, function($ctx1) {$ctx1.fill(self,"run",{},$globals.AxonInterest)});
  481. //>>excludeEnd("ctx");
  482. },
  483. //>>excludeStart("ide", pragmas.excludeIdeData);
  484. args: [],
  485. source: "run\x0a\x09[ flagged := false. actionBlock value ]\x0a on: AxonOff do: [ actionBlock := nil ]",
  486. referencedClasses: ["AxonOff"],
  487. //>>excludeEnd("ide");
  488. messageSends: ["on:do:", "value"]
  489. }),
  490. $globals.AxonInterest);
  491. $core.addClass('InterestedInEqual', $globals.AxonInterest, [], 'Axon');
  492. $core.addMethod(
  493. $core.method({
  494. selector: "accepts:",
  495. protocol: 'testing',
  496. fn: function (anAspect){
  497. var self=this;
  498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  499. return $core.withContext(function($ctx1) {
  500. //>>excludeEnd("ctx");
  501. var $1;
  502. $1=$recv(anAspect).__eq(self["@aspect"]);
  503. return $1;
  504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  505. }, function($ctx1) {$ctx1.fill(self,"accepts:",{anAspect:anAspect},$globals.InterestedInEqual)});
  506. //>>excludeEnd("ctx");
  507. },
  508. //>>excludeStart("ide", pragmas.excludeIdeData);
  509. args: ["anAspect"],
  510. source: "accepts: anAspect\x0a ^ anAspect = aspect",
  511. referencedClasses: [],
  512. //>>excludeEnd("ide");
  513. messageSends: ["="]
  514. }),
  515. $globals.InterestedInEqual);
  516. $core.addClass('AxonOff', $globals.Error, [], 'Axon');
  517. //>>excludeStart("ide", pragmas.excludeIdeData);
  518. $globals.AxonOff.comment="Signal me from the subscription block to unsubscribe it.";
  519. //>>excludeEnd("ide");
  520. $core.addClass('AxonizedObject', $globals.Object, ['axon'], 'Axon');
  521. //>>excludeStart("ide", pragmas.excludeIdeData);
  522. $globals.AxonizedObject.comment="I am base class for object using Axon changed:\x0afor event / change logistics,\x0a\x0aSet Axon instance with `axon:` and then use\x0a`self changed: anAspect` to trigger axon's `changed:`.";
  523. //>>excludeEnd("ide");
  524. $core.addMethod(
  525. $core.method({
  526. selector: "axon",
  527. protocol: 'accessing',
  528. fn: function (){
  529. var self=this;
  530. var $1;
  531. $1=self["@axon"];
  532. return $1;
  533. },
  534. //>>excludeStart("ide", pragmas.excludeIdeData);
  535. args: [],
  536. source: "axon\x0a\x09^ axon",
  537. referencedClasses: [],
  538. //>>excludeEnd("ide");
  539. messageSends: []
  540. }),
  541. $globals.AxonizedObject);
  542. $core.addMethod(
  543. $core.method({
  544. selector: "axon:",
  545. protocol: 'accessing',
  546. fn: function (anAxon){
  547. var self=this;
  548. self["@axon"]=anAxon;
  549. return self;
  550. },
  551. //>>excludeStart("ide", pragmas.excludeIdeData);
  552. args: ["anAxon"],
  553. source: "axon: anAxon\x0a\x09axon := anAxon",
  554. referencedClasses: [],
  555. //>>excludeEnd("ide");
  556. messageSends: []
  557. }),
  558. $globals.AxonizedObject);
  559. $core.addMethod(
  560. $core.method({
  561. selector: "changed:",
  562. protocol: 'action',
  563. fn: function (anAspect){
  564. var self=this;
  565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  566. return $core.withContext(function($ctx1) {
  567. //>>excludeEnd("ctx");
  568. $recv(self._axon())._changed_(anAspect);
  569. return self;
  570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  571. }, function($ctx1) {$ctx1.fill(self,"changed:",{anAspect:anAspect},$globals.AxonizedObject)});
  572. //>>excludeEnd("ctx");
  573. },
  574. //>>excludeStart("ide", pragmas.excludeIdeData);
  575. args: ["anAspect"],
  576. source: "changed: anAspect\x0a\x09self axon changed: anAspect",
  577. referencedClasses: [],
  578. //>>excludeEnd("ide");
  579. messageSends: ["changed:", "axon"]
  580. }),
  581. $globals.AxonizedObject);
  582. });