Вход Регистрация
Файл: wordpress/wp-admin/js/editor.js
Строк: 425
<?php
/* global tinymce, tinyMCEPreInit, QTags, setUserSetting */

window.switchEditors = {

    
switchto: function( el ) {
        var 
aid el.id,
            
aid.length,
            
id aid.substr0),
            
mode aid.substr);

        
this.goidmode );
    },

    
// mode can be 'html', 'tmce', or 'toggle'; 'html' is used for the 'Text' editor tab.
    
go: function( idmode ) {
        var 
thisedwrap_idtxtarea_eliframeeditorHeighttoolbarHeight,
            
DOM tinymce.DOM//DOMUtils outside the editor iframe

        
id id || 'content';
        
mode mode || 'toggle';

        
ed tinymce.getid );
        
wrap_id 'wp-' id '-wrap';
        
txtarea_el DOM.getid );

        if ( 
'toggle' === mode ) {
            if ( 
ed && ! ed.isHidden() ) {
                
mode 'html';
            } else {
                
mode 'tmce';
            }
        }

        function 
getToolbarHeight() {
            var 
node DOM.select'.mce-toolbar-grp'ed.getContainer() )[0],
                
height node && node.clientHeight;

            if ( 
height && height 10 && height 200 ) {
                return 
parseIntheight10 );
            }

            return 
30;
        }

        if ( 
'tmce' === mode || 'tinymce' === mode ) {
            if ( 
ed && ! ed.isHidden() ) {
                return 
false;
            }

            if ( 
typeofQTags ) !== 'undefined' ) {
                
QTags.closeAllTagsid );
            }

            
editorHeight txtarea_el parseInttxtarea_el.style.height10 ) : 0;

            if ( 
tinyMCEPreInit.mceInitid ] && tinyMCEPreInit.mceInitid ].wpautop ) {
                
txtarea_el.value t.wpautoptxtarea_el.value );
            }

            if ( 
ed ) {
                
ed.show();

                
// No point resizing the iframe in iOS
                
if ( ! tinymce.Env.iOS && editorHeight ) {
                    
toolbarHeight getToolbarHeight();
                    
editorHeight editorHeight toolbarHeight 14;

                    
// height cannot be under 50 or over 5000
                    
if ( editorHeight 50 && editorHeight 5000 ) {
                        
ed.theme.resizeTonulleditorHeight );
                    }
                }
            } else {
                
tinymce.inittinyMCEPreInit.mceInit[id] );
            }

            
DOM.removeClasswrap_id'html-active' );
            
DOM.addClasswrap_id'tmce-active' );
            
DOM.setAttribtxtarea_el'aria-hidden'true );
            
setUserSetting'editor''tinymce' );

        } else if ( 
'html' === mode ) {

            if ( 
ed && ed.isHidden() ) {
                return 
false;
            }

            if ( 
ed ) {
                if ( ! 
tinymce.Env.iOS ) {
                    
iframe DOM.getid '_ifr' );
                    
editorHeight iframe parseIntiframe.style.height10 ) : 0;

                    if ( 
editorHeight ) {
                        
toolbarHeight getToolbarHeight();
                        
editorHeight editorHeight toolbarHeight 14;

                        
// height cannot be under 50 or over 5000
                        
if ( editorHeight 50 && editorHeight 5000 ) {
                            
txtarea_el.style.height editorHeight 'px';
                        }
                    }
                }

                
ed.hide();
            } else {
                
// The TinyMCE instance doesn't exist, run the content through 'pre_wpautop()' and show the textarea
                
if ( tinyMCEPreInit.mceInitid ] && tinyMCEPreInit.mceInitid ].wpautop ) {
                    
txtarea_el.value t.pre_wpautoptxtarea_el.value );
                }

                
DOM.setStylestxtarea_el, {'display''''visibility'''} );
            }

            
DOM.removeClasswrap_id'tmce-active' );
            
DOM.addClasswrap_id'html-active' );
            
DOM.setAttribtxtarea_el'aria-hidden'false );
            
setUserSetting'editor''html' );
        }
        return 
false;
    },

    
