/** * @author alexander.farkas */ (function($){ $.testMediaQuery = function(str){ var date = new Date().getTime(), div = $('
').css({ visibility: 'hidden', position: 'absolute' }).appendTo('body'), style = document.createElement('style'); style.setAttribute('type', 'text/css'); style.setAttribute('media', str); style = $(style).prependTo('head'); styleS = document.styleSheets[0]; if ((styleS.cssRules && !styleS.cssRules.length) || (styleS.rules && !styleS.rules.length)) { if (styleS.insertRule) { styleS.insertRule('.testMediaQuery' + date + ' {display:none !important;}', styleS.cssRules.length); } else if (styleS.addRule) { styleS.addRule('.testMediaQuery' + date, 'display:none'); } } var ret = div.css('display') === 'none'; div.remove(); style.remove(); return ret; }; $.arrayInString = function(str, arr){ var ret = -1; $.each(arr, function(i, item){ if (str.indexOf(item) != -1) { ret = i; return false; } }); return ret; }; $.enableMediaQuery = (function(){ var styles = [], styleLinks, date = new Date().getTime(); function parseMedia(link){ var medias = link.getAttribute('media'), pMin = /\(\s*min-width\s*:\s*(\d+)px\s*\)/, pMax = /\(\s*max-width\s*:\s*(\d+)px\s*\)/, resMin, resMax, supportedMedia = ['handheld', 'all', 'screen', 'projection', 'tty', 'tv', 'print'], curMedia, mediaString = []; medias = (!medias) ? ['all'] : medias.split(','); for (var i = 0, len = medias.length; i < len; i++) { curMedia = $.arrayInString(medias[i], supportedMedia); if (curMedia != -1) { curMedia = supportedMedia[curMedia]; if (!resMin) { resMin = pMin.exec(medias[i]); if (resMin) { resMin = parseInt(resMin[1], 10); } } if (!resMax) { resMax = pMax.exec(medias[i]); if (resMax) { resMax = parseInt(resMax[1], 10); } } mediaString.push(curMedia); } } styles.push({ obj: link, min: resMin, max: resMax, medium: mediaString.join(',') }); } return { init: function(){ if (!styleLinks) { styleLinks = $('link[rel*=style]').each(function(){ parseMedia(this); }); $.enableMediaQuery.adjust(); $(window).bind('resize.mediaQueries', $.enableMediaQuery.adjust); } }, adjust: function(){ var width = $(window).width(); $('link.insertStyleforMedia' + date).remove(); for (var i = 0, len = styles.length; i < len; i++) { if (!styles[i].obj.disabled && ((!(styles[i].min && styles[i].min > width) && !(styles[i].max && styles[i].max < width)) || (!styles[i].max && !styles[i].min))) { var n = styles[i].obj.cloneNode(true); n.setAttribute('media', styles[i].medium); n.className = 'insertStyleforMedia' + date; document.getElementsByTagName("head")[0].appendChild(n); } } } }; })(); if (($.browser.msie && parseFloat($.browser.version, 10) < 8) || ($.browser.mozilla && parseFloat($.browser.version, 10) < 1.91)) { try { $.enableMediaQuery.init(); } catch (e) { } } $(function(){ if ($.testMediaQuery('all') && !$.testMediaQuery('only all')) { $.enableMediaQuery.init(); } }); })(jQuery);