Log.js 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153
  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 = Array.clone(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 && 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.processingType=="empower") ? "授权" : task.routeName || "");
  596. td = tr.insertCell(5).setStyles(this.form.css[style]);
  597. opinion = (task.processingType=="empower") ? "授权给"+ o2.name.cn(task.empowerToIdentity || "") : "<div style='line-height: 28px; float:left'>" + task.opinion || ""+"</div>";
  598. td.set("html", opinion);
  599. if (task.mediaOpinion){
  600. var mediaIds = task.mediaOpinion.split(",");
  601. var atts = [];
  602. if (this.form.businessData.attachmentList){
  603. this.form.businessData.attachmentList.each(function(att){
  604. if (att.site==="$mediaOpinion"){
  605. if (mediaIds.indexOf(att.id)!==-1) atts.push(att);
  606. }
  607. }.bind(this));
  608. }
  609. if (atts.length) this.loadMediaOpinion(atts, td.getFirst(), "table");
  610. }
  611. },
  612. loadWorkLogText: function(list, container){
  613. this.lineClass = "logTaskNode";
  614. if( list ){
  615. list.each(function(log, idx){
  616. this.loadWorkLogLine_text(log, idx, container);
  617. }.bind(this));
  618. }else{
  619. this.workLog.each(function(log, idx){
  620. if (this.checkShow(log)) this.loadWorkLogLine_text(log, idx, container);
  621. }.bind(this));
  622. }
  623. },
  624. loadWorkLogLine_text: function(log, idx, container){
  625. log.taskCompletedList.each(function(taskCompleted){
  626. if (this.checkListShow(log, taskCompleted)) this.loadTaskLine_text(taskCompleted, container || this.node, log, false);
  627. }.bind(this));
  628. if (this.json.isTask){
  629. log.taskList.each(function(task){
  630. if (this.checkListShow(log, task)) this.loadTaskLine_text(task, container || this.node, log, true);
  631. }.bind(this));
  632. }
  633. },
  634. loadTaskLine_text: function(task, node, log, isTask){
  635. this.loadTaskLine_default(task, node, log, isTask, "0px", false, true);
  636. },
  637. checkShow: function(log){
  638. var flag = true;
  639. if (this.json.filterScript && this.json.filterScript.code){
  640. this.form.Macro.environment.log = log;
  641. this.form.Macro.environment.list = null;
  642. flag = this.form.Macro.exec(this.json.filterScript.code, this);
  643. }else{
  644. if (this.json.filterActivity.length){
  645. filterActivitys = this.json.filterActivity;
  646. flag = (filterActivitys.indexOf(log.fromActivityName)!==-1);
  647. }
  648. if (this.json.filterActivityAlias){
  649. if (this.json.filterActivityAlias.length){
  650. filterActivityAlias = this.json.filterActivityAlias;
  651. flag = ((log.fromActivityAlias) && filterActivityAlias.indexOf(log.fromActivityAlias)!==-1);
  652. }
  653. }
  654. if (this.json.filterPerson.length){
  655. flag = false;
  656. filterPersons = this.json.filterPerson;
  657. var tmpTaskCompletedList = [];
  658. log.taskCompletedList.each(function(taskCompleted){
  659. if ((filterPersons.indexOf(taskCompleted.person)!==-1) || (filterPersons.indexOf(taskCompleted.identity)!==-1)){
  660. tmpTaskCompletedList.push(taskCompleted);
  661. }
  662. }.bind(this));
  663. if (tmpTaskCompletedList.length){
  664. //log.taskCompletedList = [];
  665. //log.taskCompletedList = tmpTaskCompletedList;
  666. flag = true;
  667. }
  668. }
  669. if (this.json.filterRoute.length){
  670. filterRoutes = this.json.filterRoute;
  671. flag = (filterRoutes.indexOf(log.routeName)!==-1);
  672. }
  673. }
  674. return flag;
  675. },
  676. checkListShow: function(log, list){
  677. var flag = true;
  678. if (this.json.filterScript && this.json.filterScript.code){
  679. this.form.Macro.environment.log = log;
  680. this.form.Macro.environment.list = list;
  681. flag = this.form.Macro.exec(this.json.filterScript.code, this);
  682. }else{
  683. if (this.json.filterPerson.length){
  684. flag = ((filterPersons.indexOf(list.person)!==-1)|| (filterPersons.indexOf(list.identity)!==-1));
  685. }
  686. }
  687. return flag;
  688. },
  689. loadWorkLogDefault: function(list, container){
  690. //var text = this.json.textStyle;
  691. if( list ){
  692. list.each(function(log, idx){
  693. this.loadWorkLogLine_default(log, idx, container);
  694. }.bind(this));
  695. }else{
  696. this.workLog.each(function(log, idx){
  697. if (this.checkShow(log)) this.loadWorkLogLine_default(log, idx, container);
  698. }.bind(this));
  699. }
  700. },
  701. loadWorkLogLine_default: function(log, idx, container){
  702. if (!log.readList) log.readList = [];
  703. if (!log.readCompletedList) log.readCompletedList = [];
  704. if (log.taskCompletedList.length || log.readList.length || log.readCompletedList.length || (this.json.isTask && log.taskList.length)) {
  705. var logActivityNode = new Element("div", {"styles": this.form.css.logActivityNode}).inject(container || this.node);
  706. var titleNode = new Element("div", {"styles": this.form.css.logActivityTitleNode}).inject(logActivityNode);
  707. var childNode = new Element("div", {"styles": this.form.css.logActivityChildNode}).inject(logActivityNode);
  708. var iconNode = new Element("div", {"styles": this.form.css.logActivityIconNode}).inject(titleNode);
  709. var fromAvtivityNode = new Element("div", {"styles": this.form.css.logActivityFromNode}).inject(titleNode);
  710. var arrowNode = new Element("div", {"styles": this.form.css.logActivityArrowNode}).inject(titleNode);
  711. var arrivedAvtivityNode = new Element("div", {"styles": this.form.css.logActivityArrivedNode}).inject(titleNode);
  712. var readActionNode = new Element("div", {"styles": this.form.css.logActivityReadActionNode}).inject(titleNode);
  713. var timeNode = new Element("div", {"styles": this.form.css.logActivityTimeNode}).inject(titleNode);
  714. if (log.connected) {
  715. iconNode.setStyle("background-image", "url(/x_component_process_Xform/$Form/" + this.form.options.style + "/icon/ok14.png)");
  716. } else {
  717. iconNode.setStyle("background-image", "url(/x_component_process_Xform/$Form/" + this.form.options.style + "/icon/rightRed.png)");
  718. }
  719. fromAvtivityNode.set("html", "<b>" + log.fromActivityName + "</b>");
  720. if (log.arrivedActivityName) {
  721. arrowNode.setStyle("background-image", "url(/x_component_process_Xform/$Form/" + this.form.options.style + "/icon/right.png)");
  722. arrivedAvtivityNode.set("html", "<b>" + log.arrivedActivityName + "</b>");
  723. timeNode.set("html", "<b>" + MWF.xApplication.process.Xform.LP.begin + ": </b>" + log.fromTime + "<br/><b>" + MWF.xApplication.process.Xform.LP.end + ": </b>" + log.arrivedTime)
  724. } else {
  725. timeNode.set("html", "<b>" + MWF.xApplication.process.Xform.LP.begin + ": </b>" + log.fromTime)
  726. }
  727. // if ((log.readList && log.readList.length) || (log.readCompletedList && log.readCompletedList.length)){
  728. // readActionNode.set("text", MWF.xApplication.process.Xform.LP.worklogRead);
  729. // }
  730. if ((idx % 2) === 0) {
  731. logActivityNode.setStyles(this.form.css.logActivityNode_even);
  732. titleNode.setStyles(this.form.css.logActivityTitleNode_even);
  733. }
  734. log.taskCompletedList.each(function (taskCompleted) {
  735. if (this.checkListShow(log, taskCompleted)) this.loadTaskLine_default(taskCompleted, childNode, log, false);
  736. }.bind(this));
  737. if (this.json.isShowRead!==false){
  738. var readNames = [];
  739. var readCompletedNames = [];
  740. if (log.readList && log.readList.length){
  741. log.readList.each(function(read){
  742. readNames.push(MWF.name.cn(read.person));
  743. });
  744. }
  745. if (log.readCompletedList && log.readCompletedList.length){
  746. log.readCompletedList.each(function(read){
  747. readCompletedNames.push(MWF.name.cn(read.person));
  748. });
  749. }
  750. //if (readCompletedNames.length)
  751. this.loadReadLine_default(readNames, readCompletedNames, childNode);
  752. }
  753. if (this.json.isTask) {
  754. log.taskList.each(function (task) {
  755. if (this.checkListShow(log, task)) this.loadTaskLine_default(task, childNode, log, true);
  756. }.bind(this));
  757. }
  758. }
  759. },
  760. loadReadLine_default: function(readNames, readCompletedNames, node){
  761. var html = "";
  762. var logReadNode = new Element("div", {"styles": this.form.css.logReadTextNode}).inject(node);
  763. if (readNames.length){
  764. var readStrTitle = readNames.join(", ");
  765. var readStr = (readNames.length>20) ? readNames.slice(0,20).join(", ") : readStrTitle;
  766. html = "<span style='color: #0000ff'>"+(this.json.showReadTitle || MWF.xApplication.process.Xform.LP.showReadTitle)+": </span>"+readStr+"<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
  767. //var logReadPersonNode = new Element("div", {"styles": this.form.css.logReadTextNode}).inject(logReadNode);
  768. }
  769. if (readCompletedNames.length){
  770. var readCompletedStrTitle = readCompletedNames.join(", ");
  771. var readCompletedStr = (readCompletedNames.length>20) ? readCompletedNames.slice(0,20).join(", ") : readCompletedStrTitle;
  772. html += "<span style='color: #0000ff'>"+(this.json.showReadCompletedTitle || MWF.xApplication.process.Xform.LP.showReadCompletedTitle)+": </span>"+readCompletedStr+"<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>";
  773. }
  774. if (html) logReadNode.set("html", html);
  775. },
  776. loadTaskLine_default: function(task, node, log, isTask, margin, isZebra, nodeStyle){
  777. var style = "logTaskNode";
  778. var textStyle = "logTaskFloatTextNode";
  779. if (nodeStyle){
  780. style = "logTaskTextNode";
  781. textStyle = "logTaskTextNode";
  782. }
  783. var logTaskNode = new Element("div", {"styles": this.form.css[style]}).inject(node);
  784. var iconNode = new Element("div", {"styles": this.form.css.logTaskIconNode}).inject(logTaskNode);
  785. var textNode = new Element("div", {"styles": this.form.css[textStyle]}).inject(logTaskNode);
  786. if (isZebra){
  787. logTaskNode.setStyles(this.form.css[this.lineClass]);
  788. if (this.lineClass === "logTaskNode"){
  789. this.lineClass = "logTaskNode_even";
  790. }else{
  791. this.lineClass = "logTaskNode";
  792. }
  793. }
  794. if (margin) iconNode.setStyle("margin-left", margin);
  795. var left = iconNode.getStyle("margin-left").toInt();
  796. left = left + 28;
  797. var html;
  798. var company = "";
  799. if (!isTask){
  800. company = (task.unitList) ? task.unitList[task.unitList.length-1] : "";
  801. var html = this.json.textStyle;
  802. if (task.processingType=="empower") html = "<font style='color:#ff5400;'>{person}</font>({department})授权给<font style='color:#ff5400;'>{empowerTo}</font>处理。({time})</font>";
  803. var nextTasks = o2.name.cns(log.nextManualTaskIdentityList).join(", ");
  804. var nextTaskCompleteds = o2.name.cns(log.nextManualTaskCompletedIdentityList).join(", ");
  805. var nextTaskParts = [];
  806. //if (nextTasks) nextTaskParts.push(nextTasks+" 正在处理");
  807. //if (nextTaskCompleteds) nextTaskParts.push(nextTaskCompleteds+" 处理完成");
  808. if (nextTasks) nextTaskParts.push(nextTasks);
  809. if (nextTaskCompleteds) nextTaskParts.push(nextTaskCompleteds);
  810. var nextTaskText = nextTaskParts.join(", ");
  811. if (this.json.textStyleScript && this.json.textStyleScript.code){
  812. this.form.Macro.environment.log = log;
  813. this.form.Macro.environment.list = null;
  814. html = this.form.Macro.exec(this.json.textStyleScript.code, this);
  815. }
  816. var person = task.person.substring(0, task.person.indexOf("@"));
  817. if( task.processingType === "processing" && task.empowerFromIdentity){
  818. person = person+" 代 "+o2.name.cn(task.empowerFromIdentity||"");
  819. }
  820. html = html.replace(/\{person\}/g, person );
  821. html = html.replace(/\{department\}/g, task.unit.substring(0, task.unit.indexOf("@")));
  822. html = html.replace(/\{route\}/g, task.routeName);
  823. html = html.replace(/\{time\}/g, task.completedTime);
  824. html = html.replace(/\{date\}/g, new Date().parse(task.completedTime).format("%Y-%m-%d"));
  825. html = html.replace(/\{opinion\}/g, task.opinion);
  826. html = html.replace(/\{company\}/g, company.substring(0, company.indexOf("@")));
  827. html = html.replace(/\{startTime\}/g, task.startTime);
  828. html = html.replace(/\{startDate\}/g, new Date().parse(task.startTime).format("%Y-%m-%d"));
  829. html = html.replace(/\{activity\}/g, log.fromActivityName);
  830. html = html.replace(/\{arrivedActivity\}/g, log.arrivedActivityName);
  831. html = html.replace(/\{img\}/g, "<span class='mwf_log_img'></span>");
  832. html = html.replace(/\{empowerTo\}/g, ((task.empowerToIdentity) ? o2.name.cn(task.empowerToIdentity) : ""));
  833. html = html.replace(/\{nextTask\}/g, nextTasks);
  834. html = html.replace(/\{nextTaskCompleted\}/g, nextTaskCompleteds);
  835. html = html.replace(/\{next\}/g, nextTaskText);
  836. //var html = MWF.xApplication.process.Xform.LP.nextUser + task.person+"("+task.department+")" +", "+
  837. // MWF.xApplication.process.Xform.LP.selectRoute + ": [" + task.routeName + "], " +
  838. // MWF.xApplication.process.Xform.LP.submitAt + ": " + task.completedTime+ ", " +
  839. // MWF.xApplication.process.Xform.LP.idea + ": <font style=\"color: #00F\">" + (task.opinion || "")+"</font>";
  840. textNode.set("html", html);
  841. var imgNode = textNode.getElement(".mwf_log_img");
  842. if (task.mediaOpinion){
  843. var mediaIds = task.mediaOpinion.split(",");
  844. var atts = [];
  845. if (this.form.businessData.attachmentList){
  846. this.form.businessData.attachmentList.each(function(att){
  847. if (att.site==="$mediaOpinion"){
  848. if (mediaIds.indexOf(att.id)!==-1) atts.push(att);
  849. }
  850. }.bind(this));
  851. }
  852. if (atts.length){
  853. if (imgNode){
  854. this.loadMediaOpinion_show(atts, task, imgNode, true);
  855. // atts.each(function(att){
  856. // this.loadMediaOpinion_image_show(att, task, imgNode);
  857. // }.bind(this));
  858. }else{
  859. this.loadMediaOpinion(atts, textNode, "default");
  860. }
  861. }
  862. }
  863. }else{
  864. //company = task.unitList[task.unitList.length-1];
  865. html = task.person.substring(0, task.person.indexOf("@"))+"("+task.unit.substring(0, task.unit.indexOf("@"))+")" + MWF.xApplication.process.Xform.LP.processing+", "+
  866. MWF.xApplication.process.Xform.LP.comeTime + ": " + task.startTime;
  867. textNode.set("html", html);
  868. iconNode.setStyle("background-image", "url("+"/x_component_process_Xform/$Form/"+this.form.options.style+"/icon/rightRed.png)");
  869. }
  870. },
  871. loadMediaOpinion: function(atts, node, type){
  872. atts.each(function(att){
  873. if (!att.type) att.type = "image";
  874. if (att.type.indexOf("image")!==-1){
  875. if( type === "table" && !layout.mobile ){
  876. this.loadMediaOpinion_image_tooltip(att, node);
  877. }else{
  878. this.loadMediaOpinion_image(att, node);
  879. }
  880. }else if(att.type.indexOf("video")!==-1){
  881. this.loadMediaOpinion_video(att, node);
  882. }else if(att.type.indexOf("audio")!==-1){
  883. this.loadMediaOpinion_voice(att, node);
  884. }else{
  885. if( type === "table" && !layout.mobile ){
  886. this.loadMediaOpinion_image_tooltip(att, node);
  887. }else{
  888. this.loadMediaOpinion_image(att, node);
  889. }
  890. }
  891. }.bind(this));
  892. },
  893. getMediaOpinionUrl: function(att){
  894. var action = MWF.Actions.get("x_processplatform_assemble_surface");
  895. var url = action.action.actions["getAttachmentStream"].uri;
  896. if (this.form.businessData.workCompleted){
  897. url = action.action.actions["getWorkcompletedAttachmentStream"].uri;
  898. url = url.replace("{id}", att.id);
  899. url = url.replace("{workCompletedId}", this.form.businessData.workCompleted.id);
  900. }else{
  901. url = url.replace("{id}", att.id);
  902. url = url.replace("{workid}", this.form.businessData.work.id);
  903. }
  904. url = action.action.address+url;
  905. return url;
  906. },
  907. loadMediaOpinion_image_tooltip : function(att, node){
  908. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  909. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/image.png')");
  910. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_image);
  911. if( !this.MTooltipsLoaded )o2.xDesktop.requireApp("Template", "MTooltips", null, false);
  912. this.MTooltipsLoaded = true;
  913. var tooltip = new MTooltips(this.form.app.content, iconNode, this.form.app, null, {
  914. axis : "y", "delay" : 350,
  915. nodeStyles : {
  916. "max-width" : "800px"
  917. }
  918. });
  919. tooltip.contentNode = new Element("div",{
  920. styles : { width : "100%" , height : "100%" }
  921. });
  922. var img = new Element("img", {
  923. "src": this.getMediaOpinionUrl(att),
  924. "events" : {
  925. load : function(ev){
  926. var nh = ev.target.naturalHeight;
  927. var nw = ev.target.naturalWidth;
  928. if( this.isNumber( this.json.handwritingWidth ) || this.isNumber( this.json.handwritingHeight ) ){
  929. var size = this.getImageSize( nw, nh );
  930. ev.target.setStyles(size);
  931. }else{
  932. var x = Math.min(nw, 800);
  933. ev.target.setStyles({"width": ""+ x +"px"});
  934. }
  935. }.bind(this)
  936. }
  937. }).inject(tooltip.contentNode);
  938. },
  939. loadMediaOpinion_image: function(att, node){
  940. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  941. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/image.png')");
  942. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_image);
  943. iconNode.addEvents({
  944. "click": function(e){
  945. if (e.target.mediaOpinionContentNode) return "";
  946. var url = this.getMediaOpinionUrl(att);
  947. // if (this.mediaOpinionContentNode){
  948. // this.mediaOpinionContentNode.destroy();
  949. // this.mediaOpinionContentNode = null;
  950. // }
  951. var imgNode = new Element("div", {"styles": this.form.css.logMediaOpinionContent}).inject(node.getParent(),"after");
  952. if (!layout.mobile) imgNode.setStyle("margin-left", "40px");
  953. //this.mediaOpinionContentNode = imgNode;
  954. e.target.mediaOpinionContentNode = imgNode;
  955. var imgCloseNode = new Element("div", {"styles": this.form.css.logMediaOpinionContentClose}).inject(imgNode);
  956. imgCloseNode.addEvent("click", function(){ imgNode.destroy(); e.target.mediaOpinionContentNode = "";});
  957. var imgAreaNode = new Element("div", {"styles": this.form.css.logMediaOpinionContentArea}).inject(imgNode);
  958. //var height = 260;
  959. //var width = 390;
  960. var width;
  961. if (layout.mobile){
  962. width = node.getParent().getParent().getSize().x-2;
  963. //height = width*2/3;
  964. }else{
  965. var pNode = node.getParent().getParent();
  966. var offset = imgNode.getPosition( pNode );
  967. width = Math.min( pNode.getSize().x - offset.x - 42, 800 );
  968. }
  969. var img = new Element("img", {
  970. "src": url,
  971. "styles" : { width : width+"px" }, //�ʼ�޶�һ�¿�ȣ���Ҫ��ҳ�涶��
  972. "events" : {
  973. load : function(ev){
  974. var nh = ev.target.naturalHeight;
  975. var nw = ev.target.naturalWidth;
  976. if( !layout.mobile && ( this.isNumber( this.json.handwritingWidth ) || this.isNumber( this.json.handwritingHeight ) ) ){
  977. var size = this.getImageSize( nw, nh );
  978. img.setStyles(size);
  979. imgNode.setStyles(size);
  980. }else{
  981. var x = Math.min(nw, width);
  982. img.setStyles({"width": ""+ x +"px"}); //���յĿ��
  983. imgNode.setStyles({"width": ""+ x +"px"});
  984. }
  985. }.bind(this)
  986. }
  987. }).inject(imgAreaNode);
  988. //img.setStyles({"width": ""+width+"px"});
  989. //imgNode.setStyles({"width": ""+width+"px"});
  990. //img.setStyles({"width": ""+width+"px", "height": ""+height+"px"});
  991. //imgNode.setStyles({"width": ""+width+"px", "height": ""+height+"px"});
  992. // var size = img.getSize();
  993. // var x_y = size.x/size.y;
  994. //if (size.y>260){
  995. //}
  996. var p = iconNode.getPosition(this.form.app.content);
  997. var s = iconNode.getSize();
  998. var size = (layout.mobile) ? {"x": width, "y": height}: imgNode.getSize();
  999. var contentSize = this.form.app.content.getSize();
  1000. var contentScroll = (layout.mobile) ? document.body.getFirst().getScroll() : {"x": 0, "y": 0};
  1001. var y = p.y-size.y;
  1002. var x = p.x+s.x/2-size.x/2;
  1003. if (x<10) x = 10;
  1004. if (x+size.x>contentSize.x-10) x = contentSize.x-size.x-20;
  1005. if (y+size.y>contentSize.y-10) y = contentSize.y-size.y-20;
  1006. if (y<10) y = 10;
  1007. y=y+contentScroll.y;
  1008. if (layout.mobile){
  1009. x = 0;
  1010. }
  1011. // imgNode.setStyles({
  1012. // "top": ""+y+"px",
  1013. // "left": ""+x+"px"
  1014. // });
  1015. // this.hideMediaOpinionNodeFun = this.hideMediaOpinionNode.bind(this);
  1016. // this.form.node.addEvent("mousedown", this.hideMediaOpinionNodeFun);
  1017. e.stopPropagation();
  1018. }.bind(this)
  1019. });
  1020. },
  1021. hideMediaOpinionNode: function(){
  1022. if (this.mediaOpinionContentNode){
  1023. this.mediaOpinionContentNode.destroy();
  1024. this.mediaOpinionContentNode = null;
  1025. }
  1026. // if (this.hideMediaOpinionNodeFun) this.form.node.removeEvent("click", this.hideMediaOpinionNodeFun);
  1027. },
  1028. loadMediaOpinion_video: function(att, node){
  1029. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  1030. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/video.png')");
  1031. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_video);
  1032. },
  1033. loadMediaOpinion_voice: function(att, node){
  1034. // this.form.css.logMediaIcon.width = "60px";
  1035. // var iconNode = new Element("audio", {
  1036. // "styles": this.form.css.logMediaIcon,
  1037. // "controls": true,
  1038. // "html": "<source src='"+url+"' type='audio/wav'></source>"
  1039. // }).inject(node.getParent());
  1040. var iconNode = new Element("div", {"styles": this.form.css.logMediaIcon}).inject(node.getParent());
  1041. iconNode.setStyle("background-image", "url('"+this.form.path+this.form.options.style+"/icon/voice.png')");
  1042. iconNode.set("title", MWF.xApplication.process.Xform.LP.mediaOpinion_voice);
  1043. iconNode.addEvents({
  1044. "click": function(e){
  1045. var url = this.getMediaOpinionUrl(att);
  1046. this.audioNode = new Element("audio", {"loop": false});
  1047. this.audioNode.set("src", url);
  1048. this.audioNode.play();
  1049. e.stopPropagation();
  1050. }.bind(this)
  1051. });
  1052. }
  1053. });