Task.js 96 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961
  1. MWF.xApplication.TeamWork = MWF.xApplication.TeamWork || {};
  2. MWF.xApplication.TeamWork.Task = new Class({
  3. Extends: MPopupForm,
  4. Implements: [Options, Events],
  5. options: {
  6. "style": "default",
  7. "width": 1000,
  8. "height": "90%",
  9. "top": null,
  10. "left": null,
  11. "bottom" : null,
  12. "right" : null,
  13. "minWidth" : 300,
  14. "minHeight" : 220,
  15. "isLimitSize": true,
  16. "ifFade": false,
  17. "hasTop": false,
  18. "hasTopIcon" : false,
  19. "hasTopContent" : false,
  20. "hasIcon": false,
  21. "hasBottom": false,
  22. "hasMask" : true,
  23. "closeByClickMask" : false,
  24. "hasScroll" : false,
  25. "scrollType" : "",
  26. "title": "",
  27. "draggable": false,
  28. "resizeable" : false,
  29. "maxAction" : false,
  30. "closeAction": false,
  31. "relativeToApp" : true,
  32. "sizeRelateTo" : "app", //desktop
  33. "resultSeparator" : ","
  34. },
  35. initialize: function (explorer, data, options, para) {
  36. this.setOptions(options);
  37. this.explorer = explorer;
  38. if( para ){
  39. if( this.options.relativeToApp ){
  40. this.app = para.app || this.explorer.app;
  41. this.container = para.container || this.app.content;
  42. this.lp = para.lp || this.explorer.lp || this.app.lp;
  43. this.css = para.css || this.explorer.css || this.app.css;
  44. this.actions = para.actions || this.explorer.actions || this.app.actions || this.app.restActions;
  45. }else{
  46. this.container = para.container;
  47. this.lp = para.lp || this.explorer.lp;
  48. this.css = para.css || this.explorer.css;
  49. this.actions = para.actions || this.explorer.actions;
  50. }
  51. }else{
  52. if( this.options.relativeToApp ){
  53. this.app = this.explorer.app;
  54. this.container = this.app.content;
  55. this.lp = this.explorer.lp || this.app.lp;
  56. this.css = this.explorer.css || this.app.css;
  57. this.actions = this.explorer.actions || this.app.actions || this.app.restActions;
  58. }else{
  59. this.container = window.document.body;
  60. this.lp = this.explorer.lp;
  61. this.css = this.explorer.css;
  62. this.actions = this.explorer.actions;
  63. }
  64. }
  65. this.data = data || {};
  66. this.css = {};
  67. this.cssPath = "/x_component_TeamWork/$Task/"+this.options.style+"/css.wcss";
  68. this.load();
  69. this.lp = this.app.lp.task;
  70. },
  71. close: function (data) {
  72. this.fireEvent("queryClose");
  73. this._close();
  74. //if( this.form ){
  75. // this.form.destroy();
  76. //}
  77. if(this.setFormNodeSizeFun && this.app && this.app.removeEvent ){
  78. this.app.removeEvent("resize",this.setFormNodeSizeFun);
  79. }
  80. if( this.formMaskNode )this.formMaskNode.destroy();
  81. if( this.formAreaNode )this.formAreaNode.destroy();
  82. this.fireEvent("postClose",[data]);
  83. delete this;
  84. },
  85. openTask:function(data){
  86. //this.data.taskId = data.id;
  87. //alert("id="+this.data.taskId)
  88. this._createTableContent();
  89. },
  90. _createTableContent: function () {
  91. var _self = this;
  92. this.getTaskData(function(){
  93. this.formTableArea.empty();
  94. this.topLayout = new Element("div.topLayout",{styles:this.css.topLayout}).inject(this.formTableArea);
  95. //this.topImage = new Element("div.topImage",{styles:this.css.topImage}).inject(this.topLayout);
  96. this.topContent = new Element("div.topContent",{styles:this.css.topContent,text:this.taskData.name}).inject(this.topLayout);
  97. if(this.isNew){
  98. this.topContent.set("text",this.lp.newTask)
  99. }
  100. this.topIconContainer = new Element("div.topIconContainer",{styles:this.css.topIconContainer}).inject(this.topLayout);
  101. //更多
  102. this.topIconMore = new Element("div.topIconMore",{styles:this.css.topIconMore,title:this.lp.more}).inject(this.topIconContainer);
  103. this.topIconMore.addEvents({
  104. click:function(){
  105. var tm = new MWF.xApplication.TeamWork.Task.TaskMore(this.container, this.topIconMore, this.app, {data:this.taskData}, {
  106. css:this.css, lp:this.lp, axis : "y",
  107. position : { //node 固定的位置
  108. x : "auto",
  109. y : "middle"
  110. },
  111. nodeStyles : {
  112. "min-width":"200px",
  113. "padding":"2px",
  114. "border-radius":"5px",
  115. "box-shadow":"0px 0px 4px 0px #999999",
  116. "z-index" : "201"
  117. },
  118. onPostLoad:function(){
  119. tm.node.setStyles({"opacity":"0","top":(tm.node.getStyle("top").toInt()+4)+"px"});
  120. var fx = new Fx.Tween(tm.node,{duration:400});
  121. fx.start(["opacity"] ,"0", "1");
  122. },
  123. onClose:function(rd){
  124. if(!rd) return;
  125. if(rd.act == "remove"){
  126. this.close(rd);
  127. if(this.data.projectObj){ //reload project
  128. this.data.projectObj.createTaskGroup()
  129. }
  130. }
  131. }.bind(this)
  132. },null,this);
  133. tm.load();
  134. }.bind(this),
  135. mouseover:function(){
  136. this.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_more_click.png)"});
  137. },
  138. mouseout:function(){
  139. this.setStyles(_self.css.topIconMore)
  140. }
  141. });
  142. //关闭
  143. this.topIconClose = new Element("div.topIconClose",{styles:this.css.topIconClose,title:this.lp.close}).inject(this.topIconContainer);
  144. this.topIconClose.addEvents({
  145. click:function(){
  146. this.close()
  147. }.bind(this),
  148. mouseover:function(){
  149. this.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_off_click.png)"});
  150. },
  151. mouseout:function(){
  152. this.setStyles(_self.css.topIconClose)
  153. }
  154. });
  155. this.contentLayout = new Element("div.contentLayout",{styles:this.css.contentLayout}).inject(this.formTableArea);
  156. this.createContentLayout();
  157. this.createDetailLayout();
  158. }.bind(this));
  159. },
  160. createContentLayout:function(){
  161. var _self = this;
  162. this.taskInforContainer = new Element("div.taskInforContainer",{styles:this.css.taskInforContainer}).inject(this.contentLayout);
  163. this.taskActionBar = new Element("div.taskActionBar",{styles:this.css.taskActionBar}).inject(this.taskInforContainer);
  164. if(this.taskData.parent!="0"){
  165. this.taskActionParentContent = new Element("div.taskActionParentContent").inject(this.taskActionBar);
  166. this.taskActionParentIcon = new Element("div.taskActionParentIcon",{styles:this.css.taskActionParentIcon}).inject(this.taskActionParentContent);
  167. this.taskActionParentText = new Element("div.taskActionParentText",{styles:this.css.taskActionParentText,text:this.lp.taskBelongText+":"}).inject(this.taskActionParentContent);
  168. this.taskActionParentValue = new Element("div.taskActionParentValue",{styles:this.css.taskActionParentValue}).inject(this.taskActionParentContent);
  169. this.actions.taskGet(this.taskData.parent,function(json){
  170. this.taskActionParentValue.set("text",json.data.name);
  171. this.taskActionParentValue.addEvents({
  172. click:function(){
  173. this.data.taskId = json.data.id;
  174. this.openTask()
  175. }.bind(this)
  176. });
  177. }.bind(this))
  178. }
  179. // this.taskActionSave = new Element("div.taskActionSave",{styles:this.css.taskActionSave,text:this.lp.save}).inject(this.taskActionBar);
  180. // this.taskActionSave.addEvents({
  181. // click:function(){
  182. // this.saveTaskData();
  183. // }.bind(this),
  184. // mouseover:function(){
  185. // this.setStyles({
  186. // "color":"#ffffff",
  187. // "background-color":"#4A90E2",
  188. // "border":"1px solid #4A90E2"
  189. // })
  190. // },
  191. // mouseout:function(){
  192. // this.setStyles(_self.css.taskActionSave)
  193. // }
  194. // });
  195. this.taskInforLayout = new Element("div.taskInforLayout",{styles:this.css.taskInforLayout}).inject(this.taskInforContainer);
  196. this.taskInforContent = new Element("div.taskInforContent",{styles:this.css.taskInforContent}).inject(this.taskInforLayout);
  197. this.app.setScrollBar(this.taskInforContent);
  198. //名称
  199. this.taskNameContainer = Element("div.taskNameContainer",{styles:this.css.taskNameContainer}).inject(this.taskInforContent);
  200. //状态
  201. this.taskStatusContainer = Element("div.taskStatusContainer",{styles:this.css.taskStatusContainer}).inject(this.taskInforContent);
  202. this.taskStatusIcon = Element("div.taskStatusIcon",{styles:this.css.taskStatusIcon}).inject(this.taskStatusContainer);
  203. this.taskStatusText = Element("div.taskStatusText",{styles:this.css.taskStatusText,text:this.lp.taskStatus}).inject(this.taskStatusContainer);
  204. this.taskStatusValue = Element("div.taskStatusValue",{styles:this.css.taskStatusValue}).inject(this.taskStatusContainer);
  205. //责任人
  206. this.taskDutyContainer = Element("div.taskDutyContainer",{styles:this.css.taskDutyContainer}).inject(this.taskInforContent);
  207. this.taskDutyIcon = Element("div.taskDutyIcon",{styles:this.css.taskDutyIcon}).inject(this.taskDutyContainer);
  208. this.taskDutyText = Element("div.taskDutyText",{styles:this.css.taskDutyText,text:this.lp.taskDuty}).inject(this.taskDutyContainer);
  209. this.taskDutyValue = Element("div.taskDutyValue",{styles:this.css.taskDutyValue}).inject(this.taskDutyContainer);
  210. //时间
  211. this.taskTimeContainer = Element("div.taskTimeContainer",{styles:this.css.taskTimeContainer}).inject(this.taskInforContent);
  212. this.taskTimeIcon = Element("div.taskTimeIcon",{styles:this.css.taskTimeIcon}).inject(this.taskTimeContainer);
  213. this.taskTimeText = Element("div.taskTimeText",{styles:this.css.taskTimeText,text:this.lp.taskTime}).inject(this.taskTimeContainer);
  214. this.taskTimeValue = Element("div.taskTimeValue",{styles:this.css.taskTimeValue}).inject(this.taskTimeContainer);
  215. //备注
  216. this.taskRemarkContainer = Element("div.taskRemarkContainer",{styles:this.css.taskRemarkContainer}).inject(this.taskInforContent);
  217. this.taskRemarkIcon = Element("div.taskRemarkIcon",{styles:this.css.taskRemarkIcon}).inject(this.taskRemarkContainer);
  218. this.taskRemarkText = Element("div.taskRemarkText",{styles:this.css.taskRemarkText,text:this.lp.taskRemark}).inject(this.taskRemarkContainer);
  219. this.taskRemarkValue = Element("div.taskRemarkValue",{styles:this.css.taskRemarkValue}).inject(this.taskRemarkContainer);
  220. //优先级
  221. this.taskPriorityContainer = Element("div.taskPriorityContainer",{styles:this.css.taskPriorityContainer}).inject(this.taskInforContent);
  222. this.taskPriorityIcon = Element("div.taskPriorityIcon",{styles:this.css.taskPriorityIcon}).inject(this.taskPriorityContainer);
  223. this.taskPriorityText = Element("div.taskPriorityText",{styles:this.css.taskPriorityText,text:this.lp.taskPriority}).inject(this.taskPriorityContainer);
  224. this.taskPriorityValue = Element("div.taskPriorityValue",{styles:this.css.taskPriorityValue}).inject(this.taskPriorityContainer);
  225. //扩展字段
  226. if(this.taskData.extFieldConfigs && this.taskData.extFieldConfigs.length>0){
  227. this.taskExtFieldContainer = new Element("div.taskExtFieldContainer",{styles:this.css.taskExtFieldContainer}).inject(this.taskInforContent);
  228. this.loadTaskExtField();
  229. }
  230. //标签
  231. this.taskTagContainer = Element("div.taskTagContainer",{styles:this.css.taskTagContainer}).inject(this.taskInforContent);
  232. this.taskTagIcon = Element("div.taskTagIcon",{styles:this.css.taskTagIcon}).inject(this.taskTagContainer);
  233. this.taskTagText = Element("div.taskTagText",{styles:this.css.taskTagText,text:this.lp.taskTag}).inject(this.taskTagContainer);
  234. this.taskTagValue = Element("div.taskTagValue",{styles:this.css.taskTagValue}).inject(this.taskTagContainer);
  235. //附件 -- 换成其他样式
  236. // this.taskAttachmentContainer = Element("div.taskAttachmentContainer",{styles:this.css.taskAttachmentContainer}).inject(this.taskInforContent);
  237. // this.taskAttachmentIcon = Element("div.taskAttachmentIcon",{styles:this.css.taskAttachmentIcon}).inject(this.taskAttachmentContainer);
  238. // this.taskAttachmentText = Element("div.taskAttachmentText",{styles:this.css.taskAttachmentText,text:this.lp.taskAttachment}).inject(this.taskAttachmentContainer);
  239. // this.taskAttachmentValue = Element("div.taskAtchatBarEmojitachmentValue",{styles:this.css.taskAttachmentValue}).inject(this.taskAttachmentContainer);
  240. //附件
  241. this.taskAttachmentListContainer = new Element("div.taskAttachmentListContainer",{styles:this.css.taskAttachmentListContainer}).inject(this.taskInforContent);
  242. this.loadTaskAttachmentListContainer();
  243. this.setTaskData();
  244. //this.setAuth();
  245. //子任务
  246. this.subTaskContainer = new Element("div.subTaskContainer",{styles:this.css.subTaskContainer}).inject(this.taskInforContent);
  247. this.loadSubTaskContainer();
  248. //占位
  249. new Element("div",{styles:{"width":"100%","height":"100px"}}).inject(this.taskInforContent)
  250. },
  251. loadTaskExtField:function(){
  252. this.taskData.extFieldConfigs.each(function(data){
  253. this.loadTaskExtFieldItem(data);
  254. }.bind(this))
  255. },
  256. loadTaskExtFieldItem:function(data){
  257. var taskExtFieldItem = new Element("div.taskExtFieldItem",{styles:this.css.taskExtFieldItem}).inject(this.taskExtFieldContainer);
  258. var taskExtFieldIcon = new Element("div.taskExtFieldIcon",{styles:this.css.taskExtFieldIcon}).inject(taskExtFieldItem);
  259. var taskExtFieldText = new Element("div.taskExtFieldText",{styles:this.css.taskExtFieldText}).inject(taskExtFieldItem);
  260. new Element("p",{styles:{
  261. "justify-content": "center",
  262. "align-items":"center"
  263. },text:data.displayName}).inject(taskExtFieldText);
  264. if(data.displayType.toUpperCase() == "TEXT"){
  265. }
  266. },
  267. createDetailLayout:function(){
  268. this.taskDetailLayout = new Element("div.taskDetailLayout",{styles:this.css.taskDetailLayout}).inject(this.contentLayout);
  269. this.taskParticipateContainer = new Element("div.taskParticipateContainer",{styles:this.css.taskParticipateContainer}).inject(this.taskDetailLayout);
  270. this.createParticipateContainer();
  271. this.taskDynamicContainer = new Element("div.taskDynamicContainer",{styles:this.css.taskDynamicContainer}).inject(this.taskDetailLayout);
  272. this.createDynamicContainer();
  273. this.taskChatContainer = new Element("div.taskChatContainer",{styles:this.css.taskChatContainer}).inject(this.taskDetailLayout);
  274. this.createChatContainer();
  275. },
  276. createParticipateContainer:function(){
  277. this.taskParticipateContainer.empty();
  278. this.participateTitle = new Element("div.participateTitle",{styles:this.css.participateTitle}).inject(this.taskParticipateContainer);
  279. this.participateTitleText = new Element("div.participateTitleText",{styles:this.css.participateTitleText}).inject(this.participateTitle);
  280. this.participateTitleIcon = new Element("div.participateTitleIcon",{styles:this.css.participateTitleIcon,title:this.lp.taskReaderAdd}).inject(this.participateTitle);
  281. this.participateTitleIcon.addEvents({
  282. click:function(){
  283. this.selectPerson(this.participateTitleIcon,null,["identity","unit"],0,
  284. function(json){
  285. if(json.length>0){
  286. this.taskData.participantList = this.taskData.participantList.concat(json);
  287. this.actions.updateParticipantList(this.taskData.id,{participantList:this.taskData.participantList},function(json){
  288. if(json.data.dynamics){
  289. json.data.dynamics.each(function(dd){
  290. this.loadDynamicItem(dd,"bottom")
  291. }.bind(this))
  292. }
  293. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  294. this.createParticipateContainer();
  295. }.bind(this))
  296. }
  297. }.bind(this)
  298. );
  299. }.bind(this)
  300. });
  301. this.participateValue = new Element("div.participateValue",{styles:this.css.participateValue}).inject(this.taskParticipateContainer);
  302. this.setScrollBar(this.participateValue);
  303. if(this.taskData.participantList){
  304. count = this.taskData.participantList.length;
  305. this.participateTitleText.set("text",this.lp.taskReader + " . " + count);
  306. this.taskData.participantList.each(function(d){
  307. var flag = true;
  308. if(this.taskData.executor){
  309. if(d === this.taskData.executor) flag = false
  310. }
  311. this.loadparticipantPerson(this.participateValue,d,flag);
  312. }.bind(this));
  313. }
  314. },
  315. createDynamicContainer:function(){
  316. var _self = this;
  317. this.taskDynamicContainer.empty();
  318. this.dynamicBar = new Element("div.dynamicBar",{styles:this.css.dynamicBar}).inject(this.taskDynamicContainer);
  319. this.dynamicBar.addEvents({
  320. mouseover:function(){
  321. this.dynamicText.setStyle("color","#4a90e2");
  322. this.dynamicIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/icon_dw_click.png)")
  323. }.bind(this),
  324. mouseout:function(){
  325. this.dynamicText.setStyle("color","#666666");
  326. this.dynamicIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/icon_dw.png)")
  327. }.bind(this),
  328. click:function(){
  329. var pc = new MWF.xApplication.TeamWork.Task.DynamicType(this.container, this.dynamicBar, this.app, {data:this.taskData}, {
  330. css:this.css, lp:this.lp, axis : "y",
  331. position : { //node 固定的位置
  332. x : "right",
  333. y : "middle"
  334. },
  335. nodeStyles : {
  336. "min-width":"150px",
  337. "padding":"2px",
  338. "border-radius":"5px",
  339. "box-shadow":"0px 0px 4px 0px #999999",
  340. "z-index" : "201"
  341. },
  342. onPostLoad:function(){
  343. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt()-6)+"px","left":(pc.node.getStyle("left").toInt()+10)+"px"});
  344. var fx = new Fx.Tween(pc.node,{duration:400});
  345. fx.start(["opacity"] ,"0", "1");
  346. },
  347. onClose:function(rd){
  348. if(!rd) return;
  349. if(rd.value == "all"){
  350. filter = {};
  351. this.dynamicText.set("text",this.lp.dynamicAll)
  352. }else if(rd.value == "chat"){
  353. filter = {objectType:"CHAT"};
  354. this.dynamicText.set("text",this.lp.dynamicChat)
  355. }else if(rd.value == "attachment"){
  356. this.dynamicText.set("text",this.lp.dynamicAttachment)
  357. filter = {objectType:"ATTACHMENT"};
  358. }
  359. this.dynamicContent.empty();
  360. this.dyncurCount = 0;
  361. this.createDynamicContent(null,filter,function(){
  362. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  363. this.getDynamicStatus = false;
  364. }.bind(this))
  365. }.bind(this)
  366. });
  367. pc.load();
  368. }.bind(this),
  369. });
  370. this.dynamicText = new Element("div.dynamicText",{styles:this.css.dynamicText,text:this.lp.dynamicAll}).inject(this.dynamicBar);
  371. this.dynamicIcon = new Element("div.dynamicIcon",{styles:this.css.dynamicIcon}).inject(this.dynamicBar);
  372. this.dynamicContent = new Element("div.dynamicContent",{styles:this.css.dynamicContent}).inject(this.taskDynamicContainer);
  373. var filter = {};
  374. var _y = this.dynamicContent.getScrollSize().y;
  375. this.dynamicContent.addEvents({
  376. scroll:function(){
  377. if(this.getScrollTop()==0){
  378. //alert("top")
  379. //加载下一页
  380. if(_self.getDynamicStatus) return;
  381. if(_self.dyncurCount>=_self.dyntotal) return;
  382. _self.createDynamicContent(_self.curDynamicId,filter,function(){
  383. _self.dynamicContent.scrollTo(0,_y);
  384. _self.getDynamicStatus = false;
  385. });
  386. }
  387. }
  388. });
  389. this.createDynamicContent(null,filter,function(){
  390. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  391. this.getDynamicStatus = false;
  392. }.bind(this));
  393. },
  394. createDynamicContent:function(id,data,callback){
  395. this.getDynamicStatus = true;
  396. var _self = this, id = id || "(0)", count = 15, taskId = this.taskData.id;
  397. this.curDynamicId = id;
  398. //this.dyntotal = 0;
  399. this.dyncurCount = this.dyncurCount || 0;
  400. this.tmpdynamicLoading = new Element("div").inject(this.dynamicContent,"top");
  401. this.app.setLoading(this.tmpdynamicLoading);
  402. this.actions.taskDynamicListNext(id,count,taskId,data||{},function(json){
  403. if(this.tmpdynamicLoading)this.tmpdynamicLoading.destroy();
  404. //this.getDynamicStatus = false;
  405. if(json.type == "success"){
  406. this.dyntotal = json.count;
  407. json.data.each(function(d,i){
  408. this.curDynamicId = d.id;
  409. this.loadDynamicItem(d);
  410. }.bind(this))
  411. if(callback)callback(json)
  412. }
  413. }.bind(this))
  414. },
  415. loadDynamicItem:function(data,where){
  416. this.dyncurCount = this.dyncurCount + 1;
  417. var dynamicItem = new Element("div.dynamicItem",{styles:this.css.dynamicItem}).inject(this.dynamicContent,where||"top");
  418. var dynamicItemIcon = new Element("div.dynamicItemIcon",{styles:this.css.dynamicItemIcon}).inject(dynamicItem);
  419. var optType = data.optType.toUpperCase();
  420. var objectType = data.objectType.toUpperCase();
  421. if(objectType == "CHAT"){
  422. //if(optType.toUpperCase() == "PUBLISH"){
  423. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_chat.png)")
  424. //}
  425. }else if(objectType == "ATTACHMENT"){
  426. if(optType == "DELETE"){ //UPLOAD、DOWNLOAD、DELETE
  427. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_remove.png)")
  428. }else{
  429. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_attachment.png)")
  430. }
  431. }else if(objectType == "TASK"){
  432. //UPDATE_NAME、UPDATE_EXECUTOR、UPDATE_STATUS、UPDATE_TIME、UPDATE_PROGRESS、ADD_TAGS、REMOVE_TAGS、
  433. //ADD_MANAGER、REMOVE_MANAGER、ADD_PARTICIPANTS、REMOVE_PARTICIPANTS、CREATE、DELETE
  434. if(optType=="SPLIT"){
  435. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_subtask.png)")
  436. }else if(optType=="DELETE_SUBTASK"){
  437. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_remove.png)")
  438. }else if(optType=="UPDATE_EXECUTOR"){
  439. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_duty.png)")
  440. }else if(optType=="UPDATE_NAME"){
  441. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_title.png)")
  442. }else if(optType=="UPDATE_WORKSTATUS"){
  443. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_status.png)")
  444. }else if(optType=="UPDATE_WORKDATE"){
  445. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_time.png)")
  446. }else if(optType=="UPDATE_DESCRIPTION"){
  447. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_remark.png)")
  448. }else if(optType=="ADD_PARTICIPANTS" || optType == "REMOVE_PARTICIPANTS"){
  449. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_participant.png)")
  450. }else if(optType=="CREATE"){
  451. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/icon_jia.png)")
  452. }else{
  453. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/icon_edit.png)")
  454. }
  455. }else if(objectType=="TASK_TAG"){
  456. if(optType=="REMOVE"){
  457. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_remove.png)")
  458. }else{
  459. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/dy_tag.png)")
  460. }
  461. }
  462. var dynamicItemText = new Element("div.dynamicItemText",{styles:this.css.dynamicItemText}).inject(dynamicItem);
  463. if(objectType == "CHAT"){
  464. new Element("div.dynamicItemUser",{styles:this.css.dynamicItemUser,text:data.operator.split("@")[0]}).inject(dynamicItemText);
  465. var chattext = data.description.split("\n").join("<br/>");
  466. //转换表情
  467. for(var item in this.app.lp.emoji){
  468. var val = this.app.lp.emoji[item]; //alert(val)
  469. chattext = chattext.split("["+val+"]").join('<img style="margin:0px 2px;" src="/x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
  470. }
  471. new Element("div.dynamicItemUserChat",{styles:{"margin-top":"5px"},html:chattext}).inject(dynamicItemText);
  472. }else{
  473. dynamicItemText.set("text",data.description);
  474. }
  475. var dynamicItemTime = new Element("div.dynamicItemTime",{styles:this.css.dynamicItemTime}).inject(dynamicItem);
  476. var ct = Date.parse(data.createTime);
  477. var now = new Date();
  478. var sep = now.getTime()-ct.getTime();
  479. sep = sep/1000; //毫秒
  480. //一分钟内,刚刚,一小时内,多少分钟前,2小时内,显示一小时前,2小时到今天00:00:00 显示 今天几点,本周内,显示本周几,几点几分,其他显示几月几日
  481. var cttext = "";
  482. if(sep<60){
  483. cttext = "刚刚"
  484. }else if(sep<3600){
  485. cttext = Math.floor(sep/60)+"分钟前"
  486. }else if(sep<7200){
  487. cttext = "1小时前"
  488. }else if(sep>7200 && ct.getFullYear() == now.getFullYear() && ct.getMonth()==now.getMonth() && ct.getDate() == now.getDate()){
  489. cttext = "今天"+(ct.getHours()<10?("0"+ct.getHours()):ct.getHours())+":"+(ct.getMinutes()<10?"0"+ct.getMinutes():ct.getMinutes())
  490. }else if(ct.getFullYear() == now.getFullYear() && ct.getMonth()==now.getMonth() && ct.getDate() == now.getDate()-1){
  491. cttext = "昨天"+(ct.getHours()<10?("0"+ct.getHours()):ct.getHours())+":"+(ct.getMinutes()<10?"0"+ct.getMinutes():ct.getMinutes())
  492. }else{
  493. cttext = (ct.getMonth()+1) + "月"+ct.getDay()+"日"
  494. }
  495. dynamicItemTime.set("text",cttext);
  496. //最后加一层清除浮动
  497. new Element("div.dynamicItemTime",{styles:{"clear":"both"}}).inject(dynamicItem);
  498. },
  499. createChatContainer:function(){
  500. this.taskChatContainer.empty();
  501. var node = this.taskChatContainer;
  502. this.chatContent = new Element("div.chatContent",{styles:this.css.chatContent}).inject(node);
  503. this.chatTextarea = new Element("textarea.chatTextarea",{styles:this.css.chatTextarea,placeholder:this.lp.chatPlaceholder}).inject(this.chatContent);
  504. this.chatTextarea.addEvents({
  505. keypress:function(e){
  506. var keycode = (e.event.keyCode ? e.event.keyCode : e.event.which);
  507. if (e.event.ctrlKey && (keycode == 13 || keycode == 10)) {
  508. this.chatBarSend.click();
  509. }
  510. }.bind(this)
  511. });
  512. this.chatBarContent = new Element("div.chatBarContent",{styles:this.css.chatBarContent}).inject(node);
  513. this.chatBarTool = new Element("div.chatBarTool",{styles:this.css.chatBarTool}).inject(this.chatBarContent);
  514. this.chatBarEmoji = new Element("div.chatBarEmoji",{styles:this.css.chatBarEmoji,title:this.lp.chatInsertEmoji}).inject(this.chatBarTool);
  515. this.chatBarEmoji.addEvents({
  516. mouseover:function(){this.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/icon_emoji_click.png)")},
  517. mouseout:function(){this.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/icon_emoji.png)")},
  518. click:function(){
  519. MWF.xDesktop.requireApp("TeamWork", "Emoji", function(){
  520. var pc = new MWF.xApplication.TeamWork.Emoji(this,this.container, this.chatBarEmoji, this.app, {}, {
  521. css:this.css, lp:this.lp, axis : "y",
  522. position : { //node 固定的位置
  523. x : "right",
  524. y : "middle"
  525. },
  526. nodeStyles : {
  527. "min-width":"200px",
  528. "max-width":"210px",
  529. "height":"80px",
  530. "padding":"2px",
  531. "border-radius":"5px",
  532. "box-shadow":"0px 0px 4px 0px #999999",
  533. "z-index" : "201"
  534. },
  535. onPostLoad:function(){
  536. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt())+"px"});
  537. var fx = new Fx.Tween(pc.node,{duration:400});
  538. fx.start(["opacity"] ,"0", "1");
  539. },
  540. onClose:function(rd){
  541. if(!rd) return;
  542. if(rd.value && rd.value !=""){
  543. this.chatTextarea.set("value",this.chatTextarea.get("value")+"["+rd.value+"]")
  544. }
  545. }.bind(this)
  546. });
  547. pc.load();
  548. }.bind(this))
  549. }.bind(this)
  550. });
  551. this.chatBarSend = new Element("div.chatBarSend",{styles:this.css.chatBarSend,text:this.lp.chatSend}).inject(this.chatBarContent);
  552. this.chatBarSend.addEvents({
  553. click:function(){
  554. if(this.chatTextarea.get("value").trim()=="") return;
  555. var data = {
  556. taskId : this.taskData.id,
  557. content : this.chatTextarea.get("value").trim()
  558. };
  559. this.actions.chatCreate(data,function(json){
  560. if(json.data.id){
  561. this.actions.chatGet(json.data.id,function(json){
  562. var person = json.data.sender;
  563. var content = json.data.content;
  564. var dynamicItem = new Element("div.dynamicItem",{styles:this.css.dynamicItem}).inject(this.dynamicContent);
  565. var dynamicItemIcon = new Element("div.dynamicItemIcon",{styles:this.css.dynamicItemIcon}).inject(dynamicItem);
  566. dynamicItemIcon.setStyle("background-image","url(/x_component_TeamWork/$Task/default/icon/icon_chat.png)")
  567. var dynamicItemText = new Element("div.dynamicItemText",{styles:this.css.dynamicItemText}).inject(dynamicItem);
  568. new Element("div.dynamicItemUser",{styles:this.css.dynamicItemUser,text:person.split("@")[0]}).inject(dynamicItemText);
  569. var chattext = content.split("\n").join("<br/>");
  570. for(var item in this.app.lp.emoji){
  571. var val = this.app.lp.emoji[item];
  572. chattext = chattext.split("["+val+"]").join('<img style="margin:0 2px;" src="/x_component_TeamWork/$Emoji/default/icon/'+item+'.png" />');
  573. }
  574. new Element("div.dynamicItemUserChat",{styles:{"margin-top":"5px"},html:chattext}).inject(dynamicItemText);
  575. var dynamicItemTime = new Element("div.dynamicItemTime",{styles:this.css.dynamicItemTime}).inject(dynamicItem);
  576. dynamicItemTime.set("text","刚刚");
  577. new Element("div.dynamicItemTime",{styles:{"clear":"both"}}).inject(dynamicItem);
  578. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  579. }.bind(this))
  580. }
  581. this.createChatContainer()
  582. }.bind(this))
  583. }.bind(this)
  584. })
  585. },
  586. addDynamicItem:function(){
  587. },
  588. getTaskData:function(callback){
  589. if(this.data.taskId){
  590. this.actions.taskGet(this.data.taskId,function(json){
  591. if(json.data) {
  592. this.taskData = json.data;
  593. if(callback)callback()
  594. }
  595. }.bind(this))
  596. }
  597. },
  598. setTaskData:function(){
  599. var _self = this;
  600. //名称
  601. if(this.taskNameContainer){
  602. this.loadNameValue();
  603. }
  604. //状态
  605. if(this.taskStatusValue){
  606. this.loadStatusValue()
  607. }
  608. //负责人
  609. if(this.taskDutyValue){
  610. this.loadDutyValue()
  611. }
  612. //时间
  613. if(this.taskTimeContainer){
  614. this.loadTimeValue()
  615. }
  616. //备注
  617. if(this.taskRemarkContainer){
  618. this.loadRemarkValue()
  619. }
  620. //优先级
  621. if(this.taskPriorityValue){
  622. this.loadPriorityValue()
  623. }
  624. //标签
  625. if(this.taskTagValue){
  626. this.loadTagValue()
  627. }
  628. //附件
  629. if(this.taskAttachmentValue){
  630. this.loadAttachment(this.taskAttachmentValue)
  631. }
  632. },
  633. saveTaskData:function(callback) {
  634. if(this.editor){
  635. this.taskData.description = encodeURI(this.editor.getData());
  636. }
  637. this.actions.taskSave(this.taskData,function(json){
  638. if(this.editor) delete this.editor;
  639. //alert(JSON.stringify(json));
  640. this.reload();
  641. //刷新project区域内的task,可能有更新,删除等 干脆直接载入区域
  642. var data = {
  643. "act":"save",
  644. "taskId":json.data.id
  645. };
  646. this.reloadOutContent(data);
  647. }.bind(this))
  648. },
  649. reloadOutContent:function(json){
  650. if(json.act == "save"){
  651. //保存操作,刷新task即可
  652. var taskNode = this.explorer.container.getElementById(json.taskId);
  653. if(!taskNode) return;
  654. this.actions.taskGet(json.taskId,function(d){
  655. this.explorer.loadTaskNode(taskNode,d.data)
  656. }.bind(this));
  657. }
  658. },
  659. updateSingleProperty:function(data,callback){
  660. this.actions.updateSingleProperty(data.taskId,data,function(json){
  661. if(json.data.dynamics){
  662. json.data.dynamics.each(function(dd){
  663. this.loadDynamicItem(dd,"bottom")
  664. }.bind(this))
  665. }
  666. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  667. if(callback)callback(json.data)
  668. }.bind(this))
  669. },
  670. loadNameValue:function(){ //名称
  671. var _self = this;
  672. this.taskNameContainer.set("text",this.taskData.name);
  673. if(true){ //权限修改
  674. var node = this.taskNameContainer;
  675. var nameEdit = false;
  676. var overStatus = null;
  677. node.addEvents({
  678. mouseenter:function(){
  679. overStatus = window.setTimeout(function(){
  680. var opt={ axis: "y", position : { x : "auto", y : "top"} };
  681. //_self.app.showTips(node,{_html:"<div style='margin:2px 5px;'>"+_self.lp.editTip+"</div>"},opt);
  682. node.set("title",_self.lp.editTip);
  683. },300);
  684. if(this.getElement("input")) return;
  685. var name = this.get("text");
  686. node.empty();
  687. var input = new Element("input.taskNameInput",{type:"text",value:name,styles:_self.css.taskNameInput}).inject(node);
  688. input.addEvents({
  689. click:function(ev){
  690. nameEdit = true;
  691. if(_self.app.st&&_self.app.st.node)_self.app.st.node.destroy();
  692. delete _self.app.st;
  693. ev.stopPropagation()
  694. },
  695. blur:function(){
  696. var v = this.get("value").trim();
  697. if(v=="" || v == _self.taskData.name){
  698. _self.taskNameContainer.empty();
  699. _self.taskNameContainer.set("text",_self.taskData.name);
  700. _self.taskNameContainer.setStyles({"background-color":""});
  701. _self.taskData.name = v;
  702. }else{
  703. if(v != _self.taskData.name){
  704. var sd = {
  705. taskId:_self.taskData.id,
  706. property:"name",
  707. mainValue:v,
  708. secondaryValue:""
  709. }
  710. _self.updateSingleProperty(sd,function(json){
  711. _self.taskNameContainer.empty();
  712. _self.taskNameContainer.set("text",v);
  713. _self.taskNameContainer.setStyles({"background-color":""});
  714. _self.taskData.name = v;
  715. nameEdit = false;
  716. })
  717. }
  718. }
  719. }
  720. });
  721. },
  722. mouseleave:function(){
  723. window.clearTimeout(overStatus);
  724. if(!nameEdit){
  725. if(this.getElement("input")){
  726. var n = this.getElement("input").get("value");
  727. this.empty();
  728. this.set("text",n);
  729. }
  730. this.setStyles({"background-color":""})
  731. }
  732. }
  733. });
  734. }
  735. },
  736. loadStatusValue:function(){ //状态
  737. var _self = this;
  738. if(this.taskStatusValue) this.taskStatusValue.empty();
  739. this.taskStatusValueContainer = new Element("div.taskStatusValueContainer",{styles:this.css.taskStatusValueContainer}).inject(this.taskStatusValue);
  740. this.taskStatusValueIcon = new Element("div.taskStatusValueIcon",{styles:this.css.taskStatusValueIcon}).inject(this.taskStatusValueContainer);
  741. this.taskStatusValueText = new Element("div.taskStatusValueText",{styles:this.css.taskStatusValueText}).inject(this.taskStatusValueContainer);
  742. if(this.taskData.workStatus == "draft"){
  743. this.taskStatusValueContainer.setStyles({"color":"#666666"});
  744. this.taskStatusValueIcon.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_draft.png)"});
  745. this.taskStatusValueText.set("text",this.lp.status.draft);
  746. }else if(this.taskData.workStatus == "flow"){
  747. this.taskStatusValueContainer.setStyles({"color":"#666666"});
  748. this.taskStatusValueIcon.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_flow.png)"});
  749. this.taskStatusValueText.set("text",this.lp.status.flow);
  750. }else if(this.taskData.workStatus == "processing") {
  751. this.taskStatusValueContainer.setStyles({"color": "#666666"});
  752. this.taskStatusValueIcon.setStyles({"background-image": "url(/x_component_TeamWork/$Task/default/icon/icon_flow.png)"});
  753. this.taskStatusValueText.set("text",this.lp.status.processing);
  754. }else if(this.taskData.workStatus == "completed"){
  755. this.taskStatusValueContainer.setStyles({"color":"#69b439"});
  756. this.taskStatusValueIcon.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_complete.png)"});
  757. this.taskStatusValueText.set("text",this.lp.status.completed);
  758. }
  759. if(true){ //权限
  760. this.taskStatusValueContainer.addEvents({
  761. click:function(){
  762. var sc = new MWF.xApplication.TeamWork.Task.StatusCheck(this.container, this.taskStatusValueContainer, this.app, {data:this.taskData}, {
  763. css:this.css, lp:this.lp, axis : "y",
  764. position : { //node 固定的位置
  765. x : "right",
  766. y : "middle"
  767. },
  768. nodeStyles : {
  769. "min-width":"200px",
  770. "padding":"2px",
  771. "border-radius":"5px",
  772. "box-shadow":"0px 0px 4px 0px #999999",
  773. "z-index" : "201"
  774. },
  775. onPostLoad:function(){
  776. sc.node.setStyles({"opacity":"0","top":(sc.node.getStyle("top").toInt()+4)+"px"});
  777. var fx = new Fx.Tween(sc.node,{duration:400});
  778. fx.start(["opacity"] ,"0", "1");
  779. },
  780. onClose:function(rd){
  781. if(!rd) return;
  782. if(rd.status){
  783. if(rd.status != this.taskData.workStatus){
  784. var sd = {
  785. taskId:_self.taskData.id,
  786. property:"workStatus",
  787. mainValue:rd.status,
  788. secondaryValue:""
  789. };
  790. _self.updateSingleProperty(sd,function(){
  791. this.taskData.workStatus = rd.status;
  792. this.loadStatusValue();
  793. }.bind(this))
  794. }
  795. }
  796. }.bind(this)
  797. });
  798. sc.load();
  799. }.bind(this),
  800. mouseover:function(){
  801. this.setStyles({"background-color":"#efefef"});
  802. this.getElement(".taskStatusValueIcon").setStyles({ "background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_down.png)"})
  803. },
  804. mouseout:function(){
  805. this.setStyles(_self.css.taskStatusValueContainer);
  806. var bgurl = "url(/x_component_TeamWork/$Task/default/icon/icon_draft.png)";
  807. if(_self.taskData.workStatus == "processing")bgurl = "url(/x_component_TeamWork/$Task/default/icon/icon_flow.png)";
  808. else if(_self.taskData.workStatus == "completed")bgurl = "url(/x_component_TeamWork/$Task/default/icon/icon_complete.png)";
  809. this.getElement(".taskStatusValueIcon").setStyles({"background-image":bgurl})
  810. }
  811. });
  812. }
  813. },
  814. loadDutyValue:function(){
  815. var _self = this;
  816. if(this.taskDutyValue) this.taskDutyValue.empty();
  817. this.taskDutyValueContainer = new Element("div.taskDutyValueContainer",{styles:this.css.taskDutyValueContainer}).inject(this.taskDutyValue);
  818. if(true){//权限
  819. if(this.taskData.executor==""){
  820. this.taskDutyAddIcon = new Element("div.taskDutyAddIcon",{styles:this.css.taskDutyAddIcon}).inject(this.taskDutyValueContainer);
  821. this.taskDutyAddText = new Element("div.taskDutyAddText",{styles:this.css.taskDutyAddText,text:this.lp.addDuty}).inject(this.taskDutyValueContainer);
  822. this.taskDutyAddText.addEvents({
  823. mouseover:function(){this.setStyles({"color":"#4a90e2"})},
  824. mouseout:function(){this.setStyles({"color":"#666666"})},
  825. click:function(){
  826. this.selectPerson(this.taskDutyAddText,"identity",null,1,
  827. function(json){
  828. if(json.length>0){
  829. this.taskData.executor = json[0];
  830. this.loadDutyValue()
  831. }
  832. }.bind(this));
  833. }.bind(this)
  834. })
  835. }else{
  836. this.loadTaskPerson(this.taskDutyValueContainer,this.taskData.executor,true);
  837. }
  838. }else{
  839. if(this.taskData.executor!=""){
  840. this.loadTaskPerson(this.taskDutyValueContainer,this.taskData.executor);
  841. }
  842. }
  843. },
  844. loadTimeValue:function(){
  845. var _self = this;
  846. this.taskStartTime = new Element("div.taskStartTime",{styles:this.css.taskStartTime}).inject(this.taskTimeContainer);
  847. this.taskTimeLine = new Element("div.taskTimeLine",{styles:this.css.taskTimeLine,text:"-"}).inject(this.taskTimeContainer);
  848. this.taskEndTime = new Element("div.taskEndTime",{styles:this.css.taskEndTime}).inject(this.taskTimeContainer);
  849. if(this.taskData.startTime && this.taskData.startTime!=""){
  850. this.taskStartTime.set("text",this.taskData.startTime);
  851. this.taskStartTime.setStyles({"color":"#333333"});
  852. }else{
  853. this.taskStartTime.set("text",this.lp.taskTimeStart);
  854. }
  855. if(this.taskData.endTime && this.taskData.endTime!=""){
  856. this.taskEndTime.set("text",this.taskData.endTime);
  857. this.taskEndTime.setStyles({"color":"#333333"});
  858. }else{
  859. this.taskEndTime.set("text",this.lp.taskTimeEnd);
  860. }
  861. if(true){ //权限
  862. this.taskStartTime.setStyles({"background-color":"#f5f5f5","cursor":"pointer"});
  863. this.taskEndTime.setStyles({"background-color":"#f5f5f5","cursor":"pointer"});
  864. this.taskStartTime.addEvents({
  865. click:function(){
  866. var opt = {
  867. type:"datetime"
  868. };
  869. this.app.selectCalendar(this.taskStartTime,this.container,opt,function(json){
  870. var sd = {
  871. taskId:_self.taskData.id,
  872. property:"startTime",
  873. secondaryValue:""
  874. }
  875. if(json.action == "ok"){
  876. this.taskStartTime.set("text",json.dateString+":00");
  877. sd.mainValue = json.dateString+":00"
  878. }else if(json.action == "clear"){
  879. this.taskStartTime.set("text",this.lp.taskTimeStart);
  880. sd.mainValue = ""
  881. }
  882. this.updateSingleProperty(sd)
  883. }.bind(this))
  884. }.bind(this)
  885. });
  886. this.taskEndTime.addEvents({
  887. click:function(){
  888. var opt = {
  889. type:"datetime"
  890. };
  891. this.app.selectCalendar(this.taskEndTime,this.container,opt,function(json){
  892. var sd = {
  893. taskId:_self.taskData.id,
  894. property:"startTime",
  895. secondaryValue:""
  896. }
  897. if(json.action == "ok"){
  898. this.taskEndTime.set("text",json.dateString+":00");
  899. sd.mainValue = json.dateString + ":00"
  900. }else if(json.action == "clear"){
  901. this.taskEndTime.set("text",this.lp.taskTimeEnd);
  902. sd.mainValue = ""
  903. }
  904. this.updateSingleProperty(sd)
  905. }.bind(this))
  906. }.bind(this)
  907. })
  908. }
  909. },
  910. loadRemarkValue:function(){
  911. var _self = this;
  912. var value = this.taskData.description || "";
  913. value = decodeURI(value);
  914. this.taskRemarkValue.set("html",value);
  915. if(this.taskRemarkValue.getFirst("p")){
  916. this.taskRemarkValue.getFirst("p").setStyles({"margin-top":"0px"})
  917. }
  918. if(this.editor) delete this.editor;
  919. if(true){ //权限
  920. if(value == ""){
  921. this.taskRemarkValue.set("text",this.lp.editTip);
  922. }
  923. this.taskRemarkValue.removeEvents(["click"])
  924. this.taskRemarkValue.addEvents({
  925. click:function(e){
  926. this.taskRemarkValue.setStyles({"background-color":"","color":""});
  927. this.taskRemarkValue.removeEvents(["mouseenter"]);
  928. if(!this.editor)this.taskRemarkValue.empty();
  929. this.loadRemarkEditor(this.taskRemarkValue,value,"taskRemark");
  930. e.stopPropagation();
  931. }.bind(this),
  932. mouseenter:function(){
  933. this.taskRemarkValue.setStyles({"background-color":"#f5f5f5","color":"#999999"})
  934. }.bind(this),
  935. mouseleave:function(){
  936. this.taskRemarkValue.setStyles({"background-color":"","color":""})
  937. }.bind(this)
  938. });
  939. }
  940. },
  941. loadPriorityValue:function(){
  942. if(this.taskPriorityValue)this.taskPriorityValue.empty();
  943. var node = new Element("div.taskPriorityValueText",{styles:this.css.taskPriorityValueText}).inject(this.taskPriorityValue);
  944. var curColor = "#999999";
  945. if(this.taskData.priority){
  946. node.set("text",this.taskData.priority);
  947. if(this.taskData.priority == this.lp.priority.urgency) curColor = "#ffaf38";
  948. else if(this.taskData.priority == this.lp.priority.emergency) curColor = "#ff4f3e";
  949. node.setStyles({"color":curColor,"border":"1px solid "+curColor+""})
  950. }else{
  951. node.set("text",this.lp.priority.normal)
  952. }
  953. node.addEvents({
  954. click:function(){
  955. var pc = new MWF.xApplication.TeamWork.Task.PriorityCheck(this.container, node, this.app, {data:this.taskData}, {
  956. css:this.css, lp:this.lp, axis : "y",
  957. position : { //node 固定的位置
  958. x : "right",
  959. y : "middle"
  960. },
  961. nodeStyles : {
  962. "min-width":"200px",
  963. "padding":"2px",
  964. "border-radius":"5px",
  965. "box-shadow":"0px 0px 4px 0px #999999",
  966. "z-index" : "201"
  967. },
  968. onPostLoad:function(){
  969. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt()+4)+"px"});
  970. var fx = new Fx.Tween(pc.node,{duration:400});
  971. fx.start(["opacity"] ,"0", "1");
  972. },
  973. onClose:function(rd){
  974. if(!rd) return;
  975. if(rd.value){
  976. if(rd.value != this.taskData.priority){
  977. var sd = {
  978. taskId:this.taskData.id,
  979. property:"priority",
  980. mainValue:rd.value,
  981. secondaryValue:""
  982. };
  983. this.updateSingleProperty(sd,function(){
  984. this.taskData.priority = rd.value;
  985. this.loadPriorityValue();
  986. }.bind(this))
  987. }
  988. }
  989. this.loadPriorityValue();
  990. }.bind(this)
  991. });
  992. pc.load();
  993. }.bind(this),
  994. mouseover:function(){
  995. this.setStyles({"border":"1px solid #4A90E2","color":"#4A90E2"})
  996. },
  997. mouseout:function(){
  998. this.setStyles({"border":"1px solid "+curColor+"","color":curColor})
  999. }
  1000. })
  1001. },
  1002. loadTagValue:function(){
  1003. if(this.taskTagValue)this.taskTagValue.empty();
  1004. this.taskTagLayout = new Element("div.taskTagLayout",{styles:this.css.taskTagLayout}).inject(this.taskTagValue);
  1005. this.taskTagAddContainer = new Element("div.taskTagAddContainer",{styles:this.css.taskTagAddContainer}).inject(this.taskTagValue);
  1006. this.taskTagAddText = new Element("div.taskTagAddText",{styles:this.css.taskTagAddText,text:this.lp.taskTagAddText}).inject(this.taskTagAddContainer);
  1007. this.taskTagAddText.addEvents({
  1008. mouseover:function(){this.setStyles({"color":"#4A90E2"})},
  1009. mouseout:function(){this.setStyles({"color":"#666666"})},
  1010. click:function(){
  1011. this.loadTaskTag(this.taskTagAddText)
  1012. }.bind(this)
  1013. });
  1014. this.taskTagAdd = new Element("div.taskTagAdd",{styles:this.css.taskTagAdd}).inject(this.taskTagAddContainer);
  1015. this.taskTagAdd.addEvents({
  1016. mouseover:function(){this.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_subtask_add.png)"})},
  1017. mouseout:function(){this.setStyles({"background-image":"url(/x_component_TeamWork/$Task/default/icon/icon_jia.png)"})},
  1018. click:function(){
  1019. this.loadTaskTag(this.taskTagAdd)
  1020. }.bind(this)
  1021. })
  1022. if(!this.taskData.tags || this.taskData.tags.length==0){
  1023. this.taskTagAdd.hide();
  1024. }else{
  1025. this.taskTagAddText.hide();
  1026. this.taskData.tags.each(function(json){
  1027. this.loadTagItem(json)
  1028. }.bind(this))
  1029. }
  1030. },
  1031. loadTagItem:function(data){
  1032. var _self = this;
  1033. var tagItemContainer = new Element("div.tagItemContainer",{styles:this.css.tagItemContainer,id:data.id}).inject(this.taskTagLayout);
  1034. tagItemContainer.setStyles({"background-color":data.tagColor});
  1035. tagItemContainer.addEvents({
  1036. mouseenter:function(){
  1037. var tagItemClose = new Element("div.tagItemClose",{styles:_self.css.tagItemClose}).inject(tagItemContainer);
  1038. tagItemContainer.setStyles({"width":(tagItemContainer.getWidth().toInt()+2)+"px"});
  1039. tagItemText.setStyles({"margin-right":"5px"});
  1040. tagItemText.set("title",data.tag);
  1041. tagItemClose.addEvents({
  1042. click:function(){
  1043. _self.actions.removeTagToTask(_self.taskData.id,data.id,function(json){
  1044. if(json.data.dynamics){
  1045. json.data.dynamics.each(function(dd){
  1046. _self.loadDynamicItem(dd,"bottom")
  1047. })
  1048. }
  1049. _self.dynamicContent.scrollTo(0,_self.dynamicContent.getScrollSize().y);
  1050. tagItemContainer.destroy();
  1051. _self.taskData.tags.each(function(ddd){
  1052. if(ddd.id == data.id){
  1053. _self.taskData.tags.erase(ddd)
  1054. }
  1055. })
  1056. })
  1057. }
  1058. })
  1059. },
  1060. mouseleave:function(){
  1061. //tagItemContainer.setStyles({"width":(tagItemContainer.getWidth().toInt()-this.getElement(".tagItemClose").getWidth()-2)+"px"});
  1062. tagItemContainer.setStyles({"width":""});
  1063. tagItemText.setStyles({"margin-right":"10px"});
  1064. this.getElement(".tagItemClose").destroy();
  1065. }
  1066. });
  1067. var tagItemText = new Element("div.tagItemText",{styles:this.css.tagItemText}).inject(tagItemContainer);
  1068. tagItemText.set("text",data.tag);
  1069. },
  1070. loadTaskTag:function(node){
  1071. MWF.xDesktop.requireApp("TeamWork", "TaskTag", function(){
  1072. //alert(JSON.stringify(this.taskData.tags))
  1073. var data = {
  1074. projectId:this.taskData.project,
  1075. taskId:this.taskData.id,
  1076. taskTags:this.taskData.tags||[]
  1077. };
  1078. var pc = new MWF.xApplication.TeamWork.TaskTag(this.container, node, this.app, data, {
  1079. axis : "y",
  1080. position : { //node 固定的位置
  1081. x : "right",
  1082. y : "middle"
  1083. },
  1084. nodeStyles : {
  1085. "min-width":"200px",
  1086. "width":"210px",
  1087. //"height":"80px",
  1088. "padding":"2px",
  1089. "border-radius":"2px",
  1090. "box-shadow":"0px 0px 4px 0px #999999",
  1091. "z-index" : "201"
  1092. },
  1093. onPostLoad:function(){
  1094. pc.node.setStyles({"opacity":"0","top":(pc.node.getStyle("top").toInt())+"px"});
  1095. var fx = new Fx.Tween(pc.node,{duration:400});
  1096. fx.start(["opacity"] ,"0", "1");
  1097. },
  1098. onClose:function(rd){
  1099. if(!rd) return;
  1100. // if(rd.value && rd.value !=""){
  1101. // this.chatTextarea.set("value",this.chatTextarea.get("value")+"["+rd.value+"]")
  1102. // }
  1103. }.bind(this)
  1104. },null,this);
  1105. pc.load();
  1106. }.bind(this))
  1107. },
  1108. loadRemarkEditor:function(parent,value,name){
  1109. if(this.editor)return;
  1110. COMMON.AjaxModule.load("ckeditor", function(){
  1111. //CKEDITOR.disableAutoInline = true;
  1112. var item = new Element("div",{
  1113. "name" : name,
  1114. "id" : name
  1115. });
  1116. //item.set( attr );
  1117. if(parent)item.inject(parent);
  1118. //if( value )item.set("html", value);
  1119. var editorConfig = {
  1120. "autoGrow_maxHeight": 400,
  1121. //"autoGrow_minHeight": 300,
  1122. "resize_enabled": true,
  1123. //"resize_maxHeight": "3000",
  1124. //"resize_minHeight": "200",
  1125. "autoParagraph": true,
  1126. "autoUpdateElement": true,
  1127. "enterMode": 1,
  1128. "height": 100,
  1129. "width": 480,
  1130. "readOnly": false,
  1131. "startupFocus" : true,
  1132. toolbar : [
  1133. //{ name: 'document', items : [ 'Preview' ] },
  1134. //{ name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
  1135. { name: 'basicstyles', items : [ 'Bold','Underline','Strike','-','RemoveFormat' ] },
  1136. //{ name: 'paragraph', items : [ 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock' ] },
  1137. { name: 'styles', items : [ 'Font','FontSize' ] },
  1138. { name: 'colors', items : [ 'TextColor' ] },
  1139. { name: 'links', items : [ 'Link','Unlink' ] },
  1140. //{ name: 'insert', items : [ 'Image' ] },
  1141. { name: 'tools', items : [ 'Maximize','-' ] }
  1142. ]
  1143. };
  1144. if( this.options.RTFConfig ){
  1145. editorConfig = Object.merge( editorConfig, this.options.RTFConfig )
  1146. }
  1147. if( editorConfig.skin )editorConfig.skin = "moono-lisa";
  1148. this.editor = CKEDITOR.replace(item, editorConfig);
  1149. //this.items.push( this.editor );
  1150. this.editor.setData(value);
  1151. this.editor.on('instanceReady', function (e) {
  1152. this.editor.focus();
  1153. var range = this.editor.createRange();
  1154. range.moveToElementEditEnd(this.editor.editable());
  1155. this.editor.getSelection().selectRanges([range]);
  1156. this.taskRemarkActionContainer = new Element("div.taskRemarkActionContainer",{styles:this.css.taskRemarkActionContainer}).inject(parent);
  1157. this.taskRemarkActionOk = new Element("div.taskRemarkActionOk",{styles:this.css.taskRemarkActionOk,text:this.lp.save}).inject(this.taskRemarkActionContainer);
  1158. this.taskRemarkActionOk.addEvents({
  1159. mouseover:function(){this.setStyles({"opacity":"0.9"})},
  1160. mouseout:function(){this.setStyles({"opacity":"1"})},
  1161. click:function(e){
  1162. var sd = {
  1163. taskId:this.taskData.id,
  1164. property:"description",
  1165. dataType:"RichText",
  1166. mainValue:encodeURI(this.editor.getData()),
  1167. secondaryValue:this.editor.document.getBody().getText()
  1168. }
  1169. this.updateSingleProperty(sd,function(json){
  1170. this.taskData.description = encodeURI(this.editor.getData());
  1171. this.loadRemarkValue()
  1172. delete this.editor;
  1173. }.bind(this))
  1174. e.stopPropagation();
  1175. //this.taskData.description = encodeURI(this.editor.getData());
  1176. }.bind(this)
  1177. });
  1178. this.taskRemarkActionCancel = new Element("div.taskRemarkActionCancel",{styles:this.css.taskRemarkActionCancel,text:this.lp.cancel}).inject(this.taskRemarkActionContainer);
  1179. this.taskRemarkActionCancel.addEvents({
  1180. mouseover:function(){this.setStyles({"color":"#4A90E2"})},
  1181. mouseout:function(){this.setStyles({"color":"#999999"})},
  1182. click:function(e){
  1183. this.loadRemarkValue();
  1184. e.stopPropagation()
  1185. }.bind(this)
  1186. })
  1187. }.bind(this))
  1188. }.bind(this));
  1189. },
  1190. loadAttachment: function( area ){
  1191. MWF.xDesktop.requireApp("TeamWork", "TaskAttachment", function(){
  1192. this.attachment = new MWF.xApplication.TeamWork.TaskAttachment( area, this.app, this.actions, this.app.lp, {
  1193. size:"max",
  1194. documentId : this.taskData.id,
  1195. //isNew : this.options.isNew,
  1196. //isEdited : this.options.isEdited,
  1197. onQueryUploadAttachment : function(){
  1198. this.attachment.isQueryUploadSuccess = true;
  1199. if( !this.taskData.id || this.taskData.id=="" ){
  1200. }
  1201. }.bind(this)
  1202. });
  1203. this.attachment.load();
  1204. }.bind(this));
  1205. },
  1206. loadTaskAttachmentListContainer:function(){
  1207. MWF.xDesktop.requireApp("TeamWork", "TaskAttachmentList", function(){
  1208. var data = {
  1209. id:this.taskData.id
  1210. };
  1211. var opt = {};
  1212. this.attachment = new MWF.xApplication.TeamWork.TaskAttachmentList( this,this.taskAttachmentListContainer, data, opt);
  1213. this.attachment.load();
  1214. }.bind(this));
  1215. },
  1216. loadSubTaskContainer:function(){
  1217. this.subTaskContainer.empty();
  1218. this.subTaskTitleContent = new Element("div.subTaskTitleContent",{styles:this.css.subTaskTitleContent}).inject(this.subTaskContainer);
  1219. this.subTaskTitleIcon = new Element("div.subTaskTitleIcon",{styles:this.css.subTaskTitleIcon}).inject(this.subTaskTitleContent);
  1220. this.subTaskTitleText = new Element("div.subTaskTitleText",{styles:this.css.subTaskTitleText,text:this.lp.taskSubName+""}).inject(this.subTaskTitleContent);
  1221. this.subTaskValueContent = new Element("div.subTaskValueContent",{styles:this.css.subTaskValueContent}).inject(this.subTaskContainer);
  1222. this.subTaskAddContainer = new Element("div.subTaskAddContainer",{styles:this.css.subTaskAddContainer}).inject(this.subTaskValueContent);
  1223. //子任务列表
  1224. this.subTaskListContent = new Element("div.subTaskListContent",{styles:this.css.subTaskListContent}).inject(this.subTaskAddContainer);
  1225. this.loadSubTask();
  1226. //添加子任务
  1227. this.subTaskNewContent = new Element("div.subTaskNewContent",{styles:this.css.subTaskNewContent}).inject(this.subTaskAddContainer);
  1228. this.subTaskNewIcon = new Element("div.subTaskNewIcon",{styles:this.css.subTaskNewIcon}).inject(this.subTaskNewContent);
  1229. this.subTaskNewText = new Element("div.subTaskNewText",{styles:this.css.subTaskNewText,text:this.lp.taskSubText}).inject(this.subTaskNewContent);
  1230. this.subTaskNewContent.addEvents({
  1231. click:function(){
  1232. this.subTaskNewContent.hide();
  1233. if(this.subTaskNewContainer)this.subTaskNewContainer.destroy();
  1234. this.subTaskNewContainer = new Element("div.subTaskNewContainer",{styles:this.css.subTaskNewContainer}).inject(this.subTaskAddContainer);
  1235. this.subTaskNewValue = new Element("div.subTaskNewValue",{styles:this.css.subTaskNewValue}).inject(this.subTaskNewContainer);
  1236. this.subTaskNewInput = new Element("input.subTaskNewInput",{styles:this.css.subTaskNewInput,placeholder:this.lp.taskSubNamePlaceholder}).inject(this.subTaskNewValue);
  1237. this.subTaskNewPerson = new Element("div.subTaskNewPerson",{styles:this.css.subTaskNewPerson}).inject(this.subTaskNewValue);
  1238. this.subTaskNewPerson.addEvent("click",function(){
  1239. this.selectPerson(this.subTaskNewPerson,"identity",null,1,
  1240. function(json){
  1241. if(json.length>0){
  1242. this.taskSubNewPerson = json[0];
  1243. this.loadSubTaskPerson(this.subTaskNewPerson,json[0],true)
  1244. }
  1245. }.bind(this)
  1246. );
  1247. }.bind(this));
  1248. this.subTaskNewAction = new Element("div.subTaskNewAction",{styles:this.css.subTaskNewAction}).inject(this.subTaskNewContainer);
  1249. this.subTaskNewCancel = new Element("div.subTaskNewCancel",{styles:this.css.subTaskNewCancel,text:this.lp.cancel}).inject(this.subTaskNewAction);
  1250. this.subTaskNewCancel.addEvents({
  1251. click:function(){
  1252. this.subTaskNewContent.show();
  1253. this.subTaskNewContainer.destroy()
  1254. }.bind(this),
  1255. mouseover:function(){
  1256. this.setStyles({"color":"#4A90E2"})
  1257. },
  1258. mouseout:function(){
  1259. this.setStyles({"color":"#666666"})
  1260. }
  1261. });
  1262. this.subTaskNewOK = new Element("div.subTaskNewOK",{styles:this.css.subTaskNewOK,text:this.lp.save}).inject(this.subTaskNewAction);
  1263. this.subTaskNewOK.addEvents({
  1264. click:function(){
  1265. if(this.subTaskNewInput.get("value").trim()=="") return;
  1266. var data = {
  1267. name:this.subTaskNewInput.get("value").trim(),
  1268. project:this.taskData.project,
  1269. parent:this.taskData.id,
  1270. executor:this.taskSubNewPerson || ""
  1271. };
  1272. this.actions.taskSave(data,function(json){
  1273. this.taskSubNewPerson = ""
  1274. if(json.data.id){
  1275. this.actions.taskGet(json.data.id,function(d){
  1276. this.loadSubTaskItem(this.subTaskListContent,d.data);
  1277. }.bind(this))
  1278. }
  1279. this.subTaskNewContent.show();
  1280. this.subTaskNewContainer.destroy();
  1281. if(json.data.dynamics){
  1282. json.data.dynamics.each(function(dd){
  1283. this.loadDynamicItem(dd,"bottom")
  1284. }.bind(this));
  1285. }
  1286. this.dynamicContent.scrollTo(0,this.dynamicContent.getScrollSize().y);
  1287. }.bind(this))
  1288. }.bind(this)
  1289. })
  1290. }.bind(this)
  1291. });
  1292. },
  1293. loadSubTask:function(){
  1294. var node = this.subTaskListContent;
  1295. node.empty();
  1296. this.actions.taskSubList(this.taskData.id,function(json){
  1297. json.data.each(function(data){
  1298. this.loadSubTaskItem(node,data);
  1299. }.bind(this))
  1300. }.bind(this))
  1301. },
  1302. loadSubTaskItem:function(node,data){
  1303. var subTaskItemContainer = new Element("div.subTaskItemContainer",{styles:this.css.subTaskItemContainer,id:data.id}).inject(node);
  1304. var subTaskItemText = new Element("div.subTaskItemText",{styles:this.css.subTaskItemText,text:data.name,title:this.lp.taskSubDes}).inject(subTaskItemContainer);
  1305. subTaskItemText.addEvents({
  1306. mouseover:function(){
  1307. this.setStyles({"background-color":"#f5f5f5"})
  1308. },
  1309. mouseout:function(){
  1310. this.setStyles({"background-color":""})
  1311. },
  1312. click:function(){
  1313. var id = subTaskItemContainer.get("id");
  1314. if(id && id!=""){
  1315. this.data.taskId = id;
  1316. this.openTask()
  1317. }
  1318. }.bind(this)
  1319. });
  1320. var subTaskItemPerson = new Element("div.subTaskItemPerson",{styles:this.css.subTaskItemPerson}).inject(subTaskItemContainer);
  1321. // subTaskItemPerson.addEvent("click",function(){
  1322. // this.selectPerson(subTaskItemPerson,"identity",null,1,
  1323. // function(json){
  1324. // if(json.length>0){
  1325. // this.loadSubTaskPerson(subTaskItemPerson,json[0],true)
  1326. // }
  1327. // }.bind(this)
  1328. // );
  1329. // }.bind(this));
  1330. if(data.executor && data.executor!=""){
  1331. this.loadSubTaskPerson(subTaskItemPerson,data.executor)
  1332. }
  1333. },
  1334. loadSubTaskPerson:function(node,identity,flag){
  1335. if(flag==null) flag=false;
  1336. node.empty();
  1337. var taskSubNewPerson = identity;
  1338. var _self = this
  1339. var name = identity.split("@")[0];
  1340. var container = new Element("div",{styles:{"height":"30px","padding":"0px 8px 0px 2px","border-radius":"4px","float":"left","position":"relative"}}).inject(node);
  1341. container.set("title",name);
  1342. var circleStyles={
  1343. "width":"24px","height":"24px","border-radius":"20px","float":"left",
  1344. "background-color":"#4A90E2","color":"#ffffff","line-height":"22px",
  1345. "text-align":"center","margin-top":"3px","font-size":"12px"
  1346. };
  1347. var closeStyles={
  1348. "width":"16px","height":"16px","position":"absolute","right":"-5px","top":"-2px",
  1349. "background":"url(/x_component_TeamWork/$Task/default/icon/icon_off.png) no-repeat center"
  1350. };
  1351. var circleDiv = new Element("div",{styles:circleStyles,text:name.substr(0,1)}).inject(container);
  1352. if(flag){ //权限
  1353. container.addEvents({
  1354. mouseenter:function(){
  1355. var closeIcon = new Element("div.closeIcon",{styles:closeStyles}).inject(this);
  1356. closeIcon.addEvents({
  1357. click:function(e){
  1358. node.empty();
  1359. node.setStyles(_self.css.subTaskNewPerson);
  1360. container.destroy();
  1361. e.stopPropagation();
  1362. }
  1363. });
  1364. this.setStyles({"background-color":"#efefef","cursor":"pointer"});
  1365. },
  1366. mouseleave:function(){
  1367. if(this.getElement(".closeIcon"))this.getElement(".closeIcon").destroy();
  1368. this.setStyles({"background-color":""})
  1369. },
  1370. click:function(e){
  1371. this.selectPerson(this.subTaskNewPerson,"identity",null,1,
  1372. function(json){
  1373. if(json.length>0){
  1374. taskSubNewPerson = json[0];
  1375. this.loadSubTaskPerson(this.subTaskNewPerson,json[0],true)
  1376. }
  1377. }.bind(this)
  1378. );
  1379. e.stopPropagation();
  1380. }.bind(this)
  1381. })
  1382. }
  1383. },
  1384. loadTaskPerson:function(node,identity,flag){
  1385. var _self = this
  1386. var name = identity.split("@")[0];
  1387. var container = new Element("div",{styles:{"height":"30px","padding":"0 0px","border-radius":"4px","float":"left","position":"relative"}}).inject(node);
  1388. var circleStyles={
  1389. "width":"24px","height":"24px","border-radius":"20px","float":"left",
  1390. "background-color":"#4A90E2","color":"#ffffff","line-height":"22px",
  1391. "text-align":"center","margin-top":"3px","font-size":"12px"
  1392. };
  1393. var nameStyles={
  1394. "height":"24px","float":"left","margin-left":"2px","margin-right":"10px",
  1395. "color":"#333333","line-height":"22px","margin-top":"3px"
  1396. };
  1397. var closeStyles={
  1398. "width":"16px","height":"16px","position":"absolute","right":"0px",
  1399. "background":"url(/x_component_TeamWork/$Task/default/icon/icon_off.png) no-repeat center"
  1400. };
  1401. var circleDiv = new Element("div",{styles:circleStyles,text:name.substr(0,1)}).inject(container);
  1402. var nameDiv = new Element("div",{styles:nameStyles,text:name}).inject(container);
  1403. if(flag){ //权限
  1404. container.addEvents({
  1405. mouseenter:function(){
  1406. // var closeIcon = new Element("div.closeIcon",{styles:closeStyles}).inject(this);
  1407. // closeIcon.addEvents({
  1408. // click:function(e){
  1409. // // _self.taskData.executor = "";
  1410. // // _self.loadDutyValue();
  1411. //
  1412. // var sd = {
  1413. // taskId:_self.taskData.id,
  1414. // property:"executor",
  1415. // mainValue:"",
  1416. // secondaryValue:""
  1417. // };
  1418. // _self.updateSingleProperty(sd,function(){
  1419. // _self.taskData.executor = "";
  1420. // _self.loadDutyValue()
  1421. // })
  1422. //
  1423. // e.stopPropagation();
  1424. // }
  1425. // });
  1426. this.setStyles({"background-color":"#efefef","cursor":"pointer"});
  1427. },
  1428. mouseleave:function(){
  1429. if(this.getElement(".closeIcon"))this.getElement(".closeIcon").destroy();
  1430. this.setStyles({"background-color":""})
  1431. },
  1432. click:function(e){
  1433. _self.selectPerson(_self.taskDutyAddText,"identity",null,1,
  1434. function(json){
  1435. if(json.length>0){
  1436. if(_self.taskData.executor!=json[0]){
  1437. var sd = {
  1438. taskId:_self.taskData.id,
  1439. property:"executor",
  1440. mainValue:json[0],
  1441. secondaryValue:""
  1442. };
  1443. _self.updateSingleProperty(sd,function(){
  1444. _self.taskData.executor = json[0];
  1445. _self.loadDutyValue()
  1446. })
  1447. }
  1448. }
  1449. }
  1450. );
  1451. }
  1452. })
  1453. }
  1454. },
  1455. loadparticipantPerson:function(node,identity,flag){
  1456. var _self = this;
  1457. var name = identity.split("@")[0];
  1458. var container = new Element("div",{styles:{"height":"30px","padding":"0 0px","border-radius":"4px","float":"left","position":"relative"}}).inject(node);
  1459. var circleStyles={
  1460. "width":"24px","height":"24px","border-radius":"20px","float":"left",
  1461. "background-color":"#4A90E2","color":"#ffffff","line-height":"22px",
  1462. "text-align":"center","margin-top":"3px","font-size":"12px"
  1463. };
  1464. var nameStyles={
  1465. "height":"24px","float":"left","margin-left":"2px","margin-right":"16px",
  1466. "color":"#333333","line-height":"22px","margin-top":"3px"
  1467. };
  1468. var closeStyles={
  1469. "width":"16px","height":"16px","position":"absolute","right":"0px",
  1470. "background":"url(/x_component_TeamWork/$Task/default/icon/icon_off.png) no-repeat center"
  1471. };
  1472. var circleDiv = new Element("div",{styles:circleStyles,text:name.substr(0,1)}).inject(container);
  1473. var nameDiv = new Element("div",{styles:nameStyles,text:name}).inject(container);
  1474. if(flag){ //权限
  1475. container.addEvents({
  1476. mouseenter:function(){
  1477. var closeIcon = new Element("div.closeIcon",{styles:closeStyles}).inject(this);
  1478. closeIcon.addEvents({
  1479. click:function(e){
  1480. var index = _self.taskData.participantList.indexOf(identity);
  1481. if(index>-1){
  1482. _self.taskData.participantList.erase(identity)
  1483. }
  1484. _self.actions.updateParticipantList(_self.taskData.id,{participantList:_self.taskData.participantList},function(json){
  1485. _self.createParticipateContainer();
  1486. if(json.data.dynamics){
  1487. json.data.dynamics.each(function(dd){
  1488. _self.loadDynamicItem(dd,"bottom")
  1489. })
  1490. }
  1491. _self.dynamicContent.scrollTo(0,_self.dynamicContent.getScrollSize().y);
  1492. })
  1493. e.stopPropagation();
  1494. }
  1495. });
  1496. this.setStyles({"background-color":"#efefef","cursor":"pointer"});
  1497. },
  1498. mouseleave:function(){
  1499. if(this.getElement(".closeIcon"))this.getElement(".closeIcon").destroy();
  1500. this.setStyles({"background-color":""})
  1501. }
  1502. })
  1503. }
  1504. },
  1505. setAuth:function(){
  1506. var _self = this;
  1507. //名称
  1508. },
  1509. reload : function( keepData ){
  1510. // if( keepData ){
  1511. // this.data = this.form.getResult(false, this.options.resultSeparator, false, false, true);
  1512. // }
  1513. this.formTopNode = null;
  1514. if(this.setFormNodeSizeFun && this.app && this.app.removeEvent){
  1515. this.app.removeEvent("resize",this.setFormNodeSizeFun);
  1516. }
  1517. if( this.formMaskNode )this.formMaskNode.destroy();
  1518. if( this.formAreaNode )this.formAreaNode.destroy();
  1519. if( this.isNew ){
  1520. this.create();
  1521. }else if( this.isEdited ){
  1522. this.edit();
  1523. }else{
  1524. this.open();
  1525. }
  1526. },
  1527. selectPerson: function( item, type,types,count,callback ) {
  1528. MWF.xDesktop.requireApp("Selector", "package", null, false);
  1529. this.fireEvent("querySelect", this);
  1530. var value = [];
  1531. var options = {
  1532. "type": type,
  1533. "types":types,
  1534. "title": "选人",
  1535. "count": count,
  1536. "values": value || [],
  1537. "onComplete": function (items) {
  1538. var arr = [];
  1539. items.each(function (item) {
  1540. arr.push(item.data.distinguishedName);
  1541. }.bind(this));
  1542. if(callback)callback(arr);
  1543. }.bind(this)
  1544. };
  1545. var selector = new MWF.O2Selector(this.app.content, options);
  1546. }
  1547. });
  1548. MWF.xApplication.TeamWork.Task.TaskMore = new Class({
  1549. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1550. options : {
  1551. // displayDelay : 300,
  1552. hasArrow:false,
  1553. event:"click"
  1554. },
  1555. _loadCustom : function( callback ){
  1556. var _self = this;
  1557. this.css = this.options.css;
  1558. this.lp = this.options.lp;
  1559. //this.data
  1560. //this.contentNode
  1561. var topMoreTitle = new Element("div.topMoreTitle",{styles:this.css.topMoreTitle,text:this.lp.taskMenu}).inject(this.contentNode);
  1562. var copyTask = new Element("div.copyTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1563. copyTask.addEvents({
  1564. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1565. mouseleave:function(){this.setStyles({"background-color":""})}
  1566. });
  1567. var copyTaskIcon = new Element("div.copyTaskIcon",{styles:this.css.topMoreItemIcon}).inject(copyTask);
  1568. copyTaskIcon.setStyles({"background":"url(/x_component_TeamWork/$Task/default/icon/taskcopy.png) no-repeat center"});
  1569. var copyTaskText = new Element("div.copyTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskCopy}).inject(copyTask);
  1570. var moveTask = new Element("div.moveTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1571. moveTask.addEvents({
  1572. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1573. mouseleave:function(){this.setStyles({"background-color":""})},
  1574. click:function(){
  1575. var data = this.data;
  1576. var opt = {};
  1577. MWF.xDesktop.requireApp("TeamWork", "TaskMove", function(){
  1578. var taskmove = new MWF.xApplication.TeamWork.TaskMove(this.explorer,data,opt);
  1579. taskmove.open();
  1580. var fx = new Fx.Tween(this.node,{duration:200});
  1581. fx.start(["opacity"] ,"1", "0").chain(function(){this.close()}.bind(this));
  1582. }.bind(this));
  1583. }.bind(this)
  1584. });
  1585. var moveTaskIcon = new Element("div.moveTaskIcon",{styles:this.css.topMoreItemIcon}).inject(moveTask);
  1586. moveTaskIcon.setStyles({"background":"url(/x_component_TeamWork/$Task/default/icon/taskmove.png) no-repeat center"});
  1587. var moveTaskText = new Element("div.moveTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskMove}).inject(moveTask);
  1588. var favTask = new Element("div.favTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1589. favTask.addEvents({
  1590. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1591. mouseleave:function(){this.setStyles({"background-color":""})}
  1592. });
  1593. var favTaskIcon = new Element("div.favTaskIcon",{styles:this.css.topMoreItemIcon}).inject(favTask);
  1594. favTaskIcon.setStyles({"background":"url(/x_component_TeamWork/$Task/default/icon/taskfav.png) no-repeat center"});
  1595. var favTaskText = new Element("div.favTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskFav}).inject(favTask);
  1596. var subTask = new Element("div.subTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1597. subTask.addEvents({
  1598. click:function(){
  1599. var data = this.data;
  1600. MWF.xDesktop.requireApp("TeamWork", "TaskSub", function(){
  1601. var opt = {
  1602. "onPostOpen":function(){
  1603. //tasksub.formAreaNode.setStyles({"height":"0px","width":"0px","overflow":"hidden"})
  1604. //tasksub.formAreaNode.setStyles({"top":"10px"});
  1605. var fx = new Fx.Tween(tasksub.formAreaNode,{duration:200});
  1606. fx.start(["top"] ,"10px", "100px");
  1607. }
  1608. };
  1609. var tasksub = new MWF.xApplication.TeamWork.TaskSub(this.explorer,data,opt);
  1610. tasksub.open();
  1611. var fx = new Fx.Tween(this.node,{duration:200});
  1612. fx.start(["opacity"] ,"1", "0").chain(function(){this.close()}.bind(this));
  1613. }.bind(this));
  1614. }.bind(this),
  1615. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1616. mouseleave:function(){this.setStyles({"background-color":""})}
  1617. });
  1618. var subTaskIcon = new Element("div.subTaskIcon",{styles:this.css.topMoreItemIcon}).inject(subTask);
  1619. subTaskIcon.setStyles({"background":"url(/x_component_TeamWork/$Task/default/icon/tasksub.png) no-repeat center"});
  1620. var subTaskText = new Element("div.subTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskSub}).inject(subTask);
  1621. var removeTask = new Element("div.removeTask",{styles:this.css.topMoreItem}).inject(this.contentNode);
  1622. removeTask.addEvents({
  1623. click:function(e){
  1624. _self.app.confirm("warn",e,_self.app.lp.common.confirm.removeTitle,_self.app.lp.common.confirm.removeContent,300,120,function(){
  1625. _self.actions.taskRemove(_self.data.data.id,function(){
  1626. var rd = {"act":"remove"};
  1627. _self.close(rd);
  1628. this.close()
  1629. }.bind(this))
  1630. },function(){
  1631. this.close();
  1632. });
  1633. },
  1634. mouseenter:function(){this.setStyles({"background-color":"#F7F7F7"})},
  1635. mouseleave:function(){this.setStyles({"background-color":""})}
  1636. });
  1637. var removeTaskIcon = new Element("div.removeTaskIcon",{styles:this.css.topMoreItemIcon}).inject(removeTask);
  1638. removeTaskIcon.setStyles({"background":"url(/x_component_TeamWork/$Task/default/icon/taskremove.png) no-repeat center"});
  1639. var removeTaskText = new Element("div.removeTaskText",{styles:this.css.topMoreItemText,text:this.lp.taskRemove}).inject(removeTask);
  1640. if(callback)callback();
  1641. }
  1642. });
  1643. MWF.xApplication.TeamWork.Task.StatusCheck = new Class({
  1644. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1645. options : {
  1646. // displayDelay : 300,
  1647. hasArrow:false,
  1648. event:"click"
  1649. },
  1650. _loadCustom : function( callback ){
  1651. var _self = this;
  1652. this.css = this.options.css;
  1653. this.lp = this.options.lp;
  1654. //this.data
  1655. var container = {
  1656. "cursor":"pointer",
  1657. "height":"40px",
  1658. "width":"100%"
  1659. };
  1660. var text={
  1661. "height":"30px","line-height":"30px","float":"left",
  1662. "padding-left":"10px","padding-right":"10px","margin-left":"6px","margin-top":"5px",
  1663. "font-size":"13px","color":"#666666","border-radius":"2px"
  1664. };
  1665. var icon = {
  1666. "float":"right","width":"24px","height":"24px",
  1667. "margin-top":"6px","margin-right":"8px",
  1668. "background":"url(/x_component_TeamWork/$Task/default/icon/icon_dagou.png) no-repeat center"
  1669. };
  1670. var flowContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1671. var flowText = new Element("div",{styles:text,text:this.lp.status.processing}).inject(flowContainer);
  1672. flowText.setStyles({"background-color":"#f0f0f0"});
  1673. if(this.data.data.workStatus == "processing"){
  1674. var flowIcon = new Element("div",{styles:icon}).inject(flowContainer);
  1675. }
  1676. flowContainer.addEvents({
  1677. click:function(){
  1678. var data = {"status":"processing"};
  1679. this.close(data)
  1680. }.bind(this),
  1681. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1682. mouseout:function(){this.setStyles({"background-color":""})}
  1683. });
  1684. var completeContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1685. var completeText = new Element("div",{styles:text,text:this.lp.status.completed}).inject(completeContainer);
  1686. completeText.setStyles({"color":"#69b439","background-color":"#f1f9ec"});
  1687. if(this.data.data.workStatus == "completed"){
  1688. var completeIcon = new Element("div",{styles:icon}).inject(completeContainer);
  1689. }
  1690. completeContainer.addEvents({
  1691. click:function(){
  1692. var data = {"status":"completed"};
  1693. this.close(data)
  1694. }.bind(this),
  1695. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1696. mouseout:function(){this.setStyles({"background-color":""})}
  1697. });
  1698. if(callback)callback();
  1699. }
  1700. });
  1701. MWF.xApplication.TeamWork.Task.PriorityCheck = new Class({
  1702. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1703. options : {
  1704. // displayDelay : 300,
  1705. hasArrow:false,
  1706. event:"click"
  1707. },
  1708. _loadCustom : function( callback ){
  1709. var _self = this;
  1710. this.css = this.options.css;
  1711. this.lp = this.options.lp;
  1712. //this.data
  1713. //this.contentNode
  1714. var container = {
  1715. "cursor":"pointer",
  1716. "height":"40px",
  1717. "width":"100%"
  1718. };
  1719. var text={
  1720. "height":"25px","line-height":"25px","float":"left","width":"50px","text-align":"center",
  1721. "margin-left":"6px","margin-top":"8px",
  1722. "font-size":"13px","color":"#666666","border-radius":"2px"
  1723. };
  1724. var icon = {
  1725. "float":"right","width":"24px","height":"24px",
  1726. "margin-top":"6px","margin-right":"8px",
  1727. "background":"url(/x_component_TeamWork/$Task/default/icon/icon_dagou.png) no-repeat center"
  1728. };
  1729. var normalContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1730. var normalText = new Element("div",{styles:text,text:this.lp.priority.normal}).inject(normalContainer);
  1731. normalText.setStyles({"color":"#999999","border":"1px solid #999999"});
  1732. if(this.data.data.priority == this.lp.priority.normal){
  1733. new Element("div",{styles:icon}).inject(normalContainer);
  1734. }
  1735. normalContainer.addEvents({
  1736. click:function(){
  1737. var data = {"value":this.lp.priority.normal};
  1738. this.close(data)
  1739. }.bind(this),
  1740. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1741. mouseout:function(){this.setStyles({"background-color":""})}
  1742. });
  1743. var urgencyContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1744. var urgencyText = new Element("div",{styles:text,text:this.lp.priority.urgency}).inject(urgencyContainer);
  1745. urgencyText.setStyles({"color":"#ffaf38","border":"1px solid #ffaf38"});
  1746. if(this.data.data.priority == this.lp.priority.urgency){
  1747. new Element("div",{styles:icon}).inject(urgencyContainer);
  1748. }
  1749. urgencyContainer.addEvents({
  1750. click:function(){
  1751. var data = {"value":this.lp.priority.urgency};
  1752. this.close(data)
  1753. }.bind(this),
  1754. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1755. mouseout:function(){this.setStyles({"background-color":""})}
  1756. });
  1757. var emergencyContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1758. var emergencyText = new Element("div",{styles:text,text:this.lp.priority.emergency}).inject(emergencyContainer);
  1759. emergencyText.setStyles({"color":"#ff4f3e","border":"1px solid #ff4f3e"});
  1760. if(this.data.data.priority == this.lp.priority.emergency){
  1761. new Element("div",{styles:icon}).inject(emergencyContainer);
  1762. }
  1763. emergencyContainer.addEvents({
  1764. click:function(){
  1765. var data = {"value":this.lp.priority.emergency};
  1766. this.close(data)
  1767. }.bind(this),
  1768. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1769. mouseout:function(){this.setStyles({"background-color":""})}
  1770. });
  1771. if(callback)callback();
  1772. }
  1773. });
  1774. MWF.xApplication.TeamWork.Task.DynamicType = new Class({
  1775. Extends: MWF.xApplication.TeamWork.Common.ToolTips,
  1776. options : {
  1777. // displayDelay : 300,
  1778. hasArrow:false,
  1779. event:"click"
  1780. },
  1781. _loadCustom : function( callback ){
  1782. var _self = this;
  1783. this.css = this.options.css;
  1784. this.lp = this.options.lp;
  1785. //this.data
  1786. //this.contentNode
  1787. var container = {
  1788. "cursor":"pointer",
  1789. "height":"40px",
  1790. "width":"100%"
  1791. };
  1792. var text={
  1793. "height":"25px","line-height":"25px","float":"left","width":"100%",
  1794. "margin-left":"6px","margin-top":"8px",
  1795. "font-size":"13px","color":"#666666","border-radius":"2px"
  1796. };
  1797. var icon = {
  1798. "float":"right","width":"24px","height":"24px",
  1799. "margin-top":"6px","margin-right":"8px",
  1800. "background":"url(/x_component_TeamWork/$Task/default/icon/icon_dagou.png) no-repeat center"
  1801. };
  1802. var allContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1803. var allText = new Element("div",{styles:text,text:this.lp.dynamicAll}).inject(allContainer);
  1804. allText.setStyles({"color":"#999999","border":"0px solid #999999"});
  1805. allContainer.addEvents({
  1806. click:function(){
  1807. var data = {"value":"all"};
  1808. this.close(data)
  1809. }.bind(this),
  1810. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1811. mouseout:function(){this.setStyles({"background-color":""})}
  1812. });
  1813. var attachmentContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1814. var attachmentText = new Element("div",{styles:text,text:this.lp.dynamicAttachment}).inject(attachmentContainer);
  1815. attachmentText.setStyles({"color":"#999999","border":"0px solid #999999"});
  1816. attachmentContainer.addEvents({
  1817. click:function(){
  1818. var data = {"value":"attachment"};
  1819. this.close(data)
  1820. }.bind(this),
  1821. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1822. mouseout:function(){this.setStyles({"background-color":""})}
  1823. });
  1824. var chatContainer = new Element("div",{styles:container}).inject(this.contentNode);
  1825. var chatText = new Element("div",{styles:text,text:this.lp.dynamicChat}).inject(chatContainer);
  1826. chatText.setStyles({"color":"#999999","border":"0px solid #999999"});
  1827. chatContainer.addEvents({
  1828. click:function(){
  1829. var data = {"value":"chat"};
  1830. this.close(data)
  1831. }.bind(this),
  1832. mouseover:function(){this.setStyles({"background-color":"#f2f5f7"})},
  1833. mouseout:function(){this.setStyles({"background-color":""})}
  1834. });
  1835. if(callback)callback();
  1836. }
  1837. });