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