Вход Регистрация
Файл: templates/backend/default/assets/plugins/respond.js
Строк: 307
<?php
/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs  */
(function( ){

    
"use strict";

    
//exposed namespace
    
var respond = {};
    
w.respond respond;

    
//define update even in native-mq-supporting browsers, to avoid errors
    
respond.update = function(){};

    
//define ajax obj
    
var requestQueue = [],
        
xmlHttp = (function() {
            var 
xmlhttpmethod false;
            try {
                
xmlhttpmethod = new w.XMLHttpRequest();
            }
            catch( 
){
                
xmlhttpmethod = new w.ActiveXObject"Microsoft.XMLHTTP" );
            }
            return function(){
                return 
xmlhttpmethod;
            };
        })(),

        
//tweaked Ajax functions from Quirksmode
        
ajax = function( urlcallback ) {
            var 
req xmlHttp();
            if (!
req){
                return;
            }
            
req.open"GET"urltrue );
            
req.onreadystatechange = function () {
                if ( 
req.readyState !== || req.status !== 200 && req.status !== 304 ){
                    return;
                }
                
callbackreq.responseText );
            };
            if ( 
req.readyState === ){
                return;
            }
            
req.sendnull );
        };

    
//expose for testing
    
respond.ajax ajax;
    
respond.queue requestQueue;

    
// expose for testing
    
respond.regex = {
        
media: /@media[^{]+{([^{}]*{[^}{]*})+/gi,
        
keyframes: /@(?:-(?:o|moz|webkit)-)?keyframes[^{]+{(?:[^{}]*{[^}{]*})+[^}]*}/gi,
        
comments//*[^*]**+([^/][^*]**+)*//gi,
        
urls: /(url()['"]?([^/)'"][^:)'"]+)['"]?())/g,
        findStyles: /@media *([^{]+){([Ss]+?)$/,
        only: /(onlys+)?([a-zA-Z]+)s?/,
        minw: /([s]*min-widths*:[s]*([s]*[0-9.]+)(px|em)[s]*)/,
        maxw: /([s]*max-widths*:[s]*([s]*[0-9.]+)(px|em)[s]*)/
    };

    //expose media query support flag for external use
    respond.mediaQueriesSupported = w.matchMedia && w.matchMedia( "only all" ) !== null && w.matchMedia( "only all" ).matches;

    //if media queries are supported, exit here
    if( respond.mediaQueriesSupported ){
        return;
    }

    //define vars
    var doc = w.document,
        docElem = doc.documentElement,
        mediastyles = [],
        rules = [],
        appendedEls = [],
        parsedSheets = {},
        resizeThrottle = 30,
        head = doc.getElementsByTagName( "head" )[0] || docElem,
        base = doc.getElementsByTagName( "base" )[0],
        links = head.getElementsByTagName( "link" ),

        lastCall,
        resizeDefer,

        //cached container for 1em value, populated the first time it'
s needed
        eminpx
,

        
// returns the value of 1em in pixels
        
getEmValue = function() {
            var 
ret,
                
div doc.createElement('div'),
                
body doc.body,
                
originalHTMLFontSize docElem.style.fontSize,
                
originalBodyFontSize body && body.style.fontSize,
                
fakeUsed false;

            
div.style.cssText "position:absolute;font-size:1em;width:1em";

            if( !
body ){
                
body fakeUsed doc.createElement"body" );
                
body.style.background "none";
            }

            
// 1em in a media query is the value of the default font size of the browser
            // reset docElem and body to ensure the correct value is returned
            
docElem.style.fontSize "100%";
            
body.style.fontSize "100%";

            
body.appendChilddiv );

            if( 
fakeUsed ){
                
docElem.insertBeforebodydocElem.firstChild );
            }

            
ret div.offsetWidth;

            if( 
fakeUsed ){
                
docElem.removeChildbody );
            }
            else {
                
body.removeChilddiv );
            }

            
// restore the original values
            
docElem.style.fontSize originalHTMLFontSize;
            if( 
originalBodyFontSize ) {
                
body.style.fontSize originalBodyFontSize;
            }


            
//also update eminpx before returning
            
ret eminpx parseFloat(ret);

            return 
ret;
        },

        
//enable/disable styles
        
applyMedia = function( fromResize ){
            var 
name "clientWidth",
                
docElemProp docElemname ],
                
currWidth doc.compatMode === "CSS1Compat" && docElemProp || doc.bodyname ] || docElemProp,
                
styleBlocks    = {},
                
lastLink linkslinks.length-],
                
now = (new Date()).getTime();

            
//throttle resize calls
            
if( fromResize && lastCall && now lastCall resizeThrottle ){
                
w.clearTimeoutresizeDefer );
                
resizeDefer w.setTimeoutapplyMediaresizeThrottle );
                return;
            }
            else {
                
lastCall now;
            }

            for( var 
i in mediastyles ){
                if( 
mediastyles.hasOwnProperty) ){
                    var 
thisstyle mediastyles],
                        
min thisstyle.minw,
                        
max thisstyle.maxw,
                        
minnull min === null,
                        
maxnull max === null,
                        
em "em";

                    if( !!
min ){
                        
min parseFloatmin ) * ( min.indexOfem ) > -? ( eminpx || getEmValue() ) : );
                    }
                    if( !!
max ){
                        
max parseFloatmax ) * ( max.indexOfem ) > -? ( eminpx || getEmValue() ) : );
                    }

                    
// if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true
                    
