Moka-Decorators.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788
  1. define("amber_core/Moka-Decorators", ["amber_vm/smalltalk", "amber_vm/nil", "amber_vm/_st", "amber_core/Moka-Core"], function(smalltalk,nil,_st){
  2. smalltalk.addPackage('Moka-Decorators');
  3. smalltalk.packages["Moka-Decorators"].transport = {"type":"amd","amdNamespace":"amber_core"};
  4. smalltalk.addClass('MKModalDecorator', smalltalk.MKDecorator, ['overlay', 'closeOnEnter', 'closeOnClick'], 'Moka-Decorators');
  5. smalltalk.MKModalDecorator.comment="I render my `decorated` view as a modal pane.";
  6. smalltalk.addMethod(
  7. smalltalk.method({
  8. selector: "closeOnClick",
  9. category: 'accessing',
  10. fn: function (){
  11. var self=this;
  12. return smalltalk.withContext(function($ctx1) {
  13. var $2,$1;
  14. $2=self["@closeOnClick"];
  15. if(($receiver = $2) == nil || $receiver == null){
  16. $1=false;
  17. } else {
  18. $1=$2;
  19. };
  20. return $1;
  21. }, function($ctx1) {$ctx1.fill(self,"closeOnClick",{},smalltalk.MKModalDecorator)})},
  22. args: [],
  23. source: "closeOnClick\x0a\x09^ closeOnClick ifNil: [ false ]",
  24. messageSends: ["ifNil:"],
  25. referencedClasses: []
  26. }),
  27. smalltalk.MKModalDecorator);
  28. smalltalk.addMethod(
  29. smalltalk.method({
  30. selector: "closeOnClick:",
  31. category: 'accessing',
  32. fn: function (aBoolean){
  33. var self=this;
  34. return smalltalk.withContext(function($ctx1) {
  35. self["@closeOnClick"]=aBoolean;
  36. return self}, function($ctx1) {$ctx1.fill(self,"closeOnClick:",{aBoolean:aBoolean},smalltalk.MKModalDecorator)})},
  37. args: ["aBoolean"],
  38. source: "closeOnClick: aBoolean\x0a\x09closeOnClick := aBoolean",
  39. messageSends: [],
  40. referencedClasses: []
  41. }),
  42. smalltalk.MKModalDecorator);
  43. smalltalk.addMethod(
  44. smalltalk.method({
  45. selector: "closeOnEnter",
  46. category: 'accessing',
  47. fn: function (){
  48. var self=this;
  49. return smalltalk.withContext(function($ctx1) {
  50. var $2,$1;
  51. $2=self["@closeOnEnter"];
  52. if(($receiver = $2) == nil || $receiver == null){
  53. $1=false;
  54. } else {
  55. $1=$2;
  56. };
  57. return $1;
  58. }, function($ctx1) {$ctx1.fill(self,"closeOnEnter",{},smalltalk.MKModalDecorator)})},
  59. args: [],
  60. source: "closeOnEnter\x0a\x09^ closeOnEnter ifNil: [ false ]",
  61. messageSends: ["ifNil:"],
  62. referencedClasses: []
  63. }),
  64. smalltalk.MKModalDecorator);
  65. smalltalk.addMethod(
  66. smalltalk.method({
  67. selector: "closeOnEnter:",
  68. category: 'accessing',
  69. fn: function (aBoolean){
  70. var self=this;
  71. return smalltalk.withContext(function($ctx1) {
  72. self["@closeOnEnter"]=aBoolean;
  73. return self}, function($ctx1) {$ctx1.fill(self,"closeOnEnter:",{aBoolean:aBoolean},smalltalk.MKModalDecorator)})},
  74. args: ["aBoolean"],
  75. source: "closeOnEnter: aBoolean\x0a\x09closeOnEnter := aBoolean",
  76. messageSends: [],
  77. referencedClasses: []
  78. }),
  79. smalltalk.MKModalDecorator);
  80. smalltalk.addMethod(
  81. smalltalk.method({
  82. selector: "cssClass",
  83. category: 'accessing',
  84. fn: function (){
  85. var self=this;
  86. return smalltalk.withContext(function($ctx1) {
  87. var $1;
  88. $1=_st(smalltalk.MKModalDecorator.superclass.fn.prototype._cssClass.apply(_st(self), [])).__comma(" mk_modal");
  89. return $1;
  90. }, function($ctx1) {$ctx1.fill(self,"cssClass",{},smalltalk.MKModalDecorator)})},
  91. args: [],
  92. source: "cssClass\x0a\x09^ super cssClass, ' mk_modal'",
  93. messageSends: [",", "cssClass"],
  94. referencedClasses: []
  95. }),
  96. smalltalk.MKModalDecorator);
  97. smalltalk.addMethod(
  98. smalltalk.method({
  99. selector: "defaultControllerClass",
  100. category: 'defaults',
  101. fn: function (){
  102. var self=this;
  103. function $MKModalController(){return smalltalk.MKModalController||(typeof MKModalController=="undefined"?nil:MKModalController)}
  104. return smalltalk.withContext(function($ctx1) {
  105. return $MKModalController();
  106. }, function($ctx1) {$ctx1.fill(self,"defaultControllerClass",{},smalltalk.MKModalDecorator)})},
  107. args: [],
  108. source: "defaultControllerClass\x0a\x09^ MKModalController",
  109. messageSends: [],
  110. referencedClasses: ["MKModalController"]
  111. }),
  112. smalltalk.MKModalDecorator);
  113. smalltalk.addMethod(
  114. smalltalk.method({
  115. selector: "defaultLayout",
  116. category: 'defaults',
  117. fn: function (){
  118. var self=this;
  119. return smalltalk.withContext(function($ctx1) {
  120. var $2,$3,$1;
  121. $2=smalltalk.MKModalDecorator.superclass.fn.prototype._defaultLayout.apply(_st(self), []);
  122. _st($2)._centerY_((0));
  123. _st($2)._centerX_((0));
  124. $3=_st($2)._yourself();
  125. $1=$3;
  126. return $1;
  127. }, function($ctx1) {$ctx1.fill(self,"defaultLayout",{},smalltalk.MKModalDecorator)})},
  128. args: [],
  129. source: "defaultLayout\x0a\x09^ super defaultLayout\x0a\x09\x09centerY: 0;\x0a\x09\x09centerX: 0;\x22\x0a\x09\x09width: 300;\x0a\x09\x09height: 200;\x22\x0a\x09\x09yourself",
  130. messageSends: ["centerY:", "defaultLayout", "centerX:", "yourself"],
  131. referencedClasses: []
  132. }),
  133. smalltalk.MKModalDecorator);
  134. smalltalk.addMethod(
  135. smalltalk.method({
  136. selector: "overlay",
  137. category: 'accessing',
  138. fn: function (){
  139. var self=this;
  140. function $MKOverlayView(){return smalltalk.MKOverlayView||(typeof MKOverlayView=="undefined"?nil:MKOverlayView)}
  141. return smalltalk.withContext(function($ctx1) {
  142. var $2,$1;
  143. $2=self["@overlay"];
  144. if(($receiver = $2) == nil || $receiver == null){
  145. self["@overlay"]=_st($MKOverlayView())._childView_(self);
  146. $1=self["@overlay"];
  147. } else {
  148. $1=$2;
  149. };
  150. return $1;
  151. }, function($ctx1) {$ctx1.fill(self,"overlay",{},smalltalk.MKModalDecorator)})},
  152. args: [],
  153. source: "overlay\x0a\x09^ overlay ifNil: [ overlay := MKOverlayView childView: self ]",
  154. messageSends: ["ifNil:", "childView:"],
  155. referencedClasses: ["MKOverlayView"]
  156. }),
  157. smalltalk.MKModalDecorator);
  158. smalltalk.addMethod(
  159. smalltalk.method({
  160. selector: "renderOn:",
  161. category: 'rendering',
  162. fn: function (html){
  163. var self=this;
  164. return smalltalk.withContext(function($ctx1) {
  165. smalltalk.MKModalDecorator.superclass.fn.prototype._renderOn_.apply(_st(self), [html]);
  166. _st(self["@root"])._at_put_("tabindex","0");
  167. _st(_st(self["@root"])._asJQuery())._focus();
  168. _st(html)._with_(self._overlay());
  169. return self}, function($ctx1) {$ctx1.fill(self,"renderOn:",{html:html},smalltalk.MKModalDecorator)})},
  170. args: ["html"],
  171. source: "renderOn: html\x0a\x09super renderOn: html.\x0a\x09root at: 'tabindex' put: '0'.\x0a\x09root asJQuery focus.\x0a\x09html with: self overlay",
  172. messageSends: ["renderOn:", "at:put:", "focus", "asJQuery", "with:", "overlay"],
  173. referencedClasses: []
  174. }),
  175. smalltalk.MKModalDecorator);
  176. smalltalk.addMethod(
  177. smalltalk.method({
  178. selector: "zindex",
  179. category: 'accessing',
  180. fn: function (){
  181. var self=this;
  182. return smalltalk.withContext(function($ctx1) {
  183. return (1001);
  184. }, function($ctx1) {$ctx1.fill(self,"zindex",{},smalltalk.MKModalDecorator)})},
  185. args: [],
  186. source: "zindex\x0a\x09^ 1001",
  187. messageSends: [],
  188. referencedClasses: []
  189. }),
  190. smalltalk.MKModalDecorator);
  191. smalltalk.addClass('MKScrollDecorator', smalltalk.MKDecorator, ['verticalScrollbar', 'horizontalScrollbar'], 'Moka-Decorators');
  192. smalltalk.MKScrollDecorator.comment="I decorate a view adding scrollbars around it.\x0a\x0aThe `decorated` view can send `MKViewScrolled` announcement to update the scrollbars position.";
  193. smalltalk.addMethod(
  194. smalltalk.method({
  195. selector: "cssClass",
  196. category: 'accessing',
  197. fn: function (){
  198. var self=this;
  199. return smalltalk.withContext(function($ctx1) {
  200. var $1;
  201. $1=_st(smalltalk.MKScrollDecorator.superclass.fn.prototype._cssClass.apply(_st(self), [])).__comma(" mk_scroll");
  202. return $1;
  203. }, function($ctx1) {$ctx1.fill(self,"cssClass",{},smalltalk.MKScrollDecorator)})},
  204. args: [],
  205. source: "cssClass\x0a\x09^ super cssClass, ' mk_scroll'",
  206. messageSends: [",", "cssClass"],
  207. referencedClasses: []
  208. }),
  209. smalltalk.MKScrollDecorator);
  210. smalltalk.addMethod(
  211. smalltalk.method({
  212. selector: "defaultControllerClass",
  213. category: 'defaults',
  214. fn: function (){
  215. var self=this;
  216. function $MKScrollController(){return smalltalk.MKScrollController||(typeof MKScrollController=="undefined"?nil:MKScrollController)}
  217. return smalltalk.withContext(function($ctx1) {
  218. return $MKScrollController();
  219. }, function($ctx1) {$ctx1.fill(self,"defaultControllerClass",{},smalltalk.MKScrollDecorator)})},
  220. args: [],
  221. source: "defaultControllerClass\x0a\x09^ MKScrollController",
  222. messageSends: [],
  223. referencedClasses: ["MKScrollController"]
  224. }),
  225. smalltalk.MKScrollDecorator);
  226. smalltalk.addMethod(
  227. smalltalk.method({
  228. selector: "domDecoratedSize",
  229. category: 'dom',
  230. fn: function (){
  231. var self=this;
  232. var element;
  233. return smalltalk.withContext(function($ctx1) {
  234. var $1;
  235. element=_st(_st(self._decorated())._asJQuery())._get_((0));
  236. $1=_st(_st(element)._scrollWidth()).__at(_st(element)._scrollHeight());
  237. return $1;
  238. }, function($ctx1) {$ctx1.fill(self,"domDecoratedSize",{element:element},smalltalk.MKScrollDecorator)})},
  239. args: [],
  240. source: "domDecoratedSize\x0a\x09| element |\x0a\x09element := self decorated asJQuery get: 0.\x0a\x09^ element scrollWidth @ element scrollHeight",
  241. messageSends: ["get:", "asJQuery", "decorated", "@", "scrollWidth", "scrollHeight"],
  242. referencedClasses: []
  243. }),
  244. smalltalk.MKScrollDecorator);
  245. smalltalk.addMethod(
  246. smalltalk.method({
  247. selector: "domOverflow",
  248. category: 'dom',
  249. fn: function (){
  250. var self=this;
  251. var element;
  252. return smalltalk.withContext(function($ctx1) {
  253. var $2,$1;
  254. element=_st(_st(self._decorated())._asJQuery())._get_((0));
  255. $2=_st(_st(element)._scrollWidth()).__minus(_st(element)._clientWidth());
  256. $ctx1.sendIdx["-"]=1;
  257. $1=_st($2).__at(_st(_st(element)._scrollHeight()).__minus(_st(element)._clientHeight()));
  258. return $1;
  259. }, function($ctx1) {$ctx1.fill(self,"domOverflow",{element:element},smalltalk.MKScrollDecorator)})},
  260. args: [],
  261. source: "domOverflow\x0a\x09| element |\x0a\x09element := self decorated asJQuery get: 0.\x0a\x09^ (element scrollWidth - element clientWidth) @ (element scrollHeight - element clientHeight)",
  262. messageSends: ["get:", "asJQuery", "decorated", "@", "-", "scrollWidth", "clientWidth", "scrollHeight", "clientHeight"],
  263. referencedClasses: []
  264. }),
  265. smalltalk.MKScrollDecorator);
  266. smalltalk.addMethod(
  267. smalltalk.method({
  268. selector: "domScrollPercent",
  269. category: 'dom',
  270. fn: function (){
  271. var self=this;
  272. return smalltalk.withContext(function($ctx1) {
  273. var $1;
  274. $1=_st(self._domScrollbarPosition()).__slash(_st(self._domSize()).__minus(self._domScrollbarSize()));
  275. return $1;
  276. }, function($ctx1) {$ctx1.fill(self,"domScrollPercent",{},smalltalk.MKScrollDecorator)})},
  277. args: [],
  278. source: "domScrollPercent\x0a\x09^ self domScrollbarPosition / (self domSize - self domScrollbarSize)",
  279. messageSends: ["/", "domScrollbarPosition", "-", "domSize", "domScrollbarSize"],
  280. referencedClasses: []
  281. }),
  282. smalltalk.MKScrollDecorator);
  283. smalltalk.addMethod(
  284. smalltalk.method({
  285. selector: "domScrollPosition",
  286. category: 'dom',
  287. fn: function (){
  288. var self=this;
  289. return smalltalk.withContext(function($ctx1) {
  290. var $1;
  291. $1=_st(_st(self._domDecoratedSize()).__minus(self._domSize())).__star(self._domScrollPercent());
  292. return $1;
  293. }, function($ctx1) {$ctx1.fill(self,"domScrollPosition",{},smalltalk.MKScrollDecorator)})},
  294. args: [],
  295. source: "domScrollPosition\x0a\x09^ (self domDecoratedSize - self domSize) * self domScrollPercent",
  296. messageSends: ["*", "-", "domDecoratedSize", "domSize", "domScrollPercent"],
  297. referencedClasses: []
  298. }),
  299. smalltalk.MKScrollDecorator);
  300. smalltalk.addMethod(
  301. smalltalk.method({
  302. selector: "domScrollbarPosition",
  303. category: 'dom',
  304. fn: function (){
  305. var self=this;
  306. return smalltalk.withContext(function($ctx1) {
  307. var $4,$3,$2,$1;
  308. $4=_st(self["@horizontalScrollbar"])._asJQuery();
  309. $ctx1.sendIdx["asJQuery"]=1;
  310. $3=_st($4)._position();
  311. $ctx1.sendIdx["position"]=1;
  312. $2=_st($3)._left();
  313. $1=_st($2).__at(_st(_st(_st(self["@verticalScrollbar"])._asJQuery())._position())._top());
  314. return $1;
  315. }, function($ctx1) {$ctx1.fill(self,"domScrollbarPosition",{},smalltalk.MKScrollDecorator)})},
  316. args: [],
  317. source: "domScrollbarPosition\x0a\x09^ horizontalScrollbar asJQuery position left @ verticalScrollbar asJQuery position top",
  318. messageSends: ["@", "left", "position", "asJQuery", "top"],
  319. referencedClasses: []
  320. }),
  321. smalltalk.MKScrollDecorator);
  322. smalltalk.addMethod(
  323. smalltalk.method({
  324. selector: "domScrollbarSize",
  325. category: 'dom',
  326. fn: function (){
  327. var self=this;
  328. return smalltalk.withContext(function($ctx1) {
  329. var $3,$2,$1;
  330. $3=_st(self["@horizontalScrollbar"])._asJQuery();
  331. $ctx1.sendIdx["asJQuery"]=1;
  332. $2=_st($3)._width();
  333. $1=_st($2).__at(_st(_st(self["@verticalScrollbar"])._asJQuery())._height());
  334. return $1;
  335. }, function($ctx1) {$ctx1.fill(self,"domScrollbarSize",{},smalltalk.MKScrollDecorator)})},
  336. args: [],
  337. source: "domScrollbarSize\x0a\x09^ horizontalScrollbar asJQuery width @ verticalScrollbar asJQuery height",
  338. messageSends: ["@", "width", "asJQuery", "height"],
  339. referencedClasses: []
  340. }),
  341. smalltalk.MKScrollDecorator);
  342. smalltalk.addMethod(
  343. smalltalk.method({
  344. selector: "hasHorizontalOverflow",
  345. category: 'testing',
  346. fn: function (){
  347. var self=this;
  348. return smalltalk.withContext(function($ctx1) {
  349. var $1;
  350. $1=_st(_st(self._domOverflow())._x()).__gt((0));
  351. return $1;
  352. }, function($ctx1) {$ctx1.fill(self,"hasHorizontalOverflow",{},smalltalk.MKScrollDecorator)})},
  353. args: [],
  354. source: "hasHorizontalOverflow\x0a\x09^ self domOverflow x > 0",
  355. messageSends: [">", "x", "domOverflow"],
  356. referencedClasses: []
  357. }),
  358. smalltalk.MKScrollDecorator);
  359. smalltalk.addMethod(
  360. smalltalk.method({
  361. selector: "hasVerticalOverflow",
  362. category: 'testing',
  363. fn: function (){
  364. var self=this;
  365. return smalltalk.withContext(function($ctx1) {
  366. var $1;
  367. $1=_st(_st(self._domOverflow())._y()).__gt((0));
  368. return $1;
  369. }, function($ctx1) {$ctx1.fill(self,"hasVerticalOverflow",{},smalltalk.MKScrollDecorator)})},
  370. args: [],
  371. source: "hasVerticalOverflow\x0a\x09^ self domOverflow y > 0",
  372. messageSends: [">", "y", "domOverflow"],
  373. referencedClasses: []
  374. }),
  375. smalltalk.MKScrollDecorator);
  376. smalltalk.addMethod(
  377. smalltalk.method({
  378. selector: "horizontalScrollbar",
  379. category: 'accessing',
  380. fn: function (){
  381. var self=this;
  382. return smalltalk.withContext(function($ctx1) {
  383. var $1;
  384. $1=self["@horizontalScrollbar"];
  385. return $1;
  386. }, function($ctx1) {$ctx1.fill(self,"horizontalScrollbar",{},smalltalk.MKScrollDecorator)})},
  387. args: [],
  388. source: "horizontalScrollbar\x0a\x09^ horizontalScrollbar",
  389. messageSends: [],
  390. referencedClasses: []
  391. }),
  392. smalltalk.MKScrollDecorator);
  393. smalltalk.addMethod(
  394. smalltalk.method({
  395. selector: "observeDecorated",
  396. category: 'observing',
  397. fn: function (){
  398. var self=this;
  399. function $MKViewScroll(){return smalltalk.MKViewScroll||(typeof MKViewScroll=="undefined"?nil:MKViewScroll)}
  400. return smalltalk.withContext(function($ctx1) {
  401. _st(self._decorated())._on_send_to_($MKViewScroll(),"onDecoratedScroll",self._controller());
  402. return self}, function($ctx1) {$ctx1.fill(self,"observeDecorated",{},smalltalk.MKScrollDecorator)})},
  403. args: [],
  404. source: "observeDecorated\x0a\x09self decorated \x0a\x09\x09on: MKViewScroll \x0a\x09\x09send: #onDecoratedScroll\x0a\x09\x09to: self controller",
  405. messageSends: ["on:send:to:", "decorated", "controller"],
  406. referencedClasses: ["MKViewScroll"]
  407. }),
  408. smalltalk.MKScrollDecorator);
  409. smalltalk.addMethod(
  410. smalltalk.method({
  411. selector: "renderContentOn:",
  412. category: 'rendering',
  413. fn: function (html){
  414. var self=this;
  415. return smalltalk.withContext(function($ctx1) {
  416. var $1,$2,$3,$5,$6,$4,$7,$9,$10,$8;
  417. $1=_st(html)._div();
  418. $ctx1.sendIdx["div"]=1;
  419. _st($1)._class_("mk_scroll_container");
  420. $ctx1.sendIdx["class:"]=1;
  421. $2=_st($1)._with_((function(){
  422. return smalltalk.withContext(function($ctx2) {
  423. return smalltalk.MKScrollDecorator.superclass.fn.prototype._renderContentOn_.apply(_st(self), [html]);
  424. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
  425. $ctx1.sendIdx["with:"]=1;
  426. $3=_st(html)._div();
  427. $ctx1.sendIdx["div"]=2;
  428. _st($3)._class_("mk_scroll_rail vertical");
  429. $ctx1.sendIdx["class:"]=2;
  430. $4=_st($3)._with_((function(){
  431. return smalltalk.withContext(function($ctx2) {
  432. $5=_st(html)._div();
  433. $ctx2.sendIdx["div"]=3;
  434. _st($5)._class_("mk_scrollbar");
  435. $ctx2.sendIdx["class:"]=3;
  436. $6=_st($5)._yourself();
  437. $ctx2.sendIdx["yourself"]=1;
  438. self["@verticalScrollbar"]=$6;
  439. return self["@verticalScrollbar"];
  440. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
  441. $ctx1.sendIdx["with:"]=2;
  442. $7=_st(html)._div();
  443. $ctx1.sendIdx["div"]=4;
  444. _st($7)._class_("mk_scroll_rail horizontal");
  445. $ctx1.sendIdx["class:"]=4;
  446. $8=_st($7)._with_((function(){
  447. return smalltalk.withContext(function($ctx2) {
  448. $9=_st(html)._div();
  449. _st($9)._class_("mk_scrollbar");
  450. $10=_st($9)._yourself();
  451. self["@horizontalScrollbar"]=$10;
  452. return self["@horizontalScrollbar"];
  453. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
  454. self._setupScrollbars();
  455. return self}, function($ctx1) {$ctx1.fill(self,"renderContentOn:",{html:html},smalltalk.MKScrollDecorator)})},
  456. args: ["html"],
  457. source: "renderContentOn: html\x0a\x09html div \x0a\x09\x09class: 'mk_scroll_container';\x0a\x09\x09with: [ super renderContentOn: html ].\x0a\x09\x0a\x09html div \x0a\x09\x09class: 'mk_scroll_rail vertical';\x0a\x09\x09with: [\x0a\x09\x09\x09verticalScrollbar := html div\x0a\x09\x09\x09\x09class: 'mk_scrollbar';\x0a\x09\x09\x09\x09yourself ].\x0a\x09html div \x0a\x09\x09class: 'mk_scroll_rail horizontal';\x0a\x09\x09with: [\x0a\x09\x09\x09horizontalScrollbar := html div\x0a\x09\x09\x09\x09class: 'mk_scrollbar';\x0a\x09\x09\x09\x09yourself ].\x0a\x09\x0a\x09self setupScrollbars",
  458. messageSends: ["class:", "div", "with:", "renderContentOn:", "yourself", "setupScrollbars"],
  459. referencedClasses: []
  460. }),
  461. smalltalk.MKScrollDecorator);
  462. smalltalk.addMethod(
  463. smalltalk.method({
  464. selector: "resized",
  465. category: 'actions',
  466. fn: function (){
  467. var self=this;
  468. return smalltalk.withContext(function($ctx1) {
  469. smalltalk.MKScrollDecorator.superclass.fn.prototype._resized.apply(_st(self), []);
  470. self._updateScrollbars();
  471. return self}, function($ctx1) {$ctx1.fill(self,"resized",{},smalltalk.MKScrollDecorator)})},
  472. args: [],
  473. source: "resized\x0a\x09super resized.\x0a\x09self updateScrollbars",
  474. messageSends: ["resized", "updateScrollbars"],
  475. referencedClasses: []
  476. }),
  477. smalltalk.MKScrollDecorator);
  478. smalltalk.addMethod(
  479. smalltalk.method({
  480. selector: "scrollDeltaX:",
  481. category: 'actions',
  482. fn: function (aNumber){
  483. var self=this;
  484. var scrollbar,left,maxLeft;
  485. return smalltalk.withContext(function($ctx1) {
  486. var $1;
  487. scrollbar=_st(self._horizontalScrollbar())._asJQuery();
  488. $ctx1.sendIdx["asJQuery"]=1;
  489. $1=_st(self._domSize())._x();
  490. $ctx1.sendIdx["x"]=1;
  491. maxLeft=_st($1).__minus(_st(scrollbar)._width());
  492. left=_st(_st(_st(_st(_st(scrollbar)._position())._left()).__plus(aNumber))._max_((0)))._min_(maxLeft);
  493. _st(scrollbar)._css_put_("left",left);
  494. _st(_st(_st(self._decorated())._asJQuery())._get_((0)))._at_put_("scrollLeft",_st(self._domScrollPosition())._x());
  495. return self}, function($ctx1) {$ctx1.fill(self,"scrollDeltaX:",{aNumber:aNumber,scrollbar:scrollbar,left:left,maxLeft:maxLeft},smalltalk.MKScrollDecorator)})},
  496. args: ["aNumber"],
  497. source: "scrollDeltaX: aNumber\x0a\x09| scrollbar left maxLeft |\x0a\x09scrollbar := self horizontalScrollbar asJQuery.\x0a\x09maxLeft := self domSize x - scrollbar width.\x0a\x09left := ((scrollbar position left + aNumber) max: 0) min: maxLeft.\x0a\x09scrollbar css: 'left' put: left.\x0a\x09(self decorated asJQuery get: 0) at: 'scrollLeft' put: self domScrollPosition x",
  498. messageSends: ["asJQuery", "horizontalScrollbar", "-", "x", "domSize", "width", "min:", "max:", "+", "left", "position", "css:put:", "at:put:", "get:", "decorated", "domScrollPosition"],
  499. referencedClasses: []
  500. }),
  501. smalltalk.MKScrollDecorator);
  502. smalltalk.addMethod(
  503. smalltalk.method({
  504. selector: "scrollDeltaY:",
  505. category: 'actions',
  506. fn: function (aNumber){
  507. var self=this;
  508. var scrollbar,top,maxTop;
  509. return smalltalk.withContext(function($ctx1) {
  510. var $1;
  511. scrollbar=_st(self._verticalScrollbar())._asJQuery();
  512. $ctx1.sendIdx["asJQuery"]=1;
  513. $1=_st(self._domSize())._y();
  514. $ctx1.sendIdx["y"]=1;
  515. maxTop=_st($1).__minus(_st(scrollbar)._height());
  516. $ctx1.sendIdx["-"]=1;
  517. top=_st(_st(_st(_st(_st(scrollbar)._position())._top()).__minus(aNumber))._max_((0)))._min_(maxTop);
  518. _st(scrollbar)._css_put_("top",top);
  519. _st(_st(_st(self._decorated())._asJQuery())._get_((0)))._at_put_("scrollTop",_st(self._domScrollPosition())._y());
  520. return self}, function($ctx1) {$ctx1.fill(self,"scrollDeltaY:",{aNumber:aNumber,scrollbar:scrollbar,top:top,maxTop:maxTop},smalltalk.MKScrollDecorator)})},
  521. args: ["aNumber"],
  522. source: "scrollDeltaY: aNumber\x0a\x09| scrollbar top maxTop |\x0a\x09scrollbar := self verticalScrollbar asJQuery.\x0a\x09maxTop := self domSize y - scrollbar height.\x0a\x09top := ((scrollbar position top - aNumber) max: 0) min: maxTop.\x0a\x09scrollbar css: 'top' put: top.\x0a\x09(self decorated asJQuery get: 0) at: 'scrollTop' put: self domScrollPosition y",
  523. messageSends: ["asJQuery", "verticalScrollbar", "-", "y", "domSize", "height", "min:", "max:", "top", "position", "css:put:", "at:put:", "get:", "decorated", "domScrollPosition"],
  524. referencedClasses: []
  525. }),
  526. smalltalk.MKScrollDecorator);
  527. smalltalk.addMethod(
  528. smalltalk.method({
  529. selector: "scrollPercent",
  530. category: 'accessing',
  531. fn: function (){
  532. var self=this;
  533. var element;
  534. return smalltalk.withContext(function($ctx1) {
  535. var $2,$1;
  536. element=_st(_st(self._decorated())._asJQuery())._get_((0));
  537. $2=_st(_st(element)._scrollLeft()).__slash(_st(element)._scrollWidth());
  538. $ctx1.sendIdx["/"]=1;
  539. $1=_st($2).__at(_st(_st(element)._scrollTop()).__slash(_st(element)._scrollHeight()));
  540. return $1;
  541. }, function($ctx1) {$ctx1.fill(self,"scrollPercent",{element:element},smalltalk.MKScrollDecorator)})},
  542. args: [],
  543. source: "scrollPercent\x0a\x09| element |\x0a\x09element := self decorated asJQuery get: 0.\x0a\x09^ (element scrollLeft / element scrollWidth) @ (element scrollTop / element scrollHeight)",
  544. messageSends: ["get:", "asJQuery", "decorated", "@", "/", "scrollLeft", "scrollWidth", "scrollTop", "scrollHeight"],
  545. referencedClasses: []
  546. }),
  547. smalltalk.MKScrollDecorator);
  548. smalltalk.addMethod(
  549. smalltalk.method({
  550. selector: "scrollbarPosition",
  551. category: 'accessing',
  552. fn: function (){
  553. var self=this;
  554. var position;
  555. return smalltalk.withContext(function($ctx1) {
  556. var $2,$1;
  557. position=_st(self._scrollPercent()).__star(_st(self._domSize()).__minus(self._domScrollbarSize()));
  558. $2=_st(_st(position)._x())._rounded();
  559. $ctx1.sendIdx["rounded"]=1;
  560. $1=_st($2).__at(_st(_st(position)._y())._rounded());
  561. return $1;
  562. }, function($ctx1) {$ctx1.fill(self,"scrollbarPosition",{position:position},smalltalk.MKScrollDecorator)})},
  563. args: [],
  564. source: "scrollbarPosition\x0a\x09| position |\x0a\x09position := self scrollPercent * (self domSize - self domScrollbarSize).\x0a\x09^ position x rounded @ position y rounded",
  565. messageSends: ["*", "scrollPercent", "-", "domSize", "domScrollbarSize", "@", "rounded", "x", "y"],
  566. referencedClasses: []
  567. }),
  568. smalltalk.MKScrollDecorator);
  569. smalltalk.addMethod(
  570. smalltalk.method({
  571. selector: "scrollbarSize",
  572. category: 'accessing',
  573. fn: function (){
  574. var self=this;
  575. var domSize,overflow;
  576. return smalltalk.withContext(function($ctx1) {
  577. var $4,$6,$5,$3,$2,$9,$11,$10,$8,$7,$1;
  578. domSize=self._domSize();
  579. overflow=self._domOverflow();
  580. $4=_st(domSize)._x();
  581. $ctx1.sendIdx["x"]=1;
  582. $6=_st(overflow)._x();
  583. $ctx1.sendIdx["x"]=2;
  584. $5=_st($6).__plus(_st(domSize)._x());
  585. $ctx1.sendIdx["+"]=1;
  586. $3=_st($4).__slash($5);
  587. $ctx1.sendIdx["/"]=1;
  588. $2=_st($3).__star((100));
  589. $ctx1.sendIdx["*"]=1;
  590. $9=_st(domSize)._y();
  591. $ctx1.sendIdx["y"]=1;
  592. $11=_st(overflow)._y();
  593. $ctx1.sendIdx["y"]=2;
  594. $10=_st($11).__plus(_st(domSize)._y());
  595. $8=_st($9).__slash($10);
  596. $7=_st($8).__star((100));
  597. $1=_st($2).__at($7);
  598. return $1;
  599. }, function($ctx1) {$ctx1.fill(self,"scrollbarSize",{domSize:domSize,overflow:overflow},smalltalk.MKScrollDecorator)})},
  600. args: [],
  601. source: "scrollbarSize\x0a\x09| domSize overflow |\x0a\x09\x0a\x09domSize := self domSize.\x0a\x09overflow := self domOverflow.\x0a\x09^ ((domSize x / (overflow x + domSize x)) * 100) @ ((domSize y / (overflow y + domSize y) * 100))",
  602. messageSends: ["domSize", "domOverflow", "@", "*", "/", "x", "+", "y"],
  603. referencedClasses: []
  604. }),
  605. smalltalk.MKScrollDecorator);
  606. smalltalk.addMethod(
  607. smalltalk.method({
  608. selector: "setupEventHandlers",
  609. category: 'private',
  610. fn: function (){
  611. var self=this;
  612. return smalltalk.withContext(function($ctx1) {
  613. smalltalk.MKScrollDecorator.superclass.fn.prototype._setupEventHandlers.apply(_st(self), []);
  614. _st(_st(self["@root"])._asJQuery())._mousewheel_((function(event){
  615. return smalltalk.withContext(function($ctx2) {
  616. return _st(self._controller())._onMousewheel_(event);
  617. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,1)})}));
  618. _st(_st(jQuery)._value_(window))._resize_((function(event){
  619. return smalltalk.withContext(function($ctx2) {
  620. return self._resized();
  621. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,2)})}));
  622. return self}, function($ctx1) {$ctx1.fill(self,"setupEventHandlers",{},smalltalk.MKScrollDecorator)})},
  623. args: [],
  624. source: "setupEventHandlers\x0a\x09super setupEventHandlers.\x0a\x09\x0a\x09root asJQuery mousewheel: [ :event | \x0a\x09\x09self controller onMousewheel: event ].\x0a\x09\x09\x0a\x09(jQuery value: window) resize: [ :event | \x0a\x09\x09self resized ]",
  625. messageSends: ["setupEventHandlers", "mousewheel:", "asJQuery", "onMousewheel:", "controller", "resize:", "value:", "resized"],
  626. referencedClasses: []
  627. }),
  628. smalltalk.MKScrollDecorator);
  629. smalltalk.addMethod(
  630. smalltalk.method({
  631. selector: "setupScrollbars",
  632. category: 'private',
  633. fn: function (){
  634. var self=this;
  635. return smalltalk.withContext(function($ctx1) {
  636. var $1,$3,$4,$6,$5,$2,$7,$9,$10,$8;
  637. $1=_st(self["@verticalScrollbar"])._asJQuery();
  638. $ctx1.sendIdx["asJQuery"]=1;
  639. $3="containment".__minus_gt("parent");
  640. $ctx1.sendIdx["->"]=1;
  641. $4="axis".__minus_gt("y");
  642. $ctx1.sendIdx["->"]=2;
  643. $5="drag".__minus_gt((function(event){
  644. return smalltalk.withContext(function($ctx2) {
  645. $6=self._controller();
  646. $ctx2.sendIdx["controller"]=1;
  647. return _st($6)._onVerticalDrag_(event);
  648. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,1)})}));
  649. $ctx1.sendIdx["->"]=3;
  650. $2=smalltalk.HashedCollection._from_([$3,$4,$5]);
  651. _st($1)._draggable_($2);
  652. $ctx1.sendIdx["draggable:"]=1;
  653. $7=_st(self["@horizontalScrollbar"])._asJQuery();
  654. $9="containment".__minus_gt("parent");
  655. $ctx1.sendIdx["->"]=4;
  656. $10="axis".__minus_gt("x");
  657. $ctx1.sendIdx["->"]=5;
  658. $8=smalltalk.HashedCollection._from_([$9,$10,"drag".__minus_gt((function(event){
  659. return smalltalk.withContext(function($ctx2) {
  660. return _st(self._controller())._onHorizontalDrag_(event);
  661. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,2)})}))]);
  662. _st($7)._draggable_($8);
  663. self._updateScrollbars();
  664. return self}, function($ctx1) {$ctx1.fill(self,"setupScrollbars",{},smalltalk.MKScrollDecorator)})},
  665. args: [],
  666. source: "setupScrollbars\x0a\x09verticalScrollbar asJQuery draggable: #{\x0a\x09\x09'containment' -> 'parent'.\x0a\x09\x09'axis' -> 'y'.\x0a\x09\x09'drag' -> [ :event | self controller onVerticalDrag: event ]\x0a\x09}.\x0a\x09horizontalScrollbar asJQuery draggable: #{\x0a\x09\x09'containment' -> 'parent'.\x0a\x09\x09'axis' -> 'x'.\x0a\x09\x09'drag' -> [ :event | self controller onHorizontalDrag: event ]\x0a\x09}.\x0a\x09\x0a\x09self updateScrollbars",
  667. messageSends: ["draggable:", "asJQuery", "->", "onVerticalDrag:", "controller", "onHorizontalDrag:", "updateScrollbars"],
  668. referencedClasses: []
  669. }),
  670. smalltalk.MKScrollDecorator);
  671. smalltalk.addMethod(
  672. smalltalk.method({
  673. selector: "updateScrollbars",
  674. category: 'updating',
  675. fn: function (){
  676. var self=this;
  677. var width,height;
  678. return smalltalk.withContext(function($ctx1) {
  679. var $1,$3,$2,$4,$5,$7,$6;
  680. $1=self._hasHorizontalOverflow();
  681. if(smalltalk.assert($1)){
  682. $3=self._scrollbarSize();
  683. $ctx1.sendIdx["scrollbarSize"]=1;
  684. $2=_st($3)._x();
  685. width=_st($2)._max_((10));
  686. $ctx1.sendIdx["max:"]=1;
  687. } else {
  688. width=(0);
  689. };
  690. $4=self._hasVerticalOverflow();
  691. if(smalltalk.assert($4)){
  692. height=_st(_st(self._scrollbarSize())._y())._max_((10));
  693. } else {
  694. height=(0);
  695. };
  696. $5=_st(self["@horizontalScrollbar"])._asJQuery();
  697. $ctx1.sendIdx["asJQuery"]=1;
  698. $7=_st(width)._asString();
  699. $ctx1.sendIdx["asString"]=1;
  700. $6=_st($7).__comma("%");
  701. $ctx1.sendIdx[","]=1;
  702. _st($5)._width_($6);
  703. _st(_st(self["@verticalScrollbar"])._asJQuery())._height_(_st(_st(height)._asString()).__comma("%"));
  704. return self}, function($ctx1) {$ctx1.fill(self,"updateScrollbars",{width:width,height:height},smalltalk.MKScrollDecorator)})},
  705. args: [],
  706. source: "updateScrollbars\x0a\x09| width height |\x0a\x09\x0a\x09width := self hasHorizontalOverflow\x0a\x09\x09ifTrue: [ self scrollbarSize x max: 10 ]\x0a\x09\x09ifFalse: [ 0 ].\x0a\x09height := self hasVerticalOverflow\x0a\x09\x09ifTrue: [ self scrollbarSize y max: 10 ]\x0a\x09\x09ifFalse: [ 0 ].\x0a\x09\x0a\x09horizontalScrollbar asJQuery \x0a\x09\x09width: width asString, '%'.\x0a\x09verticalScrollbar asJQuery \x0a\x09\x09height: height asString, '%'",
  707. messageSends: ["ifTrue:ifFalse:", "hasHorizontalOverflow", "max:", "x", "scrollbarSize", "hasVerticalOverflow", "y", "width:", "asJQuery", ",", "asString", "height:"],
  708. referencedClasses: []
  709. }),
  710. smalltalk.MKScrollDecorator);
  711. smalltalk.addMethod(
  712. smalltalk.method({
  713. selector: "updateScrollbarsPosition",
  714. category: 'updating',
  715. fn: function (){
  716. var self=this;
  717. var position;
  718. return smalltalk.withContext(function($ctx1) {
  719. var $1;
  720. position=self._scrollbarPosition();
  721. $1=_st(self["@horizontalScrollbar"])._asJQuery();
  722. $ctx1.sendIdx["asJQuery"]=1;
  723. _st($1)._css_put_("left",_st(position)._x());
  724. $ctx1.sendIdx["css:put:"]=1;
  725. _st(_st(self["@verticalScrollbar"])._asJQuery())._css_put_("top",_st(position)._y());
  726. return self}, function($ctx1) {$ctx1.fill(self,"updateScrollbarsPosition",{position:position},smalltalk.MKScrollDecorator)})},
  727. args: [],
  728. source: "updateScrollbarsPosition\x0a\x09| position |\x0a\x09position := self scrollbarPosition.\x0a\x09horizontalScrollbar asJQuery\x0a\x09\x09css: 'left' put: position x.\x0a\x09verticalScrollbar asJQuery\x0a\x09\x09css: 'top' put: position y",
  729. messageSends: ["scrollbarPosition", "css:put:", "asJQuery", "x", "y"],
  730. referencedClasses: []
  731. }),
  732. smalltalk.MKScrollDecorator);
  733. smalltalk.addMethod(
  734. smalltalk.method({
  735. selector: "verticalScrollbar",
  736. category: 'accessing',
  737. fn: function (){
  738. var self=this;
  739. return smalltalk.withContext(function($ctx1) {
  740. var $1;
  741. $1=self["@verticalScrollbar"];
  742. return $1;
  743. }, function($ctx1) {$ctx1.fill(self,"verticalScrollbar",{},smalltalk.MKScrollDecorator)})},
  744. args: [],
  745. source: "verticalScrollbar\x0a\x09^ verticalScrollbar",
  746. messageSends: [],
  747. referencedClasses: []
  748. }),
  749. smalltalk.MKScrollDecorator);
  750. });