static/ext/src/Support.js
function() {
        var me = this,
            doc = document,
            toRun = me.toRun || me.tests,
            n = toRun.length,
            div = n && Ext.isReady && doc.createElement('div'),
            notRun = [],
            browserKey = getBrowserKey(),
            test, vector, value;

        if (div) {
            div.innerHTML = [
                '<div style="height:30px;width:50px;">',
                    '<div style="height:20px;width:20px;"></div>',
                '</div>',
                '<div style="width: 200px; height: 200px; position: relative; padding: 5px;">',
                    '<div style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>',
                '</div>',
                '<div style="position: absolute; left: 10%; top: 10%;"></div>',
                '<div style="float:left; background-color:transparent;"></div>'
            ].join('');

            doc.body.appendChild(div);
        }

        vector = supportsVectors[browserKey];
        while (n--) {
            test = toRun[n];
            value = vector && vector[n];
            if (value !== undefined) {
                me[test.identity] = value;
            } else if (div || test.early) {
                me[test.identity] = test.fn.call(me, doc, div);
            } else {
                notRun.push(test);
            }
        }

        if (div) {
            doc.body.removeChild(div);
        }

        me.toRun = notRun;
    }
function() {
        var me = this,
            doc = document,
            toRun = me.toRun || me.tests,
            n = toRun.length,
            div = n && Ext.isReady && doc.createElement('div'),
            notRun = [],
            browserKey = getBrowserKey(),
            test, vector, value;

        if (div) {
            div.innerHTML = [
                '<div style="height:30px;width:50px;">',
                    '<div style="height:20px;width:20px;"></div>',
                '</div>',
                '<div style="width: 200px; height: 200px; position: relative; padding: 5px;">',
                    '<div style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>',
                '</div>',
                '<div style="position: absolute; left: 10%; top: 10%;"></div>',
                '<div style="float:left; background-color:transparent;"></div>'
            ].join('');

            doc.body.appendChild(div);
        }

        vector = supportsVectors[browserKey];
        while (n--) {
            test = toRun[n];
            value = vector && vector[n];
            if (value !== undefined) {
                me[test.identity] = value;
            } else if (div || test.early) {
                me[test.identity] = test.fn.call(me, doc, div);
            } else {
                notRun.push(test);
            }
        }

        if (div) {
            doc.body.removeChild(div);
        }

        me.toRun = notRun;
    }
function ( ) { var me = this , doc = document , toRun = me . toRun || me . tests , n = toRun . length , div = n && Ext . isReady && doc . createElement ( 'div' ) , notRun = [ ] , browserKey = getBrowserKey ( ) , test , vector , value ; if ( div ) { div . innerHTML = [ '<div style="height:30px;width:50px;">' , '<div style="height:20px;width:20px;"></div>' , '</div>' , '<div style="width: 200px; height: 200px; position: relative; padding: 5px;">' , '<div style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></div>' , '</div>' , '<div style="position: absolute; left: 10%; top: 10%;"></div>' , '<div style="float:left; background-color:transparent;"></div>' ] . join ( '' ) ; doc . body . appendChild ( div ) ; } vector = supportsVectors [ browserKey ] ; while ( n -- ) { test = toRun [ n ] ; value = vector && vector [ n ] ; if ( value !== undefined ) { me [ test . identity ] = value ; } else if ( div || test . early ) { me [ test . identity ] = test . fn . call ( me , doc , div ) ; } else { notRun . push ( test ) ; } } if ( div ) { doc . body . removeChild ( div ) ; } me . toRun = notRun ; }
Runs feature detection routines and sets the various flags. This is called when
the scripts loads (very early) and again at {@link Ext#onReady}. Some detections
are flagged as `early` and run immediately. Others that require the document body
will not run until ready.

Each test is run only once, so calling this method from an onReady function is safe
and ensures that all flags have been set.
@markdown
@private
Runs feature detection routines and sets the various flags . This is called when the scripts loads ( very early ) and again at { @link Ext#onReady } . Some detections are flagged as early and run immediately . Others that require the document body will not run until ready .