fr_util.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. function frxOpenPrint(url) {
  2. window.open(url, '_blank','resizable,scrollbars,width="400",height="300"');
  3. };
  4. function frRequestObject() {
  5. if (typeof XMLHttpRequest === 'undefined') {
  6. XMLHttpRequest = function() {
  7. try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
  8. catch(e) {}
  9. try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
  10. catch(e) {}
  11. try { return new ActiveXObject("Msxml2.XMLHTTP"); }
  12. catch(e) {}
  13. try { return new ActiveXObject("Microsoft.XMLHTTP"); }
  14. catch(e) {}
  15. throw new Error("This browser does not support XMLHttpRequest.");
  16. };
  17. }
  18. return new XMLHttpRequest();
  19. }
  20. function frRequestServer(url, form) {
  21. if (form) {
  22. var multiLineHtmlEncode = function (value) {
  23. var lines = value.replace(/\r\n|\n\r|\n|\r/g, "\n").split("\n");
  24. for (var i = 0; i < lines.length; i++) {
  25. lines[i] = $('<div/>').text(lines[i]).html();
  26. }
  27. return lines.join('\r\n');
  28. };
  29. // make post data because old IE doesn't have FormData
  30. var urlEncodedDataPairs = [];
  31. for (var name in form) {
  32. var htmlEncodedName = multiLineHtmlEncode(name);
  33. var htmlEncodedValue = multiLineHtmlEncode(form[name]);
  34. urlEncodedDataPairs.push(encodeURIComponent(htmlEncodedName) + '=' + encodeURIComponent(htmlEncodedValue));
  35. }
  36. var urlEncodedData = urlEncodedDataPairs.join('&').replace(/%20/g, '+');
  37. $.post(
  38. encodeURI(url),
  39. urlEncodedData,
  40. onFrAjaxSuccess
  41. );
  42. return;
  43. }
  44. $.get(
  45. encodeURI(url),
  46. {
  47. "_": $.now()
  48. },
  49. onFrAjaxSuccess
  50. );
  51. }
  52. function frClick(url, id, kind, value) {
  53. if (kind == 'text_edit') {
  54. var that = this;
  55. if (that.win && that.win.close) {
  56. that.win.close();
  57. }
  58. that.win = frPopup(url + '?form=' + id + '&formName=text_edit&formClick=' + value, 'Text_edit', 400, 200);
  59. that.win.onmessage = function (e) {
  60. //if (e.data == 'submit') {
  61. var area = that.win.document.getElementById('js-textarea');
  62. frRequestServer(url + '?previewobject=' + id + '&' + kind + '=' + value, { text: area.value });
  63. that.win.close();
  64. //}
  65. };
  66. return;
  67. }
  68. frRequestServer(url + '?previewobject=' + id + '&' + kind + '=' + value);
  69. }
  70. function onFrAjaxSuccess(data, textStatus, request) {
  71. var obj = request.getResponseHeader("FastReport-container");
  72. var div = document.getElementById(obj);
  73. div = frReplaceInnerHTML(div, data);
  74. if (div != null) {
  75. var scripts = div.getElementsByTagName('script');
  76. for (var i = 0; i < scripts.length; i++) {
  77. eval(scripts[i].text);
  78. }
  79. }
  80. }
  81. function frReplaceInnerHTML(repobj, html) {
  82. var obj = repobj;
  83. if (obj != null) {
  84. var newObj = document.createElement(obj.nodeName);
  85. newObj.id = obj.id;
  86. newObj.className = obj.className;
  87. $(newObj).html(html);
  88. newObj.style.display = "inline-block";
  89. newObj.style.width = "100%";
  90. newObj.style.height = "100%";
  91. if (obj.parentNode)
  92. obj.parentNode.replaceChild(newObj, obj);
  93. else
  94. obj.innerHTML = html;
  95. return newObj;
  96. }
  97. else
  98. return null;
  99. }
  100. function frProcessReqChange() {
  101. try
  102. {
  103. if (req.readyState == 4)
  104. {
  105. if (req.status == 200)
  106. {
  107. obj = req.getResponseHeader("FastReport-container");
  108. div = document.getElementById(obj);
  109. div = frReplaceInnerHTML(div, req.responseText);
  110. var scripts = div.getElementsByTagName('script');
  111. for (var i = 0; i < scripts.length; i++)
  112. eval(scripts[i].text);
  113. }
  114. else
  115. {
  116. throw new Error("Error: " + req.statusText);
  117. }
  118. }
  119. }
  120. catch( e ) {
  121. throw new Error("Error: " + e);
  122. }
  123. }
  124. function frOutline(data, id, cb) {
  125. var sizes = null;
  126. if (localStorage) {
  127. sizes = localStorage.getItem('fr-split-sizes');
  128. }
  129. if (sizes) {
  130. sizes = JSON.parse(sizes);
  131. } else {
  132. sizes = [25, 75];
  133. }
  134. var split = frOutline.Split(['.froutline', '.frbody'], {
  135. sizes: sizes,
  136. minSize: 50,
  137. snapOffset: 20,
  138. onDragEnd: function () {
  139. if (localStorage) {
  140. localStorage.setItem('fr-split-sizes', JSON.stringify(split.getSizes()));
  141. }
  142. }
  143. });
  144. $('.froutlinecontainer').jstree({
  145. 'core': {
  146. 'data': data,
  147. 'multiple': false,
  148. 'themes': {
  149. 'dots': false
  150. }
  151. },
  152. 'state': {
  153. 'key': id
  154. },
  155. 'types': {
  156. 'default': {
  157. 'icon': 'jstree-file'
  158. }
  159. },
  160. 'plugins': ['state', 'types']
  161. });
  162. $('.froutlinecontainer').on('ready.jstree', function (e, data) {
  163. $('.froutlinecontainer').on('changed.jstree', function (e, data) {
  164. if (data.action == 'select_node' && data.node && data.node.data) {
  165. cb(+(data.node.data.page) + 1);
  166. }
  167. });
  168. });
  169. }
  170. function frPopup(url, title, w, h) {
  171. // Fixes dual-screen position Most browsers Firefox
  172. var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : window.screenX;
  173. var dualScreenTop = window.screenTop != undefined ? window.screenTop : window.screenY;
  174. var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
  175. var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
  176. var left = ((width / 2) - (w / 2)) + dualScreenLeft;
  177. var top = ((height / 2) - (h / 2)) + dualScreenTop;
  178. var params = 'menubar=0, toolbar=0, location=0, status=0, resizable=1, scrollbars=1';
  179. var newWindow = window.open(url, title, params + ', width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
  180. if (newWindow.focus) {
  181. newWindow.focus();
  182. }
  183. return newWindow;
  184. }