92 lines
2.7 KiB
JavaScript
92 lines
2.7 KiB
JavaScript
let CatKeyframe = require('./CatKeyframe.js');
|
|
|
|
function CatAnimation(rules) {
|
|
this.name = rules.name;
|
|
this.stylesheet = rules;
|
|
this.keyframes = {};
|
|
for (var k = 0, rule = rules.cssRules[0]; k < rules.cssRules.length; rule = rules.cssRules[++k]) {
|
|
var keyframe = new CatKeyframe(rule, k);
|
|
this.keyframes[keyframe.key] = keyframe;
|
|
}
|
|
}
|
|
CatAnimation.prototype.remove = function() {
|
|
for (let i = 0; i < this.stylesheet.parentStyleSheet.rules.length; i++) {
|
|
let sheet = this.stylesheet.parentStyleSheet.rules[i];
|
|
if (sheet === this.stylesheet) {
|
|
this.stylesheet.parentStyleSheet.deleteRule(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
CatAnimation.prototype.setCatKeyframe = function(key, values) {
|
|
var rule = this.stylesheet.findRule(key);
|
|
// Create the rule if it doesn't exist
|
|
if (!rule) {
|
|
this.stylesheet.appendRule(key + ' { }');
|
|
rule = this.stylesheet.findRule(key);
|
|
}
|
|
// Set the style for the stylesheet
|
|
for (var value in values) {
|
|
rule.style[value] = values[value];
|
|
}
|
|
}
|
|
CatAnimation.prototype.setKeyframe = function(key, values) {
|
|
var rule = this.stylesheet.findRule(key);
|
|
// Create the rule if it doesn't exist
|
|
if (!rule) {
|
|
this.stylesheet.appendRule(key + ' { }');
|
|
rule = this.stylesheet.findRule(key);
|
|
}
|
|
// Set the style for the stylesheet
|
|
for (var value in values) {
|
|
rule.style[value] = values[value];
|
|
}
|
|
}
|
|
CatAnimation.prototype.unsetKeyframe = function(key, properties) {
|
|
let rule = this.stylesheet.findRule(key);
|
|
if (!rule) return false;
|
|
// Clear properties
|
|
for (let pi = 0; pi < properties.length; pi++) {
|
|
let property = properties[pi];
|
|
rule.style[property] = '';
|
|
for (let i = rule.style.length; i > 0; i--) {
|
|
if (rule.style[i] === property) {
|
|
rule.style.splice(i, 1);
|
|
}
|
|
}
|
|
}
|
|
// Delete the keyframe if it is empty.
|
|
if (rule.style.length === 0) {
|
|
this.deleteKeyframe(key);
|
|
}
|
|
}
|
|
CatAnimation.prototype.getKeyframe = function(key) {
|
|
let rule = this.stylesheet.findRule(key);
|
|
let ret = {};
|
|
if (rule) {
|
|
for (let i = 0; i < rule.style.length; i++) {
|
|
ret[rule.style[i]] = rule.style[rule.style[i]];
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
CatAnimation.prototype.getKeyframes = function() {
|
|
let frames = {};
|
|
for (let i = 0; i < this.stylesheet.cssRules.length; i++) {
|
|
let cssRule = this.stylesheet.cssRules[i];
|
|
if (cssRule.type !== 8) continue;
|
|
frames[cssRule.keyText] = this.getKeyframe(cssRule.keyText);
|
|
}
|
|
return frames;
|
|
}
|
|
CatAnimation.prototype.deleteKeyframe = function(key) {
|
|
this.stylesheet.deleteRule(key);
|
|
}
|
|
CatAnimation.prototype.deleteCatKeyframe = function(key) {
|
|
if (!this.keyframes[key]) return false;
|
|
delete this.keyframes[key];
|
|
this.stylesheet.deleteRule(key);
|
|
}
|
|
|
|
module.exports = CatAnimation;
|