CaffGeek/MBACNationals

View on GitHub
Web.Admin/2014/wordpress/wp-admin/js/editor.dev.js

Summary

Maintainability
D
1 day
Test Coverage

jQuery(document).ready(function($){
    var h = wpCookies.getHash('TinyMCE_content_size');

    if ( getUserSetting( 'editor' ) == 'html' ) {
        if ( h )
            $('#content').css('height', h.ch - 15 + 'px');
    } else {
        if ( typeof tinyMCE != 'object' ) {
            $('#content').css('color', '#000');
        } else {
            $('#quicktags').hide();
        }
    }
});

var switchEditors = {

    mode : '',

    I : function(e) {
        return document.getElementById(e);
    },

    _wp_Nop : function(content) {
        var blocklist1, blocklist2;

        // Protect pre|script tags
        content = content.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) {
            a = a.replace(/<br ?\/?>[\r\n]*/g, '<wp_temp>');
            return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '<wp_temp>');
        });

        // 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#>');

        // Sepatate <div> containing <p>
        content = content.replace(/<div([^>]*)>\s*<p>/gi, '<div$1>\n\n');

        // Remove <p> and <br />
        content = content.replace(/\s*<p>/gi, '');
        content = content.replace(/\s*<\/p>\s*/gi, '\n\n');
        content = content.replace(/\n[\s\u00a0]+\n/g, '\n\n');
        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, '\n\n[caption$1[/caption]\n\n');
        content = content.replace(/caption\]\n\n+\[caption/g, 'caption]\n\n[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('<object') != -1 ) {
            content = content.replace(/<object[\s\S]+?<\/object>/g, function(a){
                return a.replace(/[\r\n]+/g, '');
            });
        }

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

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

        // put back the line breaks in pre|script
        content = content.replace(/<wp_temp>/g, '\n');

        return content;
    },

    go : function(id, mode) {
        id = id || 'content';
        mode = mode || this.mode || '';

        var ed, qt = this.I('quicktags'), H = this.I('edButtonHTML'), P = this.I('edButtonPreview'), ta = this.I(id);

        try { ed = tinyMCE.get(id); }
        catch(e) { ed = false; }

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

            setUserSetting( 'editor', 'tinymce' );
            this.mode = 'html';

            P.className = 'active';
            H.className = '';
            edCloseAllTags(); // :-(
            qt.style.display = 'none';

            ta.style.color = '#FFF';
            ta.value = this.wpautop(ta.value);

            try {
                if ( ed )
                    ed.show();
                else
                    tinyMCE.execCommand("mceAddControl", false, id);
            } catch(e) {}

            ta.style.color = '#000';
        } else {
            setUserSetting( 'editor', 'html' );
            ta.style.color = '#000';
            this.mode = 'tinymce';
            H.className = 'active';
            P.className = '';

            if ( ed && !ed.isHidden() ) {
                ta.style.height = ed.getContentAreaContainer().offsetHeight + 24 + 'px';
                ed.hide();
            }

            qt.style.display = 'block';
        }
        return false;
    },

    _wp_Autop : function(pee) {
        var blocklist = 'table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend';

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

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

        pee = pee + '\n\n';
        pee = pee.replace(/<br \/>\s*<br \/>/gi, '\n\n');
        pee = pee.replace(new RegExp('(<(?:'+blocklist+')[^>]*>)', 'gi'), '\n$1');
        pee = pee.replace(new RegExp('(</(?:'+blocklist+')>)', 'gi'), '$1\n\n');
        pee = pee.replace(/\r\n|\r/g, '\n');
        pee = pee.replace(/\n\s*\n+/g, '\n\n');
        pee = pee.replace(/([\s\S]+?)\n\n/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>';
        });

        // Fix the pre|script tags
        pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) {
            a = a.replace(/<br ?\/?>[\r\n]*/g, '\n');
            return a.replace(/<\/?p( [^>]*)?>[\r\n]*/g, '\n');
        });

        return pee;
    },

    pre_wpautop : function(content) {
        var t = this, o = { o: t, data: content, unfiltered: content };

        jQuery('body').trigger('beforePreWpautop', [o]);
        o.data = t._wp_Nop(o.data);
        jQuery('body').trigger('afterPreWpautop', [o]);
        return o.data;
    },

    wpautop : function(pee) {
        var t = this, o = { o: t, data: pee, unfiltered: pee };

        jQuery('body').trigger('beforeWpautop', [o]);
        o.data = t._wp_Autop(o.data);
        jQuery('body').trigger('afterWpautop', [o]);
        return o.data;
    }
};