ractive
Version:
Next-generation DOM manipulation
59 lines (40 loc) • 1.1 kB
JavaScript
// should this be combined with prototype/adapt.js?
var configure = {
lookup: function ( target, adaptors ) {
var i, adapt = target.adapt;
if ( !adapt || !adapt.length ) { return adapt; }
if ( adaptors && Object.keys( adaptors ).length && ( i = adapt.length ) ) {
while ( i-- ) {
let adaptor = adapt[i];
if ( typeof adaptor === 'string' ) {
adapt[i] = adaptors[ adaptor ] || adaptor;
}
}
}
return adapt;
},
combine: function ( parent, adapt ) {
// normalize 'Foo' to [ 'Foo' ]
parent = arrayIfString( parent );
adapt = arrayIfString( adapt );
// no parent? return adapt
if ( !parent || !parent.length) { return adapt; }
// no adapt? return 'copy' of parent
if ( !adapt || !adapt.length ) { return parent.slice(); }
// add parent adaptors to options
parent.forEach( a => {
// don't put in duplicates
if ( adapt.indexOf( a ) === -1 ) {
adapt.push( a );
}
});
return adapt;
}
};
function arrayIfString ( adapt ) {
if ( typeof adapt === 'string' ) {
adapt = [ adapt ];
}
return adapt;
}
export default configure;