PageSourceSearch

https://www.spotnails.biz/static/js/patch/modernizr.js

js spotnails.biz collected 2026-10-10 02:22:52 UTC 15,728 bytes, 567 lines download raw bytes

vendor: 15,728 bytes, lines 1-567
1/* Modernizr 2.7.1 (Custom Build) | MIT & BSD
2* Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-multiplebgs-opacity-rgba-textshadow-cssgradients-hashchange-history-input-shiv-cssclasses-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-cssclassprefix:has!
3*/
4;
5
6window.Modernizr = ( function ( window, document, undefined ) {
7
8  var version = '2.7.1',
9
10    Modernizr = {},
11
12    enableClasses = true,
13
14    docElement = document.documentElement,
15
16    mod = 'modernizr',
17    modElem = document.createElement( mod ),
18    mStyle = modElem.style,
19
20    inputElem = document.createElement( 'input' ),
21
22
23    toString = {}.toString,
24
25    prefixes = ' -webkit- -moz- -o- -ms- '.split( ' ' ),
26
27
28
29    omPrefixes = 'Webkit Moz O ms',
30
31    cssomPrefixes = omPrefixes.split( ' ' ),
32
33    domPrefixes = omPrefixes.toLowerCase().split( ' ' ),
34
35
36    tests = {},
37    inputs = {},
38    attrs = {},
39
40    classes = [],
41
42    slice = classes.slice,
43
44    featureName,
45
46
47    injectElementWithStyles = function ( rule, callback, nodes, testnames ) {
48
49      var style, ret, node, docOverflow,
50          div = document.createElement( 'div' ),
51                body = document.body,
52                fakeBody = body || document.createElement( 'body' );
53
54      if ( parseInt( nodes, 10 ) ) {
55        while ( nodes-- ) {
56          node = document.createElement( 'div' );
57          node.id = testnames ? testnames[nodes] : mod + ( nodes + 1 );
58          div.appendChild( node );
59        }
60      }
61
62      style = ['&#173;', '<style id="s', mod, '">', rule, '</style>'].join( '' );
63      div.id = mod;
64      (body ? div : fakeBody ).innerHTML += style;
65      fakeBody.appendChild( div );
66      if ( !body ) {
67        fakeBody.style.background = '';
68        fakeBody.style.overflow = 'hidden';
69        docOverflow = docElement.style.overflow;
70        docElement.style.overflow = 'hidden';
71        docElement.appendChild( fakeBody );
72      }
73
74      ret = callback( div, rule );
75      if ( !body ) {
76        fakeBody.parentNode.removeChild( fakeBody );
77        docElement.style.overflow = docOverflow;
78      } else {
79        div.parentNode.removeChild( div );
80      }
81
82      return !!ret;
83
84    },
85
86
87
88    isEventSupported = ( function () {
89
90      var TAGNAMES = {
91        'select': 'input', 'change': 'input',
92        'submit': 'form', 'reset': 'form',
93        'error': 'img', 'load': 'img', 'abort': 'img'
94      };
95
96      function isEventSupported( eventName, element ) {
97
98        element = element || document.createElement( TAGNAMES[eventName] || 'div' );
99        eventName = 'on' + eventName;
100
101        var isSupported = eventName in element;
102
103        if ( !isSupported ) {
104          if ( !element.setAttribute ) {
105            element = document.createElement( 'div' );
106          }
107          if ( element.setAttribute && element.removeAttribute ) {
108            element.setAttribute( eventName, '' );
109            isSupported = is( element[eventName], 'function' );
110
111            if ( !is( element[eventName], 'undefined' ) ) {
112              element[eventName] = undefined;
113            }
114            element.removeAttribute( eventName );
115          }
116        }
117
118        element = null;
119        return isSupported;
120      }
121      return isEventSupported;
122    } )(),
123
124
125    _hasOwnProperty = ( {} ).hasOwnProperty, hasOwnProp;
126
127  if ( !is( _hasOwnProperty, 'undefined' ) && !is( _hasOwnProperty.call, 'undefined' ) ) {
128    hasOwnProp = function ( object, property ) {
129      return _hasOwnProperty.call( object, property );
130    };
131  }
132  else {
133    hasOwnProp = function ( object, property ) {
134      return ( ( property in object ) && is( object.constructor.prototype[property], 'undefined' ) );
135    };
136  }
137
138
139  if ( !Function.prototype.bind ) {
140    Function.prototype.bind = function bind( that ) {
141
142      var target = this;
143
144      if ( typeof target != "function" ) {
145        throw new TypeError();
146      }
147
148      var args = slice.call( arguments, 1 ),
149            bound = function () {
150
151              if ( this instanceof bound ) {
152
153                var F = function () { };
154                F.prototype = target.prototype;
155                var self = new F();
156
157                var result = target.apply( 
158                  self,
159                  args.concat( slice.call( arguments ) )
160              );
161                if ( Object( result ) === result ) {
162                  return result;
163                }
164                return self;
165
166              } else {
167
168                return target.apply( 
169                  that,
170                  args.concat( slice.call( arguments ) )
171              );
172
173              }
174
175            };
176
177      return bound;
178    };
179  }
180
181  function setCss( str ) {
182    mStyle.cssText = str;
183  }
184
185  function setCssAll( str1, str2 ) {
186    return setCss( prefixes.join( str1 + ';' ) + ( str2 || '' ) );
187  }
188
189  function is( obj, type ) {
190    return typeof obj === type;
191  }
192
193  function contains( str, substr ) {
194    return !! ~( '' + str ).indexOf( substr );
195  }
196
197  function testProps( props, prefixed ) {
198    for ( var i in props ) {
199      var prop = props[i];
200      if ( !contains( prop, "-" ) && mStyle[prop] !== undefined ) {
201        return prefixed == 'pfx' ? prop : true;
202      }
203    }
204    return false;
205  }
206
207  function testDOMProps( props, obj, elem ) {
208    for ( var i in props ) {
209      var item = obj[props[i]];
210      if ( item !== undefined ) {
211
212        if ( elem === false ) return props[i];
213
214        if ( is( item, 'function' ) ) {
215          return item.bind( elem || obj );
216        }
217
218        return item;
219      }
220    }
221    return false;
222  }
223
224  function testPropsAll( prop, prefixed, elem ) {
225
226    var ucProp = prop.charAt( 0 ).toUpperCase() + prop.slice( 1 ),
227            props = ( prop + ' ' + cssomPrefixes.join( ucProp + ' ' ) + ucProp ).split( ' ' );
228
229    if ( is( prefixed, "string" ) || is( prefixed, "undefined" ) ) {
230      return testProps( props, prefixed );
231
232    } else {
233      props = ( prop + ' ' + ( domPrefixes ).join( ucProp + ' ' ) + ucProp ).split( ' ' );
234      return testDOMProps( props, prefixed, elem );
235    }
236  }
237
238
239
240  tests['hashchange'] = function () {
241    return isEventSupported( 'hashchange', window ) && ( document.documentMode === undefined || document.documentMode > 7 );
242  };
243
244  tests['history'] = function () {
245    return !!( window.history && history.pushState );
246  }; tests['rgba'] = function () {
247    setCss( 'background-color:rgba(150,255,150,.5)' );
248
249    return contains( mStyle.backgroundColor, 'rgba' );
250  };
251
252
253  tests['multiplebgs'] = function () {
254    setCss( 'background:url(https://),url(https://),red url(https://)' );
255
256    return ( /(url\s*\(.*?){3}/ ).test( mStyle.background );
257  }; tests['backgroundsize'] = function () {
258    return testPropsAll( 'backgroundSize' );
259  };
260
261  tests['borderimage'] = function () {
262    return testPropsAll( 'borderImage' );
263  };
264
265
266
267  tests['borderradius'] = function () {
268    return testPropsAll( 'borderRadius' );
269  };
270
271  tests['boxshadow'] = function () {
272    return testPropsAll( 'boxShadow' );
273  };
274
275  tests['textshadow'] = function () {
276    return document.createElement( 'div' ).style.textShadow === '';
277  };
278
279
280  tests['opacity'] = function () {
281    setCssAll( 'opacity:.55' );
282
283    return ( /^0.55$/ ).test( mStyle.opacity );
284  };
285
286  tests['cssgradients'] = function () {
287    var str1 = 'background-image:',
288            str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
289            str3 = 'linear-gradient(left top,#9f9, white);';
290
291    setCss( 
292                       ( str1 + '-webkit- '.split( ' ' ).join( str2 + str1 ) +
293                       prefixes.join( str3 + str1 ) ).slice( 0, -str1.length )
294        );
295
296    return contains( mStyle.backgroundImage, 'gradient' );
297  };
298
299  tests['fontface'] = function () {
300    var bool;
301
302    injectElementWithStyles( '@font-face {font-family:"font";src:url("https://")}', function ( node, rule ) {
303      var style = document.getElementById( 'smodernizr' ),
304              sheet = style.sheet || style.styleSheet,
305              cssText = sheet ? ( sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '' ) : '';
306
307      bool = /src/i.test( cssText ) && cssText.indexOf( rule.split( ' ' )[0] ) === 0;
308    } );
309
310    return bool;
311  };
312
313  function webforms() {
314    Modernizr['input'] = ( function ( props ) {
315      for ( var i = 0, len = props.length; i < len; i++ ) {
316        attrs[props[i]] = !!( props[i] in inputElem );
317      }
318      if ( attrs.list ) {
319        attrs.list = !!( document.createElement( 'datalist' ) && window.HTMLDataListElement );
320      }
321      return attrs;
322    } )( 'autocomplete autofocus list placeholder max min multiple pattern required step'.split( ' ' ) );
323  }
324  for ( var feature in tests ) {
325    if ( hasOwnProp( tests, feature ) ) {
326      featureName = feature.toLowerCase();
327      Modernizr[featureName] = tests[feature]();
328
329      classes.push( ( Modernizr[featureName] ? '' : 'no-' ) + featureName );
330    }
331  }
332
333  Modernizr.input || webforms();
334
335
336  Modernizr.addTest = function ( feature, test ) {
337    if ( typeof feature == 'object' ) {
338      for ( var key in feature ) {
339        if ( hasOwnProp( feature, key ) ) {
340          Modernizr.addTest( key, feature[key] );
341        }
342      }
343    } else {
344
345      feature = feature.toLowerCase();
346
347      if ( Modernizr[feature] !== undefined ) {
348        return Modernizr;
349      }
350
351      test = typeof test == 'function' ? test() : test;
352
353      if ( typeof enableClasses !== "undefined" && enableClasses ) {
354        docElement.className += " has-" + ( test ? '' : 'no-' ) + feature;
355      }
356      Modernizr[feature] = test;
357
358    }
359
360    return Modernizr;
361  };
362
363
364  setCss( '' );
365  modElem = inputElem = null;
366
367  ; ( function ( window, document ) {
368    var version = '3.7.0';
369
370    var options = window.html5 || {};
371
372    var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
373
374    var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
375
376    var supportsHtml5Styles;
377
378    var expando = '_html5shiv';
379
380    var expanID = 0;
381
382    var expandoData = {};
383
384    var supportsUnknownElements;
385
386    (function () {
387      try {
388        var a = document.createElement( 'a' );
389        a.innerHTML = '<xyz></xyz>';
390        supportsHtml5Styles = ( 'hidden' in a );
391
392        supportsUnknownElements = a.childNodes.length == 1 || ( function () {
393          (document.createElement )( 'a' );
394          var frag = document.createDocumentFragment();
395          return ( 
396                typeof frag.cloneNode == 'undefined' ||
397                typeof frag.createDocumentFragment == 'undefined' ||
398                typeof frag.createElement == 'undefined'
399              );
400        } () );
401      } catch ( e ) {
402        supportsHtml5Styles = true;
403        supportsUnknownElements = true;
404      }
405
406    } () );
407
408    function addStyleSheet( ownerDocument, cssText ) {
409      var p = ownerDocument.createElement( 'p' ),
410          parent = ownerDocument.getElementsByTagName( 'head' )[0] || ownerDocument.documentElement;
411
412      p.innerHTML = 'x<style>' + cssText + '</style>';
413      return parent.insertBefore( p.lastChild, parent.firstChild );
414    }
415
416    function getElements() {
417      var elements = html5.elements;
418      return typeof elements == 'string' ? elements.split( ' ' ) : elements;
419    }
420
421    function getExpandoData( ownerDocument ) {
422      var data = expandoData[ownerDocument[expando]];
423      if ( !data ) {
424        data = {};
425        expanID++;
426        ownerDocument[expando] = expanID;
427        expandoData[expanID] = data;
428      }
429      return data;
430    }
431
432    function createElement( nodeName, ownerDocument, data ) {
433      if ( !ownerDocument ) {
434        ownerDocument = document;
435      }
436      if ( supportsUnknownElements ) {
437        return ownerDocument.createElement( nodeName );
438      }
439      if ( !data ) {
440        data = getExpandoData( ownerDocument );
441      }
442      var node;
443
444      if ( data.cache[nodeName] ) {
445        node = data.cache[nodeName].cloneNode();
446      } else if ( saveClones.test( nodeName ) ) {
447        node = ( data.cache[nodeName] = data.createElem( nodeName ) ).cloneNode();
448      } else {
449        node = data.createElem( nodeName );
450      }
451
452      return node.canHaveChildren && !reSkip.test( nodeName ) && !node.tagUrn ? data.frag.appendChild( node ) : node;
453    }
454
455    function createDocumentFragment( ownerDocument, data ) {
456      if ( !ownerDocument ) {
457        ownerDocument = document;
458      }
459      if ( supportsUnknownElements ) {
460        return ownerDocument.createDocumentFragment();
461      }
462      data = data || getExpandoData( ownerDocument );
463      var clone = data.frag.cloneNode(),
464          i = 0,
465          elems = getElements(),
466          l = elems.length;
467      for ( ; i < l; i++ ) {
468        clone.createElement( elems[i] );
469      }
470      return clone;
471    }
472
473    function shivMethods( ownerDocument, data ) {
474      if ( !data.cache ) {
475        data.cache = {};
476        data.createElem = ownerDocument.createElement;
477        data.createFrag = ownerDocument.createDocumentFragment;
478        data.frag = data.createFrag();
479      }
480
481
482      ownerDocument.createElement = function ( nodeName ) {
483        if ( !html5.shivMethods ) {
484          return data.createElem( nodeName );
485        }
486        return createElement( nodeName, ownerDocument, data );
487      };
488
489      ownerDocument.createDocumentFragment = Function(
490        'h,f',
491        'return function(){' +
492          'var n=f.cloneNode(),c=n.createElement;' +
493          'h.shivMethods&&(' +
494          getElements().join().replace( /[\w\-]+/g, function ( nodeName ) {
495          data.createElem( nodeName );
496          data.frag.createElement( nodeName );
497          return 'c("' + nodeName + '")';
498          } ) +
499          ');return n}'
500      )( html5, data.frag );
501    }
502
503    function shivDocument( ownerDocument ) {
504      if ( !ownerDocument ) {
505        ownerDocument = document;
506      }
507      var data = getExpandoData( ownerDocument );
508
509      if ( html5.shivCSS && !supportsHtml5Styles && !data.hasCSS ) {
510        data.hasCSS = !!addStyleSheet( ownerDocument,
511          'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
512          'mark{background:#FF0;color:#000}' +
513          'template{display:none}'
514        );
515      }
516      if ( !supportsUnknownElements ) {
517        shivMethods( ownerDocument, data );
518      }
519      return ownerDocument;
520    }
521
522    var html5 = {
523      'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
524      
525      'version': version,
526
527      'shivCSS': ( options.shivCSS !== false ),
528
529      'supportsUnknownElements': supportsUnknownElements,
530
531      'shivMethods': ( options.shivMethods !== false ),
532
533      'type': 'default',
534
535      'shivDocument': shivDocument,
536
537      createElement: createElement,
538
539      createDocumentFragment: createDocumentFragment
540    };
541
542    window.html5 = html5;
543
544    shivDocument( document );
545
546  } ( this, document ) );
547
548  Modernizr._version = version;
549
550  Modernizr._prefixes = prefixes;
551  Modernizr._domPrefixes = domPrefixes;
552  Modernizr._cssomPrefixes = cssomPrefixes;
553  
554  Modernizr.hasEvent = isEventSupported;
555
556  Modernizr.testProp = function ( prop ) {
557    return testProps( [prop] );
558  };
559
560  Modernizr.testAllProps = testPropsAll;
561  
562  Modernizr.testStyles = injectElementWithStyles; docElement.className = docElement.className.replace( /(^|\s)no-js(\s|$)/, '$1$2' ) + ( enableClasses ? " has-js has-" + classes.join( " has-" ) : '' );
563
564  return Modernizr;
565
566} )( this, this.document );
567;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.