1
0

ide.js 69 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359
  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. 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')}),
  17. smalltalk.TabManager);
  18. smalltalk.addMethod(
  19. '_tabs',
  20. smalltalk.method({
  21. selector: 'tabs',
  22. category: 'accessing',
  23. fn: function (){
  24. var self=this;
  25. return self['@tabs']._ifNil_((function(){return self['@tabs']=smalltalk.Array._new();}));
  26. return self;},
  27. source: unescape('tabs%0A%20%20%20%20%5Etabs%20ifNil%3A%20%5Btabs%20%3A%3D%20Array%20new%5D%0A')}),
  28. smalltalk.TabManager);
  29. smalltalk.addMethod(
  30. '_addTab_',
  31. smalltalk.method({
  32. selector: 'addTab:',
  33. category: 'adding/Removing',
  34. fn: function (aWidget){
  35. var self=this;
  36. self._tabs()._add_(aWidget);
  37. unescape("%23jtalk")._asJQuery()._append_(aWidget);
  38. aWidget._root()._asJQuery()._hide();
  39. return self;},
  40. 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')}),
  41. smalltalk.TabManager);
  42. smalltalk.addMethod(
  43. '_removeTab_',
  44. smalltalk.method({
  45. selector: 'removeTab:',
  46. category: 'adding/Removing',
  47. fn: function (aWidget){
  48. var self=this;
  49. self._tabs()._remove_(aWidget);
  50. self._update();
  51. return self;},
  52. source: unescape('removeTab%3A%20aWidget%0A%20%20%20%20self%20tabs%20remove%3A%20aWidget.%0A%20%20%20%20self%20update%0A')}),
  53. smalltalk.TabManager);
  54. smalltalk.addMethod(
  55. '_updateBodyMargin',
  56. smalltalk.method({
  57. selector: 'updateBodyMargin',
  58. category: 'actions',
  59. fn: function (){
  60. var self=this;
  61. self._setBodyMargin_(unescape("%23jtalk")._asJQuery()._height().__plus((27)));
  62. return self;},
  63. source: unescape('updateBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%20%27%23jtalk%27%20asJQuery%20height%20+%2027%0A')}),
  64. smalltalk.TabManager);
  65. smalltalk.addMethod(
  66. '_updatePosition',
  67. smalltalk.method({
  68. selector: 'updatePosition',
  69. category: 'actions',
  70. fn: function (){
  71. var self=this;
  72. (function(){jQuery('#jtalk').css('top', '').css('bottom', '27px');})();
  73. return self;},
  74. 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')}),
  75. smalltalk.TabManager);
  76. smalltalk.addMethod(
  77. '_removeBodyMargin',
  78. smalltalk.method({
  79. selector: 'removeBodyMargin',
  80. category: 'actions',
  81. fn: function (){
  82. var self=this;
  83. self._setBodyMargin_((0));
  84. return self;},
  85. source: unescape('removeBodyMargin%0A%20%20%20%20self%20setBodyMargin%3A%200%0A')}),
  86. smalltalk.TabManager);
  87. smalltalk.addMethod(
  88. '_setBodyMargin_',
  89. smalltalk.method({
  90. selector: 'setBodyMargin:',
  91. category: 'actions',
  92. fn: function (anInteger){
  93. var self=this;
  94. ".jtalkBody"._asJQuery()._cssAt_put_(unescape("margin-bottom"),anInteger._asString().__comma("px"));
  95. return self;},
  96. 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')}),
  97. smalltalk.TabManager);
  98. smalltalk.addMethod(
  99. '_onResize_',
  100. smalltalk.method({
  101. selector: 'onResize:',
  102. category: 'actions',
  103. fn: function (aBlock){
  104. var self=this;
  105. (function(){jQuery('#jtalk').resizable({
  106. handles: 'n',
  107. resize: aBlock,
  108. minHeight: 230
  109. });})();
  110. return self;},
  111. 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')}),
  112. smalltalk.TabManager);
  113. smalltalk.addMethod(
  114. '_onWindowResize_',
  115. smalltalk.method({
  116. selector: 'onWindowResize:',
  117. category: 'actions',
  118. fn: function (aBlock){
  119. var self=this;
  120. (function(){jQuery(window).resize(aBlock)})();
  121. return self;},
  122. source: unescape('onWindowResize%3A%20aBlock%0A%20%20%20%20%7B%27jQuery%28window%29.resize%28aBlock%29%27%7D%0A')}),
  123. smalltalk.TabManager);
  124. smalltalk.addMethod(
  125. '_open',
  126. smalltalk.method({
  127. selector: 'open',
  128. category: 'actions',
  129. fn: function (){
  130. var self=this;
  131. 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;}));
  132. return self;},
  133. 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')}),
  134. smalltalk.TabManager);
  135. smalltalk.addMethod(
  136. '_close',
  137. smalltalk.method({
  138. selector: 'close',
  139. category: 'actions',
  140. fn: function (){
  141. var self=this;
  142. self['@opened']._ifTrue_((function(){self._root()._asJQuery()._hide();unescape("%23jtalk")._asJQuery()._hide();self._removeBodyMargin();"body"._asJQuery()._removeClass_("jtalkBody");return self['@opened']=false;}));
  143. return self;},
  144. 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')}),
  145. smalltalk.TabManager);
  146. smalltalk.addMethod(
  147. '_newBrowserTab',
  148. smalltalk.method({
  149. selector: 'newBrowserTab',
  150. category: 'actions',
  151. fn: function (){
  152. var self=this;
  153. smalltalk.Browser._open();
  154. return self;},
  155. source: unescape('newBrowserTab%0A%20%20%20%20Browser%20open%0A')}),
  156. smalltalk.TabManager);
  157. smalltalk.addMethod(
  158. '_selectTab_',
  159. smalltalk.method({
  160. selector: 'selectTab:',
  161. category: 'actions',
  162. fn: function (aWidget){
  163. var self=this;
  164. self._open();
  165. self['@selectedTab']=aWidget;
  166. self._tabs()._do_((function(each){return each._root()._asJQuery()._hide();}));
  167. aWidget._root()._asJQuery()._show();
  168. self._update();
  169. return self;},
  170. 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')}),
  171. smalltalk.TabManager);
  172. smalltalk.addMethod(
  173. '_closeTab_',
  174. smalltalk.method({
  175. selector: 'closeTab:',
  176. category: 'actions',
  177. fn: function (aWidget){
  178. var self=this;
  179. self._removeTab_(aWidget);
  180. self._selectTab_(self._tabs()._last());
  181. aWidget._root()._asJQuery()._remove();
  182. self._update();
  183. return self;},
  184. 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')}),
  185. smalltalk.TabManager);
  186. smalltalk.addMethod(
  187. '_renderOn_',
  188. smalltalk.method({
  189. selector: 'renderOn:',
  190. category: 'rendering',
  191. fn: function (html){
  192. var self=this;
  193. (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());
  194. return self;},
  195. 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')}),
  196. smalltalk.TabManager);
  197. smalltalk.addMethod(
  198. '_renderTabFor_on_',
  199. smalltalk.method({
  200. selector: 'renderTabFor:on:',
  201. category: 'rendering',
  202. fn: function (aWidget, html){
  203. var self=this;
  204. var li=nil;
  205. li=html._li();
  206. self['@selectedTab'].__eq(aWidget)._ifTrue_((function(){return li._class_("selected");}));
  207. 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());}));}));
  208. return self;},
  209. 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')}),
  210. smalltalk.TabManager);
  211. smalltalk.TabManager.klass.iVarNames = ['current'];
  212. smalltalk.addMethod(
  213. '_current',
  214. smalltalk.method({
  215. selector: 'current',
  216. category: 'instance creation',
  217. fn: function (){
  218. var self=this;
  219. return self['@current']._ifNil_((function(){return self['@current']=self.klass.superclass.fn.prototype['_new'].apply(self, []);}));
  220. return self;},
  221. source: unescape('current%0A%20%20%20%20%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D%0A')}),
  222. smalltalk.TabManager.klass);
  223. smalltalk.addMethod(
  224. '_new',
  225. smalltalk.method({
  226. selector: 'new',
  227. category: 'instance creation',
  228. fn: function (){
  229. var self=this;
  230. self._shouldNotImplement();
  231. return self;},
  232. source: unescape('new%0A%20%20%20%20self%20shouldNotImplement%0A')}),
  233. smalltalk.TabManager.klass);
  234. smalltalk.addClass('TabWidget', smalltalk.Widget, [], 'IDE');
  235. smalltalk.addMethod(
  236. '_label',
  237. smalltalk.method({
  238. selector: 'label',
  239. category: 'accessing',
  240. fn: function (){
  241. var self=this;
  242. self._subclassResponsibility();
  243. return self;},
  244. source: unescape('label%0A%20%20%20%20self%20subclassResponsibility%0A')}),
  245. smalltalk.TabWidget);
  246. smalltalk.addMethod(
  247. '_open',
  248. smalltalk.method({
  249. selector: 'open',
  250. category: 'actions',
  251. fn: function (){
  252. var self=this;
  253. (function($rec){$rec._addTab_(self);return $rec._selectTab_(self);})(smalltalk.TabManager._current());
  254. return self;},
  255. source: unescape('open%0A%20%20%20%20TabManager%20current%0A%09addTab%3A%20self%3B%0A%09selectTab%3A%20self%0A')}),
  256. smalltalk.TabWidget);
  257. smalltalk.addMethod(
  258. '_canBeClosed',
  259. smalltalk.method({
  260. selector: 'canBeClosed',
  261. category: 'testing',
  262. fn: function (){
  263. var self=this;
  264. return false;
  265. return self;},
  266. source: unescape('canBeClosed%0A%20%20%20%20%5Efalse%0A')}),
  267. smalltalk.TabWidget);
  268. smalltalk.addMethod(
  269. '_renderOn_',
  270. smalltalk.method({
  271. selector: 'renderOn:',
  272. category: 'rendering',
  273. fn: function (html){
  274. var self=this;
  275. (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());
  276. return self;},
  277. 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')}),
  278. smalltalk.TabWidget);
  279. smalltalk.addMethod(
  280. '_renderBoxOn_',
  281. smalltalk.method({
  282. selector: 'renderBoxOn:',
  283. category: 'rendering',
  284. fn: function (html){
  285. var self=this;
  286. return self;},
  287. source: unescape('renderBoxOn%3A%20html%0A')}),
  288. smalltalk.TabWidget);
  289. smalltalk.addMethod(
  290. '_renderButtonsOn_',
  291. smalltalk.method({
  292. selector: 'renderButtonsOn:',
  293. category: 'rendering',
  294. fn: function (html){
  295. var self=this;
  296. return self;},
  297. source: unescape('renderButtonsOn%3A%20html%0A')}),
  298. smalltalk.TabWidget);
  299. smalltalk.addMethod(
  300. '_open',
  301. smalltalk.method({
  302. selector: 'open',
  303. category: 'instance creation',
  304. fn: function (){
  305. var self=this;
  306. return self._new()._open();
  307. return self;},
  308. source: unescape('open%0A%20%20%20%20%5Eself%20new%20open%0A')}),
  309. smalltalk.TabWidget.klass);
  310. smalltalk.addClass('Workspace', smalltalk.TabWidget, ['textarea'], 'IDE');
  311. smalltalk.addMethod(
  312. '_label',
  313. smalltalk.method({
  314. selector: 'label',
  315. category: 'accessing',
  316. fn: function (){
  317. var self=this;
  318. return unescape("%5BWorkspace%5D");
  319. return self;},
  320. source: unescape('label%0A%20%20%20%20%5E%27%5BWorkspace%5D%27%0A')}),
  321. smalltalk.Workspace);
  322. smalltalk.addMethod(
  323. '_selection',
  324. smalltalk.method({
  325. selector: 'selection',
  326. category: 'accessing',
  327. fn: function (){
  328. var self=this;
  329. return (function(){return document.selection})();
  330. return self;},
  331. source: unescape('selection%0A%20%20%20%20%5E%7B%27return%20document.selection%27%7D%0A')}),
  332. smalltalk.Workspace);
  333. smalltalk.addMethod(
  334. '_selectionStart',
  335. smalltalk.method({
  336. selector: 'selectionStart',
  337. category: 'accessing',
  338. fn: function (){
  339. var self=this;
  340. return (function(){return jQuery('.jt_workspace')[0].selectionStart})();
  341. return self;},
  342. 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')}),
  343. smalltalk.Workspace);
  344. smalltalk.addMethod(
  345. '_selectionEnd',
  346. smalltalk.method({
  347. selector: 'selectionEnd',
  348. category: 'accessing',
  349. fn: function (){
  350. var self=this;
  351. return (function(){return jQuery('.jt_workspace')[0].selectionEnd})();
  352. return self;},
  353. 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')}),
  354. smalltalk.Workspace);
  355. smalltalk.addMethod(
  356. '_selectionStart_',
  357. smalltalk.method({
  358. selector: 'selectionStart:',
  359. category: 'accessing',
  360. fn: function (anInteger){
  361. var self=this;
  362. (function(){jQuery('.jt_workspace')[0].selectionStart = anInteger})();
  363. return self;},
  364. 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')}),
  365. smalltalk.Workspace);
  366. smalltalk.addMethod(
  367. '_selectionEnd_',
  368. smalltalk.method({
  369. selector: 'selectionEnd:',
  370. category: 'accessing',
  371. fn: function (anInteger){
  372. var self=this;
  373. (function(){jQuery('.jt_workspace')[0].selectionEnd = anInteger})();
  374. return self;},
  375. 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')}),
  376. smalltalk.Workspace);
  377. smalltalk.addMethod(
  378. '_currentLine',
  379. smalltalk.method({
  380. selector: 'currentLine',
  381. category: 'accessing',
  382. fn: function (){
  383. var self=this;
  384. try{var lines=nil;
  385. var startLine=nil;
  386. var endLine=nil;
  387. lines=self['@textarea']._asJQuery()._val()._tokenize_(smalltalk.String._cr());
  388. startLine=endLine=(0);
  389. 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}})})();}));}));
  390. return self;
  391. } catch(e) {if(e.name === 'stReturn' && e.selector === '_currentLine'){return e.fn()} throw(e)}},
  392. 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')}),
  393. smalltalk.Workspace);
  394. smalltalk.addMethod(
  395. '_handleKeyDown_',
  396. smalltalk.method({
  397. selector: 'handleKeyDown:',
  398. category: 'actions',
  399. fn: function (anEvent){
  400. var self=this;
  401. return (function(){if(anEvent.ctrlKey) {
  402. if(anEvent.keyCode === 68) { //ctrl+p
  403. self._printIt();
  404. return false;
  405. }
  406. if(anEvent.keyCode === 80) { //ctrl+d
  407. self._doIt();
  408. return false;
  409. }
  410. }})();
  411. return self;},
  412. 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')}),
  413. smalltalk.Workspace);
  414. smalltalk.addMethod(
  415. '_clearWorkspace',
  416. smalltalk.method({
  417. selector: 'clearWorkspace',
  418. category: 'actions',
  419. fn: function (){
  420. var self=this;
  421. self['@textarea']._asJQuery()._val_("");
  422. return self;},
  423. source: unescape('clearWorkspace%0A%20%20%20%20textarea%20asJQuery%20val%3A%20%27%27%0A')}),
  424. smalltalk.Workspace);
  425. smalltalk.addMethod(
  426. '_doIt',
  427. smalltalk.method({
  428. selector: 'doIt',
  429. category: 'actions',
  430. fn: function (){
  431. var self=this;
  432. self._printIt();
  433. return self;},
  434. source: unescape('doIt%0A%20%20%20%20self%20printIt%0A')}),
  435. smalltalk.Workspace);
  436. smalltalk.addMethod(
  437. '_printIt',
  438. smalltalk.method({
  439. selector: 'printIt',
  440. category: 'actions',
  441. fn: function (){
  442. var self=this;
  443. var selection=nil;
  444. self['@textarea']._asJQuery()._focus();
  445. 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)));}));
  446. self._print_(self._eval_(selection)._printString());
  447. return self;},
  448. source: unescape('printIt%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%20self%20print%3A%20%28self%20eval%3A%20selection%29%20printString%0A')}),
  449. smalltalk.Workspace);
  450. smalltalk.addMethod(
  451. '_print_',
  452. smalltalk.method({
  453. selector: 'print:',
  454. category: 'actions',
  455. fn: function (aString){
  456. var self=this;
  457. var start=nil;
  458. start=self._selectionEnd();
  459. 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())));
  460. self._selectionStart_(start);
  461. self._selectionEnd_(start.__plus(aString._size()).__plus((2)));
  462. return self;},
  463. 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')}),
  464. smalltalk.Workspace);
  465. smalltalk.addMethod(
  466. '_eval_',
  467. smalltalk.method({
  468. selector: 'eval:',
  469. category: 'actions',
  470. fn: function (aString){
  471. var self=this;
  472. try{var compiler=nil;
  473. var node=nil;
  474. compiler=smalltalk.Compiler._new();
  475. node=compiler._parseExpression_(aString);
  476. 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()))}})})();}));
  477. (function(){throw({name: 'stReturn', selector: '_eval_', fn: function(){return compiler._loadExpression_(aString)}})})();
  478. return self;
  479. } catch(e) {if(e.name === 'stReturn' && e.selector === '_eval_'){return e.fn()} throw(e)}},
  480. 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')}),
  481. smalltalk.Workspace);
  482. smalltalk.addMethod(
  483. '_renderBoxOn_',
  484. smalltalk.method({
  485. selector: 'renderBoxOn:',
  486. category: 'rendering',
  487. fn: function (html){
  488. var self=this;
  489. self['@textarea']=html._textarea();
  490. self['@textarea']._asJQuery()._call_("tabby");
  491. self['@textarea']._onKeyDown_((function(e){return self._handleKeyDown_(e);}));
  492. (function($rec){$rec._class_("jt_workspace");return $rec._at_put_("spellcheck","false");})(self['@textarea']);
  493. return self;},
  494. 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')}),
  495. smalltalk.Workspace);
  496. smalltalk.addMethod(
  497. '_renderButtonsOn_',
  498. smalltalk.method({
  499. selector: 'renderButtonsOn:',
  500. category: 'rendering',
  501. fn: function (html){
  502. var self=this;
  503. (function($rec){$rec._with_("DoIt");$rec._title_(unescape("ctrl+d"));return $rec._onClick_((function(){return self._doIt();}));})(html._button());
  504. (function($rec){$rec._with_("PrintIt");$rec._title_(unescape("ctrl+p"));return $rec._onClick_((function(){return self._printIt();}));})(html._button());
  505. (function($rec){$rec._with_("Clear workspace");return $rec._onClick_((function(){return self._clearWorkspace();}));})(html._button());
  506. return self;},
  507. 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%27Clear%20workspace%27%3B%0A%09onClick%3A%20%5Bself%20clearWorkspace%5D%0A')}),
  508. smalltalk.Workspace);
  509. smalltalk.addClass('Transcript', smalltalk.TabWidget, ['textarea'], 'IDE');
  510. smalltalk.addMethod(
  511. '_label',
  512. smalltalk.method({
  513. selector: 'label',
  514. category: 'accessing',
  515. fn: function (){
  516. var self=this;
  517. return unescape("%5BTranscript%5D");
  518. return self;},
  519. source: unescape('label%0A%20%20%20%20%5E%27%5BTranscript%5D%27%0A')}),
  520. smalltalk.Transcript);
  521. smalltalk.addMethod(
  522. '_show_',
  523. smalltalk.method({
  524. selector: 'show:',
  525. category: 'actions',
  526. fn: function (anObject){
  527. var self=this;
  528. self['@textarea']._asJQuery()._val_(self['@textarea']._asJQuery()._val().__comma(anObject._asString()));
  529. return self;},
  530. source: unescape('show%3A%20anObject%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20anObject%20asString.%0A%0A')}),
  531. smalltalk.Transcript);
  532. smalltalk.addMethod(
  533. '_cr',
  534. smalltalk.method({
  535. selector: 'cr',
  536. category: 'actions',
  537. fn: function (){
  538. var self=this;
  539. self['@textarea']._asJQuery()._val_(self['@textarea']._asJQuery()._val().__comma(smalltalk.String._cr()));
  540. return self;},
  541. source: unescape('cr%0A%20%20%20%20textarea%20asJQuery%20val%3A%20textarea%20asJQuery%20val%2C%20String%20cr.%0A')}),
  542. smalltalk.Transcript);
  543. smalltalk.addMethod(
  544. '_clear',
  545. smalltalk.method({
  546. selector: 'clear',
  547. category: 'actions',
  548. fn: function (){
  549. var self=this;
  550. self['@textarea']._asJQuery()._val_("");
  551. return self;},
  552. source: unescape('clear%0A%20%20%20%20textarea%20asJQuery%20val%3A%20%27%27%0A')}),
  553. smalltalk.Transcript);
  554. smalltalk.addMethod(
  555. '_renderBoxOn_',
  556. smalltalk.method({
  557. selector: 'renderBoxOn:',
  558. category: 'rendering',
  559. fn: function (html){
  560. var self=this;
  561. self['@textarea']=html._textarea();
  562. self['@textarea']._asJQuery()._call_("tabby");
  563. (function($rec){$rec._class_("jt_transcript");return $rec._at_put_("spellcheck","false");})(self['@textarea']);
  564. return self;},
  565. 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')}),
  566. smalltalk.Transcript);
  567. smalltalk.addMethod(
  568. '_renderButtonsOn_',
  569. smalltalk.method({
  570. selector: 'renderButtonsOn:',
  571. category: 'rendering',
  572. fn: function (html){
  573. var self=this;
  574. (function($rec){$rec._with_("Clear transcript");return $rec._onClick_((function(){return self._clear();}));})(html._button());
  575. return self;},
  576. 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')}),
  577. smalltalk.Transcript);
  578. smalltalk.Transcript.klass.iVarNames = ['current'];
  579. smalltalk.addMethod(
  580. '_open',
  581. smalltalk.method({
  582. selector: 'open',
  583. category: 'instance creation',
  584. fn: function (){
  585. var self=this;
  586. self._current()._open();
  587. return self;},
  588. source: unescape('open%0A%20%20%20%20self%20current%20open%0A')}),
  589. smalltalk.Transcript.klass);
  590. smalltalk.addMethod(
  591. '_new',
  592. smalltalk.method({
  593. selector: 'new',
  594. category: 'instance creation',
  595. fn: function (){
  596. var self=this;
  597. self._shouldNotImplement();
  598. return self;},
  599. source: unescape('new%0A%20%20%20%20self%20shouldNotImplement%0A')}),
  600. smalltalk.Transcript.klass);
  601. smalltalk.addMethod(
  602. '_current',
  603. smalltalk.method({
  604. selector: 'current',
  605. category: 'instance creation',
  606. fn: function (){
  607. var self=this;
  608. return self['@current']._ifNil_((function(){return self['@current']=self.klass.superclass.fn.prototype['_new'].apply(self, []);}));
  609. return self;},
  610. source: unescape('current%0A%20%20%20%20%5Ecurrent%20ifNil%3A%20%5Bcurrent%20%3A%3D%20super%20new%5D%0A')}),
  611. smalltalk.Transcript.klass);
  612. smalltalk.addMethod(
  613. '_show_',
  614. smalltalk.method({
  615. selector: 'show:',
  616. category: 'printing',
  617. fn: function (anObject){
  618. var self=this;
  619. self._current()._show_(anObject);
  620. return self;},
  621. source: unescape('show%3A%20anObject%0A%20%20%20%20self%20current%20show%3A%20anObject%0A')}),
  622. smalltalk.Transcript.klass);
  623. smalltalk.addMethod(
  624. '_cr',
  625. smalltalk.method({
  626. selector: 'cr',
  627. category: 'printing',
  628. fn: function (){
  629. var self=this;
  630. self._current()._show_(smalltalk.String._cr());
  631. return self;},
  632. source: unescape('cr%0A%20%20%20%20self%20current%20show%3A%20String%20cr%0A')}),
  633. smalltalk.Transcript.klass);
  634. smalltalk.addMethod(
  635. '_clear',
  636. smalltalk.method({
  637. selector: 'clear',
  638. category: 'printing',
  639. fn: function (){
  640. var self=this;
  641. self._current()._clear();
  642. return self;},
  643. source: unescape('clear%0A%20%20%20%20self%20current%20clear%0A')}),
  644. smalltalk.Transcript.klass);
  645. smalltalk.addClass('Browser', smalltalk.TabWidget, ['selectedCategory', 'selectedClass', 'selectedProtocol', 'selectedMethod', 'commitButton', 'categoriesList', 'classesList', 'protocolsList', 'methodsList', 'sourceTextarea', 'tabsList', 'selectedTab', 'saveButton', 'classButtons', 'methodButtons', 'unsavedChanges'], 'IDE');
  646. smalltalk.addMethod(
  647. '_initialize',
  648. smalltalk.method({
  649. selector: 'initialize',
  650. category: 'initialization',
  651. fn: function (){
  652. var self=this;
  653. self.klass.superclass.fn.prototype['_initialize'].apply(self, []);
  654. self['@selectedTab']="instance";
  655. self['@unsavedChanges']=false;
  656. return self;},
  657. 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')}),
  658. smalltalk.Browser);
  659. smalltalk.addMethod(
  660. '_label',
  661. smalltalk.method({
  662. selector: 'label',
  663. category: 'accessing',
  664. fn: function (){
  665. var self=this;
  666. return self['@selectedClass']._ifNil_ifNotNil_((function(){return unescape("Browser%20%28nil%29");}),(function(){return self['@selectedClass']._name();}));
  667. return self;},
  668. 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')}),
  669. smalltalk.Browser);
  670. smalltalk.addMethod(
  671. '_categories',
  672. smalltalk.method({
  673. selector: 'categories',
  674. category: 'accessing',
  675. fn: function (){
  676. var self=this;
  677. var categories=nil;
  678. categories=smalltalk.Array._new();
  679. smalltalk.Smalltalk._current()._classes()._do_((function(each){return categories._includes_(each._category())._ifFalse_((function(){return categories._add_(each._category());}));}));
  680. return categories._sort();
  681. return self;},
  682. 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')}),
  683. smalltalk.Browser);
  684. smalltalk.addMethod(
  685. '_classes',
  686. smalltalk.method({
  687. selector: 'classes',
  688. category: 'accessing',
  689. fn: function (){
  690. var self=this;
  691. return smalltalk.Smalltalk._current()._classes()._select_((function(each){return each._category().__eq(self['@selectedCategory']);}))._sort_((function(a, b){return a._name().__gt(b._name());}));
  692. return self;},
  693. 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')}),
  694. smalltalk.Browser);
  695. smalltalk.addMethod(
  696. '_protocols',
  697. smalltalk.method({
  698. selector: 'protocols',
  699. category: 'accessing',
  700. fn: function (){
  701. var self=this;
  702. try{var klass=nil;
  703. var protocols=nil;
  704. protocols=smalltalk.Array._new();
  705. 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());}));}));}));
  706. (function(){throw({name: 'stReturn', selector: '_protocols', fn: function(){return protocols._sort()}})})();
  707. return self;
  708. } catch(e) {if(e.name === 'stReturn' && e.selector === '_protocols'){return e.fn()} throw(e)}},
  709. 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')}),
  710. smalltalk.Browser);
  711. smalltalk.addMethod(
  712. '_methods',
  713. smalltalk.method({
  714. selector: 'methods',
  715. category: 'accessing',
  716. fn: function (){
  717. var self=this;
  718. try{var klass=nil;
  719. self['@selectedTab'].__eq("comment")._ifTrue_((function(){return (function(){throw({name: 'stReturn', selector: '_methods', fn: function(){return []}})})();}));
  720. self['@selectedClass']._ifNotNil_((function(){return klass=self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_((function(){return self['@selectedClass'];}),(function(){return self['@selectedClass']._class();}));}));
  721. (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());}))}})})();
  722. return self;
  723. } catch(e) {if(e.name === 'stReturn' && e.selector === '_methods'){return e.fn()} throw(e)}},
  724. 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')}),
  725. smalltalk.Browser);
  726. smalltalk.addMethod(
  727. '_source',
  728. smalltalk.method({
  729. selector: 'source',
  730. category: 'accessing',
  731. fn: function (){
  732. var self=this;
  733. try{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();}))}})})();}));
  734. (function(){throw({name: 'stReturn', selector: '_source', fn: function(){return self['@selectedClass']._ifNil_ifNotNil_((function(){return "";}),(function(){return self._classCommentSource();}))}})})();
  735. return self;
  736. } catch(e) {if(e.name === 'stReturn' && e.selector === '_source'){return e.fn()} throw(e)}},
  737. 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')}),
  738. smalltalk.Browser);
  739. smalltalk.addMethod(
  740. '_methodSource',
  741. smalltalk.method({
  742. selector: 'methodSource',
  743. category: 'accessing',
  744. fn: function (){
  745. var self=this;
  746. return self['@selectedMethod']._ifNil_ifNotNil_((function(){return self._dummyMethodSource();}),(function(){return self['@selectedMethod']._source();}));
  747. return self;},
  748. source: unescape('methodSource%0A%20%20%20%20%5EselectedMethod%0A%09ifNil%3A%20%5Bself%20dummyMethodSource%5D%0A%09ifNotNil%3A%20%5BselectedMethod%20source%5D%0A')}),
  749. smalltalk.Browser);
  750. smalltalk.addMethod(
  751. '_dummyMethodSource',
  752. smalltalk.method({
  753. selector: 'dummyMethodSource',
  754. category: 'accessing',
  755. fn: function (){
  756. var self=this;
  757. return unescape("messageSelectorAndArgumentNames%0A%09%22comment%20stating%20purpose%20of%20message%22%0A%0A%09%7C%20temporary%20variable%20names%20%7C%0A%09statements");
  758. return self;},
  759. 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')}),
  760. smalltalk.Browser);
  761. smalltalk.addMethod(
  762. '_declarationSource',
  763. smalltalk.method({
  764. selector: 'declarationSource',
  765. category: 'accessing',
  766. fn: function (){
  767. var self=this;
  768. return self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_((function(){return self._classDeclarationSource();}),(function(){return self._metaclassDeclarationSource();}));
  769. return self;},
  770. 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')}),
  771. smalltalk.Browser);
  772. smalltalk.addMethod(
  773. '_classDeclarationSource',
  774. smalltalk.method({
  775. selector: 'classDeclarationSource',
  776. category: 'accessing',
  777. fn: function (){
  778. var self=this;
  779. var stream=nil;
  780. stream=""._writeStream();
  781. 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);}));
  782. return stream._contents();
  783. return self;},
  784. 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')}),
  785. smalltalk.Browser);
  786. smalltalk.addMethod(
  787. '_metaclassDeclarationSource',
  788. smalltalk.method({
  789. selector: 'metaclassDeclarationSource',
  790. category: 'accessing',
  791. fn: function (){
  792. var self=this;
  793. var stream=nil;
  794. stream=""._writeStream();
  795. 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"));}));
  796. return stream._contents();
  797. return self;},
  798. 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')}),
  799. smalltalk.Browser);
  800. smalltalk.addMethod(
  801. '_classCommentSource',
  802. smalltalk.method({
  803. selector: 'classCommentSource',
  804. category: 'accessing',
  805. fn: function (){
  806. var self=this;
  807. return self['@selectedClass']._comment();
  808. return self;},
  809. source: unescape('classCommentSource%0A%20%20%20%20%5EselectedClass%20comment%0A')}),
  810. smalltalk.Browser);
  811. smalltalk.addMethod(
  812. '_enableSaveButton',
  813. smalltalk.method({
  814. selector: 'enableSaveButton',
  815. category: 'actions',
  816. fn: function (){
  817. var self=this;
  818. self['@saveButton']._removeAt_("disabled");
  819. self['@unsavedChanges']=true;
  820. return self;},
  821. source: unescape('enableSaveButton%0A%20%20%20%20saveButton%20removeAt%3A%20%27disabled%27.%0A%20%20%20%20unsavedChanges%20%3A%3D%20true%0A')}),
  822. smalltalk.Browser);
  823. smalltalk.addMethod(
  824. '_disableSaveButton',
  825. smalltalk.method({
  826. selector: 'disableSaveButton',
  827. category: 'actions',
  828. fn: function (){
  829. var self=this;
  830. self['@saveButton']._ifNotNil_((function(){return self['@saveButton']._at_put_("disabled",true);}));
  831. self['@unsavedChanges']=false;
  832. return self;},
  833. 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')}),
  834. smalltalk.Browser);
  835. smalltalk.addMethod(
  836. '_hideClassButtons',
  837. smalltalk.method({
  838. selector: 'hideClassButtons',
  839. category: 'actions',
  840. fn: function (){
  841. var self=this;
  842. self['@classButtons']._asJQuery()._hide();
  843. return self;},
  844. source: unescape('hideClassButtons%0A%20%20%20%20classButtons%20asJQuery%20hide%0A')}),
  845. smalltalk.Browser);
  846. smalltalk.addMethod(
  847. '_showClassButtons',
  848. smalltalk.method({
  849. selector: 'showClassButtons',
  850. category: 'actions',
  851. fn: function (){
  852. var self=this;
  853. self['@classButtons']._asJQuery()._show();
  854. return self;},
  855. source: unescape('showClassButtons%0A%20%20%20%20classButtons%20asJQuery%20show%0A')}),
  856. smalltalk.Browser);
  857. smalltalk.addMethod(
  858. '_hideMethodButtons',
  859. smalltalk.method({
  860. selector: 'hideMethodButtons',
  861. category: 'actions',
  862. fn: function (){
  863. var self=this;
  864. self['@methodButtons']._asJQuery()._hide();
  865. return self;},
  866. source: unescape('hideMethodButtons%0A%20%20%20%20methodButtons%20asJQuery%20hide%0A')}),
  867. smalltalk.Browser);
  868. smalltalk.addMethod(
  869. '_showMethodButtons',
  870. smalltalk.method({
  871. selector: 'showMethodButtons',
  872. category: 'actions',
  873. fn: function (){
  874. var self=this;
  875. self['@methodButtons']._asJQuery()._show();
  876. return self;},
  877. source: unescape('showMethodButtons%0A%20%20%20%20methodButtons%20asJQuery%20show%0A')}),
  878. smalltalk.Browser);
  879. smalltalk.addMethod(
  880. '_compile',
  881. smalltalk.method({
  882. selector: 'compile',
  883. category: 'actions',
  884. fn: function (){
  885. var self=this;
  886. self._disableSaveButton();
  887. self['@selectedTab'].__eq("comment")._ifTrue_((function(){return self['@selectedClass']._ifNotNil_((function(){return self._compileClassComment();}));}));
  888. self['@selectedProtocol']._notNil()._or_((function(){return self['@selectedMethod']._notNil();}))._ifFalse_ifTrue_((function(){return self._compileDefinition();}),(function(){return self._compileMethodDefinition();}));
  889. return self;},
  890. 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')}),
  891. smalltalk.Browser);
  892. smalltalk.addMethod(
  893. '_compileClassComment',
  894. smalltalk.method({
  895. selector: 'compileClassComment',
  896. category: 'actions',
  897. fn: function (){
  898. var self=this;
  899. self['@selectedClass']._comment_(self['@sourceTextarea']._asJQuery()._val());
  900. return self;},
  901. source: unescape('compileClassComment%0A%20%20%20%20selectedClass%20comment%3A%20sourceTextarea%20asJQuery%20val%0A')}),
  902. smalltalk.Browser);
  903. smalltalk.addMethod(
  904. '_compileMethodDefinition',
  905. smalltalk.method({
  906. selector: 'compileMethodDefinition',
  907. category: 'actions',
  908. fn: function (){
  909. var self=this;
  910. self['@selectedTab'].__eq("instance")._ifTrue_ifFalse_((function(){return self._compileMethodDefinitionFor_(self['@selectedClass']);}),(function(){return self._compileMethodDefinitionFor_(self['@selectedClass']._class());}));
  911. return self;},
  912. 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')}),
  913. smalltalk.Browser);
  914. smalltalk.addMethod(
  915. '_compileMethodDefinitionFor_',
  916. smalltalk.method({
  917. selector: 'compileMethodDefinitionFor:',
  918. category: 'actions',
  919. fn: function (aClass){
  920. var self=this;
  921. try{var compiler=nil;
  922. var method=nil;
  923. var source=nil;
  924. var node=nil;
  925. source=self['@sourceTextarea']._asJQuery()._val();
  926. self['@selectedProtocol']._ifNil_((function(){return self['@selectedProtocol']=self['@selectedMethod']._category();}));
  927. compiler=smalltalk.Compiler._new();
  928. node=compiler._parse_(source);
  929. 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()))}})})();}));
  930. compiler._currentClass_(self['@selectedClass']);
  931. method=compiler._eval_(compiler._compileNode_(node));
  932. method._category_(self['@selectedProtocol']);
  933. aClass._addCompiledMethod_(method);
  934. self._updateMethodsList();
  935. self._selectMethod_(method);
  936. return self;
  937. } catch(e) {if(e.name === 'stReturn' && e.selector === '_compileMethodDefinitionFor_'){return e.fn()} throw(e)}},
  938. 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')}),
  939. smalltalk.Browser);
  940. smalltalk.addMethod(
  941. '_compileDefinition',
  942. smalltalk.method({
  943. selector: 'compileDefinition',
  944. category: 'actions',
  945. fn: function (){
  946. var self=this;
  947. var newClass=nil;
  948. newClass=smalltalk.Compiler._new()._loadExpression_(self['@sourceTextarea']._asJQuery()._val());
  949. (function($rec){$rec._updateCategoriesList();return $rec._updateClassesList();})(self);
  950. return self;},
  951. 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')}),
  952. smalltalk.Browser);
  953. smalltalk.addMethod(
  954. '_commitCategory',
  955. smalltalk.method({
  956. selector: 'commitCategory',
  957. category: 'actions',
  958. fn: function (){
  959. var self=this;
  960. 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_(unescape("js/").__comma(self['@selectedCategory']).__comma(".js")));}));
  961. return self;},
  962. source: unescape('commitCategory%0A%20%20%20%20selectedCategory%20ifNotNil%3A%20%5B%0A%09%28Ajax%20url%3A%20%27js/%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')}),
  963. smalltalk.Browser);
  964. smalltalk.addMethod(
  965. '_cancelChanges',
  966. smalltalk.method({
  967. selector: 'cancelChanges',
  968. category: 'actions',
  969. fn: function (){
  970. var self=this;
  971. return self['@unsavedChanges']._ifTrue_ifFalse_((function(){return self._confirm_(unescape("Cancel%20changes%3F"));}),(function(){return true;}));
  972. return self;},
  973. 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')}),
  974. smalltalk.Browser);
  975. smalltalk.addMethod(
  976. '_removeClass',
  977. smalltalk.method({
  978. selector: 'removeClass',
  979. category: 'actions',
  980. fn: function (){
  981. var self=this;
  982. 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);}));
  983. return self;},
  984. 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')}),
  985. smalltalk.Browser);
  986. smalltalk.addMethod(
  987. '_removeMethod',
  988. smalltalk.method({
  989. selector: 'removeMethod',
  990. category: 'actions',
  991. fn: function (){
  992. var self=this;
  993. 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['@selectedClass']._removeCompiledMethod_(self['@selectedMethod']);return self._selectMethod_(nil);}));}));
  994. return self;},
  995. 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%09selectedClass%20removeCompiledMethod%3A%20selectedMethod.%0A%09%09self%20selectMethod%3A%20nil%5D%5D%0A')}),
  996. smalltalk.Browser);
  997. smalltalk.addMethod(
  998. '_setMethodProtocol_',
  999. smalltalk.method({
  1000. selector: 'setMethodProtocol:',
  1001. category: 'actions',
  1002. fn: function (aString){
  1003. var self=this;
  1004. 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);}));}));
  1005. return self;},
  1006. 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')}),
  1007. smalltalk.Browser);
  1008. smalltalk.addMethod(
  1009. '_addNewProtocol',
  1010. smalltalk.method({
  1011. selector: 'addNewProtocol',
  1012. category: 'actions',
  1013. fn: function (){
  1014. var self=this;
  1015. var newProtocol=nil;
  1016. newProtocol=self._prompt_("New method protocol");
  1017. newProtocol._notEmpty()._ifTrue_((function(){self['@selectedMethod']._category_(newProtocol);return self._setMethodProtocol_(newProtocol);}));
  1018. return self;},
  1019. 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')}),
  1020. smalltalk.Browser);
  1021. smalltalk.addMethod(
  1022. '_selectCategory_',
  1023. smalltalk.method({
  1024. selector: 'selectCategory:',
  1025. category: 'actions',
  1026. fn: function (aCategory){
  1027. var self=this;
  1028. 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);}));
  1029. return self;},
  1030. 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')}),
  1031. smalltalk.Browser);
  1032. smalltalk.addMethod(
  1033. '_selectClass_',
  1034. smalltalk.method({
  1035. selector: 'selectClass:',
  1036. category: 'actions',
  1037. fn: function (aClass){
  1038. var self=this;
  1039. 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);}));
  1040. return self;},
  1041. 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')}),
  1042. smalltalk.Browser);
  1043. smalltalk.addMethod(
  1044. '_selectProtocol_',
  1045. smalltalk.method({
  1046. selector: 'selectProtocol:',
  1047. category: 'actions',
  1048. fn: function (aString){
  1049. var self=this;
  1050. self._cancelChanges()._ifTrue_((function(){self['@selectedProtocol']=aString;self['@selectedMethod']=nil;return (function($rec){$rec._updateProtocolsList();$rec._updateMethodsList();return $rec._updateSourceAndButtons();})(self);}));
  1051. return self;},
  1052. 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')}),
  1053. smalltalk.Browser);
  1054. smalltalk.addMethod(
  1055. '_selectMethod_',
  1056. smalltalk.method({
  1057. selector: 'selectMethod:',
  1058. category: 'actions',
  1059. fn: function (aMethod){
  1060. var self=this;
  1061. self._cancelChanges()._ifTrue_((function(){self['@selectedMethod']=aMethod;return (function($rec){$rec._updateProtocolsList();$rec._updateMethodsList();return $rec._updateSourceAndButtons();})(self);}));
  1062. return self;},
  1063. 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')}),
  1064. smalltalk.Browser);
  1065. smalltalk.addMethod(
  1066. '_selectTab_',
  1067. smalltalk.method({
  1068. selector: 'selectTab:',
  1069. category: 'actions',
  1070. fn: function (aString){
  1071. var self=this;
  1072. self._cancelChanges()._ifTrue_((function(){self['@selectedTab']=aString;self._selectProtocol_(nil);return self._updateTabsList();}));
  1073. return self;},
  1074. 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')}),
  1075. smalltalk.Browser);
  1076. smalltalk.addMethod(
  1077. '_renderBoxOn_',
  1078. smalltalk.method({
  1079. selector: 'renderBoxOn:',
  1080. category: 'rendering',
  1081. fn: function (html){
  1082. var self=this;
  1083. (function($rec){$rec._renderTopPanelOn_(html);$rec._renderTabsOn_(html);return $rec._renderBottomPanelOn_(html);})(self);
  1084. return self;},
  1085. 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')}),
  1086. smalltalk.Browser);
  1087. smalltalk.addMethod(
  1088. '_renderTopPanelOn_',
  1089. smalltalk.method({
  1090. selector: 'renderTopPanelOn:',
  1091. category: 'rendering',
  1092. fn: function (html){
  1093. var self=this;
  1094. (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());
  1095. return self;},
  1096. 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')}),
  1097. smalltalk.Browser);
  1098. smalltalk.addMethod(
  1099. '_renderTabsOn_',
  1100. smalltalk.method({
  1101. selector: 'renderTabsOn:',
  1102. category: 'rendering',
  1103. fn: function (html){
  1104. var self=this;
  1105. self['@tabsList']=html._ul()._class_("jt_tabs");
  1106. self._updateTabsList();
  1107. return self;},
  1108. 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')}),
  1109. smalltalk.Browser);
  1110. smalltalk.addMethod(
  1111. '_renderBottomPanelOn_',
  1112. smalltalk.method({
  1113. selector: 'renderBottomPanelOn:',
  1114. category: 'rendering',
  1115. fn: function (html){
  1116. var self=this;
  1117. (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());
  1118. return self;},
  1119. 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')}),
  1120. smalltalk.Browser);
  1121. smalltalk.addMethod(
  1122. '_renderButtonsOn_',
  1123. smalltalk.method({
  1124. selector: 'renderButtonsOn:',
  1125. category: 'rendering',
  1126. fn: function (html){
  1127. var self=this;
  1128. self['@saveButton']=html._button();
  1129. (function($rec){$rec._with_("Save");return $rec._onClick_((function(){return self._compile();}));})(self['@saveButton']);
  1130. self['@methodButtons']=html._span();
  1131. self['@classButtons']=html._span();
  1132. self._updateSourceAndButtons();
  1133. return self;},
  1134. 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')}),
  1135. smalltalk.Browser);
  1136. smalltalk.addMethod(
  1137. '_updateCategoriesList',
  1138. smalltalk.method({
  1139. selector: 'updateCategoriesList',
  1140. category: 'updating',
  1141. fn: function (){
  1142. var self=this;
  1143. self['@categoriesList']._contents_((function(html){return self._categories()._do_((function(each){var li=nil;
  1144. 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);}));}));
  1145. return self;},
  1146. 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')}),
  1147. smalltalk.Browser);
  1148. smalltalk.addMethod(
  1149. '_updateClassesList',
  1150. smalltalk.method({
  1151. selector: 'updateClassesList',
  1152. category: 'updating',
  1153. fn: function (){
  1154. var self=this;
  1155. smalltalk.TabManager._current()._update();
  1156. self['@classesList']._contents_((function(html){return self._classes()._do_((function(each){var li=nil;
  1157. 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);}));}));
  1158. return self;},
  1159. 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')}),
  1160. smalltalk.Browser);
  1161. smalltalk.addMethod(
  1162. '_updateProtocolsList',
  1163. smalltalk.method({
  1164. selector: 'updateProtocolsList',
  1165. category: 'updating',
  1166. fn: function (){
  1167. var self=this;
  1168. self['@protocolsList']._contents_((function(html){return self._protocols()._do_((function(each){var li=nil;
  1169. 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);}));}));
  1170. return self;},
  1171. 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')}),
  1172. smalltalk.Browser);
  1173. smalltalk.addMethod(
  1174. '_updateMethodsList',
  1175. smalltalk.method({
  1176. selector: 'updateMethodsList',
  1177. category: 'updating',
  1178. fn: function (){
  1179. var self=this;
  1180. self['@methodsList']._contents_((function(html){return self._methods()._do_((function(each){var li=nil;
  1181. 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);}));}));
  1182. return self;},
  1183. 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')}),
  1184. smalltalk.Browser);
  1185. smalltalk.addMethod(
  1186. '_updateTabsList',
  1187. smalltalk.method({
  1188. selector: 'updateTabsList',
  1189. category: 'updating',
  1190. fn: function (){
  1191. var self=this;
  1192. self['@tabsList']._contents_((function(html){var li=nil;
  1193. 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);}));
  1194. return self;},
  1195. 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')}),
  1196. smalltalk.Browser);
  1197. smalltalk.addMethod(
  1198. '_updateSourceAndButtons',
  1199. smalltalk.method({
  1200. selector: 'updateSourceAndButtons',
  1201. category: 'updating',
  1202. fn: function (){
  1203. var self=this;
  1204. self._disableSaveButton();
  1205. self['@classButtons']._contents_((function(html){return (function($rec){$rec._with_("Remove class");return $rec._onClick_((function(){return self._removeClass();}));})(html._button());}));
  1206. 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());}));
  1207. 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();}));
  1208. self['@sourceTextarea']._asJQuery()._val_(self._source());
  1209. return self;},
  1210. source: unescape('updateSourceAndButtons%0A%20%20%20%20self%20disableSaveButton.%0A%20%20%20%20classButtons%20contents%3A%20%5B%3Ahtml%20%7C%0A%09html%20button%0A%09%20%20%20%20with%3A%20%27Remove%20class%27%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20removeClass%5D%5D.%0A%20%20%20%20methodButtons%20contents%3A%20%5B%3Ahtml%20%7C%0A%09html%20button%0A%09%20%20%20%20with%3A%20%27Remove%20method%27%3B%0A%09%20%20%20%20onClick%3A%20%5Bself%20removeMethod%5D.%0A%09html%20select%20%0A%09%20%20%20%20onChange%3A%20%5B%3As%20%7C%20self%20setMethodProtocol%3A%20s%20val%5D%3B%0A%09%20%20%20%20with%3A%20%5B%0A%09%09html%20option%0A%09%09%20%20%20%20with%3A%20%27Method%20protocol%27%3B%0A%09%09%20%20%20%20at%3A%20%27disabled%27%20put%3A%20%27disabled%27.%0A%09%09html%20option%0A%09%09%20%20%20%20class%3A%20%27important%27%3B%0A%09%09%20%20%20%20with%3A%20%27New...%27.%0A%09%09self%20protocols%20do%3A%20%5B%3Aeach%20%7C%0A%09%09%20%20%20%20html%20option%20with%3A%20each%5D%5D%5D.%0A%20%20%20%20selectedMethod%20%0A%09ifNil%3A%20%5B%0A%09%20%20%20%20self%20hideMethodButtons.%0A%09%20%20%20%20selectedClass%20%0A%09%09ifNil%3A%20%5Bself%20hideClassButtons%5D%0A%09%20%20%20%20ifNotNil%3A%20%5Bself%20showClassButtons%5D%5D%0A%09ifNotNil%3A%20%5B%0A%09%20%20%20%20self%20hideClassButtons.%0A%09%20%20%20%20self%20showMethodButtons%5D.%0A%20%20%20%20sourceTextarea%20asJQuery%20val%3A%20self%20source%0A')}),
  1211. smalltalk.Browser);
  1212. smalltalk.addMethod(
  1213. '_canBeClosed',
  1214. smalltalk.method({
  1215. selector: 'canBeClosed',
  1216. category: 'testing',
  1217. fn: function (){
  1218. var self=this;
  1219. return true;
  1220. return self;},
  1221. source: unescape('canBeClosed%0A%20%20%20%20%5Etrue%0A')}),
  1222. smalltalk.Browser);
  1223. smalltalk.addMethod(
  1224. '_openOn_',
  1225. smalltalk.method({
  1226. selector: 'openOn:',
  1227. category: 'convenience',
  1228. fn: function (aClass){
  1229. var self=this;
  1230. (function($rec){$rec._open();$rec._selectCategory_(aClass._category());return $rec._selectClass_(aClass);})(self._new());
  1231. return self;},
  1232. 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')}),
  1233. smalltalk.Browser.klass);
  1234. smalltalk.addMethod(
  1235. '_open',
  1236. smalltalk.method({
  1237. selector: 'open',
  1238. category: 'convenience',
  1239. fn: function (){
  1240. var self=this;
  1241. self._new()._open();
  1242. return self;},
  1243. source: unescape('open%0A%20%20%20%20self%20new%20open%0A')}),
  1244. smalltalk.Browser.klass);