Main.js 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. MWF.xApplication.Profile.options.multitask = false;
  2. MWF.xApplication.Profile.Main = new Class({
  3. Extends: MWF.xApplication.Common.Main,
  4. Implements: [Options, Events],
  5. options: {
  6. "style": "default",
  7. "name": "Profile",
  8. "icon": "icon.png",
  9. "width": "800",
  10. "height": "600",
  11. "isResize": false,
  12. "isMax": false,
  13. "title": MWF.xApplication.Profile.LP.title
  14. },
  15. onQueryLoad: function(){
  16. this.lp = MWF.xApplication.Profile.LP;
  17. },
  18. loadApplication: function(callback){
  19. this.loadTitle();
  20. this.loadContent();
  21. },
  22. loadTitle: function(){
  23. this.loadTitleBar();
  24. this.loadTitleUserNode();
  25. this.loadTitleTextNode();
  26. },
  27. loadTitleBar: function(){
  28. this.titleBar = new Element("div", {
  29. "styles": this.css.titleBar
  30. }).inject(this.content);
  31. },
  32. loadTitleUserNode: function(){
  33. this.titleUserNode = new Element("div", {
  34. "styles": this.css.titleUserNode
  35. }).inject(this.titleBar);
  36. this.titleUserIconNode = new Element("div", {
  37. "styles": this.css.titleUserIconNode
  38. }).inject(this.titleUserNode);
  39. this.titleUserTextNode = new Element("div", {
  40. "styles": this.css.titleUserTextNode,
  41. "text": this.desktop.session.user.name
  42. }).inject(this.titleUserNode);
  43. },
  44. loadTitleTextNode: function(){
  45. this.taskTitleTextNode = new Element("div", {
  46. "styles": this.css.titleTextNode,
  47. "text": this.lp.title
  48. }).inject(this.titleBar);
  49. },
  50. loadContent: function(){
  51. this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  52. MWF.require("MWF.widget.Tab", function(){
  53. this.tab = new MWF.widget.Tab(this.contentNode, {"style": "profile"});
  54. this.tab.load();
  55. this.loadInforConfigNode();
  56. this.loadLayoutConfigNode();
  57. this.loadIdeaConfigNode();
  58. this.loadPasswordConfigNode();
  59. this.loadSSOConfigNode();
  60. this.inforConfigPage = this.tab.addTab(this.inforConfigNode, this.lp.inforConfig);
  61. this.layoutConfigPage = this.tab.addTab(this.layoutConfigNode, this.lp.layoutConfig);
  62. this.ideaConfigPage = this.tab.addTab(this.ideaConfigNode, this.lp.ideaConfig);
  63. this.passwordConfigPage = this.tab.addTab(this.passwordConfigNode, this.lp.passwordConfig);
  64. this.ssoConfigPage = this.tab.addTab(this.ssoConfigNode, this.lp.ssoConfig);
  65. if (this.options.tab){
  66. this[this.options.tab].showIm();
  67. }else{
  68. this.inforConfigPage.showIm();
  69. }
  70. }.bind(this));
  71. },
  72. loadInforConfigNode: function(){
  73. this.inforConfigNode = new Element("div", {"styles": this.css.configNode}).inject(this.content);
  74. this.inforConfigAreaNode = new Element("div", {"styles": this.css.inforConfigAreaNode}).inject(this.inforConfigNode);
  75. this.getAction(function(){
  76. this.action.getPerson(function(json){
  77. this.personData = json.data;
  78. // var icon = json.data.icon;
  79. // if (!icon){
  80. // if (json.data.genderType=="f"){
  81. // icon = "/x_component_Profile/$Main/"+this.options.style+"/female.png";
  82. // }else{
  83. // icon = "/x_component_Profile/$Main/"+this.options.style+"/man.png";
  84. // }
  85. // }else{
  86. // icon = "data:image/png;base64,"+icon;
  87. // }
  88. //var html = "<table width='100%' border='0' cellpadding='5px'>" +
  89. // "<tr><td>头像:</td><td><img src='"+icon+"' style='width:72px; height: 72px; border:0px; float:left'/>" +
  90. // "<div style='margin: 20px 10px; cursor: pointer; float: left; border: 1px solid #999; padding: 3px 5px'>更换头像</div></td></tr>" +
  91. // "<tr><td>姓名:</td><td>"+json.data.name+"</td></tr>" +
  92. // "<tr><td>工号:</td><td>"+json.data.employee+"</td></tr>" +
  93. // "<tr><td>邮件:</td><td></td></tr>" +
  94. // "<tr><td>微信:</td><td>"+json.data.employee+"</td></tr>" +
  95. // "<tr><td>手机:</td><td>"+json.data.employee+"</td></tr>" +
  96. // "<tr><td>QQ:</td><td>"+json.data.employee+"</td></tr>" +
  97. // "</table>"
  98. //this.inforConfigAreaNode.set("html", html);
  99. var _self = this;
  100. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  101. var titleNode = new Element("div", {"styles": this.css.inforIconTitleNode, "text": this.lp.icon}).inject(lineNode);
  102. var contentNode = new Element("div", {"styles": this.css.inforIconContentNode}).inject(lineNode);
  103. this.contentImgNode = new Element("img", {"styles": this.css.inforIconContentImgNode, "src": this.action.getPersonIcon()}).inject(contentNode);
  104. var actionNode = new Element("div", {"styles": this.css.inforChangeIconNode, "text": this.lp.changeIcon, "events": {
  105. "click": function(){this.changeIcon();}.bind(this)
  106. }}).inject(lineNode);
  107. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  108. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.name}).inject(lineNode);
  109. var contentNode = new Element("div", {"styles": this.css.inforContentNode, "text": json.data.name}).inject(lineNode);
  110. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  111. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.employee}).inject(lineNode);
  112. var contentNode = new Element("div", {"styles": this.css.inforContentNode, "text": json.data.employee}).inject(lineNode);
  113. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  114. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.mail}).inject(lineNode);
  115. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  116. this.mailInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.mail, "events": {
  117. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  118. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  119. }}).inject(contentNode);
  120. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  121. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.mobile}).inject(lineNode);
  122. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  123. this.mobileInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.mobile, "events": {
  124. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  125. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  126. }}).inject(contentNode);
  127. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  128. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.officePhone}).inject(lineNode);
  129. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  130. this.officePhoneInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.officePhone, "events": {
  131. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  132. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  133. }}).inject(contentNode);
  134. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  135. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.weixin}).inject(lineNode);
  136. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  137. this.weixinInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.weixin, "events": {
  138. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  139. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  140. }}).inject(contentNode);
  141. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  142. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.QQ}).inject(lineNode);
  143. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  144. this.qqInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.qq, "events": {
  145. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  146. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  147. }}).inject(contentNode);
  148. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  149. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.signature}).inject(lineNode);
  150. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  151. this.signatureInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.signature, "events": {
  152. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  153. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  154. }}).inject(contentNode);
  155. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  156. this.saveAction = new Element("div", {"styles": this.css.saveAction, "text": this.lp.saveInfor}).inject(lineNode);
  157. this.saveAction.addEvent("click", function(){
  158. this.savePersonInfor();
  159. }.bind(this));
  160. }.bind(this), null, this.desktop.session.user.name)
  161. }.bind(this));
  162. },
  163. changeIcon: function(){
  164. var options = {};
  165. var width = "668";
  166. var height = "510";
  167. width = width.toInt();
  168. height = height.toInt();
  169. var size = this.content.getSize();
  170. var x = (size.x-width)/2;
  171. var y = (size.y-height)/2;
  172. if (x<0) x = 0;
  173. if (y<0) y = 0;
  174. if (layout.mobile){
  175. x = 20;
  176. y = 0;
  177. }
  178. var _self = this;
  179. MWF.require("MWF.xDesktop.Dialog", function() {
  180. MWF.require("MWF.widget.ImageClipper", function(){
  181. var dlg = new MWF.xDesktop.Dialog({
  182. "title": this.lp.changePersonIcon,
  183. "style": "image",
  184. "top": y,
  185. "left": x - 20,
  186. "fromTop": y,
  187. "fromLeft": x - 20,
  188. "width": width,
  189. "height": height,
  190. "html": "<div></div>",
  191. "maskNode": this.content,
  192. "container": this.content,
  193. "buttonList": [
  194. {
  195. "text": MWF.LP.process.button.ok,
  196. "action": function () {
  197. //_self.uploadPersonIcon();
  198. _self.image.uploadImage( function( json ){
  199. _self.action.getPerson(function(json){
  200. if (json.data){
  201. this.personData = json.data;
  202. _self.contentImgNode.set("src", _self.action.getPersonIcon());
  203. }
  204. this.close();
  205. }.bind(this));
  206. }.bind(this), null );
  207. }
  208. },
  209. {
  210. "text": MWF.LP.process.button.cancel,
  211. "action": function () {
  212. _self.image = null;
  213. this.close();
  214. }
  215. }
  216. ]
  217. });
  218. dlg.show();
  219. this.image = new MWF.widget.ImageClipper(dlg.content.getFirst(), {
  220. "aspectRatio": 1,
  221. "description" : "",
  222. "imageUrl" : this.action.getPersonIcon(),
  223. "resetEnable" : false,
  224. "data": null,
  225. "parameter": null,
  226. "action": this.action.action,
  227. "method": "changeIcon"
  228. });
  229. this.image.load();
  230. }.bind(this));
  231. }.bind(this))
  232. },
  233. uploadPersonIcon: function(){
  234. if (this.image){
  235. if( this.image.getResizedImage() ){
  236. this.action.changeIcon(function(){
  237. this.action.getPerson(function(json){
  238. if (json.data){
  239. this.personData = json.data;
  240. //if (this.personData.icon){
  241. this.contentImgNode.set("src", this.action.getPersonIcon());
  242. //}
  243. }
  244. }.bind(this))
  245. }.bind(this), null, this.image.getFormData(), this.image.resizedImage);
  246. // this.explorer.actions.changePersonIcon(this.data.id ,function(){
  247. // this.iconNode.set("src", "");
  248. // if (this.item.iconNode) this.item.iconNode.getElement("img").set("src", "");
  249. // window.setTimeout(function(){
  250. // this.iconNode.set("src", this._getIcon(true));
  251. // if (this.item.iconNode) this.item.iconNode.getElement("img").set("src", this.item._getIcon(true));
  252. // }.bind(this), 100);
  253. // }.bind(this), null, this.image.getFormData(), this.image.resizedImage);
  254. }
  255. }
  256. },
  257. // changeIcon: function(){
  258. // if (!this.uploadFileAreaNode){
  259. // this.uploadFileAreaNode = new Element("div");
  260. // var html = "<input name=\"file\" type=\"file\"/>";
  261. // this.uploadFileAreaNode.set("html", html);
  262. //
  263. // this.fileUploadNode = this.uploadFileAreaNode.getFirst();
  264. // this.fileUploadNode.addEvent("change", function(){
  265. //
  266. // var files = fileNode.files;
  267. // if (files.length){
  268. // for (var i = 0; i < files.length; i++) {
  269. // var file = files.item(i);
  270. //
  271. // var formData = new FormData();
  272. // formData.append('file', file);
  273. // //formData.append('name', file.name);
  274. // //formData.append('folder', folderId);
  275. // this.action.changeIcon(function(){
  276. // this.action.getPerson(function(json){
  277. // if (json.data){
  278. // this.personData = json.data;
  279. // //if (this.personData.icon){
  280. // this.contentImgNode.set("src", this.action.getPersonIcon());
  281. // //}
  282. // }
  283. // }.bind(this))
  284. // }.bind(this), null, formData, file);
  285. // }
  286. // }
  287. //
  288. // }.bind(this));
  289. // }
  290. // var fileNode = this.uploadFileAreaNode.getFirst();
  291. // fileNode.click();
  292. // },
  293. savePersonInfor: function(){
  294. this.personData.officePhone = this.officePhoneInputNode.get("value");
  295. this.personData.mail = this.mailInputNode.get("value");
  296. this.personData.mobile = this.mobileInputNode.get("value");
  297. this.personData.weixin = this.weixinInputNode.get("value");
  298. this.personData.qq = this.qqInputNode.get("value");
  299. this.personData.signature = this.signatureInputNode.get("value");
  300. this.action.updatePerson(this.personData, function(){
  301. this.notice(this.lp.saveInforOk, "success");
  302. }.bind(this));
  303. },
  304. loadLayoutConfigNode: function(){
  305. this.layoutConfigNode = new Element("div", {"styles": this.css.configNode}).inject(this.content);
  306. new Element("div", {"styles": this.css.layoutTitleNode, "text": this.lp.layoutAction}).inject(this.layoutConfigNode);
  307. var buttonNode = new Element("div", {"styles": this.css.buttonNodeArea}).inject(this.layoutConfigNode);
  308. this.clearDataAction = new Element("div", {"styles": this.css.clearDataAction, "text": this.lp.clear}).inject(buttonNode);
  309. this.clearDataAction.addEvent("click", function(){
  310. MWF.require("MWF.widget.UUID", function(){
  311. //MWF.UD.putData("layout", {}, function(){
  312. // this.notice(this.lp.clearok, "success");
  313. // this.desktop.notRecordStatus = true;
  314. //}.bind(this));
  315. MWF.UD.deleteData("layout", function(){
  316. this.notice(this.lp.clearok, "success");
  317. this.desktop.notRecordStatus = true;
  318. }.bind(this));
  319. }.bind(this));
  320. }.bind(this));
  321. if (MWF.AC.isAdministrator()){
  322. var defaultNode = new Element("div", {"styles": {"overflow":"hidden", "clear": "left"}}).inject(buttonNode);
  323. this.defaultDataAction = new Element("div", {"styles": this.css.setDefaultDataAction, "text": this.lp.setDefault}).inject(defaultNode);
  324. this.defaultDataAction.addEvent("click", function(){
  325. MWF.require("MWF.widget.UUID", function(){
  326. var text = this.lp.setDefaultOk;
  327. this.close();
  328. var status = layout.desktop.getLayoutStatusData();
  329. MWF.UD.putPublicData("defaultLayout", status, function(){
  330. MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, text, layout.desktop.desktopNode);
  331. }.bind(this));
  332. }.bind(this));
  333. }.bind(this));
  334. this.clearDefaultDataAction = new Element("div", {"styles": this.css.setDefaultDataAction, "text": this.lp.clearDefault}).inject(defaultNode);
  335. this.clearDefaultDataAction.addEvent("click", function(){
  336. MWF.require("MWF.widget.UUID", function(){
  337. MWF.UD.deletePublicData("defaultLayout", function(){
  338. this.notice(this.lp.clearok, "success");
  339. this.desktop.notRecordStatus = true;
  340. }.bind(this));
  341. //
  342. // var text = this.lp.setDefaultOk;
  343. // this.close();
  344. // var status = layout.desktop.getLayoutStatusData();
  345. // MWF.UD.putPublicData("defaultLayout", status, function(){
  346. // MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, text, layout.desktop.desktopNode);
  347. // }.bind(this));
  348. }.bind(this));
  349. }.bind(this));
  350. //var tmpNode = new Element("div", {"styles": {
  351. // "width": "300px",
  352. // "margin": "-20px auto"
  353. //}}).inject(this.layoutConfigNode);
  354. this.forceDataAction = new Element("div", {"styles": this.css.setDefaultDataAction, "text": this.lp.setForce}).inject(buttonNode);
  355. this.forceDataAction.setStyle("float", "left");
  356. this.forceDataAction.addEvent("click", function(){
  357. MWF.require("MWF.widget.UUID", function(){
  358. var text = this.lp.setForceOk;
  359. this.close();
  360. var status = layout.desktop.getLayoutStatusData();
  361. MWF.UD.putPublicData("forceLayout", status, function(){
  362. MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, text, layout.desktop.desktopNode);
  363. }.bind(this));
  364. }.bind(this));
  365. }.bind(this));
  366. this.deleteForceDataAction = new Element("div", {"styles": this.css.setDefaultDataAction, "text": this.lp.clearForce}).inject(buttonNode);
  367. this.deleteForceDataAction.addEvent("click", function(){
  368. MWF.require("MWF.widget.UUID", function(){
  369. MWF.UD.deletePublicData("forceLayout", function(){
  370. this.notice(this.lp.clearok, "success");
  371. this.desktop.notRecordStatus = true;
  372. }.bind(this));
  373. }.bind(this));
  374. }.bind(this));
  375. }
  376. new Element("div", {"styles": this.css.layoutTitleNode, "text": this.lp.desktopBackground}).inject(this.layoutConfigNode);
  377. var UINode = new Element("div", {"styles": this.css.buttonNodeArea}).inject(this.layoutConfigNode);
  378. this.loadDesktopBackground(UINode);
  379. },
  380. loadDesktopBackground: function(UINode){
  381. var currentSrc = layout.desktop.options.style;
  382. MWF.UD.getDataJson("layoutDesktop", function(json){
  383. if (json) currentSrc = json.src;
  384. }.bind(this), false);
  385. MWF.getJSON(layout.desktop.path+"styles.json", function(json){
  386. json.each(function(style){
  387. var img = MWF.defaultPath+"/xDesktop/$Layout/"+style.style+"/preview.jpg";
  388. //var dskImg = MWF.defaultPath+"/xDesktop/$Layout/"+style.style+"/desktop.jpg";
  389. var imgArea = new Element("div", {"styles": this.css.previewBackground}).inject(UINode);
  390. if (currentSrc==style.style){
  391. imgArea.setStyles({"border": "4px solid #ffea00"});
  392. }
  393. new Element("img", {"src": img}).inject(imgArea);
  394. imgArea.store("dskimg", style.style);
  395. var _self = this;
  396. imgArea.addEvent("click", function(){ _self.selectDesktopImg(this, UINode); });
  397. }.bind(this));
  398. }.bind(this));
  399. //MWF.UD.getPublicData("layoutDesktopImgs", function(json){
  400. // if (json) currentSrc = json.src;
  401. //}.bind(this), false);
  402. //
  403. if (MWF.AC.isAdministrator()){
  404. }
  405. },
  406. selectDesktopImg: function(item, UINode){
  407. var desktopImg = item.retrieve("dskimg");
  408. MWF.UD.putData("layoutDesktop", {"src": desktopImg}, function(){
  409. UINode.getChildren().each(function(node){
  410. node.setStyles({"border": "4px solid #eeeeee"});
  411. }.bind(this));
  412. item.setStyles({"border": "4px solid #ffea00"});
  413. var dskImg = MWF.defaultPath+"/xDesktop/$Layout/"+desktopImg+"/desktop.jpg";
  414. layout.desktop.node.setStyle("background-image", "url("+dskImg+")");
  415. }.bind(this));
  416. },
  417. loadIdeaConfigNode: function(){
  418. this.ideaConfigNode = new Element("div", {"styles": this.css.configNode}).inject(this.content);
  419. this.ideasArea = new Element("textarea", {"styles": this.css.ideasArea}).inject(this.ideaConfigNode);
  420. this.ideasSaveAction = new Element("div", {"styles": this.css.ideasSaveAction, "text": this.lp.saveIdea}).inject(this.ideaConfigNode);
  421. if (MWF.AC.isAdministrator()){
  422. this.ideasSaveDefaultAction = new Element("div", {"styles": this.css.ideasSaveAction, "text": this.lp.saveIdeaDefault}).inject(this.ideaConfigNode);
  423. this.ideasSaveDefaultAction.addEvent("click", function(){
  424. MWF.require("MWF.widget.UUID", function(){
  425. var data = {};
  426. data.ideas = this.ideasArea.get("value").split("\n");
  427. MWF.UD.putPublicData("idea", data, function(){
  428. this.notice(this.lp.ideaSaveOk, "success");
  429. }.bind(this));
  430. }.bind(this));
  431. }.bind(this))
  432. }
  433. MWF.require("MWF.widget.UUID", function(){
  434. MWF.UD.getDataJson("idea", function(json){
  435. if (json){
  436. if (json.ideas) this.ideasArea.set("value", json.ideas.join("\n"));
  437. }
  438. }.bind(this));
  439. }.bind(this));
  440. this.ideasSaveAction.addEvent("click", function(){
  441. MWF.require("MWF.widget.UUID", function(){
  442. var data = {};
  443. data.ideas = this.ideasArea.get("value").split("\n");
  444. MWF.UD.putData("idea", data, function(){
  445. this.notice(this.lp.ideaSaveOk, "success");
  446. }.bind(this));
  447. }.bind(this));
  448. }.bind(this))
  449. },
  450. loadPasswordConfigNode: function(){
  451. this.passwordConfigNode = new Element("div", {"styles": this.css.configNode});
  452. this.passwordConfigAreaNode = new Element("div", {"styles": this.css.inforConfigAreaNode}).inject(this.passwordConfigNode);
  453. var _self = this;
  454. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  455. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.oldPassword}).inject(lineNode);
  456. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  457. this.oldPasswordInputNode = new Element("input", {"type": "password", "styles": this.css.inforContentInputNode, "events": {
  458. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  459. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  460. }}).inject(contentNode);
  461. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  462. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.password}).inject(lineNode);
  463. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  464. this.passwordInputNode = new Element("input", {"type": "password", "styles": this.css.inforContentInputNode, "events": {
  465. "blur": function(){
  466. this.setStyles(_self.css.inforContentInputNode);
  467. },
  468. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);},
  469. "keyup" : function(){ this.checkPassowrdStrength( this.passwordInputNode.get("value") ) }.bind(this)
  470. }}).inject(contentNode);
  471. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  472. var titleNode = new Element("div", {"styles": this.css.inforTitleNode}).inject(lineNode);
  473. this.passwordRemindContainer = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  474. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  475. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.morePassword}).inject(lineNode);
  476. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  477. this.morePasswordInputNode = new Element("input", {"type": "password", "styles": this.css.inforContentInputNode, "events": {
  478. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  479. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  480. }}).inject(contentNode);
  481. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  482. this.saveAction = new Element("div", {"styles": this.css.saveAction, "text": this.lp.passwordConfig}).inject(lineNode);
  483. this.saveAction.addEvent("click", function(){
  484. this.changePassword();
  485. }.bind(this));
  486. this.createPasswordStrengthNode();
  487. this.passworRemindNode = new Element("div",{"styles": this.css.passwordRemindNode, "text": this.lp.paswordRule }).inject( this.passwordRemindContainer );
  488. },
  489. changePassword: function(){
  490. var oldPassword = this.oldPasswordInputNode.get("value");
  491. var password = this.passwordInputNode.get("value");
  492. var morePassword = this.morePasswordInputNode.get("value");
  493. if (password!=morePassword){
  494. this.notice(this.lp.passwordNotMatch, "error");
  495. this.passwordInputNode.setStyles(this.css.inforContentInputNode_error);
  496. this.morePasswordInputNode.setStyles(this.css.inforContentInputNode_error);
  497. }else{
  498. this.action.changePassword(oldPassword, password, morePassword, function(){
  499. this.oldPasswordInputNode.set("value", "");
  500. this.passwordInputNode.set("value", "");
  501. this.morePasswordInputNode.set("value", "");
  502. this.notice(this.lp.changePasswordOk, "success");
  503. }.bind(this));
  504. if (layout.config.mail){
  505. var url = "http://"+layout.config.mail+"//names.nsf?changepassword&password="+encodeURIComponent(oldPassword)+"&passwordnew="+encodeURIComponent(password)+"&passwordconfirm="+encodeURIComponent(password);
  506. var iframe = new Element("iframe", {"styles": {"display": "none"}}).inject(this.desktop.desktopNode);
  507. iframe.set("src", url);
  508. window.setTimeout(function(){
  509. iframe.destroy();
  510. }.bind(this), 2000);
  511. }
  512. }
  513. },
  514. getAction: function(callback){
  515. if (!this.acrion){
  516. this.action = MWF.Actions.get("x_organization_assemble_personal");
  517. if (callback) callback();
  518. // MWF.xDesktop.requireApp("Profile", "Actions.RestActions", function(){
  519. // this.action = new MWF.xApplication.Profile.Actions.RestActions();
  520. // if (callback) callback();
  521. // }.bind(this));
  522. }else{
  523. if (callback) callback();
  524. }
  525. },
  526. createPasswordStrengthNode : function(){
  527. var passwordStrengthArea = this.passwordRemindContainer;
  528. var lowNode = new Element( "div", {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
  529. this.lowColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( lowNode );
  530. this.lowTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.weak }).inject( lowNode );
  531. var middleNode = new Element( "div" , {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
  532. this.middleColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( middleNode );
  533. this.middleTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.middle }).inject( middleNode );
  534. var highNode = new Element("div", {styles : this.css.passwordStrengthNode }).inject( passwordStrengthArea );
  535. this.highColorNode = new Element( "div", {styles : this.css.passwordStrengthColor }).inject( highNode );
  536. this.highTextNode = new Element( "div", {styles : this.css.passwordStrengthText, text : this.lp.high }).inject( highNode );
  537. },
  538. getPasswordLevel: function( password, callback ){
  539. /*Level(级别)
  540. •0-3 : [easy]
  541. •4-6 : [midium]
  542. •7-9 : [strong]
  543. •10-12 : [very strong]
  544. •>12 : [extremely strong]
  545. */
  546. this.getAction( function( ){
  547. this.action.checkPassword( password, function( json ){
  548. if(callback)callback( json.data.value );
  549. }.bind(this), null, false );
  550. }.bind(this) );
  551. },
  552. checkPassowrdStrength: function(pwd){
  553. this.lowColorNode.setStyles( this.css.passwordStrengthColor );
  554. this.lowTextNode.setStyles( this.css.passwordStrengthText );
  555. this.middleColorNode.setStyles( this.css.passwordStrengthColor );
  556. this.middleTextNode.setStyles( this.css.passwordStrengthText );
  557. this.highColorNode.setStyles( this.css.passwordStrengthColor );
  558. this.highTextNode.setStyles( this.css.passwordStrengthText );
  559. if (pwd==null||pwd==''){
  560. }else{
  561. this.getPasswordLevel( pwd, function( level ){
  562. switch(level) {
  563. case 0:
  564. case 1:
  565. case 2:
  566. case 3:
  567. this.lowColorNode.setStyles( this.css.passwordStrengthColor_low );
  568. this.lowTextNode.setStyles( this.css.passwordStrengthText_current );
  569. break;
  570. case 4:
  571. case 5:
  572. case 6:
  573. this.middleColorNode.setStyles( this.css.passwordStrengthColor_middle );
  574. this.middleTextNode.setStyles( this.css.passwordStrengthText_current );
  575. break;
  576. default:
  577. this.highColorNode.setStyles( this.css.passwordStrengthColor_high );
  578. this.highTextNode.setStyles( this.css.passwordStrengthText_current );
  579. }
  580. }.bind(this) )
  581. }
  582. },
  583. loadSSOConfigNode: function(){
  584. this.ssoConfigNode = new Element("div", {"styles": this.css.configNode}).inject(this.content);
  585. this.ssoConfigTitleNode = new Element("div", {"styles": this.css.ssoConfigTitleNode, "text": this.lp.bindOauth}).inject(this.ssoConfigNode);
  586. this.ssoConfigAreaNode = new Element("div", {"styles": {"padding": "10px 40px"}}).inject(this.ssoConfigNode);
  587. MWF.Actions.get("x_organization_assemble_authentication").listOauthServer(function(json){
  588. json.data.each(function(d){
  589. var node = new Element("a", {
  590. "styles": {"font-size": "14px", "display": "block", "margin-bottom": "10px"},
  591. "text": d.displayName,
  592. "target": "_blank",
  593. "href": "/x_desktop/oauth.html?oauth="+encodeURIComponent(d.name)+"&redirect="+"&method=oauthBind"
  594. }).inject(this.ssoConfigAreaNode)
  595. }.bind(this));
  596. }.bind(this));
  597. // this.ideasArea = new Element("textarea", {"styles": this.css.ideasArea}).inject(this.ideaConfigNode);
  598. // this.ideasSaveAction = new Element("div", {"styles": this.css.ideasSaveAction, "text": this.lp.saveIdea}).inject(this.ideaConfigNode);
  599. //
  600. // if (MWF.AC.isAdministrator()){
  601. // this.ideasSaveDefaultAction = new Element("div", {"styles": this.css.ideasSaveAction, "text": this.lp.saveIdeaDefault}).inject(this.ideaConfigNode);
  602. // this.ideasSaveDefaultAction.addEvent("click", function(){
  603. // MWF.require("MWF.widget.UUID", function(){
  604. // var data = {};
  605. // data.ideas = this.ideasArea.get("value").split("\n");
  606. // MWF.UD.putPublicData("idea", data, function(){
  607. // this.notice(this.lp.ideaSaveOk, "success");
  608. // }.bind(this));
  609. // }.bind(this));
  610. // }.bind(this))
  611. // }
  612. //
  613. // MWF.require("MWF.widget.UUID", function(){
  614. // MWF.UD.getDataJson("idea", function(json){
  615. // if (json){
  616. // if (json.ideas) this.ideasArea.set("value", json.ideas.join("\n"));
  617. // }
  618. // }.bind(this));
  619. // }.bind(this));
  620. //
  621. // this.ideasSaveAction.addEvent("click", function(){
  622. // MWF.require("MWF.widget.UUID", function(){
  623. // var data = {};
  624. // data.ideas = this.ideasArea.get("value").split("\n");
  625. // MWF.UD.putData("idea", data, function(){
  626. // this.notice(this.lp.ideaSaveOk, "success");
  627. // }.bind(this));
  628. // }.bind(this));
  629. // }.bind(this))
  630. }
  631. });