2019-02-12 16:27:14 +00:00
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
// @license magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt
/ * M o d e r n i z r 2 . 5 . 3 ( C u s t o m B u i l d ) | M I T & B S D
* Build : http : //www.modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-flexbox_legacy-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-printshiv-mq-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
* /
;
window . Modernizr = ( function ( window , document , undefined ) {
var version = '2.5.3' ,
Modernizr = { } ,
docElement = document . documentElement ,
mod = 'modernizr' ,
modElem = document . createElement ( mod ) ,
mStyle = modElem . style ,
inputElem = document . createElement ( 'input' ) ,
smile = ':)' ,
toString = { } . toString ,
prefixes = ' -webkit- -moz- -o- -ms- ' . split ( ' ' ) ,
omPrefixes = 'Webkit Moz O ms' ,
cssomPrefixes = omPrefixes . split ( ' ' ) ,
domPrefixes = omPrefixes . toLowerCase ( ) . split ( ' ' ) ,
ns = { 'svg' : 'http://www.w3.org/2000/svg' } ,
tests = { } ,
inputs = { } ,
attrs = { } ,
classes = [ ] ,
slice = classes . slice ,
featureName ,
injectElementWithStyles = function ( rule , callback , nodes , testnames ) {
var style , ret , node ,
div = document . createElement ( 'div' ) ,
body = document . body ,
fakeBody = body ? body : document . createElement ( 'body' ) ;
if ( parseInt ( nodes , 10 ) ) {
while ( nodes -- ) {
node = document . createElement ( 'div' ) ;
node . id = testnames ? testnames [ nodes ] : mod + ( nodes + 1 ) ;
div . appendChild ( node ) ;
}
}
style = [ '­' , '<style>' , r ule , '</style>' ] . join ( '' ) ;
div . id = mod ;
( body ? div : fakeBody ) . innerHTML += style ;
fakeBody . appendChild ( div ) ;
if ( ! body ) {
fakeBody . style . background = "" ;
docElement . appendChild ( fakeBody ) ;
}
ret = callback ( div , rule ) ;
! body ? fakeBody . parentNode . removeChild ( fakeBody ) : div . parentNode . removeChild ( div ) ;
return ! ! ret ;
} ,
testMediaQuery = function ( mq ) {
var matchMedia = window . matchMedia || window . msMatchMedia ;
if ( matchMedia ) {
return matchMedia ( mq ) . matches ;
}
var bool ;
injectElementWithStyles ( '@media ' + mq + ' { #' + mod + ' { position: absolute; } }' , function ( node ) {
bool = ( window . getComputedStyle ?
getComputedStyle ( node , null ) :
node . currentStyle ) [ 'position' ] == 'absolute' ;
} ) ;
return bool ;
} ,
isEventSupported = ( function ( ) {
var TAGNAMES = {
'select' : 'input' , 'change' : 'input' ,
'submit' : 'form' , 'reset' : 'form' ,
'error' : 'img' , 'load' : 'img' , 'abort' : 'img'
} ;
function isEventSupported ( eventName , element ) {
element = element || document . createElement ( TAGNAMES [ eventName ] || 'div' ) ;
eventName = 'on' + eventName ;
var isSupported = eventName in element ;
if ( ! isSupported ) {
if ( ! element . setAttribute ) {
element = document . createElement ( 'div' ) ;
}
if ( element . setAttribute && element . removeAttribute ) {
element . setAttribute ( eventName , '' ) ;
isSupported = is ( element [ eventName ] , 'function' ) ;
if ( ! is ( element [ eventName ] , 'undefined' ) ) {
element [ eventName ] = undefined ;
}
element . removeAttribute ( eventName ) ;
}
}
element = null ;
return isSupported ;
}
return isEventSupported ;
} ) ( ) ,
_hasOwnProperty = ( { } ) . hasOwnProperty , hasOwnProperty ;
if ( ! is ( _hasOwnProperty , 'undefined' ) && ! is ( _hasOwnProperty . call , 'undefined' ) ) {
hasOwnProperty = function ( object , property ) {
return _hasOwnProperty . call ( object , property ) ;
} ;
}
else {
hasOwnProperty = function ( object , property ) {
return ( ( property in object ) && is ( object . constructor . prototype [ property ] , 'undefined' ) ) ;
} ;
}
if ( ! Function . prototype . bind ) {
Function . prototype . bind = function bind ( that ) {
var target = this ;
if ( typeof target != "function" ) {
throw new TypeError ( ) ;
}
var args = slice . call ( arguments , 1 ) ,
bound = function ( ) {
if ( this instanceof bound ) {
var F = function ( ) { } ;
F . prototype = target . prototype ;
var self = new F ;
var result = target . apply (
self ,
args . concat ( slice . call ( arguments ) )
) ;
if ( Object ( result ) === result ) {
return result ;
}
return self ;
} else {
return target . apply (
that ,
args . concat ( slice . call ( arguments ) )
) ;
}
} ;
return bound ;
} ;
}
function setCss ( str ) {
mStyle . cssText = str ;
}
function setCssAll ( str1 , str2 ) {
return setCss ( prefixes . join ( str1 + ';' ) + ( str2 || '' ) ) ;
}
function is ( obj , type ) {
return typeof obj === type ;
}
function contains ( str , substr ) {
return ! ! ~ ( '' + str ) . indexOf ( substr ) ;
}
function testProps ( props , prefixed ) {
for ( var i in props ) {
if ( mStyle [ props [ i ] ] !== undefined ) {
return prefixed == 'pfx' ? props [ i ] : true ;
}
}
return false ;
}
function testDOMProps ( props , obj , elem ) {
for ( var i in props ) {
var item = obj [ props [ i ] ] ;
if ( item !== undefined ) {
if ( elem === false ) return props [ i ] ;
if ( is ( item , 'function' ) ) {
return item . bind ( elem || obj ) ;
}
return item ;
}
}
return false ;
}
function testPropsAll ( prop , prefixed , elem ) {
var ucProp = prop . charAt ( 0 ) . toUpperCase ( ) + prop . substr ( 1 ) ,
props = ( prop + ' ' + cssomPrefixes . join ( ucProp + ' ' ) + ucProp ) . split ( ' ' ) ;
if ( is ( prefixed , "string" ) || is ( prefixed , "undefined" ) ) {
return testProps ( props , prefixed ) ;
} else {
props = ( prop + ' ' + ( domPrefixes ) . join ( ucProp + ' ' ) + ucProp ) . split ( ' ' ) ;
return testDOMProps ( props , prefixed , elem ) ;
}
}
var testBundle = ( function ( styles , tests ) {
var style = styles . join ( '' ) ,
len = tests . length ;
injectElementWithStyles ( style , function ( node , rule ) {
var style = document . styleSheets [ document . styleSheets . length - 1 ] ,
cssText = style ? ( style . cssRules && style . cssRules [ 0 ] ? style . cssRules [ 0 ] . cssText : style . cssText || '' ) : '' ,
children = node . childNodes , hash = { } ;
while ( len -- ) {
hash [ children [ len ] . id ] = children [ len ] ;
}
Modernizr [ 'touch' ] = ( 'ontouchstart' in window ) || window . DocumentTouch && document instanceof DocumentTouch || ( hash [ 'touch' ] && hash [ 'touch' ] . offsetTop ) === 9 ;
Modernizr [ 'csstransforms3d' ] = ( hash [ 'csstransforms3d' ] && hash [ 'csstransforms3d' ] . offsetLeft ) === 9 && hash [ 'csstransforms3d' ] . offsetHeight === 3 ; Modernizr [ 'generatedcontent' ] = ( hash [ 'generatedcontent' ] && hash [ 'generatedcontent' ] . offsetHeight ) >= 1 ; Modernizr [ 'fontface' ] = /src/i . test ( cssText ) &&
cssText . indexOf ( rule . split ( ' ' ) [ 0 ] ) === 0 ; } , len , tests ) ;
} ) ( [
'@font-face {font-family:"font";src:url("https://")}' , [ '@media (' , prefixes . join ( 'touch-enabled),(' ) , mod , ')' ,
'{#touch{top:9px;position:absolute}}' ] . join ( '' ) , [ '@media (' , prefixes . join ( 'transform-3d),(' ) , mod , ')' ,
'{#csstransforms3d{left:9px;position:absolute;height:3px;}}' ] . join ( '' )
, [ '#generatedcontent:after{content:"' , smile , '";visibility:hidden}' ] . join ( '' )
] ,
[
'fontface' , 'touch' , 'csstransforms3d'
, 'generatedcontent'
] ) ; tests [ 'flexbox' ] = function ( ) {
return testPropsAll ( 'flexOrder' ) ;
} ;
tests [ 'flexbox-legacy' ] = function ( ) {
return testPropsAll ( 'boxDirection' ) ;
} ;
tests [ 'canvas' ] = function ( ) {
var elem = document . createElement ( 'canvas' ) ;
return ! ! ( elem . getContext && elem . getContext ( '2d' ) ) ;
} ;
tests [ 'canvastext' ] = function ( ) {
return ! ! ( Modernizr [ 'canvas' ] && is ( document . createElement ( 'canvas' ) . getContext ( '2d' ) . fillText , 'function' ) ) ;
} ; tests [ 'touch' ] = function ( ) {
return Modernizr [ 'touch' ] ;
} ;
tests [ 'geolocation' ] = function ( ) {
return ! ! navigator . geolocation ;
} ;
tests [ 'postmessage' ] = function ( ) {
return ! ! window . postMessage ;
} ;
tests [ 'websqldatabase' ] = function ( ) {
return ! ! window . openDatabase ;
} ;
tests [ 'indexedDB' ] = function ( ) {
return ! ! testPropsAll ( "indexedDB" , window ) ;
} ;
tests [ 'hashchange' ] = function ( ) {
return isEventSupported ( 'hashchange' , window ) && ( document . documentMode === undefined || document . documentMode > 7 ) ;
} ;
tests [ 'history' ] = function ( ) {
return ! ! ( window . history && history . pushState ) ;
} ;
tests [ 'draganddrop' ] = function ( ) {
var div = document . createElement ( 'div' ) ;
return ( 'draggable' in div ) || ( 'ondragstart' in div && 'ondrop' in div ) ;
} ;
tests [ 'websockets' ] = function ( ) {
for ( var i = - 1 , len = cssomPrefixes . length ; ++ i < len ; ) {
if ( window [ cssomPrefixes [ i ] + 'WebSocket' ] ) {
return true ;
}
}
return 'WebSocket' in window ;
} ;
tests [ 'rgba' ] = function ( ) {
setCss ( 'background-color:rgba(150,255,150,.5)' ) ;
return contains ( mStyle . backgroundColor , 'rgba' ) ;
} ;
tests [ 'hsla' ] = function ( ) {
setCss ( 'background-color:hsla(120,40%,100%,.5)' ) ;
return contains ( mStyle . backgroundColor , 'rgba' ) || contains ( mStyle . backgroundColor , 'hsla' ) ;
} ;
tests [ 'multiplebgs' ] = function ( ) {
setCss ( 'background:url(https://),url(https://),red url(https://)' ) ;
return /(url\s*\(.*?){3}/ . test ( mStyle . background ) ;
} ;
tests [ 'backgroundsize' ] = function ( ) {
return testPropsAll ( 'backgroundSize' ) ;
} ;
tests [ 'borderimage' ] = function ( ) {
return testPropsAll ( 'borderImage' ) ;
} ;
tests [ 'borderradius' ] = function ( ) {
return testPropsAll ( 'borderRadius' ) ;
} ;
tests [ 'boxshadow' ] = function ( ) {
return testPropsAll ( 'boxShadow' ) ;
} ;
tests [ 'textshadow' ] = function ( ) {
return document . createElement ( 'div' ) . style . textShadow === '' ;
} ;
tests [ 'opacity' ] = function ( ) {
setCssAll ( 'opacity:.55' ) ;
return /^0.55$/ . test ( mStyle . opacity ) ;
} ;
tests [ 'cssanimations' ] = function ( ) {
return testPropsAll ( 'animationName' ) ;
} ;
tests [ 'csscolumns' ] = function ( ) {
return testPropsAll ( 'columnCount' ) ;
} ;
tests [ 'cssgradients' ] = function ( ) {
var str1 = 'background-image:' ,
str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));' ,
str3 = 'linear-gradient(left top,#9f9, white);' ;
setCss (
( str1 + '-webkit- ' . split ( ' ' ) . join ( str2 + str1 )
+ prefixes . join ( str3 + str1 ) ) . slice ( 0 , - str1 . length )
) ;
return contains ( mStyle . backgroundImage , 'gradient' ) ;
} ;
tests [ 'cssreflections' ] = function ( ) {
return testPropsAll ( 'boxReflect' ) ;
} ;
tests [ 'csstransforms' ] = function ( ) {
return ! ! testPropsAll ( 'transform' ) ;
} ;
tests [ 'csstransforms3d' ] = function ( ) {
var ret = ! ! testPropsAll ( 'perspective' ) ;
if ( ret && 'webkitPerspective' in docElement . style ) {
ret = Modernizr [ 'csstransforms3d' ] ;
}
return ret ;
} ;
tests [ 'csstransitions' ] = function ( ) {
return testPropsAll ( 'transition' ) ;
} ;
tests [ 'fontface' ] = function ( ) {
return Modernizr [ 'fontface' ] ;
} ;
tests [ 'generatedcontent' ] = function ( ) {
return Modernizr [ 'generatedcontent' ] ;
} ;
tests [ 'video' ] = function ( ) {
var elem = document . createElement ( 'video' ) ,
bool = false ;
try {
if ( bool = ! ! elem . canPlayType ) {
bool = new Boolean ( bool ) ;
bool . ogg = elem . canPlayType ( 'video/ogg; codecs="theora"' ) . replace ( /^no$/ , '' ) ;
bool . h264 = elem . canPlayType ( 'video/mp4; codecs="avc1.42E01E"' ) . replace ( /^no$/ , '' ) ;
bool . webm = elem . canPlayType ( 'video/webm; codecs="vp8, vorbis"' ) . replace ( /^no$/ , '' ) ;
}
} catch ( e ) { }
return bool ;
} ;
tests [ 'audio' ] = function ( ) {
var elem = document . createElement ( 'audio' ) ,
bool = false ;
try {
if ( bool = ! ! elem . canPlayType ) {
bool = new Boolean ( bool ) ;
bool . ogg = elem . canPlayType ( 'audio/ogg; codecs="vorbis"' ) . replace ( /^no$/ , '' ) ;
bool . mp3 = elem . canPlayType ( 'audio/mpeg;' ) . replace ( /^no$/ , '' ) ;
bool . wav = elem . canPlayType ( 'audio/wav; codecs="1"' ) . replace ( /^no$/ , '' ) ;
bool . m4a = ( elem . canPlayType ( 'audio/x-m4a;' ) ||
elem . canPlayType ( 'audio/aac;' ) ) . replace ( /^no$/ , '' ) ;
}
} catch ( e ) { }
return bool ;
} ;
tests [ 'localstorage' ] = function ( ) {
try {
localStorage . setItem ( mod , mod ) ;
localStorage . removeItem ( mod ) ;
return true ;
} catch ( e ) {
return false ;
}
} ;
tests [ 'sessionstorage' ] = function ( ) {
try {
sessionStorage . setItem ( mod , mod ) ;
sessionStorage . removeItem ( mod ) ;
return true ;
} catch ( e ) {
return false ;
}
} ;
tests [ 'webworkers' ] = function ( ) {
return ! ! window . Worker ;
} ;
tests [ 'applicationcache' ] = function ( ) {
return ! ! window . applicationCache ;
} ;
tests [ 'svg' ] = function ( ) {
return ! ! document . createElementNS && ! ! document . createElementNS ( ns . svg , 'svg' ) . createSVGRect ;
} ;
tests [ 'inlinesvg' ] = function ( ) {
var div = document . createElement ( 'div' ) ;
div . innerHTML = '<svg/>' ;
return ( div . firstChild && div . firstChild . namespaceURI ) == ns . svg ;
} ;
tests [ 'smil' ] = function ( ) {
return ! ! document . createElementNS && /SVGAnimate/ . test ( toString . call ( document . createElementNS ( ns . svg , 'animate' ) ) ) ;
} ;
tests [ 'svgclippaths' ] = function ( ) {
return ! ! document . createElementNS && /SVGClipPath/ . test ( toString . call ( document . createElementNS ( ns . svg , 'clipPath' ) ) ) ;
} ;
function webforms ( ) {
Modernizr [ 'input' ] = ( function ( props ) {
for ( var i = 0 , len = props . length ; i < len ; i ++ ) {
attrs [ props [ i ] ] = ! ! ( props [ i ] in inputElem ) ;
}
if ( attrs . list ) {
attrs . list = ! ! ( document . createElement ( 'datalist' ) && window . HTMLDataListElement ) ;
}
return attrs ;
} ) ( 'autocomplete autofocus list placeholder max min multiple pattern required step' . split ( ' ' ) ) ;
Modernizr [ 'inputtypes' ] = ( function ( props ) {
for ( var i = 0 , bool , inputElemType , defaultView , len = props . length ; i < len ; i ++ ) {
inputElem . setAttribute ( 'type' , inputElemType = props [ i ] ) ;
bool = inputElem . type !== 'text' ;
if ( bool ) {
inputElem . value = smile ;
inputElem . style . cssText = 'position:absolute;visibility:hidden;' ;
if ( /^range$/ . test ( inputElemType ) && inputElem . style . WebkitAppearance !== undefined ) {
docElement . appendChild ( inputElem ) ;
defaultView = document . defaultView ;
bool = defaultView . getComputedStyle &&
defaultView . getComputedStyle ( inputElem , null ) . WebkitAppearance !== 'textfield' &&
( inputElem . offsetHeight !== 0 ) ;
docElement . removeChild ( inputElem ) ;
} else if ( /^(search|tel)$/ . test ( inputElemType ) ) {
} else if ( /^(url|email)$/ . test ( inputElemType ) ) {
bool = inputElem . checkValidity && inputElem . checkValidity ( ) === false ;
} else if ( /^color$/ . test ( inputElemType ) ) {
docElement . appendChild ( inputElem ) ;
docElement . offsetWidth ;
bool = inputElem . value != smile ;
docElement . removeChild ( inputElem ) ;
} else {
bool = inputElem . value != smile ;
}
}
inputs [ props [ i ] ] = ! ! bool ;
}
return inputs ;
} ) ( 'search tel url email datetime date month week time datetime-local number range color' . split ( ' ' ) ) ;
}
for ( var feature in tests ) {
if ( hasOwnProperty ( tests , feature ) ) {
featureName = feature . toLowerCase ( ) ;
Modernizr [ featureName ] = tests [ feature ] ( ) ;
classes . push ( ( Modernizr [ featureName ] ? '' : 'no-' ) + featureName ) ;
}
}
Modernizr . input || webforms ( ) ; setCss ( '' ) ;
modElem = inputElem = null ;
Modernizr . _version = version ;
Modernizr . _prefixes = prefixes ;
Modernizr . _domPrefixes = domPrefixes ;
Modernizr . _cssomPrefixes = cssomPrefixes ;
Modernizr . mq = testMediaQuery ;
Modernizr . hasEvent = isEventSupported ;
Modernizr . testProp = function ( prop ) {
return testProps ( [ prop ] ) ;
} ;
Modernizr . testAllProps = testPropsAll ;
Modernizr . testStyles = injectElementWithStyles ;
return Modernizr ;
} ) ( this , this . document ) ;
/*! HTML5 Shiv v3.4 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */
; ( function ( window , document ) {
/** Preset options */
var options = window . html5 || { } ;
/** Used to skip problem elements */
var reSkip = /^<|^(?:button|form|map|select|textarea)$/i ;
/** Detect whether the browser supports default html5 styles */
var supportsHtml5Styles ;
/** Detect whether the browser supports unknown elements */
var supportsUnknownElements ;
( function ( ) {
var a = document . createElement ( 'a' ) ;
a . innerHTML = '<xyz></xyz>' ;
//if the hidden property is implemented we can assume, that the browser supports HTML5 Styles
supportsHtml5Styles = ( 'hidden' in a ) ;
supportsUnknownElements = a . childNodes . length == 1 || ( function ( ) {
// assign a false positive if unable to shiv
try {
( document . createElement ) ( 'a' ) ;
} catch ( e ) {
return true ;
}
var frag = document . createDocumentFragment ( ) ;
return (
typeof frag . cloneNode == 'undefined' ||
typeof frag . createDocumentFragment == 'undefined' ||
typeof frag . createElement == 'undefined'
) ;
} ( ) ) ;
} ( ) ) ;
/*--------------------------------------------------------------------------*/
/ * *
* Creates a style sheet with the given CSS text and adds it to the document .
* @ private
* @ param { Document } ownerDocument The document .
* @ param { String } cssText The CSS text .
* @ returns { StyleSheet } The style element .
* /
function addStyleSheet ( ownerDocument , cssText ) {
var p = ownerDocument . createElement ( 'p' ) ,
parent = ownerDocument . getElementsByTagName ( 'head' ) [ 0 ] || ownerDocument . documentElement ;
p . innerHTML = 'x<style>' + cssText + '</style>' ;
return parent . insertBefore ( p . lastChild , parent . firstChild ) ;
}
/ * *
* Returns the value of ` html5.elements ` as an array .
* @ private
* @ returns { Array } An array of shived element node names .
* /
function getElements ( ) {
var elements = html5 . elements ;
return typeof elements == 'string' ? elements . split ( ' ' ) : elements ;
}
/ * *
* Shivs the ` createElement ` and ` createDocumentFragment ` methods of the document .
* @ private
* @ param { Document | DocumentFragment } ownerDocument The document .
* /
function shivMethods ( ownerDocument ) {
var cache = { } ,
docCreateElement = ownerDocument . createElement ,
docCreateFragment = ownerDocument . createDocumentFragment ,
frag = docCreateFragment ( ) ;
ownerDocument . createElement = function ( nodeName ) {
// Avoid adding some elements to fragments in IE < 9 because
// * Attributes like `name` or `type` cannot be set/changed once an element
// is inserted into a document/fragment
// * Link elements with `src` attributes that are inaccessible, as with
// a 403 response, will cause the tab/window to crash
// * Script elements appended to fragments will execute when their `src`
// or `text` property is set
var node = ( cache [ nodeName ] || ( cache [ nodeName ] = docCreateElement ( nodeName ) ) ) . cloneNode ( ) ;
return html5 . shivMethods && node . canHaveChildren && ! reSkip . test ( nodeName ) ? frag . appendChild ( node ) : node ;
} ;
ownerDocument . createDocumentFragment = Function ( 'h,f' , 'return function(){' +
'var n=f.cloneNode(),c=n.createElement;' +
'h.shivMethods&&(' +
// unroll the `createElement` calls
getElements ( ) . join ( ) . replace ( /\w+/g , function ( nodeName ) {
cache [ nodeName ] = docCreateElement ( nodeName ) ;
frag . createElement ( nodeName ) ;
return 'c("' + nodeName + '")' ;
} ) +
');return n}'
) ( html5 , frag ) ;
}
/*--------------------------------------------------------------------------*/
/ * *
* Shivs the given document .
* @ memberOf html5
* @ param { Document } ownerDocument The document to shiv .
* @ returns { Document } The shived document .
* /
function shivDocument ( ownerDocument ) {
var shived ;
if ( ownerDocument . documentShived ) {
return ownerDocument ;
}
if ( html5 . shivCSS && ! supportsHtml5Styles ) {
shived = ! ! addStyleSheet ( ownerDocument ,
// corrects block display not defined in IE6/7/8/9
'article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}' +
// corrects audio display not defined in IE6/7/8/9
'audio{display:none}' +
// corrects canvas and video display not defined in IE6/7/8/9
'canvas,video{display:inline-block;*display:inline;*zoom:1}' +
// corrects 'hidden' attribute and audio[controls] display not present in IE7/8/9
'[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}' +
// adds styling not present in IE6/7/8/9
'mark{background:#FF0;color:#000}'
) ;
}
if ( ! supportsUnknownElements ) {
shived = ! shivMethods ( ownerDocument ) ;
}
if ( shived ) {
ownerDocument . documentShived = shived ;
}
return ownerDocument ;
}
/*--------------------------------------------------------------------------*/
/ * *
* The ` html5 ` object is exposed so that more elements can be shived and
* existing shiving can be detected on iframes .
* @ type Object
* @ example
*
* // options can be changed before the script is included
* html5 = { 'elements' : 'mark section' , 'shivCSS' : false , 'shivMethods' : false } ;
* /
var html5 = {
/ * *
* An array or space separated string of node names of the elements to shiv .
* @ memberOf html5
* @ type Array | String
* /
'elements' : options . elements || 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video' ,
/ * *
* A flag to indicate that the HTML5 style sheet should be inserted .
* @ memberOf html5
* @ type Boolean
* /
'shivCSS' : ! ( options . shivCSS === false ) ,
/ * *
* A flag to indicate that the document ' s ` createElement ` and ` createDocumentFragment `
* methods should be overwritten .
* @ memberOf html5
* @ type Boolean
* /
'shivMethods' : ! ( options . shivMethods === false ) ,
/ * *
* A string to describe the type of ` html5 ` object ( "default" or "default print" ) .
* @ memberOf html5
* @ type String
* /
'type' : 'default' ,
// shivs the document according to the specified `html5` object options
'shivDocument' : shivDocument
} ;
/*--------------------------------------------------------------------------*/
// expose html5
window . html5 = html5 ;
// shiv the document
shivDocument ( document ) ;
/*------------------------------- Print Shiv -------------------------------*/
/** Used to filter media types */
var reMedia = /^$|\b(?:all|print)\b/ ;
/** Used to namespace printable elements */
var shivNamespace = 'html5shiv' ;
/** Detect whether the browser supports shivable style sheets */
var supportsShivableSheets = ! supportsUnknownElements && ( function ( ) {
// assign a false negative if unable to shiv
var docEl = document . documentElement ;
return ! (
typeof document . namespaces == 'undefined' ||
typeof document . parentWindow == 'undefined' ||
typeof docEl . applyElement == 'undefined' ||
typeof docEl . removeNode == 'undefined' ||
typeof window . attachEvent == 'undefined'
) ;
} ( ) ) ;
/*--------------------------------------------------------------------------*/
/ * *
* Wraps all HTML5 elements in the given document with printable elements .
* ( eg . the "header" element is wrapped with the "html5shiv:header" element )
* @ private
* @ param { Document } ownerDocument The document .
* @ returns { Array } An array wrappers added .
* /
function addWrappers ( ownerDocument ) {
var node ,
nodes = ownerDocument . getElementsByTagName ( '*' ) ,
index = nodes . length ,
reElements = RegExp ( '^(?:' + getElements ( ) . join ( '|' ) + ')$' , 'i' ) ,
result = [ ] ;
while ( index -- ) {
node = nodes [ index ] ;
if ( reElements . test ( node . nodeName ) ) {
result . push ( node . applyElement ( createWrapper ( node ) ) ) ;
}
}
return result ;
}
/ * *
* Creates a printable wrapper for the given element .
* @ private
* @ param { Element } element The element .
* @ returns { Element } The wrapper .
* /
function createWrapper ( element ) {
var node ,
nodes = element . attributes ,
index = nodes . length ,
wrapper = element . ownerDocument . createElement ( shivNamespace + ':' + element . nodeName ) ;
// copy element attributes to the wrapper
while ( index -- ) {
node = nodes [ index ] ;
node . specified && wrapper . setAttribute ( node . nodeName , node . nodeValue ) ;
}
// copy element styles to the wrapper
wrapper . style . cssText = element . style . cssText ;
return wrapper ;
}
/ * *
* Shivs the given CSS text .
* ( eg . header { } becomes html5shiv \ : header { } )
* @ private
* @ param { String } cssText The CSS text to shiv .
* @ returns { String } The shived CSS text .
* /
function shivCssText ( cssText ) {
var pair ,
parts = cssText . split ( '{' ) ,
index = parts . length ,
reElements = RegExp ( '(^|[\\s,>+~])(' + getElements ( ) . join ( '|' ) + ')(?=[[\\s,>+~#.:]|$)' , 'gi' ) ,
replacement = '$1' + shivNamespace + '\\:$2' ;
while ( index -- ) {
pair = parts [ index ] = parts [ index ] . split ( '}' ) ;
pair [ pair . length - 1 ] = pair [ pair . length - 1 ] . replace ( reElements , replacement ) ;
parts [ index ] = pair . join ( '}' ) ;
}
return parts . join ( '{' ) ;
}
/ * *
* Removes the given wrappers , leaving the original elements .
* @ private
* @ params { Array } wrappers An array of printable wrappers .
* /
function removeWrappers ( wrappers ) {
var index = wrappers . length ;
while ( index -- ) {
wrappers [ index ] . removeNode ( ) ;
}
}
/*--------------------------------------------------------------------------*/
/ * *
* Shivs the given document for print .
* @ memberOf html5
* @ param { Document } ownerDocument The document to shiv .
* @ returns { Document } The shived document .
* /
function shivPrint ( ownerDocument ) {
var shivedSheet ,
wrappers ,
namespaces = ownerDocument . namespaces ,
ownerWindow = ownerDocument . parentWindow ;
if ( ! supportsShivableSheets || ownerDocument . printShived ) {
return ownerDocument ;
}
if ( typeof namespaces [ shivNamespace ] == 'undefined' ) {
namespaces . add ( shivNamespace ) ;
}
ownerWindow . attachEvent ( 'onbeforeprint' , function ( ) {
var imports ,
length ,
sheet ,
collection = ownerDocument . styleSheets ,
cssText = [ ] ,
index = collection . length ,
sheets = Array ( index ) ;
// convert styleSheets collection to an array
while ( index -- ) {
sheets [ index ] = collection [ index ] ;
}
// concat all style sheet CSS text
while ( ( sheet = sheets . pop ( ) ) ) {
// IE does not enforce a same origin policy for external style sheets
if ( ! sheet . disabled && reMedia . test ( sheet . media ) ) {
for ( imports = sheet . imports , index = 0 , length = imports . length ; index < length ; index ++ ) {
sheets . push ( imports [ index ] ) ;
}
try {
cssText . push ( sheet . cssText ) ;
} catch ( er ) { }
}
}
// wrap all HTML5 elements with printable elements and add the shived style sheet
cssText = shivCssText ( cssText . reverse ( ) . join ( '' ) ) ;
wrappers = addWrappers ( ownerDocument ) ;
shivedSheet = addStyleSheet ( ownerDocument , cssText ) ;
} ) ;
ownerWindow . attachEvent ( 'onafterprint' , function ( ) {
// remove wrappers, leaving the original elements, and remove the shived style sheet
removeWrappers ( wrappers ) ;
shivedSheet . removeNode ( true ) ;
} ) ;
ownerDocument . printShived = true ;
return ownerDocument ;
}
/*--------------------------------------------------------------------------*/
// expose API
html5 . type += ' print' ;
html5 . shivPrint = shivPrint ;
// shiv for print
shivPrint ( document ) ;
} ( this , document ) ) ; /*yepnope1.5.3|WTFPL*/
( function ( a , b , c ) { function d ( a ) { return o . call ( a ) == "[object Function]" } function e ( a ) { return typeof a == "string" } function f ( ) { } function g ( a ) { return ! a || a == "loaded" || a == "complete" || a == "uninitialized" } function h ( ) { var a = p . shift ( ) ; q = 1 , a ? a . t ? m ( function ( ) { ( a . t == "c" ? B . injectCss : B . injectJs ) ( a . s , 0 , a . a , a . x , a . e , 1 ) } , 0 ) : ( a ( ) , h ( ) ) : q = 0 } function i ( a , c , d , e , f , i , j ) { function k ( b ) { if ( ! o && g ( l . readyState ) && ( u . r = o = 1 , ! q && h ( ) , l . onload = l . onreadystatechange = null , b ) ) { a != "img" && m ( function ( ) { t . removeChild ( l ) } , 50 ) ; for ( var d in y [ c ] ) y [ c ] . hasOwnProperty ( d ) && y [ c ] [ d ] . onload ( ) } } var j = j || B . errorTimeout , l = { } , o = 0 , r = 0 , u = { t : d , s : c , e : f , a : i , x : j } ; y [ c ] === 1 && ( r = 1 , y [ c ] = [ ] , l = b . createElement ( a ) ) , a == "object" ? l . data = c : ( l . src = c , l . type = a ) , l . width = l . height = "0" , l . onerror = l . onload = l . onreadystatechange = function ( ) { k . call ( this , r ) } , p . splice ( e , 0 , u ) , a != "img" && ( r || y [ c ] === 2 ? ( t . insertBefore ( l , s ? null : n ) , m ( k , j ) ) : y [ c ] . push ( l ) ) } function j ( a , b , c , d , f ) { return q = 0 , b = b || "j" , e ( a ) ? i ( b == "c" ? v : u , a , b , this . i ++ , c , d , f ) : ( p . splice ( this . i ++ , 0 , a ) , p . length == 1 && h ( ) ) , this } function k ( ) { var a = B ; return a . loader = { load : j , i : 0 } , a } var l = b . documentElement , m = a . setTimeout , n = b . getElementsByTagName ( "script" ) [ 0 ] , o = { } . toString , p = [ ] , q = 0 , r = "MozAppearance" in l . style , s = r && ! ! b . createRange ( ) . compareNode , t = s ? l : n . parentNode , l = a . opera && o . call ( a . opera ) == "[object Opera]" , l = ! ! b . attachEvent && ! l , u = r ? "object" : l ? "script" : "img" , v = l ? "script" : u , w = Array . isArray || function ( a ) { return o . call ( a ) == "[object Array]" } , x = [ ] , y = { } , z = { timeout : function ( a , b ) { return b . length && ( a . timeout = b [ 0 ] ) , a } } , A , B ; B = function ( a ) { function b ( a ) { var a = a . split ( "!" ) , b = x . length , c = a . pop ( ) , d = a . length , c = { url : c , origUrl : c , prefixes : a } , e , f , g ; for ( f = 0 ; f < d ; f ++ ) g = a [ f ] . split ( "=" ) , ( e = z [ g . shift ( ) ] ) && ( c = e ( c , g ) ) ; for ( f = 0 ; f < b ; f ++ ) c = x [ f ] ( c ) ; return c } function g ( a , e , f , g , i ) { var j = b ( a ) , l = j . autoCallback ; j . url . split ( "." ) . pop ( ) . split ( "?" ) . shift ( ) , j . bypass || ( e && ( e = d ( e ) ? e : e [ a ] || e [ g ] || e [ a . split ( "/" ) . pop ( ) . split ( "?" ) [ 0 ] ] || h ) , j . instead ? j . instead ( a , e , f , g , i ) : ( y [ j . url ] ? j . noexec = ! 0 : y [ j . url ] = 1 , f . load ( j . url , j . forceCSS || ! j . forceJS && "css" == j . url . split ( "." ) . pop ( ) . split ( "?" ) . shift ( ) ? "c" : c , j . noexec , j . attrs , j . timeout ) , ( d ( e ) || d ( l ) ) && f . load ( function ( ) { k ( ) , e && e ( j . origUrl , i , g ) , l && l ( j . origUrl , i , g ) , y [ j . url ] = 2 } ) ) ) } function i ( a , b ) { function c ( a , c ) { if ( a ) { if ( e ( a ) ) c || ( j = function ( ) { var a = [ ] . slice . call ( arguments ) ; k . apply ( this , a ) , l ( ) } ) , g ( a , j , b , 0 , h ) ; else if ( Object ( a ) === a ) for ( n in m = function ( ) { var b = 0 , c ; for ( c in a ) a . hasOwnProperty ( c ) && b ++ ; return b } ( ) , a ) a . hasOwnProperty ( n ) && ( ! c && ! -- m && ( d ( j ) ? j = function ( ) { var a = [ ] . slice . call ( arguments ) ; k . apply ( this , a ) , l ( ) } : j [ n ] = function ( a ) { return function ( ) { var b = [ ] . slice . call ( arguments ) ; a && a . apply ( this , b ) , l ( ) } } ( k [ n ] ) ) , g ( a [ n ] , j , b , n , h ) ) } else ! c && l ( ) } var h = ! ! a . test , i = a . load || a . both , j = a . callback || f , k = j , l = a . complete || f , m , n ; c ( h ? a . yep : a . nope , ! ! i ) , i && c ( i ) } var j , l , m = this . yepnope . loader ; if ( e ( a ) ) g ( a , 0 , m , 0 ) ; else if ( w ( a ) ) for ( j = 0 ; j < a . length ; j ++ ) l = a [ j ] , e ( l ) ? g ( l , 0 , m , 0 ) : w ( l ) ? B ( l ) : Object ( l ) === l && i ( l , m ) ; else Object ( a ) === a && i ( a , m ) } , B . addPrefix = function ( a , b ) { z [ a ] = b } , B . addFilter = function ( a ) { x . push ( a ) } , B . errorTimeout = 1e4 , b . readyState == null && b . addEventListener && ( b . readyState = "loading" , b . addEventListener ( "DOMContentLoaded" , A = function ( ) { b . removeEventListener ( "DOMContentLoaded" , A , 0 ) , b . readyState = "complete" } , 0 ) ) , a . yepnope = k ( ) , a . yepnope . executeStack = h , a . yepnope . injectJs = function ( a , c , d , e , i , j ) { var k = b . createElement ( "script" ) , l , o , e = e || B . errorTimeout ; k . src = a ; for ( o in d ) k . setAttribute ( o , d [ o ] ) ; c = j ? h : c || f , k . onreadystatechange = k . onload = function ( ) { ! l && g ( k . readyState ) && ( l = 1 , c ( ) , k . onload = k . onreadystatechange = null ) } , m ( function ( ) { l || ( l = 1 , c ( 1 ) ) } , e ) , i ? k . onload ( ) : n . parentNode . insertBefore ( k , n ) } , a . yepnope . injectCss = function ( a , c , d , e , g , i ) { var e = b . createElement ( "link" ) , j , c = i ? h : c || f ; e . href = a , e . rel = "stylesheet" , e . type = "text/css" ; for ( j in d ) e . setAttribute ( j , d [ j ] ) ; g || ( n . parentNode . insertBefore ( e , n ) , m ( c , 0 ) ) } } ) ( this , document ) ;
Modernizr . load = function ( ) { yepnope . apply ( window , [ ] . slice . call ( arguments , 0 ) ) ; } ;
;
// @license-end