Upgrade of TinyMCE is in progress.
[citadel.git] / webcit / tiny_mce / plugins / fullpage / editor_plugin_src.js
1 /**\r
2  * $Id: editor_plugin_src.js 232 2007-03-05 17:00:27Z spocke $\r
3  *\r
4  * @author Moxiecode\r
5  * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
6  */\r
7 \r
8 /* Import plugin specific language pack */\r
9 tinyMCE.importPluginLanguagePack('fullpage');\r
10 \r
11 var TinyMCE_FullPagePlugin = {\r
12         getInfo : function() {\r
13                 return {\r
14                         longname : 'Fullpage',\r
15                         author : 'Moxiecode Systems AB',\r
16                         authorurl : 'http://tinymce.moxiecode.com',\r
17                         infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',\r
18                         version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
19                 };\r
20         },\r
21 \r
22         getControlHTML : function(cn) {\r
23                 switch (cn) {\r
24                         case "fullpage":\r
25                                 return tinyMCE.getButtonHTML(cn, 'lang_fullpage_desc', '{$pluginurl}/images/fullpage.gif', 'mceFullPageProperties');\r
26                 }\r
27 \r
28                 return "";\r
29         },\r
30 \r
31         execCommand : function(editor_id, element, command, user_interface, value) {\r
32                 // Handle commands\r
33                 switch (command) {\r
34                         case "mceFullPageProperties":\r
35                                 var template = new Array();\r
36 \r
37                                 template['file']   = '../../plugins/fullpage/fullpage.htm';\r
38                                 template['width']  = 430;\r
39                                 template['height'] = 485 + (tinyMCE.isOpera ? 5 : 0);\r
40 \r
41                                 template['width'] += tinyMCE.getLang('lang_fullpage_delta_width', 0);\r
42                                 template['height'] += tinyMCE.getLang('lang_fullpage_delta_height', 0);\r
43 \r
44                                 tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});\r
45                         return true;\r
46 \r
47                         case "mceFullPageUpdate":\r
48                                 TinyMCE_FullPagePlugin._addToHead(tinyMCE.getInstanceById(editor_id));\r
49                                 return true;\r
50            }\r
51 \r
52            // Pass to next handler in chain\r
53            return false;\r
54         },\r
55 \r
56         cleanup : function(type, content, inst) {\r
57                 switch (type) {\r
58                         case "insert_to_editor":\r
59                                 var tmp = content.toLowerCase();\r
60                                 var pos = tmp.indexOf('<body'), pos2;\r
61 \r
62                                 // Split page in header and body chunks\r
63                                 if (pos != -1) {\r
64                                         pos = tmp.indexOf('>', pos);\r
65                                         pos2 = tmp.lastIndexOf('</body>');\r
66                                         inst.fullpageTopContent = content.substring(0, pos + 1);\r
67                                         content = content.substring(pos + 1, pos2);\r
68                                         // tinyMCE.debug(inst.fullpageTopContent, content);\r
69                                 } else {\r
70                                         if (!inst.fullpageTopContent) {\r
71                                                 var docType = tinyMCE.getParam("fullpage_default_doctype", '<!DOCTYPE html PUBLIC "-/'+'/W3C//DTD XHTML 1.0 Transitional/'+'/EN" "http:/'+'/www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');\r
72                                                 var enc = tinyMCE.getParam("fullpage_default_encoding", 'utf-8');\r
73                                                 var title = tinyMCE.getParam("fullpage_default_title", 'Untitled document');\r
74                                                 var lang = tinyMCE.getParam("fullpage_default_langcode", 'en');\r
75                                                 var pi = tinyMCE.getParam("fullpage_default_xml_pi", true);\r
76                                                 var ff = tinyMCE.getParam("fullpage_default_font_family", "");\r
77                                                 var fz = tinyMCE.getParam("fullpage_default_font_size", "");\r
78                                                 var ds = tinyMCE.getParam("fullpage_default_style", "");\r
79                                                 var dtc = tinyMCE.getParam("fullpage_default_text_color", "");\r
80 \r
81                                                 // Xml encode it\r
82                                                 title = title.replace(/&/g, '&amp;');\r
83                                                 title = title.replace(/\"/g, '&quot;');\r
84                                                 title = title.replace(/</g, '&lt;');\r
85                                                 title = title.replace(/>/g, '&gt;');\r
86 \r
87                                                 tmp = '';\r
88 \r
89                                                 // Make default chunk\r
90                                                 if (pi)\r
91                                                         tmp += '<?xml version="1.0" encoding="' + enc + '"?>\n';\r
92 \r
93                                                 tmp += docType + '\n';\r
94                                                 tmp += '<html xmlns="http:/'+'/www.w3.org/1999/xhtml" lang="' + lang + '" xml:lang="' + lang + '">\n';\r
95                                                 tmp += '<head>\n';\r
96                                                 tmp += '\t<title>' + title + '</title>\n';\r
97                                                 tmp += '\t<meta http-equiv="Content-Type" content="text/html; charset=' + enc + '" />\n';\r
98                                                 tmp += '</head>\n';\r
99                                                 tmp += '<body';\r
100 \r
101                                                 if (ff != '' || fz != '') {\r
102                                                         tmp += ' style="';\r
103 \r
104                                                         if (ds != '')\r
105                                                                 tmp += ds + ";";\r
106 \r
107                                                         if (ff != '')\r
108                                                                 tmp += 'font-family: ' + ff + ";";\r
109 \r
110                                                         if (fz != '')\r
111                                                                 tmp += 'font-size: ' + fz + ";";\r
112 \r
113                                                         tmp += '"';\r
114                                                 }\r
115 \r
116                                                 if (dtc != '')\r
117                                                         tmp += ' text="' + dtc + '"';\r
118 \r
119                                                 tmp += '>\n';\r
120 \r
121                                                 inst.fullpageTopContent = tmp;\r
122                                         }\r
123                                 }\r
124 \r
125                                 this._addToHead(inst);\r
126 \r
127                                 break;\r
128 \r
129                         case "get_from_editor":\r
130                                 if (inst.fullpageTopContent && !tinyMCE.getParam("fullpage_hide_in_source_view", false)) {\r
131                                         content = content.replace(/(\s)?mce\_[a-z_]+\=[^\s>]+(\s|\>)/i, ''); // Remove internal stuff\r
132                                         content = inst.fullpageTopContent + content + "\n</body>\n</html>";\r
133                                 }\r
134 \r
135                                 break;\r
136 \r
137                         case "submit_content":\r
138                                 if (inst.fullpageTopContent && tinyMCE.getParam("fullpage_hide_in_source_view", false))\r
139                                         content = inst.fullpageTopContent + content + "\n</body>\n</html>";\r
140 \r
141                                 break;\r
142                 }\r
143 \r
144                 // Pass through to next handler in chain\r
145                 return content;\r
146         },\r
147 \r
148         // Private plugin internal methods\r
149 \r
150         _addToHead : function(inst) {\r
151                 var doc = inst.getDoc();\r
152                 var head = doc.getElementsByTagName("head")[0];\r
153                 var body = doc.body;\r
154                 var h = inst.fullpageTopContent;\r
155                 var e = doc.createElement("body");\r
156                 var nl, i, le, tmp;\r
157 \r
158                 // Remove stuff we don't want\r
159                 h = h.replace(/(\r|\n)/gi, '');\r
160                 h = h.replace(/<\?[^\>]*\>/gi, '');\r
161                 h = h.replace(/<\/?(!DOCTYPE|head|html)[^\>]*\>/gi, '');\r
162                 h = h.replace(/<script(.*?)<\/script>/gi, '');\r
163                 h = h.replace(/<title(.*?)<\/title>/gi, '');\r
164                 h = h.replace(/<(meta|base)[^>]*>/gi, '');\r
165 \r
166                 // Make link and style elements into pre\r
167                 h = h.replace(/<link([^>]*)\/>/gi, '<pre mce_type="link" $1></pre>');\r
168                 //h = h.replace(/<style([^>]*)>(.*?)<\/style>/gi, '<pre mce_type="style" $1>$2</pre>');\r
169 \r
170                 // Make body a div\r
171                 h = h.replace(/<body/gi, '<div mce_type="body"');\r
172                 h += '</div>';\r
173 \r
174                 // Now crapy MSIE can parse it\r
175                 e.innerHTML = h;\r
176 \r
177                 // Reset all body attributes\r
178                 body.vLink = body.aLink = body.link = body.text = '';\r
179                 body.style.cssText = '';\r
180 \r
181                 // Delete all old links\r
182                 nl = head.getElementsByTagName('link');\r
183                 for (i=0; i<nl.length; i++) {\r
184                         if (tinyMCE.getAttrib(nl[i], 'mce_head') == "true")\r
185                                 nl[i].parentNode.removeChild(nl[i]);\r
186                 }\r
187 \r
188                 // Add link elements\r
189                 nl = e.getElementsByTagName('pre');\r
190                 for (i=0; i<nl.length; i++) {\r
191                         tmp = tinyMCE.getAttrib(nl[i], 'media');\r
192                         if (tinyMCE.getAttrib(nl[i], 'mce_type') == "link" && (tmp == "" || tmp == "screen" || tmp == "all") && tinyMCE.getAttrib(nl[i], 'rel') == "stylesheet") {\r
193                                 le = doc.createElement("link");\r
194 \r
195                                 le.rel = "stylesheet";\r
196                                 le.href = tinyMCE.getAttrib(nl[i], 'href');\r
197                                 le.setAttribute("mce_head", "true");\r
198 \r
199                                 head.appendChild(le);\r
200                         }\r
201                 }\r
202 \r
203                 // Add body attributes\r
204                 nl = e.getElementsByTagName('div');\r
205                 if (nl.length > 0) {\r
206                         body.style.cssText = tinyMCE.getAttrib(nl[0], 'style');\r
207 \r
208                         if ((tmp = tinyMCE.getAttrib(nl[0], 'leftmargin')) != '' && body.style.marginLeft == '')\r
209                                 body.style.marginLeft = tmp + "px";\r
210 \r
211                         if ((tmp = tinyMCE.getAttrib(nl[0], 'rightmargin')) != '' && body.style.marginRight == '')\r
212                                 body.style.marginRight = tmp + "px";\r
213 \r
214                         if ((tmp = tinyMCE.getAttrib(nl[0], 'topmargin')) != '' && body.style.marginTop == '')\r
215                                 body.style.marginTop = tmp + "px";\r
216 \r
217                         if ((tmp = tinyMCE.getAttrib(nl[0], 'bottommargin')) != '' && body.style.marginBottom == '')\r
218                                 body.style.marginBottom = tmp + "px";\r
219 \r
220                         body.dir = tinyMCE.getAttrib(nl[0], 'dir');\r
221                         body.vLink = tinyMCE.getAttrib(nl[0], 'vlink');\r
222                         body.aLink = tinyMCE.getAttrib(nl[0], 'alink');\r
223                         body.link = tinyMCE.getAttrib(nl[0], 'link');\r
224                         body.text = tinyMCE.getAttrib(nl[0], 'text');\r
225 \r
226                         if ((tmp = tinyMCE.getAttrib(nl[0], 'background')) != '')\r
227                                 body.style.backgroundImage = "url('" + tmp + "')";\r
228 \r
229                         if ((tmp = tinyMCE.getAttrib(nl[0], 'bgcolor')) != '')\r
230                                 body.style.backgroundColor = tmp;\r
231                 }\r
232         }\r
233 };\r
234 \r
235 tinyMCE.addPlugin("fullpage", TinyMCE_FullPagePlugin);\r