JAVASCRIPT   34

Modernizr Custom Build

Guest on 29th April 2022 01:39:28 AM

  1. /* Modernizr 2.8.3 (Custom Build) | MIT & BSD
  2.  *  */
  3. ;
  4.  
  5.  
  6.  
  7. window.Modernizr = (function( window, document, undefined ) {
  8.  
  9.         var version = '2.8.3',
  10.  
  11.                         Modernizr = {},
  12.  
  13.                         enableClasses = true,
  14.  
  15.                         docElement = document.documentElement,
  16.  
  17.                         mod = 'modernizr',
  18.                         modElem = document.createElement(mod),
  19.                         mStyle = modElem.style,
  20.  
  21.                         inputElem  ,
  22.  
  23.  
  24.                         toString = {}.toString,
  25.  
  26.                         prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
  27.  
  28.  
  29.  
  30.                         tests = {},
  31.                         inputs = {},
  32.                         attrs = {},
  33.  
  34.                         classes = [],
  35.  
  36.                         slice = classes.slice,
  37.  
  38.                         featureName,
  39.  
  40.  
  41.                         injectElementWithStyles = function( rule, callback, nodes, testnames ) {
  42.  
  43.                                 var style, ret, node, docOverflow,
  44.                                                 div = document.createElement('div'),
  45.                                                 body = document.body,
  46.                                                 fakeBody = body || document.createElement('body');
  47.  
  48.                                 if ( parseInt(nodes, 10) ) {
  49.                                         while ( nodes-- ) {
  50.                                                 node = document.createElement('div');
  51.                                                 node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
  52.                                                 div.appendChild(node);
  53.                                         }
  54.                                 }
  55.  
  56.                                 style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
  57.                                 div.id = mod;
  58.                                 (body ? div : fakeBody).innerHTML += style;
  59.                                 fakeBody.appendChild(div);
  60.                                 if ( !body ) {
  61.                                         fakeBody.style.background = '';
  62.                                         fakeBody.style.overflow = 'hidden';
  63.                                         docOverflow = docElement.style.overflow;
  64.                                         docElement.style.overflow = 'hidden';
  65.                                         docElement.appendChild(fakeBody);
  66.                                 }
  67.  
  68.                                 ret = callback(div, rule);
  69.                                 if ( !body ) {
  70.                                         fakeBody.parentNode.removeChild(fakeBody);
  71.                                         docElement.style.overflow = docOverflow;
  72.                                 } else {
  73.                                         div.parentNode.removeChild(div);
  74.                                 }
  75.  
  76.                                 return !!ret;
  77.  
  78.                         },
  79.                         _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
  80.  
  81.         if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
  82.                 hasOwnProp = function (object, property) {
  83.                         return _hasOwnProperty.call(object, property);
  84.                 };
  85.         }
  86.         else {
  87.                 hasOwnProp = function (object, property) {
  88.                         return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
  89.                 };
  90.         }
  91.  
  92.  
  93.         if (!Function.prototype.bind) {
  94.                 Function.prototype.bind = function bind(that) {
  95.  
  96.                         var target = this;
  97.  
  98.                         if (typeof target != "function") {
  99.                                 throw new TypeError();
  100.                         }
  101.  
  102.                         var args = slice.call(arguments, 1),
  103.                                         bound = function () {
  104.  
  105.                                                 if (this instanceof bound) {
  106.  
  107.                                                         var F = function(){};
  108.                                                         F.prototype = target.prototype;
  109.                                                         var self = new F();
  110.  
  111.                                                         var result = target.apply(
  112.                                                                         self,
  113.                                                                         args.concat(slice.call(arguments))
  114.                                                         );
  115.                                                         if (Object(result) === result) {
  116.                                                                 return result;
  117.                                                         }
  118.                                                         return self;
  119.  
  120.                                                 } else {
  121.  
  122.                                                         return target.apply(
  123.                                                                         that,
  124.                                                                         args.concat(slice.call(arguments))
  125.                                                         );
  126.  
  127.                                                 }
  128.  
  129.                                         };
  130.  
  131.                         return bound;
  132.                 };
  133.         }
  134.  
  135.         function setCss( str ) {
  136.                 mStyle.cssText = str;
  137.         }
  138.  
  139.         function setCssAll( str1, str2 ) {
  140.                 return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
  141.         }
  142.  
  143.         function is( obj, type ) {
  144.                 return typeof obj === type;
  145.         }
  146.  
  147.         function contains( str, substr ) {
  148.                 return !!~('' + str).indexOf(substr);
  149.         }
  150.  
  151.  
  152.         function testDOMProps( props, obj, elem ) {
  153.                 for ( var i in props ) {
  154.                         var item = obj[props[i]];
  155.                         if ( item !== undefined) {
  156.  
  157.                                 if (elem === false) return props[i];
  158.  
  159.                                 if (is(item, 'function')){
  160.                                         return item.bind(elem || obj);
  161.                                 }
  162.  
  163.                                 return item;
  164.                         }
  165.                 }
  166.                 return false;
  167.         }
  168.         tests['touch'] = function() {
  169.                 var bool;
  170.  
  171.                 if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
  172.                         bool = true;
  173.                 } else {
  174.                         injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
  175.                                 bool = node.offsetTop === 9;
  176.                         });
  177.                 }
  178.  
  179.                 return bool;
  180.         };
  181.         for ( var feature in tests ) {
  182.                 if ( hasOwnProp(tests, feature) ) {
  183.                         featureName  = feature.toLowerCase();
  184.                         Modernizr[featureName] = tests[feature]();
  185.  
  186.                         classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
  187.                 }
  188.         }
  189.  
  190.  
  191.  
  192.         Modernizr.addTest = function ( feature, test ) {
  193.                 if ( typeof feature == 'object' ) {
  194.                         for ( var key in feature ) {
  195.                                 if ( hasOwnProp( feature, key ) ) {
  196.                                         Modernizr.addTest( key, feature[ key ] );
  197.                                 }
  198.                         }
  199.                 } else {
  200.  
  201.                         feature = feature.toLowerCase();
  202.  
  203.                         if ( Modernizr[feature] !== undefined ) {
  204.                                 return Modernizr;
  205.                         }
  206.  
  207.                         test = typeof test == 'function' ? test() : test;
  208.  
  209.                         if (typeof enableClasses !== "undefined" && enableClasses) {
  210.                                 docElement.className += ' ' + (test ? '' : 'no-') + feature;
  211.                         }
  212.                         Modernizr[feature] = test;
  213.  
  214.                 }
  215.  
  216.                 return Modernizr;
  217.         };
  218.  
  219.  
  220.         setCss('');
  221.         modElem = inputElem = null;
  222.  
  223.  
  224.         Modernizr._version      = version;
  225.  
  226.         Modernizr._prefixes     = prefixes;
  227.  
  228.         Modernizr.testStyles    = injectElementWithStyles;    docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
  229.  
  230.         (enableClasses ? ' js ' + classes.join(' ') : '');
  231.  
  232.         return Modernizr;
  233.  
  234. })(this, this.document);
  235. ;

Raw Paste


Login or Register to edit or fork this paste. It's free.