first commit

This commit is contained in:
armansansd
2023-07-12 16:31:19 +01:00
commit 3424b1927b
23306 changed files with 2217776 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
svg:not(:root) {
overflow: hidden;
}
#foo {
&:before {
content: icon(audio);
}
}
+289
View File
@@ -0,0 +1,289 @@
.ambientlight,
.no-applicationcache,
.audio,
.no-batteryapi,
.blobconstructor,
.no-canvas,
.canvastext,
.no-contenteditable,
.contextmenu,
.no-cookies,
.cors,
.no-cryptography,
.customelements,
.no-customprotocolhandler,
.customevent,
.no-dart,
.dataview,
.no-emoji,
.eventlistener,
.no-exiforientation,
.flash,
.no-forcetouch,
.fullscreen,
.no-gamepads,
.geolocation,
.no-hashchange,
.hiddenscroll,
.no-history,
.htmlimports,
.no-ie8compat,
.indexeddb,
.no-indexeddbblob,
.input,
.no-inputsearchevent,
.inputtypes,
.no-intl,
.json,
.no-ligatures,
.olreversed,
.no-mathml,
.mediasource,
.no-messagechannel,
.notification,
.no-pagevisibility,
.performance,
.no-pointerevents,
.pointerlock,
.no-postmessage,
.proximity,
.no-queryselector,
.quotamanagement,
.no-requestanimationframe,
.serviceworker,
.no-svg,
.templatestrings,
.no-touchevents,
.typedarrays,
.no-unicoderange,
.unicode,
.no-userdata,
.vibrate,
.no-video,
.vml,
.no-webintents,
.webanimations,
.no-webgl,
.websockets,
.no-xdomainrequest,
.adownload,
.no-audioautoplay,
.audioloop,
.no-audiopreload,
.webaudio,
.no-lowbattery,
.canvasblending,
.no-todataurljpeg, .todataurlpng, .todataurlwebp,
.canvaswinding,
.no-getrandomvalues,
.cssall,
.no-cssanimations,
.appearance,
.no-backdropfilter,
.backgroundblendmode,
.no-backgroundcliptext,
.bgpositionshorthand,
.no-bgpositionxy,
.bgrepeatspace, .bgrepeatround,
.no-backgroundsize,
.bgsizecover,
.no-borderimage,
.borderradius,
.no-boxdecorationbreak,
.boxshadow,
.no-boxsizing,
.csscalc,
.no-checked,
.csschunit,
.no-csscolumns,
.cssgrid, .cssgridlegacy,
.no-cubicbezierrange,
.customproperties,
.no-display-runin,
.displaytable,
.no-ellipsis,
.cssescape,
.no-cssexunit,
.cssfilters,
.no-flexbox,
.flexboxlegacy,
.no-flexboxtweener,
.flexwrap,
.no-focuswithin,
.fontdisplay,
.no-fontface,
.generatedcontent,
.no-cssgradients,
.hairline,
.no-hsla,
.csshyphens, .softhyphens, .softhyphensfind,
.no-cssinvalid,
.lastchild,
.no-cssmask,
.mediaqueries,
.no-multiplebgs,
.nthchild,
.no-objectfit,
.opacity,
.no-overflowscrolling,
.csspointerevents,
.no-csspositionsticky,
.csspseudoanimations,
.no-csspseudotransitions,
.cssreflections,
.no-regions,
.cssremunit,
.no-cssresize,
.rgba,
.no-cssscrollbar,
.scrollsnappoints,
.no-shapes,
.siblinggeneral,
.no-subpixelfont,
.supports,
.no-target,
.textalignlast,
.no-textdecoration,
.textshadow,
.no-csstransforms,
.csstransforms3d,
.no-csstransformslevel2,
.preserve3d,
.no-csstransitions,
.userselect,
.no-cssvalid,
.variablefonts,
.no-cssvhunit,
.cssvmaxunit,
.no-cssvminunit,
.cssvwunit,
.no-willchange,
.wrapflow,
.no-classlist,
.createelementattrs, .createelement-attrs,
.no-dataset,
.documentfragment,
.no-hidden,
.intersectionobserver,
.no-microdata,
.mutationobserver,
.no-passiveeventlisteners,
.bdi,
.no-datalistelem,
.details,
.no-outputelem,
.picture,
.no-progressbar, .meter,
.ruby,
.no-template,
.time,
.no-texttrackapi, .track,
.unknownelements,
.no-es5array,
.es5date,
.no-es5function,
.es5object,
.no-es5,
.strictmode,
.no-es5string,
.es5syntax,
.no-es5undefined,
.es6array,
.no-arrow,
.es6collections,
.no-contains,
.generators,
.no-es6math,
.es6number,
.no-es6object,
.promises,
.no-es6string,
.devicemotion, .deviceorientation,
.no-oninput,
.filereader,
.no-filesystem,
.capture,
.no-fileinput,
.directory,
.no-formattribute,
.localizednumber,
.no-placeholder,
.requestautocomplete,
.no-formvalidation,
.sandbox,
.no-seamless,
.srcdoc,
.no-apng,
.imgcrossorigin,
.no-jpeg2000,
.jpegxr,
.no-sizes,
.srcset,
.no-webpalpha,
.webpanimation,
.no-webplossless, .webp-lossless,
.webp,
.no-inputformaction,
.inputformenctype,
.no-inputformmethod,
.inputformnovalidate,
.no-inputformtarget,
.hovermq,
.no-pointermq,
.beacon,
.no-connectioneffectivetype,
.lowbandwidth,
.no-eventsource,
.fetch,
.no-xhrresponsetypearraybuffer,
.xhrresponsetypeblob,
.no-xhrresponsetypedocument,
.xhrresponsetypejson,
.no-xhrresponsetypetext,
.xhrresponsetype,
.no-xhr2,
.scriptasync,
.no-scriptdefer,
.speechrecognition,
.no-speechsynthesis,
.localstorage,
.no-sessionstorage,
.websqldatabase,
.no-stylescoped,
.svgasimg,
.no-svgclippaths,
.svgfilters,
.no-svgforeignobject,
.inlinesvg,
.no-smil,
.textareamaxlength,
.no-bloburls,
.datauri,
.no-urlparser,
.urlsearchparams,
.no-videoautoplay,
.videocrossorigin,
.no-videoloop,
.videopreload,
.no-publicKeyCredential,
.webglextensions,
.no-datachannel,
.getusermedia,
.no-peerconnection,
.websocketsbinary,
.no-atobbtoa,
.framed,
.no-matchmedia,
.blobworkers,
.no-dataworkers,
.sharedworkers,
.no-transferables,
.webworkers {
background: red;
}
.prefixed-cors,
.prefixed-input,
.prefixed-no-smil {
background: blue;
}
+387
View File
@@ -0,0 +1,387 @@
/* jshint sub: true */
/* global define */
define(["Modernizr"], function (M) {
var tests = {
"standalone": {
"ambientlight": M.ambientlight,
"applicationcache": M.applicationcache,
"audio": M.audio,
"battery": M.batteryapi,
"blob": M.blobconstructor,
"canvas": M.canvas,
"canvastext": M.canvastext,
"contenteditable": M.contenteditable,
"contextmenu": M.contextmenu,
"cookies": M.cookies,
"cors": M.cors,
"crypto": M.cryptography,
"custom-elements": M.customelements,
"custom-protocol-handler": M.customprotocolhandler,
"customevent": M.customevent,
"dart": M.dart,
"dataview-api": M.dataview,
"emoji": M.emoji,
"eventlistener": M.eventlistener,
"exif-orientation": M.exiforientation,
"flash": M.flash,
"forcetouch": M.forcetouch,
"fullscreen-api": M.fullscreen,
"gamepad": M.gamepads,
"geolocation": M.geolocation,
"hashchange": M.hashchange,
"hiddenscroll": M.hiddenscroll,
"history": M.history,
"htmlimports": M.htmlimports,
"ie8compat": M.ie8compat,
"indexeddb": M.indexeddb,
"indexeddbblob": M.indexeddbblob,
"input": M.input,
"inputsearchevent": M.inputsearchevent,
"inputtypes": M.inputtypes,
"intl": M.intl,
"json": M.json,
"ligatures": M.ligatures,
"lists-reversed": M.olreversed,
"mathml": M.mathml,
"media-source-extension-api": M.mediasource,
"messagechannel": M.messagechannel,
"notification": M.notification,
"pagevisibility-api": M.pagevisibility,
"performance": M.performance,
"pointerevents": M.pointerevents,
"pointerlock-api": M.pointerlock,
"postmessage": M.postmessage,
"proximity": M.proximity,
"queryselector": M.queryselector,
"quota-management-api": M.quotamanagement,
"requestanimationframe": M.requestanimationframe,
"serviceworker": M.serviceworker,
"svg": M.svg,
"templatestrings": M.templatestrings,
"touchevents": M.touchevents,
"typed-arrays": M.typedarrays,
"unicode-range": M.unicoderange,
"unicode": M.unicode,
"userdata": M.userdata,
"vibration": M.vibrate,
"video": M.video,
"vml": M.vml,
"web-intents": M.webintents,
"webanimations": M.webanimations,
"webgl": M.webgl,
"websockets": M.websockets,
"xdomainrequest": M.xdomainrequest
},
"a": {
"download": M.adownload
},
"audio": {
"autoplay": M.audioautoplay,
"loop": M.audioloop,
"preload": M.audiopreload,
"webaudio": M.webaudio
},
"battery": {
"lowbattery": M.lowbattery
},
"canvas": {
"blending": M.canvasblending,
"todataurl": [
M["todataurljpeg"],
M["todataurlpng"],
M["todataurlwebp"]
],
"winding": M.canvaswinding
},
"crypto": {
"getrandomvalues": M.getrandomvalues
},
"css": {
"all": M.cssall,
"animations": M.cssanimations,
"appearance": M.appearance,
"backdropfilter": M.backdropfilter,
"backgroundblendmode": M.backgroundblendmode,
"backgroundcliptext": M.backgroundcliptext,
"backgroundposition-shorthand": M.bgpositionshorthand,
"backgroundposition-xy": M.bgpositionxy,
"backgroundrepeat": [
M["bgrepeatspace"],
M["bgrepeatround"]
],
"backgroundsize": M.backgroundsize,
"backgroundsizecover": M.bgsizecover,
"borderimage": M.borderimage,
"borderradius": M.borderradius,
"boxdecorationbreak": M.boxdecorationbreak,
"boxshadow": M.boxshadow,
"boxsizing": M.boxsizing,
"calc": M.csscalc,
"checked": M.checked,
"chunit": M.csschunit,
"columns": M.csscolumns,
"cssgrid": [
M["cssgrid"],
M["cssgridlegacy"]
],
"cubicbezierrange": M.cubicbezierrange,
"customproperties": M.customproperties,
"displayrunin": M["display-runin"],
"displaytable": M.displaytable,
"ellipsis": M.ellipsis,
"escape": M.cssescape,
"exunit": M.cssexunit,
"filters": M.cssfilters,
"flexbox": M.flexbox,
"flexboxlegacy": M.flexboxlegacy,
"flexboxtweener": M.flexboxtweener,
"flexwrap": M.flexwrap,
"focuswithin": M.focuswithin,
"fontdisplay": M.fontdisplay,
"fontface": M.fontface,
"generatedcontent": M.generatedcontent,
"gradients": M.cssgradients,
"hairline": M.hairline,
"hsla": M.hsla,
"hyphens": [
M["csshyphens"],
M["softhyphens"],
M["softhyphensfind"]
],
"invalid": M.cssinvalid,
"lastchild": M.lastchild,
"mask": M.cssmask,
"mediaqueries": M.mediaqueries,
"multiplebgs": M.multiplebgs,
"nthchild": M.nthchild,
"objectfit": M.objectfit,
"opacity": M.opacity,
"overflow-scrolling": M.overflowscrolling,
"pointerevents": M.csspointerevents,
"positionsticky": M.csspositionsticky,
"pseudoanimations": M.csspseudoanimations,
"pseudotransitions": M.csspseudotransitions,
"reflections": M.cssreflections,
"regions": M.regions,
"remunit": M.cssremunit,
"resize": M.cssresize,
"rgba": M.rgba,
"scrollbars": M.cssscrollbar,
"scrollsnappoints": M.scrollsnappoints,
"shapes": M.shapes,
"siblinggeneral": M.siblinggeneral,
"subpixelfont": M.subpixelfont,
"supports": M.supports,
"target": M.target,
"textalignlast": M.textalignlast,
"textdecoration": M.textdecoration,
"textshadow": M.textshadow,
"transforms": M.csstransforms,
"transforms3d": M.csstransforms3d,
"transformslevel2": M.csstransformslevel2,
"transformstylepreserve3d": M.preserve3d,
"transitions": M.csstransitions,
"userselect": M.userselect,
"valid": M.cssvalid,
"variablefonts": M.variablefonts,
"vhunit": M.cssvhunit,
"vmaxunit": M.cssvmaxunit,
"vminunit": M.cssvminunit,
"vwunit": M.cssvwunit,
"will-change": M.willchange,
"wrapflow": M.wrapflow
},
"dom": {
"classlist": M.classlist,
"createElement-attrs": [
M["createelementattrs"],
M["createelement-attrs"]
],
"dataset": M.dataset,
"documentfragment": M.documentfragment,
"hidden": M.hidden,
"intersection-observer": M.intersectionobserver,
"microdata": M.microdata,
"mutationObserver": M.mutationobserver,
"passiveeventlisteners": M.passiveeventlisteners
},
"elem": {
"bdi": M.bdi,
"datalist": M.datalistelem,
"details": M.details,
"output": M.outputelem,
"picture": M.picture,
"progress-meter": [
M["progressbar"],
M["meter"]
],
"ruby": M.ruby,
"template": M.template,
"time": M.time,
"track": [
M["texttrackapi"],
M["track"]
],
"unknown": M.unknownelements
},
"es5": {
"array": M.es5array,
"date": M.es5date,
"function": M.es5function,
"object": M.es5object,
"specification": M.es5,
"strictmode": M.strictmode,
"string": M.es5string,
"syntax": M.es5syntax,
"undefined": M.es5undefined
},
"es6": {
"array": M.es6array,
"arrow": M.arrow,
"collections": M.es6collections,
"contains": M.contains,
"generators": M.generators,
"math": M.es6math,
"number": M.es6number,
"object": M.es6object,
"promises": M.promises,
"string": M.es6string
},
"event": {
"deviceorientation-motion": [
M["devicemotion"],
M["deviceorientation"]
],
"oninput": M.oninput
},
"file": {
"api": M.filereader,
"filesystem": M.filesystem
},
"forms": {
"capture": M.capture,
"fileinput": M.fileinput,
"fileinputdirectory": M.directory,
"formattribute": M.formattribute,
"inputnumber-l10n": M.localizednumber,
"placeholder": M.placeholder,
"requestautocomplete": M.requestautocomplete,
"validation": M.formvalidation
},
"iframe": {
"sandbox": M.sandbox,
"seamless": M.seamless,
"srcdoc": M.srcdoc
},
"img": {
"apng": M.apng,
"crossorigin": M.imgcrossorigin,
"jpeg2000": M.jpeg2000,
"jpegxr": M.jpegxr,
"sizes": M.sizes,
"srcset": M.srcset,
"webp-alpha": M.webpalpha,
"webp-animation": M.webpanimation,
"webp-lossless": [
M["webplossless"],
M["webp-lossless"]
],
"webp": M.webp
},
"input": {
"formaction": M.inputformaction,
"formenctype": M.inputformenctype,
"formmethod": M.inputformmethod,
"formnovalidate": M.inputformnovalidate,
"formtarget": M.inputformtarget
},
"mediaquery": {
"hovermq": M.hovermq,
"pointermq": M.pointermq
},
"network": {
"beacon": M.beacon,
"connection-effectivetype": M.connectioneffectivetype,
"connection": M.lowbandwidth,
"eventsource": M.eventsource,
"fetch": M.fetch,
"xhr-responsetype-arraybuffer": M.xhrresponsetypearraybuffer,
"xhr-responsetype-blob": M.xhrresponsetypeblob,
"xhr-responsetype-document": M.xhrresponsetypedocument,
"xhr-responsetype-json": M.xhrresponsetypejson,
"xhr-responsetype-text": M.xhrresponsetypetext,
"xhr-responsetype": M.xhrresponsetype,
"xhr2": M.xhr2
},
"script": {
"async": M.scriptasync,
"defer": M.scriptdefer
},
"speech": {
"speech-recognition": M.speechrecognition,
"speech-synthesis": M.speechsynthesis
},
"storage": {
"localstorage": M.localstorage,
"sessionstorage": M.sessionstorage,
"websqldatabase": M.websqldatabase
},
"style": {
"scoped": M.stylescoped
},
"svg": {
"asimg": M.svgasimg,
"clippaths": M.svgclippaths,
"filters": M.svgfilters,
"foreignobject": M.svgforeignobject,
"inline": M.inlinesvg,
"smil": M.smil
},
"textarea": {
"maxlength": M.textareamaxlength
},
"url": {
"bloburls": M.bloburls,
"data-uri": M.datauri,
"parser": M.urlparser,
"urlsearchparams": M.urlsearchparams
},
"video": {
"autoplay": M.videoautoplay,
"crossorigin": M.videocrossorigin,
"loop": M.videoloop,
"preload": M.videopreload
},
"webauthn": {
"publickeycredential": M.publicKeyCredential
},
"webgl": {
"extensions": M.webglextensions
},
"webrtc": {
"datachannel": M.datachannel,
"getusermedia": M.getusermedia,
"peerconnection": M.peerconnection
},
"websockets": {
"binary": M.websocketsbinary
},
"window": {
"atob-btoa": M.atobbtoa,
"framed": M.framed,
"matchmedia": M.matchmedia
},
"workers": {
"blobworkers": M.blobworkers,
"dataworkers": M.dataworkers,
"sharedworkers": M.sharedworkers,
"transferables": M.transferables,
"webworkers": M.webworkers
}
};
return M;
});
+382
View File
@@ -0,0 +1,382 @@
/* jshint sub: true */
var Modernizr = window.Modernizr;
var tests = {
"standalone": {
"ambientlight": Modernizr.ambientlight,
"applicationcache": Modernizr.applicationcache,
"audio": Modernizr.audio,
"battery": Modernizr.batteryapi,
"blob": Modernizr.blobconstructor,
"canvas": Modernizr.canvas,
"canvastext": Modernizr.canvastext,
"contenteditable": Modernizr.contenteditable,
"contextmenu": Modernizr.contextmenu,
"cookies": Modernizr.cookies,
"cors": Modernizr.cors,
"crypto": Modernizr.cryptography,
"custom-elements": Modernizr.customelements,
"custom-protocol-handler": Modernizr.customprotocolhandler,
"customevent": Modernizr.customevent,
"dart": Modernizr.dart,
"dataview-api": Modernizr.dataview,
"emoji": Modernizr.emoji,
"eventlistener": Modernizr.eventlistener,
"exif-orientation": Modernizr.exiforientation,
"flash": Modernizr.flash,
"forcetouch": Modernizr.forcetouch,
"fullscreen-api": Modernizr.fullscreen,
"gamepad": Modernizr.gamepads,
"geolocation": Modernizr.geolocation,
"hashchange": Modernizr.hashchange,
"hiddenscroll": Modernizr.hiddenscroll,
"history": Modernizr.history,
"htmlimports": Modernizr.htmlimports,
"ie8compat": Modernizr.ie8compat,
"indexeddb": Modernizr.indexeddb,
"indexeddbblob": Modernizr.indexeddbblob,
"input": Modernizr.input,
"inputsearchevent": Modernizr.inputsearchevent,
"inputtypes": Modernizr.inputtypes,
"intl": Modernizr.intl,
"json": Modernizr.json,
"ligatures": Modernizr.ligatures,
"lists-reversed": Modernizr.olreversed,
"mathml": Modernizr.mathml,
"media-source-extension-api": Modernizr.mediasource,
"messagechannel": Modernizr.messagechannel,
"notification": Modernizr.notification,
"pagevisibility-api": Modernizr.pagevisibility,
"performance": Modernizr.performance,
"pointerevents": Modernizr.pointerevents,
"pointerlock-api": Modernizr.pointerlock,
"postmessage": Modernizr.postmessage,
"proximity": Modernizr.proximity,
"queryselector": Modernizr.queryselector,
"quota-management-api": Modernizr.quotamanagement,
"requestanimationframe": Modernizr.requestanimationframe,
"serviceworker": Modernizr.serviceworker,
"svg": Modernizr.svg,
"templatestrings": Modernizr.templatestrings,
"touchevents": Modernizr.touchevents,
"typed-arrays": Modernizr.typedarrays,
"unicode-range": Modernizr.unicoderange,
"unicode": Modernizr.unicode,
"userdata": Modernizr.userdata,
"vibration": Modernizr.vibrate,
"video": Modernizr.video,
"vml": Modernizr.vml,
"web-intents": Modernizr.webintents,
"webanimations": Modernizr.webanimations,
"webgl": Modernizr.webgl,
"websockets": Modernizr.websockets,
"xdomainrequest": Modernizr.xdomainrequest
},
"a": {
"download": Modernizr.adownload
},
"audio": {
"autoplay": Modernizr.audioautoplay,
"loop": Modernizr.audioloop,
"preload": Modernizr.audiopreload,
"webaudio": Modernizr.webaudio
},
"battery": {
"lowbattery": Modernizr.lowbattery
},
"canvas": {
"blending": Modernizr.canvasblending,
"todataurl": [
Modernizr["todataurljpeg"],
Modernizr["todataurlpng"],
Modernizr["todataurlwebp"]
],
"winding": Modernizr.canvaswinding
},
"crypto": {
"getrandomvalues": Modernizr.getrandomvalues
},
"css": {
"all": Modernizr.cssall,
"animations": Modernizr.cssanimations,
"appearance": Modernizr.appearance,
"backdropfilter": Modernizr.backdropfilter,
"backgroundblendmode": Modernizr.backgroundblendmode,
"backgroundcliptext": Modernizr.backgroundcliptext,
"backgroundposition-shorthand": Modernizr.bgpositionshorthand,
"backgroundposition-xy": Modernizr.bgpositionxy,
"backgroundrepeat": [
Modernizr["bgrepeatspace"],
Modernizr["bgrepeatround"]
],
"backgroundsize": Modernizr.backgroundsize,
"backgroundsizecover": Modernizr.bgsizecover,
"borderimage": Modernizr.borderimage,
"borderradius": Modernizr.borderradius,
"boxdecorationbreak": Modernizr.boxdecorationbreak,
"boxshadow": Modernizr.boxshadow,
"boxsizing": Modernizr.boxsizing,
"calc": Modernizr.csscalc,
"checked": Modernizr.checked,
"chunit": Modernizr.csschunit,
"columns": Modernizr.csscolumns,
"cssgrid": [
Modernizr["cssgrid"],
Modernizr["cssgridlegacy"]
],
"cubicbezierrange": Modernizr.cubicbezierrange,
"customproperties": Modernizr.customproperties,
"displayrunin": Modernizr["display-runin"],
"displaytable": Modernizr.displaytable,
"ellipsis": Modernizr.ellipsis,
"escape": Modernizr.cssescape,
"exunit": Modernizr.cssexunit,
"filters": Modernizr.cssfilters,
"flexbox": Modernizr.flexbox,
"flexboxlegacy": Modernizr.flexboxlegacy,
"flexboxtweener": Modernizr.flexboxtweener,
"flexwrap": Modernizr.flexwrap,
"focuswithin": Modernizr.focuswithin,
"fontdisplay": Modernizr.fontdisplay,
"fontface": Modernizr.fontface,
"generatedcontent": Modernizr.generatedcontent,
"gradients": Modernizr.cssgradients,
"hairline": Modernizr.hairline,
"hsla": Modernizr.hsla,
"hyphens": [
Modernizr["csshyphens"],
Modernizr["softhyphens"],
Modernizr["softhyphensfind"]
],
"invalid": Modernizr.cssinvalid,
"lastchild": Modernizr.lastchild,
"mask": Modernizr.cssmask,
"mediaqueries": Modernizr.mediaqueries,
"multiplebgs": Modernizr.multiplebgs,
"nthchild": Modernizr.nthchild,
"objectfit": Modernizr.objectfit,
"opacity": Modernizr.opacity,
"overflow-scrolling": Modernizr.overflowscrolling,
"pointerevents": Modernizr.csspointerevents,
"positionsticky": Modernizr.csspositionsticky,
"pseudoanimations": Modernizr.csspseudoanimations,
"pseudotransitions": Modernizr.csspseudotransitions,
"reflections": Modernizr.cssreflections,
"regions": Modernizr.regions,
"remunit": Modernizr.cssremunit,
"resize": Modernizr.cssresize,
"rgba": Modernizr.rgba,
"scrollbars": Modernizr.cssscrollbar,
"scrollsnappoints": Modernizr.scrollsnappoints,
"shapes": Modernizr.shapes,
"siblinggeneral": Modernizr.siblinggeneral,
"subpixelfont": Modernizr.subpixelfont,
"supports": Modernizr.supports,
"target": Modernizr.target,
"textalignlast": Modernizr.textalignlast,
"textdecoration": Modernizr.textdecoration,
"textshadow": Modernizr.textshadow,
"transforms": Modernizr.csstransforms,
"transforms3d": Modernizr.csstransforms3d,
"transformslevel2": Modernizr.csstransformslevel2,
"transformstylepreserve3d": Modernizr.preserve3d,
"transitions": Modernizr.csstransitions,
"userselect": Modernizr.userselect,
"valid": Modernizr.cssvalid,
"variablefonts": Modernizr.variablefonts,
"vhunit": Modernizr.cssvhunit,
"vmaxunit": Modernizr.cssvmaxunit,
"vminunit": Modernizr.cssvminunit,
"vwunit": Modernizr.cssvwunit,
"will-change": Modernizr.willchange,
"wrapflow": Modernizr.wrapflow
},
"dom": {
"classlist": Modernizr.classlist,
"createElement-attrs": [
Modernizr["createelementattrs"],
Modernizr["createelement-attrs"]
],
"dataset": Modernizr.dataset,
"documentfragment": Modernizr.documentfragment,
"hidden": Modernizr.hidden,
"intersection-observer": Modernizr.intersectionobserver,
"microdata": Modernizr.microdata,
"mutationObserver": Modernizr.mutationobserver,
"passiveeventlisteners": Modernizr.passiveeventlisteners
},
"elem": {
"bdi": Modernizr.bdi,
"datalist": Modernizr.datalistelem,
"details": Modernizr.details,
"output": Modernizr.outputelem,
"picture": Modernizr.picture,
"progress-meter": [
Modernizr["progressbar"],
Modernizr["meter"]
],
"ruby": Modernizr.ruby,
"template": Modernizr.template,
"time": Modernizr.time,
"track": [
Modernizr["texttrackapi"],
Modernizr["track"]
],
"unknown": Modernizr.unknownelements
},
"es5": {
"array": Modernizr.es5array,
"date": Modernizr.es5date,
"function": Modernizr.es5function,
"object": Modernizr.es5object,
"specification": Modernizr.es5,
"strictmode": Modernizr.strictmode,
"string": Modernizr.es5string,
"syntax": Modernizr.es5syntax,
"undefined": Modernizr.es5undefined
},
"es6": {
"array": Modernizr.es6array,
"arrow": Modernizr.arrow,
"collections": Modernizr.es6collections,
"contains": Modernizr.contains,
"generators": Modernizr.generators,
"math": Modernizr.es6math,
"number": Modernizr.es6number,
"object": Modernizr.es6object,
"promises": Modernizr.promises,
"string": Modernizr.es6string
},
"event": {
"deviceorientation-motion": [
Modernizr["devicemotion"],
Modernizr["deviceorientation"]
],
"oninput": Modernizr.oninput
},
"file": {
"api": Modernizr.filereader,
"filesystem": Modernizr.filesystem
},
"forms": {
"capture": Modernizr.capture,
"fileinput": Modernizr.fileinput,
"fileinputdirectory": Modernizr.directory,
"formattribute": Modernizr.formattribute,
"inputnumber-l10n": Modernizr.localizednumber,
"placeholder": Modernizr.placeholder,
"requestautocomplete": Modernizr.requestautocomplete,
"validation": Modernizr.formvalidation
},
"iframe": {
"sandbox": Modernizr.sandbox,
"seamless": Modernizr.seamless,
"srcdoc": Modernizr.srcdoc
},
"img": {
"apng": Modernizr.apng,
"crossorigin": Modernizr.imgcrossorigin,
"jpeg2000": Modernizr.jpeg2000,
"jpegxr": Modernizr.jpegxr,
"sizes": Modernizr.sizes,
"srcset": Modernizr.srcset,
"webp-alpha": Modernizr.webpalpha,
"webp-animation": Modernizr.webpanimation,
"webp-lossless": [
Modernizr["webplossless"],
Modernizr["webp-lossless"]
],
"webp": Modernizr.webp
},
"input": {
"formaction": Modernizr.inputformaction,
"formenctype": Modernizr.inputformenctype,
"formmethod": Modernizr.inputformmethod,
"formnovalidate": Modernizr.inputformnovalidate,
"formtarget": Modernizr.inputformtarget
},
"mediaquery": {
"hovermq": Modernizr.hovermq,
"pointermq": Modernizr.pointermq
},
"network": {
"beacon": Modernizr.beacon,
"connection-effectivetype": Modernizr.connectioneffectivetype,
"connection": Modernizr.lowbandwidth,
"eventsource": Modernizr.eventsource,
"fetch": Modernizr.fetch,
"xhr-responsetype-arraybuffer": Modernizr.xhrresponsetypearraybuffer,
"xhr-responsetype-blob": Modernizr.xhrresponsetypeblob,
"xhr-responsetype-document": Modernizr.xhrresponsetypedocument,
"xhr-responsetype-json": Modernizr.xhrresponsetypejson,
"xhr-responsetype-text": Modernizr.xhrresponsetypetext,
"xhr-responsetype": Modernizr.xhrresponsetype,
"xhr2": Modernizr.xhr2
},
"script": {
"async": Modernizr.scriptasync,
"defer": Modernizr.scriptdefer
},
"speech": {
"speech-recognition": Modernizr.speechrecognition,
"speech-synthesis": Modernizr.speechsynthesis
},
"storage": {
"localstorage": Modernizr.localstorage,
"sessionstorage": Modernizr.sessionstorage,
"websqldatabase": Modernizr.websqldatabase
},
"style": {
"scoped": Modernizr.stylescoped
},
"svg": {
"asimg": Modernizr.svgasimg,
"clippaths": Modernizr.svgclippaths,
"filters": Modernizr.svgfilters,
"foreignobject": Modernizr.svgforeignobject,
"inline": Modernizr.inlinesvg,
"smil": Modernizr.smil
},
"textarea": {
"maxlength": Modernizr.textareamaxlength
},
"url": {
"bloburls": Modernizr.bloburls,
"data-uri": Modernizr.datauri,
"parser": Modernizr.urlparser,
"urlsearchparams": Modernizr.urlsearchparams
},
"video": {
"autoplay": Modernizr.videoautoplay,
"crossorigin": Modernizr.videocrossorigin,
"loop": Modernizr.videoloop,
"preload": Modernizr.videopreload
},
"webauthn": {
"publickeycredential": Modernizr.publicKeyCredential
},
"webgl": {
"extensions": Modernizr.webglextensions
},
"webrtc": {
"datachannel": Modernizr.datachannel,
"getusermedia": Modernizr.getusermedia,
"peerconnection": Modernizr.peerconnection
},
"websockets": {
"binary": Modernizr.websocketsbinary
},
"window": {
"atob-btoa": Modernizr.atobbtoa,
"framed": Modernizr.framed,
"matchmedia": Modernizr.matchmedia
},
"workers": {
"blobworkers": Modernizr.blobworkers,
"dataworkers": Modernizr.dataworkers,
"sharedworkers": Modernizr.sharedworkers,
"transferables": Modernizr.transferables,
"webworkers": Modernizr.webworkers
}
};
+134
View File
@@ -0,0 +1,134 @@
"use strict";
var fs = require("fs-extra");
var cwd = process.cwd();
var path = require("path");
var buildDir = path.join(cwd, "build");
if (fs.existsSync(buildDir)) {
console.log("Removing old build folder...");
fs.removeSync(buildDir);
console.log("Done.");
}
var modernizr = require("modernizr");
modernizr.metadata(function (metadata) {
var props = metadata.map(function (data) {
return {
name: data.name,
path: data.amdPath.replace("test/", ""),
property: data.property,
cssclass: data.cssclass
};
});
var jsProps = props.filter(function (data) {
return data.property;
});
var jsTests = {};
jsProps.forEach(function (prop) {
var sections = prop.path.split("/");
var maxLength = sections.length - 1;
var current = jsTests;
if (sections.length === 1) {
current.standalone = current.standalone || {};
current.standalone[sections[0]] = prop.property;
} else {
sections.forEach(function (sect, idx) {
if (idx === maxLength) {
current[sect] = prop.property;
} else {
current[sect] = current[sect] || {};
}
current = current[sect];
});
}
});
var string = JSON.stringify(jsTests, null, "\t");
// Convert "foo": "bar" -> "foo": Modernizr.bar
string = string.replace(/(\:(?:\s)?)\"(.*)\"/g, "$1Modernizr.$2");
// Convert [ "foo": "bar" ] -> [ "foo": Modernizr["bar"] ]
string = string.replace(/(\t{3})\"(.*)\"/g, "$1Modernizr[\"$2\"]");
// Convert Modernizr.foo-bar -> Modernizr["foo-bar"]
string = string.replace(/\.((?:[\w]+)?\-(?:[\w]+))/g, "[\"$1\"]");
// Save test/js/vanilla.js
(function () {
var vanilla = [
"/* jshint sub: true */",
"var Modernizr = window.Modernizr;",
"var tests = " + string + ";"
].join("\n\n");
fs.writeFileSync(path.join(cwd, "test", "js", "vanilla.js"), vanilla);
}());
// Save test/js/amd.js
(function () {
var amd = [
"/* jshint sub: true */\n/* global define */",
"define([\"Modernizr\"], function (M) {",
" var tests = " + string.replace(/\n/g, "\n\t").replace(/Modernizr/g, "M") + ";",
" return M;",
"});"
].join("\n\n");
fs.writeFileSync(path.join(cwd, "test", "js", "amd.js"), amd);
}());
// Save test/css/vanilla.css
(function () {
var cssProps = props.filter(function (data) {
return data.cssclass;
}).map(function (data, idx) {
var cssclass = Array.isArray(data.cssclass) ? data.cssclass : [data.cssclass];
var negateclass = (idx % 2 ? "no-" : "");
return "." + negateclass + cssclass.join(", .");
});
var css = [
cssProps.join(",\n") + " {",
"\tbackground: red;",
"}\n\n"
].join("\n");
// Take a few classes and add a prefix for testing.
var prefixed = [
".prefixed-cors",
".prefixed-input",
".prefixed-no-smil"
];
css += [
prefixed.join(",\n") + " {",
"\tbackground: blue;",
"}\n"
].join("\n");
fs.writeFileSync(path.join(cwd, "test", "css", "vanilla.css"), css);
}());
var missingData = props.filter(function (data) {
return !data.property && !data.cssclass;
}).map(function (data) {
return data.path;
});
if (missingData.length) {
console.log("\n");
console.log("The following tests have no metadata:");
console.log();
console.log(missingData.join("\n"));
}
});
+17
View File
@@ -0,0 +1,17 @@
var Mocha = require("mocha");
var mocha = new Mocha({
setup : "bdd",
reporter : process.env.TRAVIS ? "tap" : "spec",
slow : 5000,
timeout : 30000
});
mocha.addFile("test/tests.js");
var runner = mocha.run();
runner.on("fail", function (test, err) {
process.stderr.write(" " + err.toString() + "\n\n");
process.exit(1);
});
+9
View File
@@ -0,0 +1,9 @@
{
"dest": "build/modernizr-custom.js",
"cache": false,
"files": {
"src": [
"test/{js,css}/*"
]
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"dest": "build/modernizr-custom.js",
"files": {
"src": [
"test/{js,css}/*"
]
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"dest": "build/modernizr-exclude.js",
"excludeTests": [
"applicationcache",
"emoji",
"notification"
],
"files": {
"src": [
"test/{js,css}/*"
]
},
"uglify": false
}
+10
View File
@@ -0,0 +1,10 @@
{
"classPrefix": "prefixed-",
"dest": "build/modernizr-prefixed.js",
"uglify": false,
"files": {
"src": [
"test/css/*.css"
]
}
}
+15
View File
@@ -0,0 +1,15 @@
{
"dest": "build/modernizr-select.js",
"tests": [
"webintents",
"siblinggeneral",
"svg"
],
"files": {
"src": [
"test/{js,css}/*"
]
},
"crawl": false,
"uglify": false
}
+363
View File
@@ -0,0 +1,363 @@
/*global describe, before, it, after*/
"use strict";
var fs = require("fs");
var path = require("path");
var colors = require("colors");
var cwd = process.cwd();
var chai = require('chai');
var expect = chai.expect;
var nexpect = require("nexpect");
var tests = "adownload, ambientlight, apng, appearance, applicationcache, arrow, atobbtoa, audio, audioautoplay, audioloop, audiopreload, backdropfilter, backgroundblendmode, backgroundcliptext, backgroundsize, batteryapi, bdi, beacon, bgpositionshorthand, bgpositionxy, bgrepeatround, bgrepeatspace, bgsizecover, blobconstructor, bloburls, blobworkers, borderimage, borderradius, boxdecorationbreak, boxshadow, boxsizing, canvas, canvasblending, canvastext, canvaswinding, capture, checked, classlist, connectioneffectivetype, contains, contenteditable, contextmenu, cookies, cors, createelement-attrs, createelementattrs, cryptography, cssall, cssanimations, csscalc, csschunit, csscolumns, cssescape, cssexunit, cssfilters, cssgradients, cssgrid, cssgridlegacy, csshyphens, cssinvalid, cssmask, csspointerevents, csspositionsticky, csspseudoanimations, csspseudotransitions, cssreflections, cssremunit, cssresize, cssscrollbar, csstransforms, csstransforms3d, csstransformslevel2, csstransitions, cssvalid, cssvhunit, cssvmaxunit, cssvminunit, cssvwunit, cubicbezierrange, customelements, customevent, customproperties, customprotocolhandler, dart, datachannel, datalistelem, dataset, datauri, dataview, dataworkers, details, devicemotion, deviceorientation, directory, display-runin, displaytable, documentfragment, ellipsis, emoji, es5, es5array, es5date, es5function, es5object, es5string, es5syntax, es5undefined, es6array, es6collections, es6math, es6number, es6object, es6string, eventlistener, eventsource, exiforientation, fetch, fileinput, filereader, filesystem, flash, flexbox, flexboxlegacy, flexboxtweener, flexwrap, focuswithin, fontdisplay, fontface, forcetouch, formattribute, formvalidation, framed, fullscreen, gamepads, generatedcontent, generators, geolocation, getrandomvalues, getusermedia, hairline, hashchange, hidden, hiddenscroll, history, hovermq, hsla, htmlimports, ie8compat, imgcrossorigin, indexeddb, indexeddbblob, inlinesvg, input, inputformaction, inputformenctype, inputformmethod, inputformnovalidate, inputformtarget, inputsearchevent, inputtypes, intersectionobserver, intl, jpeg2000, jpegxr, json, lastchild, ligatures, localizednumber, localstorage, lowbandwidth, lowbattery, matchmedia, mathml, mediaqueries, mediasource, messagechannel, meter, microdata, multiplebgs, mutationobserver, notification, nthchild, objectfit, olreversed, oninput, opacity, outputelem, overflowscrolling, pagevisibility, passiveeventlisteners, peerconnection, performance, picture, placeholder, pointerevents, pointerlock, pointermq, postmessage, preserve3d, progressbar, promises, proximity, publicKeyCredential, queryselector, quotamanagement, regions, requestanimationframe, requestautocomplete, rgba, ruby, sandbox, scriptasync, scriptdefer, scrollsnappoints, seamless, serviceworker, sessionstorage, shapes, sharedworkers, siblinggeneral, sizes, smil, softhyphens, softhyphensfind, speechrecognition, speechsynthesis, srcdoc, srcset, strictmode, stylescoped, subpixelfont, supports, svg, svgasimg, svgclippaths, svgfilters, svgforeignobject, target, template, templatestrings, textalignlast, textareamaxlength, textdecoration, textshadow, texttrackapi, time, todataurljpeg, todataurlpng, todataurlwebp, touchevents, track, transferables, typedarrays, unicode, unicoderange, unknownelements, urlparser, urlsearchparams, userdata, userselect, variablefonts, vibrate, video, videoautoplay, videocrossorigin, videoloop, videopreload, vml, webanimations, webaudio, webgl, webglextensions, webintents, webp, webp-lossless, webpalpha, webpanimation, webplossless, websockets, websocketsbinary, websqldatabase, webworkers, willchange, wrapflow, xdomainrequest, xhr2, xhrresponsetype, xhrresponsetypearraybuffer, xhrresponsetypeblob, xhrresponsetypedocument, xhrresponsetypejson, xhrresponsetypetext";
var testArray = tests.split(", ");
var cli = path.join(cwd, "bin", "customizr");
var settingsPath = path.join(cwd, "test", "settings");
var settings = {
cache: path.join(settingsPath, "cache-invalidate.json"),
custom: path.join(settingsPath, "custom.json"),
exclude: path.join(settingsPath, "exclude.json"),
prefixed: path.join(settingsPath, "prefixed.json"),
select: path.join(settingsPath, "select.json")
};
describe("customizr", function () {
var testsLength = testArray.length,
existingBuild = path.join(cwd, "build", "modernizr-custom.js");
it("should find all available tests in project", function (done) {
process.stdout.write("\n\n");
nexpect.spawn(cli, [
"--config", settings.custom
], {
stripColors: true
})
.wait("Looking for Modernizr references")
.wait(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> Ready to build using these settings:")
.wait("Building your customized Modernizr").wait("OK")
.expect(">> Success! Saved file to build/modernizr-custom.js")
.run(function (err) {
if (!err) {
done();
} else {
throw err;
}
});
});
it("should avoid re-building a cached Modernizr build", function (done) {
process.stdout.write("\n\n");
nexpect.spawn(cli, [
"--config", settings.custom
], {
stripColors: true
})
.wait("Looking for Modernizr references")
.wait(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect("No config or test changes detected")
.expect(">> The build step has been bypassed. Use `--force` to override.")
.expect(">> Your current file can be found in build/modernizr-custom.js")
.run(function (err) {
if (!err) {
done();
} else {
throw err;
}
});
});
it("should force re-building a cached Modernizr build", function (done) {
process.stdout.write("\n\n");
nexpect.spawn(cli, [
"--config", settings.custom,
"--force"
], {
stripColors: true
})
.wait("Looking for Modernizr references")
.wait(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> Ready to build using these settings:")
.wait("Building your customized Modernizr").wait("OK")
.expect(">> Success! Saved file to build/modernizr-custom.js")
.run(function (err) {
if (!err) {
done();
} else {
throw err;
}
});
});
it("should invalidate a cached Modernizr build", function (done) {
process.stdout.write("\n\n");
nexpect.spawn(cli, [
"--config", settings.cache
], {
stripColors: true
})
.wait("Looking for Modernizr references")
.wait(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> " + testsLength + " matches in")
.expect(">> " + tests)
.expect(">> Ready to build using these settings:")
.wait("Building your customized Modernizr").wait("OK")
.expect(">> Success! Saved file to build/modernizr-custom.js")
.run(function (err) {
if (!err) {
done();
} else {
throw err;
}
});
});
describe("should include all tests", function () {
var contents;
testArray.forEach(function (test) {
it(test, function (done) {
contents = contents || fs.readFileSync(existingBuild, "utf8");
expect(contents.indexOf(test)).to.not.equal(-1);
done();
});
});
});
});
describe("custom builds", function () {
describe("declared tests", function () {
it("should only build declared tests", function (done) {
process.stdout.write("\n\n");
nexpect.spawn(cli, [
"--config", settings.select
], {
stripColors: true
})
.wait(">> Explicitly including these tests:")
.expect(">> siblinggeneral, svg, webintents")
.expect("Skipping file traversal")
.wait("Building your customized Modernizr").wait("OK")
.expect(">> Success! Saved file to build/modernizr-select.js")
.run(function (err) {
if (!err) {
done();
} else {
throw err;
}
});
});
describe("should only contain references to bundled tests", function () {
var includedTestArray = [
"webintents",
"siblinggeneral",
"svg"
];
var testsLength = includedTestArray.length;
var includedTests = includedTestArray.join(" ");
var contents;
includedTestArray.forEach(function (test) {
it(test, function (done) {
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-select.js"), "utf8");
expect(contents.indexOf(test)).to.not.equal(-1);
done();
});
});
describe("should not contain these references", function (done) {
var excludedTestArray = testArray.filter(function (test) {
return includedTestArray.indexOf(test) === -1;
});
excludedTestArray.forEach(function (test) {
it(test, function (done) {
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-select.js"), "utf8");
var testPattern = "addTest('" + test.toLowerCase();
expect(contents.indexOf(testPattern)).to.equal(-1);
done();
});
});
});
});
});
describe("excluded tests", function () {
it("should build without excluded tests", function (done) {
process.stdout.write("\n\n");
nexpect.spawn(cli, [
"--config", settings.exclude
], {
stripColors: true
})
.wait(">> Explicitly excluding these tests:")
.expect(">> applicationcache, emoji, notification")
.wait("Building your customized Modernizr").wait("OK")
.expect(">> Success! Saved file to build/modernizr-exclude.js")
.run(function (err) {
if (!err) {
done();
} else {
throw err;
}
});
});
describe("should not contain references to excluded tests", function () {
var excludedTestArray = [
"applicationcache",
"emoji",
"notification"
];
var testsLength = excludedTestArray.length;
var excludedTests = excludedTestArray.join(" ");
var contents;
excludedTestArray.forEach(function (test) {
it(test, function (done) {
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-exclude.js"), "utf8");
expect(contents.indexOf(test)).to.equal(-1);
done();
});
});
});
});
describe("prefix test", function () {
it("should honor the specified prefix", function (done) {
process.stdout.write("\n\n");
nexpect.spawn(cli, [
"--config", settings.prefixed
], {
stripColors: true
})
.wait("Looking for Modernizr references")
.expect(">> 3 matches in test/css/vanilla.css")
.expect(">> cors, input, smil")
.wait("Building your customized Modernizr").wait("OK")
.expect(">> Success! Saved file to build/modernizr-prefixed.js")
.run(function (err) {
if (!err) {
done();
} else {
throw err;
}
});
});
describe("should only contain references to bundled tests", function () {
var includedTestArray = [
"cors",
"input",
"smil"
];
var testsLength = includedTestArray.length;
var includedTests = includedTestArray.join(" ");
var contents;
includedTestArray.forEach(function (test) {
it(test, function (done) {
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-prefixed.js"), "utf8");
expect(contents.indexOf(test)).to.not.equal(-1);
done();
});
});
describe("should not contain these references", function (done) {
var excludedTestArray = testArray.filter(function (test) {
return includedTestArray.indexOf(test) === -1;
});
excludedTestArray.forEach(function (test) {
it(test, function (done) {
contents = contents || fs.readFileSync(path.join(cwd, "build", "modernizr-prefixed.js"), "utf8");
var testPattern = "addTest('" + test.toLowerCase();
expect(contents.indexOf(testPattern)).to.equal(-1);
done();
});
});
});
});
});
});