module fb { export class Common { static CreateChangeTrackObjekt(objectData,rootObject,rootName) { var returnObject; var getRootObject = function () { if (rootObject) { return rootObject; } else { return returnObject; } }; var getRootName = function (): string { if (rootName) { return rootName; } else { return ''; } }; var recurse = function (obj, data, propertyString: string) { // vill ha kvar undefined-checken för säkerhets skull, men borde inte gå att nå /* istanbul ignore if */ if (typeof data === 'undefined' || data === null) { return; } else if (data instanceof Array) { // data är en array for (var k: number = 0; k < data.length; k++) { if (typeof data[k] === 'object') { var tmpObject; if (data[k] instanceof Array) { tmpObject = []; } else { tmpObject = {}; } recurse(tmpObject, data[k], propertyString + '[]'); obj[k] = tmpObject; } else { obj[k] = new fb.ChangeTrack(data[k], getRootObject(), propertyString + '[]'); } } return returnObject; } // data är ett objekt var keys = Object.keys(data); for (var i: number = 0; i < keys.length; i++) { if (keys[i] === 'root') { continue; } if (typeof data[keys[i]] === 'object') { // propertien var klassad som object if (data[keys[i]] instanceof Array) { // Propertien är en lista, kör rekursivt över alla objekt i listan obj[keys[i]] = []; recurse(obj[keys[i]], data[keys[i]], propertyString + '.' + keys[i]); } else if (data[keys[i]] === null) { // propertien var satt till null obj[keys[i]] = new fb.ChangeTrack(data[keys[i]], getRootObject(), propertyString + '.' + keys[i]); } else { // propertien är ett icke null objekt obj[keys[i]] = {}; recurse(obj[keys[i]], data[keys[i]], propertyString + '.' + keys[i]); } } else if (typeof data[keys[i]] === 'function') { // Gör ingenting om propertyn är en funktion } else if (typeof data[keys[i]] === 'undefined') { obj[keys[i]] = undefined; } else { // propertien var inte ett objekt utan innehöll ett datavärde obj[keys[i]] = new fb.ChangeTrack(data[keys[i]], getRootObject(), propertyString + '.' + keys[i]); } } }; // END Recurse if (typeof objectData === 'undefined') { return objectData; } else if (objectData === null) { returnObject = new fb.ChangeTrack(objectData, getRootObject(), getRootName()); } else if (objectData instanceof Array) { returnObject = []; recurse(returnObject, objectData, getRootName()); } else { returnObject = {}; recurse(returnObject, objectData, getRootName()); } return returnObject; } } }