wp/wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin_src.js
changeset 0 d970ebf37754
equal deleted inserted replaced
-1:000000000000 0:d970ebf37754
       
     1 /**
       
     2  * WP Fullscreen TinyMCE plugin
       
     3  *
       
     4  * Contains code from Moxiecode Systems AB released under LGPL http://tinymce.moxiecode.com/license
       
     5  */
       
     6 
       
     7 (function() {
       
     8 	tinymce.create('tinymce.plugins.wpFullscreenPlugin', {
       
     9 		resize_timeout: false,
       
    10 
       
    11 		init : function(ed, url) {
       
    12 			var t = this, oldHeight = 0, s = {}, DOM = tinymce.DOM;
       
    13 
       
    14 			// Register commands
       
    15 			ed.addCommand('wpFullScreenClose', function() {
       
    16 				// this removes the editor, content has to be saved first with tinyMCE.execCommand('wpFullScreenSave');
       
    17 				if ( ed.getParam('wp_fullscreen_is_enabled') ) {
       
    18 					DOM.win.setTimeout(function() {
       
    19 						tinyMCE.remove(ed);
       
    20 						DOM.remove('wp_mce_fullscreen_parent');
       
    21 						tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings
       
    22 					}, 10);
       
    23 				}
       
    24 			});
       
    25 
       
    26 			ed.addCommand('wpFullScreenSave', function() {
       
    27 				var ed = tinyMCE.get('wp_mce_fullscreen'), edd;
       
    28 
       
    29 				ed.focus();
       
    30 				edd = tinyMCE.get( ed.getParam('wp_fullscreen_editor_id') );
       
    31 
       
    32 				edd.setContent( ed.getContent({format : 'raw'}), {format : 'raw'} );
       
    33 			});
       
    34 
       
    35 			ed.addCommand('wpFullScreenInit', function() {
       
    36 				var d, b, fsed;
       
    37 
       
    38 				ed = tinyMCE.activeEditor;
       
    39 				d = ed.getDoc();
       
    40 				b = d.body;
       
    41 
       
    42 				tinyMCE.oldSettings = tinyMCE.settings; // Store old settings
       
    43 
       
    44 				tinymce.each(ed.settings, function(v, n) {
       
    45 					s[n] = v;
       
    46 				});
       
    47 
       
    48 				s.id = 'wp_mce_fullscreen';
       
    49 				s.wp_fullscreen_is_enabled = true;
       
    50 				s.wp_fullscreen_editor_id = ed.id;
       
    51 				s.theme_advanced_resizing = false;
       
    52 				s.theme_advanced_statusbar_location = 'none';
       
    53 				s.content_css = s.content_css ? s.content_css + ',' + s.wp_fullscreen_content_css : s.wp_fullscreen_content_css;
       
    54 				s.height = tinymce.isIE ? b.scrollHeight : b.offsetHeight;
       
    55 
       
    56 				tinymce.each(ed.getParam('wp_fullscreen_settings'), function(v, k) {
       
    57 					s[k] = v;
       
    58 				});
       
    59 
       
    60 				fsed = new tinymce.Editor('wp_mce_fullscreen', s);
       
    61 				fsed.onInit.add(function(edd) {
       
    62 					var DOM = tinymce.DOM, buttons = DOM.select('a.mceButton', DOM.get('wp-fullscreen-buttons'));
       
    63 
       
    64 					if ( !ed.isHidden() )
       
    65 						edd.setContent( ed.getContent() );
       
    66 					else
       
    67 						edd.setContent( switchEditors.wpautop( edd.getElement().value ) );
       
    68 
       
    69 					setTimeout(function(){ // add last
       
    70 						edd.onNodeChange.add(function(ed, cm, e){
       
    71 							tinymce.each(buttons, function(c) {
       
    72 								var btn, cls;
       
    73 
       
    74 								if ( btn = DOM.get( 'wp_mce_fullscreen_' + c.id.substr(6) ) ) {
       
    75 									cls = btn.className;
       
    76 
       
    77 									if ( cls )
       
    78 										c.className = cls;
       
    79 								}
       
    80 							});
       
    81 						});
       
    82 					}, 1000);
       
    83 
       
    84 					edd.dom.addClass(edd.getBody(), 'wp-fullscreen-editor');
       
    85 					edd.focus();
       
    86 				});
       
    87 
       
    88 				fsed.render();
       
    89 
       
    90 				if ( 'undefined' != fullscreen ) {
       
    91 					fsed.dom.bind( fsed.dom.doc, 'mousemove', function(e){
       
    92 						fullscreen.bounder( 'showToolbar', 'hideToolbar', 2000, e );
       
    93 					});
       
    94 				}
       
    95 			});
       
    96 
       
    97 			ed.addCommand('wpFullScreen', function() {
       
    98 				if ( typeof(fullscreen) == 'undefined' )
       
    99 					return;
       
   100 
       
   101 				if ( 'wp_mce_fullscreen' == ed.id )
       
   102 					fullscreen.off();
       
   103 				else
       
   104 					fullscreen.on();
       
   105 			});
       
   106 
       
   107 			// Register buttons
       
   108 			ed.addButton('wp_fullscreen', {
       
   109 				title : 'wordpress.wp_fullscreen_desc',
       
   110 				cmd : 'wpFullScreen'
       
   111 			});
       
   112 
       
   113 			// END fullscreen
       
   114 //----------------------------------------------------------------
       
   115 			// START autoresize
       
   116 
       
   117 			if ( ed.getParam('fullscreen_is_enabled') || !ed.getParam('wp_fullscreen_is_enabled') )
       
   118 				return;
       
   119 
       
   120 			/**
       
   121 			 * This method gets executed each time the editor needs to resize.
       
   122 			 */
       
   123 			function resize(editor, e) {
       
   124 				var DOM = tinymce.DOM, body = ed.getBody(), ifr = DOM.get(ed.id + '_ifr'), height, y = ed.dom.win.scrollY;
       
   125 
       
   126 				if ( t.resize_timeout )
       
   127 					return;
       
   128 
       
   129 				// sometimes several events are fired few ms apart, trottle down resizing a little
       
   130 				t.resize_timeout = true;
       
   131 				setTimeout(function(){
       
   132 					t.resize_timeout = false;
       
   133 				}, 500);
       
   134 
       
   135 				height = body.scrollHeight > 300 ? body.scrollHeight : 300;
       
   136 
       
   137 				if ( height != ifr.scrollHeight ) {
       
   138 					DOM.setStyle(ifr, 'height', height + 'px');
       
   139 					ed.getWin().scrollTo(0, 0); // iframe window object, make sure there's no scrolling
       
   140 				}
       
   141 
       
   142 				// WebKit scrolls to top on paste...
       
   143 				if ( e && e.type == 'paste' && tinymce.isWebKit ) {
       
   144 					setTimeout(function(){
       
   145 						ed.dom.win.scrollTo(0, y);
       
   146 					}, 40);
       
   147 				}
       
   148 			};
       
   149 
       
   150 			// Add appropriate listeners for resizing content area
       
   151 			ed.onInit.add(function(ed, l) {
       
   152 				ed.onChange.add(resize);
       
   153 				ed.onSetContent.add(resize);
       
   154 				ed.onPaste.add(resize);
       
   155 				ed.onKeyUp.add(resize);
       
   156 				ed.onPostRender.add(resize);
       
   157 
       
   158 				ed.getBody().style.overflowY = "hidden";
       
   159 			});
       
   160 
       
   161 			if ( ed.getParam('autoresize_on_init', true) ) {
       
   162 				ed.onLoadContent.add(function(ed, l) {
       
   163 					// Because the content area resizes when its content CSS loads,
       
   164 					// and we can't easily add a listener to its onload event,
       
   165 					// we'll just trigger a resize after a short loading period
       
   166 					setTimeout(function() {
       
   167 						resize();
       
   168 					}, 1200);
       
   169 				});
       
   170 			}
       
   171 
       
   172 			// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
       
   173 			ed.addCommand('wpAutoResize', resize);
       
   174 		},
       
   175 
       
   176 		getInfo : function() {
       
   177 			return {
       
   178 				longname : 'WP Fullscreen',
       
   179 				author : 'WordPress',
       
   180 				authorurl : 'http://wordpress.org',
       
   181 				infourl : '',
       
   182 				version : '1.0'
       
   183 			};
       
   184 		}
       
   185 	});
       
   186 
       
   187 	// Register plugin
       
   188 	tinymce.PluginManager.add('wpfullscreen', tinymce.plugins.wpFullscreenPlugin);
       
   189 })();