1 /*
  2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
  3 For licensing, see LICENSE.html or http://ckeditor.com/license
  4 */
  5
  6 /**
  7  * @file Preview plugin.
  8  */
  9
 10 (function()
 11 {
 12 	var previewCmd =
 13 	{
 14 		modes : { wysiwyg:1, source:1 },
 15 		canUndo : false,
 16 		exec : function( editor )
 17 		{
 18 			var sHTML,
 19 				isCustomDomain = CKEDITOR.env.ie && document.domain != window.location.hostname;
 20 			if ( editor.config.fullPage )
 21 				sHTML = editor.getData();
 22 			else
 23 			{
 24 				var bodyHtml = '<body ',
 25 					body = CKEDITOR.document.getBody(),
 26 					baseTag = ( editor.config.baseHref.length > 0 ) ? '<base href="' + editor.config.baseHref + '" _cktemp="true"></base>' : '';
 27
 28 				if ( body.getAttribute( 'id' ) )
 29 					bodyHtml += 'id="' + body.getAttribute( 'id' ) + '" ';
 30 				if ( body.getAttribute( 'class' ) )
 31 					bodyHtml += 'class="' + body.getAttribute( 'class' ) + '" ';
 32 				bodyHtml += '>';
 33
 34 				sHTML =
 35 					editor.config.docType +
 36 					'<html dir="' + editor.config.contentsLangDirection + '">' +
 37 					'<head>' +
 38 					baseTag +
 39 					'<title>' + editor.lang.preview + '</title>' +
 40 					'<link href="' + editor.config.contentsCss + '" type="text/css" rel="stylesheet" _cktemp="true"/>' +
 41 					'</head>' + bodyHtml +
 42 					editor.getData() +
 43 					'</body></html>';
 44 			}
 45
 46 			var iWidth	= 640,	// 800 * 0.8,
 47 				iHeight	= 420,	// 600 * 0.7,
 48 				iLeft	= 80;	// (800 - 0.8 * 800) /2 = 800 * 0.1.
 49 			try
 50 			{
 51 				var screen = window.screen;
 52 				iWidth = Math.round( screen.width * 0.8 );
 53 				iHeight = Math.round( screen.height * 0.7 );
 54 				iLeft = Math.round( screen.width * 0.1 );
 55 			}
 56 			catch ( e ){}
 57
 58 			var sOpenUrl = '';
 59 			if ( isCustomDomain )
 60 			{
 61 				window._cke_htmlToLoad = sHTML;
 62 				sOpenUrl = 'javascript:void( (function(){' +
 63 					'document.open();' +
 64 					'document.domain="' + document.domain + '";' +
 65 					'document.write( window.opener._cke_htmlToLoad );' +
 66 					'document.close();' +
 67 					'window.opener._cke_htmlToLoad = null;' +
 68 					'})() )';
 69 			}
 70
 71 			var oWindow = window.open( sOpenUrl, null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' +
 72 				iWidth + ',height=' + iHeight + ',left=' + iLeft );
 73
 74 			if ( !isCustomDomain )
 75 			{
 76 				oWindow.document.write( sHTML );
 77 				oWindow.document.close();
 78 			}
 79 		}
 80 	};
 81
 82 	var pluginName = 'preview';
 83
 84 	// Register a plugin named "preview".
 85 	CKEDITOR.plugins.add( pluginName,
 86 	{
 87 		init : function( editor )
 88 		{
 89 			editor.addCommand( pluginName, previewCmd );
 90 			editor.ui.addButton( 'Preview',
 91 				{
 92 					label : editor.lang.preview,
 93 					command : pluginName
 94 				});
 95 		}
 96 	});
 97 })();
 98