]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/js/tinymce/plugins/wordpress/editor_plugin.dev.js
Wordpress 3.1
[autoinstalls/wordpress.git] / wp-includes / js / tinymce / plugins / wordpress / editor_plugin.dev.js
index 0962cffbf0d69f23b07eda09880577535ae616cf..f899868873c366c49106ef07d10578b47a1ec885 100644 (file)
@@ -6,6 +6,8 @@
        var DOM = tinymce.DOM;
 
        tinymce.create('tinymce.plugins.WordPress', {
+               mceTout : 0,
+
                init : function(ed, url) {
                        var t = this, tbId = ed.getParam('wordpress_adv_toolbar', 'toolbar2'), last = 0, moreHTML, nextpageHTML;
                        moreHTML = '<img src="' + url + '/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />';
@@ -16,8 +18,9 @@
 
                        // Hides the specified toolbar and resizes the iframe
                        ed.onPostRender.add(function() {
-                               if ( ed.getParam('wordpress_adv_hidden', 1) ) {
-                                       DOM.hide(ed.controlManager.get(tbId).id);
+                               var adv_toolbar = ed.controlManager.get(tbId);
+                               if ( ed.getParam('wordpress_adv_hidden', 1) && adv_toolbar ) {
+                                       DOM.hide(adv_toolbar.id);
                                        t._resizeIframe(ed, tbId, 28);
                                }
                        });
                        });
 
                        ed.addCommand('WP_Help', function() {
-                                       ed.windowManager.open({
-                                               url : tinymce.baseURL + '/wp-mce-help.php',
-                                               width : 450,
-                                               height : 420,
-                                               inline : 1
-                                       });
+                               ed.windowManager.open({
+                                       url : tinymce.baseURL + '/wp-mce-help.php',
+                                       width : 450,
+                                       height : 420,
+                                       inline : 1
                                });
+                       });
 
                        ed.addCommand('WP_Adv', function() {
-                               var id = ed.controlManager.get(tbId).id, cm = ed.controlManager;
+                               var cm = ed.controlManager, id = cm.get(tbId).id;
+
+                               if ( 'undefined' == id )
+                                       return;
 
-                               if (DOM.isHidden(id)) {
+                               if ( DOM.isHidden(id) ) {
                                        cm.setActive('wp_adv', 1);
                                        DOM.show(id);
                                        t._resizeIframe(ed, tbId, -28);
                                }
                        });
 
-                       // Add Media buttons to fullscreen
-                       ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) {
-                               if ( 'mceFullScreen' != cmd ) return;
-                               if ( 'mce_fullscreen' != ed.id )
-                                       ed.settings.theme_advanced_buttons1 += ',|,add_image,add_video,add_audio,add_media';
-                       });
-
-                       // Add class "alignleft", "alignright" and "aligncenter" when selecting align for images.
-                       ed.addCommand('JustifyLeft', function() {
-                               var n = ed.selection.getNode();
-
-                               if ( n.nodeName != 'IMG' )
-                                       ed.editorCommands.mceJustify('JustifyLeft', 'left');
-                               else ed.plugins.wordpress.do_align(n, 'alignleft');
-                       });
-
-                       ed.addCommand('JustifyRight', function() {
-                               var n = ed.selection.getNode();
+                       // Add Media buttons to fullscreen and handle align buttons for image captions
+                       ed.onBeforeExecCommand.add(function(ed, cmd, ui, val, o) {
+                               var DOM = tinymce.DOM, n, DL, DIV, cls, a, align;
+                               if ( 'mceFullScreen' == cmd ) {
+                                       if ( 'mce_fullscreen' != ed.id && DOM.get('add_audio') && DOM.get('add_video') && DOM.get('add_image') && DOM.get('add_media') )
+                                               ed.settings.theme_advanced_buttons1 += ',|,add_image,add_video,add_audio,add_media';
+                               }
 
-                               if ( n.nodeName != 'IMG' )
-                                       ed.editorCommands.mceJustify('JustifyRight', 'right');
-                               else ed.plugins.wordpress.do_align(n, 'alignright');
+                               if ( 'JustifyLeft' == cmd || 'JustifyRight' == cmd || 'JustifyCenter' == cmd ) {
+                                       n = ed.selection.getNode();
+
+                                       if ( n.nodeName == 'IMG' ) {
+                                               align = cmd.substr(7).toLowerCase();
+                                               a = 'align' + align;
+                                               DL = ed.dom.getParent(n, 'dl.wp-caption');
+                                               DIV = ed.dom.getParent(n, 'div.mceTemp');
+
+                                               if ( DL && DIV ) {
+                                                       cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a;
+                                                       DL.className = DL.className.replace(/align[^ '"]+\s?/g, '');
+                                                       ed.dom.addClass(DL, cls);
+
+                                                       if (cls == 'aligncenter')
+                                                               ed.dom.addClass(DIV, 'mceIEcenter');
+                                                       else
+                                                               ed.dom.removeClass(DIV, 'mceIEcenter');
+
+                                                       o.terminate = true;
+                                                       ed.execCommand('mceRepaint');
+                                               } else {
+                                                       if ( ed.dom.hasClass(n, a) )
+                                                               ed.dom.addClass(n, 'alignnone');
+                                                       else
+                                                               ed.dom.removeClass(n, 'alignnone');
+                                               }
+                                       }
+                               }
                        });
+                       
+                       ed.onInit.add(function(ed) {
+                               // make sure these run last
+                               ed.onNodeChange.add( function(ed, cm, e) {
+                                       var DL;
+
+                                       if ( e.nodeName == 'IMG' ) {
+                                               DL = ed.dom.getParent(e, 'dl.wp-caption');
+                                       } else if ( e.nodeName == 'DIV' && ed.dom.hasClass(e, 'mceTemp') ) {
+                                               DL = e.firstChild;
+
+                                               if ( ! ed.dom.hasClass(DL, 'wp-caption') )
+                                                       DL = false;
+                                       }
+
+                                       if ( DL ) {
+                                               if ( ed.dom.hasClass(DL, 'alignleft') )
+                                                       cm.setActive('justifyleft', 1);
+                                               else if ( ed.dom.hasClass(DL, 'alignright') )
+                                                       cm.setActive('justifyright', 1);
+                                               else if ( ed.dom.hasClass(DL, 'aligncenter') )
+                                                       cm.setActive('justifycenter', 1);
+                                       }
+                               });
 
-                       ed.addCommand('JustifyCenter', function() {
-                               var n = ed.selection.getNode(), P = ed.dom.getParent(n, 'p'), DL = ed.dom.getParent(n, 'dl');
-
-                               if ( n.nodeName == 'IMG' && ( P || DL ) )
-                                       ed.plugins.wordpress.do_align(n, 'aligncenter');
-                               else ed.editorCommands.mceJustify('JustifyCenter', 'center');
+                               // remove invalid parent paragraphs when pasting HTML and/or switching to the HTML editor and back
+                               ed.onBeforeSetContent.add(function(ed, o) {
+                                       if ( o.content ) {
+                                               o.content = o.content.replace(/<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)( [^>]*)?>/gi, '<$1$2>');
+                                               o.content = o.content.replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre|address)>\s*<\/p>/gi, '</$1>');
+                                       }
+                               });
                        });
 
                        // Word count if script is loaded
                                });
                        };
 
+                       ed.onSaveContent.add(function(ed, o) {
+                               if ( typeof(switchEditors) == 'object' ) {
+                                       if ( ed.isHidden() )
+                                               o.content = o.element.value;
+                                       else
+                                               o.content = switchEditors.pre_wpautop(o.content);
+                               }
+                       });
+
+                       /* disable for now
+                       ed.onBeforeSetContent.add(function(ed, o) {
+                               o.content = t._setEmbed(o.content);
+                       });
+
+                       ed.onPostProcess.add(function(ed, o) {
+                               if ( o.get )
+                                       o.content = t._getEmbed(o.content);
+                       });
+                       */
+
                        // Add listeners to handle more break
                        t._handleMoreBreak(ed, url);
 
                                ed.addShortcut('alt+shift+b', ed.getLang('bold_desc'), 'Bold');
                                ed.addShortcut('alt+shift+i', ed.getLang('italic_desc'), 'Italic');
                        }
