ractive
Version:
Next-generation DOM manipulation
33 lines (24 loc) • 994 B
JavaScript
import namespaces from 'config/namespaces';
import enforceCase from 'virtualdom/items/Element/shared/enforceCase';
export default function ( attribute, name ) {
var colonIndex, namespacePrefix;
// are we dealing with a namespaced attribute, e.g. xlink:href?
colonIndex = name.indexOf( ':' );
if ( colonIndex !== -1 ) {
// looks like we are, yes...
namespacePrefix = name.substr( 0, colonIndex );
// ...unless it's a namespace *declaration*, which we ignore (on the assumption
// that only valid namespaces will be used)
if ( namespacePrefix !== 'xmlns' ) {
name = name.substring( colonIndex + 1 );
attribute.name = enforceCase( name );
attribute.namespace = namespaces[ namespacePrefix.toLowerCase() ];
if ( !attribute.namespace ) {
throw 'Unknown namespace ("' + namespacePrefix + '")';
}
return;
}
}
// SVG attribute names are case sensitive
attribute.name = ( attribute.element.namespace !== namespaces.html ? enforceCase( name ) : name );
}