@ -1,6 +1,14 @@
import { VNode , VNodeData } from '../vnode' ;
import { Module } from './module' ;
// because those in TypeScript are too restrictive: https://github.com/Microsoft/TSJS-lib-generator/pull/237
declare global {
interface Element {
setAttribute ( name : string , value : string | number | boolean ) : void ;
setAttributeNS ( namespaceURI : string , qualifiedName : string , value : string | number | boolean ) : void ;
}
}
export type Attrs = Record < string , string | number | boolean >
const xlinkNS = 'http://www.w3.org/1999/xlink' ;
@ -28,19 +36,16 @@ function updateAttrs(oldVnode: VNode, vnode: VNode): void {
} else if ( cur === false ) {
elm . removeAttribute ( key ) ;
} else {
// because those in TypeScript are too restrictive: https://github.com/Microsoft/TSJS-lib-generator/pull/237
type SetAttribute = ( name : string , value : string | number | boolean ) = > void ;
type SetAttributeNS = ( namespaceURI : string , qualifiedName : string , value : string | number | boolean ) = > void ;
if ( key . charCodeAt ( 0 ) !== xChar ) {
( elm . setAttribute as SetAttribute ) ( key , cur ) ;
elm . setAttribute ( key , cur ) ;
} else if ( key . charCodeAt ( 3 ) === colonChar ) {
// Assume xml namespace
( elm . setAttributeNS as SetAttributeNS ) ( xmlNS , key , cur ) ;
elm . setAttributeNS ( xmlNS , key , cur ) ;
} else if ( key . charCodeAt ( 5 ) === colonChar ) {
// Assume xlink namespace
( elm . setAttributeNS as SetAttributeNS ) ( xlinkNS , key , cur ) ;
elm . setAttributeNS ( xlinkNS , key , cur ) ;
} else {
( elm . setAttribute as SetAttribute ) ( key , cur ) ;
elm . setAttribute ( key , cur ) ;
}
}
}