includes/clientside/tinymce/plugins/fullpage/editor_plugin_src.js
changeset 1344 dc96d6c5cd1e
parent 1343 2a31905a567d
child 1345 1de01205143b
equal deleted inserted replaced
1343:2a31905a567d 1344:dc96d6c5cd1e
     1 /**
       
     2  * $Id: editor_plugin_src.js 1029 2009-02-24 22:32:21Z 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.FullPagePlugin', {
       
    10 		init : function(ed, url) {
       
    11 			var t = this;
       
    12 
       
    13 			t.editor = ed;
       
    14 
       
    15 			// Register commands
       
    16 			ed.addCommand('mceFullPageProperties', function() {
       
    17 				ed.windowManager.open({
       
    18 					file : url + '/fullpage.htm',
       
    19 					width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),
       
    20 					height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),
       
    21 					inline : 1
       
    22 				}, {
       
    23 					plugin_url : url,
       
    24 					head_html : t.head
       
    25 				});
       
    26 			});
       
    27 
       
    28 			// Register buttons
       
    29 			ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});
       
    30 
       
    31 			ed.onBeforeSetContent.add(t._setContent, t);
       
    32 			ed.onSetContent.add(t._setBodyAttribs, t);
       
    33 			ed.onGetContent.add(t._getContent, t);
       
    34 		},
       
    35 
       
    36 		getInfo : function() {
       
    37 			return {
       
    38 				longname : 'Fullpage',
       
    39 				author : 'Moxiecode Systems AB',
       
    40 				authorurl : 'http://tinymce.moxiecode.com',
       
    41 				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',
       
    42 				version : tinymce.majorVersion + "." + tinymce.minorVersion
       
    43 			};
       
    44 		},
       
    45 
       
    46 		// Private plugin internal methods
       
    47 
       
    48 		_setBodyAttribs : function(ed, o) {
       
    49 			var bdattr, i, len, kv, k, v, t, attr = this.head.match(/body(.*?)>/i);
       
    50 
       
    51 			if (attr && attr[1]) {
       
    52 				bdattr = attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);
       
    53 
       
    54 				if (bdattr) {
       
    55 					for(i = 0, len = bdattr.length; i < len; i++) {
       
    56 						kv = bdattr[i].split('=');
       
    57 						k = kv[0].replace(/\s/,'');
       
    58 						v = kv[1];
       
    59 
       
    60 						if (v) {
       
    61 							v = v.replace(/^\s+/,'').replace(/\s+$/,'');
       
    62 							t = v.match(/^["'](.*)["']$/);
       
    63 
       
    64 							if (t)
       
    65 								v = t[1];
       
    66 						} else
       
    67 							v = k;
       
    68 
       
    69 						ed.dom.setAttrib(ed.getBody(), 'style', v);
       
    70 					}
       
    71 				}
       
    72 			}
       
    73 		},
       
    74 
       
    75 		_createSerializer : function() {
       
    76 			return new tinymce.dom.Serializer({
       
    77 				dom : this.editor.dom,
       
    78 				apply_source_formatting : true
       
    79 			});
       
    80 		},
       
    81 
       
    82 		_setContent : function(ed, o) {
       
    83 			var t = this, sp, ep, c = o.content, v, st = '';
       
    84 
       
    85 			if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))
       
    86 				return;
       
    87 
       
    88 			// Parse out head, body and footer
       
    89 			c = c.replace(/<(\/?)BODY/gi, '<$1body');
       
    90 			sp = c.indexOf('<body');
       
    91 
       
    92 			if (sp != -1) {
       
    93 				sp = c.indexOf('>', sp);
       
    94 				t.head = c.substring(0, sp + 1);
       
    95 
       
    96 				ep = c.indexOf('</body', sp);
       
    97 				if (ep == -1)
       
    98 					ep = c.indexOf('</body', ep);
       
    99 
       
   100 				o.content = c.substring(sp + 1, ep);
       
   101 				t.foot = c.substring(ep);
       
   102 
       
   103 				function low(s) {
       
   104 					return s.replace(/<\/?[A-Z]+/g, function(a) {
       
   105 						return a.toLowerCase();
       
   106 					})
       
   107 				};
       
   108 
       
   109 				t.head = low(t.head);
       
   110 				t.foot = low(t.foot);
       
   111 			} else {
       
   112 				t.head = '';
       
   113 				if (ed.getParam('fullpage_default_xml_pi'))
       
   114 					t.head += '<?xml version="1.0" encoding="' + ed.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';
       
   115 
       
   116 				t.head += ed.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
       
   117 				t.head += '\n<html>\n<head>\n<title>' + ed.getParam('fullpage_default_title', 'Untitled document') + '</title>\n';
       
   118 
       
   119 				if (v = ed.getParam('fullpage_default_encoding'))
       
   120 					t.head += '<meta http-equiv="Content-Type" content="' + v + '" />\n';
       
   121 
       
   122 				if (v = ed.getParam('fullpage_default_font_family'))
       
   123 					st += 'font-family: ' + v + ';';
       
   124 
       
   125 				if (v = ed.getParam('fullpage_default_font_size'))
       
   126 					st += 'font-size: ' + v + ';';
       
   127 
       
   128 				if (v = ed.getParam('fullpage_default_text_color'))
       
   129 					st += 'color: ' + v + ';';
       
   130 
       
   131 				t.head += '</head>\n<body' + (st ? ' style="' + st + '"' : '') + '>\n';
       
   132 				t.foot = '\n</body>\n</html>';
       
   133 			}
       
   134 		},
       
   135 
       
   136 		_getContent : function(ed, o) {
       
   137 			var t = this;
       
   138 
       
   139 			if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))
       
   140 				o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot);
       
   141 		}
       
   142 	});
       
   143 
       
   144 	// Register plugin
       
   145 	tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);
       
   146 })();