| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /**
- * plugin.js
- *
- * Copyright, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
- /*global tinymce:true */
- tinymce.PluginManager.add('preview', function(editor) {
- var settings = editor.settings, sandbox = !tinymce.Env.ie;
- editor.addCommand('mcePreview', function() {
- editor.windowManager.open({
- title: 'Preview',
- width : parseInt(editor.getParam("plugin_preview_width", "650"), 10),
- height : parseInt(editor.getParam("plugin_preview_height", "500"), 10),
- html: '<iframe src="javascript:\'\'" frameborder="0"' + (sandbox ? ' sandbox="allow-scripts"' : '') + '></iframe>',
- buttons: {
- text: 'Close',
- onclick: function() {
- this.parent().parent().close();
- }
- },
- onPostRender: function() {
- var previewHtml, headHtml = '';
- if (editor.settings.document_base_url != editor.documentBaseUrl) {
- headHtml += '<base href="' + editor.documentBaseURI.getURI() + '">';
- }
- tinymce.each(editor.contentCSS, function(url) {
- headHtml += '<link type="text/css" rel="stylesheet" href="' + editor.documentBaseURI.toAbsolute(url) + '">';
- });
- var bodyId = settings.body_id || 'tinymce';
- if (bodyId.indexOf('=') != -1) {
- bodyId = editor.getParam('body_id', '', 'hash');
- bodyId = bodyId[editor.id] || bodyId;
- }
- var bodyClass = settings.body_class || '';
- if (bodyClass.indexOf('=') != -1) {
- bodyClass = editor.getParam('body_class', '', 'hash');
- bodyClass = bodyClass[editor.id] || '';
- }
- var dirAttr = editor.settings.directionality ? ' dir="' + editor.settings.directionality + '"' : '';
- previewHtml = (
- '<!DOCTYPE html>' +
- '<html>' +
- '<head>' +
- headHtml +
- '</head>' +
- '<body id="' + bodyId + '" class="mce-content-body ' + bodyClass + '"' + dirAttr + '>' +
- editor.getContent() +
- '</body>' +
- '</html>'
- );
- if (!sandbox) {
- // IE 6-11 doesn't support data uris on iframes
- // so I guess they will have to be less secure since we can't sandbox on those
- // TODO: Use sandbox if future versions of IE supports iframes with data: uris.
- var doc = this.getEl('body').firstChild.contentWindow.document;
- doc.open();
- doc.write(previewHtml);
- doc.close();
- } else {
- this.getEl('body').firstChild.src = 'data:text/html;charset=utf-8,' + encodeURIComponent(previewHtml);
- }
- }
- });
- });
- editor.addButton('preview', {
- title : 'Preview',
- cmd : 'mcePreview'
- });
- editor.addMenuItem('preview', {
- text : 'Preview',
- cmd : 'mcePreview',
- context: 'view'
- });
- });
|