Moka-Decorators.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  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('MKScrollDecorator', smalltalk.MKDecorator, ['verticalScrollbar', 'horizontalScrollbar'], 'Moka-Decorators');
  5. smalltalk.addMethod(
  6. smalltalk.method({
  7. selector: "cssClass",
  8. category: 'accessing',
  9. fn: function (){
  10. var self=this;
  11. return smalltalk.withContext(function($ctx1) {
  12. var $1;
  13. $1=_st(smalltalk.MKScrollDecorator.superclass.fn.prototype._cssClass.apply(_st(self), [])).__comma(" mk_scroll");
  14. return $1;
  15. }, function($ctx1) {$ctx1.fill(self,"cssClass",{},smalltalk.MKScrollDecorator)})},
  16. args: [],
  17. source: "cssClass\x0a\x09^ super cssClass, ' mk_scroll'",
  18. messageSends: [",", "cssClass"],
  19. referencedClasses: []
  20. }),
  21. smalltalk.MKScrollDecorator);
  22. smalltalk.addMethod(
  23. smalltalk.method({
  24. selector: "defaultControllerClass",
  25. category: 'defaults',
  26. fn: function (){
  27. var self=this;
  28. function $MKScrollController(){return smalltalk.MKScrollController||(typeof MKScrollController=="undefined"?nil:MKScrollController)}
  29. return smalltalk.withContext(function($ctx1) {
  30. return $MKScrollController();
  31. }, function($ctx1) {$ctx1.fill(self,"defaultControllerClass",{},smalltalk.MKScrollDecorator)})},
  32. args: [],
  33. source: "defaultControllerClass\x0a\x09^ MKScrollController",
  34. messageSends: [],
  35. referencedClasses: ["MKScrollController"]
  36. }),
  37. smalltalk.MKScrollDecorator);
  38. smalltalk.addMethod(
  39. smalltalk.method({
  40. selector: "domDecoratedSize",
  41. category: 'dom',
  42. fn: function (){
  43. var self=this;
  44. var element;
  45. return smalltalk.withContext(function($ctx1) {
  46. var $1;
  47. element=_st(_st(self._decorated())._asJQuery())._get_((0));
  48. $1=_st(_st(element)._scrollWidth()).__at(_st(element)._scrollHeight());
  49. return $1;
  50. }, function($ctx1) {$ctx1.fill(self,"domDecoratedSize",{element:element},smalltalk.MKScrollDecorator)})},
  51. args: [],
  52. source: "domDecoratedSize\x0a\x09| element |\x0a\x09element := self decorated asJQuery get: 0.\x0a\x09^ element scrollWidth @ element scrollHeight",
  53. messageSends: ["get:", "asJQuery", "decorated", "@", "scrollWidth", "scrollHeight"],
  54. referencedClasses: []
  55. }),
  56. smalltalk.MKScrollDecorator);
  57. smalltalk.addMethod(
  58. smalltalk.method({
  59. selector: "domOverflow",
  60. category: 'dom',
  61. fn: function (){
  62. var self=this;
  63. var element;
  64. return smalltalk.withContext(function($ctx1) {
  65. var $2,$1;
  66. element=_st(_st(self._decorated())._asJQuery())._get_((0));
  67. $2=_st(_st(element)._scrollWidth()).__minus(_st(element)._clientWidth());
  68. $ctx1.sendIdx["-"]=1;
  69. $1=_st($2).__at(_st(_st(element)._scrollHeight()).__minus(_st(element)._clientHeight()));
  70. return $1;
  71. }, function($ctx1) {$ctx1.fill(self,"domOverflow",{element:element},smalltalk.MKScrollDecorator)})},
  72. args: [],
  73. source: "domOverflow\x0a\x09| element |\x0a\x09element := self decorated asJQuery get: 0.\x0a\x09^ (element scrollWidth - element clientWidth) @ (element scrollHeight - element clientHeight)",
  74. messageSends: ["get:", "asJQuery", "decorated", "@", "-", "scrollWidth", "clientWidth", "scrollHeight", "clientHeight"],
  75. referencedClasses: []
  76. }),
  77. smalltalk.MKScrollDecorator);
  78. smalltalk.addMethod(
  79. smalltalk.method({
  80. selector: "domScrollPosition",
  81. category: 'dom',
  82. fn: function (){
  83. var self=this;
  84. return smalltalk.withContext(function($ctx1) {
  85. var $4,$3,$2,$1;
  86. $4=_st(self["@horizontalScrollbar"])._asJQuery();
  87. $ctx1.sendIdx["asJQuery"]=1;
  88. $3=_st($4)._position();
  89. $ctx1.sendIdx["position"]=1;
  90. $2=_st($3)._left();
  91. $1=_st($2).__at(_st(_st(_st(self["@verticalScrollbar"])._asJQuery())._position())._top());
  92. return $1;
  93. }, function($ctx1) {$ctx1.fill(self,"domScrollPosition",{},smalltalk.MKScrollDecorator)})},
  94. args: [],
  95. source: "domScrollPosition\x0a\x09^ horizontalScrollbar asJQuery position left @ verticalScrollbar asJQuery position top",
  96. messageSends: ["@", "left", "position", "asJQuery", "top"],
  97. referencedClasses: []
  98. }),
  99. smalltalk.MKScrollDecorator);
  100. smalltalk.addMethod(
  101. smalltalk.method({
  102. selector: "domScrollbarSize",
  103. category: 'dom',
  104. fn: function (){
  105. var self=this;
  106. return smalltalk.withContext(function($ctx1) {
  107. var $3,$2,$1;
  108. $3=_st(self["@horizontalScrollbar"])._asJQuery();
  109. $ctx1.sendIdx["asJQuery"]=1;
  110. $2=_st($3)._width();
  111. $1=_st($2).__at(_st(_st(self["@verticalScrollbar"])._asJQuery())._height());
  112. return $1;
  113. }, function($ctx1) {$ctx1.fill(self,"domScrollbarSize",{},smalltalk.MKScrollDecorator)})},
  114. args: [],
  115. source: "domScrollbarSize\x0a\x09^ horizontalScrollbar asJQuery width @ verticalScrollbar asJQuery height",
  116. messageSends: ["@", "width", "asJQuery", "height"],
  117. referencedClasses: []
  118. }),
  119. smalltalk.MKScrollDecorator);
  120. smalltalk.addMethod(
  121. smalltalk.method({
  122. selector: "hasHorizontalOverflow",
  123. category: 'testing',
  124. fn: function (){
  125. var self=this;
  126. return smalltalk.withContext(function($ctx1) {
  127. var $1;
  128. $1=_st(_st(self._domOverflow())._x()).__gt((0));
  129. return $1;
  130. }, function($ctx1) {$ctx1.fill(self,"hasHorizontalOverflow",{},smalltalk.MKScrollDecorator)})},
  131. args: [],
  132. source: "hasHorizontalOverflow\x0a\x09^ self domOverflow x > 0",
  133. messageSends: [">", "x", "domOverflow"],
  134. referencedClasses: []
  135. }),
  136. smalltalk.MKScrollDecorator);
  137. smalltalk.addMethod(
  138. smalltalk.method({
  139. selector: "hasVerticalOverflow",
  140. category: 'testing',
  141. fn: function (){
  142. var self=this;
  143. return smalltalk.withContext(function($ctx1) {
  144. var $1;
  145. $1=_st(_st(self._domOverflow())._y()).__gt((0));
  146. return $1;
  147. }, function($ctx1) {$ctx1.fill(self,"hasVerticalOverflow",{},smalltalk.MKScrollDecorator)})},
  148. args: [],
  149. source: "hasVerticalOverflow\x0a\x09^ self domOverflow y > 0",
  150. messageSends: [">", "y", "domOverflow"],
  151. referencedClasses: []
  152. }),
  153. smalltalk.MKScrollDecorator);
  154. smalltalk.addMethod(
  155. smalltalk.method({
  156. selector: "renderContentOn:",
  157. category: 'rendering',
  158. fn: function (html){
  159. var self=this;
  160. return smalltalk.withContext(function($ctx1) {
  161. var $1,$2,$3,$5,$6,$4,$7,$9,$10,$8;
  162. $1=_st(html)._div();
  163. $ctx1.sendIdx["div"]=1;
  164. _st($1)._class_("mk_scroll_container");
  165. $ctx1.sendIdx["class:"]=1;
  166. $2=_st($1)._with_((function(){
  167. return smalltalk.withContext(function($ctx2) {
  168. return smalltalk.MKScrollDecorator.superclass.fn.prototype._renderContentOn_.apply(_st(self), [html]);
  169. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)})}));
  170. $ctx1.sendIdx["with:"]=1;
  171. $3=_st(html)._div();
  172. $ctx1.sendIdx["div"]=2;
  173. _st($3)._class_("mk_scroll_rail vertical");
  174. $ctx1.sendIdx["class:"]=2;
  175. $4=_st($3)._with_((function(){
  176. return smalltalk.withContext(function($ctx2) {
  177. $5=_st(html)._div();
  178. $ctx2.sendIdx["div"]=3;
  179. _st($5)._class_("mk_scrollbar");
  180. $ctx2.sendIdx["class:"]=3;
  181. $6=_st($5)._yourself();
  182. $ctx2.sendIdx["yourself"]=1;
  183. self["@verticalScrollbar"]=$6;
  184. return self["@verticalScrollbar"];
  185. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)})}));
  186. $ctx1.sendIdx["with:"]=2;
  187. $7=_st(html)._div();
  188. $ctx1.sendIdx["div"]=4;
  189. _st($7)._class_("mk_scroll_rail horizontal");
  190. $ctx1.sendIdx["class:"]=4;
  191. $8=_st($7)._with_((function(){
  192. return smalltalk.withContext(function($ctx2) {
  193. $9=_st(html)._div();
  194. _st($9)._class_("mk_scrollbar");
  195. $10=_st($9)._yourself();
  196. self["@horizontalScrollbar"]=$10;
  197. return self["@horizontalScrollbar"];
  198. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)})}));
  199. self._setupScrollbars();
  200. return self}, function($ctx1) {$ctx1.fill(self,"renderContentOn:",{html:html},smalltalk.MKScrollDecorator)})},
  201. args: ["html"],
  202. 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",
  203. messageSends: ["class:", "div", "with:", "renderContentOn:", "yourself", "setupScrollbars"],
  204. referencedClasses: []
  205. }),
  206. smalltalk.MKScrollDecorator);
  207. smalltalk.addMethod(
  208. smalltalk.method({
  209. selector: "scrollbarSize",
  210. category: 'accessing',
  211. fn: function (){
  212. var self=this;
  213. var domSize,overflow;
  214. return smalltalk.withContext(function($ctx1) {
  215. var $4,$6,$5,$3,$2,$9,$11,$10,$8,$7,$1;
  216. domSize=self._domSize();
  217. overflow=self._domOverflow();
  218. $4=_st(domSize)._x();
  219. $ctx1.sendIdx["x"]=1;
  220. $6=_st(overflow)._x();
  221. $ctx1.sendIdx["x"]=2;
  222. $5=_st($6).__plus(_st(domSize)._x());
  223. $ctx1.sendIdx["+"]=1;
  224. $3=_st($4).__slash($5);
  225. $ctx1.sendIdx["/"]=1;
  226. $2=_st($3).__star((100));
  227. $ctx1.sendIdx["*"]=1;
  228. $9=_st(domSize)._y();
  229. $ctx1.sendIdx["y"]=1;
  230. $11=_st(overflow)._y();
  231. $ctx1.sendIdx["y"]=2;
  232. $10=_st($11).__plus(_st(domSize)._y());
  233. $8=_st($9).__slash($10);
  234. $7=_st($8).__star((100));
  235. $1=_st($2).__at($7);
  236. return $1;
  237. }, function($ctx1) {$ctx1.fill(self,"scrollbarSize",{domSize:domSize,overflow:overflow},smalltalk.MKScrollDecorator)})},
  238. args: [],
  239. 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))",
  240. messageSends: ["domSize", "domOverflow", "@", "*", "/", "x", "+", "y"],
  241. referencedClasses: []
  242. }),
  243. smalltalk.MKScrollDecorator);
  244. smalltalk.addMethod(
  245. smalltalk.method({
  246. selector: "setupScrollbars",
  247. category: 'private',
  248. fn: function (){
  249. var self=this;
  250. return smalltalk.withContext(function($ctx1) {
  251. var $1,$3,$4,$6,$5,$2,$7,$9,$10,$8;
  252. $1=_st(self["@verticalScrollbar"])._asJQuery();
  253. $ctx1.sendIdx["asJQuery"]=1;
  254. $3="containment".__minus_gt("parent");
  255. $ctx1.sendIdx["->"]=1;
  256. $4="axis".__minus_gt("y");
  257. $ctx1.sendIdx["->"]=2;
  258. $5="drag".__minus_gt((function(event){
  259. return smalltalk.withContext(function($ctx2) {
  260. $6=self._controller();
  261. $ctx2.sendIdx["controller"]=1;
  262. return _st($6)._onVerticalDrag_(event);
  263. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,1)})}));
  264. $ctx1.sendIdx["->"]=3;
  265. $2=smalltalk.HashedCollection._from_([$3,$4,$5]);
  266. _st($1)._draggable_($2);
  267. $ctx1.sendIdx["draggable:"]=1;
  268. $7=_st(self["@horizontalScrollbar"])._asJQuery();
  269. $9="containment".__minus_gt("parent");
  270. $ctx1.sendIdx["->"]=4;
  271. $10="axis".__minus_gt("x");
  272. $ctx1.sendIdx["->"]=5;
  273. $8=smalltalk.HashedCollection._from_([$9,$10,"drag".__minus_gt((function(event){
  274. return smalltalk.withContext(function($ctx2) {
  275. return _st(self._controller())._onHorizontalDrag_(event);
  276. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,2)})}))]);
  277. _st($7)._draggable_($8);
  278. self._updateScrollbars();
  279. return self}, function($ctx1) {$ctx1.fill(self,"setupScrollbars",{},smalltalk.MKScrollDecorator)})},
  280. args: [],
  281. 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",
  282. messageSends: ["draggable:", "asJQuery", "->", "onVerticalDrag:", "controller", "onHorizontalDrag:", "updateScrollbars"],
  283. referencedClasses: []
  284. }),
  285. smalltalk.MKScrollDecorator);
  286. smalltalk.addMethod(
  287. smalltalk.method({
  288. selector: "updateScrollbars",
  289. category: 'updating',
  290. fn: function (){
  291. var self=this;
  292. var width,height;
  293. return smalltalk.withContext(function($ctx1) {
  294. var $1,$3,$2,$4,$5,$7,$6;
  295. $1=self._hasHorizontalOverflow();
  296. if(smalltalk.assert($1)){
  297. $3=self._scrollbarSize();
  298. $ctx1.sendIdx["scrollbarSize"]=1;
  299. $2=_st($3)._x();
  300. width=_st($2)._max_((10));
  301. $ctx1.sendIdx["max:"]=1;
  302. } else {
  303. width=(0);
  304. };
  305. $4=self._hasVerticalOverflow();
  306. if(smalltalk.assert($4)){
  307. height=_st(_st(self._scrollbarSize())._y())._max_((10));
  308. } else {
  309. height=(0);
  310. };
  311. $5=_st(self["@horizontalScrollbar"])._asJQuery();
  312. $ctx1.sendIdx["asJQuery"]=1;
  313. $7=_st(width)._asString();
  314. $ctx1.sendIdx["asString"]=1;
  315. $6=_st($7).__comma("%");
  316. $ctx1.sendIdx[","]=1;
  317. _st($5)._width_($6);
  318. _st(_st(self["@verticalScrollbar"])._asJQuery())._height_(_st(_st(height)._asString()).__comma("%"));
  319. return self}, function($ctx1) {$ctx1.fill(self,"updateScrollbars",{width:width,height:height},smalltalk.MKScrollDecorator)})},
  320. args: [],
  321. 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 width: width asString, '%'.\x0a\x09verticalScrollbar asJQuery height: height asString, '%'",
  322. messageSends: ["ifTrue:ifFalse:", "hasHorizontalOverflow", "max:", "x", "scrollbarSize", "hasVerticalOverflow", "y", "width:", "asJQuery", ",", "asString", "height:"],
  323. referencedClasses: []
  324. }),
  325. smalltalk.MKScrollDecorator);
  326. });