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