Log.js 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132
  1. MWF.xDesktop.requireApp("process.Xform", "$Module", null, false);
  2. MWF.xApplication.process.Xform.Log = MWF.APPLog = new Class({
  3. Extends: MWF.APP$Module,
  4. _loadUserInterface: function(){
  5. this.node.empty();
  6. this.node.setStyle("-webkit-user-select", "text");
  7. if (this.form.businessData){
  8. if (this.form.businessData.workLogList){
  9. this.workLog = this.form.businessData.workLogList;
  10. this.loadWorkLog();
  11. }
  12. }
  13. },
  14. loadWorkLog: function(){
  15. if( !this.json.category || this.json.category === "none" ){
  16. if (this.json.mode==="table"){
  17. this.loadWorkLogTable();
  18. }else if (this.json.mode==="text"){
  19. this.loadWorkLogText();
  20. }else if (this.json.mode==="media"){
  21. this.loadWorkLogMedia();
  22. }else{
  23. this.loadWorkLogDefault();
  24. }
  25. }else{
  26. this.loadCategoryList();
  27. if( !this.categoryList.length )return;
  28. this.expandCount = 0;
  29. if( this.json.expand && this.json.expand === "enable" ){
  30. this.expandCount = parseInt( this.json.expandCount );
  31. }
  32. this.table = new Element("table", this.json.tableProperties).inject( this.node );
  33. this.categoryList.each( function( key, idx ){
  34. var list = this.categoryJson[key];
  35. if( list && list.length ){
  36. var tr = new Element("tr").inject( this.table );
  37. if( this.expandCount && (idx + 1) > this.expandCount ){
  38. tr.setStyle("display","none");
  39. }
  40. var text = key;
  41. if( this.json.category === "unit" ){
  42. text = key.split("@")[0];
  43. }
  44. new Element("td", {
  45. styles : this.json.titleTdStyles,
  46. text : text
  47. }).inject( tr );
  48. var td = new Element("td", {
  49. styles : this.json.contentTdStyles
  50. }).inject( tr );
  51. var div = new Element("div",{
  52. styles : this.json.contentDivStyles || {}
  53. }).inject( td );
  54. var sortedList = list;
  55. if( this.json.sortTypeInCategory === "completedTimeAsc" || this.json.sortTypeInCategory === "completedTimeDesc" ){
  56. sortedList = [];
  57. list.each( function( log ){
  58. if (log.taskCompletedList.length) {
  59. log.taskCompletedList.each(function (t) {
  60. var copyLog = Object.clone( log );
  61. copyLog.readList = [];
  62. copyLog.readCompletedList = [];
  63. copyLog.taskList = [];
  64. copyLog.taskCompletedList = [t];
  65. sortedList.push( copyLog );
  66. }.bind(this));
  67. }
  68. }.bind(this));
  69. sortedList.sort(function(a, b){
  70. if( this.json.sortTypeInCategory === "completedTimeAsc" ) {
  71. return Date.parse(a.taskCompletedList[0].completedTime) - Date.parse(b.taskCompletedList[0].completedTime);
  72. }else if( this.json.sortTypeInCategory === "completedTimeDesc" ) {
  73. return Date.parse(b.taskCompletedList[0].completedTime) - Date.parse(a.taskCompletedList[0].completedTime);
  74. }
  75. }.bind(this));
  76. list.each( function( log ) {
  77. if (log.taskList.length) {
  78. log.taskList.each(function (t) {
  79. var copyLog = Object.clone(log);
  80. copyLog.readList = [];
  81. copyLog.readCompletedList = [];
  82. copyLog.taskCompletedList = [];
  83. copyLog.taskList = [t];
  84. sortedList.push(copyLog);
  85. }.bind(this));
  86. }
  87. })
  88. }
  89. if (this.json.mode==="table"){
  90. this.loadWorkLogTable( sortedList, div );
  91. }else if (this.json.mode==="text"){
  92. this.loadWorkLogText( sortedList, div );
  93. }else if (this.json.mode==="media"){
  94. this.loadWorkLogMedia( sortedList, div );
  95. }else{
  96. this.loadWorkLogDefault( sortedList, div );
  97. }
  98. this._loadTableStyles();
  99. }
  100. }.bind(this));
  101. if( this.categoryList.length > this.expandCount ){
  102. this.loadExpandCollapseNode();
  103. }
  104. }
  105. },
  106. loadCategoryList : function( ){
  107. var category;
  108. if( this.json.category === "activity" ){
  109. category = "fromActivityName";
  110. this._loadCategoryList( category );
  111. }else if( this.json.category === "unit" ){
  112. category = "unit";
  113. this._loadCategoryLitBySubData( category );
  114. }else if( this.json.category === "activityGroup" ){
  115. category = "fromOpinionGroup";
  116. this._loadCategoryList( category );
  117. }else{
  118. category = this.json.category;
  119. this._loadCategoryList( category );
  120. }
  121. },
  122. isNumber : function( d ){
  123. return parseFloat(d).toString() !== "NaN"
  124. },
  125. _loadCategoryList : function( category ){
  126. this.categoryList = [];
  127. this.categoryJson = {};
  128. if( category === "fromOpinionGroup" ){
  129. this.workLog.sort( function( a, b ){
  130. if( a.fromOpinionGroup && b.fromOpinionGroup ) {
  131. var array1 = a.fromOpinionGroup.split("#");
  132. var array2 = b.fromOpinionGroup.split("#");
  133. for (var i = 0; i < array1.length; i++) {
  134. var value1 = array1[i];
  135. var value2 = array2[i];
  136. if (this.isNumber(value1) && this.isNumber(value2)) {
  137. if (parseFloat(value1) !== parseFloat(value2)) {
  138. return parseFloat(value1) - parseFloat(value2);
  139. }
  140. } else if (!this.isNumber(value1) && !this.isNumber(value2)) {
  141. return Date.parse(a.fromTime) - Date.parse(b.fromTime);
  142. } else {
  143. return this.isNumber(value1) ? -1 : 1;
  144. }
  145. }
  146. return Date.parse(a.fromTime) - Date.parse(b.fromTime);
  147. }else if( a.fromOpinionGroup || b.fromOpinionGroup ){
  148. return a.fromOpinionGroup ? -1 : 1;
  149. }else{
  150. return Date.parse(a.fromTime) - Date.parse(b.fromTime);
  151. }
  152. }.bind(this))
  153. }
  154. this.workLog.each( function(log, idx){
  155. var key;
  156. if( this.json.category === "activityGroup" ){
  157. if( log.fromOpinionGroup ){
  158. var arr = log.fromOpinionGroup.split("#");
  159. key = arr[arr.length-1]
  160. }else{
  161. key = log.fromActivityName;
  162. }
  163. }else{
  164. key = log[category];
  165. }
  166. if( key && this.checkShow(log)){
  167. var flag = false;
  168. for( var i=0; i< log.taskCompletedList.length; i++ ){
  169. var taskCompleted = log.taskCompletedList[i];
  170. flag = this.checkListShow(log, taskCompleted);
  171. if( flag )break;
  172. }
  173. if (!flag && this.json.isTask){
  174. for( var i=0; i< this.json.isTask.length; i++ ){
  175. var task = log.taskList[i];
  176. flag = this.checkListShow(log, task);
  177. if( flag )break;
  178. }
  179. }
  180. if(flag){
  181. if( this.categoryList.indexOf( key ) === -1 ){
  182. this.categoryList.push( key );
  183. }
  184. if( !this.categoryJson[key] )this.categoryJson[key] = [];
  185. this.categoryJson[key].push( log );
  186. }
  187. }
  188. }.bind(this))
  189. },
  190. _loadCategoryLitBySubData : function( category ){
  191. this.categoryList = [];
  192. this.categoryJson = {};
  193. this.workLog.each( function(log, idx){
  194. var key = log[category];
  195. if( this.checkShow(log) ){
  196. var flag = false;
  197. for( var i=0; i< log.taskCompletedList.length; i++ ){
  198. var taskCompleted = log.taskCompletedList[i];
  199. flag = this.checkListShow(log, taskCompleted);
  200. if( flag )break;
  201. }
  202. if (!flag && this.json.isTask){
  203. for( var i=0; i< this.json.isTask.length; i++ ){
  204. var task = log.taskList[i];
  205. flag = this.checkListShow(log, task);
  206. if( flag )break;
  207. }
  208. }
  209. if(flag){
  210. var log_copy = Object.clone(log);
  211. log_copy.taskCompletedList = [];
  212. log_copy.taskList = [];
  213. log_copy.readCompletedList = [];
  214. log_copy.readList = [];
  215. var sub_categoryList = [];
  216. var sub_categoryJson = {};
  217. for( var i=0; i< log.taskCompletedList.length; i++ ){
  218. var d = log.taskCompletedList[i];
  219. var key = d[category];
  220. if( key ){
  221. if( sub_categoryList.indexOf( key ) === -1 ){
  222. sub_categoryList.push( key );
  223. }
  224. if( !sub_categoryJson[key] )sub_categoryJson[key] = Object.clone(log_copy);
  225. sub_categoryJson[key].taskCompletedList.push( d );
  226. }
  227. }
  228. for( var i=0; i< log.taskList.length; i++ ){
  229. var d = log.taskList[i];
  230. var key = d[category];
  231. if( key ){
  232. if( sub_categoryList.indexOf( key ) === -1 ){
  233. sub_categoryList.push( key );
  234. }
  235. if( !sub_categoryJson[key] )sub_categoryJson[key] = Object.clone(log_copy);
  236. sub_categoryJson[key].taskList.push( d );
  237. }
  238. }
  239. for( var i=0; i< log.readCompletedList.length; i++ ){
  240. var d = log.readCompletedList[i];
  241. var key = d[category];
  242. if( key ){
  243. if( sub_categoryList.indexOf( key ) === -1 ){
  244. sub_categoryList.push( key );
  245. }
  246. if( !sub_categoryJson[key] )sub_categoryJson[key] = Object.clone(log_copy);
  247. sub_categoryJson[key].readCompletedList.push( d );
  248. }
  249. }
  250. for( var i=0; i< log.readList.length; i++ ){
  251. var d = log.readList[i];
  252. var key = d[category];
  253. if( key ){
  254. if( sub_categoryList.indexOf( key ) === -1 ){
  255. sub_categoryList.push( key );
  256. }
  257. if( !sub_categoryJson[key] )sub_categoryJson[key] = Object.clone(log_copy);
  258. sub_categoryJson[key].readList.push( d );
  259. }
  260. }
  261. sub_categoryList.each( function(key){
  262. if( this.categoryList.indexOf( key ) === -1 ){
  263. this.categoryList.push( key );
  264. }
  265. }.bind(this));
  266. for( var key in sub_categoryJson ){
  267. if( !this.categoryJson[key] )this.categoryJson[key] = [];
  268. this.categoryJson[key].push( sub_categoryJson[key] );
  269. }
  270. }
  271. }
  272. }.bind(this))
  273. },
  274. _loadTableBorderStyle: function(){
  275. if (this.json.tableStyles.border){
  276. this.table.set("cellspacing", "0");
  277. this.table.setStyles({
  278. "border-top": this.json.tableStyles.border,
  279. "border-left": this.json.tableStyles.border
  280. });
  281. var ths = this.table.getElements("th");
  282. if( ths && ths.length ){
  283. ths.setStyles({
  284. "border-bottom": this.json.tableStyles.border,
  285. "border-right": this.json.tableStyles.border
  286. });
  287. }
  288. var tds = this.table.getElements("td");
  289. if( tds && tds.length ) {
  290. tds.setStyles({
  291. "border-bottom": this.json.tableStyles.border,
  292. "border-right": this.json.tableStyles.border
  293. });
  294. }
  295. }
  296. },
  297. _loadTableStyles: function(){
  298. Object.each(this.json.tableStyles, function(value, key){
  299. var reg = /^border\w*/ig;
  300. if (!key.test(reg)){
  301. this.table.setStyle(key, value);
  302. }
  303. }.bind(this));
  304. this._loadTableBorderStyle();
  305. },
  306. loadExpandCollapseNode : function(){
  307. if( this.json.expand && this.json.expand === "enable" ){
  308. if( this.json.expandHTML ){
  309. this.expandNode = new Element("div",{
  310. "html" : this.json.expandHTML
  311. }).inject( this.node, "bottom" );
  312. this.expandNode.addEvent("click", function(){
  313. if( !this.json.category || this.json.category === "none" ){
  314. }else{
  315. this.table.getElements("tr").setStyle("display","");
  316. this.expandNode.setStyle("display","none");
  317. this.collapseNode.setStyle("display","");
  318. }
  319. }.bind(this))
  320. }
  321. if( this.json.collapseHTML ){
  322. this.collapseNode = new Element("div",{
  323. "html" : this.json.collapseHTML,
  324. "styles" : { "display" : "none" }
  325. }).inject( this.node, "bottom" );
  326. this.collapseNode.addEvent("click", function(){
  327. if( !this.json.category || this.json.category === "none" ){
  328. }else{
  329. var trs = this.table.getElements("tr");
  330. for( var i=0; i<trs.length; i++ ){
  331. if( i >= this.expandCount ){
  332. trs[i].setStyle("display","none");
  333. }
  334. }
  335. this.expandNode.setStyle("display","");
  336. this.collapseNode.setStyle("display","none");
  337. }
  338. }.bind(this))
  339. }
  340. }
  341. },
  342. loadWorkLogMedia: function(list, container){
  343. if( list ){
  344. list.each(function(log, idx){
  345. this.loadWorkLogLine_media(log, idx, container);
  346. }.bind(this));
  347. }else{
  348. this.workLog.each(function(log, idx){
  349. if (this.checkShow(log)) this.loadWorkLogLine_media(log, idx, container);
  350. }.bind(this));
  351. }
  352. },
  353. loadWorkLogLine_media: function(log, idx, container){
  354. if (log.taskCompletedList.length){
  355. log.taskCompletedList.each(function(taskCompleted){
  356. if (this.checkListShow(log, taskCompleted)) this.loadTaskLine_media(taskCompleted, log, container);
  357. }.bind(this));
  358. }
  359. },
  360. loadTaskLine_media: function(task, log, container){
  361. if (task.mediaOpinion){
  362. var mediaIds = task.mediaOpinion.split(",");
  363. var atts = [];
  364. if (this.form.businessData.attachmentList){
  365. this.form.businessData.attachmentList.each(function(att){
  366. if (att.site==="$mediaOpinion"){
  367. if (mediaIds.indexOf(att.id)!==-1) atts.push(att);
  368. }
  369. }.bind(this));
  370. }
  371. if (atts.length) this.loadMediaOpinion_show(atts, task, container);
  372. }
  373. },
  374. loadMediaOpinion_show: function(atts, task, container, noName){
  375. atts.each(function(att){
  376. //if (!att.contentType) att.contentType = "image";
  377. if (att.type){
  378. if (att.type.indexOf("image")!==-1){
  379. this.loadMediaOpinion_image_show(att, task, container, noName);
  380. }else if(att.type.indexOf("video")!==-1){
  381. this.loadMediaOpinion_video_show(att, task, container);
  382. }else if(att.type.indexOf("audio")!==-1){
  383. this.loadMediaOpinion_voice_show(att, task, container);
  384. }else{
  385. this.loadMediaOpinion_voice_show(att, task, container);
  386. }
  387. }
  388. }.bind(this));
  389. },
  390. loadMediaOpinion_image_show: function(att, task, container, noName){
  391. var url = this.getMediaOpinionUrl(att);
  392. var node = new Element("div", {"styles": {"overflow": "hidden"}}).inject( container || this.node);
  393. if (!noName){
  394. var textNode = new Element("div", {
  395. "styles": {
  396. "line-height": "28px",
  397. "height": "28px"
  398. },
  399. "text": task.person.substring(0, task.person.indexOf("@"))+"("+task.completedTime+")"
  400. }).inject(node);
  401. }
  402. //var img = new Element("img", {"src": url, "styles": {"background-color": "#ffffff"}}).inject(node);
  403. //
  404. //var height = 200;
  405. //var width = 300;
  406. //if (layout.mobile){
  407. // var size = img.getSize();
  408. // width = 200;
  409. // height = 200*(size.y/size.x);
  410. //}
  411. //img.setStyles({"width": ""+width+"px", "height": ""+height+"px"});
  412. var imgNode = new Element("div").inject(node);
  413. var width;
  414. if (layout.mobile){
  415. width = 200;
  416. }else{
  417. var pNode = node.getParent();
  418. var offset = imgNode.getPosition( pNode );
  419. //width = Math.min( pNode.getSize().x - offset.x - 2, 800 );
  420. width = pNode.getSize().x - offset.x - 42;
  421. }
  422. var img = new Element("img", {
  423. "src": url,
  424. "styles" : { width : width+"px" },
  425. "events" : {
  426. load : function(ev){
  427. var nh=ev.target.naturalHeight;
  428. var nw = ev.target.naturalWidth;
  429. if( !layout.mobile && ( this.isNumber( this.json.handwritingWidth ) || this.isNumber( this.json.handwritingHeight ) ) ){
  430. var size = this.getImageSize( nw, nh );
  431. img.setStyles(size);
  432. imgNode.setStyles(size);
  433. }else{
  434. var x = Math.min(nw, width);
  435. img.setStyles({"width": ""+ x +"px"}); //���յĿ��
  436. imgNode.setStyles({"width": ""+ x +"px"});
  437. }
  438. }.bind(this)
  439. }
  440. }).inject(imgNode);
  441. // var size = img.getSize();
  442. // var x_y = size.x/size.y;
  443. // if (size.y>260){
  444. // var y = 260;
  445. // var x = 260*x_y;
  446. // img.setStyles({"width": ""+x+"px", "height": ""+y+"px"})
  447. // }
  448. },
  449. isNumber : function( d ){
  450. return parseFloat(d).toString() !== "NaN"
  451. },
  452. getImageSize : function(naturalWidth, naturalHeight ){
  453. var ww = this.json.handwritingWidth;
  454. var wh = this.json.handwritingHeight;
  455. if( this.isNumber(ww) && !this.isNumber(wh) ){
  456. return {
  457. width : Math.min( naturalWidth, parseInt( ww ) ) + "px",
  458. height : "auto"
  459. }
  460. }else if( !this.isNumber(ww) && this.isNumber(wh) ){
  461. return {
  462. width : "auto",
  463. height : Math.min( naturalHeight, parseInt( wh ) ) + "px"
  464. }
  465. }else if( this.isNumber(ww) && this.isNumber(wh) ){
  466. var flag = ( naturalWidth / parseInt(ww) ) > ( naturalHeight / parseInt(wh) );
  467. if( flag ){
  468. return {
  469. width : Math.min( naturalWidth, parseInt( ww ) ) + "px",
  470. height : "auto"
  471. }
  472. }else{
  473. return {
  474. width : "auto",
  475. height : Math.min( naturalHeight, parseInt( wh ) ) + "px"
  476. }
  477. }
  478. }
  479. },
  480. loadMediaOpinion_video_show: function(att, task, container){
  481. },
  482. loadMediaOpinion_voice_show: function(att, task, container){
  483. //var node = new Element("audio").inject(this.node);
  484. var url = this.getMediaOpinionUrl(att);
  485. var div = new Element("div", {"styles": {"overflow": "hidden"}}).inject(container || this.node);
  486. var textNode = new Element("div", {
  487. "styles": {
  488. "line-height": "28px",
  489. "height": "28px"
  490. },
  491. "text": task.person.substring(0, task.person.indexOf("@"))+"("+task.completedTime+")"
  492. }).inject(div);
  493. var node = new Element("audio", {"loop": false, "controls": true}).inject(div);
  494. node.set("src", url);
  495. //this.audioNode.play();
  496. },
  497. loadWorkLogTable: function( list, container ){
  498. if( list ){
  499. list.each(function(log, idx){
  500. this.loadWorkLogLine_table(log, idx, container );
  501. }.bind(this));
  502. }else{
  503. this.workLog.each(function(log, idx){
  504. if (this.checkShow(log)) this.loadWorkLogLine_table(log, idx, container );
  505. }.bind(this));
  506. }
  507. },
  508. loadWorkLogLine_table: function(log, idx, container){
  509. if (!log.readList) log.readList = [];
  510. if (!log.readCompletedList) log.readCompletedList = [];
  511. if (log.taskCompletedList.length || log.readList.length || log.readCompletedList.length || (this.json.isTask && log.taskList.length)){
  512. var logActivityNode = new Element("div", {"styles": this.form.css.logActivityNode}).inject( container || this.node);
  513. var titleNode = new Element("div", {"styles": this.form.css.logActivityTitleNode}).inject(logActivityNode);
  514. var childNode = new Element("div", {"styles": this.form.css.logActivityChildNode}).inject(logActivityNode);
  515. var iconNode = new Element("div", {"styles": this.form.css.logActivityIconNode}).inject(titleNode);
  516. var fromAvtivityNode = new Element("div", {"styles": this.form.css.logActivityFromNode}).inject(titleNode);
  517. var arrowNode = new Element("div", {"styles": this.form.css.logActivityArrowNode}).inject(titleNode);
  518. var arrivedAvtivityNode = new Element("div", {"styles": this.form.css.logActivityArrivedNode}).inject(titleNode);
  519. var timeNode = new Element("div", {"styles": this.form.css.logActivityTimeNode}).inject(titleNode);
  520. if (log.connected){
  521. iconNode.setStyle("background-image", "url("+"/x_component_process_Xform/$Form/"+this.form.options.style+"/icon/ok14.png)");
  522. }else{
  523. iconNode.setStyle("background-image", "url("+"/x_component_process_Xform/$Form/"+this.form.options.style+"/icon/rightRed.png)");
  524. }
  525. fromAvtivityNode.set("html", "<b>"+log.fromActivityName+"</b>");
  526. if (log.arrivedActivityName){
  527. arrowNode.setStyle("background-image", "url("+"/x_component_process_Xform/$Form/"+this.form.options.style+"/icon/right.png)");
  528. arrivedAvtivityNode.set("html", "<b>"+log.arrivedActivityName+"</b>");
  529. timeNode.set("html", "<b>"+MWF.xApplication.process.Xform.LP.begin+": </b>"+log.fromTime+"<br/><b>"+MWF.xApplication.process.Xform.LP.end+": </b>"+log.arrivedTime)
  530. }else{
  531. timeNode.set("html", "<b>"+MWF.xApplication.process.Xform.LP.begin+": </b>"+log.fromTime)
  532. }
  533. if ((idx % 2)===0){
  534. logActivityNode.setStyles(this.form.css.logActivityNode_even);
  535. titleNode.setStyles(this.form.css.logActivityTitleNode_even);
  536. }
  537. var taskTable = new Element("table", {
  538. "styles": this.form.css.logTableTask,
  539. "border": "0",
  540. "cellSpacing": "0",
  541. "cellpadding": "3px",
  542. "width": "100%"
  543. }).inject(childNode);
  544. var tr = taskTable.insertRow(0).setStyles(this.form.css.logTableTaskTitleLine);
  545. var td = tr.insertCell(0).setStyles(this.form.css.logTableTaskTitle);
  546. td.set("text", MWF.xApplication.process.Xform.LP.person);
  547. td = tr.insertCell(1).setStyles(this.form.css.logTableTaskTitle);
  548. td.set("text", MWF.xApplication.process.Xform.LP.department);
  549. td = tr.insertCell(2).setStyles(this.form.css.logTableTaskTitle);
  550. td.set("text", MWF.xApplication.process.Xform.LP.startTime);
  551. td = tr.insertCell(3).setStyles(this.form.css.logTableTaskTitle);
  552. td.set("text", MWF.xApplication.process.Xform.LP.completedTime);
  553. td = tr.insertCell(4).setStyles(this.form.css.logTableTaskTitle);
  554. td.set("text", MWF.xApplication.process.Xform.LP.route);
  555. td = tr.insertCell(5).setStyles(this.form.css.logTableTaskTitle);
  556. td.set("text", MWF.xApplication.process.Xform.LP.opinion);
  557. log.taskCompletedList.each(function(taskCompleted){
  558. if (this.checkListShow(log, taskCompleted)) this.loadTaskLine_table(taskCompleted, taskTable, log, false);
  559. }.bind(this));
  560. if (this.json.isShowRead!==false){
  561. var readNames = [];
  562. var readCompletedNames = [];
  563. if (log.readList && log.readList.length){
  564. log.readList.each(function(read){
  565. readNames.push(MWF.name.cn(read.person));
  566. });
  567. }
  568. if (log.readCompletedList && log.readCompletedList.length){
  569. log.readCompletedList.each(function(read){
  570. readCompletedNames.push(MWF.name.cn(read.person));
  571. });
  572. }
  573. this.loadReadLine_default(readNames, readCompletedNames, childNode);
  574. }
  575. if (this.json.isTask){
  576. log.taskList.each(function(task){
  577. if (this.checkListShow(log, task)) this.loadTaskLine_table(task, taskTable, log, true);
  578. }.bind(this));
  579. }
  580. }
  581. },
  582. loadTaskLine_table: function(task, table, log, isTask){
  583. var style = "logTableTaskLine";
  584. if (isTask) style = "logTableTaskLine_task";
  585. var tr = table.insertRow(table.rows.length);
  586. var td = tr.insertCell(0).setStyles(this.form.css[style]);
  587. td.set("text", task.person.substring(0, task.person.indexOf("@")) || "");
  588. td = tr.insertCell(1).setStyles(this.form.css[style]);
  589. td.set("text", task.unit.substring(0, task.unit.indexOf("@")) || "");
  590. td = tr.insertCell(2).setStyles(this.form.css[style]);
  591. td.set("text", task.startTime || "");
  592. td = tr.insertCell(3).setStyles(this.form.css[style]);
  593. td.set("text", task.completedTime || "");
  594. td = tr.insertCell(4).setStyles(this.form.css[style]);
  595. td.set("text", task.routeName || "");
  596. td = tr.insertCell(5).setStyles(this.form.css[style]);
  597. td.set("html", "<div style='line-height: 28px; float:left'>" + task.opinion || ""+"</div>");
  598. if (task.mediaOpinion){
  599. var mediaIds = task.mediaOpinion.split(",");
  600. var atts = [];
  601. if (this.form.businessData.attachmentList){
  602. this.form.businessData.attachmentList.each(function(att){
  603. if (att.site==="$mediaOpinion"){
  604. if (mediaIds.indexOf(att.id)!==-1) atts.push(att);
  605. }
  606. }.bind(this));
  607. }
  608. if (atts.length) this.loadMediaOpinion(atts, td.getFirst(), "table");
  609. }
  610. },
  611. loadWorkLogText: function(list, container){
  612. this.lineClass = "logTaskNode";
  613. if( list ){
  614. list.each(function(log, idx){
  615. this.loadWorkLogLine_text(log, idx, container);
  616. }.bind(this));
  617. }else{
  618. this.workLog.each(function(log, idx){
  619. if (this.checkShow(log)) this.loadWorkLogLine_text(log, idx, container);
  620. }.bind(this));
  621. }
  622. },
  623. loadWorkLogLine_text: function(log, idx, container){
  624. log.taskCompletedList.each(function(taskCompleted){
  625. if (this.checkListShow(log, taskCompleted)) this.loadTaskLine_text(taskCompleted, container || this.node, log, false);
  626. }.bind(this));
  627. if (this.json.isTask){
  628. log.taskList.each(function(task){
  629. if (this.checkListShow(log, task)) this.loadTaskLine_text(task, container || this.node, log, true);
  630. }.bind(this));
  631. }
  632. },
  633. loadTaskLine_text: function(task, node, log, isTask){
  634. this.loadTaskLine_default(task, node, log, isTask, "0px", false, true);
  635. },
  636. checkShow: function(log){
  637. var flag = true;
  638. if (this.json.filterScript && this.json.filterScript.code){
  639. this.form.Macro.environment.log = log;
  640. this.form.Macro.environment.list = null;
  641. flag = this.form.Macro.exec(this.json.filterScript.code, this);
  642. }else{
  643. if (this.json.filterActivity.length){
  644. filterActivitys = this.json.filterActivity;
  645. flag = (filterActivitys.indexOf(log.fromActivityName)!==-1);
  646. }
  647. if (this.json.filterActivityAlias){
  648. if (this.json.filterActivityAlias.length){
  649. filterActivityAlias = this.json.filterActivityAlias;
  650. flag = ((log.fromActivityAlias) && filterActivityAlias.indexOf(log.fromActivityAlias)!==-1);
  651. }
  652. }
  653. if (this.json.filterPerson.length){
  654. flag = false;
  655. filterPersons = this.json.filterPerson;
  656. var tmpTaskCompletedList = [];
  657. log.taskCompletedList.each(function(taskCompleted){
  658. if ((filterPersons.indexOf(taskCompleted.person)!==-1) || (filterPersons.indexOf(taskCompleted.identity)!==-1)){
  659. tmpTaskCompletedList.push(taskCompleted);
  660. }
  661. }.bind(this));
  662. if (tmpTaskCompletedList.length){
  663. //log.taskCompletedList = [];
  664. //log.taskCompletedList = tmpTaskCompletedList;
  665. flag = true;
  666. }
  667. }
  668. if (this.json.filterRoute.length){
  669. filterRoutes = this.json.filterRoute;
  670. flag = (filterRoutes.indexOf(log.routeName)!==-1);
  671. }
  672. }
  673. return flag;
  674. },
  675. checkListShow: function(log, list){
  676. var flag = true;
  677. if (this.json.filterScript && this.json.filterScript.code){
  678. this.form.Macro.environment.log = log;
  679. this.form.Macro.environment.list = list;
  680. flag = this.form.Macro.exec(this.json.filterScript.code, this);
  681. }else{
  682. if (this.json.filterPerson.length){
  683. flag = ((filterPersons.indexOf(list.person)!==-1)|| (filterPersons.indexOf(list.identity)!==-1));
  684. }
  685. }
  686. return flag;
  687. },
  688. loadWorkLogDefault: function(list, container){
  689. //var text = this.json.textStyle;
  690. if( list ){
  691. list.each(function(log, idx){
  692. this.loadWorkLogLine_default(log, idx, container);
  693. }.bind(this));
  694. }else{
  695. this.workLog.each(function(log, idx){
  696. if (this.checkShow(log)) this.loadWorkLogLine_default(log, idx, container);
  697. }.bind(this));
  698. }
  699. },
  700. loadWorkLogLine_default: function(log, idx, container){
  701. if (!log.readList) log.readList = [];
  702. if (!log.readCompletedList) log.readCompletedList = [];
  703. if (log.taskCompletedList.length || log.readList.length || log.readCompletedList.length || (this.json.isTask && log.taskList.length)) {
  704. var logActivityNode = new Element("div", {"styles": this.form.css.logActivityNode}).inject(container || this.node);
  705. var titleNode = new Element("div", {"styles": this.form.css.logActivityTitleNode}).inject(logActivityNode);
  706. var childNode = new Element("div", {"styles": this.form.css.logActivityChildNode}).inject(logActivityNode);
  707. var iconNode = new Element("div", {"styles": this.form.css.logActivityIconNode}).inject(titleNode);
  708. var fromAvtivityNode = new Element("div", {"styles": this.form.css.logActivityFromNode}).inject(titleNode);
  709. var arrowNode = new Element("div", {"styles": this.form.css.logActivityArrowNode}).inject(titleNode);
  710. var arrivedAvtivityNode = new Element("div", {"styles": this.form.css.logActivityArrivedNode}).inject(titleNode);
  711. var readActionNode = new Element("div", {"styles": this.form.css.logActivityReadActionNode}).inject(titleNode);
  712. var timeNode = new Element("div", {"styles": this.form.css.logActivityTimeNode}).inject(titleNode);
  713. if (log.connected) {
  714. iconNode.setStyle("background-image", "url(/x_component_process_Xform/$Form/" + this.form.options.style + "/icon/ok14.png)");
  715. } else {
  716. iconNode.setStyle("background-image", "url(/x_component_process_Xform/$Form/" + this.form.options.style + "/icon/rightRed.png)");
  717. }
  718. fromAvtivityNode.set("html", "<b>" + log.fromActivityName + "</b>");
  719. if (log.arrivedActivityName) {
  720. arrowNode.setStyle("background-image", "url(/x_component_process_Xform/$Form/" + this.form.options.style + "/icon/right.png)");
  721. arrivedAvtivityNode.set("html", "<b>" + log.arrivedActivityName + "</b>");
  722. timeNode.set("html", "<b>" + MWF.xApplication.process.Xform.LP.begin + ": </b>" + log.fromTime + "<br/><b>" + MWF.xApplication.process.Xform.LP.end + ": </b>" + log.arrivedTime)
  723. } else {
  724. timeNode.set("html", "<b>" + MWF.xApplication.process.Xform.LP.begin + ": </b>" + log.fromTime)
  725. }
  726. // if ((log.readList && log.readList.length) || (log.readCompletedList && log.readCompletedList.length)){
  727. // readActionNode.set("text", MWF.xApplication.process.Xform.LP.worklogRead);
  728. // }
  729. if ((idx % 2) === 0) {
  730. logActivityNode.setStyles(this.form.css.logActivityNode_even);
  731. titleNode.setStyles(this.form.css.logActivityTitleNode_even);
  732. }
  733. log.taskCompletedList.each(function (taskCompleted) {
  734. if (this.checkListShow(log, taskCompleted)) this.loadTaskLine_default(taskCompleted, childNode, log, false);
  735. }.bind(this));
  736. if (this.json.isShowRead!==false){
  737. var readNames = [];
  738. var readCompletedNames = [];
  739. if (log.readList && log.readList.length){
  740. log.readList.each(function(read){
  741. readNames.push(MWF.name.cn(read.person));
  742. });
  743. }
  744. if (log.readCompletedList && log.readCompletedList.length){
  745. log.readCompletedList.each(function(read){
  746. readCompletedNames.push(MWF.name.cn(read.person));
  747. });
  748. }
  749. //if (readCompletedNames.length)
  750. this.loadReadLine_default(readNames, readCompletedNames, childNode);
  751. }
  752. if (this.json.isTask) {
  753. log.taskList.each(function (task) {
  754. if (this.checkListShow(log, task)) this.loadTaskLine_default(task, childNode, log, true);
  755. }.bind(this));
  756. }
  757. }
  758. },
  759. loadReadLine_default: function(readNames, readCompletedNames, node){
  760. var html = "";
  761. var logReadNode = new Element("div", {"styles": this.form.css.logReadTextNode}).inject(node);
  762. if (readNames.length){
  763. var readStrTitle = readNames.join(", ");
  764. var readStr = (readNames.length>20) ? readNames.slice(0,20).join(", ") : readStrTitle;
  765. html = "<span style='color: #0000ff'>"+(this.json.showReadTitle || MWF.xApplication.process.Xform.LP.showReadTitle)+": </span>"+readStr+"<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
  766. //var logReadPersonNode = new Element("div", {"styles": this.form.css.logReadTextNode}).inject(logReadNode);
  767. }
  768. if (readCompletedNames.length){
  769. var readCompletedStrTitle = readCompletedNames.join(", ");
  770. var readCompletedStr = (readCompletedNames.length>20) ? readCompletedNames.slice(0,20).join(", ") : readCompletedStrTitle;
  771. html += "<span style='color: #0000ff'>"+(this.json.showReadCompletedTitle || MWF.xApplication.process.Xform.LP.showReadCompletedTitle)+": </span>"+readCompletedStr+"<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
  772. }
  773. if (html) logReadNode.set("html", html);
  774. },
  775. loadTaskLine_default: function(task, node, log, isTask, margin, isZebra, nodeStyle){
  776. var style = "logTaskNode";
  777. var textStyle = "logTaskFloatTextNode";
  778. if (nodeStyle){
  779. style = "logTaskTextNode";
  780. textStyle = "logTaskTextNode";
  781. }
  782. var logTaskNode = new Element("div", {"styles": this.form.css[style]}).inject(node);
  783. var iconNode = new Element("div", {"styles": this.form.css.logTaskIconNode}).inject(logTaskNode);
  784. var textNode = new Element("div", {"styles": this.form.css[textStyle]}).inject(logTaskNode);
  785. if (isZebra){
  786. logTaskNode.setStyles(this.form.css[this.lineClass]);
  787. if (this.lineClass === "logTaskNode"){
  788. this.lineClass = "logTaskNode_even";
  789. }else{
  790. this.lineClass = "logTaskNode";
  791. }
  792. }
  793. if (margin) iconNode.setStyle("margin-left", margin);
  794. var left = iconNode.getStyle("margin-left").toInt();
  795. left = left + 28;
  796. var html;
  797. var company = "";
  798. if (!isTask){
  799. company = (task.unitList) ? task.unitList[task.unitList.length-1] : "";
  800. var html = this.json.textStyle;
  801. if (this.json.textStyleScript && this.json.textStyleScript.code){
  802. this.form.Macro.environment.log = log;
  803. this.form.Macro.environment.list = null;
  804. html = this.form.Macro.exec(this.json.textStyleScript.code, this);
  805. }
  806. html = html.replace(/\{person\}/g, task.person.substring(0, task.person.indexOf("@")));
  807. html = html.replace(/\{department\}/g, task.unit.substring(0, task.unit.indexOf("@")));
  808. html = html.replace(/\{route\}/g, task.routeName);
  809. html = html.replace(/\{time\}/g, task.completedTime);
  810. html = html.replace(/\{date\}/g, new Date().parse(task.completedTime).format("%Y-%m-%d"));
  811. html = html.replace(/\{opinion\}/g, task.opinion);
  812. html = html.replace(/\{company\}/g, company.substring(0, company.indexOf("@")));
  813. html = html.replace(/\{startTime\}/g, task.startTime);
  814. html = html.replace(/\{startDate\}/g, new Date().parse(task.startTime).format("%Y-%m-%d"));
  815. html = html.replace(/\{activity\}/g, log.fromActivityName);
  816. html = html.replace(/\{arrivedActivity\}/g, log.arrivedActivityName);
  817. html = html.replace(/\{img\}/g, "<span class='mwf_log_img'></span>");
  818. //var html = MWF.xApplication.process.Xform.LP.nextUser + task.person+"("+task.department+")" +", "+
  819. // MWF.xApplication.process.Xform.LP.selectRoute + ": [" + task.routeName + "], " +
  820. // MWF.xApplication.process.Xform.LP.submitAt + ": " + task.completedTime+ ", " +
  821. // MWF.xApplication.process.Xform.LP.idea + ": <font style=\"color: #00F\">" + (task.opinion || "")+"</font>";
  822. textNode.set("html", html);
  823. var imgNode = textNode.getElement(".mwf_log_img");
  824. if (task.mediaOpinion){
  825. var mediaIds = task.mediaOpinion.split(",");
  826. var atts = [];
  827. if (this.form.businessData.attachmentList){
  828. this.form.businessData.attachmentList.each(function(att){
  829. if (att.site==="$mediaOpinion"){
  830. if (mediaIds.indexOf(att.id)!==-1) atts.push(att);
  831. }
  832. }.bind(this));
  833. }
  834. if (atts.length){
  835. if (imgNode){
  836. this.loadMediaOpinion_show(atts, task, imgNode, true);
  837. // atts.each(function(att){
  838. // this.loadMediaOpinion_image_show(att, task, imgNode);
  839. // }.bind(this));
  840. }else{
  841. this.loadMediaOpinion(atts, textNode, "default");
  842. }
  843. }
  844. }
  845. }else{
  846. //company = task.unitList[task.unitList.length-1];
  847. html = task.person.substring(0, task.person.indexOf("@"))+"("+task.unit.substring(0, task.unit.indexOf("@"))+")" + MWF.xApplication.process.Xform.LP.processing+", "+
  848. MWF.xApplication.process.Xform.LP.comeTime + ": " + task.startTime;
  849. textNode.set("html", html);
  850. iconNode.setStyle("background-image", "url("+"/x_component_process_Xform/$Form/"+this.form.options.style+"/icon/rightRed.png)");
  851. }
  852. },
  853. loadMediaOpinion: function(atts, node, type){
  854. atts.each(function(att){
  855. if (!att.type) att.type = "image";
  856. if (att.type.indexOf("image")!==-1){
  857. if( type === "table" && !layout.mobile ){
  858. this.loadMediaOpinion_image_tooltip(att, node);
  859. }else{
  860. this.loadMediaOpinion_image(att, node);
  861. }
  862. }else if(att.type.indexOf("video")!==-1){
  863. this.loadMediaOpinion_video(att, node);
  864. }else if(att.type.indexOf("audio")!==-1){
  865. this.loadMediaOpinion_voice(att, node);
  866. }else{
  867. if( type === "table" && !layout.mobile ){
  868. this.loadMediaOpinion_image_tooltip(att, node);
  869. }else{
  870. this.loadMediaOpinion_image(att, node);
  871. }
  872. }
  873. }.bind(this));
  874. },
  875. getMediaOpinionUrl: function(att){
  876. var action = MWF.Actions.get("x_processplatform_assemble_surface");
  877. var url = action.action.actions["getAttachmentStream"].uri;
  878. if (this.form.businessData.workCompleted){
  879. url = action.action.actions["getWorkcompletedAttachmentStream"].uri;
  880. url = url.replace("{id}", att.id);
  881. url = url.replace("{workCompletedId}", this.form.businessData.workCompleted.id);
  882. }else{
  883. url = url.replace("{id}", att.id);
  884. url = url.replace("{workid}", this.form.businessData.work.id);
  885. }
  886. url = action.action.address+url;
  887. return url;
  888. },
  889. loadMediaOpinion_image_tooltip : function(att, node){
  890. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  891. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/image.png')");
  892. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_image);
  893. if( !this.MTooltipsLoaded )o2.xDesktop.requireApp("Template", "MTooltips", null, false);
  894. this.MTooltipsLoaded = true;
  895. var tooltip = new MTooltips(this.form.app.content, iconNode, this.form.app, null, {
  896. axis : "y", "delay" : 350,
  897. nodeStyles : {
  898. "max-width" : "800px"
  899. }
  900. });
  901. tooltip.contentNode = new Element("div",{
  902. styles : { width : "100%" , height : "100%" }
  903. });
  904. var img = new Element("img", {
  905. "src": this.getMediaOpinionUrl(att),
  906. "events" : {
  907. load : function(ev){
  908. var nh = ev.target.naturalHeight;
  909. var nw = ev.target.naturalWidth;
  910. if( this.isNumber( this.json.handwritingWidth ) || this.isNumber( this.json.handwritingHeight ) ){
  911. var size = this.getImageSize( nw, nh );
  912. ev.target.setStyles(size);
  913. }else{
  914. var x = Math.min(nw, 800);
  915. ev.target.setStyles({"width": ""+ x +"px"});
  916. }
  917. }.bind(this)
  918. }
  919. }).inject(tooltip.contentNode);
  920. },
  921. loadMediaOpinion_image: function(att, node){
  922. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  923. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/image.png')");
  924. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_image);
  925. iconNode.addEvents({
  926. "click": function(e){
  927. if (e.target.mediaOpinionContentNode) return "";
  928. var url = this.getMediaOpinionUrl(att);
  929. // if (this.mediaOpinionContentNode){
  930. // this.mediaOpinionContentNode.destroy();
  931. // this.mediaOpinionContentNode = null;
  932. // }
  933. var imgNode = new Element("div", {"styles": this.form.css.logMediaOpinionContent}).inject(node.getParent(),"after");
  934. if (!layout.mobile) imgNode.setStyle("margin-left", "40px");
  935. //this.mediaOpinionContentNode = imgNode;
  936. e.target.mediaOpinionContentNode = imgNode;
  937. var imgCloseNode = new Element("div", {"styles": this.form.css.logMediaOpinionContentClose}).inject(imgNode);
  938. imgCloseNode.addEvent("click", function(){ imgNode.destroy(); e.target.mediaOpinionContentNode = "";});
  939. var imgAreaNode = new Element("div", {"styles": this.form.css.logMediaOpinionContentArea}).inject(imgNode);
  940. //var height = 260;
  941. //var width = 390;
  942. var width;
  943. if (layout.mobile){
  944. width = node.getParent().getParent().getSize().x-2;
  945. //height = width*2/3;
  946. }else{
  947. var pNode = node.getParent().getParent();
  948. var offset = imgNode.getPosition( pNode );
  949. width = Math.min( pNode.getSize().x - offset.x - 42, 800 );
  950. }
  951. var img = new Element("img", {
  952. "src": url,
  953. "styles" : { width : width+"px" }, //�ʼ�޶�һ�¿�ȣ���Ҫ��ҳ�涶��
  954. "events" : {
  955. load : function(ev){
  956. var nh = ev.target.naturalHeight;
  957. var nw = ev.target.naturalWidth;
  958. if( !layout.mobile && ( this.isNumber( this.json.handwritingWidth ) || this.isNumber( this.json.handwritingHeight ) ) ){
  959. var size = this.getImageSize( nw, nh );
  960. img.setStyles(size);
  961. imgNode.setStyles(size);
  962. }else{
  963. var x = Math.min(nw, width);
  964. img.setStyles({"width": ""+ x +"px"}); //���յĿ��
  965. imgNode.setStyles({"width": ""+ x +"px"});
  966. }
  967. }.bind(this)
  968. }
  969. }).inject(imgAreaNode);
  970. //img.setStyles({"width": ""+width+"px"});
  971. //imgNode.setStyles({"width": ""+width+"px"});
  972. //img.setStyles({"width": ""+width+"px", "height": ""+height+"px"});
  973. //imgNode.setStyles({"width": ""+width+"px", "height": ""+height+"px"});
  974. // var size = img.getSize();
  975. // var x_y = size.x/size.y;
  976. //if (size.y>260){
  977. //}
  978. var p = iconNode.getPosition(this.form.app.content);
  979. var s = iconNode.getSize();
  980. var size = (layout.mobile) ? {"x": width, "y": height}: imgNode.getSize();
  981. var contentSize = this.form.app.content.getSize();
  982. var contentScroll = (layout.mobile) ? document.body.getFirst().getScroll() : {"x": 0, "y": 0};
  983. var y = p.y-size.y;
  984. var x = p.x+s.x/2-size.x/2;
  985. if (x<10) x = 10;
  986. if (x+size.x>contentSize.x-10) x = contentSize.x-size.x-20;
  987. if (y+size.y>contentSize.y-10) y = contentSize.y-size.y-20;
  988. if (y<10) y = 10;
  989. y=y+contentScroll.y;
  990. if (layout.mobile){
  991. x = 0;
  992. }
  993. // imgNode.setStyles({
  994. // "top": ""+y+"px",
  995. // "left": ""+x+"px"
  996. // });
  997. // this.hideMediaOpinionNodeFun = this.hideMediaOpinionNode.bind(this);
  998. // this.form.node.addEvent("mousedown", this.hideMediaOpinionNodeFun);
  999. e.stopPropagation();
  1000. }.bind(this)
  1001. });
  1002. },
  1003. hideMediaOpinionNode: function(){
  1004. if (this.mediaOpinionContentNode){
  1005. this.mediaOpinionContentNode.destroy();
  1006. this.mediaOpinionContentNode = null;
  1007. }
  1008. // if (this.hideMediaOpinionNodeFun) this.form.node.removeEvent("click", this.hideMediaOpinionNodeFun);
  1009. },
  1010. loadMediaOpinion_video: function(att, node){
  1011. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  1012. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/video.png')");
  1013. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_video);
  1014. },
  1015. loadMediaOpinion_voice: function(att, node){
  1016. // this.form.css.logMediaIcon.width = "60px";
  1017. // var iconNode = new Element("audio", {
  1018. // "styles": this.form.css.logMediaIcon,
  1019. // "controls": true,
  1020. // "html": "<source src='"+url+"' type='audio/wav'></source>"
  1021. // }).inject(node.getParent());
  1022. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  1023. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/voice.png')");
  1024. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_voice);
  1025. iconNode.addEvents({
  1026. "click": function(e){
  1027. var url = this.getMediaOpinionUrl(att);
  1028. this.audioNode = new Element("audio", {"loop": false});
  1029. this.audioNode.set("src", url);
  1030. this.audioNode.play();
  1031. e.stopPropagation();
  1032. }.bind(this)
  1033. });
  1034. }
  1035. });