if( !thisstyle.hasquery || ( !minnull || !maxnull ) && ( minnull || currWidth >= min ) && ( maxnull || currWidth <= max ) ){
                        if( !
styleBlocksthisstyle.media ] ){
                            
styleBlocksthisstyle.media ] = [];
                        }
                        
styleBlocksthisstyle.media ].pushrulesthisstyle.rules ] );
                    }
                }
            }

            
//remove any existing respond style element(s)
            
for( var j in appendedEls ){
                if( 
appendedEls.hasOwnProperty) ){
                    if( 
appendedEls] && appendedEls].parentNode === head ){
                        
head.removeChildappendedEls] );
                    }
                }
            }
            
appendedEls.length 0;

            
//inject active styles, grouped by media type
            
for( var k in styleBlocks ){
                if( 
styleBlocks.hasOwnProperty) ){
                    var 
ss doc.createElement"style" ),
                        
css styleBlocks].join"n" );

                    
ss.type "text/css";
                    
ss.media k;

                    
//originally, ss was appended to a documentFragment and sheets were appended in bulk.
                    //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one!
                    
head.insertBeforesslastLink.nextSibling );

                    if ( 
ss.styleSheet ){
                        
ss.styleSheet.cssText css;
                    }
                    else {
                        
ss.appendChilddoc.createTextNodecss ) );
                    }

                    
//push to appendedEls to track for later removal
                    
appendedEls.pushss );
                }
            }
        },
        
//find media blocks in css text, convert to style blocks
        
translate = function( styleshrefmedia ){
            var 
qs styles.replacerespond.regex.comments'' )
                    .
replacerespond.regex.keyframes'' )
                    .
matchrespond.regex.media ),
                
ql qs && qs.length || 0;

            
//try to get CSS path
            
href href.substring0href.lastIndexOf"/" ) );

            var 
repUrls = function( css ){
                    return 
css.replacerespond.regex.urls"$1" href "$2$3" );
                },
                
useMedia = !ql && media;

            
//if path exists, tack on trailing slash
            
if( href.length ){ href += "/"; }

            
//if no internal queries exist, but media attr does, use that
            //note: this currently lacks support for situations where a media attr is specified on a link AND
                //its associated stylesheet has internal CSS media queries.
                //In those cases, the media attribute will currently be ignored.
            
if( useMedia ){
                
ql 1;
            }

            for( var 
0qli++ ){
                var 
fullqthisqeachqeql;

                
//media attr
                
if( useMedia ){
                    
fullq media;
                    
rules.pushrepUrlsstyles ) );
                }
                
//parse for styles
                
else{
                    
fullq qs].matchrespond.regex.findStyles ) && RegExp.$1;
                    
rules.pushRegExp.$&& repUrlsRegExp.$) );
                }

                
eachq fullq.split"," );
                
eql eachq.length;

                for( var 
0eqlj++ ){
                    
thisq eachq];
                    
mediastyles.push( {
                        
media thisq.split"(" )[ ].matchrespond.regex.only ) && RegExp.$|| "all",
                        
rules rules.length 1,
                        
hasquery thisq.indexOf("(") > -1,
                        
minw thisq.matchrespond.regex.minw ) && parseFloatRegExp.$) + ( RegExp.$|| "" ),
                        
maxw thisq.matchrespond.regex.maxw ) && parseFloatRegExp.$) + ( RegExp.$|| "" )
                    } );
                }
            }

            
applyMedia();
        },

        
//recurse through request queue, get css text
        
makeRequests = function(){
            if( 
requestQueue.length ){
                var 
thisRequest requestQueue.shift();

                
ajaxthisRequest.href, function( styles ){
                    
translatestylesthisRequest.hrefthisRequest.media );
                    
parsedSheetsthisRequest.href ] = true;

                    
// by wrapping recursive function call in setTimeout
                    // we prevent "Stack overflow" error in IE7
                    
w.setTimeout(function(){ makeRequests(); },0);
                } );
            }
        },

        
//loop stylesheets, send text content to translate
        
ripCSS = function(){

            for( var 
0links.lengthi++ ){
                var 
sheet links],
                
href sheet.href,
                
media sheet.media,
                
isCSS sheet.rel && sheet.rel.toLowerCase() === "stylesheet";

                
//only links plz and prevent re-parsing
                
if( !!href && isCSS && !parsedSheetshref ] ){
                    
// selectivizr exposes css through the rawCssText expando
                    
if (sheet.styleSheet && sheet.styleSheet.rawCssText) {
                        
translatesheet.styleSheet.rawCssTexthrefmedia );
                        
parsedSheetshref ] = true;
                    } else {
                        if( (!/^([
a-zA-Z:]*//)/.test( href ) && !base) ||
                            
href.replaceRegExp.$1"" ).split"/" )[0] === w.location.host ){
                            
// IE7 doesn't handle urls that start with '//' for ajax request
                            // manually add in the protocol
                            
if ( href.substring(0,2) === "//" ) { href w.location.protocol href; }
                            
requestQueue.push( {
                                
hrefhref,
                                
mediamedia
                            
} );
                        }
                    }
                }
            }
            
makeRequests();
        };

    
//translate CSS
    
ripCSS();

    
//expose update for re-running respond later on
    
respond.update ripCSS;

    
//expose getEmValue
    
respond.getEmValue getEmValue;

    
//adjust on resize
    
function callMedia(){
        
applyMediatrue );
    }

    if( 
w.addEventListener ){
        
w.addEventListener"resize"callMediafalse );
    }
    else if( 
w.attachEvent ){
        
w.attachEvent"onresize"callMedia );
    }
})(
this);
?>
Онлайн: 0
Реклама