add expression interfaces conditionnally
diff --git a/player/js/elements/BaseElement.js b/player/js/elements/BaseElement.js
index 36e588d..031cc81 100644
--- a/player/js/elements/BaseElement.js
+++ b/player/js/elements/BaseElement.js
@@ -1,11 +1,7 @@
import {
createElementID,
+ getExpressionInterfaces,
} from '../utils/common';
-import LayerExpressionInterface from '../utils/expressions/LayerInterface';
-import EffectsExpressionInterface from '../utils/expressions/EffectInterface';
-import CompExpressionInterface from '../utils/expressions/CompInterface';
-import ShapeExpressionInterface from '../utils/expressions/ShapeInterface';
-import TextExpressionInterface from '../utils/expressions/TextInterface';
import getBlendMode from '../utils/helpers/blendModes';
import EffectsManager from '../EffectsManager';
@@ -28,6 +24,15 @@
return false;
},
initExpressions: function () {
+ const expressionsInterfaces = getExpressionInterfaces();
+ if (!expressionsInterfaces) {
+ return;
+ }
+ const LayerExpressionInterface = expressionsInterfaces('layer');
+ const EffectsExpressionInterface = expressionsInterfaces('effects');
+ const ShapeExpressionInterface = expressionsInterfaces('shape');
+ const TextExpressionInterface = expressionsInterfaces('text');
+ const CompExpressionInterface = expressionsInterfaces('comp');
this.layerInterface = LayerExpressionInterface(this);
if (this.data.hasMask && this.maskManager) {
this.layerInterface.registerMaskInterface(this.maskManager);
diff --git a/player/js/elements/FootageElement.js b/player/js/elements/FootageElement.js
index 7f94102..8b85987 100644
--- a/player/js/elements/FootageElement.js
+++ b/player/js/elements/FootageElement.js
@@ -1,10 +1,12 @@
import {
extendPrototype,
} from '../utils/functionExtensions';
+import {
+ getExpressionInterfaces,
+} from '../utils/common';
import RenderableElement from './helpers/RenderableElement';
import BaseElement from './BaseElement';
import FrameElement from './helpers/FrameElement';
-import FootageInterface from '../utils/expressions/FootageInterface';
function FootageElement(data, globalData, comp) {
this.initFrame();
@@ -30,6 +32,11 @@
};
FootageElement.prototype.initExpressions = function () {
+ const expressionsInterfaces = getExpressionInterfaces();
+ if (!expressionsInterfaces) {
+ return;
+ }
+ const FootageInterface = expressionsInterfaces('footage');
this.layerInterface = FootageInterface(this);
};
diff --git a/player/js/modules/canvas.js b/player/js/modules/canvas.js
index 794412e..baa8010 100644
--- a/player/js/modules/canvas.js
+++ b/player/js/modules/canvas.js
@@ -1,13 +1,16 @@
import lottie from './canvas_light';
import {
setExpressionsPlugin,
+ setExpressionInterfaces,
} from '../utils/common';
import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
// Registering expression plugin
setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
expressionPropertyDecorator();
expressionTextPropertyDecorator();
diff --git a/player/js/modules/full.js b/player/js/modules/full.js
index 7e42cb7..9ce6b08 100644
--- a/player/js/modules/full.js
+++ b/player/js/modules/full.js
@@ -1,6 +1,7 @@
import lottie from './main';
import {
setExpressionsPlugin,
+ setExpressionInterfaces,
} from '../utils/common';
import { ShapeModifiers } from '../utils/shapes/ShapeModifiers';
import TrimModifier from '../utils/shapes/TrimModifier';
@@ -16,6 +17,7 @@
registerRenderer,
} from '../renderers/renderersManager';
import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
// SVG effects
@@ -44,6 +46,7 @@
// Registering expression plugin
setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
expressionPropertyDecorator();
expressionTextPropertyDecorator();
diff --git a/player/js/modules/html.js b/player/js/modules/html.js
index 2edd77d..3e65186 100644
--- a/player/js/modules/html.js
+++ b/player/js/modules/html.js
@@ -1,8 +1,10 @@
import lottie from './html_light';
import {
setExpressionsPlugin,
+ setExpressionInterfaces,
} from '../utils/common';
import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
// SVG effects
@@ -18,6 +20,7 @@
// Registering expression plugin
setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
expressionPropertyDecorator();
expressionTextPropertyDecorator();
registerEffect(20, SVGTintFilter, true);
diff --git a/player/js/modules/svg.js b/player/js/modules/svg.js
index 1a2140d..4c7f5df 100644
--- a/player/js/modules/svg.js
+++ b/player/js/modules/svg.js
@@ -1,8 +1,10 @@
import lottie from './svg_light';
import {
setExpressionsPlugin,
+ setExpressionInterfaces,
} from '../utils/common';
import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
// SVG effects
@@ -18,6 +20,7 @@
// Registering expression plugin
setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
expressionPropertyDecorator();
expressionTextPropertyDecorator();
registerEffect(20, SVGTintFilter, true);
diff --git a/player/js/utils/common.js b/player/js/utils/common.js
index da4946d..db54dad 100644
--- a/player/js/utils/common.js
+++ b/player/js/utils/common.js
@@ -4,6 +4,7 @@
let subframeEnabled = true;
let expressionsPlugin = null;
+let expressionsInterfaces = null;
let idPrefix = '';
const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
let _shouldRoundValues = false;
@@ -232,6 +233,8 @@
const getSubframeEnabled = () => subframeEnabled;
const setExpressionsPlugin = (value) => { expressionsPlugin = value; };
const getExpressionsPlugin = () => expressionsPlugin;
+const setExpressionInterfaces = (value) => { expressionsInterfaces = value; };
+const getExpressionInterfaces = () => expressionsInterfaces;
const setDefaultCurveSegments = (value) => { defaultCurveSegments = value; };
const getDefaultCurveSegments = () => defaultCurveSegments;
const setIdPrefix = (value) => { idPrefix = value; };
@@ -242,6 +245,8 @@
getSubframeEnabled,
setExpressionsPlugin,
getExpressionsPlugin,
+ setExpressionInterfaces,
+ getExpressionInterfaces,
setDefaultCurveSegments,
getDefaultCurveSegments,
isSafari,
diff --git a/player/js/utils/expressions/InterfacesProvider.js b/player/js/utils/expressions/InterfacesProvider.js
new file mode 100644
index 0000000..22accf1
--- /dev/null
+++ b/player/js/utils/expressions/InterfacesProvider.js
@@ -0,0 +1,21 @@
+import LayerExpressionInterface from './LayerInterface';
+import EffectsExpressionInterface from './EffectInterface';
+import CompExpressionInterface from './CompInterface';
+import ShapeExpressionInterface from './ShapeInterface';
+import TextExpressionInterface from './TextInterface';
+import FootageInterface from './FootageInterface';
+
+var interfaces = {
+ layer: LayerExpressionInterface,
+ effects: EffectsExpressionInterface,
+ comp: CompExpressionInterface,
+ shape: ShapeExpressionInterface,
+ text: TextExpressionInterface,
+ footage: FootageInterface,
+};
+
+function getInterface(type) {
+ return interfaces[type] || null;
+}
+
+export default getInterface;