| /****** INIT Effects Stroke Parser ******/ | 
 | (function(){ | 
 |     var ob = {}; | 
 |     var registeredElements = []; | 
 |     var lastValues = {}; | 
 |  | 
 |     function renderFrame(frameNum, id){ | 
 |         var effectData = registeredElements[id]; | 
 |         var effectInfo = effectData.elem; | 
 |         for(var s in effectData.animated){ | 
 |             var propertyValue = getPropertyValue(effectInfo[s].value,getPropertyType(s)); | 
 |             if(lastValues[s] == null || !extrasInstance.compareObjects(propertyValue,lastValues[s])){ | 
 |                 effectData.animated[s][frameNum] = propertyValue; | 
 |                 lastValues[s] = propertyValue; | 
 |             } | 
 |         } | 
 |     } | 
 |  | 
 |     function getPropertyValue(value,type){ | 
 |         switch(type) | 
 |         { | 
 |             case 'color': | 
 |                 return extrasInstance.arrayRgbToHex(value); | 
 |                 break; | 
 |             default: | 
 |                 return value; | 
 |                 break; | 
 |         } | 
 |     } | 
 |  | 
 |     function getPropertyType(propertyName){ | 
 |         var i = 0;len = animatableProperties.length; | 
 |         while(i<len){ | 
 |             if(animatableProperties[i].name == propertyName){ | 
 |                 return animatableProperties[i].type; | 
 |             } | 
 |             i++; | 
 |         } | 
 |         return ''; | 
 |     } | 
 |  | 
 |     function getData(id){ | 
 |         return registeredElements[id]; | 
 |     } | 
 |  | 
 |     function registerElement(elem){ | 
 |         var effectData = { | 
 |             type: 'Stroke', | 
 |             effectInfo : elem, | 
 |             effectDataPath : elem['Path'].value, | 
 |             allMasks : elem['All Masks'].value, | 
 |             strokeSequentially : elem['Stroke Sequentially'].value, | 
 |             animated: {}, | 
 |             singleValue: {} | 
 |         }; | 
 |         registeredElements.push(effectData); | 
 |         animatableProperties.forEach(function(item){ | 
 |             if(elem[item.name].numKeys == 0){ | 
 |                 effectData.singleValue[item.name] = getPropertyValue(effectInfo[item.name].value, item.type); | 
 |             }else{ | 
 |                 effectData.animated[item.name] = {}; | 
 |             } | 
 |         }); | 
 |         return registeredElements.length; | 
 |     } | 
 |     var animatableProperties = [{name:'Color',type:'color'},{name:'Brush Size',type:'simple'},{name:'Brush Hardness',type:'simple'},{name:'Opacity',type:'simple'},{name:'Start',type:'simple'},{name:'End',type:'simple'},{name:'Spacing',type:'simple'},{name:'Paint Style',type:'simple'}]; | 
 |     var i, len = animatableProperties.length; | 
 |  | 
 |     ob.renderFrame = renderFrame; | 
 |     ob.getData = getData; | 
 |     ob.registerElement = registerElement; | 
 |     EffectsParser.registerEffect('Stroke',ob); | 
 | }()); | 
 | /****** END Effects Stroke Parser ******/ |