+
+                       ed.onInit.add(function(ed) {
+                               tinymce.dom.Event.add(ed.getWin(), 'scroll', function(e) {
+                                       ed.plugins.wordpress._hideButtons();
+                               });
+                               tinymce.dom.Event.add(ed.getBody(), 'dragstart', function(e) {
+                                       ed.plugins.wordpress._hideButtons();
+                               });
+                       });
+
+                       ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) {
+                               ed.plugins.wordpress._hideButtons();
+                       });
+
+                       ed.onSaveContent.add(function(ed, o) {
+                               ed.plugins.wordpress._hideButtons();
+                       });
+
+                       ed.onMouseDown.add(function(ed, e) {
+                               if ( e.target.nodeName != 'IMG' )
+                                       ed.plugins.wordpress._hideButtons();
+                       });
                },
 
                getInfo : function() {
                },
 
                // Internal functions
-               do_align : function(n, a) {
-                       var P, DL, DIV, cls, c, ed = tinyMCE.activeEditor;
+               _setEmbed : function(c) {
+                       return c.replace(/\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g, function(a,b){
+                               return '<img width="300" height="200" src="' + tinymce.baseURL + '/plugins/wordpress/img/trans.gif" class="wp-oembed mceItemNoResize" alt="'+b+'" title="'+b+'" />';
+                       });
+               },
+
+               _getEmbed : function(c) {
+                       return c.replace(/<img[^>]+>/g, function(a) {
+                               if ( a.indexOf('class="wp-oembed') != -1 ) {
+                                       var u = a.match(/alt="([^\"]+)"/);
+                                       if ( u[1] )
+                                               a = '[embed]' + u[1] + '[/embed]';
+                               }
+                               return a;
+                       });
+               },
+
+               _showButtons : function(n, id) {
+                       var ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y;
+
+                       vp = ed.dom.getViewPort(ed.getWin());
+                       p1 = DOM.getPos(ed.getContentAreaContainer());
+                       p2 = ed.dom.getPos(n);
+
+                       X = Math.max(p2.x - vp.x, 0) + p1.x;
+                       Y = Math.max(p2.y - vp.y, 0) + p1.y;
+
+                       DOM.setStyles(id, {
+                               'top' : Y+5+'px',
+                               'left' : X+5+'px',
+                               'display' : 'block'
+                       });
+
+                       if ( this.mceTout )
+                               clearTimeout(this.mceTout);
 
-                       if ( /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className) )
+                       this.mceTout = setTimeout( function(){ed.plugins.wordpress._hideButtons();}, 5000 );
+               },
+
+               _hideButtons : function() {
+                       if ( !this.mceTout )
                                return;
 
-                       P = ed.dom.getParent(n, 'p');
-                       DL = ed.dom.getParent(n, 'dl');
-                       DIV = ed.dom.getParent(n, 'div');
-
-                       if ( DL && DIV ) {
-                               cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a;
-                               DL.className = DL.className.replace(/align[^ '"]+\s?/g, '');
-                               ed.dom.addClass(DL, cls);
-                               c = (cls == 'aligncenter') ? ed.dom.addClass(DIV, 'mceIEcenter') : ed.dom.removeClass(DIV, 'mceIEcenter');
-                       } else if ( P ) {
-                               cls = ed.dom.hasClass(n, a) ? 'alignnone' : a;
-                               n.className = n.className.replace(/align[^ '"]+\s?/g, '');
-                               ed.dom.addClass(n, cls);
-                               if ( cls == 'aligncenter' )
-                                       ed.dom.setStyle(P, 'textAlign', 'center');
-                               else if (P.style && P.style.textAlign == 'center')
-                                       ed.dom.setStyle(P, 'textAlign', '');
-                       }
+                       if ( document.getElementById('wp_editbtns') )
+                               tinymce.DOM.hide('wp_editbtns');
+
+                       if ( document.getElementById('wp_gallerybtns') )
+                               tinymce.DOM.hide('wp_gallerybtns');
 
-                       ed.execCommand('mceRepaint');
+                       clearTimeout(this.mceTout);
+                       this.mceTout = 0;
                },
 
                // Resizes the iframe by a relative height value
 
                _handleMoreBreak : function(ed, url) {
                        var moreHTML, nextpageHTML;
-                       
+
                        moreHTML = '<img src="' + url + '/img/trans.gif" alt="$1" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />';
                        nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />';
 
 
                        // Replace morebreak with images
                        ed.onBeforeSetContent.add(function(ed, o) {
-                               o.content = o.content.replace(/<!--more(.*?)-->/g, moreHTML);
-                               o.content = o.content.replace(/<!--nextpage-->/g, nextpageHTML);
+                               if ( o.content ) {
+                                       o.content = o.content.replace(/<!--more(.*?)-->/g, moreHTML);
+                                       o.content = o.content.replace(/<!--nextpage-->/g, nextpageHTML);
+                               }
                        });
 
                        // Replace images with morebreak