229 lines
7.6 KiB
JavaScript
229 lines
7.6 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
Object.defineProperty(exports, "__esModule", {
|
||
|
|
value: true
|
||
|
|
});
|
||
|
|
|
||
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
||
|
|
// special flexbox specifications
|
||
|
|
|
||
|
|
|
||
|
|
var _prefixAll2 = require('./static/prefixAll');
|
||
|
|
|
||
|
|
var _prefixAll3 = _interopRequireDefault(_prefixAll2);
|
||
|
|
|
||
|
|
var _getBrowserInformation = require('./utils/getBrowserInformation');
|
||
|
|
|
||
|
|
var _getBrowserInformation2 = _interopRequireDefault(_getBrowserInformation);
|
||
|
|
|
||
|
|
var _getPrefixedKeyframes = require('./utils/getPrefixedKeyframes');
|
||
|
|
|
||
|
|
var _getPrefixedKeyframes2 = _interopRequireDefault(_getPrefixedKeyframes);
|
||
|
|
|
||
|
|
var _capitalizeString = require('./utils/capitalizeString');
|
||
|
|
|
||
|
|
var _capitalizeString2 = _interopRequireDefault(_capitalizeString);
|
||
|
|
|
||
|
|
var _sortPrefixedStyle = require('./utils/sortPrefixedStyle');
|
||
|
|
|
||
|
|
var _sortPrefixedStyle2 = _interopRequireDefault(_sortPrefixedStyle);
|
||
|
|
|
||
|
|
var _prefixProps = require('./prefixProps');
|
||
|
|
|
||
|
|
var _prefixProps2 = _interopRequireDefault(_prefixProps);
|
||
|
|
|
||
|
|
var _position = require('./plugins/position');
|
||
|
|
|
||
|
|
var _position2 = _interopRequireDefault(_position);
|
||
|
|
|
||
|
|
var _calc = require('./plugins/calc');
|
||
|
|
|
||
|
|
var _calc2 = _interopRequireDefault(_calc);
|
||
|
|
|
||
|
|
var _zoomCursor = require('./plugins/zoomCursor');
|
||
|
|
|
||
|
|
var _zoomCursor2 = _interopRequireDefault(_zoomCursor);
|
||
|
|
|
||
|
|
var _grabCursor = require('./plugins/grabCursor');
|
||
|
|
|
||
|
|
var _grabCursor2 = _interopRequireDefault(_grabCursor);
|
||
|
|
|
||
|
|
var _flex = require('./plugins/flex');
|
||
|
|
|
||
|
|
var _flex2 = _interopRequireDefault(_flex);
|
||
|
|
|
||
|
|
var _sizing = require('./plugins/sizing');
|
||
|
|
|
||
|
|
var _sizing2 = _interopRequireDefault(_sizing);
|
||
|
|
|
||
|
|
var _gradient = require('./plugins/gradient');
|
||
|
|
|
||
|
|
var _gradient2 = _interopRequireDefault(_gradient);
|
||
|
|
|
||
|
|
var _transition = require('./plugins/transition');
|
||
|
|
|
||
|
|
var _transition2 = _interopRequireDefault(_transition);
|
||
|
|
|
||
|
|
var _flexboxIE = require('./plugins/flexboxIE');
|
||
|
|
|
||
|
|
var _flexboxIE2 = _interopRequireDefault(_flexboxIE);
|
||
|
|
|
||
|
|
var _flexboxOld = require('./plugins/flexboxOld');
|
||
|
|
|
||
|
|
var _flexboxOld2 = _interopRequireDefault(_flexboxOld);
|
||
|
|
|
||
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
|
||
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
|
||
|
|
var plugins = [_position2.default, _calc2.default, _zoomCursor2.default, _grabCursor2.default, _sizing2.default, _gradient2.default, _transition2.default, _flexboxIE2.default, _flexboxOld2.default,
|
||
|
|
// this must be run AFTER the flexbox specs
|
||
|
|
_flex2.default];
|
||
|
|
|
||
|
|
var Prefixer = function () {
|
||
|
|
/**
|
||
|
|
* Instantiante a new prefixer
|
||
|
|
* @param {string} userAgent - userAgent to gather prefix information according to caniuse.com
|
||
|
|
* @param {string} keepUnprefixed - keeps unprefixed properties and values
|
||
|
|
*/
|
||
|
|
|
||
|
|
function Prefixer() {
|
||
|
|
var _this = this;
|
||
|
|
|
||
|
|
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
||
|
|
|
||
|
|
_classCallCheck(this, Prefixer);
|
||
|
|
|
||
|
|
var defaultUserAgent = typeof navigator !== 'undefined' ? navigator.userAgent : undefined;
|
||
|
|
|
||
|
|
this._userAgent = options.userAgent || defaultUserAgent;
|
||
|
|
this._keepUnprefixed = options.keepUnprefixed || false;
|
||
|
|
|
||
|
|
this._browserInfo = (0, _getBrowserInformation2.default)(this._userAgent);
|
||
|
|
|
||
|
|
// Checks if the userAgent was resolved correctly
|
||
|
|
if (this._browserInfo && this._browserInfo.prefix) {
|
||
|
|
// set additional prefix information
|
||
|
|
this.cssPrefix = this._browserInfo.prefix.css;
|
||
|
|
this.jsPrefix = this._browserInfo.prefix.inline;
|
||
|
|
this.prefixedKeyframes = (0, _getPrefixedKeyframes2.default)(this._browserInfo);
|
||
|
|
} else {
|
||
|
|
this._usePrefixAllFallback = true;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
var data = this._browserInfo.browser && _prefixProps2.default[this._browserInfo.browser];
|
||
|
|
if (data) {
|
||
|
|
this._requiresPrefix = Object.keys(data).filter(function (key) {
|
||
|
|
return data[key] >= _this._browserInfo.version;
|
||
|
|
}).reduce(function (result, name) {
|
||
|
|
result[name] = true;
|
||
|
|
return result;
|
||
|
|
}, {});
|
||
|
|
this._hasPropsRequiringPrefix = Object.keys(this._requiresPrefix).length > 0;
|
||
|
|
} else {
|
||
|
|
this._usePrefixAllFallback = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns a prefixed version of the style object
|
||
|
|
* @param {Object} styles - Style object that gets prefixed properties added
|
||
|
|
* @returns {Object} - Style object with prefixed properties and values
|
||
|
|
*/
|
||
|
|
|
||
|
|
|
||
|
|
_createClass(Prefixer, [{
|
||
|
|
key: 'prefix',
|
||
|
|
value: function prefix(styles) {
|
||
|
|
var _this2 = this;
|
||
|
|
|
||
|
|
// use prefixAll as fallback if userAgent can not be resolved
|
||
|
|
if (this._usePrefixAllFallback) {
|
||
|
|
return (0, _prefixAll3.default)(styles);
|
||
|
|
}
|
||
|
|
|
||
|
|
// only add prefixes if needed
|
||
|
|
if (!this._hasPropsRequiringPrefix) {
|
||
|
|
return styles;
|
||
|
|
}
|
||
|
|
|
||
|
|
Object.keys(styles).forEach(function (property) {
|
||
|
|
var value = styles[property];
|
||
|
|
if (value instanceof Object && !Array.isArray(value)) {
|
||
|
|
// recurse through nested style objects
|
||
|
|
styles[property] = _this2.prefix(value);
|
||
|
|
} else {
|
||
|
|
// add prefixes if needed
|
||
|
|
if (_this2._requiresPrefix[property]) {
|
||
|
|
styles[_this2.jsPrefix + (0, _capitalizeString2.default)(property)] = value;
|
||
|
|
if (!_this2._keepUnprefixed) {
|
||
|
|
delete styles[property];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
Object.keys(styles).forEach(function (property) {
|
||
|
|
[].concat(styles[property]).forEach(function (value) {
|
||
|
|
// resolve plugins
|
||
|
|
plugins.forEach(function (plugin) {
|
||
|
|
// generates a new plugin interface with current data
|
||
|
|
assignStyles(styles, plugin({
|
||
|
|
property: property,
|
||
|
|
value: value,
|
||
|
|
styles: styles,
|
||
|
|
browserInfo: _this2._browserInfo,
|
||
|
|
prefix: {
|
||
|
|
js: _this2.jsPrefix,
|
||
|
|
css: _this2.cssPrefix,
|
||
|
|
keyframes: _this2.prefixedKeyframes
|
||
|
|
},
|
||
|
|
keepUnprefixed: _this2._keepUnprefixed,
|
||
|
|
requiresPrefix: _this2._requiresPrefix
|
||
|
|
}), value, _this2._keepUnprefixed);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
return (0, _sortPrefixedStyle2.default)(styles);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns a prefixed version of the style object using all vendor prefixes
|
||
|
|
* @param {Object} styles - Style object that gets prefixed properties added
|
||
|
|
* @returns {Object} - Style object with prefixed properties and values
|
||
|
|
*/
|
||
|
|
|
||
|
|
}], [{
|
||
|
|
key: 'prefixAll',
|
||
|
|
value: function prefixAll(styles) {
|
||
|
|
return (0, _prefixAll3.default)(styles);
|
||
|
|
}
|
||
|
|
}]);
|
||
|
|
|
||
|
|
return Prefixer;
|
||
|
|
}();
|
||
|
|
|
||
|
|
exports.default = Prefixer;
|
||
|
|
|
||
|
|
|
||
|
|
function assignStyles(base) {
|
||
|
|
var extend = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
|
||
|
|
var value = arguments[2];
|
||
|
|
var keepUnprefixed = arguments[3];
|
||
|
|
|
||
|
|
Object.keys(extend).forEach(function (property) {
|
||
|
|
var baseValue = base[property];
|
||
|
|
if (Array.isArray(baseValue)) {
|
||
|
|
[].concat(extend[property]).forEach(function (val) {
|
||
|
|
if (base[property].indexOf(val) === -1) {
|
||
|
|
base[property].splice(baseValue.indexOf(value), keepUnprefixed ? 0 : 1, val);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
} else {
|
||
|
|
base[property] = extend[property];
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
module.exports = exports['default'];
|