_wp_Nop: function( content ) {
        var 
blocklist1blocklist2,
            
preserve_linebreaks false,
            
preserve_br false;

        
// Protect pre|script tags
        
if ( content.indexOf'<pre' ) !== -|| content.indexOf'<script' ) !== -) {
            
preserve_linebreaks true;
            
content content.replace( /<(pre|script)[^>]*>[sS]+?</1>/g, function( ) {
                
a.replace( /<br ?/?>(rn|n)?/g, '<wp-line-break>' );
                a = a.replace( /</?p( [^>]*)?>(rn|n)?/g, '<wp-line-break>' );
                return a.replace( /r?n/g, '<wp-line-break>' );
            });
        }

        // keep <br> tags inside captions and remove line breaks
        if ( content.indexOf( '[caption' ) !== -1 ) {
            preserve_br = true;
            content = content.replace( /[caption[sS]+?[/caption]/g, function( a ) {
                return a.replace( /<br([^>]*)>/g, '<wp-temp-br$1>' ).replace( /[rnt]+/, '' );
            });
        }

        // Pretty it up for the source editor
        blocklist1 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|div|h[1-6]|p|fieldset';
        content = content.replace( new RegExp( '\s*</(' + blocklist1 + ')>\s*', 'g' ), '</$1>n' );
        content = content.replace( new RegExp( '\s*<((?:' + blocklist1 + ')(?: [^>]*)?)>', 'g' ), 'n<$1>' );

        // Mark </p> if it has any attributes.
        content = content.replace( /(<p [^>]+>.*?)</p>/g, '$1</p#>' );

        // Separate <div> containing <p>
        content = content.replace( /<div( [^>]*)?>s*<p>/gi, '<div$1>nn' );

        // Remove <p> and <br />
        content = content.replace( /s*<p>/gi, '' );
        content = content.replace( /s*</p>s*/gi, 'nn' );
        content = content.replace( /n[su00a0]+n/g, 'nn' );
        content = content.replace( /s*<br ?/?>s*/gi, 'n' );

        // Fix some block element newline issues
        content = content.replace( /s*<div/g, 'n<div' );
        content = content.replace( /</div>s*/g, '</div>n' );
        content = content.replace( /s*[caption([^[]+)[/caption]s*/gi, 'nn[caption$1[/caption]nn' );
        content = content.replace( /caption]nn+[caption/g, 'caption]nn[caption' );

        blocklist2 = 'blockquote|ul|ol|li|table|thead|tbody|tfoot|tr|th|td|h[1-6]|pre|fieldset';
        content = content.replace( new RegExp('\s*<((?:' + blocklist2 + ')(?: [^>]*)?)\s*>', 'g' ), 'n<$1>' );
        content = content.replace( new RegExp('\s*</(' + blocklist2 + ')>\s*', 'g' ), '</$1>n' );
        content = content.replace( /<li([^>]*)>/g, 't<li$1>' );

        if ( content.indexOf( '<option' ) !== -1 ) {
            content = content.replace( /s*<option/g, 'n<option' );
            content = content.replace( /s*</select>/g, 'n</select>' );
        }

        if ( content.indexOf( '<hr' ) !== -1 ) {
            content = content.replace( /s*<hr( [^>]*)?>s*/g, 'nn<hr$1>nn' );
        }

        if ( content.indexOf( '<object' ) !== -1 ) {
            content = content.replace( /<object[sS]+?</object>/g, function( a ) {
                return a.replace( /[rn]+/g, '' );
            });
        }

        // Unmark special paragraph closing tags
        content = content.replace( /</p#>/g, '</p>n' );
        content = content.replace( /s*(<p [^>]+>[sS]*?</p>)/g, 'n$1' );

        // Trim whitespace
        content = content.replace( /^s+/, '' );
        content = content.replace( /[su00a0]+$/, '' );

        // put back the line breaks in pre|script
        if ( preserve_linebreaks ) {
            content = content.replace( /<wp-line-break>/g, 'n' );
        }

        // and the <br> tags in captions
        if ( preserve_br ) {
            content = content.replace( /<wp-temp-br([^>]*)>/g, '<br$1>' );
        }

        return content;
    },

    _wp_Autop: function(pee) {
        var preserve_linebreaks = false,
            preserve_br = false,
            blocklist = 'table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre' +
                '|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section' +
                '|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary';

        if ( pee.indexOf( '<object' ) !== -1 ) {
            pee = pee.replace( /<object[sS]+?</object>/g, function( a ) {
                return a.replace( /[rn]+/g, '' );
            });
        }

        pee = pee.replace( /<[^<>]+>/g, function( a ){
            return a.replace( /[rn]+/g, ' ' );
        });

        // Protect pre|script tags
        if ( pee.indexOf( '<pre' ) !== -1 || pee.indexOf( '<script' ) !== -1 ) {
            preserve_linebreaks = true;
            pee = pee.replace( /<(pre|script)[^>]*>[sS]+?</1>/g, function( a ) {
                return a.replace( /(rn|n)/g, '<wp-line-break>' );
            });
        }

        // keep <br> tags inside captions and convert line breaks
        if ( pee.indexOf( '[caption' ) !== -1 ) {
            preserve_br = true;
            pee = pee.replace( /[caption[sS]+?[/caption]/g, function( a ) {
                // keep existing <br>
                a = a.replace( /<br([^>]*)>/g, '<wp-temp-br$1>' );
                // no line breaks inside HTML tags
                a = a.replace( /<[a-zA-Z0-9]+( [^<>]+)?>/g, function( b ) {
                    return b.replace( /[rnt]+/, ' ' );
                });
                // convert remaining line breaks to <br>
                return a.replace( /s*ns*/g, '<wp-temp-br />' );
            });
        }

        pee = pee + 'nn';
        pee = pee.replace( /<br />s*<br />/gi, 'nn' );
        pee = pee.replace( new RegExp( '(<(?:' + blocklist + ')(?: [^>]*)?>)', 'gi' ), 'n$1' );
        pee = pee.replace( new RegExp( '(</(?:' + blocklist + ')>)', 'gi' ), '$1nn' );
        pee = pee.replace( /<hr( [^>]*)?>/gi, '<hr$1>nn' ); // hr is self closing block element
        pee = pee.replace( /s*<option/gi, '<option' ); // No <p> or <br> around <option>
        pee = pee.replace( /</option>s*/gi, '</option>' );
        pee = pee.replace( /rn|r/g, 'n' );
        pee = pee.replace( /ns*n+/g, 'nn' );
        pee = pee.replace( /([sS]+?)nn/g, '<p>$1</p>n' );
        pee = pee.replace( /<p>s*?</p>/gi, '');
        pee = pee.replace( new RegExp( '<p>\s*(</?(?:' + blocklist + ')(?: [^>]*)?>)\s*</p>', 'gi' ), '$1' );
        pee = pee.replace( /<p>(<li.+?)</p>/gi, '$1');
        pee = pee.replace( /<p>s*<blockquote([^>]*)>/gi, '<blockquote$1><p>');
        pee = pee.replace( /</blockquote>s*</p>/gi, '</p></blockquote>');
        pee = pee.replace( new RegExp( '<p>\s*(</?(?:' + blocklist + ')(?: [^>]*)?>)', 'gi' ), '$1' );
        pee = pee.replace( new RegExp( '(</?(?:' + blocklist + ')(?: [^>]*)?>)\s*</p>', 'gi' ), '$1' );
        pee = pee.replace( /s*n/gi, '<br />n');
        pee = pee.replace( new RegExp( '(</?(?:' + blocklist + ')[^>]*>)\s*<br />', 'gi' ), '$1' );
        pee = pee.replace( /<br />(s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)/gi, '$1' );
        pee = pee.replace( /(?:<p>|<br ?/?>)*s*[caption([^[]+)[/caption]s*(?:</p>|<br ?/?>)*/gi, '[caption$1[/caption]' );

        pee = pee.replace( /(<(?:div|th|td|form|fieldset|dd)[^>]*>)(.*?)</p>/g, function( a, b, c ) {
            if ( c.match( /<p( [^>]*)?>/ ) ) {
                return a;
            }

            return b + '<p>' + c + '</p>';
        });

        // put back the line breaks in pre|script
        if ( preserve_linebreaks ) {
            pee = pee.replace( /<wp-line-break>/g, 'n' );
        }

        if ( preserve_br ) {
            pee = pee.replace( /<wp-temp-br([^>]*)>/g, '<br$1>' );
        }

        return pee;
    },

    pre_wpautop: function( content ) {
        var t = this, o = { o: t, data: content, unfiltered: content },
            q = typeof( jQuery ) !== 'undefined';

        if ( q ) {
            jQuery( 'body' ).trigger( 'beforePreWpautop', [ o ] );
        }

        o.data = t._wp_Nop( o.data );

        if ( q ) {
            jQuery('body').trigger('afterPreWpautop', [ o ] );
        }

        return o.data;
    },

    wpautop: function( pee ) {
        var t = this, o = { o: t, data: pee, unfiltered: pee },
            q = typeof( jQuery ) !== 'undefined';

        if ( q ) {
            jQuery( 'body' ).trigger('beforeWpautop', [ o ] );
        }

        o.data = t._wp_Autop( o.data );

        if ( q ) {
            jQuery( 'body' ).trigger('afterWpautop', [ o ] );
        }

        return o.data;
    }
};
?>
Онлайн: 2
Реклама