spiritjs
Version:
The animation toolkit for the web
132 lines (126 loc) • 4.96 kB
JavaScript
;
exports.__esModule = true;
exports["default"] = _default;
var _setup = _interopRequireDefault(require("./config/setup"));
var _parser = require("./data/parser");
var _is = require("./utils/is");
var _registry = _interopRequireDefault(require("./registry/registry"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var defaults = {
loop: false,
autoPlay: true,
yoyo: false,
delay: 0,
timeScale: false
};
/**
* Create from data
*
* @param {object|Array} data
* @param {Element} container
* @return {Promise<Array|object>}
*/
function createFromData(data, container) {
if (data === undefined) {
return Promise.resolve([]);
}
if (!((0, _is.isObject)(data) || Array.isArray(data))) {
return Promise.reject(new Error('Invalid animation data'));
}
return Promise.resolve((0, _parser.create)(data, container));
}
/**
* Load from path
*
* @param {string} path
* @param {Element} container
* @return {Promise<Array|object>}
*/
function loadFromPath(path, container) {
if (path && typeof path === 'string' && path.length > 0) return (0, _parser.load)(path, container);
return Promise.resolve([]);
}
/**
* Load animation shorthand
*
* @param {object} manifest
* @return {Promise<Array|Function>}
*/
function _default(manifest) {
var options = _objectSpread(_objectSpread({}, defaults), manifest);
var animationData = options.animationData,
container = options.container,
path = options.path;
if (options.loop === true) {
options.loop = -1;
}
return new Promise(function (resolve, reject) {
(0, _setup["default"])().then(function () {
return Promise.all([createFromData(animationData, container), loadFromPath(path, container)]);
}).then(function (_ref) {
var created = _ref[0],
loaded = _ref[1];
var result = [];
function add(item) {
if (Array.isArray(item)) result.push.apply(result, item);else result.push(item);
}
add(created);
add(loaded);
return result;
}).then(function (result) {
var timelines = [];
var g = {};
if (result.length === 1 && result[0].length === 1) {
// single group
timelines.push(result[0].at(0).construct());
} else {
// multi group
result.forEach(function (groups) {
groups.each(function (group) {
g[group.name] = group.construct();
g[group.name].construct = function () {
var tl = _registry["default"].get(group.name).construct();
tl.construct = this.construct;
return tl;
};
});
});
timelines.push.apply(timelines, Object.keys(g).map(function (k) {
return g[k];
}));
}
// apply options
for (var i = 0; i < timelines.length; i++) {
var timeline = timelines[i];
if (options.loop) {
var loopCount = typeof options.loop === 'boolean' ? -1 : options.loop;
timeline.repeat(loopCount);
}
if (options.yoyo) {
timeline.yoyo(true);
}
if (options.delay !== 0) {
timeline.repeatDelay(options.delay);
}
if (options.timeScale) {
timeline.timeScale(options.timeScale);
}
if (options.autoPlay) {
timeline.play(0);
}
}
if (timelines.length === 1) {
// remove promise behaviour
// else it can only be resolved when animation has completed
timelines[0].then = undefined;
resolve(timelines[0]);
}
resolve(g);
})["catch"](reject);
});
}