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
+52
View File
@@ -0,0 +1,52 @@
/*global define*/
define(['lodash', 'metadata'], function(_, metadata) {
function getDetectObjByAmdPath(amdPath) {
return _.find(metadata, function(detect) {
return detect.amdPath === amdPath || detect.amdPath === 'test/' + amdPath;
});
}
return function generateBuildQuery(config) {
// Format:
// ?-<prop1>-<prop2>-…-<propN>-<option1>-<option2>-…<optionN>[-dontmin][-cssclassprefix:<prefix>]
// where prop1…N and option1…N are sorted alphabetically (for consistency)
var dontmin = !config.minify;
// Config uses amdPaths, but build query uses property names
var props = _.chain(config['feature-detects'])
.map(function(amdPath) {
var detect = getDetectObjByAmdPath(amdPath);
var property = detect && detect.property;
if (property) {
property = _.isArray(property) ?
property.join('_').replace('-', '_') :
property.replace('-', '_');
return property;
}
})
.filter()
.value();
// Config uses amdPaths, but the option's just use their names.
// A few of the values have to be massaged in order to match
// the `value`
var opts = _.map(config.options, function(opt) {
if (opt.indexOf('html5') === 0) {
opt = opt.replace('html5', '');
}
return opt.toLowerCase();
});
var sortedProps = props.sort();
var sortedOpts = opts.sort();
// Options are AMD paths in the config, but need to be converted to
var buildQuery = '?-' + sortedProps.concat(sortedOpts).join('-') +
(dontmin ? '-dontmin' : '') +
((config.classPrefix) ?
'-cssclassprefix:' + config.classPrefix : '');
return buildQuery;
};
});
+166
View File
@@ -0,0 +1,166 @@
// this file configures require.js based on environment
'use strict';
var inBrowser = typeof define === 'function' && typeof define.amd === 'object';
var _extend = function(a, b) {
for (var prop in b) {
var supplied = b[prop];
if (Object.prototype.toString.call(supplied) === '[object Object]') {
a[prop] = a[prop] || {};
_extend(a[prop], supplied);
} else {
a[prop] = b[prop];
}
}
};
var baseRequireConfig = {
optimize: 'none',
generateSourceMaps: false,
optimizeCss: 'none',
useStrict: true,
include: ['modernizr-init'],
fileExclusionRegExp: /^(.git|node_modules|modulizr|media|test)$/,
wrap: {
start: '\n;(function(window, document, undefined){',
end: '})(window, document);'
},
onBuildWrite: function(id, path, contents) {
if (this.optimize === 'uglify') {
// strip out documentation comments
contents = contents.replace(/\/\*\![\s\S]*\!\*\//m, '');
}
if ((/define\(.*?\{/).test(contents)) {
// remove AMD ceremony for use without require.js or almond.js
contents = contents.replace(/define\(.*?\{/, '');
contents = contents.replace(/\}\);\s*?$/, '');
if (!contents.match(/Modernizr\.add(Async)?Test\(/)) {
// remove last return statement and trailing })
contents = contents.replace(/return.*[^return]*$/, '');
}
} else if ((/require\([^\{]*?\{/).test(contents)) {
contents = contents.replace(/require[^\{]+\{/, '');
contents = contents.replace(/\}\);\s*$/, '');
}
contents = contents.replace(/return addTest;/, '');
return contents;
}
};
function build(generate, generateBanner, pkg) {
return function build(config, cb) {
var requireConfig = {};
var banner;
config = config || {};
cb = cb || function noop() {};
_extend(requireConfig, baseRequireConfig);
requireConfig.rawText = {
'modernizr-init': generate(config)
};
if (config.minify) {
banner = generateBanner('compact', config);
requireConfig.optimize = 'uglify';
requireConfig.uglify = {
mangle: {
except: ['Modernizr']
},
beautify: {
ascii_only: true
}
};
} else {
banner = generateBanner('full', config);
requireConfig.optimize = 'none';
}
if(config.scriptGlobalName) {
requireConfig.wrap.end = '})(' + config.scriptGlobalName + ', document);';
}
requireConfig.out = function(output) {
output = banner + output;
// Remove `define('modernizr-init' ...)` and `define('modernizr-build' ...)`
output = output.replace(/(,\s*)?define\("modernizr-(init|build)",\s*function\(\)\{\};?\)/g, '');
output = output.replace(/__VERSION__/g, pkg.version);
// Hack the prefix into place. Anything is way too big for something so small.
if (config && config.classPrefix) {
output = output.replace(/(classPrefix'?:\s?)['"]{2}(,)/, '$1\'' + config.classPrefix.replace(/'/g, '\\\'') + '\'$2');
}
['enableClasses', 'enableJSClass', 'usePrefixes'].forEach(function(configName) {
if (config && typeof config[configName] === 'boolean') {
output = output.replace(new RegExp('(' + configName + '\\\'?\\s?:\\s?)(true|false)([,\\n])'), '$1' + Boolean(config[configName]) + '$3');
}
});
cb(output);
};
requirejs.optimize(requireConfig);
};
}
if (inBrowser) {
var suppliedConfig = self._modernizrConfig;
var metadataUrl = 'i/js/metadata.json';
var packageUrl = 'i/js/modernizr-git/package.json';
baseRequireConfig.baseUrl = '/i/js/modernizr-git/src';
baseRequireConfig.paths = {
text: '/i/js/requirejs-plugins/lib/text',
lib: '/i/js/modernizr-git/lib',
json: '/i/js/requirejs-plugins/src/json',
lodash: '/i/js/lodash',
test: '/i/js/modernizr-git/feature-detects'
};
if (suppliedConfig) {
metadataUrl = suppliedConfig.metadataUrl || metadataUrl;
packageUrl = suppliedConfig.packageUrl || packageUrl;
_extend(baseRequireConfig, suppliedConfig);
}
if (self._modernizrMetadata) {
requirejs.define('metadata', [], function() {return self._modernizrMetadata;});
} else {
requirejs.define('metadata', ['json!' + metadataUrl], function(pkg) {return pkg;});
}
requirejs.define('package', ['json!' + packageUrl], function(pkg) {return pkg;});
} else {
var requirejs = require('requirejs');
var metadata = require('./metadata')();
var pkg = require('../package.json');
requirejs.define('metadata', [], function() {return metadata;});
requirejs.define('package', function() {return pkg;});
baseRequireConfig.baseUrl = __dirname + '/../src';
baseRequireConfig.paths = {
lodash: __dirname + '/../node_modules/lodash/lodash',
test: __dirname + '/../feature-detects',
lib: __dirname
};
}
requirejs.config(baseRequireConfig);
if (inBrowser) {
define('build', ['generate', 'lib/generate-banner', 'package'], build);
} else {
var generateBanner = requirejs(__dirname + '/generate-banner.js');
var generate = requirejs('generate');
var pkg = requirejs('package');
var _build = build;
module.exports = function build() {
return _build(generate, generateBanner, pkg).apply(undefined, arguments);
};
}
+7
View File
@@ -0,0 +1,7 @@
'use strict';
module.exports = {
build: require('./build'),
metadata: require('./metadata'),
options: require('./options')
};
+308
View File
@@ -0,0 +1,308 @@
{
"classPrefix": "",
"enableClasses": true,
"enableJSClass": true,
"scriptGlobalName": "window",
"usePrefixes": true,
"minify": false,
"options": [
"addTest",
"atRule",
"domPrefixes",
"hasEvent",
"html5shiv",
"html5printshiv",
"load",
"mq",
"prefixed",
"prefixes",
"prefixedCSS",
"setClasses",
"testAllProps",
"testProp",
"testStyles"
],
"feature-detects": [
"a/download",
"ambientlight",
"applicationcache",
"audio",
"audio/autoplay",
"audio/loop",
"audio/preload",
"audio/webaudio",
"battery",
"battery/lowbattery",
"blob",
"canvas",
"canvas/blending",
"canvas/todataurl",
"canvas/winding",
"canvastext",
"contenteditable",
"contextmenu",
"cookies",
"cors",
"crypto",
"crypto/getrandomvalues",
"css/all",
"css/animations",
"css/appearance",
"css/backdropfilter",
"css/backgroundblendmode",
"css/backgroundcliptext",
"css/backgroundposition-shorthand",
"css/backgroundposition-xy",
"css/backgroundrepeat",
"css/backgroundsize",
"css/backgroundsizecover",
"css/borderimage",
"css/borderradius",
"css/boxdecorationbreak",
"css/boxshadow",
"css/boxsizing",
"css/calc",
"css/checked",
"css/chunit",
"css/columns",
"css/cssgrid",
"css/cubicbezierrange",
"css/customproperties",
"css/displayrunin",
"css/displaytable",
"css/ellipsis",
"css/escape",
"css/exunit",
"css/filters",
"css/flexbox",
"css/flexboxlegacy",
"css/flexboxtweener",
"css/flexwrap",
"css/focuswithin",
"css/fontdisplay",
"css/fontface",
"css/generatedcontent",
"css/gradients",
"css/hairline",
"css/hsla",
"css/hyphens",
"css/invalid",
"css/lastchild",
"css/mask",
"css/mediaqueries",
"css/multiplebgs",
"css/nthchild",
"css/objectfit",
"css/opacity",
"css/overflow-scrolling",
"css/pointerevents",
"css/positionsticky",
"css/pseudoanimations",
"css/pseudotransitions",
"css/reflections",
"css/regions",
"css/remunit",
"css/resize",
"css/rgba",
"css/scrollbars",
"css/scrollsnappoints",
"css/shapes",
"css/siblinggeneral",
"css/subpixelfont",
"css/supports",
"css/target",
"css/textalignlast",
"css/textdecoration",
"css/textshadow",
"css/transforms",
"css/transforms3d",
"css/transformslevel2",
"css/transformstylepreserve3d",
"css/transitions",
"css/userselect",
"css/valid",
"css/variablefonts",
"css/vhunit",
"css/vmaxunit",
"css/vminunit",
"css/vwunit",
"css/will-change",
"css/wrapflow",
"custom-elements",
"custom-protocol-handler",
"customevent",
"dart",
"dataview-api",
"dom/classlist",
"dom/createElement-attrs",
"dom/dataset",
"dom/documentfragment",
"dom/hidden",
"dom/intersection-observer",
"dom/microdata",
"dom/mutationObserver",
"dom/passiveeventlisteners",
"elem/bdi",
"elem/datalist",
"elem/details",
"elem/output",
"elem/picture",
"elem/progress-meter",
"elem/ruby",
"elem/template",
"elem/time",
"elem/track",
"elem/unknown",
"emoji",
"es5/array",
"es5/date",
"es5/function",
"es5/object",
"es5/specification",
"es5/strictmode",
"es5/string",
"es5/syntax",
"es5/undefined",
"es6/array",
"es6/arrow",
"es6/collections",
"es6/contains",
"es6/generators",
"es6/math",
"es6/number",
"es6/object",
"es6/promises",
"es6/string",
"event/deviceorientation-motion",
"event/oninput",
"eventlistener",
"exif-orientation",
"file/api",
"file/filesystem",
"flash",
"forcetouch",
"forms/capture",
"forms/fileinput",
"forms/fileinputdirectory",
"forms/formattribute",
"forms/inputnumber-l10n",
"forms/placeholder",
"forms/requestautocomplete",
"forms/validation",
"fullscreen-api",
"gamepad",
"geolocation",
"hashchange",
"hiddenscroll",
"history",
"htmlimports",
"ie8compat",
"iframe/sandbox",
"iframe/seamless",
"iframe/srcdoc",
"img/apng",
"img/crossorigin",
"img/jpeg2000",
"img/jpegxr",
"img/sizes",
"img/srcset",
"img/webp",
"img/webp-alpha",
"img/webp-animation",
"img/webp-lossless",
"indexeddb",
"indexeddbblob",
"input",
"input/formaction",
"input/formenctype",
"input/formmethod",
"input/formnovalidate",
"input/formtarget",
"inputsearchevent",
"inputtypes",
"intl",
"json",
"ligatures",
"lists-reversed",
"mathml",
"mediaquery/hovermq",
"mediaquery/pointermq",
"media-source-extension-api",
"messagechannel",
"network/beacon",
"network/connection",
"network/connection-effectivetype",
"network/eventsource",
"network/fetch",
"network/xhr2",
"network/xhr-responsetype",
"network/xhr-responsetype-arraybuffer",
"network/xhr-responsetype-blob",
"network/xhr-responsetype-document",
"network/xhr-responsetype-json",
"network/xhr-responsetype-text",
"notification",
"pagevisibility-api",
"performance",
"pointerevents",
"pointerlock-api",
"postmessage",
"proximity",
"queryselector",
"quota-management-api",
"requestanimationframe",
"script/async",
"script/defer",
"serviceworker",
"speech/speech-recognition",
"speech/speech-synthesis",
"storage/localstorage",
"storage/sessionstorage",
"storage/websqldatabase",
"style/scoped",
"svg",
"svg/asimg",
"svg/clippaths",
"svg/filters",
"svg/foreignobject",
"svg/inline",
"svg/smil",
"templatestrings",
"textarea/maxlength",
"touchevents",
"typed-arrays",
"unicode",
"unicode-range",
"url/bloburls",
"url/data-uri",
"url/parser",
"url/urlsearchparams",
"userdata",
"vibration",
"video",
"video/autoplay",
"video/crossorigin",
"video/loop",
"video/preload",
"vml",
"web-intents",
"webanimations",
"webauthn/publickeycredential",
"webgl",
"webgl/extensions",
"webrtc/datachannel",
"webrtc/getusermedia",
"webrtc/peerconnection",
"websockets",
"websockets/binary",
"window/atob-btoa",
"window/framed",
"window/matchmedia",
"workers/blobworkers",
"workers/dataworkers",
"workers/sharedworkers",
"workers/transferables",
"workers/webworkers",
"xdomainrequest"
]
}
+40
View File
@@ -0,0 +1,40 @@
/*global location, define*/
define(['lodash', 'package', 'lib/build-query'], function(_, pkg, buildQuery) {
var domain = 'modernizr.com';
if (typeof location !== 'undefined' && 'host' in location) {
domain = location.host;
}
// Return a Modernizr file banner.
// Usage:
// require('banners')(type);
// Arguments:
// type (String, required): either 'compact' or 'full'.
return function banners(type, config) {
config = config || {};
var query = buildQuery(config);
if (!type || type === 'compact') {
return '/*! ' + pkg.name + ' ' + pkg.version + ' (Custom Build) | ' + pkg.license + ' *\n' +
' * https://' + domain + '/download/' + query +
' !*/\n';
}
else if (type === 'full') {
return '/*!\n' +
' * ' + pkg.name + ' v' + pkg.version + '\n' +
' * Build https://' + domain + '/download' + query + '\n' +
' *\n' +
' * Copyright (c)\n * ' + _.map(pkg.contributors, 'name').join('\n * ') + '\n\n' +
' * ' + pkg.license + ' License\n */\n' +
'\n' +
'/*\n' +
' * Modernizr tests which native CSS3 and HTML5 features are available in the\n' +
' * current UA and makes the results available to you in two ways: as properties on\n' +
' * a global `Modernizr` object, and as classes on the `<html>` element. This\n' +
' * information allows you to progressively enhance your pages with a granular level\n' +
' * of control over the experience.\n*/\n';
} else {
throw 'banners() must be passed "compact" or "full" as an argument.';
}
};
});
+9
View File
@@ -0,0 +1,9 @@
var fs = require('fs');
var path = require('path');
var pkg = require('../package.json');
var licensePath = path.resolve(__dirname, '../LICENSE');
var license = fs.readFileSync(licensePath, 'utf8');
var data = license.replace(/Modernizr\s(.+?)\s\|/, 'Modernizr ' + pkg.version + ' |');
fs.writeFileSync(licensePath, data, 'utf8');
+140
View File
@@ -0,0 +1,140 @@
var fs = require('fs');
var file = require('file');
var MarkdownIt = require('markdown-it');
var polyfills = require('./polyfills.json');
var viewRoot = fs.realpathSync(__dirname + '/../feature-detects');
function metadata(cb) {
var tests = [];
var md = new MarkdownIt();
file.walkSync(viewRoot, function(start, dirs, files) {
files.forEach(function(file) {
if (file === '.DS_Store') {
return;
}
var test = fs.readFileSync(start + '/' + file, 'utf8');
// TODO :: make this regex not suck
var metaRE = /\/\*\!([\s\S]*)\!\*\//m;
var matches = test.match(metaRE);
var docRE = /\/\*\sDOC([\s\S]*?)\*\//m;
var docmatches = test.match(docRE);
var depRE = /define\((\[[^\]]*\]),/;
var depMatches = test.match(depRE);
var metadata;
if (matches && matches[1]) {
try {
metadata = JSON.parse(matches[1]);
} catch (e) {
throw new Error('Error Parsing Metadata: ' + file + '\nInput: `' + matches[1] + '`');
}
}
else {
metadata = {};
}
var docs = null;
if (docmatches && docmatches[1]) {
docs = md.render(docmatches[1].trim());
}
metadata.doc = docs;
var deps = [];
var matchedDeps;
if (depMatches && depMatches[1]) {
try {
matchedDeps = JSON.parse(depMatches[1].replace(/'/g, '"'));
} catch (e) {
throw new Error('Couldn\'t parse dependencies for `' + file + '`:\n`' + depMatches[1] + '\n`');
}
matchedDeps.forEach(function(dep) {
if (dep === 'Modernizr') {
return;
}
deps.push(dep);
});
} else {
throw new Error('Couldn\'t find the define for `' + file + '`');
}
metadata.deps = deps;
var baseDir = __dirname.replace(/lib$/, '');
metadata.path = './' + (start + '/' + file).replace(baseDir, '').replace(/\\/g, '/');
metadata.amdPath = metadata.path.replace(/^\.\/feature\-detects/, 'test').replace(/\.js$/i, '');
if (!metadata.name) {
metadata.name = metadata.amdPath;
}
var pfs = [];
if (metadata.polyfills && metadata.polyfills.length) {
metadata.polyfills.forEach(function(polyname) {
if (polyfills[polyname]) {
pfs.push(polyfills[polyname]);
}
else {
throw new Error(metadata.name + ': Polyfill not found in `' + file + '`: ' + polyname);
}
});
}
metadata.polyfills = pfs;
if (!metadata.async) {
metadata.async = false;
}
if (!metadata.notes) {
metadata.notes = [];
}
if (!metadata.warnings) {
metadata.warnings = [];
}
if (!metadata.caniuse) {
metadata.caniuse = null;
}
if (!metadata.cssclass && metadata.property) {
metadata.cssclass = metadata.property;
} else {
metadata.cssclass = null;
}
// Maybe catch a bug
if (!metadata.doc && metadata.docs) {
metadata.doc = metadata.docs;
delete metadata.docs;
}
// If you want markdown parsed code minus the docs and metadata, this'll do it.
// Off by default for now.
// metadata.code = md.render('```javascript\n' + test.replace(metaRE, '').replace(docRE, '') + '\n```');
if (!metadata.tags) {
metadata.tags = [];
}
if (!metadata.authors) {
metadata.authors = [];
}
if (!metadata.knownBugs) {
metadata.knownBugs = [];
}
tests.push(metadata);
});
});
if (cb && typeof cb === 'function') {
return cb(tests);
}
return tests;
}
module.exports = metadata;
+90
View File
@@ -0,0 +1,90 @@
var fs = require('fs');
var _ = require('lodash');
var file = require('file');
var jsdoc = require('doctrine');
var srcRoot = fs.realpathSync(__dirname + '/../src');
var commentRE = /^(\s+)?(\/\*)?\*(\/)?\s?/mg;
var jsdocRE = /[^\S\r\n]*\/(?:\*{2})([\W\w]+?)\*\//mg;
var stripComments = function(str) {
return str.replace(commentRE, '');
};
function options(cb, allMetadata) {
var opts;
file.walkSync(srcRoot, function(start, dirs, files) {
opts = _.chain(files)
.map(function(file) {
var srcFile = fs.readFileSync(start + '/' + file, 'utf8');
var docs = srcFile.match(jsdocRE);
if (docs) {
docs = docs
.map(stripComments)
.map(function(str) {
return jsdoc.parse(str, {
sloppy: true,
tags: [
'access',
'author',
'class',
'example',
'function',
'memberOf',
'name',
'optionName',
'optionProp',
'param',
'params',
'preserve',
'private',
'returns',
'type'
]
});
});
var option = _.chain(docs)
.flatten()
.filter(function(doc) {
if (allMetadata) {
return true;
} else {
return doc && _.some(doc.tags, {title: 'optionName'});
}
})
.map(function(opt) {
if (allMetadata) {
return opt;
} else {
var tags = opt.tags.filter(function(tag) {
return tag.title.indexOf('option') === 0;
});
return {
name: _.filter(tags, {title: 'optionName'})[0].description,
property: _.filter(tags, {title: 'optionProp'})[0].description
};
}
})
.value();
return option;
}
})
.filter(function(doc) {
return doc && doc.length;
})
.flatten()
.value();
});
if (cb) {
cb(opts);
}
return opts;
}
module.exports = options;
+772
View File
@@ -0,0 +1,772 @@
{
"html5shiv": {
"name": "HTML5 Shiv",
"authors": ["Alexander Farkas (@aFarkas)", "Jonathan Neal (@jonathantneal)", "Paul Irish (@paulirish)"],
"href": "https://github.com/aFarkas/html5shiv",
"licenses": ["MIT", "GPL2"],
"notes": ["The HTML5 Shiv enables use of HTML5 sectioning elements in legacy Internet Explorer and provides basic HTML5 styling for Internet Explorer 6-9, Safari 4.x (and iPhone 3.x), and Firefox 3.x."]
},
"html5-notifications": {
"name": "HTML5 Notifications",
"authors": ["Hendrik Beskow"],
"href": "https://gist.github.com/Asmod4n/6030828",
"licenses": ["MIT"],
"notes": ["A Polyfill to fix the differences in WebKit, Blink and Gecko HTML5 Desktop Notifications, also adds a way to add your own JavaScript Notifications in case your Browser doesn't support them natively."]
},
"desktop-notify": {
"name": "HTML5-Desktop-Notifications",
"authors": ["Tsvetan Tsvetkov"],
"href": "https://github.com/ttsvetko/HTML5-Desktop-Notifications",
"licenses": ["Apache2"],
"notes": ["A small library that unifies the HTML5 Notifications APIs across different browsers including IE9 & IE10."]
},
"css3pie": {
"name": "CSS3 PIE",
"authors": ["Jason Johnston"],
"href": "http://css3pie.com/",
"licenses": ["Apache2", "GPL2"],
"notes": ["CSS3 decoration rendering for IE 6-9. Supports: border-radius, box-shadow, multiple backgrounds, linear gradients, border-image"]
},
"xaudiojs": {
"name": "XAudioJS",
"authors": ["Grant Galitz"],
"href": "https://github.com/grantgalitz/XAudioJS",
"licenses": [],
"notes": [
"Audio sample stream output thin-abstraction library that supports mono and stereo audio, as well as resampling the audio stream.",
"Supports the Mozilla Audio Data API, Web Audio API, Adobe Flash 10, real-time WAV PCM Data URI generation"
]
},
"dynamicaudiojs": {
"name": "dynamicaudio.js",
"authors": ["Ben Firshman"],
"href": "http://github.com/bfirsh/dynamicaudio.js",
"licenses": ["BSD"],
"notes": []
},
"audiolibjs": {
"name": "audiolib.js",
"authors": ["Jussi Kalliokoski"],
"href": "https://github.com/jussi-kalliokoski/audiolib.js",
"licenses": ["MIT"],
"notes": ["specs: incubator group proposed spec, Mozilla Audio Data API (temporary)"]
},
"transformie": {
"name": "transformie",
"authors": ["Paul Bakaus"],
"href": "https://github.com/pbakaus/transformie",
"licenses": ["GPL2", "MIT"],
"notes": []
},
"csssandpaper": {
"name": "CSS Sandpaper",
"authors": ["Zoltan Hawryluk"],
"href": "http://www.useragentman.com/blog/2010/03/09/cross-browser-css-transforms-even-in-ie/",
"licenses": ["MIT"],
"notes": []
},
"css-escape": {
"name": "CSS.escape()",
"authors": ["Mathias Bynens"],
"href": "http://mths.be/cssescape",
"licenses": ["MIT"],
"notes": []
},
"borderboxmodel": {
"name": "borderBoxModel",
"authors": ["Alberto Gasparin"],
"href": "https://github.com/albertogasparin/borderBoxModel",
"licenses": ["MIT"],
"notes": ["box-sizing: border-box; javascript polyfill for IE6+"]
},
"boxsizingpolyfill": {
"name": "box-sizing-polyfill",
"authors": ["Christian \"Schepp\" Schaefer"],
"href": "https://github.com/Schepp/box-sizing-polyfill",
"licenses": ["LGPL3"],
"notes": ["box-sizing: border-box; for IE6 and IE7 via Microsoft's proprietary CSS behavior / .htc-script"]
},
"borderbox": {
"name": "Borderbox for Compass",
"authors": ["Richard Herrera"],
"href": "https://github.com/doctyper/compass-borderbox",
"licenses": [],
"notes": ["box-sizing: border-box; polyfill for SASS/Compass. Outputs equivalent CSS for IE6 & 7"]
},
"css3multicolumnjs": {
"name": "css3-multi-column.js",
"authors": ["Betley Whitehorne Image", "Cdric Savarese"],
"href": "https://github.com/BetleyWhitehorne/CSS3MultiColumn",
"licenses": ["CC-GNU LGPL"],
"notes": [
"Supported Properties: column-count, column-width, column-gap, column-rule.",
"Unsupported Properties: column-rule-width (use column-rule instead), column-rule-style (use column-rule instead), column-rule-color (use column-rule instead), column-span, column-width-policy, column-space-distribution"
]
},
"polyfilter": {
"name": "Polyfilter",
"authors": ["Christian \"Schepp\" Schaefer"],
"href": "https://github.com/Schepp/CSS-Filters-Polyfill",
"licenses": ["MIT"],
"notes": ["CSS filter effects for Chrome 20+, Safari 6+, Firefox 4+, IE 6 - 9 and some mobile browsers."]
},
"flexie": {
"name": "Flexie",
"authors": ["Richard Herrera"],
"href": "http://github.com/doctyper/flexie",
"licenses": ["MIT"],
"notes": ["Flexible box model - old spec from 2009. (flexbox) Supports: box-orient, box-align, box-direction, box-pack, box-flex, box-ordinal-group"]
},
"es5shim": {
"name": "ES5 Shim",
"href": "https://github.com/kriskowal/es5-shim",
"licenses": ["MIT"]
},
"es5sham": {
"name": "ES5 Sham",
"href": "https://github.com/kriskowal/es5-shim",
"notes": ["Adds the rest of Object, read carefully before using"],
"licenses": ["MIT"]
},
"es6shim": {
"name": "ES6 Shim",
"href": "https://github.com/paulmillr/es6-shim",
"licenses": ["MIT"]
},
"html5gears": {
"name": "html5-gears",
"authors": ["Brad Neuberg"],
"href": "https://code.google.com/p/html5-gears/",
"licenses": ["Apache2"]
},
"blobjs": {
"name": "Blob.js",
"authors": ["Eli Grey"],
"href": "https://github.com/eligrey/Blob.js",
"licenses": ["MIT"]
},
"flashcanvas": {
"name": "FlashCanvas",
"authors": ["Shinya Muramatsu"],
"href": "http://flashcanvas.net/",
"licenses": ["MIT"]
},
"excanvas": {
"name": "Explorer Canvas",
"authors": ["Erik Arvidsson"],
"href": "https://code.google.com/p/explorercanvas/",
"licenses": ["Apache2"]
},
"slcanvas": {
"name": "Silverlight HTML 5 Canvas",
"href": "http://slcanvas.codeplex.com/",
"licenses": ["Microsoft Public License (Ms-PL)"]
},
"fxcanvas": {
"name": "fxCanvas",
"authors": ["Evgeny Burzak"],
"href": "http://burzak.com/proj/fxcanvas/",
"licenses": ["MIT"]
},
"canvastext": {
"name": "canvas-text",
"authors": ["Fabien Ménager"],
"href": "https://code.google.com/p/canvas-text/",
"licenses": ["MIT"]
},
"jquery-contextmenu": {
"name": "jQuery-contextMenu",
"authors": ["Rodney Rehm", "Björn Brala"],
"href": "https://github.com/swisnl/jQuery-contextMenu",
"licenses": ["MIT", "GPL3"]
},
"pmxdr": {
"name": "pmxdr",
"authors": ["Eli Grey"],
"href": "https://github.com/eligrey/pmxdr",
"notes": ["Implements a CORS-compliant cross-domain XMLHttpRequest with postMessage. Note that sites being requested must have a pmxdr host."],
"licenses": ["MIT"]
},
"ppx": {
"name": "postmessage-proxied-xhr",
"authors": ["Atul Varma"],
"href": "https://github.com/toolness/postmessage-proxied-xhr",
"licenses": ["MIT"]
},
"flxhr": {
"name": "flXHR",
"authors": ["Kyle Simpson"],
"href": "https://github.com/flensed/flXHR",
"licenses": ["MIT"]
},
"dropfile": {
"name": "dropfile",
"authors": ["Andrew Dodson"],
"href": "https://github.com/MrSwitch/dropfile",
"licenses": ["MIT"]
},
"moxie": {
"name": "mOxie",
"authors": ["Moxiecode"],
"href": "https://github.com/moxiecode/moxie",
"licenses": ["GPL2"]
},
"fileapi": {
"name": "FileAPI",
"authors": ["Konstantin Lebedev", "Demidov Vladimir"],
"href": "https://github.com/mailru/FileAPI",
"licenses": ["MIT"]
},
"jdataview": {
"name": "jDataView",
"authors": ["Christopher Chedeau", "Ingvar Stepanyan"],
"href": "https://github.com/jDataView/jDataView/",
"licenses": ["WTFPL"]
},
"screenfulljs": {
"name": "screenfull.js",
"authors": ["Sindre Sorhus"],
"href": "https://github.com/sindresorhus/screenfull.js",
"licenses": ["MIT"]
},
"geo-location-javascript": {
"name": "geo-location-javascript",
"authors": ["whoisstan"],
"href": "https://code.google.com/p/geo-location-javascript/",
"notes": ["Mobile-centric: uses non-standard Blackberry and WebOS tricks"],
"licenses": ["MIT"]
},
"geolocation-api-polyfill": {
"name": "Geolocation-API-Polyfill",
"authors": ["Manuel Bieh"],
"href": "https://github.com/manuelbieh/Geolocation-API-Polyfill",
"licenses": ["LGPL"]
},
"jquery-hashchange": {
"name": "jQuery hashchange event",
"authors": ["Ben Alman"],
"href": "http://benalman.com/projects/jquery-hashchange-plugin/",
"licenses": ["MIT", "GPL2"]
},
"moo-historymanager": {
"name": "HistoryManager Mootools Plugin",
"authors": ["Arieh Glazer"],
"href": "http://mootools.net/forge/p/historymanager/",
"licenses": ["MIT"]
},
"jquery-ajaxy": {
"name": "jQuery Ajaxy",
"authors": ["Benjamin Lupton"],
"href": "https://github.com/balupton/jquery-ajaxy",
"licenses": ["MIT"]
},
"hasher": {
"name": "Hasher",
"authors": ["Miller Medeiros"],
"href": "https://github.com/millermedeiros/hasher/",
"licenses": ["MIT"]
},
"shistory": {
"name": "sHistory",
"authors": ["Andrew Udvare"],
"href": "https://github.com/tatsh/sHistory",
"licenses": ["MIT"]
},
"historyjs": {
"name": "History.js",
"authors": ["Benjamin Lupton"],
"href": "https://github.com/browserstate/history.js",
"licenses": ["BSD"]
},
"html5historyapi": {
"name": "HTML5 History API",
"authors": ["Dmitrii Pakhtinov"],
"href": "https://github.com/devote/HTML5-History-API",
"licenses": ["GPL3", "MIT"]
},
"indexeddb": {
"name": "IndexedDB",
"authors": ["Parashuram"],
"href": "http://nparashuram.com/IndexedDBShim/",
"licenses": ["GPL2", "BSD"]
},
"jquerytools": {
"name": "jQuery Tools",
"href": "http://jquerytools.org",
"licenses": ["public domain"]
},
"webshims": {
"name": "Webshims",
"authors": ["Alexander Farkas"],
"href": "http://afarkas.github.io/webshim/demos/",
"licenses": ["MIT"]
},
"h5f": {
"name": "H5F",
"authors": ["Ryan Seddon"],
"href": "https://github.com/ryanseddon/H5F",
"licenses": ["MIT"]
},
"webforms2": {
"name": "Web Forms 2.0",
"authors": ["Weston Ruter"],
"href": "https://github.com/westonruter/webforms2",
"licenses": ["MIT", "GPL2"]
},
"nwxforms": {
"name": "NWX Forms",
"authors": ["Diego Perini"],
"href": "https://github.com/dperini/nwxforms",
"licenses": ["MIT"]
},
"html5formsjs": {
"name": "HTML5Forms.js",
"authors": ["Zoltan Dulac"],
"href": "https://github.com/zoltan-dulac/html5Forms.js"
},
"fdslider": {
"name": "fd-slider",
"authors": ["Brian McAllister"],
"href": "https://github.com/freqdec/fd-slider",
"licenses": ["MIT"]
},
"html5slider": {
"name": "html5slider",
"authors": ["Frank Yan"],
"href": "https://github.com/fryn/html5slider",
"licenses": ["MIT"]
},
"number-polyfill": {
"name": "Number polyfill",
"authors": ["jonstipe"],
"href": "https://github.com/jonstipe/number-polyfill",
"licenses": ["MIT"]
},
"galleryhtml5forms": {
"name": "YUI Gallery HTML5 Forms",
"authors": ["Matt Snider"],
"href": "http://yuilibrary.com/gallery/show/html5-forms",
"licenses": ["BSD"]
},
"jscolor": {
"name": "JSColor",
"authors": ["Johannes Jörg Schmidt"],
"href": "https://github.com/jo/JSColor",
"licenses": ["LGPL"]
},
"html5formshim": {
"name": "HTML5 Form Shim",
"authors": ["Dmitry Sheiko"],
"href": "https://github.com/dsheiko/HTML5-Form-Shim",
"licenses": ["MIT"]
},
"selectedoptionsjs": {
"name": "selectedOptions.js",
"authors": ["Brett Zamir"],
"href": "https://gist.github.com/brettz9/4212217",
"licenses": ["MIT", "GPL", "public domain"]
},
"formvalidationjs": {
"name": "formvalidation.js",
"authors": ["Maksim Chemerisuk"],
"href": "https://github.com/chemerisuk/formvalidation.js",
"licenses": ["MIT"]
},
"json2": {
"name": "JSON2",
"authors": ["Douglas Crockford"],
"href": "https://github.com/douglascrockford/JSON-js",
"licenses": ["public domain"]
},
"mathjax": {
"name": "MathJax",
"authors": ["Davide P. Cervone"],
"href": "http://www.mathjax.org/",
"licenses": ["Apache2"]
},
"visibilityjs": {
"name": "Visibility.js",
"authors": ["Andrey Sitnik"],
"href": "https://github.com/ai/visibility.js",
"licenses": ["GPL3"]
},
"visiblyjs": {
"name": "visibly.js",
"authors": ["Addy Osmani"],
"href": "https://github.com/addyosmani/visibly.js",
"licenses": ["MIT"]
},
"jquery-visibility": {
"name": "Page Visibility shim for jQuery",
"authors": ["Mathias Bynens"],
"href": "https://github.com/mathiasbynens/jquery-visibility",
"licenses": ["MIT", "GPL"]
},
"notificationjs": {
"name": "notification.js",
"authors": ["Andrew Dodson"],
"href": "http://adodson.com/notification.js/",
"licenses": ["MIT"]
},
"perfnow": {
"name": "perf.now() polyfill",
"authors": ["Paul Irish"],
"href": "https://gist.github.com/paulirish/5438650",
"licenses": ["MIT"]
},
"easyxdm": {
"name": "easyXDM",
"authors": ["Sean Kinsey"],
"href": "http://easyxdm.net/wp/",
"notes": ["Implements XDM and RPC in most browsers since IE6. Also ships with an endpoint for exposing ajax across the domain boundary."],
"licenses": ["MIT"]
},
"postmessage-jquery": {
"name": "postMessage jquery plugin",
"authors": ["Ben Alman"],
"href": "http://benalman.com/projects/jquery-postmessage-plugin/",
"licenses": ["MIT", "GPL2"]
},
"raf": {
"name": "requestAnimationFrame polyfill",
"authors": ["Erik Möller"],
"href": "https://gist.github.com/paulirish/1579671",
"licenses": ["MIT"]
},
"cupcake": {
"name": "CupCake.js",
"authors": ["Rivindu Perera"],
"href": "https://github.com/rivindu/cupcakejs",
"licenses": ["MIT"]
},
"customelements": {
"name": "Custom Elements",
"authors": ["Webcomponents"],
"href": "https://github.com/webcomponents/custom-elements",
"licenses": ["BSD"]
},
"storagepolyfill": {
"name": "Storage Polyfill",
"authors": ["Remy Sharp"],
"href": "http://gist.github.com/350433",
"notes": [],
"licenses": ["MIT"]
},
"sessionstorage": {
"name": "sessionstorage",
"authors": ["Andrea Giammarchi"],
"href": "http://gist.github.com/350433",
"licenses": ["MIT"]
},
"amplifyjs": {
"name": "Amplify.js",
"authors": ["appendTo"],
"href": "http://amplifyjs.com/",
"licenses": ["MIT", "GPL2"]
},
"yui-cacheoffline": {
"name": "YUI3 CacheOffline",
"authors": ["YUI Team"],
"href": "http://yuilibrary.com/yui/docs/cache/#offline",
"licenses": ["BSD"]
},
"scoped-styles": {
"name": "Scoped Styles",
"authors": ["Simon Madine"],
"notes": ["jQuery Plugin to enable the scoped attribute on style blocks so they only affect their parent element's children."],
"href": "http://github.com/thingsinjars/jQuery-Scoped-CSS-plugin",
"licenses": ["MIT"]
},
"svgweb": {
"name": "SVG Web",
"authors": ["Rick Masters", "Brad Neuberg", "James Hight"],
"href": "https://code.google.com/p/svgweb/",
"licenses": ["Apache2"]
},
"raphael": {
"name": "Raphaël",
"authors": ["Dmitry Baranovsky"],
"href": "http://raphaeljs.com/",
"notes": ["Abstracted API. adds features. fallback for IE via VML"],
"licenses": ["MIT"]
},
"amplesdk": {
"name": "Ample SDK",
"authors": ["Sergey Ilinsky"],
"href": "http://www.amplesdk.com/examples/svg/",
"licenses": ["MIT", "GPL2"]
},
"canvg": {
"name": "canvg",
"authors": ["Gabe Lerner"],
"href": "http://code.google.com/p/canvg/",
"notes": ["Writes SVG to canvas. Good for Android"],
"licenses": ["MIT"]
},
"svg-boilerplate": {
"name": "SVG Boilerplate",
"authors": ["Robin Berjon"],
"href": "https://github.com/darobin/svgboilerplate",
"notes": ["Alpha and still buggy, but handle multiple concurrent SVG shims together"],
"licenses": ["public domain"]
},
"sie": {
"name": "SIE SVG library",
"authors": ["Hiroki Dehara"],
"href": "http://sie.sourceforge.jp/",
"notes": ["Fallback to VML for oldIE"],
"licenses": ["Mozilla1.1", "GPL2", "LGPL2.1"]
},
"dojogfx": {
"name": "Dojo GFX",
"authors": ["Eugene Lazutkin", "Kun Xi", "Chris Mitchell"],
"href": "http://docs.dojocampus.org/dojox/gfx/",
"notes": ["Fallback via VML, Canvas, Silverlight and Flash"],
"licenses": ["BSD", "AFL"]
},
"fabricjs": {
"name": "fabric.js",
"authors": ["Juriy Zaytsev (@kangax)"],
"href": "https://github.com/kangax/fabric.js",
"notes": ["Can render SVG via canvas"],
"licenses": ["MIT"]
},
"inline-svg-polyfill": {
"name": "inline SVG polyfill",
"authors": ["Marc Stalfoort (@mstalfoort)"],
"href": "https://gist.github.com/mstalfoort/1293822",
"licenses": ["MIT"]
},
"joshuabell-polyfill": {
"name": "polyfill",
"authors": ["Joshua Bell"],
"href": "https://github.com/inexorabletash/polyfill",
"licenses": ["various"]
},
"text-overflow": {
"name": "jQuery text-overflow",
"authors": ["Devon Govett"],
"href": "http://ajaxian.com/archives/text-overflow-for-firefox-via-jquery",
"licenses": ["MIT"]
},
"html5media": {
"name": "html5media",
"authors": ["Dave Hall"],
"href": "https://github.com/etianen/html5media",
"licenses": ["GPL3"]
},
"mediaelementjs": {
"name": "MediaElement.js",
"authors": ["John Dyer"],
"href": "http://mediaelementjs.com/",
"licenses": ["MIT"]
},
"sublimevideo": {
"name": "SublimeVideo",
"authors": ["Jilion SA"],
"href": "http://sublimevideo.net/",
"licenses": ["proprietary"]
},
"videojs": {
"name": "video.js",
"authors": ["Steve Heffernan"],
"href": "http://videojs.com/",
"licenses": ["Apache2"]
},
"leanbackplayer": {
"name": "LeanBack Player",
"authors": ["Kapelan Medien GmbH"],
"href": "http://www.leanbackplayer.com/",
"licenses": ["GPL3"]
},
"videoforeverybody": {
"name": "Video For Everybody",
"authors": ["Kroc Camen"],
"href": "http://camendesign.com/code/video_for_everybody",
"licenses": ["public domain"]
},
"webintents": {
"name": "Web Intents JavaScript Shim",
"authors": ["Paul Kinlan"],
"href": "http://webintents.org/#javascriptshim",
"licenses": ["Apache2"]
},
"jebgl": {
"name": "jebgl",
"authors": ["Martin Qvist"],
"href": "http://code.google.com/p/jebgl/",
"licenses": ["MIT"]
},
"cwebgl": {
"name": "cwebgl",
"authors": ["Cimaron Shanahan"],
"href": "http://code.google.com/p/cwebgl/",
"licenses": ["MIT"]
},
"iewebgl": {
"name": "IEWebGL",
"href": "http://iewebgl.com/",
"licenses": ["MIT"]
},
"sockjs": {
"name": "SockJS",
"authors": ["Bryce Kahle"],
"href": "https://github.com/sockjs/sockjs-client",
"licenses": ["MIT"]
},
"socketio": {
"name": "socket.io",
"authors": ["Guillermo Rauch"],
"href": "http://socket.io/",
"licenses": ["MIT"]
},
"kaazing-websocket-gateway": {
"name": "Kaazing WebSocket Gateway",
"href": "http://kaazing.com/products/kaazing-websocket-gateway/",
"licenses": ["proprietary"]
},
"websocketjs": {
"name": "web-socket-js",
"authors": ["Hiroshi Ichikawa"],
"href": "http://github.com/gimite/web-socket-js/",
"licenses": ["BSD"]
},
"atmosphere": {
"name": "atmosphere jQuery plugin",
"authors": ["Jeanfrancois Arcand"],
"href": "http://jfarcand.wordpress.com/2010/06/15/using-atmospheres-jquery-plug-in-to-build-applicationsupporting-both-websocket-and-comet/",
"licenses": ["Apache2"]
},
"graceful-websocket": {
"name": "Graceful WebSocket jQuery plugin",
"authors": ["David Lindkvist"],
"href": "https://github.com/ffdead/jquery-graceful-websocket",
"licenses": ["MIT"]
},
"portal": {
"name": "Portal",
"authors": ["Donghwan Kim"],
"href": "https://github.com/flowersinthesand/portal",
"licenses": ["Apache2"]
},
"datachannel": {
"name": "DataChannel",
"authors": ["Jesús Leganés Combarro"],
"href": "https://github.com/piranna/DataChannel-polyfill",
"licenses": ["GPL3"]
},
"getusermedia": {
"name": "getUserMedia.js",
"authors": ["Addy Osmani"],
"href": "https://github.com/addyosmani/getUserMedia.js",
"licenses": ["MIT"]
},
"fakeworker": {
"name": "fakeworker.js",
"authors": ["Shumpei Shiraishi"],
"href": "https://code.google.com/p/fakeworker-js/",
"licenses": ["Apache2"]
},
"html5shims": {
"name": "web worker api shim",
"authors": ["Jonathan 'J5' Cook"],
"href": "https://code.google.com/p/html5-shims/",
"licenses": ["Apache2"]
},
"polycrypt": {
"name": "PolyCrypt",
"authors": ["BBN Technologies"],
"href": "http://polycrypt.net/",
"licenses": ["BSD"]
},
"webanimationsjs": {
"name": "web-animations-js",
"authors": ["web-animations"],
"href": "https://github.com/web-animations/web-animations-js",
"licenses": ["Apache2"]
},
"shumway": {
"name": "JavaScript Flash VM",
"authors": ["Mozilla Foundation"],
"href": "https://github.com/mozilla/shumway",
"licenses": ["Apache2"]
},
"maxlength": {
"name": "maxlength plugin",
"authors": ["Remy Sharp"],
"href": "http://remysharp.com/2008/06/30/maxlength-plugin/",
"licenses": ["CC SA"]
},
"weakmap": {
"name": "ES6 WeakMap",
"authors": ["Google Inc."],
"href": "https://github.com/Polymer/WeakMap",
"licenses": ["BSD"]
},
"eventlistener": {
"name": "EventListener",
"authors": ["Jonathan Neal"],
"href": "https://github.com/jonathantneal/EventListener",
"licenses": ["MIT"]
},
"es6promises": {
"name": "ES6-Promises",
"authors": ["Jake Archibald"],
"href": "https://github.com/jakearchibald/ES6-Promises",
"licenses": ["MIT"]
},
"urlparser": {
"authors": ["Google Inc."],
"href": "https://github.com/Polymer/URL",
"licenses": ["BSD"],
"name": "Polymer URL parser polyfill"
},
"css-selector-engine": {
"name": "CSS Selector Engine",
"authors": ["Егор Халимоненко"],
"href": "https://github.com/termi/CSS_selector_engine",
"licenses": ["MIT"]
},
"mutationobservers": {
"authors": ["Google Inc."],
"href": "https://github.com/Polymer/MutationObservers",
"licenses": ["BSD"],
"name": "Mutation Observers polyfill"
},
"polymer-htmlimports": {
"authors": ["Google Inc."],
"href": "https://github.com/polymer/HTMLImports",
"licenses": ["BSD"],
"name": "Polymer HTMLImports polyfill"
},
"matchmediajs": {
"authors": ["Scott Jehl", "Paul Irish", "Nicholas Zakas"],
"href": "https://github.com/paulirish/matchMedia.js/",
"licenses": ["MIT"],
"name": "matchMedia.js"
},
"fetch": {
"authors": ["Github"],
"href": "https://github.com/github/fetch",
"licenses": ["MIT"],
"name": "window.fetch polyfill"
},
"base64js": {
"authors": ["David Chambers"],
"href": "https://github.com/davidchambers/Base64.js",
"licenses": ["Apache2", "WTFPL"],
"name": "window.atob and window.btoa polyfill"
},
"scrollsnap": {
"authors": ["Clemens Krack"],
"href": "https://github.com/ckrack/scrollsnap-polyfill",
"licenses": ["MIT"],
"name": "scrollsnap-polyfill.js"
},
"pep": {
"authors": ["jQuery Foundation and other contributors"],
"href": "https://github.com/jquery/PEP",
"licenses": ["MIT"],
"name": "pep.js"
}
}