makehtml.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /*
  2. [Discuz!] (C)2001-2099 Comsenz Inc.
  3. This is NOT a freeware, use is subject to license terms
  4. $Id: makehtml.js 33047 2013-04-12 08:46:56Z zhangguosheng $
  5. */
  6. function make_html(url, obj) {
  7. var x = Ajax();
  8. if(url && url.indexOf('?') < 0) {
  9. url = url + '?';
  10. }
  11. x.getJSON(url+'&_makehtml&r='+(+ new Date()), function(ret){
  12. var title = obj ? obj.getAttribute('mktitle') || '' : '';
  13. if(ret && (ret=ret['data']) && ret['status'] == 'html_ok') {
  14. if(obj) {
  15. obj.style.color = 'blue';
  16. obj.innerHTML = '<a href="'+ret['path']+'" target="_blank">'+title+'生成成功</a>';
  17. }
  18. if(ret['nexturl']) {
  19. if(obj) {
  20. obj.style.color = 'green';
  21. obj.innerHTML = '生成'+title+(Math.round((ret['current']/ret['count'])*100))+'%';
  22. }
  23. make_html(ret['nexturl'], obj);
  24. }
  25. } else {
  26. if(obj) {
  27. obj.style.color = 'red';
  28. obj.innerHTML = title+'生成失败';
  29. }
  30. }
  31. });
  32. }
  33. function make_html_batch(url, ids, callback, dom, single) {
  34. this.url = url;
  35. this.ids = ids;
  36. this.count = this.ids.length;
  37. this.callback = callback;
  38. this.dom = dom;
  39. this.single = single && 1;
  40. this.makedcount = 0;
  41. this.jumptime = 2000;
  42. if(this.single) {
  43. this.make(this.ids, this.dom);
  44. } else if(this.ids) {
  45. id = this.ids.pop();
  46. var child = document.createElement('div');
  47. child.style.color = 'green';
  48. var cent = ((1/this.count)*100).toFixed(2);
  49. progress_bar(cent);
  50. child.innerHTML = '开始生成'+this.dom.getAttribute('mktitle');
  51. this.dom.innerHTML = '';
  52. this.dom.appendChild(child);
  53. this.make(id, child);
  54. this.child = child;
  55. var child2 = document.createElement('div');
  56. child2.innerHTML = '<a href="javascript:void(0);" id="mk_goon">如果您的浏览器没有反应,请点击继续...</a>';
  57. this.dom.appendChild(child2);
  58. var obj = this;
  59. $('mk_goon').onclick = function (e) {make_html_batch.prototype.make_goon.call(obj, e)};
  60. }
  61. }
  62. make_html_batch.prototype = {
  63. make_goon : function (){
  64. var id = this.ids.pop();
  65. if(id) {
  66. this.make(this.ids.pop(), this.child);
  67. } else if(this.callback) {
  68. var obj = this;
  69. setTimeout(function(){obj.dom.style.display = 'none';(obj.callback)();}, 1000);
  70. }
  71. },
  72. make : function (id, child) {
  73. var obj = this;
  74. var x = Ajax();
  75. x.getJSON(this.url+id+'&_makehtml&r='+(+ new Date()), function(ret){
  76. if(ret && (data=ret['data']) && data['status'] == 'html_ok') {
  77. obj.makedcount++;
  78. if(data['nexturl']) {
  79. make_html(data['nexturl']);
  80. }
  81. } else if(ret && ret['message']) {
  82. var makehtml_error = $('makehtml_error');
  83. if(!makehtml_error) {
  84. obj.jumptime = 500000;
  85. makehtml_error = document.createElement('div');
  86. makehtml_error.style.color = 'red';
  87. makehtml_error.style.height = '200px';
  88. makehtml_error.style.overflow = 'scroll';
  89. makehtml_error.id = 'makehtml_error';
  90. makehtml_error.innerHTML = '错误信息';
  91. obj.dom.appendChild(makehtml_error);
  92. }
  93. makehtml_error.innerHTML += '<br>[id:' + id + ']' + ret['message'];
  94. makehtml_error.scrollTop = makehtml_error.scrollHeight;
  95. }
  96. if(obj.single) {
  97. child.style.color = 'blue';
  98. child.innerHTML = '<div class="mk_msg">'+'<a href="'+data['path']+'" target="_blank">'+obj.dom.getAttribute('mktitle')+'</a>生成完成'+'</div>';
  99. if(obj.callback) {
  100. setTimeout(function(){(obj.callback)();}, 2000);
  101. }
  102. } else if((id = obj.ids.pop()) || obj.ids.length == 0){
  103. var current = obj.count - obj.ids.length;
  104. var cent = ((current/obj.count)*100).toFixed(2);
  105. progress_bar(cent);
  106. var str = '本次共需要生成'+obj.count+'个'+obj.dom.getAttribute('mktitle')+'文件,成功生成'+obj.makedcount+'个,';
  107. if(cent != 100) {
  108. child.innerHTML = str+'正在生成第'+current+'个,已经完成'+cent+'%';
  109. } else {
  110. child.style.color = 'blue';
  111. child.innerHTML = str+obj.dom.getAttribute('mktitle')+'生成完成';
  112. }
  113. if(id) {
  114. obj.make(id, child);
  115. } else if(obj.callback) {
  116. setTimeout(function(){progress_bar_reset(); obj.dom.innerHTML = ''; obj.dom.style.display = 'none'; (obj.callback)();}, obj.jumptime);
  117. }
  118. }
  119. });
  120. delete x;
  121. }
  122. };
  123. function progress_bar(cent) {
  124. var dom = $('progress_bar');
  125. if(dom) {
  126. if(dom.style.display != 'block') {
  127. dom.style.display = 'block';
  128. }
  129. var allwidth = 400;
  130. var setwidth = allwidth * (cent / 100);
  131. dom.style.borderLeftWidth = setwidth + 'px';
  132. dom.style.width = (allwidth - setwidth) + 'px';
  133. }
  134. }
  135. function progress_bar_reset() {
  136. var dom = $('progress_bar');
  137. if(dom) {
  138. dom.style.display = 'none';
  139. dom.style.borderLeftWidth = '1px';
  140. dom.style.width = '400px';
  141. }
  142. }