tiny_mce_popup.js
上传用户:dlqqsh
上传日期:2021-11-13
资源大小:7840k
文件大小:8k
源码类别:

OA系统

开发平台:

Java

  1. // Some global instances, this will be filled later
  2. var tinyMCE = null, tinyMCELang = null;
  3. function TinyMCE_Popup() {
  4. };
  5. TinyMCE_Popup.prototype = {
  6. findWin : function(w) {
  7. var c;
  8. // Check parents
  9. c = w;
  10. while (c && (c = c.parent) != null) {
  11. if (typeof(c.tinyMCE) != "undefined")
  12. return c;
  13. }
  14. // Check openers
  15. c = w;
  16. while (c && (c = c.opener) != null) {
  17. if (typeof(c.tinyMCE) != "undefined")
  18. return c;
  19. }
  20. // Try top
  21. if (typeof(top.tinyMCE) != "undefined")
  22. return top;
  23. return null;
  24. },
  25. init : function() {
  26. var win = window.opener ? window.opener : window.dialogArguments, c;
  27. var inst;
  28. if (!win)
  29. win = this.findWin(window);
  30. if (!win) {
  31. alert("tinyMCE object reference not found from popup.");
  32. return;
  33. }
  34. window.opener = win;
  35. this.windowOpener = win;
  36. this.onLoadEval = "";
  37. // Setup parent references
  38. tinyMCE = win.tinyMCE;
  39. tinyMCELang = win.tinyMCELang;
  40. inst = tinyMCE.selectedInstance;
  41. this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false;
  42. this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true);
  43. if (this.isWindow)
  44. window.focus();
  45. // Store selection
  46. if (this.storeSelection)
  47. inst.selectionBookmark = inst.selection.getBookmark(true);
  48. // Setup dir
  49. if (tinyMCELang['lang_dir'])
  50. document.dir = tinyMCELang['lang_dir'];
  51. // Setup title
  52. var re = new RegExp('{|\$|}', 'g');
  53. var title = document.title.replace(re, "");
  54. if (typeof tinyMCELang[title] != "undefined") {
  55. var divElm = document.createElement("div");
  56. divElm.innerHTML = tinyMCELang[title];
  57. document.title = divElm.innerHTML;
  58. if (tinyMCE.setWindowTitle != null)
  59. tinyMCE.setWindowTitle(window, divElm.innerHTML);
  60. }
  61. // Output Popup CSS class
  62. document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">');
  63. if (tinyMCE.getParam("popups_css_add")) {
  64. c = tinyMCE.getParam("popups_css_add");
  65. // Is relative
  66. if (c.indexOf('://') == -1 && c.charAt(0) != '/')
  67. c = tinyMCE.documentBasePath + "/" + c;
  68. document.write('<link href="' + c + '" rel="stylesheet" type="text/css">');
  69. }
  70. tinyMCE.addEvent(window, "load", this.onLoad);
  71. },
  72. onLoad : function() {
  73. var dir, i, elms, body = document.body;
  74. if (tinyMCE.getWindowArg('mce_replacevariables', true))
  75. body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs);
  76. dir = tinyMCE.selectedInstance.settings['directionality'];
  77. if (dir == "rtl" && document.forms && document.forms.length > 0) {
  78. elms = document.forms[0].elements;
  79. for (i=0; i<elms.length; i++) {
  80. if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr")
  81. elms[i].dir = dir;
  82. }
  83. }
  84. if (body.style.display == 'none')
  85. body.style.display = 'block';
  86. // Execute real onload (Opera fix)
  87. if (tinyMCEPopup.onLoadEval != "")
  88. eval(tinyMCEPopup.onLoadEval);
  89. },
  90. executeOnLoad : function(str) {
  91. if (tinyMCE.isOpera)
  92. this.onLoadEval = str;
  93. else
  94. eval(str);
  95. },
  96. resizeToInnerSize : function() {
  97. // Netscape 7.1 workaround
  98. if (this.isWindow && tinyMCE.isNS71) {
  99. window.resizeBy(0, 10);
  100. return;
  101. }
  102. if (this.isWindow) {
  103. var doc = document;
  104. var body = doc.body;
  105. var oldMargin, wrapper, iframe, nodes, dx, dy;
  106. if (body.style.display == 'none')
  107. body.style.display = 'block';
  108. // Remove margin
  109. oldMargin = body.style.margin;
  110. body.style.margin = '0';
  111. // Create wrapper
  112. wrapper = doc.createElement("div");
  113. wrapper.id = 'mcBodyWrapper';
  114. wrapper.style.display = 'none';
  115. wrapper.style.margin = '0';
  116. // Wrap body elements
  117. nodes = doc.body.childNodes;
  118. for (var i=nodes.length-1; i>=0; i--) {
  119. if (wrapper.hasChildNodes())
  120. wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild);
  121. else
  122. wrapper.appendChild(nodes[i].cloneNode(true));
  123. nodes[i].parentNode.removeChild(nodes[i]);
  124. }
  125. // Add wrapper
  126. doc.body.appendChild(wrapper);
  127. // Create iframe
  128. iframe = document.createElement("iframe");
  129. iframe.id = "mcWinIframe";
  130. iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings['default_document'];
  131. iframe.width = "100%";
  132. iframe.height = "100%";
  133. iframe.style.margin = '0';
  134. // Add iframe
  135. doc.body.appendChild(iframe);
  136. // Measure iframe
  137. iframe = document.getElementById('mcWinIframe');
  138. dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth;
  139. dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight;
  140. // Resize window
  141. // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy);
  142. window.resizeBy(dx, dy);
  143. // Hide iframe and show wrapper
  144. body.style.margin = oldMargin;
  145. iframe.style.display = 'none';
  146. wrapper.style.display = 'block';
  147. }
  148. },
  149. resizeToContent : function() {
  150. var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
  151. var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
  152. if (isOpera)
  153. return;
  154. if (isMSIE) {
  155. try { window.resizeTo(10, 10); } catch (e) {}
  156. var elm = document.body;
  157. var width = elm.offsetWidth;
  158. var height = elm.offsetHeight;
  159. var dx = (elm.scrollWidth - width) + 4;
  160. var dy = elm.scrollHeight - height;
  161. try { window.resizeBy(dx, dy); } catch (e) {}
  162. } else {
  163. window.scrollBy(1000, 1000);
  164. if (window.scrollX > 0 || window.scrollY > 0) {
  165. window.resizeBy(window.innerWidth * 2, window.innerHeight * 2);
  166. window.sizeToContent();
  167. window.scrollTo(0, 0);
  168. var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0);
  169. var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0);
  170. window.moveTo(x, y);
  171. }
  172. }
  173. },
  174. getWindowArg : function(name, default_value) {
  175. return tinyMCE.getWindowArg(name, default_value);
  176. },
  177. restoreSelection : function() {
  178. if (this.storeSelection) {
  179. var inst = tinyMCE.selectedInstance;
  180. inst.getWin().focus();
  181. if (inst.selectionBookmark)
  182. inst.selection.moveToBookmark(inst.selectionBookmark);
  183. }
  184. },
  185. execCommand : function(command, user_interface, value) {
  186. var inst = tinyMCE.selectedInstance;
  187. this.restoreSelection();
  188. inst.execCommand(command, user_interface, value);
  189. // Store selection
  190. if (this.storeSelection)
  191. inst.selectionBookmark = inst.selection.getBookmark(true);
  192. },
  193. close : function() {
  194. tinyMCE.closeWindow(window);
  195. },
  196. pickColor : function(e, element_id) {
  197. tinyMCE.selectedInstance.execCommand('mceColorPicker', true, {
  198. element_id : element_id,
  199. document : document,
  200. window : window,
  201. store_selection : false
  202. });
  203. },
  204. openBrowser : function(element_id, type, option) {
  205. var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
  206. var url = document.getElementById(element_id).value;
  207. tinyMCE.setWindowArg("window", window);
  208. tinyMCE.setWindowArg("document", document);
  209. // Call to external callback
  210. if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined")
  211. alert("Callback function: " + cb + " could not be found.");
  212. else
  213. eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);");
  214. },
  215. importClass : function(c) {
  216. window[c] = function() {};
  217. for (var n in window.opener[c].prototype)
  218. window[c].prototype[n] = window.opener[c].prototype[n];
  219. window[c].constructor = window.opener[c].constructor;
  220. }
  221. };
  222. // Setup global instance
  223. var tinyMCEPopup = new TinyMCE_Popup();
  224. tinyMCEPopup.init();