EffectInterface.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import ExpressionPropertyInterface from './ExpressionValueFactory';
  2. import propertyGroupFactory from './PropertyGroupFactory';
  3. import PropertyInterface from './PropertyInterface';
  4. const EffectsExpressionInterface = (function () {
  5. var ob = {
  6. createEffectsInterface: createEffectsInterface,
  7. };
  8. function createEffectsInterface(elem, propertyGroup) {
  9. if (elem.effectsManager) {
  10. var effectElements = [];
  11. var effectsData = elem.data.ef;
  12. var i;
  13. var len = elem.effectsManager.effectElements.length;
  14. for (i = 0; i < len; i += 1) {
  15. effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));
  16. }
  17. var effects = elem.data.ef || [];
  18. var groupInterface = function (name) {
  19. i = 0;
  20. len = effects.length;
  21. while (i < len) {
  22. if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {
  23. return effectElements[i];
  24. }
  25. i += 1;
  26. }
  27. return null;
  28. };
  29. Object.defineProperty(groupInterface, 'numProperties', {
  30. get: function () {
  31. return effects.length;
  32. },
  33. });
  34. return groupInterface;
  35. }
  36. return null;
  37. }
  38. function createGroupInterface(data, elements, propertyGroup, elem) {
  39. function groupInterface(name) {
  40. var effects = data.ef;
  41. var i = 0;
  42. var len = effects.length;
  43. while (i < len) {
  44. if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {
  45. if (effects[i].ty === 5) {
  46. return effectElements[i];
  47. }
  48. return effectElements[i]();
  49. }
  50. i += 1;
  51. }
  52. throw new Error();
  53. }
  54. var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);
  55. var effectElements = [];
  56. var i;
  57. var len = data.ef.length;
  58. for (i = 0; i < len; i += 1) {
  59. if (data.ef[i].ty === 5) {
  60. effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));
  61. } else {
  62. effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));
  63. }
  64. }
  65. if (data.mn === 'ADBE Color Control') {
  66. Object.defineProperty(groupInterface, 'color', {
  67. get: function () {
  68. return effectElements[0]();
  69. },
  70. });
  71. }
  72. Object.defineProperties(groupInterface, {
  73. numProperties: {
  74. get: function () {
  75. return data.np;
  76. },
  77. },
  78. _name: { value: data.nm },
  79. propertyGroup: { value: _propertyGroup },
  80. });
  81. groupInterface.enabled = data.en !== 0;
  82. groupInterface.active = groupInterface.enabled;
  83. return groupInterface;
  84. }
  85. function createValueInterface(element, type, elem, propertyGroup) {
  86. var expressionProperty = ExpressionPropertyInterface(element.p);
  87. function interfaceFunction() {
  88. if (type === 10) {
  89. return elem.comp.compInterface(element.p.v);
  90. }
  91. return expressionProperty();
  92. }
  93. if (element.p.setGroupProperty) {
  94. element.p.setGroupProperty(PropertyInterface('', propertyGroup));
  95. }
  96. return interfaceFunction;
  97. }
  98. return ob;
  99. }());
  100. export default EffectsExpressionInterface;