diff --git a/docs/assets/js/vendor/autoprefixer.js b/docs/assets/js/vendor/autoprefixer.js index 89d63d0975..2919f5f62c 100644 --- a/docs/assets/js/vendor/autoprefixer.js +++ b/docs/assets/js/vendor/autoprefixer.js @@ -1,9 +1,11 @@ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.autoprefixer=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1']; + autoprefixer.defaults = browserslist.defaults; autoprefixer.loadDefault = function() { - return this.defaultCache || (this.defaultCache = autoprefixer({ - browsers: this["default"] - })); + return this.defaultCache || (this.defaultCache = autoprefixer()); }; autoprefixer.process = function(str, options) { @@ -113,98 +109,43 @@ }).call(this); -},{"../data/browsers":2,"../data/prefixes":3,"./browsers":4,"./info":33,"./prefixes":38,"postcss":92}],2:[function(require,module,exports){ +},{"../data/browsers":2,"../data/prefixes":3,"./browsers":5,"./info":37,"./prefixes":41,"browserslist":55,"postcss":107}],2:[function(require,module,exports){ (function() { - var convert, data, intervals, major, name, names, normalize, _ref; - - names = ['firefox', 'chrome', 'safari', 'ios_saf', 'opera', 'ie', 'bb', 'android']; - - major = ['firefox', 'chrome', 'safari', 'ios_saf', 'opera', 'android', 'ie', 'ie_mob']; - - normalize = function(array) { - return array.reverse().filter(function(i) { - return i; - }); - }; - - intervals = function(array) { - var i, interval, result, splited, sub, _i, _len; - result = []; - for (_i = 0, _len = array.length; _i < _len; _i++) { - interval = array[_i]; - splited = interval.split('-'); - splited = splited.sort().reverse(); - sub = (function() { - var _j, _len1, _results; - _results = []; - for (_j = 0, _len1 = splited.length; _j < _len1; _j++) { - i = splited[_j]; - _results.push([i, interval, splited.length]); - } - return _results; - })(); - result = result.concat(sub); - } - return result; - }; - - convert = function(name, data) { - var future, result, versions; - future = normalize(data.versions.slice(-3)); - versions = intervals(normalize(data.versions.slice(0, -3))); - result = {}; - result.prefix = name === 'opera' ? '-o-' : "-" + data.prefix + "-"; - if (major.indexOf(name) === -1) { - result.minor = true; - } - if (future.length) { - result.future = future; - } - result.versions = versions.map(function(i) { - return i[0]; - }); - result.popularity = versions.map(function(i) { - return data.usage_global[i[1]] / i[2]; - }); - return result; - }; + var data, name, _ref; module.exports = {}; _ref = require('caniuse-db/data').agents; for (name in _ref) { data = _ref[name]; - module.exports[name] = convert(name, data); + module.exports[name] = { + prefix: name === 'opera' ? '-o-' : "-" + data.prefix + "-" + }; } }).call(this); -},{"caniuse-db/data":51}],3:[function(require,module,exports){ +},{"caniuse-db/data":56}],3:[function(require,module,exports){ (function() { - var browsers, feature, map, prefix, textDecoration, + var browsers, feature, filter, logicalProps, map, prefix, resolution, textDecoration, __slice = [].slice; browsers = require('./browsers'); feature = function(data, opts, callback) { - var browser, interval, match, need, sorted, support, version, versions, _i, _len, _ref, _ref1, _ref2; + var browser, match, need, sorted, support, version, versions, _ref, _ref1; if (!callback) { _ref = [opts, {}], callback = _ref[0], opts = _ref[1]; } - match = opts.full ? /y\sx($|\s)/ : /\sx($|\s)/; + match = opts.match || /\sx($|\s)/; need = []; _ref1 = data.stats; for (browser in _ref1) { versions = _ref1[browser]; - for (interval in versions) { - support = versions[interval]; - _ref2 = interval.split('-'); - for (_i = 0, _len = _ref2.length; _i < _len; _i++) { - version = _ref2[_i]; - if (browsers[browser] && support.match(match)) { - version = version.replace(/\.0$/, ''); - need.push(browser + ' ' + version); - } + for (version in versions) { + support = versions[version]; + if (browsers[browser] && support.match(match)) { + need.push(browser + ' ' + version); } } } @@ -234,6 +175,15 @@ return _results; }; + filter = function(browsers, callback) { + return browsers.filter(function(browser) { + var name, version, _ref; + _ref = browser.split(' '), name = _ref[0], version = _ref[1]; + version = parseFloat(version); + return callback(name, version); + }); + }; + prefix = function() { var data, name, names, _i, _j, _len, _results; names = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), data = arguments[_i++]; @@ -249,16 +199,16 @@ feature(require('caniuse-db/features-json/border-radius'), function(browsers) { return prefix('border-radius', 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius', { - mistakes: ['-ms-'], - browsers: browsers, - transition: true + mistakes: ['-ms-', '-o-'], + transition: true, + browsers: browsers }); }); feature(require('caniuse-db/features-json/css-boxshadow'), function(browsers) { return prefix('box-shadow', { - browsers: browsers, - transition: true + transition: true, + browsers: browsers }); }); @@ -277,15 +227,15 @@ feature(require('caniuse-db/features-json/transforms2d'), function(browsers) { return prefix('transform', 'transform-origin', { - browsers: browsers, - transition: true + transition: true, + browsers: browsers }); }); feature(require('caniuse-db/features-json/transforms3d'), function(browsers) { prefix('perspective', 'perspective-origin', { - browsers: browsers, - transition: true + transition: true, + browsers: browsers }); return prefix('transform-style', 'backface-visibility', { browsers: browsers @@ -301,7 +251,7 @@ } }); return prefix('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', { - props: ['background', 'background-image', 'border-image'], + props: ['background', 'background-image', 'border-image', 'list-style', 'list-style-image', 'content'], mistakes: ['-ms-'], browsers: browsers }); @@ -315,15 +265,15 @@ feature(require('caniuse-db/features-json/css-filters'), function(browsers) { return prefix('filter', { - browsers: browsers, - transition: true + transition: true, + browsers: browsers }); }); feature(require('caniuse-db/features-json/multicolumn'), function(browsers) { prefix('columns', 'column-width', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', { - browsers: browsers, - transition: true + transition: true, + browsers: browsers }); return prefix('column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside', { browsers: browsers @@ -468,7 +418,7 @@ }); feature(textDecoration, { - full: true + match: /y\sx($|\s)/ }, function(browsers) { return prefix('text-decoration-line', 'text-decoration-color', { browsers: browsers @@ -493,11 +443,138 @@ }); }); + feature(require('caniuse-db/features-json/object-fit'), function(browsers) { + return prefix('object-fit', 'object-position', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-shapes'), function(browsers) { + return prefix('shape-margin', 'shape-outside', 'shape-image-threshold', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-overflow'), function(browsers) { + return prefix('text-overflow', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/text-emphasis'), function(browsers) { + return prefix('text-emphasis', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-deviceadaptation'), function(browsers) { + return prefix('@viewport', { + browsers: browsers + }); + }); + + resolution = require('caniuse-db/features-json/css-media-resolution'); + + feature(resolution, { + match: /( x($| )|a #3)/ + }, function(browsers) { + return prefix('@resolution', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-text-align-last'), function(browsers) { + return prefix('text-align-last', { + browsers: browsers + }); + }); + + feature(require('caniuse-db/features-json/css-crisp-edges'), function(browsers) { + return prefix('crisp-edges', { + props: ['image-rendering'], + browsers: browsers + }); + }); + + logicalProps = require('caniuse-db/features-json/css-logical-props'); + + feature(logicalProps, function(browsers) { + return prefix('border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', { + transition: true, + browsers: browsers + }); + }); + + feature(logicalProps, function(browsers) { + browsers = filter(browsers, function(i) { + return i !== 'firefox' && i !== 'and_ff'; + }); + return prefix('border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', { + transition: true, + browsers: browsers + }); + }); + }).call(this); -},{"./browsers":2,"caniuse-db/features-json/background-img-opts":52,"caniuse-db/features-json/border-image":53,"caniuse-db/features-json/border-radius":54,"caniuse-db/features-json/calc":55,"caniuse-db/features-json/css-animation":56,"caniuse-db/features-json/css-boxdecorationbreak":57,"caniuse-db/features-json/css-boxshadow":58,"caniuse-db/features-json/css-filters":59,"caniuse-db/features-json/css-gradients":60,"caniuse-db/features-json/css-hyphens":61,"caniuse-db/features-json/css-masks":62,"caniuse-db/features-json/css-placeholder":63,"caniuse-db/features-json/css-selection":64,"caniuse-db/features-json/css-sticky":65,"caniuse-db/features-json/css-transitions":66,"caniuse-db/features-json/css3-boxsizing":67,"caniuse-db/features-json/css3-cursors-newer":68,"caniuse-db/features-json/css3-tabsize":69,"caniuse-db/features-json/flexbox":70,"caniuse-db/features-json/font-feature":71,"caniuse-db/features-json/fullscreen":72,"caniuse-db/features-json/intrinsic-width":73,"caniuse-db/features-json/multicolumn":74,"caniuse-db/features-json/pointer":75,"caniuse-db/features-json/text-decoration":76,"caniuse-db/features-json/text-size-adjust":77,"caniuse-db/features-json/transforms2d":78,"caniuse-db/features-json/transforms3d":79,"caniuse-db/features-json/user-select-none":80}],4:[function(require,module,exports){ +},{"./browsers":2,"caniuse-db/features-json/background-img-opts":57,"caniuse-db/features-json/border-image":58,"caniuse-db/features-json/border-radius":59,"caniuse-db/features-json/calc":60,"caniuse-db/features-json/css-animation":61,"caniuse-db/features-json/css-boxdecorationbreak":62,"caniuse-db/features-json/css-boxshadow":63,"caniuse-db/features-json/css-crisp-edges":64,"caniuse-db/features-json/css-deviceadaptation":65,"caniuse-db/features-json/css-filters":66,"caniuse-db/features-json/css-gradients":67,"caniuse-db/features-json/css-hyphens":68,"caniuse-db/features-json/css-logical-props":69,"caniuse-db/features-json/css-masks":70,"caniuse-db/features-json/css-media-resolution":71,"caniuse-db/features-json/css-placeholder":72,"caniuse-db/features-json/css-selection":73,"caniuse-db/features-json/css-shapes":74,"caniuse-db/features-json/css-sticky":75,"caniuse-db/features-json/css-text-align-last":76,"caniuse-db/features-json/css-transitions":77,"caniuse-db/features-json/css3-boxsizing":78,"caniuse-db/features-json/css3-cursors-newer":79,"caniuse-db/features-json/css3-tabsize":80,"caniuse-db/features-json/flexbox":81,"caniuse-db/features-json/font-feature":82,"caniuse-db/features-json/fullscreen":83,"caniuse-db/features-json/intrinsic-width":84,"caniuse-db/features-json/multicolumn":85,"caniuse-db/features-json/object-fit":86,"caniuse-db/features-json/pointer":87,"caniuse-db/features-json/text-decoration":88,"caniuse-db/features-json/text-emphasis":89,"caniuse-db/features-json/text-overflow":90,"caniuse-db/features-json/text-size-adjust":91,"caniuse-db/features-json/transforms2d":92,"caniuse-db/features-json/transforms3d":93,"caniuse-db/features-json/user-select-none":94}],4:[function(require,module,exports){ (function() { - var Browsers, utils; + var AtRule, Prefixer, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Prefixer = require('./prefixer'); + + AtRule = (function(_super) { + __extends(AtRule, _super); + + function AtRule() { + return AtRule.__super__.constructor.apply(this, arguments); + } + + AtRule.prototype.add = function(rule, prefix) { + var already, cloned, prefixed; + prefixed = prefix + rule.name; + already = rule.parent.some(function(i) { + return i.name === prefixed && i.params === rule.params; + }); + if (already) { + return; + } + cloned = this.clone(rule, { + name: prefixed + }); + return rule.parent.insertBefore(rule, cloned); + }; + + AtRule.prototype.process = function(node) { + var parent, prefix, _i, _len, _ref, _results; + parent = this.parentPrefix(node); + _ref = this.prefixes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + prefix = _ref[_i]; + if (parent && parent !== prefix) { + continue; + } + _results.push(this.add(node, prefix)); + } + return _results; + }; + + return AtRule; + + })(Prefixer); + + module.exports = AtRule; + +}).call(this); + +},{"./prefixer":40}],5:[function(require,module,exports){ +(function() { + var Browsers, browserslist, utils; + + browserslist = require('browserslist'); utils = require('./utils'); @@ -528,155 +605,17 @@ return this.prefixesRegexp.test(value); }; - function Browsers(data, requirements) { + function Browsers(data, requirements, options) { this.data = data; + this.options = options; this.selected = this.parse(requirements); } Browsers.prototype.parse = function(requirements) { - var selected; - if (!(requirements instanceof Array)) { - requirements = [requirements]; - } - selected = []; - requirements.map((function(_this) { - return function(req) { - var i, match, name, _ref; - _ref = _this.requirements; - for (name in _ref) { - i = _ref[name]; - if (match = req.match(i.regexp)) { - selected = selected.concat(i.select.apply(_this, match.slice(1))); - return; - } - } - return utils.error("Unknown browser requirement `" + req + "`"); - }; - })(this)); - return utils.uniq(selected); - }; - - Browsers.prototype.aliases = { - fx: 'firefox', - ff: 'firefox', - ios: 'ios_saf', - explorer: 'ie', - blackberry: 'bb', - explorermobile: 'ie_mob', - operamini: 'op_mini', - operamobile: 'op_mob', - chromeandroid: 'and_chr', - firefoxandroid: 'and_ff' - }; - - Browsers.prototype.requirements = { - none: { - regexp: /^none$/i, - select: function() { - if (typeof console !== "undefined" && console !== null) { - console.warn("autoprefixer(\'none\') is deprecated and will be " + 'removed in 3.1. ' + 'Use autoprefixer({ browsers: [] })'); - } - return []; - } - }, - lastVersions: { - regexp: /^last (\d+) versions?$/i, - select: function(versions) { - return this.browsers(function(data) { - if (data.minor) { - return []; - } else { - return data.versions.slice(0, versions); - } - }); - } - }, - lastByBrowser: { - regexp: /^last (\d+) (\w+) versions?$/i, - select: function(versions, browser) { - var data; - data = this.byName(browser); - return data.versions.slice(0, versions).map(function(v) { - return "" + data.name + " " + v; - }); - } - }, - globalStatistics: { - regexp: /^> (\d+(\.\d+)?)%$/, - select: function(popularity) { - return this.browsers(function(data) { - if (data.minor) { - return []; - } else { - return data.versions.filter(function(version, i) { - return data.popularity[i] > popularity; - }); - } - }); - } - }, - newerThan: { - regexp: /^(\w+) (>=?)\s*([\d\.]+)/, - select: function(browser, sign, version) { - var data, filter; - data = this.byName(browser); - version = parseFloat(version); - if (sign === '>') { - filter = function(v) { - return v > version; - }; - } else if (sign === '>=') { - filter = function(v) { - return v >= version; - }; - } - return data.versions.filter(filter).map(function(v) { - return "" + data.name + " " + v; - }); - } - }, - olderThan: { - regexp: /^(\w+) (<=?)\s*([\d\.]+)/, - select: function(browser, sign, version) { - var data, filter; - data = this.byName(browser); - version = parseFloat(version); - if (sign === '<') { - filter = function(v) { - return v < version; - }; - } else if (sign === '<=') { - filter = function(v) { - return v <= version; - }; - } - return data.versions.filter(filter).map(function(v) { - return "" + data.name + " " + v; - }); - } - }, - esr: { - regexp: /^(firefox|ff|fx) esr$/i, - select: function() { - return ['firefox 31']; - } - }, - direct: { - regexp: /^(\w+) ([\d\.]+)$/, - select: function(browser, version) { - var data, first, last; - data = this.byName(browser); - version = parseFloat(version); - last = data.future ? data.future[0] : data.versions[0]; - first = data.versions[data.versions.length - 1]; - if (version > last) { - version = last; - } else if (version < first) { - version = first; - } - return ["" + data.name + " " + version]; - } - } + var _ref; + return browserslist(requirements, { + path: (_ref = this.options) != null ? _ref.from : void 0 + }); }; Browsers.prototype.browsers = function(criteria) { @@ -707,18 +646,6 @@ return this.selected.indexOf(browser) !== -1; }; - Browsers.prototype.byName = function(name) { - var data; - name = name.toLowerCase(); - name = this.aliases[name] || name; - data = this.data[name]; - if (!data) { - utils.error("Unknown browser " + browser); - } - data.name = name; - return data; - }; - return Browsers; })(); @@ -727,7 +654,7 @@ }).call(this); -},{"../data/browsers":2,"./utils":42}],5:[function(require,module,exports){ +},{"../data/browsers":2,"./utils":46,"browserslist":55}],6:[function(require,module,exports){ (function() { var Browsers, Declaration, Prefixer, utils, vendor, __hasProp = {}.hasOwnProperty, @@ -781,7 +708,7 @@ }; Declaration.prototype.needCascade = function(decl) { - return decl._autoprefixerCascade || (decl._autoprefixerCascade = this.all.options.cascade !== false && decl.before.indexOf("\n") !== -1); + return decl._autoprefixerCascade || (decl._autoprefixerCascade = this.all.options.cascade !== false && decl.style('before').indexOf('\n') !== -1); }; Declaration.prototype.maxPrefixed = function(prefixes, decl) { @@ -805,7 +732,7 @@ if (prefix == null) { prefix = ''; } - before = decl.before; + before = decl.style('before'); max = this.maxPrefixed(prefixes, decl); diff = max - utils.removeNote(prefix).length; for (i = _i = 0; 0 <= diff ? _i < diff : _i > diff; i = 0 <= diff ? ++_i : --_i) { @@ -816,11 +743,11 @@ Declaration.prototype.restoreBefore = function(decl) { var lines, min; - lines = decl.before.split("\n"); + lines = decl.style('before').split("\n"); min = lines[lines.length - 1]; this.all.group(decl).up(function(prefixed) { var array, last; - array = prefixed.before.split("\n"); + array = prefixed.style('before').split("\n"); last = array[array.length - 1]; if (last.length < min.length) { return min = last; @@ -882,7 +809,7 @@ }).call(this); -},{"./browsers":4,"./prefixer":37,"./utils":42,"postcss/lib/vendor":98}],6:[function(require,module,exports){ +},{"./browsers":5,"./prefixer":40,"./utils":46,"postcss/lib/vendor":113}],7:[function(require,module,exports){ (function() { var AlignContent, Declaration, flexSpec, __hasProp = {}.hasOwnProperty, @@ -941,7 +868,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],7:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],8:[function(require,module,exports){ (function() { var AlignItems, Declaration, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1000,7 +927,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],8:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],9:[function(require,module,exports){ (function() { var AlignSelf, Declaration, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1057,7 +984,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],9:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],10:[function(require,module,exports){ (function() { var BackgroundSize, Declaration, __hasProp = {}.hasOwnProperty, @@ -1091,7 +1018,44 @@ }).call(this); -},{"../declaration":5}],10:[function(require,module,exports){ +},{"../declaration":6}],11:[function(require,module,exports){ +(function() { + var BlockLogical, Declaration, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Declaration = require('../declaration'); + + BlockLogical = (function(_super) { + __extends(BlockLogical, _super); + + function BlockLogical() { + return BlockLogical.__super__.constructor.apply(this, arguments); + } + + BlockLogical.names = ['border-block-start', 'border-block-end', 'margin-block-start', 'margin-block-end', 'padding-block-start', 'padding-block-end', 'border-before', 'border-after', 'margin-before', 'margin-after', 'padding-before', 'padding-after']; + + BlockLogical.prototype.prefixed = function(prop, prefix) { + return prefix + (prop.indexOf('-start') !== -1 ? prop.replace('-block-start', '-before') : prop.replace('-block-end', '-after')); + }; + + BlockLogical.prototype.normalize = function(prop) { + if (prop.indexOf('-before') !== -1) { + return prop.replace('-before', '-block-start'); + } else { + return prop.replace('-after', '-block-end'); + } + }; + + return BlockLogical; + + })(Declaration); + + module.exports = BlockLogical; + +}).call(this); + +},{"../declaration":6}],12:[function(require,module,exports){ (function() { var BorderImage, Declaration, __hasProp = {}.hasOwnProperty, @@ -1121,7 +1085,7 @@ }).call(this); -},{"../declaration":5}],11:[function(require,module,exports){ +},{"../declaration":6}],13:[function(require,module,exports){ (function() { var BorderRadius, Declaration, __hasProp = {}.hasOwnProperty, @@ -1179,7 +1143,7 @@ }).call(this); -},{"../declaration":5}],12:[function(require,module,exports){ +},{"../declaration":6}],14:[function(require,module,exports){ (function() { var BreakInside, Declaration, __hasProp = {}.hasOwnProperty, @@ -1235,7 +1199,40 @@ }).call(this); -},{"../declaration":5}],13:[function(require,module,exports){ +},{"../declaration":6}],15:[function(require,module,exports){ +(function() { + var CrispEdges, Value, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Value = require('../value'); + + CrispEdges = (function(_super) { + __extends(CrispEdges, _super); + + function CrispEdges() { + return CrispEdges.__super__.constructor.apply(this, arguments); + } + + CrispEdges.names = ['crisp-edges']; + + CrispEdges.prototype.replace = function(string, prefix) { + if (prefix === '-webkit-') { + return string.replace(this.regexp(), '$1-webkit-optimize-contrast'); + } else { + return CrispEdges.__super__.replace.apply(this, arguments); + } + }; + + return CrispEdges; + + })(Value); + + module.exports = CrispEdges; + +}).call(this); + +},{"../value":47}],16:[function(require,module,exports){ (function() { var DisplayFlex, OldDisplayFlex, OldValue, Value, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1250,8 +1247,9 @@ OldDisplayFlex = (function(_super) { __extends(OldDisplayFlex, _super); - function OldDisplayFlex(name) { - this.name = name; + function OldDisplayFlex(unprefixed, prefixed) { + this.unprefixed = unprefixed; + this.prefixed = prefixed; } OldDisplayFlex.prototype.check = function(value) { @@ -1292,7 +1290,7 @@ var prefixed; prefixed = this.prefixed(prefix); if (prefixed) { - return new OldValue(prefixed); + return new OldValue(this.name, prefixed); } }; @@ -1304,7 +1302,7 @@ }).call(this); -},{"../old-value":36,"../value":43,"./flex-spec":22}],14:[function(require,module,exports){ +},{"../old-value":39,"../value":47,"./flex-spec":25}],17:[function(require,module,exports){ (function() { var FillAvailable, OldValue, Value, __hasProp = {}.hasOwnProperty, @@ -1333,7 +1331,7 @@ FillAvailable.prototype.old = function(prefix) { if (prefix === '-moz-') { - return new OldValue('-moz-available'); + return new OldValue(this.name, '-moz-available'); } else { return FillAvailable.__super__.old.apply(this, arguments); } @@ -1347,14 +1345,44 @@ }).call(this); -},{"../old-value":36,"../value":43}],15:[function(require,module,exports){ +},{"../old-value":39,"../value":47}],18:[function(require,module,exports){ (function() { - var FilterValue, Value, + var FilterValue, OldFilterValue, OldValue, Value, utils, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + OldValue = require('../old-value'); + Value = require('../value'); + utils = require('../utils'); + + OldFilterValue = (function(_super) { + __extends(OldFilterValue, _super); + + function OldFilterValue() { + return OldFilterValue.__super__.constructor.apply(this, arguments); + } + + OldFilterValue.prototype.clean = function(decl) { + return decl.value = utils.editList(decl.value, (function(_this) { + return function(props) { + if (props.every(function(i) { + return i.indexOf(_this.unprefixed) !== 0; + })) { + return props; + } + return props.filter(function(i) { + return i.indexOf(_this.prefixed) === -1; + }); + }; + })(this)); + }; + + return OldFilterValue; + + })(OldValue); + FilterValue = (function(_super) { __extends(FilterValue, _super); @@ -1376,6 +1404,10 @@ } }; + FilterValue.prototype.old = function(prefix) { + return new OldFilterValue(this.name, prefix + this.name); + }; + return FilterValue; })(Value); @@ -1384,7 +1416,7 @@ }).call(this); -},{"../value":43}],16:[function(require,module,exports){ +},{"../old-value":39,"../utils":46,"../value":47}],19:[function(require,module,exports){ (function() { var Declaration, Filter, __hasProp = {}.hasOwnProperty, @@ -1415,7 +1447,7 @@ }).call(this); -},{"../declaration":5}],17:[function(require,module,exports){ +},{"../declaration":6}],20:[function(require,module,exports){ (function() { var Declaration, FlexBasis, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1464,7 +1496,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],18:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],21:[function(require,module,exports){ (function() { var Declaration, FlexDirection, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1537,7 +1569,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],19:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],22:[function(require,module,exports){ (function() { var Declaration, FlexFlow, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1574,7 +1606,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],20:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],23:[function(require,module,exports){ (function() { var Declaration, Flex, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1617,7 +1649,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],21:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],24:[function(require,module,exports){ (function() { var Declaration, FlexShrink, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1666,7 +1698,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],22:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],25:[function(require,module,exports){ (function() { module.exports = function(prefix) { var spec; @@ -1679,7 +1711,46 @@ }).call(this); -},{}],23:[function(require,module,exports){ +},{}],26:[function(require,module,exports){ +(function() { + var FlexValues, OldValue, Value, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + OldValue = require('../old-value'); + + Value = require('../value'); + + FlexValues = (function(_super) { + __extends(FlexValues, _super); + + function FlexValues() { + return FlexValues.__super__.constructor.apply(this, arguments); + } + + FlexValues.names = ['flex', 'flex-grow', 'flex-shrink', 'flex-basis']; + + FlexValues.prototype.prefixed = function(prefix) { + return this.all.prefixed(this.name, prefix); + }; + + FlexValues.prototype.replace = function(string, prefix) { + return string.replace(this.regexp(), '$1' + this.prefixed(prefix) + '$3'); + }; + + FlexValues.prototype.old = function(prefix) { + return new OldValue(this.name, this.prefixed(prefix)); + }; + + return FlexValues; + + })(Value); + + module.exports = FlexValues; + +}).call(this); + +},{"../old-value":39,"../value":47}],27:[function(require,module,exports){ (function() { var Declaration, FlexWrap, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1714,7 +1785,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],24:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],28:[function(require,module,exports){ (function() { var Declaration, Flex, flexSpec, __hasProp = {}.hasOwnProperty, @@ -1772,7 +1843,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],25:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],29:[function(require,module,exports){ (function() { var Fullscreen, Selector, __hasProp = {}.hasOwnProperty, @@ -1807,7 +1878,7 @@ }).call(this); -},{"../selector":40}],26:[function(require,module,exports){ +},{"../selector":44}],30:[function(require,module,exports){ (function() { var Gradient, OldValue, Value, isDirection, list, utils, __hasProp = {}.hasOwnProperty, @@ -2012,12 +2083,24 @@ type = this.name === 'linear-gradient' ? 'linear' : 'radial'; string = '-gradient'; regexp = utils.regexp("-webkit-(" + type + "-gradient|gradient\\(\\s*" + type + ")", false); - return new OldValue(prefix + this.name, string, regexp); + return new OldValue(this.name, prefix + this.name, string, regexp); } else { return Gradient.__super__.old.apply(this, arguments); } }; + Gradient.prototype.add = function(decl, prefix) { + var prop; + prop = decl.prop; + if (prop === 'list-style' || prop === 'list-style-image' || prop === 'content') { + if (prefix === '-webkit-' || prefix === '-webkit- old') { + return Gradient.__super__.add.apply(this, arguments); + } + } else { + return Gradient.__super__.add.apply(this, arguments); + } + }; + return Gradient; })(Value); @@ -2026,7 +2109,40 @@ }).call(this); -},{"../old-value":36,"../utils":42,"../value":43,"postcss/lib/list":87}],27:[function(require,module,exports){ +},{"../old-value":39,"../utils":46,"../value":47,"postcss/lib/list":102}],31:[function(require,module,exports){ +(function() { + var Declaration, InlineLogical, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Declaration = require('../declaration'); + + InlineLogical = (function(_super) { + __extends(InlineLogical, _super); + + function InlineLogical() { + return InlineLogical.__super__.constructor.apply(this, arguments); + } + + InlineLogical.names = ['border-inline-start', 'border-inline-end', 'margin-inline-start', 'margin-inline-end', 'padding-inline-start', 'padding-inline-end', 'border-start', 'border-end', 'margin-start', 'margin-end', 'padding-start', 'padding-end']; + + InlineLogical.prototype.prefixed = function(prop, prefix) { + return prefix + prop.replace('-inline', ''); + }; + + InlineLogical.prototype.normalize = function(prop) { + return prop.replace(/(margin|padding|border)-(start|end)/, '$1-inline-$2'); + }; + + return InlineLogical; + + })(Declaration); + + module.exports = InlineLogical; + +}).call(this); + +},{"../declaration":6}],32:[function(require,module,exports){ (function() { var Declaration, JustifyContent, flexSpec, __hasProp = {}.hasOwnProperty, @@ -2090,7 +2206,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],28:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],33:[function(require,module,exports){ (function() { var Declaration, Order, flexSpec, __hasProp = {}.hasOwnProperty, @@ -2144,7 +2260,7 @@ }).call(this); -},{"../declaration":5,"./flex-spec":22}],29:[function(require,module,exports){ +},{"../declaration":6,"./flex-spec":25}],34:[function(require,module,exports){ (function() { var Placeholder, Selector, __hasProp = {}.hasOwnProperty, @@ -2185,7 +2301,7 @@ }).call(this); -},{"../selector":40}],30:[function(require,module,exports){ +},{"../selector":44}],35:[function(require,module,exports){ (function() { var Declaration, TransformDecl, __hasProp = {}.hasOwnProperty, @@ -2253,7 +2369,7 @@ }).call(this); -},{"../declaration":5}],31:[function(require,module,exports){ +},{"../declaration":6}],36:[function(require,module,exports){ (function() { var TransformValue, Value, __hasProp = {}.hasOwnProperty, @@ -2286,46 +2402,7 @@ }).call(this); -},{"../value":43}],32:[function(require,module,exports){ -(function() { - var OldValue, Transition, Value, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - OldValue = require('../old-value'); - - Value = require('../value'); - - Transition = (function(_super) { - __extends(Transition, _super); - - function Transition() { - return Transition.__super__.constructor.apply(this, arguments); - } - - Transition.names = ['flex', 'flex-grow', 'flex-shrink', 'flex-basis']; - - Transition.prototype.prefixed = function(prefix) { - return this.all.prefixed(this.name, prefix); - }; - - Transition.prototype.replace = function(string, prefix) { - return string.replace(this.regexp(), '$1' + this.prefixed(prefix) + '$3'); - }; - - Transition.prototype.old = function(prefix) { - return new OldValue(this.prefixed(prefix)); - }; - - return Transition; - - })(Value); - - module.exports = Transition; - -}).call(this); - -},{"../old-value":36,"../value":43}],33:[function(require,module,exports){ +},{"../value":47}],37:[function(require,module,exports){ (function() { var capitalize, names, prefix; @@ -2340,7 +2417,8 @@ op_mini: 'Opera Mini', op_mob: 'Opera Mobile', and_chr: 'Chrome for Android', - and_ff: 'Firefox for Android' + and_ff: 'Firefox for Android', + and_uc: 'UC for Android' }; prefix = function(name, transition, prefixes) { @@ -2448,60 +2526,7 @@ }).call(this); -},{}],34:[function(require,module,exports){ -(function() { - var Keyframes, Prefixer, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - Prefixer = require('./prefixer'); - - Keyframes = (function(_super) { - __extends(Keyframes, _super); - - function Keyframes() { - return Keyframes.__super__.constructor.apply(this, arguments); - } - - Keyframes.prototype.add = function(atRule, prefix) { - var already, cloned, prefixed; - prefixed = prefix + atRule.name; - already = atRule.parent.some(function(i) { - return i.name === prefixed && i.params === atRule.params; - }); - if (already) { - return; - } - cloned = this.clone(atRule, { - name: prefixed - }); - return atRule.parent.insertBefore(atRule, cloned); - }; - - Keyframes.prototype.process = function(node) { - var parent, prefix, _i, _len, _ref, _results; - parent = this.parentPrefix(node); - _ref = this.prefixes; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - prefix = _ref[_i]; - if (parent && parent !== prefix) { - continue; - } - _results.push(this.add(node, prefix)); - } - return _results; - }; - - return Keyframes; - - })(Prefixer); - - module.exports = Keyframes; - -}).call(this); - -},{"./prefixer":37}],35:[function(require,module,exports){ +},{}],38:[function(require,module,exports){ (function() { var OldSelector; @@ -2524,7 +2549,7 @@ OldSelector.prototype.isHack = function(rule) { var before, index, regexp, rules, some, string, _i, _len, _ref, _ref1; index = rule.parent.index(rule) + 1; - rules = rule.parent.childs; + rules = rule.parent.nodes; while (index < rules.length) { before = rules[index].selector; if (!before) { @@ -2571,19 +2596,20 @@ }).call(this); -},{}],36:[function(require,module,exports){ +},{}],39:[function(require,module,exports){ (function() { var OldValue, utils; utils = require('./utils'); OldValue = (function() { - function OldValue(name, string, regexp) { - this.name = name; + function OldValue(unprefixed, prefixed, string, regexp) { + this.unprefixed = unprefixed; + this.prefixed = prefixed; this.string = string; this.regexp = regexp; - this.regexp || (this.regexp = utils.regexp(this.name)); - this.string || (this.string = this.name); + this.regexp || (this.regexp = utils.regexp(this.prefixed)); + this.string || (this.string = this.prefixed); } OldValue.prototype.check = function(value) { @@ -2602,15 +2628,42 @@ }).call(this); -},{"./utils":42}],37:[function(require,module,exports){ +},{"./utils":46}],40:[function(require,module,exports){ (function() { - var Browsers, Prefixer, utils, vendor; + var Browsers, Prefixer, clone, utils, vendor, + __hasProp = {}.hasOwnProperty; Browsers = require('./browsers'); + utils = require('./utils'); + vendor = require('postcss/lib/vendor'); - utils = require('./utils'); + clone = function(obj, parent) { + var cloned, i, value; + if (typeof obj !== 'object') { + return obj; + } + cloned = new obj.constructor(); + for (i in obj) { + if (!__hasProp.call(obj, i)) continue; + value = obj[i]; + if (i === 'parent' && typeof value === 'object') { + if (parent) { + cloned[i] = parent; + } + } else if (i === 'source') { + cloned[i] = value; + } else if (value instanceof Array) { + cloned[i] = value.map(function(i) { + return clone(i, cloned); + }); + } else if (i !== '_autoprefixerPrefix' && i !== '_autoprefixerValues') { + cloned[i] = clone(value, cloned); + } + } + return cloned; + }; Prefixer = (function() { Prefixer.hack = function(klass) { @@ -2636,13 +2689,11 @@ }; Prefixer.clone = function(node, overrides) { - var cloned; - cloned = node.clone(overrides); - if (node.type === 'decl') { - cloned.between = node.between; + var cloned, name; + cloned = clone(node); + for (name in overrides) { + cloned[name] = overrides[name]; } - delete cloned._autoprefixerPrefix; - delete cloned._autoprefixerValues; return cloned; }; @@ -2698,19 +2749,15 @@ }).call(this); -},{"./browsers":4,"./utils":42,"postcss/lib/vendor":98}],38:[function(require,module,exports){ +},{"./browsers":5,"./utils":46,"postcss/lib/vendor":113}],41:[function(require,module,exports){ (function() { - var Browsers, Declaration, Keyframes, Prefixes, Processor, Selector, Supports, Value, declsCache, utils, vendor; - - utils = require('./utils'); - - vendor = require('postcss/lib/vendor'); + var AtRule, Browsers, Declaration, Prefixes, Processor, Resolution, Selector, Supports, Value, declsCache, utils, vendor; Declaration = require('./declaration'); - Processor = require('./processor'); + Resolution = require('./resolution'); - Keyframes = require('./keyframes'); + Processor = require('./processor'); Supports = require('./supports'); @@ -2718,8 +2765,14 @@ Selector = require('./selector'); + AtRule = require('./at-rule'); + Value = require('./value'); + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + Selector.hack(require('./hacks/fullscreen')); Selector.hack(require('./hacks/placeholder')); @@ -2752,6 +2805,10 @@ Declaration.hack(require('./hacks/border-radius')); + Declaration.hack(require('./hacks/block-logical')); + + Declaration.hack(require('./hacks/inline-logical')); + Declaration.hack(require('./hacks/transform-decl')); Declaration.hack(require('./hacks/flex-direction')); @@ -2762,7 +2819,9 @@ Value.hack(require('./hacks/gradient')); - Value.hack(require('./hacks/transition')); + Value.hack(require('./hacks/crisp-edges')); + + Value.hack(require('./hacks/flex-values')); Value.hack(require('./hacks/display-flex')); @@ -2885,8 +2944,10 @@ _ref = selected.add; for (name in _ref) { prefixes = _ref[name]; - if (name === '@keyframes') { - add[name] = new Keyframes(name, prefixes, this); + if (name === '@keyframes' || name === '@viewport') { + add[name] = new AtRule(name, prefixes, this); + } else if (name === '@resolution') { + add[name] = new Resolution(name, prefixes, this); } else if (this.data[name].selector) { add.selectors.push(Selector.load(name, prefixes, this)); } else { @@ -2922,7 +2983,7 @@ prefix = prefixes[_j]; remove.selectors.push(selector.old(prefix)); } - } else if (name[0] === '@') { + } else if (name === '@keyframes' || name === '@viewport') { for (_k = 0, _len2 = prefixes.length; _k < _len2; _k++) { prefix = prefixes[_k]; prefixed = '@' + prefix + name.slice(1); @@ -2930,6 +2991,8 @@ remove: true }; } + } else if (name === '@resolution') { + remove[name] = new Resolution(name, prefixes, this); } else { props = this.data[name].transition ? this.transitionProps : this.data[name].props; if (props) { @@ -3006,14 +3069,14 @@ var checker, index, length, rule, unprefixed; rule = decl.parent; index = rule.index(decl); - length = rule.childs.length; + length = rule.nodes.length; unprefixed = this.unprefixed(decl.prop); checker = (function(_this) { return function(step, callback) { var other; index += step; while (index >= 0 && index < length) { - other = rule.childs[index]; + other = rule.nodes[index]; if (other.type === 'decl') { if (step === -1 && other.prop === unprefixed) { if (!Browsers.withPrefix(other.value)) { @@ -3054,7 +3117,7 @@ }).call(this); -},{"./browsers":4,"./declaration":5,"./hacks/align-content":6,"./hacks/align-items":7,"./hacks/align-self":8,"./hacks/background-size":9,"./hacks/border-image":10,"./hacks/border-radius":11,"./hacks/break-inside":12,"./hacks/display-flex":13,"./hacks/fill-available":14,"./hacks/filter":16,"./hacks/filter-value":15,"./hacks/flex":24,"./hacks/flex-basis":17,"./hacks/flex-direction":18,"./hacks/flex-flow":19,"./hacks/flex-grow":20,"./hacks/flex-shrink":21,"./hacks/flex-wrap":23,"./hacks/fullscreen":25,"./hacks/gradient":26,"./hacks/justify-content":27,"./hacks/order":28,"./hacks/placeholder":29,"./hacks/transform-decl":30,"./hacks/transform-value":31,"./hacks/transition":32,"./keyframes":34,"./processor":39,"./selector":40,"./supports":41,"./utils":42,"./value":43,"postcss/lib/vendor":98}],39:[function(require,module,exports){ +},{"./at-rule":4,"./browsers":5,"./declaration":6,"./hacks/align-content":7,"./hacks/align-items":8,"./hacks/align-self":9,"./hacks/background-size":10,"./hacks/block-logical":11,"./hacks/border-image":12,"./hacks/border-radius":13,"./hacks/break-inside":14,"./hacks/crisp-edges":15,"./hacks/display-flex":16,"./hacks/fill-available":17,"./hacks/filter":19,"./hacks/filter-value":18,"./hacks/flex":28,"./hacks/flex-basis":20,"./hacks/flex-direction":21,"./hacks/flex-flow":22,"./hacks/flex-grow":23,"./hacks/flex-shrink":24,"./hacks/flex-values":26,"./hacks/flex-wrap":27,"./hacks/fullscreen":29,"./hacks/gradient":30,"./hacks/inline-logical":31,"./hacks/justify-content":32,"./hacks/order":33,"./hacks/placeholder":34,"./hacks/transform-decl":35,"./hacks/transform-value":36,"./processor":42,"./resolution":43,"./selector":44,"./supports":45,"./utils":46,"./value":47,"postcss/lib/vendor":113}],42:[function(require,module,exports){ (function() { var Processor, Value, utils, vendor; @@ -3070,8 +3133,10 @@ } Processor.prototype.add = function(css) { - var keyframes, supports; + var keyframes, resolution, supports, viewport; + resolution = this.prefixes.add['@resolution']; keyframes = this.prefixes.add['@keyframes']; + viewport = this.prefixes.add['@viewport']; supports = this.prefixes.add['@supports']; css.eachAtRule((function(_this) { return function(rule) { @@ -3079,10 +3144,18 @@ if (!_this.disabled(rule)) { return keyframes != null ? keyframes.process(rule) : void 0; } + } else if (rule.name === 'viewport') { + if (!_this.disabled(rule)) { + return viewport != null ? viewport.process(rule) : void 0; + } } else if (rule.name === 'supports') { if (!_this.disabled(rule)) { return supports.process(rule); } + } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) { + if (!_this.disabled(rule)) { + return resolution != null ? resolution.process(rule) : void 0; + } } }; })(this)); @@ -3130,13 +3203,16 @@ }; Processor.prototype.remove = function(css) { - var checker, _i, _len, _ref; + var checker, resolution, _i, _len, _ref; + resolution = this.prefixes.remove['@resolution']; css.eachAtRule((function(_this) { return function(rule, i) { if (_this.prefixes.remove['@' + rule.name]) { if (!_this.disabled(rule)) { return rule.parent.remove(i); } + } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) { + return resolution != null ? resolution.clean(rule) : void 0; } }; })(this)); @@ -3165,8 +3241,8 @@ notHack = _this.prefixes.group(decl).down(function(other) { return other.prop === unprefixed; }); - if (notHack) { - if (decl.before.indexOf("\n") > -1) { + if (notHack && !_this.withHackValue(decl)) { + if (decl.style('before').indexOf("\n") > -1) { _this.reduceSpaces(decl); } rule.remove(i); @@ -3177,19 +3253,32 @@ for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { checker = _ref2[_j]; if (checker.check(decl.value)) { - rule.remove(i); - return; + unprefixed = checker.unprefixed; + notHack = _this.prefixes.group(decl).down(function(other) { + return other.value.indexOf(unprefixed) !== -1; + }); + if (notHack) { + rule.remove(i); + return; + } else if (checker.clean) { + checker.clean(decl); + return; + } } } }; })(this)); }; + Processor.prototype.withHackValue = function(decl) { + return decl.prop === '-webkit-background-clip' && decl.value === 'text'; + }; + Processor.prototype.disabled = function(node) { var status; if (node._autoprefixerDisabled != null) { return node._autoprefixerDisabled; - } else if (node.childs) { + } else if (node.nodes) { status = void 0; node.each(function(i) { if (i.type !== 'comment') { @@ -3218,12 +3307,12 @@ if (stop) { return; } - parts = decl.before.split("\n"); + parts = decl.style('before').split("\n"); prevMin = parts[parts.length - 1].length; diff = false; return this.prefixes.group(decl).down(function(other) { var last; - parts = other.before.split("\n"); + parts = other.style('before').split("\n"); last = parts.length - 1; if (parts[last].length > prevMin) { if (diff === false) { @@ -3243,7 +3332,105 @@ }).call(this); -},{"./utils":42,"./value":43,"postcss/lib/vendor":98}],40:[function(require,module,exports){ +},{"./utils":46,"./value":47,"postcss/lib/vendor":113}],43:[function(require,module,exports){ +(function() { + var Prefixer, Resolution, n2f, regexp, split, utils, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Prefixer = require('./prefixer'); + + utils = require('./utils'); + + n2f = require('num2fraction'); + + regexp = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpi)/gi; + + split = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpi)/i; + + Resolution = (function(_super) { + __extends(Resolution, _super); + + function Resolution() { + return Resolution.__super__.constructor.apply(this, arguments); + } + + Resolution.prototype.prefixName = function(prefix, name) { + return name = prefix === '-moz-' ? name + '--moz-device-pixel-ratio' : prefix + name + '-device-pixel-ratio'; + }; + + Resolution.prototype.prefixQuery = function(prefix, name, colon, value, units) { + if (units === 'dpi') { + value = Number(value / 96); + } + if (prefix === '-o-') { + value = n2f(value); + } + return this.prefixName(prefix, name) + colon + value; + }; + + Resolution.prototype.clean = function(rule) { + var prefix, _i, _len, _ref; + if (!this.bad) { + this.bad = []; + _ref = this.prefixes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + prefix = _ref[_i]; + this.bad.push(this.prefixName(prefix, 'min')); + this.bad.push(this.prefixName(prefix, 'max')); + } + } + return rule.params = utils.editList(rule.params, (function(_this) { + return function(queries) { + return queries.filter(function(query) { + return _this.bad.every(function(i) { + return query.indexOf(i) === -1; + }); + }); + }; + })(this)); + }; + + Resolution.prototype.process = function(rule) { + var parent, prefixes; + parent = this.parentPrefix(rule); + prefixes = parent ? [parent] : this.prefixes; + return rule.params = utils.editList(rule.params, (function(_this) { + return function(origin, prefixed) { + var prefix, processed, query, _i, _j, _len, _len1; + for (_i = 0, _len = origin.length; _i < _len; _i++) { + query = origin[_i]; + if (query.indexOf('min-resolution') === -1 && query.indexOf('max-resolution') === -1) { + prefixed.push(query); + continue; + } + for (_j = 0, _len1 = prefixes.length; _j < _len1; _j++) { + prefix = prefixes[_j]; + if (prefix !== '-moz-' || query.indexOf('dppx') !== -1) { + processed = query.replace(regexp, function(str) { + var parts; + parts = str.match(split); + return _this.prefixQuery(prefix, parts[1], parts[2], parts[3], parts[4]); + }); + prefixed.push(processed); + } + } + prefixed.push(query); + } + return utils.uniq(prefixed); + }; + })(this)); + }; + + return Resolution; + + })(Prefixer); + + module.exports = Resolution; + +}).call(this); + +},{"./prefixer":40,"./utils":46,"num2fraction":95}],44:[function(require,module,exports){ (function() { var Browsers, OldSelector, Prefixer, Selector, utils, __hasProp = {}.hasOwnProperty, @@ -3310,7 +3497,7 @@ var before, index, key, prefixed, some; index = rule.parent.index(rule) - 1; while (index >= 0) { - before = rule.parent.childs[index]; + before = rule.parent.nodes[index]; if (before.type !== 'rule') { return false; } @@ -3362,7 +3549,7 @@ }).call(this); -},{"./browsers":4,"./old-selector":35,"./prefixer":37,"./utils":42}],41:[function(require,module,exports){ +},{"./browsers":5,"./old-selector":38,"./prefixer":40,"./utils":46}],45:[function(require,module,exports){ (function() { var Prefixes, Supports, Value, findCondition, findDecl, list, postcss, split, utils; @@ -3407,7 +3594,7 @@ prefixer.process(rule.first); } } - _ref = rule.childs; + _ref = rule.nodes; for (_i = 0, _len = _ref.length; _i < _len; _i++) { decl = _ref[_i]; _ref1 = this.all.values('add', prop); @@ -3417,7 +3604,7 @@ } Value.save(this.all, decl); } - return rule.childs; + return rule.nodes; }; Supports.prototype.clean = function(params) { @@ -3479,8 +3666,12 @@ }).call(this); -},{"./prefixes":38,"./utils":42,"./value":43,"postcss":92,"postcss/lib/list":87}],42:[function(require,module,exports){ +},{"./prefixes":41,"./utils":46,"./value":47,"postcss":107,"postcss/lib/list":102}],46:[function(require,module,exports){ (function() { + var list; + + list = require('postcss/lib/list'); + module.exports = { error: function(text) { var err; @@ -3517,12 +3708,24 @@ word = this.escapeRegexp(word); } return RegExp("(^|[\\s,(])(" + word + "($|[\\s(,]))", "gi"); + }, + editList: function(value, callback) { + var changed, join, origin; + origin = list.comma(value); + changed = callback(origin, []); + if (origin === changed) { + return value; + } else { + join = value.match(/,\s*/); + join = join ? join[0] : ', '; + return changed.join(join); + } } }; }).call(this); -},{}],43:[function(require,module,exports){ +},{"postcss/lib/list":102}],47:[function(require,module,exports){ (function() { var OldValue, Prefixer, Value, utils, vendor, __hasProp = {}.hasOwnProperty, @@ -3568,10 +3771,14 @@ return i.prop === decl.prop && i.value.replace(/\s+/, ' ') === trimmed; }); if (!already) { - cloned = this.clone(decl, { - value: value - }); - _results.push(decl.parent.insertBefore(decl, cloned)); + if (value.indexOf('-webkit-filter') !== -1 && (decl.prop === 'transition' || decl.prop === 'trasition-property')) { + _results.push(decl.value = value); + } else { + cloned = this.clone(decl, { + value: value + }); + _results.push(decl.parent.insertBefore(decl, cloned)); + } } else { _results.push(void 0); } @@ -3612,7 +3819,7 @@ }; Value.prototype.old = function(prefix) { - return new OldValue(prefix + this.name); + return new OldValue(this.name, prefix + this.name); }; return Value; @@ -3623,9 +3830,9 @@ }).call(this); -},{"./old-value":36,"./prefixer":37,"./utils":42,"postcss/lib/vendor":98}],44:[function(require,module,exports){ +},{"./old-value":39,"./prefixer":40,"./utils":46,"postcss/lib/vendor":113}],48:[function(require,module,exports){ -},{}],45:[function(require,module,exports){ +},{}],49:[function(require,module,exports){ /*! * The buffer module from node.js, for the browser. * @@ -3638,11 +3845,12 @@ var ieee754 = require('ieee754') var isArray = require('is-array') exports.Buffer = Buffer -exports.SlowBuffer = Buffer +exports.SlowBuffer = SlowBuffer exports.INSPECT_MAX_BYTES = 50 Buffer.poolSize = 8192 // not used by this implementation var kMaxLength = 0x3fffffff +var rootParent = {} /** * If `Buffer.TYPED_ARRAY_SUPPORT`: @@ -3702,8 +3910,6 @@ function Buffer (subject, encoding, noZero) { if (type === 'number') length = subject > 0 ? subject >>> 0 : 0 else if (type === 'string') { - if (encoding === 'base64') - subject = base64clean(subject) length = Buffer.byteLength(subject, encoding) } else if (type === 'object' && subject !== null) { // assume object is array-like if (subject.type === 'Buffer' && isArray(subject.data)) @@ -3712,7 +3918,7 @@ function Buffer (subject, encoding, noZero) { } else throw new TypeError('must start with number, buffer, array or string') - if (this.length > kMaxLength) + if (length > kMaxLength) throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength.toString(16) + ' bytes') @@ -3748,6 +3954,18 @@ function Buffer (subject, encoding, noZero) { } } + if (length > 0 && length <= Buffer.poolSize) + buf.parent = rootParent + + return buf +} + +function SlowBuffer(subject, encoding, noZero) { + if (!(this instanceof SlowBuffer)) + return new SlowBuffer(subject, encoding, noZero) + + var buf = new Buffer(subject, encoding, noZero) + delete buf.parent return buf } @@ -3898,7 +4116,7 @@ Buffer.prototype.toString = function (encoding, start, end) { } Buffer.prototype.equals = function (b) { - if(!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') return Buffer.compare(this, b) === 0 } @@ -3958,7 +4176,7 @@ function hexWrite (buf, string, offset, length) { } function utf8Write (buf, string, offset, length) { - var charsWritten = blitBuffer(utf8ToBytes(string), buf, offset, length) + var charsWritten = blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) return charsWritten } @@ -3977,7 +4195,7 @@ function base64Write (buf, string, offset, length) { } function utf16leWrite (buf, string, offset, length) { - var charsWritten = blitBuffer(utf16leToBytes(string), buf, offset, length) + var charsWritten = blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length, 2) return charsWritten } @@ -3997,6 +4215,10 @@ Buffer.prototype.write = function (string, offset, length, encoding) { } offset = Number(offset) || 0 + + if (length < 0 || offset < 0 || offset > this.length) + throw new RangeError('attempt to write outside buffer bounds'); + var remaining = this.length - offset if (!length) { length = remaining @@ -4075,13 +4297,19 @@ function asciiSlice (buf, start, end) { end = Math.min(buf.length, end) for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i]) + ret += String.fromCharCode(buf[i] & 0x7F) } return ret } function binarySlice (buf, start, end) { - return asciiSlice(buf, start, end) + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret } function hexSlice (buf, start, end) { @@ -4130,16 +4358,21 @@ Buffer.prototype.slice = function (start, end) { if (end < start) end = start + var newBuf if (Buffer.TYPED_ARRAY_SUPPORT) { - return Buffer._augment(this.subarray(start, end)) + newBuf = Buffer._augment(this.subarray(start, end)) } else { var sliceLen = end - start - var newBuf = new Buffer(sliceLen, undefined, true) + newBuf = new Buffer(sliceLen, undefined, true) for (var i = 0; i < sliceLen; i++) { newBuf[i] = this[i + start] } - return newBuf } + + if (newBuf.length) + newBuf.parent = this.parent || this + + return newBuf } /* @@ -4152,6 +4385,35 @@ function checkOffset (offset, ext, length) { throw new RangeError('Trying to access beyond buffer length') } +Buffer.prototype.readUIntLE = function (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) + checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) + val += this[offset + i] * mul + + return val +} + +Buffer.prototype.readUIntBE = function (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) + checkOffset(offset, byteLength, this.length) + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) + val += this[offset + --byteLength] * mul; + + return val +} + Buffer.prototype.readUInt8 = function (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) @@ -4190,6 +4452,44 @@ Buffer.prototype.readUInt32BE = function (offset, noAssert) { this[offset + 3]) } +Buffer.prototype.readIntLE = function (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) + checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) + val += this[offset + i] * mul + mul *= 0x80 + + if (val >= mul) + val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) + checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) + val += this[offset + --i] * mul + mul *= 0x80 + + if (val >= mul) + val -= Math.pow(2, 8 * byteLength) + + return val +} + Buffer.prototype.readInt8 = function (offset, noAssert) { if (!noAssert) checkOffset(offset, 1, this.length) @@ -4258,8 +4558,40 @@ Buffer.prototype.readDoubleBE = function (offset, noAssert) { function checkInt (buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') - if (value > max || value < min) throw new TypeError('value is out of bounds') - if (offset + ext > buf.length) throw new TypeError('index out of range') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} + +Buffer.prototype.writeUIntLE = function (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) + checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) + this[offset + i] = (value / mul) >>> 0 & 0xFF + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) + checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) + this[offset + i] = (value / mul) >>> 0 & 0xFF + + return offset + byteLength } Buffer.prototype.writeUInt8 = function (value, offset, noAssert) { @@ -4339,6 +4671,50 @@ Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) { return offset + 4 } +Buffer.prototype.writeIntLE = function (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt(this, + value, + offset, + byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1)) + } + + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkInt(this, + value, + offset, + byteLength, + Math.pow(2, 8 * byteLength - 1) - 1, + -Math.pow(2, 8 * byteLength - 1)) + } + + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + + return offset + byteLength +} + Buffer.prototype.writeInt8 = function (value, offset, noAssert) { value = +value offset = offset >>> 0 @@ -4404,8 +4780,9 @@ Buffer.prototype.writeInt32BE = function (value, offset, noAssert) { } function checkIEEE754 (buf, value, offset, ext, max, min) { - if (value > max || value < min) throw new TypeError('value is out of bounds') - if (offset + ext > buf.length) throw new TypeError('index out of range') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') } function writeFloat (buf, value, offset, littleEndian, noAssert) { @@ -4444,18 +4821,19 @@ Buffer.prototype.copy = function (target, target_start, start, end) { if (!start) start = 0 if (!end && end !== 0) end = this.length + if (target_start >= target.length) target_start = target.length if (!target_start) target_start = 0 + if (end > 0 && end < start) end = start // Copy 0 bytes; we're done - if (end === start) return - if (target.length === 0 || source.length === 0) return + if (end === start) return 0 + if (target.length === 0 || source.length === 0) return 0 // Fatal error conditions - if (end < start) throw new TypeError('sourceEnd < sourceStart') - if (target_start < 0 || target_start >= target.length) - throw new TypeError('targetStart out of bounds') - if (start < 0 || start >= source.length) throw new TypeError('sourceStart out of bounds') - if (end < 0 || end > source.length) throw new TypeError('sourceEnd out of bounds') + if (target_start < 0) + throw new RangeError('targetStart out of bounds') + if (start < 0 || start >= source.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') // Are we oob? if (end > this.length) @@ -4472,6 +4850,8 @@ Buffer.prototype.copy = function (target, target_start, start, end) { } else { target._set(this.subarray(start, start + len), target_start) } + + return len } // fill(value, start=0, end=buffer.length) @@ -4480,14 +4860,14 @@ Buffer.prototype.fill = function (value, start, end) { if (!start) start = 0 if (!end) end = this.length - if (end < start) throw new TypeError('end < start') + if (end < start) throw new RangeError('end < start') // Fill 0 bytes; we're done if (end === start) return if (this.length === 0) return - if (start < 0 || start >= this.length) throw new TypeError('start out of bounds') - if (end < 0 || end > this.length) throw new TypeError('end out of bounds') + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') var i if (typeof value === 'number') { @@ -4553,11 +4933,15 @@ Buffer._augment = function (arr) { arr.compare = BP.compare arr.copy = BP.copy arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE arr.readUInt8 = BP.readUInt8 arr.readUInt16LE = BP.readUInt16LE arr.readUInt16BE = BP.readUInt16BE arr.readUInt32LE = BP.readUInt32LE arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE arr.readInt8 = BP.readInt8 arr.readInt16LE = BP.readInt16LE arr.readInt16BE = BP.readInt16BE @@ -4568,10 +4952,14 @@ Buffer._augment = function (arr) { arr.readDoubleLE = BP.readDoubleLE arr.readDoubleBE = BP.readDoubleBE arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE arr.writeUInt16LE = BP.writeUInt16LE arr.writeUInt16BE = BP.writeUInt16BE arr.writeUInt32LE = BP.writeUInt32LE arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE arr.writeInt8 = BP.writeInt8 arr.writeInt16LE = BP.writeInt16LE arr.writeInt16BE = BP.writeInt16BE @@ -4588,11 +4976,13 @@ Buffer._augment = function (arr) { return arr } -var INVALID_BASE64_RE = /[^+\/0-9A-z]/g +var INVALID_BASE64_RE = /[^+\/0-9A-z\-]/g function base64clean (str) { // Node strips out invalid characters like \n and \t from the string, base64-js does not str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not while (str.length % 4 !== 0) { str = str + '=' @@ -4616,22 +5006,100 @@ function toHex (n) { return n.toString(16) } -function utf8ToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - var b = str.charCodeAt(i) - if (b <= 0x7F) { - byteArray.push(b) - } else { - var start = i - if (b >= 0xD800 && b <= 0xDFFF) i++ - var h = encodeURIComponent(str.slice(start, i+1)).substr(1).split('%') - for (var j = 0; j < h.length; j++) { - byteArray.push(parseInt(h[j], 16)) +function utf8ToBytes(string, units) { + var codePoint, length = string.length + var leadSurrogate = null + units = units || Infinity + var bytes = [] + var i = 0 + + for (; i 0xD7FF && codePoint < 0xE000) { + + // last char was a lead + if (leadSurrogate) { + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + else { + codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000 + leadSurrogate = null + } + } + + // no lead yet + else { + + // unexpected trail + if (codePoint > 0xDBFF) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // unpaired lead + else if (i + 1 === length) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + else { + leadSurrogate = codePoint + continue + } } } + + // valid bmp char, but last char was a lead + else if (leadSurrogate) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = null + } + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } + else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ); + } + else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ); + } + else if (codePoint < 0x200000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ); + } + else { + throw new Error('Invalid code point') + } } - return byteArray + + return bytes } function asciiToBytes (str) { @@ -4643,10 +5111,13 @@ function asciiToBytes (str) { return byteArray } -function utf16leToBytes (str) { +function utf16leToBytes (str, units) { var c, hi, lo var byteArray = [] for (var i = 0; i < str.length; i++) { + + if ((units -= 2) < 0) break + c = str.charCodeAt(i) hi = c >> 8 lo = c % 256 @@ -4658,10 +5129,11 @@ function utf16leToBytes (str) { } function base64ToBytes (str) { - return base64.toByteArray(str) + return base64.toByteArray(base64clean(str)) } -function blitBuffer (src, dst, offset, length) { +function blitBuffer (src, dst, offset, length, unitSize) { + if (unitSize) length -= length % unitSize; for (var i = 0; i < length; i++) { if ((i + offset >= dst.length) || (i >= src.length)) break @@ -4678,7 +5150,7 @@ function decodeUtf8Char (str) { } } -},{"base64-js":46,"ieee754":47,"is-array":48}],46:[function(require,module,exports){ +},{"base64-js":50,"ieee754":51,"is-array":52}],50:[function(require,module,exports){ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; ;(function (exports) { @@ -4693,12 +5165,16 @@ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var NUMBER = '0'.charCodeAt(0) var LOWER = 'a'.charCodeAt(0) var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) function decode (elt) { var code = elt.charCodeAt(0) - if (code === PLUS) + if (code === PLUS || + code === PLUS_URL_SAFE) return 62 // '+' - if (code === SLASH) + if (code === SLASH || + code === SLASH_URL_SAFE) return 63 // '/' if (code < NUMBER) return -1 //no match @@ -4800,7 +5276,7 @@ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; exports.fromByteArray = uint8ToBase64 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) -},{}],47:[function(require,module,exports){ +},{}],51:[function(require,module,exports){ exports.read = function(buffer, offset, isLE, mLen, nBytes) { var e, m, eLen = nBytes * 8 - mLen - 1, @@ -4886,7 +5362,7 @@ exports.write = function(buffer, value, offset, isLE, mLen, nBytes) { buffer[offset + i - d] |= s * 128; }; -},{}],48:[function(require,module,exports){ +},{}],52:[function(require,module,exports){ /** * isArray @@ -4921,7 +5397,7 @@ module.exports = isArray || function (val) { return !! val && '[object Array]' == str.call(val); }; -},{}],49:[function(require,module,exports){ +},{}],53:[function(require,module,exports){ (function (process){ // Copyright Joyent, Inc. and other Node contributors. // @@ -5149,73 +5625,43 @@ var substr = 'ab'.substr(-1) === 'b' ; }).call(this,require('_process')) -},{"_process":50}],50:[function(require,module,exports){ +},{"_process":54}],54:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; +var queue = []; +var draining = false; -process.nextTick = (function () { - var canSetImmediate = typeof window !== 'undefined' - && window.setImmediate; - var canMutationObserver = typeof window !== 'undefined' - && window.MutationObserver; - var canPost = typeof window !== 'undefined' - && window.postMessage && window.addEventListener - ; - - if (canSetImmediate) { - return function (f) { return window.setImmediate(f) }; +function drainQueue() { + if (draining) { + return; } - - var queue = []; - - if (canMutationObserver) { - var hiddenDiv = document.createElement("div"); - var observer = new MutationObserver(function () { - var queueList = queue.slice(); - queue.length = 0; - queueList.forEach(function (fn) { - fn(); - }); - }); - - observer.observe(hiddenDiv, { attributes: true }); - - return function nextTick(fn) { - if (!queue.length) { - hiddenDiv.setAttribute('yes', 'no'); - } - queue.push(fn); - }; + draining = true; + var currentQueue; + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + var i = -1; + while (++i < len) { + currentQueue[i](); + } + len = queue.length; } - - if (canPost) { - window.addEventListener('message', function (ev) { - var source = ev.source; - if ((source === window || source === null) && ev.data === 'process-tick') { - ev.stopPropagation(); - if (queue.length > 0) { - var fn = queue.shift(); - fn(); - } - } - }, true); - - return function nextTick(fn) { - queue.push(fn); - window.postMessage('process-tick', '*'); - }; + draining = false; +} +process.nextTick = function (fun) { + queue.push(fun); + if (!draining) { + setTimeout(drainQueue, 0); } - - return function nextTick(fn) { - setTimeout(fn, 0); - }; -})(); +}; process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; +process.version = ''; // empty string to avoid regexp issues function noop() {} @@ -5236,10 +5682,340 @@ process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; +process.umask = function() { return 0; }; -},{}],51:[function(require,module,exports){ -module.exports={"eras":{"e-35":"35 versions back","e-34":"34 versions back","e-33":"33 versions back","e-32":"32 versions back","e-31":"31 versions back","e-30":"30 versions back","e-29":"29 versions back","e-28":"28 versions back","e-27":"27 versions back","e-26":"26 versions back","e-25":"25 versions back","e-24":"24 versions back","e-23":"23 versions back","e-22":"22 versions back","e-21":"21 versions back","e-20":"20 versions back","e-19":"19 versions back","e-18":"18 versions back","e-17":"17 versions back","e-16":"16 versions back","e-15":"15 versions back","e-14":"14 versions back","e-13":"13 versions back","e-12":"12 versions back","e-11":"11 versions back","e-10":"10 versions back","e-9":"9 versions back","e-8":"8 versions back","e-7":"7 versions back","e-6":"6 versions back","e-5":"5 versions back","e-4":"4 versions back","e-3":"3 versions back","e-2":"2 versions back","e-1":"Previous version","e0":"Current","e1":"Near future","e2":"Farther future","e3":"3 versions ahead"},"agents":{"ie":{"browser":"IE","abbr":"IE","prefix":"ms","type":"desktop","usage_global":{"5.5":0.009298,"6":0.147553,"7":0.0772897,"8":3.18293,"9":2.12898,"10":2.01656,"11":7.39873},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.5","6","7","8","9","10","11",null,null,null]},"firefox":{"browser":"Firefox","abbr":"FF","prefix":"moz","type":"desktop","usage_global":{"2":0.013434,"3":0.053736,"3.5":0.013434,"3.6":0.094038,"4":0.026868,"5":0.013434,"6":0.013434,"7":0.013434,"8":0.040302,"9":0.020151,"10":0.033585,"11":0.033585,"12":0.073887,"13":0.026868,"14":0.033585,"15":0.047019,"16":0.060453,"17":0.047019,"18":0.040302,"19":0.033585,"20":0.040302,"21":0.047019,"22":0.040302,"23":0.053736,"24":0.13434,"25":0.073887,"26":0.080604,"27":0.120906,"28":0.080604,"29":0.13434,"30":0.288831,"31":0.577662,"32":8.23504,"33":1.79344,"34":0.120906,"35":0.006717,"36":0},"versions":[null,null,"2","3","3.5","3.6","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"]},"chrome":{"browser":"Chrome","abbr":"Chr.","prefix":"webkit","type":"desktop","usage_global":{"4":0.013434,"5":0.013434,"6":0.020151,"7":0.013434,"8":0.013434,"9":0.006717,"10":0.020151,"11":0.107472,"12":0.033585,"13":0.026868,"14":0.020151,"15":0.026868,"16":0.020151,"17":0.013434,"18":0.033585,"19":0.020151,"20":0.020151,"21":0.167925,"22":0.094038,"23":0.033585,"24":0.053736,"25":0.040302,"26":0.06717,"27":0.087321,"28":0.080604,"29":0.20151,"30":0.161208,"31":0.698568,"32":0.221661,"33":0.651549,"34":0.476907,"35":0.926946,"36":1.27623,"37":15.7312,"38":12.3929,"39":0.13434,"40":0.120906,"41":0,"42":0},"versions":["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"]},"safari":{"browser":"Safari","abbr":"Saf.","prefix":"webkit","type":"desktop","usage_global":{"3.1":0,"3.2":0.008692,"4":0.080604,"5":0.154491,"5.1":0.503775,"6":0.147774,"6.1":0.396303,"7":0.987399,"7.1":0.759021,"8":0.308982},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.1","3.2","4","5","5.1","6","6.1","7","7.1","8",null,null,null]},"opera":{"browser":"Opera","abbr":"Op.","prefix":"webkit","type":"desktop","usage_global":{"9.5-9.6":0.00685,"10.0-10.1":0.020151,"10.5":0.008392,"10.6":0.007296,"11":0.014996,"11.1":0.008219,"11.5":0.00685,"11.6":0.013434,"12":0.013434,"12.1":0.174642,"15":0.00685,"16":0.00685,"17":0.00685,"18":0.013434,"19":0.006717,"20":0.020151,"21":0.013434,"22":0.013434,"23":0.013434,"24":0.295548,"25":0.295548,"26":0,"27":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9.5-9.6","10.0-10.1","10.5","10.6","11","11.1","11.5","11.6","12","12.1","15","16","17","18","19","20","21","22","23","24","25","26","27",null],"prefix_exceptions":{"9.5-9.6":"o","10.0-10.1":"o","10.5":"o","10.6":"o","11":"o","11.1":"o","11.5":"o","11.6":"o","12":"o","12.1":"o"}},"ios_saf":{"browser":"iOS Safari","abbr":"iOS","prefix":"webkit","type":"mobile","usage_global":{"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0579149,"6.0-6.1":0.25979,"7.0-7.1":3.59321,"8":3.15802,"8.1":1.15499},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"3.2","4.0-4.1","4.2-4.3","5.0-5.1","6.0-6.1","7.0-7.1","8","8.1",null,null,null]},"op_mini":{"browser":"Opera Mini","abbr":"O.Mini","prefix":"o","type":"mobile","usage_global":{"5.0-8.0":2.81805},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"5.0-8.0",null,null,null]},"android":{"browser":"Android Browser","abbr":"And.","prefix":"webkit","type":"mobile","usage_global":{"2.1":0,"2.2":0.00831376,"2.3":0.191216,"3":0.00623532,"4":0.421923,"4.1":1.24152,"4.2-4.3":1.8602,"4.4":2.36873,"4.4.3-4.4.4":0.773179,"37":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"2.1","2.2","2.3","3","4","4.1","4.2-4.3","4.4","4.4.3-4.4.4","37",null,null]},"op_mob":{"browser":"Opera Mobile","abbr":"O.Mob","prefix":"o","type":"mobile","usage_global":{"10":0,"11.5":0,"12":0.00813289,"12.1":0.036598,"24":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10",null,null,"11.5","12","12.1","24",null,null,null],"prefix_exceptions":{"24":"webkit"}},"bb":{"browser":"Blackberry Browser","abbr":"BB","prefix":"webkit","type":"mobile","usage_global":{"7":0.0878202,"10":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"7","10",null,null,null]},"and_chr":{"browser":"Chrome for Android","abbr":"Chr/And.","prefix":"webkit","type":"mobile","usage_global":{"38":9.5135},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"38",null,null,null]},"and_ff":{"browser":"Firefox for Android","abbr":"FF/And.","prefix":"moz","type":"mobile","usage_global":{"32":0.154301},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"32",null,null,null]},"ie_mob":{"browser":"IE Mobile","abbr":"IE.Mob","prefix":"ms","type":"mobile","usage_global":{"10":0.458602,"11":0},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"10","11",null,null,null]},"and_uc":{"browser":"UC Browser for Android","abbr":"UC","prefix":"webkit","type":"mobile","usage_global":{"9.9":2.86934},"versions":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"9.9",null,null,null],"prefix_exceptions":{"9.9":"webkit"}}},"statuses":{"rec":"Recommendation","pr":"Proposed Recommendation","cr":"Candidate Recommendation","wd":"Working Draft","other":"Other","unoff":"Unofficial / Note"},"cats":{"CSS":["CSS","CSS2","CSS3"],"HTML5":["Canvas","HTML5"],"JS API":["JS API"],"Other":["PNG","Other","DOM"],"SVG":["SVG"]},"updated":1416467220,"data":{"png-alpha":{"title":"PNG alpha transparency","description":"Semi-transparent areas in PNG files","spec":"http://www.w3.org/TR/PNG/","status":"rec","links":[{"url":"http://en.wikipedia.org/wiki/Portable_Network_Graphics","title":"Wikipedia"},{"url":"http://dillerdesign.com/experiment/DD_belatedPNG/","title":"Workaround for IE6"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"p","7":"y","8":"y","9":"y","10":"y","11":"y"},"firefox":{"2":"y","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y"},"safari":{"3.1":"y","3.2":"y","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"y","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"y"},"android":{"2.1":"y","2.2":"y","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"38":"y"},"and_ff":{"32":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"IE6 does support full transparency in 8-bit PNGs, which can sometimes be an alternative to 24-bit PNGs.","notes_by_num":{},"usage_perc_y":96.77,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"apng":{"title":"Animated PNG (APNG)","description":"Like animated GIFs, but allowing 24-bit colors and alpha transparency","spec":"https://wiki.mozilla.org/APNG_Specification","status":"unoff","links":[{"url":"http://en.wikipedia.org/wiki/APNG","title":"Wikipedia"},{"url":"https://github.com/davidmz/apng-canvas","title":"Polyfill using canvas"},{"url":"https://chrome.google.com/webstore/detail/ehkepjiconegkhpodgoaeamnpckdbblp","title":"Chrome extension providing support"}],"categories":["PNG"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n"},"firefox":{"2":"n","3":"y","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y"},"chrome":{"4":"n","5":"n","6":"n","7":"n","8":"n","9":"n","10":"n","11":"n","12":"n","13":"n","14":"n","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n","28":"n","29":"n","30":"n","31":"n","32":"n","33":"n","34":"n","35":"n","36":"n","37":"n","38":"n","39":"n","40":"n","41":"n","42":"n"},"safari":{"3.1":"n","3.2":"n","4":"n","5":"n","5.1":"n","6":"n","6.1":"n","7":"n","7.1":"n","8":"y"},"opera":{"9":"n","9.5-9.6":"y","10.0-10.1":"y","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"n","16":"n","17":"n","18":"n","19":"n","20":"n","21":"n","22":"n","23":"n","24":"n","25":"n","26":"n","27":"n"},"ios_saf":{"3.2":"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"n","6.0-6.1":"n","7.0-7.1":"n","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"n","2.2":"n","2.3":"n","3":"n","4":"n","4.1":"n","4.2-4.3":"n","4.4":"n","4.4.3-4.4.4":"n","37":"n"},"bb":{"7":"n","10":"n"},"op_mob":{"10":"y","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"n"},"and_chr":{"38":"n"},"and_ff":{"32":"y"},"ie_mob":{"10":"n","11":"n"},"and_uc":{"9.9":"n"}},"notes":"Where support for APNG is missing, only the first frame is displayed","notes_by_num":{},"usage_perc_y":17.64,"usage_perc_a":0,"ucprefix":false,"parent":"","keywords":"","ie_id":"","chrome_id":""},"video":{"title":"Video element","description":"Method of playing videos on webpages (without requiring a plug-in)","spec":"https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element","status":"cr","links":[{"url":"https://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/","title":"Detailed article on video/audio elements"},{"url":"http://webmproject.org","title":"WebM format information"},{"url":"http://camendesign.co.uk/code/video_for_everybody","title":"Video for Everybody"},{"url":"http://diveintohtml5.info/video.html","title":"Video on the Web - includes info on Android support"},{"url":"https://raw.github.com/phiggins42/has.js/master/detect/video.js#video","title":"has.js test"},{"url":"http://docs.webplatform.org/wiki/html/elements/video","title":"WebPlatform Docs"}],"categories":["HTML5"],"stats":{"ie":{"5.5":"n","6":"n","7":"n","8":"n","9":"y","10":"y","11":"y"},"firefox":{"2":"n","3":"n","3.5":"y","3.6":"y","4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y"},"chrome":{"4":"y","5":"y","6":"y","7":"y","8":"y","9":"y","10":"y","11":"y","12":"y","13":"y","14":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y","28":"y","29":"y","30":"y","31":"y","32":"y","33":"y","34":"y","35":"y","36":"y","37":"y","38":"y","39":"y","40":"y","41":"y","42":"y"},"safari":{"3.1":"n","3.2":"n","4":"y","5":"y","5.1":"y","6":"y","6.1":"y","7":"y","7.1":"y","8":"y"},"opera":{"9":"n","9.5-9.6":"n","10.0-10.1":"n","10.5":"y","10.6":"y","11":"y","11.1":"y","11.5":"y","11.6":"y","12":"y","12.1":"y","15":"y","16":"y","17":"y","18":"y","19":"y","20":"y","21":"y","22":"y","23":"y","24":"y","25":"y","26":"y","27":"y"},"ios_saf":{"3.2":"y","4.0-4.1":"y","4.2-4.3":"y","5.0-5.1":"y","6.0-6.1":"y","7.0-7.1":"y","8":"y","8.1":"y"},"op_mini":{"5.0-8.0":"n"},"android":{"2.1":"a","2.2":"a","2.3":"y","3":"y","4":"y","4.1":"y","4.2-4.3":"y","4.4":"y","4.4.3-4.4.4":"y","37":"y"},"bb":{"7":"y","10":"y"},"op_mob":{"10":"n","11":"y","11.1":"y","11.5":"y","12":"y","12.1":"y","24":"y"},"and_chr":{"38":"y"},"and_ff":{"32":"y"},"ie_mob":{"10":"y","11":"y"},"and_uc":{"9.9":"y"}},"notes":"Different browsers have support for different video formats, see sub-features for details. \r\n\r\nThe Android browser (before 2.3) requires [specific handling](http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/) to run the video element.","notes_by_num":{},"usage_perc_y":90.57,"usage_perc_a":0.01,"ucprefix":false,"parent":"","keywords":"