1 // This script allow to use several Epoz WYSIWYG fields.
2 // Copyright (C) 2005 Benoît PIN <mailto:pin@cri.ensmp.fr>
4 var IFramePrefix = "Iframe_";
5 var IFramePrefixLength = IFramePrefix.length;
6 var DocPrefix = "doc_";
7 var DocPrefixLength = DocPrefix.length;
8 var CheckBoxPrefix = "CB_";
9 var CheckBoxPrefixLength = CheckBoxPrefix.length;
10 var ToolBarPrefix = "ToolBar_";
11 var ToolBarPrefixLength = ToolBarPrefix.length;
14 function redirectEpoz(iframe) {
16 if (EpozElement == iframe)
18 changeBorderStyle(EpozElement, "dashed");
19 unwrapEpozVariables();
22 // update Epoz variables
23 wrapEpozVariables(iframe);
26 changeBorderStyle(EpozElement, "solid");
27 EpozElement.contentWindow.focus();
31 function wrapEpozVariables(iframe) {
33 fieldId = iframe.contentWindow.document.id.slice(DocPrefixLength);
36 // maybe not an epoz iframe
42 EpozTextArea = document.getElementById(fieldId);
43 toolBar = document.getElementById(ToolBarPrefix + fieldId);
44 toolBar.id = "EpozToolbar";
45 checkBox = document.getElementById(CheckBoxPrefix + fieldId);
46 checkBox.id = "EpozViewMode";
51 function unwrapEpozVariables() {
52 if (!EpozElement) // no redirection happens yet.
54 fieldId = EpozElement.contentWindow.document.id.slice(DocPrefixLength);
56 EpozElement.id = IFramePrefix + fieldId;
57 toolBar = document.getElementById("EpozToolbar");
58 toolBar.id = ToolBarPrefix + fieldId;
59 checkBox = document.getElementById("EpozViewMode");
60 checkBox.id = CheckBoxPrefix + fieldId;
65 // Initialization functions
68 var formDatas = new Array();
71 function InitIframe(name, data, path, toolbox, style, button, css, customcss, charset, pageurl) {
75 form_toolbox = toolbox;
76 form_area_style = style;
77 form_button_style = button;
79 form_customcss = customcss;
80 form_charset = charset;
81 form_pageurl = pageurl;
85 if (browser.isIE55 || browser.isIE6up) {
86 // Mac-IE doesn't support RichText-Edit at the moment
95 else if (browser.isGecko) {
96 //check to see if midas is enabled
98 // Just a few cleanups for Mozilla
100 form_data = form_data.replace(/<strong>/ig,'<b>');
101 form_data = form_data.replace(/<strong(\s[^>]*)>/ig,'<b$1>');
102 form_data = form_data.replace(/<\/strong>/ig,'</b>');
104 form_data = form_data.replace(/<em>/ig,'<i>');
105 form_data = form_data.replace(/<em(\s[^>]*)>/ig,'<i$1>');
106 form_data = form_data.replace(/<\/em>/ig,'</i>');
122 formDatas[name] = form_data;
123 var iframe = document.getElementById(Epoz);
124 iframe.id = IFramePrefix + name;
126 // change EpozToolbar id
127 var toolBar = document.getElementById("EpozToolbar");
128 toolBar.id = ToolBarPrefix + name;
130 // Retrieve the switch HTML mode checkbox and change id and onclick function.
131 nodes = iframe.parentNode.nextSibling.nextSibling.childNodes;
133 for (i=0 ; i<nodes.length ; i++ ) {
134 if (nodes[i].nodeType == 1 && nodes[i].nodeName == 'INPUT')
137 var checkbox = nodes[i];
138 checkbox.id = CheckBoxPrefix + name;
140 changeBorderStyle(iframe, "dashed");
146 function HandleEpozRedirect() {
147 if (browser.isIE55 || browser.isIE6up) {
148 iframe = event.srcElement;
150 else if (browser.isGecko) {
153 redirectEpoz(iframe);
156 function redirectAndSwitchViewMode(checkbox) {
157 if (checkbox.id != "EpozViewMode") { // Otherwise, EpozElement already targets the good field.
158 var iframe = document.getElementById(IFramePrefix + checkbox.id.slice(CheckBoxPrefixLength));
159 redirectEpoz(iframe);
161 SwitchViewMode(checkbox.checked);
166 function changeBorderStyle(ob, borderStyle) {
168 s.borderBottomStyle = borderStyle;
169 s.borderLeftStyle = borderStyle;
170 s.borderRightStyle = borderStyle;
171 s.borderTopStyle = borderStyle;
176 function InitDocument(iframe) {
177 fieldId = iframe.id.slice(IFramePrefixLength);
178 var data = formDatas[fieldId];
179 delete formDatas[fieldId];
180 ta = document.getElementById(fieldId);
181 iframe.contentWindow.document.body.innerHTML = data;
183 iframe.contentWindow.document.id = DocPrefix + fieldId;
184 addListener(iframe, "click", HandleEpozRedirect);
185 form = retrieveForm(ta);
186 form.onsubmit=SyncEpoz;
187 if (browser.isGecko) {
188 scriptExpr = 'EnableDesignMode("' + iframe.id + '");';
189 window.setTimeout(scriptExpr, 10);
194 function SyncEpoz() {
195 if (document.getElementsByTagName)
196 var iframes = document.getElementsByTagName("IFRAME");
197 else if (document.all)
198 var iframes = document.all.tags("IFRAME");
201 for (var i=0;i<iframes.length;i++) {
203 unwrapEpozVariables();
204 if(!wrapEpozVariables(iframes[i]))
207 var html = TidyHTML(GetHTML());
209 // strip trailing whitespace
210 html = (html.replace(/^\s*/,'')).replace(/\s*$/,'');
212 // remove single br left by Firefox / Mozilla
213 if (html=="<br />" || html=="<br>" || html=="<p></p>") {
216 form_name = EpozElement.contentWindow.document.id.slice(DocPrefixLength);
217 document.getElementById(form_name).value = html;
222 function EnableDesignMode(iframeId) {
223 iframe = document.getElementById(iframeId);
225 iframe.contentDocument.designMode = "on";
226 iframe.contentWindow.document.addEventListener("keypress", HandleKeyboardEvent, true);
228 scriptExpr = 'EnableDesignMode("' + iframeId + '");';
229 setTimeout(scriptExpr, 10);
237 function retrieveForm(baseOb){
238 var pn = baseOb.parentNode;
240 while (pn != document) {
241 if (pn.nodeName == 'FORM')
251 function addListener(ob, eventName, functionReference){
252 if (browser.isIE55 || browser.isIE6up) {
253 eventName = "on" + eventName;
254 ob.attachEvent(eventName, functionReference);
256 else if (browser.isGecko) {
257 ob.addEventListener(eventName, functionReference, false);