|
import * as util from '../util'; |
|
import * as is from '../is'; |
|
|
|
let styfn = {}; |
|
|
|
|
|
styfn.getRenderedStyle = function( ele, prop ){ |
|
if( prop ){ |
|
return this.getStylePropertyValue( ele, prop, true ); |
|
} else { |
|
return this.getRawStyle( ele, true ); |
|
} |
|
}; |
|
|
|
|
|
styfn.getRawStyle = function( ele, isRenderedVal ){ |
|
let self = this; |
|
|
|
ele = ele[0]; |
|
|
|
if( ele ){ |
|
let rstyle = {}; |
|
|
|
for( let i = 0; i < self.properties.length; i++ ){ |
|
let prop = self.properties[ i ]; |
|
let val = self.getStylePropertyValue( ele, prop.name, isRenderedVal ); |
|
|
|
if( val != null ){ |
|
rstyle[ prop.name ] = val; |
|
rstyle[ util.dash2camel( prop.name ) ] = val; |
|
} |
|
} |
|
|
|
return rstyle; |
|
} |
|
}; |
|
|
|
styfn.getIndexedStyle = function( ele, property, subproperty, index ){ |
|
let pstyle = ele.pstyle( property )[subproperty][index]; |
|
return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty( property )[subproperty][0]; |
|
}; |
|
|
|
styfn.getStylePropertyValue = function( ele, propName, isRenderedVal ){ |
|
let self = this; |
|
|
|
ele = ele[0]; |
|
|
|
if( ele ){ |
|
let prop = self.properties[ propName ]; |
|
|
|
if( prop.alias ){ |
|
prop = prop.pointsTo; |
|
} |
|
|
|
let type = prop.type; |
|
let styleProp = ele.pstyle( prop.name ); |
|
|
|
if( styleProp ){ |
|
let { value, units, strValue } = styleProp; |
|
|
|
if( isRenderedVal && type.number && value != null && is.number(value) ){ |
|
let zoom = ele.cy().zoom(); |
|
let getRenderedValue = val => val * zoom; |
|
let getValueStringWithUnits = (val, units) => getRenderedValue(val) + units; |
|
let isArrayValue = is.array(value); |
|
let haveUnits = isArrayValue ? units.every(u => u != null) : units != null; |
|
|
|
if( haveUnits ){ |
|
if( isArrayValue ){ |
|
return value.map( (v, i) => getValueStringWithUnits(v, units[i]) ).join(' '); |
|
} else { |
|
return getValueStringWithUnits(value, units); |
|
} |
|
} else { |
|
if( isArrayValue ){ |
|
return value.map(v => is.string(v) ? v : '' + getRenderedValue(v)).join(' '); |
|
} else { |
|
return '' + getRenderedValue(value); |
|
} |
|
} |
|
} else if( strValue != null ){ |
|
return strValue; |
|
} |
|
} |
|
|
|
return null; |
|
} |
|
}; |
|
|
|
styfn.getAnimationStartStyle = function( ele, aniProps ){ |
|
let rstyle = {}; |
|
|
|
for( let i = 0; i < aniProps.length; i++ ){ |
|
let aniProp = aniProps[ i ]; |
|
let name = aniProp.name; |
|
|
|
let styleProp = ele.pstyle( name ); |
|
|
|
if( styleProp !== undefined ){ |
|
if( is.plainObject( styleProp ) ){ |
|
styleProp = this.parse( name, styleProp.strValue ); |
|
} else { |
|
styleProp = this.parse( name, styleProp ); |
|
} |
|
} |
|
|
|
if( styleProp ){ |
|
rstyle[ name ] = styleProp; |
|
} |
|
} |
|
|
|
return rstyle; |
|
}; |
|
|
|
styfn.getPropsList = function( propsObj ){ |
|
let self = this; |
|
let rstyle = []; |
|
let style = propsObj; |
|
let props = self.properties; |
|
|
|
if( style ){ |
|
let names = Object.keys( style ); |
|
|
|
for( let i = 0; i < names.length; i++ ){ |
|
let name = names[i]; |
|
let val = style[ name ]; |
|
let prop = props[ name ] || props[ util.camel2dash( name ) ]; |
|
let styleProp = this.parse( prop.name, val ); |
|
|
|
if( styleProp ){ |
|
rstyle.push( styleProp ); |
|
} |
|
} |
|
} |
|
|
|
return rstyle; |
|
}; |
|
|
|
styfn.getNonDefaultPropertiesHash = function( ele, propNames, seed ){ |
|
let hash = seed.slice(); |
|
let name, val, strVal, chVal; |
|
let i, j; |
|
|
|
for( i = 0; i < propNames.length; i++ ){ |
|
name = propNames[i]; |
|
val = ele.pstyle( name, false ); |
|
|
|
if( val == null ){ |
|
continue; |
|
} else if( val.pfValue != null ){ |
|
hash[0] = util.hashInt( chVal, hash[0] ); |
|
hash[1] = util.hashIntAlt( chVal, hash[1] ); |
|
} else { |
|
strVal = val.strValue; |
|
|
|
for( j = 0; j < strVal.length; j++ ){ |
|
chVal = strVal.charCodeAt(j); |
|
hash[0] = util.hashInt( chVal, hash[0] ); |
|
hash[1] = util.hashIntAlt( chVal, hash[1] ); |
|
} |
|
} |
|
} |
|
|
|
return hash; |
|
}; |
|
|
|
styfn.getPropertiesHash = styfn.getNonDefaultPropertiesHash; |
|
|
|
export default styfn; |
|
|