1
0

IDE.js 82 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732
  1. smalltalk.addClass('TabManager', smalltalk.Widget, ['selectedTab', 'tabs', 'opened'], 'IDE');
  2. smalltalk.addMethod(
  3. '_initialize',
  4. smalltalk.method({
  5. selector: 'initialize',
  6. category: 'initialization',
  7. fn: function () {
  8. var self = this;
  9. self.klass.superclass.fn.prototype._initialize.apply(self, []);
  10. self['@opened'] = true;
  11. (function ($rec) {$rec._append_(self);$rec._append_(function (html) {return html._div()._id_("jtalk");});return $rec._addClass_("jtalkBody");}("body"._asJQuery()));
  12. (function ($rec) {$rec._addTab_(smalltalk.Transcript._current());return $rec._addTab_(smalltalk.Workspace._new());}(self));
  13. self._selectTab_(self._tabs()._last());
  14. (function ($rec) {$rec._onResize_(function () {return function ($rec) {$rec._updateBodyMargin();return $rec._updatePosition();}(self);});return $rec._onWindowResize_(function () {return self._updatePosition();});}(self));
  15. return self;
  16. },
  17. source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20opened%20%3A%3D%20true.%0A%20%20%20%20%27body%27%20asJQuery%20%0A%09append%3A%20self%3B%0A%09append%3A%20%5B%3Ahtml%20%7C%20html%20div%20id%3A%20%27jtalk%27%5D%3B%0A%09addClass%3A%20%27jtalkBody%27.%0A%20%20%20%20self%20%0A%09addTab%3A%20Transcript%20current%3B%0A%09addTab%3A%20Workspace%20new.%0A%20%20%20%20self%20selectTab%3A%20self%20tabs%20last.%0A%20%20%20%20self%20%0A%09onResize%3A%20%5Bself%20updateBodyMargin%3B%20updatePosition%5D%3B%0A%09onWindowResize%3A%20%5Bself%20updatePosition%5D%0A')}),
  18. smalltalk.TabManager);
  19. smalltalk.addMethod(
  20. '_tabs',
  21. smalltalk.method({
  22. selector: 'tabs',
  23. category: 'accessing',
  24. fn: function () {
  25. var self = this;
  26. return self['@tabs']._ifNil_(function () {return self['@tabs'] = smalltalk.Array._new();});
  27. return self;
  28. },
  29. source: unescape('tabs%0A%20%20%20%20%5Etabs%20ifNil%3A%20%5Btabs%20%3A%3D%20Array%20new%5D%0A')}),
  30. smalltalk.TabManager);
  31. smalltalk.addMethod(
  32. '_addTab_',
  33. smalltalk.method({
  34. selector: 'addTab:',
  35. category: 'adding/Removing',
  36. fn: function (aWidget) {
  37. var self = this;
  38. self._tabs()._add_(aWidget);
  39. unescape("%23jtalk")._asJQuery()._append_(aWidget);
  40. aWidget._root()._asJQuery()._hide();
  41. return self;
  42. },
  43. source: unescape('addTab%3A%20aWidget%0A%20%20%20%20self%20tabs%20add%3A%20aWidget.%0A%20%20%20%20%27%23jtalk%27%20asJQuery%20append%3A%20aWidget.%0A%20%20%20%20aWidget%20root%20asJQuery%20hide%0A')}),
  44. smalltalk.TabManager);
  45. smalltalk.addMethod(
  46. '_removeTab_',
  47. smalltalk.method({
  48. selector: 'removeTab:',
  49. category: 'adding/Removing',
  50. fn: function (aWidget) {
  51. var self = this;
  52. self._tabs()._remove_(aWidget);
  53. self._update();
  54. return self;
  55. },
  56. source: unescape('removeTab%3A%20aWidget%0A%20%20%20%20self%20tabs%20remove%3A%20aWidget.%0A%20%20%20%20self%20update%0A')}),
  57. smalltalk.TabManager);
  58. smalltalk.addMethod(
  59. '_updateBodyMargin',
  60. smalltalk.method({
  61. selector: 'updateBodyMargin',
  62. category: 'actions',
  63. fn: function () {
  64. var self = this;
  65. self._setBodyMargin_(unescape("%23jtalk")._asJQuery()._height().__plus(27));
  66. return self;
  67. },
  68. source: unescape('updateBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%20%27%23jtalk%27%20asJQuery%20height%20+%2027%0A')}),
  69. smalltalk.TabManager);
  70. smalltalk.addMethod(
  71. '_updatePosition',
  72. smalltalk.method({
  73. selector: 'updatePosition',
  74. category: 'actions',
  75. fn: function () {
  76. var self = this;
  77. (function () {jQuery("#jtalk").css("top", "").css("bottom", "27px");}());
  78. return self;
  79. },
  80. source: unescape('updatePosition%0A%20%20%20%20%7B%27jQuery%28%27%27%23jtalk%27%27%29.css%28%27%27top%27%27%2C%20%27%27%27%27%27%27%29.css%28%27%27bottom%27%27%2C%20%27%2727px%27%27%29%3B%27%7D%0A')}),
  81. smalltalk.TabManager);
  82. smalltalk.addMethod(
  83. '_removeBodyMargin',
  84. smalltalk.method({
  85. selector: 'removeBodyMargin',
  86. category: 'actions',
  87. fn: function () {
  88. var self = this;
  89. self._setBodyMargin_(0);
  90. return self;
  91. },
  92. source: unescape('removeBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%200%0A')}),
  93. smalltalk.TabManager);
  94. smalltalk.addMethod(
  95. '_setBodyMargin_',
  96. smalltalk.method({
  97. selector: 'setBodyMargin:',
  98. category: 'actions',
  99. fn: function (anInteger) {
  100. var self = this;
  101. ".jtalkBody"._asJQuery()._cssAt_put_(unescape("margin-bottom"), anInteger._asString().__comma("px"));
  102. return self;
  103. },
  104. source: unescape('setBodyMargin%3A%20anInteger%0A%20%20%20%20%27.jtalkBody%27%20asJQuery%20cssAt%3A%20%27margin-bottom%27%20put%3A%20anInteger%20asString%2C%20%27px%27%0A')}),
  105. smalltalk.TabManager);
  106. smalltalk.addMethod(
  107. '_onResize_',
  108. smalltalk.method({
  109. selector: 'onResize:',
  110. category: 'actions',
  111. fn: function (aBlock) {
  112. var self = this;
  113. (function () {jQuery("#jtalk").resizable({handles: "n", resize: aBlock, minHeight: 230});}());
  114. return self;
  115. },
  116. source: unescape('onResize%3A%20aBlock%0A%20%20%20%20%7B%27jQuery%28%27%27%23jtalk%27%27%29.resizable%28%7B%0A%09handles%3A%20%27%27n%27%27%2C%20%0A%09resize%3A%20aBlock%2C%0A%09minHeight%3A%20230%0A%7D%29%3B%27%7D%0A')}),
  117. smalltalk.TabManager);
  118. smalltalk.addMethod(
  119. '_onWindowResize_',
  120. smalltalk.method({
  121. selector: 'onWindowResize:',
  122. category: 'actions',
  123. fn: function (aBlock) {
  124. var self = this;
  125. (function () {jQuery(window).resize(aBlock);}());
  126. return self;
  127. },
  128. source: unescape('onWindowResize%3A%20aBlock%0A%20%20%20%20%7B%27jQuery%28window%29.resize%28aBlock%29%27%7D%0A')}),
  129. smalltalk.TabManager);
  130. smalltalk.addMethod(
  131. '_open',
  132. smalltalk.method({
  133. selector: 'open',
  134. category: 'actions',
  135. fn: function () {
  136. var self = this;
  137. self['@opened']._ifFalse_(function () {self._root()._asJQuery()._show();"body"._asJQuery()._addClass_("jtalkBody");unescape("%23jtalk")._asJQuery()._show();self._updateBodyMargin();self['@selectedTab']._root()._asJQuery()._show();return self['@opened'] = true;});
  138. return self;
  139. },
  140. source: unescape('open%0A%20%20%20%20opened%20ifFalse%3A%20%5B%0A%09self%20root%20asJQuery%20show.%0A%09%27body%27%20asJQuery%20addClass%3A%20%27jtalkBody%27.%0A%09%27%23jtalk%27%20asJQuery%20show.%0A%09self%20updateBodyMargin.%0A%09selectedTab%20root%20asJQuery%20show.%0A%09opened%20%3A%3D%20true%5D%0A')}),
  141. smalltalk.TabManager);
  142. smalltalk.addMethod(
  143. '_close',
  144. smalltalk.method({
  145. selector: 'close',
  146. category: 'actions',
  147. fn: function () {
  148. var self = this;
  149. self['@opened']._ifTrue_(function () {self._root()._asJQuery()._hide();unescape("%23jtalk")._asJQuery()._hide();self._removeBodyMargin();"body"._asJQuery()._removeClass_("jtalkBody");return self['@opened'] = false;});
  150. return self;
  151. },
  152. source: unescape('close%0A%20%20%20%20opened%20ifTrue%3A%20%5B%0A%09self%20root%20asJQuery%20hide.%0A%09%27%23jtalk%27%20asJQuery%20hide.%0A%09self%20removeBodyMargin.%0A%09%27body%27%20asJQuery%20removeClass%3A%20%27jtalkBody%27.%0A%09opened%20%3A%3D%20false%5D%0A')}),
  153. smalltalk.TabManager);
  154. smalltalk.addMethod(
  155. '_newBrowserTab',
  156. smalltalk.method({
  157. selector: 'newBrowserTab',
  158. category: 'actions',
  159. fn: function () {
  160. var self = this;
  161. smalltalk.Browser._open();
  162. return self;
  163. },
  164. source: unescape('newBrowserTab%0A%20%20%20%20Browser%20open%0A')}),
  165. smalltalk.TabManager);
  166. smalltalk.addMethod(
  167. '_selectTab_',
  168. smalltalk.method({
  169. selector: 'selectTab:',
  170. category: 'actions',
  171. fn: function (aWidget) {
  172. var self = this;
  173. self._open();
  174. self['@selectedTab'] = aWidget;
  175. self._tabs()._do_(function (each) {return each._root()._asJQuery()._hide();});
  176. aWidget._root()._asJQuery()._show();
  177. self._update();
  178. return self;
  179. },
  180. source: unescape('selectTab%3A%20aWidget%0A%20%20%20%20self%20open.%0A%20%20%20%20selectedTab%20%3A%3D%20aWidget.%0A%20%20%20%20self%20tabs%20do%3A%20%5B%3Aeach%20%7C%0A%09each%20root%20asJQuery%20hide%5D.%0A%20%20%20%20aWidget%20root%20asJQuery%20show.%0A%20%20%20%20self%20update%0A')}),
  181. smalltalk.TabManager);
  182. smalltalk.addMethod(
  183. '_closeTab_',
  184. smalltalk.method({
  185. selector: 'closeTab:',
  186. category: 'actions',
  187. fn: function (aWidget) {
  188. var self = this;
  189. self._removeTab_(aWidget);
  190. self._selectTab_(self._tabs()._last());
  191. aWidget._root()._asJQuery()._remove();
  192. self._update();
  193. return self;
  194. },
  195. source: unescape('closeTab%3A%20aWidget%0A%20%20%20%20self%20removeTab%3A%20aWidget.%0A%20%20%20%20self%20selectTab%3A%20self%20tabs%20last.%0A%20%20%20%20aWidget%20root%20asJQuery%20remove.%0A%20%20%20%20self%20update%0A')}),
  196. smalltalk.TabManager);
  197. smalltalk.addMethod(
  198. '_renderOn_',
  199. smalltalk.method({
  200. selector: 'renderOn:',
  201. category: 'rendering',
  202. fn: function (html) {
  203. var self = this;
  204. (function ($rec) {$rec._id_("jtalkTabs");return $rec._with_(function () {(function ($rec) {$rec._class_("closeAll");$rec._with_("x");return $rec._onClick_(function () {return self._close();});}(html._li()));self._tabs()._do_(function (each) {return self._renderTabFor_on_(each, html);});return function ($rec) {$rec._class_("newtab");$rec._with_(unescape("%20+%20"));return $rec._onClick_(function () {return self._newBrowserTab();});}(html._li());});}(html._ul()));
  205. return self;
  206. },
  207. source: unescape('renderOn%3A%20html%0A%20%20%20%20html%20ul%0A%09id%3A%20%27jtalkTabs%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20html%20li%20%0A%09%09class%3A%20%27closeAll%27%3B%0A%09%09with%3A%20%27x%27%3B%0A%09%09onClick%3A%20%5Bself%20close%5D.%0A%09%20%20%20%20self%20tabs%20do%3A%20%5B%3Aeach%20%7C%0A%09%09self%20renderTabFor%3A%20each%20on%3A%20html%5D.%0A%09%20%20%20%20html%20li%0A%09%09class%3A%20%27newtab%27%3B%0A%09%09with%3A%20%27%20+%20%27%3B%0A%09%09onClick%3A%20%5Bself%20newBrowserTab%5D%5D%0A')}),
  208. smalltalk.TabManager);
  209. smalltalk.addMethod(
  210. '_renderTabFor_on_',
  211. smalltalk.method({
  212. selector: 'renderTabFor:on:',
  213. category: 'rendering',
  214. fn: function (aWidget, html) {
  215. var self = this;
  216. var li = nil;
  217. li = html._li();
  218. self['@selectedTab'].__eq(aWidget)._ifTrue_(function () {return li._class_("selected");});
  219. li._with_(function () {(function ($rec) {$rec._with_(aWidget._label());return $rec._onClick_(function () {return self._selectTab_(aWidget);});}(html._span()));return aWidget._canBeClosed()._ifTrue_(function () {return function ($rec) {$rec._class_("close");$rec._with_("x");return $rec._onClick_(function () {return self._closeTab_(aWidget);});}(html._span());});});
  220. return self;
  221. },
  222. source: unescape('renderTabFor%3A%20aWidget%20on%3A%20html%0A%20%20%20%20%7C%20li%20%7C%0A%20%20%20%20li%20%3A%3D%20html%20li.%0A%20%20%20%20selectedTab%20%3D%20aWidget%20ifTrue%3A%20%5B%0A%09li%20class%3A%20%27selected%27%5D.%0A%20%20%20%20li%20with%3A%20%5B%0A%09html%20span%0A%09%20%20%20%20with%3A%20aWidget%20label%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20aWidget%5D.%0A%09aWidget%20canBeClosed%20ifTrue%3A%20%5B%0A%09%20%20%20%20html%20span%20%0A%09%09class%3A%20%27close%27%3B%0A%09%09with%3A%20%27x%27%3B%0A%09%09onClick%3A%20%5Bself%20closeTab%3A%20aWidget%5D%5D%5D%0A')}),
  223. smalltalk.TabManager);
  224. smalltalk.TabManager.klass.iVarNames = ['current'];
  225. smalltalk.addMethod(
  226. '_current',
  227. smalltalk.method({
  228. selector: 'current',
  229. category: 'instance creation',
  230. fn: function () {
  231. var self = this;
  232. return self['@current']._ifNil_(function () {return self['@current'] = self.klass.superclass.fn.prototype._new.apply(self, []);});
  233. return self;
  234. },
  235. source: unescape('current%0A%20%20%20%20%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D%0A')}),
  236. smalltalk.TabManager.klass);
  237. smalltalk.addMethod(
  238. '_new',
  239. smalltalk.method({
  240. selector: 'new',
  241. category: 'instance creation',
  242. fn: function () {
  243. var self = this;
  244. self._shouldNotImplement();
  245. return self;
  246. },
  247. source: unescape('new%0A%20%20%20%20self%20shouldNotImplement%0A')}),
  248. smalltalk.TabManager.klass);
  249. smalltalk.addClass('TabWidget', smalltalk.Widget, [], 'IDE');
  250. smalltalk.addMethod(
  251. '_label',
  252. smalltalk.method({
  253. selector: 'label',
  254. category: 'accessing',
  255. fn: function () {
  256. var self = this;
  257. self._subclassResponsibility();
  258. return self;
  259. },
  260. source: unescape('label%0A%20%20%20%20self%20subclassResponsibility%0A')}),
  261. smalltalk.TabWidget);
  262. smalltalk.addMethod(
  263. '_open',
  264. smalltalk.method({
  265. selector: 'open',
  266. category: 'actions',
  267. fn: function () {
  268. var self = this;
  269. (function ($rec) {$rec._addTab_(self);return $rec._selectTab_(self);}(smalltalk.TabManager._current()));
  270. return self;
  271. },
  272. source: unescape('open%0A%20%20%20%20TabManager%20current%0A%09addTab%3A%20self%3B%0A%09selectTab%3A%20self%0A')}),
  273. smalltalk.TabWidget);
  274. smalltalk.addMethod(
  275. '_canBeClosed',
  276. smalltalk.method({
  277. selector: 'canBeClosed',
  278. category: 'testing',
  279. fn: function () {
  280. var self = this;
  281. return false;
  282. return self;
  283. },
  284. source: unescape('canBeClosed%0A%20%20%20%20%5Efalse%0A')}),
  285. smalltalk.TabWidget);
  286. smalltalk.addMethod(
  287. '_renderOn_',
  288. smalltalk.method({
  289. selector: 'renderOn:',
  290. category: 'rendering',
  291. fn: function (html) {
  292. var self = this;
  293. (function ($rec) {$rec._class_("jtalkTool");return $rec._with_(function () {(function ($rec) {$rec._class_("jt_box");return $rec._with_(function () {return self._renderBoxOn_(html);});}(html._div()));return function ($rec) {$rec._class_("jt_buttons");return $rec._with_(function () {return self._renderButtonsOn_(html);});}(html._div());});}(html._root()));
  294. return self;
  295. },
  296. source: unescape('renderOn%3A%20html%0A%20%20%20%20html%20root%0A%09class%3A%20%27jtalkTool%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20html%20div%0A%09%09class%3A%20%27jt_box%27%3B%0A%09%09with%3A%20%5Bself%20renderBoxOn%3A%20html%5D.%0A%09%20%20%20%20html%20div%0A%09%09class%3A%20%27jt_buttons%27%3B%0A%09%09with%3A%20%5Bself%20renderButtonsOn%3A%20html%5D%5D%0A')}),
  297. smalltalk.TabWidget);
  298. smalltalk.addMethod(
  299. '_renderBoxOn_',
  300. smalltalk.method({
  301. selector: 'renderBoxOn:',
  302. category: 'rendering',
  303. fn: function (html) {
  304. var self = this;
  305. return self;
  306. },
  307. source: unescape('renderBoxOn%3A%20html%0A')}),
  308. smalltalk.TabWidget);
  309. smalltalk.addMethod(
  310. '_renderButtonsOn_',
  311. smalltalk.method({
  312. selector: 'renderButtonsOn:',
  313. category: 'rendering',
  314. fn: function (html) {
  315. var self = this;
  316. return self;
  317. },
  318. source: unescape('renderButtonsOn%3A%20html%0A')}),
  319. smalltalk.TabWidget);
  320. smalltalk.addMethod(
  321. '_open',
  322. smalltalk.method({
  323. selector: 'open',
  324. category: 'instance creation',
  325. fn: function () {
  326. var self = this;
  327. return self._new()._open();
  328. return self;
  329. },
  330. source: unescape('open%0A%20%20%20%20%5Eself%20new%20open%0A')}),
  331. smalltalk.TabWidget.klass);
  332. smalltalk.addClass('Workspace', smalltalk.TabWidget, ['textarea'], 'IDE');
  333. smalltalk.addMethod(
  334. '_label',
  335. smalltalk.method({
  336. selector: 'label',
  337. category: 'accessing',
  338. fn: function () {
  339. var self = this;
  340. return unescape("%5BWorkspace%5D");
  341. return self;
  342. },
  343. source: unescape('label%0A%20%20%20%20%5E%27%5BWorkspace%5D%27%0A')}),
  344. smalltalk.Workspace);
  345. smalltalk.addMethod(
  346. '_selection',
  347. smalltalk.method({
  348. selector: 'selection',
  349. category: 'accessing',
  350. fn: function () {
  351. var self = this;
  352. return function () {return document.selection;}();
  353. return self;
  354. },
  355. source: unescape('selection%0A%20%20%20%20%5E%7B%27return%20document.selection%27%7D%0A')}),
  356. smalltalk.Workspace);
  357. smalltalk.addMethod(
  358. '_selectionStart',
  359. smalltalk.method({
  360. selector: 'selectionStart',
  361. category: 'accessing',
  362. fn: function () {
  363. var self = this;
  364. return function () {return jQuery(".jt_workspace")[0].selectionStart;}();
  365. return self;
  366. },
  367. source: unescape('selectionStart%0A%20%20%20%20%5E%7B%27return%20jQuery%28%27%27.jt_workspace%27%27%29%5B0%5D.selectionStart%27%7D%0A')}),
  368. smalltalk.Workspace);
  369. smalltalk.addMethod(
  370. '_selectionEnd',
  371. smalltalk.method({
  372. selector: 'selectionEnd',
  373. category: 'accessing',
  374. fn: function () {
  375. var self = this;
  376. return function () {return jQuery(".jt_workspace")[0].selectionEnd;}();
  377. return self;
  378. },
  379. source: unescape('selectionEnd%0A%20%20%20%20%5E%7B%27return%20jQuery%28%27%27.jt_workspace%27%27%29%5B0%5D.selectionEnd%27%7D%0A')}),
  380. smalltalk.Workspace);
  381. smalltalk.addMethod(
  382. '_selectionStart_',
  383. smalltalk.method({
  384. selector: 'selectionStart:',
  385. category: 'accessing',
  386. fn: function (anInteger) {
  387. var self = this;
  388. (function () {jQuery(".jt_workspace")[0].selectionStart = anInteger;}());
  389. return self;
  390. },
  391. source: unescape('selectionStart%3A%20anInteger%0A%20%20%20%20%7B%27jQuery%28%27%27.jt_workspace%27%27%29%5B0%5D.selectionStart%20%3D%20anInteger%27%7D%0A')}),
  392. smalltalk.Workspace);
  393. smalltalk.addMethod(
  394. '_selectionEnd_',
  395. smalltalk.method({
  396. selector: 'selectionEnd:',
  397. category: 'accessing',
  398. fn: function (anInteger) {
  399. var self = this;
  400. (function () {jQuery(".jt_workspace")[0].selectionEnd = anInteger;}());
  401. return self;
  402. },
  403. source: unescape('selectionEnd%3A%20anInteger%0A%20%20%20%20%7B%27jQuery%28%27%27.jt_workspace%27%27%29%5B0%5D.selectionEnd%20%3D%20anInteger%27%7D%0A')}),
  404. smalltalk.Workspace);
  405. smalltalk.addMethod(
  406. '_currentLine',
  407. smalltalk.method({
  408. selector: 'currentLine',
  409. category: 'accessing',
  410. fn: function () {
  411. var self = this;
  412. try {
  413. var lines = nil;
  414. var startLine = nil;
  415. var endLine = nil;
  416. lines = self['@textarea']._asJQuery()._val()._tokenize_(smalltalk.String._cr());
  417. startLine = endLine = 0;
  418. lines._do_(function (each) {endLine = startLine.__plus(each._size());startLine = endLine.__plus(1);return endLine.__gt_eq(self._selectionStart())._ifTrue_(function () {self._selectionEnd_(endLine);return function () {throw {name: "stReturn", selector: "_currentLine", fn: function () {return each;}};}();});});
  419. return self;
  420. } catch (e) {
  421. if (e.name === "stReturn" && e.selector === "_currentLine") {
  422. return e.fn();
  423. }
  424. throw e;
  425. }
  426. },
  427. source: unescape('currentLine%0A%20%20%20%20%7C%20lines%20startLine%20endLine%7C%0A%20%20%20%20lines%20%3A%3D%20textarea%20asJQuery%20val%20tokenize%3A%20String%20cr.%0A%20%20%20%20startLine%20%3A%3D%20endLine%20%3A%3D%200.%0A%20%20%20%20lines%20do%3A%20%5B%3Aeach%20%7C%0A%09endLine%20%3A%3D%20startLine%20+%20each%20size.%0A%09startLine%20%3A%3D%20endLine%20+%201.%0A%09endLine%20%3E%3D%20self%20selectionStart%20ifTrue%3A%20%5B%0A%09%20%20%20%20self%20selectionEnd%3A%20endLine.%0A%09%20%20%20%20%5Eeach%5D%5D%0A')}),
  428. smalltalk.Workspace);
  429. smalltalk.addMethod(
  430. '_handleKeyDown_',
  431. smalltalk.method({
  432. selector: 'handleKeyDown:',
  433. category: 'actions',
  434. fn: function (anEvent) {
  435. var self = this;
  436. return function () {if (anEvent.ctrlKey) {if (anEvent.keyCode === 68) {self._printIt();return false;}if (anEvent.keyCode === 80) {self._doIt();return false;}}}();
  437. return self;
  438. },
  439. source: unescape('handleKeyDown%3A%20anEvent%0A%20%20%20%20%5E%7B%27if%28anEvent.ctrlKey%29%20%7B%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2068%29%20%7B%20//ctrl+p%0A%09%09%09self._printIt%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%09if%28anEvent.keyCode%20%3D%3D%3D%2080%29%20%7B%20//ctrl+d%0A%09%09%09self._doIt%28%29%3B%0A%09%09%09return%20false%3B%0A%09%09%7D%0A%09%7D%27%7D%0A')}),
  440. smalltalk.Workspace);
  441. smalltalk.addMethod(
  442. '_clearWorkspace',
  443. smalltalk.method({
  444. selector: 'clearWorkspace',
  445. category: 'actions',
  446. fn: function () {
  447. var self = this;
  448. self['@textarea']._asJQuery()._val_("");
  449. return self;
  450. },
  451. source: unescape('clearWorkspace%0A%20%20%20%20textarea%20asJQuery%20val%3A%20%27%27%0A')}),
  452. smalltalk.Workspace);
  453. smalltalk.addMethod(
  454. '_doIt',
  455. smalltalk.method({
  456. selector: 'doIt',
  457. category: 'actions',
  458. fn: function () {
  459. var self = this;
  460. var selection = nil;
  461. self['@textarea']._asJQuery()._focus();
  462. self._selectionStart().__eq(self._selectionEnd())._ifTrue_ifFalse_(function () {return selection = self._currentLine();}, function () {return selection = self['@textarea']._asJQuery()._val()._copyFrom_to_(self._selectionStart().__plus(1), self._selectionEnd().__plus(1));});
  463. return self._eval_(selection);
  464. return self;
  465. },
  466. source: unescape('doIt%0A%20%20%20%20%7C%20selection%20%7C%0A%20%20%20%20textarea%20asJQuery%20focus.%0A%20%20%20%20self%20selectionStart%20%3D%20self%20selectionEnd%0A%09ifTrue%3A%20%5Bselection%20%3A%3D%20self%20currentLine%5D%0A%09ifFalse%3A%20%5B%0A%09%20%20%20%20selection%20%3A%3D%20textarea%20asJQuery%20val%20copyFrom%3A%20self%20selectionStart%20+%201%20to%3A%20self%20selectionEnd%20+%201%5D.%0A%20%20%20%20%5Eself%20eval%3A%20selection')}),
  467. smalltalk.Workspace);
  468. smalltalk.addMethod(
  469. '_printIt',
  470. smalltalk.method({
  471. selector: 'printIt',
  472. category: 'actions',
  473. fn: function () {
  474. var self = this;
  475. self._print_(self._doIt()._printString());
  476. return self;
  477. },
  478. source: unescape('printIt%0A%20%20%20%20self%20print%3A%20self%20doIt%20printString%0A')}),
  479. smalltalk.Workspace);
  480. smalltalk.addMethod(
  481. '_print_',
  482. smalltalk.method({
  483. selector: 'print:',
  484. category: 'actions',
  485. fn: function (aString) {
  486. var self = this;
  487. var start = nil;
  488. start = self._selectionEnd();
  489. self['@textarea']._asJQuery()._val_(self['@textarea']._asJQuery()._val()._copyFrom_to_(1, start).__comma(" ").__comma(aString).__comma(" ").__comma(self['@textarea']._asJQuery()._val()._copyFrom_to_(start.__plus(1), self['@textarea']._asJQuery()._val()._size())));
  490. self._selectionStart_(start);
  491. self._selectionEnd_(start.__plus(aString._size()).__plus(2));
  492. return self;
  493. },
  494. source: unescape('print%3A%20aString%0A%20%20%20%20%7C%20start%20%7C%0A%20%20%20%20start%20%3A%3D%20self%20selectionEnd.%0A%20%20%20%20textarea%20asJQuery%20val%3A%20%28%0A%09%28textarea%20asJQuery%20val%20copyFrom%3A%201%20to%3A%20start%29%2C%0A%09%27%20%27%2C%20aString%2C%20%27%20%27%2C%0A%09%28textarea%20asJQuery%20val%20copyFrom%3A%20start%20+%201%20to%3A%20textarea%20asJQuery%20val%20size%29%29.%0A%20%20%20%20self%20selectionStart%3A%20start.%0A%20%20%20%20self%20selectionEnd%3A%20start%20+%20aString%20size%20+%202%0A')}),
  495. smalltalk.Workspace);
  496. smalltalk.addMethod(
  497. '_eval_',
  498. smalltalk.method({
  499. selector: 'eval:',
  500. category: 'actions',
  501. fn: function (aString) {
  502. var self = this;
  503. try {
  504. var compiler = nil;
  505. var node = nil;
  506. compiler = smalltalk.Compiler._new();
  507. node = compiler._parseExpression_(aString);
  508. node._isParseFailure()._ifTrue_(function () {return function () {throw {name: "stReturn", selector: "_eval_", fn: function () {return self._alert_(node._reason().__comma(unescape("%2C%20position%3A%20")).__comma(node._position()));}};}();});
  509. (function () {throw {name: "stReturn", selector: "_eval_", fn: function () {return compiler._loadExpression_(aString);}};}());
  510. return self;
  511. } catch (e) {
  512. if (e.name === "stReturn" && e.selector === "_eval_") {
  513. return e.fn();
  514. }
  515. throw e;
  516. }
  517. },
  518. source: unescape('eval%3A%20aString%0A%20%20%20%20%7C%20compiler%20node%20%7C%0A%20%20%20%20compiler%20%3A%3D%20Compiler%20new.%0A%20%20%20%20node%20%3A%3D%20compiler%20parseExpression%3A%20aString.%0A%20%20%20%20node%20isParseFailure%20ifTrue%3A%20%5B%0A%09%5Eself%20alert%3A%20node%20reason%2C%20%27%2C%20position%3A%20%27%2C%20node%20position%5D.%0A%20%20%20%20%5Ecompiler%20loadExpression%3A%20aString%0A')}),
  519. smalltalk.Workspace);
  520. smalltalk.addMethod(
  521. '_renderBoxOn_',
  522. smalltalk.method({
  523. selector: 'renderBoxOn:',
  524. category: 'rendering',
  525. fn: function (html) {
  526. var self = this;
  527. self['@textarea'] = html._textarea();
  528. self['@textarea']._asJQuery()._call_("tabby");
  529. self['@textarea']._onKeyDown_(function (e) {return self._handleKeyDown_(e);});
  530. (function ($rec) {$rec._class_("jt_workspace");return $rec._at_put_("spellcheck", "false");}(self['@textarea']));
  531. return self;
  532. },
  533. source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20textarea%20%3A%3D%20html%20textarea.%0A%20%20%20%20textarea%20asJQuery%20call%3A%20%27tabby%27.%0A%20%20%20%20textarea%20onKeyDown%3A%20%5B%3Ae%20%7C%20self%20handleKeyDown%3A%20e%5D.%0A%20%20%20%20textarea%20%0A%09class%3A%20%27jt_workspace%27%3B%0A%09at%3A%20%27spellcheck%27%20put%3A%20%27false%27%0A')}),
  534. smalltalk.Workspace);
  535. smalltalk.addMethod(
  536. '_renderButtonsOn_',
  537. smalltalk.method({
  538. selector: 'renderButtonsOn:',
  539. category: 'rendering',
  540. fn: function (html) {
  541. var self = this;
  542. (function ($rec) {$rec._with_("DoIt");$rec._title_(unescape("ctrl+d"));return $rec._onClick_(function () {return self._doIt();});}(html._button()));
  543. (function ($rec) {$rec._with_("PrintIt");$rec._title_(unescape("ctrl+p"));return $rec._onClick_(function () {return self._printIt();});}(html._button()));
  544. (function ($rec) {$rec._with_("InspectIt");$rec._title_(unescape("ctrl+i"));return $rec._onClick_(function () {return self._inspectIt();});}(html._button()));
  545. (function ($rec) {$rec._with_("Clear workspace");return $rec._onClick_(function () {return self._clearWorkspace();});}(html._button()));
  546. return self;
  547. },
  548. source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27DoIt%27%3B%0A%09title%3A%20%27ctrl+d%27%3B%0A%09onClick%3A%20%5Bself%20doIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27PrintIt%27%3B%0A%09title%3A%20%27ctrl+p%27%3B%0A%09onClick%3A%20%5Bself%20printIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27InspectIt%27%3B%0A%09title%3A%20%27ctrl+i%27%3B%0A%09onClick%3A%20%5Bself%20inspectIt%5D.%0A%20%20%20%20html%20button%0A%09with%3A%20%27Clear%20workspace%27%3B%0A%09onClick%3A%20%5Bself%20clearWorkspace%5D%0A')}),
  549. smalltalk.Workspace);
  550. smalltalk.addMethod(
  551. '_inspectIt',
  552. smalltalk.method({
  553. selector: 'inspectIt',
  554. category: 'actions',
  555. fn: function () {
  556. var self = this;
  557. self._doIt()._inspect();
  558. return self;
  559. },
  560. source: unescape('inspectIt%0A%20%20%20%20self%20doIt%20inspect%0A')}),
  561. smalltalk.Workspace);
  562. smalltalk.addClass('Transcript', smalltalk.TabWidget, ['textarea'], 'IDE');
  563. smalltalk.addMethod(
  564. '_label',
  565. smalltalk.method({
  566. selector: 'label',
  567. category: 'accessing',
  568. fn: function () {
  569. var self = this;
  570. return unescape("%5BTranscript%5D");
  571. return self;
  572. },
  573. source: unescape('label%0A%20%20%20%20%5E%27%5BTranscript%5D%27%0A')}),
  574. smalltalk.Transcript);
  575. smalltalk.addMethod(
  576. '_show_',
  577. smalltalk.method({
  578. selector: 'show:',
  579. category: 'actions',
  580. fn: function (anObject) {
  581. var self = this;
  582. self['@textarea']._asJQuery()._val_(self['@textarea']._asJQuery()._val().__comma(anObject._asString()));
  583. return self;
  584. },
  585. source: unescape('show%3A%20anObject%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20anObject%20asString.%0A%0A')}),
  586. smalltalk.Transcript);
  587. smalltalk.addMethod(
  588. '_cr',
  589. smalltalk.method({
  590. selector: 'cr',
  591. category: 'actions',
  592. fn: function () {
  593. var self = this;
  594. self['@textarea']._asJQuery()._val_(self['@textarea']._asJQuery()._val().__comma(smalltalk.String._cr()));
  595. return self;
  596. },
  597. source: unescape('cr%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20String%20cr.%0A')}),
  598. smalltalk.Transcript);
  599. smalltalk.addMethod(
  600. '_clear',
  601. smalltalk.method({
  602. selector: 'clear',
  603. category: 'actions',
  604. fn: function () {
  605. var self = this;
  606. self['@textarea']._asJQuery()._val_("");
  607. return self;
  608. },
  609. source: unescape('clear%0A%20%20%20%20textarea%20asJQuery%20val%3A%20%27%27%0A')}),
  610. smalltalk.Transcript);
  611. smalltalk.addMethod(
  612. '_renderBoxOn_',
  613. smalltalk.method({
  614. selector: 'renderBoxOn:',
  615. category: 'rendering',
  616. fn: function (html) {
  617. var self = this;
  618. self['@textarea'] = html._textarea();
  619. self['@textarea']._asJQuery()._call_("tabby");
  620. (function ($rec) {$rec._class_("jt_transcript");return $rec._at_put_("spellcheck", "false");}(self['@textarea']));
  621. return self;
  622. },
  623. source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20textarea%20%3A%3D%20html%20textarea.%0A%20%20%20%20textarea%20asJQuery%20call%3A%20%27tabby%27.%0A%20%20%20%20textarea%20%0A%09class%3A%20%27jt_transcript%27%3B%0A%09at%3A%20%27spellcheck%27%20put%3A%20%27false%27%0A')}),
  624. smalltalk.Transcript);
  625. smalltalk.addMethod(
  626. '_renderButtonsOn_',
  627. smalltalk.method({
  628. selector: 'renderButtonsOn:',
  629. category: 'rendering',
  630. fn: function (html) {
  631. var self = this;
  632. (function ($rec) {$rec._with_("Clear transcript");return $rec._onClick_(function () {return self._clear();});}(html._button()));
  633. return self;
  634. },
  635. source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20html%20button%0A%09with%3A%20%27Clear%20transcript%27%3B%0A%09onClick%3A%20%5Bself%20clear%5D%0A')}),
  636. smalltalk.Transcript);
  637. smalltalk.Transcript.klass.iVarNames = ['current'];
  638. smalltalk.addMethod(
  639. '_open',
  640. smalltalk.method({
  641. selector: 'open',
  642. category: 'instance creation',
  643. fn: function () {
  644. var self = this;
  645. self._current()._open();
  646. return self;
  647. },
  648. source: unescape('open%0A%20%20%20%20self%20current%20open%0A')}),
  649. smalltalk.Transcript.klass);
  650. smalltalk.addMethod(
  651. '_new',
  652. smalltalk.method({
  653. selector: 'new',
  654. category: 'instance creation',
  655. fn: function () {
  656. var self = this;
  657. self._shouldNotImplement();
  658. return self;
  659. },
  660. source: unescape('new%0A%20%20%20%20self%20shouldNotImplement%0A')}),
  661. smalltalk.Transcript.klass);
  662. smalltalk.addMethod(
  663. '_current',
  664. smalltalk.method({
  665. selector: 'current',
  666. category: 'instance creation',
  667. fn: function () {
  668. var self = this;
  669. return self['@current']._ifNil_(function () {return self['@current'] = self.klass.superclass.fn.prototype._new.apply(self, []);});
  670. return self;
  671. },
  672. source: unescape('current%0A%20%20%20%20%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D%0A')}),
  673. smalltalk.Transcript.klass);
  674. smalltalk.addMethod(
  675. '_show_',
  676. smalltalk.method({
  677. selector: 'show:',
  678. category: 'printing',
  679. fn: function (anObject) {
  680. var self = this;
  681. self._current()._show_(anObject);
  682. return self;
  683. },
  684. source: unescape('show%3A%20anObject%0A%20%20%20%20self%20current%20show%3A%20anObject%0A')}),
  685. smalltalk.Transcript.klass);
  686. smalltalk.addMethod(
  687. '_cr',
  688. smalltalk.method({
  689. selector: 'cr',
  690. category: 'printing',
  691. fn: function () {
  692. var self = this;
  693. self._current()._show_(smalltalk.String._cr());
  694. return self;
  695. },
  696. source: unescape('cr%0A%20%20%20%20self%20current%20show%3A%20String%20cr%0A')}),
  697. smalltalk.Transcript.klass);
  698. smalltalk.addMethod(
  699. '_clear',
  700. smalltalk.method({
  701. selector: 'clear',
  702. category: 'printing',
  703. fn: function () {
  704. var self = this;
  705. self._current()._clear();
  706. return self;
  707. },
  708. source: unescape('clear%0A%20%20%20%20self%20current%20clear%0A')}),
  709. smalltalk.Transcript.klass);
  710. smalltalk.addClass('Browser', smalltalk.TabWidget, ['selectedCategory', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'commitButton', 'categoriesList', 'classesList', 'protocolsList', 'methodsList', 'sourceTextarea', 'tabsList', 'selectedTab', 'saveButton', 'classButtons', 'methodButtons', 'unsavedChanges'], 'IDE');
  711. smalltalk.addMethod(
  712. '_initialize',
  713. smalltalk.method({
  714. selector: 'initialize',
  715. category: 'initialization',
  716. fn: function () {
  717. var self = this;
  718. self.klass.superclass.fn.prototype._initialize.apply(self, []);
  719. self['@selectedTab'] = "instance";
  720. self['@unsavedChanges'] = false;
  721. return self;
  722. },
  723. source: unescape('initialize%0A%20%20%20%20super%20initialize.%0A%20%20%20%20selectedTab%20%3A%3D%20%23instance.%0A%20%20%20%20unsavedChanges%20%3A%3D%20false%0A')}),
  724. smalltalk.Browser);
  725. smalltalk.addMethod(
  726. '_label',
  727. smalltalk.method({
  728. selector: 'label',
  729. category: 'accessing',
  730. fn: function () {
  731. var self = this;
  732. return self['@selectedClass']._ifNil_ifNotNil_(function () {return unescape("Browser%20%28nil%29");}, function () {return self['@selectedClass']._name();});
  733. return self;
  734. },
  735. source: unescape('label%0A%20%20%20%20%5EselectedClass%20%0A%09ifNil%3A%20%5B%27Browser%20%28nil%29%27%5D%0A%09ifNotNil%3A%20%5BselectedClass%20name%5D%0A')}),
  736. smalltalk.Browser);
  737. smalltalk.addMethod(
  738. '_categories',
  739. smalltalk.method({
  740. selector: 'categories',
  741. category: 'accessing',
  742. fn: function () {
  743. var self = this;
  744. var categories = nil;
  745. categories = smalltalk.Array._new();
  746. smalltalk.Smalltalk._current()._classes()._do_(function (each) {return categories._includes_(each._category())._ifFalse_(function () {return categories._add_(each._category());});});
  747. return categories._sort();
  748. return self;
  749. },
  750. source: unescape('categories%0A%20%20%20%20%7C%20categories%20%7C%0A%20%20%20%20categories%20%3A%3D%20Array%20new.%0A%20%20%20%20Smalltalk%20current%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%09%28categories%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%20%20%20%20categories%20add%3A%20each%20category%5D%5D.%0A%20%20%20%20%5Ecategories%20sort%0A')}),
  751. smalltalk.Browser);
  752. smalltalk.addMethod(
  753. '_classes',
  754. smalltalk.method({
  755. selector: 'classes',
  756. category: 'accessing',
  757. fn: function () {
  758. var self = this;
  759. return smalltalk.Smalltalk._current()._classes()._select_(function (each) {return each._category().__eq(self['@selectedCategory']);})._sort_(function (a, b) {return a._name().__gt(b._name());});
  760. return self;
  761. },
  762. source: unescape('classes%0A%20%20%20%20%5E%28Smalltalk%20current%20classes%20%0A%09select%3A%20%5B%3Aeach%20%7C%20each%20category%20%3D%20selectedCategory%5D%29%0A%09sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20name%20%3E%20b%20name%5D%0A')}),
  763. smalltalk.Browser);
  764. smalltalk.addMethod(
  765. '_protocols',
  766. smalltalk.method({
  767. selector: 'protocols',
  768. category: 'accessing',
  769. fn: function () {
  770. var self = this;
  771. try {
  772. var klass = nil;
  773. var protocols = nil;
  774. protocols = smalltalk.Array._new();
  775. self['@selectedClass']._ifNotNil_(function () {self['@selectedTab'].__eq("comment")._ifTrue_(function () {return function () {throw {name: "stReturn", selector: "_protocols", fn: function () {return [];}};}();});klass = self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_(function () {return self['@selectedClass'];}, function () {return self['@selectedClass']._class();});klass._methodDictionary()._isEmpty()._ifTrue_(function () {return protocols._add_("not yet classified");});return klass._methodDictionary()._do_(function (each) {return protocols._includes_(each._category())._ifFalse_(function () {return protocols._add_(each._category());});});});
  776. (function () {throw {name: "stReturn", selector: "_protocols", fn: function () {return protocols._sort();}};}());
  777. return self;
  778. } catch (e) {
  779. if (e.name === "stReturn" && e.selector === "_protocols") {
  780. return e.fn();
  781. }
  782. throw e;
  783. }
  784. },
  785. source: unescape('protocols%0A%20%20%20%20%7C%20klass%20protocols%20%7C%0A%20%20%20%20protocols%20%3A%3D%20Array%20new.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5B%5E%23%28%29%5D.%0A%09klass%20%3A%3D%20selectedTab%20%3D%20%23instance%0A%09%20%20%20%20ifTrue%3A%20%5BselectedClass%5D%0A%09%20%20%20%20ifFalse%3A%20%5BselectedClass%20class%5D.%0A%09klass%20methodDictionary%20isEmpty%20ifTrue%3A%20%5B%0A%09%20%20%20%20protocols%20add%3A%20%27not%20yet%20classified%27%5D.%0A%09klass%20methodDictionary%20do%3A%20%5B%3Aeach%20%7C%0A%09%20%20%20%20%28protocols%20includes%3A%20each%20category%29%20ifFalse%3A%20%5B%0A%09%09protocols%20add%3A%20each%20category%5D%5D%5D.%0A%20%20%20%20%5Eprotocols%20sort%0A')}),
  786. smalltalk.Browser);
  787. smalltalk.addMethod(
  788. '_methods',
  789. smalltalk.method({
  790. selector: 'methods',
  791. category: 'accessing',
  792. fn: function () {
  793. var self = this;
  794. try {
  795. var klass = nil;
  796. self['@selectedTab'].__eq("comment")._ifTrue_(function () {return function () {throw {name: "stReturn", selector: "_methods", fn: function () {return [];}};}();});
  797. self['@selectedClass']._ifNotNil_(function () {return klass = self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_(function () {return self['@selectedClass'];}, function () {return self['@selectedClass']._class();});});
  798. (function () {throw {name: "stReturn", selector: "_methods", fn: function () {return self['@selectedProtocol']._ifNil_ifNotNil_(function () {return klass._ifNil_ifNotNil_(function () {return [];}, function () {return klass._methodDictionary()._values();});}, function () {return klass._methodDictionary()._values()._select_(function (each) {return each._category().__eq(self['@selectedProtocol']);});})._sort_(function (a, b) {return a._selector().__gt(b._selector());});}};}());
  799. return self;
  800. } catch (e) {
  801. if (e.name === "stReturn" && e.selector === "_methods") {
  802. return e.fn();
  803. }
  804. throw e;
  805. }
  806. },
  807. source: unescape('methods%0A%20%20%20%20%7C%20klass%20%7C%0A%20%20%20%20selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5B%5E%23%28%29%5D.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09klass%20%3A%3D%20selectedTab%20%3D%20%23instance%0A%09%20%20%20%20ifTrue%3A%20%5BselectedClass%5D%0A%09%20%20%20%20ifFalse%3A%20%5BselectedClass%20class%5D%5D.%0A%20%20%20%20%5E%28selectedProtocol%20%0A%09ifNil%3A%20%5B%0A%09%20%20%20%20klass%20%0A%09%09ifNil%3A%20%5B%23%28%29%5D%20%0A%09%09ifNotNil%3A%20%5Bklass%20methodDictionary%20values%5D%5D%0A%09ifNotNil%3A%20%5B%0A%09%20%20%20%20klass%20methodDictionary%20values%20select%3A%20%5B%3Aeach%20%7C%0A%09%09each%20category%20%3D%20selectedProtocol%5D%5D%29%20sort%3A%20%5B%3Aa%20%3Ab%20%7C%20a%20selector%20%3E%20b%20selector%5D%0A')}),
  808. smalltalk.Browser);
  809. smalltalk.addMethod(
  810. '_source',
  811. smalltalk.method({
  812. selector: 'source',
  813. category: 'accessing',
  814. fn: function () {
  815. var self = this;
  816. try {
  817. self['@selectedTab'].__eq("comment")._ifFalse_(function () {return function () {throw {name: "stReturn", selector: "_source", fn: function () {return self['@selectedProtocol']._notNil()._or_(function () {return self['@selectedMethod']._notNil();})._ifFalse_ifTrue_(function () {return self._declarationSource();}, function () {return self._methodSource();});}};}();});
  818. (function () {throw {name: "stReturn", selector: "_source", fn: function () {return self['@selectedClass']._ifNil_ifNotNil_(function () {return "";}, function () {return self._classCommentSource();});}};}());
  819. return self;
  820. } catch (e) {
  821. if (e.name === "stReturn" && e.selector === "_source") {
  822. return e.fn();
  823. }
  824. throw e;
  825. }
  826. },
  827. source: unescape('source%0A%20%20%20%20selectedTab%20%3D%20%23comment%20ifFalse%3A%20%5B%0A%09%5E%28selectedProtocol%20notNil%20or%3A%20%5BselectedMethod%20notNil%5D%29%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20declarationSource%5D%0A%09%20%20%20%20ifTrue%3A%20%5Bself%20methodSource%5D%5D.%0A%20%20%20%20%5EselectedClass%0A%09ifNil%3A%20%5B%27%27%5D%0A%09ifNotNil%3A%20%5Bself%20classCommentSource%5D%0A')}),
  828. smalltalk.Browser);
  829. smalltalk.addMethod(
  830. '_methodSource',
  831. smalltalk.method({
  832. selector: 'methodSource',
  833. category: 'accessing',
  834. fn: function () {
  835. var self = this;
  836. return self['@selectedMethod']._ifNil_ifNotNil_(function () {return self._dummyMethodSource();}, function () {return self['@selectedMethod']._source();});
  837. return self;
  838. },
  839. source: unescape('methodSource%0A%20%20%20%20%5EselectedMethod%0A%09ifNil%3A%20%5Bself%20dummyMethodSource%5D%0A%09ifNotNil%3A%20%5BselectedMethod%20source%5D%0A')}),
  840. smalltalk.Browser);
  841. smalltalk.addMethod(
  842. '_dummyMethodSource',
  843. smalltalk.method({
  844. selector: 'dummyMethodSource',
  845. category: 'accessing',
  846. fn: function () {
  847. var self = this;
  848. return unescape("messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements");
  849. return self;
  850. },
  851. source: unescape('dummyMethodSource%0A%20%20%20%20%5E%27messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements%27%0A')}),
  852. smalltalk.Browser);
  853. smalltalk.addMethod(
  854. '_declarationSource',
  855. smalltalk.method({
  856. selector: 'declarationSource',
  857. category: 'accessing',
  858. fn: function () {
  859. var self = this;
  860. return self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_(function () {return self._classDeclarationSource();}, function () {return self._metaclassDeclarationSource();});
  861. return self;
  862. },
  863. source: unescape('declarationSource%0A%20%20%20%20%5EselectedTab%20%3D%20%23instance%0A%09ifTrue%3A%20%5Bself%20classDeclarationSource%5D%0A%09ifFalse%3A%20%5Bself%20metaclassDeclarationSource%5D%0A')}),
  864. smalltalk.Browser);
  865. smalltalk.addMethod(
  866. '_classDeclarationSource',
  867. smalltalk.method({
  868. selector: 'classDeclarationSource',
  869. category: 'accessing',
  870. fn: function () {
  871. var self = this;
  872. var stream = nil;
  873. stream = ""._writeStream();
  874. self['@selectedClass']._ifNotNil_(function () {(function ($rec) {$rec._nextPutAll_(self['@selectedClass']._superclass()._asString());$rec._nextPutAll_(unescape("%20subclass%3A%20%23"));$rec._nextPutAll_(self['@selectedClass']._name());$rec._nextPutAll_(smalltalk.String._cr().__comma(smalltalk.String._tab()));return $rec._nextPutAll_(unescape("instanceVariableNames%3A%20%27"));}(stream));self['@selectedClass']._instanceVariableNames()._do_separatedBy_(function (each) {return stream._nextPutAll_(each);}, function () {return stream._nextPutAll_(" ");});return function ($rec) {$rec._nextPutAll_(unescape("%27").__comma(smalltalk.String._cr()).__comma(smalltalk.String._tab()));$rec._nextPutAll_(unescape("category%3A%20%27"));$rec._nextPutAll_(self['@selectedClass']._category());return $rec._nextPutAll_(unescape("%27"));}(stream);});
  875. return stream._contents();
  876. return self;
  877. },
  878. source: unescape('classDeclarationSource%0A%20%20%20%20%7C%20stream%20%7C%0A%20%20%20%20stream%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20superclass%20asString%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20subclass%3A%20%23%27%3B%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20name%3B%0A%09%20%20%20%20nextPutAll%3A%20String%20cr%2C%20String%20tab%3B%0A%09%20%20%20%20nextPutAll%3A%20%27instanceVariableNames%3A%20%27%27%27.%0A%09selectedClass%20instanceVariableNames%20%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%5D%20%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%20%27%5D.%0A%09stream%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%2C%20String%20cr%2C%20String%20tab%3B%0A%09%20%20%20%20nextPutAll%3A%20%27category%3A%20%27%27%27%3B%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20category%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%27%27%27%5D.%0A%20%20%20%20%5Estream%20contents%0A')}),
  879. smalltalk.Browser);
  880. smalltalk.addMethod(
  881. '_metaclassDeclarationSource',
  882. smalltalk.method({
  883. selector: 'metaclassDeclarationSource',
  884. category: 'accessing',
  885. fn: function () {
  886. var self = this;
  887. var stream = nil;
  888. stream = ""._writeStream();
  889. self['@selectedClass']._ifNotNil_(function () {(function ($rec) {$rec._nextPutAll_(self['@selectedClass']._asString());$rec._nextPutAll_(" class ");return $rec._nextPutAll_(unescape("instanceVariableNames%3A%20%27"));}(stream));self['@selectedClass']._class()._instanceVariableNames()._do_separatedBy_(function (each) {return stream._nextPutAll_(each);}, function () {return stream._nextPutAll_(" ");});return stream._nextPutAll_(unescape("%27"));});
  890. return stream._contents();
  891. return self;
  892. },
  893. source: unescape('metaclassDeclarationSource%0A%20%20%20%20%7C%20stream%20%7C%0A%20%20%20%20stream%20%3A%3D%20%27%27%20writeStream.%0A%20%20%20%20selectedClass%20ifNotNil%3A%20%5B%0A%09stream%20%0A%09%20%20%20%20nextPutAll%3A%20selectedClass%20asString%3B%0A%09%20%20%20%20nextPutAll%3A%20%27%20class%20%27%3B%0A%09%20%20%20%20nextPutAll%3A%20%27instanceVariableNames%3A%20%27%27%27.%0A%09selectedClass%20class%20instanceVariableNames%0A%09%20%20%20%20do%3A%20%5B%3Aeach%20%7C%20stream%20nextPutAll%3A%20each%5D%0A%09%20%20%20%20separatedBy%3A%20%5Bstream%20nextPutAll%3A%20%27%20%27%5D.%0A%09stream%20nextPutAll%3A%20%27%27%27%27%5D.%0A%20%20%20%20%5Estream%20contents%0A')}),
  894. smalltalk.Browser);
  895. smalltalk.addMethod(
  896. '_classCommentSource',
  897. smalltalk.method({
  898. selector: 'classCommentSource',
  899. category: 'accessing',
  900. fn: function () {
  901. var self = this;
  902. return self['@selectedClass']._comment();
  903. return self;
  904. },
  905. source: unescape('classCommentSource%0A%20%20%20%20%5EselectedClass%20comment%0A')}),
  906. smalltalk.Browser);
  907. smalltalk.addMethod(
  908. '_enableSaveButton',
  909. smalltalk.method({
  910. selector: 'enableSaveButton',
  911. category: 'actions',
  912. fn: function () {
  913. var self = this;
  914. self['@saveButton']._removeAt_("disabled");
  915. self['@unsavedChanges'] = true;
  916. return self;
  917. },
  918. source: unescape('enableSaveButton%0A%20%20%20%20saveButton%20removeAt%3A%20%27disabled%27.%0A%20%20%20%20unsavedChanges%20%3A%3D%20true%0A')}),
  919. smalltalk.Browser);
  920. smalltalk.addMethod(
  921. '_disableSaveButton',
  922. smalltalk.method({
  923. selector: 'disableSaveButton',
  924. category: 'actions',
  925. fn: function () {
  926. var self = this;
  927. self['@saveButton']._ifNotNil_(function () {return self['@saveButton']._at_put_("disabled", true);});
  928. self['@unsavedChanges'] = false;
  929. return self;
  930. },
  931. source: unescape('disableSaveButton%0A%20%20%20%20saveButton%20ifNotNil%3A%20%5B%0A%09saveButton%20at%3A%20%27disabled%27%20put%3A%20true%5D.%0A%20%20%20%20unsavedChanges%20%3A%3D%20false%0A')}),
  932. smalltalk.Browser);
  933. smalltalk.addMethod(
  934. '_hideClassButtons',
  935. smalltalk.method({
  936. selector: 'hideClassButtons',
  937. category: 'actions',
  938. fn: function () {
  939. var self = this;
  940. self['@classButtons']._asJQuery()._hide();
  941. return self;
  942. },
  943. source: unescape('hideClassButtons%0A%20%20%20%20classButtons%20asJQuery%20hide%0A')}),
  944. smalltalk.Browser);
  945. smalltalk.addMethod(
  946. '_showClassButtons',
  947. smalltalk.method({
  948. selector: 'showClassButtons',
  949. category: 'actions',
  950. fn: function () {
  951. var self = this;
  952. self['@classButtons']._asJQuery()._show();
  953. return self;
  954. },
  955. source: unescape('showClassButtons%0A%20%20%20%20classButtons%20asJQuery%20show%0A')}),
  956. smalltalk.Browser);
  957. smalltalk.addMethod(
  958. '_hideMethodButtons',
  959. smalltalk.method({
  960. selector: 'hideMethodButtons',
  961. category: 'actions',
  962. fn: function () {
  963. var self = this;
  964. self['@methodButtons']._asJQuery()._hide();
  965. return self;
  966. },
  967. source: unescape('hideMethodButtons%0A%20%20%20%20methodButtons%20asJQuery%20hide%0A')}),
  968. smalltalk.Browser);
  969. smalltalk.addMethod(
  970. '_showMethodButtons',
  971. smalltalk.method({
  972. selector: 'showMethodButtons',
  973. category: 'actions',
  974. fn: function () {
  975. var self = this;
  976. self['@methodButtons']._asJQuery()._show();
  977. return self;
  978. },
  979. source: unescape('showMethodButtons%0A%20%20%20%20methodButtons%20asJQuery%20show%0A')}),
  980. smalltalk.Browser);
  981. smalltalk.addMethod(
  982. '_compile',
  983. smalltalk.method({
  984. selector: 'compile',
  985. category: 'actions',
  986. fn: function () {
  987. var self = this;
  988. self._disableSaveButton();
  989. self['@selectedTab'].__eq("comment")._ifTrue_(function () {return self['@selectedClass']._ifNotNil_(function () {return self._compileClassComment();});});
  990. self['@selectedProtocol']._notNil()._or_(function () {return self['@selectedMethod']._notNil();})._ifFalse_ifTrue_(function () {return self._compileDefinition();}, function () {return self._compileMethodDefinition();});
  991. return self;
  992. },
  993. source: unescape('compile%0A%20%20%20%20self%20disableSaveButton.%0A%20%20%20%20selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5B%0A%09selectedClass%20ifNotNil%3A%20%5B%0A%09%20%20%20%20self%20compileClassComment%5D%5D.%0A%20%20%20%20%28selectedProtocol%20notNil%20or%3A%20%5BselectedMethod%20notNil%5D%29%0A%09ifFalse%3A%20%5Bself%20compileDefinition%5D%0A%09ifTrue%3A%20%5Bself%20compileMethodDefinition%5D%0A')}),
  994. smalltalk.Browser);
  995. smalltalk.addMethod(
  996. '_compileClassComment',
  997. smalltalk.method({
  998. selector: 'compileClassComment',
  999. category: 'actions',
  1000. fn: function () {
  1001. var self = this;
  1002. self['@selectedClass']._comment_(self['@sourceTextarea']._asJQuery()._val());
  1003. return self;
  1004. },
  1005. source: unescape('compileClassComment%0A%20%20%20%20selectedClass%20comment%3A%20sourceTextarea%20asJQuery%20val%0A')}),
  1006. smalltalk.Browser);
  1007. smalltalk.addMethod(
  1008. '_compileMethodDefinition',
  1009. smalltalk.method({
  1010. selector: 'compileMethodDefinition',
  1011. category: 'actions',
  1012. fn: function () {
  1013. var self = this;
  1014. self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_(function () {return self._compileMethodDefinitionFor_(self['@selectedClass']);}, function () {return self._compileMethodDefinitionFor_(self['@selectedClass']._class());});
  1015. return self;
  1016. },
  1017. source: unescape('compileMethodDefinition%0A%20%20%20%20selectedTab%20%3D%20%23instance%0A%09ifTrue%3A%20%5Bself%20compileMethodDefinitionFor%3A%20selectedClass%5D%0A%09ifFalse%3A%20%5Bself%20compileMethodDefinitionFor%3A%20selectedClass%20class%5D%0A')}),
  1018. smalltalk.Browser);
  1019. smalltalk.addMethod(
  1020. '_compileMethodDefinitionFor_',
  1021. smalltalk.method({
  1022. selector: 'compileMethodDefinitionFor:',
  1023. category: 'actions',
  1024. fn: function (aClass) {
  1025. var self = this;
  1026. try {
  1027. var compiler = nil;
  1028. var method = nil;
  1029. var source = nil;
  1030. var node = nil;
  1031. source = self['@sourceTextarea']._asJQuery()._val();
  1032. self['@selectedProtocol']._ifNil_(function () {return self['@selectedProtocol'] = self['@selectedMethod']._category();});
  1033. compiler = smalltalk.Compiler._new();
  1034. node = compiler._parse_(source);
  1035. node._isParseFailure()._ifTrue_(function () {return function () {throw {name: "stReturn", selector: "_compileMethodDefinitionFor_", fn: function () {return self._alert_("PARSE ERROR: ".__comma(node._reason()).__comma(unescape("%2C%20position%3A%20")).__comma(node._position()._asString()));}};}();});
  1036. compiler._currentClass_(self['@selectedClass']);
  1037. method = compiler._eval_(compiler._compileNode_(node));
  1038. method._category_(self['@selectedProtocol']);
  1039. aClass._addCompiledMethod_(method);
  1040. self._updateMethodsList();
  1041. self._selectMethod_(method);
  1042. return self;
  1043. } catch (e) {
  1044. if (e.name === "stReturn" &&
  1045. e.selector === "_compileMethodDefinitionFor_") {
  1046. return e.fn();
  1047. }
  1048. throw e;
  1049. }
  1050. },
  1051. source: unescape('compileMethodDefinitionFor%3A%20aClass%0A%20%20%20%20%7C%20compiler%20method%20source%20node%20%7C%0A%20%20%20%20source%20%3A%3D%20sourceTextarea%20asJQuery%20val.%0A%20%20%20%20selectedProtocol%20ifNil%3A%20%5BselectedProtocol%20%3A%3D%20selectedMethod%20category%5D.%0A%20%20%20%20compiler%20%3A%3D%20Compiler%20new.%0A%20%20%20%20node%20%3A%3D%20compiler%20parse%3A%20source.%0A%20%20%20%20node%20isParseFailure%20ifTrue%3A%20%5B%0A%09%5Eself%20alert%3A%20%27PARSE%20ERROR%3A%20%27%2C%20node%20reason%2C%20%27%2C%20position%3A%20%27%2C%20node%20position%20asString%5D.%0A%20%20%20%20compiler%20currentClass%3A%20selectedClass.%0A%20%20%20%20method%20%3A%3D%20compiler%20eval%3A%20%28compiler%20compileNode%3A%20node%29.%0A%20%20%20%20method%20category%3A%20selectedProtocol.%0A%20%20%20%20aClass%20addCompiledMethod%3A%20method.%0A%20%20%20%20self%20updateMethodsList.%0A%20%20%20%20self%20selectMethod%3A%20method%0A')}),
  1052. smalltalk.Browser);
  1053. smalltalk.addMethod(
  1054. '_compileDefinition',
  1055. smalltalk.method({
  1056. selector: 'compileDefinition',
  1057. category: 'actions',
  1058. fn: function () {
  1059. var self = this;
  1060. var newClass = nil;
  1061. newClass = smalltalk.Compiler._new()._loadExpression_(self['@sourceTextarea']._asJQuery()._val());
  1062. (function ($rec) {$rec._updateCategoriesList();return $rec._updateClassesList();}(self));
  1063. return self;
  1064. },
  1065. source: unescape('compileDefinition%0A%20%20%20%20%7C%20newClass%20%7C%0A%20%20%20%20newClass%20%3A%3D%20Compiler%20new%20loadExpression%3A%20sourceTextarea%20asJQuery%20val.%0A%20%20%20%20self%20%0A%09updateCategoriesList%3B%0A%09updateClassesList%0A')}),
  1066. smalltalk.Browser);
  1067. smalltalk.addMethod(
  1068. '_commitCategory',
  1069. smalltalk.method({
  1070. selector: 'commitCategory',
  1071. category: 'actions',
  1072. fn: function () {
  1073. var self = this;
  1074. self['@selectedCategory']._ifNotNil_(function () {return function ($rec) {$rec._at_put_("type", "PUT");$rec._at_put_("data", smalltalk.Exporter._new()._exportCategory_(self['@selectedCategory']));$rec._at_put_("error", function () {return self._alert_(unescape("Commit%20failed%21"));});return $rec._send();}(smalltalk.Ajax._url_(self._class()._commitPath().__comma(unescape("/")).__comma(self['@selectedCategory']).__comma(".js")));});
  1075. return self;
  1076. },
  1077. source: unescape('commitCategory%0A%20%20%20%20selectedCategory%20ifNotNil%3A%20%5B%0A%09%28Ajax%20url%3A%20self%20class%20commitPath%2C%20%27/%27%2C%20selectedCategory%2C%20%27.js%27%29%0A%09%20%20%20%20at%3A%20%27type%27%20put%3A%20%27PUT%27%3B%0A%09%20%20%20%20at%3A%20%27data%27%20put%3A%20%28Exporter%20new%20exportCategory%3A%20selectedCategory%29%3B%0A%09%20%20%20%20at%3A%20%27error%27%20put%3A%20%5Bself%20alert%3A%20%27Commit%20failed%21%27%5D%3B%0A%09%20%20%20%20send%5D%0A')}),
  1078. smalltalk.Browser);
  1079. smalltalk.addMethod(
  1080. '_cancelChanges',
  1081. smalltalk.method({
  1082. selector: 'cancelChanges',
  1083. category: 'actions',
  1084. fn: function () {
  1085. var self = this;
  1086. return self['@unsavedChanges']._ifTrue_ifFalse_(function () {return self._confirm_(unescape("Cancel%20changes%3F"));}, function () {return true;});
  1087. return self;
  1088. },
  1089. source: unescape('cancelChanges%0A%20%20%20%20%5EunsavedChanges%20%0A%09ifTrue%3A%20%5Bself%20confirm%3A%20%27Cancel%20changes%3F%27%5D%0A%09ifFalse%3A%20%5Btrue%5D%0A')}),
  1090. smalltalk.Browser);
  1091. smalltalk.addMethod(
  1092. '_removeClass',
  1093. smalltalk.method({
  1094. selector: 'removeClass',
  1095. category: 'actions',
  1096. fn: function () {
  1097. var self = this;
  1098. self._confirm_("Do you really want to remove ".__comma(self['@selectedClass']._name()).__comma(unescape("%3F")))._ifTrue_(function () {smalltalk.Smalltalk._current()._basicDelete_(self['@selectedClass']._name());return self._selectClass_(nil);});
  1099. return self;
  1100. },
  1101. source: unescape('removeClass%0A%20%20%20%20%28self%20confirm%3A%20%27Do%20you%20really%20want%20to%20remove%20%27%2C%20selectedClass%20name%2C%20%27%3F%27%29%0A%09ifTrue%3A%20%5B%0A%09%20%20%20%20Smalltalk%20current%20basicDelete%3A%20selectedClass%20name.%0A%09%20%20%20%20self%20selectClass%3A%20nil%5D%0A')}),
  1102. smalltalk.Browser);
  1103. smalltalk.addMethod(
  1104. '_removeMethod',
  1105. smalltalk.method({
  1106. selector: 'removeMethod',
  1107. category: 'actions',
  1108. fn: function () {
  1109. var self = this;
  1110. self._cancelChanges()._ifTrue_(function () {return self._confirm_(unescape("Do%20you%20really%20want%20to%20remove%20%23").__comma(self['@selectedMethod']._selector()).__comma(unescape("%3F")))._ifTrue_(function () {self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_(function () {return self['@selectedClass']._removeCompiledMethod_(self['@selectedMethod']);}, function () {return self['@selectedClass']._class()._removeCompiledMethod_(self['@selectedMethod']);});return self._selectMethod_(nil);});});
  1111. return self;
  1112. },
  1113. source: unescape('removeMethod%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09%28self%20confirm%3A%20%27Do%20you%20really%20want%20to%20remove%20%23%27%2C%20selectedMethod%20selector%2C%20%27%3F%27%29%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09selectedTab%20%3D%20%23instance%20%0A%09%09%09ifTrue%3A%20%5BselectedClass%20removeCompiledMethod%3A%20selectedMethod%5D%0A%09%09%09ifFalse%3A%20%5BselectedClass%20class%20removeCompiledMethod%3A%20selectedMethod%5D.%0A%09%09self%20selectMethod%3A%20nil%5D%5D%0A')}),
  1114. smalltalk.Browser);
  1115. smalltalk.addMethod(
  1116. '_setMethodProtocol_',
  1117. smalltalk.method({
  1118. selector: 'setMethodProtocol:',
  1119. category: 'actions',
  1120. fn: function (aString) {
  1121. var self = this;
  1122. self._cancelChanges()._ifTrue_(function () {return self._protocols()._includes_(aString)._ifFalse_ifTrue_(function () {return self._addNewProtocol();}, function () {self['@selectedMethod']._category_(aString);self['@selectedProtocol'] = aString;self['@selectedMethod'] = self['@selectedMethod'];return function ($rec) {$rec._updateProtocolsList();$rec._updateMethodsList();return $rec._updateSourceAndButtons();}(self);});});
  1123. return self;
  1124. },
  1125. source: unescape('setMethodProtocol%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09%28self%20protocols%20includes%3A%20aString%29%0A%09%20%20%20%20ifFalse%3A%20%5Bself%20addNewProtocol%5D%0A%09%20%20%20%20ifTrue%3A%20%5B%0A%09%09selectedMethod%20category%3A%20aString.%0A%09%09selectedProtocol%20%3A%3D%20aString.%0A%09%09selectedMethod%20%3A%3D%20selectedMethod.%0A%09%09self%20%0A%09%09%20%20%20%20updateProtocolsList%3B%0A%09%09%20%20%20%20updateMethodsList%3B%0A%09%09%20%20%20%20updateSourceAndButtons%5D%5D%0A')}),
  1126. smalltalk.Browser);
  1127. smalltalk.addMethod(
  1128. '_addNewProtocol',
  1129. smalltalk.method({
  1130. selector: 'addNewProtocol',
  1131. category: 'actions',
  1132. fn: function () {
  1133. var self = this;
  1134. var newProtocol = nil;
  1135. newProtocol = self._prompt_("New method protocol");
  1136. newProtocol._notEmpty()._ifTrue_(function () {self['@selectedMethod']._category_(newProtocol);return self._setMethodProtocol_(newProtocol);});
  1137. return self;
  1138. },
  1139. source: unescape('addNewProtocol%0A%20%20%20%20%7C%20newProtocol%20%7C%0A%20%20%20%20newProtocol%20%3A%3D%20self%20prompt%3A%20%27New%20method%20protocol%27.%0A%20%20%20%20newProtocol%20notEmpty%20ifTrue%3A%20%5B%0A%09selectedMethod%20category%3A%20newProtocol.%0A%09self%20setMethodProtocol%3A%20newProtocol%5D%0A')}),
  1140. smalltalk.Browser);
  1141. smalltalk.addMethod(
  1142. '_selectCategory_',
  1143. smalltalk.method({
  1144. selector: 'selectCategory:',
  1145. category: 'actions',
  1146. fn: function (aCategory) {
  1147. var self = this;
  1148. self._cancelChanges()._ifTrue_(function () {self['@selectedCategory'] = aCategory;self['@selectedClass'] = self['@selectedProtocol'] = self['@selectedMethod'] = nil;return function ($rec) {$rec._updateCategoriesList();$rec._updateClassesList();$rec._updateProtocolsList();$rec._updateMethodsList();return $rec._updateSourceAndButtons();}(self);});
  1149. return self;
  1150. },
  1151. source: unescape('selectCategory%3A%20aCategory%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedCategory%20%3A%3D%20aCategory.%0A%09selectedClass%20%3A%3D%20selectedProtocol%20%3A%3D%20selectedMethod%20%3A%3D%20%20nil.%0A%09self%20%0A%09%20%20%20%20updateCategoriesList%3B%0A%09%20%20%20%20updateClassesList%3B%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D%0A')}),
  1152. smalltalk.Browser);
  1153. smalltalk.addMethod(
  1154. '_selectClass_',
  1155. smalltalk.method({
  1156. selector: 'selectClass:',
  1157. category: 'actions',
  1158. fn: function (aClass) {
  1159. var self = this;
  1160. self._cancelChanges()._ifTrue_(function () {self['@selectedClass'] = aClass;self['@selectedProtocol'] = self['@selectedMethod'] = nil;return function ($rec) {$rec._updateClassesList();$rec._updateProtocolsList();$rec._updateMethodsList();return $rec._updateSourceAndButtons();}(self);});
  1161. return self;
  1162. },
  1163. source: unescape('selectClass%3A%20aClass%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedClass%20%3A%3D%20aClass.%0A%09selectedProtocol%20%3A%3D%20selectedMethod%20%3A%3D%20nil.%0A%09self%20%0A%09%20%20%20%20updateClassesList%3B%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D%0A')}),
  1164. smalltalk.Browser);
  1165. smalltalk.addMethod(
  1166. '_selectProtocol_',
  1167. smalltalk.method({
  1168. selector: 'selectProtocol:',
  1169. category: 'actions',
  1170. fn: function (aString) {
  1171. var self = this;
  1172. self._cancelChanges()._ifTrue_(function () {self['@selectedProtocol'] = aString;self['@selectedMethod'] = nil;return function ($rec) {$rec._updateProtocolsList();$rec._updateMethodsList();return $rec._updateSourceAndButtons();}(self);});
  1173. return self;
  1174. },
  1175. source: unescape('selectProtocol%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedProtocol%20%3A%3D%20aString.%0A%09selectedMethod%20%3A%3D%20nil.%0A%09self%20%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D%0A')}),
  1176. smalltalk.Browser);
  1177. smalltalk.addMethod(
  1178. '_selectMethod_',
  1179. smalltalk.method({
  1180. selector: 'selectMethod:',
  1181. category: 'actions',
  1182. fn: function (aMethod) {
  1183. var self = this;
  1184. self._cancelChanges()._ifTrue_(function () {self['@selectedMethod'] = aMethod;return function ($rec) {$rec._updateProtocolsList();$rec._updateMethodsList();return $rec._updateSourceAndButtons();}(self);});
  1185. return self;
  1186. },
  1187. source: unescape('selectMethod%3A%20aMethod%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedMethod%20%3A%3D%20aMethod.%0A%09self%20%0A%09%20%20%20%20updateProtocolsList%3B%0A%09%20%20%20%20updateMethodsList%3B%0A%09%20%20%20%20updateSourceAndButtons%5D%0A')}),
  1188. smalltalk.Browser);
  1189. smalltalk.addMethod(
  1190. '_selectTab_',
  1191. smalltalk.method({
  1192. selector: 'selectTab:',
  1193. category: 'actions',
  1194. fn: function (aString) {
  1195. var self = this;
  1196. self._cancelChanges()._ifTrue_(function () {self['@selectedTab'] = aString;self._selectProtocol_(nil);return self._updateTabsList();});
  1197. return self;
  1198. },
  1199. source: unescape('selectTab%3A%20aString%0A%20%20%20%20self%20cancelChanges%20ifTrue%3A%20%5B%0A%09selectedTab%20%3A%3D%20aString.%0A%09self%20selectProtocol%3A%20nil.%0A%09self%20updateTabsList%5D%0A')}),
  1200. smalltalk.Browser);
  1201. smalltalk.addMethod(
  1202. '_renderBoxOn_',
  1203. smalltalk.method({
  1204. selector: 'renderBoxOn:',
  1205. category: 'rendering',
  1206. fn: function (html) {
  1207. var self = this;
  1208. (function ($rec) {$rec._renderTopPanelOn_(html);$rec._renderTabsOn_(html);return $rec._renderBottomPanelOn_(html);}(self));
  1209. return self;
  1210. },
  1211. source: unescape('renderBoxOn%3A%20html%0A%20%20%20%20self%20%0A%09renderTopPanelOn%3A%20html%3B%0A%09renderTabsOn%3A%20html%3B%0A%09renderBottomPanelOn%3A%20html%0A')}),
  1212. smalltalk.Browser);
  1213. smalltalk.addMethod(
  1214. '_renderTopPanelOn_',
  1215. smalltalk.method({
  1216. selector: 'renderTopPanelOn:',
  1217. category: 'rendering',
  1218. fn: function (html) {
  1219. var self = this;
  1220. (function ($rec) {$rec._class_("top");return $rec._with_(function () {self['@categoriesList'] = html._ul()._class_("jt_column categories");self['@commitButton'] = function ($rec) {$rec._class_("jt_commit");$rec._title_("Commit classes in this category to disk");$rec._onClick_(function () {return self._commitCategory();});return $rec._with_("Commit category");}(html._button());self['@classesList'] = html._ul()._class_("jt_column classes");self['@protocolsList'] = html._ul()._class_("jt_column protocols");self['@methodsList'] = html._ul()._class_("jt_column methods");(function ($rec) {$rec._updateCategoriesList();$rec._updateClassesList();$rec._updateProtocolsList();return $rec._updateMethodsList();}(self));return html._div()._class_("jt_clear");});}(html._div()));
  1221. return self;
  1222. },
  1223. source: unescape('renderTopPanelOn%3A%20html%0A%20%20%20%20html%20div%20%0A%09class%3A%20%27top%27%3B%20%0A%09with%3A%20%5B%0A%09%20%20%20%20categoriesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20categories%27.%0A%09%20%20%20%20commitButton%20%3A%3D%20html%20button%20%0A%09%09class%3A%20%27jt_commit%27%3B%0A%09%09title%3A%20%27Commit%20classes%20in%20this%20category%20to%20disk%27%3B%0A%09%09onClick%3A%20%5Bself%20commitCategory%5D%3B%0A%09%09with%3A%20%27Commit%20category%27.%0A%09%20%20%20%20classesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20classes%27.%0A%09%20%20%20%20protocolsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20protocols%27.%0A%09%20%20%20%20methodsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20methods%27.%0A%09%20%20%20%20self%0A%09%09updateCategoriesList%3B%0A%09%09updateClassesList%3B%0A%09%09updateProtocolsList%3B%0A%09%09updateMethodsList.%0A%09%20%20%20%20html%20div%20class%3A%20%27jt_clear%27%5D%0A')}),
  1224. smalltalk.Browser);
  1225. smalltalk.addMethod(
  1226. '_renderTabsOn_',
  1227. smalltalk.method({
  1228. selector: 'renderTabsOn:',
  1229. category: 'rendering',
  1230. fn: function (html) {
  1231. var self = this;
  1232. self['@tabsList'] = html._ul()._class_("jt_tabs");
  1233. self._updateTabsList();
  1234. return self;
  1235. },
  1236. source: unescape('renderTabsOn%3A%20html%0A%20%20%20%20tabsList%20%3A%3D%20html%20ul%20class%3A%20%27jt_tabs%27.%0A%20%20%20%20self%20updateTabsList.%0A')}),
  1237. smalltalk.Browser);
  1238. smalltalk.addMethod(
  1239. '_renderBottomPanelOn_',
  1240. smalltalk.method({
  1241. selector: 'renderBottomPanelOn:',
  1242. category: 'rendering',
  1243. fn: function (html) {
  1244. var self = this;
  1245. (function ($rec) {$rec._class_("jt_sourceCode");return $rec._with_(function () {self['@sourceTextarea'] = function ($rec) {$rec._onKeyPress_(function () {return self._enableSaveButton();});$rec._class_("source");return $rec._at_put_("spellcheck", "false");}(html._textarea());return self['@sourceTextarea']._asJQuery()._call_("tabby");});}(html._div()));
  1246. return self;
  1247. },
  1248. source: unescape('renderBottomPanelOn%3A%20html%0A%20%20%20%20html%20div%0A%09class%3A%20%27jt_sourceCode%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20sourceTextarea%20%3A%3D%20html%20textarea%20%0A%09%09onKeyPress%3A%20%5Bself%20enableSaveButton%5D%3B%0A%09%09class%3A%20%27source%27%3B%0A%09%09at%3A%20%27spellcheck%27%20put%3A%20%27false%27.%0A%09%20%20%20%20sourceTextarea%20asJQuery%20call%3A%20%27tabby%27%5D%0A')}),
  1249. smalltalk.Browser);
  1250. smalltalk.addMethod(
  1251. '_renderButtonsOn_',
  1252. smalltalk.method({
  1253. selector: 'renderButtonsOn:',
  1254. category: 'rendering',
  1255. fn: function (html) {
  1256. var self = this;
  1257. self['@saveButton'] = html._button();
  1258. (function ($rec) {$rec._with_("Save");return $rec._onClick_(function () {return self._compile();});}(self['@saveButton']));
  1259. self['@methodButtons'] = html._span();
  1260. self['@classButtons'] = html._span();
  1261. self._updateSourceAndButtons();
  1262. return self;
  1263. },
  1264. source: unescape('renderButtonsOn%3A%20html%0A%20%20%20%20saveButton%20%3A%3D%20html%20button.%0A%20%20%20%20saveButton%20%0A%09with%3A%20%27Save%27%3B%0A%09onClick%3A%20%5Bself%20compile%5D.%0A%20%20%20%20methodButtons%20%3A%3D%20html%20span.%0A%20%20%20%20classButtons%20%3A%3D%20html%20span.%0A%20%20%20%20self%20updateSourceAndButtons%0A')}),
  1265. smalltalk.Browser);
  1266. smalltalk.addMethod(
  1267. '_updateCategoriesList',
  1268. smalltalk.method({
  1269. selector: 'updateCategoriesList',
  1270. category: 'updating',
  1271. fn: function () {
  1272. var self = this;
  1273. self['@categoriesList']._contents_(function (html) {return self._categories()._do_(function (each) {var li = nil;li = html._li();self['@selectedCategory'].__eq(each)._ifTrue_(function () {return li._class_("selected");});return function ($rec) {$rec._with_(each);return $rec._onClick_(function () {return self._selectCategory_(each);});}(li);});});
  1274. return self;
  1275. },
  1276. source: unescape('updateCategoriesList%0A%20%20%20%20categoriesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09self%20categories%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%20%20%20%20li%20%3A%3D%20html%20li.%0A%09%20%20%20%20selectedCategory%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%0A%09%09with%3A%20each%3B%0A%09%09onClick%3A%20%5Bself%20selectCategory%3A%20each%5D%5D%5D%0A')}),
  1277. smalltalk.Browser);
  1278. smalltalk.addMethod(
  1279. '_updateClassesList',
  1280. smalltalk.method({
  1281. selector: 'updateClassesList',
  1282. category: 'updating',
  1283. fn: function () {
  1284. var self = this;
  1285. smalltalk.TabManager._current()._update();
  1286. self['@classesList']._contents_(function (html) {return self._classes()._do_(function (each) {var li = nil;li = html._li();self['@selectedClass'].__eq(each)._ifTrue_(function () {return li._class_("selected");});return function ($rec) {$rec._with_(each._name());return $rec._onClick_(function () {return self._selectClass_(each);});}(li);});});
  1287. return self;
  1288. },
  1289. source: unescape('updateClassesList%0A%20%20%20%20TabManager%20current%20update.%0A%20%20%20%20classesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09self%20classes%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%20%20%20%20li%20%3A%3D%20html%20li.%0A%09%20%20%20%20selectedClass%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%0A%09%09with%3A%20each%20name%3B%0A%09%09onClick%3A%20%5Bself%20selectClass%3A%20each%5D%5D%5D%0A')}),
  1290. smalltalk.Browser);
  1291. smalltalk.addMethod(
  1292. '_updateProtocolsList',
  1293. smalltalk.method({
  1294. selector: 'updateProtocolsList',
  1295. category: 'updating',
  1296. fn: function () {
  1297. var self = this;
  1298. self['@protocolsList']._contents_(function (html) {return self._protocols()._do_(function (each) {var li = nil;li = html._li();self['@selectedProtocol'].__eq(each)._ifTrue_(function () {return li._class_("selected");});return function ($rec) {$rec._with_(each);return $rec._onClick_(function () {return self._selectProtocol_(each);});}(li);});});
  1299. return self;
  1300. },
  1301. source: unescape('updateProtocolsList%0A%20%20%20%20protocolsList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09self%20protocols%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%20%20%20%20li%20%3A%3D%20html%20li.%0A%09%20%20%20%20selectedProtocol%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%20%0A%09%09with%3A%20each%3B%0A%09%09onClick%3A%20%5Bself%20selectProtocol%3A%20each%5D%5D%5D%0A')}),
  1302. smalltalk.Browser);
  1303. smalltalk.addMethod(
  1304. '_updateMethodsList',
  1305. smalltalk.method({
  1306. selector: 'updateMethodsList',
  1307. category: 'updating',
  1308. fn: function () {
  1309. var self = this;
  1310. self['@methodsList']._contents_(function (html) {return self._methods()._do_(function (each) {var li = nil;li = html._li();self['@selectedMethod'].__eq(each)._ifTrue_(function () {return li._class_("selected");});return function ($rec) {$rec._with_(each._selector());return $rec._onClick_(function () {return self._selectMethod_(each);});}(li);});});
  1311. return self;
  1312. },
  1313. source: unescape('updateMethodsList%0A%20%20%20%20methodsList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09self%20methods%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%20%20%20%20li%20%3A%3D%20html%20li.%0A%09%20%20%20%20selectedMethod%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09li%20class%3A%20%27selected%27%5D.%0A%09%20%20%20%20li%0A%09%09with%3A%20each%20selector%3B%0A%09%09onClick%3A%20%5Bself%20selectMethod%3A%20each%5D%5D%5D%0A')}),
  1314. smalltalk.Browser);
  1315. smalltalk.addMethod(
  1316. '_updateTabsList',
  1317. smalltalk.method({
  1318. selector: 'updateTabsList',
  1319. category: 'updating',
  1320. fn: function () {
  1321. var self = this;
  1322. self['@tabsList']._contents_(function (html) {var li = nil;li = html._li();self['@selectedTab'].__eq("instance")._ifTrue_(function () {return li._class_("selected");});(function ($rec) {$rec._with_("Instance");return $rec._onClick_(function () {return self._selectTab_("instance");});}(li));li = html._li();self['@selectedTab'].__eq("class")._ifTrue_(function () {return li._class_("selected");});(function ($rec) {$rec._with_("Class");return $rec._onClick_(function () {return self._selectTab_("class");});}(li));li = html._li();self['@selectedTab'].__eq("comment")._ifTrue_(function () {return li._class_("selected");});return function ($rec) {$rec._with_("Comment");return $rec._onClick_(function () {return self._selectTab_("comment");});}(li);});
  1323. return self;
  1324. },
  1325. source: unescape('updateTabsList%0A%20%20%20%20tabsList%20contents%3A%20%5B%3Ahtml%20%7C%7C%20li%20%7C%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23instance%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%27Instance%27%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23instance%5D.%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23class%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%27Class%27%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23class%5D.%0A%09li%20%3A%3D%20html%20li.%0A%09selectedTab%20%3D%20%23comment%20ifTrue%3A%20%5Bli%20class%3A%20%27selected%27%5D.%0A%09li%0A%09%20%20%20%20with%3A%20%27Comment%27%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20selectTab%3A%20%23comment%5D%5D%0A')}),
  1326. smalltalk.Browser);
  1327. smalltalk.addMethod(
  1328. '_updateSourceAndButtons',
  1329. smalltalk.method({
  1330. selector: 'updateSourceAndButtons',
  1331. category: 'updating',
  1332. fn: function () {
  1333. var self = this;
  1334. self._disableSaveButton();
  1335. self['@classButtons']._contents_(function (html) {(function ($rec) {$rec._with_("Rename class");return $rec._onClick_(function () {return self._renameClass();});}(html._button()));return function ($rec) {$rec._with_("Remove class");return $rec._onClick_(function () {return self._removeClass();});}(html._button());});
  1336. self['@methodButtons']._contents_(function (html) {(function ($rec) {$rec._with_("Remove method");return $rec._onClick_(function () {return self._removeMethod();});}(html._button()));return function ($rec) {$rec._onChange_(function (s) {return self._setMethodProtocol_(s._val());});return $rec._with_(function () {(function ($rec) {$rec._with_("Method protocol");return $rec._at_put_("disabled", "disabled");}(html._option()));(function ($rec) {$rec._class_("important");return $rec._with_("New...");}(html._option()));return self._protocols()._do_(function (each) {return html._option()._with_(each);});});}(html._select());});
  1337. self['@selectedMethod']._ifNil_ifNotNil_(function () {self._hideMethodButtons();return self['@selectedClass']._ifNil_ifNotNil_(function () {return self._hideClassButtons();}, function () {return self._showClassButtons();});}, function () {self._hideClassButtons();return self._showMethodButtons();});
  1338. self['@sourceTextarea']._asJQuery()._val_(self._source());
  1339. return self;
  1340. },
  1341. source: unescape('updateSourceAndButtons%0A%09self%20disableSaveButton.%0A%09classButtons%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09html%20button%0A%09%09%09with%3A%20%27Rename%20class%27%3B%0A%09%09%09onClick%3A%20%5Bself%20renameClass%5D.%0A%09%09html%20button%0A%09%09with%3A%20%27Remove%20class%27%3B%0A%09%09onClick%3A%20%5Bself%20removeClass%5D%5D.%0A%09methodButtons%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09html%20button%0A%09%09%09with%3A%20%27Remove%20method%27%3B%0A%09%09%09onClick%3A%20%5Bself%20removeMethod%5D.%0A%09%09html%20select%20%0A%09%20%20%20%20%09%09onChange%3A%20%5B%3As%20%7C%20self%20setMethodProtocol%3A%20s%20val%5D%3B%0A%09%20%20%20%20%09%09with%3A%20%5B%0A%09%09%09%09html%20option%0A%09%09%20%20%20%20%09%09%09with%3A%20%27Method%20protocol%27%3B%0A%09%09%20%20%20%20%09%09%09at%3A%20%27disabled%27%20put%3A%20%27disabled%27.%0A%09%09%09%09html%20option%0A%09%09%20%20%20%20%09%09%09class%3A%20%27important%27%3B%0A%09%09%20%20%20%20%09%09%09with%3A%20%27New...%27.%0A%09%09%09%09self%20protocols%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%20%20%20%20%09%09%09html%20option%20with%3A%20each%5D%5D%5D.%0A%20%20%20%20%09selectedMethod%20%0A%09%09ifNil%3A%20%5B%0A%09%20%20%20%20%09%09self%20hideMethodButtons.%0A%09%20%20%20%20%09%09%09selectedClass%20%0A%09%09%09%09%09ifNil%3A%20%5Bself%20hideClassButtons%5D%0A%09%20%20%20%20%09%09%09%09ifNotNil%3A%20%5Bself%20showClassButtons%5D%5D%0A%09%09ifNotNil%3A%20%5B%0A%09%20%20%20%20%09%09self%20hideClassButtons.%0A%09%20%20%20%20%09%09self%20showMethodButtons%5D.%0A%20%20%20%20%09sourceTextarea%20asJQuery%20val%3A%20self%20source%0A')}),
  1342. smalltalk.Browser);
  1343. smalltalk.addMethod(
  1344. '_canBeClosed',
  1345. smalltalk.method({
  1346. selector: 'canBeClosed',
  1347. category: 'testing',
  1348. fn: function () {
  1349. var self = this;
  1350. return true;
  1351. return self;
  1352. },
  1353. source: unescape('canBeClosed%0A%20%20%20%20%5Etrue%0A')}),
  1354. smalltalk.Browser);
  1355. smalltalk.addMethod(
  1356. '_renameClass',
  1357. smalltalk.method({
  1358. selector: 'renameClass',
  1359. category: 'actions',
  1360. fn: function () {
  1361. var self = this;
  1362. var newName = nil;
  1363. newName = self._prompt_("Rename class ".__comma(self['@selectedClass']._name()));
  1364. newName._notEmpty()._ifTrue_(function () {self['@selectedClass']._rename_(newName);return function ($rec) {$rec._updateClassesList();return $rec._updateSourceAndButtons();}(self);});
  1365. return self;
  1366. },
  1367. source: unescape('renameClass%0A%20%20%20%20%7C%20newName%20%7C%0A%20%20%20%20newName%20%3A%3D%20self%20prompt%3A%20%27Rename%20class%20%27%2C%20selectedClass%20name.%0A%20%20%20%20newName%20notEmpty%20ifTrue%3A%20%5B%0A%09selectedClass%20rename%3A%20newName.%0A%09self%20%0A%09%09updateClassesList%3B%0A%09%09updateSourceAndButtons%5D%0A')}),
  1368. smalltalk.Browser);
  1369. smalltalk.addMethod(
  1370. '_openOn_',
  1371. smalltalk.method({
  1372. selector: 'openOn:',
  1373. category: 'convenience',
  1374. fn: function (aClass) {
  1375. var self = this;
  1376. (function ($rec) {$rec._open();$rec._selectCategory_(aClass._category());return $rec._selectClass_(aClass);}(self._new()));
  1377. return self;
  1378. },
  1379. source: unescape('openOn%3A%20aClass%0A%20%20%20%20self%20new%0A%09open%3B%0A%09selectCategory%3A%20aClass%20category%3B%0A%09selectClass%3A%20aClass%0A')}),
  1380. smalltalk.Browser.klass);
  1381. smalltalk.addMethod(
  1382. '_open',
  1383. smalltalk.method({
  1384. selector: 'open',
  1385. category: 'convenience',
  1386. fn: function () {
  1387. var self = this;
  1388. self._new()._open();
  1389. return self;
  1390. },
  1391. source: unescape('open%0A%20%20%20%20self%20new%20open%0A')}),
  1392. smalltalk.Browser.klass);
  1393. smalltalk.addMethod(
  1394. '_commitPath',
  1395. smalltalk.method({
  1396. selector: 'commitPath',
  1397. category: 'accessing',
  1398. fn: function () {
  1399. var self = this;
  1400. return "js";
  1401. return self;
  1402. },
  1403. source: unescape('commitPath%0A%09%5E%27js%27')}),
  1404. smalltalk.Browser.klass);
  1405. smalltalk.addClass('Inspector', smalltalk.TabWidget, ['label', 'variables', 'selectedVariable', 'variablesList', 'valueTextarea', 'workspaceTextarea'], 'IDE');
  1406. smalltalk.addMethod(
  1407. '_label',
  1408. smalltalk.method({
  1409. selector: 'label',
  1410. category: 'accessing',
  1411. fn: function () {
  1412. var self = this;
  1413. return self['@label']._ifNil_(function () {return unescape("Inspector%20%28nil%29");});
  1414. return self;
  1415. },
  1416. source: unescape('label%0A%09%5Elabel%20ifNil%3A%20%5B%27Inspector%20%28nil%29%27%5D')}),
  1417. smalltalk.Inspector);
  1418. smalltalk.addMethod(
  1419. '_canBeClosed',
  1420. smalltalk.method({
  1421. selector: 'canBeClosed',
  1422. category: 'testing',
  1423. fn: function () {
  1424. var self = this;
  1425. return true;
  1426. return self;
  1427. },
  1428. source: unescape('canBeClosed%0A%09%5Etrue')}),
  1429. smalltalk.Inspector);
  1430. smalltalk.addMethod(
  1431. '_inspect_',
  1432. smalltalk.method({
  1433. selector: 'inspect:',
  1434. category: 'accessing',
  1435. fn: function (anObject) {
  1436. var self = this;
  1437. anObject._inspectOn_(self);
  1438. return self;
  1439. },
  1440. source: unescape('inspect%3A%20anObject%0A%09anObject%20inspectOn%3A%20self')}),
  1441. smalltalk.Inspector);
  1442. smalltalk.addMethod(
  1443. '_initialize',
  1444. smalltalk.method({
  1445. selector: 'initialize',
  1446. category: 'initialization',
  1447. fn: function () {
  1448. var self = this;
  1449. self.klass.superclass.fn.prototype._initialize.apply(self, []);
  1450. self['@variables'] = [];
  1451. return self;
  1452. },
  1453. source: unescape('initialize%0A%09super%20initialize.%0A%09variables%20%3A%3D%20%23%28%29')}),
  1454. smalltalk.Inspector);
  1455. smalltalk.addMethod(
  1456. '_variables',
  1457. smalltalk.method({
  1458. selector: 'variables',
  1459. category: 'accessing',
  1460. fn: function () {
  1461. var self = this;
  1462. return self['@variables'];
  1463. return self;
  1464. },
  1465. source: unescape('variables%0A%09%5Evariables')}),
  1466. smalltalk.Inspector);
  1467. smalltalk.addMethod(
  1468. '_setVariables_',
  1469. smalltalk.method({
  1470. selector: 'setVariables:',
  1471. category: 'accessing',
  1472. fn: function (aCollection) {
  1473. var self = this;
  1474. self['@variables'] = aCollection;
  1475. return self;
  1476. },
  1477. source: unescape('setVariables%3A%20aCollection%0A%09variables%20%3A%3D%20aCollection')}),
  1478. smalltalk.Inspector);
  1479. smalltalk.addMethod(
  1480. '_setLabel_',
  1481. smalltalk.method({
  1482. selector: 'setLabel:',
  1483. category: 'accessing',
  1484. fn: function (aString) {
  1485. var self = this;
  1486. self['@label'] = aString;
  1487. return self;
  1488. },
  1489. source: unescape('setLabel%3A%20aString%0A%09label%20%3A%3D%20aString')}),
  1490. smalltalk.Inspector);
  1491. smalltalk.addMethod(
  1492. '_renderBoxOn_',
  1493. smalltalk.method({
  1494. selector: 'renderBoxOn:',
  1495. category: 'rendering',
  1496. fn: function (html) {
  1497. var self = this;
  1498. (function ($rec) {$rec._renderTopPanelOn_(html);return $rec._renderBottomPanelOn_(html);}(self));
  1499. return self;
  1500. },
  1501. source: unescape('renderBoxOn%3A%20html%0A%09self%20%0A%09%09renderTopPanelOn%3A%20html%3B%0A%09%09renderBottomPanelOn%3A%20html')}),
  1502. smalltalk.Inspector);
  1503. smalltalk.addMethod(
  1504. '_renderTopPanelOn_',
  1505. smalltalk.method({
  1506. selector: 'renderTopPanelOn:',
  1507. category: 'rendering',
  1508. fn: function (html) {
  1509. var self = this;
  1510. (function ($rec) {$rec._class_("top");return $rec._with_(function () {self['@variablesList'] = html._ul()._class_("jt_column variables");self['@valueTextarea'] = function ($rec) {$rec._class_("jt_column value");return $rec._at_put_("readonly", "readonly");}(html._textarea());(function ($rec) {$rec._updateVariablesList();return $rec._updateValueTextarea();}(self));return html._div()._class_("jt_clear");});}(html._div()));
  1511. return self;
  1512. },
  1513. source: unescape('renderTopPanelOn%3A%20html%0A%20%20%20%20html%20div%20%0A%09class%3A%20%27top%27%3B%20%0A%09with%3A%20%5B%0A%09%20%20%20%20variablesList%20%3A%3D%20html%20ul%20class%3A%20%27jt_column%20variables%27.%0A%09%20%20%20%20valueTextarea%20%3A%3D%20html%20textarea%20class%3A%20%27jt_column%20value%27%3B%20at%3A%20%27readonly%27%20put%3A%20%27readonly%27.%0A%09%20%20%20%20self%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea.%0A%09%20%20%20%20html%20div%20class%3A%20%27jt_clear%27%5D%0A')}),
  1514. smalltalk.Inspector);
  1515. smalltalk.addMethod(
  1516. '_renderBottomPanelOn_',
  1517. smalltalk.method({
  1518. selector: 'renderBottomPanelOn:',
  1519. category: 'rendering',
  1520. fn: function (html) {
  1521. var self = this;
  1522. (function ($rec) {$rec._class_("jt_sourceCode");return $rec._with_(function () {self['@workspaceTextarea'] = function ($rec) {$rec._class_("source");return $rec._at_put_("spellcheck", "false");}(html._textarea());return self['@workspaceTextarea']._asJQuery()._call_("tabby");});}(html._div()));
  1523. return self;
  1524. },
  1525. source: unescape('renderBottomPanelOn%3A%20html%0A%20%20%20%20html%20div%0A%09class%3A%20%27jt_sourceCode%27%3B%0A%09with%3A%20%5B%0A%09%20%20%20%20workspaceTextarea%20%3A%3D%20html%20textarea%20%0A%09%09class%3A%20%27source%27%3B%0A%09%09at%3A%20%27spellcheck%27%20put%3A%20%27false%27.%0A%09%20%20%20%20workspaceTextarea%20asJQuery%20call%3A%20%27tabby%27%5D%0A')}),
  1526. smalltalk.Inspector);
  1527. smalltalk.addMethod(
  1528. '_updateVariablesList',
  1529. smalltalk.method({
  1530. selector: 'updateVariablesList',
  1531. category: 'updating',
  1532. fn: function () {
  1533. var self = this;
  1534. self['@variablesList']._contents_(function (html) {return self._variables()._keys()._do_(function (each) {var li = nil;li = html._li();(function ($rec) {$rec._with_(each);return $rec._onClick_(function () {return self._selectVariable_(each);});}(li));return self._selectedVariable().__eq(each)._ifTrue_(function () {return li._class_("selected");});});});
  1535. return self;
  1536. },
  1537. source: unescape('updateVariablesList%0A%09variablesList%20contents%3A%20%5B%3Ahtml%20%7C%0A%09%09self%20variables%20keys%20do%3A%20%5B%3Aeach%20%7C%7C%20li%20%7C%0A%09%09%09li%20%3A%3D%20html%20li.%0A%09%09%09li%0A%09%09%09%09with%3A%20each%3B%0A%09%09%09%09onClick%3A%20%5Bself%20selectVariable%3A%20each%5D.%0A%09%09%09self%20selectedVariable%20%3D%20each%20ifTrue%3A%20%5B%0A%09%09%09%09li%20class%3A%20%27selected%27%5D%5D%5D')}),
  1538. smalltalk.Inspector);
  1539. smalltalk.addMethod(
  1540. '_selectedVariable',
  1541. smalltalk.method({
  1542. selector: 'selectedVariable',
  1543. category: 'accessing',
  1544. fn: function () {
  1545. var self = this;
  1546. return self['@selectedVariable'];
  1547. return self;
  1548. },
  1549. source: unescape('selectedVariable%0A%09%5EselectedVariable')}),
  1550. smalltalk.Inspector);
  1551. smalltalk.addMethod(
  1552. '_selectedVariable_',
  1553. smalltalk.method({
  1554. selector: 'selectedVariable:',
  1555. category: 'accessing',
  1556. fn: function (aString) {
  1557. var self = this;
  1558. self['@selectedVariable'] = aString;
  1559. return self;
  1560. },
  1561. source: unescape('selectedVariable%3A%20aString%0A%09selectedVariable%20%3A%3D%20aString')}),
  1562. smalltalk.Inspector);
  1563. smalltalk.addMethod(
  1564. '_selectVariable_',
  1565. smalltalk.method({
  1566. selector: 'selectVariable:',
  1567. category: 'updating',
  1568. fn: function (aString) {
  1569. var self = this;
  1570. self._selectedVariable_(aString);
  1571. (function ($rec) {$rec._updateVariablesList();return $rec._updateValueTextarea();}(self));
  1572. return self;
  1573. },
  1574. source: unescape('selectVariable%3A%20aString%0A%09self%20selectedVariable%3A%20aString.%0A%09self%20%0A%09%09updateVariablesList%3B%0A%09%09updateValueTextarea')}),
  1575. smalltalk.Inspector);
  1576. smalltalk.addMethod(
  1577. '_updateValueTextarea',
  1578. smalltalk.method({
  1579. selector: 'updateValueTextarea',
  1580. category: 'updating',
  1581. fn: function () {
  1582. var self = this;
  1583. self['@valueTextarea']._asJQuery()._val_(self._selectedVariable()._isNil()._ifTrue_ifFalse_(function () {return "";}, function () {return self._variables()._at_(self._selectedVariable())._printString();}));
  1584. return self;
  1585. },
  1586. source: unescape('updateValueTextarea%0A%09valueTextarea%20asJQuery%20val%3A%20%28self%20selectedVariable%20isNil%0A%09%09ifTrue%3A%20%5B%27%27%5D%0A%09%09ifFalse%3A%20%5B%28self%20variables%20at%3A%20self%20selectedVariable%29%20printString%5D%29')}),
  1587. smalltalk.Inspector);
  1588. smalltalk.addMethod(
  1589. '_on_',
  1590. smalltalk.method({
  1591. selector: 'on:',
  1592. category: 'instance creation',
  1593. fn: function (anObject) {
  1594. var self = this;
  1595. return function ($rec) {$rec._inspect_(anObject);return $rec._yourself();}(self._new());
  1596. return self;
  1597. },
  1598. source: unescape('on%3A%20anObject%0A%09%5Eself%20new%0A%09%09inspect%3A%20anObject%3B%0A%09%09yourself')}),
  1599. smalltalk.Inspector.klass);