blob: 23da2aa4e4f8f870c4851ceb37e2461ff6aa9685 [file] [log] [blame]
var ShapeExpressionInterface = (function(){
function iterateElements(shapes,view, propertyGroup){
var arr = [];
var i, len = shapes ? shapes.length : 0;
for(i=0;i<len;i+=1){
if(shapes[i].ty == 'gr'){
arr.push(groupInterfaceFactory(shapes[i],view[i],propertyGroup));
}else if(shapes[i].ty == 'fl'){
arr.push(fillInterfaceFactory(shapes[i],view[i],propertyGroup));
}else if(shapes[i].ty == 'st'){
arr.push(strokeInterfaceFactory(shapes[i],view[i],propertyGroup));
}else if(shapes[i].ty == 'tm'){
arr.push(trimInterfaceFactory(shapes[i],view[i],propertyGroup));
}else if(shapes[i].ty == 'tr'){
//arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));
}else if(shapes[i].ty == 'el'){
arr.push(ellipseInterfaceFactory(shapes[i],view[i],propertyGroup));
}else if(shapes[i].ty == 'sr'){
arr.push(starInterfaceFactory(shapes[i],view[i],propertyGroup));
} else if(shapes[i].ty == 'sh'){
arr.push(pathInterfaceFactory(shapes[i],view[i],propertyGroup));
} else if(shapes[i].ty == 'rc'){
arr.push(rectInterfaceFactory(shapes[i],view[i],propertyGroup));
} else if(shapes[i].ty == 'rd'){
arr.push(roundedInterfaceFactory(shapes[i],view[i],propertyGroup));
} else if(shapes[i].ty == 'rp'){
arr.push(repeaterInterfaceFactory(shapes[i],view[i],propertyGroup));
}
}
return arr;
}
function contentsInterfaceFactory(shape,view, propertyGroup){
var interfaces;
var interfaceFunction = function _interfaceFunction(value){
var i = 0, len = interfaces.length;
while(i<len){
if(interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value){
return interfaces[i];
}
i+=1;
}
if(typeof value === 'number'){
return interfaces[value-1];
}
};
interfaceFunction.propertyGroup = function(val){
if(val === 1){
return interfaceFunction;
} else{
return propertyGroup(val-1);
}
};
interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);
interfaceFunction.numProperties = interfaces.length;
interfaceFunction.propertyIndex = shape.cix;
return interfaceFunction;
}
function groupInterfaceFactory(shape,view, propertyGroup){
var interfaceFunction = function _interfaceFunction(value){
switch(value){
case 'ADBE Vectors Group':
case 'Contents':
case 2:
return interfaceFunction.content;
//Not necessary for now. Keeping them here in case a new case appears
//case 'ADBE Vector Transform Group':
//case 3:
default:
return interfaceFunction.transform;
}
};
interfaceFunction.propertyGroup = function(val){
if(val === 1){
return interfaceFunction;
} else{
return propertyGroup(val-1);
}
};
var content = contentsInterfaceFactory(shape,view,interfaceFunction.propertyGroup);
var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1],view.it[view.it.length - 1],interfaceFunction.propertyGroup);
interfaceFunction.content = content;
interfaceFunction.transform = transformInterface;
Object.defineProperty(interfaceFunction, '_name', {
get: function(){
return shape.nm;
}
});
//interfaceFunction.content = interfaceFunction;
interfaceFunction.numProperties = shape.np;
interfaceFunction.propertyIndex = shape.ix;
interfaceFunction.nm = shape.nm;
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function fillInterfaceFactory(shape,view,propertyGroup){
function interfaceFunction(val){
if(val === 'Color' || val === 'color'){
return interfaceFunction.color;
} else if(val === 'Opacity' || val === 'opacity'){
return interfaceFunction.opacity;
}
}
Object.defineProperties(interfaceFunction, {
'color': {
get: function() {
return ExpressionValue(view.c, 1 / view.c.mult, 'color');
}
},
'opacity': {
get: function() {
return ExpressionValue(view.o, 100);
}
},
'_name': { value: shape.nm },
'mn': { value: shape.mn }
});
view.c.setGroupProperty(propertyGroup);
view.o.setGroupProperty(propertyGroup);
return interfaceFunction;
}
function strokeInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val === 1){
return ob;
} else{
return propertyGroup(val-1);
}
}
function _dashPropertyGroup(val){
if(val === 1){
return dashOb;
} else{
return _propertyGroup(val-1);
}
}
function addPropertyToDashOb(i) {
Object.defineProperty(dashOb, shape.d[i].nm, {
get: function(){
return ExpressionValue(view.d.dataProps[i].p);
}
});
}
var i, len = shape.d ? shape.d.length : 0;
var dashOb = {};
for (i = 0; i < len; i += 1) {
addPropertyToDashOb(i);
view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);
}
function interfaceFunction(val){
if(val === 'Color' || val === 'color'){
return interfaceFunction.color;
} else if(val === 'Opacity' || val === 'opacity'){
return interfaceFunction.opacity;
} else if(val === 'Stroke Width' || val === 'stroke width'){
return interfaceFunction.strokeWidth;
}
}
Object.defineProperties(interfaceFunction, {
'color': {
get: function() {
return ExpressionValue(view.c, 1 / view.c.mult, 'color');
}
},
'opacity': {
get: function() {
return ExpressionValue(view.o, 100);
}
},
'strokeWidth': {
get: function() {
return ExpressionValue(view.w);
}
},
'dash': {
get: function() {
return dashOb;
}
},
'_name': { value: shape.nm },
'mn': { value: shape.mn }
});
view.c.setGroupProperty(_propertyGroup);
view.o.setGroupProperty(_propertyGroup);
view.w.setGroupProperty(_propertyGroup);
return interfaceFunction;
}
function trimInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
interfaceFunction.propertyIndex = shape.ix;
view.s.setGroupProperty(_propertyGroup);
view.e.setGroupProperty(_propertyGroup);
view.o.setGroupProperty(_propertyGroup);
function interfaceFunction(val){
if(val === shape.e.ix || val === 'End' || val === 'end'){
return interfaceFunction.end;
}
if(val === shape.s.ix){
return interfaceFunction.start;
}
if(val === shape.o.ix){
return interfaceFunction.offset;
}
}
interfaceFunction.propertyIndex = shape.ix;
Object.defineProperties(interfaceFunction, {
'start': {
get: function() {
return ExpressionValue(view.s, 1 / view.s.mult);
}
},
'end': {
get: function() {
return ExpressionValue(view.e, 1 / view.e.mult);
}
},
'offset': {
get: function() {
return ExpressionValue(view.o);
}
},
'_name': { value: shape.nm }
});
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function transformInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
view.transform.mProps.o.setGroupProperty(_propertyGroup);
view.transform.mProps.p.setGroupProperty(_propertyGroup);
view.transform.mProps.a.setGroupProperty(_propertyGroup);
view.transform.mProps.s.setGroupProperty(_propertyGroup);
view.transform.mProps.r.setGroupProperty(_propertyGroup);
if(view.transform.mProps.sk){
view.transform.mProps.sk.setGroupProperty(_propertyGroup);
view.transform.mProps.sa.setGroupProperty(_propertyGroup);
}
view.transform.op.setGroupProperty(_propertyGroup);
function interfaceFunction(value){
if(shape.a.ix === value || value === 'Anchor Point'){
return interfaceFunction.anchorPoint;
}
if(shape.o.ix === value || value === 'Opacity'){
return interfaceFunction.opacity;
}
if(shape.p.ix === value || value === 'Position'){
return interfaceFunction.position;
}
if(shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation'){
return interfaceFunction.rotation;
}
if(shape.s.ix === value || value === 'Scale'){
return interfaceFunction.scale;
}
if(shape.sk && shape.sk.ix === value || value === 'Skew'){
return interfaceFunction.skew;
}
if(shape.sa && shape.sa.ix === value || value === 'Skew Axis'){
return interfaceFunction.skewAxis;
}
}
Object.defineProperties(interfaceFunction, {
'opacity': {
get: function(){
return ExpressionValue(view.transform.mProps.o, 1/view.transform.mProps.o.mult);
}
},
'position': {
get: function(){
return ExpressionValue(view.transform.mProps.p);
}
},
'anchorPoint': {
get: function(){
return ExpressionValue(view.transform.mProps.a);
}
},
'scale': {
get: function(){
return ExpressionValue(view.transform.mProps.s, 1 / view.transform.mProps.s.mult);
}
},
'rotation': {
get: function(){
return ExpressionValue(view.transform.mProps.r, 1 / view.transform.mProps.r.mult);
}
},
'skew': {
get: function(){
return ExpressionValue(view.transform.mProps.sk);
}
},
'skewAxis': {
get: function(){
return ExpressionValue(view.transform.mProps.sa);
}
},
'_name': { value: shape.nm }
});
interfaceFunction.ty = 'tr';
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function ellipseInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
interfaceFunction.propertyIndex = shape.ix;
var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
prop.s.setGroupProperty(_propertyGroup);
prop.p.setGroupProperty(_propertyGroup);
function interfaceFunction(value){
if(shape.p.ix === value){
return interfaceFunction.position;
}
if(shape.s.ix === value){
return interfaceFunction.size;
}
}
Object.defineProperties(interfaceFunction, {
'size': {
get: function(){
return ExpressionValue(prop.s);
}
},
'position': {
get: function(){
return ExpressionValue(prop.p);
}
},
'_name': { value: shape.nm }
});
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function starInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
interfaceFunction.propertyIndex = shape.ix;
prop.or.setGroupProperty(_propertyGroup);
prop.os.setGroupProperty(_propertyGroup);
prop.pt.setGroupProperty(_propertyGroup);
prop.p.setGroupProperty(_propertyGroup);
prop.r.setGroupProperty(_propertyGroup);
if(shape.ir){
prop.ir.setGroupProperty(_propertyGroup);
prop.is.setGroupProperty(_propertyGroup);
}
function interfaceFunction(value){
if(shape.p.ix === value){
return interfaceFunction.position;
}
if(shape.r.ix === value){
return interfaceFunction.rotation;
}
if(shape.pt.ix === value){
return interfaceFunction.points;
}
if(shape.or.ix === value || 'ADBE Vector Star Outer Radius' === value){
return interfaceFunction.outerRadius;
}
if(shape.os.ix === value){
return interfaceFunction.outerRoundness;
}
if(shape.ir && (shape.ir.ix === value || 'ADBE Vector Star Inner Radius' === value)){
return interfaceFunction.innerRadius;
}
if(shape.is && shape.is.ix === value){
return interfaceFunction.innerRoundness;
}
}
Object.defineProperties(interfaceFunction, {
'position': {
get: function() {
return ExpressionValue(prop.p);
}
},
'rotation': {
get: function() {
return ExpressionValue(prop.r, 1 / prop.r.mult);
}
},
'points': {
get: function() {
return ExpressionValue(prop.pt);
}
},
'outerRadius': {
get: function() {
return ExpressionValue(prop.or);
}
},
'outerRoundness': {
get: function(){
return ExpressionValue(prop.os);
}
},
'innerRadius': {
get: function(){
if(!prop.ir){
return 0;
}
return ExpressionValue(prop.ir);
}
},
'innerRoundness': {
get: function(){
if(!prop.is){
return 0;
}
return ExpressionValue(prop.is, 1 / prop.is.mult);
}
},
'_name': { value: shape.nm }
});
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function rectInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;
interfaceFunction.propertyIndex = shape.ix;
prop.p.setGroupProperty(_propertyGroup);
prop.s.setGroupProperty(_propertyGroup);
prop.r.setGroupProperty(_propertyGroup);
function interfaceFunction(value){
if(shape.p.ix === value){
return interfaceFunction.position;
}
if(shape.r.ix === value){
return interfaceFunction.roundness;
}
if(shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size'){
return interfaceFunction.size;
}
}
Object.defineProperties(interfaceFunction, {
'position': {
get: function(){
return ExpressionValue(prop.p);
}
},
'roundness': {
get: function(){
return ExpressionValue(prop.r);
}
},
'size': {
get: function(){
return ExpressionValue(prop.s);
}
},
'_name': { value: shape.nm }
});
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function roundedInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
var prop = view;
interfaceFunction.propertyIndex = shape.ix;
prop.rd.setGroupProperty(_propertyGroup);
function interfaceFunction(value){
if(shape.r.ix === value || 'Round Corners 1' === value){
return interfaceFunction.radius;
}
}
Object.defineProperties(interfaceFunction, {
'radius': {
get: function() {
return ExpressionValue(prop.rd);
}
},
'_name': { value: shape.nm }
});
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function repeaterInterfaceFactory(shape,view,propertyGroup){
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
var prop = view;
interfaceFunction.propertyIndex = shape.ix;
prop.c.setGroupProperty(_propertyGroup);
prop.o.setGroupProperty(_propertyGroup);
function interfaceFunction(value){
if(shape.c.ix === value || 'Copies' === value){
return interfaceFunction.copies;
} else if(shape.o.ix === value || 'Offset' === value){
return interfaceFunction.offset;
}
}
Object.defineProperties(interfaceFunction, {
'copies': {
get: function(){
return ExpressionValue(prop.c);
}
},
'offset': {
get: function(){
return ExpressionValue(prop.o);
}
},
'_name': { value: shape.nm }
});
interfaceFunction.mn = shape.mn;
return interfaceFunction;
}
function pathInterfaceFactory(shape,view,propertyGroup){
var prop = view.sh;
function _propertyGroup(val){
if(val == 1){
return interfaceFunction;
} else {
return propertyGroup(--val);
}
}
prop.setGroupProperty(_propertyGroup);
function interfaceFunction(val){
if(val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2){
return interfaceFunction.path;
}
}
Object.defineProperties(interfaceFunction, {
'path': {
get: function(){
if(prop.k){
prop.getValue();
}
return prop;
}
},
'shape': {
get: function(){
if(prop.k){
prop.getValue();
}
return prop;
}
},
'_name': { value: shape.nm },
'ix': { value: shape.ix },
'mn': { value: shape.mn }
});
return interfaceFunction;
}
return function(shapes,view,propertyGroup) {
var interfaces;
function _interfaceFunction(value){
if(typeof value === 'number'){
return interfaces[value-1];
} else {
var i = 0, len = interfaces.length;
while(i<len){
if(interfaces[i]._name === value){
return interfaces[i];
}
i+=1;
}
}
}
_interfaceFunction.propertyGroup = propertyGroup;
interfaces = iterateElements(shapes, view, _interfaceFunction);
return _interfaceFunction;
};
}());