ide.js 56 KB

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