-
Notifications
You must be signed in to change notification settings - Fork 0
/
feature-data.js
300 lines (296 loc) · 42.2 KB
/
feature-data.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
( function ( DF ) {
if ( !DF ) {
DF = window.DF = {};
}
DF.features = [ { "name": "Ambient Light Events", "desc": "Detects support for the API that provides information about the ambient light levels, as detected by the device's light detector, in terms of lux units.", "prop": "ambientlight" }, { "name": "Application Cache", "desc": "Detects support for the Application Cache, for storing data to enable web-based applications run offline.The API has been <a href=\"http://alistapart.com/article/application-cache-is-a-douchebag\">heavily criticized</a> and discussions are underway to address this.", "prop": "applicationcache" }, { "name": "HTML5 Audio Element", "desc": "Detects the audio element", "prop": "audio" }, { "name": "Battery API", "desc": "Detect support for the Battery API, for accessing information about the system's battery charge level.", "prop": "batteryapi" }, { "name": "Blob constructor", "desc": "Detects support for the Blob constructor, for creating file-like objects of immutable, raw data.", "prop": "blobconstructor" }, { "name": "Canvas", "desc": "Detects support for the <code><canvas></code> element for 2D drawing.", "prop": "canvas" }, { "name": "Canvas text", "desc": "Detects support for the text APIs for <code><canvas></code> elements.", "prop": "canvastext" }, { "name": "Content Editable", "desc": "Detects support for the <code>contenteditable</code> attribute of elements, allowing their DOM text contents to be edited directly by the user.", "prop": "contenteditable" }, { "name": "Context menus", "desc": "Detects support for custom context menus.", "prop": "contextmenu" }, { "name": "Cookies", "desc": "Detects whether cookie support is enabled.", "prop": "cookies" }, { "name": "Cross-Origin Resource Sharing", "desc": "Detects support for Cross-Origin Resource Sharing: method of performing XMLHttpRequests across domains.", "prop": "cors" }, { "name": "Web Cryptography", "desc": "Detects support for the cryptographic functionality available under window.crypto.subtle", "prop": "cryptography" }, { "name": "Custom protocol handler", "desc": "Detects support for the <code>window.registerProtocolHandler()</code> API to allow websites to register themselves as possible handlers for particular protocols.", "prop": "customprotocolhandler" }, { "name": "CustomEvent", "desc": "Detects support for CustomEvent.", "prop": "customevent" }, { "name": "Dart", "desc": "Detects native support for the Dart programming language.", "prop": "dart" }, { "name": "DataView", "desc": "Detects support for the DataView interface for reading data from an ArrayBuffer as part of the Typed Array spec.", "prop": "dataview" }, { "name": "Emoji", "desc": "Detects support for emoji character sets.", "prop": "emoji" }, { "name": "Event Listener", "desc": "Detects native support for addEventListener", "prop": "eventlistener" }, { "name": "EXIF Orientation", "desc": "Detects support for EXIF Orientation in JPEG images.iOS looks at the EXIF Orientation flag in JPEGs and rotates the image accordingly. Most desktop browsers just ignore this data.", "prop": "exiforientation" }, { "name": "Flash", "desc": "Detects Flash support as well as Flash-blocking plugins", "prop": "flash" }, { "name": "Force Touch Events", "desc": "Tests whether the browser supports the detection of Force Touch Events. Force Touch Events allow custom behaviours and interactions to take place based on the given pressure or change in pressure from a compatible trackpad.Force Touch events are available in OS X 10.11 and later on devices equipped with Force Touch trackpads.", "prop": "forcetouch" }, { "name": "Fullscreen API", "desc": "Detects support for the ability to make the current website take over the user's entire screen", "prop": "fullscreen" }, { "name": "GamePad API", "desc": "Detects support for the Gamepad API, for access to gamepads and controllers.", "prop": "gamepads" }, { "name": "Geolocation API", "desc": "Detects support for the Geolocation API for users to provide their location to web applications.", "prop": "geolocation" }, { "name": "Hashchange event", "desc": "Detects support for the <code>hashchange</code> event, fired when the current location fragment changes.", "prop": "hashchange" }, { "name": "Hidden Scrollbar", "desc": "Detects overlay scrollbars (when scrollbars on overflowed blocks are visible). This is found most commonly on mobile and OS X.", "prop": "hiddenscroll" }, { "name": "History API", "desc": "Detects support for the History API for manipulating the browser session history.", "prop": "history" }, { "name": "HTML Imports", "desc": "Detects support for HTML import, a feature that is used for loading in Web Components.", "prop": "htmlimports" }, { "name": "IE8 compat mode", "desc": "Detects whether or not the current browser is IE8 in compatibility mode (i.e. acting as IE7).", "prop": "ie8compat" }, { "name": "IndexedDB", "desc": "Detects support for the IndexedDB client-side storage API (final spec).", "prop": "indexeddb" }, { "name": "IndexedDB Blob", "desc": "Detects if the browser can save File/Blob objects to IndexedDB", "prop": "indexeddbblob" }, { "name": "Input attributes", "desc": "Detects support for HTML5 <code><input></code> element attributes and exposes Boolean subproperties with the results:", "prop": "input" }, { "name": "input[search] search event", "desc": "There is a custom <code>search</code> event implemented in webkit browsers when using an <code>input[search]</code> element.", "prop": "search" }, { "name": "Form input types", "desc": "Detects support for HTML5 form input types and exposes Boolean subproperties with the results:", "prop": "inputtypes" }, { "name": "Internationalization API", "desc": "Detects support for the Internationalization API which allow easy formatting of number and dates and sorting string based on a locale", "prop": "intl" }, { "name": "JSON", "desc": "Detects native support for JSON handling functions.", "prop": "json" }, { "name": "Font Ligatures", "desc": "Detects support for OpenType ligatures", "prop": "ligatures" }, { "name": "Reverse Ordered Lists", "desc": "Detects support for the <code>reversed</code> attribute on the <code><ol></code> element.", "prop": "olreversed" }, { "name": "MathML", "desc": "Detects support for MathML, for mathematic equations in web pages.", "prop": "mathml" }, { "name": "Notification", "desc": "Detects support for the Notifications API", "prop": "notification" }, { "name": "Page Visibility API", "desc": "Detects support for the Page Visibility API, which can be used to disable unnecessary actions and otherwise improve user experience.", "prop": "pagevisibility" }, { "name": "Navigation Timing API", "desc": "Detects support for the Navigation Timing API, for measuring browser and connection performance.", "prop": "performance" }, { "name": "DOM Pointer Events API", "desc": "Detects support for the DOM Pointer Events API, which provides a unified event interface for pointing input devices, as implemented in IE10+.", "prop": "pointerevents" }, { "name": "Pointer Lock API", "desc": "Detects support the pointer lock API which allows you to lock the mouse cursor to the browser window.", "prop": "pointerlock" }, { "name": "postMessage", "desc": "Detects support for the <code>window.postMessage</code> protocol for cross-document messaging.", "prop": "postmessage" }, { "name": "Proximity API", "desc": "Detects support for an API that allows users to get proximity related information from the device's proximity sensor.", "prop": "proximity" }, { "name": "QuerySelector", "desc": "Detects support for querySelector.", "prop": "queryselector" }, { "name": "Quota Storage Management API", "desc": "Detects the ability to request a specific amount of space for filesystem access", "prop": "quotamanagement" }, { "name": "requestAnimationFrame", "desc": "Detects support for the <code>window.requestAnimationFrame</code> API, for offloading animation repainting to the browser for optimized performance.", "prop": "requestanimationframe" }, { "name": "ServiceWorker API", "desc": "ServiceWorkers (formerly Navigation Controllers) are a way to persistently cache resources to built apps that work better offline.", "prop": "serviceworker" }, { "name": "SVG", "desc": "Detects support for SVG in <code><embed></code> or <code><object></code> elements.", "prop": "svg" }, { "name": "Template strings", "desc": "Template strings are string literals allowing embedded expressions.", "prop": "templatestrings" }, { "name": "Touch Events", "desc": "Indicates if the browser supports the W3C Touch Events API.This <em>does not</em> necessarily reflect a touchscreen device:See this article: <a href=\"http://www.stucox.com/blog/you-cant-detect-a-touchscreen/\">You Can't Detect A Touchscreen</a>.It's recommended to bind both mouse and touch/pointer events simultaneously – see <a href=\"http://www.html5rocks.com/en/mobile/touchandmouse/\">this HTML5 Rocks tutorial</a>.This test will also return <code>true</code> for Firefox 4 Multitouch support.", "prop": "touchevents" }, { "name": "Typed arrays", "desc": "Detects support for native binary data manipulation via Typed Arrays in JavaScript.Does not check for DataView support; use <code>Modernizr.dataview</code> for that.", "prop": "typedarrays" }, { "name": "Unicode Range", "desc": "", "prop": "unicoderange" }, { "name": "Unicode characters", "desc": "Detects if unicode characters are supported in the current document.", "prop": "unicode" }, { "name": "IE User Data API", "desc": "Detects support for IE userData for persisting data, an API similar to localStorage but supported since IE5.", "prop": "userdata" }, { "name": "Vibration API", "desc": "Detects support for the API that provides access to the vibration mechanism of the hosting device, to provide tactile feedback.", "prop": "vibrate" }, { "name": "HTML5 Video", "desc": "Detects support for the video element, as well as testing what types of content it supports.Subproperties are provided to describe support for <code>ogg</code>, <code>h264</code> and <code>webm</code> formats, e.g.:", "prop": "video" }, { "name": "VML", "desc": "Detects support for VML.", "prop": "vml" }, { "name": "Web Intents", "desc": "Detects native support for the Web Intents APIs for service discovery and inter-application communication.Chrome added support for this in v19, but <a href=\"https://lists.w3.org/Archives/Public/public-web-intents/2012Nov/0000.html\">removed it again in v24</a> because of \"a number of areas for development in both the API and specific user experience in Chrome\". No other browsers currently support it, however a <a href=\"http://webintents.org/#javascriptshim\">JavaScript shim</a> is available.", "prop": "webintents" }, { "name": "Web Animation API", "desc": "Detects support for the Web Animation API, a way to create css animations in js", "prop": "animation" }, { "name": "WebGL", "desc": "", "prop": "webgl" }, { "name": "WebSockets Support", "desc": "", "prop": "websockets" }, { "name": "XDomainRequest", "desc": "Detects support for XDomainRequest in IE9 & IE8", "prop": "xdomainrequest" }, { "name": "a[download] Attribute", "desc": "When used on an <code><a></code>, this attribute signifies that the resource it points to should be downloaded by the browser rather than navigating to it.", "prop": "adownload" }, { "name": "Audio Loop Attribute", "desc": "Detects if an audio element can automatically restart, once it has finished", "prop": "audioloop" }, { "name": "Audio Preload", "desc": "Detects if audio can be downloaded in the background before it starts playing in the <code><audio></code> element", "prop": "audiopreload" }, { "name": "Web Audio API", "desc": "Detects the older non standard webaudio API, (as opposed to the standards based AudioContext API)", "prop": "webaudio" }, { "name": "Low Battery Level", "desc": "Enable a developer to remove CPU intensive CSS/JS when battery is low", "prop": "lowbattery" }, { "name": "canvas blending support", "desc": "Detects if Photoshop style blending modes are available in canvas.", "prop": "canvasblending" }, { "name": "canvas.toDataURL type support", "desc": "", "prop": "todataurljpeg,todataurlpng,todataurlwebp" }, { "name": "canvas winding support", "desc": "Determines if winding rules, which controls if a path can go clockwise or counterclockwise", "prop": "canvaswinding" }, { "name": "getRandomValues", "desc": "Detects support for the window.crypto.getRandomValues for generate cryptographically secure random numbers", "prop": "getrandomvalues" }, { "name": "cssall", "desc": "Detects support for the <code>all</code> css property, which is a shorthand to reset all css properties (except direction and unicode-bidi) to their original value", "prop": "cssall" }, { "name": "CSS Animations", "desc": "Detects whether or not elements can be animated using CSS", "prop": "cssanimations" }, { "name": "Appearance", "desc": "Detects support for the <code>appearance</code> css property, which is used to make an element inherit the style of a standard user interface element. It can also be used to remove the default styles of an element, such as input and buttons.", "prop": "appearance" }, { "name": "Backdrop Filter", "desc": "Detects support for CSS Backdrop Filters, allowing for background blur effects like those introduced in iOS 7. Support for this was added to iOS Safari/WebKit in iOS 9.", "prop": "backdropfilter" }, { "name": "CSS Background Blend Mode", "desc": "Detects the ability for the browser to composite backgrounds using blending modes similar to ones found in Photoshop or Illustrator.", "prop": "backgroundblendmode" }, { "name": "CSS Background Clip Text", "desc": "Detects the ability to control specifies whether or not an element's background extends beyond its border in CSS", "prop": "backgroundcliptext" }, { "name": "Background Position Shorthand", "desc": "Detects if you can use the shorthand method to define multiple parts of an element's background-position simultaniously.eg <code>background-position: right 10px bottom 10px</code>", "prop": "bgpositionshorthand" }, { "name": "Background Position XY", "desc": "Detects the ability to control an element's background position using css", "prop": "bgpositionxy" }, { "name": "Background Repeat", "desc": "Detects the ability to use round and space as properties for background-repeat", "prop": "bgrepeatspace,bgrepeatround" }, { "name": "Background Size", "desc": "", "prop": "backgroundsize" }, { "name": "Background Size Cover", "desc": "", "prop": "bgsizecover" }, { "name": "Border Image", "desc": "", "prop": "borderimage" }, { "name": "Border Radius", "desc": "", "prop": "borderradius" }, { "name": "Box Shadow", "desc": "", "prop": "boxshadow" }, { "name": "Box Sizing", "desc": "", "prop": "boxsizing" }, { "name": "CSS Calc", "desc": "Method of allowing calculated values for length units. For example:", "prop": "csscalc" }, { "name": "CSS :checked pseudo-selector", "desc": "", "prop": "checked" }, { "name": "CSS Font ch Units", "desc": "", "prop": "csschunit" }, { "name": "CSS Columns", "desc": "", "prop": "csscolumns" }, { "name": "CSS Cubic Bezier Range", "desc": "", "prop": "cubicbezierrange" }, { "name": "CSS Display run-in", "desc": "", "prop": "display-runin" }, { "name": "CSS Display table", "desc": "<code>display: table</code> and <code>table-cell</code> test. (both are tested under one name <code>table-cell</code> )", "prop": "displaytable" }, { "name": "CSS text-overflow ellipsis", "desc": "", "prop": "ellipsis" }, { "name": "CSS.escape()", "desc": "Tests for <code>CSS.escape()</code> support.", "prop": "cssescape" }, { "name": "CSS Font ex Units", "desc": "", "prop": "cssexunit" }, { "name": "CSS Filters", "desc": "", "prop": "cssfilters" }, { "name": "Flexbox", "desc": "Detects support for the Flexible Box Layout model, a.k.a. Flexbox, which allows easy manipulation of layout order and sizing within a container.", "prop": "flexbox" }, { "name": "Flexbox (legacy)", "desc": "", "prop": "flexboxlegacy" }, { "name": "Flexbox (tweener)", "desc": "", "prop": "flexboxtweener" }, { "name": "Flex Line Wrapping", "desc": "Detects support for the <code>flex-wrap</code> CSS property, part of Flexbox, which isn’t present in all Flexbox implementations (notably Firefox).This featured in both the 'tweener' syntax (implemented by IE10) and the 'modern' syntax (implemented by others). This detect will return <code>true</code> for either of these implementations, as long as the <code>flex-wrap</code> property is supported. So to ensure the modern syntax is supported, use together with <code>Modernizr.flexbox</code>:", "prop": "flexwrap" }, { "name": "@font-face", "desc": "", "prop": "fontface" }, { "name": "CSS Generated Content", "desc": "", "prop": "generatedcontent" }, { "name": "CSS Gradients", "desc": "", "prop": "cssgradients" }, { "name": "hairline", "desc": "Detects support for hidpi/retina hairlines, which are CSS borders with less than 1px in width, for being physically 1px on hidpi screens.", "prop": "csshairline" }, { "name": "CSS HSLA Colors", "desc": "", "prop": "hsla" }, { "name": "CSS Hyphens", "desc": "", "prop": "csshyphens,softhyphens,softhyphensfind" }, { "name": "CSS :invalid pseudo-class", "desc": "Detects support for the ':invalid' CSS pseudo-class.", "prop": "cssinvalid" }, { "name": "CSS :last-child pseudo-selector", "desc": "", "prop": "lastchild" }, { "name": "CSS Mask", "desc": "", "prop": "cssmask" }, { "name": "CSS Media Queries", "desc": "", "prop": "mediaqueries" }, { "name": "CSS Multiple Backgrounds", "desc": "", "prop": "multiplebgs" }, { "name": "CSS :nth-child pseudo-selector", "desc": "Detects support for the ':nth-child()' CSS pseudo-selector.", "prop": "nthchild" }, { "name": "CSS Object Fit", "desc": "", "prop": "objectfit" }, { "name": "CSS Opacity", "desc": "", "prop": "opacity" }, { "name": "CSS Overflow Scrolling", "desc": "", "prop": "overflowscrolling" }, { "name": "CSS Pointer Events", "desc": "", "prop": "csspointerevents" }, { "name": "CSS position: sticky", "desc": "", "prop": "csspositionsticky" }, { "name": "CSS Generated Content Animations", "desc": "", "prop": "csspseudoanimations" }, { "name": "CSS Generated Content Transitions", "desc": "", "prop": "csspseudotransitions" }, { "name": "CSS Reflections", "desc": "", "prop": "cssreflections" }, { "name": "CSS Regions", "desc": "", "prop": "regions" }, { "name": "CSS Font rem Units", "desc": "", "prop": "cssremunit" }, { "name": "CSS UI Resize", "desc": "Test for CSS 3 UI \"resize\" property", "prop": "cssresize" }, { "name": "CSS rgba", "desc": "", "prop": "rgba" }, { "name": "CSS Stylable Scrollbars", "desc": "", "prop": "cssscrollbar" }, { "name": "Scroll Snap Points", "desc": "Detects support for CSS Snap Points", "prop": "scrollsnappoints" }, { "name": "CSS Shapes", "desc": "", "prop": "shapes" }, { "name": "CSS general sibling selector", "desc": "", "prop": "siblinggeneral" }, { "name": "CSS Subpixel Fonts", "desc": "", "prop": "subpixelfont" }, { "name": "CSS Supports", "desc": "", "prop": "supports" }, { "name": "CSS :target pseudo-class", "desc": "Detects support for the ':target' CSS pseudo-class.", "prop": "target" }, { "name": "CSS text-align-last", "desc": "", "prop": "textalignlast" }, { "name": "CSS textshadow", "desc": "", "prop": "textshadow" }, { "name": "CSS Transforms", "desc": "", "prop": "csstransforms" }, { "name": "CSS Transforms 3D", "desc": "", "prop": "csstransforms3d" }, { "name": "CSS Transform Style preserve-3d", "desc": "Detects support for <code>transform-style: preserve-3d</code>, for getting a proper 3D perspective on elements.", "prop": "preserve3d" }, { "name": "CSS Transitions", "desc": "", "prop": "csstransitions" }, { "name": "CSS user-select", "desc": "", "prop": "userselect" }, { "name": "CSS :valid pseudo-class", "desc": "Detects support for the ':valid' CSS pseudo-class.", "prop": "cssvalid" }, { "name": "CSS vh unit", "desc": "", "prop": "cssvhunit" }, { "name": "CSS vmax unit", "desc": "", "prop": "cssvmaxunit" }, { "name": "CSS vmin unit", "desc": "", "prop": "cssvminunit" }, { "name": "CSS vw unit", "desc": "", "prop": "cssvwunit" }, { "name": "will-change", "desc": "Detects support for the <code>will-change</code> css property, which formally signals to the browser that an element will be animating.", "prop": "willchange" }, { "name": "CSS wrap-flow", "desc": "", "prop": "wrapflow" }, { "name": "classList", "desc": "", "prop": "classlist" }, { "name": "createElement with Attributes", "desc": "", "prop": "createelementattrs,createelement-attrs" }, { "name": "dataset API", "desc": "", "prop": "dataset" }, { "name": "Document Fragment", "desc": "Append multiple elements to the DOM within a single insertion.", "prop": "documentfragment" }, { "name": "[hidden] Attribute", "desc": "Does the browser support the HTML5 [hidden] attribute?", "prop": "hidden" }, { "name": "microdata", "desc": "", "prop": "microdata" }, { "name": "DOM4 MutationObserver", "desc": "Determines if DOM4 MutationObserver support is available.", "prop": "mutationobserver" }, { "name": "bdi Element", "desc": "Detect support for the bdi element, a way to have text that is isolated from its possibly bidirectional surroundings", "prop": "bdi" }, { "name": "datalist Element", "desc": "", "prop": "datalistelem" }, { "name": "details Element", "desc": "", "prop": "details" }, { "name": "output Element", "desc": "", "prop": "outputelem" }, { "name": "picture Element", "desc": "", "prop": "picture" }, { "name": "progress Element", "desc": "", "prop": "progressbar,meter" }, { "name": "ruby, rp, rt Elements", "desc": "", "prop": "ruby" }, { "name": "Template Tag", "desc": "", "prop": "template" }, { "name": "time Element", "desc": "", "prop": "time" }, { "name": "Track element and Timed Text Track", "desc": "", "prop": "texttrackapi,track" }, { "name": "Unknown Elements", "desc": "Does the browser support HTML with non-standard / new elements?", "prop": "unknownelements" }, { "name": "ES5 Array", "desc": "Check if browser implements ECMAScript 5 Array per specification.", "prop": "es5array" }, { "name": "ES5 Date", "desc": "Check if browser implements ECMAScript 5 Date per specification.", "prop": "es5date" }, { "name": "ES5 Function", "desc": "Check if browser implements ECMAScript 5 Function per specification.", "prop": "es5function" }, { "name": "ES5 Object", "desc": "Check if browser implements ECMAScript 5 Object per specification.", "prop": "es5object" }, { "name": "ES5", "desc": "Check if browser implements everything as specified in ECMAScript 5.", "prop": "es5" }, { "name": "ES5 Strict Mode", "desc": "Check if browser implements ECMAScript 5 Object strict mode.", "prop": "strictmode" }, { "name": "ES5 String", "desc": "Check if browser implements ECMAScript 5 String per specification.", "prop": "es5string" }, { "name": "ES5 Syntax", "desc": "Check if browser accepts ECMAScript 5 syntax.", "prop": "es5syntax" }, { "name": "ES5 Immutable Undefined", "desc": "Check if browser prevents assignment to global <code>undefined</code> per ECMAScript 5.", "prop": "es5undefined" }, { "name": "ES6 Array", "desc": "Check if browser implements ECMAScript 6 Array per specification.", "prop": "es6array" }, { "name": "ES6 Collections", "desc": "Check if browser implements ECMAScript 6 Map, Set, WeakMap and WeakSet", "prop": "es6collections" }, { "name": "ES5 String.prototype.contains", "desc": "Check if browser implements ECMAScript 6 <code>String.prototype.contains</code> per specification.", "prop": "contains" }, { "name": "ES6 Generators", "desc": "Check if browser implements ECMAScript 6 Generators per specification.", "prop": "generators" }, { "name": "ES6 Math", "desc": "Check if browser implements ECMAScript 6 Math per specification.", "prop": "es6math" }, { "name": "ES6 Number", "desc": "Check if browser implements ECMAScript 6 Number per specification.", "prop": "es6number" }, { "name": "ES6 Object", "desc": "Check if browser implements ECMAScript 6 Object per specification.", "prop": "es6object" }, { "name": "ES6 Promises", "desc": "Check if browser implements ECMAScript 6 Promises per specification.", "prop": "promises" }, { "name": "ES6 String", "desc": "Check if browser implements ECMAScript 6 String per specification.", "prop": "es6string" }, { "name": "Orientation and Motion Events", "desc": "Part of Device Access aspect of HTML5, same category as geolocation.<code>devicemotion</code> tests for Device Motion Event support, returns boolean value true/false.<code>deviceorientation</code> tests for Device Orientation Event support, returns boolean value true/false", "prop": "devicemotion,deviceorientation" }, { "name": "onInput Event", "desc": "<code>oninput</code> tests if the browser is able to detect the input event", "prop": "oninput" }, { "name": "File API", "desc": "<code>filereader</code> tests for the File API specificationTests for objects specific to the File API W3C specification without being redundant (don't bother testing for Blob since it is assumed to be the File object's prototype.)", "prop": "filereader" }, { "name": "Filesystem API", "desc": "", "prop": "filesystem" }, { "name": "input[capture] Attribute", "desc": "When used on an <code><input></code>, this attribute signifies that the resource it takes should be generated via device's camera, camcorder, sound recorder.", "prop": "capture" }, { "name": "input[file] Attribute", "desc": "Detects whether input type=\"file\" is available on the platformE.g. iOS < 6 and some android version don't support this", "prop": "fileinput" }, { "name": "input[directory] Attribute", "desc": "When used on an <code><input type=\"file\"></code>, the <code>directory</code> attribute instructs the user agent to present a directory selection dialog instead of the usual file selection dialog.", "prop": "directory" }, { "name": "input[form] Attribute", "desc": "Detects whether input form=\"form_id\" is available on the platform E.g. IE 10 (and below), don't support this", "prop": "formattribute" }, { "name": "input[type=\"number\"] Localization", "desc": "Detects whether input type=\"number\" is capable of receiving and displaying localized numbers, e.g. with comma separator.", "prop": "localizednumber" }, { "name": "placeholder attribute", "desc": "Tests for placeholder attribute in inputs and textareas", "prop": "placeholder" }, { "name": "form#requestAutocomplete()", "desc": "When used with input[autocomplete] to annotate a form, form.requestAutocomplete() shows a dialog in Chrome that speeds up checkout flows (payments specific for now).", "prop": "requestautocomplete" }, { "name": "Form Validation", "desc": "This implementation only tests support for interactive form validation. To check validation for a specific type or a specific other constraint, the test can be combined:", "prop": "formvalidation" }, { "name": "iframe[sandbox] Attribute", "desc": "Test for <code>sandbox</code> attribute in iframes.", "prop": "sandbox" }, { "name": "iframe[seamless] Attribute", "desc": "Test for <code>seamless</code> attribute in iframes.", "prop": "seamless" }, { "name": "iframe[srcdoc] Attribute", "desc": "Test for <code>srcdoc</code> attribute in iframes.", "prop": "srcdoc" }, { "name": "Animated PNG", "desc": "Test for animated png support.", "prop": "apng" }, { "name": "Image crossOrigin", "desc": "Detects support for the crossOrigin attribute on images, which allow for cross domain images inside of a canvas without tainting it", "prop": "imgcrossorigin" }, { "name": "JPEG 2000", "desc": "Test for JPEG 2000 support", "prop": "jpeg2000" }, { "name": "JPEG XR (extended range)", "desc": "Test for JPEG XR support", "prop": "jpegxr" }, { "name": "sizes attribute", "desc": "Test for the <code>sizes</code> attribute on images", "prop": "sizes" }, { "name": "srcset attribute", "desc": "Test for the srcset attribute of images", "prop": "srcset" }, { "name": "Webp Alpha", "desc": "Tests for transparent webp support.", "prop": "webpalpha" }, { "name": "Webp Animation", "desc": "Tests for animated webp support.", "prop": "webpanimation" }, { "name": "Webp Lossless", "desc": "Tests for non-alpha lossless webp support.", "prop": "webplossless,webp-lossless" }, { "name": "Webp", "desc": "Tests for lossy, non-alpha webp support.Tests for all forms of webp support (lossless, lossy, alpha, and animated)..Modernizr.webp // Basic support (lossy) Modernizr.webp.lossless // Lossless Modernizr.webp.alpha // Alpha (both lossy and lossless) Modernizr.webp.animation // Animated WebP", "prop": "webp" }, { "name": "input formaction", "desc": "Detect support for the formaction attribute on form inputs", "prop": "inputformaction" }, { "name": "input formenctype", "desc": "Detect support for the formenctype attribute on form inputs, which overrides the form enctype attribute", "prop": "inputformenctype" }, { "name": "input formmethod", "desc": "Detect support for the formmethod attribute on form inputs", "prop": "inputformmethod" }, { "name": "input formtarget", "desc": "Detect support for the formtarget attribute on form inputs, which overrides the form target attribute", "prop": "inputformtarget" }, { "name": "Beacon API", "desc": "Detects support for an API that allows for asynchronous transfer of small HTTP data from the client to a server.", "prop": "beacon" }, { "name": "Low Bandwidth Connection", "desc": "Tests for determining low-bandwidth via <code>navigator.connection</code>There are two iterations of the <code>navigator.connection</code> interface.The first is present in Android 2.2+ and only in the Browser (not WebView)The second is specced at <a href=\"http://dev.w3.org/2009/dap/netinfo/\">http://dev.w3.org/2009/dap/netinfo/</a> and perhaps landing in WebKitUnknown devices are assumed as fastFor more rigorous network testing, consider boomerang.js: <a href=\"https://github.com/bluesmoon/boomerang/\">https://github.com/bluesmoon/boomerang/</a>", "prop": "lowbandwidth" }, { "name": "Server Sent Events", "desc": "Tests for server sent events aka eventsource.", "prop": "eventsource" }, { "name": "Fetch API", "desc": "Detects support for the fetch API, a modern replacement for XMLHttpRequest.", "prop": "fetch" }, { "name": "XHR responseType='arraybuffer'", "desc": "Tests for XMLHttpRequest xhr.responseType='arraybuffer'.", "prop": "xhrresponsetypearraybuffer" }, { "name": "XHR responseType='blob'", "desc": "Tests for XMLHttpRequest xhr.responseType='blob'.", "prop": "xhrresponsetypeblob" }, { "name": "XHR responseType='document'", "desc": "Tests for XMLHttpRequest xhr.responseType='document'.", "prop": "xhrresponsetypedocument" }, { "name": "XHR responseType='json'", "desc": "Tests for XMLHttpRequest xhr.responseType='json'.", "prop": "xhrresponsetypejson" }, { "name": "XHR responseType='text'", "desc": "Tests for XMLHttpRequest xhr.responseType='text'.", "prop": "xhrresponsetypetext" }, { "name": "XHR responseType", "desc": "Tests for XMLHttpRequest xhr.responseType.", "prop": "xhrresponsetype" }, { "name": "XML HTTP Request Level 2 XHR2", "desc": "Tests for XHR2.", "prop": "xhr2" }, { "name": "script[async]", "desc": "Detects support for the <code>async</code> attribute on the <code><script></code> element.", "prop": "scriptasync" }, { "name": "script[defer]", "desc": "Detects support for the <code>defer</code> attribute on the <code><script></code> element.", "prop": "scriptdefer" }, { "name": "Speech Recognition API", "desc": "", "prop": "speechrecognition" }, { "name": "Speech Synthesis API", "desc": "", "prop": "speechsynthesis" }, { "name": "Local Storage", "desc": "", "prop": "localstorage" }, { "name": "Session Storage", "desc": "", "prop": "sessionstorage" }, { "name": "Web SQL Database", "desc": "", "prop": "websqldatabase" }, { "name": "style[scoped]", "desc": "Support for the <code>scoped</code> attribute of the <code><style></code> element.", "prop": "stylescoped" }, { "name": "SVG as an <img> tag source", "desc": "", "prop": "svgasimg" }, { "name": "SVG clip paths", "desc": "Detects support for clip paths in SVG (only, not on HTML content).See <a href=\"https://github.com/Modernizr/Modernizr/issues/213\">this discussion</a> regarding applying SVG clip paths to HTML content.", "prop": "svgclippaths" }, { "name": "SVG filters", "desc": "", "prop": "svgfilters" }, { "name": "SVG foreignObject", "desc": "Detects support for foreignObject tag in SVG.", "prop": "svgforeignobject" }, { "name": "Inline SVG", "desc": "Detects support for inline SVG in HTML (not within XHTML).", "prop": "inlinesvg" }, { "name": "SVG SMIL animation", "desc": "", "prop": "smil" }, { "name": "textarea maxlength", "desc": "Detect support for the maxlength attribute of a textarea element", "prop": "textareamaxlength" }, { "name": "Blob URLs", "desc": "Detects support for creating Blob URLs", "prop": "bloburls" }, { "name": "Data URI", "desc": "Detects support for data URIs. Provides a subproperty to report support for data URIs over 32kb in size:", "prop": "datauri" }, { "name": "URL parser", "desc": "Check if browser implements the URL constructor for parsing URLs.", "prop": "urlparser" }, { "name": "Video Autoplay", "desc": "Checks for support of the autoplay attribute of the video element.", "prop": "videoautoplay" }, { "name": "Video Loop Attribute", "desc": "", "prop": "videoloop" }, { "name": "Video Preload Attribute", "desc": "", "prop": "videopreload" }, { "name": "WebGL Extensions", "desc": "Detects support for OpenGL extensions in WebGL. It's <code>true</code> if the <a href=\"https://developer.mozilla.org/en-US/docs/Web/WebGL/Using_Extensions\">WebGL extensions API</a> is supported, then exposes the supported extensions as subproperties, e.g.:", "prop": "webglextensions" }, { "name": "RTC Data Channel", "desc": "Detect for the RTCDataChannel API that allows for transfer data directly from one peer to another", "prop": "datachannel" }, { "name": "getUserMedia", "desc": "", "prop": "getusermedia" }, { "name": "RTC Peer Connection", "desc": "", "prop": "peerconnection" }, { "name": "Binary WebSockets", "desc": "", "prop": "websocketsbinary" }, { "name": "Base 64 encoding/decoding", "desc": "Detects support for WindowBase64 API (window.atob && window.btoa).", "prop": "atobbtoa" }, { "name": "Framed window", "desc": "Tests if page is iframed.", "prop": "framed" }, { "name": "matchMedia", "desc": "Detects support for matchMedia.", "prop": "matchmedia" }, { "name": "Workers from Blob URIs", "desc": "Detects support for creating Web Workers from Blob URIs.", "prop": "blobworkers" }, { "name": "Workers from Data URIs", "desc": "Detects support for creating Web Workers from Data URIs.", "prop": "dataworkers" }, { "name": "Shared Workers", "desc": "Detects support for the <code>SharedWorker</code> API from the Web Workers spec.", "prop": "sharedworkers" }, { "name": "Transferables Objects", "desc": "Detects whether web workers can use <code>transferables</code> objects.", "prop": "transferables" }, { "name": "Web Workers", "desc": "Detects support for the basic <code>Worker</code> API from the Web Workers spec. Web Workers provide a simple means for web content to run scripts in background threads.", "prop": "webworkers" } ];
DF.features.sort( function ( f1, f2 ) {
return f1.name.localeCompare( f2.name );
} );
}( window.DF ) );
// "class": "js",
// "class": "htmlimports",
// "class": "sizes",
// "class": "proximity",
// "class": "transferables",
// "class": "adownload",
// "class": "ambientlight",
// "class": "applicationcache",
// "class": "audio",
// "class": "audioloop",
// "class": "webaudio",
// "class": "batteryapi",
// "class": "battery-api",
// "class": "lowbattery",
// "class": "blobconstructor",
// "class": "blob-constructor",
// "class": "canvas",
// "class": "canvasblending",
// "class": "todataurljpeg",
// "class": "todataurlpng",
// "class": "todataurlwebp",
// "class": "canvaswinding",
// "class": "canvastext",
// "class": "contenteditable",
// "class": "contextmenu",
// "class": "cookies",
// "class": "cors",
// "class": "crypto",
// "class": "getrandomvalues",
// "class": "cssall",
// "class": "cssanimations",
// "class": "appearance",
// "class": "backdropfilter",
// "class": "backgroundblendmode",
// "class": "backgroundcliptext",
// "class": "bgpositionshorthand",
// "class": "bgpositionxy",
// "class": "bgrepeatround",
// "class": "bgrepeatspace",
// "class": "backgroundsize",
// "class": "bgsizecover",
// "class": "borderimage",
// "class": "borderradius",
// "class": "boxshadow",
// "class": "boxsizing",
// "class": "csscalc",
// "class": "checked",
// "class": "csschunit",
// "class": "csscolumns",
// "class": "csscolumns-width",
// "class": "csscolumns-span",
// "class": "csscolumns-fill",
// "class": "csscolumns-gap",
// "class": "csscolumns-rule",
// "class": "csscolumns-rulecolor",
// "class": "csscolumns-rulestyle",
// "class": "csscolumns-rulewidth",
// "class": "csscolumns-breakbefore",
// "class": "csscolumns-breakafter",
// "class": "csscolumns-breakinside",
// "class": "cubicbezierrange",
// "class": "displayrunin",
// "class": "display-runin",
// "class": "displaytable",
// "class": "display-table",
// "class": "ellipsis",
// "class": "cssescape",
// "class": "cssexunit",
// "class": "supports",
// "class": "cssfilters",
// "class": "flexbox",
// "class": "flexboxlegacy",
// "class": "flexboxtweener",
// "class": "flexwrap",
// "class": "fontface",
// "class": "generatedcontent",
// "class": "cssgradients",
// "class": "hairline",
// "class": "hsla",
// "class": "cssinvalid",
// "class": "lastchild",
// "class": "cssmask",
// "class": "mediaqueries",
// "class": "multiplebgs",
// "class": "nthchild",
// "class": "objectfit",
// "class": "object-fit",
// "class": "opacity",
// "class": "overflowscrolling",
// "class": "csspointerevents",
// "class": "csspositionsticky",
// "class": "csspseudoanimations",
// "class": "csstransitions",
// "class": "csspseudotransitions",
// "class": "cssreflections",
// "class": "regions",
// "class": "cssremunit",
// "class": "cssresize",
// "class": "rgba",
// "class": "cssscrollbar",
// "class": "shapes",
// "class": "siblinggeneral",
// "class": "subpixelfont",
// "class": "target",
// "class": "textalignlast",
// "class": "textshadow",
// "class": "csstransforms",
// "class": "csstransforms3d",
// "class": "preserve3d",
// "class": "userselect",
// "class": "cssvalid",
// "class": "cssvhunit",
// "class": "cssvmaxunit",
// "class": "cssvminunit",
// "class": "cssvwunit",
// "class": "willchange",
// "class": "wrapflow",
// "class": "customprotocolhandler",
// "class": "customevent",
// "class": "dart",
// "class": "dataview",
// "class": "classlist",
// "class": "createelementattrs",
// "class": "createelement-attrs",
// "class": "dataset",
// "class": "documentfragment",
// "class": "hidden",
// "class": "microdata",
// "class": "mutationobserver",
// "class": "datalistelem",
// "class": "details",
// "class": "outputelem",
// "class": "picture",
// "class": "progressbar",
// "class": "meter",
// "class": "ruby",
// "class": "template",
// "class": "time",
// "class": "texttrackapi",
// "class": "track",
// "class": "unknownelements",
// "class": "emoji",
// "class": "es5array",
// "class": "es5date",
// "class": "es5function",
// "class": "es5object",
// "class": "strictmode",
// "class": "es5string",
// "class": "json",
// "class": "es5syntax",
// "class": "es5undefined",
// "class": "es5",
// "class": "es6array",
// "class": "es6collections",
// "class": "contains",
// "class": "generators",
// "class": "es6math",
// "class": "es6number",
// "class": "es6object",
// "class": "promises",
// "class": "es6string",
// "class": "devicemotion",
// "class": "deviceorientation",
// "class": "oninput",
// "class": "eventlistener",
// "class": "filereader",
// "class": "filesystem",
// "class": "capture",
// "class": "fileinput",
// "class": "fileinputdirectory",
// "class": "formattribute",
// "class": "formvalidation",
// "class": "localizednumber",
// "class": "placeholder",
// "class": "requestautocomplete",
// "class": "fullscreen",
// "class": "gamepads",
// "class": "geolocation",
// "class": "hashchange",
// "class": "hiddenscroll",
// "class": "history",
// "class": "ie8compat",
// "class": "sandbox",
// "class": "seamless",
// "class": "srcdoc",
// "class": "srcset",
// "class": "indexeddb",
// "class": "indexeddb-deletedatabase",
// "class": "inputformaction",
// "class": "input-formaction",
// "class": "inputformenctype",
// "class": "input-formenctype",
// "class": "inputformmethod",
// "class": "inputformtarget",
// "class": "input-formtarget",
// "class": "inputsearchevent",
// "class": "intl",
// "class": "olreversed",
// "class": "mathml",
// "class": "beacon",
// "class": "lowbandwidth",
// "class": "eventsource",
// "class": "fetch",
// "class": "xhrresponsetype",
// "class": "xhrresponsetypearraybuffer",
// "class": "xhrresponsetypeblob",
// "class": "xhrresponsetypedocument",
// "class": "xhrresponsetypejson",
// "class": "xhrresponsetypetext",
// "class": "xhr2",
// "class": "notification",
// "class": "pagevisibility",
// "class": "performance",
// "class": "pointerevents",
// "class": "pointerlock",
// "class": "postmessage",
// "class": "queryselector",
// "class": "quotamanagement",
// "class": "requestanimationframe",
// "class": "raf",
// "class": "scriptasync",
// "class": "scriptdefer",
// "class": "serviceworker",
// "class": "speechrecognition",
// "class": "speechsynthesis",
// "class": "localstorage",
// "class": "sessionstorage",
// "class": "websqldatabase",
// "class": "stylescoped",
// "class": "svg",
// "class": "svgasimg",
// "class": "svgclippaths",
// "class": "svgfilters",
// "class": "svgforeignobject",
// "class": "inlinesvg",
// "class": "smil",
// "class": "templatestrings",
// "class": "scrollsnappoints",
// "class": "bdi",
// "class": "imgcrossorigin",
// "class": "ligatures",
// "class": "textareamaxlength",
// "class": "touchevents",
// "class": "typedarrays",
// "class": "unicode",
// "class": "unicoderange",
// "class": "bloburls",
// "class": "urlparser",
// "class": "userdata",
// "class": "vibrate",
// "class": "video",
// "class": "videoloop",
// "class": "videopreload",
// "class": "vml",
// "class": "webintents",
// "class": "webanimations",
// "class": "webgl",
// "class": "peerconnection",
// "class": "datachannel",
// "class": "getusermedia",
// "class": "websockets",
// "class": "websocketsbinary",
// "class": "framed",
// "class": "sharedworkers",
// "class": "webworkers",
// "class": "xdomainrequest",
// "class": "exiforientation",
// "class": "apng",
// "class": "webp",
// "class": "webpalpha",
// "class": "webpanimation",
// "class": "webplossless",
// "class": "flash",
// "class": "dataworkers",
// "class": "webp-alpha",
// "class": "webp-animation",
// "class": "webp-lossless",
// "class": "datauri",
// "class": "jpeg2000",
// "class": "jpegxr",
// "class": "indexeddbblob",
// "class": "audiopreload",
// "class": "videoautoplay",
// "class": "csshyphens",
// "class": "softhyphens",
// "class": "softhyphensfind",
// "class": "blobworkers"