1 | /** |
---|
2 | * $Id: editor_plugin_src.js 537 2008-01-14 16:38:33Z spocke $ |
---|
3 | * |
---|
4 | * @author Moxiecode |
---|
5 | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. |
---|
6 | */ |
---|
7 | |
---|
8 | (function() { |
---|
9 | tinymce.create('tinymce.plugins.Preview', { |
---|
10 | init : function(ed, url) { |
---|
11 | var t = this; |
---|
12 | |
---|
13 | t.editor = ed; |
---|
14 | |
---|
15 | ed.addCommand('mcePreview', t._preview, t); |
---|
16 | ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'}); |
---|
17 | }, |
---|
18 | |
---|
19 | getInfo : function() { |
---|
20 | return { |
---|
21 | longname : 'Preview', |
---|
22 | author : 'Moxiecode Systems AB', |
---|
23 | authorurl : 'http://tinymce.moxiecode.com', |
---|
24 | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview', |
---|
25 | version : tinymce.majorVersion + "." + tinymce.minorVersion |
---|
26 | }; |
---|
27 | }, |
---|
28 | |
---|
29 | // Private methods |
---|
30 | |
---|
31 | _preview : function() { |
---|
32 | var ed = this.editor, win, html, c, pos, pos2, css, i, page = ed.getParam("plugin_preview_pageurl", null), w = ed.getParam("plugin_preview_width", "550"), h = ed.getParam("plugin_preview_height", "600"); |
---|
33 | |
---|
34 | // Use a custom preview page |
---|
35 | if (page) { |
---|
36 | ed.windowManager.open({ |
---|
37 | file : ed.getParam("plugin_preview_pageurl", null), |
---|
38 | width : w, |
---|
39 | height : h |
---|
40 | }, { |
---|
41 | resizable : "yes", |
---|
42 | scrollbars : "yes", |
---|
43 | inline : 1 |
---|
44 | }); |
---|
45 | } else { |
---|
46 | win = window.open("", "mcePreview", "menubar=no,toolbar=no,scrollbars=yes,resizable=yes,left=20,top=20,width=" + w + ",height=" + h); |
---|
47 | html = ""; |
---|
48 | c = ed.getContent(); |
---|
49 | pos = c.indexOf('<body'); |
---|
50 | css = ed.getParam("content_css", '').split(','); |
---|
51 | |
---|
52 | tinymce.map(css, function(u) { |
---|
53 | return ed.documentBaseURI.toAbsolute(u); |
---|
54 | }); |
---|
55 | |
---|
56 | if (pos != -1) { |
---|
57 | pos = c.indexOf('>', pos); |
---|
58 | pos2 = c.lastIndexOf('</body>'); |
---|
59 | c = c.substring(pos + 1, pos2); |
---|
60 | } |
---|
61 | |
---|
62 | html += ed.getParam('doctype'); |
---|
63 | html += '<html xmlns="http://www.w3.org/1999/xhtml">'; |
---|
64 | html += '<head>'; |
---|
65 | html += '<title>' + ed.getLang('preview.preview_desc') + '</title>'; |
---|
66 | html += '<base href="' + ed.documentBaseURI.getURI() + '" />'; |
---|
67 | html += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'; |
---|
68 | |
---|
69 | for (i=0; i<css.length; i++) |
---|
70 | html += '<link href="' + css[i] + '" rel="stylesheet" type="text/css" />'; |
---|
71 | |
---|
72 | html += '</head>'; |
---|
73 | html += '<body dir="' + ed.getParam("directionality") + '" onload="window.opener.tinymce.EditorManager.get(\'' + ed.id + '\').plugins[\'preview\']._onLoad(window,document);">'; |
---|
74 | html += c; |
---|
75 | html += '</body>'; |
---|
76 | html += '</html>'; |
---|
77 | |
---|
78 | win.document.write(html); |
---|
79 | win.document.close(); |
---|
80 | } |
---|
81 | }, |
---|
82 | |
---|
83 | _onLoad : function(w, d) { |
---|
84 | var t = this, nl, i, el = [], sv, ne; |
---|
85 | |
---|
86 | t._doc = d; |
---|
87 | w.writeFlash = t._writeFlash; |
---|
88 | w.writeShockWave = t._writeShockWave; |
---|
89 | w.writeQuickTime = t._writeQuickTime; |
---|
90 | w.writeRealMedia = t._writeRealMedia; |
---|
91 | w.writeWindowsMedia = t._writeWindowsMedia; |
---|
92 | w.writeEmbed = t._writeEmbed; |
---|
93 | |
---|
94 | nl = d.getElementsByTagName("script"); |
---|
95 | for (i=0; i<nl.length; i++) { |
---|
96 | sv = tinymce.isIE ? nl[i].innerHTML : nl[i].firstChild.nodeValue; |
---|
97 | |
---|
98 | if (new RegExp('write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\\(.*', 'g').test(sv)) |
---|
99 | el[el.length] = nl[i]; |
---|
100 | } |
---|
101 | |
---|
102 | for (i=0; i<el.length; i++) { |
---|
103 | ne = d.createElement("div"); |
---|
104 | ne.innerHTML = d._embeds[i]; |
---|
105 | el[i].parentNode.insertBefore(ne.firstChild, el[i]); |
---|
106 | } |
---|
107 | }, |
---|
108 | |
---|
109 | _writeFlash : function(p) { |
---|
110 | p.src = this.editor.documentBaseURI.toAbsolute(p.src); |
---|
111 | TinyMCE_PreviewPlugin._writeEmbed( |
---|
112 | 'D27CDB6E-AE6D-11cf-96B8-444553540000', |
---|
113 | 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', |
---|
114 | 'application/x-shockwave-flash', |
---|
115 | p |
---|
116 | ); |
---|
117 | }, |
---|
118 | |
---|
119 | _writeShockWave : function(p) { |
---|
120 | this.editor.documentBaseURI.toAbsolute(p.src); |
---|
121 | TinyMCE_PreviewPlugin._writeEmbed( |
---|
122 | '166B1BCA-3F9C-11CF-8075-444553540000', |
---|
123 | 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', |
---|
124 | 'application/x-director', |
---|
125 | p |
---|
126 | ); |
---|
127 | }, |
---|
128 | |
---|
129 | _writeQuickTime : function(p) { |
---|
130 | this.editor.documentBaseURI.toAbsolute(p.src); |
---|
131 | TinyMCE_PreviewPlugin._writeEmbed( |
---|
132 | '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', |
---|
133 | 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', |
---|
134 | 'video/quicktime', |
---|
135 | p |
---|
136 | ); |
---|
137 | }, |
---|
138 | |
---|
139 | _writeRealMedia : function(p) { |
---|
140 | this.editor.documentBaseURI.toAbsolute(p.src); |
---|
141 | TinyMCE_PreviewPlugin._writeEmbed( |
---|
142 | 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', |
---|
143 | 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', |
---|
144 | 'audio/x-pn-realaudio-plugin', |
---|
145 | p |
---|
146 | ); |
---|
147 | }, |
---|
148 | |
---|
149 | _writeWindowsMedia : function(p) { |
---|
150 | this.editor.documentBaseURI.toAbsolute(p.src); |
---|
151 | p.url = p.src; |
---|
152 | TinyMCE_PreviewPlugin._writeEmbed( |
---|
153 | '6BF52A52-394A-11D3-B153-00C04F79FAA6', |
---|
154 | 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', |
---|
155 | 'application/x-mplayer2', |
---|
156 | p |
---|
157 | ); |
---|
158 | }, |
---|
159 | |
---|
160 | _writeEmbed : function(cls, cb, mt, p) { |
---|
161 | var h = '', n, d = t._doc, ne, c; |
---|
162 | |
---|
163 | h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"'; |
---|
164 | h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : ''; |
---|
165 | h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : ''; |
---|
166 | h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : ''; |
---|
167 | h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : ''; |
---|
168 | h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : ''; |
---|
169 | h += '>'; |
---|
170 | |
---|
171 | for (n in p) |
---|
172 | h += '<param name="' + n + '" value="' + p[n] + '">'; |
---|
173 | |
---|
174 | h += '<embed type="' + mt + '"'; |
---|
175 | |
---|
176 | for (n in p) |
---|
177 | h += n + '="' + p[n] + '" '; |
---|
178 | |
---|
179 | h += '></embed></object>'; |
---|
180 | |
---|
181 | d._embeds[d._embeds.length] = h; |
---|
182 | } |
---|
183 | }); |
---|
184 | |
---|
185 | // Register plugin |
---|
186 | tinymce.PluginManager.add('preview', tinymce.plugins.Preview); |
---|
187 | })(); |
---|