import { Common } from '../../common' ; import { MapDom } from '../map-dom' ; import { Directive } from './directive.interface' ; export class CPStyle implements Directive { private readonly element : any ; private readonly attribute ; private map : MapDom ; private elementComment ; private elmScope ; constructor ( _element , _map ) { this . element = _element ; this . element [ 'cpStyle' ] = this ; this . map = _map ; this . attribute = Common . getAttributeCpStyle ( this . element ) ; this . elementComment = document . createComment ( 'cpStyle ' + this . attribute ) ; this . elmScope = Common . getScope ( _element ) ; } public create ( ) { this . init ( ) ; } public setStyleByObject ( style ) { if ( style && window [ 'capivara' ] . isObject ( style ) ) { Object . keys ( style ) . forEach ( ( key ) => { this . element . style . setProperty ( key . replace ( / /g , '' ) , style [ key ] ) ; } ) ; } } public init ( ) { try { this . attribute . split ( ',' ) . map ( ( attr ) => { return { key : attr . substring ( 0 , attr . indexOf ( ':' ) ) . replace ( /'/g , "" ) . replace ( /"/ , '' ) . replace ( /{/g , '' ) . replace ( /}/ , '' ) , value : Common . evalInMultiContext ( this . element , attr . substring ( attr . indexOf ( ':' ) + 1 , attr . length ) . replace ( /{/g , '' ) . replace ( /}/ , '' ) ) , } ; } ) . forEach ( ( style ) => { if ( window [ 'capivara' ] . isString ( style . value ) ) { this . element . style . setProperty ( style . key . replace ( / /g , '' ) , style . value ) ; } else { this . setStyleByObject ( style . value ) ; } } ) ; } catch ( e ) { this . setStyleByObject ( Common . executeFunctionCallback ( this . element , this . attribute ) ) ; } } }