static/admin/TinyMCETextArea.js
function () {

        var me = this,
            activeError = me.getActiveError(),
            hasError = !!activeError;

        var edTable = Ext.get(me.getInputId() + "_tbl");
        var edIframe = Ext.get(me.getInputId() + "_ifr");

        if (!edTable) { return me.callParent(arguments); }

        /*
         Adding the red border to the mceIframeContainer is the most sure
         way to do it without harming sizing and positioning.
         */
        var edFrameContainer = edTable.down(".mceIframeContainer");

        if (edFrameContainer && me.rendered && !me.isDestroyed && !me.preventMark) {
            var ed = tinymce.get(me.getInputId());

            var evHandler = function (ed, e) {
                me.clearInvalid();
            };

            // Add/remove invalid class
            if (hasError) {
                edFrameContainer.addCls('tinymce-error-field');

                // this dirty hack is required for WebKit browsers - Safari and Chrome
                edIframe.setHeight(edIframe.getHeight() - 1);
                edIframe.setHeight(edIframe.getHeight() + 1);

                if (ed) {
                    // the invalid mark should be removed after any
                    // change of the contents (ExtJS standard behaviour)
                    ed.onKeyDown.add(evHandler);
                }
            }
            else {
                edFrameContainer.removeCls('tinymce-error-field');

                // this dirty hack is required for WebKit browsers - Safari and Chrome
                edIframe.setHeight(edIframe.getHeight() - 1);
                edIframe.setHeight(edIframe.getHeight() + 1);

                if (ed) {
                    ed.onKeyDown.remove(evHandler);
                    ed.onChange.remove(evHandler);
                }
            }
        }

        return me.callParent(arguments);
    }
function () {

        var me = this,
            activeError = me.getActiveError(),
            hasError = !!activeError;

        var edTable = Ext.get(me.getInputId() + "_tbl");
        var edIframe = Ext.get(me.getInputId() + "_ifr");

        if (!edTable) { return me.callParent(arguments); }

        /*
         Adding the red border to the mceIframeContainer is the most sure
         way to do it without harming sizing and positioning.
         */
        var edFrameContainer = edTable.down(".mceIframeContainer");

        if (edFrameContainer && me.rendered && !me.isDestroyed && !me.preventMark) {
            var ed = tinymce.get(me.getInputId());

            var evHandler = function (ed, e) {
                me.clearInvalid();
            };

            // Add/remove invalid class
            if (hasError) {
                edFrameContainer.addCls('tinymce-error-field');

                // this dirty hack is required for WebKit browsers - Safari and Chrome
                edIframe.setHeight(edIframe.getHeight() - 1);
                edIframe.setHeight(edIframe.getHeight() + 1);

                if (ed) {
                    // the invalid mark should be removed after any
                    // change of the contents (ExtJS standard behaviour)
                    ed.onKeyDown.add(evHandler);
                }
            }
            else {
                edFrameContainer.removeCls('tinymce-error-field');

                // this dirty hack is required for WebKit browsers - Safari and Chrome
                edIframe.setHeight(edIframe.getHeight() - 1);
                edIframe.setHeight(edIframe.getHeight() + 1);

                if (ed) {
                    ed.onKeyDown.remove(evHandler);
                    ed.onChange.remove(evHandler);
                }
            }
        }

        return me.callParent(arguments);
    }
function ( ) { var me = this , activeError = me . getActiveError ( ) , hasError = ! ! activeError ; var edTable = Ext . get ( me . getInputId ( ) + "_tbl" ) ; var edIframe = Ext . get ( me . getInputId ( ) + "_ifr" ) ; if ( ! edTable ) { return me . callParent ( arguments ) ; } /*
         Adding the red border to the mceIframeContainer is the most sure
         way to do it without harming sizing and positioning.
         */ var edFrameContainer = edTable . down ( ".mceIframeContainer" ) ; if ( edFrameContainer && me . rendered && ! me . isDestroyed && ! me . preventMark ) { var ed = tinymce . get ( me . getInputId ( ) ) ; var evHandler = function ( ed , e ) { me . clearInvalid ( ) ; } ; // Add/remove invalid class
 if ( hasError ) { edFrameContainer . addCls ( 'tinymce-error-field' ) ; // this dirty hack is required for WebKit browsers - Safari and Chrome
 edIframe . setHeight ( edIframe . getHeight ( ) - 1 ) ; edIframe . setHeight ( edIframe . getHeight ( ) + 1 ) ; if ( ed ) { // the invalid mark should be removed after any
 // change of the contents (ExtJS standard behaviour)
 ed . onKeyDown . add ( evHandler ) ; } } else { edFrameContainer . removeCls ( 'tinymce-error-field' ) ; // this dirty hack is required for WebKit browsers - Safari and Chrome
 edIframe . setHeight ( edIframe . getHeight ( ) - 1 ) ; edIframe . setHeight ( edIframe . getHeight ( ) + 1 ) ; if ( ed ) { ed . onKeyDown . remove ( evHandler ) ; ed . onChange . remove ( evHandler ) ; } } } return me . callParent ( arguments ) ; }
-----------------------------------------------------------------
-----------------------------------------------------------------