//validateAssetList.js
/*global adventurejs A*/
"use strict";
/**
* Serialize asset names in an array. Asset names may be nested
* inside objects in the array. A secondary effect of this function
* is that it converts object properties from strings to arrays,
* which corrects for cases of authors providing strings for
* properties that want arrays. For example: "skeleton key"
* would be converted to ["skeleton_key"].
* @method adventurejs#validateAssetList
* @memberOf adventurejs
* @param {String|Array} property
* @returns {Array}
*/
adventurejs.validateAssetList = function Adventurejs_validateAssetList( property )
{
if( "undefined" === typeof property ) return [];
if( "string" === typeof property )
{
property = A.stringToArray( property );
}
if( Array.isArray( property ) )
{
for( var i = 0; i < property.length; i++ )
{
// ex: [ "id" ]
if( "string" === typeof property[i] )
{
property[i] = A.serialize( property[i] );
}
// ex: [ {"id":['preposition']} ]
else if( Object(property[i]) === property[i] )
{
for( var key in property[i] ){
var value = property[i][key];
var id = A.serialize( key );
if( "string" === typeof value )
{
value = A.stringToArray( A.serialize(value) );
}
if( Array.isArray(value) || Object(value) === value )
{
value = A.validateAssetList( value );
}
delete property[i][key];
property[i][id] = value;
}
}
}
}
// ex: [ {"id":['preposition']} ]
else if( Object(property) === property )
{
for( var key in property ){
var value = property[key];
var id = A.serialize( key );
if( "string" === typeof value )
{
value = A.stringToArray( A.serialize(value) );
}
else if( Array.isArray(value) || Object(value) === value )
{
value = A.validateAssetList( value );
}
delete property[key];
property[id] = value;
}
}
return property;
};