Main.js 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. MWF.xApplication.SmartOfficeRoom.options.multitask = false;
  2. MWF.xApplication.SmartOfficeRoom.Main = new Class({
  3. Extends: MWF.xApplication.Common.Main,
  4. Implements: [Options, Events],
  5. options: {
  6. "style1": "default",
  7. "style": "default",
  8. "name": "SmartOfficeRoom",
  9. "icon": "icon.png",
  10. "width": "420",
  11. "height": "680",
  12. "isResize": false,
  13. "isMax": false,
  14. "title": MWF.xApplication.SmartOfficeRoom.LP.title
  15. },
  16. onQueryLoad: function(){
  17. this.lp = MWF.xApplication.SmartOfficeRoom.LP;
  18. this.action = MWF.Actions.get("x_smartoffice_control");
  19. },
  20. reload: function(){
  21. this.deviceContent.setStyle("display", "block");
  22. if (this.selectDeviceContent) this.selectDeviceContent.setStyle("display", "none");
  23. },
  24. loadApplication: function(callback){
  25. this.devices = [];
  26. this.size = this.content.getSize();
  27. var itemWidth = (this.size.x/2).toInt()-22;
  28. this.css.itemNode.width = ""+itemWidth+"px";
  29. this.loadDeviceContent();
  30. if (callback) callback();
  31. },
  32. loadDeviceContent: function(){
  33. this.deviceContent = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  34. this.loadDevices();
  35. this.loadConfigButton();
  36. },
  37. loadDevices: function(){
  38. this.action.listDevice(function(json){
  39. debugger;
  40. if (callback) callback();
  41. });
  42. },
  43. loadConfigButton: function(){
  44. this.addActionNode = new Element("div", {"styles": this.css.itemNode}).inject(this.deviceContent);
  45. this.addActionTextNode = new Element("div", {"styles": this.css.addActionTextNode, "text": this.lp.add}).inject(this.addActionNode);
  46. this.addActionIconNode = new Element("div", {"styles": this.css.addActionIconNode}).inject(this.addActionNode);
  47. this.addActionIconNode.addEvents({
  48. "mouseover": function(){this.addActionIconNode.setStyles(this.css.addActionIconNode_over); this.addActionTextNode.setStyle("color", "#3498db");}.bind(this),
  49. "mouseout": function(){this.addActionIconNode.setStyles(this.css.addActionIconNode); this.addActionTextNode.setStyle("color", "#999");}.bind(this),
  50. "click": function(e){
  51. this.addActionIconNode.setStyles(this.css.addActionIconNode); this.addActionTextNode.setStyle("color", "#999");
  52. this.createNewDevice(e);
  53. }.bind(this)
  54. });
  55. },
  56. createNewDevice: function(){
  57. this.deviceContent.setStyle("display", "none");
  58. if (!this.selectDeviceContent) this.createSelectDeviceContent();
  59. this.selectDeviceContent.setStyle("display", "block");
  60. },
  61. createSelectDeviceContent: function(){
  62. var _self = this;
  63. this.selectDeviceContent = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  64. MWF.getJSON(this.path+"device.json", function(json){
  65. Object.each(json, function(dev){
  66. var node = new Element("div", {"styles": this.css.selectDeviceNode}).inject(this.selectDeviceContent);
  67. node.store("dev", dev);
  68. var iconNode = new Element("div", {"styles": this.css.selectDeviceIconNode}).inject(node);
  69. iconNode.setStyle("background-image", "url("+this.path+this.options.style+"/device/"+dev.icon+"-off-64.png)");
  70. var flagNode = new Element("div", {"styles": this.css.selectDeviceFlagNode}).inject(node);
  71. var contentNode = new Element("div", {"styles": this.css.selectDeviceContentNode}).inject(node);
  72. var textNode = new Element("div", {"styles": this.css.selectDeviceTextNode, "text": dev.name}).inject(contentNode);
  73. var desNode = new Element("div", {"styles": this.css.selectDeviceDesNode, "text": dev.description}).inject(contentNode);
  74. node.addEvents({
  75. "mouseover": function(){this.setStyles(_self.css.selectDeviceNode_over);},
  76. "mouseout": function(){this.setStyles(_self.css.selectDeviceNode);},
  77. "click": function(e){_self.createDevice(this)}
  78. });
  79. }.bind(this))
  80. }.bind(this));
  81. },
  82. createDevice: function(node){
  83. var dev = node.retrieve("dev");
  84. if (dev && dev["class"]){
  85. var device = new MWF.xApplication.SmartOfficeRoom.Device[dev["class"]](this);
  86. device.create();
  87. }
  88. }
  89. });
  90. MWF.xApplication.SmartOfficeRoom.Device = new Class({
  91. initialize: function(app, data){
  92. this.app = app;
  93. this.css = this.app.css;
  94. this.lp = this.app.lp;
  95. this.data = data;
  96. this.init();
  97. },
  98. init: function(){},
  99. load: function(){},
  100. getNewData: function(){
  101. return {
  102. "name": "",
  103. "sn": "",
  104. "description": ""
  105. }
  106. },
  107. create: function(){
  108. this.data = this.getNewData();
  109. this.createAreaNode();
  110. },
  111. createAreaNode: function(){
  112. this.areaNode = new Element("div", {"styles": this.css.createContentNode}).inject(this.app.content);
  113. var size = this.app.content.getSize();
  114. this.areaNode.setStyle("left", ""+size.x+"px");
  115. this.createConfigTitle();
  116. this.createConfigAction();
  117. this.createConfigContent();
  118. new Fx.Morph(this.areaNode, {
  119. "duration": "200"
  120. }).start({"left": "0px"});
  121. },
  122. createConfigTitle: function(){
  123. this.configTitleNode = new Element("div", {"styles": this.css.configContentTitleNode}).inject(this.areaNode);
  124. this.configIconNode = new Element("div", {"styles": this.css.configContentIconNode}).inject(this.configTitleNode);
  125. this.configTextNode = new Element("div", {"styles": this.css.configContentTextNode}).inject(this.configTitleNode);
  126. },
  127. createConfigAction: function(){
  128. this.configActionAreaNode = new Element("div", {"styles": this.css.configActionAreaNode}).inject(this.areaNode);
  129. this.configSaveActionNode = new Element("div", {"styles": this.css.configSaveActionNode, "text": this.lp.save}).inject(this.configActionAreaNode);
  130. this.configCancelActionNode = new Element("div", {"styles": this.css.configCancelActionNode, "text": this.lp.cancel}).inject(this.configActionAreaNode);
  131. this.configSaveActionNode.addEvent("click", this.saveDevice.bind(this));
  132. this.configCancelActionNode.addEvent("click", this.cancelDevice.bind(this));
  133. },
  134. createConfigContent: function(){
  135. this.configContentNode = new Element("div", {"styles": this.css.configContentNode}).inject(this.areaNode);
  136. var size = this.app.content.getSize();
  137. var titleSize = this.configTitleNode.getSize();
  138. var actionSize = this.configActionAreaNode.getSize();
  139. var h = size.y-titleSize.y-actionSize.y;
  140. this.configContentNode.setStyle("height", ""+h+"px");
  141. this.createConfigInputContent()
  142. },
  143. cancelDevice: function(){
  144. var size = this.app.content.getSize();
  145. this.app.reload();
  146. new Fx.Morph(this.areaNode, {
  147. "duration": "200"
  148. }).start({"left": ""+size.x+"px"}).chain(function(){
  149. this.destroy();
  150. }.bind(this));
  151. },
  152. destroy: function(){
  153. this.areaNode.destroy();
  154. MWF.release(this);
  155. },
  156. saveDevice: function(){
  157. this.saveDeviceAction(function(){
  158. this.cancelDevice();
  159. }.bind(this));
  160. },
  161. saveDeviceAction: function(callback){
  162. if (callback) callback();
  163. }
  164. });
  165. MWF.xApplication.SmartOfficeRoom.Device.Light = new Class({
  166. Extends: MWF.xApplication.SmartOfficeRoom.Device,
  167. createConfigInputContent: function(){
  168. this.configIconNode.setStyle("background-image", "url("+this.app.path+this.app.options.style+"/device/light-32.png)");
  169. this.configTextNode.set("text", this.data.name || this.lp.newLight);
  170. var nameTitleNode = new Element("div", {"styles": this.css.configContentItemTitleNode, "text": this.lp.inputName}).inject(this.configContentNode);
  171. var nameInputAreaNode = new Element("div", {"styles": this.css.configContentItemInputAreaNode}).inject(this.configContentNode);
  172. this.nameInputNode = new Element("input", {"styles": this.css.configContentItemInputNode}).inject(nameInputAreaNode);
  173. var snTitleNode = new Element("div", {"styles": this.css.configContentItemTitleNode, "text": this.lp.inputSn}).inject(this.configContentNode);
  174. var snInputAreaNode = new Element("div", {"styles": this.css.configContentItemInputAreaNode}).inject(this.configContentNode);
  175. this.snInputNode = new Element("input", {"styles": this.css.configContentItemInputNode}).inject(snInputAreaNode);
  176. var descriptionTitleNode = new Element("div", {"styles": this.css.configContentItemTitleNode, "text": this.lp.inputDescription}).inject(this.configContentNode);
  177. var descriptionInputAreaNode = new Element("div", {"styles": this.css.configContentItemTextareaAreaNode}).inject(this.configContentNode);
  178. this.descriptionInputNode = new Element("textarea", {"styles": this.css.configContentItemTextareaNode}).inject(descriptionInputAreaNode);
  179. },
  180. saveDeviceAction: function(callback){
  181. var name = this.nameInputNode.get("value");
  182. var sn = this.snInputNode.get("value");
  183. var description = this.descriptionInputNode.get("value");
  184. if (!name){
  185. this.app.notice(this.lp.noname, "error");
  186. return false;
  187. }
  188. if (!sn){
  189. this.app.notice(this.lp.nosn, "error");
  190. return false;
  191. }
  192. var data = {
  193. "type": "light",
  194. "name": name,
  195. "sn": sn,
  196. "description": description
  197. };
  198. this.app.action.saveDevice(data, function(){
  199. if (callback) callback();
  200. });
  201. }
  202. });