1
0

IDE.js 85 KB

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