Main.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. MWF.xApplication.Calculator.options.multitask = true;
  2. MWF.xApplication.Calculator.Main = new Class({
  3. Extends: MWF.xApplication.Common.Main,
  4. Implements: [Options, Events],
  5. options: {
  6. "style": "default",
  7. "name": "Calculator",
  8. "icon": "icon.png",
  9. "width": "320",
  10. "height": "440",
  11. "isResize": false,
  12. "isMax": false,
  13. "title": MWF.xApplication.Calculator.LP.title
  14. },
  15. onQueryLoad: function(){
  16. this.lp = MWF.xApplication.Calculator.LP;
  17. },
  18. init: function(){
  19. this.resultData = 0;
  20. this.currentOperation = "";
  21. this.startNumber = true;
  22. },
  23. loadDecimal: function(callback){
  24. if (!window.Decimal){
  25. var url = "/x_component_Calculator/Decimal.js";
  26. COMMON.AjaxModule.loadDom(url, function(){
  27. // COMMON.AjaxModule.loadDom(this.tools, function(){
  28. if (callback) callback();
  29. // }.bind(this))
  30. }.bind(this));
  31. }else{
  32. if (callback) callback();
  33. }
  34. },
  35. loadApplication: function(callback){
  36. this.loadDecimal(function(){
  37. this.init();
  38. this.node = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  39. this.screenNode = new Element("div", {"styles": this.css.screenNode}).inject(this.node);
  40. this.buttonAreaNode = new Element("div", {"styles": this.css.buttonAreaNode}).inject(this.node);
  41. this.screenReferenceNode = new Element("div", {"styles": this.css.screenReferenceNode}).inject(this.screenNode);
  42. this.screenContentNode = new Element("div", {"styles": this.css.screenContentNode, "text": "0"}).inject(this.screenNode);
  43. var html = "<table border='0' cellSpacing='8' cellPadding='0' width='100%'>" +
  44. "<tr style='height: 30px'>" +
  45. "<td style='width: 42px'><div class='but1' id='calculator_mc'>MC</div></td>" +
  46. "<td style='width: 42px'><div class='but1' id='calculator_mr'>MR</div></td>" +
  47. "<td style='width: 42px'><div class='but1' id='calculator_ms'>MS</div></td>" +
  48. "<td style='width: 42px'><div class='but1' id='calculator_madd'>M+</div></td>" +
  49. "<td style='width: 42px'><div class='but1' id='calculator_mminus'>M-</div></td></tr>" +
  50. "<tr style='height: 30px'>" +
  51. "<td style='width: 42px'><div class='but2' id='calculator_back'></div></td>" +
  52. "<td style='width: 42px'><div class='but2' id='calculator_ce'>CE</div></td>" +
  53. "<td style='width: 42px'><div class='but2' id='calculator_c'>C</div></td>" +
  54. "<td style='width: 42px'><div class='but2' id='calculator_pm'>+-</div></td>" +
  55. "<td style='width: 42px'><div class='but2' id='calculator_sqrt'></div></td></tr>" +
  56. "<tr style='height: 30px'>" +
  57. "<td style='width: 42px'><div class='but3' id='calculator_7'>7</div></td>" +
  58. "<td style='width: 42px'><div class='but3' id='calculator_8'>8</div></td>" +
  59. "<td style='width: 42px'><div class='but3' id='calculator_9'>9</div></td>" +
  60. "<td style='width: 42px'><div class='but2' id='calculator_div'>/</div></td>" +
  61. "<td style='width: 42px'><div class='but2' id='calculator_mod'>%</div></td></tr>" +
  62. "<tr style='height: 30px'>" +
  63. "<td style='width: 42px'><div class='but3' id='calculator_4'>4</div></td>" +
  64. "<td style='width: 42px'><div class='but3' id='calculator_5'>5</div></td>" +
  65. "<td style='width: 42px'><div class='but3' id='calculator_6'>6</div></td>" +
  66. "<td style='width: 42px'><div class='but2' id='calculator_mul'>*</div></td>" +
  67. "<td style='width: 42px'><div class='but2' id='calculator_inverse'>1/x</div></td></tr>" +
  68. "<tr style='height: 30px'>" +
  69. "<td style='width: 42px'><div class='but3' id='calculator_1'>1</div></td>" +
  70. "<td style='width: 42px'><div class='but3' id='calculator_2'>2</div></td>" +
  71. "<td style='width: 42px'><div class='but3' id='calculator_3'>3</div></td>" +
  72. "<td style='width: 42px'><div class='but2' id='calculator_sub'>-</div></td>" +
  73. "<td rowspan='2'><div id='calculator_equal'>=</div></td></tr>" +
  74. "<tr style='height: 30px'>" +
  75. "<td colspan='2'><div id='calculator_0'>0</div></td>" +
  76. "<td style='width: 42px'><div class='but3' id='calculator_dot'>.</div></td>" +
  77. "<td style='width: 42px'><div class='but2' id='calculator_add'>+</div></td></tr>" +
  78. "</table>";
  79. this.buttonAreaNode.set("html", html);
  80. var but1 = this.buttonAreaNode.getElements(".but1");
  81. but1.setStyles(this.css.buttonStyle1);
  82. var but2 = this.buttonAreaNode.getElements(".but2");
  83. but2.setStyles(this.css.buttonStyle2);
  84. var but3 = this.buttonAreaNode.getElements(".but3");
  85. but3.setStyles(this.css.buttonStyle3);
  86. var _self = this;
  87. but1.addEvents({
  88. "mouseover": function(){this.setStyles(_self.css.button_over);},
  89. "mouseout": function(){this.setStyles(_self.css.buttonStyle1);},
  90. "mousedown": function(){this.setStyles(_self.css.button_down);},
  91. "mouseup": function(){this.setStyles(_self.css.button_over);},
  92. });
  93. but2.addEvents({
  94. "mouseover": function(){this.setStyles(_self.css.button_over);},
  95. "mouseout": function(){this.setStyles(_self.css.buttonStyle2);},
  96. "mousedown": function(){this.setStyles(_self.css.button_down);},
  97. "mouseup": function(){this.setStyles(_self.css.button_over);},
  98. });
  99. but3.addEvents({
  100. "mouseover": function(){this.setStyles(_self.css.button_over);},
  101. "mouseout": function(){this.setStyles(_self.css.buttonStyle3);},
  102. "mousedown": function(){this.setStyles(_self.css.button_down);},
  103. "mouseup": function(){this.setStyles(_self.css.button_over);},
  104. });
  105. this.but_equal = this.buttonAreaNode.getElement("#calculator_equal");
  106. this.but_equal.setStyles(this.css.but_equal);
  107. this.but_equal.addEvents({
  108. "mouseover": function(){this.setStyles(_self.css.but_equal_over);},
  109. "mouseout": function(){this.setStyles(_self.css.but_equal);},
  110. "mousedown": function(){this.setStyles(_self.css.but_equal_down);},
  111. "mouseup": function(){this.setStyles(_self.css.but_equal_over);},
  112. });
  113. this.but_0 = this.buttonAreaNode.getElement("#calculator_0");
  114. this.but_0.setStyles(this.css.but_0);
  115. this.but_0.addEvents({
  116. "mouseover": function(){this.setStyles(_self.css.but_0_over);},
  117. "mouseout": function(){this.setStyles(_self.css.but_0);},
  118. "mousedown": function(){this.setStyles(_self.css.but_0_down);},
  119. "mouseup": function(){this.setStyles(_self.css.but_0_over);},
  120. });
  121. this.but_back = this.buttonAreaNode.getElement("#calculator_back");
  122. var icon = new Element("div", {"styles": this.css.but_back_icon}).inject(this.but_back);
  123. this.but_sqrt = this.buttonAreaNode.getElement("#calculator_sqrt");
  124. icon = new Element("div", {"styles": this.css.but_sqrt_icon}).inject(this.but_sqrt);
  125. this.getButtons();
  126. this.setEvent();
  127. }.bind(this));
  128. },
  129. getButtons: function(){
  130. if (!this.but_mc) this.but_mc = this.buttonAreaNode.getElement("#calculator_mc");
  131. if (!this.but_mr) this.but_mr = this.buttonAreaNode.getElement("#calculator_mr");
  132. if (!this.but_ms) this.but_ms = this.buttonAreaNode.getElement("#calculator_ms");
  133. if (!this.but_madd) this.but_madd = this.buttonAreaNode.getElement("#calculator_madd");
  134. if (!this.but_mminus) this.but_mminus = this.buttonAreaNode.getElement("#calculator_mminus");
  135. if (!this.but_back) this.but_mminus = this.buttonAreaNode.getElement("#calculator_back");
  136. if (!this.but_ce) this.but_ce = this.buttonAreaNode.getElement("#calculator_ce");
  137. if (!this.but_c) this.but_c = this.buttonAreaNode.getElement("#calculator_c");
  138. if (!this.but_pm) this.but_pm = this.buttonAreaNode.getElement("#calculator_pm");
  139. if (!this.but_sqrt) this.but_sqrt = this.buttonAreaNode.getElement("#calculator_sqrt");
  140. if (!this.but_7) this.but_7 = this.buttonAreaNode.getElement("#calculator_7");
  141. if (!this.but_8) this.but_8 = this.buttonAreaNode.getElement("#calculator_8");
  142. if (!this.but_9) this.but_9 = this.buttonAreaNode.getElement("#calculator_9");
  143. if (!this.but_div) this.but_div = this.buttonAreaNode.getElement("#calculator_div");
  144. if (!this.but_mod) this.but_mod = this.buttonAreaNode.getElement("#calculator_mod");
  145. if (!this.but_4) this.but_4 = this.buttonAreaNode.getElement("#calculator_4");
  146. if (!this.but_5) this.but_5 = this.buttonAreaNode.getElement("#calculator_5");
  147. if (!this.but_6) this.but_6 = this.buttonAreaNode.getElement("#calculator_6");
  148. if (!this.but_mul) this.but_mul = this.buttonAreaNode.getElement("#calculator_mul");
  149. if (!this.but_inverse) this.but_inverse = this.buttonAreaNode.getElement("#calculator_inverse");
  150. if (!this.but_1) this.but_1 = this.buttonAreaNode.getElement("#calculator_1");
  151. if (!this.but_2) this.but_2 = this.buttonAreaNode.getElement("#calculator_2");
  152. if (!this.but_3) this.but_3 = this.buttonAreaNode.getElement("#calculator_3");
  153. if (!this.but_sub) this.but_sub = this.buttonAreaNode.getElement("#calculator_sub");
  154. if (!this.but_equal) this.but_equal = this.buttonAreaNode.getElement("#calculator_equal");
  155. if (!this.but_0) this.but_0 = this.buttonAreaNode.getElement("#calculator_0");
  156. if (!this.but_dot) this.but_dot = this.buttonAreaNode.getElement("#calculator_dot");
  157. if (!this.but_add) this.but_add = this.buttonAreaNode.getElement("#calculator_add");
  158. },
  159. setEvent: function(){
  160. var but3 = this.buttonAreaNode.getElements(".but3");
  161. but3.setStyles(this.css.buttonStyle3);
  162. var _self = this;
  163. but3.addEvent("click", function(){
  164. if (_self.startNumber){
  165. _self.screenContentNode.set("text", "0");
  166. _self.startNumber = false;
  167. _self.screenContentNode.setStyles(_self.css.screenContentNode);
  168. }
  169. var v = _self.screenContentNode.get("text");
  170. if (v.length>=19) return false;
  171. var value = this.get("text");
  172. var str = v+value;
  173. if (!v || v=="0") str = value;
  174. if (str.length>13) _self.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
  175. _self.screenContentNode.set("text", str);
  176. });
  177. this.but_dot.removeEvents("click");
  178. this.but_dot.addEvent("click", function(){
  179. if (_self.startNumber){
  180. _self.screenContentNode.set("text", "0");
  181. _self.startNumber = false;
  182. _self.screenContentNode.setStyles(_self.css.screenContentNode);
  183. }
  184. var v = _self.screenContentNode.get("text");
  185. if (v.length>=19) return false;
  186. str = v+".";
  187. if (!v || v=="0") str = "0.";
  188. if (str.length>13) _self.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
  189. _self.screenContentNode.set("text", str);
  190. });
  191. this.but_0.addEvent("click", function(){
  192. if (_self.startNumber){
  193. _self.screenContentNode.set("text", "0");
  194. _self.startNumber = false;
  195. _self.screenContentNode.setStyles(_self.css.screenContentNode);
  196. }
  197. var v = _self.screenContentNode.get("text");
  198. if (v.length>=19) return false;
  199. str = v+"0";
  200. if (!v || v=="0") str = "0";
  201. if (str.length>13) _self.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
  202. _self.screenContentNode.set("text", str);
  203. });
  204. this.but_add.addEvent("click", function(){
  205. _self.baseCompute("+", "plus");
  206. });
  207. this.but_sub.addEvent("click", function(){
  208. _self.baseCompute("-", "minus");
  209. });
  210. this.but_mul.addEvent("click", function(){
  211. _self.baseCompute("*", "times");
  212. });
  213. this.but_div.addEvent("click", function(){
  214. _self.baseCompute("/", "div");
  215. });
  216. this.but_mod.addEvent("click", function(){
  217. _self.baseCompute("%", "mod");
  218. });
  219. this.but_equal.addEvent("click", function(){
  220. _self.baseCompute("", "");
  221. _self.resultData = 0;
  222. _self.currentOperation = "";
  223. _self.startNumber = true;
  224. _self.screenReferenceNode.set("text", "");
  225. });
  226. },
  227. baseCompute: function(symbol, method){
  228. var v = this.screenContentNode.get("text");
  229. var vr = this.screenReferenceNode.get("text");
  230. this.screenReferenceNode.set("text", vr+v+symbol);
  231. if (this.currentOperation){
  232. var x = new Decimal(this.resultData);
  233. this.resultData = x[this.currentOperation](new Decimal(v));
  234. this.resultData = (new Decimal(this.resultData)).toNumber();
  235. if (this.resultData.toString().length>19){
  236. this.screenContentNode.setStyles({"font-size": "18px", "line-height": "70px"});
  237. }else if (this.resultData.toString().length>13){
  238. this.screenContentNode.setStyles({"font-size": "24px", "line-height": "70px"});
  239. }
  240. this.screenContentNode.set("text", this.resultData);
  241. }else{
  242. this.resultData = v;
  243. }
  244. this.currentOperation = method;
  245. this.startNumber = true;
  246. }
  247. });